Modbus Kumunikation Abfragen

Rund um die Software von Revolution Pi
User avatar
Ingo
Posts: 267
Joined: 10 Nov 2016, 21:56
Location: Luth.Wittenberg

Modbus Kumunikation Abfragen

Post by Ingo »

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
Eduard
KUNBUS
Posts: 209
Joined: 18 Jun 2018, 16:16

Re: Modbus Kumunikation Abfragen

Post by Eduard »

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
User avatar
Ingo
Posts: 267
Joined: 10 Nov 2016, 21:56
Location: Luth.Wittenberg

Re: Modbus Kumunikation Abfragen

Post by Ingo »

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.
Eduard
KUNBUS
Posts: 209
Joined: 18 Jun 2018, 16:16

Re: Modbus Kumunikation Abfragen

Post by Eduard »

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.
Stromzaehler_Ausschnitt.jpg
Stromzaehler_Ausschnitt.jpg (46.16 KiB) Viewed 12091 times
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.
piCtory_Action.jpg
piCtory_Action.jpg (20.97 KiB) Viewed 12091 times
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
piCtory_Action.jpg (20.97 KiB) Viewed 12092 times
Stromzaehler_Ausschnitt.jpg
Stromzaehler_Ausschnitt.jpg (46.16 KiB) Viewed 12092 times
User avatar
Ingo
Posts: 267
Joined: 10 Nov 2016, 21:56
Location: Luth.Wittenberg

Re: Modbus Kumunikation Abfragen

Post by Ingo »

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.
Eduard
KUNBUS
Posts: 209
Joined: 18 Jun 2018, 16:16

Re: Modbus Kumunikation Abfragen

Post by Eduard »

Danke Ingo für die lobenden Worte.
Du hast es richtig verstanden, Der Modbus_Action_Status ist der jeweiligen Action ID zugeordnet.
User avatar
Ingo
Posts: 267
Joined: 10 Nov 2016, 21:56
Location: Luth.Wittenberg

Re: Modbus Kumunikation Abfragen

Post by Ingo »

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
Eduard
KUNBUS
Posts: 209
Joined: 18 Jun 2018, 16:16

Re: Modbus Kumunikation Abfragen

Post by Eduard »

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
User avatar
Ingo
Posts: 267
Joined: 10 Nov 2016, 21:56
Location: Luth.Wittenberg

Re: Modbus Kumunikation Abfragen

Post by Ingo »

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.
Eduard
KUNBUS
Posts: 209
Joined: 18 Jun 2018, 16:16

Re: Modbus Kumunikation Abfragen

Post by Eduard »

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.
Post Reply