diff --git a/app.db b/app.db index 9beb63e..53073ce 100644 Binary files a/app.db and b/app.db differ diff --git a/src/main/java/com/iflytop/digester/underframework/connection/UfModbusRTUOverTCP.java b/src/main/java/com/iflytop/digester/underframework/connection/UfModbusRTUOverTCP.java index 078a761..bb2402e 100644 --- a/src/main/java/com/iflytop/digester/underframework/connection/UfModbusRTUOverTCP.java +++ b/src/main/java/com/iflytop/digester/underframework/connection/UfModbusRTUOverTCP.java @@ -10,6 +10,10 @@ import java.util.HashMap; import java.util.List; import java.util.Map; public class UfModbusRTUOverTCP extends UfConnectionBase { + // host + public String host; + // port + public Integer port; // connection private Socket socket; // writer @@ -19,41 +23,10 @@ public class UfModbusRTUOverTCP extends UfConnectionBase { // busy private Boolean isBusy = false; - // connections - private static final Map connections = new HashMap<>(); - - // get connection - public static UfModbusRTUOverTCP getConnection(String host, Integer port) { - String key = host + ":" + port; - if ( connections.containsKey(key) ) { - return connections.get(key); - } - - UfModbusRTUOverTCP con = new UfModbusRTUOverTCP(); - con.connect(host, port); - connections.put(key, con); - return con; - } - - @Override - synchronized public String execute(UfMdbActuatorCmd command) { - return ""; - } - @Override public void connect() { - - } - - // constructor - public UfModbusRTUOverTCP() { - this.isBusy = false; - } - - // connect - public void connect( String host, Integer port ) { try { - this.socket = new Socket(host, port); + this.socket = new Socket(this.host, this.port); this.writer = new DataOutputStream(this.socket.getOutputStream()); this.reader = this.socket.getInputStream(); } catch (Exception e) { @@ -61,6 +34,25 @@ public class UfModbusRTUOverTCP extends UfConnectionBase { } } + @Override + synchronized public String execute(UfMdbActuatorCmd command) { + if ( "03".equals(command.cmdId) ) { + Integer slaveId = Integer.parseInt(command.cmdFlags); + Integer address = Integer.parseInt(command.parameters); + Integer value = this.readHoldingRegister(slaveId, address); + return value.toString(); + } else if ( "06".equals(command.cmdId) ) { + Integer slaveId = Integer.parseInt(command.cmdFlags); + String[] params = command.parameters.split(","); + Integer address = Integer.parseInt(params[0]); + Integer value = Integer.parseInt(params[1]); + this.writeHoldingRegister(slaveId, address, value); + return ""; + } else { + throw new RuntimeException("Modbus RTU over TCP: unknown command"); + } + } + // write holding register public void writeHoldingRegister( Integer slaveId, Integer address, Integer value ) { byte[] cmd = new byte[8]; diff --git a/src/main/java/com/iflytop/digester/underframework/web/api/TsApiActuatorCommand.java b/src/main/java/com/iflytop/digester/underframework/web/api/TsApiActuatorCommand.java index 8fff3fd..19e2aea 100644 --- a/src/main/java/com/iflytop/digester/underframework/web/api/TsApiActuatorCommand.java +++ b/src/main/java/com/iflytop/digester/underframework/web/api/TsApiActuatorCommand.java @@ -42,11 +42,11 @@ public class TsApiActuatorCommand extends UfApiControllerBase { @ResponseBody public UfApiResponse execute(@RequestBody UfMdbActuatorCmd actuatorCmd ) { try { - UfActuatorCmdExecutor.execute(actuatorCmd); + String result = UfActuatorCmdExecutor.execute(actuatorCmd); + return success(Map.of("result", result)); } catch ( Exception e ) { return error(e.getMessage()); } - return success(); } @PostMapping("/api/actuator-cmd/connection-list") diff --git a/src/main/resources/application.yml b/src/main/resources/application.yml index 37d6fa1..01c44af 100644 --- a/src/main/resources/application.yml +++ b/src/main/resources/application.yml @@ -18,7 +18,7 @@ device: - name : modbus key : modbus type : ModbusRTUOverTCP - host: 182.168.8.10 + host: 127.0.0.1 port: 502 mqtt-broker: diff --git a/web b/web index 54eb432..b69f9ba 160000 --- a/web +++ b/web @@ -1 +1 @@ -Subproject commit 54eb4327c3a74e6aae926d4752b18439f62091f0 +Subproject commit b69f9ba8503f7247097d2eaa9dad06cc36582fec