From 792236ef78c2cdd3a989fb40a7f2e2487c4e17b6 Mon Sep 17 00:00:00 2001
From: huang <1532065656@qq.com>
Date: 星期三, 26 十一月 2025 17:06:11 +0800
Subject: [PATCH] 添加各个设备基础可配置参数
---
mes-processes/mes-plcSend/src/main/java/com/mes/interaction/vehicle/handler/LoadVehicleLogicHandler.java | 77 +++++++++++++++++++++++++++++---------
1 files changed, 58 insertions(+), 19 deletions(-)
diff --git a/mes-processes/mes-plcSend/src/main/java/com/mes/interaction/vehicle/handler/LoadVehicleLogicHandler.java b/mes-processes/mes-plcSend/src/main/java/com/mes/interaction/vehicle/handler/LoadVehicleLogicHandler.java
index aed9919..4a40192 100644
--- a/mes-processes/mes-plcSend/src/main/java/com/mes/interaction/vehicle/handler/LoadVehicleLogicHandler.java
+++ b/mes-processes/mes-plcSend/src/main/java/com/mes/interaction/vehicle/handler/LoadVehicleLogicHandler.java
@@ -302,7 +302,14 @@
Boolean triggerRequest = (Boolean) params.getOrDefault("triggerRequest", autoFeed);
List<GlassInfo> plannedGlasses = planGlassLoading(glassInfos, vehicleCapacity,
- getLogicParam(logicParams, "defaultGlassLength", 2000));
+ deviceConfig.getDeviceId());
+ if (plannedGlasses == null) {
+ // 鐜荤拑娌℃湁闀垮害鏃惰繑鍥瀗ull琛ㄧず閿欒
+ return DevicePlcVO.OperationResult.builder()
+ .success(false)
+ .message("鐜荤拑淇℃伅缂哄皯闀垮害鏁版嵁锛屾棤娉曡繘琛屽閲忚绠椼�傝妫�鏌ES绋嬪簭鏄惁姝g‘鎻愪緵鐜荤拑闀垮害銆�")
+ .build();
+ }
if (plannedGlasses.isEmpty()) {
return DevicePlcVO.OperationResult.builder()
.success(false)
@@ -551,13 +558,6 @@
defaultParams.put("taskMonitorIntervalMs", 1000); // 浠诲姟鐩戞帶闂撮殧锛堟绉掞級
defaultParams.put("mesConfirmTimeoutMs", 30000); // MES纭瓒呮椂锛堟绉掞級
- // 鍑虹墖浠诲姟鐩稿叧閰嶇疆
- // outboundSlotRanges: 鍑虹墖浠诲姟鐨剆tartSlot鑼冨洿锛屼緥濡俒1, 101]琛ㄧず鏍煎瓙1~101閮芥槸鍑虹墖浠诲姟
- // 濡傛灉涓嶉厤缃紝鍒欓�氳繃鍒ゆ柇startSlot鏄惁鍦╬ositionMapping涓潵鍖哄垎杩涚墖/鍑虹墖
- List<Integer> outboundSlotRanges = new ArrayList<>();
- outboundSlotRanges.add(1); // 鏈�灏忔牸瀛愮紪鍙�
- outboundSlotRanges.add(101); // 鏈�澶ф牸瀛愮紪鍙�
- defaultParams.put("outboundSlotRanges", outboundSlotRanges);
// gridPositionMapping: 鏍煎瓙缂栧彿鍒颁綅缃殑鏄犲皠琛紙鍙�夛級
// 濡傛灉涓嶉厤缃紝鍒欐牸瀛愮紪鍙风洿鎺ヤ綔涓轰綅缃��
@@ -644,16 +644,32 @@
return null;
}
+ /**
+ * 瑙勫垝鐜荤拑瑁呰浇
+ * @param source 婧愮幓鐠冨垪琛�
+ * @param vehicleCapacity 杞﹁締瀹归噺
+ * @param deviceId 璁惧ID锛堢敤浜庢棩蹇楋級
+ * @return 瑙勫垝鍚庣殑鐜荤拑鍒楄〃锛屽鏋滅幓鐠冩病鏈夐暱搴﹀垯杩斿洖null锛堢敤浜庢祴璇昅ES绋嬪簭锛�
+ */
private List<GlassInfo> planGlassLoading(List<GlassInfo> source,
int vehicleCapacity,
- Integer defaultGlassLength) {
+ String deviceId) {
List<GlassInfo> planned = new ArrayList<>();
int usedLength = 0;
int capacity = Math.max(vehicleCapacity, 1);
- int fallbackLength = defaultGlassLength != null && defaultGlassLength > 0 ? defaultGlassLength : 2000;
for (GlassInfo info : source) {
- int length = info.getLength() != null && info.getLength() > 0 ? info.getLength() : fallbackLength;
+ Integer glassLength = info.getLength();
+
+ if (glassLength == null || glassLength <= 0) {
+ // 鐜荤拑娌℃湁闀垮害锛岀洿鎺ユ姤閿欙紙鐢ㄤ簬娴嬭瘯MES绋嬪簭锛�
+ log.error("鐜荤拑[{}]缂哄皯闀垮害鏁版嵁锛屾棤娉曡繘琛屽閲忚绠椼�俤eviceId={}锛岃妫�鏌ES绋嬪簭鏄惁姝g‘鎻愪緵鐜荤拑闀垮害銆�",
+ info.getGlassId(), deviceId);
+ return null;
+ }
+
+ int length = glassLength;
+
if (planned.isEmpty()) {
planned.add(info.withLength(length));
usedLength = length;
@@ -1269,15 +1285,19 @@
// 杩欓噷绠�鍖栧鐞嗭細濡傛灉startSlot涓嶅湪positionMapping涓紝涓旀槸鏁板瓧锛屽彲鑳芥槸鏍煎瓙缂栧彿
// 鍙互閫氳繃閰嶇疆鎸囧畾鏍煎瓙缂栧彿鑼冨洿锛屾垨鑰呴�氳繃鏌ユ壘鍚岀粍璁惧鍒ゆ柇
- // 鏂规硶3锛氶�氳繃閰嶇疆鎸囧畾鍑虹墖浠诲姟鐨剆tartSlot鑼冨洿
+ // 鏂规硶3锛氶�氳繃閰嶇疆鎸囧畾杞﹁締杩愬姩鏍煎瓙鑼冨洿锛堝吋瀹规棫閰嶇疆outboundSlotRanges锛�
@SuppressWarnings("unchecked")
- List<Integer> outboundSlotRanges = getLogicParam(logicParams, "outboundSlotRanges", null);
- if (outboundSlotRanges != null && !outboundSlotRanges.isEmpty()) {
- // 濡傛灉閰嶇疆浜嗗嚭鐗噑lot鑼冨洿锛屾鏌tartSlot鏄惁鍦ㄨ寖鍥村唴
- // 渚嬪锛歔1, 101] 琛ㄧず鏍煎瓙1~101閮芥槸鍑虹墖浠诲姟
- if (outboundSlotRanges.size() >= 2) {
- int minSlot = outboundSlotRanges.get(0);
- int maxSlot = outboundSlotRanges.get(1);
+ List<Integer> vehicleSlotRange = getLogicParam(logicParams, "vehicleSlotRange", null);
+ if (vehicleSlotRange == null || vehicleSlotRange.isEmpty()) {
+ // 鍏煎鏃ч厤缃�
+ vehicleSlotRange = getLogicParam(logicParams, "outboundSlotRanges", null);
+ }
+ if (vehicleSlotRange != null && !vehicleSlotRange.isEmpty()) {
+ // 濡傛灉閰嶇疆浜嗚溅杈嗚繍鍔ㄦ牸瀛愯寖鍥达紝妫�鏌tartSlot鏄惁鍦ㄨ寖鍥村唴
+ // 渚嬪锛歔1, 101] 琛ㄧず杞﹁締鍙兘鍦ㄦ牸瀛�1~101涔嬮棿杩愬姩
+ if (vehicleSlotRange.size() >= 2) {
+ int minSlot = vehicleSlotRange.get(0);
+ int maxSlot = vehicleSlotRange.get(1);
if (startSlot >= minSlot && startSlot <= maxSlot) {
return true;
}
@@ -1361,6 +1381,25 @@
*/
private TimeCalculation calculateTime(Integer currentPos, Integer startPos,
Integer targetPos, Map<String, Object> logicParams) {
+ // 楠岃瘉杞﹁締杩愬姩鏍煎瓙鑼冨洿
+ @SuppressWarnings("unchecked")
+ List<Integer> vehicleSlotRange = getLogicParam(logicParams, "vehicleSlotRange", null);
+ if (vehicleSlotRange == null || vehicleSlotRange.isEmpty()) {
+ // 鍏煎鏃ч厤缃�
+ vehicleSlotRange = getLogicParam(logicParams, "outboundSlotRanges", null);
+ }
+ if (vehicleSlotRange != null && vehicleSlotRange.size() >= 2) {
+ int minSlot = vehicleSlotRange.get(0);
+ int maxSlot = vehicleSlotRange.get(1);
+ // 楠岃瘉startPos鍜宼argetPos鏄惁鍦ㄥ厑璁哥殑鑼冨洿鍐�
+ if (startPos != null && (startPos < minSlot || startPos > maxSlot)) {
+ log.warn("璧峰浣嶇疆 {} 瓒呭嚭杞﹁締杩愬姩鏍煎瓙鑼冨洿 [{}, {}]", startPos, minSlot, maxSlot);
+ }
+ if (targetPos != null && (targetPos < minSlot || targetPos > maxSlot)) {
+ log.warn("鐩爣浣嶇疆 {} 瓒呭嚭杞﹁締杩愬姩鏍煎瓙鑼冨洿 [{}, {}]", targetPos, minSlot, maxSlot);
+ }
+ }
+
// 鑾峰彇閫熷害锛堟牸/绉掞紝grid/s锛�
Double speed = getLogicParam(logicParams, "vehicleSpeed", 1.0);
if (speed == null || speed <= 0) {
--
Gitblit v1.8.0