-> Hier kostenlos registrieren
Moin,
vielleicht hatte ja schon jemand das Problem und hat einen Workaround gefunden?! Ich hab einen FB_Conveyor geschrieben. Da die Freigaben von den vorhergehenden und den nachfolgenden Förderbändern sowohl gelesen, als auch geschrieben werden sollen, habe ich sie in VAR_IN_OUT plaziert:
In einer globalen Variablenliste lege ich ein Array des FB_Conveyor an, nebst zugehöriger Sensoren und Enable Signale.
Zuletzt werden die Werte in einer FC geschrieben. Bereits hier wird es "unschön". Leider ist es so, daß man auf in VAR_IN_OUT deklarierte Variablen von außen keinen Zugriff mit <function block instance name>.<variable name> hat (1). Deshalb muss ich in der VAR_GLOBAL schon die iqxEnC202 vom Typ ST_ConvEn anlegen, sie auf unten zu sehende Weise mit Werten füttern und in der MAIN schießlich ...
... beim Aufruf jedes FB_Conveyors als Parameter übergeben. Außerdem ist eine Abfrage auch nur über die "Krücke" iqxEnC202 möglich, was den Code, wie ich finde, sehr unschön gestaltet, weil es mal so und mal so geschrieben werden muss, wie hier zu sehen:
Hat schonmal jemand das gleiche Problem gehabt und/oder weiß eine hübsch(er) aussehende bzw. handhabbare Lösung?
Vielen Dank schonmal für jeden Tip.
Gruß
Jörn
(1)
Quelle:
Infosys -> TwinCAT 3 -> TE1000 XAE -> PLC -> Referenz Programmierung -> Variablentypen und spezielle Variablen -> Eingabe-/Ausgabevariablen - VAR_IN_OUT, VAR_IN_OUT CONSTANT
Als LINK: https://infosys.beckhoff.com/conten...45035998802476171.html?id=5478484394449973595
vielleicht hatte ja schon jemand das Problem und hat einen Workaround gefunden?! Ich hab einen FB_Conveyor geschrieben. Da die Freigaben von den vorhergehenden und den nachfolgenden Förderbändern sowohl gelesen, als auch geschrieben werden sollen, habe ich sie in VAR_IN_OUT plaziert:
Code:
FUNCTION_BLOCK FB_Conveyor
VAR_INPUT
ixSensors: ST_ConvSens;
END_VAR
VAR_IN_OUT
iqxEnables: ST_ConvEn;
END_VAR
In einer globalen Variablenliste lege ich ein Array des FB_Conveyor an, nebst zugehöriger Sensoren und Enable Signale.
Code:
VAR_GLOBAL
(* Array of instances of the conveyors *)
afbConv: ARRAY[1..3] OF FB_Conveyor;
(* Sensors Conveyor 202 *)
IxC202S1 AT %IX0.1: BOOL; (* Conveyor 202, Sensor 1 = Infeed front *)
IxC202S2 AT %IX0.2: BOOL; (* Conveyor 202, Sensor 2 = Fore stop front *)
IxC202S3 AT %IX0.3: BOOL; (* Conveyor 202, Sensor 3 = Outfeed front *)
(* Enable signals Conveyor 202 *)
iqxEnC202: ST_ConvEn;
Zuletzt werden die Werte in einer FC geschrieben. Bereits hier wird es "unschön". Leider ist es so, daß man auf in VAR_IN_OUT deklarierte Variablen von außen keinen Zugriff mit <function block instance name>.<variable name> hat (1). Deshalb muss ich in der VAR_GLOBAL schon die iqxEnC202 vom Typ ST_ConvEn anlegen, sie auf unten zu sehende Weise mit Werten füttern und in der MAIN schießlich ...
Code:
FC_ConfigConveyors
afbConv[E_Conv.C202].ixSensors.ST_Front.ixInfeed := IxC202S1;
afbConv[E_Conv.C202].ixSensors.ST_Front.ixForeStop := IxC202S2;
afbConv[E_Conv.C202].ixSensors.ST_Front.ixOutfeed := IxC202S3;
(*
Deshalb in VAR_IN_OUT! Wenn ich die qx... in VAR_OUTPUT plaziere
bekomme ich für die erste Zeile eine Fehlermeldung:
'qxReqOutfFromFoll' is no input of 'FB_Conveyor'
*)
iqxEnC202.ST_Back.qxReqOutfFromFoll := iqxEnC203.ST_Front.ixForeReqAlwOut;
iqxEnC202.ST_Back.ixFollAlwOutf := iqxEnC203.ST_Front.qxAlwOutfToFore;
... beim Aufruf jedes FB_Conveyors als Parameter übergeben. Außerdem ist eine Abfrage auch nur über die "Krücke" iqxEnC202 möglich, was den Code, wie ich finde, sehr unschön gestaltet, weil es mal so und mal so geschrieben werden muss, wie hier zu sehen:
Code:
MAIN
FC_ConfigConveyors();
afbConv[E_Conv.C202](iqxEnables := iqxEnC202);
(*
Eine Abfrage muss so geschrieben werden, damit es
funktioniert.
*)
IF iqxEnC202.ST_Back.qxReqOutfFromFoll THEN
afbConv[E_Conv.C203].ixStartTransp := TRUE;
END_IF
(*
Versucht man es so, dann kommt folgende Fehlermeldung dabei heraus:
'No external access to 'VAR_IN_OUT' parameter 'iqxEnables' of 'FB_CONVEYOR'
*)
IF afbConv[E_Conv.C202].iqxEnables.ST_Back.qxReqOutfFromFoll THEN
afbConv[E_Conv.C203].ixStartTransp := TRUE;
END_IF
Hat schonmal jemand das gleiche Problem gehabt und/oder weiß eine hübsch(er) aussehende bzw. handhabbare Lösung?
Vielen Dank schonmal für jeden Tip.
Gruß
Jörn
(1)
Quelle:
Infosys -> TwinCAT 3 -> TE1000 XAE -> PLC -> Referenz Programmierung -> Variablentypen und spezielle Variablen -> Eingabe-/Ausgabevariablen - VAR_IN_OUT, VAR_IN_OUT CONSTANT
Als LINK: https://infosys.beckhoff.com/conten...45035998802476171.html?id=5478484394449973595