From 6bab6174e3eb0d8a37eade096ff70bf984e82439 Mon Sep 17 00:00:00 2001
From: hwh <332078369@qq.com>
Date: 星期二, 03 九月 2024 16:55:06 +0800
Subject: [PATCH] Merge branch 'master' of http://47.95.120.53:8083/r/WCSNet6
---
Admin.NET/WCS.Application/PLC/PLCUtil.cs | 175 ++++++++++++++++++++++++++++++---------------------------
1 files changed, 92 insertions(+), 83 deletions(-)
diff --git a/Admin.NET/WCS.Application/PLC/PLCUtil.cs b/Admin.NET/WCS.Application/PLC/PLCUtil.cs
index 69442c6..90d6cbc 100644
--- a/Admin.NET/WCS.Application/PLC/PLCUtil.cs
+++ b/Admin.NET/WCS.Application/PLC/PLCUtil.cs
@@ -13,7 +13,7 @@
public readonly long PlcId;
private SiemensClient _client;
private WcsPlc _modPlc;
-
+ private readonly object OLock = new object();
public PLCUtil(WcsPlc modPlc)
{
PlcId = modPlc.Id;
@@ -21,9 +21,9 @@
_client = new SiemensClient((SiemensVersion)modPlc.PLCType, modPlc.IP, modPlc.Port);
_client.Open();
}
- public bool Connected()
+ public bool Connected
{
- return _client.Connected;
+ get { return _client.Connected; }
}
public IoTClient.Result Open()
{
@@ -42,49 +42,55 @@
/// <returns></returns>
public (IoTClient.Result, dynamic value) GetPlcDBValue(PLCDataTypeEnum PosType, string DbNumber, string Pos)
{
- string address;
- if (DbNumber.StartsWith("DB"))
- address = DbNumber + "." + Pos;
- else
- address = DbNumber + Pos;
- dynamic result = null;
- switch (PosType)
+ lock (OLock)
{
- case PLCDataTypeEnum.Bit:
- result = _client.ReadBoolean(address);
- break;
- case PLCDataTypeEnum.Byte:
- result = _client.ReadByte(address);
- break;
- case PLCDataTypeEnum.Short:
- result = _client.ReadInt16(address);
- break;
- case PLCDataTypeEnum.UShort:
- result = _client.ReadUInt16(address);
- break;
- case PLCDataTypeEnum.Int:
- result = _client.ReadInt32(address);
- break;
- case PLCDataTypeEnum.UInt:
- result = _client.ReadUInt32(address);
- break;
- case PLCDataTypeEnum.Long:
- result = _client.ReadInt64(address);
- break;
- case PLCDataTypeEnum.ULong:
- result = _client.ReadUInt64(address);
- break;
- case PLCDataTypeEnum.Float:
- result = _client.ReadFloat(address);
- break;
- case PLCDataTypeEnum.Double:
- result = _client.ReadDouble(address);
- break;
- default:
- result = new IoTClient.Result<object>();
- break;
+ string address;
+ if (DbNumber.StartsWith("DB"))
+ address = DbNumber + "." + Pos;
+ else
+ address = DbNumber + Pos;
+ dynamic result = null;
+ switch (PosType)
+ {
+ case PLCDataTypeEnum.Bit:
+ result = _client.ReadBoolean(address);
+ break;
+ case PLCDataTypeEnum.Byte:
+ result = _client.ReadByte(address);
+ break;
+ case PLCDataTypeEnum.Short:
+ result = _client.ReadInt16(address);
+ break;
+ case PLCDataTypeEnum.UShort:
+ result = _client.ReadUInt16(address);
+ break;
+ case PLCDataTypeEnum.Int:
+ result = _client.ReadInt32(address);
+ break;
+ case PLCDataTypeEnum.UInt:
+ result = _client.ReadUInt32(address);
+ break;
+ case PLCDataTypeEnum.Long:
+ result = _client.ReadInt64(address);
+ break;
+ case PLCDataTypeEnum.ULong:
+ result = _client.ReadUInt64(address);
+ break;
+ case PLCDataTypeEnum.Float:
+ result = _client.ReadFloat(address);
+ break;
+ case PLCDataTypeEnum.Double:
+ result = _client.ReadDouble(address);
+ break;
+ case PLCDataTypeEnum.String:
+ result = _client.ReadString(address);
+ break;
+ default:
+ result = new IoTClient.Result<object>();
+ break;
+ }
+ return (result, result.Value);
}
- return (result, result.Value);
}
/// <summary>
/// 鎵归噺璇诲彇PLC鍊�
@@ -92,49 +98,52 @@
/// <returns></returns>
public Result<Dictionary<string, object>> GetPlcBatchDBValue(Dictionary<string, PLCDataTypeEnum> listaddress)
{
- Dictionary<string, DataTypeEnum> addresses = new Dictionary<string, DataTypeEnum>();
- foreach (var address in listaddress)
+ lock (OLock)
{
- switch (address.Value)
+ Dictionary<string, DataTypeEnum> addresses = new Dictionary<string, DataTypeEnum>();
+ foreach (var address in listaddress)
{
- case PLCDataTypeEnum.Bit:
- addresses.Add(address.Key, DataTypeEnum.Bool);
- break;
- case PLCDataTypeEnum.Byte:
- addresses.Add(address.Key, DataTypeEnum.Byte);
- break;
- case PLCDataTypeEnum.Short:
- addresses.Add(address.Key, DataTypeEnum.Int16);
- break;
- case PLCDataTypeEnum.UShort:
- addresses.Add(address.Key, DataTypeEnum.UInt16);
- break;
- case PLCDataTypeEnum.Int:
- addresses.Add(address.Key, DataTypeEnum.Int32);
- break;
- case PLCDataTypeEnum.UInt:
- addresses.Add(address.Key, DataTypeEnum.UInt32);
- break;
- case PLCDataTypeEnum.Long:
- addresses.Add(address.Key, DataTypeEnum.Int64);
- break;
- case PLCDataTypeEnum.ULong:
- addresses.Add(address.Key, DataTypeEnum.UInt64);
- break;
- case PLCDataTypeEnum.Float:
- addresses.Add(address.Key, DataTypeEnum.Float);
- break;
- case PLCDataTypeEnum.Double:
- addresses.Add(address.Key, DataTypeEnum.Double);
- break;
- case PLCDataTypeEnum.String:
- addresses.Add(address.Key, DataTypeEnum.String);
- break;
- default:
- break;
+ switch (address.Value)
+ {
+ case PLCDataTypeEnum.Bit:
+ addresses.Add(address.Key, DataTypeEnum.Bool);
+ break;
+ case PLCDataTypeEnum.Byte:
+ addresses.Add(address.Key, DataTypeEnum.Byte);
+ break;
+ case PLCDataTypeEnum.Short:
+ addresses.Add(address.Key, DataTypeEnum.Int16);
+ break;
+ case PLCDataTypeEnum.UShort:
+ addresses.Add(address.Key, DataTypeEnum.UInt16);
+ break;
+ case PLCDataTypeEnum.Int:
+ addresses.Add(address.Key, DataTypeEnum.Int32);
+ break;
+ case PLCDataTypeEnum.UInt:
+ addresses.Add(address.Key, DataTypeEnum.UInt32);
+ break;
+ case PLCDataTypeEnum.Long:
+ addresses.Add(address.Key, DataTypeEnum.Int64);
+ break;
+ case PLCDataTypeEnum.ULong:
+ addresses.Add(address.Key, DataTypeEnum.UInt64);
+ break;
+ case PLCDataTypeEnum.Float:
+ addresses.Add(address.Key, DataTypeEnum.Float);
+ break;
+ case PLCDataTypeEnum.Double:
+ addresses.Add(address.Key, DataTypeEnum.Double);
+ break;
+ case PLCDataTypeEnum.String:
+ addresses.Add(address.Key, DataTypeEnum.String);
+ break;
+ default:
+ break;
+ }
}
+ return _client.BatchRead(addresses);
}
- return _client.BatchRead(addresses);
}
/// <summary>
/// 鍐欏叆PLC鍊�
--
Gitblit v1.8.0