Регистрация | Вход

[ Новые сообщения · Участники · Правила форума · Поиск · RSS ]
  • Страница 1 из 1
  • 1
Модератор форума: demanik, ivan_fd  
Форум Picbasic.ru » Программирование МК » Proton PicBasic » Какая контрольная сумма правильная
Какая контрольная сумма правильная
vladh Дата: Сб, 05.06.2021, 13:17  |                                                                                                                Сообщение # 1
Группа: Проверенные
Ранг:  Помогаю всем
Сообщений: 349
Репутация: 9   ±
Замечания:   ±
На сайте с 15.10.2007

Статус: Offline

Уважаемые, подскажите. Пытаюсь наладить контакт с частотником HYUDAI N700 по Модбас. Моя плата посылает ему запрос в виде:
HRSOut 1,3,257,2,14228
Но аппарат не отвечает. Как  предполагаю здесь неправильно рассчитан CRC (последние 5 цифр). Не хочется делать код с расчетом контрольной суммы поскольку запрос в данном случае однообразный, а незначительные сбои при общении с аппаратом не страшны. Есть онлайн калькулятор: https://www.lammertbies.nl/comm/info/crc-calculation#intr
Но каждый раз когда я вношу туда свои данные он показывает разные результаты. Так если я записываю у него в окне свои данные в формате ASCII - 1,3,257,2. Кстати непонятно после последнего значения запятую надо ставить или нет? Если поставить получается один результат если не ставить - другой. Или если я занесу туда те же данные но в формате НЕХ (00,01,00,03,01,01,00,02) контрольная сумма будет другой. 
Вот кто сможет подсказать как получить правильный результат?
ЯНДЕКС Дата: 05.06.2021
ivan_fd Дата: Вс, 06.06.2021, 16:39  |                                                                                                                Сообщение # 2
Группа: Модераторы
Ранг:  Специалист
Сообщений: 1157
Репутация: 117   ±
Замечания:   ±
На сайте с 12.01.2009

Статус: Offline

vladh
вы внимательно разберитесь в обмене данными с данным частотником.
Я с ним дела не имел, но в мануале написано:
Сначала передаем Номер связи(1-32), потом Команда, далее Параметр(2-байта), потом Номер параметра(2-байта) и CRC HI, CRC LO.

На счет CRC. Вам нужно CRC-16 (Modbus) .  Писать нужно в HEX. Если брать ваши числа 1,3,257,2 (но это, скорее всего, не правильные числа. Не хватает одного байта перед 2), то пишем 01 03 0101 00 02 - получаем 0x3794, меняем байты местами и посилаем 01 03 01 01 00 02 94 37 это числа в HEX.


Меня все время преследуют умные мысли...но я быстрее!!!
vladh Дата: Пн, 07.06.2021, 05:25  |                                                                                                                Сообщение # 3
Группа: Проверенные
Ранг:  Помогаю всем
Сообщений: 349
Репутация: 9   ±
Замечания:   ±
На сайте с 15.10.2007

Статус: Offline

Цитата ivan_fd ()
На счет CRC. Вам нужно CRC-16 (Modbus) .  Писать нужно в HEX. Если брать ваши числа 1,3,257,2 (но это, скорее всего, не правильные числа. Не хватает одного байта перед 2), то пишем 01 03 0101 00 02 - получаем 0x3794, меняем байты местами и посилаем 01 03 01 01 00 02 94 37 это числа в HEX.
Спасибо, Иван. Я уже разобрался. Только почему в меняете местами байты CRC?
ivan_fd Дата: Пн, 07.06.2021, 07:15  |                                                                                                                Сообщение # 4
Группа: Модераторы
Ранг:  Специалист
Сообщений: 1157
Репутация: 117   ±
Замечания:   ±
На сайте с 12.01.2009

Статус: Offline

В документации так написано. Точно не скажу.
Скорее всего так хранятся данные в памяти процессора.
Если посмотреть hex файл прошивки pic контроллера, то байты так же идут в таком порядке.


Меня все время преследуют умные мысли...но я быстрее!!!
vladh Дата: Пн, 07.06.2021, 08:51  |                                                                                                                Сообщение # 5
Группа: Проверенные
Ранг:  Помогаю всем
Сообщений: 349
Репутация: 9   ±
Замечания:   ±
На сайте с 15.10.2007

Статус: Offline

Цитата ivan_fd ()
В документации так написано.
В какой документации? В документации на ПЧ написано, что первым посылается старший байт, а младший идет вторым. И вообще в рекомендации на протокол Модбас написано, что рекомендуется отправлять посылки таким образом. Вначале старший, а затем младший байты.
anatol Дата: Пн, 07.06.2021, 22:00  |                                                                                                                Сообщение # 6
Группа: Проверенные
Ранг:  Разобрался
Сообщений: 627
Репутация: 32   ±
Замечания:   ±
На сайте с 10.02.2010

Статус: Offline

vladh, а в каком порядке отправлять? Младшим битом вперед или старшим? Въезжать в тему не хочу, тем более на Казусе  вам также пытаются помочь.
Приложили бы доку на ПЧ.

Сообщение отредактировал anatol - Пн, 07.06.2021, 22:01
ivan_fd Дата: Вт, 08.06.2021, 00:02  |                                                                                                                Сообщение # 7
Группа: Модераторы
Ранг:  Специалист
Сообщений: 1157
Репутация: 117   ±
Замечания:   ±
На сайте с 12.01.2009

