@LeonidPr

Как обеспечить обработку набора запросов по ModBus?

Пишу программу для работы с устройством, разрабатываемым мною же, по ModBus RTU.
На данный момент обмен устроен так, что есть класс ModBus клиент, обеспечивающий посылку запросов и обработку ответов по ModBus.
Интерфейс его вида:
class IModBusClient {
    virtual void ReadHoldingRegs(uint16_t startRegAddres, uint16_t RegsCount, IModBusReponseListener *listener) = 0;
    ...
}

Т.е. названия функций дублируют названия запросов из документации на протокол.
Ключевой момент тут listener.
Все запросы кладутся в очередь и обрабатываются по одному.
Когда запрос обработан (неважно успешно или таймаут произошел или ошибку девайс вернул, дергается соответствующая функция у listener-а.
Когда я отправляю один запрос, ну или кучку независимых друг от друга запросов все нормально.
Но вот бывают задачи, когда к примеру надо убедиться в успешности выполнения группы запросов, например записываю я кучку разрозненных регистров (некая запись конфига в устройство), мне надо знать что все они успешно записались.
Вот тут я и пытаюсь сообразить как можно сделать удобнее?
Моя идея - присваивать запросу некий идентификатор и использовать его как ключ. Т.е. дергаем мы ReadHoldingRegs, он возвращает ID запроса. Потом когда будет вызван callback у listener-а, туда передастся этот ID и слушатель будет знать какой запрос выполнился.
Второе - организовать объекты, которые выполняют более высокоуровневые функции. Условно - записать конфиг, прочитать конфиг (собрать из нескольких запросов более сложный), ну и т.п. И далее оперировать ими.
Подскажите, какие идейки еще есть? может паттерны какие подойдут удобные?
  • Вопрос задан
  • 88 просмотров
Пригласить эксперта
Ваш ответ на вопрос

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

Войти через центр авторизации
Похожие вопросы