From 44be6da8fc2740a7e81d5b878a894e318b6a5f8c Mon Sep 17 00:00:00 2001
From: lsh <lsh@163.com>
Date: 星期日, 27 四月 2025 15:51:37 +0800
Subject: [PATCH] *
---
src/main/java/com/zy/asrs/service/impl/MainServiceImpl.java | 1459 ++++++++++++++-------------------------------------------
1 files changed, 364 insertions(+), 1,095 deletions(-)
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 c0c2334..8fda140 100644
--- a/src/main/java/com/zy/asrs/service/impl/MainServiceImpl.java
+++ b/src/main/java/com/zy/asrs/service/impl/MainServiceImpl.java
@@ -14,23 +14,20 @@
import com.zy.asrs.service.*;
import com.zy.asrs.utils.CommandUtils;
import com.zy.asrs.utils.RouteUtils;
+import com.zy.asrs.utils.TrackRangeUtils;
import com.zy.asrs.utils.Utils;
import com.zy.common.service.CommonService;
import com.zy.common.utils.HttpHandler;
import com.zy.core.CrnThread;
import com.zy.core.DevpThread;
-import com.zy.core.cache.MessageQueue;
-import com.zy.core.cache.SlaveConnection;
+import com.zy.core.cache.*;
import com.zy.core.enums.*;
import com.zy.core.model.CrnSlave;
import com.zy.core.model.DevpSlave;
import com.zy.core.model.RgvSlave;
import com.zy.core.model.Task;
import com.zy.core.model.command.CrnCommand;
-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.model.protocol.*;
import com.zy.core.properties.SlaveProperties;
import com.zy.core.thread.BarcodeThread;
import com.zy.core.thread.RgvThread;
@@ -44,6 +41,7 @@
import java.io.IOException;
import java.util.*;
+import java.util.concurrent.ConcurrentHashMap;
/**
* 绔嬩綋浠撳簱WCS绯荤粺涓绘祦绋嬩笟鍔�
@@ -74,31 +72,23 @@
private TaskWrkService taskWrkService;
@Autowired
private StaDescMapper staDescMapper;
-
@Autowired
private StaDescService staDescService;
-
@Autowired
private ApiLogService apiLogService;
@Autowired
private CommonService commonService;
@Autowired
- private BasRgvService basRgvService;
+ private CrnController crnController;
@Autowired
- private WrkMastStaMapper wrkMastStaMapper;
- @Autowired
- private BasRgvMapMapper basRgvMapMapper;
+ private BasDevpPositionService basDevpPositionService;
@Value("${wms.url}")
private String wmsUrl;
@Value("${wms.inboundTaskApplyPath}")
private String inboundTaskApplyPath;
- @Value("${wms.movePath}")
- private String movePath;
@Value("${wms.taskStatusFeedbackPath}")
private String taskStatusFeedbackPath;
- @Autowired
- private CrnController crnController;
@Value("${wms.rgvOpen}")
private boolean rgvOpen;
@@ -112,10 +102,11 @@
@Value("${constant-parameters.trackProportion}")
private Long trackProportion;
- public void generateStoreWrkFile() throws IOException, InterruptedException {
+ @Value("${constant-parameters.avoidDistance}")
+ private Long avoidDistance;
+
+ public void generateStoreWrkFile() {
try {
-
-
// 鏍规嵁杈撻�佺嚎plc閬嶅巻
for (DevpSlave devp : slaveProperties.getDevp()) {
// 閬嶅巻鍏ュ簱鍙�
@@ -388,15 +379,33 @@
}
}
-
/**
* 鍫嗗灈鏈虹珯鍑哄簱鍒板嚭搴撶珯
*/
public void crnStnToOutStn() {
for (CrnSlave crnSlave : slaveProperties.getCrn()) {
+
+ // 鑾峰彇鍫嗗灈鏈轰俊鎭�
+ CrnThread crnThread = (CrnThread) SlaveConnection.get(SlaveType.Crn, crnSlave.getId());
+ CrnProtocol crnProtocol = crnThread.getCrnProtocol();
+ if (crnProtocol == null) { continue; }
+ BasCrnp basCrnp = basCrnpService.selectById(crnSlave.getId());
+ if (basCrnp == null) {
+ log.error("{}鍙峰爢鍨涙満灏氭湭鍦ㄦ暟鎹簱杩涜缁存姢锛�", crnSlave.getId());
+ continue;
+ }
+ if (!crnSlave.getId().equals(crnProtocol.getLaneNo())){
+ for (CrnSlave crnOther : slaveProperties.getCrn()) {
+ if (crnOther.getId().equals(crnProtocol.getLaneNo())){
+ crnSlave.updateCrnInStn(crnOther);
+ }
+ }
+ }
// 閬嶅巻鍫嗗灈鏈哄嚭搴撶珯
for (CrnSlave.CrnStn crnStn : crnSlave.getCrnOutStn()) {
- List<StaDesc> staDescs = staDescMapper.selectList(new EntityWrapper<StaDesc>().eq("crn_no", crnSlave.getId()).eq("crn_stn", crnStn.getStaNo()));
+
+ List<StaDesc> staDescs = staDescMapper.selectList(new EntityWrapper<StaDesc>().eq("CRN_NO", crnSlave.getId()).eq("LANE_NO", crnProtocol.getLaneNo()).eq("CRN_STN", crnStn.getStaNo()));
+// List<StaDesc> staDescs = staDescMapper.selectList(new EntityWrapper<StaDesc>().eq("crn_no", crnSlave.getId()).eq("").eq("crn_stn", crnStn.getStaNo()));
for (StaDesc staDesc : staDescs){
try{
// 鑾峰彇鍫嗗灈鏈哄嚭搴撶珯淇℃伅
@@ -409,7 +418,7 @@
}
if (staProtocol.isAutoing() && staProtocol.isLoading() && (staProtocol.getWorkNo() == 0 || staProtocol.getStaNo() == 0)) {
// 鏌ヨ宸ヤ綔妗�
- TaskWrk taskWrk = taskWrkMapper.selectCrnStaWorking(crnSlave.getId(), staDesc.getStnNo().toString());
+ TaskWrk taskWrk = taskWrkMapper.selectCrnStaWorking(crnProtocol.getLaneNo(), staDesc.getStnNo().toString());
if (taskWrk == null) {
continue;
}
@@ -462,6 +471,14 @@
continue;
}
+ if (!crn.getId().equals(crnProtocol.getLaneNo())){
+ for (CrnSlave crnOther : slaveProperties.getCrn()) {
+ if (crnOther.getId().equals(crnProtocol.getLaneNo())){
+ crn.updateCrnInStn(crnOther);
+ }
+ }
+ }
+
// 搴撲綅绉昏浆
this.locToLoc(crn, crnProtocol);
@@ -498,7 +515,7 @@
*/
public void crnStnToLoc(CrnSlave slave, CrnProtocol crnProtocol) throws IOException {
for (CrnSlave.CrnStn crnStn : slave.getCrnInStn()) {
- List<StaDesc> staDescs = staDescMapper.selectList(new EntityWrapper<StaDesc>().eq("crn_no", slave.getId()).eq("crn_stn", crnStn.getStaNo()));
+ List<StaDesc> staDescs = staDescMapper.selectList(new EntityWrapper<StaDesc>().eq("CRN_NO", slave.getId()).eq("LANE_NO", crnProtocol.getLaneNo()).eq("CRN_STN", crnStn.getStaNo()));
for (StaDesc staDesc : staDescs) {
boolean flag = false;
// 鑾峰彇鍫嗗灈鏈哄叆搴撶珯淇℃伅
@@ -524,7 +541,7 @@
}
// 鑾峰彇宸ヤ綔鐘舵�佷负2锛堣澶囦笂璧帮級鐨勫叆搴撳伐浣滄。
- TaskWrk taskWrk = taskWrkMapper.selectPakIn(slave.getId(), staProtocol.getWorkNo().intValue(), staDesc.getStnNo().toString());
+ TaskWrk taskWrk = taskWrkMapper.selectPakIn(crnProtocol.getLaneNo(), staProtocol.getWorkNo().intValue(), staDesc.getStnNo().toString());
if(null == taskWrk) {
continue;
}
@@ -535,7 +552,7 @@
}
// 宸茬粡瀛樺湪鍚婅溅鎵ц浠诲姟鏃讹紝鍒欒繃婊�
- if (taskWrkMapper.selectCrnWorking(slave.getId()) != null) {
+ if (taskWrkMapper.selectCrnWorking(crnProtocol.getLaneNo()) != null) {
continue;
}
@@ -583,7 +600,8 @@
// 鍛戒护涓嬪彂鍖� --------------------------------------------------------------------------
CrnCommand crnCommand = new CrnCommand();
- crnCommand.setCrnNo(staDesc.getCrnNo()); // 鍫嗗灈鏈虹紪鍙�
+ crnCommand.setCrnNo(slave.getId()); // 鍫嗗灈鏈虹紪鍙�
+ crnCommand.setCrnNo(staDesc.getLaneNo()); // 鍫嗗灈鏈哄贩閬撶紪鍙�
crnCommand.setTaskNo(taskWrk.getWrkNo().shortValue()); // 宸ヤ綔鍙�
crnCommand.setAckFinish((short) 0); // 浠诲姟瀹屾垚纭浣�
crnCommand.setTaskMode(CrnTaskModeType.LOC_MOVE); // 浠诲姟妯″紡: 搴撲綅绉昏浆
@@ -644,15 +662,17 @@
* 2022-06-09 TQS淇敼锛屾煡璇㈠伐浣滄。LIST锛岄亶鍘嗕笅鍙戯紝闃叉绗竴涓换鍔″牭濉炲嚭搴�
*/
public void locToCrnStn(CrnSlave slave, CrnProtocol crnProtocol){
- List<TaskWrk> taskWrksInitial = taskWrkMapper.selectPakOut(slave.getId(), null);
+ List<TaskWrk> taskWrksInitial = taskWrkMapper.selectPakOut(crnProtocol.getLaneNo(), null);
if (taskWrksInitial.size()==0){
return;
}
for (CrnSlave.CrnStn crnStn : slave.getCrnOutStn()) {
- List<StaDesc> staDescs = staDescMapper.selectList(new EntityWrapper<StaDesc>().eq("crn_no", slave.getId()).eq("crn_stn", crnStn.getStaNo()));
+ List<StaDesc> staDescs = staDescMapper.selectList(new EntityWrapper<StaDesc>().eq("CRN_NO", slave.getId()).eq("LANE_NO", crnProtocol.getLaneNo()).eq("CRN_STN", crnStn.getStaNo()));
+
+// List<StaDesc> staDescs = staDescMapper.selectList(new EntityWrapper<StaDesc>().eq("crn_no", crnProtocol.getLaneNo()).eq("crn_stn", crnStn.getStaNo()));
for (StaDesc staDesc : staDescs){
// 鑾峰彇宸ヤ綔鐘舵�佷负11锛堢敓鎴愬嚭搴揑D锛夌殑鍑哄簱宸ヤ綔妗�
- List<TaskWrk> taskWrks = taskWrkMapper.selectPakOut(slave.getId(),staDesc.getStnNo().toString());
+ List<TaskWrk> taskWrks = taskWrkMapper.selectPakOut(crnProtocol.getLaneNo(),staDesc.getStnNo().toString());
for (TaskWrk taskWrk : taskWrks){
if (taskWrk == null) {
continue;
@@ -689,12 +709,13 @@
}
// 宸茬粡瀛樺湪鍚婅溅鎵ц浠诲姟鏃讹紝鍒欒繃婊�
- if (taskWrkMapper.selectCrnWorking(slave.getId()) != null) {
+ if (taskWrkMapper.selectCrnWorking(crnProtocol.getLaneNo()) != null) {
break;
}
CrnCommand command = new CrnCommand();
- command.setCrnNo(taskWrk.getCrnNo()); // 鍫嗗灈鏈虹紪鍙�
+ command.setCrnNo(slave.getId()); // 鍫嗗灈鏈虹紪鍙�
+ command.setLaneNo(crnProtocol.getLaneNo()); // 鍫嗗灈鏈虹紪鍙�
command.setTaskNo(taskWrk.getWrkNo().shortValue()); // 宸ヤ綔鍙�
command.setAckFinish((short) 0); // 浠诲姟瀹屾垚纭浣�
command.setTaskMode(CrnTaskModeType.PAKIN); // 浠诲姟妯″紡
@@ -706,7 +727,7 @@
command.setDestinationPosZ(crnStn.getLev().shortValue()); // 鐩爣搴撲綅灞�
command.setCommand((short)1);
if (!CommandUtils.offer(SlaveType.Crn, taskWrk.getCrnNo(), new Task(2, command),false)) {
- log.error("鍫嗗灈鏈哄懡浠ょ敓鎴愬け璐ワ紝鍫嗗灈鏈哄彿={}锛屼换鍔℃暟鎹�={}", taskWrk.getCrnNo(), JSON.toJSON(command));
+ log.error("鍫嗗灈鏈哄懡浠ょ敓鎴愬け璐ワ紝鍫嗗灈鏈哄彿={}锛屽贩閬�={}锛屼换鍔℃暟鎹�={}",slave.getId(), taskWrk.getCrnNo(), JSON.toJSON(command));
throw new CoolException("鍫嗗灈鏈哄懡浠ょ敓鎴愬け璐�");
}else{
try{
@@ -765,7 +786,7 @@
// 鑾峰彇宸ヤ綔鐘舵�佷负11锛堢敓鎴愬嚭搴揑D锛夌殑绉诲簱宸ヤ綔妗�
List<TaskWrk> taskWrks = taskWrkMapper.selectList(
new EntityWrapper<TaskWrk>()
- .eq("CRN_NO",slave.getId())
+ .eq("CRN_NO",crnProtocol.getLaneNo())
.eq("WRK_STS",11)
.eq("IO_TYPE",3)
.orderBy("IO_PRI",false));
@@ -785,7 +806,7 @@
}
// 宸茬粡瀛樺湪鍚婅溅鎵ц浠诲姟鏃讹紝鍒欒繃婊�
- if (taskWrkMapper.selectCrnWorking(slave.getId()) != null) {
+ if (taskWrkMapper.selectCrnWorking(crnProtocol.getLaneNo()) != null) {
continue;
}
@@ -806,6 +827,7 @@
// 1.鍫嗗灈鏈哄紑濮嬬Щ鍔�
CrnCommand crnCommand = new CrnCommand();
crnCommand.setCrnNo(slave.getId()); // 鍫嗗灈鏈虹紪鍙�
+ crnCommand.setLaneNo(crnProtocol.getLaneNo()); // 鍫嗗灈鏈虹紪鍙�
crnCommand.setTaskNo(taskWrk.getWrkNo().shortValue()); // 宸ヤ綔鍙�
crnCommand.setAckFinish((short) 0); // 浠诲姟瀹屾垚纭浣�
crnCommand.setTaskMode(CrnTaskModeType.LOC_MOVE); // 浠诲姟妯″紡: 搴撲綅绉昏浆
@@ -873,12 +895,20 @@
CrnProtocol crnProtocol = crnThread.getCrnProtocol();
if (crnProtocol == null) { continue; }
+ if (!crn.getId().equals(crnProtocol.getLaneNo())){
+ for (CrnSlave crnOther : slaveProperties.getCrn()) {
+ if (crnOther.getId().equals(crnProtocol.getLaneNo())){
+ crn.updateCrnInStn(crnOther);
+ }
+ }
+ }
+
// 鐘舵�侊細绛夊緟纭 骞朵笖 浠诲姟瀹屾垚浣� = 1
if (!Cools.isEmpty(crnProtocol.getTaskFinish()) && crnProtocol.getTaskFinish() == 0 && crnProtocol.statusType == CrnStatusType.WAITING && crnProtocol.getTaskNo() != 0) {
//鑾峰彇鍏ュ簱寰呯‘璁ゅ伐浣滄。
- TaskWrk taskWrk = taskWrkMapper.selectCrnNoInWorking(crn.getId(),crnProtocol.getTaskNo().intValue());
+ TaskWrk taskWrk = taskWrkMapper.selectCrnNoInWorking(crnProtocol.getLaneNo(),crnProtocol.getTaskNo().intValue());
if (Cools.isEmpty(taskWrk)&&crnProtocol.getTaskNo() !=999) {
- log.error("鍫嗗灈鏈哄浜庣瓑寰呯‘璁や笖浠诲姟瀹屾垚鐘舵�侊紝浣嗘湭鎵惧埌宸ヤ綔妗c�傚爢鍨涙満鍙�={}锛屽伐浣滃彿={}", crn.getId(), crnProtocol.getTaskNo());
+ log.error("鍫嗗灈鏈哄浜庣瓑寰呯‘璁や笖浠诲姟瀹屾垚鐘舵�侊紝浣嗘湭鎵惧埌宸ヤ綔妗c�傚爢鍨涙満鍙�={}锛屽贩閬撳彿={}锛屽伐浣滃彿={}", crn.getId(),crnProtocol.getLaneNo(), crnProtocol.getTaskNo());
continue;
}
Thread.sleep(300);
@@ -1117,1092 +1147,331 @@
if (!Cools.isEmpty(taskWrk.getTargetPoint())) {
taskWrk.setOriginTargetPoint(taskWrk.getTargetPoint());
}
-
-// } else if (param.getIoType() == 2) {
-// taskWrk.setWrkSts(11);
-// if (!Cools.isEmpty(param.getStartPoint())) {
-// taskWrk.setStartPoint(Utils.getWcsLocNo(param.getStartPoint()));//璧风偣
-// taskWrk.setOriginStartPoint(param.getStartPoint());
-// }
-// taskWrk.setTargetPoint(param.getTargetPoint());
-// }else if (param.getIoType() == 3){
-// taskWrk.setWrkSts(11);
-// if (!Cools.isEmpty(param.getStartPoint())) {
-// taskWrk.setStartPoint(param.getStartPoint());//璧风偣
-// taskWrk.setOriginStartPoint(param.getStartPoint());
-// }
}
return taskWrk;
}
- /**
- * 瀹屾垚灏忚溅浠诲姟
- */
- public synchronized void rgvCompleteWrkMastSta() {
- try{
- for (RgvSlave rgvSlave:slaveProperties.getRgv()) {
- RgvThread rgvThread = (RgvThread) SlaveConnection.get(SlaveType.Rgv, rgvSlave.getId());
- RgvProtocol rgvProtocol = rgvThread.getRgvProtocol();
- if (rgvProtocol == null) {
- continue;
+
+ public String rgvOtherTaskWrk(RgvSlave slave){
+
+ RgvThread rgvThread = (RgvThread) SlaveConnection.get(SlaveType.Rgv, slave.getOtherId());
+ TaskProtocolCache taskProtocolCache = rgvThread.getTaskProtocolCache();
+ ConcurrentHashMap<String, TaskProtocol> allTaskProtocol = taskProtocolCache.getAllTaskProtocol();
+ if (!allTaskProtocol.isEmpty()){
+ for (TaskProtocol taskProtocol : allTaskProtocol.values()){
+ if (taskProtocol.getTaskNo() != 0 ){
+ return taskProtocol.getTaskNo().toString();
}
- BasRgv basRgv = basRgvService.selectById(rgvSlave.getId());
- if (basRgv == null) {
- log.error("{}鍙稲GV灏氭湭鍦ㄦ暟鎹簱杩涜缁存姢锛�", rgvSlave.getId());
- continue;
- }
-
- // 鍙湁褰揜GV绛夊緟WCS纭銆佽嚜鍔�
- if (rgvProtocol.getStatusType() == RgvStatusType.WORKING
- && rgvProtocol.getModeType() == RgvModeType.AUTO
- && ((rgvProtocol.getStatusType1()==RgvStatusType.WAITING || rgvProtocol.getStatusType2()==RgvStatusType.WAITING ) ||
- (rgvProtocol.getStatusType1()==RgvStatusType.FETCHWAITING || rgvProtocol.getStatusType2()==RgvStatusType.FETCHWAITING ))
- ) {
- log.info("{}鍙峰皬杞︾瓑寰厀cs纭锛岀姸鎬亄}锛屽弬鏁皗}",rgvProtocol.getRgvNo(),rgvProtocol.getStatusType(),rgvProtocol);
- if (rgvProtocol.getTaskNo1()!=0 && (rgvProtocol.getStatusType1()==RgvStatusType.WAITING || rgvProtocol.getStatusType1()==RgvStatusType.FETCHWAITING)){
- if (rgvProtocol.getTaskNo1()==(short)32222){
- boolean rgvComplete = rgvComplete(rgvProtocol.getRgvNo());
- if (!rgvComplete){
- log.error("灏忚溅澶嶄綅澶辫触锛屽皬杞﹀彿{}锛�",rgvProtocol.getRgvNo());
- }
- BasRgvMap basRgvMap = basRgvMapMapper.selectById(rgvProtocol.getRgvNo());
- basRgvMap.setNowRoute(rgvProtocol.getRgvPosI());
- rgvMapUpdate(basRgvMap,basRgvMap.getStartRoute(),basRgvMap.getStartRoute());
- break;
- }
- WrkMastSta wrkMastSta = wrkMastStaMapper.selectByWrkNo(rgvProtocol.getTaskNo1().longValue());
- if (Cools.isEmpty(wrkMastSta) || wrkMastSta.getType()!=1 || wrkMastSta.getWrkSts()!=1){
- log.error("鏈煡鍒板皬杞︽墽琛屼换鍔℃垨鑰呮墽琛屼换鍔$姸鎬佷笉绗﹀悎锛�"+wrkMastSta);
- continue;
- }
- /* WrkMast wrkMast = wrkMastMapper.selectPakInStep3(wrkMastSta.getWrkNo().intValue());
- if (!Cools.isEmpty(wrkMast) && wrkMastSta.getWrkType()!=5){
- Thread.sleep(200);
- SiemensDevpThread devpThread = (SiemensDevpThread) SlaveConnection.get(SlaveType.Devp, 1);
- StaProtocol staProtocol = devpThread.getStation().get(wrkMastSta.getStaEnd());
- if (staProtocol == null) {
- continue;
- } else {
- staProtocol = staProtocol.clone();
- }
- if (!staProtocol.isAutoing() || !staProtocol.isLoading()){
- continue;
- }
- // 涓嬪彂绔欑偣淇℃伅
- staProtocol.setWorkNo(wrkMast.getWrkNo());
- staProtocol.setStaNo(wrkMast.getStaNo());
- if (!MessageQueue.offer(SlaveType.Devp, 1, new Task(2, staProtocol))) {
- continue;
- }
- log.error("灏忚溅浠诲姟瀹屾垚涓嬪彂杈撻�佺嚎浠诲姟锛�"+staProtocol);
-// try{
-// Thread.sleep(1000);
-// DevpThread devpThreadEnd = (DevpThread) SlaveConnection.get(SlaveType.Devp, 1);
-// StaProtocol staProtocolEnd = devpThreadEnd.getStation().get(wrkMastSta.getStaEnd());
-// log.error("灏忚溅浠诲姟瀹屾垚璇诲彇杈撻�佺嚎浠诲姟锛�"+staProtocolEnd);
-// if (staProtocolEnd.getWorkNo()==0 ){ //|| !staProtocolEnd.getWorkNo().equals(wrkMast.getWrkNo())
-// staProtocolEnd.setWorkNo(wrkMast.getWrkNo());
-// staProtocolEnd.setStaNo(wrkMast.getStaNo());
-// if (!MessageQueue.offer(SlaveType.Devp, 1, new Task(2, staProtocolEnd))) {
-// continue;
-// }
-// log.error("灏忚溅浠诲姟瀹屾垚涓嬪彂杈撻�佺嚎浠诲姟绗簩娆★細"+staProtocolEnd);
-// }
-// }catch (Exception e){
-//
-// }
- }*/
- boolean rgvComplete = rgvComplete(rgvProtocol.getRgvNo());
- if (!rgvComplete){
- log.error("灏忚溅澶嶄綅澶辫触锛屽皬杞﹀彿{}锛�",rgvProtocol.getRgvNo());
- break;
- }
- wrkMastSta.setWrkSts(3);
- wrkMastStaMapper.updateById(wrkMastSta);
- BasRgvMap basRgvMap = basRgvMapMapper.selectById(rgvProtocol.getRgvNo());
- basRgvMap.setNowRoute(rgvProtocol.getRgvPosI());
- rgvMapUpdate(basRgvMap,basRgvMap.getStartRoute(),basRgvMap.getStartRoute());
- }else if (rgvProtocol.getTaskNo2()!=0 && (rgvProtocol.getStatusType2()==RgvStatusType.WAITING || rgvProtocol.getStatusType2()==RgvStatusType.FETCHWAITING)){
- if (rgvProtocol.getTaskNo2()==(short)32222){
- boolean rgvComplete = rgvComplete(rgvProtocol.getRgvNo());
- if (!rgvComplete){
- log.error("灏忚溅澶嶄綅澶辫触锛屽皬杞﹀彿{}锛�",rgvProtocol.getRgvNo());
- }
- BasRgvMap basRgvMap = basRgvMapMapper.selectById(rgvProtocol.getRgvNo());
- basRgvMap.setNowRoute(rgvProtocol.getRgvPosI());
- rgvMapUpdate(basRgvMap,basRgvMap.getStartRoute(),basRgvMap.getStartRoute());
- break;
- }
- WrkMastSta wrkMastSta = wrkMastStaMapper.selectByWrkNo(rgvProtocol.getTaskNo2().longValue());
- if (Cools.isEmpty(wrkMastSta) || wrkMastSta.getType()!=2){
- log.error("鏈煡鍒板皬杞︽墽琛屼换鍔℃垨鑰呮墽琛屼换鍔$姸鎬佷笉绗﹀悎锛�"+wrkMastSta);
- continue;
- }
- /*WrkMast wrkMast = wrkMastMapper.selectPakInStep3(wrkMastSta.getWrkNo().intValue());
- if (!Cools.isEmpty(wrkMast) && wrkMastSta.getWrkType()!=5){
- Thread.sleep(200);
- DevpThread devpThread = (DevpThread) SlaveConnection.get(SlaveType.Devp, 1);
- StaProtocol staProtocol = devpThread.getStation().get(wrkMastSta.getStaEnd());
- if (!staProtocol.isAutoing() || !staProtocol.isLoading()){
- continue;
- }
- // 涓嬪彂绔欑偣淇℃伅
- staProtocol.setWorkNo(wrkMast.getWrkNo());
- staProtocol.setStaNo(wrkMast.getStaNo());
- if (!MessageQueue.offer(SlaveType.Devp, 1, new Task(2, staProtocol))) {
- continue;
- }
- log.error("灏忚溅浠诲姟瀹屾垚涓嬪彂杈撻�佺嚎浠诲姟锛�"+staProtocol);
-// try{
-// Thread.sleep(1000);
-// DevpThread devpThreadEnd = (DevpThread) SlaveConnection.get(SlaveType.Devp, 1);
-// StaProtocol staProtocolEnd = devpThreadEnd.getStation().get(wrkMastSta.getStaEnd());
-// log.error("灏忚溅浠诲姟瀹屾垚璇诲彇杈撻�佺嚎浠诲姟锛�"+staProtocolEnd);
-// if (staProtocolEnd.getWorkNo()==0 ){ //|| !staProtocolEnd.getWorkNo().equals(wrkMast.getWrkNo())
-// staProtocolEnd.setWorkNo(wrkMast.getWrkNo());
-// staProtocolEnd.setStaNo(wrkMast.getStaNo());
-// if (!MessageQueue.offer(SlaveType.Devp, 1, new Task(2, staProtocolEnd))) {
-// continue;
-// }
-// log.error("灏忚溅浠诲姟瀹屾垚涓嬪彂杈撻�佺嚎浠诲姟绗簩娆★細"+staProtocolEnd);
-// }
-// }catch (Exception e){
-//
-// }
- }*/
- boolean rgvComplete = rgvComplete(rgvProtocol.getRgvNo());
- if (!rgvComplete){
- log.error("灏忚溅澶嶄綅澶辫触锛屽皬杞﹀彿{}锛�",rgvProtocol.getRgvNo());
- break;
- }
- wrkMastSta.setWrkSts(3);
- wrkMastStaMapper.updateById(wrkMastSta);
- BasRgvMap basRgvMap = basRgvMapMapper.selectById(rgvProtocol.getRgvNo());
- basRgvMap.setNowRoute(rgvProtocol.getRgvPosI());
- rgvMapUpdate(basRgvMap,basRgvMap.getStartRoute(),basRgvMap.getStartRoute());
- }else {
- log.error("灏忚溅澶嶄綅澶辫触锛屽皬杞﹀彿{},绛夊緟wcs纭浣嗘槸娌℃湁宸ヤ綔鍙凤紒",rgvProtocol.getRgvNo());
- }
- }
- }
- }catch (Exception e){
- log.error("灏忚溅澶嶄綅绾跨▼鎶ラ敊锛�"+e);
- }
- }
- /**
- * 鍏ュ嚭搴� ===>> 灏忚溅浣滀笟涓嬪彂
- */
- public synchronized boolean rgvIoExecute(Integer sign) {
- boolean rgvIoExecuteSign = false;
- try{
- for (RgvSlave rgvSlave:slaveProperties.getRgv()) {
- // 鑾峰彇灏忚溅淇℃伅
- boolean signWork = false;
- RgvThread rgvThread = (RgvThread) SlaveConnection.get(SlaveType.Rgv, rgvSlave.getId());
- RgvProtocol rgvProtocol = rgvThread.getRgvProtocol();
- if (rgvProtocol == null) {
- continue;
- }
- BasRgv basRgv = basRgvService.selectById(rgvSlave.getId());
- if (basRgv == null) {
- log.error("{}鍙稲GV灏氭湭鍦ㄦ暟鎹簱杩涜缁存姢锛�", rgvSlave.getId());
- continue;
- }
-
- // 鍙湁褰揜GV绌洪棽銆佽嚜鍔�,宸ヤ綅涓�鏃犵墿//rgv鍙敤
- if (rgvProtocol.getStatusType() == RgvStatusType.IDLE
- && rgvProtocol.getStatusType1() == RgvStatusType.IDLE
- && rgvProtocol.getStatusType2() == RgvStatusType.IDLE
- && rgvProtocol.getModeType() == RgvModeType.AUTO
- && rgvProtocol.getLoaded1()==0
- && rgvProtocol.getTaskNo1()==0 && rgvProtocol.getTaskNo2()==0
- ) {
- switch (sign){
- //鎵ц灏忚溅璐х墿鎼繍浠诲姟
- case 1:
- signWork = rgvRunWrkMastFullSta(rgvSlave);
- break;
- //鎵ц灏忚溅绌烘澘鎼繍浠诲姟
- case 2://鏀�//鎷嗙洏
- signWork = rgvRunWrkMastEmptyStaPut(rgvSlave);
- break;
- case 3://婊℃斁
- signWork = rgvRunWrkMastEmptyStaPutFull(rgvSlave);
- break;
- case 4://鍙栧彔鐩�
- signWork = rgvRunWrkMastEmptyStaTake(rgvSlave);
- break;
- case 6:////鎻愬崌
-// signWork = qwe();
- break;
- default:
- break;
- }
- for (int signCount = 1;!signWork && signCount<7;signCount++){
- switch (signCount){
- case 1://鎵ц灏忚溅璐х墿鎼繍浠诲姟
- signWork = rgvRunWrkMastFullSta(rgvSlave);
- break;
- case 2://鏀�//鎷嗙洏
- signWork = rgvRunWrkMastEmptyStaPut(rgvSlave);
- break;
- case 3://婊℃斁
- signWork = rgvRunWrkMastEmptyStaPutFull(rgvSlave);
- break;
- case 4://鍙栧彔鐩�
- signWork = rgvRunWrkMastEmptyStaTake(rgvSlave);
- break;
- case 6:////鎻愬崌
-// signWork = rgvRunWrkMastEmptyStaPut();
- break;
- default:
- break;
- }
- }
- }else {
- continue;
- }
- if (!rgvIoExecuteSign){
- rgvIoExecuteSign = signWork;
- }
- }
-// if (!rgvIoExecuteSign){
-// if (sign>6){
-//
-// }
-// }
- }catch (Exception e){
- log.error("RGV灏忚溅浠诲姟涓嬪彂鎶ラ敊"+e);
- }
- return rgvIoExecuteSign;
- }
-
- /**
- * 鎵ц灏忚溅鎼繍浠诲姟
- */
- public synchronized boolean rgvRunWrkMastFullSta(RgvSlave rgvSlave) {
- try{
-// for (RgvSlave rgvSlave:slaveProperties.getRgv()) {
- RgvThread rgvThread = (RgvThread) SlaveConnection.get(SlaveType.Rgv, rgvSlave.getId());
- RgvProtocol rgvProtocol = rgvThread.getRgvProtocol();
- if (rgvProtocol == null) {
- return false;
- }
- BasRgv basRgv = basRgvService.selectById(rgvSlave.getId());
- if (basRgv == null) {
- log.error("{}鍙稲GV灏氭湭鍦ㄦ暟鎹簱杩涜缁存姢锛�", rgvSlave.getId());
- return false;
- }
-
- // 鍙湁褰揜GV绌洪棽銆佽嚜鍔�,宸ヤ綅涓�鏃犵墿//rgv鍙敤
- if (rgvProtocol.getStatusType() == RgvStatusType.IDLE
- && rgvProtocol.getStatusType1() == RgvStatusType.IDLE
- && rgvProtocol.getStatusType2() == RgvStatusType.IDLE
- && rgvProtocol.getModeType() == RgvModeType.AUTO
- && rgvProtocol.getLoaded1()==0
- && rgvProtocol.getTaskNo1()==0 && rgvProtocol.getTaskNo2()==0
- ) {
- BasRgvMap basRgvMap = basRgvMapMapper.selectById(basRgv.getRgvNo());
- if (basRgvMap == null) {
- log.error("{}鍙稲GV灏氭湭鍦ㄦ暟鎹簱鍦板浘涓繘琛岀淮鎶わ紒", rgvProtocol.getRgvNo());
- return false;
- }
- List<Integer> route = RouteUtils.getRoute(basRgvMap.getStartRoute(), basRgvMap.getEndRoute());
- basRgvMap.setNowRoute(rgvProtocol.getRgvPosI()); //鏇存柊灏忚溅褰撳墠浣嶇疆绔欑偣鍙�
- List<WrkMastSta> wrkMastStaList = wrkMastStaMapper.selectNoInterfereList(route, route);
- for (WrkMastSta wrkMastSta : wrkMastStaList){
- if (wrkMastSta.getType()!=1 || wrkMastSta.getWrkType()!=3){//1:婊$増 3锛氬彇鏀�
- continue;
- }
- BasDevp basDevp = basDevpService.selectById(wrkMastSta.getStaEnd());
- if (!basDevp.getAutoing().equals("Y") || basDevp.getLoading().equals("Y") || basDevp.getWrkNo()!=0){
- continue;
- }
- Date date = new Date();
-
- SiemensDevpThread devpThread = (SiemensDevpThread) SlaveConnection.get(SlaveType.Devp, rgvSlave.getDevpPlcId());
- StaProtocol staProtocol = devpThread.getStation().get(basDevp.getDevNo());
- if (staProtocol == null) {
- log.info(date+"鍙栨斁浠诲姟涓嬪彂锛氭湭鏌ヨ鍒扮珯鐐逛俊鎭細"+wrkMastSta);
- continue;
- }
- if (!staProtocol.isAutoing() || staProtocol.isLoading() || staProtocol.getWorkNo() != 0){
- continue;
- }
- if (basDevp.getDevNo()>117 && basDevp.getDevNo()<124){
- if (staProtocol.isLoadingSuper()){
- continue;
- }
- }
- if (basDevp.getDevNo()>=118 && basDevp.getDevNo()<=123){
- if (!staProtocol.isEmptyMk()){
- continue;
- }
- }
- BasDevp basDevpS = basDevpService.selectById(wrkMastSta.getStaStart());
- if (!basDevpS.getAutoing().equals("Y") || !basDevpS.getLoading().equals("Y") || basDevpS.getWrkNo()!=wrkMastSta.getWrkNo().intValue()){
- continue;
- }
- StaProtocol staProtocols = devpThread.getStation().get(basDevpS.getDevNo());
- if (staProtocols == null) {
- log.info(date+"鍙栨斁浠诲姟涓嬪彂锛氭湭鏌ヨ鍒扮珯鐐逛俊鎭細"+wrkMastSta);
- continue;
- }
- if (!staProtocols.isAutoing() || !staProtocols.isLoading() || staProtocols.getWorkNo() != wrkMastSta.getWrkNo().intValue()){
- continue;
- }
-
-
- log.info(date+"鍙栨斁浠诲姟涓嬪彂锛氬皬杞﹀伐浣滄。锛�"+wrkMastSta);
- log.info(date+"鍙栨斁浠诲姟涓嬪彂锛氱洰鏍囩珯鐘舵�侊細"+basDevp);
- boolean sign = rgvTakeFullAll(basRgvMap.getRgvNo(), wrkMastSta);
- if (sign){
- boolean signMap = rgvMapUpdate(basRgvMap, wrkMastSta.getStaStart(), wrkMastSta.getStaEnd());
- if (signMap){
- wrkMastSta.setWrkSts(1);
- try{
- wrkMastStaMapper.updateById(wrkMastSta);
- }catch (Exception e){
- log.error("鏇存柊灏忚溅浠诲姟澶辫触");
- }
- return true;
- }else {
- log.error("3864琛岋紝璐х墿鎼繍浠诲姟锛氬伐浣滃彿{}鎵�灞炰换鍔′笅鍙戝悗鍦板浘鍚屾澶辫触",wrkMastSta.getWrkNo());
- }
- }else {
- log.error("宸ヤ綔鍙穥}鎵�灞炰换鍔′笅鍙戝け璐�",wrkMastSta.getWrkNo());
- }
- break;
- }
- }
-// }
- }catch (Exception e){
- log.error("3875琛屾墽琛屽皬杞︽惉杩愪换鍔′笅鍙戝け璐�");
- log.error("3875琛�"+e);
- }
- return false;
- }
- /**
- * 鎵ц灏忚溅鎼繍浠诲姟//鎷嗙洏
- */
- public synchronized boolean rgvRunWrkMastEmptyStaPut(RgvSlave rgvSlave) {//鎷嗙洏
- try{
-// for (RgvSlave rgvSlave:slaveProperties.getRgv()) {
- RgvThread rgvThread = (RgvThread) SlaveConnection.get(SlaveType.Rgv, rgvSlave.getId());
- RgvProtocol rgvProtocol = rgvThread.getRgvProtocol();
- if (rgvProtocol == null) {
- return false;
- }
- BasRgv basRgv = basRgvService.selectById(rgvSlave.getId());
- if (basRgv == null) {
- log.error("{}鍙稲GV灏氭湭鍦ㄦ暟鎹簱杩涜缁存姢锛�", rgvSlave.getId());
- return false;
- }
-
- // 鍙湁褰揜GV绌洪棽銆佽嚜鍔�,宸ヤ綅浜屾湁鐗�//rgv鍙敤//鎷嗙洏
- if (rgvProtocol.getStatusType() == RgvStatusType.IDLE
- && rgvProtocol.getStatusType1() == RgvStatusType.IDLE
- && rgvProtocol.getStatusType2() == RgvStatusType.IDLE
- && rgvProtocol.getModeType() == RgvModeType.AUTO
- && rgvProtocol.getTaskNo1()==0 && rgvProtocol.getTaskNo2()==0
- && (rgvProtocol.getLoaded2()==3 || rgvProtocol.getLoaded2()==1 || rgvProtocol.getLoaded2()==4)////0 鏃犵墿锛�1 涓�灞傛棤鐗╀簩灞傛湁鐗� 锛堝彧鑳芥媶鍙狅級 锛�2涓�灞傛湁鐗╀簩灞傛棤鐗�() 锛�3 1銆�2灞傞兘鏈夌墿 4锛氾紙锛夊彧鍏佽鎷嗙洏
- ) {
- BasRgvMap basRgvMap = basRgvMapMapper.selectById(rgvProtocol.getRgvNo());
- if (basRgvMap == null) {
- log.error("{}鍙稲GV灏氭湭鍦ㄦ暟鎹簱鍦板浘涓繘琛岀淮鎶わ紒", rgvProtocol.getRgvNo());
- return false;
- }
- basRgvMap.setNowRoute(rgvProtocol.getRgvPosI()); //鏇存柊灏忚溅褰撳墠浣嶇疆绔欑偣鍙�
- List<Integer> route = RouteUtils.getRoute(basRgvMap.getStartRoute(), basRgvMap.getEndRoute());//鑾峰彇娲诲姩鑼冨洿
- List<WrkMastSta> wrkMastStaList = wrkMastStaMapper.selectNoInterfereList(route, route);//鏌ヨ鍙墽琛屼换鍔�
- for (WrkMastSta wrkMastSta : wrkMastStaList){
- if (wrkMastSta.getType()!=2 || wrkMastSta.getWrkType()!=2){// 2:绌烘澘 || 宸ヤ綔绫诲瀷 1:鍙栵紙鍙犵洏锛� 2锛氭媶鐩� 5锛氭弧鍙� 6锛氭弧鏀�
- continue;
- }
- boolean sign = false;
- if ( wrkMastSta.getStaEnd()!=0){//鏀�
- BasDevp basDevp = basDevpService.selectById(wrkMastSta.getStaEnd());
- if (!basDevp.getAutoing().equals("Y") || basDevp.getLoading().equals("Y") || basDevp.getWrkNo()!=0){
- continue;
- }
- Date date = new Date();
-
- SiemensDevpThread devpThread = (SiemensDevpThread) SlaveConnection.get(SlaveType.Devp, rgvSlave.getDevpPlcId());
- StaProtocol staProtocol = devpThread.getStation().get(basDevp.getDevNo());
- if (staProtocol == null) {
- log.info(date+"鎷嗙洏浠诲姟涓嬪彂锛氭湭鏌ヨ鍒扮珯鐐逛俊鎭細"+wrkMastSta);
- continue;
- }
- if (!staProtocol.isAutoing() || staProtocol.isLoading() || staProtocol.getWorkNo() != 0){
- continue;
- }
- if (basDevp.getDevNo()>117 && basDevp.getDevNo()<124){
- if (staProtocol.isLoadingSuper()){
- continue;
- }
- }
- if (basDevp.getDevNo()>=118 && basDevp.getDevNo()<=123){
- if (!staProtocol.isEmptyMk()){
- continue;
- }
- }
-
- log.info(date+"鎷嗙洏浠诲姟涓嬪彂锛氬皬杞﹀伐浣滄。锛�"+wrkMastSta);
- log.info(date+"鎷嗙洏浠诲姟涓嬪彂锛氱洰鏍囩珯鐘舵�侊細"+basDevp);
- sign = rgvPutEmpty(rgvProtocol.getRgvNo(),wrkMastSta);//鎷嗙洏
- }else {
- continue;
- }
- if (sign){
- boolean signMap = rgvMapUpdate(basRgvMap, basRgvMap.getStartRoute(), wrkMastSta.getStaEnd());
- if (signMap){
- wrkMastSta.setWrkSts(2);
- try{
- wrkMastStaMapper.updateById(wrkMastSta);
- }catch (Exception e){
- log.error("鏇存柊灏忚溅浠诲姟澶辫触");
- }
- return true;
- }else {
- log.error("3857琛岋紝璐х墿鎼繍浠诲姟锛氬伐浣滃彿{}鎵�灞炰换鍔′笅鍙戝悗鍦板浘鍚屾澶辫触",wrkMastSta.getWrkNo());
- }
- }else {
- log.error("宸ヤ綔鍙穥}鎵�灞炰换鍔′笅鍙戝け璐�",wrkMastSta.getWrkNo());
- }
- break;
- }
- }
-// }
- }catch (Exception e){
- log.error("3933琛屾墽琛屽皬杞︽斁绌烘澘浠诲姟涓嬪彂澶辫触");
- log.error("3933琛�"+e);
- }
- return false;
- }
-
- /**
- * 鎵ц灏忚溅鎼繍浠诲姟
- */
- public synchronized boolean rgvRunWrkMastEmptyStaPutFull(RgvSlave rgvSlave) {//婊℃斁
- try{
-// for (RgvSlave rgvSlave:slaveProperties.getRgv()) {
- RgvThread rgvThread = (RgvThread) SlaveConnection.get(SlaveType.Rgv, rgvSlave.getId());
- RgvProtocol rgvProtocol = rgvThread.getRgvProtocol();
- if (rgvProtocol == null) {
- return false;
- }
- BasRgv basRgv = basRgvService.selectById(rgvSlave.getId());
- if (basRgv == null) {
- log.error("{}鍙稲GV灏氭湭鍦ㄦ暟鎹簱杩涜缁存姢锛�", rgvSlave.getId());
- return false;
- }
-
- // 鍙湁褰揜GV绌洪棽銆佽嚜鍔�,宸ヤ綅浜屾湁鐗�//rgv鍙敤
- if (rgvProtocol.getStatusType() == RgvStatusType.IDLE
- && rgvProtocol.getStatusType1() == RgvStatusType.IDLE
- && rgvProtocol.getStatusType2() == RgvStatusType.IDLE
- && rgvProtocol.getModeType() == RgvModeType.AUTO
- && rgvProtocol.getTaskNo1()==0 && rgvProtocol.getTaskNo2()==0
- && (rgvProtocol.getLoaded2()==2 || rgvProtocol.getLoaded2()==3 ) ////0 鏃犵墿锛�1 涓�灞傛棤鐗╀簩灞傛湁鐗� 锛�2涓�灞傛湁鐗╀簩灞傛棤鐗� 锛堝彧鑳芥弧鏀撅級锛�3 1銆�2灞傞兘鏈夌墿 4锛氾紙锛夊彧鍏佽鎷嗙洏
- ) {
- BasRgvMap basRgvMap = basRgvMapMapper.selectById(rgvProtocol.getRgvNo());
- if (basRgvMap == null) {
- log.error("{}鍙稲GV灏氭湭鍦ㄦ暟鎹簱鍦板浘涓繘琛岀淮鎶わ紒", rgvProtocol.getRgvNo());
- return false;
- }
- basRgvMap.setNowRoute(rgvProtocol.getRgvPosI()); //鏇存柊灏忚溅褰撳墠浣嶇疆绔欑偣鍙�
- List<Integer> route = RouteUtils.getRoute(basRgvMap.getStartRoute(), basRgvMap.getEndRoute());//鑾峰彇娲诲姩鑼冨洿
- List<WrkMastSta> wrkMastStaList = wrkMastStaMapper.selectNoInterfereList(route, route);//鏌ヨ鍙墽琛屼换鍔�
- for (WrkMastSta wrkMastSta : wrkMastStaList){
- if (wrkMastSta.getType()!=2 || wrkMastSta.getWrkType()!=6){// 2:绌烘澘 || 宸ヤ綔绫诲瀷 1:鍙栵紙鍙犵洏锛� 2锛氭媶鐩� 5锛氭弧鍙� 6锛氭弧鏀� 7:鎻愬崌
- continue;
- }
- boolean sign = false;
- if ( wrkMastSta.getStaEnd()!=0){//婊℃斁
- BasDevp basDevp = basDevpService.selectById(wrkMastSta.getStaEnd());
- if (!basDevp.getAutoing().equals("Y") || basDevp.getLoading().equals("Y") || basDevp.getWrkNo()!=0){
- continue;
- }
- Date date = new Date();
-
- SiemensDevpThread devpThread = (SiemensDevpThread) SlaveConnection.get(SlaveType.Devp, rgvSlave.getDevpPlcId());
- StaProtocol staProtocol = devpThread.getStation().get(basDevp.getDevNo());
- if (staProtocol == null) {
- log.info(date+"婊℃斁浠诲姟涓嬪彂锛氭湭鏌ヨ鍒扮珯鐐逛俊鎭細"+wrkMastSta);
- continue;
- }
- if (!staProtocol.isAutoing() || staProtocol.isLoading() || staProtocol.getWorkNo() != 0){
- continue;
- }
- if (basDevp.getDevNo()>117 && basDevp.getDevNo()<124){
- if (staProtocol.isLoadingSuper()){
- continue;
- }
- }
- if (basDevp.getDevNo()>=118 && basDevp.getDevNo()<=123){
- if (!staProtocol.isEmptyMk()){
- continue;
- }
- }
-
- log.info(date+"婊℃斁浠诲姟涓嬪彂锛氬皬杞﹀伐浣滄。锛�"+wrkMastSta);
- log.info(date+"婊℃斁浠诲姟涓嬪彂锛氱洰鏍囩珯鐘舵�侊細"+basDevp);
- sign = rgvPutEmptyFull(rgvProtocol.getRgvNo(),wrkMastSta);
- }else {
- continue;
- }
- if (sign){
- boolean signMap = rgvMapUpdate(basRgvMap, basRgvMap.getStartRoute(), wrkMastSta.getStaEnd());
- if (signMap){
- wrkMastSta.setWrkSts(2);
- try{
- wrkMastStaMapper.updateById(wrkMastSta);
- }catch (Exception e){
- log.error("鏇存柊灏忚溅浠诲姟澶辫触");
- }
- return true;
- }else {
- log.error("3857琛岋紝璐х墿鎼繍浠诲姟锛氬伐浣滃彿{}鎵�灞炰换鍔′笅鍙戝悗鍦板浘鍚屾澶辫触",wrkMastSta.getWrkNo());
- }
- }else {
- log.error("宸ヤ綔鍙穥}鎵�灞炰换鍔′笅鍙戝け璐�",wrkMastSta.getWrkNo());
- }
- break;
- }
- }
-// }
- }catch (Exception e){
- log.error("3933琛屾墽琛屽皬杞︽斁绌烘澘浠诲姟涓嬪彂澶辫触");
- log.error("3933琛�"+e);
- }
- return false;
- }
-
- public synchronized boolean rgvRunWrkMastEmptyStaTake(RgvSlave rgvSlave) {//鍙犵洏
- try{
-// for (RgvSlave rgvSlave:slaveProperties.getRgv()) {
- RgvThread rgvThread = (RgvThread) SlaveConnection.get(SlaveType.Rgv, rgvSlave.getId());
- RgvProtocol rgvProtocol = rgvThread.getRgvProtocol();
- if (rgvProtocol == null) {
- return false;
- }
- BasRgv basRgv = basRgvService.selectById(rgvSlave.getId());
- if (basRgv == null) {
- log.error("{}鍙稲GV灏氭湭鍦ㄦ暟鎹簱杩涜缁存姢锛�", rgvSlave.getId());
- return false;
- }
-
- // 鍙湁褰揜GV绌洪棽銆佽嚜鍔�,宸ヤ綅浜屾棤鐗�//rgv鍙敤
- if (rgvProtocol.getStatusType() == RgvStatusType.IDLE
- && rgvProtocol.getStatusType1() == RgvStatusType.IDLE
- && rgvProtocol.getStatusType2() == RgvStatusType.IDLE
- && rgvProtocol.getModeType() == RgvModeType.AUTO
- && rgvProtocol.getTaskNo1()==0 && rgvProtocol.getTaskNo2()==0
- && (rgvProtocol.getLoaded2()==0 || rgvProtocol.getLoaded2()==1 ) //鐜板満淇敼锛氬彔鐩樻満锛�////0 鏃犵墿锛�1 涓�灞傛棤鐗╀簩灞傛湁鐗╋紙鍙兘鎷嗗彔锛� 锛�2涓�灞傛湁鐗╀簩灞傛棤鐗� 锛堝彧鑳芥弧鏀撅級锛�3 1銆�2灞傞兘鏈夌墿 4锛氾紙锛夊彧鍏佽鎷嗙洏
- ) {
- BasRgvMap basRgvMap = basRgvMapMapper.selectById(rgvProtocol.getRgvNo());
- if (basRgvMap == null) {
- log.error("{}鍙稲GV灏氭湭鍦ㄦ暟鎹簱鍦板浘涓繘琛岀淮鎶わ紒", rgvProtocol.getRgvNo());
- return false;
- }
- List<Integer> route = RouteUtils.getRoute(basRgvMap.getStartRoute(), basRgvMap.getEndRoute());
- basRgvMap.setNowRoute(rgvProtocol.getRgvPosI()); //鏇存柊灏忚溅褰撳墠浣嶇疆绔欑偣鍙�
- List<WrkMastSta> wrkMastStaList = wrkMastStaMapper.selectNoInterfereList(route, route);
- for (WrkMastSta wrkMastSta : wrkMastStaList){
- if (wrkMastSta.getType()!=2 || wrkMastSta.getWrkType()!=1){// 2:绌烘澘 || 宸ヤ綔绫诲瀷 1:鍙栵紙鍙犵洏锛� 2锛氭媶鐩� 5锛氭弧鍙� 6锛氭弧鏀�
- continue;
- }
- boolean sign = false;
- if ( wrkMastSta.getStaStart()!=0){//鍙�
- BasDevp basDevp = basDevpService.selectById(wrkMastSta.getStaStart());
- if (!basDevp.getAutoing().equals("Y") || !basDevp.getLoading().equals("Y")){
- continue;
- }
- Date date = new Date();
-
- SiemensDevpThread devpThread = (SiemensDevpThread) SlaveConnection.get(SlaveType.Devp, rgvSlave.getDevpPlcId());
- StaProtocol staProtocol = devpThread.getStation().get(basDevp.getDevNo());
- if (staProtocol == null) {
- log.info(date+"鍙犵洏浠诲姟涓嬪彂锛氭湭鏌ヨ鍒扮珯鐐逛俊鎭細"+wrkMastSta);
- continue;
- }
- if (!staProtocol.isAutoing() || !staProtocol.isLoading()){
- continue;
- }
- if (basDevp.getDevNo()>=118 && basDevp.getDevNo()<=123){
- if (!staProtocol.isEmptyMk()){
- continue;
- }
- }
-
- log.info(date+"鍙犵洏浠诲姟涓嬪彂锛氬皬杞﹀伐浣滄。锛�"+wrkMastSta);
- log.info(date+"鍙犵洏浠诲姟涓嬪彂锛氱洰鏍囩珯鐘舵�侊細"+basDevp);
- sign = rgvTakeEmpty(rgvProtocol.getRgvNo(),wrkMastSta);//鍙犵洏
- }else {
- continue;
- }
- if (sign){
- boolean signMap = rgvMapUpdate(basRgvMap, wrkMastSta.getStaStart(), basRgvMap.getStartRoute());
- if (signMap){
- wrkMastSta.setWrkSts(1);
- try{
- wrkMastStaMapper.updateById(wrkMastSta);
- }catch (Exception e){
- log.error("鏇存柊灏忚溅浠诲姟澶辫触");
- }
- return true;
- }else {
- log.error("3879琛岋紝璐х墿鎼繍浠诲姟锛氬伐浣滃彿{}鎵�灞炰换鍔′笅鍙戝悗鍦板浘鍚屾澶辫触",wrkMastSta.getWrkNo());
- }
- }else {
- log.error("宸ヤ綔鍙穥}鎵�灞炰换鍔′笅鍙戝け璐�",wrkMastSta.getWrkNo());
- }
- break;
- }
- }
-// }
- }catch (Exception e){
- log.error("3989琛屾墽琛屽皬杞﹀彇绌烘澘浠诲姟涓嬪彂澶辫触");
- log.error("3989琛�"+e);
- }
- return false;
- }
-
- /*
- * 鏈変换鍔′絾鏈墽琛� 姝ゆ椂闇�瑕佽皟鏁村皬杞︿綅缃�
- * */
- public synchronized void rgvRunWrkMastEmptyStaAvoidance() {
- try{
-// Integer integer = wrkMastStaMapper.selectAllWrkStsCount(null,0);//鏌ヨ鐘舵�佷负0鐨勪换鍔�
-// if (integer==0){
-// return;
-// }
- WrkMastSta wrkMastSta = wrkMastStaMapper.selectAllWrkStsCountWrkMastSta(null, 0);
- if (Cools.isEmpty(wrkMastSta)){
- return;
- }
- boolean signRgv = true;
- boolean signRgv1 = true;
- boolean signRgv2 = true;
- for (RgvSlave rgvSlave:slaveProperties.getRgv()) {
- RgvThread rgvThread = (RgvThread) SlaveConnection.get(SlaveType.Rgv, rgvSlave.getId());
- RgvProtocol rgvProtocol = rgvThread.getRgvProtocol();
- if (rgvProtocol == null) {
- continue;
- }
- BasRgv basRgv = basRgvService.selectById(rgvSlave.getId());
- if (basRgv == null) {
- log.error("{}鍙稲GV灏氭湭鍦ㄦ暟鎹簱杩涜缁存姢锛�", rgvSlave.getId());
- continue;
- }
-
- // 鍙湁褰揜GV绌洪棽銆佽嚜鍔�,宸ヤ綅涓�鏃犵墿//rgv鍙敤
- if (rgvProtocol.getStatusType() == RgvStatusType.IDLE
- && rgvProtocol.getModeType() == RgvModeType.AUTO
- && rgvProtocol.getLoaded1()==0 //鐜板満淇敼锛氬彔鐩樻満锛屼笉婊¢兘绠楁棤鐗╋紝鎬庝箞鍒ゆ柇闇�瑕佽窡鐢垫帶瀵规帴
- && rgvProtocol.getTaskNo1()==0
- && rgvProtocol.getTaskNo2()==0
- && rgvProtocol.getStatusType1() == RgvStatusType.IDLE
- && rgvProtocol.getStatusType2() == RgvStatusType.IDLE
- ) {
- if (rgvProtocol.getRgvNo()!=1){
- if (!rgvProtocol.getRgvPosI().equals(120) && !rgvProtocol.getRgvPosI().equals(110)){
- continue;
- }
- rgvAvoidanceXY(rgvProtocol.getRgvNo());
-// return;
- continue;
- }
- if (!rgvProtocol.getRgvPosI().equals(110) && !rgvProtocol.getRgvPosI().equals(108) && !rgvProtocol.getRgvPosI().equals(119)){
- continue;
- }
- Integer count108Y = wrkMastStaMapper.selectAllWrkCount108Y();
- if (count108Y!=0){
- continue;
- }
-// Integer count108 = wrkMastStaMapper.selectAllWrkCount108();
-// if (count108!=0){
-// continue;
-// }
- rgvAvoidanceXY(rgvProtocol.getRgvNo());
- continue;
-// BasRgvMap basRgvMap = basRgvMapMapper.selectById(rgvProtocol.getRgvNo());
-// Integer fallMerge = RouteUtils.RouteIndexFarMas(basRgvMap.getRgvNo(), basRgvMap.getEndRoute()); //鑾峰彇鍚堝苟骞叉秹椤�
-// List<Integer> route = RouteUtils.getRoute(basRgvMap.getStartRoute(),fallMerge);
-// List<WrkMastSta> wrkMastStaList = wrkMastStaMapper.selectNoInterfereList(route ,route);
-// if (!wrkMastStaList.isEmpty()){
-// log.info("灏忚溅瀛樺湪鍙墽琛屼换鍔★紝璺宠繃閬胯锛侊紒4214");
-// return;
-// }
-// if (rgvProtocol.getRgvPosI().equals(basRgvMap.getStartRoute())){
-//// if (!RouteUtils.RgvRunStaSign(rgvProtocol.getRgvPosI(),RouteUtils.RouteIndexFarMas(rgvProtocol.getRgvNo(),rgvRunSta[rgvProtocol.getRgvNo()-1]),rgvProtocol.getRgvNo())){
-//// if (!RouteUtils.RgvRunStaSign(rgvProtocol.getRgvPosI(),rgvRunSta[rgvProtocol.getRgvNo()-1],rgvProtocol.getRgvNo())){
-// if (rgvProtocol.getRgvNo()==1){
-// signRgv1 = false;
-// }else {
-// signRgv2 = false;
-// }
-// }
-// if (rgvProtocol.getRgvNo()==1 && (rgvProtocol.getRgvPosI().equals(101) || rgvProtocol.getRgvPosI().equals(102) )){
-// signRgv1 = false;
-// continue;
-// } else if (rgvProtocol.getRgvNo()==2 && (rgvProtocol.getRgvPosI().equals(116) || rgvProtocol.getRgvPosI().equals(117) ) ){
-// signRgv2 = false;
-// continue;
-// }
- }else {
- signRgv = false;
- break;
- }
- }
-// if (signRgv && (signRgv1 || signRgv2)){
-// for (RgvSlave rgvSlave:slaveProperties.getRgv()) {
-// RgvThread rgvThread = (RgvThread) SlaveConnection.get(SlaveType.Rgv, rgvSlave.getId());
-// RgvProtocol rgvProtocol = rgvThread.getRgvProtocol();
-// if (rgvProtocol == null) {
-// continue;
-// }
-//
-// // 鍙湁褰揜GV绌洪棽銆佽嚜鍔�,宸ヤ綅涓�鏃犵墿//rgv鍙敤
-// if (rgvProtocol.getStatusType() == RgvStatusType.IDLE
-// && rgvProtocol.getModeType() == RgvModeType.AUTO
-// && rgvProtocol.getLoaded1()==0 //鐜板満淇敼锛氬彔鐩樻満锛屼笉婊¢兘绠楁棤鐗╋紝鎬庝箞鍒ゆ柇闇�瑕佽窡鐢垫帶瀵规帴
-// && rgvProtocol.getTaskNo1()==0
-// && rgvProtocol.getTaskNo2()==0
-// && rgvProtocol.getStatusType1() == RgvStatusType.IDLE
-// && rgvProtocol.getStatusType2() == RgvStatusType.IDLE
-// ) {
-// if (rgvProtocol.getRgvNo()==1 && (rgvProtocol.getRgvPosI().equals(101) || rgvProtocol.getRgvPosI().equals(102) )){
-// continue;
-// } else if (rgvProtocol.getRgvNo()==2 && (rgvProtocol.getRgvPosI().equals(116) || rgvProtocol.getRgvPosI().equals(117) ) ){
-// continue;
-// }
-// BasRgvMap basRgvMap = basRgvMapMapper.selectById(rgvProtocol.getRgvNo());
-// rgvAvoidanceXY(rgvProtocol.getRgvNo());
-// rgvMapUpdate(basRgvMap,basRgvMap.getStartRoute(),basRgvMap.getStartRoute());
-//
-// }
-// }
-// }
- }catch (Exception e){
- log.error("4109琛屾墽琛屽皬杞﹀垵濮嬪寲浠诲姟涓嬪彂澶辫触");
- log.error("4109琛�"+e);
- }
- }
-
- /*
- * 鍒锋柊鍦板浘鏁版嵁
- * */
- public synchronized void refreshRgvMap() {
- try{
- for (RgvSlave rgvSlave:slaveProperties.getRgv()) {
- RgvThread rgvThread = (RgvThread) SlaveConnection.get(SlaveType.Rgv, rgvSlave.getId());
- RgvProtocol rgvProtocol = rgvThread.getRgvProtocol();
- if (rgvProtocol == null) {
- continue;
- }
- BasRgv basRgv = basRgvService.selectById(rgvSlave.getId());
- if (basRgv == null) {
- log.error("{}鍙稲GV灏氭湭鍦ㄦ暟鎹簱杩涜缁存姢锛�", rgvSlave.getId());
- continue;
- }
-
- // 鍙湁褰揜GV绌洪棽銆佽嚜鍔�,宸ヤ綅涓�鏃犵墿//rgv鍙敤
- if (rgvProtocol.getStatusType() == RgvStatusType.IDLE
- && rgvProtocol.getModeType() == RgvModeType.AUTO
- && rgvProtocol.getLoaded1()==0 //鐜板満淇敼锛氬彔鐩樻満锛屼笉婊¢兘绠楁棤鐗╋紝鎬庝箞鍒ゆ柇闇�瑕佽窡鐢垫帶瀵规帴
- && rgvProtocol.getTaskNo1()==0
- && rgvProtocol.getTaskNo2()==0
- ) {
- BasRgvMap basRgvMap = basRgvMapMapper.selectById(rgvSlave.getId());
- basRgvMap.setNowRoute(rgvProtocol.getRgvPosI());
- rgvMapUpdate(basRgvMap,basRgvMap.getStartRoute(),basRgvMap.getStartRoute());
- }
- }
- }catch (Exception e){
- log.error("4109琛屾墽琛屽皬杞﹀垵濮嬪寲浠诲姟涓嬪彂澶辫触");
- log.error("4109琛�"+e);
- }
- }
-
- /*
- * 灏忚溅XY绉诲姩 閬胯
- * */
- public synchronized boolean rgvAvoidanceXY(Integer rgvId){
- if (rgvId==1){
- try{
- BasRgvMap basRgvMap = basRgvMapMapper.selectById(rgvId);
- // 鍛戒护涓嬪彂鍖� --------------------------------------------------------------------------
- RgvCommand rgvCommand = new RgvCommand();
- rgvCommand.setRgvNo(rgvId); // RGV缂栧彿
- rgvCommand.setAckFinish1((short) 0); // 宸ヤ綅1浠诲姟瀹屾垚纭浣�
- rgvCommand.setTaskNo1((short)32222); // 宸ヤ綅1宸ヤ綔鍙�
- rgvCommand.setTaskMode1(RgvTaskModeType.X_MOVE); // 宸ヤ綅1浠诲姟妯″紡: 鍥炲師鐐�
- //basRgvMap.getLockStartRoute().shortValue()
- rgvCommand.setSourceStaNo1( (short)104);
- rgvCommand.setCommand((short) 1); //宸ヤ綅1浠诲姟纭
- if (!MessageQueue.offer(SlaveType.Rgv, rgvId, new Task(4, rgvCommand))) {
- //step=2,宸ヤ綅1銆�2鍐欎换鍔★紱 step=4锛屽伐浣�1鍐欎换鍔★紱 step=5锛屽伐浣�2鍐欎换鍔� step=9锛屽洖鍘熺偣 9999浠诲姟鍙�
- log.error("RGV鍛戒护涓嬪彂澶辫触锛孯GV鍙�={}锛屼换鍔℃暟鎹�={}", rgvId, JSON.toJSON(rgvCommand));
- return false;
- } else {
- return true;
- }
- }catch (Exception e){
- return false;
-
- }
- }else {
- try{
- BasRgvMap basRgvMap = basRgvMapMapper.selectById(rgvId);
- // 鍛戒护涓嬪彂鍖� --------------------------------------------------------------------------
- RgvCommand rgvCommand = new RgvCommand();
- rgvCommand.setRgvNo(rgvId); // RGV缂栧彿
- rgvCommand.setAckFinish2((short) 0); // 宸ヤ綅2浠诲姟瀹屾垚纭浣�
- rgvCommand.setTaskNo2((short)32222); // 宸ヤ綅2宸ヤ綔鍙�
- rgvCommand.setTaskMode2(RgvTaskModeType.X_MOVE); // 宸ヤ綅2浠诲姟妯″紡: 鍥炲師鐐�
- rgvCommand.setSourceStaNo2((short)114);
- rgvCommand.setCommand((short) 2); //宸ヤ綅2浠诲姟纭
- if (!MessageQueue.offer(SlaveType.Rgv, rgvId, new Task(5, rgvCommand))) {
- //step=2,宸ヤ綅1銆�2鍐欎换鍔★紱 step=4锛屽伐浣�1鍐欎换鍔★紱 step=5锛屽伐浣�2鍐欎换鍔� step=9锛屽洖鍘熺偣 9999浠诲姟鍙�
- log.error("RGV鍛戒护涓嬪彂澶辫触锛孯GV鍙�={}锛屼换鍔℃暟鎹�={}", rgvId, JSON.toJSON(rgvCommand));
- return false;
- } else {
- return true;
- }
- }catch (Exception e){
- return false;
-
}
}
+ return "鏃�";
+
}
+ public boolean rgvDetection(RgvSlave slave){
+ RgvProtocol rgvProtocol = RgvStatusCache.getRgvStatus(slave.getId());
+ RgvTaskProtocol rgvTaskProtocol = RgvTaskCache.getRgvStatus(slave.getId());
-
- /*
- * 灏忚溅鍙栬揣鑷冲伐浣嶄换鍔�
- * */
- public synchronized boolean rgvTakeFullAll(Integer rgvId,WrkMastSta wrkMastSta){
- try{
- // 鍛戒护涓嬪彂鍖� --------------------------------------------------------------------------
- RgvCommand rgvCommand = new RgvCommand();
- rgvCommand.setRgvNo(rgvId); // RGV缂栧彿
- rgvCommand.setAckFinish1((short) 0); // 宸ヤ綅1浠诲姟瀹屾垚纭浣�
- rgvCommand.setTaskNo1(wrkMastSta.getWrkNo().shortValue()); // 宸ヤ綅1宸ヤ綔鍙�
- rgvCommand.setTaskMode1(RgvTaskModeType.FETCH_PUT); // 宸ヤ綅1浠诲姟妯″紡: 鍙栨斁璐�
- rgvCommand.setSourceStaNo1(wrkMastSta.getStaStart().shortValue()); //宸ヤ綅1璧风偣
- rgvCommand.setDestinationStaNo1(wrkMastSta.getStaEnd().shortValue()); //宸ヤ綅1鐩爣绔欑偣
- rgvCommand.setCommand((short) 1); //宸ヤ綅1浠诲姟纭
- if (!MessageQueue.offer(SlaveType.Rgv, rgvId, new Task(4, rgvCommand))) {
- //step=2,宸ヤ綅1銆�2鍐欎换鍔★紱 step=4锛屽伐浣�1鍐欎换鍔★紱 step=5锛屽伐浣�2鍐欎换鍔�
- log.error("RGV鍛戒护涓嬪彂澶辫触锛孯GV鍙�={}锛屼换鍔℃暟鎹�={}", rgvId, JSON.toJSON(rgvCommand));
- return false;
- } else {
- return true;
- }
- }catch (Exception e){
+ if (rgvProtocol == null || rgvTaskProtocol ==null) {
return false;
}
- }
-
- /*
- * 灏忚溅鍙栬揣鑷冲伐浣嶄换鍔�
- * */
- public synchronized boolean rgvTakeFull(Integer rgvId,WrkMastSta wrkMastSta){
- try{
- // 鍛戒护涓嬪彂鍖� --------------------------------------------------------------------------
- RgvCommand rgvCommand = new RgvCommand();
- rgvCommand.setRgvNo(rgvId); // RGV缂栧彿
- rgvCommand.setAckFinish1((short) 0); // 宸ヤ綅1浠诲姟瀹屾垚纭浣�
- rgvCommand.setTaskNo1(wrkMastSta.getWrkNo().shortValue()); // 宸ヤ綅1宸ヤ綔鍙�
- rgvCommand.setTaskMode1(RgvTaskModeType.FETCH); // 宸ヤ綅1浠诲姟妯″紡: 鍙栬揣
- rgvCommand.setSourceStaNo1(wrkMastSta.getStaStart().shortValue()); //宸ヤ綅1璧风偣
- rgvCommand.setCommand((short) 1); //宸ヤ綅1浠诲姟纭
- if (!MessageQueue.offer(SlaveType.Rgv, rgvId, new Task(4, rgvCommand))) {
- //step=2,宸ヤ綅1銆�2鍐欎换鍔★紱 step=4锛屽伐浣�1鍐欎换鍔★紱 step=5锛屽伐浣�2鍐欎换鍔�
- log.error("RGV鍛戒护涓嬪彂澶辫触锛孯GV鍙�={}锛屼换鍔℃暟鎹�={}", rgvId, JSON.toJSON(rgvCommand));
- return false;
- } else {
- return true;
- }
- }catch (Exception e){
+ if (!rgvProtocol.getModeType().equals(RgvModeType.AUTO) || rgvProtocol.getRgvPos().equals(0L) || rgvTaskProtocol.getAvoid() == -1 || rgvProtocol.getRgvPosDestination() == 0L
+ || (!rgvProtocol.getStatusType().equals(RgvStatusType.IDLE) && !rgvProtocol.getStatusType().equals(RgvStatusType.ROAM))) {
return false;
}
- }
+ RgvProtocol rgvProtocolOther = RgvStatusCache.getRgvStatus(slave.getOtherId());
+ RgvTaskProtocol rgvTaskProtocolOther = RgvTaskCache.getRgvStatus(slave.getOtherId());
- /*
- * 灏忚溅鏀捐揣鑷宠緭閫佺嚎浠诲姟
- * */
- public synchronized boolean rgvPutFull(Integer rgvId,WrkMastSta wrkMastSta){
- try{
- // 鍛戒护涓嬪彂鍖� --------------------------------------------------------------------------
- RgvCommand rgvCommand = new RgvCommand();
- rgvCommand.setRgvNo(rgvId); // RGV缂栧彿
- rgvCommand.setAckFinish1((short) 0); // 宸ヤ綅1浠诲姟瀹屾垚纭浣�
- rgvCommand.setTaskNo1(wrkMastSta.getWrkNo().shortValue()); // 宸ヤ綅1宸ヤ綔鍙�
- rgvCommand.setTaskMode1(RgvTaskModeType.PUT); // 宸ヤ綅1浠诲姟妯″紡: 鏀捐揣
- rgvCommand.setDestinationStaNo1(wrkMastSta.getStaEnd().shortValue()); //宸ヤ綅1鐩爣绔欑偣
- rgvCommand.setCommand((short) 1); //宸ヤ綅1浠诲姟纭
- if (!MessageQueue.offer(SlaveType.Rgv, rgvId, new Task(4, rgvCommand))) {
- //step=2,宸ヤ綅1銆�2鍐欎换鍔★紱 step=4锛屽伐浣�1鍐欎换鍔★紱 step=5锛屽伐浣�2鍐欎换鍔�
- log.error("RGV鍛戒护涓嬪彂澶辫触锛孯GV鍙�={}锛屼换鍔℃暟鎹�={}", rgvId, JSON.toJSON(rgvCommand));
- return false;
- } else {
- return true;
- }
- }catch (Exception e){
+ if (rgvProtocolOther == null) {
return false;
}
- }
-
- /*
- * 灏忚溅鍙栫┖鏉胯嚦宸ヤ綅浠诲姟 鍙犵洏
- * */
- public synchronized boolean rgvTakeEmpty(Integer rgvId,WrkMastSta wrkMastSta){
- try{
- // 鍛戒护涓嬪彂鍖� --------------------------------------------------------------------------
- RgvCommand rgvCommand = new RgvCommand();
- rgvCommand.setRgvNo(rgvId); // RGV缂栧彿
- rgvCommand.setAckFinish2((short) 0); // 宸ヤ綅2浠诲姟瀹屾垚纭浣�
- rgvCommand.setTaskNo2(wrkMastSta.getWrkNo().shortValue()); // 宸ヤ綅2宸ヤ綔鍙�
- rgvCommand.setTaskMode2(RgvTaskModeType.FETCH); // 宸ヤ綅2浠诲姟妯″紡: 鍙栬揣
- rgvCommand.setSourceStaNo2(wrkMastSta.getStaStart().shortValue()); //宸ヤ綅2璧风偣
- rgvCommand.setCommand((short) 2); //宸ヤ綅2浠诲姟纭
- if (!MessageQueue.offer(SlaveType.Rgv, rgvId, new Task(5, rgvCommand))) {
- //step=2,宸ヤ綅1銆�2鍐欎换鍔★紱 step=4锛屽伐浣�1鍐欎换鍔★紱 step=5锛屽伐浣�2鍐欎换鍔�
- log.error("RGV鍛戒护涓嬪彂澶辫触锛孯GV鍙�={}锛屼换鍔℃暟鎹�={}", rgvId, JSON.toJSON(rgvCommand));
+ if (rgvProtocolOther.statusEnable){
+ if (!rgvProtocolOther.getModeType().equals(RgvModeType.AUTO) || rgvProtocolOther.getRgvPos().equals(0L) || rgvTaskProtocolOther.getAvoid() == -1 || rgvProtocolOther.getRgvPosDestination() == 0L) {
return false;
- } else {
- return true;
}
- }catch (Exception e){
- return false;
}
+ return true;
}
- /*
- * 灏忚溅鏀剧┖鏉胯嚦杈撻�佺嚎浠诲姟 //鎷嗙洏
- * */
- public synchronized boolean rgvPutEmpty(Integer rgvId,WrkMastSta wrkMastSta){
- try{
- // 鍛戒护涓嬪彂鍖� --------------------------------------------------------------------------
- RgvCommand rgvCommand = new RgvCommand();
- rgvCommand.setRgvNo(rgvId); // RGV缂栧彿
- rgvCommand.setAckFinish2((short) 0); // 宸ヤ綅2浠诲姟瀹屾垚纭浣�
- rgvCommand.setTaskNo2(wrkMastSta.getWrkNo().shortValue()); // 宸ヤ綅2宸ヤ綔鍙�
- rgvCommand.setTaskMode2(RgvTaskModeType.PUT); // 宸ヤ綅2浠诲姟妯″紡: 鏀捐揣
- rgvCommand.setDestinationStaNo2(wrkMastSta.getStaEnd().shortValue()); //宸ヤ綅2鐩爣绔欑偣
- rgvCommand.setCommand((short) 2); //宸ヤ綅2浠诲姟纭
- if (!MessageQueue.offer(SlaveType.Rgv, rgvId, new Task(5, rgvCommand))) {
- //step=2,宸ヤ綅1銆�2鍐欎换鍔★紱 step=4锛屽伐浣�1鍐欎换鍔★紱 step=5锛屽伐浣�2鍐欎换鍔�
- log.error("RGV鍛戒护涓嬪彂澶辫触锛孯GV鍙�={}锛屼换鍔℃暟鎹�={}", rgvId, JSON.toJSON(rgvCommand));
- return false;
- } else {
- return true;
- }
- }catch (Exception e){
- return false;
+ public TaskWrk deviceDetection(RgvSlave.RgvStn inSta){
+
+ DevpThread devpThread = (DevpThread) SlaveConnection.get(SlaveType.Devp, inSta.getDevpPlcId());
+ StaProtocol staProtocol = devpThread.getStation().get(inSta.getStaNo());
+ if (staProtocol == null){
+ return null;
}
+ // 鍒ゆ柇鏄惁婊¤冻鍙栬揣鏉′欢
+ if (staProtocol.isAutoing()
+// && staProtocol.isLoading()
+ && staProtocol.getWorkNo()!=0) {
+ TaskWrk taskWrk = taskWrkService.selectByTaskNo(staProtocol.getWorkNo().toString());
+ if (taskWrk!=null){
+ return taskWrk;
+ }
+ }
+ return null;
}
- /*
- * 灏忚溅鍙栫┖鏉胯嚦宸ヤ綅浠诲姟 婊″彇
- * */
- public synchronized boolean rgvTakeEmptyFull(Integer rgvId,WrkMastSta wrkMastSta){
- try{
- // 鍛戒护涓嬪彂鍖� --------------------------------------------------------------------------
- RgvCommand rgvCommand = new RgvCommand();
- rgvCommand.setRgvNo(rgvId); // RGV缂栧彿
- rgvCommand.setAckFinish2((short) 0); // 宸ヤ綅2浠诲姟瀹屾垚纭浣�
- rgvCommand.setTaskNo2(wrkMastSta.getWrkNo().shortValue()); // 宸ヤ綅2宸ヤ綔鍙�
- rgvCommand.setTaskMode2(RgvTaskModeType.FETCH_5); // 宸ヤ綅2浠诲姟妯″紡: 婊″彇
- rgvCommand.setSourceStaNo2(wrkMastSta.getStaStart().shortValue()); //宸ヤ綅2璧风偣
- rgvCommand.setCommand((short) 2); //宸ヤ綅2浠诲姟纭
- if (!MessageQueue.offer(SlaveType.Rgv, rgvId, new Task(5, rgvCommand))) {
- //step=2,宸ヤ綅1銆�2鍐欎换鍔★紱 step=4锛屽伐浣�1鍐欎换鍔★紱 step=5锛屽伐浣�2鍐欎换鍔�
- log.error("RGV鍛戒护涓嬪彂澶辫触锛孯GV鍙�={}锛屼换鍔℃暟鎹�={}", rgvId, JSON.toJSON(rgvCommand));
- return false;
- } else {
- return true;
- }
- }catch (Exception e){
- return false;
- }
- }
-
- /*
- * 灏忚溅鏀剧┖鏉胯嚦杈撻�佺嚎浠诲姟 //婊℃斁
- * */
- public synchronized boolean rgvPutEmptyFull(Integer rgvId,WrkMastSta wrkMastSta){
- try{
- // 鍛戒护涓嬪彂鍖� --------------------------------------------------------------------------
- RgvCommand rgvCommand = new RgvCommand();
- rgvCommand.setRgvNo(rgvId); // RGV缂栧彿
- rgvCommand.setAckFinish2((short) 0); // 宸ヤ綅2浠诲姟瀹屾垚纭浣�
- rgvCommand.setTaskNo2(wrkMastSta.getWrkNo().shortValue()); // 宸ヤ綅2宸ヤ綔鍙�
- rgvCommand.setTaskMode2(RgvTaskModeType.PUT_6); // 宸ヤ綅2浠诲姟妯″紡: 婊℃斁
- rgvCommand.setDestinationStaNo2(wrkMastSta.getStaEnd().shortValue()); //宸ヤ綅2鐩爣绔欑偣
- rgvCommand.setCommand((short) 2); //宸ヤ綅2浠诲姟纭
- if (!MessageQueue.offer(SlaveType.Rgv, rgvId, new Task(5, rgvCommand))) {
- //step=2,宸ヤ綅1銆�2鍐欎换鍔★紱 step=4锛屽伐浣�1鍐欎换鍔★紱 step=5锛屽伐浣�2鍐欎换鍔�
- log.error("RGV鍛戒护涓嬪彂澶辫触锛孯GV鍙�={}锛屼换鍔℃暟鎹�={}", rgvId, JSON.toJSON(rgvCommand));
- return false;
- } else {
- return true;
- }
- }catch (Exception e){
- return false;
- }
- }
-
- /*
- * 灏忚溅澶嶄綅
- * */
- public synchronized boolean rgvComplete(Integer rgvId){
- try{
- // 鍛戒护涓嬪彂鍖� --------------------------------------------------------------------------
- if (!MessageQueue.offer(SlaveType.Rgv, rgvId, new Task(3, new RgvCommand()))) {
- //step=2,宸ヤ綅1銆�2鍐欎换鍔★紱 step=4锛屽伐浣�1鍐欎换鍔★紱 step=5锛屽伐浣�2鍐欎换鍔�
- log.error("RGV鍛戒护涓嬪彂澶辫触锛孯GV鍙�={}",rgvId);
- return false;
- } else {
- log.info("RGV鍛戒护涓嬪彂鎴愬姛锛孯GV鍙�={}",rgvId);
- return true;
- }
- }catch (Exception e){
- log.error("RGV鍛戒护涓嬪彂澶辫触锛孯GV鍙�={}銆傚紓甯革細"+e,rgvId);
- return false;
- }
- }
-
- /*
- * 灏忚溅鍦板浘鏇存柊 鏇存柊閿�
- * */
- public synchronized boolean rgvMapUpdate(BasRgvMap basRgvMapCurrent,Integer staStart,Integer staEnd){
- if (rgvOpen){
+ public boolean rgvOtherStatusEnable(RgvSlave slave){
+ RgvProtocol rgvProtocolOther = RgvStatusCache.getRgvStatus(slave.getOtherId());
+ if (rgvProtocolOther == null) {
return true;
}
-
-// List<Integer> integers = RouteUtils.RouteMapCurrentFar(basRgvMapCurrent.getNowRoute(),staStart,staEnd, basRgvMapCurrent.getLockStartRoute());
- //鏇存柊褰撳墠灏忚溅閿�
- try{
- Integer farCurrentStaNo = RouteUtils.RouteIndexFarMas(basRgvMapCurrent.getNowRoute(), staStart, staEnd, basRgvMapCurrent.getLockStartRoute());//鑾峰彇鏈�杩滅珯鐐�
-// Integer farCurrentStaNo = RouteUtils.RouteIndexFarMas(staEnd, staStart, staEnd, basRgvMapCurrent.getLockStartRoute());//鑾峰彇鏈�杩滅珯鐐�
- Integer fallMerge = RouteUtils.RouteIndexFarMas(basRgvMapCurrent.getRgvNo(), farCurrentStaNo); //鑾峰彇鍚堝苟骞叉秹椤�
- basRgvMapCurrent.setLockEndRoute(fallMerge);
- basRgvMapMapper.updateById(basRgvMapCurrent);
-
- //鏇存柊鍙︿竴鍙板皬杞﹀湴鍥�
- Integer rgvNoOther = basRgvMapCurrent.getRgvNoOther();
- BasRgvMap basRgvMapOther = basRgvMapMapper.selectById(rgvNoOther);
- List<Integer> integers = RouteUtils.RouteMapCurrentFar(fallMerge, basRgvMapCurrent.getLockStartRoute());
- Integer lockEndRoute = RouteUtils.RouteMapOtherFarStnNo(integers, basRgvMapCurrent.getLockStartRoute());//鍙︿竴鍙板皬杞﹀彲娲诲姩鏈�杩滀綅缃�
- Integer lockEndRouteL = RouteUtils.RouteIndexFarMasL(rgvNoOther, lockEndRoute);//鍙︿竴鍙板皬杞﹀彲娲诲姩鏈�杩滀綅缃�
- basRgvMapOther.setEndRoute(lockEndRouteL);
- basRgvMapMapper.updateById(basRgvMapOther);
+ if (rgvProtocolOther.statusEnable){
+// if (!rgvProtocolOther.getModeType().equals(RgvModeType.AUTO) || rgvProtocolOther.getRgvPos().equals(0L)) {
return true;
- }catch (Exception e){
- log.error("灏忚溅鍦板浘鏇存柊鍑洪敊锛�");
- return false;
+// }
+ }
+ return false;
+ }
+
+ public synchronized void taskStart() {
+ for (RgvSlave rgvSlave : slaveProperties.getRgv()) {
+ try{
+ if (rgvDetection(rgvSlave)){
+ String taskNoNow = rgvOtherTaskWrk(rgvSlave);
+ List<BasDevpPosition> basDevpPositions = basDevpPositionService.selectList(new EntityWrapper<BasDevpPosition>().orderBy("PLC_POSITION", true));
+ boolean itSmall = new TrackRangeUtils().IsItSmall(rgvSlave);
+ if (basDevpPositions.isEmpty()) {
+ log.error("鑾峰彇鎵�鏈夌珯鐐逛俊鎭紓甯�");
+ continue;
+ }
+ List<TaskWrk> taskWrkList = new ArrayList<>();
+ List<Integer> staList = new ArrayList<>();
+ for (RgvSlave.RgvStn inSta : rgvSlave.getRgvInSta()){
+ TaskWrk taskWrk = deviceDetection(inSta);
+ if (taskWrk!=null){
+ if (taskWrk.getTaskNo().equals(taskNoNow)) continue;
+ taskWrkList.add(taskWrk);
+ staList.add(inSta.getStaNo());
+ }
+ }
+
+ if (taskWrkList.isEmpty() || staList.isEmpty()) continue;
+
+ boolean sign = false;
+
+ if (rgvOtherStatusEnable(rgvSlave)){
+ //鍒嗘垚涓婁笅涓ら儴鍒嗕换鍔�
+ List<Integer>[] avoidRange = RouteUtils.gradeRange(staList, basDevpPositions,itSmall);
+ List<Integer> rangeListSou = avoidRange[itSmall ? 0 : 1];
+ List<Integer> rangeListSouOther = avoidRange[itSmall ? 1 : 0];
+ //灏辫繎鎺掑簭
+ RgvProtocol rgvProtocol = RgvStatusCache.getRgvStatus(rgvSlave.getId());
+ List<Integer> rangeList = RouteUtils.SortNearby(rangeListSou, rgvProtocol.RgvPos, basDevpPositions);
+ List<Integer> rangeListOther = RouteUtils.SortNearby(rangeListSouOther, rgvProtocol.RgvPos, basDevpPositions);
+
+ //鎵�灞為儴鍒嗗氨杩涘彇璐�
+
+ //绛涢�夎寖鍥村唴浠诲姟
+ //灏辫繎鎺掑簭
+ //绛涢�夊湪鑼冨洿浠诲姟
+ Long[][] avoidedRange = new TrackRangeUtils().avoidRangeArr(rgvSlave, trackEntireLength, trackBenchmark, avoidDistance);
+ List<Integer> belongToRange = RouteUtils.SortNearby(RouteUtils.belongToRange(rangeList, avoidedRange[0], basDevpPositions), rgvProtocol.RgvPos, basDevpPositions);
+
+ for (Integer staNoNow : belongToRange){
+ for (RgvSlave.RgvStn rgvStn : rgvSlave.getRgvInSta()){
+ if (rgvStn.getStaNo().equals(staNoNow)){
+ TaskWrk taskWrk = deviceDetection(rgvStn);
+ if (taskWrk!=null){
+ BasDevpPosition basDevpPosition = basDevpPositionService.selectOne(new EntityWrapper<BasDevpPosition>().eq("DEV_NO", taskWrk.getTargetPointConvert()));
+ if (RouteUtils.CheckIfItIsWithinTheRange(rangeList,basDevpPosition.getPlcPosition(),basDevpPositions,itSmall)){
+ sign = taskGenerate(rgvSlave,rgvStn,0);
+ }
+ }
+ break;
+ }
+ }
+ if (sign){
+ break;
+ }
+ }
+ if (!sign){
+ // 绛涢�夎寖鍥村唴鍙栬揣浠诲姟
+ for (Integer staNoNow : belongToRange){
+ for (RgvSlave.RgvStn rgvStn : rgvSlave.getRgvInSta()){
+ if (rgvStn.getStaNo().equals(staNoNow)){
+ sign = taskGenerate(rgvSlave,rgvStn,0);
+ break;
+ }
+ }
+ if (sign){
+ break;
+ }
+ }
+ }
+
+ if (!sign){
+ for (Integer staNoNow : rangeList){
+ for (RgvSlave.RgvStn rgvStn : rgvSlave.getRgvInSta()){
+ if (rgvStn.getStaNo().equals(staNoNow)){
+ TaskWrk taskWrk = deviceDetection(rgvStn);
+ if (taskWrk!=null){
+ BasDevpPosition basDevpPosition = basDevpPositionService.selectOne(new EntityWrapper<BasDevpPosition>().eq("DEV_NO", taskWrk.getTargetPointConvert()));
+ if (RouteUtils.CheckIfItIsWithinTheRange(rangeList,basDevpPosition.getPlcPosition(),basDevpPositions,itSmall)){
+ sign = taskGenerate(rgvSlave,rgvStn,0);
+ }
+ }
+ break;
+ }
+ }
+ if (sign){
+ break;
+ }
+ }
+ }
+ if (!sign){
+ // 鍗婅竟鍖哄煙鍐呭彇璐т换鍔�
+ for (Integer staNoNow : rangeList){
+ for (RgvSlave.RgvStn rgvStn : rgvSlave.getRgvInSta()){
+ if (rgvStn.getStaNo().equals(staNoNow)){
+ sign = taskGenerate(rgvSlave,rgvStn,0);
+ break;
+ }
+ }
+ if (sign){
+ break;
+ }
+ }
+ }
+ if (!sign){
+ // 鍗婅竟鍖哄煙鍐呮斁璐т换鍔�
+ for (Integer staNoNow : rangeListOther){
+ for (RgvSlave.RgvStn rgvStn : rgvSlave.getRgvInSta()){
+ if (rgvStn.getStaNo().equals(staNoNow)){
+ TaskWrk taskWrk = deviceDetection(rgvStn);
+ if (taskWrk!=null){
+ BasDevpPosition basDevpPosition = basDevpPositionService.selectOne(new EntityWrapper<BasDevpPosition>().eq("DEV_NO", taskWrk.getTargetPointConvert()));
+ if (RouteUtils.CheckIfItIsWithinTheRange(rangeList,basDevpPosition.getPlcPosition(),basDevpPositions,itSmall)){
+ sign = taskGenerate(rgvSlave,rgvStn,0);
+ }
+ }
+ break;
+ }
+ }
+ if (sign){
+ break;
+ }
+ }
+ }
+ } else {
+ //鍙敤鍖哄煙灏辫繎鍙栬揣
+ //灏辫繎鎺掑簭
+ RgvProtocol rgvProtocol = RgvStatusCache.getRgvStatus(rgvSlave.getId());
+ List<Integer> rangeList = RouteUtils.SortNearby(staList, rgvProtocol.RgvPos, basDevpPositions);
+ // 鍗婅竟鍖哄煙鍐呭彇璐т换鍔�
+ for (Integer staNoNow : rangeList){
+ for (RgvSlave.RgvStn rgvStn : rgvSlave.getRgvInSta()){
+ if (rgvStn.getStaNo().equals(staNoNow)){
+ sign = taskGenerate(rgvSlave,rgvStn,0);
+ break;
+ }
+ }
+ if (sign){
+ break;
+ }
+ }
+ }
+ }
+ } catch (Exception e){
+ log.error("浠诲姟鐢熸垚澶辫触===銆嬪紓甯镐俊鎭細{}",e.getMessage());
+ }
}
}
+ //鑾峰彇璧风偣涓庣粓鐐瑰璞�
+ public RgvSlave.RgvStn getRgvStnNow(RgvSlave rgvSlave,Integer staNo) {
+ for (RgvSlave.RgvStn rgvStn : rgvSlave.getRgvInSta()){
+ if (rgvStn.getStaNo().equals(staNo)){
+ return rgvStn;
+ }
+ }
+ for (RgvSlave.RgvStn rgvStn : rgvSlave.getRgvOutSta()){
+ if (rgvStn.getStaNo().equals(staNo)){
+ return rgvStn;
+ }
+ }
+ return null;
+ }
+
+ //鑾峰彇璧风偣涓庣粓鐐瑰璞�
+ public RgvSlave.RgvStn[] getRgvStnAll(RgvSlave rgvSlave,Integer souSta,Integer endSta) {
+ RgvSlave.RgvStn[] rgvStns = new RgvSlave.RgvStn[2];
+ for (RgvSlave.RgvStn rgvStn : rgvSlave.getRgvInSta()){
+ if (rgvStn.getStaNo().equals(souSta)){
+ rgvStns[0] = rgvStn;
+ }
+ }
+ for (RgvSlave.RgvStn rgvStn : rgvSlave.getRgvOutSta()){
+ if (rgvStn.getStaNo().equals(endSta)){
+ rgvStns[1] = rgvStn;
+ }
+ }
+ return rgvStns;
+ }
+
+ public boolean taskGenerate(RgvSlave rgvSlave,RgvSlave.RgvStn rgvStn,Integer sign) {
+ try{
+ RgvThread rgvThread = (RgvThread) SlaveConnection.get(SlaveType.Rgv, rgvSlave.getId());
+ TaskProtocolCache taskProtocolCache = rgvThread.getTaskProtocolCache();
+
+ TaskProtocol issuedTake = new TaskProtocol();
+ TaskProtocol issuedPut = new TaskProtocol();
+ try{
+ ConcurrentHashMap<String, TaskProtocol> allTaskProtocol = taskProtocolCache.getAllTaskProtocol();
+ if (allTaskProtocol.size() > 0){
+ return false;
+ }
+ TaskWrk taskWrk = deviceDetection(rgvStn);
+ if (taskWrk == null){
+ return false;
+ }
+ Integer targetPointConvert = taskWrk.getTargetPointConvert();
+ if (targetPointConvert == null){
+ return false;
+ }
+ RgvSlave.RgvStn rgvStnEnd = getRgvStnNow(rgvSlave, targetPointConvert);
+ if (rgvStnEnd == null){
+ return false;
+ }
+
+ BasDevpPosition basDevpPositionSou = basDevpPositionService.selectOne(new EntityWrapper<BasDevpPosition>().eq("DEV_NO", rgvStn.getStaNo()));
+ BasDevpPosition basDevpPositionEnd = basDevpPositionService.selectOne(new EntityWrapper<BasDevpPosition>().eq("DEV_NO", targetPointConvert));
+ //鎵ц
+ issuedTake.setTaskNo(Long.valueOf(taskWrk.getTaskNo()));
+ issuedTake.setTaskStatus(1);
+ issuedTake.setTaskNoDirection(issuedTake.gettaskNoDirection$(issuedTake.getTaskNo(),issuedTake.getTaskStatus()));
+ issuedTake.setTargetPosition(basDevpPositionSou.getPlcPosition());
+ issuedTake.setIsRunning(1);
+ issuedTake.setDirection(rgvStn.isDirection());
+
+
+ issuedPut.setTaskNo(Long.valueOf(taskWrk.getTaskNo()));
+ issuedPut.setTaskStatus(2);
+ issuedPut.setTaskNoDirection(issuedPut.gettaskNoDirection$(issuedPut.getTaskNo(),issuedPut.getTaskStatus()));
+ issuedPut.setTargetPosition(basDevpPositionEnd.getPlcPosition());
+ issuedPut.setIsRunning(1);
+ issuedPut.setDirection(rgvStnEnd.isDirection());
+ }catch (Exception e){
+ log.error("浠诲姟鐢熸垚澶辫触issued1===銆嬪紓甯镐俊鎭細{}",e.getMessage());
+ return false;
+ }
+
+ switch (sign){
+ case 1:
+ taskProtocolCache.updateTaskProtocol(issuedTake);
+ break;
+ case 2:
+ taskProtocolCache.updateTaskProtocol(issuedPut);
+ break;
+ default:
+ taskProtocolCache.updateTaskProtocol(issuedTake);
+ taskProtocolCache.updateTaskProtocol(issuedPut);
+ break;
+ }
+ } catch (Exception e){
+ log.error("浠诲姟鐢熸垚澶辫触issued2===銆嬪紓甯镐俊鎭細{}",e.getMessage());
+ }
+ return true;
+ }
+
+
}
--
Gitblit v1.9.1