diff --git a/Modbus.Net/Modbus.Net.Modbus.SelfDefinedSample/ModbusUtilityTime.cs b/Modbus.Net/Modbus.Net.Modbus.SelfDefinedSample/ModbusUtilityTime.cs
index 4bab590..63fca81 100644
--- a/Modbus.Net/Modbus.Net.Modbus.SelfDefinedSample/ModbusUtilityTime.cs
+++ b/Modbus.Net/Modbus.Net.Modbus.SelfDefinedSample/ModbusUtilityTime.cs
@@ -16,7 +16,7 @@ namespace Modbus.Net.Modbus.SelfDefinedSample
/// 主站号
/// 端格式
public ModbusUtilityTime(int connectionType, byte slaveAddress, byte masterAddress,
- Endian endian = Endian.BigEndianLsb)
+ Endian endian)
: base(connectionType, slaveAddress, masterAddress, endian)
{
}
@@ -30,7 +30,7 @@ namespace Modbus.Net.Modbus.SelfDefinedSample
/// 主站号
/// 端格式
public ModbusUtilityTime(ModbusType connectionType, string connectionString, byte slaveAddress, byte masterAddress,
- Endian endian = Endian.BigEndianLsb)
+ Endian endian)
: base(connectionType, connectionString, slaveAddress, masterAddress, endian)
{
}
diff --git a/Modbus.Net/Modbus.Net.Modbus/ModbusMachine.cs b/Modbus.Net/Modbus.Net.Modbus/ModbusMachine.cs
index 51b0d01..76c3601 100644
--- a/Modbus.Net/Modbus.Net.Modbus/ModbusMachine.cs
+++ b/Modbus.Net/Modbus.Net.Modbus/ModbusMachine.cs
@@ -22,7 +22,7 @@ namespace Modbus.Net.Modbus
/// 端格式
public ModbusMachine(TKey id, ModbusType connectionType, string connectionString,
IEnumerable> getAddresses, bool keepConnect, byte slaveAddress, byte masterAddress,
- Endian endian = Endian.BigEndianLsb)
+ Endian endian)
: base(id, getAddresses, keepConnect, slaveAddress, masterAddress)
{
BaseUtility = new ModbusUtility(connectionType, connectionString, slaveAddress, masterAddress, endian);
@@ -43,7 +43,7 @@ namespace Modbus.Net.Modbus
/// 端格式
public ModbusMachine(TKey id, ModbusType connectionType, string connectionString,
IEnumerable> getAddresses, byte slaveAddress, byte masterAddress,
- Endian endian = Endian.BigEndianLsb)
+ Endian endian)
: this(id, connectionType, connectionString, getAddresses, true, slaveAddress, masterAddress, endian)
{
}
diff --git a/Modbus.Net/Modbus.Net.Modbus/ModbusUtility.cs b/Modbus.Net/Modbus.Net.Modbus/ModbusUtility.cs
index 70e38fe..45495b7 100644
--- a/Modbus.Net/Modbus.Net.Modbus/ModbusUtility.cs
+++ b/Modbus.Net/Modbus.Net.Modbus/ModbusUtility.cs
@@ -79,7 +79,7 @@ namespace Modbus.Net.Modbus
/// 主站号
/// 端格式
public ModbusUtility(int connectionType, byte slaveAddress, byte masterAddress,
- Endian endian = Endian.BigEndianLsb)
+ Endian endian)
: base(slaveAddress, masterAddress)
{
Endian = endian;
@@ -97,7 +97,7 @@ namespace Modbus.Net.Modbus
/// 主站号
/// 端格式
public ModbusUtility(ModbusType connectionType, string connectionString, byte slaveAddress, byte masterAddress,
- Endian endian = Endian.BigEndianLsb)
+ Endian endian)
: base(slaveAddress, masterAddress)
{
Endian = endian;
diff --git a/Modbus.Net/Modbus.Net/Configuration/MachineReader.cs b/Modbus.Net/Modbus.Net/Configuration/MachineReader.cs
index 81f2082..ff8a0be 100644
--- a/Modbus.Net/Modbus.Net/Configuration/MachineReader.cs
+++ b/Modbus.Net/Modbus.Net/Configuration/MachineReader.cs
@@ -67,7 +67,7 @@ namespace Modbus.Net
}
case "endian":
{
- paramsSet.Add(FastEnum.Parse(dic["endian"]));
+ paramsSet.Add(Endian.Parse(dic["endian"]));
break;
}
default:
diff --git a/Modbus.Net/Modbus.Net/Enum/Enum.cs b/Modbus.Net/Modbus.Net/Enum/Enum.cs
new file mode 100644
index 0000000..190c1de
--- /dev/null
+++ b/Modbus.Net/Modbus.Net/Enum/Enum.cs
@@ -0,0 +1,145 @@
+using System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Reflection;
+using System.Text;
+using System.Threading.Tasks;
+
+namespace Modbus.Net
+{
+ ///
+ /// 端格式
+ ///
+ public partial class Endian
+ {
+ ///
+ /// 小端
+ ///
+ public const int LittleEndianLsb = 1;
+ ///
+ /// 大端-大端位
+ ///
+ public const int BigEndianLsb = 2;
+ ///
+ /// 大端-大端位
+ ///
+ public const int BigEndianMsb = 3;
+
+#pragma warning disable
+ protected int Value { get; set; }
+
+ protected Endian(int value)
+ {
+ Value = value;
+ }
+
+ public static implicit operator int(Endian endian)
+ {
+ return endian.Value;
+ }
+
+ public static implicit operator Endian(int value)
+ {
+ return new Endian(value);
+ }
+
+ public static implicit operator Endian(string value)
+ {
+ return Endian.Parse(value);
+ }
+
+ public static implicit operator string(Endian endian)
+ {
+ return endian.ToString();
+ }
+
+ public static Endian Parse(string value)
+ {
+ if (typeof(Endian).GetField(value) != null)
+ {
+ return (int)typeof(Endian).GetField(value).GetValue(null);
+ }
+ throw new NotSupportedException("Endian name " + value + " is not supported.");
+ }
+
+ public override string ToString()
+ {
+ foreach (var field in typeof(Endian).GetFields())
+ {
+ if ((int)field.GetValue(null) == Value)
+ {
+ return field.Name;
+ }
+ }
+ return null;
+ }
+#pragma warning restore
+ }
+
+ ///
+ /// 读写设备值的方式
+ ///
+ public enum MachineDataType
+ {
+ ///
+ /// 地址
+ ///
+ Address,
+
+ ///
+ /// 通讯标识
+ ///
+ CommunicationTag,
+
+ ///
+ /// 名称
+ ///
+ Name,
+
+ ///
+ /// Id
+ ///
+ Id
+ }
+
+ ///
+ /// 波特率
+ ///
+ public enum BaudRate
+ {
+#pragma warning disable
+ BaudRate75 = 75,
+ BaudRate110 = 110,
+ BaudRate134 = 134,
+ BaudRate150 = 150,
+ BaudRate300 = 300,
+ BaudRate600 = 600,
+ BaudRate1200 = 1200,
+ BaudRate1800 = 1800,
+ BaudRate2400 = 2400,
+ BaudRate4800 = 4800,
+ BaudRate9600 = 9600,
+ BaudRate14400 = 14400,
+ BaudRate19200 = 19200,
+ BaudRate38400 = 38400,
+ BaudRate57600 = 57600,
+ BaudRate115200 = 115200,
+ BaudRate128000 = 128000,
+ BaudRate230400 = 230400,
+ BaudRate460800 = 460800,
+ BaudRate921600 = 921600,
+#pragma warning restore
+ }
+
+ ///
+ /// 数据位
+ ///
+ public enum DataBits
+ {
+#pragma warning disable
+ Seven = 7,
+ Eight = 8,
+#pragma warning restore
+ }
+
+}
diff --git a/Modbus.Net/Modbus.Net/Linker/ComProtocolLinker.cs b/Modbus.Net/Modbus.Net/Linker/ComProtocolLinker.cs
index 0de006d..e84f972 100644
--- a/Modbus.Net/Modbus.Net/Linker/ComProtocolLinker.cs
+++ b/Modbus.Net/Modbus.Net/Linker/ComProtocolLinker.cs
@@ -3,46 +3,6 @@ using System.IO.Ports;
namespace Modbus.Net
{
- ///
- /// 波特率
- ///
- public enum BaudRate
- {
-#pragma warning disable
- BaudRate75 = 75,
- BaudRate110 = 110,
- BaudRate134 = 134,
- BaudRate150 = 150,
- BaudRate300 = 300,
- BaudRate600 = 600,
- BaudRate1200 = 1200,
- BaudRate1800 = 1800,
- BaudRate2400 = 2400,
- BaudRate4800 = 4800,
- BaudRate9600 = 9600,
- BaudRate14400 = 14400,
- BaudRate19200 = 19200,
- BaudRate38400 = 38400,
- BaudRate57600 = 57600,
- BaudRate115200 = 115200,
- BaudRate128000 = 128000,
- BaudRate230400 = 230400,
- BaudRate460800 = 460800,
- BaudRate921600 = 921600,
-#pragma warning restore
- }
-
- ///
- /// 数据位
- ///
- public enum DataBits
- {
-#pragma warning disable
- Seven = 7,
- Eight = 8,
-#pragma warning restore
- }
-
///
/// 串口连接对象
///
diff --git a/Modbus.Net/Modbus.Net/Machine/BaseMachine.cs b/Modbus.Net/Modbus.Net/Machine/BaseMachine.cs
index c78caf6..725450f 100644
--- a/Modbus.Net/Modbus.Net/Machine/BaseMachine.cs
+++ b/Modbus.Net/Modbus.Net/Machine/BaseMachine.cs
@@ -6,32 +6,6 @@ using System.Threading.Tasks;
namespace Modbus.Net
{
- ///
- /// 读写设备值的方式
- ///
- public enum MachineDataType
- {
- ///
- /// 地址
- ///
- Address,
-
- ///
- /// 通讯标识
- ///
- CommunicationTag,
-
- ///
- /// 名称
- ///
- Name,
-
- ///
- /// Id
- ///
- Id
- }
-
///
/// 设备
///
diff --git a/Modbus.Net/Modbus.Net/Utility/BaseUtility.cs b/Modbus.Net/Modbus.Net/Utility/BaseUtility.cs
index b0d45c7..89fc1d2 100644
--- a/Modbus.Net/Modbus.Net/Utility/BaseUtility.cs
+++ b/Modbus.Net/Modbus.Net/Utility/BaseUtility.cs
@@ -4,27 +4,6 @@ using System.Collections.Generic;
using System.Linq;
using System.Threading.Tasks;
-///
-/// 端格式
-///
-public enum Endian
-{
- ///
- /// 小端
- ///
- LittleEndianLsb,
-
- ///
- /// 大端-小端位
- ///
- BigEndianLsb,
-
- ///
- /// 大端-大端位
- ///
- BigEndianMsb
-}
-
namespace Modbus.Net
{
///
diff --git a/Samples/AnyType/Controllers/HomeController.cs b/Samples/AnyType/Controllers/HomeController.cs
index 5422a2e..eff41f5 100644
--- a/Samples/AnyType/Controllers/HomeController.cs
+++ b/Samples/AnyType/Controllers/HomeController.cs
@@ -55,7 +55,7 @@ namespace AnyType.Controllers
Value = 0,
Type = unitValue.DataType.Name
};
- var machine = new ModbusMachine("1", ModbusType.Tcp, "10.10.18.251:502", addressUnits, true, 2, 0);
+ var machine = new ModbusMachine("1", ModbusType.Tcp, "10.10.18.251:502", addressUnits, true, 2, 0, Endian.BigEndianLsb);
//启动任务
await MachineJobSchedulerCreator.CreateScheduler("Trigger1", -1, 1).Result.From(machine.Id, machine, MachineDataType.CommunicationTag).Result.Query("Query1",
returnValues =>
diff --git a/Samples/CrossLamp/Controllers/HomeController.cs b/Samples/CrossLamp/Controllers/HomeController.cs
index 21c5666..4dec085 100644
--- a/Samples/CrossLamp/Controllers/HomeController.cs
+++ b/Samples/CrossLamp/Controllers/HomeController.cs
@@ -30,7 +30,7 @@ namespace CrossLamp.Controllers
{
if (_utility == null)
{
- _utility = new ModbusUtility(ModbusType.Tcp, "10.10.18.251", 2, 0);
+ _utility = new ModbusUtility(ModbusType.Tcp, "10.10.18.251", 2, 0, Endian.BigEndianLsb);
await _utility.ConnectAsync();
}
Lamp light = new Lamp();
diff --git a/Samples/TripleAdd/Controllers/HomeController.cs b/Samples/TripleAdd/Controllers/HomeController.cs
index b760401..1a930c1 100644
--- a/Samples/TripleAdd/Controllers/HomeController.cs
+++ b/Samples/TripleAdd/Controllers/HomeController.cs
@@ -41,7 +41,7 @@ namespace TripleAdd.Controllers
{
if (utility == null)
{
- utility = new ModbusUtility(ModbusType.Tcp, "10.10.18.251", 2, 0);
+ utility = new ModbusUtility(ModbusType.Tcp, "10.10.18.251", 2, 0, Endian.BigEndianLsb);
utility.AddressTranslator = new AddressTranslatorModbus();
await utility.ConnectAsync();
}
@@ -60,7 +60,7 @@ namespace TripleAdd.Controllers
new AddressUnit() {Id = "2", Area = "4X", Address = 2, CommunicationTag = "Add2", DataType = typeof(ushort), Zoom = 1, DecimalPos = 0},
new AddressUnit() {Id = "3", Area = "4X", Address = 3, CommunicationTag = "Add3", DataType = typeof(ushort), Zoom = 1, DecimalPos = 0},
new AddressUnit() {Id = "4", Area = "4X", Address = 4, CommunicationTag = "Ans", DataType = typeof(ushort), Zoom = 1, DecimalPos = 0},
- }, 2, 0);
+ }, 2, 0, Endian.BigEndianLsb);
machine.AddressCombiner = new AddressCombinerContinus(machine.AddressTranslator, 100000);
machine.AddressCombinerSet = new AddressCombinerContinus(machine.AddressTranslator, 100000);
}
diff --git a/Tests/Modbus.Net.Tests/MachineMethodTest.cs b/Tests/Modbus.Net.Tests/MachineMethodTest.cs
index baee8d8..5289da5 100644
--- a/Tests/Modbus.Net.Tests/MachineMethodTest.cs
+++ b/Tests/Modbus.Net.Tests/MachineMethodTest.cs
@@ -12,7 +12,7 @@ namespace Modbus.Net.Tests
[TestMethod]
public void GetUtility()
{
- BaseMachine baseMachine = new ModbusMachine(1, ModbusType.Tcp, _machineIp, null, true, 2, 0);
+ BaseMachine baseMachine = new ModbusMachine(1, ModbusType.Tcp, _machineIp, null, true, 2, 0, Endian.BigEndianLsb);
var utility = baseMachine.GetUtilityMethods();
var methods = utility.GetType().GetRuntimeMethods();
Assert.AreEqual(methods.FirstOrDefault(method => method.Name == "GetDatasAsync") != null, true);
@@ -23,7 +23,7 @@ namespace Modbus.Net.Tests
[TestMethod]
public async Task InvokeUtility()
{
- BaseMachine baseMachine = new ModbusMachine(1, ModbusType.Tcp, _machineIp, null, true, 2, 0);
+ BaseMachine baseMachine = new ModbusMachine(1, ModbusType.Tcp, _machineIp, null, true, 2, 0, Endian.BigEndianLsb);
await baseMachine.BaseUtility.ConnectAsync();
var success = await baseMachine.BaseUtility.GetUtilityMethods().SetDatasAsync("4X 1", new object[] { (byte)11 });
Assert.AreEqual(success.IsSuccess, true);
@@ -46,7 +46,7 @@ namespace Modbus.Net.Tests
CommunicationTag = "A1",
DataType = typeof(bool)
}
- }, true, 2, 0);
+ }, true, 2, 0, Endian.BigEndianLsb);
var success = await baseMachine.GetMachineMethods().SetDatasAsync(
MachineDataType.Address,
new Dictionary
diff --git a/Tests/Modbus.Net.Tests/ModbusMultiStationTest.cs b/Tests/Modbus.Net.Tests/ModbusMultiStationTest.cs
index 3b4c598..8dfe01e 100644
--- a/Tests/Modbus.Net.Tests/ModbusMultiStationTest.cs
+++ b/Tests/Modbus.Net.Tests/ModbusMultiStationTest.cs
@@ -15,8 +15,8 @@ namespace Modbus.Net.Tests
[TestInitialize]
public void Init()
{
- _modbusRtuMachine1 = new ModbusMachine("1", ModbusType.Rtu, _machineCom, null, true, 1, 0);
- _modbusRtuMachine2 = new ModbusMachine("2", ModbusType.Rtu, _machineCom, null, true, 2, 0);
+ _modbusRtuMachine1 = new ModbusMachine("1", ModbusType.Rtu, _machineCom, null, true, 1, 0, Endian.BigEndianLsb);
+ _modbusRtuMachine2 = new ModbusMachine("2", ModbusType.Rtu, _machineCom, null, true, 2, 0, Endian.BigEndianLsb);
}
[TestMethod]
diff --git a/Tests/Modbus.Net.Tests/ModbusTest.cs b/Tests/Modbus.Net.Tests/ModbusTest.cs
index cf61276..332516f 100644
--- a/Tests/Modbus.Net.Tests/ModbusTest.cs
+++ b/Tests/Modbus.Net.Tests/ModbusTest.cs
@@ -21,11 +21,11 @@ namespace Modbus.Net.Tests
[TestInitialize]
public void Init()
{
- _modbusTcpMachine = new ModbusMachine("1", ModbusType.Tcp, _machineIp, null, true, 2, 0);
+ _modbusTcpMachine = new ModbusMachine("1", ModbusType.Tcp, _machineIp, null, true, 2, 0, Endian.BigEndianLsb);
- _modbusRtuMachine = new ModbusMachine("2", ModbusType.Rtu, _machineCom, null, true, 2, 0);
+ _modbusRtuMachine = new ModbusMachine("2", ModbusType.Rtu, _machineCom, null, true, 2, 0, Endian.BigEndianLsb);
- _modbusAsciiMachine = new ModbusMachine("3", ModbusType.Ascii, _machineCom2, null, true, 2, 0);
+ _modbusAsciiMachine = new ModbusMachine("3", ModbusType.Ascii, _machineCom2, null, true, 2, 0, Endian.BigEndianLsb);
}
[TestMethod]