圖片:
實例為 6臺穿梭小車(穿梭車臺數(shù)可以實際情況增減),其中5臺設(shè)為目標(biāo),一臺為本地穿梭車。功能塊有分別輸出有:警告啟動、減速啟動、停車啟動、兩車間隙值等。
源代碼如下:
FUNCTION_BLOCK FB1026
VAR_INPUT
CarData1:DINT;//目標(biāo)穿梭車1位置值
CarData2:DINT;//目標(biāo)穿梭車2位置值
CarData3:DINT;//目標(biāo)穿梭車3位置值
CarData4:DINT;//目標(biāo)穿梭車4位置值
CarData5:DINT;//目標(biāo)穿梭車5位置值
CarLocaL:DINT;//本地穿梭車位置值
Warning_JL1:DINT;//警告距離1設(shè)定
Warning_JL2:DINT;//警告距離2設(shè)定
Decelerate_JL1:DINT;//減速距離1設(shè)定
Decelerate_JL2:DINT;//減速距離2設(shè)定
StopCar_JL1:DINT;//停車距離1設(shè)定
StopCar_JL2:DINT;//停車距離2設(shè)定
END_VAR
VAR
I:INT;
InData:ARRAY[1..5] OF DINT;
END_VAR
VAR_OUTPUT
Out_Warning:BOOL;//警告啟動
Out_Decelerate:BOOL;//減速啟動
Out_Stop:BOOL;//停車啟動
D_Value:DINT;//兩車之間值
END_VAR;
InData[1]:=CarData1;
InData[2]:=CarData2;
InData[3]:=CarData3;
InData[4]:=CarData4;
InData[5]:=CarData5;
FOR I:= 1 TO 5 BY 1 DO
IF (InData[I]>0)AND(((CarLocaL-InData[I]<0)AND(CarLocaL-InData[I]>=Warning_JL1))OR( CarLocaL-InData[I]>=Warning_JL2))THEN//判定是否已到警告距離
Out_Warning:=1;//警告啟動
D_Value:=CarLocaL-InData[I];
ELSE
Out_Warning:=0;
Out_decelerate:=0;
Out_Stop:=0;
D_Value:=0;
END_IF;
IF OUT_Warning THEN
IF ((CarLocaL-InData[I]<0)AND(CarLocaL-InData[I]>=Decelerate_JL1))OR( CarLocaL-InData[I]>=Decelerate_JL2)THEN//判定是否已到減速距離
Out_decelerate:=1;//減速啟動
ELSE
Out_decelerate:=0;
END_IF;
IF((CarLocaL-InData[I]<0)AND(CarLocaL-InData[I]>=StopCar_JL1))OR( CarLocaL-InData[I]>=StopCar_JL2)THEN//判定是否已到停車距離
Out_Stop:=1;//停車啟動
ELSE
Out_Stop:=0;
END_IF;
EXIT;
END_IF;
END_FOR;
END_FUNCTION_BLOCK