串口通信协议示例与分析

串口通信协议示例与分析

 
 
 
 
 变频器与个人电脑使用RS-232/RS-485 串行总线连接,如下所示:

    串口通信协议示例与分析

    在通讯操作中,通过个人电脑以命令方式控制仪器。

    通讯数据格式:
    起始位: 1 位
    数据位: 8 位
    奇偶位: 无
    停止位: 1 位

    应答及命令格式:
    命令模式
串口通信协议示例与分析

    ::-数据头,只有以::开头的数据包才认为有效。
    AD  - 设备号,当前通讯的设备ID。
     ? - 指明该数据是PC发出的指令。 
    RI  - 响应时间,从PC发出命令到仪器应答的时间。
    SC  - 和检验码,等于图中“和校验范围”所示各位相加。

    应答模式
串口通信协议示例与分析

    - 指明该数据是仪器发回的应答数据。
    其它同上。

    故障模式
串口通信协议示例与分析

     - 指明该数据是仪器发回的故障数据。
    其它同上。

    协议说明:
    无论是控制仪器还是查看仪器数据都需要PC发出相应的命令;只要PC发出命令(前提是与仪器正常通讯),仪器都会返回数据(应答或故障)。

    使用LabVIEW编写通信模块:
    1. 主要节点:Functions->Instrument I/O->VISA Resource Name Constant, Functions->Instrument I/O->Serial->VISA Config Serail Port, VISA Read, VISA Write, VISA Close

    2. 串口设置:根据仪器说明设置如波特率等等串口参数。超时设置根据上述RI。

    3. 写串口指令:根据上述“命令模式”的格式包装命令数据,和校验由“和校验范围”中数位相加而得,所以之前应该写一子VI用来计算和校验。建议使用以下变量来包装数据:

    prefix:前缀,这里是::
    devID:设备号
    type:通讯类型(这里是?),可以与RI合并
    cmdNum:命令号
    cmdValue:命令号对应的命令值
    sumVerify:和校验码
    end:结束字符

    注意:一般协议要求“命令内容”满足一定的位数,所以应该做一个子VI,专门在那些数位不够的命令前补足空格或0。

    4. 读串口数据:系统为串口开辟了一定大小的缓冲队列空间,仪器应答数据首先发送到这个缓冲空间(空间数据堆满时自动移除最早的数据),然后程序从中一次读取指定的数位并将其从中移除。

       建议读取方式:

      (1) 读1 byte,判断是否 :(3A),是则继续;否则返回步骤(1),重新开始。
      (2) 再次读1 byte,判断是否 :(3A),是则继续;否则返回步骤(1),重新开始。
      (3) 读应答模式中除去::剩余的字节,循环读取,每次读一个字节,当读到的字节数达到数量,继续;若读取超时,返回步骤(1),重新开始。
      (4)  分析读到的bytes,判断和校验码是否正确。若正确,继续;否则,返回步骤(1),重新开始。
      (5) 取第三个byte,如果是#,说明“应答模式”;如果是%,说明“故障模式”。
      (6)  按照应答或者故障模式,分离出相应的命令号和命令值。
      (7)  一些类型转换。至此,一次读取过程结束。

    5. 由于一次通讯包含一次写命令和一次读数据,所以最好把写和读模块封装成一个子VI。

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值