Статус: Offline

В конце документа, где описано расчет crc, написано как слать байты.
Сейчас файла нету под рукой, чтобы указать точнее.


Меня все время преследуют умные мысли...но я быстрее!!!
vladh Дата: Вт, 08.06.2021, 00:08  |                                                                                                                Сообщение # 8
Группа: Проверенные
Ранг:  Помогаю всем
Сообщений: 349
Репутация: 9   ±
Замечания:   ±
На сайте с 15.10.2007

Статус: Offline

Цитата anatol ()
Младшим битом вперед или старшим?
Спасибо, anatol за вопрос. Я об этом даже и не подумал. Его конечно тоже можно рассмотреть. Хотя мне думается переворачивать биты смысла нет. Но если вы предположите разумный вариант такой необходимости можно было бы подискутировать.

Добавлено (08.06.2021, 00:12)
---------------------------------------------

Цитата ivan_fd ()
В конце документа, где описано расчет crc, написано как слать байты.Сейчас файла нету под рукой, чтобы указать точнее.
Как слать байты написано четко вот в этом документе https://data2.manualslib.com/pdf7....=binary
на страницах 9-2 и 9-3, т.е. как должен посылать запрос мастер и как должен отвечать ведомый.
ivan_fd Дата: Вт, 08.06.2021, 00:30  |                                                                                                                Сообщение # 9
Группа: Модераторы
Ранг:  Специалист
Сообщений: 1157
Репутация: 117   ±
Замечания:   ±
На сайте с 12.01.2009

Статус: Offline

Ну так вот, если у вас есть документация, то посмотрите страницу 122, 16bit CRC generation.
И там пишет вот такое: Change upper and lower 8 bit of result 0x36d4 : 0xd436


Меня все время преследуют умные мысли...но я быстрее!!!
vladh Дата: Вт, 08.06.2021, 08:28  |                                                                                                                Сообщение # 10
Группа: Проверенные
Ранг:  Помогаю всем
Сообщений: 349
Репутация: 9   ±
Замечания:   ±
На сайте с 15.10.2007

Статус: Offline

Прочитал, перевел: "Измените верхний и нижний 8 бит результата" и не въехал. Пусть у нас получился CRC как в примере 0х36D4. Преобразую это значение в двоичный код т.е. %11011011010100. Здесь у нас 16 бит и первый равны 0. Согласно их правилу мы меняем эти значения на противоположные т.е. на 1. Тогда получаем  %1011011011010101, что в шестнадцатеричной форме будет 0хB6D5?! Почему результат не совпал
Сообщение отредактировал vladh - Вт, 08.06.2021, 08:29
ivan_fd Дата: Вт, 08.06.2021, 08:51  |                                                                                                                Сообщение # 11
Группа: Модераторы
Ранг:  Специалист
Сообщений: 1157
Репутация: 117   ±
Замечания:   ±
На сайте с 12.01.2009

Статус: Offline

vladh, там не пишет сделать инверсию битов. А поменять байты местами. Там же есть пример.
Не нужно ничего переводить в двоичный код, просто меняем байты CRC местами и передаем по одному байту.



Меня все время преследуют умные мысли...но я быстрее!!!
ЯНДЕКС Дата: 08.06.2021
vladh Дата: Вт, 08.06.2021, 09:52  |                                                                                                                Сообщение # 12
Группа: Проверенные
Ранг:  Помогаю всем
Сообщений: 349
Репутация: 9   ±
Замечания:   ±
На сайте с 15.10.2007

Статус: Offline

Но там же пишется: "Change upper and lower 8 bit of result 0x36d4 : 0xd436" . BIT, а не Byte  И вот пример меня и смущает.
Сообщение отредактировал vladh - Вт, 08.06.2021, 09:58
ivan_fd Дата: Вт, 08.06.2021, 11:32  |                                                                                                                Сообщение # 13
Группа: Модераторы
Ранг:  Специалист
Сообщений: 1157
Репутация: 117   ±
Замечания:   ±
На сайте с 12.01.2009

Статус: Offline

Пишет, "Поменяйте старшие и младшие 8 бит результата" и есть пример.
В примере число - 01 03 01 01 00 01 (в HEX по байтах) равно 0x36D4 (CRC16 ModBus), то есть старший байт(или 8 бит, как хотите) равен $36, а младший $D4. Меняем их местами и получаем - $01 $03 $01 $01 $00 $01 $D4 $36, что полностью совпадает с примером с официальной документации на частотник!!!!!


Меня все время преследуют умные мысли...но я быстрее!!!
vladh Дата: Вт, 08.06.2021, 12:12  |                                                                                                                Сообщение # 14
Группа: Проверенные
Ранг:  Помогаю всем
Сообщений: 349
Репутация: 9   ±
Замечания:   ±
На сайте с 15.10.2007

Статус: Offline

Т.е. я неправильно перевел. Не старший восьмой бит, а старшие 8 бит. Понятно. Но только непонятно зачем они это написали, хотя ранее в разделе отправки посылок они написали один порядок , а затем получается другой. Ох и дурят народ.
Форум Picbasic.ru » Программирование МК » Proton PicBasic » Какая контрольная сумма правильная
  • Страница 1 из 1
  • 1
Поиск: