From 3f0fe86c814e65f09bfdf08923226ced9252a537 Mon Sep 17 00:00:00 2001
From: Junjie <fallin.jie@qq.com>
Date: 星期四, 09 四月 2026 20:43:54 +0800
Subject: [PATCH] #
---
src/main/java/com/zy/core/network/real/ZyStationV4RealConnect.java | 57 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++-
1 files changed, 56 insertions(+), 1 deletions(-)
diff --git a/src/main/java/com/zy/core/network/real/ZyStationV4RealConnect.java b/src/main/java/com/zy/core/network/real/ZyStationV4RealConnect.java
index ea6e8c9..31ba8b4 100644
--- a/src/main/java/com/zy/core/network/real/ZyStationV4RealConnect.java
+++ b/src/main/java/com/zy/core/network/real/ZyStationV4RealConnect.java
@@ -23,6 +23,8 @@
import com.zy.core.network.entity.ZyStationStatusEntity;
import lombok.extern.slf4j.Slf4j;
+import java.math.BigDecimal;
+import java.math.RoundingMode;
import java.text.MessageFormat;
import java.util.ArrayList;
import java.util.Collections;
@@ -69,6 +71,7 @@
private List<ZyStationStatusEntity> statusList;
private List<StationObjModel> barcodeOriginList;
+ private List<StationObjModel> inStationOriginList;
private SiemensS7Net siemensNet;
private DeviceConfig deviceConfig;
private RedisUtil redisUtil;
@@ -126,6 +129,7 @@
statusList.sort(Comparator.comparing(ZyStationStatusEntity::getStationId));
}
barcodeOriginList = basDevp.getBarcodeStationList$();
+ inStationOriginList = sortStationObjModelsByStationId(basDevp.getInStationList$());
}
if (siemensNet == null) {
@@ -151,6 +155,7 @@
boolean[] status2 = siemensNet.getByteTransform().TransBool(result.Content, i * 10 + 7, 1);
statusEntity.setEnableIn(status2[1]);//鍚姩鍏ュ簱
statusEntity.setRunBlock(status2[2]);//閲嶆柊瑙勫垝璺嚎
+ statusEntity.setInBarcodeError(status2[3]);//鍏ュ簱鏉$爜绔欏紓甯�
Integer palletHeight = null;
if (status[7]) {
@@ -195,7 +200,7 @@
continue;
}
double weight = (double) siemensNet.getByteTransform().TransSingle(result3.Content, i * 4);
- barcodeEntity.setWeight(weight);
+ barcodeEntity.setWeight(BigDecimal.valueOf(weight).setScale(2, RoundingMode.HALF_UP).doubleValue());
}
}
@@ -253,6 +258,19 @@
String alarmMsg = buildConveyorCommonAlarmMessage(status1, status2, status3, status4);
applyAlarmMessage(statusEntity, mergeAlarmMessages(statusEntity.getErrorMsg(), alarmMsg));
+ }
+ }
+
+ // 鍑哄叆搴撴ā寮�
+ OperateResultExOne<byte[]> result6 = siemensNet.Read("DB167.2", (short) (inStationOriginList.size() * 2));
+ if (result6.IsSuccess) {
+ for (int i = 0; i < inStationOriginList.size(); i++) {
+ ZyStationStatusEntity inStationEntity = findStatusEntityByInStationIdx(i);
+ if (inStationEntity == null) {
+ continue;
+ }
+ Integer ioMode = normalizeIoMode((int) siemensNet.getByteTransform().TransInt16(result6.Content, i * 2));
+ inStationEntity.setIoMode(ioMode);
}
}
@@ -394,6 +412,17 @@
return null;
}
+ private ZyStationStatusEntity findStatusEntityByInStationIdx(Integer idx) {
+ Integer stationId = findInStationIdByOrder(inStationOriginList, idx);
+
+ for (ZyStationStatusEntity zyStationStatusEntity : statusList) {
+ if(zyStationStatusEntity.getStationId().equals(stationId)) {
+ return zyStationStatusEntity;
+ }
+ }
+ return null;
+ }
+
private int getTaskWriteIdx(int stationIdx, Integer taskWriteIdx) {
int useIdx = -1;
if (stationIdx < 0 || taskWriteIdx == null || taskWriteIdx <= 0) {
@@ -480,6 +509,32 @@
return current + append;
}
+ static Integer normalizeIoMode(Integer rawMode) {
+ if (rawMode == null) {
+ return null;
+ }
+ if (rawMode == 1 || rawMode == 2) {
+ return rawMode;
+ }
+ return null;
+ }
+
+ static Integer findInStationIdByOrder(List<StationObjModel> inStationOriginList, Integer orderIdx) {
+ if (inStationOriginList == null || orderIdx == null || orderIdx < 0 || orderIdx >= inStationOriginList.size()) {
+ return null;
+ }
+ StationObjModel stationObjModel = inStationOriginList.get(orderIdx);
+ return stationObjModel == null ? null : stationObjModel.getStationId();
+ }
+
+ static List<StationObjModel> sortStationObjModelsByStationId(List<StationObjModel> stationObjModels) {
+ if (stationObjModels == null) {
+ return Collections.emptyList();
+ }
+ stationObjModels.sort(Comparator.comparing(StationObjModel::getStationId, Comparator.nullsLast(Integer::compareTo)));
+ return stationObjModels;
+ }
+
private static void appendConveyorCommonAlarmMessages(StringBuilder sb, boolean[] status, int startIdx) {
if (status == null) {
return;
--
Gitblit v1.9.1