java modbus4j_java使用modbus4j来实现modbusTCP通信
以下是代码:
读取寄存器数据:
public class readRegisters {
/**
* 工厂。
*/
static ModbusFactory modbusFactory;
static {
if (modbusFactory == null) {
modbusFactory = new ModbusFactory();
}
}
/**
* 获取master
*
* @return
* @throws ModbusInitException
*/
public static ModbusMaster getMaster() throws ModbusInitException {
IpParameters params = new IpParameters();
params.setHost("192.168.1.100");//测试的时候填写从机ip
params.setPort(502);//从机端口
// modbusFactory.createRtuMaster(wapper); //RTU 协议
// modbusFactory.createUdpMaster(params);//UDP 协议
// modbusFactory.createAsciiMaster(wrapper);//ASCII 协议
ModbusMaster master = modbusFactory.createTcpMaster(params, false);// TCP 协议
try {
//设置超时时间
master.setTimeout(30000);
//设置重连次数
master.setRetries(5);
//初始化
master.init();
} catch (ModbusInitException e) {
e.printStackTrace();
}
return master;
}
/**
* 读01功能码
*
* @param ip 从站IP
* @param port modbus端口
* @param start 起始地址偏移量
* @param readLenth 待读寄存器个数
* @return
* @throws ModbusInitException
*/
public static ByteQueue ReadCoilsRequest( int slaveId,int start, int readLenth) throws ModbusInitException {
ModbusRequest modbusRequest = null;
try {
modbusRequest = new ReadCoilsRequest(slaveId, start, readLenth);
} catch (ModbusTransportException e) {
e.printStackTrace();
}
ModbusResponse modbusResponse = null;
try {
modbusResponse = getMaster().send(modbusRequest);
} catch (ModbusTransportException e) {
e.printStackTrace();
}
ByteQueue byteQueue = new ByteQueue(1024);
modbusResponse.write(byteQueue);
System.out.println("功能码:" + modbusRequest.getFunctionCode());
System.out.println("从站地址:" + modbusRequest.getSlaveId());
System.out.println("收到的响应信息大小:" + byteQueue.size());
System.out.println("收到的响应信息值:" + byteQueue);
return byteQueue;
}
/**
* 读02功能码
*
* @param ip 从站IP
* @param port modbus端口
* @param start 起始地址偏移量
* @param readLenth 待读寄存器个数
* @return
* @throws ModbusInitException
*/
public static ByteQueue ReadDiscreteInputsRequest( int slaveId,int start, int readLenth) throws ModbusInitException {
ModbusRequest modbusRequest = null;
try {
modbusRequest = new ReadDiscreteInputsRequest(slaveId, start, readLenth);
} catch (ModbusTransportException e) {
e.printStackTrace();
}
ModbusResponse modbusResponse = null;
try {
modbusResponse = getMaster().send(modbusRequest);
} catch (ModbusTransportException e) {
e.printStackTrace();
}
ByteQueue byteQueue = new ByteQueue(1024);
modbusResponse.write(byteQueue);
System.out.println("功能码:" + modbusRequest.getFunctionCode());
System.out.println("从站地址:" + modbusRequest.getSlaveId());
System.out.println("收到的响应信息大小:" + byteQueue.size());
System.out.println("收到的响应信息值:" + byteQueue);
return byteQueue;
}
/**
* 读03功能码内容
*
* @param ip 从站IP
* @param port modbus端口
* @param start 起始地址偏移量
* @param readLenth 待读寄存器个数
* @return
* @throws ModbusInitException
*/
public static ByteQueue ReadHoldingRegistersRequest( int slaveId,int start, int readLenth) throws ModbusInitException {
ModbusRequest modbusRequest = null;
try {
// 功能码03 读取保持寄存器的值
modbusRequest = new ReadHoldingRegistersRequest(slaveId, start, readLenth);
} catch (ModbusTransportException e) {
e.printStackTrace();
}
ModbusResponse modbusResponse = null;
try {
modbusResponse = getMaster().send(modbusRequest);
} catch (ModbusTransportException e) {
e.printStackTrace();
}
ByteQueue byteQueue = new ByteQueue(1024);
modbusResponse.write(byteQueue);
System.out.println("功能码:" + modbusRequest.getFunctionCode());
System.out.println("从站地址:" + modbusRequest.getSlaveId());
System.out.println("收到的响应信息大小:" + byteQueue.size());
System.out.println("收到的响应信息值:" + byteQueue);
return byteQueue;
}
/**
* 读04功能码
*
* @param ip 从站IP
* @param port modbus端口
* @param start 起始地址偏移量
* @param readLenth 待读寄存器个数
* @return
* @throws ModbusInitException
*/
public static ByteQueue ReadInputRegistersRequest( int slaveId,int start, int readLenth) throws ModbusInitException {
ModbusRequest modbusRequest = null;
try {
modbusRequest = new ReadInputRegistersRequest(slaveId, start, readLenth);
} catch (ModbusTransportException e) {
e.printStackTrace();
}
ModbusResponse modbusResponse = null;
try {
modbusResponse = getMaster().send(modbusRequest);
} catch (ModbusTransportException e) {
e.printStackTrace();
}
ByteQueue byteQueue = new ByteQueue(1024);
modbusResponse.write(byteQueue);
System.out.println("功能码:" + modbusRequest.getFunctionCode());
System.out.println("从站地址:" + modbusRequest.getSlaveId());
System.out.println("收到的响应信息大小:" + byteQueue.size());
System.out.println("收到的响应信息值:" + byteQueue);
return byteQueue;
}
public static void main(String[] args) {
try {
ReadHoldingRegistersRequest(1,0,1);
} catch (ModbusInitException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
对寄存器写入数据:
public class writeRegisters {
/**
* 工厂。
*/
static ModbusFactory modbusFactory;
static {
if (modbusFactory == null) {
modbusFactory = new ModbusFactory();
}
}
/**
* 获取master
*
* @return
* @throws ModbusInitException
*/
public static ModbusMaster getMaster() throws ModbusInitException {
IpParameters params = new IpParameters();
params.setHost("127.0.0.1");
params.setPort(502);
//
// modbusFactory.createRtuMaster(wapper); //RTU 协议
// modbusFactory.createUdpMaster(params);//UDP 协议
// modbusFactory.createAsciiMaster(wrapper);//ASCII 协议
ModbusMaster master = modbusFactory.createTcpMaster(params, false);// TCP 协议
try {
// 设置超时时间
master.setTimeout(30000);
// 设置重连次数
master.setRetries(3);
// 初始化
master.init();
} catch (ModbusInitException e) {
e.printStackTrace();
}
return master;
}
/**
* 写单个开关量到01功能码
* @param slaveId 从站ID
* @param start 起始地址偏移量
* @param values 待写数据
* @throws ModbusInitException
*/
public static void WriteCoilRequest( int slaveId, int start, boolean value) throws ModbusInitException {
try {
WriteCoilRequest request = new WriteCoilRequest(slaveId, start, value);
WriteCoilResponse response = (WriteCoilResponse) getMaster().send(request);
if (response.isException()) {
System.out.println("Exception response: message=" + response.getExceptionMessage());
} else {
System.out.println("Success");
}
} catch (ModbusTransportException e) {
e.printStackTrace();
}
}
/**
* 写入批量开关量到01功能码
* @param slaveId 从站ID
* @param start 起始地址偏移量
* @param values 待写数据
* @throws ModbusInitException
*/
public static void WriteCoilsRequest( int slaveId, int start, boolean[] value) throws ModbusInitException {
try {
WriteCoilsRequest request = new WriteCoilsRequest(slaveId, start, value);
WriteCoilsResponse response = (WriteCoilsResponse) getMaster().send(request);
if (response.isException()) {
System.out.println("Exception response: message=" + response.getExceptionMessage());
} else {
System.out.println("Success");
}
} catch (ModbusTransportException e) {
e.printStackTrace();
}
}
/**
*
*
* @param slaveId 从站ID
* @param start 起始地址偏移量
* @param anMask
* @param orMask
* @throws ModbusInitException
*/
public static void WriteMaskRegisterRequest( int slaveId, int start, int andMask, int orMask) throws ModbusInitException {
try {
WriteMaskRegisterRequest request = new WriteMaskRegisterRequest(slaveId, start, andMask, orMask);
WriteMaskRegisterResponse response = (WriteMaskRegisterResponse) getMaster().send(request);
if (response.isException()) {
System.out.println("Exception response: message=" + response.getExceptionMessage());
} else {
System.out.println("Success");
}
} catch (ModbusTransportException e) {
e.printStackTrace();
}
}
/**
* 单个写数据到03功能码
*
* @param slaveId 从站ID
* @param start 起始地址偏移量
* @param values 待写数据
* @throws ModbusInitException
*/
public static void WriteRegisterRequest( int slaveId, int start, int values) throws ModbusInitException {
try {
WriteRegisterRequest request = new WriteRegisterRequest(slaveId, start, values);
WriteRegisterResponse response = (WriteRegisterResponse) getMaster().send(request);
if (response.isException()) {
System.out.println("Exception response: message=" + response.getExceptionMessage());
} else {
System.out.println("Success");
}
} catch (ModbusTransportException e) {
e.printStackTrace();
}
}
/**
* 批量写数据到03功能码
*
* @param slaveId 从站ID
* @param start 起始地址偏移量
* @param values 待写数据
* @throws ModbusInitException
*/
public static void WriteRegistersRequest( int slaveId, int start, short[] values) throws ModbusInitException {
try {
WriteRegistersRequest request = new WriteRegistersRequest(slaveId, start, values);
WriteRegistersResponse response = (WriteRegistersResponse) getMaster().send(request);
if (response.isException()) {
System.out.println("Exception response: message=" + response.getExceptionMessage());
} else {
System.out.println("Success");
}
} catch (ModbusTransportException e) {
e.printStackTrace();
}
}
public static void main(String[] args) {
boolean[] data = {true,true,true,true,true,true,true};
try {
WriteCoilsRequest(1,0,data);
} catch (ModbusInitException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}
注意进行硬件测试的时候本机ip与从机ip的网址要在同一网段
附带相关jar包https://download.csdn.net/download/ilsld/12400231
java modbus4j_java使用modbus4j来实现modbusTCP通信相关推荐
- Java实现ModbusTCP通信
原文:https://blog.csdn.net/ioufev/article/details/100554691 相关链接:Java实现使用Modbus4j+seroUtils读取Mudbus RT ...
- 关于跨网闸数据同步的方式调研Java实现ModbusTCP通信
1 网闸的概念 网闸_百度百科 (baidu.com) 2 跨网闸数据同步的方式了解 目前了解到有三种方式: 1 配置开放ip.端口,外网直接访问http://www.voidcn.com/artic ...
- Java实现使用Modbus4j+seroUtils读取Mudbus RTU/ASCII Over TCP/IP连接设备数据
使用Modbus4j+seroUtils读取风速风向仪数据,现有设备IP,端口号,从机地址,寄存器读取开始地址,读取的寄存器数量.没有上述jar包可以自行搜索,网上资源挺多 /*** @author ...
- JAVA学习-JAVA实现客户端与服务器端的TCP通信
JAVA实现客户端与服务器端的TCP通信 (JAVA 工程训练阶段一.训练任务三基本通信能力.基本任务3.2javaTCP 通信) 编写两个java application 应用程序,完成以下功能: ...
- 使用java网络编程模拟简单网络即时通信
使用java网络编程模拟简单网络即时通信 通信流程图: 解析: 1.在上图中我们可以看出对于任何一个客户端,都由两部分构成,发送端和接收端(分别由两个线程来维系) 2.客户端在每一次请求链接时都会轮询 ...
- 西门子300PLC连接组态王KingSCADA实现ModbusTCP通信
西门子S7300系列PLC连接组态王实现ModbusTCP通信 西门子300系列PLC 本案例用PLC的是315-2DP,此型号PLC有两个通信接口分别是MPI.DP口. 首先把300PLC连接兴达易 ...
- S7-200SMART PLC ModbusTCP通信(ModbusTcp服务器)
S7-200SMART PLC 作为ModbusTCP通信(客户端)编程应用和程序详细讲解可以查看下面的博客,链接地址如下: S7-200SMART PLC ModbusTCP通信(多服务器多从站轮询 ...
- java socket 全双工客户端_[Java教程]用socket模拟实现全双工通信
[Java教程]用socket模拟实现全双工通信 0 2017-04-04 00:00:14 //源码下载 http://download.csdn.net/detail/qq_24054661/98 ...
- Java进阶知识 - 多线程与线程间通信
CountdownLatch, CyclicBarrier 分别适合什么场景呢? 大部分情况下, 子线程只需要关心自身执行的任务. 但在某些复杂的情况下, 需要使用多个线程来协同完成某个任务, 这就涉 ...
最新文章
- f5 会话保持 负载均衡_F5负载均衡配置-运维管理
- 纪事地图和Yahoo Cloud服务基准
- 常见的linux命令及其翻译
- php 的命名空间 看鸟哥后的随笔
- 定时器new Timer().schedule()的使用
- 程序一旦发觉写得不理想,那就得重构它
- java画笔覆盖在界面_Java画笔的简单实用方法
- php i++和++i的区别,初学者搞懂i++和++i
- spark中local模式与cluster模式使用场景_Spark内核及通信框架概述-针对面试(后面有源码分析)...
- leetcode前缀树java_Java实现 LeetCode 208 实现 Trie (前缀树)
- 访问艺术馆(codevs 1163)树形DP
- 4月第三周网络安全报告:发现放马站点域名437个
- 2000-2018年各省研发投入面板数据
- apache OpenNLP简要介绍
- 电脑重装系统后Word表格自动换行的方法
- Luminati通过住宅IP网络工作,其可靠性如何?
- css实现文字或者div盒子水平垂直居中的方法
- 商品管理系统SSM练习开发详细手册
- (八):docker swarm简单使用
- unity中的缓动插值曲线,Easing Curves的那些事
热门文章
- 中医药大学远程教育计算机,北京中医药大学远程教育计算机基础(2008版) 第6次...
- 影视剧中的武汉取景地,你去过几个?
- 从位图图像中读取2D纹理(C ++,OpenGL)
- UNIAPP中H5微信登录
- http://southpeak.github.io/blog/2014/08/02/reactiv
- 英语语法笔记——长难句分析其他方式(七)
- mysql的锁机制(读锁,写锁,表锁,行锁,悲观锁,乐观锁,间隙锁)
- Winpcap 动态链接库调用npf.sys
- 2022必撸八股!198道K8s/Docker/DevOps面试真题大汇总
- QMT vs Ptrade 速度对比 (一) 历史行情获取速度