-> Hier kostenlos registrieren
Moin,
ich hätte da mal wieder ein "vermutlich nicht triviales" Problem.
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'.
Hat irgendwer eine Idee? Bitte? Es darf auch gerne noch anders als meine beiden Varianten funktionieren.
Gruß
Jörn
(1)
https://infosys.beckhoff.com/content/1031/tc3_plc_intro/2529394315.html?id=8249233644934405028
ich hätte da mal wieder ein "vermutlich nicht triviales" Problem.

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.

Gruß
Jörn
(1)
https://infosys.beckhoff.com/content/1031/tc3_plc_intro/2529394315.html?id=8249233644934405028