近期在搞物联网相关内容,接触到了modbus协议,做个记录方便以后使用。

本篇文章主要给大家演示如何通过java对接modbus-tcp协议,后续还会介绍如何通过Java对接modbus-rtu协议。

一、环境准备

关于modbus的协议介绍,这里就不过多赘述了,百度很多,我们直接进入正题。

1.下载modscan32,其中应该会包含modscan32(主机)及modsim32(从机),我们后续会使用modsim32模拟从机。
下载地址或自行百度搜索(网上资源还是很多的):
https://download.csdn.net/download/liboyang71/74307745

2.java环境准备,此处我们使用的是jdk1.8

二、代码编写

2.1 modsim准备

首先我们先使用modsim将从机数据进行准备,流程入下图所示

1.点击 连接设置->连接->Modbus/TCP 服务器


2.文件->新建

3.配置从机相关数据

我们将address设置位0001,deviceId设置为1,point type选择03,这三个参数后续需要和代码有对应关系,我们说明一下,如下图所示,然后我们将0001设置为5721,0002设置为随机数变动。

到这里,我们关于modsim的相关准备工作就做完了,相当于我们模拟了一个modbus-tcp协议的硬件设备,接下来我们来编写代码。

2.2编写Java代码

1.创建一个maven项目
2.添加jlibmodbus依赖

        <dependency><groupId>com.intelligt.modbus</groupId><artifactId>jlibmodbus</artifactId><version>1.2.9.7</version></dependency>

3.编写Java代码

