-> Hier kostenlos registrieren
Variabeln synchronisieren in PCWorx
Hallo Zusammen
Ich bin fleissiger Mitleser und stell nun das erstemal eine Frage:
Hardware: ILC151ETH mit IB IL RS 485/422 Pro
Ich habe ein Projekt welches via MODBUS/RTU mit einem BMS System kommunizieren soll.
Wir sind MODBUS Slave. Ich verwende den Baustein MB RTU 485 Slave V102.
Ich stehe nun vor dem Problem, dass ich meine internen Variabeln mit den MODBUS Registern ( z.B. im uidtHoldingRegisters Array) synchronisieren möchte.
Das heisst wenn das MODBUS Registe ändert soll sich auch meine interne Variable ändern und umgekehrt.
Man kann das ja folgendermassen lösen:
IF AltitudeOffset <> AltitudeOffsetOld Then
udtHoldingRegisters[0]:= UDINT_TO_Word(AltitudeOffset);
AltitudeOffsetOld:=AltitudeOffset;
End_If;
IF udtHoldingRegisters[0]<> udtHoldingRegistersOld[0] Then
AltitudeOffset:=WORD_TO_UDINT(udtHoldingRegisters[0]);
udtHoldingRegistersOld[0]:=udtHoldingRegisters[0];
End_If;
Diese Lösung ist jedoch sehr umständlich, wenn viele Variabeln synchronisiert werden sollen.
Nun zu meiner Frage: Wie Löst Ihr das ?
Ich wollte eigentlich das ganze mit einer Funktion lösen welcher ich die jeweilige Adresse der Variabeln übergeben würde. (Pointer)
Ich habe jedoch keine Möglichkeit in PC Worx gefunden das zu realisieren.
Besten Dank
Guss
Reto
Hallo Zusammen
Ich bin fleissiger Mitleser und stell nun das erstemal eine Frage:
Hardware: ILC151ETH mit IB IL RS 485/422 Pro
Ich habe ein Projekt welches via MODBUS/RTU mit einem BMS System kommunizieren soll.
Wir sind MODBUS Slave. Ich verwende den Baustein MB RTU 485 Slave V102.
Ich stehe nun vor dem Problem, dass ich meine internen Variabeln mit den MODBUS Registern ( z.B. im uidtHoldingRegisters Array) synchronisieren möchte.
Das heisst wenn das MODBUS Registe ändert soll sich auch meine interne Variable ändern und umgekehrt.
Man kann das ja folgendermassen lösen:
IF AltitudeOffset <> AltitudeOffsetOld Then
udtHoldingRegisters[0]:= UDINT_TO_Word(AltitudeOffset);
AltitudeOffsetOld:=AltitudeOffset;
End_If;
IF udtHoldingRegisters[0]<> udtHoldingRegistersOld[0] Then
AltitudeOffset:=WORD_TO_UDINT(udtHoldingRegisters[0]);
udtHoldingRegistersOld[0]:=udtHoldingRegisters[0];
End_If;
Diese Lösung ist jedoch sehr umständlich, wenn viele Variabeln synchronisiert werden sollen.
Nun zu meiner Frage: Wie Löst Ihr das ?
Ich wollte eigentlich das ganze mit einer Funktion lösen welcher ich die jeweilige Adresse der Variabeln übergeben würde. (Pointer)
Ich habe jedoch keine Möglichkeit in PC Worx gefunden das zu realisieren.
Besten Dank
Guss
Reto
Zuletzt bearbeitet: