From f7bcd87b19bf265d0fa157f110632d6b661ec22d Mon Sep 17 00:00:00 2001
From: LSH
Date: 星期一, 25 九月 2023 15:25:03 +0800
Subject: [PATCH] #
---
src/main/java/com/zy/core/model/DevpSlave.java | 4
src/main/java/com/zy/asrs/utils/RouteUtils.java | 24 ++
src/main/java/com/zy/asrs/service/impl/MainServiceImpl.java | 392 +++++++++++++++++++++++++++++++++++++++++--
src/main/java/com/zy/asrs/mapper/WrkMastMapper.java | 8
src/main/resources/mapper/WrkMastMapper.xml | 31 +++
src/main/java/com/zy/core/MainProcess.java | 5
src/main/resources/application.yml | 37 ++++
7 files changed, 476 insertions(+), 25 deletions(-)
diff --git a/src/main/java/com/zy/asrs/mapper/WrkMastMapper.java b/src/main/java/com/zy/asrs/mapper/WrkMastMapper.java
index 887a810..b9b6e3f 100644
--- a/src/main/java/com/zy/asrs/mapper/WrkMastMapper.java
+++ b/src/main/java/com/zy/asrs/mapper/WrkMastMapper.java
@@ -255,6 +255,14 @@
WrkMast selectWrkMastLabelingOne54();
+ List<WrkMast> selectWaitBindRGVRgvNo(@Param("rgvNo") Integer rgvNo);
+ List<WrkMast> selectWaitBindRgvNo2(@Param("rgvNo") Integer rgvNo);
+ void insertRgvMast(@Param("wrkNo") Integer wrkNo);
+ void updateRgvMast(@Param("wrkNo") Integer wrkNo);
+
+ WrkMast selectWaitBindRgvNoOneWrkNo(@Param("wrkNo") Integer wrkNo);
+
+
/*..............................涓婇ザ姹熼摐..............浠ヤ笂.............寰愬伐姹変簯..............................*/
diff --git a/src/main/java/com/zy/asrs/service/impl/MainServiceImpl.java b/src/main/java/com/zy/asrs/service/impl/MainServiceImpl.java
index 5cb274b..e3dfe47 100644
--- a/src/main/java/com/zy/asrs/service/impl/MainServiceImpl.java
+++ b/src/main/java/com/zy/asrs/service/impl/MainServiceImpl.java
@@ -580,27 +580,145 @@
return null;
}
+// /**
+// * 缁戝畾灏忚溅鏂规硶
+// */
+// public synchronized void rgvBindSte() {
+// //鑾峰彇绛夊緟缁戝畾RGV鐨勪换鍔�
+// List<WrkMast> wrkMasts = wrkMastMapper.selectWaitBindRGV();
+// for (WrkMast wrkMast : wrkMasts) {
+// //鐩爣绔�
+// Integer staNo = wrkMast.getStaNo();
+// //婧愮珯
+// Integer sourceStaNo = wrkMast.getSourceStaNo();
+// //閫氳繃鐩爣绔欐悳绱gv鍙�
+// Integer rgvNo=0;
+// if (wrkMast.getCrnNo()==1){
+// rgvNo=1;
+// }else if (wrkMast.getCrnNo()==6){
+// rgvNo=2;
+// }else {
+// rgvNo = this.searchRgvNo(staNo);
+// }
+// if (rgvNo == null || rgvNo==0) {//鏈壘鍒板彲鐢ㄧ殑rgv
+// continue;
+// }
+//
+// wrkMast.setRgvNo(rgvNo);//缁戝畾rgv鍙�
+// wrkMast.setRgvDstaNo(wrkMast.getSourceStaNo());//璁剧疆RGV鍓嶅線宸ヤ綔妗f簮绔欏彇璐�
+// if (wrkMastMapper.updateById(wrkMast)==0){
+// log.error("缁戝畾灏忚溅鏇存柊宸ヤ綔妗eけ璐ワ紒锛侊紒 [宸ヤ綔鍙凤細{}]", wrkMast.getWrkNo());
+// }
+// }
+// }
+
/**
* 缁戝畾灏忚溅鏂规硶
*/
public synchronized void rgvBindSte() {
- //鑾峰彇绛夊緟缁戝畾RGV鐨勪换鍔�
- List<WrkMast> wrkMasts = wrkMastMapper.selectWaitBindRGV();
- for (WrkMast wrkMast : wrkMasts) {
- //鐩爣绔�
- Integer staNo = wrkMast.getStaNo();
- //婧愮珯
- Integer sourceStaNo = wrkMast.getSourceStaNo();
- //閫氳繃鐩爣绔欐悳绱gv鍙�
- Integer rgvNo = this.searchRgvNo(staNo);
- if (rgvNo == null) {//鏈壘鍒板彲鐢ㄧ殑rgv
+ try {
+ // 鏍规嵁杈撻�佺嚎plc閬嶅巻
+ for (DevpSlave devp : slaveProperties.getDevp()) {
+ if (devp.getId()==2){
+ continue;
+ }
+ SiemensDevpThread devpThread = (SiemensDevpThread) SlaveConnection.get(SlaveType.Devp, devp.getId());
+ //鍏ュ簱缁戝皬杞�
+ for (DevpSlave.Sta Sta : devp.getInRgvSta()) {
+ StaProtocol staProtocol = devpThread.getStation().get(Sta.getStaNo());
+ if (staProtocol == null) {
+ continue;
+ } else {
+ staProtocol = staProtocol.clone();
+ }
+ if (staProtocol.isAutoing() && staProtocol.isLoading() && staProtocol.getWorkNo() != 0 && staProtocol.getWorkNo() < 9990){
+ List<WrkMast> wrkMasts = wrkMastMapper.selectList(new EntityWrapper<WrkMast>().eq("wrk_no", staProtocol.getWorkNo()).eq("wrk_sts", 2L));
+ if (Cools.isEmpty(wrkMasts) || wrkMasts.size()!=1){
+ continue;
+ }
+ WrkMast wrkMast = wrkMasts.get(0);
+ //鐩爣绔�
+ Integer staNo = wrkMast.getStaNo();
+ //閫氳繃鐩爣绔欐悳绱gv鍙�
+ Integer rgvNo=0;
+ if (wrkMast.getCrnNo()==1){
+ rgvNo=1;
+ }else if (wrkMast.getCrnNo()==6){
+ rgvNo=2;
+ }else {
+ rgvNo = this.searchRgvNo(staNo);
+ }
+ if (rgvNo == null || rgvNo==0) {//鏈壘鍒板彲鐢ㄧ殑rgv
+ continue;
+ }
+ wrkMast.setRgvNo(rgvNo);//缁戝畾rgv鍙�
+ if (wrkMastMapper.updateById(wrkMast)==0){
+ log.error("缁戝畾灏忚溅鏇存柊宸ヤ綔妗eけ璐ワ紒锛侊紒 [宸ヤ綔鍙凤細{}]", wrkMast.getWrkNo());
+ }
+ }
+ }
+ //鍑哄簱缁戝皬杞�
+ for (DevpSlave.Sta Sta : devp.getOutRgvSta()) {
+ StaProtocol staProtocol = devpThread.getStation().get(Sta.getStaNo());
+ if (staProtocol == null) {
+ continue;
+ } else {
+ staProtocol = staProtocol.clone();
+ }
+ if (staProtocol.isAutoing() && staProtocol.isLoading() && staProtocol.getWorkNo() != 0 && staProtocol.getWorkNo() < 9990){
+ List<WrkMast> wrkMasts = wrkMastMapper.selectList(new EntityWrapper<WrkMast>().eq("wrk_no", staProtocol.getWorkNo()).eq("wrk_sts", 14L));
+ if (Cools.isEmpty(wrkMasts) || wrkMasts.size()!=1){
+ continue;
+ }
+ WrkMast wrkMast = wrkMasts.get(0);
+ //鐩爣绔�
+ Integer staNo = wrkMast.getStaNo();
+ //閫氳繃鐩爣绔欐悳绱gv鍙�
+ Integer rgvNo=0;
+ if (wrkMast.getCrnNo()==1){
+ rgvNo=1;
+ }else if (wrkMast.getCrnNo()==6){
+ rgvNo=2;
+ }else {
+ rgvNo = this.searchRgvNo(staNo);
+ }
+ if (rgvNo == null || rgvNo==0) {//鏈壘鍒板彲鐢ㄧ殑rgv
+ continue;
+ }
+ wrkMast.setRgvNo(rgvNo);//缁戝畾rgv鍙�
+ if (wrkMastMapper.updateById(wrkMast)==0){
+ log.error("缁戝畾灏忚溅鏇存柊宸ヤ綔妗eけ璐ワ紒锛侊紒 [宸ヤ綔鍙凤細{}]", wrkMast.getWrkNo());
+ }
+ }
+ }
+ }
+ }catch (Exception e){
+ log.error("缁戝畾灏忚溅寮傚父锛歿}", e.getMessage());
+ }
+ }
+
+ /**
+ * 缁戝畾灏忚溅鏂规硶
+ */
+ public synchronized void rgvBindSte2() {
+ for (RgvSlave rgv : slaveProperties.getRgv()) {
+ List<WrkMast> wrkMasts = wrkMastMapper.selectWaitBindRGVRgvNo(rgv.getId());
+ if (!Cools.isEmpty(wrkMasts) && wrkMasts.size()!=0){
continue;
}
-
- wrkMast.setRgvNo(rgvNo);//缁戝畾rgv鍙�
- wrkMast.setRgvDstaNo(wrkMast.getSourceStaNo());//璁剧疆RGV鍓嶅線宸ヤ綔妗f簮绔欏彇璐�
- if (wrkMastMapper.updateById(wrkMast)==0){
- log.error("缁戝畾灏忚溅鏇存柊宸ヤ綔妗eけ璐ワ紒锛侊紒 [宸ヤ綔鍙凤細{}]", wrkMast.getWrkNo());
+ List<WrkMast> wrkMasts2 = wrkMastMapper.selectWaitBindRgvNo2(rgv.getId());
+ for (WrkMast wrkMast : wrkMasts2) {
+ if (wrkMastMapper.selectWaitBindRgvNoOneWrkNo(wrkMast.getWrkNo())!=null){
+ continue;
+ }
+ //鐩爣绔�
+ BasDevp basDevp = basDevpService.selectById(wrkMast.getRgvDstaNo());
+ if (Cools.isEmpty(basDevp) || !basDevp.getAutoing().equals("Y") || !basDevp.getLoading().equals("N") || basDevp.getWrkNo()!=0){
+ continue;
+ }
+ wrkMastMapper.insertRgvMast(wrkMast.getWrkNo());
+ wrkMastMapper.updateRgvMast(wrkMast.getWrkNo());
+ break;
}
}
}
@@ -608,7 +726,7 @@
/**
* 鍏ュ嚭搴� ===>> RGV鍏ュ嚭搴撲綔涓氫笅鍙�
*/
- public synchronized void rgvIoExecute() {
+ public synchronized void rgvIoExecuteOld() {
for (RgvSlave rgv : slaveProperties.getRgv()) {
// 鑾峰彇RGV淇℃伅
RgvThread rgvThread = (RgvThread) SlaveConnection.get(SlaveType.Rgv, rgv.getId());
@@ -627,12 +745,102 @@
&& rgvProtocol.getModeType() == RgvModeType.AUTO
// && rgvProtocol.getTaskNo1() == 0 && rgvProtocol.getTaskNo2() == 0
// && rgvProtocol.getLoaded1() == 0 && rgvProtocol.getLoaded2() == 0
- ) {
+ ) {
//鏌ユ壘鏄惁瀛樺湪鍏ュ嚭搴撳伐浣滀腑绛夊緟RGV鎼繍鐨勪换鍔�
List<WrkMast> wrkMasts = wrkMastMapper.selectIoRgvNo(rgv.getId());
for (WrkMast wrkMast : wrkMasts) {
if (wrkMast.getWrkSts() == 2) {//2.璁惧涓婅蛋1 => 3.RGV鍙栬揣涓�
+ if (rgvProtocol.getTaskNo1() != 0 || rgvProtocol.getLoaded1() != 0) {//RGV鏄惁鏃犱换鍔°�丷GV鏄惁鏃犺揣
+ continue;
+ }
+
+ //鍒ゆ柇琛岃蛋璺緞鏄惁琚崰鐢�
+ Integer staNo = wrkMast.getSourceStaNo();
+ BasDevp basDevp = basDevpService.selectById(staNo);
+ if (basDevp == null) {
+ continue;//鐩爣绔欎笉瀛樺湪
+ }
+ //璧峰璺緞
+ int startPath = rgvProtocol.getRgvPos().intValue();
+ //鐩爣璺緞鍊�
+ int endPath = basDevp.getLocType3().intValue();
+// boolean pathUsed = RgvUtils.isPathUsed(startPath, endPath);//鍒ゆ柇琛岃蛋璺緞鏄惁琚崰鐢�
+ boolean pathUsed = RgvUtils.isPathUsed(startPath, endPath);//鍒ゆ柇琛岃蛋璺緞鏄惁琚崰鐢�
+ if (pathUsed) {
+ //琛岃蛋璺緞琚崰鐢紝绂佹涓嬪彂鍛戒护
+ continue;
+ }
+ //琛岃蛋璺緞绌洪棽锛岄攣瀹氳矾寰�
+ RgvUtils.lockPath(startPath, endPath, rgvProtocol.getRgvNo(), wrkMast.getWrkNo(), true);
+
+ // 鍛戒护涓嬪彂鍖� --------------------------------------------------------------------------
+ RgvCommand rgvCommand = new RgvCommand();
+ rgvCommand.setRgvNo(wrkMast.getRgvNo()); // RGV缂栧彿
+ rgvCommand.setAckFinish1((short) 0); // 宸ヤ綅1浠诲姟瀹屾垚纭浣�
+ rgvCommand.setTaskNo1(wrkMast.getWrkNo().shortValue()); // 宸ヤ綅1宸ヤ綔鍙�
+ rgvCommand.setTaskMode1(RgvTaskModeType.FETCH); // 宸ヤ綅1浠诲姟妯″紡: 鍙栬揣
+ rgvCommand.setDestinationStaNo1(wrkMast.getRgvDstaNo().shortValue()); //宸ヤ綅1鐩爣绔欑偣
+ rgvCommand.setCommand((short) 1); //宸ヤ綅1浠诲姟纭
+ if (!MessageQueue.offer(SlaveType.Crn, wrkMast.getRgvNo(), new Task(4, rgvCommand))) {
+ //step=2,宸ヤ綅1銆�2鍐欎换鍔★紱 step=4锛屽伐浣�1鍐欎换鍔★紱 step=5锛屽伐浣�2鍐欎换鍔�
+ log.error("RGV鍛戒护涓嬪彂澶辫触锛孯GV鍙�={}锛屼换鍔℃暟鎹�={}", wrkMast.getRgvNo(), JSON.toJSON(rgvCommand));
+ } else {
+ // 淇敼宸ヤ綔妗g姸鎬� 2.璁惧涓婅蛋1 => 3.RGV鍙栬揣涓�
+ Date now = new Date();
+ wrkMast.setWrkSts(3L);
+ wrkMast.setModiTime(now);
+ if (wrkMastMapper.updateById(wrkMast) == 0) {
+ log.error("淇敼宸ヤ綔妗g姸鎬� 2.璁惧涓婅蛋1 => 3.RGV鍙栬揣涓� 澶辫触锛侊紒锛屽伐浣滃彿={}", wrkMast.getWrkNo());
+ }
+ }
+ } else if (wrkMast.getWrkSts() == 14) {//4.RGV鍙栬揣瀹屾垚 => 5.RGV鏀捐揣涓� 14鍑哄簱瀹屾垚
+ if (rgvProtocol.getTaskNo1() == 0 || !rgvProtocol.getTaskNo1().equals(wrkMast.getWrkNo().shortValue())) {//RGV蹇呴』鏈変换鍔′笖浠诲姟鍜屽綋鍓嶅伐浣滄。涓�鑷�
+ continue;
+ }
+ if (rgvProtocol.getLoaded1() == 0) {//RGV蹇呴』鏈夌墿
+ continue;
+ }
+
+ //鍒ゆ柇琛岃蛋璺緞鏄惁琚崰鐢�
+ Integer staNo = wrkMast.getStaNo();
+ BasDevp basDevp = basDevpService.selectById(staNo);
+ if (basDevp == null) {
+ continue;//鐩爣绔欎笉瀛樺湪
+ }
+ //璧峰璺緞
+ int startPath = rgvProtocol.getRgvPos().intValue();
+ //鐩爣璺緞鍊�
+ int endPath = basDevp.getLocType3().intValue();
+ boolean pathUsed = RgvUtils.isPathUsed(startPath, endPath);//鍒ゆ柇琛岃蛋璺緞鏄惁琚崰鐢�
+ if (pathUsed) {
+ //琛岃蛋璺緞琚崰鐢紝绂佹涓嬪彂鍛戒护
+ continue;
+ }
+ //琛岃蛋璺緞绌洪棽锛岄攣瀹氳矾寰�
+ RgvUtils.lockPath(startPath, endPath, rgvProtocol.getRgvNo(), wrkMast.getWrkNo(), true);
+
+ // 鍛戒护涓嬪彂鍖� --------------------------------------------------------------------------
+ RgvCommand rgvCommand = new RgvCommand();
+ rgvCommand.setRgvNo(wrkMast.getRgvNo()); // RGV缂栧彿
+ rgvCommand.setAckFinish1((short) 0); // 宸ヤ綅1浠诲姟瀹屾垚纭浣�
+ rgvCommand.setTaskNo1(wrkMast.getWrkNo().shortValue()); // 宸ヤ綅1宸ヤ綔鍙�
+ rgvCommand.setTaskMode1(RgvTaskModeType.PUT); // 宸ヤ綅1浠诲姟妯″紡: 鏀捐揣
+ rgvCommand.setDestinationStaNo1(wrkMast.getRgvDstaNo().shortValue()); //宸ヤ綅1鐩爣绔欑偣
+ rgvCommand.setCommand((short) 1); //宸ヤ綅1浠诲姟纭
+ if (!MessageQueue.offer(SlaveType.Crn, wrkMast.getRgvNo(), new Task(4, rgvCommand))) {
+ //step=2,宸ヤ綅1銆�2鍐欎换鍔★紱 step=4锛屽伐浣�1鍐欎换鍔★紱 step=5锛屽伐浣�2鍐欎换鍔�
+ log.error("RGV鍛戒护涓嬪彂澶辫触锛孯GV鍙�={}锛屼换鍔℃暟鎹�={}", wrkMast.getRgvNo(), JSON.toJSON(rgvCommand));
+ } else {
+ // 淇敼宸ヤ綔妗g姸鎬� 4.RGV鍙栬揣瀹屾垚 => 5.RGV鏀捐揣涓�
+ Date now = new Date();
+ wrkMast.setWrkSts(5L);
+ wrkMast.setModiTime(now);
+ if (wrkMastMapper.updateById(wrkMast) == 0) {
+ log.error("淇敼宸ヤ綔妗g姸鎬� 4.RGV鍙栬揣瀹屾垚 => 5.RGV鏀捐揣涓� 澶辫触锛侊紒锛屽伐浣滃彿={}", wrkMast.getWrkNo());
+ }
+ }
+ } else if (wrkMast.getWrkSts() == 23) {//23.璁惧涓婅蛋1 => 24.RGV鍙栬揣涓�
if (rgvProtocol.getTaskNo1() != 0 || rgvProtocol.getLoaded1() != 0) {//RGV鏄惁鏃犱换鍔°�丷GV鏄惁鏃犺揣
continue;
}
@@ -667,6 +875,154 @@
//step=2,宸ヤ綅1銆�2鍐欎换鍔★紱 step=4锛屽伐浣�1鍐欎换鍔★紱 step=5锛屽伐浣�2鍐欎换鍔�
log.error("RGV鍛戒护涓嬪彂澶辫触锛孯GV鍙�={}锛屼换鍔℃暟鎹�={}", wrkMast.getRgvNo(), JSON.toJSON(rgvCommand));
} else {
+ // 淇敼宸ヤ綔妗g姸鎬� 23.璁惧涓婅蛋1 => 24.RGV鍙栬揣涓�
+ Date now = new Date();
+ wrkMast.setWrkSts(24L);
+ wrkMast.setModiTime(now);
+ if (wrkMastMapper.updateById(wrkMast) == 0) {
+ log.error("淇敼宸ヤ綔妗g姸鎬� 23.璁惧涓婅蛋1 => 24.RGV鍙栬揣涓� 澶辫触锛侊紒锛屽伐浣滃彿={}", wrkMast.getWrkNo());
+ }
+ }
+ } else if (wrkMast.getWrkSts() == 25) {//25.RGV鍙栬揣瀹屾垚 => 26.RGV鏀捐揣涓�
+ if (rgvProtocol.getTaskNo1() == 0 || !rgvProtocol.getTaskNo1().equals(wrkMast.getWrkNo().shortValue())) {//RGV蹇呴』鏈変换鍔′笖浠诲姟鍜屽綋鍓嶅伐浣滄。涓�鑷�
+ continue;
+ }
+ if (rgvProtocol.getLoaded1() == 0) {//RGV蹇呴』鏈夌墿
+ continue;
+ }
+
+ //鍒ゆ柇琛岃蛋璺緞鏄惁琚崰鐢�
+ Integer staNo = wrkMast.getStaNo();
+ BasDevp basDevp = basDevpService.selectById(staNo);
+ if (basDevp == null) {
+ continue;//鐩爣绔欎笉瀛樺湪
+ }
+ //璧峰璺緞
+ int startPath = rgvProtocol.getRgvPos().intValue();
+ //鐩爣璺緞鍊�
+ int endPath = basDevp.getLocType3().intValue();
+ boolean pathUsed = RgvUtils.isPathUsed(startPath, endPath);//鍒ゆ柇琛岃蛋璺緞鏄惁琚崰鐢�
+ if (pathUsed) {
+ //琛岃蛋璺緞琚崰鐢紝绂佹涓嬪彂鍛戒护
+ continue;
+ }
+ //琛岃蛋璺緞绌洪棽锛岄攣瀹氳矾寰�
+ RgvUtils.lockPath(startPath, endPath, rgvProtocol.getRgvNo(), wrkMast.getWrkNo(), true);
+
+ // 鍛戒护涓嬪彂鍖� --------------------------------------------------------------------------
+ RgvCommand rgvCommand = new RgvCommand();
+ rgvCommand.setRgvNo(wrkMast.getRgvNo()); // RGV缂栧彿
+ rgvCommand.setAckFinish1((short) 0); // 宸ヤ綅1浠诲姟瀹屾垚纭浣�
+ rgvCommand.setTaskNo1(wrkMast.getWrkNo().shortValue()); // 宸ヤ綅1宸ヤ綔鍙�
+ rgvCommand.setTaskMode1(RgvTaskModeType.PUT); // 宸ヤ綅1浠诲姟妯″紡: 鏀捐揣
+ rgvCommand.setDestinationStaNo1(wrkMast.getRgvDstaNo().shortValue()); //宸ヤ綅1鐩爣绔欑偣
+ rgvCommand.setCommand((short) 1); //宸ヤ綅1浠诲姟纭
+ if (!MessageQueue.offer(SlaveType.Crn, wrkMast.getRgvNo(), new Task(4, rgvCommand))) {
+ //step=2,宸ヤ綅1銆�2鍐欎换鍔★紱 step=4锛屽伐浣�1鍐欎换鍔★紱 step=5锛屽伐浣�2鍐欎换鍔�
+ log.error("RGV鍛戒护涓嬪彂澶辫触锛孯GV鍙�={}锛屼换鍔℃暟鎹�={}", wrkMast.getRgvNo(), JSON.toJSON(rgvCommand));
+ } else {
+ // 淇敼宸ヤ綔妗g姸鎬� 25.RGV鍙栬揣瀹屾垚 => 26.RGV鏀捐揣涓�
+ Date now = new Date();
+ wrkMast.setWrkSts(26L);
+ wrkMast.setModiTime(now);
+ if (wrkMastMapper.updateById(wrkMast) == 0) {
+ log.error("淇敼宸ヤ綔妗g姸鎬� 25.RGV鍙栬揣瀹屾垚 => 26.RGV鏀捐揣涓� 澶辫触锛侊紒锛屽伐浣滃彿={}", wrkMast.getWrkNo());
+ }
+ }
+ }
+ }
+
+ }
+ }
+ }
+
+ /**
+ * 鍏ュ嚭搴� ===>> RGV鍏ュ嚭搴撲綔涓氫笅鍙�
+ */
+ public synchronized void rgvIoExecute() {
+ for (RgvSlave rgv : slaveProperties.getRgv()) {
+ RgvSlave rgvSlave=null;
+ if (rgv.getId()==1){
+ rgvSlave = slaveProperties.getRgv().get(1);
+ }else {
+ rgvSlave = slaveProperties.getRgv().get(0);
+ }
+
+ // 鑾峰彇RGV淇℃伅
+ RgvThread rgvThread = (RgvThread) SlaveConnection.get(SlaveType.Rgv, rgv.getId());
+ RgvProtocol rgvProtocol = rgvThread.getRgvProtocol();
+ if (rgvProtocol == null) {
+ continue;
+ }
+
+ RgvThread rgvThreadSlave = (RgvThread) SlaveConnection.get(SlaveType.Rgv, rgvSlave.getId());
+ RgvProtocol rgvProtocolSlave = rgvThreadSlave.getRgvProtocol();
+ BasRgv basRgvSlave = null;
+ if (rgvProtocolSlave == null) {
+ rgvSlave=null;
+ }else {
+ basRgvSlave = basRgvService.selectById(rgv.getId());
+ if (basRgvSlave == null) {
+ rgvSlave=null;
+ }
+ }
+
+ BasRgv basRgv = basRgvService.selectById(rgv.getId());
+ if (basRgv == null) {
+ log.error("{}鍙稲GV灏氭湭鍦ㄦ暟鎹簱杩涜缁存姢锛�", rgv.getId());
+ continue;
+ }
+
+ boolean signSlave=false;//姝ゅ鍒ゆ柇RgvSlave鏄惁宸茬粡瑙勯伩
+ boolean signSlaveState=false;//姝ゅ鍒ゆ柇RgvSlave鏄惁绌洪棽
+ Integer staSlave = 0;//姝ゅ璁板綍RgvSlave褰撳墠浣嶇疆
+
+ // 鍙湁褰揜GV绌洪棽銆佽嚜鍔�,
+ if (rgvProtocol.getStatusType() == RgvStatusType.IDLE
+ && rgvProtocol.getModeType() == RgvModeType.AUTO
+// && rgvProtocol.getTaskNo1() == 0 && rgvProtocol.getTaskNo2() == 0
+// && rgvProtocol.getLoaded1() == 0 && rgvProtocol.getLoaded2() == 0
+ ) {
+
+ //鏌ユ壘鏄惁瀛樺湪鍏ュ嚭搴撳伐浣滀腑绛夊緟RGV鎼繍鐨勪换鍔�
+ List<WrkMast> wrkMasts = wrkMastMapper.selectIoRgvNo(rgv.getId());
+ for (WrkMast wrkMast : wrkMasts) {
+ if (wrkMast.getWrkSts() == 2) {//2.璁惧涓婅蛋1 => 3.RGV鍙栬揣涓�
+ if (rgvProtocol.getTaskNo1() != 0 || rgvProtocol.getLoaded1() != 0) {//RGV鏄惁鏃犱换鍔°�丷GV鏄惁鏃犺揣
+ continue;
+ }
+
+ //鍒ゆ柇琛岃蛋璺緞鏄惁琚崰鐢�
+ Integer staNo = wrkMast.getSourceStaNo();
+ BasDevp basDevp = basDevpService.selectById(staNo);
+ if (basDevp == null) {
+ continue;//鐩爣绔欎笉瀛樺湪
+ }
+ //璧峰璺緞
+ int startPath = rgvProtocol.getRgvPos().intValue();
+ //鐩爣璺緞鍊�
+ int endPath = basDevp.getLocType3().intValue();
+// boolean pathUsed = RgvUtils.isPathUsed(startPath, endPath);//鍒ゆ柇琛岃蛋璺緞鏄惁琚崰鐢�
+ boolean pathUsed = RgvUtils.isPathUsed(startPath, endPath);//鍒ゆ柇琛岃蛋璺緞鏄惁琚崰鐢�
+ if (pathUsed) {
+ //琛岃蛋璺緞琚崰鐢紝绂佹涓嬪彂鍛戒护
+ continue;
+ }
+ //琛岃蛋璺緞绌洪棽锛岄攣瀹氳矾寰�
+ RgvUtils.lockPath(startPath, endPath, rgvProtocol.getRgvNo(), wrkMast.getWrkNo(), true);
+
+ // 鍛戒护涓嬪彂鍖� --------------------------------------------------------------------------
+ RgvCommand rgvCommand = new RgvCommand();
+ rgvCommand.setRgvNo(wrkMast.getRgvNo()); // RGV缂栧彿
+ rgvCommand.setAckFinish1((short) 0); // 宸ヤ綅1浠诲姟瀹屾垚纭浣�
+ rgvCommand.setTaskNo1(wrkMast.getWrkNo().shortValue()); // 宸ヤ綅1宸ヤ綔鍙�
+ rgvCommand.setTaskMode1(RgvTaskModeType.FETCH); // 宸ヤ綅1浠诲姟妯″紡: 鍙栬揣
+ rgvCommand.setDestinationStaNo1(wrkMast.getRgvDstaNo().shortValue()); //宸ヤ綅1鐩爣绔欑偣
+ rgvCommand.setCommand((short) 1); //宸ヤ綅1浠诲姟纭
+ if (!MessageQueue.offer(SlaveType.Crn, wrkMast.getRgvNo(), new Task(4, rgvCommand))) {
+ //step=2,宸ヤ綅1銆�2鍐欎换鍔★紱 step=4锛屽伐浣�1鍐欎换鍔★紱 step=5锛屽伐浣�2鍐欎换鍔�
+ log.error("RGV鍛戒护涓嬪彂澶辫触锛孯GV鍙�={}锛屼换鍔℃暟鎹�={}", wrkMast.getRgvNo(), JSON.toJSON(rgvCommand));
+ } else {
// 淇敼宸ヤ綔妗g姸鎬� 2.璁惧涓婅蛋1 => 3.RGV鍙栬揣涓�
Date now = new Date();
wrkMast.setWrkSts(3L);
@@ -675,7 +1031,7 @@
log.error("淇敼宸ヤ綔妗g姸鎬� 2.璁惧涓婅蛋1 => 3.RGV鍙栬揣涓� 澶辫触锛侊紒锛屽伐浣滃彿={}", wrkMast.getWrkNo());
}
}
- } else if (wrkMast.getWrkSts() == 4) {//4.RGV鍙栬揣瀹屾垚 => 5.RGV鏀捐揣涓�
+ } else if (wrkMast.getWrkSts() == 14) {//4.RGV鍙栬揣瀹屾垚 => 5.RGV鏀捐揣涓� 14鍑哄簱瀹屾垚
if (rgvProtocol.getTaskNo1() == 0 || !rgvProtocol.getTaskNo1().equals(wrkMast.getWrkNo().shortValue())) {//RGV蹇呴』鏈変换鍔′笖浠诲姟鍜屽綋鍓嶅伐浣滄。涓�鑷�
continue;
}
diff --git a/src/main/java/com/zy/asrs/utils/RouteUtils.java b/src/main/java/com/zy/asrs/utils/RouteUtils.java
index 90cbf42..2816909 100644
--- a/src/main/java/com/zy/asrs/utils/RouteUtils.java
+++ b/src/main/java/com/zy/asrs/utils/RouteUtils.java
@@ -12,11 +12,11 @@
// 姝e簭
public static final List<Integer> TRACK_POSITION_POSITIVE_SEQUENCE = new ArrayList<Integer>() {{
- add(1);add(2);add(3);add(4);add(5);add(6);add(7);add(8);add(9);add(10);add(11);add(12);
+ add(101);add(102);add(104);add(105);add(107);add(118);add(108);add(119);add(110);add(120);add(111);add(121);add(113);add(114);add(116);add(117);
}};
// 鍙嶅簭
public static final List<Integer> TRACK_POSITION_REVERSE_SEQUENCE = new ArrayList<Integer>() {{
- add(12);add(11);add(10);add(9);add(8);add(7);add(6);add(5);add(4);add(3);add(2);add(1);
+ add(117);add(116);add(114);add(113);add(121);add(111);add(120);add(110);add(119);add(108);add(118);add(107);add(105);add(104);add(102);add(101);
}};
public static String zerofill(String msg, Integer count){
@@ -35,7 +35,7 @@
// 鑾峰彇褰撳墠灏忚溅鏈璧扮殑璺嚎闆嗗悎
public static List<Integer> getRoute(Integer groupStart,Integer groupEnd){
- boolean sign = groupStart < groupEnd;
+ boolean sign = TRACK_POSITION_POSITIVE_SEQUENCE.indexOf(groupStart) < TRACK_POSITION_POSITIVE_SEQUENCE.indexOf(groupEnd);
List<Integer> result = new ArrayList<>();
List<Integer> groupRoute = null;
if (sign){
@@ -97,9 +97,21 @@
}
}
+ /*
+ * a 灏忚溅褰撳墠浣嶇疆
+ * b 灏忚溅浠诲姟寮�濮嬩綅缃�
+ * c 灏忚溅浠诲姟缁撴潫浣嶇疆
+ * sign 鍙︿竴涓皬杞︾┖闂叉爣璁�
+ * */
+ public static boolean RouteAutoBoolean(Integer a,Integer b,Integer c,Integer aa,Integer bb,Integer cc,boolean idleOther){
+ List<Integer> routeCurrent = getRouteIntersection(getRoute(a, c), getRoute(b, c), RouteCollectCountType.DEDUPLICATIONUNION);//骞堕泦
+ List<Integer> routeOther = getRouteIntersection(getRoute(aa, cc), getRoute(bb, cc), RouteCollectCountType.DEDUPLICATIONUNION);//
+ return !getRouteBoolean(routeCurrent, routeOther); //鏄惁鏈変氦闆�
+ }
+
public static void main(String[] arge){
- List<Integer> routeCurrent = getRoute(2, 9); //鑾峰彇褰撳墠灏忚溅璺緞
- List<Integer> routeOther = getRoute(12, 5); //鑾峰彇鍏跺畠灏忚溅璺緞
+ List<Integer> routeCurrent = getRoute(104, 119); //鑾峰彇褰撳墠灏忚溅璺緞
+ List<Integer> routeOther = getRoute(117, 118); //鑾峰彇鍏跺畠灏忚溅璺緞
System.out.println("褰撳墠灏忚溅璺緞:\t"+routeCurrent);
System.out.println("鍏跺畠灏忚溅璺緞:\t"+routeOther);
@@ -117,6 +129,8 @@
List<Integer> routeIntersection3 = getRouteIntersection(routeCurrent, routeOther, RouteCollectCountType.DEDUPLICATIONUNION);//鍘婚噸骞堕泦
System.out.println("璺緞鍘婚噸骞堕泦锛歕t"+routeIntersection3);
+
+ System.out.println(RouteAutoBoolean(101,104,119,114,116,120,true));
}
}
diff --git a/src/main/java/com/zy/core/MainProcess.java b/src/main/java/com/zy/core/MainProcess.java
index ab1cb60..91eb879 100644
--- a/src/main/java/com/zy/core/MainProcess.java
+++ b/src/main/java/com/zy/core/MainProcess.java
@@ -66,9 +66,10 @@
/////////////////////////////////////RGV璋冨害/////////////////////////////////////
// //缁戝畾灏忚溅鏂规硶
-// mainService.rgvBindSte();
+ mainService.rgvBindSte();
+ mainService.rgvBindSte2();
// // 鍏ュ嚭搴� ===>> RGV鍏ュ嚭搴撲綔涓氫笅鍙�
-// mainService.rgvIoExecute();
+ mainService.rgvIoExecute();
// // RGV鍏ュ簱 ===>> 鏍规嵁RGV瀹屾垚淇″彿,鎵ц瀵瑰伐浣滄。鐨勫畬鎴愭搷浣�
// mainService.rgvFinished();
// // 鍏ュ嚭搴� ===>> RGV鍑哄簱绔欏埌绯荤粺鍏ュ嚭搴撶珯
diff --git a/src/main/java/com/zy/core/model/DevpSlave.java b/src/main/java/com/zy/core/model/DevpSlave.java
index ad33be5..9cd578c 100644
--- a/src/main/java/com/zy/core/model/DevpSlave.java
+++ b/src/main/java/com/zy/core/model/DevpSlave.java
@@ -27,6 +27,10 @@
private List<Sta> pickSta = new ArrayList<>();
+ private List<Sta> outRgvSta = new ArrayList<>();
+
+ private List<Sta> inRgvSta = new ArrayList<>();
+
@Data
public static class Sta {
diff --git a/src/main/resources/application.yml b/src/main/resources/application.yml
index 620400c..8db6b40 100644
--- a/src/main/resources/application.yml
+++ b/src/main/resources/application.yml
@@ -269,6 +269,43 @@
pickSta[0]:
staNo: 11
barcode: ${wcs-slave.barcode[0].id}
+ # Rgv鍑哄簱鍙�1
+ outRgvSta[0]:
+ staNo: 102
+ # Rgv鍑哄簱鍙�1
+ outRgvSta[1]:
+ staNo: 105
+ # Rgv鍑哄簱鍙�1
+ outRgvSta[2]:
+ staNo: 108
+ # Rgv鍑哄簱鍙�1
+ outRgvSta[3]:
+ staNo: 111
+ # Rgv鍑哄簱鍙�1
+ outRgvSta[4]:
+ staNo: 114
+ # Rgv鍑哄簱鍙�1
+ outRgvSta[5]:
+ staNo: 117
+ # Rgv鍏ュ簱鍙�1
+ inRgvSta[0]:
+ staNo: 118
+ # Rgv鍏ュ簱鍙�1
+ inRgvSta[1]:
+ staNo: 119
+ # Rgv鍏ュ簱鍙�1
+ inRgvSta[2]:
+ staNo: 120
+ # Rgv鍏ュ簱鍙�1
+ inRgvSta[3]:
+ staNo: 121
+ # Rgv鍏ュ簱鍙�1
+ inRgvSta[4]:
+ staNo: 122
+ # Rgv鍏ュ簱鍙�1
+ inRgvSta[5]:
+ staNo: 123
+
# 杈撻�佺嚎
devp[1]:
id: 2
diff --git a/src/main/resources/mapper/WrkMastMapper.xml b/src/main/resources/mapper/WrkMastMapper.xml
index 3b7c168..b0937e5 100644
--- a/src/main/resources/mapper/WrkMastMapper.xml
+++ b/src/main/resources/mapper/WrkMastMapper.xml
@@ -247,6 +247,37 @@
and rgv_no is null
</select>
+ <select id="selectWaitBindRgvNo2" resultMap="BaseResultMap">
+ select * from dbo.asr_wrk_mast
+ where 1=1
+ and wrk_sts in (2,14)
+ and (rgv_no IS NULL OR rgv_no = 0)
+ </select>
+
+ <select id="selectWaitBindRGVRgvNo" resultMap="BaseResultMap">
+ select * from dbo.asr_wrk_mast_rgv
+ where 1=1
+ and wrk_sts < 110
+ and rgv_no = #{rgvNo}
+ </select>
+
+ <select id="selectWaitBindRgvNoOneWrkNo" resultMap="BaseResultMap">
+ select * from dbo.asr_wrk_mast_rgv
+ where 1=1
+ and wrk_no = #{wrkNo}
+ </select>
+
+ <insert id="insertRgvMast">
+ INSERT INTO dbo.asr_wrk_mast_rgv SELECT * FROM asr_wrk_mast WHERE wrk_no = #{wrkNo}
+ </insert>
+
+ <update id="updateRgvMast">
+ update asr_wrk_mast_rgv
+ set wrk_sts=100
+ where 1=1
+ and wrk_no = #{wrkNo}
+ </update>
+
<select id="selectRgvInSteWrkNo" resultMap="BaseResultMap">
select top 1 * from dbo.asr_wrk_mast where 1=1 and wrk_sts =12 and wrk_no=#{wrkNo} and rgv_no is null
</select>
--
Gitblit v1.9.1