添加虚拟串口对COM1和COM2
设备管理器中要能看到这2个端口
使用ModSim模拟,ModSim下载地址
Connect Port1
新建
ModSIm基本使用
(1)modbus4j
modbus4j源码
(2)rxtx
Download - Rxtx
Rxtx在Linux下配置RXTX和Windows下配置的操作不一样。
将rxtxParallel.dll和rxtxSerial.dll文件放到JDK的jre/bin目录下(如D:Javajdk1.8.0_202jrebin)
(3)freedomotic,需要用到modbus模块
访问路径:freedomotic/plugins/devices/modbus/src/main/java/com/freedomotic/plugins/devices/modbus
freedomotic源码
(4)seroUtils.jar
下载地址:
(5)JDK1.8_202(最新的版本可能不支持,JDK的版本不能太高)
modbus4j的SerialPortWrapper接口没有实现类,推荐使用Freedomotic中的三个类实现:
SerialPortWrapperImpl.java
SerialInputStream.java
SerialOutputStream.java
SerialInputStream.java
126行、127行必须进行如下修改
// System.arraycopy(readBuf, 0, buf, offset, length);System.arraycopy(readBuf, 0, buf, offset, readBuf.length);
读取代码
public class ReadFromModbus {// 从站地址private final static int SLAVE_ADDRESS = 1;//串行波特率private final static int BAUD_RATE = 9600;public static void main(String[] args) {SerialPortWrapper serialParameters = newSerialPortWrapperImpl("COM2", BAUD_RATE, 8, 1, 0, 0, 0);/* 创建ModbusFactory工厂实例 */ModbusFactory modbusFactory = new ModbusFactory();/* 创建ModbusMaster实例 */ModbusMaster master = ateRtuMaster(serialParameters);/* 初始化 */try {master.init();readHoldingRegistersTest(master, SLAVE_ADDRESS, 1, 9);} catch (ModbusInitException e) {e.printStackTrace();} finally {master.destroy();}}/*** 读取寄存器上的内容** @param master 主站* @param slaveId 从站地址* @param start 起始地址的偏移量* @param len 待读寄存器的个数*/private static void readHoldingRegistersTest(ModbusMaster master, int slaveId, int start, int len) {try {ReadHoldingRegistersRequest request = new ReadHoldingRegistersRequest(slaveId, start, len);ReadHoldingRegistersResponse response = (ReadHoldingRegistersResponse) master.send(request);if (response.isException()) {System.out.println("Exception response: message=" + ExceptionMessage());} else {System.out.ShortData()));short[] list = ShortData();for (int i = 0; i < list.length; i++) {System.out.print(list[i] + " ");}}} catch (ModbusTransportException e) {e.printStackTrace();}}
}
写入主要代码
/*** 批量写数据到寄存器** @param master 主站* @param slaveId 从站地址* @param start 起始地址的偏移量* @param values 待写数据*/public static void writeRegistersTest(ModbusMaster master, int slaveId, int start,short[] values) {try {WriteRegistersRequest request = new WriteRegistersRequest(slaveId, start, values);WriteRegistersResponse response = (WriteRegistersResponse) master.send(request);if (response.isException())System.out.println("Exception response: message=" + ExceptionMessage());elseSystem.out.println("Success");} catch (ModbusTransportException e) {e.printStackTrace();}}
已实现modbus rtu的读写功能
下载地址:
本文发布于:2024-02-01 01:28:30,感谢您对本站的认可!
本文链接:https://www.4u4v.net/it/170672211332848.html
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。
留言与评论(共有 0 条评论) |