首页 > 编程知识 正文

协议分析,自定义串口通信协议

时间:2023-05-05 21:49:03 阅读:175952 作者:689

串行通信协议案例与分析作者:佘名教程来源:未知点击量:变频器与电脑通过RS-232/RS-485串行总线连接,如下所示。

通信操作中,用计算机用命令控制设备。

通讯数据格式:

l开始位: 1位

l数据位: 8位

奇偶校验:无

l停止位: 1位

应答及命令格式:

l命令模式

只有以: -标头、开头的包才被视为有效。

AD-设备编号,当前正在与之通信的设备ID。

? -表示数据来自PC的指示。

RI-响应时间,从PC发出命令到机器响应的时间。

SC-和校验码等于将图中“和校验范围”所示的各位相加。

l响应模式

# -表示该数据是设备发送来的响应数据。

其他同上。

l故障模式

% -表示此数据是从设备返回的故障数据。

其他同上。

协议说明:

无论是控制机器,还是看机器的数据,PC都需要发出适当的命令; 只要PC发出命令,前提是与设备正常通信),设备就会返回数据(响应或故障)。

使用LabVIEW编写通信模块:

1 .主要节点: functions-instrument I/o-visaresourcenameconstant,functions-instrument I/o-serial-visaconfigserailpont

2 .串行端口的设置:按照机器的说明设置波特率等串行参数。 超时基于上述RI。

3 .编写串口命令:按上述“命令模式”格式包装命令数据,校验加上“校验范围”中的数位,前应写VI用于计算和校验。 建议使用以下变量包装数据:

l prefix :前缀,这里是:

l devID :设备编号

l type :通信型(这位是?可以与RI集成

l cmdNum :命令编号

l cmdValue :与命令编号对应的命令值

l sumVerify :和校验码

l (结束)结束字符

注意:一般协议要求“命令内容”满足一定位数。 因此,需要在位数不足的指令之前创建用于填充空格或0的子VI。

4 .读取串行数据:系统为串行端口打开一定大小的缓冲队列空间,设备的响应数据首先发送至该缓冲空间,然后程序从中一次读取指定的数字并删除。

推荐读取方法:

(1)读取1 byte,判断是否存在。 ) 3A )如果是,则继续; 否则返回步骤(1),重新开始。

)2)再次读取1 byte,判断是否。 (3A )、如果是,则继续; 否则返回步骤(1),重新开始。

)3)读出响应模式除外) :剩余字节,循环读出,逐字节读出,待读出字节数达到数后继续; 读取超时时,返回步骤(1),重新开始。

)4)分析读取的bytes,判断校验码是否正确。 如果正确的话,继续; 否则,返回步骤(1),重新开始。

)5)取第三个byte,如果#,则说明“响应模式”;如果%,则说明“故障模式”。

(6)根据响应或故障模式,分离相应的命令编号和命令值。

)7)几种类型的转换。 至此,一次读取过程结束。

5 .由于一次通信包括一次写命令和一次读数据,所以最好将写模块和读模块封装在一个子VI中。

版权声明:该文观点仅代表作者本人。处理文章:请发送邮件至 三1五14八八95#扣扣.com 举报,一经查实,本站将立刻删除。