TC2: Welche Varianten des Modbus Servers gibt/gab es?

Beiträge
6.399
Reaktionspunkte
1.487
Zuviel Werbung?
-> Hier kostenlos registrieren
Hallo,
ich habe hier die Aufgabe bekommen ein aus TC2 nach TC3 konvertiertes Programm zu analysieren und anzupassen.
Das TC2 Programm lief auf einem Beckhoff Panel, wobei ich derzeit leider nicht weiß, um welches Panel es sich gehandelt hat und welche TC2 Version vorhanden war.
Laut einem Kollegen hier beim Kunden soll das Panel einen Modbus Server bereitgestellt haben. Mein Problem ist jetzt, dass ich mich vor kurzem erst mit den Server Funktionalitäten von TC3 beschäftigt habe und da erfolgt die Bereitstellung der Daten für Modbus mit Hilfe von mehreren globalen Variablen die einen fest vorgegebenen Namen haben müssen. Laut Doku für TC2, die ich bei Beckhoff gefunden habe, soll das für TC2 auch gelten. Mein Problem ist jetzt, das ich diese Variablen nirgendwo im Programm finde. Das TC2 Programm dürfte so gut 10 Jahre alt, in Teilen auch älter sein. Die Daten für den Modbus liegen im Merkerbereich MB0.
Meine Frage wäre jetzt nun, ob die Server Funktionalität bei TC2 früher anders funktionierte und falls ja, wie?
 
Zuletzt bearbeitet:
Die Systematik zu Modbus TCP hat sich nicht zwischen TC2 und TC3 geändert.

Was allerdings in den letzten Jahren sich geändert hat (in TC2 und in TC3) ist der Inhalt der Config-Datei (
TcModbusSrv.xml). Dies Datei definiert u.a. das Mapping zwischen den Modbus-Adressen und den Daten in der SPS (e.g. Register, Variablen).
Versuch also die alte TcModbusSrv.xml-Datei zu retten.... Sie würde genauso auch noch funktionieren.

Und ganz wichtig noch!! Die Zählweise in TC3 für %M<x>-Merker ist Byteweise. in TC2 war es Wortweise für Worte bzw. DWORd für DWORD...
%MW2 zeigt in TC2 und in TC3 also nicht auf den gleichen Speicherplatz da die Offset-Berechnung sich unterscheidet.
 
Zuviel Werbung?
-> Hier kostenlos registrieren
Die Systematik zu Modbus TCP hat sich nicht zwischen TC2 und TC3 geändert.

Was allerdings in den letzten Jahren sich geändert hat (in TC2 und in TC3) ist der Inhalt der Config-Datei (
TcModbusSrv.xml). Dies Datei definiert u.a. das Mapping zwischen den Modbus-Adressen und den Daten in der SPS (e.g. Register, Variablen).
Versuch also die alte TcModbusSrv.xml-Datei zu retten.... Sie würde genauso auch noch funktionieren.

Und ganz wichtig noch!! Die Zählweise in TC3 für %M<x>-Merker ist Byteweise. in TC2 war es Wortweise für Worte bzw. DWORd für DWORD...
%MW2 zeigt in TC2 und in TC3 also nicht auf den gleichen Speicherplatz da die Offset-Berechnung sich unterscheidet.
Erstmal danke. Es reicht doch aber die Variablen mit dem passenden Namen einfach global anzulegen einem Merkerbereich müssen die ja nicht unbedingt zugewiesen werden? Zumindest funktioniert mein Testprogramm ohne das ich die Modbusvariablen noch zusätzlich einem Merkerbereich zugewiesen hätte.
Mein Problem ist halt, dass in dem ehemaligem TC2 Programm die ganzen Modbus Variablen (mb_Input_Coils, mb_Output_Coils, mb_Input_Registers, mb_Output_Registers) fehlen, obwohl das Zielsystem als Modbus Server gearbeitet haben soll. Daher meine Frage, ob es in TC2 früher mal anders lief.
 
Die alten Config-Dateien haben per Default auch %M-Bereich zum lesen/schreiben deklariert (neben den definierten Variablen ohne Adresse).

Was/wo gelesen/geschrieben wird ist für dich die große Frage. Natürlich kannst du die Daten in die definierte Variable(n) umkopieren und damit arbeiten. Solltest du weiter mit %MW.. arbeiten wollen dann musst du die *.xml anpassen (bzw. mit der alten arbeiten) UND genau aufpassen welche Daten nun wo sind.
 
Die alten Config-Dateien haben per Default auch %M-Bereich zum lesen/schreiben deklariert (neben den definierten Variablen ohne Adresse).

Was/wo gelesen/geschrieben wird ist für dich die große Frage. Natürlich kannst du die Daten in die definierte Variable(n) umkopieren und damit arbeiten. Solltest du weiter mit %MW.. arbeiten wollen dann musst du die *.xml anpassen (bzw. mit der alten arbeiten) UND genau aufpassen welche Daten nun wo sind.
Ah, habe im Handbuch jetzt den entsprechenden Hinweis gefunden. Dann kann man aber nur Ausgangs-Register nutzen und keine Coils/Inputs, oder?
 
Habe jetzt die alte XML nicht im Kopf. Coils und Inputs sind auch jedoch möglich (mit entsprechende XML).
Steige jetzt langsam durch die Sache durch, vielen Dank für den Schubs in die richtige Richtung.
Ja Coils und Inputs sind auch möglich, muss dann angepasst werden. Entsprechend wie es in der Standardkonfiguration für die Ausgangsregister erfolgt.
1742900312182.png
Ich muss nur mal herausfinden, welchen Offset ich dann angeben muss damit nicht beide im selben Merkerbereich starten. Wobei die waren bei Beckhoff doch nach Typ getrennt, dann dürfte das egal sein.
 
Zuletzt bearbeitet:
So hier kommt die Antwort auf meine eigene Frage, für alle die es interessiert. RTFM kann echt helfen.
Zunächst einmal, die Merkerbereiche überlappen sich, %MB0, %MW0 und %MX0.0 beginnen an der gleichen Adresse (Ich hoffe ich kann mir das endlich mal merken).
Mit der Index Gruppe 0x4020 wird auf einen %M Merkerbereich zugegriffen. Bei einem Index Offset von 0 wäre dies %MB0, %MW0, %MD0 oder %MX0.0 . Bei einem Offset von 4 würde man bei %MB4, %MW2, %MD1 oder %MX4.0 landen.
Mit der Index Gruppe 0x4021 kann bitweise auf den Merkerbereich zugegriffen werden. Der Index Offset enthält hier den Bit Offset. Er errechnet sich aus Byte * 8 + Bit, wobei jeweils bei 0 begonnen wird. Für 0.5 müsste also als Offset 5 und für 1.3 entsprechend 11 angegeben werden.
 
Zuletzt bearbeitet:
Zurück
Oben