modbus与硬件对接Java_java中modbus协议连接
modbus在java中的使用,首先maven的pom中引入modbus4j包
com.infiniteautomation
modbus4j
3.0.3
2. 我们创建类:ModBus4JTCPClient,创建ModbusMaster连接对象,以及读取寄存器方法
package io.powerx.test;
import org.apache.commons.lang3.StringUtils;
import com.serotonin.modbus4j.ModbusFactory;
import com.serotonin.modbus4j.ModbusMaster;
import com.serotonin.modbus4j.code.DataType;
import com.serotonin.modbus4j.exception.ErrorResponseException;
import com.serotonin.modbus4j.exception.ModbusInitException;
import com.serotonin.modbus4j.exception.ModbusTransportException;
import com.serotonin.modbus4j.ip.IpParameters;
import com.serotonin.modbus4j.locator.BaseLocator;
import com.serotonin.modbus4j.msg.ModbusResponse;
import com.serotonin.modbus4j.msg.WriteRegisterRequest;
import com.serotonin.modbus4j.msg.WriteRegistersRequest;
public class ModBus4JTCPClient {
private ModbusFactory modbusFactory;
public ModbusFactory getModbusFactory() {
if (modbusFactory == null) {
modbusFactory = new ModbusFactory();
}
return modbusFactory;
}
/**
*
* @param ip
* @param port
* @return
* @throws ModbusInitException
*/
public ModbusMaster getMaster(String ip, int port) throws ModbusInitException {
ModbusMaster m = null;
IpParameters tcpParameters = new IpParameters();
tcpParameters.setHost(ip);
tcpParameters.setPort(port);
m = getModbusFactory().createTcpMaster(tcpParameters, false);
m.setTimeout(2000);
m.init();
return m;
}
/**
* Holding Register类型
*
* @param master
* @param modbusId
* @param registerId
* @param registerNumber
* @param analysisFlag
* @return
* @throws ModbusTransportException
* @throws ErrorResponseException
* @throws ModbusInitException
*/
public Number readHoldingRegister(ModbusMaster master, int modbusId, int registerId, int registerNumber,
String analysisFlag) throws ModbusTransportException, ErrorResponseException, ModbusInitException {
Number value = null;
if ("u".equals(analysisFlag)) {
value = holdingRegister_UNSIGNED(master, modbusId, registerId, registerNumber);
} else if ("s".equals(analysisFlag)) {
value = holdingRegister_SIGNED(master, modbusId, registerId, registerNumber);
}
return value;
}
public Number holdingRegister_UNSIGNED(ModbusMaster master, int modbusId, int registerId, int registerNumber)
throws ModbusTransportException, ErrorResponseException {
BaseLocator loc = BaseLocator.holdingRegister(modbusId, registerId - 1,
(registerNumber == 1) ? DataType.TWO_BYTE_INT_UNSIGNED : DataType.FOUR_BYTE_INT_UNSIGNED);
return master.getValue(loc);
}
public Number holdingRegister_SIGNED(ModbusMaster master, int modbusId, int registerId, int registerNumber)
throws ModbusTransportException, ErrorResponseException {
return master.getValue(BaseLocator.holdingRegister(modbusId, registerId - 1,
(registerNumber == 1) ? DataType.TWO_BYTE_INT_SIGNED : DataType.FOUR_BYTE_INT_SIGNED));
}
// Input Registers
public void readInputRegisters(ModbusMaster master, int registerId, int registerNumber, int modbusId,
String analysisFlag) throws ModbusTransportException, ErrorResponseException, ModbusInitException {
Number value = null;
//z代表是正数,s代表可能是负数
if ("z".equals(analysisFlag)) {
value = inputRegister_UNSIGNED(master, modbusId, registerId, registerNumber);
} else if ("f".equals(analysisFlag)) {
value = inputRegister_SIGNED(master, modbusId, registerId, registerNumber);
}
}
public Number inputRegister_UNSIGNED(ModbusMaster master, int modbusId, int registerId, int registerNumber)
throws ModbusTransportException, ErrorResponseException {
return master.getValue(BaseLocator.inputRegister(modbusId, registerId - 1,
(registerNumber == 1) ? DataType.TWO_BYTE_INT_UNSIGNED : DataType.FOUR_BYTE_INT_UNSIGNED));
}
public Number inputRegister_SIGNED(ModbusMaster master, int modbusId, int registerId, int registerNumber)
throws ModbusTransportException, ErrorResponseException {
return master.getValue(BaseLocator.inputRegister(modbusId, registerId - 1,
(registerNumber == 1) ? DataType.TWO_BYTE_INT_SIGNED : DataType.FOUR_BYTE_INT_SIGNED));
}
/**
* 写入寄存器
*
* @param master
* @param registerId
* @param modbusId
* @param sdata
* @return
* @throws ModbusTransportException
* @throws ModbusInitException
*/
public boolean writeRegister(ModbusMaster master, int registerId, int modbusId, short sdata)
throws ModbusTransportException, ModbusInitException {
// 创建请求对象
WriteRegisterRequest request = new WriteRegisterRequest(modbusId, registerId - 1, sdata);
// 发送请求并获取响应对象
ModbusResponse response = master.send(request);
if (response.isException()) {
return false;
} else {
return true;
}
}
public boolean writeRegisters(ModbusMaster master, int registerId, int modbusId, short[] sdata)
throws ModbusTransportException, ModbusInitException {
// 创建请求对象
WriteRegistersRequest request = new WriteRegistersRequest(modbusId, registerId - 1, sdata);
// 发送请求并获取响应对象
ModbusResponse response = master.send(request);
if (response.isException()) {
return false;
} else {
return true;
}
}
public void writeHoldingRegister(ModbusMaster master, int registerId, int modbusId, Number writeValue, int dataType)
throws ModbusTransportException, ErrorResponseException, ModbusInitException {
BaseLocator locator = BaseLocator.holdingRegister(modbusId, registerId - 1,
(dataType == 1) ? DataType.TWO_BYTE_INT_UNSIGNED : DataType.FOUR_BYTE_INT_UNSIGNED);
master.setValue(locator, writeValue);
}
}
3. 我们试一下在main方法中调用
int registerId=100;
int modbusId=1;
ModBus4JTCPClient modbusTcp = new ModBus4JTCPClient();
ModbusMaster master = modbusTcp.getMaster("localhost", 502);//192.168.1.108
modbusTcp.readInputRegisters(master, registerId, 1, modbusId, "u");
modbus与硬件对接Java_java中modbus协议连接相关推荐
- 快速实现modbus PLC设备转换成BACnetIP MSTP协议的方案
1 需求背景 在智能楼宇的系统中,主要使用BACnet协议实现设备.系统之间的连接.楼宇中的受控设备,如空调.门禁等终端,都通过BACnet协议连接到上位机监控系统.上位机下发BACnet指令控制设备 ...
- intouch与Modbus TCP设备对接(重点:长整型解析)
问题描述 项目实践中,intouch上位机需要和进口发电机设备进行modbus TCP/IP通讯,部分数据读出来始终不对.经过一系列分析,在intouch SMC中相应配置中,成功读取int32 数据 ...
- modbus tcp通讯 在springboot中的实现
pom.xml配置: <!-- 辅助modbus4j:repository id:ias-snapshots id:ias-releases 两个 --><repositories& ...
- MODBUS转PROFINET(PROFINET转MODBUS)协议转换器转换模块网关网桥总线桥在储油行业的应用配置方法(上)
本文主要分享北京微硬创新科技有限公司(以下简称微硬创新)生产的PROFINET转MODBUS(MODBUS转PROFINET)协议转换器PNMD485-K20在燃料油公司连接电动阀门的使用方案,由于篇 ...
- modbus网关都有哪些特点,modbus网关的功能及作用
Modbus是一种串行通信协议,Modbus已经成为工业领域通信协议的业界标准,modbus网关是工业自动化系统的一个网络集线器通信协议转换设备,modbus网关支持主流工业plc设备协议,远程获取p ...
- Modbus协议栈应用实例之三:Modbus TCP客户端应用
自从开源了我们自己开发的Modbus协议栈之后,有很多朋友建议我针对性的做几个示例.所以我们就基于平时我们的应用整理了几个简单但可以说明基本的应用方法的示例,这一篇中我们将解说如何使用协议栈实现一个M ...
- SAP EWM仓储管理系统与自动化仓储硬件对接方案介绍
一. 种类丰富的自动化仓储硬件 提到自动仓,您可能会想到自动存取货架ASRS(Automated Storage and Retrieval System),用于货物自动传输的传送带.堆垛机.自动排序 ...
- 使用udp协议实现服务器端程序时,uIP中UDP协议实现的改进
摘 要: uIP作为一种广泛使用的轻量级嵌入式TCP/IP协议栈,其UDP协议的实现还不够完善,目前最新的1.0版本中仅实现了UDP客户端,尚没有实现UDP服务端.为此,对其进行了以下三方面的改进: ...
- S7300以太网模块作为Modbus从站 实现PLC与其它Modbus 设备的通讯
远创智控MPI-ETH-YC01Puls转以太网模块支持 Modbus 功能,可作为 Modbus 从站,实现 PLC 与其他 Modbus 设备的通讯. 一. Modbus 从站功能介绍 1.1 ...
最新文章
- Num55 boss09(activiti安装以及API)
- 【Python】利用 Python 实现多任务进程
- OpenGL Draw TransformFeedback 绘制变换反馈的实例
- 重用生成的JAXB类
- 智能车复工日记【7】:关于会车的图像问题
- Node中的fs模块
- Swift iOS : 内存管理
- (转载)grep 行号正则匹配字符有颜色
- vsftp服务器mysql认证_基于mysql控制vsftp的用户认证机制
- 50多条mysql数据库优化建议
- 巧用主力进出、主力买卖指标进行波段操作——逃顶和抄底
- 数百种 Windows 软件的免费替代品列表
- 主成分分析法原理与MATLAB实现
- 乘幂法求主特征值和特征向量(C++)
- 现代电力电子期末考试
- python做乘法运算定律_乘法运算定律(四年级数学下册乘法运算定律)
- 定义一个三角形的类来进行一些操作
- 2011年五一江西萍乡武功山--绿郁葱葱的连绵高山草甸,漂亮
- excel提取单元格内特定字符(字/词)前(后)的内容
- 黑视素照度(EML) Equivalent Melanopic Lux 计算工具
热门文章
- go爬虫和python爬虫哪个好_python 爬虫实战项目--爬取京东商品信息(价格、优惠、排名、好评率等)-Go语言中文社区...
- solr 7 mysql导入_solr 7.7.0 windows 导入mysql数据库数据
- javascript好文---深入理解定位父级offsetParent及偏移大小
- cs8900a网卡驱动--寄存器
- 网络编程模型综述 之 UNIX网络I/O模型
- SIP 中的Dialog,call,session 和 transaction .
- linux进程和线程教程,Linux下查看进程和线程
- tdk怎么设置_你真的做好网站的标题、描述、关键词(TDK)设置了吗?
- 智能机器人及其应用ppt课件_一文了解!伺服系统机理及其在工业机器人等领域的应用...
- 【转】1.1异步编程:线程概述及使用