-> Hier kostenlos registrieren
Guten Tag miteinander!
Ich versuche derzeit meine Steuerung zu optimieren und würde gerne wissen ob es eine andere oder einfachere Möglichkeit gibt, die FbDigitalTwinMbSlaveDevice zu implementieren.
Ich habe in der ersten Version 172 Modbusanfragen die ~45sek brauchen bis alle Werte abgefragt werden.
Meine Idee wäre, die 172 Adressen mit "ReadQuantity" zusammenzufassen und zu gruppieren in einer separaten GVL, leider habe ich ein Verständnisproblem mit (THIS^) und allgemein finde ich keinen Lösungsweg für mein Ziel.
Der Grund ist, dass ich für die Visualisierung z.b. Temperaturanzeigen öfter abfrage als die Alarme von 2 Klimageräten.
Mit dieser Definition erhalte ich im Moment den Fehler vom GVL: "C0395: Die Anzahl von 'FB_Init'-Initialisierern (0) stimmt nicht mit der Anzahl der Arrayelemente (3) überein". und komme da nicht weiter.
Ziel wäre für mich, dass ich quasi eine einheitliche FbQuery habe, welche ich mit unterschiedlich grossen Modbusanfragen füttern kann und in einer separaten Funktionsblock die Werte dann aufbereite.
Gruss
BBM
Ich versuche derzeit meine Steuerung zu optimieren und würde gerne wissen ob es eine andere oder einfachere Möglichkeit gibt, die FbDigitalTwinMbSlaveDevice zu implementieren.
Ich habe in der ersten Version 172 Modbusanfragen die ~45sek brauchen bis alle Werte abgefragt werden.
Code:
FUNCTION_BLOCK FbQueryRead EXTENDS WagoAppPlcModbus.FbDigitalTwinMbSlaveDevice
VAR
r_FbQuery: ARRAY[1..172] OF FbQuery(THIS^) :=
[
(* Digital Variables (Coils) *)
(* Unit Status *)
( _bFunctionCode := 2, _uiReadAddress := 001, _uiReadQuantity := 1),
( _bFunctionCode := 2, _uiReadAddress := 002, _uiReadQuantity := 1),
etc...
Der Grund ist, dass ich für die Visualisierung z.b. Temperaturanzeigen öfter abfrage als die Alarme von 2 Klimageräten.
Code:
aQL_rStatus: ARRAY[1..3] OF FbQuery() :=
[
(* Unit Status *)
// General Status
( _bFunctionCode := 2, _uiReadAddress := 001, _uiReadQuantity := 11), (* 001 - 011 *)
// AC Status
( _bFunctionCode := 2, _uiReadAddress := 012, _uiReadQuantity := 6), (* 012 - 017 *)
// Free cooler / Inverter Compressor
( _bFunctionCode := 2, _uiReadAddress := 018, _uiReadQuantity := 2) (* 018 - 019 *)
];
aQL_rAlarms: ARRAY[1..1] OF FbQuery() :=
[
(* Alarms *)
( _bFunctionCode := 2, _uiReadAddress := 030, _uiReadQuantity := 54) (* 030 - 083 *)
];
und so weiter...
Ziel wäre für mich, dass ich quasi eine einheitliche FbQuery habe, welche ich mit unterschiedlich grossen Modbusanfragen füttern kann und in einer separaten Funktionsblock die Werte dann aufbereite.
Gruss
BBM

