modbus协议内容网上已经很齐全了,这里就不赘述了。(此篇文章根据网上已有内容整理)
核心依赖: modbus4j-3.0.4-SNAPSHOT.jar
-
modbus tcp slave
1.获取tcp slave
//springboot项目实现CommandLineRunner类和@Component注解,程序启动时就加载tcp slave
@Component
public class Slave implements CommandLineRunner {
@Override
public void run(String... args) throws Exception {
createSalve();
}
private void createSalve() {
//创建modbus工厂
ModbusFactory modbusFactory = new ModbusFactory();
//创建TCP服务端
final ModbusSlaveSet salve = modbusFactory.createTcpSlave(true);
//向过程影像区添加数据
salve.addProcessImage(Register.getModscanProcessImage(1));
//获取寄存器
salve.getProcessImage(1);
try {
salve.start();
} catch (ModbusInitException e) {
e.printStackTrace();
}
}
}
2.创建线圈和寄存器
public class Register {
static BasicProcessImage getModscanProcessImage(int slaveId) {
BasicProcessImage processImage = new BasicProcessImage(slaveId);
processImage.setInvalidAddressValue(Short.MIN_VALUE);
//创建可读写开关量
processImage.setCoil(0, true);
processImage.setCoil(1, false);
processImage.setCoil(2, true);
processImage.setCoil(3, false);
processImage.setCoil(4, true);
processImage.setCoil(5, false);
processImage.setCoil(6, true);
processImage.setCoil(7, true);
processImage.setCoil(8, true);
processImage.setCoil(9, true);
//创建只读开关量
processImage.setInput(0, false);
processImage.setInput(1, false);
processImage.setInput(2, true);
processImage.setInput(3, false);
processImage.setInput(4, true);
processImage.setInput(5, true);
processImage.setInput(6, true);
processImage.setInput(7, false);
processImage.setInput(8, true);
processImage.setInput(9, true);
//创建 保持寄存器
processImage.setHoldingRegister(0, (short) 1);
processImage.setHoldingRegister(1, (short) 10);
processImage.setHoldingRegister(2, (short) 100);
processImage.setHoldingRegister(3, (short)