Unity Pro - READ_VAR

eYe

Level-1
Beiträge
759
Reaktionspunkte
80
Zuviel Werbung?
-> 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.

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;
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
 
Niemand hier im Forum der schonmal mit einer Schneider Premium SPS MW's aus nem Slave über Modbus gelesen hat? :confused:
 
Zuviel Werbung?
-> Hier kostenlos registrieren
Hallo eYe !

Schau dir mal in der Hilfe die "Struktur der Managementparameter" an.

Ich würde das "Aktivitätsbit" verwenden.
Es wird beim Start auf 1 gesetzt und wird auf 0 zurückgesetzt, wenn seine Ausführung abgeschlossen ist.
Dies ist das erste Bit des ersten Elements der Tabelle.

Du verwendest das eigene Bit ja bereits für die Startverriegelung ->
Die Anderen Bit´s auch noch rein und es kann keine andere Kommunkiation laufen.

Grüsse

Max
 
Zurück
Oben