- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我正在使用 ModBus RTU,并且我正在尝试弄清楚如何计算 CRC16。
我不需要代码示例。我只是对机制很好奇。
我了解到基本的 CRC 是数据字的多项式除法,根据多项式的长度,用零填充。
下面的测试示例应该检查我的基本理解是否正确:
01001011000
1001
0000011000
1001
01010
1001
0011
011
的结果。 .
1111 1111 1001 1011
这是 FF9B
十六进制,对于 CrC16/Modbus 不正确,但对于 CRC16/Bypass 是正确的 0000 0000 0110 0100
这是 0064
在十六进制和不正确。 xor
InitValue with (in CRC16) for the first 16 bits xor
来应用的。在 RefOut 之后就像 InitValue 一样?
最佳答案
让我们一步一步来。您现在知道如何正确计算 CRC-16/BUYPASS,所以我们将从那里开始。
让我们来看看 CRC-16/CCITT-FALSE。该值的初始值不为零,但仍将 RefIn 和 RefOut 设为假,如 CRC-16/BUYPASS。要计算数据的 CRC-16/CCITT-FALSE,您可以使用 0xffff
的 Init 值对数据的前 16 位进行异或运算。这给出了 fe ef C0 03 00 01
。现在做你所知道的,但使用多项式 0x11021
。您将获得表中的内容 0xb53f
。
现在您知道如何应用 Init。下一步是处理 RefIn 和 RefOut 为真。我们将使用 CRC-16/ARC 作为示例。 RefIn 意味着我们反射(reflect)输入的每个字节中的位。 RefOut 意味着我们反射(reflect)了余数的位。输入消息是: 80 08 03 c0 00 80
。除以多项式 0x18005
我们得到 0xb34b
。现在我们反射(reflect)所有这些位(不是每个字节,而是所有 16 位),我们得到 0xd2cd
。这就是您在表中看到的结果。
我们现在有了计算 CRC-16/MODBUS 所需的东西,它有一个非零的初始值 (0xffff
) 和 RefIn 和 RefOut 为真。我们从消息开始,每个字节中的位被反射,前 16 位被反转。那是 7f f7 03 c0 00 80
。除以 0x18005
得到余数 0xb393
。反射(reflect)这些位,我们得到 0xc9cd
,即预期的结果。
Init 的异或在反射后应用,您可以使用该表中的 CRC-16/RIELLO 进行验证。
添加问题的答案:
A) RefIn 与填充位无关。您反射(reflect)了输入字节。但是,在实际计算中,您会反射多项式,这会同时处理两次反射。
B) 是的。
C) 是的,XorOut 是您的独占或最终结果。校验是ASCII中九个字节“123456789”的CRC。
关于modbus - CRC16 (ModBus) - 计算算法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55179867/
将 MODBUS 安装与 Home Assistant 集成 Gavazzi 中的 MODBUS Controller SH2WEB24 Home Assistant Configuration.ya
我正在使用 ModBus RTU,并且我正在尝试弄清楚如何计算 CRC16。 我不需要代码示例。我只是对机制很好奇。 我了解到基本的 CRC 是数据字的多项式除法,根据多项式的长度,用零填充。 下面的
如何通过广播机制获取有效ip范围后判断接入网络的设备是否为modbus设备或如何自动发现接入网关的modbus设备的slave id? 最佳答案 在 Modbus TCP 的上下文中,slaveId
我正在尝试使用 Modbus 协议(protocol)对 Socomec 仪表执行 ping 操作,经过研究,我发现了 NModbus,这是一个 C# 库。我之前从未使用过库或 C#(通常是 Java
我以前从未使用过 modbus。 我有一个 eBox-Wifi Epever 连接到用于太阳能的 MPPT 充电 Controller TRIRON。 我能够让它连接到我的 wifi,现在有了一个可访
我正在开发的设备必须支持 CANopen 和 Modbus(RTU 和 TCP)通信。是否有任何格式的电子数据表(例如 EDS 或 XDD)可用于定义两者? 我尝试使用几种工具(Vector CANe
https://code.google.com/p/stm32modbus/source/browse/#svn%2Ftrunk%2F%20stm32modbus%20--username%20ick
我对 Modbus 通信有点陌生,我已经开始阅读“免费 Modbus”库。现在,我了解了如何使用它来实现 Modbus 通信的从站端,但我似乎无法找到如何在主站端使用该库。例如,我在主机端调用什么函数
我对 Modbus 通信有点陌生,我已经开始阅读“免费 Modbus”库。现在,我了解了如何使用它来实现 Modbus 通信的从站端,但我似乎无法找到如何在主站端使用该库。例如,我在主机端调用什么函数
我们正在构建一个产品,它需要 modbus 通信(rs-485 和 TCP/IP)。代码必须在运行 Linux 的嵌入式设备上运行。我们有以下标准来选择我们将使用的库。 它必须是开源的,因为我们是开源
I am trying to read and write data to modbus via TCP/IP. I can connect to modbus simulator succes
我正在尝试创建一个 modbus 主从模型。我已经使用 pymodbus 编写了 modbus slave,而 modbus master 使用的是 c libmodbus。 Slave 有一堆寄存器
我正在使用 modbus-tk 通过 RS-485 网络通过 Modbus RTU 与设备进行串行通信。 我正在尝试弄清楚如何使用函数 23,READ_WRITE_MULTIPLE_REGISTERS
我有一个支持 ModBus 协议(protocol)的设备,使用“Jamod”尝试连接到该设备并读取寄存器值,收到错误代码 2, 单位配置: 该装置支持通过 RS-485 和以太网接口(interfa
我有一个设置,2 个 SDM120 kWh 电能表以菊花链方式连接在同一个串行端口上(将来我想添加一个 SDM630)。我在 MinimalModbus 通信中找到了“Using multiple i
我正在为一个嵌入式系统玩弄 Modbus(我以前从未处理过这个问题)并且我知道 Modbus 从设备接收到一个范围为 1-247 的地址,但是 Modbus 主设备是否也接收到一个 ID? 如果是这样
我正在寻找一个好的专业 modbus 嗅探器工具来扫描主从通信。请问有人知道吗? 问候 达尼 最佳答案 您可以使用 Wireshark .优秀的工具。支持 Modbus TCP。 关于需要 Modbu
我必须控制带有串行接口(interface)的 modbus 设备。我没有使用 modbus 的经验。但我的简短研究揭示了几个 modbus 库 pymodbus MinimalModbus Modb
要求:通过 Modbus 从 Serial port-1 收集数据,在 Serial port-2 上进行镜像。 我可以在主从之间进行通信,但无法将数据镜像到串行端口 2。请建议我如何实现这一点。 代
我在 MODBUS 项目中工作了 2 个月,现在我发现了一个问题。 我的客户要求我写入一个输入寄存器(地址 30001 到 40000)。 我认为这对我来说不是问题,因为每个 modbus 文档都说
我是一名优秀的程序员,十分优秀!