From 6bbfef82d3019f01bd88e84da5bb83311ffdf844 Mon Sep 17 00:00:00 2001
From: zhou zhou <3272660260@qq.com>
Date: 星期二, 13 一月 2026 14:42:36 +0800
Subject: [PATCH] #
---
src/main/java/com/zy/service/impl/MainServiceImpl.java | 696 +++++++++++++++++++++++++++++++++++++++++++--------------
1 files changed, 519 insertions(+), 177 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..0b95e97 100644
--- a/src/main/java/com/zy/service/impl/MainServiceImpl.java
+++ b/src/main/java/com/zy/service/impl/MainServiceImpl.java
@@ -36,13 +36,12 @@
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.stereotype.Service;
+import org.springframework.transaction.annotation.Propagation;
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;
/**
@@ -51,7 +50,6 @@
*/
@Slf4j
@Service("mainService")
-@Transactional
public class MainServiceImpl {
@Autowired
@@ -89,15 +87,25 @@
@Autowired
private BasRgvMapService basRgvMapService;
+ @Resource
+ private BasDevpMapper basDevpMapper;
+
+ @Resource
+ private BasDevpErrLogService basDevpErrLogService;
+
@Value("${wms.url}")
private String wmsUrl;
- public Integer wrkNo = 9901;
+ @Autowired
+ private MainServiceImpl mainService;
+
+ public Integer wrkNo = 10000;
/**
* 缁勬墭
* 鍏ュ簱绔欙紝鏍规嵁鏉$爜鎵弿鐢熸垚鍏ュ簱宸ヤ綔妗o紝宸ヤ綔鐘舵�� 2
*/
+ @Transactional(rollbackFor = Exception.class)
public synchronized void generateStoreWrkFile() {
String methodName = Thread.currentThread().getStackTrace()[1].getMethodName();
// 鏍规嵁杈撻�佺嚎plc閬嶅巻
@@ -146,21 +154,15 @@
errMsg = "瓒呴噸";
back = true;
}
- if (!back && staProtocol.isBarcodeErr()) {
+ if (!back && (staProtocol.isBarcodeErr()||Cools.isEmpty(barcode))) {
errMsg = "鎵爜澶辫触";
back = true;
}
// 閫�鍥�
- if (back) {
+ if (back && staProtocol.isInEnable() && staProtocol.isLoading() && staProtocol.isPakMk() && !staProtocol.isEmptyMk() ) {
MessageQueue.offer(SlaveType.Led, inSta.getLed(), new Task(3, errMsg));
-
- if (!staProtocol.isLoading()){
- continue;
- }
- if (!staProtocol.isPakMk()) {
- continue;
- }
staProtocol.setWorkNo(wrkNo);
+ wrkNo++;
News.info("{}鍏ュ簱鍥為��锛歿}锛屼换鍔″彿锛歿}", inSta.getStaNo(), errMsg,wrkNo);
staProtocol.setStaNo(inSta.getBackSta().shortValue());
devpThread.setPakMk(staProtocol.getSiteId(), false);
@@ -170,12 +172,14 @@
}
// 鍒ゆ柇鏄惁婊¤冻鍏ュ簱鏉′欢
- if (staProtocol.isAutoing()
- && staProtocol.isLoading()
- && staProtocol.isInEnable()
- && !staProtocol.isEmptyMk()
- && staProtocol.isPakMk()) {
+ if (staProtocol.isAutoing() //鑷姩
+ && staProtocol.isLoading() //鏈夌墿
+ && staProtocol.isInEnable() //鍙叆
+ && !staProtocol.isEmptyMk() // 闈炵┖鏉�
+ && staProtocol.isPakMk() //闃叉閲嶅涓嬪彂淇″彿 绔欑偣鏃犵墿 鏃犱换鍔″彿浼氳嚜鍔ㄥ彉鎴恡rue
+ ) {
if(Cools.isEmpty(barcode) || "NG".endsWith(barcode) || "NoRead".equals(barcode) || "00000000".equals(barcode)) {
+ News.info("{}鏉$爜鎵弿閿欒锛歿}",barcodeThread.getSlave().getId(),barcode);
continue;
}
// 鍒ゆ柇閲嶅宸ヤ綔妗�
@@ -208,23 +212,33 @@
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();
}
} else {
+ // WMS杩斿洖閿欒鏃讹紝鍏堟鏌ユ槸鍚︽槸鎷f枡鍏ュ簱锛屽鏋滄槸鍒欒烦杩囧洖閫�锛岃鎷f枡鍏ュ簱娴佺▼澶勭悊
+ WrkMast pickWrkMast = wrkMastMapper.selectPickStep(barcode);
+ if (pickWrkMast != null) {
+ // 鏄嫞鏂欏叆搴擄紝璺宠繃鍥為��锛岃鎷f枡鍏ュ簱娴佺▼澶勭悊
+ News.info("鏉$爜{}鏄嫞鏂欏叆搴擄紙宸ヤ綔鍙凤細{}锛屽伐浣滅姸鎬侊細{}锛屽叆鍑哄簱绫诲瀷锛歿}锛夛紝璺宠繃鏅�氬叆搴撳洖閫�锛屼氦鐢辨嫞鏂欏叆搴撴祦绋嬪鐞�",
+ barcode, pickWrkMast.getWrkNo(), pickWrkMast.getWrkSts(), pickWrkMast.getIoType());
+ continue;
+ }
+
+ // 涓嶆槸鎷f枡鍏ュ簱锛屾墽琛屽洖閫�
staProtocol.setWorkNo(wrkNo);
+ wrkNo++;
staProtocol.setStaNo(inSta.getBackSta().shortValue());
devpThread.setPakMk(staProtocol.getSiteId(), false);
MessageQueue.offer(SlaveType.Devp, devp.getId(), new Task(2, staProtocol));
String errorMsg = jsonObject.getString("msg");
+ log.error("鍏ㄧ増鍏ュ簱鍥為��,"+wrkNo+","+errorMsg);
if (!Cools.isEmpty(errorMsg)) {
MessageQueue.offer(SlaveType.Led, inSta.getLed(), new Task(3, errorMsg));
}
@@ -237,7 +251,6 @@
}
-
}
}
@@ -246,6 +259,7 @@
/**
* 鎷f枡銆佸苟鏉裤�佺洏鐐瑰啀鍏ュ簱
*/
+ @Transactional(rollbackFor = Exception.class)
public synchronized void stnToCrnStnPick(Integer mark) {
for (DevpSlave devp : slaveProperties.getDevp()) {
// 閬嶅巻鎷f枡鍏ュ簱鍙�
@@ -273,31 +287,52 @@
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) {
// 鏃犳嫞鏂欐暟鎹�
continue;
}
- if ((wrkMast.getIoType() != 103 && wrkMast.getIoType() != 104 && wrkMast.getIoType() != 107)
- || Cools.isEmpty(wrkMast.getStaNo()) || Cools.isEmpty(wrkMast.getSourceStaNo())) {
+ // 鍒ゆ柇宸ヤ綔妗g被鍨嬶細鏈浆鎹㈢姸鎬�(103/104/107)鎴栧凡杞崲鐘舵��(53/54/57)
+ boolean isValidIoType = (wrkMast.getIoType() == 103 || wrkMast.getIoType() == 104 || wrkMast.getIoType() == 107)
+ || (wrkMast.getIoType() == 53 || wrkMast.getIoType() == 54 || wrkMast.getIoType() == 57);
+ if (!isValidIoType || Cools.isEmpty(wrkMast.getStaNo()) || Cools.isEmpty(wrkMast.getSourceStaNo())) {
continue;
}
+ // 鍒ゆ柇宸ヤ綔妗f槸鍚﹀凡杞崲锛氬凡杞崲鐘舵��(53/54/57)鎴栨湭杞崲鐘舵��(103/104/107)
+ boolean isConverted = (wrkMast.getIoType() == 53 || wrkMast.getIoType() == 54 || wrkMast.getIoType() == 57);
+
+ // 瀵逛簬宸茶浆鎹㈢姸鎬佺殑宸ヤ綔妗o紝妫�鏌ユ槸鍚﹀凡缁忎笅鍙戣繃锛堥伩鍏嶉噸澶嶅鐞嗭級
+ if (isConverted && staProtocol.getWorkNo() != null && staProtocol.getWorkNo().equals(wrkMast.getWrkNo())) {
+ // 宸ヤ綔鍙峰凡鍖归厤锛岃鏄庡凡缁忎笅鍙戣繃锛岃烦杩�
+ News.info("鎷f枡鍏ュ簱宸ヤ綔妗}宸蹭笅鍙戯紝璺宠繃閲嶅澶勭悊", wrkMast.getWrkNo());
+ continue;
+ }
+
+ Integer typeNo = isConverted ? wrkMast.getIoType() : (wrkMast.getIoType() - 50);
+
// 鑾峰彇鐩爣绔�
Wrapper<StaDesc> wrapper = new EntityWrapper<StaDesc>()
- .eq("type_no", wrkMast.getIoType() - 50)
+ .eq("type_no", typeNo)
.eq("stn_no", pickSta.getStaNo()) // 浣滀笟绔欑偣 = 鎷f枡鍑哄簱鐨勭洰鏍囩珯
.eq("crn_no", wrkMast.getCrnNo()); // 鍫嗗灈鏈哄彿
StaDesc staDesc = staDescService.selectOne(wrapper);
if (Cools.isEmpty(staDesc)) {
- News.error(""+mark+" - 2"+" - 鍏ュ簱璺緞涓嶅瓨鍦紒type_no={},stn_no={},crn_no={}", wrkMast.getIoType(), pickSta.getStaNo(), wrkMast.getCrnNo());
+ News.error(""+mark+" - 2"+" - 鍏ュ簱璺緞涓嶅瓨鍦紒type_no={},stn_no={},crn_no={}", typeNo, pickSta.getStaNo(), wrkMast.getCrnNo());
staProtocol.setWorkNo(wrkNo);
+ wrkNo++;
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 寮傚父鏄剧ず
@@ -308,6 +343,9 @@
continue;
}
+ // 鍫嗗灈鏈虹珯鐐�(鐩爣绔�)
+ Integer staNo = staDesc.getCrnStn();
+
try {
// 淇濆瓨宸ヤ綔鏄庣粏妗e巻鍙叉。
if (wrkMastMapper.saveWrkDetlLog(wrkMast.getWrkNo()) == 0) {
@@ -319,28 +357,32 @@
}
Date now = new Date();
- // 鍫嗗灈鏈虹珯鐐�(鐩爣绔�)
- Integer staNo = staDesc.getCrnStn();
// 鏇存柊宸ヤ綔妗f暟鎹姸鎬�
wrkMast.setIoTime(now);
- wrkMast.setIoType(wrkMast.getIoType() - 50); // 鍏ュ嚭搴撶被鍨�: 103->53,104->54,107->57
- wrkMast.setWrkSts(2L); // 宸ヤ綔鐘舵��: 2.璁惧涓婅蛋
- wrkMast.setSourceStaNo(wrkMast.getStaNo()); // 婧愮珯
- wrkMast.setStaNo(staNo); // 鐩爣绔�
- wrkMast.setLocNo(wrkMast.getSourceLocNo()); // 鐩爣搴撲綅 = 鍑哄簱鏃剁殑婧愬簱浣�
- wrkMast.setSourceLocNo(""); // 婧愬簱浣嶆竻绌�
+ // 濡傛灉鏈浆鎹紝鍒欒浆鎹负鍏ュ簱绫诲瀷锛涘鏋滃凡杞崲锛屽垯淇濇寔涓嶅彉
+ if (!isConverted) {
+ wrkMast.setIoType(wrkMast.getIoType() - 50); // 鍏ュ嚭搴撶被鍨�: 103->53,104->54,107->57
+ wrkMast.setWrkSts(2L); // 宸ヤ綔鐘舵��: 2.璁惧涓婅蛋
+ wrkMast.setSourceStaNo(wrkMast.getStaNo()); // 婧愮珯
+ wrkMast.setStaNo(staNo); // 鐩爣绔�
+ wrkMast.setLocNo(wrkMast.getSourceLocNo()); // 鐩爣搴撲綅 = 鍑哄簱鏃剁殑婧愬簱浣�
+ wrkMast.setSourceLocNo(""); // 婧愬簱浣嶆竻绌�
+ }
+ // 瀵逛簬宸茶浆鎹㈢姸鎬侊紝鍙洿鏂版椂闂达紝涓嶄慨鏀瑰叾浠栧瓧娈碉紙閬垮厤瑕嗙洊宸叉湁淇℃伅锛�
wrkMast.setModiTime(now);
if (wrkMastMapper.updateById(wrkMast) == 0) {
throw new CoolException("鏇存柊宸ヤ綔妗f暟鎹姸鎬佸け璐�");
}
// 鏇存柊鏄庣粏妗o_time (鍘嗗彶妗e叧鑱斾娇鐢級
wrkDetlService.updateIoTime(wrkMast.getWrkNo(), now);
- // 淇敼搴撲綅鐘舵�� Q.鎷f枡/鐩樼偣/骞舵澘鍐嶅叆搴�
+ // 淇敼搴撲綅鐘舵�� Q.鎷f枡/鐩樼偣/骞舵澘鍐嶅叆搴擄紙濡傛灉搴撲綅鐘舵�佷笉鏄疩锛�
LocMast locMast = locMastService.selectById(wrkMast.getLocNo());
- locMast.setLocSts("Q");
- locMast.setModiTime(new Date());
- if (!locMastService.updateById(locMast)) {
- throw new CoolException("淇敼搴撲綅鐘舵�佸け璐�");
+ if (locMast != null && !"Q".equals(locMast.getLocSts())) {
+ locMast.setLocSts("Q");
+ locMast.setModiTime(new Date());
+ if (!locMastService.updateById(locMast)) {
+ throw new CoolException("淇敼搴撲綅鐘舵�佸け璐�");
+ }
}
} catch (Exception e) {
e.printStackTrace();
@@ -348,12 +390,14 @@
continue;
}
- // 鏇存柊绔欑偣淇℃伅 涓� 涓嬪彂plc鍛戒护
+ // 鏇存柊绔欑偣淇℃伅 涓� 涓嬪彂plc鍛戒护锛堝弬鑰冨叏鐗堝叆搴撶殑鏂瑰紡锛�
staProtocol.setWorkNo(wrkMast.getWrkNo());
- staProtocol.setStaNo((short) 161);
+ // 瀵逛簬宸茶浆鎹㈢姸鎬侊紝浣跨敤宸ヤ綔妗d腑宸叉湁鐨勭洰鏍囩珯锛涘浜庢湭杞崲鐘舵�侊紝浣跨敤鏂拌绠楃殑鐩爣绔�
+ Integer targetStaNo = isConverted ? wrkMast.getStaNo() : staNo;
+ staProtocol.setStaNo(targetStaNo.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());
+ log.error("杈撻�佺嚎涓嬪彂5锛�"+wrkMast.getWrkNo()+","+targetStaNo);
if (!result) {
News.error(""+mark+" - 3"+" - 鍙戝竷鍛戒护鑷宠緭閫佺嚎闃熷垪澶辫触锛侊紒锛� [plc缂栧彿锛歿}]", devp.getId());
}
@@ -375,65 +419,87 @@
public synchronized void crnStnToOutStn(Integer mark) {
for (CrnSlave crnSlave : slaveProperties.getCrn()) {
- // 閬嶅巻鍫嗗灈鏈哄嚭搴撶珯
- for (CrnSlave.CrnStn crnStn : crnSlave.getCrnOutStn()) {
- // 鑾峰彇鍫嗗灈鏈哄嚭搴撶珯淇℃伅
- DevpThread devpThread = (DevpThread) SlaveConnection.get(SlaveType.Devp, crnStn.getDevpPlcId());
- StaProtocol staProtocol = devpThread.getStation().get(crnStn.getStaNo());
- if (staProtocol == null) {
- continue;
- } else {
- staProtocol = staProtocol.clone();
- }
- if (staProtocol.isAutoing() && staProtocol.isLoading() && (staProtocol.getWorkNo() == 0 || staProtocol.getStaNo() == null)) {
- // 鏌ヨ宸ヤ綔妗�
- WrkMast wrkMast = wrkMastMapper.selectPakOutStep2(staProtocol.getSiteId());
- if (wrkMast == null) {
- continue;
- }
- // 鍒ゆ柇宸ヤ綔妗f潯浠�
- if (wrkMast.getIoType() < 100 || wrkMast.getStaNo() == null || wrkMast.getSourceStaNo() == null) {
- continue;
- }
- // 鍒ゆ柇鍚婅溅鏄惁瀹為檯宸插畬鎴愶紝涓旂數鑴戠姸鎬佸湪move涓紝浠ュ鐢佃剳杩涜鏇存柊宸ヤ綔妗�
- CrnThread crnThread = (CrnThread) SlaveConnection.get(SlaveType.Crn, wrkMast.getCrnNo());
- CrnProtocol crnProtocol = crnThread.getCrnProtocol();
- if (crnProtocol.statusType == CrnStatusType.FETCHING || crnProtocol.statusType == CrnStatusType.PUTTING) {
- // 绉诲姩涓�
- continue;
- }
- // 鍒ゆ柇鍫嗗灈鏈虹姸鎬佺瓑寰呯‘璁�
- if (crnProtocol.modeType == CrnModeType.AUTO && crnProtocol.getTaskNo().equals(wrkMast.getWrkNo().shortValue())
- && crnProtocol.statusType == CrnStatusType.WAITING
- && crnProtocol.forkPosType == CrnForkPosType.HOME) {
-
- // 鍛戒护涓嬪彂鍖�.鏇存柊宸ヤ綔妗g姸鎬佷负14 涓嬪彂绔欑偣淇℃伅--------------------------------------------------------------------------
- staProtocol.setStaNo(wrkMast.getStaNo().shortValue());
- wrkMast.setWrkSts(14L);
- staProtocol.setWorkNo(wrkMast.getWrkNo());
-
- if (!MessageQueue.offer(SlaveType.Devp, crnStn.getDevpPlcId(), new Task(2, staProtocol))) {
- continue;
- }
- wrkMast.setCrnEndTime(new Date());
- if (wrkMastMapper.updateById(wrkMast) != 0) {
- // 澶嶄綅鍫嗗灈鏈�
- log.info("鍑哄簱浠诲姟瀹屾垚涓嬪彂鍫嗗灈鏈哄浣�,浠诲姟鍙凤細{}",wrkMast.getWrkNo());
- crnThread.setResetFlag(true);
- } else {
- News.error(""+mark+" - 1"+" - 鏇存柊宸ヤ綔妗g殑宸ヤ綔鐘舵�佷负14澶辫触锛侊紒锛� [宸ヤ綔鍙�:{}]", wrkMast.getWrkNo());
- }
-
- }else {
- News.errorNoLog(""+mark+" - 6"+" - 鍫嗗灈鏈轰俊鎭笉绗﹀悎鍏ュ簱鏉′欢锛侊紒锛�"
- +" 鍫嗗灈鏈虹姸鎬侊細"+crnProtocol.modeType+"==鑷姩AUTO锛�" + CrnModeType.AUTO
- +"銆佸爢鍨涙満浠诲姟鍙凤細"+crnProtocol.getTaskNo()+"==宸ヤ綔妗d换鍔″彿锛�" + wrkMast.getWrkNo().shortValue()
- +"銆佺姸鎬佹灇涓撅細"+crnProtocol.statusType+"==WAITING锛�90 //浠诲姟瀹屾垚绛夊緟WCS纭)锛�" + CrnStatusType.WAITING
- +"銆佽揣鍙変綅缃細"+crnProtocol.forkPosType+"==HOME锛�0 // 璐у弶鍘熶綅锛�" + CrnForkPosType.HOME);
- }
-
- }
+ try {
+ // 姣忓彴鍫嗗灈鏈虹殑鎵�鏈夊嚭搴撶珯澶勭悊鍦ㄥ悓涓�涓簨鍔′腑鎵ц锛屽揩閫熸彁浜ら噴鏀鹃攣
+ mainService.processCrnStnToOutStnForCrn(crnSlave, mark);
+ } catch (Exception e) {
+ News.error(""+mark+" - crnStnToOutStn"+" - 澶勭悊鍫嗗灈鏈簕}鏃跺彂鐢熷紓甯�", crnSlave.getId(), e);
+ // 缁х画澶勭悊涓嬩竴鍙板爢鍨涙満锛屼笉涓柇鏁翠釜娴佺▼
}
+ }
+ }
+
+ /**
+ * 澶勭悊鍗曞彴鍫嗗灈鏈虹殑鎵�鏈夊嚭搴撶珯鎿嶄綔锛堜娇鐢ㄧ嫭绔嬩簨鍔★紝蹇�熸彁浜ら噴鏀鹃攣锛�
+ */
+ @Transactional(rollbackFor = Exception.class, propagation = Propagation.REQUIRES_NEW)
+ public void processCrnStnToOutStnForCrn(CrnSlave crnSlave, Integer mark) {
+ // 閬嶅巻鍫嗗灈鏈哄嚭搴撶珯
+ for (CrnSlave.CrnStn crnStn : crnSlave.getCrnOutStn()) {
+ mainService.processCrnStnToOutStn(crnStn, mark);
+ }
+ }
+
+ /**
+ * 澶勭悊鍗曚釜鍫嗗灈鏈哄嚭搴撶珯鐨勫嚭搴撴搷浣滐紙鏃犱簨鍔★紝浜嬪姟鐢变笂灞傛柟娉曠鐞嗭級
+ */
+ private void processCrnStnToOutStn(CrnSlave.CrnStn crnStn, Integer mark) {
+ // 鑾峰彇鍫嗗灈鏈哄嚭搴撶珯淇℃伅
+ DevpThread devpThread = (DevpThread) SlaveConnection.get(SlaveType.Devp, crnStn.getDevpPlcId());
+ StaProtocol staProtocol = devpThread.getStation().get(crnStn.getStaNo());
+ if (staProtocol == null) {
+ return;
+ } else {
+ staProtocol = staProtocol.clone();
+ }
+ if (staProtocol.isAutoing() && staProtocol.isLoading() && (staProtocol.getWorkNo() == 0 || staProtocol.getStaNo() == null)) {
+ // 鏌ヨ宸ヤ綔妗�
+ WrkMast wrkMast = wrkMastMapper.selectPakOutStep2(staProtocol.getSiteId());
+ if (wrkMast == null) {
+ return;
+ }
+ // 鍒ゆ柇宸ヤ綔妗f潯浠�
+ if (wrkMast.getIoType() < 100 || wrkMast.getStaNo() == null || wrkMast.getSourceStaNo() == null) {
+ return;
+ }
+ // 鍒ゆ柇鍚婅溅鏄惁瀹為檯宸插畬鎴愶紝涓旂數鑴戠姸鎬佸湪move涓紝浠ュ鐢佃剳杩涜鏇存柊宸ヤ綔妗�
+ CrnThread crnThread = (CrnThread) SlaveConnection.get(SlaveType.Crn, wrkMast.getCrnNo());
+ CrnProtocol crnProtocol = crnThread.getCrnProtocol();
+ if (crnProtocol.statusType == CrnStatusType.FETCHING || crnProtocol.statusType == CrnStatusType.PUTTING) {
+ // 绉诲姩涓�
+ return;
+ }
+ // 鍒ゆ柇鍫嗗灈鏈虹姸鎬佺瓑寰呯‘璁�
+ if (crnProtocol.modeType == CrnModeType.AUTO && crnProtocol.getTaskNo().equals(wrkMast.getWrkNo().shortValue())
+ && crnProtocol.statusType == CrnStatusType.WAITING
+ && crnProtocol.forkPosType == CrnForkPosType.HOME) {
+
+ // 鍛戒护涓嬪彂鍖�.鏇存柊宸ヤ綔妗g姸鎬佷负14 涓嬪彂绔欑偣淇℃伅--------------------------------------------------------------------------
+ staProtocol.setStaNo(wrkMast.getStaNo().shortValue());
+ wrkMast.setWrkSts(14L);
+ staProtocol.setWorkNo(wrkMast.getWrkNo());
+
+ if (!MessageQueue.offer(SlaveType.Devp, crnStn.getDevpPlcId(), new Task(2, staProtocol))) {
+ return;
+ }
+ wrkMast.setCrnEndTime(new Date());
+ if (wrkMastMapper.updateById(wrkMast) != 0) {
+ // 澶嶄綅鍫嗗灈鏈�
+ News.info("鍑哄簱浠诲姟瀹屾垚涓嬪彂鍫嗗灈鏈哄浣�,浠诲姟鍙凤細{}",wrkMast.getWrkNo());
+ crnThread.setResetFlag(true);
+ } else {
+ News.error(""+mark+" - 1"+" - 鏇存柊宸ヤ綔妗g殑宸ヤ綔鐘舵�佷负14澶辫触锛侊紒锛� [宸ヤ綔鍙�:{}]", wrkMast.getWrkNo());
+ throw new CoolException("鏇存柊宸ヤ綔妗g殑宸ヤ綔鐘舵�佷负14澶辫触");
+ }
+
+ }else {
+ News.errorNoLog(""+mark+" - 6"+" - 鍫嗗灈鏈轰俊鎭笉绗﹀悎鍏ュ簱鏉′欢锛侊紒锛�"
+ +" 鍫嗗灈鏈虹姸鎬侊細"+crnProtocol.modeType+"==鑷姩AUTO锛�" + CrnModeType.AUTO
+ +"銆佸爢鍨涙満浠诲姟鍙凤細"+crnProtocol.getTaskNo()+"==宸ヤ綔妗d换鍔″彿锛�" + wrkMast.getWrkNo().shortValue()
+ +"銆佺姸鎬佹灇涓撅細"+crnProtocol.statusType+"==WAITING锛�10 //浠诲姟瀹屾垚绛夊緟WCS纭)锛�" + CrnStatusType.WAITING
+ +"銆佽揣鍙変綅缃細"+crnProtocol.forkPosType+"==HOME锛�0 // 璐у弶鍘熶綅锛�" + CrnForkPosType.HOME);
+ }
+
}
}
@@ -454,6 +520,11 @@
News.error(""+mark+" - 1"+" - {}鍙峰爢鍨涙満灏氭湭鍦ㄦ暟鎹簱杩涜缁存姢锛�", crn.getId());
continue;
}
+
+// //鍫嗗灈鏈哄洖鍘熺偣浠诲姟涓�
+// if(crnThread.isBackHpFlag()){
+// continue;
+// }
// 鍙湁褰撳爢鍨涙満绌洪棽 骞朵笖 鏃犱换鍔℃椂鎵嶇户缁墽琛�
if (crnProtocol.getStatusType() == CrnStatusType.IDLE && crnProtocol.getTaskNo() == 0 && crnProtocol.getModeType() == CrnModeType.AUTO
@@ -485,8 +556,10 @@
// 搴撲綅绉昏浆
//mark - 3 - ....
this.locToLoc(crn, crnProtocol,mark);
+// this.crnRebackHp(crnProtocol, crnThread);
}
+// News.infoNoLog(""+mark+" - 0"+" - 鍫嗗灈鏈哄叆鍑哄簱浣滀笟涓嬪彂鎵ц瀹屾垚");
}
/**
@@ -575,13 +648,12 @@
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);
+
+ if (moveLocForDeepLoc(slave, shallowLoc,mark)){
+ wrkMast.setUpdMk("Y");
+ wrkMast.setIoPri(14D);
+ wrkMastMapper.updateById(wrkMast);
+ }
}
continue;
} else if (shallowLoc.getLocSts().equals("Q")) {
@@ -622,6 +694,10 @@
if (wrkMastMapper.updateById(wrkMast) == 0) {
News.error(""+mark+" - 1"+" - 17"+" - 淇敼宸ヤ綔妗g姸鎬� 2.璁惧涓婅蛋 => 3.鍚婅溅鍏ュ簱涓� 澶辫触锛侊紒锛屽伐浣滃彿={}", wrkMast.getWrkNo());
}
+ // 鍏ュ簱鏆傚瓨鏁�-1
+ int sourceStaNo = wrkMast.getSourceStaNo();
+ sourceStaNo = (sourceStaNo > 1024) ? sourceStaNo + 1 : sourceStaNo - 1;
+ basDevpMapper.decrementInQty(sourceStaNo);
}
}
News.infoNoLog(""+mark+" - 1"+" - 0"+" - 鍫嗗灈鏈哄叆鍑哄簱浣滀笟涓嬪彂 锛� 鍏ュ簱鎵ц瀹屾瘯");
@@ -670,9 +746,25 @@
// continue;
}
- // 鍒ゆ柇鍫嗗灈鏈哄嚭搴撶珯鐘舵��
- if (staProtocol.isAutoing() && staProtocol.isLoading() && staDetl.getCanouting() != null && staDetl.getCanouting().equals("Y")
- && staProtocol.getWorkNo() == 0 && staProtocol.isOutEnable()) {
+ boolean outStationAvailable = true;
+ // 鏄惁妫�鏌ュ爢鍨涙満鍑哄簱绔欑姸鎬侊紙true: 妫�鏌ワ紝false: 涓嶆鏌ワ級
+ if (slaveProperties.isCheckOutStationStatus()) {
+ // 妫�鏌ュ嚭搴撶珯鐘舵��
+ outStationAvailable =
+ //鑷姩
+ staProtocol.isAutoing()
+ //!鏈夌墿
+ && !staProtocol.isLoading()
+ //鑳藉嚭
+ && staDetl.getCanouting() != null
+ && staDetl.getCanouting().equals("Y")
+ //宸ヤ綔鍙�
+ && staProtocol.getWorkNo() == 0
+ //鍙嚭
+ && staProtocol.isOutEnable();
+ }
+ // 鍑哄簱绔欏彲鐢ㄦ椂缁х画鎵ц
+ if (outStationAvailable) {
// 鍫嗗灈鏈烘帶鍒惰繃婊�
if (!crnProtocol.getStatusType().equals(CrnStatusType.IDLE) || crnProtocol.getTaskNo() != 0) {
// continue;
@@ -711,10 +803,10 @@
// 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);
+ if (moveLocForDeepLoc(slave, shallowLoc,mark)){
+ wrkMast.setUpdMk("Y");
+ wrkMastMapper.updateById(wrkMast);
+ }
}
News.error("{}浠诲姟鍑哄簱澶辫触锛屾祬搴撲綅鍫靛锛佹祬搴撲綅鍙�:{}", wrkMast.getWrkNo(), shallowLocNo);
break;
@@ -796,7 +888,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;
}
@@ -875,9 +967,16 @@
continue;
}
// 鍏ュ簱 + 搴撲綅杞Щ ==> 4.鍏ュ簱瀹屾垚
- if (wrkMast.getWrkSts() == 3 || (wrkMast.getWrkSts() == 12 && wrkMast.getIoType() == 11)) {
+ // 鏀寔鏅�氬叆搴�(io_type=1/10)鍜屾嫞鏂欏叆搴�(io_type=53/54/57)鐨勭姸鎬�3瀹屾垚纭
+ // 鏀寔搴撲綅绉昏浆(io_type=11)鐨勭姸鎬�12瀹屾垚纭
+ boolean canFinish = (wrkMast.getWrkSts() == 3) || (wrkMast.getWrkSts() == 12 && wrkMast.getIoType() == 11);
+ if (canFinish) {
+ News.info(""+mark+" - 1"+" - 鍏ュ簱浠诲姟瀹屾垚纭锛氬伐浣滃彿={}锛屽伐浣滅姸鎬�={}锛屽叆鍑哄簱绫诲瀷={}锛屽崟鎹紪鍙�={}锛屾墭鐩樼爜={}",
+ wrkMast.getWrkNo(), wrkMast.getWrkSts(), wrkMast.getIoType(), wrkMast.getSheetNo(), wrkMast.getBarcode());
wrkMast.setWrkSts(4L);
} else {
+ News.warn(""+mark+" - 1"+" - 鍏ュ簱浠诲姟鐘舵�佷笉绗﹀悎瀹屾垚鏉′欢锛氬伐浣滃彿={}锛屽伐浣滅姸鎬�={}锛屽叆鍑哄簱绫诲瀷={}锛屽崟鎹紪鍙�={}锛岃烦杩�",
+ wrkMast.getWrkNo(), wrkMast.getWrkSts(), wrkMast.getIoType(), wrkMast.getSheetNo());
continue;
}
Date now = new Date();
@@ -888,6 +987,13 @@
// 鍫嗗灈鏈哄浣�
News.warnNoLog(""+mark+" - 2"+" - 淇敼鎴愬姛鍚庡浣嶅爢鍨涙満 : 鍫嗗灈鏈哄彿={}",crnThread.getCrnProtocol().getCrnNo());
crnThread.setResetFlag(true);
+
+ // 瀵逛簬鎷f枡鍏ュ簱锛坕o_type=53/54/57锛夛紝璁板綍瀹屾垚淇℃伅锛屾柟渚縒MS绯荤粺鏌ヨ璁㈠崟鐘舵��
+ if (wrkMast.getIoType() == 53 || wrkMast.getIoType() == 54 || wrkMast.getIoType() == 57) {
+ News.info(""+mark+" - 2"+" - 銆愭嫞鏂欏叆搴撳畬鎴愩�戝伐浣滃彿={}锛屽叆鍑哄簱绫诲瀷={}锛屽伐浣滅姸鎬�={}锛屽崟鎹紪鍙�={}锛屾墭鐩樼爜={}锛屽簱浣嶅彿={}锛屽畬鎴愭椂闂�={}",
+ wrkMast.getWrkNo(), wrkMast.getIoType(), wrkMast.getWrkSts(),
+ wrkMast.getSheetNo(), wrkMast.getBarcode(), wrkMast.getLocNo(), now);
+ }
}
}
@@ -907,13 +1013,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 +1052,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 +1062,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,14 +1071,14 @@
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());
String errName = crnError == null ? String.valueOf(crnProtocol.getAlarm()) : crnError.getErrName();
BasErrLog basErrLog = new BasErrLog(
null, // 缂栧彿
- null, // 宸ヤ綔鍙�
+ crnProtocol.getTaskNo().intValue(), // 宸ヤ綔鍙�
now, // 鍙戠敓鏃堕棿
null, // 缁撴潫鏃堕棿
null, // 宸ヤ綔鐘舵��
@@ -993,7 +1100,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,17 +1111,19 @@
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());
}
}
}
}
+ }
}
}
/**
* 绌烘爤鏉垮垵濮嬪寲鍏ュ簱,鍙夎溅鍏ュ簱绔欐斁璐�
*/
+ @Transactional(rollbackFor = Exception.class)
public synchronized void storeEmptyPlt(Integer mark) {
for (DevpSlave devp : slaveProperties.getDevp()) {
@@ -1039,13 +1148,13 @@
}
// 绔欑偣鏉′欢鍒ゆ柇
- if (staProtocol.isAutoing()
- && staProtocol.isLoading()
- && staProtocol.isInEnable()
- && staProtocol.isEmptyMk()
- && staProtocol.isPakMk()
- && (staProtocol.getWorkNo() !=0 && staProtocol.getWorkNo() > 9700)
- ) {
+ if (staProtocol.isAutoing() //鑷姩
+ && staProtocol.isLoading() //鏈夌墿
+ && staProtocol.isInEnable() //鍙叆
+ && staProtocol.isEmptyMk()// 绌烘澘
+ && staProtocol.isPakMk() //闃叉閲嶅涓嬪彂淇″彿 绔欑偣鏃犵墿 鏃犱换鍔″彿浼氳嚜鍔ㄥ彉鎴恡rue
+
+ ) {
News.warnNoLog(""+mark+" - 0"+" - 寮�濮嬫墽琛岋細绌烘爤鏉垮垵濮嬪寲鍏ュ簱,鍙夎溅鍏ュ簱绔欐斁璐�");
try {
@@ -1067,7 +1176,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());
@@ -1083,7 +1192,7 @@
LedCommand ledCommand = new LedCommand();
ledCommand.setWorkNo(dto.getWorkNo());
ledCommand.setIoType(1);
- ledCommand.setTitle("鍏ㄦ澘鍏ュ簱");
+ ledCommand.setTitle("绌烘澘鍏ュ簱");
ledCommand.setLocNo(dto.getLocNo());
ledCommand.setStaNo(dto.getStaNo());
commands.add(ledCommand);
@@ -1091,17 +1200,20 @@
// ledThread.errorReset();
}
} else {
- staProtocol.setWorkNo(wrkNo++);
+ staProtocol.setWorkNo(wrkNo);
+ wrkNo++;
staProtocol.setStaNo(emptyInSta.getBackSta().shortValue());
devpThread.setPakMk(staProtocol.getSiteId(), false);
boolean result = MessageQueue.offer(SlaveType.Devp, devp.getId(), new Task(2, staProtocol));
+ String errorMsg = jsonObject.getString("msg");
+ log.error("绌烘澘鍏ュ簱鍥為��"+wrkNo+","+errorMsg);
if (!result) {
News.errorNoLog(""+mark+" - 2"+" - 鏇存柊plc绔欑偣淇℃伅澶辫触");
throw new CoolException("鏇存柊plc绔欑偣淇℃伅澶辫触");
}
if (ledThread != null) {
- String errorMsg = jsonObject.getString("msg");
+
if (!Cools.isEmpty(errorMsg)) {
MessageQueue.offer(SlaveType.Led, emptyInSta.getLed(), new Task(3, errorMsg));
}
@@ -1123,9 +1235,178 @@
}
/**
+ * 杈撻�佺嚎寮傚父
+ */
+ 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)) {
+ News.error("杈撻�佺嚎寮傚父淇℃伅鎻掑叆琛╝sr_bas_devp_err_log寮傚父锛歿}", basErrLog);
+ }
+ }
+ } else {
+ // 寮傚父淇
+ if (plcErr.equals("")) {
+ latestByTaskNo.setEndTime(now);
+ latestByTaskNo.setUpdateTime(now);
+ latestByTaskNo.setStatus(2);
+ if (!basDevpErrLogService.updateById(latestByTaskNo)) {
+ News.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, // 缂栧彿
+ staProtocol.getWorkNo(), // 宸ヤ綔鍙�
+ now, // 鍙戠敓鏃堕棿
+ null, // 缁撴潫鏃堕棿
+ null, // 宸ヤ綔鐘舵��
+ null, // 鍏ュ嚭搴撶被鍨�
+ 0, // 鍫嗗灈鏈�
+ devpId, // plc
+ null, // 鐩爣搴撲綅
+ null, // 鐩爣绔�
+ siteNo, // 婧愮珯
+ null, // 婧愬簱浣�
+ null, // 鏉$爜
+ 0, // 寮傚父鐮�
+ plcErr, // 寮傚父
+ 1, // 寮傚父鎯呭喌
+ now, // 娣诲姞鏃堕棿
+ null, // 娣诲姞浜哄憳
+ now, // 淇敼鏃堕棿
+ null, // 淇敼浜哄憳
+ "鏃犱换鍔″紓甯�" // 澶囨敞
+ );
+ if (!basDevpErrLogService.insert(basErrLog)) {
+ News.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)) {
+ News.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 "";
+ }
+
+ /**
* 鍑哄簱 ===>> 宸ヤ綔妗d俊鎭啓鍏ed鏄剧ず鍣�
*/
- public synchronized void ledExecute(Integer mark) {
+ @Transactional(rollbackFor = Exception.class)
+ public synchronized void ledExecute() {
for (LedSlave led : slaveProperties.getLed()) {
// 鑾峰彇杈撻�佺嚎plc绾跨▼
DevpThread devpThread = (DevpThread) SlaveConnection.get(SlaveType.Devp, led.getDevpPlcId());
@@ -1177,32 +1458,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);
}
@@ -1269,17 +1534,29 @@
}
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());
}
}
}
}
- /**
- * 鍥犲弻娣卞簱浣嶉樆濉烇紝瀵规祬搴撲綅杩涜绉昏浆锛堢珛鍗虫墽琛岀増)
- * tip锛氬悓姝�
- */
- private synchronized void moveLocForDeepLoc(CrnSlave crn, LocMast shallowLoc,Integer mark) {
+ public synchronized void forwardAGVInTasks() {
+ List<Integer> workNos = new ArrayList<>();
+ for (DevpSlave devp : slaveProperties.getDevp()) {
+ SiemensDevpThread devpThread = (SiemensDevpThread) SlaveConnection.get(SlaveType.Devp, devp.getId());
+ for (DevpSlave.Sta agvSta : devp.getOutSta()) {
+ StaProtocol staProtocol = devpThread.getStation().get(agvSta.getStaNo());
+ if (staProtocol != null && staProtocol.getWorkNo() != 0) {
+ workNos.add(staProtocol.getWorkNo());
+ }
+ }
+ }
+ if (!workNos.isEmpty()) {
+ wrkMastMapper.updateCallAgvBatch(workNos);
+ }
+ }
+
+ private synchronized boolean moveLocForDeepLoc(CrnSlave crn, LocMast shallowLoc,Integer mark) {
try {
News.warnNoLog(""+mark+"moveLocForDeepLoc"+" - 0"+" - 寮�濮嬫墽琛�:鍥犲弻娣卞簱浣嶉樆濉烇紝瀵规祬搴撲綅杩涜绉昏浆锛堢珛鍗虫墽琛岀増)");
@@ -1306,7 +1583,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());
@@ -1326,8 +1603,8 @@
if (null == loc) {
News.error(""+mark+"moveLocForDeepLoc"+" - 1"+" - 鍙屾繁搴撲綅 --- 娴呭簱浣嶉樆濉炲紓甯革紒 寰呯Щ杞祬搴撲綅锛�" + shallowLoc.getLocNo());
// throw new CoolException("鍙屾繁搴撲綅 --- 娴呭簱浣嶉樆濉炲紓甯革紒 寰呯Щ杞祬搴撲綅锛�" + shallowLoc.getLocNo());
- } else {
-
+ return false;
+ }else {
// 鑾峰彇宸ヤ綔鍙�
int workNo = commonService.getWorkNo(0);
// 淇濆瓨宸ヤ綔妗�
@@ -1340,7 +1617,7 @@
wrkMast.setCrnNo(crn.getId());
wrkMast.setSourceLocNo(shallowLoc.getLocNo()); // 婧愬簱浣�
wrkMast.setLocNo(loc.getLocNo()); // 鐩爣搴撲綅
- wrkMast.setFullPlt(shallowLoc.getFullPlt()); // 婊℃澘
+ wrkMast.setFullPlt(shallowLoc.getLocSts().equals("F") ? "Y" : "N"); // 婊℃澘锛歒
wrkMast.setPicking("N"); // 鎷f枡
wrkMast.setExitMk("N"); // 閫�鍑�
wrkMast.setEmptyMk(shallowLoc.getLocSts().equals("D") ? "Y" : "N"); // 绌烘澘
@@ -1350,7 +1627,7 @@
wrkMast.setModiTime(new Date());
int res = wrkMastMapper.insert(wrkMast);
if (res == 0) {
- News.errorNoLog("" + mark + "moveLocForDeepLoc" + " - 2" + " - 淇濆瓨宸ヤ綔妗eけ璐�");
+ News.errorNoLog(""+mark+"moveLocForDeepLoc"+" - 2"+" - 淇濆瓨宸ヤ綔妗eけ璐�");
throw new CoolException("淇濆瓨宸ヤ綔妗eけ璐�");
}
// 宸ヤ綔妗f槑缁嗕繚瀛�
@@ -1365,7 +1642,7 @@
wrkDetl.setAppeTime(new Date());
wrkDetl.setModiTime(new Date());
if (!wrkDetlService.insert(wrkDetl)) {
- News.errorNoLog("" + mark + "moveLocForDeepLoc" + " - 3" + " - 淇濆瓨宸ヤ綔妗f槑缁嗗け璐�");
+ News.errorNoLog(""+mark+"moveLocForDeepLoc"+" - 3"+" - 淇濆瓨宸ヤ綔妗f槑缁嗗け璐�");
throw new CoolException("淇濆瓨宸ヤ綔妗f槑缁嗗け璐�");
}
}
@@ -1375,11 +1652,11 @@
shallowLoc.setLocSts("R"); // R.鍑哄簱棰勭害
shallowLoc.setModiTime(new Date());
if (!locMastService.updateById(shallowLoc)) {
- News.errorNoLog("" + mark + "moveLocForDeepLoc" + " - 4" + " - 鏇存柊婧愬簱浣嶇姸鎬佸け璐�");
+ News.errorNoLog(""+mark+"moveLocForDeepLoc"+" - 4"+" - 鏇存柊婧愬簱浣嶇姸鎬佸け璐�");
throw new CoolException("鏇存柊婧愬簱浣嶇姸鎬佸け璐�");
}
} else {
- News.errorNoLog("" + mark + "moveLocForDeepLoc" + " - 5" + " - 婧愬簱浣嶅嚭搴撳け璐�");
+ News.errorNoLog(""+mark+"moveLocForDeepLoc"+" - 5"+" - 婧愬簱浣嶅嚭搴撳け璐�");
throw new CoolException("婧愬簱浣嶅嚭搴撳け璐�");
}
// 淇敼鐩爣搴撲綅鐘舵��
@@ -1387,19 +1664,21 @@
loc.setLocSts("S"); // S.鍏ュ簱棰勭害
loc.setModiTime(new Date());
if (!locMastService.updateById(loc)) {
- News.errorNoLog("" + mark + "moveLocForDeepLoc" + " - 6" + " - 鏇存柊鐩爣搴撲綅鐘舵�佸け璐�");
+ News.errorNoLog(""+mark+"moveLocForDeepLoc"+" - 6"+" - 鏇存柊鐩爣搴撲綅鐘舵�佸け璐�");
throw new CoolException("鏇存柊鐩爣搴撲綅鐘舵�佸け璐�");
}
} else {
- News.errorNoLog("" + mark + "moveLocForDeepLoc" + " - 7" + " - 绉昏浆澶辫触");
+ News.errorNoLog(""+mark+"moveLocForDeepLoc"+" - 7"+" - 绉昏浆澶辫触");
throw new CoolException("绉昏浆澶辫触");
}
}
+
} catch (Exception e) {
News.error(""+mark+"moveLocForDeepLoc"+" - 8"+" - 鍙屾繁搴撲綅闃诲锛屽娴呭簱浣嶈繘琛岀Щ杞け璐�", e);
- e.printStackTrace();
TransactionAspectSupport.currentTransactionStatus().setRollbackOnly();
+ return false;
}
+ return true;
}
/**
@@ -1423,4 +1702,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() == 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.setTaskMode(CrnTaskModeType.GO_ORIGIN); // 浠诲姟妯″紡: 鍥炲師鐐�
+ crnCommand.setSourcePosX((short) (crn.getId() == 1 ? 3 : 6)); // 婧愬簱浣嶆帓
+ crnCommand.setSourcePosY((short) 1); // 婧愬簱浣嶅垪
+ 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