JLibModbusWrite.java
3.87 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
package com.huaheng.api.dianqi;
import com.intelligt.modbus.jlibmodbus.Modbus;
import com.intelligt.modbus.jlibmodbus.exception.ModbusIOException;
import com.intelligt.modbus.jlibmodbus.exception.ModbusNumberException;
import com.intelligt.modbus.jlibmodbus.exception.ModbusProtocolException;
import com.intelligt.modbus.jlibmodbus.master.ModbusMaster;
import com.intelligt.modbus.jlibmodbus.master.ModbusMasterFactory;
import com.intelligt.modbus.jlibmodbus.tcp.TcpParameters;
import java.net.InetAddress;
public class JLibModbusWrite {
public static void main(String[] args) {
try {
// 设置主机TCP参数
TcpParameters tcpParameters = new TcpParameters();
// 设置TCP的ip地址
InetAddress adress = InetAddress.getByName("192.168.10.10");
// InetAddress adress = InetAddress.getByName("127.0.0.1");
// TCP参数设置ip地址
// tcpParameters.setHost(InetAddress.getLocalHost());
tcpParameters.setHost(adress);
// TCP设置长连接
tcpParameters.setKeepAlive(true);
// TCP设置端口,这里设置是默认端口502
tcpParameters.setPort(Modbus.TCP_PORT);
// 创建一个主机
ModbusMaster master = ModbusMasterFactory.createModbusMasterTCP(tcpParameters);
Modbus.setAutoIncrementTransactionId(true);
int slaveId = 1;//从机地址
//0对应40001
int offset = 0;//寄存器读取开始地址
int quantity = 10;//读取的寄存器数量
try {
if (!master.isConnected()) {
master.connect();// 开启连接
}
// * 读线圈: ON=1,OFF=0
// * 读离散量 ON=1,OFF=0
// * 读保存寄存器 指定数据类型(可以是Float)
// * 读输入寄存器 指定数据类型(可以是Float)
// boolean[] readCoils = master.readCoils(slaveId, offset, 1);
// for (boolean readCoil : readCoils) {
// System.out.println(readCoil);
// }
// int[] readHoldingRegisters = master.readHoldingRegisters(slaveId, offset, 1);
// for (int readHoldingRegister : readHoldingRegisters) {
// System.out.println(readHoldingRegister);
// }
// master.writeSingleCoil(slaveId,0,true);
// boolean[] booleans=new boolean[]{true,true,true,true,true,true,true,true,true,true};
// master.writeMultipleCoils(slaveId,0,booleans);
int[] readInputRegisters = master.readHoldingRegisters(slaveId, offset, quantity);
for (int value : readInputRegisters) {
System.out.println("readInputRegisters:Address: " + offset++ + ", Value: " + value);
// byte[] bytes = toHH(value);
}
//数值转二进制第10位写0再转数值
int xie = ModbusCommon.xie(readInputRegisters[0], 10, "0");
//int[] register=new int[]{0,0,0,0,0,0,0,0,0,0};
// System.out.println(xie);
//往第一个寄存器0对应40001 写数值
master.writeSingleRegister(slaveId,0,xie);
} catch (ModbusProtocolException e) {
e.printStackTrace();
} catch (ModbusNumberException e) {
e.printStackTrace();
} catch (ModbusIOException e) {
e.printStackTrace();
} finally {
try {
master.disconnect();
} catch (ModbusIOException e) {
e.printStackTrace();
}
}
} catch (RuntimeException e) {
throw e;
} catch (Exception e) {
e.printStackTrace();
}
}
}