2017-02-26 update 1 Msb Version Continue Fix and open Modbus Endian change.
This commit is contained in:
@@ -2,7 +2,7 @@
|
|||||||
<package xmlns="http://schemas.microsoft.com/packaging/2011/08/nuspec.xsd">
|
<package xmlns="http://schemas.microsoft.com/packaging/2011/08/nuspec.xsd">
|
||||||
<metadata>
|
<metadata>
|
||||||
<id>Modbus.Net.Modbus</id>
|
<id>Modbus.Net.Modbus</id>
|
||||||
<version>1.2.2</version>
|
<version>1.2.3</version>
|
||||||
<title>Modbus.Net.Modbus</title>
|
<title>Modbus.Net.Modbus</title>
|
||||||
<authors>Chris L.(Luo Sheng)</authors>
|
<authors>Chris L.(Luo Sheng)</authors>
|
||||||
<owners>Hangzhou Delian IoT Science Technology Co.,Ltd.</owners>
|
<owners>Hangzhou Delian IoT Science Technology Co.,Ltd.</owners>
|
||||||
@@ -13,7 +13,7 @@
|
|||||||
<copyright>Copyright 2017 Hangzhou Delian IoT Science Technology Co.,Ltd.</copyright>
|
<copyright>Copyright 2017 Hangzhou Delian IoT Science Technology Co.,Ltd.</copyright>
|
||||||
<tags>hardware communicate protocal modbus Delian</tags>
|
<tags>hardware communicate protocal modbus Delian</tags>
|
||||||
<dependencies>
|
<dependencies>
|
||||||
<dependency id="Modbus.Net" version="1.2.2" />
|
<dependency id="Modbus.Net" version="1.2.3" />
|
||||||
</dependencies>
|
</dependencies>
|
||||||
</metadata>
|
</metadata>
|
||||||
<files>
|
<files>
|
||||||
|
|||||||
@@ -5,13 +5,13 @@
|
|||||||
/// </summary>
|
/// </summary>
|
||||||
public class ModbusAsciiProtocal : ModbusProtocal
|
public class ModbusAsciiProtocal : ModbusProtocal
|
||||||
{
|
{
|
||||||
public ModbusAsciiProtocal(byte slaveAddress, byte masterAddress)
|
public ModbusAsciiProtocal(byte slaveAddress, byte masterAddress, Endian endian)
|
||||||
: this(ConfigurationManager.COM, slaveAddress, masterAddress)
|
: this(ConfigurationManager.COM, slaveAddress, masterAddress, endian)
|
||||||
{
|
{
|
||||||
}
|
}
|
||||||
|
|
||||||
public ModbusAsciiProtocal(string com, byte slaveAddress, byte masterAddress)
|
public ModbusAsciiProtocal(string com, byte slaveAddress, byte masterAddress, Endian endian)
|
||||||
: base(slaveAddress, masterAddress)
|
: base(slaveAddress, masterAddress, endian)
|
||||||
{
|
{
|
||||||
ProtocalLinker = new ModbusAsciiProtocalLinker(com);
|
ProtocalLinker = new ModbusAsciiProtocalLinker(com);
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -47,7 +47,7 @@ namespace Modbus.Net.Modbus
|
|||||||
/// </summary>
|
/// </summary>
|
||||||
public abstract class ModbusProtocal : BaseProtocal
|
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)
|
public override IOutputStruct Unformat(byte[] messageBytes, ref int pos)
|
||||||
{
|
{
|
||||||
var slaveAddress = BigEndianValueHelper.Instance.GetByte(messageBytes, ref pos);
|
var slaveAddress = ValueHelper.GetInstance(Endian).GetByte(messageBytes, ref pos);
|
||||||
var functionCode = BigEndianValueHelper.Instance.GetByte(messageBytes, ref pos);
|
var functionCode = ValueHelper.GetInstance(Endian).GetByte(messageBytes, ref pos);
|
||||||
var dataCount = BigEndianValueHelper.Instance.GetByte(messageBytes, ref pos);
|
var dataCount = ValueHelper.GetInstance(Endian).GetByte(messageBytes, ref pos);
|
||||||
var dataValue = new byte[dataCount];
|
var dataValue = new byte[dataCount];
|
||||||
Array.Copy(messageBytes, 3, dataValue, 0, dataCount);
|
Array.Copy(messageBytes, 3, dataValue, 0, dataCount);
|
||||||
return new ReadDataModbusOutputStruct(slaveAddress, functionCode, dataCount, dataValue);
|
return new ReadDataModbusOutputStruct(slaveAddress, functionCode, dataCount, dataValue);
|
||||||
@@ -132,13 +132,13 @@ namespace Modbus.Net.Modbus
|
|||||||
public class WriteDataModbusInputStruct : IInputStruct
|
public class WriteDataModbusInputStruct : IInputStruct
|
||||||
{
|
{
|
||||||
public WriteDataModbusInputStruct(byte slaveAddress, string startAddress, object[] writeValue,
|
public WriteDataModbusInputStruct(byte slaveAddress, string startAddress, object[] writeValue,
|
||||||
AddressTranslator addressTranslator)
|
AddressTranslator addressTranslator, Endian endian)
|
||||||
{
|
{
|
||||||
SlaveAddress = slaveAddress;
|
SlaveAddress = slaveAddress;
|
||||||
var translateAddress = addressTranslator.AddressTranslate(startAddress, false);
|
var translateAddress = addressTranslator.AddressTranslate(startAddress, false);
|
||||||
FunctionCode = (byte) translateAddress.Area;
|
FunctionCode = (byte) translateAddress.Area;
|
||||||
StartAddress = (ushort) translateAddress.Address;
|
StartAddress = (ushort) translateAddress.Address;
|
||||||
var writeByteValue = BigEndianValueHelper.Instance.ObjectArrayToByteArray(writeValue);
|
var writeByteValue = ValueHelper.GetInstance(endian).ObjectArrayToByteArray(writeValue);
|
||||||
WriteCount =
|
WriteCount =
|
||||||
(ushort) (writeByteValue.Length/addressTranslator.GetAreaByteLength(translateAddress.AreaString));
|
(ushort) (writeByteValue.Length/addressTranslator.GetAreaByteLength(translateAddress.AreaString));
|
||||||
WriteByteCount = (byte) writeByteValue.Length;
|
WriteByteCount = (byte) writeByteValue.Length;
|
||||||
@@ -194,10 +194,10 @@ namespace Modbus.Net.Modbus
|
|||||||
|
|
||||||
public override IOutputStruct Unformat(byte[] messageBytes, ref int flag)
|
public override IOutputStruct Unformat(byte[] messageBytes, ref int flag)
|
||||||
{
|
{
|
||||||
var slaveAddress = BigEndianValueHelper.Instance.GetByte(messageBytes, ref flag);
|
var slaveAddress = ValueHelper.GetInstance(Endian).GetByte(messageBytes, ref flag);
|
||||||
var functionCode = BigEndianValueHelper.Instance.GetByte(messageBytes, ref flag);
|
var functionCode = ValueHelper.GetInstance(Endian).GetByte(messageBytes, ref flag);
|
||||||
var startAddress = BigEndianValueHelper.Instance.GetUShort(messageBytes, ref flag);
|
var startAddress = ValueHelper.GetInstance(Endian).GetUShort(messageBytes, ref flag);
|
||||||
var writeCount = BigEndianValueHelper.Instance.GetUShort(messageBytes, ref flag);
|
var writeCount = ValueHelper.GetInstance(Endian).GetUShort(messageBytes, ref flag);
|
||||||
return new WriteDataModbusOutputStruct(slaveAddress, functionCode, startAddress,
|
return new WriteDataModbusOutputStruct(slaveAddress, functionCode, startAddress,
|
||||||
writeCount);
|
writeCount);
|
||||||
}
|
}
|
||||||
@@ -261,16 +261,16 @@ namespace Modbus.Net.Modbus
|
|||||||
|
|
||||||
public override IOutputStruct Unformat(byte[] messageBytes, ref int flag)
|
public override IOutputStruct Unformat(byte[] messageBytes, ref int flag)
|
||||||
{
|
{
|
||||||
var slaveAddress = BigEndianValueHelper.Instance.GetByte(messageBytes, ref flag);
|
var slaveAddress = ValueHelper.GetInstance(Endian).GetByte(messageBytes, ref flag);
|
||||||
var functionCode = BigEndianValueHelper.Instance.GetByte(messageBytes, ref flag);
|
var functionCode = ValueHelper.GetInstance(Endian).GetByte(messageBytes, ref flag);
|
||||||
var writeByteCount = BigEndianValueHelper.Instance.GetByte(messageBytes, ref flag);
|
var writeByteCount = ValueHelper.GetInstance(Endian).GetByte(messageBytes, ref flag);
|
||||||
var year = BigEndianValueHelper.Instance.GetUShort(messageBytes, ref flag);
|
var year = ValueHelper.GetInstance(Endian).GetUShort(messageBytes, ref flag);
|
||||||
var day = BigEndianValueHelper.Instance.GetByte(messageBytes, ref flag);
|
var day = ValueHelper.GetInstance(Endian).GetByte(messageBytes, ref flag);
|
||||||
var month = BigEndianValueHelper.Instance.GetByte(messageBytes, ref flag);
|
var month = ValueHelper.GetInstance(Endian).GetByte(messageBytes, ref flag);
|
||||||
var hour = BigEndianValueHelper.Instance.GetUShort(messageBytes, ref flag);
|
var hour = ValueHelper.GetInstance(Endian).GetUShort(messageBytes, ref flag);
|
||||||
var second = BigEndianValueHelper.Instance.GetByte(messageBytes, ref flag);
|
var second = ValueHelper.GetInstance(Endian).GetByte(messageBytes, ref flag);
|
||||||
var minute = BigEndianValueHelper.Instance.GetByte(messageBytes, ref flag);
|
var minute = ValueHelper.GetInstance(Endian).GetByte(messageBytes, ref flag);
|
||||||
var millisecond = BigEndianValueHelper.Instance.GetUShort(messageBytes, ref flag);
|
var millisecond = ValueHelper.GetInstance(Endian).GetUShort(messageBytes, ref flag);
|
||||||
return new GetSystemTimeModbusOutputStruct(slaveAddress, functionCode, writeByteCount, year, day,
|
return new GetSystemTimeModbusOutputStruct(slaveAddress, functionCode, writeByteCount, year, day,
|
||||||
month, hour, second, minute, millisecond);
|
month, hour, second, minute, millisecond);
|
||||||
}
|
}
|
||||||
@@ -359,10 +359,10 @@ namespace Modbus.Net.Modbus
|
|||||||
|
|
||||||
public override IOutputStruct Unformat(byte[] messageBytes, ref int flag)
|
public override IOutputStruct Unformat(byte[] messageBytes, ref int flag)
|
||||||
{
|
{
|
||||||
var slaveAddress = BigEndianValueHelper.Instance.GetByte(messageBytes, ref flag);
|
var slaveAddress = ValueHelper.GetInstance(Endian).GetByte(messageBytes, ref flag);
|
||||||
var functionCode = BigEndianValueHelper.Instance.GetByte(messageBytes, ref flag);
|
var functionCode = ValueHelper.GetInstance(Endian).GetByte(messageBytes, ref flag);
|
||||||
var startAddress = BigEndianValueHelper.Instance.GetUShort(messageBytes, ref flag);
|
var startAddress = ValueHelper.GetInstance(Endian).GetUShort(messageBytes, ref flag);
|
||||||
var writeCount = BigEndianValueHelper.Instance.GetUShort(messageBytes, ref flag);
|
var writeCount = ValueHelper.GetInstance(Endian).GetUShort(messageBytes, ref flag);
|
||||||
return new SetSystemTimeModbusOutputStruct(slaveAddress, functionCode, startAddress, writeCount);
|
return new SetSystemTimeModbusOutputStruct(slaveAddress, functionCode, startAddress, writeCount);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -5,13 +5,13 @@
|
|||||||
/// </summary>
|
/// </summary>
|
||||||
public class ModbusRtuProtocal : ModbusProtocal
|
public class ModbusRtuProtocal : ModbusProtocal
|
||||||
{
|
{
|
||||||
public ModbusRtuProtocal(byte slaveAddress, byte masterAddress)
|
public ModbusRtuProtocal(byte slaveAddress, byte masterAddress, Endian endian)
|
||||||
: this(ConfigurationManager.COM, slaveAddress, masterAddress)
|
: this(ConfigurationManager.COM, slaveAddress, masterAddress, endian)
|
||||||
{
|
{
|
||||||
}
|
}
|
||||||
|
|
||||||
public ModbusRtuProtocal(string com, byte slaveAddress, byte masterAddress)
|
public ModbusRtuProtocal(string com, byte slaveAddress, byte masterAddress, Endian endian)
|
||||||
: base(slaveAddress, masterAddress)
|
: base(slaveAddress, masterAddress, endian)
|
||||||
{
|
{
|
||||||
ProtocalLinker = new ModbusRtuProtocalLinker(com);
|
ProtocalLinker = new ModbusRtuProtocalLinker(com);
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -5,18 +5,18 @@
|
|||||||
/// </summary>
|
/// </summary>
|
||||||
public class ModbusTcpProtocal : ModbusProtocal
|
public class ModbusTcpProtocal : ModbusProtocal
|
||||||
{
|
{
|
||||||
public ModbusTcpProtocal(byte slaveAddress, byte masterAddress)
|
public ModbusTcpProtocal(byte slaveAddress, byte masterAddress, Endian endian)
|
||||||
: this(ConfigurationManager.IP, slaveAddress, masterAddress)
|
: 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);
|
ProtocalLinker = new ModbusTcpProtocalLinker(ip);
|
||||||
}
|
}
|
||||||
|
|
||||||
public ModbusTcpProtocal(string ip, int port, byte slaveAddress, byte masterAddress)
|
public ModbusTcpProtocal(string ip, int port, byte slaveAddress, byte masterAddress, Endian endian)
|
||||||
: base(slaveAddress, masterAddress)
|
: base(slaveAddress, masterAddress, endian)
|
||||||
{
|
{
|
||||||
ProtocalLinker = new ModbusTcpProtocalLinker(ip, port);
|
ProtocalLinker = new ModbusTcpProtocalLinker(ip, port);
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -33,24 +33,25 @@ namespace Modbus.Net.Modbus
|
|||||||
/// </summary>
|
/// </summary>
|
||||||
private ModbusType _modbusType;
|
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)
|
: base(slaveAddress, masterAddress)
|
||||||
{
|
{
|
||||||
|
Endian = endian;
|
||||||
ConnectionString = null;
|
ConnectionString = null;
|
||||||
ModbusType = (ModbusType) connectionType;
|
ModbusType = (ModbusType) connectionType;
|
||||||
AddressTranslator = new AddressTranslatorModbus();
|
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)
|
: base(slaveAddress, masterAddress)
|
||||||
{
|
{
|
||||||
|
Endian = endian;
|
||||||
ConnectionString = connectionString;
|
ConnectionString = connectionString;
|
||||||
ModbusType = connectionType;
|
ModbusType = connectionType;
|
||||||
AddressTranslator = new AddressTranslatorModbus();
|
AddressTranslator = new AddressTranslatorModbus();
|
||||||
}
|
}
|
||||||
|
|
||||||
public override Endian GetLittleEndian => Wrapper[typeof (ReadDataModbusProtocal)].IsLittleEndian;
|
public override Endian Endian { get; }
|
||||||
public override Endian SetLittleEndian => Wrapper[typeof (WriteDataModbusProtocal)].IsLittleEndian;
|
|
||||||
|
|
||||||
protected string ConnectionStringIp
|
protected string ConnectionStringIp
|
||||||
{
|
{
|
||||||
@@ -91,27 +92,27 @@ namespace Modbus.Net.Modbus
|
|||||||
case ModbusType.Rtu:
|
case ModbusType.Rtu:
|
||||||
{
|
{
|
||||||
Wrapper = ConnectionString == null
|
Wrapper = ConnectionString == null
|
||||||
? new ModbusRtuProtocal(SlaveAddress, MasterAddress)
|
? new ModbusRtuProtocal(SlaveAddress, MasterAddress, Endian)
|
||||||
: new ModbusRtuProtocal(ConnectionString, SlaveAddress, MasterAddress);
|
: new ModbusRtuProtocal(ConnectionString, SlaveAddress, MasterAddress, Endian);
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
//Tcp协议
|
//Tcp协议
|
||||||
case ModbusType.Tcp:
|
case ModbusType.Tcp:
|
||||||
{
|
{
|
||||||
Wrapper = ConnectionString == null
|
Wrapper = ConnectionString == null
|
||||||
? new ModbusTcpProtocal(SlaveAddress, MasterAddress)
|
? new ModbusTcpProtocal(SlaveAddress, MasterAddress, Endian)
|
||||||
: (ConnectionStringPort == null
|
: (ConnectionStringPort == null
|
||||||
? new ModbusTcpProtocal(ConnectionString, SlaveAddress, MasterAddress)
|
? new ModbusTcpProtocal(ConnectionString, SlaveAddress, MasterAddress, Endian)
|
||||||
: new ModbusTcpProtocal(ConnectionStringIp, ConnectionStringPort.Value, SlaveAddress,
|
: new ModbusTcpProtocal(ConnectionStringIp, ConnectionStringPort.Value, SlaveAddress,
|
||||||
MasterAddress));
|
MasterAddress, Endian));
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
//Ascii协议
|
//Ascii协议
|
||||||
case ModbusType.Ascii:
|
case ModbusType.Ascii:
|
||||||
{
|
{
|
||||||
Wrapper = ConnectionString == null
|
Wrapper = ConnectionString == null
|
||||||
? new ModbusAsciiProtocal(SlaveAddress, MasterAddress)
|
? new ModbusAsciiProtocal(SlaveAddress, MasterAddress, Endian)
|
||||||
: new ModbusAsciiProtocal(ConnectionString, SlaveAddress, MasterAddress);
|
: new ModbusAsciiProtocal(ConnectionString, SlaveAddress, MasterAddress, Endian);
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -157,7 +158,7 @@ namespace Modbus.Net.Modbus
|
|||||||
try
|
try
|
||||||
{
|
{
|
||||||
var inputStruct = new WriteDataModbusInputStruct(SlaveAddress, startAddress, setContents,
|
var inputStruct = new WriteDataModbusInputStruct(SlaveAddress, startAddress, setContents,
|
||||||
AddressTranslator);
|
AddressTranslator, Endian);
|
||||||
var outputStruct = await
|
var outputStruct = await
|
||||||
Wrapper.SendReceiveAsync(Wrapper[typeof (WriteDataModbusProtocal)], inputStruct) as
|
Wrapper.SendReceiveAsync(Wrapper[typeof (WriteDataModbusProtocal)], inputStruct) as
|
||||||
WriteDataModbusOutputStruct;
|
WriteDataModbusOutputStruct;
|
||||||
|
|||||||
@@ -32,5 +32,5 @@ using System.Runtime.InteropServices;
|
|||||||
//可以指定所有这些值,也可以使用“生成号”和“修订号”的默认值,
|
//可以指定所有这些值,也可以使用“生成号”和“修订号”的默认值,
|
||||||
// 方法是按如下所示使用“*”: :
|
// 方法是按如下所示使用“*”: :
|
||||||
// [assembly: AssemblyVersion("1.0.*")]
|
// [assembly: AssemblyVersion("1.0.*")]
|
||||||
[assembly: AssemblyVersion("1.2.2")]
|
[assembly: AssemblyVersion("1.2.3")]
|
||||||
[assembly: AssemblyFileVersion("1.2.2")]
|
[assembly: AssemblyFileVersion("1.2.3")]
|
||||||
|
|||||||
@@ -2,7 +2,7 @@
|
|||||||
<package xmlns="http://schemas.microsoft.com/packaging/2011/08/nuspec.xsd">
|
<package xmlns="http://schemas.microsoft.com/packaging/2011/08/nuspec.xsd">
|
||||||
<metadata>
|
<metadata>
|
||||||
<id>Modbus.Net.OPC</id>
|
<id>Modbus.Net.OPC</id>
|
||||||
<version>1.2.2</version>
|
<version>1.2.3</version>
|
||||||
<title>Modbus.Net.OPC</title>
|
<title>Modbus.Net.OPC</title>
|
||||||
<authors>Chris L.(Luo Sheng)</authors>
|
<authors>Chris L.(Luo Sheng)</authors>
|
||||||
<owners>Hangzhou Delian IoT Science Technology Co.,Ltd.</owners>
|
<owners>Hangzhou Delian IoT Science Technology Co.,Ltd.</owners>
|
||||||
@@ -13,7 +13,7 @@
|
|||||||
<copyright>Copyright 2017 Hangzhou Delian IoT Science Technology Co.,Ltd.</copyright>
|
<copyright>Copyright 2017 Hangzhou Delian IoT Science Technology Co.,Ltd.</copyright>
|
||||||
<tags>hardware communicate protocal OPC DA Delian</tags>
|
<tags>hardware communicate protocal OPC DA Delian</tags>
|
||||||
<dependencies>
|
<dependencies>
|
||||||
<dependency id="Modbus.Net" version="1.2.2" />
|
<dependency id="Modbus.Net" version="1.2.3" />
|
||||||
<dependency id="H.Opc" version="0.7.0" />
|
<dependency id="H.Opc" version="0.7.0" />
|
||||||
</dependencies>
|
</dependencies>
|
||||||
</metadata>
|
</metadata>
|
||||||
|
|||||||
@@ -15,8 +15,7 @@ namespace Modbus.Net.OPC
|
|||||||
Wrapper = new OpcDaProtocal(ConnectionString);
|
Wrapper = new OpcDaProtocal(ConnectionString);
|
||||||
}
|
}
|
||||||
|
|
||||||
public override Endian GetLittleEndian => Wrapper[typeof (ReadRequestOpcProtocal)].IsLittleEndian;
|
public override Endian Endian => Endian.BigEndianLsb;
|
||||||
public override Endian SetLittleEndian => Wrapper[typeof (WriteRequestOpcProtocal)].IsLittleEndian;
|
|
||||||
|
|
||||||
public override void SetConnectionType(int connectionType)
|
public override void SetConnectionType(int connectionType)
|
||||||
{
|
{
|
||||||
|
|||||||
@@ -7,7 +7,7 @@ namespace Modbus.Net.OPC
|
|||||||
/// </summary>
|
/// </summary>
|
||||||
public abstract class OpcProtocal : BaseProtocal
|
public abstract class OpcProtocal : BaseProtocal
|
||||||
{
|
{
|
||||||
protected OpcProtocal() : base(0, 0)
|
protected OpcProtocal() : base(0, 0, Endian.BigEndianLsb)
|
||||||
{
|
{
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -32,5 +32,5 @@ using System.Runtime.InteropServices;
|
|||||||
//可以指定所有这些值,也可以使用“生成号”和“修订号”的默认值,
|
//可以指定所有这些值,也可以使用“生成号”和“修订号”的默认值,
|
||||||
// 方法是按如下所示使用“*”: :
|
// 方法是按如下所示使用“*”: :
|
||||||
// [assembly: AssemblyVersion("1.0.*")]
|
// [assembly: AssemblyVersion("1.0.*")]
|
||||||
[assembly: AssemblyVersion("1.2.2")]
|
[assembly: AssemblyVersion("1.2.3")]
|
||||||
[assembly: AssemblyFileVersion("1.2.2")]
|
[assembly: AssemblyFileVersion("1.2.3")]
|
||||||
|
|||||||
@@ -2,7 +2,7 @@
|
|||||||
<package xmlns="http://schemas.microsoft.com/packaging/2011/08/nuspec.xsd">
|
<package xmlns="http://schemas.microsoft.com/packaging/2011/08/nuspec.xsd">
|
||||||
<metadata>
|
<metadata>
|
||||||
<id>Modbus.Net.Siemens</id>
|
<id>Modbus.Net.Siemens</id>
|
||||||
<version>1.2.2</version>
|
<version>1.2.3</version>
|
||||||
<title>Modbus.Net.Siemens</title>
|
<title>Modbus.Net.Siemens</title>
|
||||||
<authors>Chris L.(Luo Sheng)</authors>
|
<authors>Chris L.(Luo Sheng)</authors>
|
||||||
<owners>Hangzhou Delian IoT Science Technology Co.,Ltd.</owners>
|
<owners>Hangzhou Delian IoT Science Technology Co.,Ltd.</owners>
|
||||||
@@ -13,7 +13,7 @@
|
|||||||
<copyright>Copyright 2017 Hangzhou Delian IoT Science Technology Co.,Ltd.</copyright>
|
<copyright>Copyright 2017 Hangzhou Delian IoT Science Technology Co.,Ltd.</copyright>
|
||||||
<tags>hardware communicate protocal Siemens profinet Delian</tags>
|
<tags>hardware communicate protocal Siemens profinet Delian</tags>
|
||||||
<dependencies>
|
<dependencies>
|
||||||
<dependency id="Modbus.Net" version="1.2.2" />
|
<dependency id="Modbus.Net" version="1.2.3" />
|
||||||
</dependencies>
|
</dependencies>
|
||||||
</metadata>
|
</metadata>
|
||||||
<files>
|
<files>
|
||||||
|
|||||||
@@ -32,5 +32,5 @@ using System.Runtime.InteropServices;
|
|||||||
//可以指定所有这些值,也可以使用“生成号”和“修订号”的默认值,
|
//可以指定所有这些值,也可以使用“生成号”和“修订号”的默认值,
|
||||||
// 方法是按如下所示使用“*”: :
|
// 方法是按如下所示使用“*”: :
|
||||||
// [assembly: AssemblyVersion("1.0.*")]
|
// [assembly: AssemblyVersion("1.0.*")]
|
||||||
[assembly: AssemblyVersion("1.2.2")]
|
[assembly: AssemblyVersion("1.2.3")]
|
||||||
[assembly: AssemblyFileVersion("1.2.2")]
|
[assembly: AssemblyFileVersion("1.2.3")]
|
||||||
|
|||||||
@@ -104,7 +104,7 @@ namespace Modbus.Net.Siemens
|
|||||||
|
|
||||||
public abstract class SiemensProtocal : BaseProtocal
|
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)
|
||||||
{
|
{
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -91,8 +91,7 @@ namespace Modbus.Net.Siemens
|
|||||||
AddressTranslator = new AddressTranslatorSiemens();
|
AddressTranslator = new AddressTranslatorSiemens();
|
||||||
}
|
}
|
||||||
|
|
||||||
public override Endian GetLittleEndian => Wrapper[typeof (ReadRequestSiemensProtocal)].IsLittleEndian;
|
public override Endian Endian => Endian.BigEndianLsb;
|
||||||
public override Endian SetLittleEndian => Wrapper[typeof (WriteRequestSiemensProtocal)].IsLittleEndian;
|
|
||||||
|
|
||||||
protected string ConnectionStringIp
|
protected string ConnectionStringIp
|
||||||
{
|
{
|
||||||
|
|||||||
@@ -257,17 +257,10 @@ namespace Modbus.Net
|
|||||||
{
|
{
|
||||||
PlcValue =
|
PlcValue =
|
||||||
Convert.ToDouble(
|
Convert.ToDouble(
|
||||||
BaseUtility.GetLittleEndian == Endian.LittleEndianLsb
|
ValueHelper.GetInstance(BaseUtility.Endian)
|
||||||
? ValueHelper.Instance.GetValue(datas, ref localMainPos, ref localSubPos,
|
.GetValue(datas, ref localMainPos, ref localSubPos,
|
||||||
address.DataType)
|
address.DataType)
|
||||||
.ToString()
|
.ToString())*address.Zoom,
|
||||||
: 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,
|
|
||||||
UnitExtend = address.UnitExtend
|
UnitExtend = address.UnitExtend
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
@@ -378,11 +371,7 @@ namespace Modbus.Net
|
|||||||
BigEndianValueHelper.Instance.ByteLength[
|
BigEndianValueHelper.Instance.ByteLength[
|
||||||
communicateAddress.DataType.FullName]));
|
communicateAddress.DataType.FullName]));
|
||||||
|
|
||||||
var valueHelper = BaseUtility.SetLittleEndian == Endian.LittleEndianLsb
|
var valueHelper = ValueHelper.GetInstance(BaseUtility.Endian);
|
||||||
? ValueHelper.Instance
|
|
||||||
: BaseUtility.SetLittleEndian == Endian.BigEndianLsb
|
|
||||||
? BigEndianValueHelper.Instance
|
|
||||||
: BigEndianMsbValueHelper.Instance;
|
|
||||||
//如果设备本身能获取到数据但是没有数据
|
//如果设备本身能获取到数据但是没有数据
|
||||||
var datas = datasReturn;
|
var datas = datasReturn;
|
||||||
|
|
||||||
|
|||||||
@@ -13,13 +13,16 @@ namespace Modbus.Net
|
|||||||
/// <summary>
|
/// <summary>
|
||||||
/// 构造器
|
/// 构造器
|
||||||
/// </summary>
|
/// </summary>
|
||||||
protected BaseProtocal(byte slaveAddress, byte masterAddress)
|
protected BaseProtocal(byte slaveAddress, byte masterAddress, Endian endian)
|
||||||
{
|
{
|
||||||
|
Endian = endian;
|
||||||
Protocals = new Dictionary<string, ProtocalUnit>();
|
Protocals = new Dictionary<string, ProtocalUnit>();
|
||||||
SlaveAddress = slaveAddress;
|
SlaveAddress = slaveAddress;
|
||||||
MasterAddress = masterAddress;
|
MasterAddress = masterAddress;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
protected Endian Endian { get; set; }
|
||||||
|
|
||||||
public byte SlaveAddress { get; set; }
|
public byte SlaveAddress { get; set; }
|
||||||
public byte MasterAddress { get; set; }
|
public byte MasterAddress { get; set; }
|
||||||
|
|
||||||
@@ -44,8 +47,9 @@ namespace Modbus.Net
|
|||||||
}
|
}
|
||||||
//自动寻找存在的协议并将其加载
|
//自动寻找存在的协议并将其加载
|
||||||
var protocalUnit =
|
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("没有相应的协议内容");
|
if (protocalUnit == null) throw new InvalidCastException("没有相应的协议内容");
|
||||||
|
protocalUnit.Endian = Endian;
|
||||||
Register(protocalUnit);
|
Register(protocalUnit);
|
||||||
return Protocals[protocalName];
|
return Protocals[protocalName];
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -40,14 +40,9 @@ namespace Modbus.Net
|
|||||||
public byte MasterAddress { get; set; }
|
public byte MasterAddress { get; set; }
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
/// 获取协议是否遵循小端格式
|
/// 协议是否遵循小端格式
|
||||||
/// </summary>
|
/// </summary>
|
||||||
public abstract Endian GetLittleEndian { get; }
|
public abstract Endian Endian { get; }
|
||||||
|
|
||||||
/// <summary>
|
|
||||||
/// 设置协议是否遵循小端格式
|
|
||||||
/// </summary>
|
|
||||||
public abstract Endian SetLittleEndian { get; }
|
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
/// 设备是否已经连接
|
/// 设备是否已经连接
|
||||||
@@ -117,22 +112,8 @@ namespace Modbus.Net
|
|||||||
var getReturnValue = await GetDatasAsync(startAddress,
|
var getReturnValue = await GetDatasAsync(startAddress,
|
||||||
(int) Math.Ceiling(bCount*getTypeAndCount.Value));
|
(int) Math.Ceiling(bCount*getTypeAndCount.Value));
|
||||||
var getBytes = getReturnValue;
|
var getBytes = getReturnValue;
|
||||||
switch (GetLittleEndian)
|
return ValueHelper.GetInstance(Endian).ByteArrayToObjectArray(getBytes, getTypeAndCount);
|
||||||
{
|
|
||||||
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;
|
|
||||||
}
|
}
|
||||||
catch (Exception)
|
catch (Exception)
|
||||||
{
|
{
|
||||||
@@ -167,7 +148,7 @@ namespace Modbus.Net
|
|||||||
{
|
{
|
||||||
var getBytes = await GetDatasAsync(startAddress,
|
var getBytes = await GetDatasAsync(startAddress,
|
||||||
new KeyValuePair<Type, int>(typeof (T), getByteCount));
|
new KeyValuePair<Type, int>(typeof (T), getByteCount));
|
||||||
return BigEndianValueHelper.Instance.ObjectArrayToDestinationArray<T>(getBytes);
|
return ValueHelper.GetInstance(Endian).ObjectArrayToDestinationArray<T>(getBytes);
|
||||||
}
|
}
|
||||||
catch (Exception)
|
catch (Exception)
|
||||||
{
|
{
|
||||||
@@ -188,7 +169,7 @@ namespace Modbus.Net
|
|||||||
AsyncHelper.RunSync(() => GetDatasAsync(startAddress, getTypeAndCountList));
|
AsyncHelper.RunSync(() => GetDatasAsync(startAddress, getTypeAndCountList));
|
||||||
}
|
}
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>GetEndian
|
||||||
/// 获取数据
|
/// 获取数据
|
||||||
/// </summary>
|
/// </summary>
|
||||||
/// <param name="startAddress">开始地址</param>
|
/// <param name="startAddress">开始地址</param>
|
||||||
@@ -207,22 +188,7 @@ namespace Modbus.Net
|
|||||||
select (int) Math.Ceiling(bCount*getTypeAndCount.Value)).Sum();
|
select (int) Math.Ceiling(bCount*getTypeAndCount.Value)).Sum();
|
||||||
var getReturnValue = await GetDatasAsync(startAddress, bAllCount);
|
var getReturnValue = await GetDatasAsync(startAddress, bAllCount);
|
||||||
var getBytes = getReturnValue;
|
var getBytes = getReturnValue;
|
||||||
switch (GetLittleEndian)
|
return ValueHelper.GetInstance(Endian).ByteArrayToObjectArray(getBytes, translateTypeAndCount);
|
||||||
{
|
|
||||||
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;
|
|
||||||
}
|
}
|
||||||
catch (Exception)
|
catch (Exception)
|
||||||
{
|
{
|
||||||
|
|||||||
@@ -2,7 +2,7 @@
|
|||||||
<package xmlns="http://schemas.microsoft.com/packaging/2011/08/nuspec.xsd">
|
<package xmlns="http://schemas.microsoft.com/packaging/2011/08/nuspec.xsd">
|
||||||
<metadata>
|
<metadata>
|
||||||
<id>Modbus.Net</id>
|
<id>Modbus.Net</id>
|
||||||
<version>1.2.2.1</version>
|
<version>1.2.3</version>
|
||||||
<title>Modbus.Net</title>
|
<title>Modbus.Net</title>
|
||||||
<authors>Chris L.(Luo Sheng)</authors>
|
<authors>Chris L.(Luo Sheng)</authors>
|
||||||
<owners>Hangzhou Delian IoT Science Technology Co.,Ltd.</owners>
|
<owners>Hangzhou Delian IoT Science Technology Co.,Ltd.</owners>
|
||||||
|
|||||||
@@ -35,5 +35,5 @@ using System.Runtime.InteropServices;
|
|||||||
// 方法是按如下所示使用“*”:
|
// 方法是按如下所示使用“*”:
|
||||||
// [assembly: AssemblyVersion("1.0.*")]
|
// [assembly: AssemblyVersion("1.0.*")]
|
||||||
|
|
||||||
[assembly: AssemblyVersion("1.2.2")]
|
[assembly: AssemblyVersion("1.2.3")]
|
||||||
[assembly: AssemblyFileVersion("1.2.2")]
|
[assembly: AssemblyFileVersion("1.2.3")]
|
||||||
@@ -10,7 +10,7 @@ namespace Modbus.Net
|
|||||||
/// <summary>
|
/// <summary>
|
||||||
/// 是否为小端格式
|
/// 是否为小端格式
|
||||||
/// </summary>
|
/// </summary>
|
||||||
public Endian IsLittleEndian { get; protected set; } = Endian.BigEndianLsb;
|
public Endian Endian { get; set; } = Endian.BigEndianLsb;
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
/// 从输入结构格式化
|
/// 从输入结构格式化
|
||||||
@@ -26,7 +26,7 @@ namespace Modbus.Net
|
|||||||
/// <returns>格式化后的字节流</returns>
|
/// <returns>格式化后的字节流</returns>
|
||||||
public virtual byte[] Format(params object[] message)
|
public virtual byte[] Format(params object[] message)
|
||||||
{
|
{
|
||||||
return TranslateContent(IsLittleEndian, message);
|
return TranslateContent(Endian, message);
|
||||||
}
|
}
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
|
|||||||
@@ -34,6 +34,8 @@ namespace Modbus.Net
|
|||||||
/// </summary>
|
/// </summary>
|
||||||
public static bool LittleEndian => true;
|
public static bool LittleEndian => true;
|
||||||
|
|
||||||
|
public static bool LittleEndianBit => true;
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
/// 将一个byte数字转换为一个byte元素的数组。
|
/// 将一个byte数字转换为一个byte元素的数组。
|
||||||
/// </summary>
|
/// </summary>
|
||||||
@@ -508,7 +510,7 @@ namespace Modbus.Net
|
|||||||
boolToByteTemp = 0;
|
boolToByteTemp = 0;
|
||||||
}
|
}
|
||||||
lastIsBool = true;
|
lastIsBool = true;
|
||||||
if (LittleEndian)
|
if (!LittleEndianBit)
|
||||||
{
|
{
|
||||||
boolToByteTemp = (byte) (boolToByteTemp*2 + ((bool) content ? 1 : 0));
|
boolToByteTemp = (byte) (boolToByteTemp*2 + ((bool) content ? 1 : 0));
|
||||||
}
|
}
|
||||||
@@ -874,6 +876,29 @@ namespace Modbus.Net
|
|||||||
/// </summary>
|
/// </summary>
|
||||||
public static ValueHelper Instance => _instance ?? (_instance = new ValueHelper());
|
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
|
#endregion
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -1023,6 +1048,8 @@ namespace Modbus.Net
|
|||||||
|
|
||||||
protected new bool LittleEndian => false;
|
protected new bool LittleEndian => false;
|
||||||
|
|
||||||
|
protected new bool LittleEndianBit => false;
|
||||||
|
|
||||||
public new static BigEndianValueHelper Instance
|
public new static BigEndianValueHelper Instance
|
||||||
=> _bigEndianInstance ?? (_bigEndianInstance = new BigEndianMsbValueHelper());
|
=> _bigEndianInstance ?? (_bigEndianInstance = new BigEndianMsbValueHelper());
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user