Ich hätte gerade das selbe Problem...nur umgekehrt ^^
Ich schreibe einen FB für Diagnosemeldungen, wenn ein Zylinder zu lange fährt und der Endschalter nicht kommt z.B.
Ich habe einen "FBx" für die Zylinderabfrage geschrieben, welcher einen Bit-Ausgang (ERROR) hat.
Dieser FB wird für jeden Zylinder 1x in einem anderen FB aufgerufen wird.
Am Ende fasse ich alle Zylinder (und auch normale UND-Verknüpfungen (Motorschutz gefallen, etc.) zu einem WORD zusammen, um dann am WinCCflex eine Meldung auszugeben.
Meine Notlösung war momentan, dass ich ein temp Word "temp_WORD" mit Adresse 0 und ein Stat Word "ERROR_WORD" angelegt habe.
NW1: temp_WORD ablöschen
L 0
T #temp_WORD
NW2:
//Zyl1
CALL FBx
ERROR := L0.0
//Zyl2
CALL FBx
ERROR := L0.1
.
.
.
NW3: übertragen des temp_WORD in Static Bereich
L #temp_WORD
T #ERROR_WORD
Das hab soweit auch gut funktioniert, aber mir gefällt nicht, dass ich Lokale Bits verwende und dazwischen FBs Aufrufe, die mir die Werte überschreiben können.
(Ist bis jetzt noch nicht passiert)
Ist es eine saubere Lösung, wenn ich folgenden Code anwende:
(BZW Funktioniert er überhaupt, hab gerade keine Testumgebung hier...)
NW2:
//Zyl1
CALL FBx
ERROR := #temp_BIT
L P##ERROR_WORD
LAR1
U #temp_BIT
= [AR1,P#0.0]
//Zyl2
CALL FBx
ERROR := #temp_BIT
L P##ERROR_WORD
LAR1
U #temp_BIT
= [AR1,P#0.1]
.
.
.
.