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;
|
}
|
|
}
|