PROGRAM FC_Laser
VAR
com_ENABLE : COM_ENABLE;
com_RECEIVE01:COM_RECEIVE;
com_SEND01 : COM_SEND;
com_RECEIVE02:COM_RECEIVE;
com_SEND02 : COM_SEND;
vb_StartReceive01 :BOOL;
vb_StartReceive02 :BOOL;
vb_StartSend01 :BOOL;
vb_StartSend02 :BOOL;
vby_DateSend01 :ARRAY[0..8]OF BYTE ; //1#激光单次测量
vby_DateReceive01 :ARRAY [0..12]OF BYTE ; //1#激光单次测量结果
vw_ReadBytes01:WORD;
ton_receive01 :TON ;
w_Distance01 :WORD;
w_aa01:WORD;
w_bb01:WORD;
w_cc01 :WORD;
w_dd01 :WORD;
vby_DateSend02 :ARRAY[0..8]OF BYTE ; //2#激光单次测量
vby_DateReceive02 :ARRAY [0..12]OF BYTE ;
vw_ReadBytes02:WORD;
ton_receive02 :TON ;
w_Distance02 :WORD;
w_aa02 :WORD;
w_bb02 :WORD;
w_cc02 :WORD;
w_dd02 :WORD;
done01:BOOL;
done02:BOOL;
done03:BOOL;
done04:BOOL;
ton01:TON;
ton02:TON;
startsend01 :R_TRIG;
startsend02 :R_TRIG;
c01:Standard.R_TRIG;
c02:Standard.R_TRIG;
count01 :WORD ;
count02 :WORD;
bs01:BOOL;
bs02:BOOL;
ctu01:Standard.CTU;
ctu02:Standard.CTU;
start01:ARRAY [0..9]OF BOOL;
start02:ARRAY [0..9]OF BOOL;
wdate01:ARRAY[0..9] OF WORD;
wdate02:ARRAY[0..9]OF WORD;
END_VAR
com_ENABLE(
bEnable :=TRUE, //使能端
byComID:=2, //端口号
byDataBit:=8, //数据位
byStopBit:=1, //停止位
byParity:=2, //奇偶校验(0:EVEN,1:ODD,2:NONE)
dwBaudrate:=19200, //波特率
wTimeOut:=100, //接收超时时间(10-999ms)
bRxStatus=>,
bDone=>,
bError=>,
wErrNum=>);
//--------------------------*--串口自由作从站------------------------------------//
com_RECEIVE01(
bExecute:=vb_StartReceive01, //启动接收
byComID:=2, //端口号
pRxBuff:=ADR(vby_DateReceive01), //接收缓存区
wBuffLen:=SIZEOF(vby_DateReceive01), //缓存长度
wRxLen=>vw_ReadBytes01, //实际读到的字节数
bDone=>,
bError=>,
wErrNum=>);
done01:=com_RECEIVE01.bDone;
//--------------------------*--串口自由作主站------------------------------------//
com_SEND01(
bExecute:=vb_StartSend01, //启动发送
byComID:=2, //端口号
pTxBuff:=ADR(vby_DateSend01), //发送缓存区
wBuffLen:=SIZEOF(vby_DateSend01), //缓存长度
bDone=>,
bError=>,
wErrNum=>);
//--------------------------------------------------------------------------------//
(* IF vb_StartSend01 AND NOT GIB_Loc_To_Rem THEN
vby_DateSend01[0]:=16#AA;
vby_DateSend01[1]:=16#01;
vby_DateSend01[2]:=16#01;
vby_DateSend01[3]:=16#BE;
vby_DateSend01[4]:=16#00;
vby_DateSend01[5]:=16#01;
vby_DateSend01[6]:=16#00;
vby_DateSend01[7]:=16#01;
vby_DateSend01[8]:=16#C2;
END_IF
IF vb_StartSend02 THEN
vby_DateSend01[0]:=16#AA;
vby_DateSend01[1]:=16#01;
vby_DateSend01[2]:=16#01;
vby_DateSend01[3]:=16#BE;
vby_DateSend01[4]:=16#00;
vby_DateSend01[5]:=16#01;
vby_DateSend01[6]:=16#00;
vby_DateSend01[7]:=16#00;
vby_DateSend01[8]:=16#C1;
END_IF
*)
IF vb_StartSend01 THEN
vby_DateSend01[0]:=16#AA;
vby_DateSend01[1]:=16#01;
vby_DateSend01[2]:=16#00;
vby_DateSend01[3]:=16#20;
vby_DateSend01[4]:=16#00;
vby_DateSend01[5]:=16#01;
vby_DateSend01[6]:=16#00;
vby_DateSend01[7]:=16#02;
vby_DateSend01[8]:=16#24;
END_IF;
//-------------------------------------------------------------------------------//
(*ton_receive01(IN:=vb_StartSend01,PT:=T#200MS);
IF ton_receive01.Q THEN
vb_StartReceive01:=1;
ELSE
vb_StartReceive01:=0;
END_IF;*)
vb_StartReceive01:=com_SEND01.bDone;
//----------------------------距离计算-------------------------------------------//
w_aa01 := BYTE_TO_WORD(vby_DateReceive01[6]);
w_bb01 := BYTE_TO_WORD(vby_DateReceive01[7]);
w_cc01 := BYTE_TO_WORD(vby_DateReceive01[8]);
w_dd01 := BYTE_TO_WORD(vby_DateReceive01[9]);
w_Distance01 :=(((w_bb01)*4096)+((w_cc01)*256)+(w_dd01));
//************************************************************************************//
//--------------------------*--串口自由作从站------------------------------------//
com_RECEIVE02(
bExecute:=vb_StartReceive02, //启动接收
byComID:=2, //端口号
pRxBuff:=ADR(vby_DateReceive02), //接收缓存区
wBuffLen:=SIZEOF(vby_DateReceive02), //缓存长度
wRxLen=>vw_ReadBytes02, //实际读到的字节数
bDone=>,
bError=>,
wErrNum=>);
done02:=com_RECEIVE02.bDone;
//--------------------------*--串口自由作主站------------------------------------//
com_SEND02(
bExecute:=vb_StartSend02, //启动发送
byComID:=2, //端口号
pTxBuff:=ADR(vby_DateSend02), //发送缓存区
wBuffLen:=SIZEOF(vby_DateSend02), //缓存长度
bDone=>,
bError=>,
wErrNum=>);
//--------------------------------------------------------------------------------//
IF vb_StartSend02 THEN
vby_DateSend02[0]:=16#AA;
vby_DateSend02[1]:=16#02;
vby_DateSend02[2]:=16#00;
vby_DateSend02[3]:=16#20;
vby_DateSend02[4]:=16#00;
vby_DateSend02[5]:=16#01;
vby_DateSend02[6]:=16#00;
vby_DateSend02[7]:=16#02;
vby_DateSend02[8]:=16#25;
END_IF;
//-------------------------------------------------------------------------------//
(*ton_receive02(IN:=vb_StartSend02,PT:=T#200MS);
IF ton_receive02.Q THEN
vb_StartReceive02:=1;
ELSE
vb_StartReceive02:=0;
END_IF;*)
vb_StartReceive02:=com_SEND02.bDone;
//----------------------------距离计算-------------------------------------------//
w_aa02 := BYTE_TO_WORD(vby_DateReceive02[6]);
w_bb02 := BYTE_TO_WORD(vby_DateReceive02[7]);
w_cc02 := BYTE_TO_WORD(vby_DateReceive02[8]);
w_dd02 := BYTE_TO_WORD(vby_DateReceive02[9]);
w_Distance02 :=((w_bb02*4096)+((w_cc02)*256)+(w_dd02));