eYe
Level-1
- Beiträge
- 759
- Reaktionspunkte
- 80
-> Hier kostenlos registrieren
Moin,
Ich muss über eine SCY21601 Schnittstelle (an einer Premium P572634M) über Kanal 0 mit Modbus einige Wörter (~40) aus drei Slaves auslesen. Die Adressen der Slaves sind 1,2 und 3.
In der Hilfe bin ich auf die Funktion READ_VAR gestoßen.
Ich habe bisher herausgefunden das ich noch eine Abfrage machen muss ob die Funktion noch arbeitet. Diese Information finde ich im ersten Bit der Management_Param.
Und ich muss wohl noch die Parameter "Timeout" und "Länge" in den Wörtern 3 und 4 der Management_Parm festlegen.
Damit würde der Aufruf in ST folgendermaßen aussehen.
Später kommen noch 3 Schreibaufträge dazu.
Nun zu meiner Frage: ^^
Mir wurde gesagt das ich maximal eine Funktion pro Zyklus starten darf und maximal 4 gleichzeitig aktiv sein können, sprich ich muss das ganze irgendwie steuern.
Wie wird dies in der Regel realisiert, meine erste spontane Eingebung war nun zwischen jeden Funktionsaufruf noch einen Timer von 100ms zu hängen. Ist das vernünftig oder bietet sich das besseres an?
MfG, eYe
Ich muss über eine SCY21601 Schnittstelle (an einer Premium P572634M) über Kanal 0 mit Modbus einige Wörter (~40) aus drei Slaves auslesen. Die Adressen der Slaves sind 1,2 und 3.
In der Hilfe bin ich auf die Funktion READ_VAR gestoßen.
Ich habe bisher herausgefunden das ich noch eine Abfrage machen muss ob die Funktion noch arbeitet. Diese Information finde ich im ersten Bit der Management_Param.
Und ich muss wohl noch die Parameter "Timeout" und "Länge" in den Wörtern 3 und 4 der Management_Parm festlegen.
Damit würde der Aufruf in ST folgendermaßen aussehen.
Code:
(* READ_VAR dient zum lesen von Daten über einen Kommunikationskanal *)
(* ADDR('Rack.Baugruppenplatz.Kanal.Adresse') wandelt die Adresse von String in ein Arrayformat um *)
(* READ_VAR(Address, Object_Type, First_Object, Object_Number, Management_Param, Receiving_Array); *)
IF NOT %MW3090.0 THEN
READ_VAR (ADDR('0.3.0.1'), '%MW', 100, 40, %MW3090:4, %MW3000:40);
%MW3092:=10; %MW3093:=80;
END_IF;
IF NOT %MW3190.0 THEN
READ_VAR (ADDR('0.3.0.2'), '%MW', 100, 40, %MW3190:4, %MW3100:40);
%MW3192:=10; %MW3193:=80;
END_IF;
IF NOT %MW3290.0 THEN
READ_VAR (ADDR('0.3.0.3'), '%MW', 100, 40, %MW3290:4, %MW3200:40);
%MW3292:=10; %MW3293:=80;
END_IF;
Nun zu meiner Frage: ^^
Mir wurde gesagt das ich maximal eine Funktion pro Zyklus starten darf und maximal 4 gleichzeitig aktiv sein können, sprich ich muss das ganze irgendwie steuern.
Wie wird dies in der Regel realisiert, meine erste spontane Eingebung war nun zwischen jeden Funktionsaufruf noch einen Timer von 100ms zu hängen. Ist das vernünftig oder bietet sich das besseres an?
MfG, eYe