New Samples Update. Modbus Coil Read Write Fix.
This commit is contained in:
@@ -74,12 +74,14 @@ namespace Modbus.Net.Modbus
|
||||
return isRead
|
||||
? new AddressDef()
|
||||
{
|
||||
AreaString = head,
|
||||
Area = ReadFunctionCodeDictionary[head].Code,
|
||||
Address = TransDictionary[head] + int.Parse(tail) - 1,
|
||||
SubAddress = int.Parse(sub),
|
||||
}
|
||||
: new AddressDef()
|
||||
{
|
||||
AreaString = head,
|
||||
Area = WriteFunctionCodeDictionary[head].Code,
|
||||
Address = TransDictionary[head] + int.Parse(tail) - 1,
|
||||
SubAddress = int.Parse(sub),
|
||||
@@ -136,12 +138,14 @@ namespace Modbus.Net.Modbus
|
||||
return isRead
|
||||
? new AddressDef()
|
||||
{
|
||||
AreaString = head,
|
||||
Area = ReadFunctionCodeDictionary[head].Code,
|
||||
Address = int.Parse(tail) - 1,
|
||||
SubAddress = int.Parse(sub),
|
||||
}
|
||||
: new AddressDef()
|
||||
{
|
||||
AreaString = head,
|
||||
Area = WriteFunctionCodeDictionary[head].Code,
|
||||
Address = int.Parse(tail) - 1,
|
||||
SubAddress = int.Parse(sub),
|
||||
|
||||
@@ -2,7 +2,7 @@
|
||||
<package xmlns="http://schemas.microsoft.com/packaging/2011/08/nuspec.xsd">
|
||||
<metadata>
|
||||
<id>Modbus.Net.Modbus</id>
|
||||
<version>1.2.0</version>
|
||||
<version>1.2.1</version>
|
||||
<title>Modbus.Net.Modbus</title>
|
||||
<authors>Chris L.(Luo Sheng)</authors>
|
||||
<owners>Hangzhou Delian Information and Science Technology Co.,Ltd.</owners>
|
||||
@@ -13,7 +13,7 @@
|
||||
<copyright>Copyright 2015 Hangzhou Delian Science and Technology Co.,Ltd.</copyright>
|
||||
<tags>hardware communicate protocal modbus Delian</tags>
|
||||
<dependencies>
|
||||
<dependency id="Modbus.Net" version="1.2.0" />
|
||||
<dependency id="Modbus.Net" version="1.2.1" />
|
||||
</dependencies>
|
||||
</metadata>
|
||||
<files>
|
||||
|
||||
@@ -65,7 +65,7 @@ namespace Modbus.Net.Modbus
|
||||
var translateAddress = addressTranslator.AddressTranslate(startAddress, true);
|
||||
FunctionCode = (byte)translateAddress.Area;
|
||||
StartAddress = (ushort)translateAddress.Address;
|
||||
GetCount = getCount;
|
||||
GetCount = (ushort)Math.Ceiling(getCount / addressTranslator.GetAreaByteLength(translateAddress.AreaString));
|
||||
}
|
||||
|
||||
public byte BelongAddress { get; private set; }
|
||||
@@ -113,6 +113,13 @@ namespace Modbus.Net.Modbus
|
||||
byte dataCount = BigEndianValueHelper.Instance.GetByte(messageBytes, ref pos);
|
||||
byte[] dataValue = new byte[dataCount];
|
||||
Array.Copy(messageBytes, 3, dataValue, 0, dataCount);
|
||||
if (functionCode == 1 || functionCode == 2)
|
||||
{
|
||||
for (int i = 0; i < dataValue.Length; i++)
|
||||
{
|
||||
dataValue[i] = BigEndianValueHelper.Instance.ReverseByte(dataValue[i]);
|
||||
}
|
||||
}
|
||||
return new ReadDataModbusOutputStruct(belongAddress, functionCode, dataCount, dataValue);
|
||||
}
|
||||
}
|
||||
@@ -129,7 +136,7 @@ namespace Modbus.Net.Modbus
|
||||
FunctionCode = (byte)translateAddress.Area;
|
||||
StartAddress = (ushort)translateAddress.Address;
|
||||
var writeByteValue = BigEndianValueHelper.Instance.ObjectArrayToByteArray(writeValue);
|
||||
WriteCount = (ushort)(writeByteValue.Length / 2);
|
||||
WriteCount = (ushort)(writeByteValue.Length / addressTranslator.GetAreaByteLength(translateAddress.AreaString));
|
||||
WriteByteCount = (byte)writeByteValue.Length;
|
||||
WriteValue = writeByteValue;
|
||||
}
|
||||
@@ -175,8 +182,17 @@ namespace Modbus.Net.Modbus
|
||||
public override byte[] Format(InputStruct message)
|
||||
{
|
||||
var r_message = (WriteDataModbusInputStruct)message;
|
||||
var functionCode = r_message.FunctionCode;
|
||||
byte[] dataValue = Format(r_message.WriteValue);
|
||||
if (functionCode == 5 || functionCode == 15)
|
||||
{
|
||||
for (int i = 0; i < dataValue.Length; i++)
|
||||
{
|
||||
dataValue[i] = BigEndianValueHelper.Instance.ReverseByte(dataValue[i]);
|
||||
}
|
||||
}
|
||||
byte[] formattingBytes = Format(r_message.BelongAddress, r_message.FunctionCode,
|
||||
r_message.StartAddress, r_message.WriteCount, r_message.WriteByteCount, r_message.WriteValue);
|
||||
r_message.StartAddress, r_message.WriteCount, r_message.WriteByteCount, dataValue);
|
||||
return formattingBytes;
|
||||
}
|
||||
|
||||
|
||||
@@ -13,7 +13,7 @@
|
||||
//Modbus协议错误
|
||||
if (content[7] > 127)
|
||||
{
|
||||
throw new ModbusProtocalErrorException(content[2]);
|
||||
throw new ModbusProtocalErrorException(content[8]);
|
||||
}
|
||||
return true;
|
||||
}
|
||||
|
||||
@@ -111,7 +111,7 @@ namespace Modbus.Net.Modbus
|
||||
try
|
||||
{
|
||||
var inputStruct = new ReadDataModbusInputStruct(BelongAddress, startAddress,
|
||||
getByteCount%2 == 0 ? (ushort) (getByteCount/2) : (ushort) (getByteCount/2 + 1), AddressTranslator);
|
||||
(ushort)getByteCount, AddressTranslator);
|
||||
var outputStruct = await
|
||||
Wrapper.SendReceiveAsync(Wrapper[typeof (ReadDataModbusProtocal)], inputStruct) as
|
||||
ReadDataModbusOutputStruct;
|
||||
|
||||
Reference in New Issue
Block a user