完善plc调试功能

This commit is contained in:
iteaj
2022-08-02 18:36:56 +08:00
parent 669f043321
commit 33986741f9
6 changed files with 44 additions and 24 deletions
@@ -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) {
@@ -30,24 +30,28 @@ public class PlcDebugHandle implements DebugHandle<PlcDebugModel> {
}
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<PlcDebugModel> {
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<PlcDebugModel> {
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()));
}
@@ -42,8 +42,8 @@ public class PlcDebugModel extends DebugModel {
private String type;
/**
* 1. 西门子
* 2. 欧姆龙
* 2. 西门子
* 3. 欧姆龙
*/
private Integer plcType;
}
@@ -7,5 +7,13 @@ import lombok.Data;
@Data
public class DeviceDto extends Device {
/**
* 型号名称
*/
private String modelName;
/**
* 设备别名
*/
private DeviceTypeAlias alias;
}
@@ -38,10 +38,7 @@ public class DeviceStatusListener implements ClientStatusEventListener, Disposab
}
} else if(source instanceof SocketClient){ // 客户端连接成功事件
ClientConnectProperties config = ((SocketClient) source).getConfig();
deviceService.update(Wrappers.<Device>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.<Device>lambdaUpdate()
.set(Device::getStatus, DeviceStatus.offline)
.eq(Device::getIp, config.getHost())
.eq(Device::getPort, config.getPort()));
deviceService.update(config.connectKey(), DeviceStatus.offline);
}
}
@@ -17,11 +17,12 @@
<result column="device_type_id" property="deviceTypeId" />
</resultMap>
<resultMap id="DtoMap" type="com.iteaj.iboot.msn.iot.dto.DeviceDto" extends="BasicMap">
<result property="modelName" column="model_name" />
</resultMap>
<select id="pageOfDetail" resultMap="DtoMap">
select a.* from iot_device a
select a.*, idm.model model_name from iot_device a
left join iot_device_type idt on a.device_type_id=idt.id
left join iot_device_model idm on a.model=idm.id
<where>
<if test="entity.status!=null">
and a.status = #{entity.status}