From 77ee4fbf68b83bf2ff0577d6751bbfbe85312f9f Mon Sep 17 00:00:00 2001
From: pang.jiabao <pang_jiabao@163.com>
Date: 星期三, 17 九月 2025 10:33:07 +0800
Subject: [PATCH] 堆垛机空闲10秒有入库任务回原点,空闲两分钟回原点
---
src/main/java/com/zy/service/impl/MainServiceImpl.java | 254 ++++++++++++++++++++++++++++++++++++++++++++++++--
1 files changed, 244 insertions(+), 10 deletions(-)
diff --git a/src/main/java/com/zy/service/impl/MainServiceImpl.java b/src/main/java/com/zy/service/impl/MainServiceImpl.java
index ddfcc62..f823d8b 100644
--- a/src/main/java/com/zy/service/impl/MainServiceImpl.java
+++ b/src/main/java/com/zy/service/impl/MainServiceImpl.java
@@ -39,10 +39,8 @@
import org.springframework.transaction.annotation.Transactional;
import org.springframework.transaction.interceptor.TransactionAspectSupport;
-import java.util.ArrayList;
-import java.util.Date;
-import java.util.List;
-import java.util.Set;
+import javax.annotation.Resource;
+import java.util.*;
import java.util.stream.Collectors;
/**
@@ -88,6 +86,9 @@
private WrkMastService wrkMastService;
@Autowired
private BasRgvMapService basRgvMapService;
+
+ @Resource
+ private BasDevpErrLogService basDevpErrLogService;
@Value("${wms.url}")
private String wmsUrl;
@@ -907,13 +908,14 @@
if (crnProtocol == null) {
continue;
}
+ if (crnProtocol.getModeType() != CrnModeType.STOP) {
// 鏈変换鍔�
if (crnProtocol.getTaskNo() != 0) {
BasErrLog latest = basErrLogService.findLatestByTaskNo(crn.getId(), crnProtocol.getTaskNo().intValue());
// 鏈夊紓甯�
if (latest == null) {
- News.warnNoLog(""+mark+" - 1"+" - 寮�濮嬫墽琛岋細鍫嗗灈鏈哄紓甯镐俊鎭褰� 锛� 鏈変换鍔★紝鏈夊紓甯�");
+ News.warnNoLog("" + mark + " - 1" + " - 寮�濮嬫墽琛岋細鍫嗗灈鏈哄紓甯镐俊鎭褰� 锛� 鏈変换鍔★紝鏈夊紓甯�");
if (crnProtocol.getAlarm() != null && crnProtocol.getAlarm() > 0) {
WrkMast wrkMast = wrkMastMapper.selectById(crnProtocol.getTaskNo());
if (wrkMast == null) {
@@ -945,7 +947,7 @@
"浠诲姟涓紓甯�" // 澶囨敞
);
if (!basErrLogService.insert(basErrLog)) {
- News.error(""+mark+" - 2"+" - 鍫嗗灈鏈簆lc寮傚父璁板綍澶辫触 ===>> [id:{}] [error:{}]", crn.getId(), errName);
+ News.error("" + mark + " - 2" + " - 鍫嗗灈鏈簆lc寮傚父璁板綍澶辫触 ===>> [id:{}] [error:{}]", crn.getId(), errName);
}
}
} else {
@@ -955,7 +957,7 @@
latest.setUpdateTime(now);
latest.setStatus(2);
if (!basErrLogService.updateById(latest)) {
- News.error(""+mark+" - 3"+" - 鍫嗗灈鏈簆lc寮傚父璁板綍淇澶辫触 ===>> [id:{}] [errLogId:{}]", crn.getId(), latest.getId());
+ News.error("" + mark + " - 3" + " - 鍫嗗灈鏈簆lc寮傚父璁板綍淇澶辫触 ===>> [id:{}] [errLogId:{}]", crn.getId(), latest.getId());
}
}
}
@@ -964,7 +966,7 @@
BasErrLog latest = basErrLogService.findLatest(crn.getId());
// 鏈夊紓甯�
if (crnProtocol.getAlarm() != null && crnProtocol.getAlarm() > 0) {
- News.warnNoLog(""+mark+" - 4"+" - 寮�濮嬫墽琛岋細鍫嗗灈鏈哄紓甯镐俊鎭褰� 锛� 鏃犱换鍔★紝鏈夊紓甯�");
+ News.warnNoLog("" + mark + " - 4" + " - 寮�濮嬫墽琛岋細鍫嗗灈鏈哄紓甯镐俊鎭褰� 锛� 鏃犱换鍔★紝鏈夊紓甯�");
// 璁板綍鏂板紓甯�
if (latest == null || (latest.getErrCode() != crnProtocol.getAlarm().intValue())) {
BasCrnError crnError = basCrnErrorMapper.selectById(crnProtocol.getAlarm());
@@ -993,7 +995,7 @@
"鏃犱换鍔″紓甯�" // 澶囨敞
);
if (!basErrLogService.insert(basErrLog)) {
- News.error(""+mark+" - 5"+" - 鍫嗗灈鏈簆lc寮傚父璁板綍澶辫触 ===>> [id:{}] [error:{}]", crn.getId(), errName);
+ News.error("" + mark + " - 5" + " - 鍫嗗灈鏈簆lc寮傚父璁板綍澶辫触 ===>> [id:{}] [error:{}]", crn.getId(), errName);
}
}
// 鏃犲紓甯�
@@ -1004,11 +1006,12 @@
latest.setUpdateTime(now);
latest.setStatus(2);
if (!basErrLogService.updateById(latest)) {
- News.error(""+mark+" - 6"+" - 鍫嗗灈鏈簆lc寮傚父璁板綍淇澶辫触 ===>> [id:{}] [errLogId:{}]", crn.getId(), latest.getId());
+ News.error("" + mark + " - 6" + " - 鍫嗗灈鏈簆lc寮傚父璁板綍淇澶辫触 ===>> [id:{}] [errLogId:{}]", crn.getId(), latest.getId());
}
}
}
}
+ }
}
}
@@ -1120,6 +1123,174 @@
}
}
}
+ }
+
+ /**
+ * 杈撻�佺嚎寮傚父
+ */
+ public synchronized void recDevpErr() {
+ Date now = new Date();
+ for (DevpSlave devp : slaveProperties.getDevp()) {
+ Integer devpId = devp.getId();
+ DevpThread devpThread = (DevpThread) SlaveConnection.get(SlaveType.Devp, devpId);
+ Map<Integer, StaProtocol> station = devpThread.getStation();
+ for (Map.Entry<Integer, StaProtocol> entry : station.entrySet()) {
+ Integer siteNo = entry.getKey();
+ StaProtocol staProtocol = entry.getValue();
+ Integer workNo = staProtocol.getWorkNo();
+ // 杈撻�佺嚎鎶ヨ
+ String plcErr = staPlcErr(staProtocol);
+ if (staProtocol.isAutoing()) {
+ // 鏈変换鍔�
+ if (staProtocol.getWorkNo() != 0 && staProtocol.getWorkNo() <= 9000) {
+
+ // 鑾峰彇杈撻�佺嚎鎶ヨ淇℃伅
+ BasDevpErrLog latestByTaskNo = basDevpErrLogService.findLatestByTaskNo(siteNo, workNo);
+
+ // 鏈夊紓甯�
+ if (latestByTaskNo == null) {
+ if (!plcErr.equals("")) {
+ WrkMast wrkMast = wrkMastMapper.selectById(workNo);
+ if (wrkMast == null) {
+ continue;
+ }
+
+ BasDevpErrLog basErrLog = new BasDevpErrLog(
+ null, // 缂栧彿
+ wrkMast.getWrkNo(), // 宸ヤ綔鍙�
+ now, // 鍙戠敓鏃堕棿
+ null, // 缁撴潫鏃堕棿
+ wrkMast.getWrkSts(), // 宸ヤ綔鐘舵��
+ wrkMast.getIoType(), // 鍏ュ嚭搴撶被鍨�
+ wrkMast.getCrnNo(), // 鍫嗗灈鏈�
+ devpId, // plc
+ wrkMast.getLocNo(), // 鐩爣搴撲綅
+ wrkMast.getStaNo(), // 鐩爣绔�
+ siteNo, // 婧愮珯
+ wrkMast.getSourceLocNo(), // 婧愬簱浣�
+ wrkMast.getBarcode(), // 鏉$爜
+ 0, // 寮傚父鐮�
+ plcErr, // 寮傚父
+ 1, // 寮傚父鎯呭喌
+ now, // 娣诲姞鏃堕棿
+ null, // 娣诲姞浜哄憳
+ now, // 淇敼鏃堕棿
+ null, // 淇敼浜哄憳
+ "浠诲姟涓紓甯�" // 澶囨敞
+ );
+ if (!basDevpErrLogService.insert(basErrLog)) {
+ log.error("杈撻�佺嚎寮傚父淇℃伅鎻掑叆琛╝sr_bas_devp_err_log寮傚父锛歿}", basErrLog);
+ }
+ }
+ } else {
+ // 寮傚父淇
+ if (plcErr.equals("")) {
+ latestByTaskNo.setEndTime(now);
+ latestByTaskNo.setUpdateTime(now);
+ latestByTaskNo.setStatus(2);
+ if (!basDevpErrLogService.updateById(latestByTaskNo)) {
+ log.error("杈撻�佺嚎寮傚父璁板綍淇澶辫触asr_bas_devp_err_log寮傚父锛歿}", latestByTaskNo);
+ }
+ }
+ }
+ // 鏃犱换鍔�
+ } else {
+ BasDevpErrLog latest = basDevpErrLogService.findLatest(siteNo);
+ // 鏈夊紓甯�
+ if (!plcErr.equals("")) {
+ // 璁板綍鏂板紓甯�
+ if (latest == null || !latest.getError().equals(plcErr) || latest.getStatus() == 2 ) {
+ BasDevpErrLog basErrLog = new BasDevpErrLog(
+ null, // 缂栧彿
+ null, // 宸ヤ綔鍙�
+ now, // 鍙戠敓鏃堕棿
+ null, // 缁撴潫鏃堕棿
+ null, // 宸ヤ綔鐘舵��
+ null, // 鍏ュ嚭搴撶被鍨�
+ 0, // 鍫嗗灈鏈�
+ devpId, // plc
+ null, // 鐩爣搴撲綅
+ null, // 鐩爣绔�
+ siteNo, // 婧愮珯
+ null, // 婧愬簱浣�
+ null, // 鏉$爜
+ 0, // 寮傚父鐮�
+ plcErr, // 寮傚父
+ 1, // 寮傚父鎯呭喌
+ now, // 娣诲姞鏃堕棿
+ null, // 娣诲姞浜哄憳
+ now, // 淇敼鏃堕棿
+ null, // 淇敼浜哄憳
+ "鏃犱换鍔″紓甯�" // 澶囨敞
+ );
+ if (!basDevpErrLogService.insert(basErrLog)) {
+ log.error("杈撻�佺嚎寮傚父璁板綍asr_bas_devp_err_log寮傚父锛歿}", basErrLog);
+ }
+ }
+ // 鏃犲紓甯�
+ } else {
+ // 寮傚父淇
+ if (latest != null && latest.getStatus() == 1) {
+ latest.setEndTime(now);
+ latest.setUpdateTime(now);
+ latest.setStatus(2);
+ if (!basDevpErrLogService.updateById(latest)) {
+ log.error("杈撻�佺嚎寮傚父璁板綍淇澶辫触asr_bas_devp_err_log寮傚父锛歿}", latest);
+ }
+ }
+ }
+ }
+ }
+ }
+ }
+ }
+
+ // 鑾峰彇杈撻�佺嚎鎶ヨ
+ public String staPlcErr(StaProtocol staProtocol){
+ Integer siteId = staProtocol.getSiteId();
+ if (staProtocol.getBreakerErr()){
+ return "鏂矾鍣ㄦ晠闅�";
+ }
+ if (staProtocol.getInfraredErr()){
+ return "鍏夌數寮傚父";
+ }
+ if (staProtocol.getOutTimeErr()){
+ return "杩愯瓒呮椂";
+ }
+ if (staProtocol.getSeizeSeatErr()){
+ return "鍗犱綅瓒呮椂";
+ }
+ if (staProtocol.getWrkYgoodsN()){
+ return "鏈変换鍔℃棤璐ф晠闅�";
+ }
+ if (staProtocol.getInverterErr()){
+ return "鍙橀鍣ㄦ晠闅�";
+ }
+ if (staProtocol.getContactErr()){
+ return "鐢垫満鎺ヨЕ鍣ㄦ晠闅�";
+ }
+ if (staProtocol.getUpcontactErr()){
+ return "椤跺崌鐢垫満鎺ヨЕ鍣ㄦ晠闅�";
+ }
+ if (staProtocol.isFrontErr()){
+ return "鍓嶈秴闄�";
+ }
+ if (staProtocol.isBackErr()){
+ return "鍚庤秴闄�";
+ }
+ if (staProtocol.isHighErr()){
+ return "楂樿秴闄�";
+ }
+ if (staProtocol.isLeftErr()){
+ return "宸﹁秴闄�";
+ }
+ if (staProtocol.isRightErr()){
+ return "鍙宠秴闄�";
+ }
+ if (staProtocol.isBarcodeErr() && siteId != 1083 && siteId != 1086 && siteId != 1089 ){
+ return "鎵爜澶辫触";
+ }
+ return "";
}
/**
@@ -1423,4 +1594,67 @@
// News.infoNoLog(""+mark+" - 0"+" - outOfDevp鎵ц瀹屾垚");
}
+ /**
+ * 鍫嗗灈鏈哄洖鍘熺偣
+ */
+ public synchronized void originGo() throws InterruptedException {
+
+ for (CrnSlave crn : slaveProperties.getCrn()) {
+ // 鑾峰彇鍫嗗灈鏈轰俊鎭�
+ CrnThread crnThread = (CrnThread) SlaveConnection.get(SlaveType.Crn, crn.getId());
+ CrnProtocol crnProtocol = crnThread.getCrnProtocol();
+ if(crnProtocol == null) {
+ continue;
+ }
+ if (crnProtocol.getStatusType() == CrnStatusType.IDLE && crnProtocol.getTaskNo() == 0 && crnProtocol.getModeType() == CrnModeType.AUTO
+ && crnProtocol.getLoaded() == 0 && crnProtocol.getForkPos() == 0) {
+ // 鍒ゆ柇鏄笉鏄凡鍦ㄥ師鐐�
+ if(crnProtocol.getBay() == 0 && crnProtocol.getLevel() == 1) {
+ continue;
+ }
+ // 鍒ゆ柇鏄笉鏄┖闂蹭笁鍒嗛挓
+ BasCrnp basCrnp = basCrnpService.selectById(crn.getId());
+ if (basCrnp.getWrkNo() != 0) {
+ continue;
+ }
+ Date now = new Date();
+ Date modiTime = basCrnp.getModiTime();
+ long diffInMillis = now.getTime()-modiTime.getTime();
+ if(diffInMillis < 10 * 1000) { // 绌洪棽灏忎簬10绉掑垯璺宠繃
+ continue;
+ } else { // 鏈夊叆搴撲换鍔℃垨澶т簬2鍒嗛挓锛屽洖鍘熺偣
+ int count = wrkMastService.selectCount(new EntityWrapper<WrkMast>().eq("io_type", 1).eq("crn_no", crn.getId()).in("wrk_sts", 2, 9, 10));
+ if(count == 0 && diffInMillis < 2 * 60 * 1000) {
+ continue;
+ }
+ }
+
+ // 鏈夊悐杞﹀叆搴撴垨鍚婅溅鍑哄簱浠诲姟
+ int count = wrkMastService.selectCount(new EntityWrapper<WrkMast>().eq("crn_no", crnProtocol.getCrnNo()).in("wrk_sts", 3, 12));
+ if(count != 0) {
+ continue;
+ }
+
+ CrnCommand crnCommand = new CrnCommand();
+ crnCommand.setCrnNo(crn.getId()); // 鍫嗗灈鏈虹紪鍙�
+ crnCommand.setTaskNo((short) 9999); // 宸ヤ綔鍙�
+ crnCommand.setTaskMode(CrnTaskModeType.GO_ORIGIN); // 浠诲姟妯″紡: 鍥炲師鐐�
+ crnCommand.setSourcePosX((short) (crn.getId() == 1 ? 4 : crn.getId() == 2 ? 6 : crn.getId() == 3 ? 7 : 11)); // 婧愬簱浣嶆帓
+ crnCommand.setSourcePosY((short) 0); // 婧愬簱浣嶅垪
+ crnCommand.setSourcePosZ((short) 1); // 婧愬簱浣嶅眰
+ crnCommand.setDestinationPosX((short) 0); // 鐩爣搴撲綅鎺�
+ crnCommand.setDestinationPosY((short) 0); // 鐩爣搴撲綅鍒�
+ crnCommand.setDestinationPosZ((short) 0); // 鐩爣搴撲綅灞�
+ if (!MessageQueue.offer(SlaveType.Crn, crn.getId(), new Task(2, crnCommand))) {
+ News.error("鍥炲師鐐逛换鍔′笅鍙戝け璐�", crn.getId(), JSON.toJSON(crnCommand));
+ } else {
+ basCrnp.setModiTime(new Date());
+ basCrnpService.updateById(basCrnp); // 璁剧疆鏇存柊鏃堕棿锛岄伩鍏嶉噸澶嶄笅鍙戝洖鍘熺偣
+ log.info("{}鍙峰爢鍨涙満鍥炲師鐐逛换鍔′笅鍙戞垚鍔燂細{}", crn.getId(), JSON.toJSON(crnCommand));
+ }
+ Thread.sleep(3000);
+ }
+ }
+ }
+
}
--
Gitblit v1.9.1