恭喜,你发布的帖子
发布于 2018-05-31 10:13:16
5楼
FUNCTION_BLOCK "FB_FIFO"
{ S7_Optimized_Access := 'TRUE' }
VERSION : 0.1
VAR_INPUT
I_In : Bool;
I_Out : Bool;
I_Reset : Bool;
I_Reset_Value : Int;
I_NewValue : Int;
I_FullValue : Int := 10;
END_VAR
VAR_OUTPUT
O_FirstIndex : Int;
O_BufferCounter : Int;
O_Buffer_Full : Bool;
O_Buffer_Empty : Bool;
END_VAR
VAR
BufferCounter : Int;
Buffer : Array[1..10] of Int;
ItemIn_Old : Bool;
ItemOut_Old : Bool;
ResetCmd_Old : Bool;
BufferAdd : Bool;
BufferOut : Bool;
BufferFull : Bool;
BufferEmpty : Bool;
END_VAR
VAR_TEMP
t_AR2 : DWord;
t_LoopCounter : Int;
t_Bool : Bool;
t_RET_VAl : Int;
c_iMax : Int;
END_VAR
BEGIN
// Initial
#BufferFull := FALSE;
#BufferEmpty := FALSE;
#c_iMax := 10;
IF #I_FullValue > #c_iMax THEN
// Statement section IF
#I_FullValue := #c_iMax;
END_IF;
IF #I_FullValue < 1 THEN
// Statement section IF
#I_FullValue := 1;
END_IF;
/// Buffer In
#BufferAdd := #I_In AND (NOT #ItemIn_Old) AND (NOT #I_Reset);
IF #BufferAdd AND NOT #BufferFull THEN
// Statement section IF
#BufferCounter := #BufferCounter + 1;
#Buffer[#BufferCounter] := #I_NewValue;
END_IF;
IF #BufferCounter >= #c_iMax THEN
// Statement section IF
#BufferFull := TRUE;
END_IF;
// Buffer Out
#BufferOut := #I_Out AND NOT #ItemOut_Old AND NOT #I_Reset;
IF #BufferOut THEN
// Statement section IF
#BufferCounter := #BufferCounter - 1;
FOR #t_LoopCounter := 1 TO #BufferCounter DO
// Statement section FOR
#Buffer[#t_LoopCounter] := #Buffer[#t_LoopCounter + 1];
END_FOR;
#Buffer[#BufferCounter + 1] := 0;
END_IF;
// Buffer Reser
IF #I_Reset AND NOT #ResetCmd_Old THEN
// Statement section IF
FOR #t_LoopCounter := 1 TO #c_iMax DO
// Statement section FOR
#Buffer[#t_LoopCounter] := 0;
END_FOR;
#BufferCounter := 0;
END_IF;
//Buffer Empty
IF #BufferCounter < 1 THEN
// Statement section IF
#BufferEmpty := TRUE;
END_IF;
//Output
// First Index
#O_FirstIndex := #Buffer[1];
#O_BufferCounter := #BufferCounter;
#O_Buffer_Empty := #BufferEmpty;
#O_Buffer_Full := #BufferFull;
// Old Value Store
#ItemIn_Old := #I_In;
#ItemOut_Old := #I_Out;
#ResetCmd_Old := #I_Reset;
END_FUNCTION_BLOCK
这个程序是在网上找的,我用着很舒服,剽窃谁的请谅解呀!出处找不到了!
请填写推广理由:
分享
只看
楼主