package com.zy.core.thread;
|
|
import HslCommunication.Core.Types.OperateResult;
|
import HslCommunication.Core.Types.OperateResultExOne;
|
import HslCommunication.Profinet.Siemens.SiemensPLCS;
|
import HslCommunication.Profinet.Siemens.SiemensS7Net;
|
import com.zy.core.ThreadHandler;
|
import com.zy.core.cache.MessageQueue;
|
import com.zy.core.enums.SlaveType;
|
import com.zy.core.model.CrnSlave;
|
import com.zy.core.model.Task;
|
import com.zy.core.model.command.CrnCommand;
|
import com.zy.core.model.protocol.CrnProtocol;
|
import lombok.Data;
|
import lombok.extern.slf4j.Slf4j;
|
|
/**
|
* 堆垛机线程
|
* Created by vincent on 2020/8/4
|
*/
|
@Data
|
@Slf4j
|
public class CrnThread implements Runnable, ThreadHandler {
|
|
private SiemensS7Net siemensNet;
|
private CrnSlave slave;
|
private CrnProtocol crnProtocol;
|
|
public CrnThread(CrnSlave slave) {
|
this.slave = slave;
|
}
|
|
@Override
|
@SuppressWarnings("InfiniteLoopStatement")
|
public void run() {
|
while (true) {
|
try {
|
int step = 1;
|
Task task = MessageQueue.poll(SlaveType.Devp, slave.getId());
|
if (task != null) {
|
step = task.getStep();
|
}
|
switch (step) {
|
// 读数据
|
case 1:
|
readStatus(); // 读取状态
|
break;
|
case 2:
|
CrnCommand command = (CrnCommand) task.getData();
|
break;
|
case 3:
|
break;
|
// 复位
|
case 4:
|
break;
|
default:
|
break;
|
}
|
Thread.sleep(3000);
|
} catch (Exception e) {
|
e.printStackTrace();
|
}
|
|
}
|
}
|
|
@Override
|
public boolean connect() {
|
boolean result = false;
|
siemensNet = new SiemensS7Net(SiemensPLCS.S1200, slave.getIp());
|
siemensNet.setRack(slave.getRack().byteValue());
|
siemensNet.setSlot(slave.getSlot().byteValue());
|
OperateResult connect = siemensNet.ConnectServer();
|
if(connect.IsSuccess){
|
result = true;
|
log.info("堆垛机plc连接成功 ===>> [id:{}] [ip:{}] [port:{}] [rack:{}] [slot:{}]", slave.getId(), slave.getIp(), slave.getPort(), slave.getRack(), slave.getSlot());
|
} else {
|
log.info("堆垛机plc连接失败!!! ===>> [id:{}] [ip:{}] [port:{}] [rack:{}] [slot:{}]", slave.getId(), slave.getIp(), slave.getPort(), slave.getRack(), slave.getSlot());
|
}
|
siemensNet.ConnectClose();
|
return result;
|
}
|
|
/**
|
* 读取状态
|
*/
|
private void readStatus(){
|
OperateResultExOne<byte[]> result = siemensNet.Read("DB8.18", (short) 10);
|
if (result.IsSuccess) {
|
if (null == crnProtocol) {
|
crnProtocol = new CrnProtocol();
|
}
|
crnProtocol.setMode(siemensNet.ReadInt16("D2231").Content);
|
// crnProtocol.setEStop(siemensNet.ReadInt16("D2232").Content);
|
crnProtocol.setTaskNo(siemensNet.ReadInt16("D2233").Content);
|
crnProtocol.setStatus(siemensNet.ReadInt16("D2234").Content);
|
crnProtocol.setBay(siemensNet.ReadInt16("D2235").Content);
|
crnProtocol.setLevel(siemensNet.ReadInt16("D2236").Content);
|
crnProtocol.setForkPos(siemensNet.ReadInt16("D2237").Content);
|
crnProtocol.setLiftPos(siemensNet.ReadInt16("D2238").Content);
|
crnProtocol.setWalkPos(siemensNet.ReadInt16("D2239").Content);
|
crnProtocol.setTaskFinish(siemensNet.ReadInt16("D2240").Content);
|
crnProtocol.setLoaded(siemensNet.ReadInt16("D2241").Content);
|
crnProtocol.setAlarm(siemensNet.ReadInt16("D2242").Content);
|
crnProtocol.setXDistance(siemensNet.ReadInt32("D2251").Content);
|
crnProtocol.setYDistance(siemensNet.ReadInt32("D2253").Content);
|
crnProtocol.setDuration(siemensNet.ReadInt32("D2255").Content);
|
} else {
|
log.error("读取堆垛机plc状态信息失败 ===>> [id:{}] [ip:{}] [port:{}] [rack:{}] [slot:{}]", slave.getId(), slave.getIp(), slave.getPort(), slave.getRack(), slave.getSlot());
|
}
|
}
|
|
/**
|
* 写入数据
|
*/
|
private void write(){
|
|
}
|
|
@Override
|
public void close() {
|
|
}
|
|
public CrnProtocol getCrnProtocol(){
|
if (crnProtocol == null) {
|
readStatus();
|
}
|
return this.crnProtocol;
|
}
|
}
|