Реклама на сайте English version  DatasheetsDatasheets

KAZUS.RU - Электронный портал. Принципиальные схемы, Datasheets, Форум по электронике

Новости электроники Новости Литература, электронные книги Литература Документация, даташиты Документация Поиск даташитов (datasheets)Поиск PDF
  От производителей
Новости поставщиков
В мире электроники

  Сборник статей
Электронные книги
FAQ по электронике

  Datasheets
Поиск SMD
Он-лайн справочник

Принципиальные схемы Схемы Каталоги программ, сайтов Каталоги Общение, форум Общение Ваш аккаунтАккаунт
  Каталог схем
Избранные схемы
FAQ по электронике
  Программы
Каталог сайтов
Производители электроники
  Форумы по электронике
Помощь проекту

Микроконтроллеры, АЦП, память и т.д Темы касающиеся микроконтроллеров разных производителей, памяти, АЦП/ЦАП, периферийных модулей...

Ответ
Опции темы
Непрочитано 21.05.2021, 06:32   #1
vladh
Почётный гражданин KAZUS.RU
 
Регистрация: 03.12.2004
Сообщений: 1,306
Сказал спасибо: 337
Сказали Спасибо 76 раз(а) в 33 сообщении(ях)
vladh на пути к лучшему
По умолчанию CRC16 Modbus отличие

Уважаемые форумчане, подскажите. Возникла необходимость написать написать код общения моего устройства с другим по протоколу Модбас. Но в это протоколе есть т.н. Циклический избыточный код или CRC16. Я пробую написать функцию функцию подсчета этого CRC16 и сравниваю результат её работы с этим онлайн калькулятором: https://www.lammertbies.nl/comm/info/crc-calculation . Но вот беда. В этом калькуляторе я вижу множество различных CRC. И я никак не могу понять чем отличается обычный CRC16 от CRC16 Modbus? Кто знает подскажите. Википедия мне не помогла.
Реклама:
vladh вне форума   Ответить с цитированием
Непрочитано 21.05.2021, 08:17   #2
raxp
Почётный гражданин KAZUS.RU
 
Регистрация: 28.05.2010
Сообщений: 1,118
Сказал спасибо: 150
Сказали Спасибо 604 раз(а) в 310 сообщении(ях)
raxp на пути к лучшему
По умолчанию Re: CRC16 Modbus отличие

В помощь разработчику: 5 реализаций Modbus CRC +CRC16 и 14 заповедей RS-485
Удаленный промышленный терминал-индикатор по Modbus RTU
Промышленный MODBUS/M-Link/OPC.WEB сервер-шлюз терминала оператора

Отличия в типах проверки CRC и используемых полиномах. Если вы делаете устройство для поддержки в тех же промышленных SCADA, то стоит обратить внимание на поддерживаемые ими протоколы и возможно предоставлять со своим устройством и OPC сервер.
__________________
Белорусский журнал «Радиолюбитель»
Youtube LaboratoryW
UR3QQJ
raxp вне форума   Ответить с цитированием
Эти 2 пользователя(ей) сказали Спасибо raxp за это сообщение:
ForcePoint (21.05.2021), mtit (21.05.2021)
Непрочитано 21.05.2021, 08:51   #3
vladh
Почётный гражданин KAZUS.RU
 
Регистрация: 03.12.2004
Сообщений: 1,306
Сказал спасибо: 337
Сказали Спасибо 76 раз(а) в 33 сообщении(ях)
vladh на пути к лучшему
По умолчанию Re: CRC16 Modbus отличие

