From 7ed8a3db0115b19349cbdad55c91c353a0e8e300 Mon Sep 17 00:00:00 2001
From: pang.jiabao <pang_jiabao@163.com>
Date: 星期日, 26 四月 2026 16:29:19 +0800
Subject: [PATCH] 一楼输送线出入库冲突控制
---
src/main/java/com/zy/service/impl/MainServiceImpl.java | 508 +++++++++++++++++++++++++++++++++++++++++--------------
1 files changed, 374 insertions(+), 134 deletions(-)
diff --git a/src/main/java/com/zy/service/impl/MainServiceImpl.java b/src/main/java/com/zy/service/impl/MainServiceImpl.java
index 560ca8d..1a86a6e 100644
--- a/src/main/java/com/zy/service/impl/MainServiceImpl.java
+++ b/src/main/java/com/zy/service/impl/MainServiceImpl.java
@@ -22,15 +22,20 @@
import com.zy.core.model.Task;
import com.zy.core.model.command.CrnCommand;
import com.zy.core.model.command.LedCommand;
+import com.zy.core.model.command.RgvCommand;
import com.zy.core.model.protocol.CrnProtocol;
+import com.zy.core.model.protocol.RgvProtocol;
import com.zy.core.model.protocol.StaProtocol;
import com.zy.core.properties.SlaveProperties;
import com.zy.core.thread.BarcodeThread;
import com.zy.core.thread.LedThread;
+import com.zy.core.thread.RgvThread;
import com.zy.core.thread.SiemensDevpThread;
import com.zy.entity.*;
import com.zy.mapper.*;
import com.zy.service.*;
+import com.zy.system.entity.Config;
+import com.zy.system.service.ConfigService;
import com.zy.utils.*;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired;
@@ -93,7 +98,7 @@
@Value("${wms.url}")
private String wmsUrl;
- public Integer wrkNo = 9901;
+ public Integer wrkNo = 9997;
/**
* 缁勬墭
@@ -147,20 +152,13 @@
errMsg = "瓒呴噸";
back = true;
}
- if (!back && staProtocol.isBarcodeErr()) {
+ if (!back && (staProtocol.isBarcodeErr()||Cools.isEmpty(barcode))) {
errMsg = "鎵爜澶辫触";
back = true;
}
// 閫�鍥�
- if (back) {
+ if (back && (staProtocol.getWorkNo() == 9999 || staProtocol.getWorkNo() == 9998) && staProtocol.isInEnable() && staProtocol.isLoading() && staProtocol.isPakMk()) {
MessageQueue.offer(SlaveType.Led, inSta.getLed(), new Task(3, errMsg));
-
- if (!staProtocol.isLoading()){
- continue;
- }
- if (!staProtocol.isPakMk()) {
- continue;
- }
staProtocol.setWorkNo(wrkNo);
News.info("{}鍏ュ簱鍥為��锛歿}锛屼换鍔″彿锛歿}", inSta.getStaNo(), errMsg,wrkNo);
staProtocol.setStaNo(inSta.getBackSta().shortValue());
@@ -175,8 +173,9 @@
&& staProtocol.isLoading()
&& staProtocol.isInEnable()
&& !staProtocol.isEmptyMk()
- && staProtocol.isPakMk()) {
+ && staProtocol.isPakMk() && staProtocol.getWorkNo() == 9999) {
if(Cools.isEmpty(barcode) || "NG".endsWith(barcode) || "NoRead".equals(barcode) || "00000000".equals(barcode)) {
+ News.info("{}鏉$爜鎵弿閿欒锛歿}",barcodeThread.getSlave().getId(),barcode);
continue;
}
// 鍒ゆ柇閲嶅宸ヤ綔妗�
@@ -209,14 +208,12 @@
StartupDto dto = jsonObject.getObject("data", StartupDto.class);
barcodeThread.setBarcode("");
staProtocol.setWorkNo(dto.getWorkNo());
- staProtocol.setStaNo(RouteUtils.SouStaEnd(dto.getStaNo(),dto.getSourceStaNo()));
+ staProtocol.setStaNo(dto.getStaNo().shortValue());
devpThread.setPakMk(staProtocol.getSiteId(), false);
boolean result = MessageQueue.offer(SlaveType.Devp, devp.getId(), new Task(2, staProtocol));
log.error("杈撻�佺嚎涓嬪彂2锛�"+dto.getWorkNo()+","+dto.getStaNo());
if (!result) {
News.error(methodName + ":鏇存柊plc绔欑偣淇℃伅澶辫触");
-
- throw new CoolException("鏇存柊plc绔欑偣淇℃伅澶辫触");
}else {
ledThread.errorReset();
}
@@ -237,7 +234,6 @@
}
}
-
}
}
@@ -274,7 +270,7 @@
staProtocol = staProtocol.clone();
}
- if (staProtocol.isAutoing() && staProtocol.isLoading() && staProtocol.isInEnable() && staProtocol.isPakMk()) {
+ if (staProtocol.isAutoing() && staProtocol.isLoading() && staProtocol.isInEnable() && staProtocol.isPakMk() && staProtocol.getWorkNo() == 9999) {
News.warnNoLog(""+mark+" - 0"+" - 寮�濮嬫墽琛�");
WrkMast wrkMast = wrkMastMapper.selectPickStep(barcode);
if (wrkMast == null) {
@@ -298,7 +294,7 @@
staProtocol.setStaNo((short) (pickSta.getStaNo().shortValue()-(short)1));
devpThread.setPakMk(staProtocol.getSiteId(), false);
MessageQueue.offer(SlaveType.Devp, devp.getId(), new Task(2, staProtocol));
- log.error("杈撻�佺嚎涓嬪彂4锛�"+9989+","+(pickSta.getStaNo().shortValue()-(short)1));
+ log.error("杈撻�佺嚎涓嬪彂4锛�"+wrkNo+","+(pickSta.getStaNo().shortValue()-(short)1));
//LED
LedThread ledThread = (LedThread) SlaveConnection.get(SlaveType.Led, pickSta.getLed());
// led 寮傚父鏄剧ず
@@ -326,11 +322,12 @@
wrkMast.setIoTime(now);
wrkMast.setIoType(wrkMast.getIoType() - 50); // 鍏ュ嚭搴撶被鍨�: 103->53,104->54,107->57
wrkMast.setWrkSts(2L); // 宸ヤ綔鐘舵��: 2.璁惧涓婅蛋
- wrkMast.setSourceStaNo(wrkMast.getStaNo()); // 婧愮珯
+ wrkMast.setSourceStaNo(pickSta.getStaNo()); // 婧愮珯
wrkMast.setStaNo(staNo); // 鐩爣绔�
wrkMast.setLocNo(wrkMast.getSourceLocNo()); // 鐩爣搴撲綅 = 鍑哄簱鏃剁殑婧愬簱浣�
wrkMast.setSourceLocNo(""); // 婧愬簱浣嶆竻绌�
wrkMast.setModiTime(now);
+ wrkMast.setWhsType(0);
if (wrkMastMapper.updateById(wrkMast) == 0) {
throw new CoolException("鏇存柊宸ヤ綔妗f暟鎹姸鎬佸け璐�");
}
@@ -351,7 +348,7 @@
// 鏇存柊绔欑偣淇℃伅 涓� 涓嬪彂plc鍛戒护
staProtocol.setWorkNo(wrkMast.getWrkNo());
- staProtocol.setStaNo((short) 161);
+ staProtocol.setStaNo(staDesc.getCrnStn().shortValue());
devpThread.setPakMk(staProtocol.getSiteId(), false);
boolean result = MessageQueue.offer(SlaveType.Devp, devp.getId(), new Task(2, staProtocol));
log.error("杈撻�佺嚎涓嬪彂5锛�"+wrkMast.getWrkNo()+","+wrkMast.getStaNo());
@@ -419,8 +416,14 @@
wrkMast.setCrnEndTime(new Date());
if (wrkMastMapper.updateById(wrkMast) != 0) {
// 澶嶄綅鍫嗗灈鏈�
- log.info("鍑哄簱浠诲姟瀹屾垚涓嬪彂鍫嗗灈鏈哄浣�,浠诲姟鍙凤細{}",wrkMast.getWrkNo());
- crnThread.setResetFlag(true);
+ News.info("鍑哄簱浠诲姟瀹屾垚涓嬪彂鍫嗗灈鏈哄浣�,浠诲姟鍙凤細{}",wrkMast.getWrkNo());
+ // 鍫嗗灈鏈哄浣�
+ if (!MessageQueue.offer(SlaveType.Crn, crnThread.getCrnProtocol().getCrnNo(), new Task(3, null))) {
+ News.error(crnThread.getCrnProtocol().getCrnNo() + "鍑哄簱浠诲姟瀹屾垚涓嬪彂鍫嗗灈鏈哄浣嶏紝涓嬪彂澶嶄綅鍛戒护澶辫触");
+ } else {
+ News.warnNoLog(""+mark+" - 2"+" - 鍑哄簱浠诲姟瀹屾垚涓嬪彂鍫嗗灈鏈哄浣嶆垚鍔� : 鍫嗗灈鏈哄彿={}",crnThread.getCrnProtocol().getCrnNo());
+ }
+// crnThread.setResetFlag(true);
} else {
News.error(""+mark+" - 1"+" - 鏇存柊宸ヤ綔妗g殑宸ヤ綔鐘舵�佷负14澶辫触锛侊紒锛� [宸ヤ綔鍙�:{}]", wrkMast.getWrkNo());
}
@@ -429,7 +432,7 @@
News.errorNoLog(""+mark+" - 6"+" - 鍫嗗灈鏈轰俊鎭笉绗﹀悎鍏ュ簱鏉′欢锛侊紒锛�"
+" 鍫嗗灈鏈虹姸鎬侊細"+crnProtocol.modeType+"==鑷姩AUTO锛�" + CrnModeType.AUTO
+"銆佸爢鍨涙満浠诲姟鍙凤細"+crnProtocol.getTaskNo()+"==宸ヤ綔妗d换鍔″彿锛�" + wrkMast.getWrkNo().shortValue()
- +"銆佺姸鎬佹灇涓撅細"+crnProtocol.statusType+"==WAITING锛�90 //浠诲姟瀹屾垚绛夊緟WCS纭)锛�" + CrnStatusType.WAITING
+ +"銆佺姸鎬佹灇涓撅細"+crnProtocol.statusType+"==WAITING锛�10 //浠诲姟瀹屾垚绛夊緟WCS纭)锛�" + CrnStatusType.WAITING
+"銆佽揣鍙変綅缃細"+crnProtocol.forkPosType+"==HOME锛�0 // 璐у弶鍘熶綅锛�" + CrnForkPosType.HOME);
}
@@ -458,7 +461,7 @@
// 鍙湁褰撳爢鍨涙満绌洪棽 骞朵笖 鏃犱换鍔℃椂鎵嶇户缁墽琛�
if (crnProtocol.getStatusType() == CrnStatusType.IDLE && crnProtocol.getTaskNo() == 0 && crnProtocol.getModeType() == CrnModeType.AUTO
- && crnProtocol.getLoaded() == 0 && crnProtocol.getForkPos() == 0) {
+ && crnProtocol.getLoaded() == 0 && crnProtocol.getForkPos() == 0 && crnProtocol.getAlarm() == 0) {
News.warnNoLog(""+mark+" - 0"+" - 寮�濮嬫墽琛屽爢鍨涙満鍏ュ嚭搴撲綔涓氫笅鍙�");
// 濡傛灉鏈�杩戜竴娆℃槸鍏ュ簱妯″紡
if (crnProtocol.getLastIo().equals("I")) {
@@ -557,40 +560,42 @@
News.warnNoLog(""+mark+" - 1"+" - 8"+" - 鍙屾繁搴撲綅涓旀祬搴撲綅鏈夎揣锛屽垯闇�鍏堝娴呭簱浣嶈繘琛屽簱浣嶇Щ杞� : 寮�濮嬫墽琛� 浠诲姟鍙�={}",wrkMast.getWrkNo());
String shallowLocNo = Utils.getShallowLoc(slaveProperties, wrkMast.getLocNo());
LocMast shallowLoc = locMastService.selectById(shallowLocNo);
- // O.绌哄簱浣嶃�丵.鎷f枡/鐩樼偣/骞舵澘鍐嶅叆搴撱�丼.鍏ュ簱棰勭害銆乆.绂佺敤 鐩存帴鎼紒
- if (shallowLoc.getLocSts().equals("P") || shallowLoc.getLocSts().equals("R")) {
- News.warnNoLog(""+mark+" - 1"+" - 9"+" - // O.绌哄簱浣嶃�丵.鎷f枡/鐩樼偣/骞舵澘鍐嶅叆搴撱�丼.鍏ュ簱棰勭害銆乆.绂佺敤 鐩存帴鎼紒搴撲綅鐘舵��={}",shallowLoc.getLocSts());
- WrkMast waitWrkMast = wrkMastMapper.selectByLocNo(shallowLocNo);
- if (null == waitWrkMast) {
- News.error(""+mark+" - 1"+" - 10"+" - {}搴撲綅寮傚父锛屾湭妫�绱㈠埌鐩稿簲宸ヤ綔妗o紒", shallowLocNo);
- } else {
- waitWrkMast.setIoPri(15D);
- waitWrkMast.setModiTime(new Date());
- if (wrkMastMapper.updateById(waitWrkMast) == 0) {
- News.error(""+mark+" - 1"+" - 11"+" - 璋冩暣宸ヤ綔妗d紭鍏堢骇澶辫触锛佸伐浣滃彿={}", waitWrkMast.getWrkNo());
+ if(shallowLoc != null) {
+ // O.绌哄簱浣嶃�丵.鎷f枡/鐩樼偣/骞舵澘鍐嶅叆搴撱�丼.鍏ュ簱棰勭害銆乆.绂佺敤 鐩存帴鎼紒
+ if (shallowLoc.getLocSts().equals("P") || shallowLoc.getLocSts().equals("R")) {
+ News.warnNoLog(""+mark+" - 1"+" - 9"+" - // O.绌哄簱浣嶃�丵.鎷f枡/鐩樼偣/骞舵澘鍐嶅叆搴撱�丼.鍏ュ簱棰勭害銆乆.绂佺敤 鐩存帴鎼紒搴撲綅鐘舵��={}",shallowLoc.getLocSts());
+ WrkMast waitWrkMast = wrkMastMapper.selectByLocNo(shallowLocNo);
+ if (null == waitWrkMast) {
+ News.error(""+mark+" - 1"+" - 10"+" - {}搴撲綅寮傚父锛屾湭妫�绱㈠埌鐩稿簲宸ヤ綔妗o紒", shallowLocNo);
+ } else {
+ waitWrkMast.setIoPri(15D);
+ waitWrkMast.setModiTime(new Date());
+ if (wrkMastMapper.updateById(waitWrkMast) == 0) {
+ News.error(""+mark+" - 1"+" - 11"+" - 璋冩暣宸ヤ綔妗d紭鍏堢骇澶辫触锛佸伐浣滃彿={}", waitWrkMast.getWrkNo());
+ }
+ continue;
+ }
+
+ } else if (shallowLoc.getLocSts().equals("F") || shallowLoc.getLocSts().equals("D")) {
+ News.warnNoLog(""+mark+" - 1"+" - 12"+" - // F銆丏 搴撲綅鐘舵��={}",shallowLoc.getLocSts());
+ // 姝ゆ爣璁伴伩鍏嶅娆℃墽琛岀Щ搴撲换鍔�
+ if (Cools.isEmpty(wrkMast.getUpdMk()) || "N".equals(wrkMast.getUpdMk())) {
+ wrkMast.setUpdMk("Y");
+ wrkMast.setIoPri(14D);
+ wrkMastMapper.updateById(wrkMast);
+ // 鐢熸垚宸ヤ綔妗�,灏嗘祬搴撲綅绉昏浆鍒版柊鐨勫簱浣嶄腑
+ moveLocForDeepLoc(slave, shallowLoc,mark);
+ // 鐢熸垚宸ヤ綔妗c�佹敼鍙樻祬搴撲綅鐨勬簮搴�/鐩爣搴� 搴撲綅鐘舵�併�佷笅鍙戝爢鍨涙満鍛戒护锛堢珛椹墽琛�)
+// moveLocForDeepLocPakin(slave, shallowLoc, wrkMast);
}
continue;
- }
-
- } else if (shallowLoc.getLocSts().equals("F") || shallowLoc.getLocSts().equals("D")) {
- News.warnNoLog(""+mark+" - 1"+" - 12"+" - // F銆丏 搴撲綅鐘舵��={}",shallowLoc.getLocSts());
- // 姝ゆ爣璁伴伩鍏嶅娆℃墽琛岀Щ搴撲换鍔�
- if (Cools.isEmpty(wrkMast.getUpdMk()) || "N".equals(wrkMast.getUpdMk())) {
- wrkMast.setUpdMk("Y");
- wrkMast.setIoPri(14D);
- wrkMastMapper.updateById(wrkMast);
- // 鐢熸垚宸ヤ綔妗�,灏嗘祬搴撲綅绉昏浆鍒版柊鐨勫簱浣嶄腑
- moveLocForDeepLoc(slave, shallowLoc,mark);
- // 鐢熸垚宸ヤ綔妗c�佹敼鍙樻祬搴撲綅鐨勬簮搴�/鐩爣搴� 搴撲綅鐘舵�併�佷笅鍙戝爢鍨涙満鍛戒护锛堢珛椹墽琛�)
-// moveLocForDeepLocPakin(slave, shallowLoc, wrkMast);
- }
- continue;
- } else if (shallowLoc.getLocSts().equals("Q")) {
- News.warnNoLog(""+mark+" - 1"+" - 13"+" - // Q 搴撲綅鐘舵��={}",shallowLoc.getLocSts());
- WrkMast waitWrkMast = wrkMastMapper.selectByLocNo(shallowLocNo);
- if (null != waitWrkMast && waitWrkMast.getWrkSts() == 4) {
- News.infoNoLog(""+mark+" - 1"+" - 14"+" - // F銆丏 宸ヤ綔鐘舵��(鍒ゆ柇鏉′欢涓�==4)={}",waitWrkMast.getWrkSts());
- continue;
+ } else if (shallowLoc.getLocSts().equals("Q")) {
+ News.warnNoLog(""+mark+" - 1"+" - 13"+" - // Q 搴撲綅鐘舵��={}",shallowLoc.getLocSts());
+ WrkMast waitWrkMast = wrkMastMapper.selectByLocNo(shallowLocNo);
+ if (null != waitWrkMast && waitWrkMast.getWrkSts() == 4) {
+ News.infoNoLog(""+mark+" - 1"+" - 14"+" - // F銆丏 宸ヤ綔鐘舵��(鍒ゆ柇鏉′欢涓�==4)={}",waitWrkMast.getWrkSts());
+ continue;
+ }
}
}
}
@@ -610,7 +615,8 @@
crnCommand.setDestinationPosX(locMast.getRow1().shortValue()); // 鐩爣搴撲綅鎺�
crnCommand.setDestinationPosY(locMast.getBay1().shortValue()); // 鐩爣搴撲綅鍒�
crnCommand.setDestinationPosZ(locMast.getLev1().shortValue()); // 鐩爣搴撲綅灞�
- crnCommand.setTraySize(locMast.getLocType1() == 2);
+ crnCommand.setCommand((short) 1); // 浠诲姟纭
+// crnCommand.setTraySize(locMast.getLocType1() == 2);
if (!MessageQueue.offer(SlaveType.Crn, wrkMast.getCrnNo(), new Task(2, crnCommand))) {
News.error(""+mark+" - 1"+" - 16"+" - 鍫嗗灈鏈哄懡浠や笅鍙戝け璐ワ紝鍫嗗灈鏈哄彿={}锛屼换鍔℃暟鎹�={}", wrkMast.getCrnNo(), JSON.toJSON(crnCommand));
} else {
@@ -628,12 +634,22 @@
News.infoNoLog(""+mark+" - 1"+" - 0"+" - 鍫嗗灈鏈哄叆鍑哄簱浣滀笟涓嬪彂 锛� 鍏ュ簱鎵ц瀹屾瘯");
}
+ @Resource
+ private ConfigService configService;
+
/**
* 鍑哄簱 ===>> 搴撲綅鍒板爢鍨涙満绔�
* 2022-06-09 TQS淇敼锛屾煡璇㈠伐浣滄。LIST锛岄亶鍘嗕笅鍙戯紝闃叉绗竴涓换鍔″牭濉炲嚭搴�
*/
public synchronized void locToCrnStn(CrnSlave slave, CrnProtocol crnProtocol,Integer mark) {
News.warnNoLog(""+mark+" - 2"+" - 0"+" - 鍫嗗灈鏈哄叆鍑哄簱浣滀笟涓嬪彂锛氭墽琛屽嚭搴�");
+ // 鎺у埗鏄惁鍏佽杩炵画鍑哄簱锛屼笉鍒ゆ柇鍑哄簱绔欑偣鐘舵��(鏍规嵁鐘舵�佸惎鐢�)
+ boolean crnAvailableOut = false;
+ Config config = configService.selectOne(new EntityWrapper<Config>().eq("code","removeCrnAvailableOut"));
+ if (config != null && config.getStatus() == 1) {
+ crnAvailableOut = true;
+ }
+
for (CrnSlave.CrnStn crnStn : slave.getCrnOutStn()) {
// 鑾峰彇宸ヤ綔鐘舵�佷负11锛堢敓鎴愬嚭搴揑D锛夌殑鍑哄簱宸ヤ綔妗�
List<WrkMast> wrkMasts = wrkMastMapper.selectPakOutStep11(slave.getId(), crnStn.getStaNo());
@@ -672,8 +688,8 @@
}
// 鍒ゆ柇鍫嗗灈鏈哄嚭搴撶珯鐘舵��
- if (staProtocol.isAutoing() && staProtocol.isLoading() && staDetl.getCanouting() != null && staDetl.getCanouting().equals("Y")
- && staProtocol.getWorkNo() == 0 && staProtocol.isOutEnable()) {
+ if (staProtocol.isAutoing() && staDetl.getCanouting() != null && staDetl.getCanouting().equals("Y")
+ && (crnAvailableOut || !staProtocol.isLoading()&& staProtocol.getWorkNo() == 0 && staProtocol.isOutEnable())) {
// 鍫嗗灈鏈烘帶鍒惰繃婊�
if (!crnProtocol.getStatusType().equals(CrnStatusType.IDLE) || crnProtocol.getTaskNo() != 0) {
// continue;
@@ -685,46 +701,48 @@
News.warnNoLog(""+mark+" - 2"+" - 6"+" - 鍙屾繁搴撲綅涓旀祬搴撲綅鏈夎揣锛屽垯闇�鍏堝娴呭簱浣嶈繘琛屽簱浣嶇Щ杞� : 寮�濮嬫墽琛� 浠诲姟鍙�={}",wrkMast.getWrkNo());
String shallowLocNo = Utils.getShallowLoc(slaveProperties, wrkMast.getSourceLocNo());
LocMast shallowLoc = locMastService.selectById(shallowLocNo);
- // O.绌哄簱浣嶃�丵.鎷f枡/鐩樼偣/骞舵澘鍐嶅叆搴撱�丼.鍏ュ簱棰勭害銆乆.绂佺敤 鐩存帴鎼紒
- if (shallowLoc.getLocSts().equals("P") || shallowLoc.getLocSts().equals("R")) {
- News.warnNoLog(""+mark+" - 2"+" - 7"+" - // O.绌哄簱浣嶃�丵.鎷f枡/鐩樼偣/骞舵澘鍐嶅叆搴撱�丼.鍏ュ簱棰勭害銆乆.绂佺敤 鐩存帴鎼紒搴撲綅鐘舵��={}",shallowLoc.getLocSts());
- WrkMast waitWrkMast = wrkMastMapper.selectByLocNo(shallowLocNo);
- if (null == waitWrkMast) {
- News.error("{}搴撲綅寮傚父锛屾湭妫�绱㈠埌鐩稿簲宸ヤ綔妗o紒", shallowLocNo);
- } else {
- if (waitWrkMast.getWrkSts() == 11) {
- waitWrkMast.setIoPri(15D);
- waitWrkMast.setModiTime(new Date());
- if (wrkMastMapper.updateById(waitWrkMast) == 0) {
- News.error(""+mark+" - 2"+" - 8"+" - 璋冩暣宸ヤ綔妗d紭鍏堢骇澶辫触锛佸伐浣滃彿={}", waitWrkMast.getWrkNo());
- }
- continue;
+ if (shallowLoc != null) {
+ // O.绌哄簱浣嶃�丵.鎷f枡/鐩樼偣/骞舵澘鍐嶅叆搴撱�丼.鍏ュ簱棰勭害銆乆.绂佺敤 鐩存帴鎼紒
+ if (shallowLoc.getLocSts().equals("P") || shallowLoc.getLocSts().equals("R")) {
+ News.warnNoLog(""+mark+" - 2"+" - 7"+" - // O.绌哄簱浣嶃�丵.鎷f枡/鐩樼偣/骞舵澘鍐嶅叆搴撱�丼.鍏ュ簱棰勭害銆乆.绂佺敤 鐩存帴鎼紒搴撲綅鐘舵��={}",shallowLoc.getLocSts());
+ WrkMast waitWrkMast = wrkMastMapper.selectByLocNo(shallowLocNo);
+ if (null == waitWrkMast) {
+ News.error("{}搴撲綅寮傚父锛屾湭妫�绱㈠埌鐩稿簲宸ヤ綔妗o紒", shallowLocNo);
} else {
+ if (waitWrkMast.getWrkSts() == 11) {
+ waitWrkMast.setIoPri(15D);
+ waitWrkMast.setModiTime(new Date());
+ if (wrkMastMapper.updateById(waitWrkMast) == 0) {
+ News.error(""+mark+" - 2"+" - 8"+" - 璋冩暣宸ヤ綔妗d紭鍏堢骇澶辫触锛佸伐浣滃彿={}", waitWrkMast.getWrkNo());
+ }
+ continue;
+ } else {
+ }
}
- }
- } else if (shallowLoc.getLocSts().equals("F") || shallowLoc.getLocSts().equals("D")) {
- News.warnNoLog(""+mark+" - 2"+" - 9"+" - // F銆丏 搴撲綅鐘舵��={}",shallowLoc.getLocSts());
+ } else if (shallowLoc.getLocSts().equals("F") || shallowLoc.getLocSts().equals("D")) {
+ News.warnNoLog(""+mark+" - 2"+" - 9"+" - // F銆丏 搴撲綅鐘舵��={}",shallowLoc.getLocSts());
// WrkMast waitWrkMast = wrkMastMapper.selectByLocNo(shallowLocNo);
- //2022-08-16 modify,涓嶆牴鎹畊pdmk鏍囪绉诲簱浠诲姟(瀹规槗琚彇娑堝鑷村牭濉�)锛屾煡璇㈠伐浣滄。鏄惁瀛樺湪浠诲姟
- WrkMast waitWrkMast = wrkMastMapper.selectByLocNo1(shallowLocNo);
- // 姝ゆ爣璁伴伩鍏嶅娆℃墽琛岀Щ搴撲换鍔�
+ //2022-08-16 modify,涓嶆牴鎹畊pdmk鏍囪绉诲簱浠诲姟(瀹规槗琚彇娑堝鑷村牭濉�)锛屾煡璇㈠伐浣滄。鏄惁瀛樺湪浠诲姟
+ WrkMast waitWrkMast = wrkMastMapper.selectByLocNo1(shallowLocNo);
+ // 姝ゆ爣璁伴伩鍏嶅娆℃墽琛岀Щ搴撲换鍔�
// if (Cools.isEmpty(wrkMast.getUpdMk()) || "N".equals(wrkMast.getUpdMk())
// || Cools.isEmpty(waitWrkMast)) {
- if (Cools.isEmpty(waitWrkMast)) {
- wrkMast.setUpdMk("Y");
- wrkMastMapper.updateById(wrkMast);
- // 鐢熸垚宸ヤ綔妗�,灏嗘祬搴撲綅绉昏浆鍒版柊鐨勫簱浣嶄腑
- moveLocForDeepLoc(slave, shallowLoc,mark);
- }
- News.error("{}浠诲姟鍑哄簱澶辫触锛屾祬搴撲綅鍫靛锛佹祬搴撲綅鍙�:{}", wrkMast.getWrkNo(), shallowLocNo);
- break;
- } else if (shallowLoc.getLocSts().equals("Q") || shallowLoc.getLocSts().equals("S")) {
- News.warnNoLog(""+mark+" - 2"+" - 10"+" - // Q銆丼 搴撲綅鐘舵��={}",shallowLoc.getLocSts());
- WrkMast waitWrkMast = wrkMastMapper.selectByLocNo1(shallowLocNo);
- if (null != waitWrkMast && waitWrkMast.getWrkSts() == 4) {
- News.infoNoLog(""+mark+" - 2"+" - 11"+" - // F銆丏 宸ヤ綔鐘舵��(鍒ゆ柇鏉′欢涓�==4)={}",waitWrkMast.getWrkSts());
- continue;
+ if (Cools.isEmpty(waitWrkMast)) {
+ wrkMast.setUpdMk("Y");
+ wrkMastMapper.updateById(wrkMast);
+ // 鐢熸垚宸ヤ綔妗�,灏嗘祬搴撲綅绉昏浆鍒版柊鐨勫簱浣嶄腑
+ moveLocForDeepLoc(slave, shallowLoc,mark);
+ }
+ News.error("{}浠诲姟鍑哄簱澶辫触锛屾祬搴撲綅鍫靛锛佹祬搴撲綅鍙�:{}", wrkMast.getWrkNo(), shallowLocNo);
+ break;
+ } else if (shallowLoc.getLocSts().equals("Q") || shallowLoc.getLocSts().equals("S")) {
+ News.warnNoLog(""+mark+" - 2"+" - 10"+" - // Q銆丼 搴撲綅鐘舵��={}",shallowLoc.getLocSts());
+ WrkMast waitWrkMast = wrkMastMapper.selectByLocNo1(shallowLocNo);
+ if (null != waitWrkMast && waitWrkMast.getWrkSts() == 4) {
+ News.infoNoLog(""+mark+" - 2"+" - 11"+" - // F銆丏 宸ヤ綔鐘舵��(鍒ゆ柇鏉′欢涓�==4)={}",waitWrkMast.getWrkSts());
+ continue;
+ }
}
}
}
@@ -751,7 +769,8 @@
crnCommand.setDestinationPosX(crnStn.getRow().shortValue()); // 鐩爣搴撲綅鎺�
crnCommand.setDestinationPosY(crnStn.getBay().shortValue()); // 鐩爣搴撲綅鍒�
crnCommand.setDestinationPosZ(crnStn.getLev().shortValue()); // 鐩爣搴撲綅灞�
- crnCommand.setTraySize(sourceSta.getLocType1() == 2); //搴撲綅绫诲瀷
+ crnCommand.setCommand((short)1); // 浠诲姟纭
+// crnCommand.setTraySize(sourceSta.getLocType1() == 2); //搴撲綅绫诲瀷
if (!MessageQueue.offer(SlaveType.Crn, wrkMast.getCrnNo(), new Task(2, crnCommand))) {
News.error(""+mark+" - 2"+" - 13"+" - 鍫嗗灈鏈哄懡浠や笅鍙戝け璐ワ紝鍫嗗灈鏈哄彿={}锛屼换鍔℃暟鎹�={}", wrkMast.getCrnNo(), JSON.toJSON(crnCommand));
} else {
@@ -797,7 +816,7 @@
News.error(""+mark+" - 3"+" - 2"+" - 宸ヤ綔妗e簱浣嶇Щ杞け璐ワ紝鍘熷洜锛氭绱㈢洰鏍囧簱浣嶅け璐ワ紒宸ヤ綔鍙�={}锛屾簮搴撲綅={}", wrkMast.getWrkNo(), wrkMast.getLocNo());
return;
}
- if(sta.getLocType1() != sourceSta.getLocType1()){
+ if(!Objects.equals(sta.getLocType1(), sourceSta.getLocType1())){
News.error("绉诲簱鐩爣搴撲綅绫诲瀷涓庢簮搴撲綅绫诲瀷涓嶇");
return;
}
@@ -825,7 +844,7 @@
CrnCommand crnCommand = new CrnCommand();
crnCommand.setCrnNo(slave.getId()); // 鍫嗗灈鏈虹紪鍙�
crnCommand.setTaskNo(wrkMast.getWrkNo().shortValue()); // 宸ヤ綔鍙�
- crnCommand.setAckFinish((short) 0); // 浠诲姟瀹屾垚纭浣�
+// crnCommand.setAckFinish((short) 0); // 浠诲姟瀹屾垚纭浣�
crnCommand.setTaskMode(CrnTaskModeType.LOC_MOVE); // 浠诲姟妯″紡: 搴撲綅绉昏浆
crnCommand.setSourcePosX(sourceSta.getRow1().shortValue()); // 婧愬簱浣嶆帓
crnCommand.setSourcePosY(sourceSta.getBay1().shortValue()); // 婧愬簱浣嶅垪
@@ -833,7 +852,8 @@
crnCommand.setDestinationPosX(sta.getRow1().shortValue()); // 鐩爣搴撲綅鎺�
crnCommand.setDestinationPosY(sta.getBay1().shortValue()); // 鐩爣搴撲綅鍒�
crnCommand.setDestinationPosZ(sta.getLev1().shortValue()); // 鐩爣搴撲綅灞�
- crnCommand.setTraySize(sourceSta.getLocType1() == 2); //搴撲綅绫诲瀷
+ crnCommand.setCommand((short)1); // 浠诲姟纭
+// crnCommand.setTraySize(sourceSta.getLocType1() == 2); //搴撲綅绫诲瀷
if (!MessageQueue.offer(SlaveType.Crn, wrkMast.getCrnNo(), new Task(2, crnCommand))) {
News.error(""+mark+" - 3"+" - 4"+" - 鍫嗗灈鏈哄懡浠や笅鍙戝け璐ワ紝鍫嗗灈鏈哄彿={}锛屼换鍔℃暟鎹�={}", wrkMast.getCrnNo(), JSON.toJSON(crnCommand));
} else {
@@ -863,11 +883,12 @@
continue;
}
// 鐘舵�侊細绛夊緟纭 骞朵笖 浠诲姟瀹屾垚浣� = 1
- if (crnProtocol.statusType == CrnStatusType.WAITING && crnProtocol.getTaskNo() != 0) {
+ if (crnProtocol.getMode().intValue() == CrnModeType.AUTO.id && crnProtocol.statusType == CrnStatusType.WAITING && crnProtocol.getTaskNo() != 0) {
News.warnNoLog(""+mark+" - 0"+" - 寮�濮嬫墽琛屽宸ヤ綔妗g殑瀹屾垚鎿嶄綔");
if (crnProtocol.getTaskNo() == 9999) {
- // 鍫嗗灈鏈哄浣�
- crnThread.setResetFlag(true);
+ if (!MessageQueue.offer(SlaveType.Crn, crn.getId(), new Task(3, null))) {
+ News.error(crn.getId() + "鍫嗗灈鏈哄洖鍘熺偣浠诲姟锛屼笅鍙戝浣嶅懡浠ゅけ璐�");
+ }
} else {
// 鑾峰彇鍏ュ簱寰呯‘璁ゅ伐浣滄。
WrkMast wrkMast = wrkMastMapper.selectPakInStep3(crnProtocol.getTaskNo().intValue());
@@ -887,8 +908,11 @@
// 淇敼鎴愬姛鍚庡浣嶅爢鍨涙満
if (wrkMastMapper.updateById(wrkMast) > 0) {
// 鍫嗗灈鏈哄浣�
- News.warnNoLog(""+mark+" - 2"+" - 淇敼鎴愬姛鍚庡浣嶅爢鍨涙満 : 鍫嗗灈鏈哄彿={}",crnThread.getCrnProtocol().getCrnNo());
- crnThread.setResetFlag(true);
+ if (!MessageQueue.offer(SlaveType.Crn, crn.getId(), new Task(3, null))) {
+ News.error(crn.getId() + "鍏ュ簱瀹屾垚锛屼笅鍙戝浣嶅懡浠ゅけ璐�");
+ } else {
+ News.warnNoLog(""+mark+" - 2"+" - 鍏ュ簱瀹屾垚澶嶄綅鍫嗗灈鏈� : 鍫嗗灈鏈哄彿={}",crnThread.getCrnProtocol().getCrnNo());
+ }
}
}
@@ -973,7 +997,7 @@
String errName = crnError == null ? String.valueOf(crnProtocol.getAlarm()) : crnError.getErrName();
BasErrLog basErrLog = new BasErrLog(
null, // 缂栧彿
- null, // 宸ヤ綔鍙�
+ crnProtocol.getTaskNo().intValue(), // 宸ヤ綔鍙�
now, // 鍙戠敓鏃堕棿
null, // 缁撴潫鏃堕棿
null, // 宸ヤ綔鐘舵��
@@ -1047,7 +1071,7 @@
&& staProtocol.isInEnable()
&& staProtocol.isEmptyMk()
&& staProtocol.isPakMk()
- && (staProtocol.getWorkNo() !=0 && staProtocol.getWorkNo() > 9700)
+ && staProtocol.getWorkNo() == 9998 // 9997 鍥為�� 9998 绌� 9999 婊�
) {
News.warnNoLog(""+mark+" - 0"+" - 寮�濮嬫墽琛岋細绌烘爤鏉垮垵濮嬪寲鍏ュ簱,鍙夎溅鍏ュ簱绔欐斁璐�");
@@ -1070,7 +1094,7 @@
// 鏇存柊绔欑偣淇℃伅 涓� 涓嬪彂plc鍛戒护
staProtocol.setWorkNo(dto.getWorkNo());
- staProtocol.setStaNo(staProtocol.getSiteId().shortValue());
+ staProtocol.setStaNo(dto.getStaNo().shortValue());
devpThread.setPakMk(staProtocol.getSiteId(), false);
boolean result = MessageQueue.offer(SlaveType.Devp, devp.getId(), new Task(2, staProtocol));
log.error("杈撻�佺嚎涓嬪彂6锛�"+dto.getWorkNo()+","+staProtocol.getSiteId());
@@ -1094,7 +1118,7 @@
// ledThread.errorReset();
}
} else {
- staProtocol.setWorkNo(wrkNo++);
+ staProtocol.setWorkNo(wrkNo);
staProtocol.setStaNo(emptyInSta.getBackSta().shortValue());
devpThread.setPakMk(staProtocol.getSiteId(), false);
boolean result = MessageQueue.offer(SlaveType.Devp, devp.getId(), new Task(2, staProtocol));
@@ -1179,7 +1203,7 @@
"浠诲姟涓紓甯�" // 澶囨敞
);
if (!basDevpErrLogService.insert(basErrLog)) {
- log.error("杈撻�佺嚎寮傚父淇℃伅鎻掑叆琛╝sr_bas_devp_err_log寮傚父锛歿}", basErrLog);
+ News.error("杈撻�佺嚎寮傚父淇℃伅鎻掑叆琛╝sr_bas_devp_err_log寮傚父锛歿}", basErrLog);
}
}
} else {
@@ -1189,7 +1213,7 @@
latestByTaskNo.setUpdateTime(now);
latestByTaskNo.setStatus(2);
if (!basDevpErrLogService.updateById(latestByTaskNo)) {
- log.error("杈撻�佺嚎寮傚父璁板綍淇澶辫触asr_bas_devp_err_log寮傚父锛歿}", latestByTaskNo);
+ News.error("杈撻�佺嚎寮傚父璁板綍淇澶辫触asr_bas_devp_err_log寮傚父锛歿}", latestByTaskNo);
}
}
}
@@ -1202,7 +1226,7 @@
if (latest == null || !latest.getError().equals(plcErr) || latest.getStatus() == 2 ) {
BasDevpErrLog basErrLog = new BasDevpErrLog(
null, // 缂栧彿
- null, // 宸ヤ綔鍙�
+ staProtocol.getWorkNo(), // 宸ヤ綔鍙�
now, // 鍙戠敓鏃堕棿
null, // 缁撴潫鏃堕棿
null, // 宸ヤ綔鐘舵��
@@ -1224,7 +1248,7 @@
"鏃犱换鍔″紓甯�" // 澶囨敞
);
if (!basDevpErrLogService.insert(basErrLog)) {
- log.error("杈撻�佺嚎寮傚父璁板綍asr_bas_devp_err_log寮傚父锛歿}", basErrLog);
+ News.error("杈撻�佺嚎寮傚父璁板綍asr_bas_devp_err_log寮傚父锛歿}", basErrLog);
}
}
// 鏃犲紓甯�
@@ -1235,7 +1259,7 @@
latest.setUpdateTime(now);
latest.setStatus(2);
if (!basDevpErrLogService.updateById(latest)) {
- log.error("杈撻�佺嚎寮傚父璁板綍淇澶辫触asr_bas_devp_err_log寮傚父锛歿}", latest);
+ News.error("杈撻�佺嚎寮傚父璁板綍淇澶辫触asr_bas_devp_err_log寮傚父锛歿}", latest);
}
}
}
@@ -1296,7 +1320,7 @@
/**
* 鍑哄簱 ===>> 宸ヤ綔妗d俊鎭啓鍏ed鏄剧ず鍣�
*/
- public synchronized void ledExecute(Integer mark) {
+ public synchronized void ledExecute() {
for (LedSlave led : slaveProperties.getLed()) {
// 鑾峰彇杈撻�佺嚎plc绾跨▼
DevpThread devpThread = (DevpThread) SlaveConnection.get(SlaveType.Devp, led.getDevpPlcId());
@@ -1348,32 +1372,16 @@
News.error("浠诲姟鍏ュ嚭搴撶被鍨嬮敊璇紒锛侊紒[宸ヤ綔鍙凤細{}] [鍏ュ嚭搴撶被鍨嬶細{}]", wrkMast.getWrkNo(), wrkMast.getIoType());
break;
}
+ ledCommand.setLocNo(wrkMast.getLocNo());
ledCommand.setSourceLocNo(wrkMast.getSourceLocNo());
ledCommand.setStaNo(wrkMast.getStaNo());
ledCommand.setBarcode(wrkMast.getBarcode());
if (wrkMast.getIoType() != 110 && wrkMast.getIoType() != 10) {
List<WrkDetl> wrkDetls = wrkDetlService.selectList(new EntityWrapper<WrkDetl>().eq("wrk_no", wrkMast.getWrkNo()));
-// List<WrkDetl> wrkDetls = wrkDetlService.findByWorkNo(wrkMast.getWrkNo());
- wrkDetls.forEach(wrkDetl -> ledCommand.getMatDtos().add(new MatDto(wrkDetl.getMatnr(), wrkDetl.getBatch(), wrkDetl.getSpecs(),wrkDetl.getManuDate(),wrkDetl.getModel(),wrkDetl.getWeight(),wrkDetl.getLength(),wrkDetl.getVolume())));
-// wrkDetls.forEach(wrkDetl -> {
-// Double total = 0.0;
-// EntityWrapper<LocDetl> wrapper = new EntityWrapper<>();
-// LocDetl locDetl = locDetlService.selectOne(wrapper.eq("zpallet", wrkDetl.getZpallet()).eq("matnr", wrkDetl.getMatnr()));
-// if (Cools.isEmpty(locDetl)) {
-// total = wrkDetl.getAnfme();
-// } else {
-// total = locDetl.getAnfme();
-// }
-// if (wrkMast.getIoType() == 101 || wrkMast.getIoType() == 1) {
-// ledCommand.getMatDtos().add(new MatDto(wrkDetl.getMatnr(), wrkDetl.getMaktx(), wrkDetl.getBatch(), wrkDetl.getSpecs(), wrkDetl.getManu(), wrkDetl.getMemo(), wrkDetl.getAnfme(),total));
-// }
-// if (wrkMast.getIoType() == 103 && (null == wrkDetl.getInspect() || 0 == wrkDetl.getInspect())) {
-// ledCommand.getMatDtos().add(new MatDto(wrkDetl.getMatnr(), wrkDetl.getMaktx(), wrkDetl.getBatch(), wrkDetl.getSpecs(), wrkDetl.getManu(), wrkDetl.getMemo(), wrkDetl.getAnfme(),total));
-// }
-// if (wrkMast.getIoType() == 107) {
-// ledCommand.getMatDtos().add(new MatDto(wrkDetl.getMatnr(), wrkDetl.getMaktx(), wrkDetl.getBatch(), wrkDetl.getSpecs(), wrkDetl.getManu(), wrkDetl.getMemo(), wrkDetl.getAnfme(),total));
-// }
-// });
+ wrkDetls.forEach(wrkDetl -> ledCommand.getMatDtos().add(new MatDto(wrkDetl.getOrderNo(),wrkDetl.getMatnr(),wrkDetl.getMaktx(),
+ wrkDetl.getBatch(), wrkDetl.getSpecs(),wrkDetl.getManuDate(),wrkDetl.getModel(),wrkDetl.getAnfme())));
+ } else {
+ ledCommand.getMatDtos().add(new MatDto("","","","","","","",1.0));
}
commands.add(ledCommand);
}
@@ -1440,7 +1448,7 @@
}
ledThread.errorReset();
if (!MessageQueue.offer(SlaveType.Led, led.getId(), new Task(2, new ArrayList<>()))) {
- News.error("{}鍙稬ED鍛戒护涓嬪彂澶辫触锛侊紒锛乕ip锛歿}] [port锛歿}]", led.getId(), led.getIp(), led.getPort());
+ News.error("鏄剧ず榛樿鍐呭{}鍙稬ED鍛戒护涓嬪彂澶辫触锛侊紒锛乕ip锛歿}] [port锛歿}]", led.getId(), led.getIp(), led.getPort());
}
}
}
@@ -1477,7 +1485,7 @@
if (null == loc) {
for (Integer row : rows) {
if (Utils.isShallowLoc(slaveProperties, row)) {
- loc = locMastService.queryFreeLocMast(row, shallowLoc.getLocType2());
+ loc = locMastService.queryFreeLocMast(row, shallowLoc.getLocType1());
if (null != loc) {//瀵瑰簲娣卞簱浣嶉潪鍦ㄥ簱鐘舵��,涓嶈兘绉诲簱
String deepLoc = Utils.getDeepLoc(slaveProperties, loc.getLocNo());
@@ -1594,4 +1602,236 @@
// News.infoNoLog(""+mark+" - 0"+" - outOfDevp鎵ц瀹屾垚");
}
+ /**
+ * 鍫嗗灈鏈哄洖鍘熺偣
+ */
+ public synchronized void originGo() throws InterruptedException {
+ Config config = configService.selectOne(new EntityWrapper<Config>().eq("code", "crnAutoHome").eq("status", 1));
+ if (config == null || Cools.isEmpty(config.getValue()) || !config.getValue().equals("Y")) {
+ return;
+ }
+ 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() == 1 && 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));
+ 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.setAckFinish((short)0);
+ crnCommand.setTaskMode(CrnTaskModeType.GO_ORIGIN); // 浠诲姟妯″紡: 鍥炲師鐐�
+ crnCommand.setSourcePosX((short) 0); // 婧愬簱浣嶆帓
+ crnCommand.setSourcePosY((short) 0); // 婧愬簱浣嶅垪
+ crnCommand.setSourcePosZ((short) 0); // 婧愬簱浣嶅眰
+ crnCommand.setDestinationPosX((short) 0); // 鐩爣搴撲綅鎺�
+ crnCommand.setDestinationPosY((short) 0); // 鐩爣搴撲綅鍒�
+ crnCommand.setDestinationPosZ((short) 0); // 鐩爣搴撲綅灞�
+ crnCommand.setCommand((short)1);
+ 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);
+ }
+ }
+ }
+
+ public static final HashMap<Integer,Integer> wrkStaNoToRgvStaMap = new HashMap<>();
+ static {
+ wrkStaNoToRgvStaMap.put(1101,1114);
+ wrkStaNoToRgvStaMap.put(1201,1203);
+ wrkStaNoToRgvStaMap.put(1206,1203);
+ wrkStaNoToRgvStaMap.put(1301,1303);
+ wrkStaNoToRgvStaMap.put(1306,1303);
+ wrkStaNoToRgvStaMap.put(1408,1413);
+ }
+
+ public static final HashMap<Integer,Integer> wrkSourceStaNoToRgvStaMap = new HashMap<>();
+ static {
+ wrkSourceStaNoToRgvStaMap.put(1112,1114);
+ wrkSourceStaNoToRgvStaMap.put(1109,1114);
+ wrkSourceStaNoToRgvStaMap.put(1209,1213);
+ wrkSourceStaNoToRgvStaMap.put(1309,1313);
+ wrkSourceStaNoToRgvStaMap.put(1402,1403);
+ wrkSourceStaNoToRgvStaMap.put(1407,1403);
+ }
+
+ // ========================
+ // 馃敟 閫氶亾閿侊紙鏍稿績锛�
+ // ========================
+ private volatile int pathLock = 0;
+
+ // 0 = 绌洪棽
+ // 1 = 鍏ュ簱鍗犵敤锛�1106鈫�1105鈫�1114锛�
+ // 2 = 鍑哄簱鍗犵敤锛�1114鈫扲GV鈫掑锛�
+
+
+ public synchronized void releasePathIfFree() {
+
+ RgvThread rgvThread = (RgvThread) SlaveConnection.get(SlaveType.Rgv, 1);
+ RgvProtocol rgv = rgvThread.getRgvProtocol();
+ if (rgv == null) return;
+
+ SiemensDevpThread devpThread = (SiemensDevpThread) SlaveConnection.get(SlaveType.Devp, 1);
+
+ StaProtocol sta1105 = devpThread.getStation().get(1105);
+ StaProtocol sta1114 = devpThread.getStation().get(1114);
+
+ if (sta1105 == null || sta1114 == null) return;
+
+ boolean allFree =
+ rgv.getTaskNo1() == 0
+ && rgv.loaded1 == 0
+ && rgv.statusType == RgvStatusType.IDLE
+ && rgv.modeType == RgvModeType.AUTO
+ && rgv.alarm == 0
+
+ && sta1105.isAutoing()
+ && sta1105.getWorkNo() == 0
+ && !sta1105.isLoading()
+
+ && sta1114.isAutoing()
+ && sta1114.getWorkNo() == 0
+ && !sta1114.isLoading();
+
+ if (allFree && pathLock != 0) {
+ pathLock = 0;
+ devpThread.updatePathStatus(0);
+ }
+ }
+
+ public synchronized void rgvCarryOne() {
+ RgvThread rgvThread = (RgvThread) SlaveConnection.get(SlaveType.Rgv, 1);
+ RgvProtocol rgvProtocol = rgvThread.getRgvProtocol();
+ if (rgvProtocol == null) {
+ return;
+ }
+ SiemensDevpThread devpThread = (SiemensDevpThread) SlaveConnection.get(SlaveType.Devp, 1);
+ StaProtocol staProtocol1106 = devpThread.getStation().get(1106);
+ if (staProtocol1106 == null) {
+ return;
+ }
+ StaProtocol staProtocol1105 = devpThread.getStation().get(1105);
+ if (staProtocol1105 == null) {
+ return;
+ }
+ StaProtocol staProtocol1114 = devpThread.getStation().get(1114);
+ if (staProtocol1114 == null) {
+ return;
+ }
+ if (isIdle(rgvProtocol, staProtocol1105, staProtocol1114) && staProtocol1106.isAutoing() && staProtocol1106.isLoading() && staProtocol1106.getWorkNo() != 0 && staProtocol1106.getStaNo() != 1106) {
+ applyPath(1, devpThread);
+ }
+ }
+
+ public synchronized boolean isIdle(RgvProtocol rgvProtocol,StaProtocol staProtocol1105,StaProtocol staProtocol1114) {
+ return rgvProtocol.modeType == RgvModeType.AUTO && rgvProtocol.statusType == RgvStatusType.IDLE && rgvProtocol.loaded1 == 0
+ && rgvProtocol.alarm == 0 && rgvProtocol.getTaskNo1() == 0
+ && staProtocol1105.isAutoing() && !staProtocol1105.isLoading() && staProtocol1105.getWorkNo() == 0
+ && staProtocol1114.isAutoing() && !staProtocol1114.isLoading() && staProtocol1114.getWorkNo() == 0;
+ }
+
+ private synchronized boolean applyPath(int newStatus, SiemensDevpThread devpThread) {
+ if (pathLock != 0) return false;
+
+ pathLock = newStatus;
+ devpThread.updatePathStatus(newStatus);
+ return true;
+ }
+
+ public synchronized void rgvCarry() {
+ for(int i = 1; i <= 4; i ++) {
+ List<Integer> rgvCarrySiteList;
+ RgvThread rgvThread = (RgvThread) SlaveConnection.get(SlaveType.Rgv, i);
+ RgvProtocol rgvProtocol = rgvThread.getRgvProtocol();
+ if (rgvProtocol == null) {
+ continue;
+ }
+ SiemensDevpThread devpThread = (SiemensDevpThread) SlaveConnection.get(SlaveType.Devp, i);
+
+ if(rgvProtocol.modeType == RgvModeType.AUTO && rgvProtocol.statusType == RgvStatusType.IDLE && rgvProtocol.loaded1 == 0
+ && rgvProtocol.alarm == 0 && rgvProtocol.getTaskNo1() == 0) {
+ switch (i) {
+ case 1: rgvCarrySiteList = Arrays.asList(1114,1118,1120); break;
+ case 2: rgvCarrySiteList = Arrays.asList(1213,1216,1218,1220); break;
+ case 3: rgvCarrySiteList = Arrays.asList(1313,1316,1318,1320); break;
+ case 4: rgvCarrySiteList = Arrays.asList(1403,1418,1420); break;
+ default:
+ return;
+ }
+ List<BasDevp> basDevps = basDevpService.selectList(new EntityWrapper<BasDevp>().ne("wrk_no", 0).in("dev_no", rgvCarrySiteList));
+ if(!basDevps.isEmpty()) {
+ List<Integer> wrkNos = basDevps.stream().map(BasDevp::getWrkNo).distinct().collect(Collectors.toList());
+ List<WrkMast> wrkMastList = wrkMastService.selectList(new EntityWrapper<WrkMast>().in("wrk_no", wrkNos)
+ .last("ORDER BY CASE WHEN crn_end_time IS NULL THEN 0 ELSE 1 END,crn_end_time ASC"));
+ Optional<WrkMast> first = wrkMastList.stream().filter(wrkMast -> wrkMast.getWhsType() == 1).findFirst();
+ if(first.isPresent()) {
+ log.warn("鏈変换鍔″鍦▄}鍙峰皬杞︽惉杩愪腑锛屼换鍔″彿{}",i,first.get().getWrkNo());
+ continue;
+ }
+ for(WrkMast wrkMast:wrkMastList) {
+ // 鍒ゆ柇鐩爣绔欑偣鏄惁鍙敤
+ StaProtocol staProtocol = devpThread.getStation().get(wrkStaNoToRgvStaMap.get(wrkMast.getStaNo()) == null ?
+ wrkMast.getStaNo() : wrkStaNoToRgvStaMap.get(wrkMast.getStaNo()));
+ if (staProtocol != null && (staProtocol.getSiteId() != 1114 || isIdle(rgvProtocol,devpThread.getStation().get(1105),staProtocol))
+ && staProtocol.isAutoing() && !staProtocol.isLoading() && staProtocol.getWorkNo() == 0) {
+ if (staProtocol.getSiteId() == 1114) {
+ applyPath(2, devpThread);
+ }
+ RgvCommand rgvCommand = new RgvCommand();
+ rgvCommand.setRgvNo(rgvProtocol.getRgvNo());
+// rgvCommand.setAckFinish1((short) 0); // 宸ヤ綅1浠诲姟瀹屾垚纭浣�
+ rgvCommand.setTaskNo1(wrkMast.getWrkNo().shortValue());
+ rgvCommand.setTaskMode1(RgvTaskModeType.FETCH_PUT); // 宸ヤ綅1浠诲姟妯″紡: 鍙栨斁璐�
+ Integer sourcesStaNo = wrkSourceStaNoToRgvStaMap.get(wrkMast.getSourceStaNo());
+ rgvCommand.setSourceStaNo1(sourcesStaNo == null ? wrkMast.getSourceStaNo().shortValue() : sourcesStaNo.shortValue()); //宸ヤ綅1璧风偣
+ rgvCommand.setDestinationStaNo1(wrkMast.getStaNo().shortValue()); //宸ヤ綅1鐩爣绔欑偣
+ rgvCommand.setCommand((short) 1); //宸ヤ綅1浠诲姟纭
+ if (!MessageQueue.offer(SlaveType.Rgv, rgvProtocol.getRgvNo(), new Task(2, rgvCommand))) {
+ log.error("RGV鍛戒护涓嬪彂澶辫触锛孯GV鍙�={}锛屼换鍔℃暟鎹�={}", rgvProtocol.getRgvNo(), JSON.toJSON(rgvCommand));
+ break;
+ }
+ wrkMast.setWhsType(1);
+ wrkMastService.updateById(wrkMast);
+ break;
+ }
+ }
+ }
+ }
+ }
+ }
}
--
Gitblit v1.9.1