In einem meiner letzten Beiträge, hat ein Leser mich im Kommentarbereich gefragt, wie ich denn die IP-Adresse des Elements „Modbus_TCP_Slave“ dynamisch ändern kann. Damit dann ein konfigurieren der IP-Adresse eines Modbus Slaves zur Laufzeit in CODESYS möglich ist. Als Ausgangspunkt werde ich mein CODESYS Projekt aus dem Artikel „Modbus-Kommunikation in CODESYS“ weiterentwickeln und die notwendigen Komponenten hinzufügen. Zum Beispiel werde ich eine WebVisu als Eingabemaske erstellen.
Das Gesamte Projekt stelle ich euch hier zum Download zur Verfügung:
CODESYS-Blog-ModbusMaster-ExampleCAA Device Diagnosis
Um die Kommunikations-Einstellungen unseren Modbus Slave bearbeiten zu können benötigen wir die .ENABLE Funktionalität aus der CAA Device Diagnosis Bibliothek. Dadurch können wir das Gerät deaktivieren ⇒ Update durchführen ⇒ anschließend Gerät neustarten. Damit Ihr die Diagnose Funktionen in eurem CODESYS Projekt nutzen könnt, müsst Ihr folgenden Punkt in eurer SPS aktivieren ⇒ „Diagnose für Geräte aktivieren“
Kommunikationseinstellungen updaten
Den Modbus-Slave realisiert die CODESYS Entwicklungsumgebung, im Gerätebaum, durch einen Funktionsbaustein. Dadurch können wir über den Identifier „Modbus_TCP_Slave“ Statusinformationen (wie z.B. einen Fehler) abrufen oder Parameter bearbeiten. Wir nutzen die Methode „UpdateCommunicationSettings“ um die IP-Adresse des Parametrierten Slaves zu bearbeiten. Hier muss allerdings beachtet werden, dass die Kommunikationsparameter nur aktualisiert werden, wenn der Slave auf „Stopp“ steht. Dazu benötigen wir das Anfangs schon erwähnte ENABLE Property aus der Gerätediagnose.
Parameter UpdateCommunicationSettings
():
Name | Datentyp | Beschreibung |
ipAdress | ARRAY [0..3] OF BYTE | IP-Adresse |
uiPort | UNIT | Port |
Variablen Deklaration in CODESYS
gbyModbusSlave_IP : ARRAY[0..3] OF BYTE:= [192,168,178,48]; // IP Adress of Modbus Slave on Raspberry guiModbusSlave_Port : UINT:= 502; // Default Port
Vorausgesetzt, dass der Modbus-Slave deaktiviert ist, können wir mit folgendem Code-Snippet die Kommunikationsparameter ändern. Wenn der Status des Slaves noch auf „ModbusTCPComState.CONNECTED“ steht wird zunächst das ENABLE Property auf FALSE gesetzt.
//Update Communication Settings if Modbus Slave is disabled otherwise disable slave IF bUpdateCommunicationSettings THEN IF Modbus_TCP_Slave.ComState = ModbusTCPComState.OFF THEN Modbus_TCP_Slave.UpdateCommunicationSettings(gbyModbusSlave_IP,guiModbusSlave_Port); bUpdateCommunicationSettings:=FALSE; ELSE Modbus_TCP_Slave.Enable:=FALSE; END_IF END_IF //Restart Modbus Slave (connection can by checked by Modbus_TCP_Slave.ComState = ModbusTCPComState.CONNECTED) IF bRestartCommunication THEN bRestartCommunication:=FALSE; Modbus_TCP_Slave.Enable:=TRUE; END_IF
WebVisu um die IP-Adresse eines Modbus Slaves zur Laufzeit in CODESYS anzupassen
Damit das ganze Beispiel nicht zu langweilig ist, dachte ich mir, dass wir noch eine kleine WebVisu hinzufügen, um die Einstellungen vorzunehmen und den Kommunikationsstatus anzuzeigen.
Für all diejenigen, die bisher noch keine Visualisierung Elemente verwendet haben, möchte ich die notwendigen Schritte nun aufzeigen.
Kontextmenü Applikation öffnen (1) ⇒ Objekt hinzufügen (2) ⇒ Visualisierung.
Bei der ersten Visualisierung, die Ihr zu einem CODESYS Projekt hinzufügt, wird automatisch der Visualisierungsmanager eingebunden. Dabei öffnet sich folgendes Dialogfenster (hier bitte Auswahl selektieren ⇒ Hinzufügen)
Innerhalb des Visualisierungseditors habt Ihr nun eine Vielzahl von Widgets, mit denen Ihr euch eure eigene Visualisierung gestalten könnt. Dazu müsst Ihr die Toolbox „Werkzeuge“ (1) öffnen. Ich wähle hier zudem die Kategorie „Allgemeine Steuerelemente“ und füge dann z.B. eine Schaltfläche als Button zu meiner WebVisu hinzu.
Diese werden wir dann so parametrieren, dass die Methode zum Updaten der Kommunikationseinstellungen aufgerufen wird. Ich habe hierzu eine boolesche Variable „bUpdateCommunicationSettings“ in meinem PLC_PRG angelegt. Diese werden wir nun in der Toolbox Eigenschaften mit dem Button verbinden. Dazu Schaltfläche selektieren (1) ⇒ Eigenschaften (2) ⇒ Umschalten.Variable ⇒ „PLC_PRG.bUpdateCommunicationSettings“
Damit habt Ihr das erste Visualisierungselement eingefügt und parametriert. Die restlichen Elemente werden ähnlich bearbeitet. Ich persönlich finde das ganze Thema Visualisierungselemente und Bedieninterface ziemlich interessant, wenn auch sehr umfangreich. Hierzu plane ich gerade eine Artikelserie, welche die Grundlagen und verschiedene Problemstellungen bearbeitet.
Funktionscheck
Schlussendlich folgt noch die live Demonstration der Anwendung:
Schreibe einen Kommentar