首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >如何在java中计算Modbus ASCII的纵向冗余校验(LRC)?

如何在java中计算Modbus ASCII的纵向冗余校验(LRC)?
EN

Stack Overflow用户
提问于 2021-10-25 17:40:04
回答 1查看 337关注 0票数 0

如何在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)?

代码语言:javascript
运行
复制
 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。提前感谢:)

EN

回答 1

Stack Overflow用户

发布于 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代码中放入了十六进制,但它被解释为十进制。你的意思可能是:

代码语言:javascript
运行
复制
byte[] byte = {0x31, 0x30, 0x31, 0x30, 0x31, 0x31};

那么你将得到220美元。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/69712510

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档