TIA TIA V12 - Auf Variablen einer Multiinstanz zugreifen

Pico1184

Level-2
Beiträge
332
Reaktionspunkte
9
Zuviel Werbung?
-> Hier kostenlos registrieren
Hallo Leute,


Ist es unter TIA nicht mehr möglich z.B. beim Aufruf von TON als Multiinstanz die IN Variablen der Multiinstanz direkt zu verwenden?


Code:
IF #IN_BO_Clock THEN
      S_FB_EVZ.IN := true;
ELSE
      S_FB_EVZ.IN := false;
END_IF;


S_FB_EVZ(IN:=   ,  PT=T#1S,  ET:=    , Q=#Out_BO_CLK_ON );


Hier bekomme ich den Fehler, dass der IN Parameter beim Aufruf nicht leer sein darf. Wie soll man das dann anstellen? Ist es unter TIA nicht mehr erlaubt??


Und wie kann ich beim Aufruf der Multiinstanz die Parameter (In, PT, ET ,Q) automatisch einsetzen lassen? Oder muss ich die immer händisch an den Aufruf schreiben?


Danke euch für eure Hilfe!


Grüße Pico
 
Erste frage bin ich mir grad nicht sicher. Aber ich dachte man muss in scl nicht zwingend die fb Schnittstelle belegen. Zweite frage. Rechtsklick auf Aufruf und Parameterliste erweitern wählen.

Mit freundlichen Grüßen René
 
Zuviel Werbung?
-> Hier kostenlos registrieren
Das ist ja wirklich seltsam. Bei eigenen FB kann ich einzelne Parameter weglassen, nur bei TON müssen die Parameter IN und PT immer vorhanden sein.
Vielleicht ist das irgendwie von den 1200/1500er zur 300/400er rübergewandert, denn dort funktionieren die Timer anders als bei den 300/400ern. Das Verhalten ist nicht nur bei SCL sondern auch in FUP so.

Aber wenn Siemens das so will kann man eh nichts daran ändern. Vielleicht ist beim nächsten Servicepack auch wieder alles ganz anders.
 
Hallo,
mal so am Rande gefragt :
Will TIA (im Unterschied zu Classic) das tatsächlich so haben :
Code:
S_FB_EVZ(IN:=   ,  PT=T#1S,  ET:=    , Q=#Out_BO_CLK_ON );
im SCL von Classic wäre das ja so verwendet worden :
Code:
S_FB_EVZ(IN:=   ,  PT=T#1S);
myET :=S_FB_EVZ.ET ;
Out_BO_CLK_ON := S_FB_EVZ.Q;

... das würde mich hier mal interessieren ...

Gruß
Larry
 
'nabend

bei 1200 und 1500 ist vieles anders. Und nach meinen bisherigen Vergleichen verhalten sich die 1500 so wie die 1200, eben anders als 300 oder 400. Obwohl es ja auch schon zwischen diesen spitzfindige Unterschiede gab und gibt.
Der 1200 kann man ja unter den Rock schauen. Der 1500 leider nicht, aber dem Verhalten ist es auch dort so. Die IEC Timer und IEC Counter sind keine SFB mehr, sondern arbeiten so wie man es von den alten Zeiten und Zählern gewohnt war. Wenn man dort nach AWL umschaltet, dann zerfallen diese in einzelne AWL-Befehle. Bei der 1200 ist das auch so. .... ja ja, man kann nicht nach AWL umschalten, aber man kann das MC7plus (so nannte das der Typ auf der Messe) im Wireshark mitschneiden und Byteweise auseinander nehmen. Der Aufruf eines IEC-Timer ist kein Aufruf sondern eine Befehlsfolge in etwa wie

Code:
AUF dbarx, timer
LADE in
TON_TIME dbarx, pt
ET_TIME et, dbarx
LADE dbarx
IST q

Dabei ist dbarx eine dubiose Kombination aus DB und AR Register. Und das AUF macht in etwa das was bei einer 400 mit
Code:
AUF db-nummer-des-timers
LAR1 offset-des-timers-im-db
erreicht würde. Die Zahl dieser DB-AR Kombinationen scheint größer als 16 zu sein. Da der Wireshark aber keinen Bytewurst nach AWLplus Konverter enthält ;), sind diese Aussagen mit sehr großer Vorsicht zu genießen.

Werden im Aufruf Teile nicht ausgefüllt, so fehlt auch der entsprechende AWLplus Befehl. NOPs werden aber keine eingestreut. Es gibt ja offiziell keinen Wechsel zu KOP.


Statt einem "sinnlosen" IF mit einer unnötigen true/false Zuweisung kann man gleich
Code:
#S_FB_EVZ(IN:= [FONT=Verdana]#IN_BO_Clock[/FONT][FONT=Verdana],  PT:=T#1S, Q=>#Out_BO_CLK_ON );
[/FONT]
schreiben. Parameter die man nicht braucht lässt man weg. Und wenn man irgendwo später im Baustein auf das Q zugreifen will, dann geht dort:

Code:
#S_FB_EVZ(IN:= [FONT=Verdana]#IN_BO_Clock[/FONT][FONT=Verdana], PT:=T#1S );
...
[/FONT][FONT=Verdana]#Out_BO_CLK_ON := [/FONT]#S_FB_EVZ.Q[FONT=Verdana]
[/FONT]

In einem anderen Baustein kann man wenn man den Namen des DB kennt in dem die Multiinstanz versteckt ist dort sogar
Code:
#zeit := "dbname".so.und.so.S_FB_EVZ.ET[FONT=Verdana];
#q := [/FONT]"dbname".so.und.so.Q[FONT=Verdana];[/FONT][FONT=Verdana]
[/FONT]
verwenden. Das tolle dabei ist, dass auch dort die Zeit aktualisiert wird. Das ist um einiges besser als der Zugriff auf die Instanz eines SFB, da wurde nix aktualisiert.


'n schön' Tach auch
HB


 
Zurück
Oben