//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.alibaba.fastjson.JSON; //import com.core.common.Cools; //import com.core.common.DateUtils; //import com.core.common.SpringUtils; //import com.core.exception.CoolException; //import com.zy.asrs.entity.BasDevp; //import com.zy.asrs.service.*; //import com.zy.core.DevpThread; //import com.zy.core.cache.MessageQueue; //import com.zy.core.cache.OutputQueue; //import com.zy.core.cache.SlaveConnection; //import com.zy.core.enums.IoModeType; //import com.zy.core.enums.SlaveType; //import com.zy.core.model.DevpSlave; //import com.zy.core.model.Task; //import com.zy.core.model.protocol.Cycle; //import com.zy.core.model.protocol.StaProtocol; //import lombok.Data; //import lombok.extern.slf4j.Slf4j; // //import java.text.MessageFormat; //import java.util.ArrayList; //import java.util.Date; //import java.util.List; //import java.util.Map; //import java.util.concurrent.ConcurrentHashMap; // ///** // * 输送线线程 // * Created by vincent on 2020/8/4 // */ //@Data //@Slf4j //public class SiemensDevpThread2 implements Runnable, DevpThread { // // private DevpSlave slave; // private SiemensS7Net siemensS7Net; // private Map station = new ConcurrentHashMap<>(); // private short heartBeatVal = 1; // public static final ArrayList staNos1 = new ArrayList() {{ // add(101);add(102);add(103);add(104); // add(105);add(106);add(107);add(108); // add(201);add(202);add(203);add(204);add(205); // add(206);add(207);add(208);add(209);add(210); // add(211);add(212); // }}; // /*public static final ArrayList staNos2 = new ArrayList() {{ // add(200);add(201);add(202);add(203); // add(204);add(205);add(206);add(207); // add(208);add(209);add(210);add(211); // add(212);add(213);add(214);add(215); // add(216);add(217);add(218);add(219); // add(220);add(221);add(222);add(223); // add(224);add(225);add(226);add(227); // add(228);add(229);add(230);add(231); // add(232);add(233);add(234);add(235); // }}; // public static final ArrayList staNos3 = new ArrayList() {{ // add(300);add(301);add(302);add(303); // add(304);add(305);add(306);add(307); // }}; // public static final ArrayList staNos4 = new ArrayList() {{ // add(400);add(401);add(402);add(403); // add(404);add(405);add(406);add(407); // }};*/ // // /** // * 条码数量 // */ // private int barcodeSize = 1; // // /** // * 入出库模式 // * 0:未知 // * 1:入库启动中 // * 2.入库模式 // * 3.出库启动中 (不能生成入库工作档) // * 4.出库模式 // */ // public IoModeType ioModeOf2F = IoModeType.NONE; //// public IoModeType ioMode = IoModeType.NONE; // private ArrayList getStaNo() { // switch (slave.getId()) { // case 1: // return staNos1; // /*case 2: // return staNos2; // case 3: // return staNos3; // case 4: // return staNos4;*/ // default: // throw new CoolException("服务器异常"); // } // } // // public SiemensDevpThread(DevpSlave slave) { // this.slave = slave; // } // // @Override // @SuppressWarnings("InfiniteLoopStatement") // public void run() { // connect(); // while (true) { // try { // int step = 1; // Task task = MessageQueue.poll(SlaveType.Devp, slave.getId()); // if (task != null) { // step = task.getStep(); // } // switch (step) { // // 读数据 // case 1: // read(); // break; // // 写数据 ID+目标站 // case 2: // write((StaProtocol)task.getData()); // read(); // break; // // 写数据 ID+目标站 // case 4: // writeCycle((StaProtocol)task.getData()); // read(); // break; // /* case 3: // write2((StaProtocol)task.getData()); // read(); // break;*/ // default: // break; // } // // 心跳 //// heartbeat(); // Thread.sleep(400); // } catch (Exception e) { // e.printStackTrace(); // } // // } // } // // /** // * 初始化站点状态 // */ // private void initSite() { // ArrayList staNos = getStaNo(); // // 站点编号 // for (Integer siteId : staNos) { // StaProtocol staProtocol = station.get(siteId); // if (null == staProtocol) { // staProtocol = new StaProtocol(); // staProtocol.setSiteId(siteId); // station.put(siteId, staProtocol); // } // staProtocol.setWorkNo((short) 0); // ID // staProtocol.setAutoing(false); // 自动 // staProtocol.setLoading(false); // 有物 // staProtocol.setInEnable(false); // 可入 // staProtocol.setOutEnable(false); // 可出 // staProtocol.setEmptyMk(false); // 空板信号 // staProtocol.setStaNo((short) 0); // 目标站 // // if (!staProtocol.isPakMk() && !staProtocol.isLoading()) { // staProtocol.setPakMk(true); // } // } // } // // @Override // public boolean connect() { // boolean result = false; // siemensS7Net = new SiemensS7Net(SiemensPLCS.S1200, slave.getIp()); // siemensS7Net.setRack(slave.getRack().byteValue()); // siemensS7Net.setSlot(slave.getSlot().byteValue()); // OperateResult connect = siemensS7Net.ConnectServer(); // if(connect.IsSuccess){ // result = true; // OutputQueue.DEVP.offer(MessageFormat.format( "【{0}】输送线plc连接成功 ===>> [id:{1}] [ip:{2}] [port:{3}] [rack:{4}] [slot:{5}]", DateUtils.convert(new Date()), slave.getId(), slave.getIp(), slave.getPort(), slave.getRack(), slave.getSlot())); // log.info("输送线plc连接成功 ===>> [id:{}] [ip:{}] [port:{}]", slave.getId(), slave.getIp(), slave.getPort()); // } else { // OutputQueue.DEVP.offer(MessageFormat.format( "【{0}】输送线plc连接失败!!! ===>> [id:{1}] [ip:{2}] [port:{3}] [rack:{4}] [slot:{5}]", DateUtils.convert(new Date()), slave.getId(), slave.getIp(), slave.getPort(), slave.getRack(), slave.getSlot())); // log.error("输送线plc连接失败!!! ===>> [id:{}] [ip:{}] [port:{}]", slave.getId(), slave.getIp(), slave.getPort()); //// DeviceErrorService deviceErrorService = SpringUtils.getBean(DeviceErrorService.class); //// deviceErrorService.addDeviceError("devp", slave.getId(), "输送线plc连接失败"); // initSite(); // } // siemensS7Net.ConnectClose(); // return result; // } // // /** // * 读取状态 ====> 整块plc // */ // private void read() throws InterruptedException { //// // 更新入出库模式 //// updateIoMode(); // ArrayList staNos = getStaNo(); // int staNoSize = staNos.size(); // OperateResultExOne result = siemensS7Net.Read("DB101.0", (short) (staNoSize*8)); // if (result.IsSuccess) { // for (int i = 0; i < staNoSize; i++) { // Integer siteId = staNos.get(i); // 站点编号 // StaProtocol staProtocol = station.get(siteId); // if (null == staProtocol) { // staProtocol = new StaProtocol(); // staProtocol.setSiteId(siteId); // station.put(siteId, staProtocol); // } // staProtocol.setWorkNo((short)siemensS7Net.getByteTransform().TransInt32(result.Content, i*8)); // 工作号 // // staProtocol.setStaNo(siemensS7Net.getByteTransform().TransInt16(result.Content, i*8 + 4)); // 目标站 // // boolean[] status = siemensS7Net.getByteTransform().TransBool(result.Content, i*8 + 6, 2); // staProtocol.setAutoing(status[0]); // 自动 // staProtocol.setLoading(status[1]); // 有物 // staProtocol.setInEnable(status[2]); // 可入 // staProtocol.setOutEnable(status[3]);// 可出 // staProtocol.setEmptyMk(status[4]); // 空板信号 // staProtocol.setFullPlt(status[5]); // 满托盘 // staProtocol.setHigh(status[6]); // 高库位 // staProtocol.setLow(status[7]); // 低库位 // // if (!staProtocol.isPakMk() && !staProtocol.isLoading()) { // staProtocol.setPakMk(true); // } // } // } // //// OperateResultExOne resultAgvAndPlc = siemensS7Net.Read("DB102.0", (short) 30); //// if (resultAgvAndPlc.IsSuccess) { //// for (int i = 0; i < staNoSize; i++) { //// int sign =(i+2)/2-1; //// if ((i+2)%2!=0){ //// Integer siteId = staNos.get(i); // 站点编号 //// StaProtocol staProtocol = station.get(siteId); //// if (null == staProtocol) { //// staProtocol = new StaProtocol(); //// staProtocol.setSiteId(siteId); //// station.put(siteId, staProtocol); //// } //// staProtocol.setAgvStartPick(siemensS7Net.getByteTransform().TransInt16(resultAgvAndPlc.Content, sign*6+4)); // 允许取货 //// staProtocol.setAgvStartPlace((short)0); // 允许放货 //// continue; //// } //// Integer siteId = staNos.get(i); // 站点编号 //// StaProtocol staProtocol = station.get(siteId); //// if (null == staProtocol) { //// staProtocol = new StaProtocol(); //// staProtocol.setSiteId(siteId); //// station.put(siteId, staProtocol); //// } //// staProtocol.setAgvStartPick(siemensS7Net.getByteTransform().TransInt16(resultAgvAndPlc.Content, sign*6)); // 允许取货 //// staProtocol.setAgvStartPlace(siemensS7Net.getByteTransform().TransInt16(resultAgvAndPlc.Content, sign*6 + 2)); // 允许放货 //// } //// } // //// OperateResultExOne resultAgvAndPlcOk = siemensS7Net.Read("DB132.0", (short) 30); //// if (resultAgvAndPlcOk.IsSuccess) { //// for (int i = 0; i < staNoSize; i++) { //// int sign =(i+2)/2-1; //// if ((i+2)%2!=0){ //// Integer siteId = staNos.get(i); // 站点编号 //// StaProtocol staProtocol = station.get(siteId); //// if (null == staProtocol) { //// staProtocol = new StaProtocol(); //// staProtocol.setSiteId(siteId); //// station.put(siteId, staProtocol); //// } //// staProtocol.setAgvTargetPick(siemensS7Net.getByteTransform().TransInt16(resultAgvAndPlcOk.Content, sign*6+4)); // 允许取货 //// staProtocol.setAgvTargetPlace((short)0); // 允许放货 //// continue; //// } //// Integer siteId = staNos.get(i); // 站点编号 //// StaProtocol staProtocol = station.get(siteId); //// if (null == staProtocol) { //// staProtocol = new StaProtocol(); //// staProtocol.setSiteId(siteId); //// station.put(siteId, staProtocol); //// } //// try{ //// staProtocol.setAgvTargetPick(siemensS7Net.getByteTransform().TransInt16(resultAgvAndPlcOk.Content, sign*6)); // 取货完成 //// if (staProtocol.getAgvTargetPick()!=0){ //// System.out.println(staProtocol.getAgvTargetPick()); //// } //// staProtocol.setAgvTargetPlace(siemensS7Net.getByteTransform().TransInt16(resultAgvAndPlcOk.Content, sign*6 + 2)); // 放货完成 //// if (staProtocol.getAgvTargetPlace()!=0){ //// System.out.println(staProtocol.getAgvTargetPlace()); //// } //// }catch (Exception e){ //// log.error(""+e); //// } //// } //// } // // // if (slave.getId() == 1) { // //条码 // //Thread.sleep(200); // OperateResultExOne result2 = siemensS7Net.Read("DB101.848.0", (short) 8); // if (result2.IsSuccess) { // for (int i = 0; i < 1; i++) { // String barcode = siemensS7Net.getByteTransform().TransString(result2.Content, i * 8, 8, "UTF-8"); // BarcodeThread barcodeThread = (BarcodeThread) SlaveConnection.get(SlaveType.Barcode, i + 1); // if (!Cools.isEmpty(barcodeThread) && !barcodeThread.getBarcode().equals(barcode)) { // barcodeThread.setBarcode(barcode); // } // } // } // // //外形检测 // OperateResultExOne resultErr1 = siemensS7Net.Read("DB101.810.0", (short) (barcodeSize*1)); // StaProtocol staProtocol1 = station.get(116); // boolean[] status1 = siemensS7Net.getByteTransform().TransBool(resultErr1.Content, 0, 1); // staProtocol1.setFrontErr(status1[0]); // staProtocol1.setBackErr(status1[1]); // staProtocol1.setHighErr(status1[2]); // staProtocol1.setLeftErr(status1[3]); // staProtocol1.setRightErr(status1[4]); // staProtocol1.setWeightErr(status1[5]); // staProtocol1.setBarcodeErr(status1[6]); // // OperateResultExOne resultErr = siemensS7Net.Read("DB101.922.0", (short) (staNoSize * 4)); // if (resultErr.IsSuccess) { // for (int i = 0; i < staNoSize; i++) { // Integer siteId = staNos.get(i); // 站点编号 // boolean[] status = siemensS7Net.getByteTransform().TransBool(resultErr.Content, i * 4, 1); // StaProtocol staProtocol = station.get(siteId); // staProtocol.setBreakerErr(status[0]); // staProtocol.setInfraredErr(status[1]); // staProtocol.setOutTimeErr(status[2]); // staProtocol.setSeizeSeatErr(status[3]); // staProtocol.setWrkYgoodsN(status[4]); // staProtocol.setInverterErr(status[5]); // staProtocol.setContactErr(status[6]); // staProtocol.setUpcontactErr(status[7]); // // } // } // // } // // //// //RGV台车位置 //// Thread.sleep(200); //// OperateResultExOne result3 = siemensS7Net.Read("DB100.0",(short)4); //// if (result3.IsSuccess) { //// for (int i = 0; i < 2; i++) { //// Integer siteId = i==0 ? 1 : 2; // 站点编号 //// StaProtocol staProtocol = station.get(siteId); //// if (null == staProtocol) { //// staProtocol = new StaProtocol(); //// staProtocol.setSiteId(siteId); //// station.put(siteId, staProtocol); //// } //// staProtocol.setNearbySta(String.valueOf(siemensS7Net.getByteTransform().TransInt16(result3.Content, i*2))); ////// String aa = staProtocol.getNearbySta(); ////// System.out.println(siteId + "===>>" + staProtocol.getNearbySta()); //// } //// } // //// OperateResultExOne result2 = siemensS7Net.ReadInt16("DB200.0"); //// if (result2.IsSuccess) { //// this.ioMode = IoModeType.get(result2.Content); //// } // // if (result.IsSuccess ) { // // OutputQueue.DEVP.offer(MessageFormat.format("【{0}】[id:{1}] <<<<< 实时数据更新成功",DateUtils.convert(new Date()), slave.getId())); // // // 根据实时信息更新数据库 // try { // List basDevps = new ArrayList<>(); // for (Integer siteId : staNos) { // StaProtocol staProtocol = station.get(siteId); // basDevps.add(staProtocol.toSqlModel()); // } // // BasDevpService basDevpService = SpringUtils.getBean(BasDevpService.class); // if (null != basDevpService && !basDevpService.updateBatchById(basDevps)) { // throw new Exception("更新数据库数据失败"); // } // } catch (Exception e) { // e.printStackTrace(); // OutputQueue.DEVP.offer(MessageFormat.format("【{0}】更新数据库数据失败 ===>> [id:{1}] [ip:{2}] [port:{3}] [rack:{4}] [slot:{5}]", DateUtils.convert(new Date()), slave.getId(), slave.getIp(), slave.getPort(), slave.getRack(), slave.getSlot())); // log.error("更新数据库数据失败 ===>> [id:{}] [ip:{}] [port:{}] [rack:{}] [slot:{}]", slave.getId(), slave.getIp(), slave.getPort(), slave.getRack(), slave.getSlot()); // } // // DeviceErrorService deviceErrorService = SpringUtils.getBean(DeviceErrorService.class); // deviceErrorService.deleteDeviceError("devp", slave.getId()); // } else { // OutputQueue.DEVP.offer(MessageFormat.format("【{0}】读取输送线plc状态信息失败 ===>> [id:{1}] [ip:{2}] [port:{3}] [rack:{4}] [slot:{5}]", DateUtils.convert(new Date()), slave.getId(), slave.getIp(), slave.getPort(), slave.getRack(), slave.getSlot())); //// log.error("读取输送线plc状态信息失败 ===>> [id:{}] [ip:{}] [port:{}] [rack:{}] [slot:{}]", slave.getId(), slave.getIp(), slave.getPort(), slave.getRack(), slave.getSlot()); // DeviceErrorService deviceErrorService = SpringUtils.getBean(DeviceErrorService.class); // deviceErrorService.addDeviceError("devp", slave.getId(), "读取输送线plc状态信息失败"); // } // } // // /** // * 写入 ID+目标站 =====> 单站点写入 // */ // private void writeAgvOk(StaProtocol staProtocol) throws InterruptedException { // if (null == staProtocol) { // return; // } // ArrayList staNos = getStaNo(); // int index = staNos.indexOf(staProtocol.getSiteId()); // if (staProtocol.getAgvTypeSign()==0 || staProtocol.getAgvTypeSign()==2 ){ //0取货 // switch (staProtocol.getSiteId()){ // case 100: // index=32; // break; // case 101: // index=34; // break; // case 102: // index=38; // break; // case 103: // index=40; // break; // case 104: // index=44; // break; // case 105: // index=46; // break; // case 106: // index=50; // break; // case 107: // index=52; // break; // default: // return; // } // }else { // switch (staProtocol.getSiteId()){ // case 100: // index=30; // break; // case 102: // index=36; // break; // case 104: // index=42; // break; // case 106: // index=48; // break; // default: // return; // } // } // // OperateResult write = null; // //任务下发次数 // int writeCount = 0; // do { // short textWrite = 1;// 任务完成 // if (staProtocol.getAgvTypeSign()>1){ // textWrite = 0;// 任务复位 // } // write = siemensS7Net.Write("DB102." + index, textWrite); // if(write.IsSuccess){ // writeCount=6; // }else { // writeCount++; // log.error("写入输送线取放货完成命令后读取失败。输送线plc编号={},站点数据={},写入次数={}", slave.getId(), JSON.toJSON(staProtocol), writeCount); // } // }while (writeCount<5); // // if (!write.IsSuccess) { // OutputQueue.DEVP.offer(MessageFormat.format("【{0}】写入输送线站点数据失败。输送线plc编号={1},站点数据={2}", slave.getId(), JSON.toJSON(staProtocol))); // log.error("写入输送线取放货完成站点数据失败。输送线plc编号={},站点数据={}", slave.getId(), JSON.toJSON(staProtocol)); // } else { // OutputQueue.DEVP.offer(MessageFormat.format("【{0}】 输送线命令下发 [id:{1}] >>>>> {2}", DateUtils.convert(new Date()), slave.getId(), JSON.toJSON(staProtocol))); // log.info("输送线取放货完成命令下发码垛完成 给输送线写任务完成 [id:{}] >>>>> 命令下发: {}", slave.getId(), JSON.toJSON(staProtocol)); // } // // // } // private void write(StaProtocol staProtocol) throws InterruptedException { // if (staProtocol == null) { // return; // } // // ArrayList staNos = getStaNo(); // int index = staNos.indexOf(staProtocol.getSiteId()); // // if (index == -1) { // log.error("站点编号 {} 不在已知列表中,无法写入任务!", staProtocol.getSiteId()); // return; // } // // int writeCount = 0; // 任务下发尝试次数 // boolean writeFlag = false; // 任务下发成功标记 // String plcAddressWorkNo = "DB100." + index * 6; // String plcAddressStaNo = "DB100." + (index * 6 + 4); // // while (writeCount < 5) { // // **读取当前PLC状态,避免不必要的写入** // OperateResultExOne readResult = siemensS7Net.Read(plcAddressWorkNo, (short) 6); // if (readResult.IsSuccess) { // int currentWorkNo = siemensS7Net.getByteTransform().TransInt32(readResult.Content, 0); // short currentStaNo = siemensS7Net.getByteTransform().TransInt16(readResult.Content, 4); // // if (currentWorkNo == staProtocol.getWorkNo().intValue() && currentStaNo == staProtocol.getStaNo()) { // log.info("站点 {} 当前状态已匹配,无需重复写入", staProtocol.getSiteId()); // return; // } // } // // // **清零并确认** // if (!clearPLCData(plcAddressWorkNo, plcAddressStaNo, staProtocol.getSiteId())) { // writeCount++; // continue; // 重新尝试清零 // } // // // **写入新任务** // if (writeTaskToPLC(plcAddressWorkNo, plcAddressStaNo, staProtocol)) { // writeFlag = true; // log.info("输送线命令写入成功,PLC编号={},站点数据={},尝试次数={}", slave.getId(), JSON.toJSON(staProtocol), writeCount); // break; // } // // log.warn("输送线命令写入失败,PLC编号={},站点数据={},尝试次数={}", slave.getId(), JSON.toJSON(staProtocol), writeCount); // writeCount++; // } // // // **写入失败处理** // handleWriteFailure(staProtocol, writeFlag); // } // // private void writeCycle(StaProtocol staProtocol) throws InterruptedException { // if (staProtocol == null) { // return; // } // // ArrayList staNos = getStaNo(); // int index = staNos.indexOf(staProtocol.getSiteId()); // // if (index == -1) { // log.error("站点编号 {} 不在已知列表中,无法写入任务!", staProtocol.getSiteId()); // return; // } // // int writeCount = 0; // 任务下发尝试次数 // boolean writeFlag = false; // 任务下发成功标记 // String plcAddressWorkNo = ""; // String plcAddressStaNo = "" ; // switch (staProtocol.getSiteId()){ // case 105: // plcAddressWorkNo = "DB73." + 0; // plcAddressStaNo = "DB73." + 4; // break; // case 106: // plcAddressWorkNo = "DB73." + 6; // plcAddressStaNo = "DB73." + (6 + 4); // break; // case 108: // plcAddressWorkNo = "DB73." + 2 * 6; // plcAddressStaNo = "DB73." + (2 * 6 + 4); // break; // case 110: // plcAddressWorkNo = "DB73." + 3 * 6; // plcAddressStaNo = "DB73." + (3 * 6 + 4); // break; // case 112: // plcAddressWorkNo = "DB73." + 4 * 6; // plcAddressStaNo = "DB73." + (4 * 6 + 4); // break; // } // // // // **写入新任务** // if (writeTaskToPLC(plcAddressWorkNo, plcAddressStaNo, staProtocol)) { // writeFlag = true; // log.info("输送线命令写入成功,PLC编号={},站点数据={},尝试次数={}", slave.getId(), JSON.toJSON(staProtocol), writeCount); // } // // // **写入失败处理** // handleWriteFailure(staProtocol, writeFlag); // } // // /** // * 清零 PLC 数据并验证清零是否成功 // */ // private boolean clearPLCData(String plcAddressWorkNo, String plcAddressStaNo, int siteId) throws InterruptedException { // siemensS7Net.Write(plcAddressWorkNo, 0); // siemensS7Net.Write(plcAddressStaNo, (short) 0); // Thread.sleep(100); // 等待PLC识别 // // OperateResultExOne readResult = siemensS7Net.Read(plcAddressWorkNo, (short) 6); // if (readResult.IsSuccess) { // int readWorkNo = siemensS7Net.getByteTransform().TransInt32(readResult.Content, 0); // short readStaNo = siemensS7Net.getByteTransform().TransInt16(readResult.Content, 4); // if (readWorkNo == 0 && readStaNo == 0) { // return true; // 清零成功 // } // } // // log.warn("站点 {} 清零失败,尝试重新清零...", siteId); // return false; // } // // /** // * 写入新任务到 PLC 并验证是否成功 // */ // private boolean writeTaskToPLC(String plcAddressWorkNo, String plcAddressStaNo, StaProtocol staProtocol) throws InterruptedException { // OperateResult writeResult2 = siemensS7Net.Write(plcAddressStaNo, staProtocol.getStaNo()); // // OperateResult writeResult1 = siemensS7Net.Write(plcAddressWorkNo, staProtocol.getWorkNo().intValue()); // // if (writeResult1.IsSuccess && writeResult2.IsSuccess) { // Thread.sleep(200); // 等待 PLC 识别新值 // OperateResultExOne readResult = siemensS7Net.Read(plcAddressWorkNo, (short) 6); // if (readResult.IsSuccess) { // int workNo = siemensS7Net.getByteTransform().TransInt32(readResult.Content, 0); // short staNo = siemensS7Net.getByteTransform().TransInt16(readResult.Content, 4); // return workNo == staProtocol.getWorkNo().intValue() && staNo == staProtocol.getStaNo(); // } // } // return false; // } // // private boolean writeTaskToPLC(String plcAddressWorkNo, String plcAddressStaNo, Cycle cycle) throws InterruptedException { // OperateResult writeResult1 = siemensS7Net.Write(plcAddressWorkNo, cycle.getWorkNo().intValue()); // OperateResult writeResult2 = siemensS7Net.Write(plcAddressStaNo, cycle.getStaNo()); // // if (writeResult1.IsSuccess && writeResult2.IsSuccess) { // Thread.sleep(200); // 等待 PLC 识别新值 // OperateResultExOne readResult = siemensS7Net.Read(plcAddressWorkNo, (short) 6); // if (readResult.IsSuccess) { // int workNo = siemensS7Net.getByteTransform().TransInt32(readResult.Content, 0); // short staNo = siemensS7Net.getByteTransform().TransInt16(readResult.Content, 4); // return workNo == cycle.getWorkNo().intValue() && staNo == cycle.getStaNo(); // } // } // return false; // } // // /** // * 处理写入失败的情况 // */ // private void handleWriteFailure(StaProtocol staProtocol, boolean writeFlag) { // if (!writeFlag) { // StaProtocol currentStaProtocol = station.get(staProtocol.getSiteId()); // if (currentStaProtocol.getWorkNo() == 0 && currentStaProtocol.getStaNo() == 0) { // currentStaProtocol.setPakMk(true); // } // OutputQueue.DEVP.offer(MessageFormat.format("【{0}】输送线命令尝试5次失败。PLC编号={1},站点数据={2}", // slave.getId(), JSON.toJSON(currentStaProtocol))); // log.error("输送线命令尝试5次失败,PLC编号={},站点数据={}", slave.getId(), JSON.toJSON(currentStaProtocol)); // } else { // OutputQueue.DEVP.offer(MessageFormat.format("【{0}】输送线命令成功 [id:{1}] >>>>> {2}", // DateUtils.convert(new Date()), slave.getId(), JSON.toJSON(staProtocol))); // log.info("输送线命令成功 [id:{}] >>>>> {}", slave.getId(), JSON.toJSON(staProtocol)); // } // } // // // private void write2(StaProtocol staProtocol) throws InterruptedException { // if (null == staProtocol) { // return; // } // ArrayList staNos = getStaNo(); // // int index = staNos.indexOf(staProtocol.getSiteId()); // short[] array = new short[2]; // array[0] = staProtocol.getWorkNo(); // array[1] = staProtocol.getStaNo(); // // OperateResult writeResult; // //任务下发次数 // int writeCount = 0; // //任务下发成功标识 // boolean writeFlag = false; // while(writeCount < 5){ // writeResult = siemensS7Net.Write("DB100." + index*4, array); // 工作号、目标站 // // if(writeResult.IsSuccess){ // Thread.sleep(200); // OperateResultExOne readResult = siemensS7Net.Read("DB100." + index*4, (short)4); // if(readResult.IsSuccess){ // short workNo = siemensS7Net.getByteTransform().TransInt16(readResult.Content, 0); // short staNo = siemensS7Net.getByteTransform().TransInt16(readResult.Content, 2); // if(staProtocol.getWorkNo().equals(workNo) && staProtocol.getStaNo().equals(staNo)){ // //任务命令写入成功 // writeFlag = true; // log.info("写入输送线命令后返回成功,并且回读成功。输送线plc编号={},{},写入次数={}", slave.getId(), JSON.toJSON(staProtocol), writeCount); // // Date now = new Date(); // break; // } else {//返回结果是成功了,但是真实值不相同 // writeCount++; // OutputQueue.DEVP.offer(MessageFormat.format("【{0}】写入输送线命令后返回成功,但是读取任务值不一致。输送线plc编号={1},站点数据={2},写入次数={3}", // slave.getId(), JSON.toJSON(staProtocol),writeCount)); // log.error("写入输送线命令后返回成功,但是读取任务值不一致。输送线plc编号={},{},写入次数={}", slave.getId(), JSON.toJSON(staProtocol), writeCount); // // } // } else { // writeCount++; // OutputQueue.DEVP.offer(MessageFormat.format("【{0}】写入输送线命令后读取失败。输送线plc编号={1},站点数据={2},写入次数={3}", // slave.getId(), JSON.toJSON(staProtocol), writeCount)); // log.error("写入输送线命令后读取失败。输送线plc编号={},站点数据={},写入次数={}", slave.getId(), JSON.toJSON(staProtocol), writeCount); // // } // } else { // writeCount++; // OutputQueue.DEVP.offer(MessageFormat.format("【{0}】写入输送线命令失败。输送线plc编号={1},站点数据={2},写入次数={3}", // slave.getId(), JSON.toJSON(staProtocol),writeCount)); // log.error("写入输送线命令失败。输送线plc编号={},站点数据={},写入次数={}", slave.getId(), JSON.toJSON(staProtocol), writeCount); // // } // Thread.sleep(200); // } // // //写命令尝试了5次还是失败了 // if(!writeFlag){ // staProtocol = station.get(staProtocol.getSiteId()); // if (staProtocol.getWorkNo() == 0 && staProtocol.getStaNo() ==0) { // staProtocol.setPakMk(true); // } // OutputQueue.DEVP.offer(MessageFormat.format("【{0}】写入输送线命令尝试5次失败。输送线plc编号={1},站点数据={2}", slave.getId(), JSON.toJSON(staProtocol))); // log.error("写入输送线命令尝试5次失败。输送线plc编号={},站点数据={}", slave.getId(), JSON.toJSON(staProtocol)); // // //重新添加数据到任务队列 // boolean result = MessageQueue.offer(SlaveType.Devp, slave.getId(), new Task(3, staProtocol)); // read();//读取1次设备状态 // return; // } else { // OutputQueue.DEVP.offer(MessageFormat.format("【{0}】 输送线命令下发成功 [id:{1}] >>>>> {2}", DateUtils.convert(new Date()), slave.getId(), JSON.toJSON(staProtocol))); // //log.info("输送线命令下发 [id:{}] >>>>> 命令下发成功: {}", slave.getId(), JSON.toJSON(staProtocol)); // // Integer siteId = staProtocol.getSiteId(); // staProtocol = station.get(siteId); // if ((siteId == 101 || siteId == 201)&&(staProtocol.getWorkNo() == 0 && staProtocol.getStaNo() ==0)) { // staProtocol.setPakMk(true); // } // // } // // } // //// /** //// * 写入 ID+目标站 =====> 单站点写入 //// */ //// private void write(StaProtocol staProtocol) throws InterruptedException { //// if (null == staProtocol) { //// return; //// } //// int index = staNos.indexOf(staProtocol.getSiteId()); //// short[] array = new short[2]; //// array[0] = staProtocol.getWorkNo(); //// array[1] = staProtocol.getStaNo(); //// OperateResult write = siemensS7Net.Write("DB100." + index*4, array); //// ////// OperateResult write = siemensS7Net.Write("DB100." + index*2, staProtocol.getWorkNo()); // 工作号 ////// Thread.sleep(500); ////// OperateResult write1 = siemensS7Net.Write("DB101." + index*2, staProtocol.getStaNo()); // 目标站 //// //// if (!write.IsSuccess) { //// staProtocol = station.get(staProtocol.getSiteId()); //// if (staProtocol.getWorkNo() == 0 && staProtocol.getStaNo() ==0) { //// staProtocol.setPakMk(true); //// } //// OutputQueue.DEVP.offer(MessageFormat.format("【{0}】写入输送线站点数据失败。输送线plc编号={1},站点数据={2}", slave.getId(), JSON.toJSON(staProtocol))); //// log.error("写入输送线站点数据失败。输送线plc编号={},站点数据={}", slave.getId(), JSON.toJSON(staProtocol)); //// } else { //// OutputQueue.DEVP.offer(MessageFormat.format("【{0}】 输送线命令下发 [id:{1}] >>>>> {2}", DateUtils.convert(new Date()), slave.getId(), JSON.toJSON(staProtocol))); //// log.info("输送线命令下发 [id:{}] >>>>> 命令下发: {}", slave.getId(), JSON.toJSON(staProtocol)); //// //// Integer siteId = staProtocol.getSiteId(); //// staProtocol = station.get(siteId); //// if ((siteId == 101 || siteId == 201)&&(staProtocol.getWorkNo() == 0 && staProtocol.getStaNo() ==0)) { //// staProtocol.setPakMk(true); //// } //// } //// } // // // 更新入出库模式 // private void updateIoMode() throws InterruptedException { // if (this.ioModeOf2F != IoModeType.NONE) { // if (!siemensS7Net.Write("DB100.180", this.ioModeOf2F.id).IsSuccess) { // OutputQueue.DEVP.offer(MessageFormat.format("【{0}】写入输送线2F入出库模式失败。输送线plc编号={1}", slave.getId())); // log.error("写入输送线2F入出库模式失败。输送线plc编号={}", slave.getId()); // } // } // } // // /** // * 心跳 // */ // private void heartbeat(){ // if (heartBeatVal == 1) { // heartBeatVal = 2; // } else { // heartBeatVal = 1; // } // OperateResult write = siemensS7Net.Write("DB100.50", heartBeatVal); // if (!write.IsSuccess) { // log.error("输送线plc编号={} 心跳失败", slave.getId()); // } // } // // /** // * 设置入库标记 // */ // @Override // public void setPakMk(Integer siteId, boolean pakMk) { // StaProtocol staProtocol = station.get(siteId); // if (null != staProtocol) { // staProtocol.setPakMk(pakMk); // } // } // // @Override // public void close() { // siemensS7Net.ConnectClose(); // } // // public static void main(String[] args) { // ArrayList staNos = staNos1; // System.out.println(staNos.indexOf(129)); // System.out.println(staNos.size()); // for (int i = 0; i