From 1dacf2305187f5c2fb44f03b6b754c46cb73ba25 Mon Sep 17 00:00:00 2001
From: L <L@132>
Date: 星期四, 19 三月 2026 08:53:59 +0800
Subject: [PATCH] *
---
src/main/java/com/zy/core/thread/RgvThread.java | 136 ++++++++++++++++++++++++++++++++++++++++-----
1 files changed, 120 insertions(+), 16 deletions(-)
diff --git a/src/main/java/com/zy/core/thread/RgvThread.java b/src/main/java/com/zy/core/thread/RgvThread.java
index 34ae595..313db76 100644
--- a/src/main/java/com/zy/core/thread/RgvThread.java
+++ b/src/main/java/com/zy/core/thread/RgvThread.java
@@ -5,20 +5,22 @@
import HslCommunication.Profinet.Siemens.SiemensPLCS;
import HslCommunication.Profinet.Siemens.SiemensS7Net;
import com.alibaba.fastjson.JSON;
+import com.baomidou.mybatisplus.mapper.EntityWrapper;
import com.core.common.DateUtils;
import com.core.common.SpringUtils;
+import com.zy.asrs.entity.BasCircularShuttle;
import com.zy.asrs.entity.BasRgv;
import com.zy.asrs.entity.BasRgvErrLog;
import com.zy.asrs.entity.BasRgvOpt;
+import com.zy.asrs.service.BasCircularShuttleService;
import com.zy.asrs.service.BasRgvErrLogService;
import com.zy.asrs.service.BasRgvOptService;
import com.zy.asrs.service.BasRgvService;
import com.zy.asrs.utils.NumUtils;
-import com.zy.asrs.utils.RouteUtils;
import com.zy.core.ThreadHandler;
import com.zy.core.cache.MessageQueue;
import com.zy.core.cache.OutputQueue;
-import com.zy.core.enums.RgvStatusType;
+import com.zy.core.enums.RgvModeType;
import com.zy.core.enums.RgvTaskModeType;
import com.zy.core.enums.SlaveType;
import com.zy.core.model.RgvSlave;
@@ -53,7 +55,7 @@
* 宸ヤ綅2澶嶄綅淇″彿
*/
private boolean resetFlag2 = false;
- private boolean connectRgv = false;
+ private volatile boolean connectRgv = false;
private boolean alarmChangeSign = false;
public RgvThread(RgvSlave slave) {
@@ -63,15 +65,8 @@
@Override
@SuppressWarnings("InfiniteLoopStatement")
public void run() {
- connectRgv = this.connect();
- while(!connectRgv){
- try {
- connectRgv = this.connect();
- Thread.sleep(100);
- } catch (Exception e){
-
- }
- }
+ // 绾跨▼鍚姩鍗崇粰鍗忚浣撳畬鏁撮粯璁ゅ��
+ initRgv();
// 鍚姩绾跨▼鑷姩閲嶈繛
new Thread(this::rgvConnect).start();
@@ -130,6 +125,12 @@
rgvOpt(command);
write3(command);
break;
+ //宸ヤ綅1鍐欏叆鍙栨秷鏁版嵁
+ case 4:
+ RgvCommand command4 = (RgvCommand) task.getData();
+ rgvOpt(command4);
+ write4(command4);
+ break;
// 婕父
case 5:
Long aLong = (Long) task.getData();
@@ -153,6 +154,19 @@
try {
Thread.sleep(1000);
if(!connectRgv){
+ try {
+ // 鏍规嵁瀹炴椂淇℃伅鏇存柊鏁版嵁搴�
+ BasCircularShuttleService basCircularShuttleService = SpringUtils.getBean(BasCircularShuttleService.class);
+ BasCircularShuttle basCircularShuttle = basCircularShuttleService.selectOne(new EntityWrapper<BasCircularShuttle>().eq("rgv_no", slave.getId()));
+ if (basCircularShuttle == null) {
+ continue;
+ }
+ if (basCircularShuttle.getStatus() != 0){
+ continue;
+ }
+ } catch (Exception ignore) {
+
+ }
try {
connectRgv = this.connect();
Thread.sleep(100);
@@ -215,9 +229,25 @@
rgvProtocol.setStatus2((short)-1);
rgvProtocol.setLoaded2((short)0);
rgvProtocol.setAlarm((short)0);
+ rgvProtocol.setAlarmList(new ArrayList<>());
+ rgvProtocol.setInstantaneousSpeed(0D);
+ rgvProtocol.setEndStaM((short)0);
rgvProtocol.setxSpeed((short) 0);
rgvProtocol.setxDistance((short) 0);
rgvProtocol.setxDuration((short) 0);
+ log.error("杩炴帴涓柇锛歊GV鍙凤細"+slave.getId());
+ try {
+ // 鏍规嵁瀹炴椂淇℃伅鏇存柊鏁版嵁搴�
+ BasRgvService basRgvService = SpringUtils.getBean(BasRgvService.class);
+ BasRgv basRgv = new BasRgv();
+ basRgv.setRgvNo(slave.getId());
+ basRgv.setRgvSts((int)rgvProtocol.getMode());
+ basRgv.setLoaded2(rgvProtocol.getLoaded2().intValue());
+ if (!basRgvService.updateById(rgvProtocol.toSqlModel(basRgv))){
+ log.error("RGV plc鏁版嵁搴撴洿鏂板け璐� ===>> [id:{}] [ip:{}] [port:{}] [rack:{}] [slot:{}]", slave.getId(), slave.getIp(), slave.getPort(), slave.getRack(), slave.getSlot());
+ }
+ } catch (Exception ignore) {
+ }
}
@Override
@@ -262,7 +292,12 @@
rgvProtocol.setAlarm(siemensNet.getByteTransform().TransInt16(result.Content, 10));
rgvProtocol.setStatus(siemensNet.getByteTransform().TransInt16(result.Content, 12));
rgvProtocol.setxSpeed(siemensNet.getByteTransform().TransInt16(result.Content, 14));
- rgvProtocol.setRgvPos(siemensNet.getByteTransform().TransUInt32(result.Content, 16));
+ int poi = siemensNet.getByteTransform().TransInt32(result.Content, 16);
+ if (poi>0){
+ rgvProtocol.setRgvPos((long)poi);
+ rgvProtocol.setRgvPosInt(poi);
+ }
+ log.info(rgvProtocol.getRgvNo()+"鍙峰皬杞﹁鍙栧畾浣嶅�硷細"+poi);
rgvProtocol.setInstantaneousSpeed(Double.valueOf(siemensNet.getByteTransform().TransInt16(resultV.Content, 0)));
rgvProtocol.setEndStaM(siemensNet.getByteTransform().TransInt16(resultE.Content, 0));
boolean[] statusAlarmList = siemensNet.getByteTransform().TransBool(resultError.Content, 0, 13);
@@ -277,7 +312,7 @@
alarmChangeSign = new HashSet<>(alarmList).equals(new HashSet<>(rgvProtocol.getAlarmList()));
rgvProtocol.setAlarmList(alarmList);
-// rgvProtocol.setRgvPos((long)NumUtils.GetRandomIntInRange(1737000));
+// rgvProtocol.setRgvPos((long) NumUtils.GetRandomIntInRange(1737000));
OutputQueue.RGV.offer(MessageFormat.format("銆恵0}銆慬id:{1}] <<<<< 瀹炴椂鏁版嵁鏇存柊鎴愬姛",DateUtils.convert(new Date()), slave.getId()));
@@ -324,7 +359,11 @@
private void rgvOpt(RgvCommand command) {
try{
BasRgvOptService basRgvOptService = SpringUtils.getBean(BasRgvOptService.class);
- BasRgvOpt basRgvOpt = new BasRgvOpt(rgvProtocol, command);
+ int taskNo = (rgvProtocol == null || rgvProtocol.getTaskNo1() == null) ? 0 : rgvProtocol.getTaskNo1().intValue();
+ int rgvNo = (rgvProtocol == null || rgvProtocol.getRgvNo() == null) ? slave.getId() : rgvProtocol.getRgvNo();
+ int rgvPos = (rgvProtocol == null) ? 0 : rgvProtocol.getRgvPosInt();
+ BasRgvOpt basRgvOpt = new BasRgvOpt(taskNo, rgvNo, rgvPos, command);
+ log.info(rgvNo+"鍙峰皬杞﹀啓鍏ュ懡浠ゅ畾浣嶅�硷細"+rgvPos);
basRgvOptService.insert(basRgvOpt);
}catch (Exception e){
log.error("RGV鍐欏叆鍛戒护淇濆瓨澶辫触锛侊紒");
@@ -333,7 +372,10 @@
private void rgvOpt(Long command) {
try{
BasRgvOptService basRgvOptService = SpringUtils.getBean(BasRgvOptService.class);
- BasRgvOpt basRgvOpt = new BasRgvOpt(rgvProtocol, command);
+ int taskNo = (rgvProtocol == null || rgvProtocol.getTaskNo1() == null) ? 0 : rgvProtocol.getTaskNo1().intValue();
+ int rgvNo = (rgvProtocol == null || rgvProtocol.getRgvNo() == null) ? slave.getId() : rgvProtocol.getRgvNo();
+ int rgvPos = (rgvProtocol == null) ? 0 : rgvProtocol.getRgvPosI();
+ BasRgvOpt basRgvOpt = new BasRgvOpt(taskNo, rgvNo, rgvPos, command);
basRgvOptService.insert(basRgvOpt);
}catch (Exception e){
log.error("RGV鍐欏叆鍛戒护淇濆瓨澶辫触锛侊紒");
@@ -401,6 +443,68 @@
return false;
}
}
+ private boolean write4(RgvCommand command) throws InterruptedException {
+ if (null == command) {
+ log.error("RGV鍐欏叆鍛戒护涓虹┖");
+ return false;
+ }
+
+// siemensNet.Write("DB24.10.0", false);
+// siemensNet.Write("DB24.10.1", false);
+
+ command.setRgvNo(slave.getId());
+ short[] array = new short[5];
+ array[0] = command.getRgvNo().shortValue();
+ array[1] = command.getSourceStaNo1();
+ array[2] = command.getDestinationStaNo1();
+ array[3] = command.getTaskMode1();//浠诲姟妯″紡
+ array[4] = command.getTaskNo1();
+
+
+
+ OperateResult result = siemensNet.Write("DB24.0", array);
+//
+// if (command.getAckFinish1().equals((short)0)) {
+//// Thread.sleep(100L);
+//// siemensNet.Write("DB24.10.7", command.getRgvSome() == 1);
+//// Thread.sleep(20L);
+//// result = siemensNet.Write("DB24.10.0", true);
+// } else {
+// siemensNet.Write("DB24.10.1", true);
+// }
+
+ try {
+ // 鏃ュ織璁板綍
+ BasRgvOptService bean = SpringUtils.getBean(BasRgvOptService.class);
+ BasRgvOpt basRgvOpt = new BasRgvOpt(
+ command.getTaskNo1().intValue(),
+ command.getTaskNo2().intValue(),
+ command.getRgvNo(),
+ new Date(),
+ command.getTaskModeType1().toString(),
+ command.getSourceStaNo1().intValue(),
+ command.getDestinationStaNo1().intValue(),
+ command.getSourceStaNo2().intValue(),
+ command.getDestinationStaNo2().intValue(),
+ null,
+ new Date(),
+ null
+ );
+ bean.insert(basRgvOpt);
+ } catch (Exception ignore) {}
+
+ if (result != null && result.IsSuccess) {
+// Thread.sleep(200);
+// this.readStatus();
+ log.info("RGV 宸ヤ綅1鍙栨秷鍛戒护涓嬪彂[id:{}] >>>>> {}", slave.getId(), JSON.toJSONString(command));
+ OutputQueue.RGV.offer(MessageFormat.format("銆恵0}銆慬id:{1}] >>>>> 宸ヤ綅1鍛戒护涓嬪彂锛� {2}", DateUtils.convert(new Date()), slave.getId(), JSON.toJSONString(command)));
+ return true;
+ } else {
+ OutputQueue.RGV.offer(MessageFormat.format("銆恵0}銆戝啓鍏GV plc宸ヤ綅1鏁版嵁澶辫触 ===>> [id:{1}] [ip:{2}] [port:{3}]", DateUtils.convert(new Date()), slave.getId(), slave.getIp(), slave.getPort()));
+ log.error("鍐欏叆RGV plc宸ヤ綅1鍙栨秷鏁版嵁澶辫触 ===>> [id:{}] [ip:{}] [port:{}]", slave.getId(), slave.getIp(), slave.getPort());
+ return false;
+ }
+ }
/**
* 瀹屾垚
--
Gitblit v1.9.1