modbus4j例子
更新时间:2023-09-10 22:39:01 阅读量: 教育文库 文档下载
package com.modbus;
import java.nio.ByteBuffer;
import com.serotonin.modbus4j.ModbusFactory; import com.serotonin.modbus4j.ModbusMaster; import
com.serotonin.modbus4j.exception.ModbusInitException; import
com.serotonin.modbus4j.exception.ModbusTransportException;
import com.serotonin.modbus4j.ip.IpParameters; import com.serotonin.modbus4j.msg.ModbusRequest; import com.serotonin.modbus4j.msg.ModbusResponse; import
com.serotonin.modbus4j.msg.ReadHoldingRegistersRequest; import
com.serotonin.modbus4j.msg.WriteRegistersRequest;
import
com.serotonin.modbus4j.msg.WriteRegistersResponse;
import com.serotonin.util.queue.ByteQueue; /**
* modbus 处理类 * @author? * */
publicclass ModbusHandler {
static ModbusFactory modbusFactory; static {
if (modbusFactory == null) {
modbusFactory = new ModbusFactory(); } } /**
* 得到 WriteRegistersRequest *
* @param ip * @param port * @param slaveId * @param start * @param values */
publicstatic WriteRegistersRequest getWriteRegistersRequest(int slaveId, int start, short[] values) {
WriteRegistersRequest request = null; try {
request = new
WriteRegistersRequest(slaveId, start, values); } catch (ModbusTransportException e) { e.printStackTrace(); }
return request; } /**
* 得到 WriteRegistersRequest *
* @param ip * @param port * @param slaveId * @param start * @param values */
publicstatic WriteRegistersResponse getWriteRegistersResponse( ModbusMaster tcpMaster, WriteRegistersRequest request) {
WriteRegistersResponse response = null; try {
response = (WriteRegistersResponse) tcpMaster.send(request);
} catch (ModbusTransportException e) { e.printStackTrace(); }
return response;
} /** * 写入 *
* @param ip * @param port * @param slaveId * @param start * @param values */
publicstaticint modbusWTCP(String ip, int port, int slaveId, int start, short[] values) {
ModbusMaster tcpMaster = getTcpMaster(ip, port, slaveId);
if (tcpMaster == null)
{System.out.println(\);return 0;}
tcpMaster = initTcpMaster(tcpMaster);
WriteRegistersRequest request =
getWriteRegistersRequest(slaveId,start, values);
WriteRegistersResponse response =
getWriteRegistersResponse(tcpMaster,request); if (response.isException()) { return 0; } else { return 1; } } /**
* 初始化?tcpMaster *
* @param tcpMaster * @return */
publicstatic ModbusMaster
initTcpMaster(ModbusMaster tcpMaster) { if (tcpMaster == null)returnnull; try {
tcpMaster.init(); return tcpMaster;
} catch (ModbusInitException e) { returnnull; } } /**
* 得到 ModbusRequest *
* @param salveId * @param start * @param readLenth * @param tcpMaster */
publicstatic ModbusRequest getRequest(int salveId, int start,
int readLenth, ModbusMaster tcpMaster) { ModbusRequest modbusRequest = null; try {
modbusRequest = new
ReadHoldingRegistersRequest(salveId, start,readLenth);
return modbusRequest;
} catch (ModbusTransportException e) { e.printStackTrace(); returnnull; } } /**
* 得到 ModbusResponse *
* @param salveId * @param start
* @param readLenth * @param tcpMaster */
publicstatic ModbusResponse
getModbusResponse(ModbusMaster tcpMaster, ModbusRequest request) {
ModbusResponse modbusResponse = null; try {
modbusResponse = tcpMaster.send(request); return modbusResponse;
} catch (ModbusTransportException e) { e.printStackTrace(); returnnull; } } /**
* 获取 设备数据 * @param ip
* 信息机地址ip
* @param port
* 端口 默认 端口502 * @param salveId * 从站地址 * @param start
* 数据报文 的 起始 位置 * @param readLenth * 读取的长度 * @return 结果 */
publicstatic ByteQueue modbusRTCP(String ip, int port, int salveId,
int start, int readLenth) {
ModbusMaster tcpMaster = getTcpMaster(ip, port, salveId);// 得到tcpMaster if (tcpMaster == null)
{System.out.println(\\);returnnull; }
returnmodbusRTCP0(ip, port, salveId, start, readLenth, tcpMaster); } /**
* 获取 tcp master *
* @param ip * @param port * @param salveId */
publicstatic ModbusMaster getTcpMaster(String ip, int port, int salveId) {
IpParameters params = new IpParameters(); params.setHost(ip);// 设置ip
if (port == 0)params.setPort(502);// 设置端口,默认为502
else params.setPort(port);
ModbusMaster tcpMaster =
modbusFactory.createTcpMaster(params, true);// 获取ModbusMaster对象 return tcpMaster; } /**
* modbus 读取 *
* @param ip * @param port * @param salveId * @param start * @param readLenth * @param tcpMaster * @return */
publicstatic ByteQueue modbusRTCP0(String ip, int port, int salveId,
int start, int readLenth, ModbusMaster tcpMaster) {
if (tcpMaster == null) {System.out.println(\null\);returnnull;}
tcpMaster = initTcpMaster(tcpMaster);// 初始化tcpmaster
if (tcpMaster == null) {System.out.println(\null\);returnnull; }
ModbusRequest modbusRequest =
getRequest(salveId, start, readLenth,tcpMaster);// 得到requst 对象
if (modbusRequest == null) {System.out.println(\null\);returnnull;}
ModbusResponse response =
getModbusResponse(tcpMaster, modbusRequest);// 发送请求,得到Response
ByteQueue byteQueue = new ByteQueue(12); response.write(byteQueue); System.out.println(\功能\ + modbusRequest.getFunctionCode()); System.out.println(\从站地址:\ + modbusRequest.getSlaveId());
System.out.println(\收到的响应信息大小\ + byteQueue.size());
System.out.println(\收到的响应信息小:\ + byteQueue);
return byteQueue; } /* *
* Convert byte[] to hex
* string.这里我们可以将byte转换成int,然后利用Integer.toHexString(int)来转换成16进制字符串 * @param src byte[] data * @return hex string */
publicstatic String bytesToHexString(byte[] src) {
StringBuilder stringBuilder = new StringBuilder(\);
if (src == null || src.length<= 0) { returnnull; }
for (int i = 0; i < src.length; i++) { int v = src[i] & 0xFF;
String hv = Integer.toHexString(v); if (hv.length() < 2) { stringBuilder.append(0); }
stringBuilder.append(hv); }
return stringBuilder.toString(); } /** *
***************************************************
* 起始位置15,响应数据:从站|data包含的传感器个数|data length|data* *
*************************************************** *
* @param bq */
publicstaticvoid ansisByteQueue(ByteQueue bq) { byte[] result = bq.peekAll();
System.out.println(\从站地址===\ + result[0]); System.out.println(\个数===\ + result[1]);
System.out.println(\长度===\ + result[2]);
byte[] temp = null;
ByteBuffer buffer = ByteBuffer.wrap(result, 3, result.length - 3);//直接获取 data while (buffer.hasRemaining()) { temp = newbyte[2];
buffer.get(temp, 0, temp.length);
System.out.print(Integer.parseInt(bytesToHexString(temp), 16)+\); } }
publicstaticvoid main(String[] args) { ByteQueue result =
ModbusHandler.modbusRTCP(\, 502, 2, 15, 3);
ansisByteQueue(result);
short[] shor = newshort[1]; shor[0] = 0x33;
ModbusHandler.modbusWTCP(\, 502, 2, 15, shor); } }
正在阅读:
modbus4j例子09-10
让学生拥有一片自主学习的净土05-10
农牧局“树党员先锋,向优秀看齐”主题演讲比赛主持词12-31
《红秀延安》观后有感02-22
2015小学四年级数学下册加法交换律和加法结合律练习题03-18
计算机控制技术课程设计报告 - 图文10-17
这样的员工一定会成为公司的高管08-18
- exercise2
- 铅锌矿详查地质设计 - 图文
- 厨余垃圾、餐厨垃圾堆肥系统设计方案
- 陈明珠开题报告
- 化工原理精选例题
- 政府形象宣传册营销案例
- 小学一至三年级语文阅读专项练习题
- 2014.民诉 期末考试 复习题
- 巅峰智业 - 做好顶层设计对建设城市的重要意义
- (三起)冀教版三年级英语上册Unit4 Lesson24练习题及答案
- 2017年实心轮胎现状及发展趋势分析(目录)
- 基于GIS的农用地定级技术研究定稿
- 2017-2022年中国医疗保健市场调查与市场前景预测报告(目录) - 图文
- 作业
- OFDM技术仿真(MATLAB代码) - 图文
- Android工程师笔试题及答案
- 生命密码联合密码
- 空间地上权若干法律问题探究
- 江苏学业水平测试《机械基础》模拟试题
- 选课走班实施方案
- modbus4j
- 例子
- 高层安全总方案
- 隧道仰拱标准化施工工艺 - 图文
- 实木家具加工门窗加工喷漆工艺环评报告 - 图文
- 试题册(定)
- 四年级语文上学期第四单元测试题A卷
- 2015年国家公务员考试:炮灰级考生冲刺申论的神奇秘药
- 液相色谱系统的日常维护及注意事项
- 沂蒙风情小镇 - 院东头镇
- 急救医学教学大纲
- 如何做一名合格的法院工作人员
- 各型机车无火回送处理办法 - 201232612039
- 2011届广州市高三年级调研测试-数学(理科)(参考答案及评分标准)打印版
- 医院2009年终工作总结
- 三下乡 - 舟山海洋旅游
- 弓的材料
- 人教A版高中数学必修三 2.1.3《分层抽样》教案
- 初级会计职称经济法基础全真模拟试题六
- 非营利期末
- 八、主要管理人员及工程技术人员配备计划
- 完整的钢琴基础教案