Сообщение от raxp Посмотреть сообщение
Если вы делаете устройство для поддержки в тех же промышленных SCADA, то стоит обратить внимание на поддерживаемые ими протоколы и возможно предоставлять со своим устройством и OPC сервер.
Простите, но я не совсем понял Ваш ответ. Вы имеете ввиду что различные производители устройств, которые общаются по протоколу Modbus могут в своих изделиях использовать разные полиномы подсчета CRC16? Но что же тогда означает CRC16 Modbus. Я решил, что это некоторый стандарт, который используется именно в этих протоколах. Так например мне надо конкретно связываться с частотником Hyundai N700E, но в руководстве на этот аппарат ничего не говорится о расчете CRC16.
vladh вне форума   Ответить с цитированием
Непрочитано 21.05.2021, 09:07   #4
mtit
Почётный гражданин KAZUS.RU
 
Аватар для mtit
 
Регистрация: 21.03.2007
Адрес: М.(осква)
Сообщений: 4,329
Сказал спасибо: 2,148
Сказали Спасибо 1,742 раз(а) в 991 сообщении(ях)
mtit на пути к лучшему
По умолчанию Re: CRC16 Modbus отличие

vladh, есть какое либо устройство с Модбасом? Запускаешь любую СКАДУ - опрашиваешь устройство. Чем нибудь смотришь посылки (в некоторых СКАДАх - эта опция есть, можно простыми терминальными программами).
Выбипаешь на сайте ту реализацию, где контрольные суммы такие-же.

Расчёт одинаков для всех устройств. Это как-бы стандарт. И описание стандарта - можно прочитать, если не лень.
__________________
+ 7 903 641 87 25// 1. Иногда отвечаю "по памяти" 2. Часто заблуждаюсь >> Критикуйте, не обижусь.
mtit вне форума   Ответить с цитированием
Непрочитано 21.05.2021, 09:16   #5
vladh
Почётный гражданин KAZUS.RU
 
Регистрация: 03.12.2004
Сообщений: 1,306
Сказал спасибо: 337
Сказали Спасибо 76 раз(а) в 33 сообщении(ях)
vladh на пути к лучшему
По умолчанию Re: CRC16 Modbus отличие

mtit, Вы таким способом предлагаете мне выяснить каким полиномом считает CRC16 изготовитель изделия с которым я собираюсь общаться? И что означает слово "выбипаешь"?
vladh вне форума   Ответить с цитированием
Непрочитано 21.05.2021, 09:32   #6
mtit
Почётный гражданин KAZUS.RU
 
Аватар для mtit
 
Регистрация: 21.03.2007
Адрес: М.(осква)
Сообщений: 4,329
Сказал спасибо: 2,148
Сказали Спасибо 1,742 раз(а) в 991 сообщении(ях)
mtit на пути к лучшему
По умолчанию Re: CRC16 Modbus отличие

п и р на клавиатуре рядом. Выбираешь. Модбас - стандарт. Контрольная суиа для абсолютно всех устройств - считается одинаково.
__________________
+ 7 903 641 87 25// 1. Иногда отвечаю "по памяти" 2. Часто заблуждаюсь >> Критикуйте, не обижусь.
mtit вне форума   Ответить с цитированием
Непрочитано 21.05.2021, 09:39   #7
vladh
Почётный гражданин KAZUS.RU
 
Регистрация: 03.12.2004
Сообщений: 1,306
Сказал спасибо: 337
Сказали Спасибо 76 раз(а) в 33 сообщении(ях)
vladh на пути к лучшему
По умолчанию Re: CRC16 Modbus отличие

Сообщение от mtit Посмотреть сообщение
Модбас - стандарт. Контрольная суиа для абсолютно всех устройств - считается одинаково.
Замечательно. С удовольствием готов с эти согласится. Но теперь хотелось бы выяснить как конкретно считается именно этот полином? В инете ходят кучи примеров подсчета, но не говорится для каких случаев они верны, да и часто бывают с ошибками.
vladh вне форума   Ответить с цитированием
Непрочитано 21.05.2021, 09:45   #8
mtit
Почётный гражданин KAZUS.RU
 
Аватар для mtit
 
