From 92338ab006f0e23f286a0914e4456c4f3a1c1b7b Mon Sep 17 00:00:00 2001
From: hwh <332078369@qq.com>
Date: 星期五, 06 九月 2024 10:48:50 +0800
Subject: [PATCH] 日志
---
Admin.NET/WCS.Application/PLC/PLCUtil.cs | 69 +++++++++++++++++++++++-----------
1 files changed, 47 insertions(+), 22 deletions(-)
diff --git a/Admin.NET/WCS.Application/PLC/PLCUtil.cs b/Admin.NET/WCS.Application/PLC/PLCUtil.cs
index 90d6cbc..0caf17a 100644
--- a/Admin.NET/WCS.Application/PLC/PLCUtil.cs
+++ b/Admin.NET/WCS.Application/PLC/PLCUtil.cs
@@ -1,4 +1,5 @@
锘縰sing DocumentFormat.OpenXml.Bibliography;
+using DocumentFormat.OpenXml.Drawing;
using Elastic.Clients.Elasticsearch;
using IoTClient;
using IoTClient.Clients.Modbus;
@@ -11,12 +12,14 @@
public class PLCUtil
{
public readonly long PlcId;
+ public readonly string PlcIP;
private SiemensClient _client;
private WcsPlc _modPlc;
private readonly object OLock = new object();
public PLCUtil(WcsPlc modPlc)
{
PlcId = modPlc.Id;
+ PlcIP = modPlc.IP;
_modPlc = modPlc;
_client = new SiemensClient((SiemensVersion)modPlc.PLCType, modPlc.IP, modPlc.Port);
_client.Open();
@@ -39,8 +42,9 @@
/// <param name="DbNumber">DB鍖烘寚瀹氬��</param>
/// <param name="PosType">瀛楃绫诲瀷</param>
/// <param name="Pos">鍋忕Щ閲�/鍦板潃</param>
+ /// <param name="Length">闀垮害锛堝瓧绗︿覆锛�</param>
/// <returns></returns>
- public (IoTClient.Result, dynamic value) GetPlcDBValue(PLCDataTypeEnum PosType, string DbNumber, string Pos)
+ public (IoTClient.Result, dynamic value) GetPlcDBValue(PLCDataTypeEnum PosType, string DbNumber, string Pos, int? Length = 0)
{
lock (OLock)
{
@@ -49,41 +53,55 @@
address = DbNumber + "." + Pos;
else
address = DbNumber + Pos;
+ return this.GetPlcDBValue(PosType, address, Length);
+ }
+ }
+ /// <summary>
+ /// 璇诲彇PLC鍊�
+ /// </summary>
+ /// <param name="PosType">瀛楃绫诲瀷</param>
+ /// <param name="Pos">鍋忕Щ閲�/鍦板潃</param>
+ /// <param name="Length">闀垮害锛堝瓧绗︿覆锛�</param>
+ /// <returns></returns>
+ public (IoTClient.Result, dynamic value) GetPlcDBValue(PLCDataTypeEnum PosType, string Pos, int? Length = 0)
+ {
+ lock (OLock)
+ {
dynamic result = null;
switch (PosType)
{
case PLCDataTypeEnum.Bit:
- result = _client.ReadBoolean(address);
+ result = _client.ReadBoolean(Pos);
break;
case PLCDataTypeEnum.Byte:
- result = _client.ReadByte(address);
+ result = _client.ReadByte(Pos);
break;
case PLCDataTypeEnum.Short:
- result = _client.ReadInt16(address);
+ result = _client.ReadInt16(Pos);
break;
case PLCDataTypeEnum.UShort:
- result = _client.ReadUInt16(address);
+ result = _client.ReadUInt16(Pos);
break;
case PLCDataTypeEnum.Int:
- result = _client.ReadInt32(address);
+ result = _client.ReadInt32(Pos);
break;
case PLCDataTypeEnum.UInt:
- result = _client.ReadUInt32(address);
+ result = _client.ReadUInt32(Pos);
break;
case PLCDataTypeEnum.Long:
- result = _client.ReadInt64(address);
+ result = _client.ReadInt64(Pos);
break;
case PLCDataTypeEnum.ULong:
- result = _client.ReadUInt64(address);
+ result = _client.ReadUInt64(Pos);
break;
case PLCDataTypeEnum.Float:
- result = _client.ReadFloat(address);
+ result = _client.ReadFloat(Pos);
break;
case PLCDataTypeEnum.Double:
- result = _client.ReadDouble(address);
+ result = _client.ReadDouble(Pos);
break;
case PLCDataTypeEnum.String:
- result = _client.ReadString(address);
+ result = _client.ReadString(Pos, Convert.ToUInt16(Length));
break;
default:
result = new IoTClient.Result<object>();
@@ -155,6 +173,13 @@
address = DbNumber + "." + Pos;
else
address = DbNumber + Pos;
+ return this.SetPlcDBValue(PosType, address, Pos, Value);
+ }
+ /// <summary>
+ /// 鍐欏叆PLC鍊�
+ /// </summary>
+ public IoTClient.Result SetPlcDBValue(PLCDataTypeEnum PosType, string Pos, string Value)
+ {
switch (PosType)
{
case PLCDataTypeEnum.Bit:
@@ -169,25 +194,25 @@
throw new Exception("鍐欏叆鍊奸敊璇�");
}
}
- return _client.Write(address, bit);
+ return _client.Write(Pos, bit);
case PLCDataTypeEnum.Byte:
- return _client.Write(address, byte.Parse(Value));
+ return _client.Write(Pos, byte.Parse(Value));
case PLCDataTypeEnum.Short:
- return _client.Write(address, short.Parse(Value));
+ return _client.Write(Pos, short.Parse(Value));
case PLCDataTypeEnum.UShort:
- return _client.Write(address, ushort.Parse(Value));
+ return _client.Write(Pos, ushort.Parse(Value));
case PLCDataTypeEnum.Int:
- return _client.Write(address, int.Parse(Value));
+ return _client.Write(Pos, int.Parse(Value));
case PLCDataTypeEnum.UInt:
- return _client.Write(address, uint.Parse(Value));
+ return _client.Write(Pos, uint.Parse(Value));
case PLCDataTypeEnum.Long:
- return _client.Write(address, long.Parse(Value));
+ return _client.Write(Pos, long.Parse(Value));
case PLCDataTypeEnum.ULong:
- return _client.Write(address, ulong.Parse(Value));
+ return _client.Write(Pos, ulong.Parse(Value));
case PLCDataTypeEnum.Float:
- return _client.Write(address, float.Parse(Value));
+ return _client.Write(Pos, float.Parse(Value));
case PLCDataTypeEnum.Double:
- return _client.Write(address, float.Parse(Value));
+ return _client.Write(Pos, float.Parse(Value));
default:
return new IoTClient.Result();
}
--
Gitblit v1.8.0