diff --git a/Modbus.Net/Modbus.Net.Modbus/Modbus.Net.Modbus.nuspec b/Modbus.Net/Modbus.Net.Modbus/Modbus.Net.Modbus.nuspec index e15ee3a..c070fd2 100644 --- a/Modbus.Net/Modbus.Net.Modbus/Modbus.Net.Modbus.nuspec +++ b/Modbus.Net/Modbus.Net.Modbus/Modbus.Net.Modbus.nuspec @@ -2,7 +2,7 @@ Modbus.Net.Modbus - 1.2.2 + 1.2.3 Modbus.Net.Modbus Chris L.(Luo Sheng) Hangzhou Delian IoT Science Technology Co.,Ltd. @@ -13,7 +13,7 @@ Copyright 2017 Hangzhou Delian IoT Science Technology Co.,Ltd. hardware communicate protocal modbus Delian - + diff --git a/Modbus.Net/Modbus.Net.Modbus/ModbusAsciiProtocal.cs b/Modbus.Net/Modbus.Net.Modbus/ModbusAsciiProtocal.cs index feeff00..0928bdf 100644 --- a/Modbus.Net/Modbus.Net.Modbus/ModbusAsciiProtocal.cs +++ b/Modbus.Net/Modbus.Net.Modbus/ModbusAsciiProtocal.cs @@ -5,13 +5,13 @@ /// public class ModbusAsciiProtocal : ModbusProtocal { - public ModbusAsciiProtocal(byte slaveAddress, byte masterAddress) - : this(ConfigurationManager.COM, slaveAddress, masterAddress) + public ModbusAsciiProtocal(byte slaveAddress, byte masterAddress, Endian endian) + : this(ConfigurationManager.COM, slaveAddress, masterAddress, endian) { } - public ModbusAsciiProtocal(string com, byte slaveAddress, byte masterAddress) - : base(slaveAddress, masterAddress) + public ModbusAsciiProtocal(string com, byte slaveAddress, byte masterAddress, Endian endian) + : base(slaveAddress, masterAddress, endian) { ProtocalLinker = new ModbusAsciiProtocalLinker(com); } diff --git a/Modbus.Net/Modbus.Net.Modbus/ModbusProtocal.cs b/Modbus.Net/Modbus.Net.Modbus/ModbusProtocal.cs index d646667..ccf49b5 100644 --- a/Modbus.Net/Modbus.Net.Modbus/ModbusProtocal.cs +++ b/Modbus.Net/Modbus.Net.Modbus/ModbusProtocal.cs @@ -47,7 +47,7 @@ namespace Modbus.Net.Modbus /// public abstract class ModbusProtocal : BaseProtocal { - protected ModbusProtocal(byte slaveAddress, byte masterAddress) : base(slaveAddress, masterAddress) + protected ModbusProtocal(byte slaveAddress, byte masterAddress, Endian endian) : base(slaveAddress, masterAddress, endian) { } @@ -116,9 +116,9 @@ namespace Modbus.Net.Modbus public override IOutputStruct Unformat(byte[] messageBytes, ref int pos) { - var slaveAddress = BigEndianValueHelper.Instance.GetByte(messageBytes, ref pos); - var functionCode = BigEndianValueHelper.Instance.GetByte(messageBytes, ref pos); - var dataCount = BigEndianValueHelper.Instance.GetByte(messageBytes, ref pos); + var slaveAddress = ValueHelper.GetInstance(Endian).GetByte(messageBytes, ref pos); + var functionCode = ValueHelper.GetInstance(Endian).GetByte(messageBytes, ref pos); + var dataCount = ValueHelper.GetInstance(Endian).GetByte(messageBytes, ref pos); var dataValue = new byte[dataCount]; Array.Copy(messageBytes, 3, dataValue, 0, dataCount); return new ReadDataModbusOutputStruct(slaveAddress, functionCode, dataCount, dataValue); @@ -132,13 +132,13 @@ namespace Modbus.Net.Modbus public class WriteDataModbusInputStruct : IInputStruct { public WriteDataModbusInputStruct(byte slaveAddress, string startAddress, object[] writeValue, - AddressTranslator addressTranslator) + AddressTranslator addressTranslator, Endian endian) { SlaveAddress = slaveAddress; var translateAddress = addressTranslator.AddressTranslate(startAddress, false); FunctionCode = (byte) translateAddress.Area; StartAddress = (ushort) translateAddress.Address; - var writeByteValue = BigEndianValueHelper.Instance.ObjectArrayToByteArray(writeValue); + var writeByteValue = ValueHelper.GetInstance(endian).ObjectArrayToByteArray(writeValue); WriteCount = (ushort) (writeByteValue.Length/addressTranslator.GetAreaByteLength(translateAddress.AreaString)); WriteByteCount = (byte) writeByteValue.Length; @@ -194,10 +194,10 @@ namespace Modbus.Net.Modbus public override IOutputStruct Unformat(byte[] messageBytes, ref int flag) { - var slaveAddress = BigEndianValueHelper.Instance.GetByte(messageBytes, ref flag); - var functionCode = BigEndianValueHelper.Instance.GetByte(messageBytes, ref flag); - var startAddress = BigEndianValueHelper.Instance.GetUShort(messageBytes, ref flag); - var writeCount = BigEndianValueHelper.Instance.GetUShort(messageBytes, ref flag); + var slaveAddress = ValueHelper.GetInstance(Endian).GetByte(messageBytes, ref flag); + var functionCode = ValueHelper.GetInstance(Endian).GetByte(messageBytes, ref flag); + var startAddress = ValueHelper.GetInstance(Endian).GetUShort(messageBytes, ref flag); + var writeCount = ValueHelper.GetInstance(Endian).GetUShort(messageBytes, ref flag); return new WriteDataModbusOutputStruct(slaveAddress, functionCode, startAddress, writeCount); } @@ -261,16 +261,16 @@ namespace Modbus.Net.Modbus public override IOutputStruct Unformat(byte[] messageBytes, ref int flag) { - var slaveAddress = BigEndianValueHelper.Instance.GetByte(messageBytes, ref flag); - var functionCode = BigEndianValueHelper.Instance.GetByte(messageBytes, ref flag); - var writeByteCount = BigEndianValueHelper.Instance.GetByte(messageBytes, ref flag); - var year = BigEndianValueHelper.Instance.GetUShort(messageBytes, ref flag); - var day = BigEndianValueHelper.Instance.GetByte(messageBytes, ref flag); - var month = BigEndianValueHelper.Instance.GetByte(messageBytes, ref flag); - var hour = BigEndianValueHelper.Instance.GetUShort(messageBytes, ref flag); - var second = BigEndianValueHelper.Instance.GetByte(messageBytes, ref flag); - var minute = BigEndianValueHelper.Instance.GetByte(messageBytes, ref flag); - var millisecond = BigEndianValueHelper.Instance.GetUShort(messageBytes, ref flag); + var slaveAddress = ValueHelper.GetInstance(Endian).GetByte(messageBytes, ref flag); + var functionCode = ValueHelper.GetInstance(Endian).GetByte(messageBytes, ref flag); + var writeByteCount = ValueHelper.GetInstance(Endian).GetByte(messageBytes, ref flag); + var year = ValueHelper.GetInstance(Endian).GetUShort(messageBytes, ref flag); + var day = ValueHelper.GetInstance(Endian).GetByte(messageBytes, ref flag); + var month = ValueHelper.GetInstance(Endian).GetByte(messageBytes, ref flag); + var hour = ValueHelper.GetInstance(Endian).GetUShort(messageBytes, ref flag); + var second = ValueHelper.GetInstance(Endian).GetByte(messageBytes, ref flag); + var minute = ValueHelper.GetInstance(Endian).GetByte(messageBytes, ref flag); + var millisecond = ValueHelper.GetInstance(Endian).GetUShort(messageBytes, ref flag); return new GetSystemTimeModbusOutputStruct(slaveAddress, functionCode, writeByteCount, year, day, month, hour, second, minute, millisecond); } @@ -359,10 +359,10 @@ namespace Modbus.Net.Modbus public override IOutputStruct Unformat(byte[] messageBytes, ref int flag) { - var slaveAddress = BigEndianValueHelper.Instance.GetByte(messageBytes, ref flag); - var functionCode = BigEndianValueHelper.Instance.GetByte(messageBytes, ref flag); - var startAddress = BigEndianValueHelper.Instance.GetUShort(messageBytes, ref flag); - var writeCount = BigEndianValueHelper.Instance.GetUShort(messageBytes, ref flag); + var slaveAddress = ValueHelper.GetInstance(Endian).GetByte(messageBytes, ref flag); + var functionCode = ValueHelper.GetInstance(Endian).GetByte(messageBytes, ref flag); + var startAddress = ValueHelper.GetInstance(Endian).GetUShort(messageBytes, ref flag); + var writeCount = ValueHelper.GetInstance(Endian).GetUShort(messageBytes, ref flag); return new SetSystemTimeModbusOutputStruct(slaveAddress, functionCode, startAddress, writeCount); } } diff --git a/Modbus.Net/Modbus.Net.Modbus/ModbusRtuProtocal.cs b/Modbus.Net/Modbus.Net.Modbus/ModbusRtuProtocal.cs index 2a97d60..9fbe229 100644 --- a/Modbus.Net/Modbus.Net.Modbus/ModbusRtuProtocal.cs +++ b/Modbus.Net/Modbus.Net.Modbus/ModbusRtuProtocal.cs @@ -5,13 +5,13 @@ /// public class ModbusRtuProtocal : ModbusProtocal { - public ModbusRtuProtocal(byte slaveAddress, byte masterAddress) - : this(ConfigurationManager.COM, slaveAddress, masterAddress) + public ModbusRtuProtocal(byte slaveAddress, byte masterAddress, Endian endian) + : this(ConfigurationManager.COM, slaveAddress, masterAddress, endian) { } - public ModbusRtuProtocal(string com, byte slaveAddress, byte masterAddress) - : base(slaveAddress, masterAddress) + public ModbusRtuProtocal(string com, byte slaveAddress, byte masterAddress, Endian endian) + : base(slaveAddress, masterAddress, endian) { ProtocalLinker = new ModbusRtuProtocalLinker(com); } diff --git a/Modbus.Net/Modbus.Net.Modbus/ModbusTcpProtocal.cs b/Modbus.Net/Modbus.Net.Modbus/ModbusTcpProtocal.cs index 37d729c..ff8631c 100644 --- a/Modbus.Net/Modbus.Net.Modbus/ModbusTcpProtocal.cs +++ b/Modbus.Net/Modbus.Net.Modbus/ModbusTcpProtocal.cs @@ -5,18 +5,18 @@ /// public class ModbusTcpProtocal : ModbusProtocal { - public ModbusTcpProtocal(byte slaveAddress, byte masterAddress) - : this(ConfigurationManager.IP, slaveAddress, masterAddress) + public ModbusTcpProtocal(byte slaveAddress, byte masterAddress, Endian endian) + : this(ConfigurationManager.IP, slaveAddress, masterAddress, endian) { } - public ModbusTcpProtocal(string ip, byte slaveAddress, byte masterAddress) : base(slaveAddress, masterAddress) + public ModbusTcpProtocal(string ip, byte slaveAddress, byte masterAddress, Endian endian) : base(slaveAddress, masterAddress, endian) { ProtocalLinker = new ModbusTcpProtocalLinker(ip); } - public ModbusTcpProtocal(string ip, int port, byte slaveAddress, byte masterAddress) - : base(slaveAddress, masterAddress) + public ModbusTcpProtocal(string ip, int port, byte slaveAddress, byte masterAddress, Endian endian) + : base(slaveAddress, masterAddress, endian) { ProtocalLinker = new ModbusTcpProtocalLinker(ip, port); } diff --git a/Modbus.Net/Modbus.Net.Modbus/ModbusUtility.cs b/Modbus.Net/Modbus.Net.Modbus/ModbusUtility.cs index 1f1634e..8110d40 100644 --- a/Modbus.Net/Modbus.Net.Modbus/ModbusUtility.cs +++ b/Modbus.Net/Modbus.Net.Modbus/ModbusUtility.cs @@ -33,24 +33,25 @@ namespace Modbus.Net.Modbus /// private ModbusType _modbusType; - public ModbusUtility(int connectionType, byte slaveAddress, byte masterAddress) + public ModbusUtility(int connectionType, byte slaveAddress, byte masterAddress, Endian endian = Endian.BigEndianLsb) : base(slaveAddress, masterAddress) { + Endian = endian; ConnectionString = null; ModbusType = (ModbusType) connectionType; AddressTranslator = new AddressTranslatorModbus(); } - public ModbusUtility(ModbusType connectionType, string connectionString, byte slaveAddress, byte masterAddress) + public ModbusUtility(ModbusType connectionType, string connectionString, byte slaveAddress, byte masterAddress, Endian endian = Endian.BigEndianLsb) : base(slaveAddress, masterAddress) { + Endian = endian; ConnectionString = connectionString; ModbusType = connectionType; AddressTranslator = new AddressTranslatorModbus(); } - public override Endian GetLittleEndian => Wrapper[typeof (ReadDataModbusProtocal)].IsLittleEndian; - public override Endian SetLittleEndian => Wrapper[typeof (WriteDataModbusProtocal)].IsLittleEndian; + public override Endian Endian { get; } protected string ConnectionStringIp { @@ -91,27 +92,27 @@ namespace Modbus.Net.Modbus case ModbusType.Rtu: { Wrapper = ConnectionString == null - ? new ModbusRtuProtocal(SlaveAddress, MasterAddress) - : new ModbusRtuProtocal(ConnectionString, SlaveAddress, MasterAddress); + ? new ModbusRtuProtocal(SlaveAddress, MasterAddress, Endian) + : new ModbusRtuProtocal(ConnectionString, SlaveAddress, MasterAddress, Endian); break; } //Tcp协议 case ModbusType.Tcp: { Wrapper = ConnectionString == null - ? new ModbusTcpProtocal(SlaveAddress, MasterAddress) + ? new ModbusTcpProtocal(SlaveAddress, MasterAddress, Endian) : (ConnectionStringPort == null - ? new ModbusTcpProtocal(ConnectionString, SlaveAddress, MasterAddress) + ? new ModbusTcpProtocal(ConnectionString, SlaveAddress, MasterAddress, Endian) : new ModbusTcpProtocal(ConnectionStringIp, ConnectionStringPort.Value, SlaveAddress, - MasterAddress)); + MasterAddress, Endian)); break; } //Ascii协议 case ModbusType.Ascii: { Wrapper = ConnectionString == null - ? new ModbusAsciiProtocal(SlaveAddress, MasterAddress) - : new ModbusAsciiProtocal(ConnectionString, SlaveAddress, MasterAddress); + ? new ModbusAsciiProtocal(SlaveAddress, MasterAddress, Endian) + : new ModbusAsciiProtocal(ConnectionString, SlaveAddress, MasterAddress, Endian); break; } } @@ -157,7 +158,7 @@ namespace Modbus.Net.Modbus try { var inputStruct = new WriteDataModbusInputStruct(SlaveAddress, startAddress, setContents, - AddressTranslator); + AddressTranslator, Endian); var outputStruct = await Wrapper.SendReceiveAsync(Wrapper[typeof (WriteDataModbusProtocal)], inputStruct) as WriteDataModbusOutputStruct; diff --git a/Modbus.Net/Modbus.Net.Modbus/Properties/AssemblyInfo.cs b/Modbus.Net/Modbus.Net.Modbus/Properties/AssemblyInfo.cs index 8f85574..ec13ce6 100644 --- a/Modbus.Net/Modbus.Net.Modbus/Properties/AssemblyInfo.cs +++ b/Modbus.Net/Modbus.Net.Modbus/Properties/AssemblyInfo.cs @@ -32,5 +32,5 @@ using System.Runtime.InteropServices; //可以指定所有这些值,也可以使用“生成号”和“修订号”的默认值, // 方法是按如下所示使用“*”: : // [assembly: AssemblyVersion("1.0.*")] -[assembly: AssemblyVersion("1.2.2")] -[assembly: AssemblyFileVersion("1.2.2")] +[assembly: AssemblyVersion("1.2.3")] +[assembly: AssemblyFileVersion("1.2.3")] diff --git a/Modbus.Net/Modbus.Net.OPC/Modbus.Net.OPC.nuspec b/Modbus.Net/Modbus.Net.OPC/Modbus.Net.OPC.nuspec index 42a9e09..c6aa811 100644 --- a/Modbus.Net/Modbus.Net.OPC/Modbus.Net.OPC.nuspec +++ b/Modbus.Net/Modbus.Net.OPC/Modbus.Net.OPC.nuspec @@ -2,7 +2,7 @@ Modbus.Net.OPC - 1.2.2 + 1.2.3 Modbus.Net.OPC Chris L.(Luo Sheng) Hangzhou Delian IoT Science Technology Co.,Ltd. @@ -13,7 +13,7 @@ Copyright 2017 Hangzhou Delian IoT Science Technology Co.,Ltd. hardware communicate protocal OPC DA Delian - + diff --git a/Modbus.Net/Modbus.Net.OPC/OpcDaUtility.cs b/Modbus.Net/Modbus.Net.OPC/OpcDaUtility.cs index 66286cd..8376dc7 100644 --- a/Modbus.Net/Modbus.Net.OPC/OpcDaUtility.cs +++ b/Modbus.Net/Modbus.Net.OPC/OpcDaUtility.cs @@ -15,8 +15,7 @@ namespace Modbus.Net.OPC Wrapper = new OpcDaProtocal(ConnectionString); } - public override Endian GetLittleEndian => Wrapper[typeof (ReadRequestOpcProtocal)].IsLittleEndian; - public override Endian SetLittleEndian => Wrapper[typeof (WriteRequestOpcProtocal)].IsLittleEndian; + public override Endian Endian => Endian.BigEndianLsb; public override void SetConnectionType(int connectionType) { diff --git a/Modbus.Net/Modbus.Net.OPC/OpcProtocal.cs b/Modbus.Net/Modbus.Net.OPC/OpcProtocal.cs index 4b2aa53..587b1d2 100644 --- a/Modbus.Net/Modbus.Net.OPC/OpcProtocal.cs +++ b/Modbus.Net/Modbus.Net.OPC/OpcProtocal.cs @@ -7,7 +7,7 @@ namespace Modbus.Net.OPC /// public abstract class OpcProtocal : BaseProtocal { - protected OpcProtocal() : base(0, 0) + protected OpcProtocal() : base(0, 0, Endian.BigEndianLsb) { } } diff --git a/Modbus.Net/Modbus.Net.OPC/Properties/AssemblyInfo.cs b/Modbus.Net/Modbus.Net.OPC/Properties/AssemblyInfo.cs index ecdb63e..62e97ac 100644 --- a/Modbus.Net/Modbus.Net.OPC/Properties/AssemblyInfo.cs +++ b/Modbus.Net/Modbus.Net.OPC/Properties/AssemblyInfo.cs @@ -32,5 +32,5 @@ using System.Runtime.InteropServices; //可以指定所有这些值,也可以使用“生成号”和“修订号”的默认值, // 方法是按如下所示使用“*”: : // [assembly: AssemblyVersion("1.0.*")] -[assembly: AssemblyVersion("1.2.2")] -[assembly: AssemblyFileVersion("1.2.2")] +[assembly: AssemblyVersion("1.2.3")] +[assembly: AssemblyFileVersion("1.2.3")] diff --git a/Modbus.Net/Modbus.Net.Siemens/Modbus.Net.Siemens.nuspec b/Modbus.Net/Modbus.Net.Siemens/Modbus.Net.Siemens.nuspec index a9f79bc..49d8a46 100644 --- a/Modbus.Net/Modbus.Net.Siemens/Modbus.Net.Siemens.nuspec +++ b/Modbus.Net/Modbus.Net.Siemens/Modbus.Net.Siemens.nuspec @@ -2,7 +2,7 @@ Modbus.Net.Siemens - 1.2.2 + 1.2.3 Modbus.Net.Siemens Chris L.(Luo Sheng) Hangzhou Delian IoT Science Technology Co.,Ltd. @@ -13,7 +13,7 @@ Copyright 2017 Hangzhou Delian IoT Science Technology Co.,Ltd. hardware communicate protocal Siemens profinet Delian - + diff --git a/Modbus.Net/Modbus.Net.Siemens/Properties/AssemblyInfo.cs b/Modbus.Net/Modbus.Net.Siemens/Properties/AssemblyInfo.cs index 74fdd0b..7c69fed 100644 --- a/Modbus.Net/Modbus.Net.Siemens/Properties/AssemblyInfo.cs +++ b/Modbus.Net/Modbus.Net.Siemens/Properties/AssemblyInfo.cs @@ -32,5 +32,5 @@ using System.Runtime.InteropServices; //可以指定所有这些值,也可以使用“生成号”和“修订号”的默认值, // 方法是按如下所示使用“*”: : // [assembly: AssemblyVersion("1.0.*")] -[assembly: AssemblyVersion("1.2.2")] -[assembly: AssemblyFileVersion("1.2.2")] +[assembly: AssemblyVersion("1.2.3")] +[assembly: AssemblyFileVersion("1.2.3")] diff --git a/Modbus.Net/Modbus.Net.Siemens/SiemensProtocal.cs b/Modbus.Net/Modbus.Net.Siemens/SiemensProtocal.cs index f065781..df178d5 100644 --- a/Modbus.Net/Modbus.Net.Siemens/SiemensProtocal.cs +++ b/Modbus.Net/Modbus.Net.Siemens/SiemensProtocal.cs @@ -104,7 +104,7 @@ namespace Modbus.Net.Siemens public abstract class SiemensProtocal : BaseProtocal { - protected SiemensProtocal(byte slaveAddress, byte masterAddress) : base(slaveAddress, masterAddress) + protected SiemensProtocal(byte slaveAddress, byte masterAddress) : base(slaveAddress, masterAddress, Endian.BigEndianLsb) { } } diff --git a/Modbus.Net/Modbus.Net.Siemens/SiemensUtility.cs b/Modbus.Net/Modbus.Net.Siemens/SiemensUtility.cs index 588c298..fa7e63f 100644 --- a/Modbus.Net/Modbus.Net.Siemens/SiemensUtility.cs +++ b/Modbus.Net/Modbus.Net.Siemens/SiemensUtility.cs @@ -91,8 +91,7 @@ namespace Modbus.Net.Siemens AddressTranslator = new AddressTranslatorSiemens(); } - public override Endian GetLittleEndian => Wrapper[typeof (ReadRequestSiemensProtocal)].IsLittleEndian; - public override Endian SetLittleEndian => Wrapper[typeof (WriteRequestSiemensProtocal)].IsLittleEndian; + public override Endian Endian => Endian.BigEndianLsb; protected string ConnectionStringIp { diff --git a/Modbus.Net/Modbus.Net/BaseMachine.cs b/Modbus.Net/Modbus.Net/BaseMachine.cs index b67a8f4..e5203ce 100644 --- a/Modbus.Net/Modbus.Net/BaseMachine.cs +++ b/Modbus.Net/Modbus.Net/BaseMachine.cs @@ -257,17 +257,10 @@ namespace Modbus.Net { PlcValue = Convert.ToDouble( - BaseUtility.GetLittleEndian == Endian.LittleEndianLsb - ? ValueHelper.Instance.GetValue(datas, ref localMainPos, ref localSubPos, + ValueHelper.GetInstance(BaseUtility.Endian) + .GetValue(datas, ref localMainPos, ref localSubPos, address.DataType) - .ToString() - : BaseUtility.GetLittleEndian == Endian.BigEndianLsb - ? BigEndianValueHelper.Instance.GetValue(datas, ref localMainPos, - ref localSubPos, - address.DataType) - : BigEndianMsbValueHelper.Instance.GetValue(datas, ref localMainPos, - ref localSubPos, - address.DataType))*address.Zoom, + .ToString())*address.Zoom, UnitExtend = address.UnitExtend }); } @@ -378,11 +371,7 @@ namespace Modbus.Net BigEndianValueHelper.Instance.ByteLength[ communicateAddress.DataType.FullName])); - var valueHelper = BaseUtility.SetLittleEndian == Endian.LittleEndianLsb - ? ValueHelper.Instance - : BaseUtility.SetLittleEndian == Endian.BigEndianLsb - ? BigEndianValueHelper.Instance - : BigEndianMsbValueHelper.Instance; + var valueHelper = ValueHelper.GetInstance(BaseUtility.Endian); //如果设备本身能获取到数据但是没有数据 var datas = datasReturn; diff --git a/Modbus.Net/Modbus.Net/BaseProtocal.cs b/Modbus.Net/Modbus.Net/BaseProtocal.cs index 58f2b80..cf13699 100644 --- a/Modbus.Net/Modbus.Net/BaseProtocal.cs +++ b/Modbus.Net/Modbus.Net/BaseProtocal.cs @@ -13,13 +13,16 @@ namespace Modbus.Net /// /// 构造器 /// - protected BaseProtocal(byte slaveAddress, byte masterAddress) + protected BaseProtocal(byte slaveAddress, byte masterAddress, Endian endian) { + Endian = endian; Protocals = new Dictionary(); SlaveAddress = slaveAddress; MasterAddress = masterAddress; } + protected Endian Endian { get; set; } + public byte SlaveAddress { get; set; } public byte MasterAddress { get; set; } @@ -44,8 +47,9 @@ namespace Modbus.Net } //自动寻找存在的协议并将其加载 var protocalUnit = - Assembly.Load(type.Assembly.FullName).CreateInstance(protocalName) as ProtocalUnit; + Assembly.Load(type.Assembly.FullName).CreateInstance(protocalName) as ProtocalUnit; if (protocalUnit == null) throw new InvalidCastException("没有相应的协议内容"); + protocalUnit.Endian = Endian; Register(protocalUnit); return Protocals[protocalName]; } diff --git a/Modbus.Net/Modbus.Net/BaseUtility.cs b/Modbus.Net/Modbus.Net/BaseUtility.cs index 77c7fa2..ee2b9f9 100644 --- a/Modbus.Net/Modbus.Net/BaseUtility.cs +++ b/Modbus.Net/Modbus.Net/BaseUtility.cs @@ -40,14 +40,9 @@ namespace Modbus.Net public byte MasterAddress { get; set; } /// - /// 获取协议是否遵循小端格式 + /// 协议是否遵循小端格式 /// - public abstract Endian GetLittleEndian { get; } - - /// - /// 设置协议是否遵循小端格式 - /// - public abstract Endian SetLittleEndian { get; } + public abstract Endian Endian { get; } /// /// 设备是否已经连接 @@ -117,22 +112,8 @@ namespace Modbus.Net var getReturnValue = await GetDatasAsync(startAddress, (int) Math.Ceiling(bCount*getTypeAndCount.Value)); var getBytes = getReturnValue; - switch (GetLittleEndian) - { - case Endian.LittleEndianLsb: - { - return ValueHelper.Instance.ByteArrayToObjectArray(getBytes, getTypeAndCount); - } - case Endian.BigEndianLsb: - { - return BigEndianValueHelper.Instance.ByteArrayToObjectArray(getBytes, getTypeAndCount); - } - case Endian.BigEndianMsb: - { - return BigEndianMsbValueHelper.Instance.ByteArrayToObjectArray(getBytes, getTypeAndCount); - } - } - return null; + return ValueHelper.GetInstance(Endian).ByteArrayToObjectArray(getBytes, getTypeAndCount); + } catch (Exception) { @@ -167,7 +148,7 @@ namespace Modbus.Net { var getBytes = await GetDatasAsync(startAddress, new KeyValuePair(typeof (T), getByteCount)); - return BigEndianValueHelper.Instance.ObjectArrayToDestinationArray(getBytes); + return ValueHelper.GetInstance(Endian).ObjectArrayToDestinationArray(getBytes); } catch (Exception) { @@ -188,7 +169,7 @@ namespace Modbus.Net AsyncHelper.RunSync(() => GetDatasAsync(startAddress, getTypeAndCountList)); } - /// + /// GetEndian /// 获取数据 /// /// 开始地址 @@ -207,22 +188,7 @@ namespace Modbus.Net select (int) Math.Ceiling(bCount*getTypeAndCount.Value)).Sum(); var getReturnValue = await GetDatasAsync(startAddress, bAllCount); var getBytes = getReturnValue; - switch (GetLittleEndian) - { - case Endian.LittleEndianLsb: - { - return ValueHelper.Instance.ByteArrayToObjectArray(getBytes, translateTypeAndCount); - } - case Endian.BigEndianLsb: - { - return BigEndianValueHelper.Instance.ByteArrayToObjectArray(getBytes, translateTypeAndCount); - } - case Endian.BigEndianMsb: - { - return BigEndianMsbValueHelper.Instance.ByteArrayToObjectArray(getBytes, translateTypeAndCount); - } - } - return null; + return ValueHelper.GetInstance(Endian).ByteArrayToObjectArray(getBytes, translateTypeAndCount); } catch (Exception) { diff --git a/Modbus.Net/Modbus.Net/ModBus.Net.nuspec b/Modbus.Net/Modbus.Net/ModBus.Net.nuspec index 6d0b696..b4c9a19 100644 --- a/Modbus.Net/Modbus.Net/ModBus.Net.nuspec +++ b/Modbus.Net/Modbus.Net/ModBus.Net.nuspec @@ -2,7 +2,7 @@ Modbus.Net - 1.2.2.1 + 1.2.3 Modbus.Net Chris L.(Luo Sheng) Hangzhou Delian IoT Science Technology Co.,Ltd. diff --git a/Modbus.Net/Modbus.Net/Properties/AssemblyInfo.cs b/Modbus.Net/Modbus.Net/Properties/AssemblyInfo.cs index 260cafc..f30fc33 100644 --- a/Modbus.Net/Modbus.Net/Properties/AssemblyInfo.cs +++ b/Modbus.Net/Modbus.Net/Properties/AssemblyInfo.cs @@ -35,5 +35,5 @@ using System.Runtime.InteropServices; // 方法是按如下所示使用“*”: // [assembly: AssemblyVersion("1.0.*")] -[assembly: AssemblyVersion("1.2.2")] -[assembly: AssemblyFileVersion("1.2.2")] \ No newline at end of file +[assembly: AssemblyVersion("1.2.3")] +[assembly: AssemblyFileVersion("1.2.3")] \ No newline at end of file diff --git a/Modbus.Net/Modbus.Net/ProtocalUnit.cs b/Modbus.Net/Modbus.Net/ProtocalUnit.cs index 9ebf06f..3b99db0 100644 --- a/Modbus.Net/Modbus.Net/ProtocalUnit.cs +++ b/Modbus.Net/Modbus.Net/ProtocalUnit.cs @@ -10,7 +10,7 @@ namespace Modbus.Net /// /// 是否为小端格式 /// - public Endian IsLittleEndian { get; protected set; } = Endian.BigEndianLsb; + public Endian Endian { get; set; } = Endian.BigEndianLsb; /// /// 从输入结构格式化 @@ -26,7 +26,7 @@ namespace Modbus.Net /// 格式化后的字节流 public virtual byte[] Format(params object[] message) { - return TranslateContent(IsLittleEndian, message); + return TranslateContent(Endian, message); } /// diff --git a/Modbus.Net/Modbus.Net/ValueHelper.cs b/Modbus.Net/Modbus.Net/ValueHelper.cs index ec45b50..e534bfb 100644 --- a/Modbus.Net/Modbus.Net/ValueHelper.cs +++ b/Modbus.Net/Modbus.Net/ValueHelper.cs @@ -34,6 +34,8 @@ namespace Modbus.Net /// public static bool LittleEndian => true; + public static bool LittleEndianBit => true; + /// /// 将一个byte数字转换为一个byte元素的数组。 /// @@ -508,7 +510,7 @@ namespace Modbus.Net boolToByteTemp = 0; } lastIsBool = true; - if (LittleEndian) + if (!LittleEndianBit) { boolToByteTemp = (byte) (boolToByteTemp*2 + ((bool) content ? 1 : 0)); } @@ -874,6 +876,29 @@ namespace Modbus.Net /// public static ValueHelper Instance => _instance ?? (_instance = new ValueHelper()); + public static ValueHelper GetInstance(Endian endian) + { + switch (endian) + { + case Endian.LittleEndianLsb: + { + return ValueHelper.Instance; + } + case Endian.BigEndianLsb: + { + return BigEndianValueHelper.Instance; + } + case Endian.BigEndianMsb: + { + return BigEndianMsbValueHelper.Instance; + } + default: + { + return ValueHelper.Instance; + } + } + } + #endregion } @@ -1023,6 +1048,8 @@ namespace Modbus.Net protected new bool LittleEndian => false; + protected new bool LittleEndianBit => false; + public new static BigEndianValueHelper Instance => _bigEndianInstance ?? (_bigEndianInstance = new BigEndianMsbValueHelper());