Moin,
ich hätte da mal wieder ein "vermutlich nicht triviales" Problem. :icon_mrgreen:
Es geht um die TcXaeShell 15.0 (Build 4024.0).
Ich habe einen generischen FB für Förderstrecken geschrieben. Nun kann für die Erkennung von Einlauf und Auslauf ja entweder nur einen Einlaufsensor, nur einen Auslaufsensor oder einen Einlauf- und einen Auslaufsensor vorhanden sein. Zudem ist noch optional ein Vorstopsensor möglich, wenn die Förderstrecke mit 2 Geschwindigkeiten bzw. Rampen für den Anlauf und das Bremsen der Motoren arbeitet. Zu allem Überfluss kann die Beschaltung bei verschiedenen Förderrichtungen unterschiedlich sein, Stichwort Winkelübergabe.
Es sind also zwischen 1 und 12 Sensoren möglich (selbstredend zzgl. Sensoren für Hubtisch, Pusher, Separatoren, ... :icon_eek: ). Ich hätte nun aber ungerne 24 Eingangsvariablen am FB, 12x
IstDerSensor...Vorhanden und 12x
Sensor... . Es wäre mir viel lieber, wenn es eine Möglichkeit gäbe abzufragen, ob ein Eingang beschaltet ist. Ich hab schon in der E/A-Konfiguration geschaut. Dort kann man ja die Inputs mit Variablen verknüpfen und man sieht auch die Verknüpfung. Wenn ich aber in der zugehörigen GVL schaue, in der die Variablen stehen, erkenne ich nirgendwo dran, daß die Variablen verknüpft ist. Auch mit
SensorName.HierErscheintJetztWas hatte ich kein Glück.
Alternativ wäre ein Datentyp mit den drei Zuständen
false,
true und zusätzlich
nc / null / neither / ... auch okai. Einfach den Initialisierungswert z.B. auf
false setzen hilft mir nicht, da ich an verschiedenen Stellen auf
true,
false und auf steigende und fallende Flanke abfragen muss. Ich habe ein ENUM mit drei Zuständen angelegt, da laut infosys
true ja
1 und
false gleich
0 entspricht (1). Einem ENUM kann ich
true und
false nicht zuweisen. So weit, so gut. Ich kann allerdings statt auf
false und
true auch nicht mit
0 und
1 vergleichen. Da bekomme ich dann den Fehler
Cannot compare type 'BOOL' with type 'E_Three'.
Code:
TYPE E_Three:
(
_null_ := -1,
_false_ := 0,
_true_ := 1
);
END_TYPE
Code:
FB_Conveyor
IF ixSensors.ST_Back.ixInfeed = E_Three._true_ THEN
// Error: Cannot compare type 'BOOL' with type 'E_Three'
END_IF
Hat irgendwer eine Idee? Bitte? Es darf auch gerne noch anders als meine beiden Varianten funktionieren. :icon_mrgreen:
Gruß
Jörn
(1)
https://infosys.beckhoff.com/content...33644934405028