mirror of
				https://gitee.com/ThingsGateway/ThingsGateway.git
				synced 2025-10-31 15:43:59 +08:00 
			
		
		
		
	修复写入s7协议 bit值 偏移错误(以byte数据块为准)
This commit is contained in:
		| @@ -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; | ||||||
|   | |||||||
| @@ -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 | ||||||
|   | |||||||
		Reference in New Issue
	
	Block a user
	 2248356998 qq.com
					2248356998 qq.com