5. Programmierung Modbus Verbindung

Nachdem das Ethernet-Shield eingerichtet wurde kann mit der Modbus-Verbindung zur Datenübertragung an die SPS begonnen werden. Bei diesem Verfahren handelt es sich um ein Master-Slave-Verfahren, bei dem Daten in Register gepackt und dann übertragen werden. Da die SPS lediglich Daten vom Arduino auslesen soll und nicht noch schreiben, wird der Befehl "Ireg" benutzt. Dieser hat die Registernummern 30001 - 39999. 

Da die Bibliotheken hierfür schon eingebunden wurden, werden als nächstes die Registernummern für die Datenpunkte deklariert. Hierfür werden Konstanten vom Typ INT erstellt, da jeder Datenpunkt eine feste Registernummer zugeordnet bekommt. In Abbildung 1 ist dies anschaulich für 6 Datenpunkt gemacht worden. Die Registernummern müssen dabei zwischen 0 und 9998 liegen, da der Bereich des "Ireg"-Befehls dieser Größe entspricht. In diesem Beispiel wurden die Nummern 100 - 105 genommen, hierzu im TIA-Portal später mehr. Zusätzlich muss noch ein Objekt vom Typ "ModbusIP" erstellt werden über welches später die Funktionen zur Übertragung aufgerufen werden. Das Ganze wird vor der Setup-Schleife programmiert.



Abbildung 1 Code Festlegung Registernummern, Quelle BBS2 Wolfsburg


Als nächster Schritt wird in der Setup-Schleife das erstellte Objekt mit der MAC- und IP-Adresse des Ethernet-Shield gefüttert. Dies geschieht über den Befehl "config". Außerdem werden die oben deklarierten Datenpunkte mithilfe des Objektes dem Modbus hinzugefügt, sodass in diese Daten reingeschrieben werden können. In Abbildung 2 ist der Code hierfür zu sehen.



Abbildung 2 Code Datenpunkte einbinden, Quelle BBS2 Wolfsburg


Nachdem nun die Registernummern festgelegt und diese eingebunden wurden, fehlt nur noch, dass dort Daten hineingeschrieben werden. Das Einfügen der Daten erfolgt innerhalb der Loop-Schleife. Es gibt hierbei zwei verschiedene Varianten, welche vom Prinzip jedoch gleich aufgebaut sind. Die erste Variante ist, dass die Daten kontinuierlich in das Register geschrieben werden. Hierfür befindet sich der Befehl "Ireg" vor der if-Schleife mit der Abfrage des Taster-Status. In dem Ireg-Befehl werden zwei Variablen benutzt. Die erste Variable entspricht der Registernummer und die zweite ist der Datenpunkt (Wert), welcher übertragen werden soll. Bei der zweiten Variante werden die Daten auf Tasterdruck übermittelt. Hierfür befindet sich der Ireg-Befehl innerhalb der if-Schleife Der Befehl ist jedoch der Gleiche wie bei der ersten Variante. Wichtig zu sagen ist noch, dass über diesen Befehl lediglich Integer übertragen werden können, weshalb die Temperaturwerte in dem Beispiel mit 100 multipliziert werden. Diese Multiplikation kann in der SPS dann wieder rückgängig gemacht werden. In Abbildung 3 ist die erste Variante und in Abbildung 4 die zweite Variante der Datenübertragung zu sehen.


 
Abbildung 3 Modbus außerhalb der if-Schleife, Quelle BBS2 Wolfsburg



Abbildung 4 Modbus innerhalb der if-Schleife, Quelle BBS2 Wolfsburg


Hiermit ist die Programmierung des Arduinos abgeschlossen. Der Code muss jetzt nur noch auf den Arduino UNO geladen werden (an USB des Computers anschließen und dann oben links der Pfeil, welcher nach rechts zeigt). Wichtig ist noch, dass es sich bei diesem Projekt lediglich um ein mögliches Beispiel handelt, welches beliebig erweitert/abgeändert werden kann.