From 18675524096643ce5cb3f53f134f2982dd0fd6d7 Mon Sep 17 00:00:00 2001
From: zhaowc <526854230@qq.com>
Date: 星期五, 31 十月 2025 16:42:15 +0800
Subject: [PATCH] 修改任务页面
---
Admin.NET/WCS.Application/PLC/PLCUtil.cs | 74 ++++++++++++++++++++++++++++++++++++-
1 files changed, 72 insertions(+), 2 deletions(-)
diff --git a/Admin.NET/WCS.Application/PLC/PLCUtil.cs b/Admin.NET/WCS.Application/PLC/PLCUtil.cs
index 0caf17a..d441f6b 100644
--- a/Admin.NET/WCS.Application/PLC/PLCUtil.cs
+++ b/Admin.NET/WCS.Application/PLC/PLCUtil.cs
@@ -7,6 +7,8 @@
using IoTClient.Common.Enums;
using IoTClient.Enums;
using IoTClient.Interfaces;
+using System.Text;
+using System.Text.RegularExpressions;
namespace WCS.Application;
public class PLCUtil
@@ -15,6 +17,7 @@
public readonly string PlcIP;
private SiemensClient _client;
private WcsPlc _modPlc;
+ private Task<WcsPlc> modPlc;
private readonly object OLock = new object();
public PLCUtil(WcsPlc modPlc)
{
@@ -24,6 +27,7 @@
_client = new SiemensClient((SiemensVersion)modPlc.PLCType, modPlc.IP, modPlc.Port);
_client.Open();
}
+
public bool Connected
{
get { return _client.Connected; }
@@ -101,7 +105,24 @@
result = _client.ReadDouble(Pos);
break;
case PLCDataTypeEnum.String:
- result = _client.ReadString(Pos, Convert.ToUInt16(Length));
+ {
+ string dpos = IncrementCode(Pos);
+ Result<byte[]> result1 = _client.ReadString(Pos, 1);
+ if (result1.IsSucceed)
+ {
+ Result<byte[]> result2 = _client.ReadString(dpos, (ushort)(result1.Value[0]));
+ Result<string> result3 = new Result<string>(result2);
+ if (result3.IsSucceed)
+ {
+ result3.Value = Encoding.ASCII.GetString(result2.Value, 0, result1.Value[0]).Replace("\0", "");
+ result = result3;
+ }
+ }
+ else
+ {
+ result = result1;
+ }
+ }
break;
default:
result = new IoTClient.Result<object>();
@@ -109,6 +130,37 @@
}
return (result, result.Value);
}
+ }
+ public static string IncrementCode(string code, int index = 2)
+ {
+ // 浣跨敤姝e垯琛ㄨ揪寮忚В鏋愬瓧绗︿覆
+ var match = Regex.Match(code, @"([A-Za-z]+)(\d+)(?:\.(\d+))?");
+
+ if (match.Success)
+ {
+ // 鎻愬彇瀛楁瘝閮ㄥ垎
+ string prefix = match.Groups[1].Value;
+ // 鎻愬彇鏁板瓧閮ㄥ垎
+ int number1 = int.Parse(match.Groups[2].Value);
+ int number2 = match.Groups[3].Success ? int.Parse(match.Groups[3].Value) : 0;
+
+ // 澶勭悊瑙勫垯
+ if (match.Groups[3].Success)
+ {
+ // 濡傛灉鏈夊皬鏁扮偣鍒嗛殧閮ㄥ垎锛屽鍔�2
+ number2 += index;
+ return $"{prefix}{number1}.{number2:D3}";
+ }
+ else
+ {
+ // 娌℃湁灏忔暟鐐瑰垎闅旈儴鍒嗙殑锛屽鍔�2
+ number1 += index;
+ return $"{prefix}{number1}";
+ }
+ }
+
+ // 濡傛灉涓嶅尮閰嶏紝杩斿洖鍘熷瓧绗︿覆
+ return code;
}
/// <summary>
/// 鎵归噺璇诲彇PLC鍊�
@@ -173,8 +225,21 @@
address = DbNumber + "." + Pos;
else
address = DbNumber + Pos;
- return this.SetPlcDBValue(PosType, address, Pos, Value);
+ return this.SetPlcDBValue(PosType, address, Value);
}
+
+ /// <summary>
+ /// 鍐欏叆PLC鍊�
+ /// </summary>
+ //public IoTClient.Result SetPlcDBValue(PLCDataTypeEnum PosType, string DbNumber, string Pos, byte Value)
+ //{
+ // string address;
+ // if (DbNumber.StartsWith("DB"))
+ // address = DbNumber + "." + Pos;
+ // else
+ // address = DbNumber + Pos;
+ // return this.SetPlcDBValue(PosType, address, Value);
+ //}
/// <summary>
/// 鍐欏叆PLC鍊�
/// </summary>
@@ -213,6 +278,11 @@
return _client.Write(Pos, float.Parse(Value));
case PLCDataTypeEnum.Double:
return _client.Write(Pos, float.Parse(Value));
+ case PLCDataTypeEnum.String:
+ {
+ string dpos = IncrementCode(Pos, 1);
+ return _client.Write(dpos, Value);
+ }
default:
return new IoTClient.Result();
}
--
Gitblit v1.8.0