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

  • 相关阅读:
    bash task list and interrupt
    bash字符串大小写转换方法
    Spectrum Mask
    OFDM中CP的优缺点
    模块边界使用寄存器来做数据的交互
    跨时钟域信号处理
    FPGA中一个Slice所含资源
    Verilog中if-else改写成case的方法
    同步序列的自相关与互相关
    TCP三次握手四次挥手
  • 原文地址:https://www.cnblogs.com/HandLoong/p/11972078.html
Copyright © 2011-2022 走看看