欢迎访问沈阳勃业自动化仪器仪表销售处官网!
咨询热线:13134200356
  • http://www.byzdhgs.com/product-1039.html
  • http://www.byzdhgs.com/product-1044.html
  • http://www.byzdhgs.com/product-1043.html
  • http://www.byzdhgs.com/product-1042.html
  • http://www.byzdhgs.com/product-1047.html
  • http://www.byzdhgs.com/product-1048.html
  • $
<
>
您所在的位置:首页 > 新闻资讯  > 最新资讯
流量积算仪Modbus通信的一些小问题
来源:沈阳勃业自动化仪器仪表销售处 发布时间:2020年07月23日
在前段时间的一个应用测试中,一天测试了多种流量积算仪/流量计算机的Modbus通信。由于测试的仪表来自于不同厂家,不同时期的产品(出厂时间为2004年),故虽其标识的均为标准Modbus通信,但其中一些产品有其各自的不同”特点”,在这里聊聊供大家鉴赏。
 
由于一些仪表无法找到可以沟通的技术支持人员,有些特性不排除是单独测试设备的问题或是老产品的问题,故在下面的叙述中,我们均隐去仪表品牌,以免不必要的纷争。以下仪表网络测试参数均为9600波特率,8数据位,1停止位,无校验,RS-485半双工网络,Modbus RTU协议。
 
A
仪表说:你慢慢问,否则我要罢工了

在测试上面这个流量计算机时,通过查阅其手册,发现我们需要的数据主要放置在从40001到40014(或者说从保持型寄存器0x00到0X0D)这14个连续寄存器中。


在使用PLC或者组态软件测试之前,笔者习惯用ModScan测试软件进行简单测试。ModScan测试结果正常,能读取到我们需要的7个数据。ModScan配置如下:

ModScan测试成功后,我们使用PLC直接读取以上数据,可以读到正确的数据,但是发现数值变动十分缓慢;进一步监控PLC的通信状态字,其一直在通信正常、校验错误以及无响应几种状态之间不断切换。由于我们已经读到正确的数据,故寄存器地址信息和波特率、站号等网络参数应该没有问题。
流量积算仪
所以首先笔者对硬件接线进行了检查,由于只是在办公室内进行测试,且通信线距离只有50厘米,故测试开始时笔者未在网络两端安装120欧姆终端电阻,那么既然现在存在问题,我们就把终端电阻加上,毕竟笔者之前也遇到过某些设备在使用特定材质线缆时在短距离也无法通信的情况。然而,加上终端电阻,甚至更换了一段标准的RS485双绞屏蔽电缆后,故障依然存在。此时,把仪表的线重新接回计算机用ModScan测试,依然正常。并且,我们把PLC的数据直接用串口监控,发现其和ModScan发出的数据内容一模一样,就是速度快了一点。ModScan默认情况下一般是1秒钟发送一次数据请求,但是笔者测试的PLC主站在默认状况下,只要从站设备有回复,在3½个字符时间后,就会进行下一次数据请求。会不会是这里的问题呢?
 
在之前的工作中,笔者遇到过一些从站设备对通信的处理能力比较弱,或者是程序编制不完善,当485总线繁忙时,由于其处理器计算能力或者程序编制不合理,出现较总线不繁忙时通讯响应迟缓,设备动作卡顿,通讯中断,甚至设备重启等情况。仅在今年,笔者就遇到过一个特气集控器,主站03报文询问过快之后设备显示器停滞不刷新数据;某家电一线品牌的空调集控器,速度快后不定时通讯中断,须重启设备才可恢复;某模拟量模块,速度快后模拟量读数失真;某压力表,速度快后直接重启。
 
想到这里,笔者在PLC主站的轮询逻辑中增加了100ms的延迟时间,即当主站收到从站的正确响应后,等100ms之后再发送下一条请求。验证,问题得到解决。
 
B
仪表说:不要一次问那么多问题
我每次只能回答一点点

地址40003中,确实是笔者希望的328的数值,可是地址40004中竟然也是这个值。在地址表中,我们可以看到该数据应该是一个32位双字的长整型数据才对,所以如果对于数值328来说,40004中的数值应该为0才对。即使考虑了高低字交换,高低字节交换,有无符号数,地址偏移1位等因素,这个数值依然不对。笔者又进行了多次测试,发现40003和40004的数值始终相等。然后,笔者习惯性的想先测试1个数,看看能不能读上来,于是就在上图的配置中,把数据长度从14改为了1,奇怪的是,这时40003的数值竟然读不上来了。难道问题和数据长度有关?

于是,笔者又仔细看了下仪表的手册,有了点不太确定的发现(直到现在仍不太确定)。在上面的协议中,有这么一句:

这里的4-8字节莫非是指我们一次只能读取4-8字节的数据?仔细查看该表的数据,我们看到所有的数据都是4字节长的。所以,笔者就在ModScan中,把数据长度改为2,经过修改后,表里的7个数据都可以读到且正常。我们在PLC中做了如下配置,分7次读取这7个数据,结果正常。 


这里,笔者不能说仪表有问题,只能说其手册写得应该更明确些。
 
C
仪表说:
人家是标准Modbus RTU协议……………
只不过校验是反的
这块流量积算仪的问题更直接,当使用ModScan按其手册发送内容读取数据时,仪表没有数据回复。但是如果使用仪表厂家自带的一个小软件测试仪表的通信,数据是完全正常的。由于和厂家软件测试使用的物理链路完全相同,所以应该还是报文协议上出现了一些问题。这就需要我们仔细的阅读厂家手册。



D
其他
某些仪表是有Modbus RTU和ASCII的选项的。但是笔者在测试中,发现有的仪表称RTU为”寄存器模式”,ASCII为”字符模式”,这在配置仪表时需要注意。
 
在前文中也提到过,流量积算仪中的很多数据往往是32位的双整型数据或IEEE754单精度浮点型数据。既然是32位数据,在不同的PLC或者设备中,其高低字或高低字节的存放顺序各有不同。所以,如果通信可以通上但数据读上来是乱码,大多数情况下,对于32位双整型数据,可以交换其高低字;对于32位单精度浮点数,由于其有1234,2143,3412,4321这4中可能,可以先交换高低字,如果不正确后可以再对高低字节交换进行测试。在PLC中,除了用Move指令进行交换外,还可以使用循环移位指令对单字循环左移/右移8位以交换高低字节,或者对双字循环左移/右移16位以交换高低字。在一些流量积算仪中,也提供了此种功能,已方便用户使用。
 
同时需要注意的是,某些仪表的浮点数未必是标准的IEEE754格式,可能是其自定义的数值格式。这时就需要我们根据其手册,在PLC或上位机中编制对应的转换程序。