Skip to content

Commit

Permalink
修正Modbus 打包规则错误
Browse files Browse the repository at this point in the history
  • Loading branch information
cdy816 committed Jun 28, 2021
1 parent a4a1608 commit 1b76806
Show file tree
Hide file tree
Showing 2 changed files with 53 additions and 30 deletions.
49 changes: 30 additions & 19 deletions Run/Driver/Cdy.Spider.ModbusDriver/ModbusIpDriver.cs
Original file line number Diff line number Diff line change
Expand Up @@ -81,25 +81,32 @@ public override void Init()

int clen=-1,cstart=-1, ilen=-1,istart=-1, irlen=-1,irstart=-1, hrlen=-1,hrstart=-1;

foreach(var vv in mCachTags)
foreach (var vv in mCachTags.OrderBy((val) => {
var ss = val.Key.Split(new char[] { ':' });
int addr = 0;
if (ss.Length > 0 && int.TryParse(ss[1], out addr))
return addr;
else return 0;
}))
{
var dtmp = vv.Key.ToLower().Split(new char[] { ':' });
ushort addr = ushort.Parse(dtmp[1]);

if (dtmp[0] ==("cs"))
if (dtmp[0] == ("cs"))
{
//Coil status
if(cstart == -1)
if (cstart == -1)
{
cstart = addr;
clen = 1;
}
else
{
if((addr - cstart + 1)>mData.PackageLen)
if ((addr - cstart + 1) > mData.PackageLen || addr < hrstart)
{
mCoilStatusPackage.Add((ushort)cstart, (ushort)clen);
cstart = -1;
cstart = addr;
clen = 1;
}
else
{
Expand All @@ -108,7 +115,7 @@ public override void Init()
}
if (!mCoilStatusTags.ContainsKey(addr))
{
mCoilStatusTags.Add(addr,vv.Value);
mCoilStatusTags.Add(addr, vv.Value);
}
}
else if (dtmp[0] == ("is"))
Expand All @@ -121,10 +128,11 @@ public override void Init()
}
else
{
if ((addr - istart + 1) > mData.PackageLen)
if ((addr - istart + 1) > mData.PackageLen || addr < hrstart)
{
mInputStatusPackage.Add((ushort)istart, (ushort)ilen);
istart = -1;
istart = addr;
ilen = 1;
}
else
{
Expand All @@ -135,7 +143,7 @@ public override void Init()
mInputStatusTags.Add(addr, vv.Value);

}
else if(dtmp[0] == ("ir"))
else if (dtmp[0] == ("ir"))
{
ushort len = ushort.Parse(dtmp[2]);
//Input registor
Expand All @@ -147,21 +155,22 @@ public override void Init()
}
else
{
if ((addr - irstart + len) > mData.PackageLen)
if ((addr - irstart + len) > mData.PackageLen || addr < hrstart)
{
mInputRegistorPackage.Add((ushort)irstart, (ushort)irlen);
irstart = -1;
irstart = addr;
irlen = len;
}
else
{
irlen = addr - irstart + len;
}
}
if(!mInputRegistorTags.ContainsKey(addr))
mInputRegistorTags.Add(addr,new Tuple<ushort, List<int>>(len,vv.Value));
if (!mInputRegistorTags.ContainsKey(addr))
mInputRegistorTags.Add(addr, new Tuple<ushort, List<int>>(len, vv.Value));

}
else if(dtmp[0] == ("hr"))
else if (dtmp[0] == ("hr"))
{
//holding registor
ushort len = ushort.Parse(dtmp[2]);
Expand All @@ -173,22 +182,23 @@ public override void Init()
}
else
{
if ((addr - hrstart + len) > mData.PackageLen)
if ((addr - hrstart + len) > mData.PackageLen || addr < hrstart)
{
mHoldtRegistorPackage.Add((ushort)hrstart, (ushort)hrlen);
hrstart = -1;
hrstart = addr;
hrlen = len;
}
else
{
hrlen = addr - hrstart + len;
}
}
if(!mHoldRegistorTags.ContainsKey(addr))
mHoldRegistorTags.Add(addr, new Tuple<ushort, List<int>>(len, vv.Value));
if (!mHoldRegistorTags.ContainsKey(addr))
mHoldRegistorTags.Add(addr, new Tuple<ushort, List<int>>(len, vv.Value));
}
}

