- Beiträge
- 6.473
- Reaktionspunkte
- 2.490
-> Hier kostenlos registrieren
Hi,
kann man bei TIA eigentlich irgendwie einen Datentyp als Parameter übergeben?
Also quasi keinen Parameter vom Typ DES Datentyps, sondern einen Parameter vom Typ Datentyp?
Hintegrund:
Ich spiele gerade mit dem Gedanken ein paar Bausteine etwas universeller zu bauen.
Beispiel Schieberegister:
Deklaration:
Code:
Am Parameter wird ein beliebig langes Array of INT angegeben.
Mit dem Bool #iTaktSchieben werden die Werte um je ein Element weitergeschoben.
Schieberegister halt...
Bekomme ich den Baustein so hin, dass er alles Schieben kann?
Also auch ein Array of REAL bzw. ein Array of Struct?
Struct kann auch ein PLC-Datentyp sein.
Entweder der FB erkennt selbst was da an der Schnittstelle hängt, oder man übergibt ihm auch den Datentyp als Parameter.
Oder eine Funktion um die Länge des DB bzw. Array auszulesen und durch die Anzahl der ermittelte Elemente teilen?
Diesen Wert dann zum Schieben in der Schleife nutzen?
Gibts da was?
Danke!
kann man bei TIA eigentlich irgendwie einen Datentyp als Parameter übergeben?
Also quasi keinen Parameter vom Typ DES Datentyps, sondern einen Parameter vom Typ Datentyp?
Hintegrund:
Ich spiele gerade mit dem Gedanken ein paar Bausteine etwas universeller zu bauen.
Beispiel Schieberegister:
Deklaration:
Code:
FUNCTION_BLOCK "Schieberegister"
VAR_INPUT
iTaktSchieben : Bool;
iEintrag : Int;
END_VAR
VAR_OUTPUT
END_VAR
VAR_IN_OUT
ioArrayDaten : Array[*] OF Int;
END_VAR
VAR
vFpTaktSchieben {S7_SETPOINT := 'True'} : R_TRIG;
Anfang : DInt;
Ende : DInt;
END_VAR
VAR_TEMP
i : Int;
END_VAR
VAR CONSTANT
END_VAR
Code:
Code:
#Anfang := LOWER_BOUND(ARR := #ioArrayDaten, DIM := 1);
#Ende := UPPER_BOUND(ARR := #ioArrayDaten, DIM := 1);
#vFpTaktSchieben(CLK:=#iTaktSchieben);
IF #vFpTaktSchieben.Q THEN
FOR #i := #Ende - 1 TO #Anfang BY -1 DO
#ioArrayDaten[#i + 1] := #ioArrayDaten[#i];
END_FOR;
#ioArrayDaten[1] := #iEintrag;
END_IF;
Am Parameter wird ein beliebig langes Array of INT angegeben.
Mit dem Bool #iTaktSchieben werden die Werte um je ein Element weitergeschoben.
Schieberegister halt...
Bekomme ich den Baustein so hin, dass er alles Schieben kann?
Also auch ein Array of REAL bzw. ein Array of Struct?
Struct kann auch ein PLC-Datentyp sein.
Entweder der FB erkennt selbst was da an der Schnittstelle hängt, oder man übergibt ihm auch den Datentyp als Parameter.
Oder eine Funktion um die Länge des DB bzw. Array auszulesen und durch die Anzahl der ermittelte Elemente teilen?
Diesen Wert dann zum Schieben in der Schleife nutzen?
Gibts da was?
Danke!