From 35c26fb50cc90b85a8cf924f7b47e3ab412cabb5 Mon Sep 17 00:00:00 2001
From: chen.llin <1442464845@qq.comm>
Date: 星期六, 10 一月 2026 19:41:14 +0800
Subject: [PATCH] 事务粒度调整

---
 src/main/java/com/zy/core/thread/SiemensCrnThread.java |  223 +++++++++++++++++++++++++++----------------------------
 1 files changed, 111 insertions(+), 112 deletions(-)

diff --git a/src/main/java/com/zy/core/thread/SiemensCrnThread.java b/src/main/java/com/zy/core/thread/SiemensCrnThread.java
index ac48c37..4cc9ad2 100644
--- a/src/main/java/com/zy/core/thread/SiemensCrnThread.java
+++ b/src/main/java/com/zy/core/thread/SiemensCrnThread.java
@@ -8,11 +8,11 @@
 import com.core.common.Cools;
 import com.core.common.DateUtils;
 import com.core.common.SpringUtils;
-import com.zy.asrs.entity.BasCrnOpt;
-import com.zy.asrs.entity.BasCrnp;
-import com.zy.asrs.service.BasCrnOptService;
-import com.zy.asrs.service.BasCrnpService;
-import com.zy.common.utils.News;
+import com.zy.entity.BasCrnOpt;
+import com.zy.entity.BasCrnp;
+import com.zy.service.BasCrnOptService;
+import com.zy.service.BasCrnpService;
+import com.zy.utils.News;
 import com.zy.core.CrnThread;
 import com.zy.core.cache.MessageQueue;
 import com.zy.core.cache.OutputQueue;
@@ -109,16 +109,17 @@
         if (null == crnProtocol) {
             crnProtocol = new CrnProtocol();
         }
+        crnProtocol.setCrnNo(slave.getId());
         crnProtocol.setMode((short) -1);
 //        crnProtocol.setTaskNo((short)0);
-        crnProtocol.setStatus((short)-1);
-        crnProtocol.setBay((short)0);
-        crnProtocol.setLevel((short)0);
+        crnProtocol.setStatus((short) -1);
+        crnProtocol.setBay((short) 0);
+        crnProtocol.setLevel((short) 0);
         crnProtocol.setForkPos((short) -1);
         crnProtocol.setLiftPos((short) -1);
-        crnProtocol.setWalkPos((short)0);
-        crnProtocol.setLoaded((short)0);
-        crnProtocol.setAlarm((short)0);
+        crnProtocol.setWalkPos((short) 0);
+        crnProtocol.setLoaded((short) 0);
+        crnProtocol.setAlarm((short) 0);
         crnProtocol.setxSpeed((short) 0);
         crnProtocol.setySpeed((short) 0);
         crnProtocol.setzSpeed((short) 0);
@@ -126,6 +127,19 @@
         crnProtocol.setyDistance((short) 0);
         crnProtocol.setxDuration((short) 0);
         crnProtocol.setyDuration((short) 0);
+        try {
+            // 鏍规嵁瀹炴椂淇℃伅鏇存柊鏁版嵁搴�
+            BasCrnpService basCrnpService = SpringUtils.getBean(BasCrnpService.class);
+            BasCrnp basCrnp = new BasCrnp();
+            basCrnp.setCrnErr(crnProtocol.getAlarm() == null ? 0 : crnProtocol.getAlarm().longValue());
+            basCrnp.setCrnNo(slave.getId());
+            basCrnp.setCrnSts((int) crnProtocol.getMode());
+            if (!basCrnpService.updateById(crnProtocol.toSqlModel(basCrnp))) {
+                News.error("MelsecCrn" + " - 4" + " - 鍫嗗灈鏈簆lc鏁版嵁搴撴洿鏂板け璐� ===>> [id:{}] [ip:{}] [port:{}]", slave.getId(), slave.getIp(), slave.getPort());
+            }
+        } catch (Exception e) {
+
+        }
     }
 
     @Override