if(cstart!=-1)
if (cstart != -1)
{
mCoilStatusPackage.Add((ushort)cstart, (ushort)clen);
}
Expand All @@ -208,6 +218,7 @@ public override void Init()
mHoldtRegistorPackage.Add((ushort)hrstart, (ushort)hrlen);
}


mComm.EnableTransparentRead(true);
mMaster = Modbus.Device.ModbusIpMaster.CreateIp(mComm);
}
Expand Down
34 changes: 23 additions & 11 deletions Run/Driver/Cdy.Spider.ModbusDriver/ModbusSeriseDriver.cs
Original file line number Diff line number Diff line change
Expand Up @@ -79,7 +79,13 @@ public override void Init()

int clen = -1, cstart = -1, ilen = -1, istart = -1, irlen = -1, irstart = -1, hrlen = -1, hrstart = -1;

foreach (var vv in mCachTags)
foreach (var vv in mCachTags.OrderBy((val) => {
var ss = val.Key.Split(new char[] { ':' });
int addr = 0;
if (ss.Length > 0 && int.TryParse(ss[1], out addr))
return addr;
else return 0;
}))
{
var dtmp = vv.Key.ToLower().Split(new char[] { ':' });
ushort addr = ushort.Parse(dtmp[1]);
Expand All @@ -94,10 +100,11 @@ public override void Init()
}
else
{
if ((addr - cstart + 1) > mData.PackageLen)
if ((addr - cstart + 1) > mData.PackageLen || addr < hrstart)
{
mCoilStatusPackage.Add((ushort)cstart, (ushort)clen);
cstart = -1;
cstart = addr;
clen = 1;
}
else
{
Expand All @@ -119,10 +126,11 @@ public override void Init()
}
else
{
if ((addr - istart + 1) > mData.PackageLen)
if ((addr - istart + 1) > mData.PackageLen || addr < hrstart)
{
mInputStatusPackage.Add((ushort)istart, (ushort)ilen);
istart = -1;
istart = addr;
ilen = 1;
}
else
{
Expand All @@ -145,17 +153,19 @@ public override void Init()
}
else
{
if ((addr - irstart + len) > mData.PackageLen)
if ((addr - irstart + len) > mData.PackageLen || addr < hrstart)
{
mInputRegistorPackage.Add((ushort)irstart, (ushort)irlen);
irstart = -1;
irstart = addr;
irlen = len;
}
else
{
irlen = addr - irstart + len;
}
}
mInputRegistorTags.Add(addr, new Tuple<ushort, List<int>>(len, vv.Value));
if (!mInputRegistorTags.ContainsKey(addr))
mInputRegistorTags.Add(addr, new Tuple<ushort, List<int>>(len, vv.Value));

}
else if (dtmp[0] == ("hr"))
Expand All @@ -170,17 +180,19 @@ public override void Init()
}
else
{
if ((addr - hrstart + len) > mData.PackageLen)
if ((addr - hrstart + len) > mData.PackageLen || addr < hrstart)
{
mHoldtRegistorPackage.Add((ushort)hrstart, (ushort)hrlen);
hrstart = -1;
hrstart = addr;
hrlen = len;
}
else
{
hrlen = addr - hrstart + len;
}
}
mHoldRegistorTags.Add(addr, new Tuple<ushort, List<int>>(len, vv.Value));
if (!mHoldRegistorTags.ContainsKey(addr))
mHoldRegistorTags.Add(addr, new Tuple<ushort, List<int>>(len, vv.Value));
}
}

Expand Down

0 comments on commit 1b76806

Please sign in to comment.