当前位置: 首页 > 知识库问答 >
问题:

Modbus功能代码1&PIC微Contoller的crc检查

廖招
2023-03-14

我需要帮助计算功能代码1的modbus CRC检查。即读取线圈寄存器。我有功能代码3的CRC检查示例代码,即模拟输入的保持寄存器。

# Read Coil Status (FC=01)

## Request

该命令从地址为17的从设备请求分立线圈#20至56的通/关状态。

11 01 001 3 002 5 0E84

  • 11:从机地址(17=11十六进制)
  • 01:功能代码(读取线圈状态)
  • 0013:要读取的第一个线圈的数据地址。(线圈20-1=19=13十六进制)
  • 0025:请求的线圈总数。(线圈20至56=37=25十六进制)
  • 0e84:用于错误检查的CRC(循环冗余检查)。

11 01 05 CD6BB20E1B 45E6

    null
  • 11:从机地址(17=11十六进制)
  • 03:功能代码(读取模拟输出保持寄存器)
  • 006b:请求的第一个寄存器的数据地址。(40108-40001=107=6B十六进制)
  • 0003:请求的寄存器总数。(读取3个寄存器40108至40110)
  • 7687:用于错误检查的CRC(循环冗余检查)。

11 03 06 AE41 5652 4340 49AD

  • 11:从机地址(17=11十六进制)
  • 03:功能代码(读取模拟输出保持寄存器)
  • 06:后面的数据字节数(3个寄存器x每个2字节=6字节)
  • AE41:寄存器40108的内容
  • 5652:寄存器40109的内容
  • 4340:寄存器40110的内容
  • 49ad:CRC(循环冗余检查)。

读线圈寄存器识别

unsigned int crc_fn(unsigned char *dpacket,unsigned int len) { // CRC Function(Error calcualtion)
    unsigned int crc = 0xffff,poly = 0xa001;
    unsigned int i=0;

    for(i=0; i<len; i++) {
        crc^= dpacket[i];
        for(j=0; j<8; j++) {
            if(crc & 0x01) {
                crc >>= 1;
                crc ^= poly;
            } else
                crc >>= 1;
        }
    }
    return (crc);
}

共有1个答案

贲骏喆
2023-03-14

CRC通常首先附加到消息的最高有效字节。您需要交换两行代码,在低阶字节之前发送16位crc的高阶字节。尝试此更改:

                Serial_1_Send_byte((unsigned char)(crc1>>8));
                Serial_1_Send_byte((unsigned char)crc1);
 类似资料:
  • 因此,我的问题是:如何从整数结果到所需的双十六进制结果?我试了几个选择,都没有成功。 注意:我使用的是Qt,所以如果有人能找到实现QByteArray或其他Qt友好代码的解决方案,我会很高兴的。无论哪种方式,不使用Qt、C或C++的解决方案都是无用的:P

  • 我有字符串:。我需要计算这个字符串的CRC。 我有一个计算CRC的函数: 我想将一个字符串强制转换为ushort数组: 但是返回给我的是这样一个数组:。 请告诉我为了正确计算CRC我应该做些什么。

  • 我目前正在建立步进电机控制器和计算机之间的通信,用C#编写一个应用程序(这是我第一次使用这种编程语言,虽然我不是计算机科学家,而是工业工程师,但我肯定有一些优化功能的方法,我不知道,关于这一点的任何建议也将非常感谢)。因此,我一直使用控制器必须与其通信的RS-485,并实现了一个生成所需CRC(循环冗余校验)字节的算法。 使用附加的测试数组和多项式0xA001的预期结果对于CRC_Register

  • 我需要帮助试图验证CRC-16值(也需要帮助与CRC-32值)。我试图坐下来了解CRC是如何工作的,但我一片空白。 更多信息如下: --编辑-- 我已经包括了更多的信息。我引用的文档是TIA-102.BAAA-A(来自TIA标准)。以下是文档陈述的内容(试图尽可能避免侵犯版权): FM(x)的系数被放置在CRC字段中,其中CRC的第0个八位元组的MSB对应于x^31,而CRC的第3个八位元组的LS

  • 本文向大家介绍微信小程序收藏功能的实现代码,包括了微信小程序收藏功能的实现代码的使用技巧和注意事项,需要的朋友参考一下 需求 点击收藏后显示已收藏,在另一个页面出现目前点击收藏的项目 需要解决的问题 点击收藏后需要显示已收藏,并且文字状态改变 另一个页面如何知道你点击了收藏,并且获得你点击收藏的数据 如何解决? 数据状态绑定,并且由状态控制样式(三元运算符) 缓存(setStorageSync,g

  • 本文向大家介绍微信小程序聊天功能的示例代码,包括了微信小程序聊天功能的示例代码的使用技巧和注意事项,需要的朋友参考一下 效果 初始化滚动条高度 数据格式 wxml对话框 wxml底部输入框 css js 以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持呐喊教程。