如何在java中计算Modbus ASCII的纵向冗余校验(LRC)?
我想用java计算Modbus ascii协议的LRC。我在网上搜索了解决方案,但没有找到任何解决方案。
我用这个在线lrc计算器计算lrc http://www.metools.info/encoding/ecod127.html
我在StackOverflow上找到了一个解决方案,那就是How can I calculate Longitudinal Redundancy Check (LRC)?
byte[] byte = {31, 30, 31, 30, 31, 31}
public static byte calculateLRC(byte[] bytes)
{
int LRC = 0;
for (int i = 0; i < bytes.Length; i++)
{
LRC -= bytes[i];
}
return (byte)LRC;
}
正如预期的那样,我应该得到的LRC是"DC“,但我得到了72作为输出。
谁知道如何计算modbus ascii协议的LRC。提前感谢:)
发布于 2021-10-26 01:26:18
72是{31,30,31,30,31,31}的正确Modbus ASCII LRC。它作为两个字符"48“(十六进制的72)进入消息。参见https://www.simplymodbus.ca/ASCII.htm。
相反,如果我计算{49,48,49,48,49,49}的LRC,我得到220,或您期望的0xDC。
您的问题是,您认为您在Java代码中放入了十六进制,但它被解释为十进制。你的意思可能是:
byte[] byte = {0x31, 0x30, 0x31, 0x30, 0x31, 0x31};
那么你将得到220美元。
https://stackoverflow.com/questions/69712510
复制相似问题