diff --git a/bootstrap/src/main/java/com/iteaj/iboot/msn/iot/controller/DevicePlcController.java b/bootstrap/src/main/java/com/iteaj/iboot/msn/iot/controller/DevicePlcController.java index 358f4d3c..9f843bc9 100644 --- a/bootstrap/src/main/java/com/iteaj/iboot/msn/iot/controller/DevicePlcController.java +++ b/bootstrap/src/main/java/com/iteaj/iboot/msn/iot/controller/DevicePlcController.java @@ -135,7 +135,7 @@ public class DevicePlcController extends BaseController { // 西门子设备 if(device.getDeviceTypeId() == 2) { SiemensModel model = SiemensModel.valueOf(data.getModel()); - SiemensConnectProperties properties = new SiemensConnectProperties(device.getIp(), device.getPort(), model); + SiemensConnectProperties properties = new SiemensConnectProperties(device.getIp(), device.getPort(), model, entity.getDeviceSn()); SocketClient client = siemensS7Component.getClient(properties); if(status == DeviceStatus.online) { if(client == null) { @@ -148,6 +148,7 @@ public class DevicePlcController extends BaseController { } } else if(device.getDeviceTypeId() == 3) { // 欧姆龙设备 OmronConnectProperties properties = new OmronConnectProperties(device.getIp(), device.getPort()); + properties.setConnectKey(entity.getDeviceSn()); SocketClient client = omronComponent.getClient(properties); if(status == DeviceStatus.online) { if(client == null) { diff --git a/bootstrap/src/main/java/com/iteaj/iboot/msn/iot/debug/plc/PlcDebugHandle.java b/bootstrap/src/main/java/com/iteaj/iboot/msn/iot/debug/plc/PlcDebugHandle.java index 5b069598..14fa5caa 100644 --- a/bootstrap/src/main/java/com/iteaj/iboot/msn/iot/debug/plc/PlcDebugHandle.java +++ b/bootstrap/src/main/java/com/iteaj/iboot/msn/iot/debug/plc/PlcDebugHandle.java @@ -30,24 +30,28 @@ public class PlcDebugHandle implements DebugHandle { } PlcClientProtocol plcClientProtocol = null; - if(model.getPlcType() == 1) { + if(model.getPlcType() == 2) { try { SiemensModel siemensModel = SiemensModel.valueOf(model.getModel()); plcClientProtocol = new SiemensS7Protocol(new SiemensConnectProperties(model.getIp(), model.getPort(), siemensModel)); } catch (Exception e) { e.printStackTrace(); - write.write(HttpResult.Fail("不支持西门子型号["+model.getModel()+"]")); + write.write(HttpResult.Fail("不支持西门子型号["+model.getModel()+"]")); return; } - } else if(model.getPlcType() == 2){ + } else if(model.getPlcType() == 3){ plcClientProtocol = new OmronTcpProtocol(new OmronConnectProperties(model.getIp(), model.getPort())); } else { write.write(HttpResult.Fail("不支持的plc类型["+model.getPlcType()+"]")); return; } - Object readValue; - DebugResult result = new DebugResult(model); + Object readValue = model.getValue(); + DebugResult result = new DebugResult(model).setDeviceSn(model.getDeviceSn()) + .setReqTime(System.currentTimeMillis()); try { if("read".equals(model.getCmd())) { + if(model.getType() == null) { + write.write(HttpResult.Fail("错误的数据类型[null]")); return; + } switch (model.getType()) { case "bit": readValue = plcClientProtocol.readBool(model.getAddress()); break; @@ -63,6 +67,9 @@ public class PlcDebugHandle implements DebugHandle { readValue = plcClientProtocol.readDouble(model.getAddress()); break; } } else if("write".equals(model.getCmd())) { + if(model.getType() == null) { + write.write(HttpResult.Fail("错误的数据类型[null]")); return; + } switch (model.getType()) { case "bit": plcClientProtocol.write(model.getAddress(), true); break; @@ -78,18 +85,27 @@ public class PlcDebugHandle implements DebugHandle { plcClientProtocol.write(model.getAddress(), Double.valueOf(model.getValue())); break; } } else if("message".equals(model.getCmd())) { - byte[] bytes = ByteUtil.hexToByte(model.getMessage().trim()); - byte[] readFull = plcClientProtocol.readFull(bytes); + if(StringUtils.hasText(model.getMessage())) { + byte[] bytes = ByteUtil.hexToByte(model.getMessage().trim()); + byte[] readFull = plcClientProtocol.readFull(bytes); + readValue = readFull != null ? ByteUtil.bytesToHexByFormat(readFull) : ""; + } else { + write.write(HttpResult.Fail("请输入报文["+model.getMessage()+"]")); return; + } } else { - write.write(HttpResult.Fail("不支持的操作指令["+model.getCmd()+"]")); + write.write(HttpResult.Fail("不支持的操作指令["+model.getCmd()+"]")); return; } + result.setValue(readValue).setRespTime(System.currentTimeMillis()) + .setReqMsg(ByteUtil.bytesToHexByFormat(plcClientProtocol.requestMessage().getMessage())) + .setRespMsg(ByteUtil.bytesToHexByFormat(plcClientProtocol.responseMessage().getMessage())); ExecStatus execStatus = plcClientProtocol.getExecStatus(); - if(execStatus == ExecStatus.success) { - + if(execStatus != ExecStatus.success) { + write.write(HttpResult.StatusCode(result, execStatus.desc, 208)); + } else { + write.write(HttpResult.Success(result)); } - write.write(HttpResult.Success(result)); } catch (Exception e) { write.write(HttpResult.Fail(e.getMessage())); } diff --git a/bootstrap/src/main/java/com/iteaj/iboot/msn/iot/debug/plc/PlcDebugModel.java b/bootstrap/src/main/java/com/iteaj/iboot/msn/iot/debug/plc/PlcDebugModel.java index ce0c9672..ec9d94df 100644 --- a/bootstrap/src/main/java/com/iteaj/iboot/msn/iot/debug/plc/PlcDebugModel.java +++ b/bootstrap/src/main/java/com/iteaj/iboot/msn/iot/debug/plc/PlcDebugModel.java @@ -42,8 +42,8 @@ public class PlcDebugModel extends DebugModel { private String type; /** - * 1. 西门子 - * 2. 欧姆龙 + * 2. 西门子 + * 3. 欧姆龙 */ private Integer plcType; } diff --git a/bootstrap/src/main/java/com/iteaj/iboot/msn/iot/dto/DeviceDto.java b/bootstrap/src/main/java/com/iteaj/iboot/msn/iot/dto/DeviceDto.java index 1babe1d7..477c488e 100644 --- a/bootstrap/src/main/java/com/iteaj/iboot/msn/iot/dto/DeviceDto.java +++ b/bootstrap/src/main/java/com/iteaj/iboot/msn/iot/dto/DeviceDto.java @@ -7,5 +7,13 @@ import lombok.Data; @Data public class DeviceDto extends Device { + /** + * 型号名称 + */ + private String modelName; + + /** + * 设备别名 + */ private DeviceTypeAlias alias; } diff --git a/bootstrap/src/main/java/com/iteaj/iboot/msn/iot/listener/DeviceStatusListener.java b/bootstrap/src/main/java/com/iteaj/iboot/msn/iot/listener/DeviceStatusListener.java index b66a967a..de99565a 100644 --- a/bootstrap/src/main/java/com/iteaj/iboot/msn/iot/listener/DeviceStatusListener.java +++ b/bootstrap/src/main/java/com/iteaj/iboot/msn/iot/listener/DeviceStatusListener.java @@ -38,10 +38,7 @@ public class DeviceStatusListener implements ClientStatusEventListener, Disposab } } else if(source instanceof SocketClient){ // 客户端连接成功事件 ClientConnectProperties config = ((SocketClient) source).getConfig(); - deviceService.update(Wrappers.lambdaUpdate() - .set(Device::getStatus, DeviceStatus.online) - .eq(Device::getIp, config.getHost()) - .eq(Device::getPort, config.getPort())); + deviceService.update(config.connectKey(), DeviceStatus.online); } } @@ -52,10 +49,7 @@ public class DeviceStatusListener implements ClientStatusEventListener, Disposab deviceService.update((String) source, DeviceStatus.offline); } else if(source instanceof SocketClient) {// 客户端连接断开事件 ClientConnectProperties config = ((SocketClient) source).getConfig(); - deviceService.update(Wrappers.lambdaUpdate() - .set(Device::getStatus, DeviceStatus.offline) - .eq(Device::getIp, config.getHost()) - .eq(Device::getPort, config.getPort())); + deviceService.update(config.connectKey(), DeviceStatus.offline); } } diff --git a/bootstrap/src/main/java/com/iteaj/iboot/msn/iot/mapper/xml/DeviceMapper.xml b/bootstrap/src/main/java/com/iteaj/iboot/msn/iot/mapper/xml/DeviceMapper.xml index d198d3b6..dcab4c52 100644 --- a/bootstrap/src/main/java/com/iteaj/iboot/msn/iot/mapper/xml/DeviceMapper.xml +++ b/bootstrap/src/main/java/com/iteaj/iboot/msn/iot/mapper/xml/DeviceMapper.xml @@ -17,11 +17,12 @@ - +