diff --git a/Modbus.Net/Modbus.Net.Modbus/ModbusProtocal.cs b/Modbus.Net/Modbus.Net.Modbus/ModbusProtocal.cs index ee2e3e4..c6c3d52 100644 --- a/Modbus.Net/Modbus.Net.Modbus/ModbusProtocal.cs +++ b/Modbus.Net/Modbus.Net.Modbus/ModbusProtocal.cs @@ -410,7 +410,7 @@ namespace Modbus.Net.Modbus FunctionCode == (byte) ModbusProtocalWriteDataFunctionCode.WriteSingleCoil ? ((bool) writeValue ? new byte[] {0xFF, 0x00} - : new byte[] {0x00, 0xFF}) + : new byte[] {0x00, 0x00}) : ValueHelper.GetInstance(endian).GetBytes(ushort.Parse(writeValue.ToString())); WriteValue = writeByteValue; } diff --git a/Tests/Modbus.Net.Tests/ModbusTest.cs b/Tests/Modbus.Net.Tests/ModbusTest.cs index c957dde..0306d9b 100644 --- a/Tests/Modbus.Net.Tests/ModbusTest.cs +++ b/Tests/Modbus.Net.Tests/ModbusTest.cs @@ -273,6 +273,46 @@ namespace Modbus.Net.Tests Assert.AreEqual(ans3["A6"].PlcValue, 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().SetSingleDataAsync("4X 1", dic1["4X 1"]); + await _modbusAsciiMachine.BaseUtility.GetUtilityMethods().SetSingleDataAsync("4X 1", dic1["4X 1"]); + await _modbusRtuMachine.BaseUtility.GetUtilityMethods().SetSingleDataAsync("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[0], dic1["4X 1"]); + Assert.AreEqual(ans2[0], dic1["4X 1"]); + Assert.AreEqual(ans3[0], dic1["4X 1"]); + await _modbusTcpMachine.BaseUtility.GetUtilityMethods().SetSingleDataAsync("0X 1", dic2["0X 1"] >= 1); + await _modbusAsciiMachine.BaseUtility.GetUtilityMethods().SetSingleDataAsync("0X 1", dic2["0X 1"] >= 1); + await _modbusRtuMachine.BaseUtility.GetUtilityMethods().SetSingleDataAsync("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[0] ? 1 : 0, dic2["0X 1"]); + Assert.AreEqual(ans22[0] ? 1 : 0, dic2["0X 1"]); + Assert.AreEqual(ans23[0] ? 1 : 0, dic2["0X 1"]); + } + + [TestCleanup] public void MachineClean() {