@@ -157,8 +171,8 @@
             if (result.IsSuccess) {
                 if (null == crnProtocol) {
                     crnProtocol = new CrnProtocol();
-                    crnProtocol.setCrnNo(slave.getId());
                 }
+                crnProtocol.setCrnNo(slave.getId());
                 crnProtocol.setMode(siemensNet.getByteTransform().TransInt16(result.Content, 0));
                 crnProtocol.setTaskNo(siemensNet.getByteTransform().TransInt16(result.Content, 2));
                 crnProtocol.setStatus(siemensNet.getByteTransform().TransInt16(result.Content, 4));
@@ -185,6 +199,7 @@
 
                 // 澶嶄綅淇″彿
                 if (!Cools.isEmpty(crnProtocol.getStatusType()) && crnProtocol.getStatusType().equals(CrnStatusType.WAITING)) {
+                    News.info("{}鍙峰爢鍨涙満锛屾敹鍒颁换鍔}瀹屾垚淇″彿",crnProtocol.getCrnNo(),crnProtocol.getTaskNo());
                     if (resetFlag) {
                         if(crnProtocol.getTaskNo()==9999){
                             backHpFlag = false;
@@ -193,6 +208,9 @@
                         crnCommand.setAckFinish((short)1);
                         if (write(crnCommand)) {
                             resetFlag = false;
+                            News.info("{}鍙峰爢鍨涙満锛屼换鍔}瀹屾垚纭淇″彿鍙戦�佹垚鍔�",crnProtocol.getCrnNo(),crnProtocol.getTaskNo());
+                        } else {
+                            News.error("{}鍙峰爢鍨涙満锛屼换鍔}瀹屾垚纭淇″彿鍙戦�佸け璐�",crnProtocol.getCrnNo(),crnProtocol.getTaskNo());
                         }
                     }
                 }
@@ -221,15 +239,6 @@
         }
     }
 
-    private void convertRow(CrnCommand crnCommand) {
-        if (crnCommand.getSourcePosX() != null && crnCommand.getSourcePosX() != 0) {
-            crnCommand.setSourcePosX((short) (crnCommand.getSourcePosX() - ((slave.getId() - 1) * 4)));
-        }
-        if (crnCommand.getDestinationPosX() != null && crnCommand.getDestinationPosX() != 0) {
-            crnCommand.setDestinationPosX((short) (crnCommand.getDestinationPosX() - ((slave.getId() - 1) * 4)));
-        }
-    }
-
     /**
      * 鍐欏叆鏁版嵁
      */
@@ -238,35 +247,25 @@
             News.error("鍫嗗灈鏈哄啓鍏ュ懡浠や负绌�");
             return false;
         }
