First fix for SetData (not complete)

This commit is contained in:
罗圣
2016-08-30 10:46:31 +08:00
parent e1cb42a499
commit 0ad78c06b9
2 changed files with 28 additions and 9 deletions

View File

@@ -52,25 +52,39 @@ namespace Modbus.Net
}
else
{
if (address.Address + address.SubAddress * (0.125 / AddressTranslator.GetAreaByteLength(address.Area)) > preNum + BigEndianValueHelper.Instance.ByteLength[preType.FullName] / AddressTranslator.GetAreaByteLength(address.Area))
if (address.Address +
address.SubAddress*(0.125/AddressTranslator.GetAreaByteLength(address.Area)) <
preNum +
BigEndianValueHelper.Instance.ByteLength[preType.FullName]/
AddressTranslator.GetAreaByteLength(address.Area))
{
continue;
}
else if (address.Address +
address.SubAddress*(0.125/AddressTranslator.GetAreaByteLength(address.Area)) >
preNum +
BigEndianValueHelper.Instance.ByteLength[preType.FullName]/
AddressTranslator.GetAreaByteLength(address.Area))
{
ans.Add(new CommunicationUnit()
{
Area = area,
Address = (int)Math.Floor(initNum),
GetCount = (int)Math.Ceiling(byteCount),
Address = (int) Math.Floor(initNum),
GetCount = (int) Math.Ceiling(byteCount),
DataType = typeof (byte),
OriginalAddresses = originalAddresses.ToList(),
});
initNum = address.Address;
getCount = BigEndianValueHelper.Instance.ByteLength[address.DataType.FullName] / AddressTranslator.GetAreaByteLength(address.Area);
getCount = BigEndianValueHelper.Instance.ByteLength[address.DataType.FullName]/
AddressTranslator.GetAreaByteLength(address.Area);
byteCount = BigEndianValueHelper.Instance.ByteLength[address.DataType.FullName];
originalAddresses.Clear();
originalAddresses.Add(address);
}
else
{
getCount += BigEndianValueHelper.Instance.ByteLength[address.DataType.FullName] / AddressTranslator.GetAreaByteLength(address.Area);
getCount += BigEndianValueHelper.Instance.ByteLength[address.DataType.FullName]/
AddressTranslator.GetAreaByteLength(address.Area);
byteCount += BigEndianValueHelper.Instance.ByteLength[address.DataType.FullName];
originalAddresses.Add(address);
}

View File

@@ -340,19 +340,24 @@ namespace Modbus.Net
var addressStart = AddressFormater.FormatAddress(communicateAddress.Area,
communicateAddress.Address);
while (setCount > 0.001)
while (setCount > 0)
{
var localPos = (allBytes - setCount) / AddressTranslator.GetAreaByteLength(communicateAddress.Area);
//编码当前地址
var subPos = (int)((localPos - (int)localPos) / (0.125 / AddressTranslator.GetAreaByteLength(communicateAddress.Area)));
var address = AddressFormater.FormatAddress(communicateAddress.Area,
communicateAddress.Address + (int) localPos);
communicateAddress.Address + (int) localPos, subPos);
var address2 = subPos != 0
? null
: AddressFormater.FormatAddress(communicateAddress.Area,
communicateAddress.Address + (int) localPos);
//找到对应的描述地址
var addressUnit =
GetAddresses.SingleOrDefault(
p =>
p.Area == communicateAddress.Area &&
p.Address == communicateAddress.Address + (int) localPos &&
p.SubAddress == (int) ((localPos - (int) localPos)/0.125));
p.SubAddress == subPos);
//如果没有相应地址,跳过
if (addressUnit == null) continue;
//获取写入类型
@@ -362,7 +367,7 @@ namespace Modbus.Net
case MachineSetDataType.Address:
{
//获取要写入的值
var value = values.SingleOrDefault(p => p.Key == address);
var value = values.SingleOrDefault(p => p.Key == address || (address2 != null && p.Key == address2));
//将要写入的值加入队列
datasList.Add(Convert.ChangeType(value.Value / addressUnit.Zoom, dataType));
break;