From b7951bdbb8925131cbc76be4902fcef0e88d0506 Mon Sep 17 00:00:00 2001 From: ytfl <ytfl@qq.com> Date: 星期二, 19 八月 2025 18:22:03 +0800 Subject: [PATCH] #自动获取电视机配置信息 --- src/main/java/com/zy/core/thread/SiemensCrnThread.java | 84 +++++++++++++++++++++++++++++++++++++++-- 1 files changed, 79 insertions(+), 5 deletions(-) diff --git a/src/main/java/com/zy/core/thread/SiemensCrnThread.java b/src/main/java/com/zy/core/thread/SiemensCrnThread.java index cdc49e4..27e31f3 100644 --- a/src/main/java/com/zy/core/thread/SiemensCrnThread.java +++ b/src/main/java/com/zy/core/thread/SiemensCrnThread.java @@ -10,8 +10,10 @@ import com.core.common.SpringUtils; import com.zy.asrs.entity.BasCrnOpt; import com.zy.asrs.entity.BasCrnp; +import com.zy.asrs.entity.DeviceDataLog; import com.zy.asrs.service.BasCrnOptService; import com.zy.asrs.service.BasCrnpService; +import com.zy.asrs.service.DeviceDataLogService; import com.zy.common.utils.News; import com.zy.core.CrnThread; import com.zy.core.cache.MessageQueue; @@ -25,6 +27,7 @@ import lombok.extern.slf4j.Slf4j; import java.text.MessageFormat; +import java.util.Base64; import java.util.Date; /** @@ -154,7 +157,11 @@ */ private void readStatus(){ try { - OperateResultExOne<byte[]> result = siemensNet.Read("DB101.0", (short) 56); + short len = 56; + if (slave.getId() == 1) { + len = 58; + } + OperateResultExOne<byte[]> result = siemensNet.Read("DB101.0", len); if (result.IsSuccess) { if (null == crnProtocol) { crnProtocol = new CrnProtocol(); @@ -199,6 +206,30 @@ resetFlag = false; } } + } + + if (crnProtocol.getAlarm() > 0) { + crnProtocol.setLastCommandTime(-1L); + } + + if (crnProtocol.getAlarm() == 0 && crnProtocol.getLastCommandTime() == -1) { + crnProtocol.setLastCommandTime(System.currentTimeMillis()); + } + + if (System.currentTimeMillis() - crnProtocol.getDeviceDataLog() > 1000 * 1) { + //閲囬泦鏃堕棿瓒呰繃5s锛屼繚瀛樹竴娆℃暟鎹褰� + //淇濆瓨鏁版嵁璁板綍 + DeviceDataLogService deviceDataLogService = SpringUtils.getBean(DeviceDataLogService.class); + DeviceDataLog deviceDataLog = new DeviceDataLog(); + deviceDataLog.setOriginData(Base64.getEncoder().encodeToString(result.Content)); + deviceDataLog.setWcsData(JSON.toJSONString(crnProtocol)); + deviceDataLog.setType("crn"); + deviceDataLog.setDeviceNo(crnProtocol.getCrnNo()); + deviceDataLog.setCreateTime(new Date()); + deviceDataLogService.insert(deviceDataLog); + + //鏇存柊閲囬泦鏃堕棿 + crnProtocol.setDeviceDataLog(System.currentTimeMillis()); } try { @@ -274,14 +305,58 @@ // array[9] = command.getSourceStaNo(); // array[10] = command.getDestinationStaNo(); array[9] = command.getCommand(); - OperateResult result = siemensNet.Write("DB100.0", array); + + OperateResult result = null; + int idx = 0; + do { + OperateResultExOne<byte[]> resultRead = siemensNet.Read("DB100.0", (short) 20); + if (resultRead.IsSuccess) { + if (command.getAckFinish() == 0) { + short taskNo = siemensNet.getByteTransform().TransInt16(resultRead.Content, 2); + short taskMode = siemensNet.getByteTransform().TransInt16(resultRead.Content, 4); + short sourcePosX = siemensNet.getByteTransform().TransInt16(resultRead.Content, 6); + short sourcePosY = siemensNet.getByteTransform().TransInt16(resultRead.Content, 8); + short sourcePosZ = siemensNet.getByteTransform().TransInt16(resultRead.Content, 10); + short destinationPosX = siemensNet.getByteTransform().TransInt16(resultRead.Content, 12); + short destinationPosY = siemensNet.getByteTransform().TransInt16(resultRead.Content, 14); + short destinationPosZ = siemensNet.getByteTransform().TransInt16(resultRead.Content, 16); + if(taskNo == 0 || taskMode == 0 || sourcePosX == 0 || sourcePosY == 0 || sourcePosZ == 0 || destinationPosX == 0 || destinationPosY == 0 || destinationPosZ == 0) { + result = siemensNet.Write("DB100.0", array); + }else { + break; + } + }else { + short ackFinish = siemensNet.getByteTransform().TransInt16(resultRead.Content, 0); + if(ackFinish != command.getAckFinish()) { + result = siemensNet.Write("DB100.0", array); + }else { + break; + } + } + } + idx++; + Thread.sleep(500L); + } while (idx < 5); if (command.getAckFinish() == 0) { short commandFinish = 1; - Thread.sleep(100L); - result = siemensNet.Write("DB100.18", commandFinish); + int i = 0; + do { + OperateResultExOne<byte[]> resultRead = siemensNet.Read("DB100.0", (short) 4); + OperateResultExOne<byte[]> resultReadConfirm = siemensNet.Read("DB100.18", (short) 2); + if (resultRead.IsSuccess && resultReadConfirm.IsSuccess) { + short taskNo = siemensNet.getByteTransform().TransInt16(resultRead.Content, 2); + short confirm = siemensNet.getByteTransform().TransInt16(resultReadConfirm.Content, 0); + if(taskNo != 0 && confirm == 0) { + result = siemensNet.Write("DB100.18", commandFinish); + } + } + i++; + Thread.sleep(500L); + } while (i < 5); } + this.crnProtocol.setLastCommandTime(System.currentTimeMillis()); try { // 鏃ュ織璁板綍 BasCrnOptService bean = SpringUtils.getBean(BasCrnOptService.class); @@ -317,7 +392,6 @@ return false; } } - @Override public void close() { -- Gitblit v1.9.1