-> Hier kostenlos registrieren
Hallo zusammen,
ich habe in meinem Programm auf einer Wago PFC 100 eine Modbusverbindung mittels dem SimpleModbusTCP Master FB aus der Wago Bibliothek aufgebaut.
Verbindung usw klappt super.
Allerdings kann ich maximal 125 Register gleichzeitig vom Slave lesen wenn ich das richtig verstanden habe...
Jetzt möchte ich aber meine Register 0 bis 10 und 200 bis 210 auslesen und in Variablen (im Code array_1 bzw array_2) im Programm ablegen, auch das funktioniert soweit, allerdings werden ab und zu kurzzeitig die Werte vom Reg. 0 bis 10 in die Variablen geschrieben wo eigentlich 200 bis 210 rein sollen.
Habe schon Verzögerungen zwischen den Anweisungen eingebaut, bringt aber nicht viel...
Hier mal ein Ausschnitt von meinem Code:
Mache ich irgendwas grundsätzlich falsch??
Case x OF
1: (**)
2:
IF NOT xModbusRW THEN
(* Register 200 bis 210 lesen*)
utQuery.bUnitId := 1;
utQuery.bFunctionCode := 16#04; // read input registers
utQuery.uiReadAddress := 200; // Startaddress
utQuery.uiReadQuantity := 10; // Quantity of wanted registers
xModbusRW := TRUE;
ELSE
array_1 := utResponse.awData; (* Registerinhalt 200 bis 210 speichern *)
(* Nächste Anweisung verzögern*)
IF z > 30 THEN
x := 3;
z := 0;
ELSE
z := z +1;
END_IF
END_IF
3: (**)
4:
IF NOT xModbusRW THEN
(* Register 0 bis 10 lesen *)
utQuery.bFunctionCode := 16#04; // read input registers
utQuery.uiReadAddress := 0; // Startaddress
utQuery.uiReadQuantity := 10; // Quantity of wanted registers
xModbusRW := TRUE;
ELSE
array_2 := utResponse.awData; (* Registerinhalt 0 bis 10 speichern *)
(* Nächste Anweisung verzögern*)
IF z > 30 THEN
x := 5;
z := 0;
ELSE
z := z +1;
END_IF
END_IF
end_Case
//--- call cyclic the master --------------
myTcpMaster( utQuery := utQuery,
xTrigger := xModbusRW,
utResponse := utResponse
);
Hoffentlich verständlich.. Danke schon mal für eure Mühe!
VG
Felix
ich habe in meinem Programm auf einer Wago PFC 100 eine Modbusverbindung mittels dem SimpleModbusTCP Master FB aus der Wago Bibliothek aufgebaut.
Verbindung usw klappt super.
Allerdings kann ich maximal 125 Register gleichzeitig vom Slave lesen wenn ich das richtig verstanden habe...
Jetzt möchte ich aber meine Register 0 bis 10 und 200 bis 210 auslesen und in Variablen (im Code array_1 bzw array_2) im Programm ablegen, auch das funktioniert soweit, allerdings werden ab und zu kurzzeitig die Werte vom Reg. 0 bis 10 in die Variablen geschrieben wo eigentlich 200 bis 210 rein sollen.
Habe schon Verzögerungen zwischen den Anweisungen eingebaut, bringt aber nicht viel...
Hier mal ein Ausschnitt von meinem Code:
Mache ich irgendwas grundsätzlich falsch??
Case x OF
1: (**)
2:
IF NOT xModbusRW THEN
(* Register 200 bis 210 lesen*)
utQuery.bUnitId := 1;
utQuery.bFunctionCode := 16#04; // read input registers
utQuery.uiReadAddress := 200; // Startaddress
utQuery.uiReadQuantity := 10; // Quantity of wanted registers
xModbusRW := TRUE;
ELSE
array_1 := utResponse.awData; (* Registerinhalt 200 bis 210 speichern *)
(* Nächste Anweisung verzögern*)
IF z > 30 THEN
x := 3;
z := 0;
ELSE
z := z +1;
END_IF
END_IF
3: (**)
4:
IF NOT xModbusRW THEN
(* Register 0 bis 10 lesen *)
utQuery.bFunctionCode := 16#04; // read input registers
utQuery.uiReadAddress := 0; // Startaddress
utQuery.uiReadQuantity := 10; // Quantity of wanted registers
xModbusRW := TRUE;
ELSE
array_2 := utResponse.awData; (* Registerinhalt 0 bis 10 speichern *)
(* Nächste Anweisung verzögern*)
IF z > 30 THEN
x := 5;
z := 0;
ELSE
z := z +1;
END_IF
END_IF
end_Case
//--- call cyclic the master --------------
myTcpMaster( utQuery := utQuery,
xTrigger := xModbusRW,
utResponse := utResponse
);
Hoffentlich verständlich.. Danke schon mal für eure Mühe!
VG
Felix