Задать вопрос
Slavka_online
@Slavka_online
Интересная личность

Способ обмена данными по серийному порту?

В общем нужно обмениваться информацией с удаленным устройством по протоколу MODBUS, данный протокол подразумивает отправку команд и принятие ответа. Команд я буду присылать много. Для работы с портом использую QSerialPort. У данного класса есть слот который принимает данные. Все что мне пришло в голову и я это реализовывал раньше это объявлял
enum{
  some_comand, //нормальные имена отражающие суть
  some_comand1,
 // other comand
};

делал глобальную переменную command и присваивал ей при отправке команды ее константу, а в обработчике приема, отделял прием данных по этой константе используя switch(command) или if.. else if.

Но есть ли более разумный вариант ?
  • Вопрос задан
  • 322 просмотра
Подписаться 1 Оценить Комментировать
Пригласить эксперта
Ответы на вопрос 3
leahch
@leahch
3D специалист. Dолго, Dорого, Dерьмово.
Посмотрите в сторону готовых библиотек:
libmodbus.org
www.freemodbus.org
Ответ написан
Если писать на С, то лучше делать наподобие как в libmodbus
Если писать на С++, то можно построить иерархию классов для отправки/получения данных.
Ответ написан
Комментировать
@abukirev
C++/Qt developer/Tech Lead
Если уже используете Qt / С++, то лучше пожалуй сделать некую иерархию классов пакетов. Данные можно завернуть в QByteArray и реализовать удобные функции для работы с пакетом - его создание / формирование и его чтение / разбор. Для быстрой отладки и расширения оно того стоит.

А еще можете посмотреть на Qt Modbus модуль, если используемая версия Qt позволяет.
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы