1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
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;
    }
}