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

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

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

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

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

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

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

 
Опции темы

CRC16 Modbus отличие

Непрочитано 21.05.2021, 06:32  
vladh
Почётный гражданин KAZUS.RUN
 
Регистрация: 03.12.2004
Сообщений: 1,311
Сказал спасибо: 353
Сказали Спасибо 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  
raxp
Почётный гражданин KAZUS.RUN
 
Регистрация: 28.05.2010
Сообщений: 1,117
Сказал спасибо: 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  
vladh
Почётный гражданин KAZUS.RUN
 
Регистрация: 03.12.2004
Сообщений: 1,311
Сказал спасибо: 353
Сказали Спасибо 76 раз(а) в 33 сообщении(ях)
vladh на пути к лучшему
По умолчанию Re: CRC16 Modbus отличие

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

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

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

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

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

Сообщение от mtit Посмотреть сообщение
Модбас - стандарт. Контрольная суиа для абсолютно всех устройств - считается одинаково.
Замечательно. С удовольствием готов с эти согласится. Но теперь хотелось бы выяснить как конкретно считается именно этот полином? В инете ходят кучи примеров подсчета, но не говорится для каких случаев они верны, да и часто бывают с ошибками.
vladh вне форума  
Непрочитано 21.05.2021, 09:45  
mtit
Почётный гражданин KAZUS.RUN
 
Аватар для mtit
 
Регистрация: 21.03.2007
Адрес: М.(осква)
Сообщений: 4,398
Сказал спасибо: 2,192
Сказали Спасибо 1,780 раз(а) в 1,012 сообщении(ях)
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  
vladh
Почётный гражданин KAZUS.RUN
 
Регистрация: 03.12.2004
Сообщений: 1,311
Сказал спасибо: 353
Сказали Спасибо 76 раз(а) в 33 сообщении(ях)
vladh на пути к лучшему
По умолчанию Re: CRC16 Modbus отличие

mtit, огромное Вам спасибо за участие. Но по вашей ссылке нет в таблице полинома для моего случая. Есть только пример результата расчета, а по нему выявить исходный полином для меня затруднительно.
vladh вне форума  
Непрочитано 21.05.2021, 09:53  
pambaru
Почётный гражданин KAZUS.RUN
 
Регистрация: 24.03.2007
Сообщений: 1,393
Сказал спасибо: 85
Сказали Спасибо 670 раз(а) в 391 сообщении(ях)
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 С 2008 26.08.2026 21:20
Знатоки 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, время: 10:35.


Powered by vBulletin® Version 3.8.4
Copyright ©2000 - 2026, Jelsoft Enterprises Ltd.