2017-02-26 update 1 Msb Version Continue Fix and open Modbus Endian change.

This commit is contained in:
parallelbgls
2017-02-26 21:01:18 +08:00
parent 962f7a80d8
commit 18e4f6ce80
22 changed files with 116 additions and 131 deletions

View File

@@ -2,7 +2,7 @@
<package xmlns="http://schemas.microsoft.com/packaging/2011/08/nuspec.xsd">
<metadata>
<id>Modbus.Net.Modbus</id>
<version>1.2.2</version>
<version>1.2.3</version>
<title>Modbus.Net.Modbus</title>
<authors>Chris L.(Luo Sheng)</authors>
<owners>Hangzhou Delian IoT Science Technology Co.,Ltd.</owners>
@@ -13,7 +13,7 @@
<copyright>Copyright 2017 Hangzhou Delian IoT Science Technology Co.,Ltd.</copyright>
<tags>hardware communicate protocal modbus Delian</tags>
<dependencies>
<dependency id="Modbus.Net" version="1.2.2" />
<dependency id="Modbus.Net" version="1.2.3" />
</dependencies>
</metadata>
<files>

View File

@@ -5,13 +5,13 @@
/// </summary>
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);
}

View File

@@ -47,7 +47,7 @@ namespace Modbus.Net.Modbus
/// </summary>
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);
}
}

View File

@@ -5,13 +5,13 @@
/// </summary>
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);
}

View File

@@ -5,18 +5,18 @@
/// </summary>
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);
}

View File

@@ -33,24 +33,25 @@ namespace Modbus.Net.Modbus
/// </summary>
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;

View File

@@ -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")]