Modbus通讯注意事项及测试 糖耐量测试 注意事项
利用Modbus协议可以实现设备间的数据交换。Modbus通讯理论上支持4种ModiconPLC地址,即0*、1*、3*和4*四种,分别表示开出(中间线圈)、开入、模入、模出(中间寄存器)等数据地址。与西门子或其它设备中的开入、开出、模入、模出地址完全不对应。可以理解为0*和1*对应位地址的读写操作,3*和4*字地址的读写操作。
此处0*、1*、3*和4*表示长度有的为5位数字、有的为6位,其实和Modbus通讯无关,只是和软件的表示方式有关。
按照Modbus通讯时最常用的是RTU读请求格式:
从站地址(1个字节)、功能代码(1个字节)、从站数据起始地址(2个字节)、读数据长度(2个字节)、CRC校验(2个字节)
可见,只需设置起始从站数据区起始地址和通讯长度即可。
特别注意,Modbus地址遵从IEC1的地址标准(最小地址为*1),西门子遵从IEC0的标准(最小地址为0,如M0.0)。因此,不同标准的地址做通讯时需要做地址变换,即加1的操作。
二、通讯故障诊断
在做Modbus通讯时经常会出现通讯失败的现象,如果判断是程序问题还是别的问题,其实完全可以利用常见的Modbus测试软件来判断。常见的Modbus测试软件有Modscan和Modsim。也可以使用常见的串口调试工具软件,如SSCOM42等。
其中Modscan软件可以读取Modbus从站的数据,如果利用Modscan软件可以建立连接,但是设备间直连后无法通讯,问题可以在RS485极化、主站上。同样,Modsim软件可以仿真一个Modbus的从站,如果编写了Modbus主站程序,希望测试一下程序是否正常,可以运行Modsim软件,如果能否建立连接,说明没有任何问题。
如果使用串口调试工具进行测试时,需要按照Modbus通讯协议的格式收发相应的报文,并判断通讯是否正常。
Modbus通讯报文格式,可以参考我以前写的《Modbus通讯说明》http://www.ad.siemens.com.cn/club/bbs/post.aspx?b_id=3
三、超时时间设置
Modbus通讯协议是单主多从的通讯协议,如果需要读取多个现场Modbus从站设备的数据时,很多PLC不支持对Modbus通讯功能块的自动排序,需要自己编写Modbus轮询程序来实现,轮询时每次只能激活一个Modbus的读写功能块。
以常见的主站读取从站的寄存器为例,主站发出请求需要8个字节,从站返回响应为52*n个字节。其中n为寄存器个数。
如果通讯速率为9600时,按照常规的ModbusRTU,8个数据位、1个停止位、偶校验方式,每传输1个字节数据需要的时间为:
(811)/9600=1.04ms/Byte
因此,主站发出响应到从站返回数据的时间周期为:
(852*n)*1.04T1T2,其中n为寄存器个数,T1为从站的响应时间(如果是PLC,则为PLC的扫描时间),T2为通讯余量,一般为20~50ms。
如果读取10个字的数据,从站响应时间为50ms,则整个周期为:
(852*10)*1.045050=134.32ms。
因此,超时时间必须大于134.32ms,可以设置为150ms以上。
四、超时时间设置续
如果超时时间太短,响应不能完全返回,通讯会报错。
如果超时时间设置太长,按照上述例子,一共10个从站,每个从站读取10个字的数据,超时时间设置为1s。如果有1个从站出现故障,则整个轮询周期为:10009*134.32=2208.88ms。
同理,如果超时时间设为150ms,则整个轮询周期为:1509*134.32=1358.88ms。
因此,可以看出正确的超时时间设置可缩短整个轮询周期,不正确的设置,将导致通讯出错或整个通讯周期过长。
更多阅读
基于嵌入式Linux的千兆以太网卡驱动程序设计及测试 以太网卡驱动
基于嵌入式Linux的千兆以太网卡驱动程序设计及测试一.引言千兆以太网是一种具有高带宽和高响应的新网络技术,相关协议遵循IEEE802.3规范标准。采用和10M以太网相似的帧格式、网络协议和布线系统,基于光纤和短距离同轴电缆的物理层介
要听舞曲网歌曲网址及测试二 _彩云归 剑三彩云归
理想一体机故障及测试代码——GR系列|维修资料-洋溪信息港┃洋溪 新化洋溪信息港
查看完整版本: [-- 理想一体机故障及测试代码——GR系列 --]洋溪信息港┃洋溪人论坛 -首页 -> 维修资料 -> 理想一体机故障及测试代码——GR系列 [打印本页] 登录 -> 注册 -> 回复主题 -> 发表主题 新兴快印 2009-08-11 19:07理
usb鼠标驱动注解及测试 win7键盘鼠标驱动usb
鼠标驱动可分为几个部分:驱动加载部分、probe部分、open部分、urb回调函数处理部分。 下文阴影部分为注解。 一、驱动加载部分 STatic int __init usb_mouse_init(void) { int retval = usb_register(&usb_mo
网线的制作及测试 网线制作测试仪
一、实验目的1. 掌握RJ-45的制作。2. 掌握双绞线连通性测试方法。二、实验内容及要求1. 制作直通线双绞线一根(大概0.3至0.6米长)。2. 制作交叉线双绞线一根(大概0.3至0.6米长)。