Modbus读取MF5700系列流量计

本人主要从事web开发,从来没有做过和硬件相关的程序,入职新公司后主要搞的是smt制造业,要做一个读取流量计的数据的程序。说明书如下:

 

(坑爹的说明书,数据位都写错了,最后联系卖家说他们印错了,不是1位是8位,卧槽)


使用modbus协议,对modbus协议不是很懂,百度搜了一下也是模棱两可,对于什么寄存器,功能码来说也比较生疏。就想着有没有modbus相关的类库,找到了一个NModbus的类库,发现效果不是很好。偶然的机会看到了农码一生写的一个iotclient,开源地址如下:https://gitee.com/zhaopeiym/IoTClient


经过测试发现还是不行,农码大神他们公司已经在用了,但我这里为啥不行了呢,发送数据也是ok的,但是收到的数据不对。

 

 

找到了流量计的厂家,说明了情况,把报文发给了厂家,厂家说没有问题。真是奇怪。在google的帮助下,搜到了以下答案:(翻译之后)

#1)波特率不匹配-我认为这不是您的问题,因为如果主站发送“垃圾”(这是不正确的波特率数据的样子),则Modbus设备将无法应答。

#2)RS-485接地不正确,这意味着由于没有接地线并且接地电势接近过电压水平,所以误解了比特/字节。

#3)RS-485上没有线路偏压,这意味着当主机停止发送&在从属装置开始响应之前,RS-485线路浮动,这意味着您可能会在响应开始时看到一些垃圾0xFF或0xFE字节。

#4)只是普通的太多线噪声。您可能需要仔细检查屏蔽。

#5)从站在主机准备好接收之前就开始应答,因此丢失了部分或全部的第一个字节...导致在第一个接收到的字节期间可能出现成帧错误,并且还丢失了数据,从而导致CRC错误。

从字里行间明白可能是线的问题,
我用的线是rs485转接头,转到usb用串口通信。
最后换了个线,他好了。。。。
这tm一万个cnm在心中飘过。。。

 

最后附上一个成功读取的图。还有经过测试此流量计每次发送请求间隔最好在1秒。

 

 

最后把农码的iotclient操作modbus的类'偷'过来放到自己项目里。我真是机智。

 

 

posted @ 2019-12-02 17:36  邓振振  阅读(571)  评论(0编辑  收藏