修复写入s7协议 bit值 偏移错误(以byte数据块为准)

This commit is contained in:
2248356998 qq.com
2023-07-08 17:01:44 +08:00
parent 5ab9b01879
commit 55890008d1
2 changed files with 34 additions and 7 deletions

View File

@@ -33,7 +33,10 @@ namespace ThingsGateway.Foundation.Adapter.Siemens
/// 数据块代码 /// 数据块代码
/// </summary> /// </summary>
public byte DataCode { get; set; } public byte DataCode { get; set; }
/// <summary>
/// bit位偏移
/// </summary>
public byte BitCode { get; set; }
/// <summary> /// <summary>
/// DB块数据信息 /// DB块数据信息
/// </summary> /// </summary>
@@ -48,9 +51,17 @@ namespace ThingsGateway.Foundation.Adapter.Siemens
} }
string[] strArray = address.Split('.'); string[] strArray = address.Split('.');
//return (Convert.ToInt32(strArray[0]) * 8) + Convert.ToInt32(strArray[1]); return Convert.ToInt32(strArray[0]) * 8;
//注意这里实际逻辑报文中不会传输读取bit全部都是byte以上所以不需要bit位并且返回数据需要自行解析bit值 }
return (Convert.ToInt32(strArray[0]) * 8);
public static byte GetBitCode(string address)
{
if (address.IndexOf('.') < 0)
{
return 0;
}
string[] strArray = address.Split('.');
return Convert.ToByte(strArray[1]);
} }
@@ -73,10 +84,12 @@ namespace ThingsGateway.Foundation.Adapter.Siemens
if (address.StartsWith("AIX") || address.StartsWith("AIB") || address.StartsWith("AIW") || address.StartsWith("AID")) if (address.StartsWith("AIX") || address.StartsWith("AIB") || address.StartsWith("AIW") || address.StartsWith("AID"))
{ {
s7AddressData.AddressStart = GetAddressStart(address.Substring(3)); s7AddressData.AddressStart = GetAddressStart(address.Substring(3));
s7AddressData.BitCode = GetBitCode(address.Substring(3));
} }
else else
{ {
s7AddressData.AddressStart = GetAddressStart(address.Substring(2)); s7AddressData.AddressStart = GetAddressStart(address.Substring(2));
s7AddressData.BitCode = GetBitCode(address.Substring(2));
} }
} }
else if (address.StartsWith("AQ")) else if (address.StartsWith("AQ"))
@@ -85,10 +98,12 @@ namespace ThingsGateway.Foundation.Adapter.Siemens
if (address.StartsWith("AQX") || address.StartsWith("AQB") || address.StartsWith("AQW") || address.StartsWith("AQD")) if (address.StartsWith("AQX") || address.StartsWith("AQB") || address.StartsWith("AQW") || address.StartsWith("AQD"))
{ {
s7AddressData.AddressStart = GetAddressStart(address.Substring(3)); s7AddressData.AddressStart = GetAddressStart(address.Substring(3));
s7AddressData.BitCode = GetBitCode(address.Substring(3));
} }
else else
{ {
s7AddressData.AddressStart = GetAddressStart(address.Substring(2)); s7AddressData.AddressStart = GetAddressStart(address.Substring(2));
s7AddressData.BitCode = GetBitCode(address.Substring(2));
} }
} }
else if (address[0] == 'I') else if (address[0] == 'I')
@@ -97,10 +112,12 @@ namespace ThingsGateway.Foundation.Adapter.Siemens
if (address.StartsWith("IX") || address.StartsWith("IB") || address.StartsWith("IW") || address.StartsWith("ID")) if (address.StartsWith("IX") || address.StartsWith("IB") || address.StartsWith("IW") || address.StartsWith("ID"))
{ {
s7AddressData.AddressStart = GetAddressStart(address.Substring(2)); s7AddressData.AddressStart = GetAddressStart(address.Substring(2));
s7AddressData.BitCode = GetBitCode(address.Substring(2));
} }
else else
{ {
s7AddressData.AddressStart = GetAddressStart(address.Substring(1)); s7AddressData.AddressStart = GetAddressStart(address.Substring(1));
s7AddressData.BitCode = GetBitCode(address.Substring(1));
} }
} }
else if (address[0] == 'Q') else if (address[0] == 'Q')
@@ -109,10 +126,12 @@ namespace ThingsGateway.Foundation.Adapter.Siemens
if (address.StartsWith("QX") || address.StartsWith("QB") || address.StartsWith("QW") || address.StartsWith("QD")) if (address.StartsWith("QX") || address.StartsWith("QB") || address.StartsWith("QW") || address.StartsWith("QD"))
{ {
s7AddressData.AddressStart = GetAddressStart(address.Substring(2)); s7AddressData.AddressStart = GetAddressStart(address.Substring(2));
s7AddressData.BitCode = GetBitCode(address.Substring(2));
} }
else else
{ {
s7AddressData.AddressStart = GetAddressStart(address.Substring(1)); s7AddressData.AddressStart = GetAddressStart(address.Substring(1));
s7AddressData.BitCode = GetBitCode(address.Substring(1));
} }
} }
else if (address[0] == 'M') else if (address[0] == 'M')
@@ -121,10 +140,12 @@ namespace ThingsGateway.Foundation.Adapter.Siemens
if (address.StartsWith("MX") || address.StartsWith("MB") || address.StartsWith("MW") || address.StartsWith("MD")) if (address.StartsWith("MX") || address.StartsWith("MB") || address.StartsWith("MW") || address.StartsWith("MD"))
{ {
s7AddressData.AddressStart = GetAddressStart(address.Substring(2)); s7AddressData.AddressStart = GetAddressStart(address.Substring(2));
s7AddressData.BitCode = GetBitCode(address.Substring(2));
} }
else else
{ {
s7AddressData.AddressStart = GetAddressStart(address.Substring(1)); s7AddressData.AddressStart = GetAddressStart(address.Substring(1));
s7AddressData.BitCode = GetBitCode(address.Substring(1));
} }
} }
else if (address[0] == 'D' || address.Substring(0, 2) == "DB") else if (address[0] == 'D' || address.Substring(0, 2) == "DB")
@@ -139,16 +160,19 @@ namespace ThingsGateway.Foundation.Adapter.Siemens
} }
s7AddressData.AddressStart = GetAddressStart(address1); s7AddressData.AddressStart = GetAddressStart(address1);
s7AddressData.BitCode = GetBitCode(address1);
} }
else if (address[0] == 'T') else if (address[0] == 'T')
{ {
s7AddressData.DataCode = (byte)S7Area.TM; s7AddressData.DataCode = (byte)S7Area.TM;
s7AddressData.AddressStart = GetAddressStart(address.Substring(1), true); s7AddressData.AddressStart = GetAddressStart(address.Substring(1), true);
s7AddressData.BitCode = GetBitCode(address.Substring(1));
} }
else if (address[0] == 'C') else if (address[0] == 'C')
{ {
s7AddressData.DataCode = (byte)S7Area.CT; s7AddressData.DataCode = (byte)S7Area.CT;
s7AddressData.AddressStart = GetAddressStart(address.Substring(1), true); s7AddressData.AddressStart = GetAddressStart(address.Substring(1), true);
s7AddressData.BitCode = GetBitCode(address.Substring(1));
} }
else else
{ {
@@ -162,10 +186,12 @@ namespace ThingsGateway.Foundation.Adapter.Siemens
if (address.StartsWith("VB") || address.StartsWith("VW") || address.StartsWith("VD") || address.StartsWith("VX")) if (address.StartsWith("VB") || address.StartsWith("VW") || address.StartsWith("VD") || address.StartsWith("VX"))
{ {
s7AddressData.AddressStart = GetAddressStart(address.Substring(2)); s7AddressData.AddressStart = GetAddressStart(address.Substring(2));
s7AddressData.BitCode = GetBitCode(address.Substring(2));
} }
else else
{ {
s7AddressData.AddressStart = GetAddressStart(address.Substring(1)); s7AddressData.AddressStart = GetAddressStart(address.Substring(1));
s7AddressData.BitCode = GetBitCode(address.Substring(1));
} }
} }
} }
@@ -185,6 +211,7 @@ namespace ThingsGateway.Foundation.Adapter.Siemens
} }
AddressStart = from.Content.AddressStart; AddressStart = from.Content.AddressStart;
BitCode = from.Content.BitCode;
Length = from.Content.Length; Length = from.Content.Length;
DataCode = from.Content.DataCode; DataCode = from.Content.DataCode;
DbBlock = from.Content.DbBlock; DbBlock = from.Content.DbBlock;

View File

@@ -231,9 +231,9 @@ namespace ThingsGateway.Foundation.Adapter.Siemens
numArray[25] = (byte)(address.DbBlock / 256U); numArray[25] = (byte)(address.DbBlock / 256U);
numArray[26] = (byte)(address.DbBlock % 256U); numArray[26] = (byte)(address.DbBlock % 256U);
numArray[27] = (byte)address.DataCode; numArray[27] = (byte)address.DataCode;
numArray[28] = (byte)(address.AddressStart / 256 / 256); numArray[28] = (byte)((address.AddressStart + address.BitCode) / 256 / 256);
numArray[29] = (byte)(address.AddressStart / 256); numArray[29] = (byte)((address.AddressStart + address.BitCode) / 256);
numArray[30] = (byte)(address.AddressStart % 256); numArray[30] = (byte)((address.AddressStart + address.BitCode) % 256);
//后面跟的是写入的数据信息 //后面跟的是写入的数据信息
numArray[31] = 0; numArray[31] = 0;
numArray[32] = 3;//Bit:3;Byte:4;Counter或者Timer:9 numArray[32] = 3;//Bit:3;Byte:4;Counter或者Timer:9