package com.ld.igds.protocol.modbus.command;
|
|
import com.ld.igds.common.CoreDeviceService;
|
import com.ld.igds.constant.Constant;
|
import com.ld.igds.io.RemoteControlService;
|
import com.ld.igds.io.constant.OrderRespEnum;
|
import com.ld.igds.io.constant.ProtocolEnum;
|
import com.ld.igds.io.request.DeviceAutoControlRequest;
|
import com.ld.igds.io.request.DeviceControlRequest;
|
import com.ld.igds.io.request.ExeDevice;
|
import com.ld.igds.io.request.TempControlRequest;
|
import com.ld.igds.io.response.DeviceControlResponse;
|
import com.ld.igds.models.Device;
|
import com.ld.igds.protocol.modbus.ModbusUtil;
|
import com.ld.igds.protocol.modbus.data.ModbusTcp;
|
import lombok.extern.slf4j.Slf4j;
|
import org.springframework.stereotype.Component;
|
|
import javax.annotation.Resource;
|
import java.util.List;
|
|
/**
|
* 当前协议针对标准Modbus-TCP协议
|
*
|
* @Desc:
|
* @author: andy.jia
|
* @update-time: 2023/8/11 10:07
|
*/
|
@Slf4j
|
@Component(RemoteControlServiceImpl.BEAN_ID)
|
public class RemoteControlServiceImpl implements RemoteControlService {
|
|
public static final String BEAN_ID = "modbus.remoteControlService";
|
|
@Resource
|
private CoreDeviceService deviceService;
|
@Resource
|
private ModbusUtil modbusUtil;
|
|
@Override
|
public String getProtocol() {
|
return ProtocolEnum.MODBUS_TCP.getCode();
|
}
|
|
@Override
|
public DeviceControlResponse deviceControl(DeviceControlRequest request) {
|
List<ExeDevice> deviceList = request.getDeviceList();
|
|
if (null == deviceList || deviceList.isEmpty()) {
|
return new DeviceControlResponse(OrderRespEnum.ORDER_ERROR.getCode(), "没有需要执行的设备");
|
}
|
|
|
try {
|
|
|
Device device;
|
ModbusTcp modbusTcp;
|
String[] addr;
|
String temp;
|
for (ExeDevice exeDevice : deviceList) {
|
device = deviceService.getCacheDeviceById(exeDevice.getCompanyId(), exeDevice.getId());
|
|
if (null == device) continue;
|
|
if (null == device.getModbus()) continue;
|
|
modbusTcp = new ModbusTcp();
|
modbusTcp.setIp(request.getIp());
|
modbusTcp.setPort(request.getPort());
|
modbusTcp.setDeviceId(device.getId());
|
modbusTcp.setSerId(request.getSerId());
|
|
//modbus规则:开地址-关地址-停地址-开到位-关到位-开故障-关故障,无地址用N代替
|
addr = device.getModbus().split("-");
|
temp = addr[0];
|
if (!Constant.YN_N.equals(temp)) modbusTcp.setAddrOpen(Integer.valueOf(temp));
|
temp = addr[1];
|
if (!Constant.YN_N.equals(temp)) modbusTcp.setAddrClose(Integer.valueOf(temp));
|
temp = addr[2];
|
if (!Constant.YN_N.equals(temp)) modbusTcp.setAddrStop(Integer.valueOf(temp));
|
temp = addr[3];
|
if (!Constant.YN_N.equals(temp)) modbusTcp.setAddrOpenEnd(Integer.valueOf(temp));
|
temp = addr[4];
|
if (!Constant.YN_N.equals(temp)) modbusTcp.setAddrCloseEnd(Integer.valueOf(temp));
|
temp = addr[5];
|
if (!Constant.YN_N.equals(temp)) modbusTcp.setAddrOpenError(Integer.valueOf(temp));
|
temp = addr[6];
|
if (!Constant.YN_N.equals(temp)) modbusTcp.setAddrCloseError(Integer.valueOf(temp));
|
|
|
//根据设备目标状态,调用MODBUS执行
|
modbusUtil.writeCoil(modbusTcp.getIp(), modbusTcp.getPort(), modbusTcp.getAddrOpen(), true);
|
|
|
}
|
} catch (Exception e) {
|
|
}
|
|
return new DeviceControlResponse(OrderRespEnum.ORDER_SUCCESS);
|
}
|
|
|
@Override
|
public DeviceControlResponse closeAll(DeviceControlRequest request) {
|
return null;
|
}
|
|
@Override
|
public DeviceControlResponse queryStatus(DeviceControlRequest request) {
|
return null;
|
}
|
|
@Override
|
public DeviceControlResponse tempControl(TempControlRequest request) {
|
return null;
|
}
|
|
@Override
|
public DeviceControlResponse airAutoControl(DeviceAutoControlRequest request) {
|
|
|
return null;
|
}
|
|
@Override
|
public DeviceControlResponse n2AutoControl(DeviceAutoControlRequest request) {
|
|
return null;
|
}
|
}
|