Регистрация: 21.03.2007
Адрес: М.(осква)
Сообщений: 4,329
Сказал спасибо: 2,148
Сказали Спасибо 1,742 раз(а) в 991 сообщении(ях)
mtit на пути к лучшему
По умолчанию Re: CRC16 Modbus отличие

Цитата:
CRC-16/MODBUS 16 0x8005 0xFFFF true true 0x0
https://ru.wikipedia.org/wiki/%D0%A6...BA%D0%BE%D0%B4
В Интернете несколько способов. Одни экономят память МК, другие количество тактов, третьи ...
В конечном итоге - результат должен быть одинаков.
__________________
+ 7 903 641 87 25// 1. Иногда отвечаю "по памяти" 2. Часто заблуждаюсь >> Критикуйте, не обижусь.
mtit вне форума   Ответить с цитированием
Непрочитано 21.05.2021, 09:52   #9
vladh
Почётный гражданин KAZUS.RU
 
Регистрация: 03.12.2004
Сообщений: 1,306
Сказал спасибо: 337
Сказали Спасибо 76 раз(а) в 33 сообщении(ях)
vladh на пути к лучшему
По умолчанию Re: CRC16 Modbus отличие

mtit, огромное Вам спасибо за участие. Но по вашей ссылке нет в таблице полинома для моего случая. Есть только пример результата расчета, а по нему выявить исходный полином для меня затруднительно.
vladh вне форума   Ответить с цитированием
Непрочитано 21.05.2021, 09:53   #10
pambaru
Почётный гражданин KAZUS.RU
 
Регистрация: 24.03.2007
Сообщений: 1,368
Сказал спасибо: 85
Сказали Спасибо 626 раз(а) в 378 сообщении(ях)
pambaru на пути к лучшему
По умолчанию Re: CRC16 Modbus отличие

