codesys :485串口通讯

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));

  • 0
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值