Функция для вычисления значения CRC16 (Modbus)

Используя C # .net, приложение WPF. Я собираюсь подключиться к устройству (протокол MODBUS), мне нужно вычислить CRC (CRC16). Функция, которую я использую, вычисляет нормальный crc16, и значение правильное, но мне нужно значение для CRC16 (modbus).

Помогите разобраться.


person user2720620    schedule 30.08.2013    source источник
comment
Вы про значение из кадра ModBus RTU? Вы хотите это извлечь?   -  person Levente Kurusa    schedule 30.08.2013


Ответы (2)


В Интернете есть много ресурсов о вычислении crc16 для протокола Modbus.

Например:

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

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

Я думаю, что перевод этого кода на C # должен быть простым.

person Alberto    schedule 30.08.2013

Вы можете использовать эту библиотеку:

https://github.com/meetanthony/crccsharp

Он содержит несколько алгоритмов CRC, включая ModBus.

Использование:

Загрузите исходный код и добавьте его в свой проект:

public byte[] CalculateCrc16Modbus(byte[] bytes)
{
  CrcStdParams.StandartParameters.TryGetValue(CrcAlgorithms.Crc16Modbus, out Parameter crc_p)
  Crc crc = new Crc(crc_p);
  crc.Initialize();
  var crc_bytes = crc.ComputeHash(bytes);
  return crc_bytes;
}
person Mahdi Ataollahi    schedule 02.03.2020