modbus4j初次使用总结

因为要开发一套监控系统,涉及到与监控设备间通过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

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 160,277评论 4 364
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 67,777评论 1 298
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 109,946评论 0 245
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 44,271评论 0 213
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 52,636评论 3 288
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 40,767评论 1 221
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 31,989评论 2 315
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 30,733评论 0 204
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 34,457评论 1 246
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 30,674评论 2 249
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 32,155评论 1 261
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 28,518评论 3 258
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 33,160评论 3 238
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 26,114评论 0 8
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 26,898评论 0 198
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 35,822评论 2 280
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 35,705评论 2 273

推荐阅读更多精彩内容