51 lines
1.2 KiB
Plaintext
51 lines
1.2 KiB
Plaintext
FUNCTION "FC_TSHR_Shift" : Void
|
|
{ S7_Optimized_Access := 'TRUE' }
|
|
VERSION : 0.1
|
|
VAR_INPUT
|
|
xInShiftBack : Bool;
|
|
END_VAR
|
|
|
|
VAR_IN_OUT
|
|
arTSHR : Array[*] of "stCarrier";
|
|
END_VAR
|
|
|
|
VAR_TEMP
|
|
tStatus : Int;
|
|
tStatusSim : Int;
|
|
tSrcIdx : DInt;
|
|
tDestIdx : DInt;
|
|
nArrayMax : DInt;
|
|
stEmptyCarrier : "stCarrier"; // Carrier mit leeren Daten
|
|
END_VAR
|
|
|
|
VAR CONSTANT
|
|
Constant_1 {InstructionName := 'DTL'; LibVersion := '1.0'} : DTL;
|
|
END_VAR
|
|
|
|
|
|
BEGIN
|
|
#nArrayMax := UPPER_BOUND(ARR := #arTSHR, DIM := 1); // get array size
|
|
|
|
IF #xInShiftBack THEN // move backward
|
|
#tSrcIdx := 1;
|
|
#tDestIdx := 0;
|
|
ELSE // move forward
|
|
#tSrcIdx := 0;
|
|
#tDestIdx := 1;
|
|
END_IF;
|
|
|
|
#tStatus := MOVE_BLK_VARIANT(SRC := #arTSHR,
|
|
COUNT := DINT_TO_UDINT(#nArrayMax-1),
|
|
SRC_INDEX := #tSrcIdx,
|
|
DEST_INDEX := #tDestIdx,
|
|
DEST => #arTSHR);
|
|
|
|
#arTSHR[#nArrayMax] := #stEmptyCarrier;
|
|
|
|
|
|
|
|
|
|
|
|
END_FUNCTION
|
|
|