美文网首页高级专题
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初次使用总结

    因为要开发一套监控系统,涉及到与监控设备间通过modbus协议进行通讯 先解释一下什么是modbus协议 Modb...

  • modbus4j使用(java)

    java使用modbus4j示例如下,特别注意:如果想轮询去读数据,需要for循环调readHoldingRegi...

  • Gephi 初次使用问题总结

    csv文件导入问题笔者是通过python保存的csv文件导入数据,导入时,在导入边数据时会提示‘需要源和目标的编号...

  • RocketMQ初次部署使用总结

    1. 安装 安装RocketMQ 参考RocketMQ官方文档的Quick Start即可,比较简单。可以选择从G...

  • MyEclipse2014导入源码失败

    1.项目中使用到modbus4j包,需要查看源码,在myeclipse8.5上可以直接导入源码,但在myeclip...

  • Python Openpyxl模块的应用

    Python_Openpyxl 浅谈(最全总结 足够初次使用) python_openpyxl_操作excel P...

  • 初次使用

    今后若是没时间纸书就用这个软件吧哦。

  • 初次使用

    测试下

  • 初次使用

    马上要进入大四,临近实习,我为自己寻找、选择了一个现在看来最适合自己性格的职业类型——产品经理,选择这个职业并不完...

  • elementui中el-button点击后不失去焦点(按钮颜色

    初次接触前端,初次使用vue,初次使用elementui,难免遇到坑。使用el-button的时候,发现点击按钮后...

网友评论

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

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