package com.beyondli;import com.intelligt.modbus.jlibmodbus.Modbus;
import com.intelligt.modbus.jlibmodbus.master.ModbusMaster;
import com.intelligt.modbus.jlibmodbus.master.ModbusMasterFactory;
import com.intelligt.modbus.jlibmodbus.tcp.TcpParameters;import java.net.InetAddress;public class ModbusPollTCPTest {public static void main(String[] args) {try {// 设置主机TCP参数TcpParameters tcpParameters = new TcpParameters();// 设置TCP的ip地址InetAddress adress = InetAddress.getByName("127.0.0.1");// TCP参数设置ip地址// tcpParameters.setHost(InetAddress.getLocalHost());tcpParameters.setHost(adress);// TCP设置长连接tcpParameters.setKeepAlive(true);// TCP设置端口,这里设置是默认端口502tcpParameters.setPort(Modbus.TCP_PORT);// 创建一个主机ModbusMaster master = ModbusMasterFactory.createModbusMasterTCP(tcpParameters);Modbus.setAutoIncrementTransactionId(true);int slaveId = 1;//从机地址int offset = 0;//寄存器读取开始地址int quantity = 5;//读取的寄存器数量while (true) {try {if (!master.isConnected()) {master.connect();// 开启连接}// 读取对应从机的数据,readInputRegisters读取的写寄存器,功能码04//int[] registerValues = master.readInputRegisters(slaveId, offset, quantity);int[] registerValues = master.readHoldingRegisters(slaveId, offset, quantity);// 控制台输出for (int value : registerValues) {System.out.println(" Value: " + value);}//修改3号位为7165master.writeSingleRegister(slaveId, 2, 7165);Thread.sleep(1000);}catch (Exception e) {e.printStackTrace();Thread.sleep(1000);}}} catch (Exception e) {e.printStackTrace();}}}

以上代码我们获取到了modbus中0001和0002的数据,并且将0003的位置数据改为了7165,对应注释都在代码中,整体效果入下图所示。

以上就是java与modbus-tcp的对接方式,各位同学可根据自己的业务进行一些调整,此文章没有去过多的讲一些理论和概念,主要为了方便后续使用做一些记录,modbus-tcp的对接方式相对简单,后续还会编写一篇modbus-rtu的连接文档,会相对复杂一点。

Java 使用Modsim32进行modbus-tcp协议模拟(从机)并使用java当做主机(Maven项目)进行从机信息获取及修改相关推荐

  1. Java 使用Virtual Serial Port Driver及Modsim32进行modbus-rtu协议模拟(从机)并使用java当做主机(Maven项目)进行从机信息获取及修改

    上面我们写了一篇关于modbus-tcp的文章,这一篇我们主要将关于modbus-rtu的对接方式,好了,废话不多说,直接开搞. 一.环境准备 1.下载Virtual Serial Port Driv ...

  2. 力控 串口服务器 虚拟串口,M4系列串口服务器与力控组态软件MODBUS TCP 协议通信--有人物联网.pdf...

    M4系列串口服务器与力控组态软件MODBUS TCP 协议通信--有人物联网.pdf M4 系列串口服务器与力控组态软件MODBUS TCP 协议通信 M4系列串口服务器与力控组态软件MODBUS T ...

  3. Modbus tcp协议学习总结

    Modbus=报文头(MBAP)+帧结构(PDU) 注意:据说RTU和TCP的差距就是效验码,具体我也没有操作,所以这里介绍的只有TCP相关内容.看这个章节的时候最好下载Modbus Slave(服务 ...

  4. ModBus/TCP协议分析

    ModBus/TCP协议分析 一.术语 1 word = 2 byte; 1 byte = 8 bit. 校验码:校验码是由前面的数据通过某种算法得出的,用以检验该组数据的正确性.代码作为数据在向计算 ...

  5. MODBUS TCP协议实例数据帧详细分析

    MODBUS TCP协议实例数据帧详细分析 1.简介 2.ModbusTCP数据帧 2.1.报文头MBAP 2.2.帧结构PDU 3.ADU详细结构 3.1. 0x01:读线圈 3.2. 0x02:读 ...

  6. C#上位机与台达PLC通信,modbus TCP协议

    C#上位机与台达PLC通信,modbus TCP协议. 1.真实使用项目,该程序框架完整,适合在此基础上开发项目. 2.使用VS2019开发. 3.项目还涉及到halcon视觉检测功能. YID:76 ...

  7. 如何使用python读取modbus/TCP协议数据

    文章目录 前言 一.modbus_tk是什么? 二.modbus_tk的使用步骤 三.使用modscan测试 四.32位无符号短整型数据转为64位float数据 五.总结 前言 在做项目的时候,需要使 ...

  8. Mcgs跟转接小板(用电脑模拟)收发数据(通过Modbus Tcp协议)

    1.Mcgs跟转接小板(用电脑模拟)收发数据(通过Modbus Tcp协议),转化为后台需要的数据格式 2.调试工具:Modbus Poll  , 3. 所有端口配置为同一个,配置好本地和远程ip地址 ...

  9. C# Modbus TCP协议客户端设计工程源码带注释,开源 dll文件,支持访问多个服务器,多线程实现,西门子C# Simens PPI Master

    西门子C# Simens PPI Master C# Modbus TCP协议客户端设计工程源码带注释,开源 dll文件,支持访问多个服务器,多线程实现 renfengli2010

  10. Modbus和Modbus/TCP协议

    Modbus和Modbus/TCP协议 文章目录 Modbus和Modbus/TCP协议 一. 概述 二. 协议规范 (1) Modbus应用协议 (2)通用Modbus帧结构--协议数据单元(PDU ...

最新文章

  1. WIN7 任务栏放右侧 有个BUG
  2. 关闭Outlook自动完成功能
  3. pb怎么打开服务器上的文件夹,前台PB客户端怎么连接服务器上的SQL后台数据库...
  4. WCF 第八章 安全 客户端认证
  5. obs噪音抑制调多少合适_TVS瞬态抑制二极管的特性及应用
  6. 分享:TreeFrog 1.1 发布,C++ Web 应用开发框架
  7. android java tga转png_java 里.tga图片怎么用啊,是不是要导入一个包,真的找不到资源,希望来位大神帮帮我 小弟在此拜谢!...
  8. Python Cookbook(第3版)中文版:15.18 传递已打开的文件给C扩展
  9. 清华提出:用于细粒度实体分类的Prompt-Learning,并提出可训练Prompt模板
  10. 《Effective Java》,关于异常
  11. java教学视频_孔浩老师_孔浩老师JAVA WebService教程
  12. python launcher卸载后蓝屏_使用dump文件分析系统蓝屏原因
  13. Elastic Job定时任务
  14. 构造图片木马,绕过文件内容检测上传木马
  15. jenkins 并发构建Android 报错:Gradle build daemon disappeared unexpectedly (it may have been killed or may
  16. 知识小结------数据分析------Fisher‘s exact test(费希尔检测)
  17. 关于小米路由器的局域网内相互ping设备IP的解决方法
  18. FFmpeg教程【转】
  19. backtracking及其应用
  20. Git提交后,文件夹任然有红色叹号提示

热门文章

  1. eclipse adt离线安装
  2. 应用随机过程_《常见随机过程》(目录)
  3. 吉米多维奇数学分析习题集--习题1380(用隐函数求导计算泰勒展开式)
  4. 基于Qt编写的在线音乐播放器
  5. 如何获取网络标准时间
  6. H5 video 播放器demo
  7. 转:高级PHP应用程序漏洞审核技术
  8. 强制更改wifi名前缀CMCC
  9. 初识Vocaloid3
  10. python 欧姆龙plc通信_二进制PLC通信校验和