| | |
| | | private MelsecMcNet melsecMcNet; |
| | | private CrnSlave slave; |
| | | private CrnProtocol crnProtocol; |
| | | private short heartBeatVal = 1; |
| | | private boolean resetFlag = false; |
| | | |
| | | public MelsecCrnThread(CrnSlave slave) { |
| | |
| | | @SuppressWarnings("InfiniteLoopStatement") |
| | | public void run() { |
| | | this.connect(); |
| | | // try { |
| | | // Thread.sleep(2000); |
| | | // } catch (InterruptedException e) { |
| | | // e.printStackTrace(); |
| | | // } |
| | | while (true) { |
| | | try { |
| | | int step = 1; |
| | |
| | | default: |
| | | break; |
| | | } |
| | | // 心跳 |
| | | heartbeat(); |
| | | Thread.sleep(500); |
| | | } catch (Exception e) { |
| | | e.printStackTrace(); |
| | | } |
| | | |
| | | } |
| | | } |
| | | |
| | | /** |
| | | * 初始化堆垛机状态 |
| | | */ |
| | | private void initCrn() { |
| | | if (null == crnProtocol) { |
| | | crnProtocol = new CrnProtocol(); |
| | | } |
| | | crnProtocol.setCrnNo(slave.getId()); |
| | | crnProtocol.setMode((short) -1); |
| | | // crnProtocol.setTaskNo((short)0); |
| | | crnProtocol.setStatus((short)-1); |
| | | crnProtocol.setBay((short)0); |
| | | crnProtocol.setLevel((short)0); |
| | | crnProtocol.setForkPos((short) -1); |
| | | crnProtocol.setLiftPos((short) -1); |
| | | crnProtocol.setWalkPos((short)0); |
| | | crnProtocol.setLoaded((short)0); |
| | | crnProtocol.setAlarm((short)0); |
| | | crnProtocol.setXSpeed(0F); |
| | | crnProtocol.setYSpeed(0F); |
| | | crnProtocol.setZSpeed(0F); |
| | | crnProtocol.setXDistance(0F); |
| | | crnProtocol.setYDistance(0F); |
| | | crnProtocol.setXDuration(0F); |
| | | crnProtocol.setYDuration(0F); |
| | | } |
| | | |
| | | @Override |
| | |
| | | } 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("堆垛机plc连接失败!!! ===>> [id:{}] [ip:{}] [port:{}]", slave.getId(), slave.getIp(), slave.getPort()); |
| | | initCrn(); |
| | | } |
| | | melsecMcNet.ConnectClose(); |
| | | // melsecMcNet.ConnectClose(); |
| | | return result; |
| | | } |
| | | |
| | |
| | | */ |
| | | private void readStatus(){ |
| | | try { |
| | | // if (this.slave.getId() == 1 && flag1.equals(0)) { |
| | | // Thread.sleep(3000); |
| | | // flag1=1; |
| | | // System.out.println("==="); |
| | | // } |
| | | OperateResultExOne<byte[]> result = melsecMcNet.Read("D20", (short) 70); |
| | | if (result.IsSuccess) { |
| | | if (null == crnProtocol) { |
| | | crnProtocol = new CrnProtocol(); |
| | | } |
| | | crnProtocol.setCrnNo(slave.getId()); |
| | | crnProtocol.setMode(melsecMcNet.getByteTransform().TransInt16(result.Content, 0)); |
| | | crnProtocol.setTaskNo(melsecMcNet.getByteTransform().TransInt16(result.Content, 2)); |
| | | crnProtocol.setStatus(melsecMcNet.getByteTransform().TransInt16(result.Content, 4)); |
| | |
| | | } |
| | | } |
| | | |
| | | |
| | | // 根据实时信息更新数据库 |
| | | BasCrnpService basCrnpService = SpringUtils.getBean(BasCrnpService.class); |
| | | BasCrnp basCrnp = new BasCrnp(); |
| | |
| | | e.printStackTrace(); |
| | | 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("读取堆垛机plc状态信息失败 ===>> [id:{}] [ip:{}] [port:{}]", slave.getId(), slave.getIp(), slave.getPort()); |
| | | initCrn(); |
| | | } |
| | | |
| | | } |
| | |
| | | melsecMcNet.ConnectClose(); |
| | | } |
| | | |
| | | /** |
| | | * 心跳 |
| | | */ |
| | | private void heartbeat(){ |
| | | if (heartBeatVal == 1) { |
| | | heartBeatVal = 2; |
| | | } else { |
| | | heartBeatVal = 1; |
| | | } |
| | | OperateResult write = melsecMcNet.Write("D10", heartBeatVal); |
| | | if (!write.IsSuccess) { |
| | | log.error("输送线plc编号={} 心跳失败", slave.getId()); |
| | | } |
| | | } |
| | | |
| | | |
| | | /******************************************************************************************/ |
| | | /**************************************** 测试专用 *****************************************/ |