Browse Source

修正Modbus地址索引

pull/4/head
大石头 3 years ago
parent
commit
99e02fca84
  1. 2
      XCoder/CrazyCoder.csproj
  2. 7
      XCoder/XNet/FrmModbusMaster.cs
  3. 12
      XCoder/XNet/FrmModbusSlave.cs

2
XCoder/CrazyCoder.csproj

@ -73,7 +73,7 @@
<Version>4.0.2022.401</Version>
</PackageReference>
<PackageReference Include="NewLife.Stardust">
<Version>2.0.2022.321-beta0910</Version>
<Version>2.0.2022.404</Version>
</PackageReference>
<PackageReference Include="NewLife.WinCore" Version="9.0.2022.401" />
<PackageReference Include="NewLife.XCode">

7
XCoder/XNet/FrmModbusMaster.cs

@ -151,15 +151,16 @@ namespace XNet
var data = _modbus.Read(code, host, address, count);
if (data != null && data.Length > 0)
{
// 按照寄存器遍历,每个寄存器2字节
var dt = _data;
var len = dt.Count;
for (var i = 0; i < count * 2 && i < data.Length; i += 2)
for (var i = 0; i < count && i < data.Length / 2; i++)
{
var addr = address + i;
var unit = dt.FirstOrDefault(e => e.Address == addr);
if (unit == null) dt.Add(unit = new RegisterUnit { Address = addr });
unit.Value = data.ToUInt16(i, true);
unit.Value = data.ToUInt16(i * 2, true);
}
Invoke(() =>
@ -236,7 +237,7 @@ namespace XNet
private void btnAdd_Click(Object sender, EventArgs e)
{
var unit = new RegisterUnit();
if (_data.Count > 0) unit.Address = _data[_data.Count - 1].Address + 2;
if (_data.Count > 0) unit.Address = _data[^1].Address + 1;
_data.Add(unit);
dgv.DataSource = null;

12
XCoder/XNet/FrmModbusSlave.cs

@ -137,25 +137,25 @@ namespace XNet
case "0x0000":
for (var i = 0; i < count; i++)
{
list.Add(new RegisterUnit { Address = addr + i * 2, Value = 0 });
list.Add(new RegisterUnit { Address = addr + i, Value = 0 });
}
break;
case "0x7777":
for (var i = 0; i < count; i++)
{
list.Add(new RegisterUnit { Address = addr + i * 2, Value = 0x7777 });
list.Add(new RegisterUnit { Address = addr + i, Value = 0x7777 });
}
break;
case "0xFFFF":
for (var i = 0; i < count; i++)
{
list.Add(new RegisterUnit { Address = addr + i * 2, Value = 0xFFFF });
list.Add(new RegisterUnit { Address = addr + i, Value = 0xFFFF });
}
break;
case "递增":
for (var i = 0; i < count; i++)
{
list.Add(new RegisterUnit { Address = addr + i * 2, Value = (UInt16)i });
list.Add(new RegisterUnit { Address = addr + i, Value = (UInt16)i });
}
break;
case "静态随机":
@ -163,7 +163,7 @@ namespace XNet
default:
for (var i = 0; i < count; i++)
{
list.Add(new RegisterUnit { Address = addr + i * 2, Value = (UInt16)Rand.Next(UInt16.MaxValue) });
list.Add(new RegisterUnit { Address = addr + i, Value = (UInt16)Rand.Next(UInt16.MaxValue) });
}
break;
}
@ -275,7 +275,7 @@ namespace XNet
private void btnAdd_Click(Object sender, EventArgs e)
{
var unit = new RegisterUnit();
if (_data.Count > 0) unit.Address = _data[_data.Count - 1].Address + 2;
if (_data.Count > 0) unit.Address = _data[^1].Address + 1;
_data.Add(unit);
dgv.DataSource = null;

Loading…
Cancel
Save