文档章节

modbus java 开发

地瓜2013
 地瓜2013
发布于 10/13 00:37
字数 608
阅读 15
收藏 0

调试工具:modbus slave(从),modbus调试精灵

java方法:

final class HardneedlTest {

    //MODBUS网络上从站地址

    private final static int SLAVE_ADDRESS=5;

 

    //串行口波特率

    private final static int BAUD_RATE = 9600;

    

    public static void main(String[] args) throws Exception {

        SerialParameters serialParameters = new SerialParameters();

 

        //设定MODBUS通讯的串行口

        serialParameters.setCommPortId("COM3");

 

        //设定成无奇偶校验

        serialParameters.setParity(0);

 

        //设定成数据位是8位

        serialParameters.setDataBits(8);

 

        //设定为1个停止位

        serialParameters.setStopBits(1);

 

        serialParameters.setPortOwnerName("Numb nuts");

 

        //串行口上的波特率

        serialParameters.setBaudRate(BAUD_RATE);

 

        ModbusFactory modbusFactory = new ModbusFactory();

        ModbusMaster master = modbusFactory.createRtuMaster(serialParameters);

        try {

            master.init();

            readDiscreteInputTest(master,SLAVE_ADDRESS,0,8);

            writeRegistersTest(master,SLAVE_ADDRESS, 0, new short[]{0x31,0xb,0xc,0xd,0xe,0x9, 0x8, 0x7, 0x6} );

            readHoldingRegistersTest(master,SLAVE_ADDRESS,0,8);

        }

        finally {

            master.destroy();

        }

    }

 

    /**

     * 读开关量型的输入信号

     * @param master 主站

     * @param slaveId 从站地址

     * @param start 起始偏移量

     * @param len 待读的开关量的个数

     */

    private static void readDiscreteInputTest(ModbusMaster master, int slaveId, int start, int len) {

        try {

            ReadDiscreteInputsRequest request = new ReadDiscreteInputsRequest(slaveId, start, len);

            ReadDiscreteInputsResponse response = (ReadDiscreteInputsResponse) master.send(request);

 

            if (response.isException())

                System.out.println("Exception response: message=" + response.getExceptionMessage());

            else

                System.out.println(Arrays.toString(response.getBooleanData()));

        }

        catch (ModbusTransportException e) {

            e.printStackTrace();

        }

    }

 

    /**

     * 读保持寄存器上的内容

     * @param master 主站

     * @param slaveId 从站地址

     * @param start 起始地址的偏移量

     * @param len 待读寄存器的个数

     */

    private static void readHoldingRegistersTest(ModbusMaster master, int slaveId, int start, int len) {

        try {

            ReadHoldingRegistersRequest request = new ReadHoldingRegistersRequest(slaveId, start, len);

            ReadHoldingRegistersResponse response = (ReadHoldingRegistersResponse) master.send(request);

 

            if (response.isException())

                System.out.println("Exception response: message=" + response.getExceptionMessage());

            else

                System.out.println(Arrays.toString(response.getShortData()));

        }

        catch (ModbusTransportException e) {

            e.printStackTrace();

        }

    }

 

    /**

     * 批量写数据到保持寄存器

     * @param master 主站

     * @param slaveId 从站地址

     * @param start 起始地址的偏移量

     * @param values 待写数据

     */

    public static void writeRegistersTest(ModbusMaster master, int slaveId, int start, short[] values) {

        try {

            WriteRegistersRequest request = new WriteRegistersRequest(slaveId, start, values);

            WriteRegistersResponse response = (WriteRegistersResponse) master.send(request);

 

            if (response.isException())

                System.out.println("Exception response: message=" + response.getExceptionMessage());

            else

                System.out.println("Success");

        }

        catch (ModbusTransportException e) {

            e.printStackTrace();

        }

    }

}

上面的代码摘抄自

https://blog.csdn.net/u010655348/article/details/52665170

