From 2f263d548dc8b9e270f5f5663e80f9d4f5880b10 Mon Sep 17 00:00:00 2001
From: wxw <Administrator@DESKTOP-5BIMHQ3>
Date: 星期日, 15 六月 2025 15:05:58 +0800
Subject: [PATCH] 申请储位增加锁防止向WMS重复申请

---
 Admin.NET/WCS.Application/PLC/PLCUtil.cs |   59 +++++++++++++++++++++++++++++++++++++++++++++++++++++++----
 1 files changed, 55 insertions(+), 4 deletions(-)

diff --git a/Admin.NET/WCS.Application/PLC/PLCUtil.cs b/Admin.NET/WCS.Application/PLC/PLCUtil.cs
index 0421e04..a420d66 100644
--- a/Admin.NET/WCS.Application/PLC/PLCUtil.cs
+++ b/Admin.NET/WCS.Application/PLC/PLCUtil.cs
@@ -1,6 +1,7 @@
 锘縰sing DocumentFormat.OpenXml.Bibliography;
 using DocumentFormat.OpenXml.Drawing;
 using Elastic.Clients.Elasticsearch;
+using Furion.Logging;
 using IoTClient;
 using IoTClient.Clients.Modbus;
 using IoTClient.Clients.PLC;
@@ -105,14 +106,21 @@
                 case PLCDataTypeEnum.String:
                     {
                         string dpos = IncrementCode(Pos);
-                        Result<byte[]> result1 = _client.ReadString(Pos, 1);
+                        Result<byte[]> result1 = _client.ReadString(Pos, 2);
                         if (result1.IsSucceed)
                         {
-                            Result<byte[]> result2 = _client.ReadString(dpos, (ushort)(result1.Value[0]));
+                            //wxw鏀�
+                            if ((ushort)(result1.Value[1]) > (ushort)(result1.Value[0]))
+                            {
+                                break;
+                            }
+                            ushort let = (ushort)(result1.Value[1]);//(ushort)(result1.Value[0])  澶囨敞锛歳esult1.Value[0]鍙栫殑鏄缃殑鏈�澶ч暱搴︼紝result1.Value[0]鍙栫殑鏄疄闄呭�奸暱搴�
+
+                            Result<byte[]> result2 = _client.ReadString(dpos, let);
                             Result<string> result3 = new Result<string>(result2);
                             if (result3.IsSucceed)
                             {
-                                result3.Value = Encoding.ASCII.GetString(result2.Value, 0, result1.Value[0]).Replace("\0", "");
+                                result3.Value = Encoding.ASCII.GetString(result2.Value, 0, let).Replace("\0", "");
                                 result = result3;
                             }
                         }
@@ -214,10 +222,53 @@
         }
     }
     /// <summary>
+    /// 寰幆鍐欏叆PLC鍊硷紙骞惰鍙栧�煎垽鏂拰鍐欏叆鐨勫�兼槸鍚︿竴鑷达紝鍐欏叆鎺у埗瀛椾笉鑳界敤姝ゆ柟娉曪級
+    /// </summary>
+    public IoTClient.Result SetPlcDBValueRepeat(PLCDataTypeEnum PosType, string DbNumber, string Pos, string Value)
+    {
+        IoTClient.Result _result = new IoTClient.Result();
+
+        int setCount = 0;//鍐欏叆娆℃暟
+        while (setCount < 5)
+        {
+            string address;
+            if (DbNumber.StartsWith("DB"))
+                address = DbNumber + "." + Pos;
+            else
+                address = DbNumber + Pos;
+            _result = this.SetPlcDBValue(PosType, address, Value);//鍐欏叆鍊�
+
+            //绱鍐欏叆娆℃暟
+            setCount++;
+
+            if (_result.IsSucceed)
+            {
+                //璇诲彇鍐欏叆鐨勫��
+                var (res, val) = GetPlcDBValue(PosType, DbNumber, Pos);
+                if (val.ToString() == Value)
+                {
+                    //璇诲彇鐨勫�煎拰鍐欏叆鐨勫�间竴鑷达紝鐩存帴璺冲嚭寰幆
+                    break;
+                }
+            }                    
+        }
+        //鍐欏叆鏃ュ織
+        //Log.Information($"66666666鍐欏叆PLC锛孌bNumber锛歿DbNumber}锛孭os:{Pos},Value:{Value},setCount:{setCount}");
+
+        return _result;
+    }
+    /// <summary>
     /// 鍐欏叆PLC鍊�
     /// </summary>
+    /// <param name="PosType"></param>
+    /// <param name="DbNumber"></param>
+    /// <param name="Pos"></param>
+    /// <param name="Value"></param>
+    /// <returns></returns>
     public IoTClient.Result SetPlcDBValue(PLCDataTypeEnum PosType, string DbNumber, string Pos, string Value)
     {
+        //Log.Information($"66666666鍐欏叆PLC锛孌bNumber锛歿DbNumber}锛孭os:{Pos},Value:{Value}");
+
         string address;
         if (DbNumber.StartsWith("DB"))
             address = DbNumber + "." + Pos;
@@ -273,7 +324,7 @@
         }
     }
     /// <summary>
-    /// 鍐欏叆PLC鍊�
+    /// 鎵归噺鍐欏叆PLC鍊�
     /// </summary>
     public IoTClient.Result SetPlcBatchDBValue(Dictionary<string, KeyValuePair<string, PLCDataTypeEnum>> listaddress)
     {

--
Gitblit v1.8.0