Страница 3 из 5 ПерваяПервая 12345 ПоследняяПоследняя
Показано с 21 по 30 из 47

Тема: Modbus RTU CRC16 полином A001h

  1. #21

    Exclamation

    Здравствуйте, товарищи специалисты!
    Требуется помощь по подключению устройства Modbus с проверкой контрольной суммы.
    Находимся в командировке на второй ветке БАМа, Новый Ургал.
    Имеется система водоподготовки с экипировочными колонками на тепловозы.
    В данных колонках имеются платы ввода/вывода на микроконтроллере STM (вх.-пуск/стоп, вых.-индикация).
    Общаться с платами нужно запросом с контрольной суммой. Ранее с формированием такой связи не сталкивался. (Привычно конечно стандартным решением задания адреса и регистра)
    Нужен пример для ПЛК110.60М v2 (или др.) Испробовал на примерах с форума, не выходит. Не всё значит понятно.
    Понятен принцип, следующий:
    1. Используем библиотеку работы с портом.
    2. Составляем запрос в байтах
    3. Открываем порт
    4. Посылаем байтовый запрос
    5. Закрываемся и слушаем ответ
    6. Принимаем данные и оцениваем значение.
    Производитель описывает запрос из 6 байт.
    За основу брал пример с форума, где описан опрос МВВ аналоговых сигналов из 8 байтов.
    Из примера снимал 2 байта, указал адрес, запрос состояний, контрольную сумм, порт(1 или 2 пробовал), скорость 19200.
    Смущает длина запроса 8 байт, в описании ведь 6, поменял на 6. Ошибка отсутствия связи №81 так и не уходит не уходит.
    ST код смотрел, в основном всё понятно
    Кто может откликнуться, навести на цель?
    Мне бы зацепиться по адресу с платой, а дальше сам.
    Вложения Вложения

  2. #22
    Пользователь
    Регистрация
    27.11.2011
    Адрес
    Краснодар
    Сообщений
    10,665

    По умолчанию

    Павел_Хабаровск после формирования запроса нужно посчитать CRC, прилепить ее к запросу и отправить. Не смотрел по коду, что там за CRC, если строго такая же как у Modbus, то при приеме ответа кидаем его целиком в расчет CRC и должны получить 0, если другой расчет, то посылать только ответ, вычислять CRC и сравнивать с полученной.

  3. #23

    Exclamation

    Сейчас проблема что в ответе ничего нет, всё по 0. Порт правильный на контрольном 485 преобразователе индикатор мигает.
    Проверил полярность, перебирал адреса и регистры, ответа в буфере нет. Единственное что смущает в описании протокола 6 байт а в примере 8. И ещё в описании посылки адрес состоит из 2 байт. Не пойму, ведь его можно задать одним байтом.
    Программа без расчёта CRC.
    Устройство просто не отвечает. Преобразователем на шине через Serial Port Monitor отправил число, Codesys увидел.

    По CRC начинаю что-то подозревать. Получается производитель зашил программную обработку контрольной суммы в МК. Алгоритм вычисления по своему коду. Достаточно лишь раз её вычислить и вставлять в код запроса.

    #define __swap_nibbles(x) ((x>>4)|(x<<4))
    unsigned short crc16Calc(unsigned char *buffer, int n)
    {
    unsigned int i;
    unsigned char crc1,crc2,tmp;
    crc1 = crc2 = 0xff;
    for(i = 0;i < n;i++)
    {
    crc2^=buffer[i];

    tmp = __swap_nibbles(crc2)&0x0f^crc2;
    crc2 = crc1;
    crc1 = tmp;
    tmp = __swap_nibbles(tmp)&0xf0;
    crc2 ^= tmp;
    tmp = (tmp<<1)^crc1;
    crc1 >>= 3;
    crc2 = crc2^crc1;
    crc1 = tmp;
    }
    return crc2+(crc1<<8);
    }

    Так вот эта CRC вычисляется от всего пакета? всегда будет разной? Или постоянные числа на последних двух байтах можно вставить и при ответе CRC будет постоянной?
    Смотрю в код, кто-то же писал со знанием дела. Сам не пойму как его интерпретировать. Вставляю в онлайн компилятор C, ошибки есть.
    https://www.onlinegdb.com/online_csharp_compiler

    main.cs(10,0): error CS1525: Unexpected symbol `unsigned' (какой-то неожиданный символ)
    Compilation failed: 2 error(s), 0 warnings
    Вложения Вложения
    Последний раз редактировалось Павел_Хабаровск; 20.05.2021 в 07:30.

  4. #24

    По умолчанию

    Так, так... Использовал 1 пример с библиотекой SysLibCom с опросом МВА8 с адресом 64. Всё работает. При смене адреса тишина. Получается CRC выводится от байт данных до CRC?

  5. #25

    По умолчанию

    Товарищи! Стеснюсь просить.
    Может есть у кого конфигурация посылки с проверкой контроля чётности.
    Пару примеров нашёл. В одном известная CRC без контроля (МВА8 работает), во втором многочленные связи - перетягиваю пример, не растёт кокос. И всё на ST.
    А командировочка тикает, тут делом заниматься надо. Короче завис до востребования. Дома папку встретят с бородой.

  6. #26

    По умолчанию

    Да не чётности, суммы конечно. Смеркается, допускаю ошибки.

  7. #27

    По умолчанию

    Цитата Сообщение от Павел_Хабаровск Посмотреть сообщение
    Товарищи! Стеснюсь просить.
    Может есть у кого конфигурация посылки с проверкой контроля чётности.
    Пару примеров нашёл. В одном известная CRC без контроля (МВА8 работает), во втором многочленные связи - перетягиваю пример, не растёт кокос. И всё на ST.
    А командировочка тикает, тут делом заниматься надо. Короче завис до востребования. Дома папку встретят с бородой.
    Протокол Modbus RTU ? Надо попробовать опросить это устройство посредством OPC - сервера, тогда появится ясность с протоколом обмена.
    Последний раз редактировалось Newcomer; 20.05.2021 в 12:32.

  8. #28

    По умолчанию

    Обобщаю информацию.
    Есть пример ниже, по нему связываюсь с МВА8, адрес 64. Расчёта CRC нет, т.к. вставлен известный.
    Нужна конфигурация с расчётом CRC и посылкой, хотя бы посмотреть что работает с разными адресами.
    Но это только надежда на победный исход.
    Главной задачей требуется перевести код расчёта контрольной суммы с C# на ST. (А может подойдёт из библиотеки)
    И тогда наверняка, вдруг запляшут облака!..
    Вложения Вложения

  9. #29

    По умолчанию

    Спасибо что не оставили без внимания...
    Готов за вознаграждение поручить создать пример для опроса устройства (вообще там 15шт)
    Ребята! Мне просто не хватает знаний для программирования данного момента. Ранее не сталкивался.
    Всю остальную водоподготовку сделал, там стандартные овеновские МВВ.
    С этим протоколом застрял.
    Учимся по ходу движения. В данном случае нужен учитель с указкой.
    15 плат по 7вх. 4 вых. Хотя бы на одной пример решить.
    Вложения Вложения

  10. #30

    По умолчанию

    Послал в личку пример.

Страница 3 из 5 ПерваяПервая 12345 ПоследняяПоследняя

Ваши права

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