头发掉光光555 2023-07-04 10:22 采纳率: 0%
浏览 61
已结题

请帮我看一下 ModBus RTU 写的是不是有错误

img


我读取净重 01 04 00 00 00 01 CRC 但是串口助手给我反馈数据格式不对 ,为什么仪表给我反馈的数据一直是FF啊

  • 写回答

9条回答 默认 最新

  • CSDN-Ada助手 CSDN-AI 官方账号 2023-07-04 12:04
    关注
    获得1.95元问题酬金
    • 你可以参考下这个问题的回答, 看看是否对你有帮助, 链接: https://ask.csdn.net/questions/7779175
    • 这篇博客你也可以参考下:Modbus-RTU查表法的CRC校验
    • 除此之外, 这篇博客: Modbus 协议基本原理中的 5.1.2、RTU模式的CRC校验 部分也许能够解决你的问题, 你可以仔细阅读以下内容或跳转源博客中阅读:
    • 在 RTU 模式包含一个对全部报文内容执行的,基于循环冗余校验 (CRC - Cyclical Redundancy Checking) 算法的错误检验域。CRC 域检验整个报文的内容。不管报文有无奇偶校验,均执行此检验。

      CRC 包含由两个 8 位字节组成的一个 16 位值。

      CRC 域作为报文的最后的域附加在报文之后。计算后,首先附加低字节,然后是高字节。CRC 高字
      节为报文发送的最后一个子节。

      附加在报文后面的 CRC 的值由发送设备计算。接收设备在接收报文时重新计算 CRC 的值,并将计
      算结果于实际接收到的 CRC 值相比较。如果两个值不相等,则为错误。

      CRC 的计算, 开始对一个 16 位寄存器预装全 1。 然后将报文中的连续的 8 位子节对其进行后续的计
      算。只有字符中的 8 个数据位参与生成 CRC 的运算,起始位,停止位和校验位不参与 CRC 计算。

      CRC 的生成过程中, 每个 8–位字符与寄存器中的值异或。然后结果向最低有效位(LSB)方向移动
      (Shift) 1 位,而最高有效位(MSB)位置充零。 然后提取并检查 LSB:如果 LSB 为 1, 则寄存器中的值与一个固定的预置值异或;如果 LSB 为 0, 则不进行异或操作。

      这个过程将重复直到执行完 8 次移位。完成最后一次(第 8 次)移位及相关操作后,下一个 8 位字节与寄存器的当前值异或,然后又同上面描述过的一样重复 8 次。当所有报文中子节都运算之后得到的寄存器的最终值,就是 CRC。

    • 您还可以看一下 许孝刚老师的Modbus协议讲解及实现课程中的 Modbus RTU帧格式小节, 巩固相关知识点
    • 以下回答由chatgpt基于相关博客总结生成:

      根据给出的参考资料,无法得出具体的ModBus RTU代码是否正确的判断。ModBus RTU是一种通信协议,其中包含设备地址、功能代码、数据和CRC校验等部分。要确认代码是否正确,需要确保各个部分的格式和内容的正确性。

      根据参考资料的段落7,我们可以看到一条典型的RTU数据帧的格式。首先,起始位和结束位用于分割不同的数据帧。然后是设备地址,用于确保通信的目标设备。再接下来是功能代码,用于指示需要执行的操作。最后是数据和CRC校验。

      对于给出的ModBus RTU串口通信码"01 04 00 00 00 01 CRC",我们可以根据参考资料中的说明对其进行验证。

      首先,第一个字节"01"是设备地址,用于指示通信的目标设备。根据参考资料的段落4中的说明,你需要在ModBus配置中设置正确的设备地址。检查你的配置中设备地址是否正确。

      接下来,第二个字节"04"是功能代码,用于指示需要执行的操作。根据参考资料的段落7中的说明,你需要根据你的实际需求选择正确的功能代码。检查你的功能代码是否正确。

      然后,接下来的"00 00"是数据部分,根据参考资料的段落7中的说明,根据你的实际需求填入正确的数据。

      最后,最后两个字节"CRC"是CRC校验码,用于验证数据的正确性。根据参考资料的段落2中的CRC计算过程,你可以对整个数据帧进行CRC计算,然后检查计算结果和你的CRC校验码是否一致。

      通过以上的验证步骤,你可以判断你的ModBus RTU串口通信码是否正确。如果在验证过程中发现任何错误或不确定之处,你可以参考更详细的ModBus RTU资料或咨询专业人士来解决问题。

    评论

报告相同问题?

问题事件

  • 系统已结题 7月12日
  • 修改了问题 7月6日
  • 修改了问题 7月4日
  • 赞助了问题酬金15元 7月4日
  • 展开全部

悬赏问题

  • ¥15 有偿求苍穹外卖环境配置
  • ¥15 代码在keil5里变成了这样怎么办啊,文件图像也变了,
  • ¥20 Ue4.26打包win64bit报错,如何解决?(语言-c++)
  • ¥15 clousx6整点报时指令怎么写
  • ¥30 远程帮我安装软件及库文件
  • ¥15 关于#自动化#的问题:如何通过电脑控制多相机同步拍照或摄影(相机或者摄影模组数量大于60),并将所有采集的照片或视频以一定编码规则存放至规定电脑文件夹内
  • ¥20 深信服vpn-2050这台设备如何配置才能成功联网?
  • ¥15 Arduino的wifi连接,如何关闭低功耗模式?
  • ¥15 Android studio 无法定位adb是什么问题?
  • ¥15 C#连接不上服务器,