1. Обязательно представиться на русском языке кириллицей (заполнить поле "Имя").
  2. Фиктивные имена мы не приветствуем. Ивановых и Пупкиных здесь уже достаточно.
  3. Не надо писать свой вопрос в первую попавшуюся тему - всегда лучше создать новую тему.
  4. За поиск, предложение и обсуждение пиратского ПО и средств взлома - бан без предупреждения. Непонятно? - Читать здесь.
  5. Рекламу и частные объявления "куплю/продам/есть халтура" мы не размещаем ни на каких условиях.
  6. Перед тем как что-то написать - читать здесь, а затем здесь и здесь.
  7. Не надо писать в ЛС администраторам свои технические вопросы. Администраторы форума отлично знают как работает форум, а не все-все контроллеры, о которых тут пишут.

Как правильно составить запрос ModBus ASCII?

RS-485, ProfiBUS, 4-20 mA, Wi-Fi, GSM и так далее

Модератор: Глоб.модераторы

Ответить

Автор темы
GrukhvinEV
здесь недавно
здесь недавно
Сообщения: 4
Зарегистрирован: 10 дек 2012, 11:16
Имя: Грухвин Евгений Вячеславович
Страна: Россия
город/регион: Томск

Как правильно составить запрос ModBus ASCII?

Сообщение GrukhvinEV »

Вот есть прибор RMT69L в тех.поддержке выпросил протокол обмена. Вопрос как составить запрос что бы получить значения с 6 каналов одновременно (параметр выделен в экселе красным, в приложенном архиве)? Я так понял вот так 3А 31 3В 37 3В 01 00 0D 3B <контрольная сумма> 0D; Вот как только рассчитать контрольную сумму ума не приложу. Анализировал обмен сниффером через заводскую программку, но она читает по одному каналу вот что получилось:

Запрос:09.12.2012 14:39:02.88964 (+0.0000 seconds)
3A 31 3B 31 3B 31 3B 33 36 32 39 38 0D :1;1;1;36298.

Где 3A<:> 31<адрес 1> 3В<;>31<команда cmd1>3В<;> 31<номер канала т.е.2, счет от 0 до 5>3В<;> 33 36 32 39 38<контрольная сумма> 0D<CR>

Ответ:09.12.2012 14:39:02.88964 (+0.0000 seconds)
FF 21 31 3B 30 2E 34 33 35 30 3B 35 35 30 30 34 ÿ!1;0.4350;55004
0D .

Запрос:09.12.2012 14:39:02.88964 (+0.0000 seconds)
3A 31 3B 31 3B 32 3B 33 32 32 30 32 0D :1;1;2;32202.
Где 3A<:> 31<адрес 1> 3В<;>31<команда cmd1>3В<;> 31<номер канала т.е.3, счет от 0 до 5>3В<;> 33 32 32 30 32<контрольная сумма> 0D<CR>

Ответ:09.12.2012 14:39:02.90564 (+0.0156 seconds)
FF 21 31 3B 30 2E 34 35 30 30 3B 32 34 35 32 34 ÿ!1;0.4500;24524
У вас нет необходимых прав для просмотра вложений в этом сообщении.

Livsc
здесь недавно
здесь недавно
Сообщения: 22
Зарегистрирован: 14 янв 2009, 09:13
Имя: Лившиц Аркадий Соломонович
Страна: Россия
город/регион: Казань

Re: Как правильно составить запрос ModBus ASCII?

Сообщение Livsc »

Попробуйте воспользоваться программой Моdbus Poll. Я скачал ее с сайта http://www.modbustools.com/. Она сама считает контрольную сумму. Разобраться в приложенном описании с ходу не смог - нет времени.

Автор темы
GrukhvinEV
здесь недавно
здесь недавно
Сообщения: 4
Зарегистрирован: 10 дек 2012, 11:16
Имя: Грухвин Евгений Вячеславович
Страна: Россия
город/регион: Томск

Re: Как правильно составить запрос ModBus ASCII?

