Schade das sich sich dazu noch niemand geäußert hat.
Ich hab ein Demodatei erstellt, die eine erste idee darstellt, wie man die Sensoren und systeme konfigurieren können soll. Vom XML-Schema hängt viel ab, wie allgemein so ein programm sein wird. Jedenfalls hab ich heute das erste mal ein LUA-Programm mit C++ Interpretiert, und bin davon überzeugt dass sich Skriptsprachen für die Sensorauswertung von komplexeren Protokollen eignet. Immerhin ist es nicht sehr dynamisch wenn man für jedes kleine Protokoll den Sourcecode erweitern und neu compilieren muss.
Ich bin mir so gut wie sicher dass diese version von XML-Schema sicher noch ein paar große lücken aufweist. Besonders in der Art wie die Daten ausgelesen werden, und mit welchen Timing (z.b. muss ich in ein kompassmodul von mir zuerst 3 Befehle im 1ms takt schreiben, bevor ich davon lesen kann). Der Zugriff auf die Daten würde warscheinlich über std::set mit den Namen im XML-File geschehen. z.B. wie
Code:
double Altitude = Sensor["GPS_Altitude"].GetValue();
Code:
<?xml version="1.0"?>
<bus-controller bussystem="i2c">
<name>I2C</name>
<device>/dev/i2c-1</device>
<interrupt-pin>18</interrupt-pin>
<clock>100kHz</clock>
<enabled>yes</enabled>
</bus-controller>
<bus-controller bussystem="rs232">
<name>COM0</name>
<device>/dev/ttyAMA0</device>
<baudrate>9600</baudrate>
<parity-bit>no</parity-bit>
<stop-bits>1</stop-bits>
</bus-controller>
<i2c-slave bus-controller="I2C">
<name>PCF8574A</name>
<adress>0x38</adress>
<generate-interrupt>yes</generate-interrupt>
<maxclock>100kHz</maxclock>
<rw-instructions>
<read bytes="1" position="0"/>
</rw-instructions>
<sensor datatype="boolean">
<name>Sensor1</name>
<data>0.0</data> <!-- Byte 0, Bit 0-->
<invert>yes</invert>
<refresh-time>100ms</refresh-time>
</sensor>
</i2c-slave>
<sensor i2c-slave="PCF8574A" datatype="boolean">
<name>Sensor1</name>
<data>
<databit>0.1</databit> <!-- Byte 0, Bit 1-->
</data>
<refresh-time>50Hz</refresh-time>
</sensor>
<rs232-slave bus-controller="COM0">
<name>GPS_0</name>
<rw-instructions>
<read savetype="ringbuffer" bytes="100" startbyte="$" stopbyte="\r\n"/>
</rw-instructions>
</rs232-slave>
<sensor rs232-slave="GPS_0" datatype="float">
<name>GPS_Altitude</name>
<data>
<script language="lua" file="gps.lua" function="gps_height"/>
</data>
</sensor>
<sensor rs232-slave="GPS_0" datatype="float">
<name>GPS_Speed</name>
<data>
<script language="lua" file="gps.lua" function="gps_speed"/>
</data>
</sensor>
Was sagt ihr dazu? Ich finde es ist sicher nicht die einfachste möglichkeit, aber es geht mir besonders auch um leistungsfähigkeit. Es soll später dann so sein, dass man einfach den sensor definiert, und er danach im Programm verwendet werden kann.
mfg, pointhi
Lesezeichen