Modbus Kumunikation Abfragen
Hallo,
da ich mit Modbus nicht wirklich soviel Ahnung habe und etwas mit dem Thema zu kämpfen habe hoffe ich das mir hier jemand weiterhelfen kann.
Problem: ich habe 2 Modbusmaster als Virtuelles gerät und einen Slave. Desweiteren senden und empfangen 2 andere Modbus geräte Daten.
Wie kann ich den Modbus überwachen das die Komunikation besteht und daten auch gesendet oder empfangen werden.
Da wenn: ein Teilnehmer keine Daten senden behält die SPS die alten Werte und zeigt mir nicht an das ein Fehler aufgetreten ist. Gibt es eine Möglichkeit das wenn keine Komunikation besteht diese Daten auf FALSE gesetzt werden oder zumindestens das eine Meldung kommt das ein Fehler aufgetreten ist. Ich Tappe da ein bischen im Dunklen.
Da ich über den Modbus PH Redox und Druckwerte abfrage bekomme ich es nicht mit wenn etwas nicht stimmt, da die letzen werte die gesendet wurden erhalten bleiben.
Gruss
da ich mit Modbus nicht wirklich soviel Ahnung habe und etwas mit dem Thema zu kämpfen habe hoffe ich das mir hier jemand weiterhelfen kann.
Problem: ich habe 2 Modbusmaster als Virtuelles gerät und einen Slave. Desweiteren senden und empfangen 2 andere Modbus geräte Daten.
Wie kann ich den Modbus überwachen das die Komunikation besteht und daten auch gesendet oder empfangen werden.
Da wenn: ein Teilnehmer keine Daten senden behält die SPS die alten Werte und zeigt mir nicht an das ein Fehler aufgetreten ist. Gibt es eine Möglichkeit das wenn keine Komunikation besteht diese Daten auf FALSE gesetzt werden oder zumindestens das eine Meldung kommt das ein Fehler aufgetreten ist. Ich Tappe da ein bischen im Dunklen.
Da ich über den Modbus PH Redox und Druckwerte abfrage bekomme ich es nicht mit wenn etwas nicht stimmt, da die letzen werte die gesendet wurden erhalten bleiben.
Gruss
Re: Modbus Kumunikation Abfragen
Hallo Ingo,
eine Möglichkeit die Daten automatisch auf FALSE zu setzen wenn keine Kommunikation besteht ist mir nicht bekannt.
Aber wir haben bei unseren Virtuellen Modbus Mastern die Möglichkeit über den Modbus-Register „Modbus_Master_Status“ den aktuellen Fehlercode auszulesen.
Auch für jede angelegte Aufgabe „Action“ gibt es einen Modbus-Register „Modbus_Action_Status“ der den aktuellen Fehlerkode enthält.
Hier findest du eine detaillierte Beschreibung.
Also du könntest den Status Abfragen und bei einem Fehler die Daten manuell auf FALSE setzen.
Gruß
Eduard
eine Möglichkeit die Daten automatisch auf FALSE zu setzen wenn keine Kommunikation besteht ist mir nicht bekannt.
Aber wir haben bei unseren Virtuellen Modbus Mastern die Möglichkeit über den Modbus-Register „Modbus_Master_Status“ den aktuellen Fehlercode auszulesen.
Auch für jede angelegte Aufgabe „Action“ gibt es einen Modbus-Register „Modbus_Action_Status“ der den aktuellen Fehlerkode enthält.
Hier findest du eine detaillierte Beschreibung.
Also du könntest den Status Abfragen und bei einem Fehler die Daten manuell auf FALSE setzen.
Gruß
Eduard
Re: Modbus Kumunikation Abfragen
Hallo Eduard,
Danke für diee Antwort. Das hift mir doh schon ungemein weiter, meine Frage ist nur wie dort beschrieben können 32 aufgaben abgearbeitet werden. Kann man die frei belegen z.b auf bestimmte sachen die vom Modbus gesendet oder gelesen werden?
Also z.b ich habe eine Variable Temp_in_xx kann ich diese also bei den Status abfragen?
Kann ich damit auch die String Variable abfragen oder wie wird die Funktion ob der Modbus läuft oder nicht erledigt.7 Das Tutorial ist super erklärt, aber ein bespiel wie es gemacht wird fehlt leider. ( was für Dumme).
Werde es mal versuchen mit einem neuen Testprogramm und schauen was passiert.
Danke für diee Antwort. Das hift mir doh schon ungemein weiter, meine Frage ist nur wie dort beschrieben können 32 aufgaben abgearbeitet werden. Kann man die frei belegen z.b auf bestimmte sachen die vom Modbus gesendet oder gelesen werden?
Also z.b ich habe eine Variable Temp_in_xx kann ich diese also bei den Status abfragen?
Kann ich damit auch die String Variable abfragen oder wie wird die Funktion ob der Modbus läuft oder nicht erledigt.7 Das Tutorial ist super erklärt, aber ein bespiel wie es gemacht wird fehlt leider. ( was für Dumme).
Werde es mal versuchen mit einem neuen Testprogramm und schauen was passiert.
Re: Modbus Kumunikation Abfragen
Also hier in meinem Beispiel habe ich in piCtory einen Modbus RTU Master konfiguriert um aus einem Stromzähler (Modbus RTU Slave) die importierte Energie (Modbus-Register 035C in hex ) auszulesen.
Anbei habe ich einen Ausschnitt aus dem Datenblatt des Stromzählers eingefügt. Um die importierte Energie auslesen zu können muss ich mir in PiCtory eine Aufgabe (Action) anlegen. Auf dem folgenden Bild ist es die Action ID 2. Der Modbus RTU Master liest jetzt zyklisch die sechs Modbus Register aus dem Stromzähler und diese landen in den Input_Word_5 bis Input_Word_10 Variablen. Wenn der Modbus Zugriff fehlschlägt, wird die Variable Modbus_Action_Status_2 einen Fehlerkode liefern.
Ich würde zum Beispiel in logiCAD3 den Fehlerkode der Variable Modbus_Action_Status_2 auswerten und dann entscheiden ob ich den Wert der Input_Word Variable benutze oder einen Default Wert. Nach einem Fehlerkode musst du natürlich diesen auch manuell zurücksetzen. Denn dieser bleibt so lange in diesem Register, bis in das Modbus-Register Modbus_Status_Reset_2 der Wert 1 eingetragen wird.
Anbei habe ich einen Ausschnitt aus dem Datenblatt des Stromzählers eingefügt. Um die importierte Energie auslesen zu können muss ich mir in PiCtory eine Aufgabe (Action) anlegen. Auf dem folgenden Bild ist es die Action ID 2. Der Modbus RTU Master liest jetzt zyklisch die sechs Modbus Register aus dem Stromzähler und diese landen in den Input_Word_5 bis Input_Word_10 Variablen. Wenn der Modbus Zugriff fehlschlägt, wird die Variable Modbus_Action_Status_2 einen Fehlerkode liefern.
Ich würde zum Beispiel in logiCAD3 den Fehlerkode der Variable Modbus_Action_Status_2 auswerten und dann entscheiden ob ich den Wert der Input_Word Variable benutze oder einen Default Wert. Nach einem Fehlerkode musst du natürlich diesen auch manuell zurücksetzen. Denn dieser bleibt so lange in diesem Register, bis in das Modbus-Register Modbus_Status_Reset_2 der Wert 1 eingetragen wird.
- Attachments
-
- piCtory_Action.jpg (20.97 KiB) Viewed 12095 times
-
- Stromzaehler_Ausschnitt.jpg (46.16 KiB) Viewed 12095 times
Re: Modbus Kumunikation Abfragen
Das ist doch mal eine Erklärung
Aber Verstehe ich das Richtig?
Der Modbus_Action_Status_1, 2 u.s.w ist der jeweiligen Action ID zugeordnet, genauso auch Action Reset. Sehe ich das Richtig? damit kann ich dann was anfangen. In der LC3 sollte das nicht das Problem sein dies zu verarbeiten mit dem Reset.
Danke dir für die Erklärung und dem Beispiel.
Aber Verstehe ich das Richtig?
Der Modbus_Action_Status_1, 2 u.s.w ist der jeweiligen Action ID zugeordnet, genauso auch Action Reset. Sehe ich das Richtig? damit kann ich dann was anfangen. In der LC3 sollte das nicht das Problem sein dies zu verarbeiten mit dem Reset.
Danke dir für die Erklärung und dem Beispiel.
Re: Modbus Kumunikation Abfragen
Danke Ingo für die lobenden Worte.
Du hast es richtig verstanden, Der Modbus_Action_Status ist der jeweiligen Action ID zugeordnet.
Du hast es richtig verstanden, Der Modbus_Action_Status ist der jeweiligen Action ID zugeordnet.
Re: Modbus Kumunikation Abfragen
Hallo Eduard.
ich habe es nun getestet. Leider bin ich etwas Verwirrt bei dem ganzen.
Ich habe 2 Virtuelle Modbus Master und spreche das 2te Virtuelle Gerät mit dem Modbus_Action_Status_1, 2,3, und 5 an. da ich auf diesen Inputs die Sensoren überwachen möchte auf dessen Funktion.
Desweiteren habe ich bei dem Modbus_Master_Status BYTE und dem Modbus_Reset BYTE ein hacken drinne für die LC3.
Wenn ich nun ein Fehler Provoziere indem ich den Modbus abklemme oder das Gerät ausschalte (Arduino) bringt er auf allen Modbus_Action_Status eine 6E als Ausgabe. Aber das Byte Modbus Status wird nicht gesetzt. Ist das nur für die Abfrage der Virtuellen Modbus Module gedacht?
Weil eigendlich will ich ja die Inputs mit den Modbus_Action_Status überwachen und mit dem dem Modbus_Status den eigendlichen Modbus. geht das so überhaupt von meinem Gedankengang her?
Ich habe am Arduino ETH drei sensoren wo ich die Daten an die SPS sende via Modbus TCP/IP, dort werden sie dann verarbeitet und weitergereicht an den nächsten Modbusteilnehmer, PC, wo sie auf dem Bildchirm dargestellt werden. Soweit so gut.
Nun wollte ich eben genau diese Überwachung haben das wenn ein Modbus gerät nicht Arbeitet oder ein sensor keine Daten an die SPS liefert diese dann eine Fehler Meldung ausgibt.
Ich hoffe ich habe es Verständlich ausgedrückt was ich machen möchte.
gruss
Ingo
ich habe es nun getestet. Leider bin ich etwas Verwirrt bei dem ganzen.
Ich habe 2 Virtuelle Modbus Master und spreche das 2te Virtuelle Gerät mit dem Modbus_Action_Status_1, 2,3, und 5 an. da ich auf diesen Inputs die Sensoren überwachen möchte auf dessen Funktion.
Desweiteren habe ich bei dem Modbus_Master_Status BYTE und dem Modbus_Reset BYTE ein hacken drinne für die LC3.
Wenn ich nun ein Fehler Provoziere indem ich den Modbus abklemme oder das Gerät ausschalte (Arduino) bringt er auf allen Modbus_Action_Status eine 6E als Ausgabe. Aber das Byte Modbus Status wird nicht gesetzt. Ist das nur für die Abfrage der Virtuellen Modbus Module gedacht?
Weil eigendlich will ich ja die Inputs mit den Modbus_Action_Status überwachen und mit dem dem Modbus_Status den eigendlichen Modbus. geht das so überhaupt von meinem Gedankengang her?
Ich habe am Arduino ETH drei sensoren wo ich die Daten an die SPS sende via Modbus TCP/IP, dort werden sie dann verarbeitet und weitergereicht an den nächsten Modbusteilnehmer, PC, wo sie auf dem Bildchirm dargestellt werden. Soweit so gut.
Nun wollte ich eben genau diese Überwachung haben das wenn ein Modbus gerät nicht Arbeitet oder ein sensor keine Daten an die SPS liefert diese dann eine Fehler Meldung ausgibt.
Ich hoffe ich habe es Verständlich ausgedrückt was ich machen möchte.
gruss
Ingo
Re: Modbus Kumunikation Abfragen
Hallo Ingo,
das Modbus_Master_Status byte zeigt dir nur den Status des Masters an und nicht den Status der Modbus Kommunikation.
Den Status der Modbus Kommunikation musst du über Modbus_action_Status abfragen.
Dein provozierter Fehler wird richtig erkannt ( 6 = Slave device or server is busy).
Hier ist eine Liste aller Fehlermeldungen:
1 Illegal function
2 Illegal data address
3 Illegal data value
4 Slave device or server failure
5 Acknowledge
6 Slave device or server is busy
7 Negative acknowledge
8 Memory parity error
10 Gateway path unavailable
11 Target device failed to respond
12 Invalid CRC
13 Invalid data
14 Invalid exception code
15 Too many data
Also musst du die Modbus_Action_Status an die LC3 übermitteln und diesen dort auswerten.
Gruß
Eduard
das Modbus_Master_Status byte zeigt dir nur den Status des Masters an und nicht den Status der Modbus Kommunikation.
Den Status der Modbus Kommunikation musst du über Modbus_action_Status abfragen.
Dein provozierter Fehler wird richtig erkannt ( 6 = Slave device or server is busy).
Hier ist eine Liste aller Fehlermeldungen:
1 Illegal function
2 Illegal data address
3 Illegal data value
4 Slave device or server failure
5 Acknowledge
6 Slave device or server is busy
7 Negative acknowledge
8 Memory parity error
10 Gateway path unavailable
11 Target device failed to respond
12 Invalid CRC
13 Invalid data
14 Invalid exception code
15 Too many data
Also musst du die Modbus_Action_Status an die LC3 übermitteln und diesen dort auswerten.
Gruß
Eduard
Re: Modbus Kumunikation Abfragen
Hallo Eduard,
gibt es bei euch ein Testprogramm womit ich jede Adresser von dem Modbus mit auslesen kann um zu sehen was hier Falsch läuft?.
Hintergrund des ganzen ist das ich auf den einzelnen Action_Status_bayts Fehler (6) bekomme sobald ich von der LC3 Software die Read Coils oder Write_Multible_coils benutze.
Da aber dort nur Taster verwendet werden die von der Visualisierung zur SPS gehen und der Status der taster wieder zurück zur visualisierung. Es wird aber keine Aktion ausgeführ und Trotzdem kommt das Byte.
Ich bin hier langsam am Verzweifeln. der Modbus auf der Gegenstelle (Dell Server) Funktioniert ohne Probleme. Das Komische ist, das es nur bei den Coils Auftritt und nicht bei Write Multible Register.
gibt es bei euch ein Testprogramm womit ich jede Adresser von dem Modbus mit auslesen kann um zu sehen was hier Falsch läuft?.
Hintergrund des ganzen ist das ich auf den einzelnen Action_Status_bayts Fehler (6) bekomme sobald ich von der LC3 Software die Read Coils oder Write_Multible_coils benutze.
Da aber dort nur Taster verwendet werden die von der Visualisierung zur SPS gehen und der Status der taster wieder zurück zur visualisierung. Es wird aber keine Aktion ausgeführ und Trotzdem kommt das Byte.
Ich bin hier langsam am Verzweifeln. der Modbus auf der Gegenstelle (Dell Server) Funktioniert ohne Probleme. Das Komische ist, das es nur bei den Coils Auftritt und nicht bei Write Multible Register.
Re: Modbus Kumunikation Abfragen
Hallo Ingo,
also nochmal für mich zum Verständnis.
Du hast bei deinem Aufbau 3 Modbus Geräte, bitte korrigiere mich wenn ich falsch liege.
1) Arduino (Modbus TCP Slave) mit unterschiedlichen Sensoren
2) RevPi (Modbus TCP Master)
3) PC (Modbus TCP Master)
Mit dem Modbus TCP Master den du in piCtory konfiguriert hast liest du die Modbusregister des Arduinos aus.
Beim auslesen der Modbusregister mit dem Function Code: Read Coils oder Write_Multible_Coils bekommst du auf dem Modbus_Action_Status den Fehlercode 6.
Hier wäre zu überprüfen ob der Arduino (Modbus TCP Slave) den Function Code Read Coil und Write_Multiple_Coils unterstützt.
Obwohl hier müsste dann auch der Fehlercode „1 = illegal function“ im Modbus_Action_Status stehen.
also nochmal für mich zum Verständnis.
Du hast bei deinem Aufbau 3 Modbus Geräte, bitte korrigiere mich wenn ich falsch liege.
1) Arduino (Modbus TCP Slave) mit unterschiedlichen Sensoren
2) RevPi (Modbus TCP Master)
3) PC (Modbus TCP Master)
Mit dem Modbus TCP Master den du in piCtory konfiguriert hast liest du die Modbusregister des Arduinos aus.
Beim auslesen der Modbusregister mit dem Function Code: Read Coils oder Write_Multible_Coils bekommst du auf dem Modbus_Action_Status den Fehlercode 6.
Hier wäre zu überprüfen ob der Arduino (Modbus TCP Slave) den Function Code Read Coil und Write_Multiple_Coils unterstützt.
Obwohl hier müsste dann auch der Fehlercode „1 = illegal function“ im Modbus_Action_Status stehen.