-        // 鍚戝爢鍨涙満鍙戜换鍔″墠鐨勫爢鍨涙満鐘舵��
-        try{
-            OperateResultExOne<byte[]> resultRead = siemensNet.Read("DB100.0", (short) 24);
-            if (resultRead.IsSuccess) {
-                CrnCommand one = new CrnCommand();
-                one.setTaskNo(siemensNet.getByteTransform().TransInt16(resultRead.Content, 2));
-                one.setTaskMode(siemensNet.getByteTransform().TransInt16(resultRead.Content, 4));
-                one.setSourcePosX(siemensNet.getByteTransform().TransInt16(resultRead.Content, 6));
-                one.setSourcePosY(siemensNet.getByteTransform().TransInt16(resultRead.Content, 8));
-                one.setSourcePosZ(siemensNet.getByteTransform().TransInt16(resultRead.Content, 10));
-                one.setDestinationPosX(siemensNet.getByteTransform().TransInt16(resultRead.Content, 12));
-                one.setDestinationPosY(siemensNet.getByteTransform().TransInt16(resultRead.Content, 14));
-                one.setDestinationPosZ(siemensNet.getByteTransform().TransInt16(resultRead.Content, 16));
-                if (!command.getTaskNo().equals(one.getTaskNo()) || !command.getTaskMode().equals(one.getTaskMode())
-                        || !command.getSourcePosX().equals(one.getSourcePosX()) || !command.getSourcePosY().equals(one.getSourcePosY())
-                        || !command.getSourcePosZ().equals(one.getSourcePosZ()) || !command.getDestinationPosX().equals(one.getDestinationPosX())
-                        || !command.getDestinationPosY().equals(one.getDestinationPosY()) || !command.getDestinationPosZ().equals(one.getDestinationPosZ())
-                ){
-                    News.error("涓嬪彂鍓嶏細[id:{}] >>>>> 鍐欏叆[{}],===>>鍥炶[{}]", slave.getId(), JSON.toJSON(command),JSON.toJSON(one));
-                } else {
-                    News.info("涓嬪彂鍓嶏細[id:{}] >>>>> 鍐欏叆[{}],===>>鍥炶[{}]", slave.getId(), JSON.toJSON(command),JSON.toJSON(one));
+        int writeAck = 0;
+        do {
+            OperateResult resultAck = siemensNet.Write("DB100.0", (short) 0);
+            if (resultAck.IsSuccess){
+                Thread.sleep(200);
+                OperateResultExOne<byte[]> resultRead = siemensNet.Read("DB100.0", (short) 2);
+                short ack = siemensNet.getByteTransform().TransInt16(resultRead.Content, 0);
+                if (ack != 0) {
+                    writeAck++;
+                }else {
+                    News.info("鍫嗗灈鏈哄懡浠や笅鍙慬id:{}] >>>>> {}", slave.getId(), "ack澶嶄綅瀹屾垚");
+                    break;
                 }
             }
-        }catch (Exception e){
-            News.error("鍫嗗灈鏈哄懡浠ゅ湴鍧�鍐欏叆鍚庡洖璇诲嚭閿�");
-        }
-//        convertRow(command);
+        }while (writeAck <5);
+
+
         command.setCrnNo(slave.getId());
-//        short[] array = new short[10];
+
         short[] array = new short[10];
         array[0] = command.getAckFinish(); // 浠诲姟瀹屾垚纭浣�
         array[1] = command.getTaskNo();  // 浠诲姟鍙�
@@ -278,58 +277,70 @@
         array[7] = command.getDestinationPosY(); // 鐩爣浣嶇疆鍒楀彿
         array[8] = command.getDestinationPosZ(); // 鐩爣浣嶇疆灞傚彿
         array[9] = command.getCommand();
-//        array[10] = command.getLocType1();   //鏂板璐х墿绫诲瀷涓嬪彂
+
+
+
         OperateResult result = siemensNet.Write("DB100.0", array);
         News.info("鍫嗗灈鏈哄懡浠や笅鍙慬id:{}] >>>>> {}", slave.getId(), array);
 
-        if(!result.IsSuccess){
-            News.error("鍐欏叆鍫嗗灈鏈簆lc鏁版嵁澶辫触锛岄噸鏂版坊鍔犱换鍔″埌闃熷垪 ===>> [id:{}],{}", slave.getId(), JSON.toJSON(command));
-            MessageQueue.offer(SlaveType.Crn, slave.getId(), new Task(2, command));
-            Thread.sleep(100);
-            readStatus();
-            return false;
-        }
-
         //鍫嗗灈鏈轰换鍔″啓鍏ュ悗锛屽洖璇讳竴娆★紝鐪嬫槸鍚︽垚鍔�
         Thread.sleep(200);
-        try{
-            OperateResultExOne<byte[]> resultRead = siemensNet.Read("DB100.0", (short) 18);
-            if (resultRead.IsSuccess) {
-                CrnCommand one = new CrnCommand();
-                one.setTaskNo(siemensNet.getByteTransform().TransInt16(resultRead.Content, 2));
-                one.setTaskMode(siemensNet.getByteTransform().TransInt16(resultRead.Content, 4));
-                one.setSourcePosX(siemensNet.getByteTransform().TransInt16(resultRead.Content, 6));
-                one.setSourcePosY(siemensNet.getByteTransform().TransInt16(resultRead.Content, 8));
-                one.setSourcePosZ(siemensNet.getByteTransform().TransInt16(resultRead.Content, 10));
-                one.setDestinationPosX(siemensNet.getByteTransform().TransInt16(resultRead.Content, 12));
-                one.setDestinationPosY(siemensNet.getByteTransform().TransInt16(resultRead.Content, 14));
-                one.setDestinationPosZ(siemensNet.getByteTransform().TransInt16(resultRead.Content, 16));
-                if (!command.getTaskNo().equals(one.getTaskNo()) || !command.getTaskMode().equals(one.getTaskMode())
-                        || !command.getSourcePosX().equals(one.getSourcePosX()) || !command.getSourcePosY().equals(one.getSourcePosY())
-                        || !command.getSourcePosZ().equals(one.getSourcePosZ()) || !command.getDestinationPosX().equals(one.getDestinationPosX())
-                        || !command.getDestinationPosY().equals(one.getDestinationPosY()) || !command.getDestinationPosZ().equals(one.getDestinationPosZ())
-                ){
-                    try{
-                        News.error("鍫嗗灈鏈哄懡浠ゅ湴鍧�鍐欏叆鍚庡洖璇诲け璐id:{}] >>>>> 鍐欏叆[{}],===>>鍥炶[{}]", slave.getId(), JSON.toJSON(command),JSON.toJSON(one));
-                    }catch (Exception e){
-                        try{
-                            News.error("鏃ュ織鎵撳嵃澶辫触锛�===>>鍙傛暟one鎶ラ敊 [id:{}],{}", slave.getId(), JSON.toJSON(command),JSON.toJSON(resultRead));
-                        }catch (Exception e1){
-                            News.error("鏃ュ織鎵撳嵃澶辫触锛�===>> [id:{}],{}", slave.getId(), JSON.toJSON(command));
-                        }
-                    }
-                    News.error("鍫嗗灈鏈哄懡浠ゅ洖璇诲け璐ュ悗锛岄噸鏂版坊鍔犱换鍔″埌闃熷垪 ===>> [id:{}],{}", slave.getId(), JSON.toJSON(command));
-                    MessageQueue.offer(SlaveType.Crn, slave.getId(), new Task(2, command));
+        int writeCount1 = 1;
+
+        do {
+            try{
+                if(!result.IsSuccess ){
+                    News.error("鍐欏叆鍫嗗灈鏈簆lc鏁版嵁澶辫触锛岄噸鏂颁笅鍙戜换鍔�  鍐欏叆鐩存帴澶辫触 ===>> [id:{}],{},[鍐欏叆娆℃暟:{}]", slave.getId(), JSON.toJSON(command),writeCount1);
+//                    MessageQueue.offer(SlaveType.Crn, slave.getId(), new Task(2, command));
+                    result = siemensNet.Write("DB100.0", array);
                     Thread.sleep(100);
-                    readStatus();
-                    return false;
-                } else {
-                    News.info("鍫嗗灈鏈哄懡浠ゅ湴鍧�鍐欏叆鍚庡洖璇绘垚鍔焄id:{}] >>>>> 鍐欏叆[{}],===>>鍥炶[{}]", slave.getId(), JSON.toJSON(command),JSON.toJSON(one));
+                    writeCount1++;
+                    continue;
                 }
+                OperateResultExOne<byte[]> resultRead = siemensNet.Read("DB100.0", (short) 24);
+                if (resultRead.IsSuccess) {
+                    CrnCommand one = new CrnCommand();
+                    one.setAckFinish(siemensNet.getByteTransform().TransInt16(resultRead.Content, 0));
+                    one.setTaskNo(siemensNet.getByteTransform().TransInt16(resultRead.Content, 2));
+                    one.setTaskMode(siemensNet.getByteTransform().TransInt16(resultRead.Content, 4));
+                    one.setSourcePosX(siemensNet.getByteTransform().TransInt16(resultRead.Content, 6));
+                    one.setSourcePosY(siemensNet.getByteTransform().TransInt16(resultRead.Content, 8));
+                    one.setSourcePosZ(siemensNet.getByteTransform().TransInt16(resultRead.Content, 10));
+                    one.setDestinationPosX(siemensNet.getByteTransform().TransInt16(resultRead.Content, 12));
+                    one.setDestinationPosY(siemensNet.getByteTransform().TransInt16(resultRead.Content, 14));
+                    one.setDestinationPosZ(siemensNet.getByteTransform().TransInt16(resultRead.Content, 16));
+                    one.setCommand(siemensNet.getByteTransform().TransInt16(resultRead.Content, 18));
+                    if (!command.getTaskNo().equals(one.getTaskNo()) || !command.getTaskMode().equals(one.getTaskMode())
+                            || !command.getSourcePosX().equals(one.getSourcePosX()) || !command.getSourcePosY().equals(one.getSourcePosY())
+                            || !command.getSourcePosZ().equals(one.getSourcePosZ()) || !command.getDestinationPosX().equals(one.getDestinationPosX())
+                            || !command.getDestinationPosY().equals(one.getDestinationPosY()) || !command.getDestinationPosZ().equals(one.getDestinationPosZ())
+                            || !command.getCommand().equals(one.getCommand())
+                            || !command.getAckFinish().equals(one.getAckFinish())
+                    ){
+                        try{
+                            News.error("鍫嗗灈鏈哄懡浠ゅ湴鍧�鍐欏叆鍚庡洖璇诲け璐�==>涓嶄竴鑷碵id:{}] >>>>> 鍐欏叆[{}],===>>鍥炶[{}]", slave.getId(), JSON.toJSON(command),JSON.toJSON(one));
+                        }catch (Exception e){
+                            try{
+                                News.error("鏃ュ織鎵撳嵃澶辫触锛�===>>鍙傛暟one鎶ラ敊 [id:{}],{}", slave.getId(), JSON.toJSON(command),JSON.toJSON(resultRead));
+                            }catch (Exception e1){
+                                News.error("鏃ュ織鎵撳嵃澶辫触锛�===>> [id:{}],{}", slave.getId(), JSON.toJSON(command));
+                            }
+                        }
+                        News.error("鍐欏叆鍫嗗灈鏈簆lc鏁版嵁澶辫触锛岄噸鏂颁笅鍙戜换鍔�  鍥炶涓嶄竴鑷� ===>> [id:{}],{},[鍐欏叆娆℃暟:{}]", slave.getId(), JSON.toJSON(command),writeCount1);
+                        result = siemensNet.Write("DB100.0", array);
+                        writeCount1++;
+                        continue;
+
+                    } else {
+                        News.info("鍫嗗灈鏈哄懡浠ゅ湴鍧�鍐欏叆鍚庡洖璇绘垚鍔焄id:{}] >>>>> 鍐欏叆[{}],===>>鍥炶[{}]", slave.getId(), JSON.toJSON(command),JSON.toJSON(one));
+                        break;
+                    }
+                }
+            }catch (Exception e){
+                News.error("鍫嗗灈鏈哄懡浠ゅ湴鍧�鍐欏叆鍚庡洖璇诲嚭閿�,寮傚父锛�"+e);
             }
-        }catch (Exception e){
-            News.error("鍫嗗灈鏈哄懡浠ゅ湴鍧�鍐欏叆鍚庡洖璇诲嚭閿�");
-        }
+            writeCount1++;
+        } while (writeCount1<6);
 
 
         if (command.getAckFinish() == 0) {
@@ -345,6 +356,7 @@
                     if(result.IsSuccess){
                         //鍫嗗灈鏈轰换鍔″啓鍏ュ悗锛屽洖璇讳竴娆★紝鐪嬫槸鍚︽垚鍔�
                         Thread.sleep(200);
+                        log.info("鍫嗗灈鏈轰换鍔″畬鎴愬浣嶏紝姝ゆ椂鍫嗗灈鏈虹姸鎬�:"+crnProtocol.getStatusType()+",鍫嗗灈鏈篿d:"+crnProtocol.getCrnNo());
                         OperateResultExOne<byte[]> resultRead = siemensNet.Read("DB100.18", (short) 2);
                         if (resultRead.IsSuccess) {
                             commandFinish=siemensNet.getByteTransform().TransInt16(resultRead.Content, 0);
@@ -352,7 +364,7 @@
                                 News.error("鍫嗗灈鏈轰换鍔$‘璁や綅"+commandFinish+"鍐欏叆鏁版嵁涓庡洖璇绘暟鎹笉涓�鑷达紒"+"寰幆鎵ц娆℃暟:"+writeCount2+"娆�");
                             }else{
                                 //浠诲姟鍛戒护鍐欏叆鎴愬姛
-                                News.info("鍫嗗灈鏈轰换鍔$‘璁や綅"+commandFinish+"鍥炶鎴愬姛锛�"+"寰幆鎵ц娆℃暟:"+writeCount2+"娆�");
+//                                News.info("鍫嗗灈鏈轰换鍔$‘璁や綅"+commandFinish+"鍥炶鎴愬姛锛�"+"寰幆鎵ц娆℃暟:"+writeCount2+"娆�");
                                 break;
                             }
                         }else {
@@ -364,14 +376,6 @@
                 }while (writeCount2<5);
             }
         }
-
-//        if (command.getAckFinish() == 0) {
-//            short commandFinish = 1;
-//            Thread.sleep(200L);
-//            result = siemensNet.Write("DB100.18", commandFinish);
-//            log.info("鍫嗗灈鏈篶ommandFinish涓嬪彂[id:{}] >>>>> {}", slave.getId(), commandFinish);
-////            result = siemensNet.Write("DB100.22", commandFinish);
-//        }
 
         try {
             // 鏃ュ織璁板綍
@@ -409,11 +413,6 @@
         }
     }
 
-    public void requestStop() {
-        isRunning = false;
-    }
-
-
     @Override
     public void close() {
         siemensNet.ConnectClose();
@@ -425,7 +424,7 @@
     public static void main(String[] args) throws InterruptedException {
         CrnSlave slave = new CrnSlave();
         slave.setId(1);
-        slave.setIp("192.168.6.9");
+        slave.setIp("10.10.10.1");
         slave.setRack(0);
         slave.setSlot(0);
         SiemensCrnThread crnThread = new SiemensCrnThread(slave);
@@ -466,15 +465,15 @@
 //        // 3.搴撲綅绉昏浆   婧愬拰鐩爣閮藉彂 pass
 //        CrnCommand command = new CrnCommand();
 //        command.setCrnNo(slave.getId()); // 鍫嗗灈鏈虹紪鍙�
-//        command.setTaskNo((short) 0); // 宸ヤ綔鍙�
+//        command.setTaskNo((short) 2); // 宸ヤ綔鍙�
 //        command.setAckFinish((short) 0);  // 浠诲姟瀹屾垚纭浣�
 //        command.setTaskMode(CrnTaskModeType.LOC_MOVE); // 浠诲姟妯″紡:  搴撲綅绉昏浆
 //        command.setSourcePosX((short)2);     // 婧愬簱浣嶆帓
-//        command.setSourcePosY((short)2);     // 婧愬簱浣嶅垪
-//        command.setSourcePosZ((short)3);     // 婧愬簱浣嶅眰
-//        command.setDestinationPosX((short)2);     // 鐩爣搴撲綅鎺�
-//        command.setDestinationPosY((short)4);     // 鐩爣搴撲綅鍒�
-//        command.setDestinationPosZ((short)4);     // 鐩爣搴撲綅灞�
+//        command.setSourcePosY((short)1);     // 婧愬簱浣嶅垪
+//        command.setSourcePosZ((short)1);     // 婧愬簱浣嶅眰
+//        command.setDestinationPosX((short)3);     // 鐩爣搴撲綅鎺�
+//        command.setDestinationPosY((short)1);     // 鐩爣搴撲綅鍒�
+//        command.setDestinationPosZ((short)1);     // 鐩爣搴撲綅灞�
 //        crnThread.write(command);
 
         // 4.绔欎綅绉昏浆   婧愬拰鐩爣閮藉彂

--
Gitblit v1.9.1