【问题标题】:Function to calculate CRC16 (Modbus) value计算 CRC16 (Modbus) 值的函数
【发布时间】:2013-09-02 19:35:01
【问题描述】:

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

帮我整理一下。

【问题讨论】:

  • 您的意思是来自 ModBus RTU 帧的值?你想提取那个?

标签: c# modbus crc16


【解决方案1】:

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

例如:

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

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

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

【讨论】:

    【解决方案2】:

    你可以使用这个库:

    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;
    }
    

    【讨论】:

      【解决方案3】:

      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());
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2021-11-20
        • 2016-08-23
        • 1970-01-01
        • 2012-05-20
        • 2012-06-22
        • 1970-01-01
        • 2013-10-21
        • 2020-10-27
        相关资源
        最近更新 更多