---------------------------------fc函数(实现循环+变址效果)
Input
基数 Word
偏移数 Word
循环数 Int
Output
输出数组 Array[0..15] of Bool
InOut
Temp
移动 Word
执行位 Word
目前位 Word
i Int
Constant
Return
变址掩码 Void
#移动 := 1;
#目前位 := (#基数 + #偏移数) MOD INT_TO_WORD(#循环数);
#执行位 := SHL(IN := #移动, N := #目前位);
FOR #i := 0 TO #循环数 - 1 DO
#输出数组[#i] := (#执行位 AND SHL(IN := #移动, N := INT_TO_WORD(#i))) <> 0;
END_FOR;
--------------------------------------------fc函数调用实现接口出(输出实现)
Input
状态字 Word
初始化 Bool
0工位准备启动 Bool
1工位准备启动 Bool
2工位准备启动 Bool
3工位准备启动 Bool
Output
气缸0 Bool
气缸1 Bool
气缸2 Bool
气缸3 Bool
InOut
Temp
Constant
Return
IF #"0工位准备启动" AND NOT #初始化 THEN
"变址掩码"(基数 := #状态字,
偏移数 := 0,
循环数 := 4,
输出数组 => #"0工位位组");
END_IF;
IF #"1工位准备启动" AND NOT #初始化 THEN
"变址掩码"(基数 := #状态字,
偏移数 := 1,
循环数 := 4,
输出数组 => #"1工位位组");
END_IF;
IF #"2工位准备启动" AND NOT #初始化 THEN
"变址掩码"(基数 := #状态字,
偏移数 := 2,
循环数 := 4,
输出数组 => #"2工位位组");
END_IF;
IF #"3工位准备启动" AND NOT #初始化 THEN
"变址掩码"(基数 := #状态字,
偏移数 := 3,
循环数 := 4,
输出数组 => #"3工位位组");
END_IF;
FOR #i := 0 TO 3 DO
#暂存数组[#i] := (#"0工位位组"[#i]) OR
(#"1工位位组"[#i]) OR
(#"2工位位组"[#i]) OR
(#"3工位位组"[#i]);
END_FOR;
#气缸0 := #暂存数组[0];
#气缸1 := #暂存数组[1];
#气缸2 := #暂存数组[2];
#气缸3 := #暂存数组[3];