package com.rib.modbus;
import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;
import com.serotonin.modbus4j.BatchRead;
import com.serotonin.modbus4j.BatchResults;
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.WriteCoilRequest;
import com.serotonin.modbus4j.msg.WriteCoilResponse;
import com.serotonin.modbus4j.msg.WriteCoilsRequest;
import com.serotonin.modbus4j.msg.WriteCoilsResponse;
import com.serotonin.modbus4j.msg.WriteRegisterRequest;
import com.serotonin.modbus4j.msg.WriteRegisterResponse;
import com.serotonin.modbus4j.msg.WriteRegistersRequest;
public class Modbus4jWriteUtils {
static Log log = LogFactory.getLog(Modbus4jWriteUtils.class);
/**
* 工厂。
*/
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);
ModbusMaster master = new ModbusFactory().createTcpMaster(params, true);
master.init();
return master;
}
/**
* 写 [01 Coil Status(0x)]写一个 function ID = 5
*
* @param slaveId
* slave的ID
* @param writeOffset
* 位置
* @param writeValue
* 值
* @return 是否写入成功
* @throws ModbusTransportException
* @throws ModbusInitException
*/
public static boolean writeCoil(int slaveId, int writeOffset, boolean writeValue)
throws ModbusTransportException, ModbusInitException {
// 01 Coil Status
ModbusMaster modbusMaster = getMaster();
WriteCoilRequest request = new WriteCoilRequest(slaveId, writeOffset, writeValue);
WriteCoilResponse response = (WriteCoilResponse) modbusMaster.send(request);
if (response.isException()) {
return false;
} else {
return true;
}
}
/**
* 写[01 Coil Status(0x)] 写多个 function ID = 15
*
* @param slaveId
* slaveId
* @param startOffset
* 开始位置
* @param bdata
* 写入的数据
* @return 是否写入成功
* @throws ModbusTransportException
* @throws ModbusInitException
*/
public static boolean writeCoils(int slaveId, int startOffset, boolean[] bdata)
throws ModbusTransportException, ModbusInitException {
// 获取master
ModbusMaster tcpMaster = getMaster();
// 创建请求
WriteCoilsRequest request = new WriteCoilsRequest(slaveId, startOffset, bdata);
// 发送请求并获取响应对象
WriteCoilsResponse response = (WriteCoilsResponse) tcpMaster.send(request);
if (response.isException()) {
return false;
} else {
return true;
}
}
/***
* 写[03 Holding Register(4x)] 写一个 function ID = 6
*
* @param slaveId
* @param writeOffset
* @param writeValue
* @return
* @throws ModbusTransportException
* @throws ModbusInitException
*/
public static boolean writeRegister(int slaveId, int writeOffset, short writeValue)
throws ModbusTransportException, ModbusInitException {
// 获取master
ModbusMaster tcpMaster = getMaster();
// 创建请求对象
WriteRegisterRequest request = new WriteRegisterRequest(slaveId, writeOffset, writeValue);
WriteRegisterResponse response = (WriteRegisterResponse) tcpMaster.send(request);
if (response.isException()) {
log.error(response.getExceptionMessage());
return false;
} else {
return true;
}
}
/**
*
* 写入[03 Holding Register(4x)]写多个 function ID=16
*
* @param slaveId
* modbus的slaveID
* @param startOffset
* 起始位置偏移量值
* @param sdata
* 写入的数据
* @return 返回是否写入成功
* @throws ModbusTransportException
* @throws ModbusInitException
*/
public static boolean writeRegisters(int slaveId, int startOffset, short[] sdata)
throws ModbusTransportException, ModbusInitException {
// 获取master
ModbusMaster tcpMaster = getMaster();
// 创建请求对象
WriteRegistersRequest request = new WriteRegistersRequest(slaveId, startOffset, sdata);
// 发送请求并获取响应对象
ModbusResponse response = tcpMaster.send(request);
if (response.isException()) {
log.error(response.getExceptionMessage());
return false;
} else {
return true;
}
}
/**
* 写入数字类型的模拟量(如:写入Float类型的模拟量、Double类型模拟量、整数类型Short、Integer、Long)
*
* @param slaveId
* @param offset
* @param value
* 写入值,Number的子类,例如写入Float浮点类型,Double双精度类型,以及整型short,int,long
* @param registerCount
* ,com.serotonin.modbus4j.code.DataType
* @throws ModbusTransportException
* @throws ErrorResponseException
* @throws ModbusInitException
*/
public static void writeHoldingRegister(int slaveId, int offset, Number value, int dataType)
throws ModbusTransportException, ErrorResponseException, ModbusInitException {
// 获取master
ModbusMaster tcpMaster = getMaster();
// 类型
BaseLocator<Number> locator = BaseLocator.holdingRegister(slaveId, offset, dataType);
tcpMaster.setValue(locator, value);
}
/**
* 测试
*
* @param args
*/
public static void main(String[] args) {
try {
// 01测试 coil 单个
// Boolean v011 = writeCoil(1, 0, false);
// Boolean v012 = writeCoil(1, 1, true);
// Boolean v013 = writeCoil(1, 2, false);
// System.out.println("v011:" + v011);
// System.out.println("v012:" + v012);
// System.out.println("v013:" + v013);
//02测试 coil 批量
// boolean t02 = writeCoils(1, 0, new boolean[] { true, false, true });
// System.out.println("T02:" + t02);
// 测试03
// short v = -3;
// boolean t03 = writeRegister(1, 0, v);
// System.out.println("T03:" + t03);
// 测试04
// boolean t04 = writeRegisters(1, 0, new short[] { -3, 3, 9 });
// System.out.println("t04:" + t04);
} catch (Exception e) {
e.printStackTrace();
}
}
}
没有合适的资源?快使用搜索试试~ 我知道了~
完整版modbus+tcp+ java开发代码
共55个文件
xml:16个
java:10个
class:10个
2星 需积分: 43 335 下载量 33 浏览量
2018-10-31
16:27:12
上传
评论 9
收藏 8.51MB RAR 举报
温馨提示
对寄存器 hoilding request 读写操作,对线圈 coil request读写操作。
资源推荐
资源详情
资源评论
收起资源包目录
modbus+java+tcp.rar (55个子文件)
modbus
.project 1KB
modbus.iml 2KB
src
test
resources
java
main
webapp
resources
java
com
rib
tcp
TcpClient2.java 2KB
TcpClient.java 2KB
ServerThread.java 1KB
TcpServer.java 797B
modbus
TestCase.java 2KB
Modbus4jWriteUtils.java 7KB
Modbus4jUtil.java 6KB
WriteToModbus.java 5KB
Test2.java 4KB
dn9x
modbus
controller
WriteToModbus.java 5KB
lib
serotonin-utils-2.1.7.jar 444KB
modbus4j-2.0.7.zip 7.63MB
serotonin-timer-2.0.6.jar 42KB
modbus4j-2.0.7.jar 133KB
commons-lang3-3.4.jar 424KB
commons-logging-1.2.jar 60KB
modbus4j-2.0.2.jar 125KB
target
m2e-wtp
web-resources
META-INF
MANIFEST.MF 114B
maven
com.rib
modbus
pom.properties 231B
pom.xml 3KB
generated-sources
annotations
classes
com
rib
tcp
TcpClient.class 2KB
TcpClient2.class 2KB
ServerThread.class 2KB
TcpServer.class 1KB
modbus
WriteToModbus.class 4KB
Test2.class 3KB
TestCase.class 3KB
Modbus4jWriteUtils.class 4KB
Modbus4jUtil.class 4KB
dn9x
modbus
controller
WriteToModbus.class 4KB
test-classes
.idea
artifacts
modbus_war_exploded.xml 1KB
modbus_war.xml 299B
libraries
Maven__com_serotonin_serotonin_timer_2_0_6.xml 564B
Maven__org_apache_commons_commons_lang3_3_0.xml 556B
Maven__com_infiniteautomation_modbus4j_2_0_7.xml 551B
Maven__com_serotonin_serotonin_utils_2_1_7.xml 564B
Maven__commons_logging_commons_logging_1_1_1.xml 572B
misc.xml 1KB
compiler.xml 1KB
workspace.xml 63KB
encodings.xml 301B
modules.xml 252B
copyright
profiles_settings.xml 76B
.settings
org.eclipse.wst.jsdt.ui.superType.container 49B
org.eclipse.wst.common.project.facet.core.xml 252B
org.eclipse.m2e.core.prefs 90B
org.eclipse.jdt.core.prefs 430B
org.eclipse.wst.validation.prefs 50B
org.eclipse.wst.jsdt.ui.superType.name 6B
org.eclipse.wst.common.component 659B
.jsdtscope 575B
pom.xml 3KB
.classpath 2KB
共 55 条
- 1
sinfotek
- 粉丝: 2
- 资源: 1
上传资源 快速赚钱
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
安全验证
文档复制为VIP权益,开通VIP直接复制
信息提交成功
- 1
- 2
前往页