From ebb63d5ac2fb6c822e9d0541d4b86c7d71f21bdb Mon Sep 17 00:00:00 2001
From: Junjie <xjj@123>
Date: 星期四, 18 四月 2024 15:44:22 +0800
Subject: [PATCH] #
---
zy-asrs-wcs/src/main/java/com/zy/asrs/wcs/core/entity/BasLift.java | 14 +
zy-asrs-wcs/src/main/java/com/zy/asrs/wcs/rcs/model/protocol/LiftProtocol.java | 5
zy-asrs-wcs/src/main/java/com/zy/asrs/wcs/core/kernel/command/LiftCommandService.java | 5
zy-asrs-wcs/src/main/java/com/zy/asrs/wcs/rcs/thread/impl/NyLiftThread.java | 501 +++++++++++++++++++++++++++++++++++++++++++++
zy-asrs-wcs/src/main/java/com/zy/asrs/wcs/rcs/thread/impl/SurayLiftThread.java | 80 +++++--
zy-asrs-wcs/src/main/java/com/zy/asrs/wcs/rcs/thread/LiftThread.java | 8
6 files changed, 581 insertions(+), 32 deletions(-)
diff --git a/zy-asrs-wcs/src/main/java/com/zy/asrs/wcs/core/entity/BasLift.java b/zy-asrs-wcs/src/main/java/com/zy/asrs/wcs/core/entity/BasLift.java
index 5c1166d..e65a22f 100644
--- a/zy-asrs-wcs/src/main/java/com/zy/asrs/wcs/core/entity/BasLift.java
+++ b/zy-asrs-wcs/src/main/java/com/zy/asrs/wcs/core/entity/BasLift.java
@@ -136,9 +136,15 @@
@ApiModelProperty(value= "鍒�")
private Integer bay;
+ /**
+ * 绔欑偣鍒楄〃
+ */
+ @ApiModelProperty(value= "绔欑偣鍒楄〃")
+ private String sta;
+
public BasLift() {}
- public BasLift(Long deviceId,Integer liftNo,Integer status,Integer taskNo,Long updateBy,Long createBy,Date createTime,Date updateTime,String memo,Integer pakMk,Integer deleted,Long hostId,String protocol,Integer transfer) {
+ public BasLift(Long deviceId, Integer liftNo, Integer status, Integer taskNo, Long updateBy, Long createBy, Date createTime, Date updateTime, String memo, Integer pakMk, Integer deleted, Long hostId, String protocol, Integer transfer, Integer row, Integer bay, String sta) {
this.deviceId = deviceId;
this.liftNo = liftNo;
this.status = status;
@@ -153,9 +159,13 @@
this.hostId = hostId;
this.protocol = protocol;
this.transfer = transfer;
+ this.row = row;
+ this.bay = bay;
+ this.sta = sta;
}
-// BasLift basLift = new BasLift(
+
+ // BasLift basLift = new BasLift(
// null, // 璁惧id
// null, // 鎻愬崌鏈哄彿[闈炵┖]
// null, // 褰撳墠浠诲姟鐘舵��
diff --git a/zy-asrs-wcs/src/main/java/com/zy/asrs/wcs/core/kernel/command/LiftCommandService.java b/zy-asrs-wcs/src/main/java/com/zy/asrs/wcs/core/kernel/command/LiftCommandService.java
index 5e6a8a1..9f876c1 100644
--- a/zy-asrs-wcs/src/main/java/com/zy/asrs/wcs/core/kernel/command/LiftCommandService.java
+++ b/zy-asrs-wcs/src/main/java/com/zy/asrs/wcs/core/kernel/command/LiftCommandService.java
@@ -19,7 +19,6 @@
import org.springframework.stereotype.Service;
import java.util.ArrayList;
-import java.util.Date;
import java.util.Objects;
/**
@@ -75,7 +74,7 @@
break;
}
- command = liftThread.getEmptyMoveCommand(motion.getTaskNo(), Integer.parseInt(motion.getTarget()));
+ command = liftThread.getMoveCommand(motion.getTaskNo(), 0, Integer.parseInt(motion.getTarget()), null);
list.add(command);
return liftAction.assignWork(liftThread.getDevice(), assignCommand);
case LIFT_WITH_GOODS:
@@ -93,7 +92,7 @@
return false;
}
- command = liftThread.getMoveWithShuttleCommand(motion.getTaskNo(), Integer.parseInt(motion.getOrigin()), Integer.parseInt(motion.getTarget()));
+ command = liftThread.getMoveWithShuttleCommand(motion.getTaskNo(), Integer.parseInt(motion.getOrigin()), Integer.parseInt(motion.getTarget()), null);
list.add(command);
return liftAction.assignWork(liftThread.getDevice(), assignCommand);
case LIFT_WITH_GOODS_AND_SHUTTLE:
diff --git a/zy-asrs-wcs/src/main/java/com/zy/asrs/wcs/rcs/model/protocol/LiftProtocol.java b/zy-asrs-wcs/src/main/java/com/zy/asrs/wcs/rcs/model/protocol/LiftProtocol.java
index 1a3d9c5..d47627f 100644
--- a/zy-asrs-wcs/src/main/java/com/zy/asrs/wcs/rcs/model/protocol/LiftProtocol.java
+++ b/zy-asrs-wcs/src/main/java/com/zy/asrs/wcs/rcs/model/protocol/LiftProtocol.java
@@ -125,6 +125,11 @@
private Boolean pakMk = false;
/**
+ * 鎸囦护涓嬪彂鏃堕棿
+ */
+ private Long sendTime = 0L;
+
+ /**
* 鏃ュ織閲囬泦鏃堕棿
*/
private Long deviceDataLog = System.currentTimeMillis();
diff --git a/zy-asrs-wcs/src/main/java/com/zy/asrs/wcs/rcs/thread/LiftThread.java b/zy-asrs-wcs/src/main/java/com/zy/asrs/wcs/rcs/thread/LiftThread.java
index 48a7bdc..8dc9155 100644
--- a/zy-asrs-wcs/src/main/java/com/zy/asrs/wcs/rcs/thread/LiftThread.java
+++ b/zy-asrs-wcs/src/main/java/com/zy/asrs/wcs/rcs/thread/LiftThread.java
@@ -1,5 +1,6 @@
package com.zy.asrs.wcs.rcs.thread;
+import com.zy.asrs.wcs.common.ExecuteSupport;
import com.zy.asrs.wcs.core.model.command.LiftCommand;
import com.zy.asrs.wcs.rcs.entity.Device;
import com.zy.asrs.wcs.rcs.model.protocol.LiftProtocol;
@@ -22,13 +23,14 @@
boolean isIdle();//鏄惁绌洪棽
+ boolean isIdle(ExecuteSupport support);//鏄惁绌洪棽
//***************鑾峰彇鍛戒护*****************
- LiftCommand getEmptyMoveCommand(Integer taskNo, Integer targetLev);//绌鸿浇绉诲姩
+ LiftCommand getMoveCommand(Integer taskNo, Integer sourceLev, Integer targetLev, Integer mode);//鎻愬崌鏈虹Щ鍔�
- LiftCommand getMoveWithShuttleCommand(Integer taskNo, Integer originLev, Integer targetLev);//杞借溅绉诲姩
+ LiftCommand getMoveWithShuttleCommand(Integer taskNo, Integer sourceLev, Integer targetLev, Integer mode);//杞借溅绉诲姩
- LiftCommand getPalletInOutCommand(Integer taskNo, Integer originLev, Integer targetLev, Integer originSta, Integer targetSta);//鎵樼洏鍑哄叆
+ LiftCommand getPalletInOutCommand(Integer taskNo, Integer sourceLev, Integer targetLev, Integer originSta, Integer targetSta, Integer mode);//鎵樼洏鍑哄叆
LiftCommand getLockCommand(Integer taskNo, Boolean lock);//閿佸畾/瑙i攣鎻愬崌鏈�
diff --git a/zy-asrs-wcs/src/main/java/com/zy/asrs/wcs/rcs/thread/impl/NyLiftThread.java b/zy-asrs-wcs/src/main/java/com/zy/asrs/wcs/rcs/thread/impl/NyLiftThread.java
new file mode 100644
index 0000000..1f91941
--- /dev/null
+++ b/zy-asrs-wcs/src/main/java/com/zy/asrs/wcs/rcs/thread/impl/NyLiftThread.java
@@ -0,0 +1,501 @@
+package com.zy.asrs.wcs.rcs.thread.impl;
+
+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.core.conditions.query.LambdaQueryWrapper;
+import com.zy.asrs.framework.common.DateUtils;
+import com.zy.asrs.framework.common.SpringUtils;
+import com.zy.asrs.framework.exception.CoolException;
+import com.zy.asrs.wcs.common.ExecuteSupport;
+import com.zy.asrs.wcs.core.entity.BasLift;
+import com.zy.asrs.wcs.core.model.command.LiftCommand;
+import com.zy.asrs.wcs.core.model.enums.LiftCommandModeType;
+import com.zy.asrs.wcs.core.service.BasLiftService;
+import com.zy.asrs.wcs.core.utils.RedisUtil;
+import com.zy.asrs.wcs.core.utils.Utils;
+import com.zy.asrs.wcs.rcs.News;
+import com.zy.asrs.wcs.rcs.cache.OutputQueue;
+import com.zy.asrs.wcs.rcs.entity.Device;
+import com.zy.asrs.wcs.rcs.entity.DeviceDataLog;
+import com.zy.asrs.wcs.rcs.model.enums.LiftProtocolStatusType;
+import com.zy.asrs.wcs.rcs.model.enums.SlaveType;
+import com.zy.asrs.wcs.rcs.model.protocol.LiftProtocol;
+import com.zy.asrs.wcs.rcs.service.DeviceDataLogService;
+import com.zy.asrs.wcs.rcs.thread.LiftThread;
+import lombok.Data;
+import lombok.extern.slf4j.Slf4j;
+
+import java.text.MessageFormat;
+import java.text.SimpleDateFormat;
+import java.util.*;
+
+@Slf4j
+@SuppressWarnings("all")
+public class NyLiftThread implements LiftThread {
+
+ private Device device;
+ private RedisUtil redisUtil;
+ private LiftProtocol liftProtocol;
+ private SiemensS7Net siemensS7Net;
+ private List<LiftStaProtocol> liftStaProtocols = new ArrayList<>();
+ private List<Sta> staList = new ArrayList<>();
+
+ public NyLiftThread(Device device, RedisUtil redisUtil) {
+ this.device = device;
+ this.redisUtil = redisUtil;
+
+ //鍒濆鍖栫珯鐐�
+ BasLiftService basLiftService = SpringUtils.getBean(BasLiftService.class);
+ BasLift basLift = basLiftService.getOne(new LambdaQueryWrapper<BasLift>()
+ .eq(BasLift::getDeviceId, device.getId()));
+ List<Sta> staList = JSON.parseArray(basLift.getSta(), Sta.class);
+ this.staList = staList;
+ for (Sta sta : staList) {
+ LiftStaProtocol liftStaProtocol = new LiftStaProtocol();
+ liftStaProtocol.setStaNo(sta.getStaNo());//绔欑偣鍙�
+ liftStaProtocol.setLev(sta.getLev());//绔欑偣妤煎眰
+ String locNo = Utils.getLocNo(sta.getRow(), sta.getBay(), sta.getLev());
+ liftStaProtocol.setLocNo(locNo);//绔欑偣搴撲綅鍙�
+ liftStaProtocol.setLiftNo(basLift.getLiftNo());//鎻愬崌鏈哄彿
+ liftStaProtocols.add(liftStaProtocol);
+ }
+ }
+
+ @Override
+ public void run() {
+ News.info("{}鍙锋彁鍗囨満绾跨▼鍚姩", device.getDeviceNo());
+ this.connect();
+ while (true) {
+ try {
+ read();
+ Thread.sleep(500);
+ } catch (Exception e) {
+ e.printStackTrace();
+ }
+ }
+ }
+
+ private void read() {
+ try {
+ readStatus();
+
+ //鎻愬崌鏈哄浜庤繍琛岀姸鎬侊紝灏嗘爣璁扮疆涓篺alse
+ if (liftProtocol.getRun()) {
+ liftProtocol.setPakMk(false);
+ }
+ } catch (Exception e) {
+ OutputQueue.LIFT.offer(MessageFormat.format("銆恵0}銆戣鍙栨彁鍗囨満鐘舵�佷俊鎭け璐� ===>> [id:{1}] [ip:{2}] [port:{3}]", DateUtils.convert(new Date()), device.getId(), device.getIp(), device.getPort()));
+ }
+ }
+
+ private void readStatus() {
+ try {
+ //鑾峰彇鎻愬崌鏈烘暟鎹�
+ OperateResultExOne<byte[]> result1 = siemensS7Net.Read("DB82.4.0", (short) 10);
+ if (result1.IsSuccess) {
+ if (null == liftProtocol) {
+ liftProtocol = new LiftProtocol();
+ liftProtocol.setLiftNo(Integer.valueOf(device.getDeviceNo()));
+ liftProtocol.setProtocolStatus(LiftProtocolStatusType.IDLE);
+ liftProtocol.setDevice(device);
+
+ InnerLiftExtend innerLiftExtend = new InnerLiftExtend();
+ liftProtocol.setExtend(innerLiftExtend);
+ }
+
+ //----------璇诲彇鎻愬崌鏈虹姸鎬�-----------
+ //璇诲彇4.0-4.7鏁版嵁
+ boolean[] status1 = siemensS7Net.getByteTransform().TransBool(result1.Content, 0, 1);
+ //璇诲彇5.0-5.7鏁版嵁
+ boolean[] status2 = siemensS7Net.getByteTransform().TransBool(result1.Content, 1, 1);
+ //妯″紡
+ liftProtocol.setModel(status1[0]);
+ //蹇欓棽
+ liftProtocol.setRun(!status1[1]);
+ //鍓嶈秴闄�
+ liftProtocol.setFrontOverrun(status1[4]);
+ //鍚庤秴闄�
+ liftProtocol.setBackOverrun(status1[5]);
+ //宸﹁秴闄�
+ liftProtocol.setLeftOverrun(status1[6]);
+ //鍙宠秴闄�
+ liftProtocol.setRightOverrun(status1[7]);
+ //瓒呴珮
+ liftProtocol.setOverHeight(status2[0]);
+ //瓒呴噸
+ liftProtocol.setOverWeight(status2[1]);
+ //鏈夋墭鐩�
+ liftProtocol.setHasTray(status2[5]);
+ //鏈夊皬杞�
+ liftProtocol.setHasCar(status2[6]);
+ //璁惧鏁呴殰
+ liftProtocol.setErrorCode(String.valueOf(status2[7]));
+ //鐩殑鍦板潃
+ liftProtocol.setDistAddress(siemensS7Net.getByteTransform().TransInt16(result1.Content, 4));
+ //宸插畬鎴愪换鍔″彿
+ liftProtocol.setCompleteTaskNo(String.valueOf(siemensS7Net.getByteTransform().TransInt16(result1.Content, 6)));
+ //褰撳墠妤煎眰
+ short lev = siemensS7Net.getByteTransform().TransInt16(result1.Content, 8);
+ liftProtocol.setLev((int) lev);
+
+ //************琛ュ厖鎵╁睍瀛楁*************
+ InnerLiftExtend liftExtend = JSON.parseObject(JSON.toJSONString(liftProtocol.getExtend()), InnerLiftExtend.class);
+ //浠诲姟鍙�
+ liftExtend.setLiftTaskNo(String.valueOf(siemensS7Net.getByteTransform().TransInt16(result1.Content, 2)));
+ liftProtocol.setExtend(liftExtend);
+
+
+ }else {
+ OutputQueue.LIFT.offer(MessageFormat.format("銆恵0}銆憑1}璇诲彇鎻愬崌鏈虹姸鎬佷俊鎭け璐�", DateUtils.convert(new Date()), device.getId()));
+ throw new CoolException(MessageFormat.format( "璇诲彇鎻愬崌鏈虹姸鎬佷俊鎭け璐� ===>> [id:{0}] [ip:{1}] [port:{2}]", device.getId(), device.getIp(), device.getPort()));
+ }
+ Thread.sleep(200);
+
+ //鑾峰彇鎻愬崌鏈虹珯鐐规暟鎹�
+ OperateResultExOne<byte[]> result2 = siemensS7Net.Read("DB82.14.0", (short) (10 * liftStaProtocols.size()));
+ if (result1.IsSuccess) {
+ for (int i = 0; i < this.staList.size(); i++) {
+ LiftStaProtocol liftStaProtocol = liftStaProtocols.get(i);
+ int i1 = 0 + (i * 10);
+ int i2 = 1 + (i * 10);
+ //璇诲彇x4.0-x4.7鏁版嵁
+ boolean[] status1 = siemensS7Net.getByteTransform().TransBool(result2.Content, i1, 1);
+ //璇诲彇x5.0-x5.7鏁版嵁
+ boolean[] status2 = siemensS7Net.getByteTransform().TransBool(result2.Content, i2, 1);
+ //妯″紡
+ liftStaProtocol.setModel(status1[0]);
+ //蹇欓棽
+ liftStaProtocol.setBusy(!status1[1]);
+ //鏈夋墭鐩�
+ liftStaProtocol.setHasTray(status1[2]);
+ //鍓嶈秴闄�
+ liftStaProtocol.setFrontOverrun(status1[4]);
+ //鍚庤秴闄�
+ liftStaProtocol.setBackOverrun(status1[5]);
+ //宸﹁秴闄�
+ liftStaProtocol.setLeftOverrun(status1[6]);
+ //鍙宠秴闄�
+ liftStaProtocol.setRightOverrun(status1[7]);
+ //瓒呴珮
+ liftStaProtocol.setOverHeight(status2[0]);
+ //瓒呴噸
+ liftStaProtocol.setOverWeight(status2[1]);
+ //鏈夊皬杞�
+ liftStaProtocol.setHasCar(status2[6]);
+ //璁惧鏁呴殰
+ liftStaProtocol.setDeviceError(status2[7]);
+ //浠诲姟鍙�
+ liftStaProtocol.setTaskNo(siemensS7Net.getByteTransform().TransInt16(result2.Content, 2));
+ //宸插畬鎴愪换鍔″彿
+ liftStaProtocol.setCompleteTaskNo(siemensS7Net.getByteTransform().TransInt16(result2.Content, 6));
+ }
+ }
+
+ if (System.currentTimeMillis() - liftProtocol.getDeviceDataLog() > 1000 * 5) {
+ //閲囬泦鏃堕棿瓒呰繃5s锛屼繚瀛樹竴娆℃暟鎹褰�
+ //淇濆瓨鏁版嵁璁板綍
+ DeviceDataLogService deviceDataLogService = SpringUtils.getBean(DeviceDataLogService.class);
+ DeviceDataLog deviceDataLog = new DeviceDataLog();
+ deviceDataLog.setOriginData(Base64.getEncoder().encodeToString(result1.Content));
+ deviceDataLog.setWcsData(JSON.toJSONString(liftProtocol));
+ deviceDataLog.setType("lift");
+ deviceDataLog.setDeviceNo(String.valueOf(liftProtocol.getLiftNo()));
+ deviceDataLog.setCreateTime(new Date());
+ deviceDataLog.setHostId(device.getHostId());
+ deviceDataLogService.save(deviceDataLog);
+
+ //鏇存柊閲囬泦鏃堕棿
+ liftProtocol.setDeviceDataLog(System.currentTimeMillis());
+ }
+
+ } catch (Exception e) {
+ OutputQueue.LIFT.offer(MessageFormat.format("銆恵0}銆戣鍙栨彁鍗囨満鐘舵�佷俊鎭け璐� ===>> [id:{1}] [ip:{2}] [port:{3}]", DateUtils.convert(new Date()), device.getId(), device.getIp(), device.getPort()));
+ }
+ }
+
+ @Override
+ public LiftProtocol getStatus() {
+ return this.liftProtocol.clone();
+ }
+
+ @Override
+ public Device getDevice() {
+ return this.device;
+ }
+
+ @Override
+ public boolean move(LiftCommand command) {
+ return write(command);
+ }
+
+ @Override
+ public boolean palletInOut(LiftCommand command) {
+ return write(command);
+ }
+
+ private boolean write(LiftCommand command) {
+ if (null == command) {
+ News.error("鎻愬崌鏈哄啓鍏ュ懡浠や负绌�");
+ return false;
+ }
+
+ List<Short> shorts = JSON.parseArray(command.getBody(), Short.class);
+ short[] array = new short[shorts.size()];//鑾峰彇鍛戒护鎶ユ枃
+ for (int i = 0; i < shorts.size(); i++) {
+ array[i] = shorts.get(i);
+ }
+
+ OperateResult result = siemensS7Net.Write("DB83.0", array);
+ if (result != null && result.IsSuccess) {
+ liftProtocol.setSendTime(System.currentTimeMillis());//鎸囦护涓嬪彂鏃堕棿
+ News.info("鎻愬崌鏈哄懡浠や笅鍙慬id:{}] >>>>> {}", device.getId(), JSON.toJSON(command));
+ OutputQueue.LIFT.offer(MessageFormat.format("銆恵0}銆慬id:{1}] >>>>> 鍛戒护涓嬪彂锛� {2}", DateUtils.convert(new Date()), device.getId(), JSON.toJSON(command)));
+ return true;
+ } else {
+ OutputQueue.LIFT.offer(MessageFormat.format("銆恵0}銆戝啓鍏ユ彁鍗囨満plc鏁版嵁澶辫触 ===>> [id:{1}] [ip:{2}] [port:{3}],娆℃暟锛歿}", DateUtils.convert(new Date()), device.getId(), device.getIp(), device.getPort()));
+ News.error("鍐欏叆鎻愬崌鏈簆lc鏁版嵁澶辫触 ===>> [id:{}] [ip:{}] [port:{}]", device.getId(), device.getIp(), device.getPort());
+ return false;
+ }
+ }
+
+ @Override
+ public boolean lock(LiftCommand command) {
+ return true;
+ }
+
+ @Override
+ public boolean unlock(LiftCommand command) {
+ return true;
+ }
+
+ @Override
+ public boolean reset(LiftCommand command) {
+ return false;
+ }
+
+ @Override
+ public boolean isIdle() {
+ return isIdle(null);
+ }
+
+ @Override
+ public boolean isIdle(ExecuteSupport support) {
+ if (null != support) {
+ if (!support.judgement()) {
+ return false;
+ }
+ }
+ // 鍒ゆ柇鎻愬崌鏈烘槸鍚﹁嚜鍔ㄣ�佸氨缁�佺┖闂�
+ if (this.liftProtocol.getModel()
+ && !this.liftProtocol.getRun()
+ && this.liftProtocol.getReady()
+ && this.liftProtocol.getPakMk()
+ && this.liftProtocol.getErrorCode().equals("0")
+ && this.liftProtocol.getProtocolStatus().equals(LiftProtocolStatusType.IDLE)
+ ) {
+ return true;
+ }
+ return false;
+ }
+
+ @Override
+ public LiftCommand getMoveCommand(Integer taskNo, Integer sourceLev, Integer targetLev, Integer mode) {
+ /**
+ * 浠诲姟绫诲瀷
+ * 1=绉绘墭鐩橈紱鍗囬檷鏈哄皢婧愮珯鍙版墭鐩樼Щ鍒扮洰鏍囩珯鍙�
+ * 2=绉诲皬杞︼紝鍗囬檷鏈虹Щ鍒扮洰鏍囧眰锛岀瓑寰�
+ */
+ short taskMode = 2;
+ if (mode == null) {
+ taskMode = mode.shortValue();
+ }
+
+ // 寮�濮嬩换鍔�
+ short[] array = new short[4];
+ //浠诲姟绫诲瀷
+ array[0] = taskMode;
+ //婧愮珯鍙扮紪鍙�
+ array[1] = sourceLev.shortValue();
+ //鐩爣绔欏彴缂栧彿
+ array[2] = targetLev.shortValue();
+ //浠诲姟鍙�
+ array[3] = taskNo.shortValue();
+
+ LiftCommand command = new LiftCommand();
+ command.setLiftNo(Integer.valueOf(this.device.getDeviceNo()));
+ command.setBody(JSON.toJSONString(array));
+ command.setMode(LiftCommandModeType.MOVE.id);
+ command.setOriginLev(sourceLev);
+ command.setTargetLev(targetLev);
+ return command;
+ }
+
+ @Override
+ public LiftCommand getMoveWithShuttleCommand(Integer taskNo, Integer sourceLev, Integer targetLev, Integer mode) {
+ return getMoveCommand(taskNo, sourceLev, targetLev, 2);
+ }
+
+ @Override
+ public LiftCommand getPalletInOutCommand(Integer taskNo, Integer sourceLev, Integer targetLev, Integer originSta, Integer targetSta, Integer mode) {
+ return getMoveCommand(taskNo, sourceLev, targetLev, 1);
+ }
+
+ @Override
+ public LiftCommand getLockCommand(Integer taskNo, Boolean lock) {
+ LiftCommand command = new LiftCommand();
+ return command;
+ }
+
+ @Override
+ public LiftCommand getShuttleSignalCommand(Integer taskNo, Boolean signal) {
+ LiftCommand command = new LiftCommand();
+ return command;
+ }
+
+ @Override
+ public boolean connect() {
+ boolean result = false;
+ //-------------------------鎻愬崌鏈鸿繛鎺ユ柟娉�------------------------//
+ siemensS7Net = new SiemensS7Net(SiemensPLCS.S1200, device.getIp());
+ OperateResult connect = siemensS7Net.ConnectServer();
+ if(connect.IsSuccess){
+ result = true;
+ OutputQueue.LIFT.offer(MessageFormat.format( "銆恵0}銆戞彁鍗囨満plc杩炴帴鎴愬姛 ===>> [id:{1}] [ip:{2}] [port:{3}]", DateUtils.convert(new Date()), device.getId(), device.getIp(), device.getPort()));
+ log.info("鎻愬崌鏈簆lc杩炴帴鎴愬姛 ===>> [id:{}] [ip:{}] [port:{}] ", device.getId(), device.getIp(), device.getPort());
+ } else {
+ OutputQueue.LIFT.offer(MessageFormat.format("銆恵0}銆戞彁鍗囨満plc杩炴帴澶辫触锛侊紒锛� ===>> [id:{1}] [ip:{2}] [port:{3}]", DateUtils.convert(new Date()), device.getId(), device.getIp(), device.getPort()));
+ log.error("鎻愬崌鏈簆lc杩炴帴澶辫触锛侊紒锛� ===>> [id:{}] [ip:{}] [port:{}] ", device.getId(), device.getIp(), device.getPort());
+ }
+ siemensS7Net.ConnectClose();
+ //-------------------------鎻愬崌鏈鸿繛鎺ユ柟娉�------------------------//
+ return result;
+ }
+
+ @Override
+ public void close() {
+ siemensS7Net.ConnectClose();
+ }
+
+ /**
+ * 鎵╁睍瀛楁
+ */
+ @Data
+ private class InnerLiftExtend {
+
+ /**
+ * 鎻愬崌鏈哄唴閮ㄥ伐浣滃彿
+ */
+ private String liftTaskNo;
+
+ }
+
+ @Data
+ public class LiftStaProtocol {
+
+ /**
+ * 绔欑偣鍙�
+ */
+ private Integer staNo;
+
+ /**
+ * 妯″紡
+ */
+ private Boolean model;
+
+ /**
+ * 蹇欓棽
+ */
+ private Boolean busy;
+
+ /**
+ * 鍓嶈秴闄�
+ */
+ private Boolean frontOverrun;
+
+ /**
+ * 鍚庤秴闄�
+ */
+ private Boolean backOverrun;
+
+ /**
+ * 宸﹁秴闄�
+ */
+ private Boolean leftOverrun;
+
+ /**
+ * 鍙宠秴闄�
+ */
+ private Boolean rightOverrun;
+
+ /**
+ * 瓒呴珮
+ */
+ private Boolean overHeight;
+
+ /**
+ * 瓒呴噸
+ */
+ private Boolean overWeight;
+
+ /**
+ * 鏈夋墭鐩�
+ */
+ private Boolean hasTray;
+
+ /**
+ * 鏈夊皬杞�
+ */
+ private Boolean hasCar;
+
+ /**
+ * 璁惧鏁呴殰
+ */
+ private Boolean deviceError;
+
+ /**
+ * 褰撳墠鎵ц浠诲姟鍙�
+ */
+ private Short taskNo;
+ /**
+ * 宸插畬鎴愮殑浠诲姟鍙�
+ */
+ private Short completeTaskNo;
+
+ /**
+ * 灞�
+ */
+ private Integer lev;
+
+ /**
+ * 绔欑偣搴撲綅鍙�
+ */
+ private String locNo;
+
+ /**
+ * 鎻愬崌鏈哄彿
+ */
+ private Integer liftNo;
+
+ }
+
+ @Data
+ public static class Sta {
+
+ // 鎻愬崌鏈虹珯鐐瑰彿
+ private Integer staNo;
+
+ //杈撻�佺珯鐐规帓
+ private Integer row;
+
+ //杈撻�佺珯鐐瑰垪
+ private Integer bay;
+
+ // 灞�
+ private Integer lev;
+
+ }
+
+}
diff --git a/zy-asrs-wcs/src/main/java/com/zy/asrs/wcs/rcs/thread/impl/SurayLiftThread.java b/zy-asrs-wcs/src/main/java/com/zy/asrs/wcs/rcs/thread/impl/SurayLiftThread.java
index 8fde087..d4f8011 100644
--- a/zy-asrs-wcs/src/main/java/com/zy/asrs/wcs/rcs/thread/impl/SurayLiftThread.java
+++ b/zy-asrs-wcs/src/main/java/com/zy/asrs/wcs/rcs/thread/impl/SurayLiftThread.java
@@ -7,6 +7,7 @@
import com.zy.asrs.framework.common.DateUtils;
import com.zy.asrs.framework.common.SpringUtils;
import com.zy.asrs.framework.exception.CoolException;
+import com.zy.asrs.wcs.common.ExecuteSupport;
import com.zy.asrs.wcs.core.entity.Loc;
import com.zy.asrs.wcs.core.model.command.LiftCommand;
import com.zy.asrs.wcs.core.model.command.ShuttleCommand;
@@ -15,8 +16,10 @@
import com.zy.asrs.wcs.core.service.LocService;
import com.zy.asrs.wcs.rcs.News;
import com.zy.asrs.wcs.rcs.cache.OutputQueue;
+import com.zy.asrs.wcs.rcs.entity.DeviceDataLog;
import com.zy.asrs.wcs.rcs.model.enums.LiftProtocolStatusType;
import com.zy.asrs.wcs.rcs.model.protocol.LiftProtocol;
+import com.zy.asrs.wcs.rcs.service.DeviceDataLogService;
import com.zy.asrs.wcs.rcs.thread.LiftThread;
import com.zy.asrs.wcs.core.utils.RedisUtil;
import com.zy.asrs.wcs.rcs.entity.Device;
@@ -25,6 +28,7 @@
import java.text.MessageFormat;
import java.text.SimpleDateFormat;
+import java.util.Base64;
import java.util.Date;
import java.util.HashMap;
@@ -61,18 +65,10 @@
try {
readStatus();
-// //鎻愬崌鏈哄浜庤繍琛岀姸鎬侊紝灏嗘爣璁扮疆涓篺alse
-// if (liftProtocol.getBusy()) {
-// liftProtocol.setPakMk(false);
-// }
-//
-// //鎻愬崌鏈哄浜庢湭杩愯銆佸氨缁�佹爣璁皌rue銆佹湁浠诲姟鍙�
-// if (!liftProtocol.getBusy()
-// && !liftProtocol.getPakMk()
-// && liftProtocol.getTaskNo() != 0) {
-// //杩樻湁鏈畬鎴愮殑鍛戒护
-// executeWork(liftProtocol.getTaskNo());
-// }
+ //鎻愬崌鏈哄浜庤繍琛岀姸鎬侊紝灏嗘爣璁扮疆涓篺alse
+ if (liftProtocol.getRun()) {
+ liftProtocol.setPakMk(false);
+ }
} catch (Exception e) {
OutputQueue.LIFT.offer(MessageFormat.format("銆恵0}銆戣鍙栨彁鍗囨満鐘舵�佷俊鎭け璐� ===>> [id:{1}] [ip:{2}] [port:{3}]", DateUtils.convert(new Date()), device.getId(), device.getIp(), device.getPort()));
}
@@ -141,6 +137,24 @@
// //宸插畬鎴愪换鍔″彿
// liftProtocol.setCompleteTaskNo(siemensS7Net.getByteTransform().TransInt16(result1.Content, 6));
// liftProtocol.setLev(lev);
+
+ if (System.currentTimeMillis() - liftProtocol.getDeviceDataLog() > 1000 * 5) {
+ //閲囬泦鏃堕棿瓒呰繃5s锛屼繚瀛樹竴娆℃暟鎹褰�
+ //淇濆瓨鏁版嵁璁板綍
+ DeviceDataLogService deviceDataLogService = SpringUtils.getBean(DeviceDataLogService.class);
+ DeviceDataLog deviceDataLog = new DeviceDataLog();
+ deviceDataLog.setOriginData(JSON.toJSONString(data));
+ deviceDataLog.setWcsData(JSON.toJSONString(liftProtocol));
+ deviceDataLog.setType("lift");
+ deviceDataLog.setDeviceNo(String.valueOf(liftProtocol.getLiftNo()));
+ deviceDataLog.setCreateTime(new Date());
+ deviceDataLog.setHostId(device.getHostId());
+ deviceDataLogService.save(deviceDataLog);
+
+ //鏇存柊閲囬泦鏃堕棿
+ liftProtocol.setDeviceDataLog(System.currentTimeMillis());
+ }
+
}else {
OutputQueue.LIFT.offer(MessageFormat.format("銆恵0}銆憑1}璇诲彇鎻愬崌鏈虹姸鎬佷俊鎭け璐�", DateUtils.convert(new Date()), device.getId()));
throw new CoolException(MessageFormat.format( "璇诲彇鎻愬崌鏈虹姸鎬佷俊鎭け璐� ===>> [id:{0}] [ip:{1}] [port:{2}]", device.getId(), device.getIp(), device.getPort()));
@@ -294,11 +308,24 @@
@Override
public boolean isIdle() {
- InnerLiftExtend extend = (InnerLiftExtend) liftProtocol.getExtend();//鑾峰彇鎵╁睍瀛楁
+ return isIdle(null);
+ }
+
+ @Override
+ public boolean isIdle(ExecuteSupport support) {
+ if (null != support) {
+ if (!support.judgement()) {
+ return false;
+ }
+ }
+ InnerLiftExtend extend = (InnerLiftExtend) this.liftProtocol.getExtend();//鑾峰彇鎵╁睍瀛楁
// 鍒ゆ柇鎻愬崌鏈烘槸鍚﹁嚜鍔ㄣ�佸氨缁�佺┖闂层�佹湭閿佸畾
- if (liftProtocol.getModel()
- && !liftProtocol.getRun()
- && liftProtocol.getReady()
+ if (this.liftProtocol.getModel()
+ && !this.liftProtocol.getRun()
+ && this.liftProtocol.getReady()
+ && this.liftProtocol.getPakMk()
+ && this.liftProtocol.getErrorCode().equals("0")
+ && this.liftProtocol.getProtocolStatus().equals(LiftProtocolStatusType.IDLE)
&& !extend.getLock()
) {
return true;
@@ -370,7 +397,12 @@
//绌鸿浇绉诲姩
@Override
- public LiftCommand getEmptyMoveCommand(Integer taskNo, Integer targetLev) {
+ public LiftCommand getMoveCommand(Integer taskNo, Integer sourceLev, Integer targetLev, Integer mode) {
+ int taskMode = 3;//绌鸿浇绉诲姩
+ if (mode == null) {
+ taskMode = mode.shortValue();
+ }
+
HashMap<String, Object> body = new HashMap<>();
body.put("messageName", "lifterTask");
body.put("msgTime", new SimpleDateFormat("yyyy-MM-dd HH:mm:ss").format(new Date()));
@@ -378,7 +410,7 @@
body.put("taskId", taskNo);
body.put("startLayer", 0);
body.put("endLayer", targetLev);
- body.put("model", 3);//绌鸿浇绉诲姩
+ body.put("model", taskMode);
LiftCommand command = new LiftCommand();
command.setLiftNo(Integer.valueOf(this.device.getDeviceNo()));
@@ -391,13 +423,13 @@
//杞借溅绉诲姩
@Override
- public LiftCommand getMoveWithShuttleCommand(Integer taskNo, Integer originLev, Integer targetLev) {
+ public LiftCommand getMoveWithShuttleCommand(Integer taskNo, Integer sourceLev, Integer targetLev, Integer mode) {
HashMap<String, Object> body = new HashMap<>();
body.put("messageName", "lifterTask");
body.put("msgTime", new SimpleDateFormat("yyyy-MM-dd HH:mm:ss").format(new Date()));
body.put("deviceNo", Integer.parseInt(this.device.getDeviceNo()));
body.put("taskId", taskNo);
- body.put("startLayer", originLev);
+ body.put("startLayer", sourceLev);
body.put("endLayer", targetLev);
body.put("model", 2);//杞借溅绉诲姩
@@ -405,20 +437,20 @@
command.setLiftNo(Integer.valueOf(this.device.getDeviceNo()));
command.setBody(JSON.toJSONString(body));
command.setMode(LiftCommandModeType.MOVE.id);
- command.setOriginLev(originLev);
+ command.setOriginLev(sourceLev);
command.setTargetLev(targetLev);
return command;
}
//鎵樼洏鍑哄叆
@Override
- public LiftCommand getPalletInOutCommand(Integer taskNo, Integer originLev, Integer targetLev, Integer originSta, Integer targetSta) {
+ public LiftCommand getPalletInOutCommand(Integer taskNo, Integer sourceLev, Integer targetLev, Integer originSta, Integer targetSta, Integer mode) {
HashMap<String, Object> body = new HashMap<>();
body.put("messageName", "lifterTask");
body.put("msgTime", new SimpleDateFormat("yyyy-MM-dd HH:mm:ss").format(new Date()));
body.put("deviceNo", Integer.parseInt(this.device.getDeviceNo()));
body.put("taskId", taskNo);
- body.put("startLayer", originLev);
+ body.put("startLayer", sourceLev);
body.put("endLayer", targetLev);
body.put("startLocation", originSta);
body.put("endLocation", targetSta);
@@ -428,7 +460,7 @@
command.setLiftNo(Integer.valueOf(this.device.getDeviceNo()));
command.setBody(JSON.toJSONString(body));
command.setMode(LiftCommandModeType.PALLET_INOUT.id);
- command.setOriginLev(originLev);
+ command.setOriginLev(sourceLev);
command.setTargetLev(targetLev);
command.setOriginSta(originSta);
command.setTargetSta(targetSta);
--
Gitblit v1.9.1