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]