当然,代码是一回事,你投入的时间够了以后就可以面对很多问题了

com.serotonin.modbus4j.exception.ModbusTransportException: CRC mismatch: given=262, calc=0

这个就是测温的单片机返回的数据,没有crc校验,这个和你程序本身没什么关系,因为用虚拟的端口测试没问题。而且这个异常好像是惯例似的。

Modbus rtu 从站就像上面的块存储,alias是别名,可以不设置。右边的00000则是数值,左边的0-9是数据地址起始位置。没有深入学习,只学习了03H读,06H写,知识学无止境,注意方法,下次别熬夜到现在,加油,阿门。

© 著作权归作者所有

共有 人打赏支持
地瓜2013
粉丝 2
博文 73
码字总数 8633
作品 0
大兴
程序员
私信 提问
java中modbus协议连接

modbus在java中的使用,首先maven的pom中引入modbus4j包 3. 我们试一下在main方法中调用

江湖鱼大虾
07/16
0
0
流量计实时数据显示,报表统计与分析,数据定时写入数据库

使用java语言编写,流量计为标准的modbus RTU协议,需要将流量计数据通过DTU发送至网站进行采集,数据可以实时显示,并将数据进行统计和分析,数据可以写入客户指定的关系数据库,如不理解有...

强仔强
2017/04/15
1
0
近五年开发经验,现居北京,欲求无锡发展机会

 08年西南某高校本科毕业,电子信息相关专业。 编程以linux下的C为主,涉足SQL、shell、PLC、java、php、嵌入式编程领域。  在UI设计、web架构设计、数据挖掘应用有实际项目经验,了解htm...

bbdlg
2013/03/25
2.6K
32
【北京/苏州】清华同方子公司诚聘java/C++工程师/架构师

JAVA开发(初级)5人 岗位职责: 1、负责软件的详细设计,编码,调试等工作; 2、负责软件详细设计和应用操作手册等的编写。 职位要求: 1、计算机及其相关专业,本科以上学历; 2、2年以上从...

宁远
2011/08/17
1K
0
【Java学习路线】新手该如何一步步的学习 Java

新手该如何一步步的学习 Java? 如果真的想学Java,最好要循序渐进,有章有法的学习它! 今天小慕就不说一些学习方法和技巧了,直接来谈每个阶段要学习的内容。 首先,给大家分享一张以 企业...

Eddie_yang
11/15
131
0

没有更多内容

加载失败,请刷新页面

加载更多

[LintCode] Linked List Cycle(带环链表)

描述 给定一个链表,判断它是否有环。 样例 给出 -21->10->4->5, tail connects to node index 1,返回 true。 这里解释下,题目的意思,在英文原题中,tail connects to node index 1 表示的...

honeymose
12分钟前
0
0
Android :报错Your project path contains non-ASCII characters.

报错内容如下 Your project path contains non-ASCII characters. This will most likely cause the build to fail on Windows. Please move your project to a different directory. See ht......

lanyu96
23分钟前
2
0
Nginx平滑添加模块

Nginx已经编译安装并运行了一段时间, 然后某一天, 发现需要用到某个模块但当初没有编译, 这个时候怎么办呢? 卸载重新安装肯定可以的, 如果Nginx版本没有变更的话, 则有一个相对平滑的方法来添...

老菜鸟0217
28分钟前
5
0
spark安装测试

spark安装测试 由于本地已经安装好hadoop相关组件,所以本文是在yarn的基础上对spark进行安装及测试 确保hdfs及yarn成功启动,hadoop版本为2.7.3 安装scala,由于本人安装的spark是2.4.0,对应...

-九天-
42分钟前
4
0
周末看完了《电能计量自动化技术》

整体质量还行,下面分别将心得记录如下: 第一章:发展历程可以看看,现在算是智能电网阶段 2:讲主站系统。以文件进行各模块的交互很值得思考,尤其是批量数据,多团队合作的情况下。另外线...

max佩恩
今天
11
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部