Что то слишком много слов по простому вопросу, и никакой конкретики.
Вот код подсчета CRC modbus из работающего проекта.
word - 16-тибитовое беззнаковое целое, byte - 8-мибитовое беззнаковое целое
Код:
const word wCRCTable[256] = {
       0x0000, 0xC0C1, 0xC181, 0x0140, 0xC301, 0x03C0, 0x0280, 0xC241,
       0xC601, 0x06C0, 0x0780, 0xC741, 0x0500, 0xC5C1, 0xC481, 0x0440,
       0xCC01, 0x0CC0, 0x0D80, 0xCD41, 0x0F00, 0xCFC1, 0xCE81, 0x0E40,
       0x0A00, 0xCAC1, 0xCB81, 0x0B40, 0xC901, 0x09C0, 0x0880, 0xC841,
       0xD801, 0x18C0, 0x1980, 0xD941, 0x1B00, 0xDBC1, 0xDA81, 0x1A40,
       0x1E00, 0xDEC1, 0xDF81, 0x1F40, 0xDD01, 0x1DC0, 0x1C80, 0xDC41,
       0x1400, 0xD4C1, 0xD581, 0x1540, 0xD701, 0x17C0, 0x1680, 0xD641,
       0xD201, 0x12C0, 0x1380, 0xD341, 0x1100, 0xD1C1, 0xD081, 0x1040,
       0xF001, 0x30C0, 0x3180, 0xF141, 0x3300, 0xF3C1, 0xF281, 0x3240,
       0x3600, 0xF6C1, 0xF781, 0x3740, 0xF501, 0x35C0, 0x3480, 0xF441,
       0x3C00, 0xFCC1, 0xFD81, 0x3D40, 0xFF01, 0x3FC0, 0x3E80, 0xFE41,
       0xFA01, 0x3AC0, 0x3B80, 0xFB41, 0x3900, 0xF9C1, 0xF881, 0x3840,
       0x2800, 0xE8C1, 0xE981, 0x2940, 0xEB01, 0x2BC0, 0x2A80, 0xEA41,
       0xEE01, 0x2EC0, 0x2F80, 0xEF41, 0x2D00, 0xEDC1, 0xEC81, 0x2C40,
       0xE401, 0x24C0, 0x2580, 0xE541, 0x2700, 0xE7C1, 0xE681, 0x2640,
       0x2200, 0xE2C1, 0xE381, 0x2340, 0xE101, 0x21C0, 0x2080, 0xE041,
       0xA001, 0x60C0, 0x6180, 0xA141, 0x6300, 0xA3C1, 0xA281, 0x6240,
       0x6600, 0xA6C1, 0xA781, 0x6740, 0xA501, 0x65C0, 0x6480, 0xA441,
       0x6C00, 0xACC1, 0xAD81, 0x6D40, 0xAF01, 0x6FC0, 0x6E80, 0xAE41,
       0xAA01, 0x6AC0, 0x6B80, 0xAB41, 0x6900, 0xA9C1, 0xA881, 0x6840,
       0x7800, 0xB8C1, 0xB981, 0x7940, 0xBB01, 0x7BC0, 0x7A80, 0xBA41,
       0xBE01, 0x7EC0, 0x7F80, 0xBF41, 0x7D00, 0xBDC1, 0xBC81, 0x7C40,
       0xB401, 0x74C0, 0x7580, 0xB541, 0x7700, 0xB7C1, 0xB681, 0x7640,
       0x7200, 0xB2C1, 0xB381, 0x7340, 0xB101, 0x71C0, 0x7080, 0xB041,
       0x5000, 0x90C1, 0x9181, 0x5140, 0x9301, 0x53C0, 0x5280, 0x9241,
       0x9601, 0x56C0, 0x5780, 0x9741, 0x5500, 0x95C1, 0x9481, 0x5440,
       0x9C01, 0x5CC0, 0x5D80, 0x9D41, 0x5F00, 0x9FC1, 0x9E81, 0x5E40,
       0x5A00, 0x9AC1, 0x9B81, 0x5B40, 0x9901, 0x59C0, 0x5880, 0x9841,
       0x8801, 0x48C0, 0x4980, 0x8941, 0x4B00, 0x8BC1, 0x8A81, 0x4A40,
       0x4E00, 0x8EC1, 0x8F81, 0x4F40, 0x8D01, 0x4DC0, 0x4C80, 0x8C41,
       0x4400, 0x84C1, 0x8581, 0x4540, 0x8701, 0x47C0, 0x4680, 0x8641,
       0x8201, 0x42C0, 0x4380, 0x8341, 0x4100, 0x81C1, 0x8081, 0x4040
   };

word CRC16w(void *Data,  dword wLength){
   word wCRCWord;
   byte *nData;
   byte *b0, *b1;
    nData=Data;
    wCRCWord=0xFFFF;
    b0=(byte*)&wCRCWord;
    b1=b0+1;
    while (wLength) {
      wCRCWord = *b1 ^ wCRCTable[*nData ^ *b0];
      nData++;
      wLength--;
     };
   return wCRCWord;
  }
pambaru вне форума   Ответить с цитированием
Сказали "Спасибо" pambaru
-vitalik- (21.05.2021)
Ответ

Закладки


Ваши права в разделе
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения

BB коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.

Быстрый переход

Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Изучение PIC C Compiler(CCS C) CERGEI1982 Embedd С 1986 23.10.2024 22:51
Знатоки pic - в чем отличие PIC18F45J50 от PIC18F46J50? avr123-nm-ru PIC 5 19.06.2013 08:42
Modbus, реле Premco ZX122 nerozero Производственное оборудование 2 30.07.2011 12:09
Modbus + CoDeSys 2.3 Nikitos_Nu Микроконтроллеры, АЦП, память и т.д 2 21.12.2010 19:24
MODBUS - динамическое выделение адресов alexgap Микроконтроллеры, АЦП, память и т.д 0 29.01.2009 23:22


Часовой пояс GMT +4, время: 02:05.


Powered by vBulletin® Version 3.8.4
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd. Перевод: zCarot