G
Gelöschtes Mitglied 74179
Guest
-> Hier kostenlos registrieren
Hallo zusammen,
ich brauche dringend einen Denkanstoß für eine Programmierung.
Ich habe eine S7-1200 welche als Modbus TCP Client arbeitet.
Soweit funktioniert auch die Kommunikation mit dem Server.
Mein Problem ist nun, dass die Anzahl der Register welche im Funktionscode 3 in einem Auftrag gelesen werden können ja leider auf 125 begrenzt sind.
Insgesamt muss ich aber 500 Register lesen.
Ich versuche dies nun mit einem FB Aufruf zu realisieren.
Dazu gibt es nun einen DB mit 5 ARRAYs mit jeweils 125 Int. Werten.
ARRAY 0 liegt am MB-CLIENT_FB an MB_DATA_PTR und dient als Datenpuffer für die aktuelle Modbus Anfrage.
ARRAY 1-4 sind die Ziele der der Empfangen Daten.
Je nach Auftrag wird der Inhalt von ARRAY 0 in ARRAY 1,2,3 oder 4 kopiert.
Mein gewünschtes Prinzip funktioniert auch bei einer händischen Steuerung.
Sprich ich Rücksetze den REQ Eingang; Lade dann die gewünschte Register Adresse in MB_DATA_ADR.
Setze dann den REQ wieder. Mit der Rückmeldung DONE (und einem Vergleich der MB_DATA_ADR) wird dann über ein MOVE_BLK von Array 0 in Array X kopiert.
Nun versuche ich diesen Ablauf zu automatisieren, was mir bisher leider nicht gelungen ist.
Ich bekomme dann im am STATUS den Wert 8200 "Eine andere Modbus-Anfrage wird zur Zeit über den Port verarbeitet".
Ich vermute, dass sich hier zeitlich etwas überschneidet?
Vielleicht kann mir das jemand einen Schups in die richtige Richtung geben?
Level zwei wäre dann eine variable Beschreibung der MB_DATA_ADR um mir den Schritt mit dem MOVE_BLK zu sparen.
Weis dazu jemand eine Lösung?
Vielen Dank im Voraus
ich brauche dringend einen Denkanstoß für eine Programmierung.
Ich habe eine S7-1200 welche als Modbus TCP Client arbeitet.
Soweit funktioniert auch die Kommunikation mit dem Server.
Mein Problem ist nun, dass die Anzahl der Register welche im Funktionscode 3 in einem Auftrag gelesen werden können ja leider auf 125 begrenzt sind.
Insgesamt muss ich aber 500 Register lesen.
Ich versuche dies nun mit einem FB Aufruf zu realisieren.
Dazu gibt es nun einen DB mit 5 ARRAYs mit jeweils 125 Int. Werten.
ARRAY 0 liegt am MB-CLIENT_FB an MB_DATA_PTR und dient als Datenpuffer für die aktuelle Modbus Anfrage.
ARRAY 1-4 sind die Ziele der der Empfangen Daten.
Je nach Auftrag wird der Inhalt von ARRAY 0 in ARRAY 1,2,3 oder 4 kopiert.
Mein gewünschtes Prinzip funktioniert auch bei einer händischen Steuerung.
Sprich ich Rücksetze den REQ Eingang; Lade dann die gewünschte Register Adresse in MB_DATA_ADR.
Setze dann den REQ wieder. Mit der Rückmeldung DONE (und einem Vergleich der MB_DATA_ADR) wird dann über ein MOVE_BLK von Array 0 in Array X kopiert.
Nun versuche ich diesen Ablauf zu automatisieren, was mir bisher leider nicht gelungen ist.
Ich bekomme dann im am STATUS den Wert 8200 "Eine andere Modbus-Anfrage wird zur Zeit über den Port verarbeitet".
Ich vermute, dass sich hier zeitlich etwas überschneidet?
Vielleicht kann mir das jemand einen Schups in die richtige Richtung geben?
Level zwei wäre dann eine variable Beschreibung der MB_DATA_ADR um mir den Schritt mit dem MOVE_BLK zu sparen.
Weis dazu jemand eine Lösung?
Vielen Dank im Voraus