New Samples Update. Modbus Coil Read Write Fix.

This commit is contained in:
parallelbgls
2016-11-01 14:25:21 +08:00
parent e7e0a7795d
commit 47b7ae324c
591 changed files with 95743 additions and 21528 deletions

View File

@@ -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),

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.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>

View File

@@ -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;
}

View File

@@ -13,7 +13,7 @@
//Modbus协议错误
if (content[7] > 127)
{
throw new ModbusProtocalErrorException(content[2]);
throw new ModbusProtocalErrorException(content[8]);
}
return true;
}

View File

@@ -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;