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