TIA Modbus TCP Client mehr als 125 Register lesen

G

Gelöschtes Mitglied 74179

Guest
Zuviel Werbung?
-> 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 habe so etwas gerade programmiert, aber noch nicht in Betrieb genommen.
Ich habe es zumindest so programmiert, dass der FB nach DONE=true erst einmal mit REQ=false durchläuft, ich im nächsten Zyklus die geforderten Registeradressen ändere und dann wiederum im nächsten Zyklus mit REQ=true den neuen Auftrag anstoße. Ich hoffe mal dass es so auch funktioniert.
Das ist meine ich in der Doku auch vermerkt, wann die Adressen geändert werden dürfen.
 
Zuviel Werbung?
-> Hier kostenlos registrieren
Hallo Thomas,

in der Theorie ist mein Programm auch so aufgebaut. In der Praxis funktioniert es nur leider nicht so wie gedacht.
Möglich das ich einen Fehler im Ablauf habe.
Für die S7-300 habe ich einen Baustein für Modbus RTU und TTY mit mehreren "Paketen". Hier funktioniert das. Ist wohl in AWL geschrieben.
Da die S7.1200 ja leider kein AWL kann, habe ich versucht das im FUP nachzubauen (kenne mich mit SCL leider überhaupt noch nicht aus).

Darf ich fragen wie dein Programm geschrieben ist?
 
Zurück
Oben