美文网首页高级专题
modbus4j初次使用总结

modbus4j初次使用总结

作者: 雨中的单车 | 来源:发表于2018-07-19 21:57 被阅读0次

    因为要开发一套监控系统,涉及到与监控设备间通过modbus协议进行通讯

    先解释一下什么是modbus协议

    Modbus是一种串行通信协议,是Modicon公司(现在的施耐德电气 Schneider Electric)于1979年为使用可编程逻辑控制器(PLC)通信而发表。Modbus已经成为工业领域通信协议的业界标准(De facto),并且现在是工业电子设备之间常用的连接方式。[1] Modbus比其他通信协议使用的更广泛的主要原因有:

    公开发表并且无版权要求

    易于部署和维护

    对供应商来说,修改移动本地的比特或字节没有很多限制

    Modbus允许多个 (大约240个) 设备连接在同一个网络上进行通信,举个例子,一个由测量温度和湿度的装置,并且将结果发送给计算机。在数据采集与监视控制系统(SCADA)中,Modbus通常用来连接监控计算机和远程终端控制系统(RTU)。

    摘自维基百科

    研究了一下java的解决框架有j2modjamod、modbus4j等,对比了一下感觉modbus4j不错,因此采用modbus4j来实现。

    由于没有拿到测试硬件,我们只能采用模拟工具进行程序调试,需要安装的模拟工具有

    Virtual Serial Port Driver仿真串口、创建虚拟 COM 对


    Modbus Slave


    Virtual Serial Port Driver用来创建仿真串口,Modbus Slave模拟slave端

    我在使用Virtual Serial Port Driver创建串口时出现过不能创建的错误,后来重新下载了一个新的8.0版本解决问题.

    下面说一下程序调试需要注意的问题

    modbus4j中MasterTest.java,这里面包含各种操作的测试代码

    但是我在运行测试RTU方式时,发现总是报空指针错误,最后定位到需要使用RXTXcomm.jar包,支持Java串口通信操作的jar包,后来发现配置这个包很烦,还要在jdk的bin目录下增加rxtxSerial.dll文件,windows操作系统是这个文件,其它操作系统需要参考https://github.com/rxtx/rxtx具体设置,最后放弃此种方法,寻求其它解决办法。

    最后发现TestSerialPortWrapper.java可疑,这个类里实现了SerialPortWrapper接口,但是没有实现对应的方法。因此从实现SerialPortWrapper入手,后来在freedomotic这个开源架构中查到一个SerialPortWrapper接口的实现,我就直接把其中几个类迁移了过来,主要有com.freedomotic.plugins.devices.modbus.gateways目录下的SerialPortWrapperImpl.java、SerialInputStream.java.java、SerialOutputStream.java三个类。其中在SerialInputStream.java.java类中的125行中System.arraycopy(readBuf, 0, buf, offset, length);length值会导致数组越界错误,把此处改为 System.arraycopy(readBuf, 0, buf, offset, readBuf.length);即可,这几个类引用jSSC来解决串口通讯,不需要RXTX那种复杂配置,直接引入包就可以。

    在测试MasterTest.java类中的不同操作方法时一定要注意调整Modbus Slave中的Function参数,使之二者相对应。

    整个工程需要引用的包如下,

    dependencies {

        compile group: 'org.slf4j', name: 'slf4j-api', version: '1.7.25'

        //modbus

        compile group: 'com.infiniteautomation', name: 'modbus4j', version: '3.0.3'

        compile group: 'org.scream3r', name: 'jssc', version: '2.8.0'

    }

    参考文档:

    https://zh.wikipedia.org/wiki/Modbus

    Virtual Serial Port Driver

    https://www.eltima.com/cn/products/vspdxp/

    freedomotic

    https://github.com/freedomotic/freedomotic

    modbus4j

    https://github.com/infiniteautomation/modbus4j

    jSSC

    https://github.com/scream3r/java-simple-serial-connector

    RXTX

    https://github.com/rxtx/rxtx

    http://www.cnblogs.com/Dreamer-1/p/5523046.html

    https://blog.csdn.net/u013150916/article/details/78065479

    https://www.cnblogs.com/Dn9x/p/4298146.html

    https://github.com/infiniteautomation/modbus4j/issues/5

    相关文章

      网友评论

        本文标题:modbus4j初次使用总结

        本文链接:https://www.haomeiwen.com/subject/warxmftx.html