JLibModbusRead.java
3.71 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
92
93
94
95
96
97
package com.huaheng.api.dianqi;
import java.net.InetAddress;
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;
/**
* Hello world!
*
*/
public class JLibModbusRead {
public static void main(String[] args) {
try {
// 设置主机TCP参数
TcpParameters tcpParameters = new TcpParameters();
// 设置TCP的ip地址
InetAddress adress = InetAddress.getByName("192.168.2.1");
//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;//从机地址
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, quantity);
boolean[] discreteInputs = master.readDiscreteInputs(slaveId, offset, quantity);
int[] readHoldingRegisters = master.readHoldingRegisters(slaveId, offset, quantity);
// 读取对应从机的数据,readInputRegisters读取的写寄存器,功能码04
int[] readInputRegisters = master.readInputRegisters(slaveId, offset, quantity);
for (boolean value : readCoils) {
System.out.println("readCoils:Address: " + offset++ + ", Value: " + value);
}
for (boolean value : discreteInputs) {
System.out.println("discreteInputs:Address: " + offset++ + ", Value: " + value);
}
for (int value : readHoldingRegisters) {
System.out.println("readHoldingRegisters:Address: " + offset++ + ", Value: " + value);
}
// 控制台输出
for (int value : readInputRegisters) {
System.out.println("readInputRegisters:Address: " + offset++ + ", Value: " + value);
}
} 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();
}
}
}