diff --git a/Modbus.Net/Modbus.Net.Modbus.NA200H/Modbus.Net.Modbus.NA200H.csproj b/Modbus.Net/Modbus.Net.Modbus.NA200H/Modbus.Net.Modbus.NA200H.csproj
index 2ffb238..081fb03 100644
--- a/Modbus.Net/Modbus.Net.Modbus.NA200H/Modbus.Net.Modbus.NA200H.csproj
+++ b/Modbus.Net/Modbus.Net.Modbus.NA200H/Modbus.Net.Modbus.NA200H.csproj
@@ -5,7 +5,7 @@
Modbus.Net.Modbus.NA200H
Modbus.Net.Modbus.NA200H
Modbus.Net.Modbus.NA200H
- 1.4.1-beta05
+ 1.4.1
Chris L.(Luo Sheng)
Hangzhou Delian Science Technology Co.,Ltd.
Modbus.Net.Modbus
diff --git a/Modbus.Net/Modbus.Net.Modbus.SelfDefinedSample/IUtilityMethodTime.cs b/Modbus.Net/Modbus.Net.Modbus.SelfDefinedSample/IUtilityMethodTime.cs
index ff2de27..a28eb9a 100644
--- a/Modbus.Net/Modbus.Net.Modbus.SelfDefinedSample/IUtilityMethodTime.cs
+++ b/Modbus.Net/Modbus.Net.Modbus.SelfDefinedSample/IUtilityMethodTime.cs
@@ -12,13 +12,13 @@ namespace Modbus.Net.Modbus.SelfDefinedSample
/// 获取PLC时间
///
/// PLC时间
- Task> GetTimeAsync();
+ Task> GetTimeAsync(ushort startAddress);
///
/// 设置PLC时间
///
/// 设置PLC时间
/// 设置是否成功
- Task> SetTimeAsync(DateTime setTime);
+ Task> SetTimeAsync(ushort startAddress, DateTime setTime);
}
}
diff --git a/Modbus.Net/Modbus.Net.Modbus.SelfDefinedSample/Modbus.Net.Modbus.SelfDefinedSample.csproj b/Modbus.Net/Modbus.Net.Modbus.SelfDefinedSample/Modbus.Net.Modbus.SelfDefinedSample.csproj
index 15a05bb..edf83a0 100644
--- a/Modbus.Net/Modbus.Net.Modbus.SelfDefinedSample/Modbus.Net.Modbus.SelfDefinedSample.csproj
+++ b/Modbus.Net/Modbus.Net.Modbus.SelfDefinedSample/Modbus.Net.Modbus.SelfDefinedSample.csproj
@@ -5,7 +5,7 @@
Modbus.Net.Modbus.SelfDefinedSample
Modbus.Net.Modbus.SelfDefinedSample
Modbus.Net.Modbus.SelfDefinedSample
- 1.4.1-beta05
+ 1.4.1
Chris L.(Luo Sheng)
Hangzhou Delian Science Technology Co.,Ltd.
Modbus.Net.Modbus
diff --git a/Modbus.Net/Modbus.Net.Modbus.SelfDefinedSample/ModbusProtocolTime.cs b/Modbus.Net/Modbus.Net.Modbus.SelfDefinedSample/ModbusProtocolTime.cs
index 5d67e60..542ee19 100644
--- a/Modbus.Net/Modbus.Net.Modbus.SelfDefinedSample/ModbusProtocolTime.cs
+++ b/Modbus.Net/Modbus.Net.Modbus.SelfDefinedSample/ModbusProtocolTime.cs
@@ -30,11 +30,11 @@ namespace Modbus.Net.Modbus.SelfDefinedSample
/// 构造函数
///
/// 从站号
- public GetSystemTimeModbusInputStruct(byte slaveAddress)
+ public GetSystemTimeModbusInputStruct(byte slaveAddress, ushort startAddress)
{
SlaveAddress = slaveAddress;
FunctionCode = (byte)ModbusProtocolTimeFunctionCode.GetSystemTime;
- StartAddress = 30000;
+ StartAddress = startAddress;
GetCount = 5;
}
@@ -162,11 +162,11 @@ namespace Modbus.Net.Modbus.SelfDefinedSample
///
/// 从站号
/// 时间
- public SetSystemTimeModbusInputStruct(byte slaveAddress, DateTime time)
+ public SetSystemTimeModbusInputStruct(byte slaveAddress, ushort startAddress, DateTime time)
{
SlaveAddress = slaveAddress;
FunctionCode = (byte)ModbusProtocolTimeFunctionCode.SetSystemTime;
- StartAddress = 30000;
+ StartAddress = startAddress;
WriteCount = 5;
WriteByteCount = 10;
Year = (ushort)time.Year;
diff --git a/Modbus.Net/Modbus.Net.Modbus.SelfDefinedSample/ModbusUtilityTime.cs b/Modbus.Net/Modbus.Net.Modbus.SelfDefinedSample/ModbusUtilityTime.cs
index 2165d46..4bab590 100644
--- a/Modbus.Net/Modbus.Net.Modbus.SelfDefinedSample/ModbusUtilityTime.cs
+++ b/Modbus.Net/Modbus.Net.Modbus.SelfDefinedSample/ModbusUtilityTime.cs
@@ -39,11 +39,11 @@ namespace Modbus.Net.Modbus.SelfDefinedSample
/// 读时间
///
/// 设备的时间
- public async Task> GetTimeAsync()
+ public async Task> GetTimeAsync(ushort startAddress)
{
try
{
- var inputStruct = new GetSystemTimeModbusInputStruct(SlaveAddress);
+ var inputStruct = new GetSystemTimeModbusInputStruct(SlaveAddress, startAddress);
var outputStruct =
await Wrapper.SendReceiveAsync(
Wrapper[typeof(GetSystemTimeModbusProtocol)], inputStruct);
@@ -73,11 +73,11 @@ namespace Modbus.Net.Modbus.SelfDefinedSample
///
/// 需要写入的时间
/// 写入是否成功
- public async Task> SetTimeAsync(DateTime setTime)
+ public async Task> SetTimeAsync(ushort startAddress, DateTime setTime)
{
try
{
- var inputStruct = new SetSystemTimeModbusInputStruct(SlaveAddress, setTime);
+ var inputStruct = new SetSystemTimeModbusInputStruct(SlaveAddress, startAddress, setTime);
var outputStruct =
await Wrapper.SendReceiveAsync(
Wrapper[typeof(SetSystemTimeModbusProtocol)], inputStruct);
diff --git a/Modbus.Net/Modbus.Net.Modbus/Modbus.Net.Modbus.csproj b/Modbus.Net/Modbus.Net.Modbus/Modbus.Net.Modbus.csproj
index 8f7111d..675d96e 100644
--- a/Modbus.Net/Modbus.Net.Modbus/Modbus.Net.Modbus.csproj
+++ b/Modbus.Net/Modbus.Net.Modbus/Modbus.Net.Modbus.csproj
@@ -5,7 +5,7 @@
Modbus.Net.Modbus
Modbus.Net.Modbus
Modbus.Net.Modbus
- 1.4.1-beta05
+ 1.4.1
Chris L.(Luo Sheng)
Hangzhou Delian Science Technology Co.,Ltd.
Modbus.Net.Modbus
diff --git a/Modbus.Net/Modbus.Net.Modbus/ModbusAsciiProtocolLinker.cs b/Modbus.Net/Modbus.Net.Modbus/ModbusAsciiProtocolLinker.cs
index b68256e..bcc1cf5 100644
--- a/Modbus.Net/Modbus.Net.Modbus/ModbusAsciiProtocolLinker.cs
+++ b/Modbus.Net/Modbus.Net.Modbus/ModbusAsciiProtocolLinker.cs
@@ -16,10 +16,8 @@ namespace Modbus.Net.Modbus
public ModbusAsciiProtocolLinker(string com, int slaveAddress)
: base(com, slaveAddress)
{
- ((IConnectorWithController)BaseConnector).AddController(new MatchController(
- new ICollection<(int, int)>[] {
- new List<(int, int)> { (1, 1), (2, 2) }, new List<(int, int)> { (3, 3), (4, 4) } },
- int.Parse(ConfigurationReader.GetValue("COM:" + com + ":" + slaveAddress, "FetchSleepTime")),
+ ((IConnectorWithController)BaseConnector).AddController(new FifoController(
+ int.Parse(ConfigurationReader.GetValue("COM:" + com + ":" + slaveAddress, "FetchSleepTime")),
lengthCalc: content =>
{
if (content[0] != 0x3a) return 0;
diff --git a/Modbus.Net/Modbus.Net.Modbus/ModbusProtocol.cs b/Modbus.Net/Modbus.Net.Modbus/ModbusProtocol.cs
index f5a0a6e..6fee1b8 100644
--- a/Modbus.Net/Modbus.Net.Modbus/ModbusProtocol.cs
+++ b/Modbus.Net/Modbus.Net.Modbus/ModbusProtocol.cs
@@ -1,5 +1,6 @@
using System;
using System.Collections.Generic;
+using System.Linq;
using System.Threading.Tasks;
using ProtocolUnit = Modbus.Net.ProtocolUnit;
@@ -296,10 +297,14 @@ namespace Modbus.Net.Modbus
FunctionCode = (byte)translateAddress.Area;
StartAddress = (ushort)translateAddress.Address;
var writeByteValue = ValueHelper.GetInstance(endian).ObjectArrayToByteArray(writeValue);
+ if (writeByteValue.Length % 2 == 1) writeByteValue = writeByteValue.ToList().Append(0).ToArray();
WriteCount =
(ushort)(writeByteValue.Length / addressTranslator.GetAreaByteLength(translateAddress.AreaString));
WriteByteCount = (byte)writeByteValue.Length;
WriteValue = writeByteValue;
+ translateAddress = ((ModbusTranslatorBase)addressTranslator).AddressTranslate(startAddress, false, WriteCount == 1);
+ FunctionCode = (byte)translateAddress.Area;
+ StartAddress = (ushort)translateAddress.Address;
}
///
@@ -389,8 +394,18 @@ namespace Modbus.Net.Modbus
{
var r_message = (WriteDataModbusInputStruct)message;
var dataValue = Format(r_message.WriteValue);
- var formattingBytes = Format(r_message.SlaveAddress, r_message.FunctionCode,
- r_message.StartAddress, r_message.WriteCount, r_message.WriteByteCount, dataValue);
+ byte[] formattingBytes;
+ if (r_message.FunctionCode == (byte)ModbusProtocolFunctionCode.WriteSingleCoil || r_message.FunctionCode == (byte)ModbusProtocolFunctionCode.WriteSingleRegister)
+ {
+ formattingBytes = Format(r_message.SlaveAddress, r_message.FunctionCode,
+ r_message.StartAddress, dataValue);
+ }
+ else
+ {
+ formattingBytes = Format(r_message.SlaveAddress, r_message.FunctionCode,
+ r_message.StartAddress, r_message.WriteCount, r_message.WriteByteCount, dataValue);
+ }
+
return formattingBytes;
}
@@ -406,142 +421,15 @@ namespace Modbus.Net.Modbus
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);
+ if (functionCode == (byte)ModbusProtocolFunctionCode.WriteSingleCoil || functionCode == (byte)ModbusProtocolFunctionCode.WriteSingleRegister)
+ {
+ writeCount = 1;
+ }
return new WriteDataModbusOutputStruct(slaveAddress, functionCode, startAddress,
writeCount);
}
}
- ///
- /// 写数据输入
- ///
- public class WriteSingleCoilModbusInputStruct : IInputStruct
- {
- ///
- /// 构造函数
- ///
- /// 从站号
- /// 开始地址
- /// 写入的数据
- /// 地址翻译器
- /// 端格式
- public WriteSingleCoilModbusInputStruct(byte slaveAddress, string startAddress, object writeValue,
- ModbusTranslatorBase addressTranslator, Endian endian)
- {
- SlaveAddress = slaveAddress;
- var translateAddress = addressTranslator.AddressTranslate(startAddress, false, true);
- FunctionCode = (byte)translateAddress.Area;
- StartAddress = (ushort)translateAddress.Address;
- var writeByteValue =
- FunctionCode == (byte)ModbusProtocolFunctionCode.WriteSingleCoil
- ? ((bool)writeValue
- ? new byte[] { 0xFF, 0x00 }
- : new byte[] { 0x00, 0x00 })
- : ValueHelper.GetInstance(endian).GetBytes(ushort.Parse(writeValue.ToString()));
- WriteValue = writeByteValue;
- }
-
-
- ///
- /// 从站号
- ///
- public byte SlaveAddress { get; }
-
- ///
- /// 功能码
- ///
- public byte FunctionCode { get; }
-
- ///
- /// 开始地址
- ///
- public ushort StartAddress { get; }
-
- ///
- /// 写入的数据
- ///
- public byte[] WriteValue { get; }
- }
-
- ///
- /// 写数据输出
- ///
- public class WriteSingleCoilModbusOutputStruct : IOutputStruct
- {
- ///
- /// 构造函数
- ///
- /// 从站号
- /// 功能码
- /// 开始地址
- /// 写入的数据
- public WriteSingleCoilModbusOutputStruct(byte slaveAddress, byte functionCode,
- ushort startAddress, object writeValue)
- {
- SlaveAddress = slaveAddress;
- FunctionCode = functionCode;
- StartAddress = startAddress;
- WriteValue = writeValue;
- }
-
- ///
- /// 从站号
- ///
- public byte SlaveAddress { get; private set; }
-
- ///
- /// 功能码
- ///
- public byte FunctionCode { get; private set; }
-
- ///
- /// 开始地址
- ///
- public ushort StartAddress { get; private set; }
-
- ///
- /// 写入的数据
- ///
- public object WriteValue { get; private set; }
- }
-
- ///
- /// 写多个寄存器协议
- ///
- public class WriteSingleCoilModbusProtocol : ProtocolUnit
- {
- ///
- /// 格式化
- ///
- /// 写寄存器参数
- /// 写寄存器协议核心
- public override byte[] Format(IInputStruct message)
- {
- var r_message = (WriteSingleCoilModbusInputStruct)message;
- var dataValue = Format(r_message.WriteValue);
- var formattingBytes = Format(r_message.SlaveAddress, r_message.FunctionCode,
- r_message.StartAddress, dataValue);
- return formattingBytes;
- }
-
- ///
- /// 反格式化
- ///
- /// 设备返回的信息
- /// 当前反格式化的位置
- /// 反格式化的信息
- public override IOutputStruct Unformat(byte[] messageBytes, ref int 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 writeValue = ValueHelper.GetInstance(Endian).GetUShort(messageBytes, ref flag);
- var returnValue = functionCode == (byte)ModbusProtocolFunctionCode.WriteSingleCoil
- ? (object)(writeValue == 0xFF00) : writeValue;
- return new WriteSingleCoilModbusOutputStruct(slaveAddress, functionCode, startAddress,
- returnValue);
- }
- }
-
#endregion
///
diff --git a/Modbus.Net/Modbus.Net.Modbus/ModbusRtuInTcpProtocolLinker.cs b/Modbus.Net/Modbus.Net.Modbus/ModbusRtuInTcpProtocolLinker.cs
index c340c6b..ae8d1d5 100644
--- a/Modbus.Net/Modbus.Net.Modbus/ModbusRtuInTcpProtocolLinker.cs
+++ b/Modbus.Net/Modbus.Net.Modbus/ModbusRtuInTcpProtocolLinker.cs
@@ -28,7 +28,8 @@ namespace Modbus.Net.Modbus
int.Parse(ConfigurationReader.GetValue("TCP:" + ip + ":" + port, "FetchSleepTime")),
lengthCalc: content =>
{
- if (content[1] == 5 || content[1] == 6 || content[1] == 15 || content[1] == 16 || content[1] == 21) return 8;
+ if (content[1] > 128) return 5;
+ else if (content[1] == 5 || content[1] == 6 || content[1] == 15 || content[1] == 16 || content[1] == 21) return 8;
else return DuplicateWithCount.GetDuplcateFunc(new List { 2 }, 5).Invoke(content);
},
checkRightFunc: ContentCheck.Crc16CheckRight,
diff --git a/Modbus.Net/Modbus.Net.Modbus/ModbusRtuInUdpProtocolLinker.cs b/Modbus.Net/Modbus.Net.Modbus/ModbusRtuInUdpProtocolLinker.cs
index 3a0ef4a..b4365b2 100644
--- a/Modbus.Net/Modbus.Net.Modbus/ModbusRtuInUdpProtocolLinker.cs
+++ b/Modbus.Net/Modbus.Net.Modbus/ModbusRtuInUdpProtocolLinker.cs
@@ -28,7 +28,8 @@ namespace Modbus.Net.Modbus
int.Parse(ConfigurationReader.GetValue("UDP:" + ip + ":" + port, "FetchSleepTime")),
lengthCalc: content =>
{
- if (content[1] == 5 || content[1] == 6 || content[1] == 15 || content[1] == 16 || content[1] == 21) return 8;
+ if (content[1] > 128) return 5;
+ else if (content[1] == 5 || content[1] == 6 || content[1] == 15 || content[1] == 16 || content[1] == 21) return 8;
else return DuplicateWithCount.GetDuplcateFunc(new List { 2 }, 5).Invoke(content);
},
checkRightFunc: ContentCheck.Crc16CheckRight,
diff --git a/Modbus.Net/Modbus.Net.Modbus/ModbusRtuProtocolLinker.cs b/Modbus.Net/Modbus.Net.Modbus/ModbusRtuProtocolLinker.cs
index 76fb9a7..2e6f05e 100644
--- a/Modbus.Net/Modbus.Net.Modbus/ModbusRtuProtocolLinker.cs
+++ b/Modbus.Net/Modbus.Net.Modbus/ModbusRtuProtocolLinker.cs
@@ -15,12 +15,12 @@ namespace Modbus.Net.Modbus
public ModbusRtuProtocolLinker(string com, int slaveAddress)
: base(com, slaveAddress)
{
- ((IConnectorWithController)BaseConnector).AddController(new MatchController(
- new ICollection<(int, int)>[] { new List<(int, int)> { (0, 0) }, new List<(int, int)> { (1, 1) } },
+ ((IConnectorWithController)BaseConnector).AddController(new FifoController(
int.Parse(ConfigurationReader.GetValue("COM:" + com + ":" + slaveAddress, "FetchSleepTime")),
lengthCalc: content =>
{
- if (content[1] == 5 || content[1] == 6 || content[1] == 15 || content[1] == 16 || content[1] == 21) return 8;
+ if (content[1] > 128) return 5;
+ else if (content[1] == 5 || content[1] == 6 || content[1] == 15 || content[1] == 16 || content[1] == 21) return 8;
else return DuplicateWithCount.GetDuplcateFunc(new List { 2 }, 5).Invoke(content);
},
checkRightFunc: ContentCheck.Crc16CheckRight,
diff --git a/Modbus.Net/Modbus.Net.Modbus/ModbusUdpProtocolLinker.cs b/Modbus.Net/Modbus.Net.Modbus/ModbusUdpProtocolLinker.cs
index 4b7cb2a..a917e9a 100644
--- a/Modbus.Net/Modbus.Net.Modbus/ModbusUdpProtocolLinker.cs
+++ b/Modbus.Net/Modbus.Net.Modbus/ModbusUdpProtocolLinker.cs
@@ -23,8 +23,8 @@ namespace Modbus.Net.Modbus
/// 端口
public ModbusUdpProtocolLinker(string ip, int port) : base(ip, port)
{
- ((IConnectorWithController)BaseConnector).AddController(new FifoController(
- int.Parse(ConfigurationReader.GetValue("UDP:" + ip + ":" + port, "FetchSleepTime")),
+ ((IConnectorWithController)BaseConnector).AddController(new ModbusTcpMatchDirectlySendController(
+ new ICollection<(int, int)>[] { new List<(int, int)> { (0, 0), (1, 1) } },
lengthCalc: DuplicateWithCount.GetDuplcateFunc(new List { 4, 5 }, 6),
waitingListMaxCount: ConfigurationReader.GetValue("UDP:" + ip + ":" + port, "WaitingListCount") != null ?
int.Parse(ConfigurationReader.GetValue("UDP:" + ip + ":" + port, "WaitingListCount")) :
diff --git a/Modbus.Net/Modbus.Net.Modbus/ModbusUtility.cs b/Modbus.Net/Modbus.Net.Modbus/ModbusUtility.cs
index 041953c..d1e5365 100644
--- a/Modbus.Net/Modbus.Net.Modbus/ModbusUtility.cs
+++ b/Modbus.Net/Modbus.Net.Modbus/ModbusUtility.cs
@@ -50,24 +50,10 @@ namespace Modbus.Net.Modbus
AsciiInUdp = 7
}
- ///
- /// 写单个数据方法接口
- ///
- public interface IUtilityMethodWriteSingleCoil : IUtilityMethod
- {
- ///
- /// 写数据
- ///
- /// 起始地址
- /// 需要设置的数据
- /// 设置是否成功
- Task> SetSingleCoilAsync(string startAddress, object setContent);
- }
-
///
/// Modbus基础Api入口
///
- public class ModbusUtility : BaseUtility, PipeUnit>, IUtilityMethodWriteSingleCoil
+ public class ModbusUtility : BaseUtility, PipeUnit>
{
private static readonly ILogger logger = LogProvider.CreateLogger();
@@ -327,41 +313,5 @@ namespace Modbus.Net.Modbus
};
}
}
-
- ///
- /// 写数据
- ///
- /// 起始地址
- /// 需要设置的数据
- /// 设置是否成功
- public async Task> SetSingleCoilAsync(string startAddress, object setContent)
- {
- try
- {
- var inputStruct = new WriteSingleCoilModbusInputStruct(SlaveAddress, startAddress, setContent,
- (ModbusTranslatorBase)AddressTranslator, Endian);
- var outputStruct = await
- Wrapper.SendReceiveAsync(Wrapper[typeof(WriteSingleCoilModbusProtocol)],
- inputStruct);
- return new ReturnStruct()
- {
- Datas = outputStruct?.WriteValue.ToString() == setContent.ToString(),
- IsSuccess = outputStruct?.WriteValue.ToString() == setContent.ToString(),
- ErrorCode = outputStruct?.WriteValue.ToString() == setContent.ToString() ? 0 : -2,
- ErrorMsg = outputStruct?.WriteValue.ToString() == setContent.ToString() ? "" : "Data length mismatch"
- };
- }
- catch (ModbusProtocolErrorException e)
- {
- logger.LogError(e, $"ModbusUtility -> SetSingleDatas: {ConnectionString} error: {e.Message}");
- return new ReturnStruct
- {
- Datas = false,
- IsSuccess = false,
- ErrorCode = e.ErrorMessageNumber,
- ErrorMsg = e.Message
- };
- }
- }
}
}
\ No newline at end of file
diff --git a/Modbus.Net/Modbus.Net.OPC/Modbus.Net.OPC.csproj b/Modbus.Net/Modbus.Net.OPC/Modbus.Net.OPC.csproj
index b901e52..e16fe60 100644
--- a/Modbus.Net/Modbus.Net.OPC/Modbus.Net.OPC.csproj
+++ b/Modbus.Net/Modbus.Net.OPC/Modbus.Net.OPC.csproj
@@ -5,7 +5,7 @@
Modbus.Net.OPC
Modbus.Net.OPC
Modbus.Net.OPC
- 1.4.1-beta05
+ 1.4.1
Chris L.(Luo Sheng)
Hangzhou Delian Science Technology Co.,Ltd.
Modbus.Net.OPC
diff --git a/Modbus.Net/Modbus.Net.Siemens/Modbus.Net.Siemens.csproj b/Modbus.Net/Modbus.Net.Siemens/Modbus.Net.Siemens.csproj
index 9e7d830..a347872 100644
--- a/Modbus.Net/Modbus.Net.Siemens/Modbus.Net.Siemens.csproj
+++ b/Modbus.Net/Modbus.Net.Siemens/Modbus.Net.Siemens.csproj
@@ -5,7 +5,7 @@
Modbus.Net.Siemens
Modbus.Net.Siemens
Modbus.Net.Siemens
- 1.4.1-beta05
+ 1.4.1
Chris L.(Luo Sheng)
Hangzhou Delian Science Technology Co.,Ltd.
Modbus.Net Siemens Profinet Implementation
diff --git a/Modbus.Net/Modbus.Net/Modbus.Net.csproj b/Modbus.Net/Modbus.Net/Modbus.Net.csproj
index ddbbae7..540b712 100644
--- a/Modbus.Net/Modbus.Net/Modbus.Net.csproj
+++ b/Modbus.Net/Modbus.Net/Modbus.Net.csproj
@@ -5,7 +5,7 @@
Modbus.Net
Modbus.Net
Modbus.Net
- 1.4.1-beta05
+ 1.4.1
Modbus.Net
Chris L.(Luo Sheng)
Hangzhou Delian Science Technology Co.,Ltd.
diff --git a/Tests/Modbus.Net.Tests/MachineMethodTest.cs b/Tests/Modbus.Net.Tests/MachineMethodTest.cs
index e14ec82..baee8d8 100644
--- a/Tests/Modbus.Net.Tests/MachineMethodTest.cs
+++ b/Tests/Modbus.Net.Tests/MachineMethodTest.cs
@@ -25,10 +25,10 @@ namespace Modbus.Net.Tests
{
BaseMachine baseMachine = new ModbusMachine(1, ModbusType.Tcp, _machineIp, null, true, 2, 0);
await baseMachine.BaseUtility.ConnectAsync();
- var success = await baseMachine.BaseUtility.GetUtilityMethods().SetDatasAsync("4X 1", new object[] { (ushort)11 });
+ var success = await baseMachine.BaseUtility.GetUtilityMethods().SetDatasAsync("4X 1", new object[] { (byte)11 });
Assert.AreEqual(success.IsSuccess, true);
var datas = await baseMachine.BaseUtility.GetUtilityMethods().GetDatasAsync("4X 1", 1);
- Assert.AreEqual(datas.Datas[1], 11);
+ Assert.AreEqual(datas.Datas[0], 11);
baseMachine.Disconnect();
}
diff --git a/Tests/Modbus.Net.Tests/Modbus.Net.orderedtest b/Tests/Modbus.Net.Tests/Modbus.Net.orderedtest
deleted file mode 100644
index 7f3ab26..0000000
--- a/Tests/Modbus.Net.Tests/Modbus.Net.orderedtest
+++ /dev/null
@@ -1,31 +0,0 @@
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
\ No newline at end of file
diff --git a/Tests/Modbus.Net.Tests/ModbusTest.cs b/Tests/Modbus.Net.Tests/ModbusTest.cs
index cd7f2c5..cf61276 100644
--- a/Tests/Modbus.Net.Tests/ModbusTest.cs
+++ b/Tests/Modbus.Net.Tests/ModbusTest.cs
@@ -16,6 +16,8 @@ namespace Modbus.Net.Tests
private string _machineCom = "COM1";
+ private string _machineCom2 = "COM3";
+
[TestInitialize]
public void Init()
{
@@ -23,7 +25,7 @@ namespace Modbus.Net.Tests
_modbusRtuMachine = new ModbusMachine("2", ModbusType.Rtu, _machineCom, null, true, 2, 0);
- _modbusAsciiMachine = new ModbusMachine("3", ModbusType.Ascii, _machineCom, null, true, 2, 0);
+ _modbusAsciiMachine = new ModbusMachine("3", ModbusType.Ascii, _machineCom2, null, true, 2, 0);
}
[TestMethod]
@@ -60,9 +62,9 @@ namespace Modbus.Net.Tests
var ans = await _modbusTcpMachine.GetDatasAsync(MachineDataType.Address);
var ans2 = await _modbusRtuMachine.GetDatasAsync(MachineDataType.Address);
var ans3 = await _modbusAsciiMachine.GetDatasAsync(MachineDataType.Address);
- Assert.AreEqual(ans.Datas["0X 1.0"].DeviceValue, dic1["0X 1.0"]);
- Assert.AreEqual(ans2.Datas["0X 1.0"].DeviceValue, dic1["0X 1.0"]);
- Assert.AreEqual(ans3.Datas["0X 1.0"].DeviceValue, dic1["0X 1.0"]);
+ Assert.AreEqual(ans.Datas?["0X 1.0"].DeviceValue, dic1["0X 1.0"]);
+ Assert.AreEqual(ans2.Datas?["0X 1.0"].DeviceValue, dic1["0X 1.0"]);
+ Assert.AreEqual(ans3.Datas?["0X 1.0"].DeviceValue, dic1["0X 1.0"]);
}
[TestMethod]
@@ -87,9 +89,9 @@ namespace Modbus.Net.Tests
var ans = await _modbusTcpMachine.GetDatasAsync(MachineDataType.Address);
var ans2 = await _modbusRtuMachine.GetDatasAsync(MachineDataType.Address);
var ans3 = await _modbusAsciiMachine.GetDatasAsync(MachineDataType.Address);
- Assert.AreEqual(ans.Datas["1X 1.0"].DeviceValue, 0);
- Assert.AreEqual(ans2.Datas["1X 1.0"].DeviceValue, 0);
- Assert.AreEqual(ans3.Datas["1X 1.0"].DeviceValue, 0);
+ Assert.AreEqual(ans.Datas?["1X 1.0"].DeviceValue, 0);
+ Assert.AreEqual(ans2.Datas?["1X 1.0"].DeviceValue, 0);
+ Assert.AreEqual(ans3.Datas?["1X 1.0"].DeviceValue, 0);
}
[TestMethod]
@@ -114,9 +116,9 @@ namespace Modbus.Net.Tests
var ans = await _modbusTcpMachine.GetDatasAsync(MachineDataType.Address);
var ans2 = await _modbusRtuMachine.GetDatasAsync(MachineDataType.Address);
var ans3 = await _modbusAsciiMachine.GetDatasAsync(MachineDataType.Address);
- Assert.AreEqual(ans.Datas["3X 1.0"].DeviceValue, 0);
- Assert.AreEqual(ans2.Datas["3X 1.0"].DeviceValue, 0);
- Assert.AreEqual(ans3.Datas["3X 1.0"].DeviceValue, 0);
+ Assert.AreEqual(ans.Datas?["3X 1.0"].DeviceValue, 0);
+ Assert.AreEqual(ans2.Datas?["3X 1.0"].DeviceValue, 0);
+ Assert.AreEqual(ans3.Datas?["3X 1.0"].DeviceValue, 0);
}
[TestMethod]
@@ -153,9 +155,9 @@ namespace Modbus.Net.Tests
var ans = await _modbusTcpMachine.GetDatasAsync(MachineDataType.Address);
var ans2 = await _modbusRtuMachine.GetDatasAsync(MachineDataType.Address);
var ans3 = await _modbusAsciiMachine.GetDatasAsync(MachineDataType.Address);
- Assert.AreEqual(ans.Datas["4X 1.0"].DeviceValue, dic1["4X 1"]);
- Assert.AreEqual(ans2.Datas["4X 1.0"].DeviceValue, dic1["4X 1"]);
- Assert.AreEqual(ans3.Datas["4X 1.0"].DeviceValue, dic1["4X 1"]);
+ Assert.AreEqual(ans.Datas?["4X 1.0"].DeviceValue, dic1["4X 1"]);
+ Assert.AreEqual(ans2.Datas?["4X 1.0"].DeviceValue, dic1["4X 1"]);
+ Assert.AreEqual(ans3.Datas?["4X 1.0"].DeviceValue, dic1["4X 1"]);
}
[TestMethod]
@@ -254,63 +256,24 @@ namespace Modbus.Net.Tests
var ans2 = await _modbusRtuMachine.GetDatasAsync(MachineDataType.CommunicationTag);
var ans3 = await _modbusAsciiMachine.GetDatasAsync(MachineDataType.CommunicationTag);
- Assert.AreEqual(ans.Datas["A1"].DeviceValue, dic1["A1"]);
- Assert.AreEqual(ans.Datas["A2"].DeviceValue, dic1["A2"]);
- Assert.AreEqual(ans.Datas["A3"].DeviceValue, dic1["A3"]);
- Assert.AreEqual(ans.Datas["A4"].DeviceValue, dic1["A4"]);
- Assert.AreEqual(ans.Datas["A5"].DeviceValue, dic1["A5"]);
- Assert.AreEqual(ans.Datas["A6"].DeviceValue, dic1["A6"]);
- Assert.AreEqual(ans2.Datas["A1"].DeviceValue, dic1["A1"]);
- Assert.AreEqual(ans2.Datas["A2"].DeviceValue, dic1["A2"]);
- Assert.AreEqual(ans2.Datas["A3"].DeviceValue, dic1["A3"]);
- Assert.AreEqual(ans2.Datas["A4"].DeviceValue, dic1["A4"]);
- Assert.AreEqual(ans2.Datas["A5"].DeviceValue, dic1["A5"]);
- Assert.AreEqual(ans2.Datas["A6"].DeviceValue, dic1["A6"]);
- Assert.AreEqual(ans3.Datas["A1"].DeviceValue, dic1["A1"]);
- Assert.AreEqual(ans3.Datas["A2"].DeviceValue, dic1["A2"]);
- Assert.AreEqual(ans3.Datas["A3"].DeviceValue, dic1["A3"]);
- Assert.AreEqual(ans3.Datas["A4"].DeviceValue, dic1["A4"]);
- Assert.AreEqual(ans3.Datas["A5"].DeviceValue, dic1["A5"]);
- Assert.AreEqual(ans3.Datas["A6"].DeviceValue, dic1["A6"]);
- }
-
- [TestMethod]
- public async Task ModbusWriteSingleTest()
- {
- Random r = new Random();
-
- var dic1 = new Dictionary()
- {
- {
- "4X 1", r.Next(0, UInt16.MaxValue)
- }
- };
-
- var dic2 = new Dictionary()
- {
- {
- "0X 1", r.Next(0, 2)
- }
- };
-
- await _modbusTcpMachine!.BaseUtility.GetUtilityMethods().SetSingleCoilAsync("4X 1", dic1["4X 1"]);
- await _modbusAsciiMachine!.BaseUtility.GetUtilityMethods().SetSingleCoilAsync("4X 1", dic1["4X 1"]);
- await _modbusRtuMachine!.BaseUtility.GetUtilityMethods().SetSingleCoilAsync("4X 1", dic1["4X 1"]);
- var ans = await _modbusTcpMachine.BaseUtility.GetUtilityMethods().GetDatasAsync("4X 1", 1);
- var ans2 = await _modbusRtuMachine.BaseUtility.GetUtilityMethods().GetDatasAsync("4X 1", 1);
- var ans3 = await _modbusAsciiMachine.BaseUtility.GetUtilityMethods().GetDatasAsync("4X 1", 1);
- Assert.AreEqual(ans.Datas[0], dic1["4X 1"]);
- Assert.AreEqual(ans2.Datas[0], dic1["4X 1"]);
- Assert.AreEqual(ans3.Datas[0], dic1["4X 1"]);
- await _modbusTcpMachine.BaseUtility.GetUtilityMethods().SetSingleCoilAsync("0X 1", dic2["0X 1"] >= 1);
- await _modbusAsciiMachine.BaseUtility.GetUtilityMethods().SetSingleCoilAsync("0X 1", dic2["0X 1"] >= 1);
- await _modbusRtuMachine.BaseUtility.GetUtilityMethods().SetSingleCoilAsync("0X 1", dic2["0X 1"] >= 1);
- var ans21 = await _modbusTcpMachine.BaseUtility.GetUtilityMethods().GetDatasAsync("0X 1", 1);
- var ans22 = await _modbusRtuMachine.BaseUtility.GetUtilityMethods().GetDatasAsync("0X 1", 1);
- var ans23 = await _modbusAsciiMachine.BaseUtility.GetUtilityMethods().GetDatasAsync("0X 1", 1);
- Assert.AreEqual(ans21.Datas[0] ? 1 : 0, dic2["0X 1"]);
- Assert.AreEqual(ans22.Datas[0] ? 1 : 0, dic2["0X 1"]);
- Assert.AreEqual(ans23.Datas[0] ? 1 : 0, dic2["0X 1"]);
+ Assert.AreEqual(ans.Datas?["A1"].DeviceValue, dic1["A1"]);
+ Assert.AreEqual(ans.Datas?["A2"].DeviceValue, dic1["A2"]);
+ Assert.AreEqual(ans.Datas?["A3"].DeviceValue, dic1["A3"]);
+ Assert.AreEqual(ans.Datas?["A4"].DeviceValue, dic1["A4"]);
+ Assert.AreEqual(ans.Datas?["A5"].DeviceValue, dic1["A5"]);
+ Assert.AreEqual(ans.Datas?["A6"].DeviceValue, dic1["A6"]);
+ Assert.AreEqual(ans2.Datas?["A1"].DeviceValue, dic1["A1"]);
+ Assert.AreEqual(ans2.Datas?["A2"].DeviceValue, dic1["A2"]);
+ Assert.AreEqual(ans2.Datas?["A3"].DeviceValue, dic1["A3"]);
+ Assert.AreEqual(ans2.Datas?["A4"].DeviceValue, dic1["A4"]);
+ Assert.AreEqual(ans2.Datas?["A5"].DeviceValue, dic1["A5"]);
+ Assert.AreEqual(ans2.Datas?["A6"].DeviceValue, dic1["A6"]);
+ Assert.AreEqual(ans3.Datas?["A1"].DeviceValue, dic1["A1"]);
+ Assert.AreEqual(ans3.Datas?["A2"].DeviceValue, dic1["A2"]);
+ Assert.AreEqual(ans3.Datas?["A3"].DeviceValue, dic1["A3"]);
+ Assert.AreEqual(ans3.Datas?["A4"].DeviceValue, dic1["A4"]);
+ Assert.AreEqual(ans3.Datas?["A5"].DeviceValue, dic1["A5"]);
+ Assert.AreEqual(ans3.Datas?["A6"].DeviceValue, dic1["A6"]);
}