TIA Timer in Multiinstanz

spirit

Level-1
Beiträge
961
Reaktionspunkte
23
Zuviel Werbung?
-> Hier kostenlos registrieren
Hi, habe eine kurze Frage zur Multiinstanz …

In einem FB habe ich eine Instanz programmiert; diese enthält unter anderem in dem STAT-Bereich einen SFB4 (TON).


Gibt es nun eine "elegantere" Möglichkeit an den Timerausgang heranzukommen, als in dem Beispiel (über Multiinstanz-DB) unten? :confused:

Code:
U  "InstanzDB".Timer.Q
U  M0.0
=  A3.0
 
Ich nehme an, du willlst auf den Timer im Stat bereich des eigenen FBs zugreifen und nicht irgendwie von extern.

dann
U #Timerbezeichnung.Q
= #irgendwas (M0.0 ist eine globale Adresse, hat in einem multiinstanzierten FB normalerweise nix zu suchen)

mfG René
 
Zuviel Werbung?
-> Hier kostenlos registrieren
In dem FB, da wo Du den Timer aufrufst, den Timer-Ausgang auf eine FB-OUTPUT-Variable kopieren. Oder zunächst auf eine STAT und danach die STAT auf den OUTPUT.
Ist sowieso besser, den Timer-Ausgang nur an einer einzigen Stelle abzufragen, weil er sich zwischen verschiedenen Abfragen geändert haben kann.

Harald
 
Ich nehme an, du willlst auf den Timer im Stat bereich des eigenen FBs zugreifen und nicht irgendwie von extern.

dann
U #Timerbezeichnung.Q
= #irgendwas (M0.0 ist eine globale Adresse, hat in einem multiinstanzierten FB normalerweise nix zu suchen)


mfG René

Hallo René,

doch ich meinte schon einen Zugriff von EXTERN.
 
In dem FB, da wo Du den Timer aufrufst, den Timer-Ausgang auf eine FB-OUTPUT-Variable kopieren. Oder zunächst auf eine STAT und danach die STAT auf den OUTPUT.
Ist sowieso besser, den Timer-Ausgang nur an einer einzigen Stelle abzufragen, weil er sich zwischen verschiedenen Abfragen geändert haben kann.

Harald

Danke Harald.

Aber müsste ich dann nicht

Code:
"InstanzDB".Timer.Q

an den Eingang des aufzurufenden FBs/FCs schreiben? :confused:

Bzw. was ist mit auf den Ausgang kopieren gemeint?
 
Zuletzt bearbeitet:
Zuviel Werbung?
-> Hier kostenlos registrieren
In dem Baustein in dem der Timer deklariert ist. In dem musst du zusätzlich einen Ausgang deklarieren und diesen an den Timeraufruf anschliessen.
Im Aufrufenden Baustein schliesst du entsprechend den Ausgang an.

Das ist insbesondere bei den 1200/1500 CPUs wichtig da dort Timer nur aktualisiert werden wenn deren Instanz abgefragt wird. Keine Ahnung ob der das merkt wenn man die Multiinstanzvariable ausserhalb der Instanz abfragt auch aktualisiert wird.
Aber abfragen von Instanzen ausserhalb der Instanz ist sowieso Pfui.

mfG René
 
Das gilt für alle IEC Timer, auch in S7-300/400.

Das stimmt eben nicht.
In S7-300/400 kannn man den Timer aufrufen
#timer_1(IN := #timeon);

Und in der Variablentabelle kann man ET anschauen wie es läuft.
Auch wenn im Programm ET oder P nirgens abgefragt werden.

in s7-1500 wird ET und P nicht aktualisiert. Wenn ET oder P nicht wirklich abgefragt werden. Man kann diese also auch nicht in der VAT beobachten.

in der S7-300 hat ET z.b auch im gesamten Zyklus denselben werden bis zum nächsten aufruf der instanz #timer_1(IN := #timeon);

Ich kann also Q überall abfragen und er ist überall im Zyklus gleich.

Bei der 1500 kann Q mitten im Zyklus den Zustand ändern. Also eher wie ein S5 Timer.

mfG René
 
Zurück
Oben