• 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的类'偷'过来放到自己项目里。我真是机智。

  • 相关阅读:
    在Python中使用多进程快速处理数据
    深度学习中Embedding层有什么用?
    split("\s+") 和 split(" +") 有什么区别?
    python merge、concat合并数据集
    机器学习中常见的损失函数
    XGBoost、LightGBM的详细对比介绍
    $(function(){})的执行过程分析
    jQuery.extend({...})分析
    jquery核心功能分析
    print打印网页相关
  • 原文地址:https://www.cnblogs.com/HandLoong/p/11972078.html
Copyright © 2020-2023  润新知