mirror of
https://gitee.com/iteaj/iboot.git
synced 2026-09-01 15:26:10 +08:00
完善plc调试功能
This commit is contained in:
@@ -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}
|
||||
|
||||
Reference in New Issue
Block a user