From a546e6d77ce52da0afe0f49b3e05f44507142d44 Mon Sep 17 00:00:00 2001 From: parallelbgls Date: Tue, 23 May 2017 15:07:27 +0800 Subject: [PATCH] Change ISpecialProtocalUnit to SpecialProtocalUnitAttribute --- Modbus.Net/Modbus.Net.OPC/OpcProtocal.cs | 6 ++++-- Modbus.Net/Modbus.Net.Siemens/SiemensProtocal.cs | 9 ++++++--- Modbus.Net/Modbus.Net/README.md | 7 ++++--- Modbus.Net/src/Base.Common/BaseProtocal.cs | 3 ++- Modbus.Net/src/Base.Common/ProtocalUnit.cs | 3 ++- Samples/AnyType/Controllers/HomeController.cs | 2 +- Samples/TaskManager/Controllers/HomeController.cs | 2 +- 7 files changed, 20 insertions(+), 12 deletions(-) diff --git a/Modbus.Net/Modbus.Net.OPC/OpcProtocal.cs b/Modbus.Net/Modbus.Net.OPC/OpcProtocal.cs index ca56811..0b7d66a 100644 --- a/Modbus.Net/Modbus.Net.OPC/OpcProtocal.cs +++ b/Modbus.Net/Modbus.Net.OPC/OpcProtocal.cs @@ -65,7 +65,8 @@ /// /// 读数据协议 /// - public class ReadRequestOpcProtocal : ProtocalUnit, ISpecialProtocalUnit + [SpecialProtocalUnit] + public class ReadRequestOpcProtocal : ProtocalUnit { /// /// 从对象的参数数组格式化 @@ -156,7 +157,8 @@ /// /// 写数据协议 /// - public class WriteRequestOpcProtocal : ProtocalUnit, ISpecialProtocalUnit + [SpecialProtocalUnit] + public class WriteRequestOpcProtocal : ProtocalUnit { /// /// 从对象的参数数组格式化 diff --git a/Modbus.Net/Modbus.Net.Siemens/SiemensProtocal.cs b/Modbus.Net/Modbus.Net.Siemens/SiemensProtocal.cs index 5a08905..d40729f 100644 --- a/Modbus.Net/Modbus.Net.Siemens/SiemensProtocal.cs +++ b/Modbus.Net/Modbus.Net.Siemens/SiemensProtocal.cs @@ -146,7 +146,8 @@ namespace Modbus.Net.Siemens public byte ConfirmMessage { get; set; } } - internal class ComCreateReferenceSiemensProtocal : ProtocalUnit, ISpecialProtocalUnit + [SpecialProtocalUnit] + internal class ComCreateReferenceSiemensProtocal : ProtocalUnit { public override byte[] Format(IInputStruct message) { @@ -200,7 +201,8 @@ namespace Modbus.Net.Siemens public ushort TsapDst { get; } } - internal class CreateReferenceSiemensProtocal : ProtocalUnit, ISpecialProtocalUnit + [SpecialProtocalUnit] + internal class CreateReferenceSiemensProtocal : ProtocalUnit { public override byte[] Format(IInputStruct message) { @@ -306,7 +308,8 @@ namespace Modbus.Net.Siemens /// /// 串口消息确认协议 /// - public class ComConfirmMessageSiemensProtocal : ProtocalUnit, ISpecialProtocalUnit + [SpecialProtocalUnit] + public class ComConfirmMessageSiemensProtocal : ProtocalUnit { /// /// 格式化 diff --git a/Modbus.Net/Modbus.Net/README.md b/Modbus.Net/Modbus.Net/README.md index f096d6d..b0b2ddd 100644 --- a/Modbus.Net/Modbus.Net/README.md +++ b/Modbus.Net/Modbus.Net/README.md @@ -394,10 +394,11 @@ public class ReadDataModbusProtocal : ProtocalUnit } } ``` -There is another interface called ISpecialProtocalUnit. -If you add ISpecialProtocalUnit to ProtocalUnit, then the protocal will not run BytesExtend and BytesDecact. +There is another attribute called SpecialProtocalUnitAttribute. +If you add SpecialProtocalUnitAttribute to ProtocalUnit, then the protocal will not run BytesExtend and BytesDecact. ```C# -internal class CreateReferenceSiemensProtocal : ProtocalUnit, ISpecialProtocalUnit +[SpecialProtocalUnit] +internal class CreateReferenceSiemensProtocal : ProtocalUnit { ... } diff --git a/Modbus.Net/src/Base.Common/BaseProtocal.cs b/Modbus.Net/src/Base.Common/BaseProtocal.cs index c31b6ce..fea5f5d 100644 --- a/Modbus.Net/src/Base.Common/BaseProtocal.cs +++ b/Modbus.Net/src/Base.Common/BaseProtocal.cs @@ -1,5 +1,6 @@ using System; using System.Collections.Generic; +using System.Linq; using System.Reflection; using System.Threading.Tasks; @@ -185,7 +186,7 @@ namespace Modbus.Net { TParamOut receiveContent; //如果为特别处理协议的话,跳过协议扩展收缩 - if (unit is ISpecialProtocalUnit) + if (unit.GetType().GetTypeInfo().GetCustomAttributes(typeof(SpecialProtocalUnitAttribute)).Any()) receiveContent = await ProtocalLinker.SendReceiveWithoutExtAndDecAsync(formatContent); else receiveContent = await ProtocalLinker.SendReceiveAsync(formatContent); diff --git a/Modbus.Net/src/Base.Common/ProtocalUnit.cs b/Modbus.Net/src/Base.Common/ProtocalUnit.cs index 5360a73..c3f308c 100644 --- a/Modbus.Net/src/Base.Common/ProtocalUnit.cs +++ b/Modbus.Net/src/Base.Common/ProtocalUnit.cs @@ -71,7 +71,8 @@ namespace Modbus.Net /// /// 特殊协议单元,写入这个协议不会执行BytesExtend和BytesDecact /// - public interface ISpecialProtocalUnit + [AttributeUsage(AttributeTargets.Class, Inherited = false)] + public class SpecialProtocalUnitAttribute : Attribute { } diff --git a/Samples/AnyType/Controllers/HomeController.cs b/Samples/AnyType/Controllers/HomeController.cs index ad7d7de..3216039 100644 --- a/Samples/AnyType/Controllers/HomeController.cs +++ b/Samples/AnyType/Controllers/HomeController.cs @@ -87,7 +87,7 @@ namespace AnyType.Controllers { Console.WriteLine($"ip {returnValues.MachineId} not return value"); } - }, 15000, 60000)); + }, MachineGetDataType.CommunicationTag, 15000, 60000)); } [HttpGet] diff --git a/Samples/TaskManager/Controllers/HomeController.cs b/Samples/TaskManager/Controllers/HomeController.cs index 484df23..a481007 100644 --- a/Samples/TaskManager/Controllers/HomeController.cs +++ b/Samples/TaskManager/Controllers/HomeController.cs @@ -79,7 +79,7 @@ namespace TaskManager.Controllers { Console.WriteLine($"ip {returnValues.MachineId} not return value"); } - }, 15000, 60000)); + }, MachineGetDataType.CommunicationTag, 15000, 60000)); } [HttpGet]