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 DEVP_CACHE = new ConcurrentHashMap<>(); @PostConstruct public void init() { News.info("初始化输送线线程..................................................."); List 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; } }