串行通信协议案例与分析作者:佘名教程来源:未知点击量:变频器与电脑通过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中。