//package com.zy.acs.wcs.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.baomidou.mybatisplus.mapper.EntityWrapper; //import com.core.common.Cools; //import com.core.common.DateUtils; //import com.core.common.SpringUtils; //import com.zy.asrs.entity.*; //import com.zy.asrs.service.*; //import com.zy.acs.wcs.core.CrnThread; //import com.zy.acs.wcs.core.cache.MessageQueue; //import com.zy.acs.wcs.core.cache.OutputQueue; //import com.zy.acs.wcs.core.enums.CommandStatusType; //import com.zy.acs.wcs.core.enums.CrnTaskModeType; //import com.zy.acs.wcs.core.enums.SlaveType; //import com.zy.acs.wcs.core.model.CrnSlave; //import com.zy.acs.wcs.core.model.Task; //import com.zy.acs.wcs.core.model.command.CrnCommand; //import com.zy.acs.wcs.core.model.protocol.CrnProtocol; //import lombok.Data; //import lombok.extern.slf4j.Slf4j; // //import java.text.MessageFormat; //import java.util.Date; // ///** // * 堆垛机线程 // * Created by vincent on 2020/8/4 // */ //@Data //@Slf4j //public class SiemensCrnThread implements Runnable, CrnThread { // // private SiemensS7Net siemensNet; // private CrnSlave slave; // private CrnProtocol crnProtocol; // private boolean resetFlag = false; // // // // public SiemensCrnThread(CrnSlave slave) { // this.slave = slave; // } // // /*****************************************************************************************/ // public static void main(String[] args) throws InterruptedException { // CrnSlave slave = new CrnSlave(); // slave.setId(1); // slave.setIp("192.168.6.9"); // slave.setRack(0); // slave.setSlot(0); // SiemensCrnThread crnThread = new SiemensCrnThread(slave); // crnThread.connect(); // crnThread.readStatus(); // System.out.println(JSON.toJSONString(crnThread.crnProtocol)); // Thread.sleep(3000L); // // // 1.入库 源和目标都发 //// CrnCommand command = new CrnCommand(); //// command.setCrnNo(1); // 堆垛机编号 //// command.setTaskNo((short) 0); // 工作号 //// command.setAckFinish((short) 0); // 任务完成确认位 //// command.setTaskMode(CrnTaskModeType.PAKIN); // 任务模式 //// command.setSourcePosX((short) 1); // 源库位排 //// command.setSourcePosY((short) 0); // 源库位列 //// command.setSourcePosZ((short) 1); // 源库位层 //// command.setDestinationPosX((short) 2); // 目标库位排 //// command.setDestinationPosY((short) 3); // 目标库位列 //// command.setDestinationPosZ((short) 1); // 目标库位层 //// crnThread.write(command); // // // 2.出库 源和目标都发 //// CrnCommand command = new CrnCommand(); //// command.setCrnNo(1); // 堆垛机编号 //// command.setTaskNo((short) 0); // 工作号 //// command.setAckFinish((short) 0); // 任务完成确认位 //// command.setTaskMode(CrnTaskModeType.PAKOUT); // 任务模式 //// command.setSourcePosX((short) 2); // 源库位排 //// command.setSourcePosY((short) 4); // 源库位列 //// command.setSourcePosZ((short) 3); // 源库位层 //// command.setDestinationPosX((short) 1); // 目标库位排 //// command.setDestinationPosY((short) 0); // 目标库位列 //// command.setDestinationPosZ((short) 1); // 目标库位层 //// crnThread.write(command); // // //// // 3.库位移转 源和目标都发 pass //// CrnCommand command = new CrnCommand(); //// command.setCrnNo(slave.getId()); // 堆垛机编号 //// command.setTaskNo((short) 0); // 工作号 //// command.setAckFinish((short) 0); // 任务完成确认位 //// command.setTaskMode(CrnTaskModeType.LOC_MOVE); // 任务模式: 库位移转 //// command.setSourcePosX((short)2); // 源库位排 //// command.setSourcePosY((short)2); // 源库位列 //// command.setSourcePosZ((short)3); // 源库位层 //// command.setDestinationPosX((short)2); // 目标库位排 //// command.setDestinationPosY((short)4); // 目标库位列 //// command.setDestinationPosZ((short)4); // 目标库位层 //// crnThread.write(command); // // // 4.站位移转 源和目标都发 //// CrnCommand command = new CrnCommand(); //// command.setCrnNo(slave.getId()); // 堆垛机编号 //// command.setTaskNo((short) 0); // 工作号 //// command.setAckFinish((short) 0); // 任务完成确认位 //// command.setTaskMode(CrnTaskModeType.SITE_MOVE); // 任务模式: 库位移转 //// command.setSourcePosX((short)1); // 源库位排 //// command.setSourcePosY((short)0); // 源库位列 //// command.setSourcePosZ((short)1); // 源库位层 //// command.setDestinationPosX((short)2); // 目标库位排 //// command.setDestinationPosY((short)0); // 目标库位列 //// command.setDestinationPosZ((short)1); // 目标库位层 //// crnThread.write(command); // //// // 5.回原点 不用发 pass //// CrnCommand command = new CrnCommand(); //// command.setCrnNo(1); // 堆垛机编号 //// command.setTaskNo((short) 0); // 工作号 //// command.setAckFinish((short) 0); // 任务完成确认位 //// command.setTaskMode(CrnTaskModeType.GO_ORIGIN); // 任务模式 //// command.setSourcePosX((short) 0); // 源库位排 //// command.setSourcePosY((short) 0); // 源库位列 //// command.setSourcePosZ((short) 0); // 源库位层 //// command.setDestinationPosX((short) 0); // 目标库位排 //// command.setDestinationPosY((short) 0); // 目标库位列 //// command.setDestinationPosZ((short) 0); // 目标库位层 //// crnThread.write(command); // //// // 7.坐标移行 目标发 pass //// CrnCommand command = new CrnCommand(); //// command.setCrnNo(1); // 堆垛机编号 //// command.setTaskNo((short) 0); // 工作号 //// command.setAckFinish((short) 0); // 任务完成确认位 //// command.setTaskMode(CrnTaskModeType.OFFSET_MOVE); // 任务模式 //// command.setSourcePosX((short) 0); // 源库位排 //// command.setSourcePosY((short) 0); // 源库位列 //// command.setSourcePosZ((short) 0); // 源库位层 //// command.setDestinationPosX((short) 2); // 目标库位排 //// command.setDestinationPosY((short) 1); // 目标库位列 //// command.setDestinationPosZ((short) 1); // 目标库位层 //// crnThread.write(command); // // // 只有出现指定异常才进行复位 //// if (crnThread.crnProtocol.getCrnError2().leftTakeNoneErr //// || crnThread.crnProtocol.getCrnError2().rightTakeNoneErr //// || crnThread.crnProtocol.getCrnError2().leftPutLoadErr //// || crnThread.crnProtocol.getCrnError2().rightPutLoadErr) { //// CrnCommand command = new CrnCommand(); //// command.setCrnNo(1); // 堆垛机编号 //// command.setAckFinish((short) 1); // 任务完成确认位 //// command.setTaskMode(CrnTaskModeType.NONE); // 任务模式 //// Thread.sleep(3000L); //// crnThread.write(command); //// } // // } // // @Override // @SuppressWarnings("InfiniteLoopStatement") // public void run() { // initCrnProtocol(); // this.connect(); // while (true) { // try { // int step = 1; // Task task = MessageQueue.poll(SlaveType.Crn, slave.getId()); // if (task != null) { // step = task.getStep(); // } // switch (step) { // // 读数据 // case 1: // readStatus(); // break; // // 写入数据 // case 2: // write5((CrnCommand) task.getData()); // break; // // 复位 // case 3: // CrnCommand command = (CrnCommand) task.getData(); // if (null == command) { // command = new CrnCommand(); // } // command.setCrnNo(slave.getId()); // 堆垛机编号 // command.setTaskNo((short) 0); // 工作号 // command.setAckFinish((short) 1); // 任务完成确认位 // command.setTaskMode(CrnTaskModeType.NONE); // 任务模式 // command.setSourcePosX((short) 0); // 源库位排 // command.setSourcePosY((short) 0); // 源库位列 // command.setSourcePosZ((short) 0); // 源库位层 // command.setDestinationPosX((short) 0); // 目标库位排 // command.setDestinationPosY((short) 0); // 目标库位列 // command.setDestinationPosZ((short) 0); // 目标库位层 // write(command); // break; // case 4: // writeAuto((CrnCommand) task.getData()); // break; // case 5: // write((CrnCommand) task.getData()); // break; // default: // break; // } // Thread.sleep(500); // } catch (Exception e) { //// e.printStackTrace(); // } // // } // } // // /** // * 初始化堆垛机 // */ // private void initCrnProtocol() { // crnProtocol = new CrnProtocol(); // crnProtocol.setMode((short) 0); // crnProtocol.setStatus((short) 0); // crnProtocol.setTaskNo((short) 0); // crnProtocol.setTaskFinish((short) 0); // crnProtocol.setValid((short) 0); // crnProtocol.setBay((short) 0); // crnProtocol.setLevel((short) 0); // crnProtocol.setRow((short) 0); // crnProtocol.setLane((short) 0); // } // // @Override // public boolean connect() { // boolean result = false; // siemensNet = new SiemensS7Net(SiemensPLCS.S1500, slave.getIp()); // siemensNet.setRack(slave.getRack().byteValue()); // siemensNet.setSlot(slave.getSlot().byteValue()); // OperateResult connect = siemensNet.ConnectServer(); // if (connect.IsSuccess) { // result = true; // OutputQueue.CRN.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:{}] [rack:{}] [slot:{}]", slave.getId(), slave.getIp(), slave.getPort(), slave.getRack(), slave.getSlot()); // } else { // OutputQueue.CRN.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("crn", slave.getId(), "堆垛机plc连接失败"); // initCrnProtocol(); // } //// siemensNet.ConnectClose(); // return result; // } // // /** // * 读取状态 // */ // private void readStatus() { // // OperateResultExOne result = siemensNet.Read("DB101.0", (short) 56); // if (result.IsSuccess) { // if (null == crnProtocol) { // crnProtocol = new CrnProtocol(); // } // crnProtocol.setMode(siemensNet.getByteTransform().TransInt16(result.Content, 0)); // crnProtocol.setTaskNo(siemensNet.getByteTransform().TransInt16(result.Content, 2)); // crnProtocol.setStatus(siemensNet.getByteTransform().TransInt16(result.Content, 4)); // crnProtocol.setBay(siemensNet.getByteTransform().TransInt16(result.Content, 6)); // crnProtocol.setLevel(siemensNet.getByteTransform().TransInt16(result.Content, 8)); // crnProtocol.setForkPos(siemensNet.getByteTransform().TransInt16(result.Content, 10)); // crnProtocol.setLiftPos(siemensNet.getByteTransform().TransInt16(result.Content, 12)); // crnProtocol.setWalkPos(siemensNet.getByteTransform().TransInt16(result.Content, 14)); // crnProtocol.setLoaded(siemensNet.getByteTransform().TransInt16(result.Content, 16)); // crnProtocol.setAlarm(siemensNet.getByteTransform().TransInt16(result.Content, 18)); //// crnProtocol.setTemp1(siemensNet.getByteTransform().TransInt16(result.Content, 20)); //// crnProtocol.setTemp2(siemensNet.getByteTransform().TransInt16(result.Content, 22)); //// crnProtocol.setTemp3(siemensNet.getByteTransform().TransInt16(result.Content, 24)); //// crnProtocol.setTemp4(siemensNet.getByteTransform().TransInt16(result.Content, 26)); // crnProtocol.setXSpeed(siemensNet.getByteTransform().TransSingle(result.Content, 28)); // crnProtocol.setYSpeed(siemensNet.getByteTransform().TransSingle(result.Content, 32)); // crnProtocol.setZSpeed(siemensNet.getByteTransform().TransSingle(result.Content, 36)); // crnProtocol.setXDistance(siemensNet.getByteTransform().TransSingle(result.Content, 40)); // crnProtocol.setYDistance(siemensNet.getByteTransform().TransSingle(result.Content, 44)); // crnProtocol.setXDuration(siemensNet.getByteTransform().TransSingle(result.Content, 48)); // crnProtocol.setYDuration(siemensNet.getByteTransform().TransSingle(result.Content, 52)); // // // OutputQueue.CRN.offer(MessageFormat.format("【{0}】[id:{1}] <<<<< 实时数据更新成功", DateUtils.convert(new Date()), slave.getId())); // // // 复位信号 // if (crnProtocol.getTaskFinish() == 0) { // if (resetFlag) { // CrnCommand crnCommand = new CrnCommand(); // crnCommand.setAckFinish((short) 1); // if (write(crnCommand)) { // resetFlag = false; // // //堆垛机任务完成后访问wms请求任务完成 locationDone 货位处理完成 // TaskWrkService taskWrkService = SpringUtils.getBean(TaskWrkService.class); // TaskWrk taskWrk = taskWrkService.selectOne(new EntityWrapper().eq("wrk_no", crnProtocol.getTaskNo())); //// String tasktype = null; //// switch (taskWrk.getIoType()) { //// case 1: //// tasktype = "RK"; //// break; //// case 2: //// tasktype = "CK"; //// break; //// case 3: //// tasktype = "YK"; //// break; //// default: //// tasktype = "未知"; //// } //// Map map = new HashMap<>(); //// map.put("x-api-key", "7a15b5db-29b6-552c-8cff-0cfec3756da2"); //// TaskOverToWms taskOverToWms = new TaskOverToWms(); //// taskOverToWms.setFeedbackFrom("WCS"); //来源 //// taskOverToWms.setWarehouseId("1688469798893297665"); //仓库标识 //// taskOverToWms.setTaskNo(taskWrk.getTaskNo()); //任务号 //// taskOverToWms.setTaskType(tasktype); // 任务类型 //// taskOverToWms.setContainerCode(taskWrk.getBarcode()); // 容器编码 //// if (taskWrk.getIoType() == 1) { //// taskOverToWms.setEquipmentCode(String.valueOf(taskWrk.getCrnNo())); //设备编码 //// taskOverToWms.setTargetLocationCode(taskWrk.getOriginTargetPoint()); //目标库位 //// } else if (taskWrk.getIoType() == 2) { //// Map map1 = new HashMap<>(); //// map1.put(102, "J-1101"); //// map1.put(106, "J-1103"); //// map1.put(110, "J-1105"); //// map1.put(114, "J-1107"); //// map1.put(118, "J-1109"); //// map1.put(122, "J-1111"); //// map1.put(305, "H-1101"); //// map1.put(405, "G-1101"); //// taskOverToWms.setEquipmentCode(map1.get(taskWrk.getTargetPoint())); //设备编码 //// taskOverToWms.setSourceLocationCode(taskWrk.getOriginStartPoint()); //源库位 //// } else if (taskWrk.getIoType() == 3) { //// taskOverToWms.setEquipmentCode(String.valueOf(taskWrk.getCrnNo())); //设备编码 //// taskOverToWms.setSourceLocationCode(taskWrk.getOriginStartPoint()); //// taskOverToWms.setTargetLocationCode(taskWrk.getOriginTargetPoint()); //目标库位 //// } //// taskOverToWms.setTaskStatus("location_done"); //任务状态 //// String response = null; //// try { //// response = new HttpHandler.Builder() //// .setHeaders(map) //// .setUri("10.32.53.195:8080") //// .setPath("wcsManager/wcsInterface/taskStatusFeedback") //// .setJson(JSON.toJSONString(taskOverToWms)) //// .build() //// .doPost(); //// } catch (Exception e) { //// log.error("堆垛机任务完成,请求wms任务完成接口失败"); //// } //// ApiLogService apiLogService = SpringUtils.getBean(ApiLogService.class); //// apiLogService.save("Wms任务完成接口" //// , "10.32.53.195:8080" + "/wcsManager/wcsInterface/taskStatusFeedback" //// , null //// , "127.0.0.1" //// , JSON.toJSONString(taskOverToWms) //// , response //// , true //// ); //// JSONObject jsonObject = JSON.parseObject(response); //// if (jsonObject.getInteger("code").equals(200)) { // if (taskWrk.getIoType() == 3) { // taskWrk.setWrkSts(4); // } // taskWrk.setStatus(5); // if (!taskWrkService.update(taskWrk, new EntityWrapper().eq("wrk_no", crnProtocol.getTaskNo()))) { // log.error("堆垛机任务完成,改变任务状态失败"); // } // // log.info("堆垛机任务完成,请求wms任务完成接口成功"); // } else { // log.error("堆垛机任务完成,请求wms任务完成接口完成,但返回失败"); // } // //// } // // // } // } // // try { // // 根据实时信息更新数据库 // BasCrnpService basCrnpService = SpringUtils.getBean(BasCrnpService.class); // BasCrnp basCrnp = new BasCrnp(); // basCrnp.setCrnNo(slave.getId()); // basCrnp.setCrnSts((int) crnProtocol.getMode()); // if (!basCrnpService.updateById(crnProtocol.toSqlModel(basCrnp))) { // log.error("堆垛机plc数据库更新失败 ===>> [id:{}] [ip:{}] [port:{}] [rack:{}] [slot:{}]", slave.getId(), slave.getIp(), slave.getPort(), slave.getRack(), slave.getSlot()); // } // } catch (Exception ignore) { // } // // DeviceErrorService deviceErrorService = SpringUtils.getBean(DeviceErrorService.class); // deviceErrorService.deleteDeviceError("crn", slave.getId()); // } else { // OutputQueue.CRN.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("crn", slave.getId(), "读取堆垛机plc状态信息失败"); // } // } // // /** // * 写入数据 // */ // private boolean write(CrnCommand command) { // if (null == command) { // log.error("堆垛机写入命令为空"); // return false; // } // //转换前克隆一份 // CrnCommand crnCommand = new CrnCommand(); // crnCommand.setCrnNo(command.getCrnNo()); // crnCommand.setAckFinish(command.getAckFinish()); // crnCommand.setTaskNo(command.getTaskNo()); // crnCommand.setTaskMode(command.getTaskMode()); // crnCommand.setSourcePosX(command.getSourcePosX()); // crnCommand.setSourcePosY(command.getSourcePosY()); // crnCommand.setSourcePosZ(command.getSourcePosZ()); // crnCommand.setDestinationPosX(command.getDestinationPosX()); // crnCommand.setDestinationPosY(command.getDestinationPosY()); // crnCommand.setDestinationPosZ(command.getDestinationPosZ()); //// crnCommand.setSourceStaNo(command.getSourceStaNo()); //// crnCommand.setDestinationStaNo(command.getDestinationStaNo()); // crnCommand.setCommand(command.getCommand()); // if (command.getTaskNo() == 0 && command.getAckFinish() == 0 && command.getAuto() != 1) { // command.setTaskNo((short) 999); // } // // command.setCrnNo(slave.getId()); // short[] array = new short[10]; // array[0] = command.getAckFinish(); // array[1] = command.getTaskNo(); // array[2] = command.getTaskMode(); // array[3] = command.getSourcePosX(); // array[4] = command.getSourcePosY(); // array[5] = command.getSourcePosZ(); // array[6] = command.getDestinationPosX(); // array[7] = command.getDestinationPosY(); // array[8] = command.getDestinationPosZ(); // array[9] = command.getCommand(); // // // 作业信息 // OperateResult result = siemensNet.Write("DB100.0", array); // // // if (result.IsSuccess) { // log.warn("堆垛机命令下发[id:{},时间:{}] >>>>> {}", slave.getId(), DateUtils.convert(new Date(), DateUtils.yyyyMMddHHmmsssss_F), JSON.toJSON(command)); // OutputQueue.CRN.offer(MessageFormat.format("【{0}】[id:{1}] >>>>> 命令下发: {2}", DateUtils.convert(new Date()), slave.getId(), JSON.toJSON(command))); // return true; // } else { // OutputQueue.CRN.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()); // return false; // } // } // // /** // * 写入数据 // */ // private boolean write5(CrnCommand command) throws InterruptedException { // String methodName = Thread.currentThread().getStackTrace()[1].getMethodName(); // // if (null == command) { // log.error("堆垛机写入命令为空"); // return false; // } //// convertRow(command); // command.setCrnNo(slave.getId()); // short[] array = new short[10]; // array[0] = command.getAckFinish(); // array[1] = command.getTaskNo(); // array[2] = command.getTaskMode(); // array[3] = command.getSourcePosX(); // array[4] = command.getSourcePosY(); // array[5] = command.getSourcePosZ(); // array[6] = command.getDestinationPosX(); // array[7] = command.getDestinationPosY(); // array[8] = command.getDestinationPosZ(); //// array[9] = command.getSourceStaNo(); //// array[10] = command.getDestinationStaNo(); // array[9] = command.getCommand(); // // OperateResult result = siemensNet.Write("DB100.0", array); // // int i = 0; // do { // //堆垛机任务写入后,回读一次,看是否成功 // Thread.sleep(200); // OperateResultExOne resultRead = siemensNet.Read("DB100.0", (short) 20); // if (resultRead.IsSuccess) { // CrnCommand one = new CrnCommand(); // one.setTaskNo(siemensNet.getByteTransform().TransInt16(resultRead.Content, 2)); // one.setTaskMode(siemensNet.getByteTransform().TransInt16(resultRead.Content, 4)); // one.setSourcePosX(siemensNet.getByteTransform().TransInt16(resultRead.Content, 6)); // one.setSourcePosY(siemensNet.getByteTransform().TransInt16(resultRead.Content, 8)); // one.setSourcePosZ(siemensNet.getByteTransform().TransInt16(resultRead.Content, 10)); // one.setDestinationPosX(siemensNet.getByteTransform().TransInt16(resultRead.Content, 12)); // one.setDestinationPosY(siemensNet.getByteTransform().TransInt16(resultRead.Content, 14)); // one.setDestinationPosZ(siemensNet.getByteTransform().TransInt16(resultRead.Content, 16)); // if (!command.getTaskNo().equals(one.getTaskNo()) || !command.getTaskMode().equals(one.getTaskMode()) // || !command.getSourcePosX().equals(one.getSourcePosX()) || !command.getSourcePosY().equals(one.getSourcePosY()) // || !command.getSourcePosZ().equals(one.getSourcePosZ()) || !command.getDestinationPosX().equals(one.getDestinationPosX()) // || !command.getDestinationPosY().equals(one.getDestinationPosY()) || !command.getDestinationPosZ().equals(one.getDestinationPosZ()) // ) { // i++; // log.error("堆垛机命令地址写入后回读失败[id:{}]>>>>重写[{}] >>>>> 写入[{}],===>>回读[{}]", slave.getId(), i, JSON.toJSON(command), JSON.toJSON(one)); // result = siemensNet.Write("DB100.0", array); // } else { // i = 5; // } // } // } while (i < 5); // // // try { // // 日志记录 // BasCrnOptService bean = SpringUtils.getBean(BasCrnOptService.class); // BasCrnOpt basCrnOpt = new BasCrnOpt( // command.getTaskNo().intValue(), // 任务号 // command.getCrnNo(), // 堆垛机[非空] // new Date(), // 下发时间 // command.getTaskModeType().toString(), // 模式 // command.getSourcePosX().intValue(), // 源排 // command.getSourcePosY().intValue(), // 源列 // command.getSourcePosZ().intValue(), // 源层 // null, // 源站 // command.getDestinationPosX().intValue(), // 目标排 // command.getDestinationPosY().intValue(), // 目标列 // command.getDestinationPosZ().intValue(), // 目标层 // null, // 目标站 // null, // 响应结果 // null, // 修改时间 // null // 修改人员 // ); // bean.insert(basCrnOpt); // } catch (Exception ignore) { // } // // if (result != null && result.IsSuccess) { // Thread.sleep(200); // this.readStatus(); // log.info(methodName + ":堆垛机命令下发[id:{}] >>>>> {}", slave.getId(), JSON.toJSON(command)); // OutputQueue.CRN.offer(MessageFormat.format("【{0}】[id:{1}] >>>>> 命令下发: {2}", DateUtils.convert(new Date()), slave.getId(), JSON.toJSON(command))); // return true; // } else { // OutputQueue.CRN.offer(MessageFormat.format("【{0}】写入堆垛机plc数据失败 ===>> [id:{1}] [ip:{2}] [port:{3}]", DateUtils.convert(new Date()), slave.getId(), slave.getIp(), slave.getPort())); // log.error(methodName + ":写入堆垛机plc数据失败 ===>> [id:{}] [ip:{}] [port:{}]", slave.getId(), slave.getIp(), slave.getPort()); // return false; // } // } // // /** // * 写入数据 // */ // private boolean write2(CrnCommand command) { // if (null == command) { // log.error("堆垛机写入命令为空"); // return false; // } // //转换前克隆一份 // CrnCommand crnCommand = new CrnCommand(); // crnCommand.setCrnNo(command.getCrnNo()); // crnCommand.setAckFinish(command.getAckFinish()); // crnCommand.setTaskNo(command.getTaskNo()); // crnCommand.setTaskMode(command.getTaskMode()); // crnCommand.setSourcePosX(command.getSourcePosX()); // crnCommand.setSourcePosY(command.getSourcePosY()); // crnCommand.setSourcePosZ(command.getSourcePosZ()); // crnCommand.setDestinationPosX(command.getDestinationPosX()); // crnCommand.setDestinationPosY(command.getDestinationPosY()); // crnCommand.setDestinationPosZ(command.getDestinationPosZ()); //// crnCommand.setSourceStaNo(command.getSourceStaNo()); //// crnCommand.setDestinationStaNo(command.getDestinationStaNo()); // crnCommand.setCommand(command.getCommand()); // if (command.getTaskNo() == 0 && command.getAckFinish() == 0 && command.getAuto() != 1) { // command.setTaskNo((short) 999); // } // // command.setCrnNo(slave.getId()); // short[] array = new short[10]; // if (Cools.isEmpty(command.getAckFinish())) { // array[0] = 5; // } else { // array[0] = command.getAckFinish(); // } // array[1] = command.getTaskNo(); // array[2] = command.getTaskMode(); // array[3] = command.getSourcePosX(); // array[4] = command.getSourcePosY(); // array[5] = command.getSourcePosZ(); // array[6] = command.getDestinationPosX(); // array[7] = command.getDestinationPosY(); // array[8] = command.getDestinationPosZ(); // array[9] = command.getCommand(); // // 作业信息 // OperateResult result = siemensNet.Write("DB100.0", array); // // 日志记录 // if (command.getAckFinish() != 1) { // BasCrnOptService bean = SpringUtils.getBean(BasCrnOptService.class); // BasCrnOpt basCrnOpt = new BasCrnOpt( // command.getTaskNo().intValue(), // 任务号 // command.getCrnNo(), // 堆垛机[非空] // new Date(), // 下发时间 // command.getTaskModeType() == null ? null : command.getTaskModeType().toString(), // 模式 // command.getSourcePosX().intValue(), // 源排 // command.getSourcePosY().intValue(), // 源列 // command.getSourcePosZ().intValue(), // 源层 // null, // 源站 // command.getDestinationPosX().intValue(), // 目标排 // command.getDestinationPosY().intValue(), // 目标列 // command.getDestinationPosZ().intValue(), // 目标层 // null, // 目标站 // null, // 响应结果 // null, // 修改时间 // null // 修改人员 // ); // bean.insert(basCrnOpt); // } //// } catch (Exception ignore) {} // // //更新命令日志 // CommandInfoLogService commandInfoLogService = SpringUtils.getBean(CommandInfoLogService.class); // CommandInfoService commandInfoService = SpringUtils.getBean(CommandInfoService.class); // CommandInfo commandInfo = commandInfoService.selectById(command.getCommandId()); // if (Cools.isEmpty(commandInfo)) { // commandInfo = commandInfoService.selectOne(new EntityWrapper() // .eq("wrk_no", crnProtocol.getTaskNo()) // .eq("device", "Crn")); // } // CommandInfoLog commandInfoLog = JSON.parseObject(JSON.toJSONString(commandInfo), CommandInfoLog.class); // commandInfoLog.setId(null); // if (result.IsSuccess) { // Date now = new Date(); // //更新指令日志 // commandInfoLog.setDeviceLog("指令下发成功"); // commandInfoLogService.insert(commandInfoLog); // // //线程暂存指令ID // crnProtocol.setCommandId(command.getCommandId()); // // //更新指令状态 // commandInfo.setCommandStatus(CommandStatusType.EXECUTE.id);//执行中 // commandInfo.setExecuteTime(now); // commandInfoService.updateById(commandInfo); // // //更新任务步序 // TaskWrkService taskWrkService = SpringUtils.getBean(TaskWrkService.class); // TaskWrk taskWrk = taskWrkService.selectByWrkNo(command.getTaskNo().intValue()); // if (taskWrk != null) { // taskWrk.setCommandStep(taskWrk.getCommandStep() + 1);//更新指令步序 // taskWrkService.updateById(taskWrk); // } // // // } else { // OutputQueue.CRN.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()); // } // return true; // } // // private boolean writeAuto(CrnCommand command) { // if (null == command) { // log.error("堆垛机写入命令为空"); // return false; // } // OperateResult result = new OperateResult(); // short[] array = new short[1]; // array[0] = command.getAuto(); // if (command.getAuto() != 0) { // array[0] = command.getAuto(); // result = siemensNet.Write("DB103.0", array); // } else if (command.getOnlineWrk1() != 0) { // array[0] = command.getOnlineWrk1(); // result = siemensNet.Write("DB103.2", array); // } else if (command.getOnlineWrk2() != 0) { // array[0] = command.getOnlineWrk2(); // result = siemensNet.Write("DB103.4", array); // } else if (command.getOnlineWrk3() != 0) { // array[0] = command.getOnlineWrk3(); // result = siemensNet.Write("DB103.6", array); // } else if (command.getOnlineWrk4() != 0) { // array[0] = command.getOnlineWrk4(); // result = siemensNet.Write("DB103.8", array); // } else if (command.getReset() != 0) { // array[0] = command.getReset(); // result = siemensNet.Write("DB103.10", array); // } // // // if (result.IsSuccess) { // log.warn("堆垛机命令下发[id:{},时间:{}] >>>>> {}", slave.getId(), DateUtils.convert(new Date(), DateUtils.yyyyMMddHHmmsssss_F), JSON.toJSON(command)); // OutputQueue.CRN.offer(MessageFormat.format("【{0}】[id:{1}] >>>>> 命令下发: {2}", DateUtils.convert(new Date()), slave.getId(), JSON.toJSON(command))); // // // return true; // } else { // OutputQueue.CRN.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()); // // return false; // } // } // // /******************************************************************************************/ // /**************************************** 测试专用 *****************************************/ // // @Override // public void close() { // siemensNet.ConnectClose(); // } // //}