Variaeln synchronisieren in PCWorx

blabeli

Level-1
Beiträge
3
Reaktionspunkte
0
Zuviel Werbung?
-> 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
 
Zuletzt bearbeitet:
Hallo blabeli

Das was Du machst ist korrekt.
Um nicht so viele if Anweisungen zu schreiben kann man auch eventuell eine for schleife nutzen
In dem Beispiel werden hier 2 Arrays verglichen.
Beispiel:
for Index := 0 to 100 do
if udtHoldingRegister[Index] <> Value_Register[Index] then
Value_Register[Index] := udtHoldingRegister[Index];
end_if;
end_for;

Gruß
Uwe
 
Zurück
Oben