From 736706fb6254b43b16b285e2f40880c21c41cd57 Mon Sep 17 00:00:00 2001 From: tqs <56479841@qq.com> Date: 星期五, 02 十二月 2022 07:59:54 +0800 Subject: [PATCH] # --- src/main/java/com/zy/core/model/RgvSlave.java | 24 ++-- src/main/java/com/zy/asrs/service/impl/MainServiceImpl.java | 224 +++++++++++++++++++++++++++++++++++-- src/main/java/com/zy/asrs/entity/WrkMast.java | 21 +++ src/main/java/com/zy/asrs/mapper/WrkMastMapper.java | 8 + src/main/resources/mapper/WrkMastMapper.xml | 15 ++ src/main/java/com/zy/core/MainProcess.java | 2 src/main/resources/application.yml | 28 ++++ 7 files changed, 293 insertions(+), 29 deletions(-) diff --git a/src/main/java/com/zy/asrs/entity/WrkMast.java b/src/main/java/com/zy/asrs/entity/WrkMast.java index e896efc..0000091 100644 --- a/src/main/java/com/zy/asrs/entity/WrkMast.java +++ b/src/main/java/com/zy/asrs/entity/WrkMast.java @@ -67,6 +67,13 @@ @TableField("crn_no") private Integer crnNo; + /** + * RGV鍙� + */ + @ApiModelProperty(value= "RGV") + @TableField("rgv_no") + private Integer rgvNo; + @ApiModelProperty(value= "") @TableField("sheet_no") private String sheetNo; @@ -110,6 +117,20 @@ @TableField("source_loc_no") private String sourceLocNo; + /** + * RGV婧愮珯 + */ + @ApiModelProperty(value= "RGV婧愮珯") + @TableField("rgv_ssta_no") + private Integer rgvSstaNo; + + /** + * RGV鐩爣绔� + */ + @ApiModelProperty(value= "RGV鐩爣绔�") + @TableField("rgv_dsta_no") + private Integer rgvDstaNo; + @ApiModelProperty(value= "") @TableField("loc_sts") private String locSts; diff --git a/src/main/java/com/zy/asrs/mapper/WrkMastMapper.java b/src/main/java/com/zy/asrs/mapper/WrkMastMapper.java index 6bfd8f0..c1d08a1 100644 --- a/src/main/java/com/zy/asrs/mapper/WrkMastMapper.java +++ b/src/main/java/com/zy/asrs/mapper/WrkMastMapper.java @@ -109,5 +109,11 @@ Integer selectExistInEmpty(); - + /** + * 鏌ユ壘宸ヤ綔鐘舵�佷负2锛堣澶囦笂璧帮級,涓旇揣鐗╁湪RGV鍏ュ簱鎺ラ┏绔欑殑鍏ュ簱宸ヤ綔妗�,鏌ユ壘鏈�澶�2绗� + * @param rgvNo + * @param staNos + * @return + */ + List<WrkMast> selectRgvInStep1(@Param("rgvNo")Integer rgvNo, @Param("staNos")List<Integer> staNos); } 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 531405e..701cd6c 100644 --- a/src/main/java/com/zy/asrs/service/impl/MainServiceImpl.java +++ b/src/main/java/com/zy/asrs/service/impl/MainServiceImpl.java @@ -26,17 +26,16 @@ import com.zy.core.cache.MessageQueue; import com.zy.core.cache.SlaveConnection; import com.zy.core.enums.*; -import com.zy.core.model.CrnSlave; -import com.zy.core.model.DevpSlave; -import com.zy.core.model.LedSlave; -import com.zy.core.model.Task; +import com.zy.core.model.*; import com.zy.core.model.command.CrnCommand; import com.zy.core.model.command.LedCommand; import com.zy.core.model.protocol.CrnProtocol; +import com.zy.core.model.protocol.RgvProtocol; import com.zy.core.model.protocol.StaProtocol; import com.zy.core.properties.SlaveProperties; import com.zy.core.thread.BarcodeThread; import com.zy.core.thread.LedThread; +import com.zy.core.thread.RgvThread; import com.zy.core.thread.SiemensDevpThread; import lombok.extern.slf4j.Slf4j; import org.springframework.beans.factory.annotation.Autowired; @@ -46,10 +45,7 @@ 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 java.util.*; import java.util.stream.Collectors; /** @@ -79,6 +75,8 @@ private StaDescService staDescService; @Autowired private BasCrnpService basCrnpService; + @Autowired + private BasRgvService basRgvService; @Autowired private BasDevpService basDevpService; @Autowired @@ -532,11 +530,6 @@ continue; } -// //鍫嗗灈鏈哄洖鍘熺偣浠诲姟涓� -// if(crnThread.isBackHpFlag()){ -// continue; -// } - // 鍙湁褰撳爢鍨涙満绌洪棽 骞朵笖 鏃犱换鍔℃椂鎵嶇户缁墽琛� if (crnProtocol.getStatusType() == CrnStatusType.IDLE && crnProtocol.getTaskNo() == 0 @@ -568,6 +561,53 @@ this.locToLoc(crn, crnProtocol); // this.crnRebackHp(crnProtocol, crnThread); + } + } + + /** + * 鍏ュ嚭搴� ===>> RGV鍏ュ嚭搴撲綔涓氫笅鍙� + */ + public synchronized void rgvIoExecute() { + for (RgvSlave rgv : slaveProperties.getRgv()) { + // 鑾峰彇RGV淇℃伅 + RgvThread rgvThread = (RgvThread) SlaveConnection.get(SlaveType.Rgv, rgv.getId()); + RgvProtocol rgvProtocol = rgvThread.getRgvProtocol(); + if (rgvProtocol == null) { + continue; + } + BasRgv basRgv = basRgvService.selectById(rgv.getId()); + if (basRgv == null) { + log.error("{}鍙稲GV灏氭湭鍦ㄦ暟鎹簱杩涜缁存姢锛�", rgv.getId()); + continue; + } + + // 鍙湁褰揜GV绌洪棽銆佽嚜鍔�, 骞朵笖鏃犱换鍔°�佹棤鐗╂椂鎵嶇户缁墽琛� + if (rgvProtocol.getStatusType() == RgvStatusType.IDLE + && rgvProtocol.getModeType() == RgvModeType.AUTO + && rgvProtocol.getTaskNo1() == 0 && rgvProtocol.getTaskNo2() == 0 + && rgvProtocol.getLoaded1() == 0 && rgvProtocol.getLoaded2() == 0 + ) { + // 濡傛灉鏈�杩戜竴娆℃槸鍏ュ簱妯″紡 + if (rgvProtocol.getLastIo().equals("I")) { + if (basRgv.getInEnable().equals("Y")) { +// this.rgvInStnToLoc(rgv, rgvProtocol); // 鍏ュ簱 + rgvProtocol.setLastIo("O"); + } else if (basRgv.getOutEnable().equals("Y")) { +// this.locToCrnStn(rgv, crnProtocol); // 鍑哄簱 + rgvProtocol.setLastIo("I"); + } + } + // 濡傛灉鏈�杩戜竴娆℃槸鍑哄簱妯″紡 + else if (rgvProtocol.getLastIo().equals("O")) { + if (basRgv.getOutEnable().equals("Y")) { +// this.locToCrnStn(rgv, crnProtocol); // 鍑哄簱 + rgvProtocol.setLastIo("I"); + } else if (basRgv.getInEnable().equals("Y")) { +// this.rgvInStnToLoc(rgv, rgvProtocol); // 鍏ュ簱 + rgvProtocol.setLastIo("O"); + } + } + } } } @@ -1015,6 +1055,164 @@ // } /** + * 鍏ュ簱 ===>> RGV鍏ュ簱绔欏埌绔� + */ + public synchronized void rgvInStn(RgvSlave slave, RgvProtocol rgvProtocol) { + // 鑾峰彇宸ヤ綔鐘舵�佷负2锛堣澶囦笂璧帮級,涓旇揣鐗╁湪RGV鍏ュ簱鎺ラ┏绔欑殑鍏ュ簱宸ヤ綔妗�,鏌ユ壘鏈�澶�2绗� + List<Integer> staNos = new ArrayList<>(); + for (RgvSlave.RgvStn rgvStn : slave.getRgvInStn()) { + staNos.add(rgvStn.getStaNo()); + } + List<WrkMast> wrkMasts1 = new ArrayList<>(); + List<WrkMast> wrkMasts = wrkMastMapper.selectRgvInStep1(slave.getId(), staNos); + for(WrkMast wrkMast : wrkMasts){ + Integer plcId = 0; + for (RgvSlave.RgvStn rgvStn : slave.getRgvInStn()) { + if(rgvStn.getStaNo() == wrkMast.getRgvSstaNo()){ + plcId = rgvStn.getDevpPlcId(); + break; + } + } + + DevpThread devpThread = (DevpThread) SlaveConnection.get(SlaveType.Devp, plcId); + StaProtocol staProtocol = devpThread.getStation().get(wrkMast.getRgvSstaNo()); + if (staProtocol == null) { + continue; + } else { + staProtocol = staProtocol.clone(); + } + } + +// WrkMast wrkMast = wrkMastMapper.selectPakInStep2(slave.getId(), staProtocol.getWorkNo().intValue(), crnStn.getStaNo()); +// for (CrnSlave.CrnStn crnStn : slave.getCrnInStn()) { +// boolean flag = false; +// // 鑾峰彇鍫嗗灈鏈哄叆搴撶珯淇℃伅 +// DevpThread devpThread = (DevpThread) SlaveConnection.get(SlaveType.Devp, crnStn.getDevpPlcId()); +// StaProtocol staProtocol = devpThread.getStation().get(crnStn.getStaNo()); +// if (staProtocol == null) { +// continue; +// } else { +// staProtocol = staProtocol.clone(); +// } +// // 鏌ヨ绔欑偣璇︾粏淇℃伅 +// BasDevp staDetl = basDevpService.selectById(crnStn.getStaNo()); +// if (staDetl == null) { +// log.error("鍏ュ簱 ===>> 鍫嗗灈鏈虹珯鐐瑰湪鏁版嵁搴撲笉瀛樺湪, 绔欑偣缂栧彿={}", crnStn.getStaNo()); +// continue; +// } +// if (staProtocol.isAutoing() && staProtocol.isLoading() && staProtocol.getWorkNo() > 0 && staProtocol.isInEnable() +// && staDetl.getCanining() != null && staDetl.getCanining().equals("Y")) { +// flag = true; +// } +// if (!flag) { +// continue; +// } +// // 鑾峰彇宸ヤ綔鐘舵�佷负2锛堣澶囦笂璧帮級鐨勫叆搴撳伐浣滄。 +// WrkMast wrkMast = wrkMastMapper.selectPakInStep2(slave.getId(), staProtocol.getWorkNo().intValue(), crnStn.getStaNo()); +// if (null == wrkMast) { +//// log.error("鏌ヨ鏃犲緟鍏ュ簱鏁版嵁--wrk_sts=2, 宸ヤ綔鍙�={}", staProtocol.getWorkNo()); +// continue; +// } +// // 鑾峰彇搴撲綅淇℃伅 +// LocMast locMast = locMastService.selectById(wrkMast.getLocNo()); +// if (locMast == null) { +// log.error("鏌ヨ搴撳瓨鏃犳暟鎹�--搴撲綅鍙穥}", wrkMast.getLocNo()); +// continue; +// } +// if (!locMast.getLocSts().equals("S") && !locMast.getLocSts().equals("Q")) { +// log.error("鍏ュ簱鎿嶄綔搴撲綅鐘舵�佷笉绗﹀悎--鐘舵��, 搴撲綅鍙�={}锛屽簱浣嶇姸鎬�={}", wrkMast.getLocNo(), locMast.getLocSts()); +// continue; +// } +// +// // 鍫嗗灈鏈烘帶鍒惰繃婊� +// if (!crnProtocol.getStatusType().equals(CrnStatusType.IDLE) || crnProtocol.getTaskNo() != 0) { +// continue; +// } +// +// // 宸茬粡瀛樺湪鍚婅溅鎵ц浠诲姟鏃讹紝鍒欒繃婊� +// if (wrkMastMapper.selectWorking(slave.getId()) != null) { +// continue; +// } +// +// // 鍙屾繁搴撲綅涓旀祬搴撲綅鏈夎揣锛屽垯闇�鍏堝娴呭簱浣嶈繘琛屽簱浣嶇Щ杞� +// if (Utils.isDeepLoc(slaveProperties, wrkMast.getLocNo())) { +// String shallowLocNo = Utils.getShallowLoc(slaveProperties, wrkMast.getLocNo()); +// LocMast shallowLoc = locMastService.selectById(shallowLocNo); +// // O.绌哄簱浣嶃�丵.鎷f枡/鐩樼偣/骞舵澘鍐嶅叆搴撱�丼.鍏ュ簱棰勭害銆乆.绂佺敤 鐩存帴鎼紒 +// if (shallowLoc.getLocSts().equals("P") || shallowLoc.getLocSts().equals("R")) { +// WrkMast waitWrkMast = wrkMastMapper.selectByLocNo(shallowLocNo); +// if (null == waitWrkMast) { +// log.error("{}搴撲綅寮傚父锛屾湭妫�绱㈠埌鐩稿簲宸ヤ綔妗o紒", shallowLocNo); +// } else { +// waitWrkMast.setIoPri(15D); +// waitWrkMast.setModiTime(new Date()); +// if (wrkMastMapper.updateById(waitWrkMast) == 0) { +// log.error("璋冩暣宸ヤ綔妗d紭鍏堢骇澶辫触锛佸伐浣滃彿={}", waitWrkMast.getWrkNo()); +// } +// continue; +// } +// +// } else if (shallowLoc.getLocSts().equals("F") || shallowLoc.getLocSts().equals("D")) { +// // 姝ゆ爣璁伴伩鍏嶅娆℃墽琛岀Щ搴撲换鍔� +// if (Cools.isEmpty(wrkMast.getUpdMk()) || "N".equals(wrkMast.getUpdMk())) { +// wrkMast.setUpdMk("Y"); +// wrkMast.setIoPri(14D); +// wrkMastMapper.updateById(wrkMast); +// // 鐢熸垚宸ヤ綔妗�,灏嗘祬搴撲綅绉昏浆鍒版柊鐨勫簱浣嶄腑 +// moveLocForDeepLoc(slave, shallowLoc); +// // 鐢熸垚宸ヤ綔妗c�佹敼鍙樻祬搴撲綅鐨勬簮搴�/鐩爣搴� 搴撲綅鐘舵�併�佷笅鍙戝爢鍨涙満鍛戒护锛堢珛椹墽琛�) +//// moveLocForDeepLocPakin(slave, shallowLoc, wrkMast); +// } +// continue; +// } else if (shallowLoc.getLocSts().equals("Q")) { +// WrkMast waitWrkMast = wrkMastMapper.selectByLocNo(shallowLocNo); +// if (null != waitWrkMast && waitWrkMast.getWrkSts() == 4) { +// continue; +// } +// } +// } +// +// // 鍛戒护涓嬪彂鍖� -------------------------------------------------------------------------- +// CrnCommand crnCommand = new CrnCommand(); +// crnCommand.setCrnNo(slave.getId()); // 鍫嗗灈鏈虹紪鍙� +// crnCommand.setTaskNo(wrkMast.getWrkNo().shortValue()); // 宸ヤ綔鍙� +// crnCommand.setAckFinish((short) 0); // 浠诲姟瀹屾垚纭浣� +// crnCommand.setTaskMode(CrnTaskModeType.LOC_MOVE); // 浠诲姟妯″紡: 搴撲綅绉昏浆 +// crnCommand.setSourcePosX(crnStn.getRow().shortValue()); // 婧愬簱浣嶆帓 +// crnCommand.setSourcePosY(crnStn.getBay().shortValue()); // 婧愬簱浣嶅垪 +// crnCommand.setSourcePosZ(crnStn.getLev().shortValue()); // 婧愬簱浣嶅眰 +// crnCommand.setDestinationPosX(locMast.getRow1().shortValue()); // 鐩爣搴撲綅鎺� +// crnCommand.setDestinationPosY(locMast.getBay1().shortValue()); // 鐩爣搴撲綅鍒� +// crnCommand.setDestinationPosZ(locMast.getLev1().shortValue()); // 鐩爣搴撲綅灞� +// if (!MessageQueue.offer(SlaveType.Crn, wrkMast.getCrnNo(), new Task(2, crnCommand))) { +// log.error("鍫嗗灈鏈哄懡浠や笅鍙戝け璐ワ紝鍫嗗灈鏈哄彿={}锛屼换鍔℃暟鎹�={}", wrkMast.getCrnNo(), JSON.toJSON(crnCommand)); +// } else { +// +//// long startTime = System.currentTimeMillis(); +//// while ((System.currentTimeMillis() - startTime) < COMMAND_TIMEOUT) { +//// +//// if (true) { +//// break; +//// } +//// +//// try{ +//// Thread.sleep(500); +//// }catch(Exception ignore){} +//// } +// +// // 淇敼宸ヤ綔妗g姸鎬� 2.璁惧涓婅蛋 => 3.鍚婅溅鍏ュ簱涓� +// Date now = new Date(); +// wrkMast.setWrkSts(3L); +// wrkMast.setCrnStrTime(now); +// wrkMast.setModiTime(now); +// if (wrkMastMapper.updateById(wrkMast) == 0) { +// log.error("淇敼宸ヤ綔妗g姸鎬� 2.璁惧涓婅蛋 => 3.鍚婅溅鍏ュ簱涓� 澶辫触锛侊紒锛屽伐浣滃彿={}", wrkMast.getWrkNo()); +// } +// } +// } + } + + /** * 搴撲綅绉昏浆 */ public void locToLoc(CrnSlave slave, CrnProtocol crnProtocol) { diff --git a/src/main/java/com/zy/core/MainProcess.java b/src/main/java/com/zy/core/MainProcess.java index bd5826d..e62ae2a 100644 --- a/src/main/java/com/zy/core/MainProcess.java +++ b/src/main/java/com/zy/core/MainProcess.java @@ -56,6 +56,8 @@ mainService.crnStnToOutStn(); // 鍏ュ嚭搴� ===>> 鍫嗗灈鏈哄叆鍑哄簱浣滀笟涓嬪彂 mainService.crnIoExecute(); + // 鍏ュ嚭搴� ===>> RGV鍏ュ嚭搴撲綔涓氫笅鍙� + mainService.rgvIoExecute(); // 鍏ュ嚭搴撳寮� ===>> 鍫嗗灈鏈哄懡浠や笅鍙戝悗锛屽紓姝ヤ慨鏀瑰伐浣滄。鐘舵�� // mainService.crnIoWrkMast(); // 鍏ュ簱 ===>> 鎵ц瀵瑰伐浣滄。鐨勫畬鎴愭搷浣� diff --git a/src/main/java/com/zy/core/model/RgvSlave.java b/src/main/java/com/zy/core/model/RgvSlave.java index 33d9e14..6f182af 100644 --- a/src/main/java/com/zy/core/model/RgvSlave.java +++ b/src/main/java/com/zy/core/model/RgvSlave.java @@ -23,28 +23,28 @@ private Boolean demo; // 鍫嗗灈鏈哄叆搴撶珯鐐� - private List<CrnStn> rgvInStn = new ArrayList<>(); + private List<RgvStn> rgvInStn = new ArrayList<>(); // 鍫嗗灈鏈哄嚭搴撶珯鐐� - private List<CrnStn> rgvOutStn = new ArrayList<>(); + private List<RgvStn> rgvOutStn = new ArrayList<>(); @Data - public static class CrnStn { + public static class RgvStn { // 杈撻�佺嚎plc缂栧彿 private Integer devpPlcId; - // 鍫嗗灈鏈虹珯鐐圭紪鍙� + // RGV绔欑偣缂栧彿 private Integer staNo; - // 鎺� - private Integer row; - - // 鍒� - private Integer bay; - - // 灞� - private Integer lev; +// // 鎺� +// private Integer row; +// +// // 鍒� +// private Integer bay; +// +// // 灞� +// private Integer lev; } diff --git a/src/main/resources/application.yml b/src/main/resources/application.yml index 1e7a087..d2130f1 100644 --- a/src/main/resources/application.yml +++ b/src/main/resources/application.yml @@ -8,7 +8,7 @@ name: @pom.build.finalName@ datasource: driver-class-name: com.microsoft.sqlserver.jdbc.SQLServerDriver - url: jdbc:sqlserver://10.10.10.100:1433;databasename=stasrs + url: jdbc:sqlserver://127.0.0.1:1433;databasename=xjhsasrs username: sa password: sa@123 mvc: @@ -21,8 +21,10 @@ mybatis-plus: mapper-locations: classpath:mapper/*.xml -# global-config: -# field-strategy: 0 + global-config: + field-strategy: 0 + configuration: + log-impl: org.apache.ibatis.logging.stdout.StdOutImpl logging: path: /stock/out/@pom.build.finalName@/logs @@ -148,6 +150,18 @@ port: 502 rack: 0 slot: 0 + rgvInStn[0]: + devpPlcId: ${wcs-slave.devp[0].id} + staNo: 101 + rgvInStn[1]: + devpPlcId: ${wcs-slave.devp[0].id} + staNo: 102 + rgvOutStn[0]: + devpPlcId: ${wcs-slave.devp[0].id} + staNo: 110 + rgvOutStn[1]: + devpPlcId: ${wcs-slave.devp[0].id} + staNo: 112 # RGV绌挎杞�2 rgv[1]: id: 2 @@ -155,6 +169,14 @@ port: 502 rack: 0 slot: 0 + rgvInStn[0]: + staNo: 101 + rgvInStn[1]: + staNo: 102 + rgvOutStn[0]: + staNo: 110 + rgvOutStn[1]: + staNo: 112 # 杈撻�佺嚎 devp[0]: diff --git a/src/main/resources/mapper/WrkMastMapper.xml b/src/main/resources/mapper/WrkMastMapper.xml index 8e22381..2715f0c 100644 --- a/src/main/resources/mapper/WrkMastMapper.xml +++ b/src/main/resources/mapper/WrkMastMapper.xml @@ -12,6 +12,7 @@ <result column="wrk_sts" property="wrkSts" /> <result column="io_type" property="ioType" /> <result column="crn_no" property="crnNo" /> + <result column="rgv_no" property="rgvNo" /> <result column="sheet_no" property="sheetNo" /> <result column="io_pri" property="ioPri" /> <result column="wrk_date" property="wrkDate" /> @@ -19,6 +20,8 @@ <result column="sta_no" property="staNo" /> <result column="source_sta_no" property="sourceStaNo" /> <result column="source_loc_no" property="sourceLocNo" /> + <result column="rgv_ssta_no" property="rgvSstaNo" /> + <result column="rgv_dsta_no" property="rgvDstaNo" /> <result column="loc_sts" property="locSts" /> <result column="picking" property="picking" /> <result column="link_mis" property="linkMis" /> @@ -185,4 +188,16 @@ <select id="selectExistInEmpty" resultType="java.lang.Integer"> SELECT COUNT(*) FROM dbo.asr_wrk_mast Where io_type = 10 and wrk_sts in (1,2,3) </select> + + <!-- RGV璋冨害鍏ュ嚭搴撶浉鍏� --> + <select id="selectRgvInStep1" resultMap="BaseResultMap"> + select * from dbo.asr_wrk_mast + where rgv_no=#{rgvNo} and rgv_ssta_no in + <foreach item="item" collection="staNos" index="index" separator="," open="(" close=")"> + #{item} + </foreach> + and wrk_sts=2 and (io_type=1 or io_type=10 or io_type=53 or io_type=54 or io_type=57) + order by io_pri desc,io_time,wrk_no asc + </select> + </mapper> -- Gitblit v1.9.1