1
zhang
1 天以前 b78572fb09a2c63398e8d87bd19d5d3f92f5aa58
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
package com.zy.acs.conveyor.core.service;
 
import HslCommunication.Core.Types.OperateResult;
import HslCommunication.Profinet.Siemens.SiemensPLCS;
import HslCommunication.Profinet.Siemens.SiemensS7Net;
import com.zy.acs.common.utils.News;
import com.zy.acs.conveyor.core.properties.DevpSlave;
import com.zy.acs.conveyor.core.properties.OutputQueue;
import com.zy.acs.conveyor.core.properties.SlaveProperties;
import com.zy.acs.framework.common.DateUtils;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
 
import javax.annotation.PostConstruct;
import java.text.MessageFormat;
import java.util.Date;
import java.util.List;
import java.util.Map;
import java.util.concurrent.ConcurrentHashMap;
 
 
@Slf4j
@Service
public class DevpS7Service {
 
    @Autowired
    private SlaveProperties slaveProperties;
 
    private final Map<Integer, SiemensS7Net> DEVP_CACHE = new ConcurrentHashMap<>();
 
 
    @PostConstruct
    public void init() {
        News.info("初始化输送线线程...................................................");
        List<DevpSlave> devpSlaves = slaveProperties.getDevp();
        for (DevpSlave devp : devpSlaves) {
            add(devp, connect(devp));
        }
    }
 
 
    public void add(DevpSlave devp, SiemensS7Net siemensS7Net) {
        DEVP_CACHE.put(devp.getId(), siemensS7Net);
    }
 
    public void remove(Integer id) {
        DEVP_CACHE.remove(id);
    }
 
    public SiemensS7Net get(Integer id) {
        SiemensS7Net siemensS7Net = DEVP_CACHE.get(id);
        if (siemensS7Net != null) {
            return siemensS7Net;
        }
        slaveProperties.getDevp().stream().filter(devp -> devp.getId().equals(id)).findFirst().ifPresent(devp -> {
            add(devp, connect(devp));
        });
        return DEVP_CACHE.get(id);
    }
 
 
    private SiemensS7Net connect(DevpSlave devp) {
        SiemensS7Net siemensS7Net = new SiemensS7Net(SiemensPLCS.S1200, devp.getIp());
        siemensS7Net.setRack(devp.getRack().byteValue());
        siemensS7Net.setSlot(devp.getSlot().byteValue());
        OperateResult connect = siemensS7Net.ConnectServer();
        if (connect.IsSuccess) {
            News.info("SiemensDevp" + " - 1" + " - 输送线plc连接成功 ===>> [id:{}] [ip:{}] [port:{}]", devp.getId(), devp.getIp(), devp.getPort());
        } else {
            OutputQueue.DEVP.offer(MessageFormat.format("【{0}】输送线plc连接失败!!! ===>> [id:{1}] [ip:{2}] [port:{3}] [rack:{4}] [slot:{5}]",
                    DateUtils.convert(new Date()), devp.getId(), devp.getIp(), devp.getPort(), devp.getRack(), devp.getSlot()));
            News.error("SiemensDevp" + " - 2" + " - 输送线plc连接失败!!! ===>> [id:{}] [ip:{}] [port:{}]", devp.getId(), devp.getIp(), devp.getPort());
        }
        return siemensS7Net;
    }
 
}