我需要了解设备如何计算以下 ASTM 字符串的校验和
<STX2P|1|||||||||||||||||||||||||||||||||<CR><ETX>3B<CR><LF>
该字符串显示校验和为“3B”,而我试图通过下面的代码查找校验和
public static string ConvertStringToHex(string asciiString)
{
string hex = "";
foreach (char c in asciiString)
{
int tmp = c;
hex += String.Format("{0:x2}", (uint)System.Convert.ToUInt32(tmp.ToString()));
}
return hex;
}
但我得到“3C”作为输出。请帮助我如何找到校验和。
最佳答案
检查此链接:https://www.hendricksongroup.com/code_003.aspx 它解释得很好。确保在 STX 之后使用加载数据并包括 ETX。 例如。在下面的行中:
<STX><Frame Data><CR><ETX><CHECKSUM 1><CHECKSUM 2><CR><LF>
使用这部分数据来计算MOD 256校验和
<Frame Data><CR><ETX>
(将所有加载字符相加并以 256 为模)
编辑
很少有网站可以计算 mod 256(以及其他)校验和。例如:https://www.scadacore.com/tools/programming-calculators/online-checksum-calculator/
我们以问题中使用的字符串为例:
<STX2P|1|||||||||||||||||||||||||||||||||<CR><ETX>3B<CR><LF>
由于字符串不正确,STX后没有结束>,w更正它,尽管它与校验和计算无关。
<STX>2P|1|||||||||||||||||||||||||||||||||<CR><ETX>3B<CR><LF>
现在,ASTM 1381中的校验和使用校验和之后和之前的数据,包括,这部分:
P|1|||||||||||||||||||||||||||||||||<CR><ETX>
让我们转到该站点并将字符串粘贴到“ASCII 输入”文本字段中。由于它们是二进制数据的替换,无法显示为 ASCII 文本,REMOVE <CR><ETX>
然后按按钮AnalyseDataAscii。您将在下面看到计算的校验和,这是错误的,因为数据丢失 <CR><ETX>
。忽略第一个校验和。
十六进制输入文本字段也已更新并以十六进制表示法显示二进制数据。因此添加 <CR><ETX>
的数据在十六进制输入中的十六进制字符串的末尾。在十六进制中,CR 为 0D,ETX 为 03,因此添加 0D03,然后按另一个按钮 AnalyseDataHex:
现在您可以看到正确的校验和,确实是 3B,与消息示例中的完全相同。 显然,问题作者提供的代码使用了不正确的字符串部分,并且没有用十六进制表示替换占位符。
关于c# - ASTM 校验和计算,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40838240/