9

使用 C#.net,WPF 应用程序。我要连接到设备(MODBUS 协议),我必须计算 CRC(CRC16)。我使用的函数计算正常的 crc16 并且值是正确的,但我想要 CRC16(modbus) 的值之一。

帮我整理一下。

4

3 回答 3

7

网上有很多关于modbus协议的crc16计算的资源。

例如:

http://www.ccontrolsys.com/w/How_to_Compute_the_Modbus_RTU_Message_CRC

http://www.modbustools.com/modbus_crc16.htm

我认为在 c# 中翻译该代码应该很简单。

于 2013-08-30T07:07:52.817 回答
3

你可以使用这个库:

https://github.com/meetanthony/crccsharp

它包含几个 CRC 算法,包括 ModBus。

用法:

下载源代码并将其添加到您的项目中:

public byte[] CalculateCrc16Modbus(byte[] bytes)
{
  CrcStdParams.StandartParameters.TryGetValue(CrcAlgorithms.Crc16Modbus, out Parameters crc_p);
  Crc crc = new Crc(crc_p);
  crc.Initialize();
  var crc_bytes = crc.ComputeHash(bytes);
  return crc_bytes;
}
于 2020-03-02T06:28:46.607 回答
0

Boost CRC(由于标题而添加)

auto v = std::vector< std::uint8_t > { 0x12, 0x34, 0x56, 0x78 };
auto result = boost::crc_optimal<16, 0x8005, 0xFFFF, 0, true, true> {};
result.process_bytes(v.data(), v.size());
于 2021-12-03T21:46:48.153 回答