Protokoll
Für die Kommunikation zwischen der Steuereinheit und den einzelnen Modulen wird eine RS-485 Schnittstelle, sowie das Modbus Protokoll verwendet. Es wurde eine flexible Registerstruktur für die Module definiert. Diese ermöglicht es der Steuereinheit beim initialen Abfragen aller Module zu erkennen was auf diesen genau implementiert ist. Ein Modul kann einen oder mehrere Typen von Sensoren/Aktoren beinhalten. Es können auch mehrere Sensoren/Aktoren eines Typs vorhanden sein. Die Modbus-Slave-Adresse eines Moduls kann über einen DIP Switch eingestellt werden.
An Adresse 0 der Registerstruktur steht die Anzahl der unterschiedlichen Typen von Sensoren/Aktoren. Die folgenden 'n' Adressen beinhalten dann die Startadressen der jeweiligen Typen. An der Startadresse der jeweiligen Typen liegt die dem Typ zugewiesene ID zur eindeutigen Kennung. Danach folgt die Anzahl der vorhandenen Sensoren/Aktoren dieses Typs. Die folgenden 'n' Adressen beinhalten die jeweiligen Sensor-/Aktordaten zur Steuerung der Ein- und Ausgänge des Moduls.
Die Sensor-/Aktordaten werden als ganze Zahlen übertragen, um ein einfaches Debuggen der Schnittstelle zu ermöglichen. Beim Durchflusssensor wird beispielsweise der Durchfluss auf centi l/min umgerechnet.
Sequenzdiagramm
Das Sequenzdiagramm zeigt den Ablauf der Kommunikation zwischen der Steuereinheit und den Modulen. Jede Sekunde fragt die Steuereinheit die aktuellen Registerwerte der Module ab. Wurden vom Benutzer im Userinterface Änderungen vorgenommen werden diese an das jeweilige Modul übertragen. Der Registerzugriff löst in den Modulen eine Aktualisierung der Registerwerte, sowie der Peripherals aus. Nach erfolgter Aktualisierung werden die Registerwerte an die Steuereinheit zurückgeschickt.
Modbus Implementierung
Modbus ist ein freies serielles Kommunikationsprotokoll welches 1979 von Modicon veröffentlicht wurde. In einem Standard Modbus Netzwerk gibt es einen Master und bis zu 255 Slaves (8 Bit Slave Adresse, 0 zumeist für Broadcast Nachrichten). Der Master kann sowohl lesend, als auch schreibend auf die Slaves zugreifen. Das erste Byte in einer Nachricht vom Master ist immer die Adresse des Slaves den er ansprechen möchte. Somit wissen die Slaves nach einem Byte ob sie die Nachricht ignorieren können oder nicht. Das zweite Byte beinhaltet den Function Code. Dieser definiert die vom Slave auf den Registern auszuführende Funktion. Am Ende jeder Nachricht wird ein 2 Byte großer CRC angehängt. Der betroffene Slave antwortet mit seiner Adresse, dem gleichen Function Code und ebenfalls einem 2 Byte großen CRC. Im Fehlerfall wird anstelle des Function Codes ein Exception Code retourniert.
Die Firmware erlaubt es bis zu 256 Module (Slaves) mit der Steuereinheit (Master) zu verbinden. Broadcast Nachrichten auf Adresse 0 sind nicht vorgesehen. Folgende Function Codes werden von der Firmware unterstützt:
Function Code | Action | Table Name |
03 (0x03) | Read | Read Holding Registers |
06 (0x06) | Write single | Write Holding Register |
16 (0x10) | Write multiple | Write Holding Registers |