文档章节

modbus java 开发

地瓜2013
 地瓜2013
发布于 10/13 00:37
字数 608
阅读 9
收藏 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
博文 71
码字总数 8633
作品 0
大兴
程序员
java中modbus协议连接

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

江湖鱼大虾
07/16
0
0
JDK、JRE、JVM三者间的关系

  JDK(Java Development Kit)是针对Java开发员的产品,是整个Java的核心,包括了Java运行环境JRE、Java工具和Java基础类库。Java Runtime Environment(JRE)是运行JAVA程序所必须的环境...

张德德
2014/02/28
0
0
JDK, JRE与JVM的区别与联系

很多朋友可能跟我一样,已经使用JAVA开发很久了,可是对JDK,JRE,JVM这三者的联系与区别,一直都是模模糊糊的。 今天特写此文,来整理下三者的关系。 JDK : Java Development ToolKit(Java开发...

穿石小水滴
08/15
0
0
书单丨5本Java后端技术书指引你快速进阶

一名Java开发工程师 不仅要对Java语言及特性有深层次的理解 而且需要掌握与Java相关的 框架、生态及后端开发知识 本文涉及多种后端开发需要掌握的技能 对于帮助提高开发能力非常有帮助 NO.1...

Java高级架构
05/30
0
0
Java开发学习之三版本简介 java编程

  Java编程语言,在更迭迅速的互联网领域多年屹立不倒,足以得见Java这门语言旺盛的生命力,因此,会有很多想要进入互联网领域的朋友,想要学Java来转行开发。但是,所谓“隔行如隔山”,j...

老男孩Linux培训
06/05
0
0

没有更多内容

加载失败,请刷新页面

加载更多

kubeadm部署kubernetes集群

一、环境要求 这里使用RHEL7.5 master、etcd:192.168.10.101,主机名:master node1:192.168.10.103,主机名:node1 node2:192.168.10.104,主机名:node2 所有机子能基于主机名通信,编辑...

人在艹木中
今天
2
0
Shell特殊符号总结以及cut,sort,wc,uniq,tee,tr,split命令

特殊符号总结一 * 任意个任意字符 ? 任意一个字符 # 注释字符 \ 脱义字符 | 管道符 # #号后的备注被忽略[root@centos01 ~]# ls a.txt # 备注 a.txt[root@centos01 ~]# a=1[root@centos01...

野雪球
今天
2
0
OSChina 周二乱弹 —— 程序员圣衣

Osc乱弹歌单(2018)请戳(这里) 【今日歌曲】 @达尔文:分享Skeeter Davis的单曲《The End of the World》 《The End of the World》- Skeeter Davis 手机党少年们想听歌,请使劲儿戳(这里...

小小编辑
今天
14
0
[ python import module ] 导入模块

import moudle_name ----> import module_name.py ---> import module_name.py文件路径 -----> sys.path (这里进行查找文件) # from app.web import Personimport app.web.Person as Pe......

_______-
昨天
5
0
Redis性能问题排查解决手册

一、性能相关的数据指标 通过Redis-cli命令行界面访问到Redis服务器,然后使用info命令获取所有与Redis服务相关的信息。通过这些信息来分析文章后面提到的一些性能指标。 nfo命令输出的数据可...

IT--小哥
昨天
2
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部