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.Slave; import com.zy.core.ThreadHandler; import com.zy.core.cache.MessageQueue; import com.zy.core.enums.SlaveType; import com.zy.core.model.Task; import com.zy.core.model.protocol.StaProtocol; import lombok.Data; import lombok.extern.slf4j.Slf4j; import java.util.Map; import java.util.concurrent.ConcurrentHashMap; /** * 输送线线程 * Created by vincent on 2020/8/4 */ @Data @Slf4j public class DevpThread implements Runnable, ThreadHandler { private Slave slave; private SiemensS7Net siemensS7Net; private Map station = new ConcurrentHashMap<>(); public DevpThread(Slave slave) { this.slave = slave; connect(); } @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: readWorkNo(); // 读取工作号 readStaDest(); // 读取目标站 readStatus(); // 读取状态 readError(); // 读取异常信息 break; case 2: break; case 3: break; case 4: break; default: break; } Thread.sleep(3000); } catch (Exception e) { e.printStackTrace(); } } } @Override public boolean connect() { boolean result = false; siemensS7Net = new SiemensS7Net(SiemensPLCS.S1200, slave.getIp()); siemensS7Net.setRack((byte) 0); siemensS7Net.setSlot((byte) 1); OperateResult connect = siemensS7Net.ConnectServer(); if(connect.IsSuccess){ result = true; log.info("输送线plc连接成功 ===>> [id:{}] [ip:{}] [port:{}]", slave.getId(), slave.getIp(), slave.getPort()); } else { log.info("输送线plc连接失败!!! ===>> [id:{}] [ip:{}] [port:{}]", slave.getId(), slave.getIp(), slave.getPort()); } siemensS7Net.ConnectClose(); return result; } /** * 读取工作号 */ private void readWorkNo(){ OperateResultExOne read = siemensS7Net.ReadInt32("DB100", (short) 8); if (read.IsSuccess) { int staNo1 = read.Content[0]; int staNo2 = read.Content[1]; int staNo3 = read.Content[2]; int staNo4 = read.Content[3]; int staNo5 = read.Content[4]; int staNo6 = read.Content[5]; int staNo7 = read.Content[6]; int staNo8 = read.Content[7]; } } /** * 读取目标站 */ private void readStaDest(){ OperateResultExOne read = siemensS7Net.Read("DB101", (short) 8); if (read.IsSuccess) { int staNo1 = siemensS7Net.getByteTransform().TransInt32(read.Content, 0); int staNo2 = siemensS7Net.getByteTransform().TransInt32(read.Content, 4); int staNo3 = siemensS7Net.getByteTransform().TransInt32(read.Content, 8); int staNo4 = siemensS7Net.getByteTransform().TransInt32(read.Content, 12); int staNo5 = siemensS7Net.getByteTransform().TransInt32(read.Content, 16); int staNo6 = siemensS7Net.getByteTransform().TransInt32(read.Content, 20); int staNo7 = siemensS7Net.getByteTransform().TransInt32(read.Content, 24); int staNo8 = siemensS7Net.getByteTransform().TransInt32(read.Content, 28); } } /** * 读取状态 */ private void readStatus(){ } /** * 读取异常信息 */ private void readError(){ } private void writeWorkNo(){ } @Override public void close() { } }