Сообщение GrukhvinEV »

Все равно не могу разобраться..... вообще разве может быть контрольная сумма такой длины 33 32 32 30 32 ?

Автор темы
GrukhvinEV
здесь недавно
здесь недавно
Сообщения: 4
Зарегистрирован: 10 дек 2012, 11:16
Имя: Грухвин Евгений Вячеславович
Страна: Россия
город/регион: Томск

Re: Как правильно составить запрос ModBus ASCII?

Сообщение GrukhvinEV »

Вот запросы на которые отвечает прибор, где 30-35 это каналы с 1 по 6. А я хочу всю информацию за раз с 6 каналов...после последней ;(3B) идет контрольная сумма по документации, но как ее прочитать хз. У меня опыта для анализа не хватает...
3A 31 3B 31 3B 30 3B 37 36 32 37 0D
3A 31 3B 31 3B 31 3B 33 36 32 39 38 0D
3A 31 3B 31 3B 32 3B 33 32 32 30 32 0D
3A 31 3B 31 3B 33 3B 36 30 38 37 35 0D
3A 31 3B 31 3B 34 3B 35 36 37 37 37 0D
3A 31 3B 31 3B 35 3B 31 39 39 31 32 0D

Автор темы
GrukhvinEV
здесь недавно
здесь недавно
Сообщения: 4
Зарегистрирован: 10 дек 2012, 11:16
Имя: Грухвин Евгений Вячеславович
Страна: Россия
город/регион: Томск

Re: Как правильно составить запрос ModBus ASCII?

Сообщение GrukhvinEV »

А вот если с помощью modbus poll отправить запрос 004-Tx:3A 31 3B 31 3B 31 3B 33 36 32 39 38 0D
ответ приходит формата 005-Rx:FF FF 01 13 27 53 53 6A
чет я вообще запутался как че тут работает...

DeepWaterOne
новенький
новенький
Сообщения: 1
Зарегистрирован: 02 янв 2013, 14:00
Имя: Ляшкевич Константин Владимирович
Страна: эРаФия
город/регион: Черноголовка

Re: Как правильно составить запрос ModBus ASCII?

Сообщение DeepWaterOne »

вот работающий код моей программы на Qt и инструкция к прибору "Элемер" "ИКСУ-2000". В инструкции ошибка ;)

Код: Выделить всё

const QByteArray Crc16(QByteArray data)
{
    unsigned short crc = 0xFFFF;
    for(int i = 1;  i < data.length();  i++)
    {
        crc = crc ^ (char)data.at(i);
        for (int j = 1; j <= 8; j++)
            if(((crc / 2) * 2) != crc)
                crc = (crc / 2) ^ 40961;
            else
                crc = crc / 2;
    }
    data += QByteArray::number(crc);
    data.push_back(13);
    return data;
}

bool checkCrc16(const QByteArray &data)
{
    unsigned short crc = 0xFFFF;
    int len = data.lastIndexOf(';') + 1;
    for(int i = 1;  i < len;  i++)
    {
        crc = crc ^ (char)data.at(i);
        for (int j = 1; j <= 8; j++)
            if(((crc / 2) * 2) != crc)
                crc = (crc / 2) ^ 40961;
            else
                crc = crc / 2;
    }
    return data.mid(len, data.lastIndexOf(0x0D) - len).toUShort() == crc;
}
У вас нет необходимых прав для просмотра вложений в этом сообщении.

Naitek
здесь недавно
здесь недавно
Сообщения: 8
Зарегистрирован: 25 мар 2013, 14:41
Имя: Исламбек Нуржан Нуржанович
Страна: Великая Орда
город/регион: Усть-Урюпинск

Re: Как правильно составить запрос ModBus ASCII?

Сообщение Naitek »

DeepWaterOne у вас пример подсчета контрольной суммы CRC, которая используется в ModBus RTU, а в ModBus ASCII вообще-то используется LRC.
Ответить

Вернуться в «Интерфейсы, протоколы, связь»