Стартовая страница › Форумы › Понять, как работает ПО › Поле Номер канала управления.
Помечено: KpMQTT
- В этой теме 21 ответ, 3 участника, последнее обновление 8 лет, 6 месяцев назад сделано
Mikhail.
-
АвторЗаписи
-
18.01.2018 в 20:12 #8261
Vyacheslav
УчастникПодскажите почему класс Command.cs не предусматривает информацию о номере канала управления, на который отправляется команда управления?
При разработке функционала отправки команд для драйвера KpMQTT возникла задача связки канала управления с внешним параметром параметром MQTT. На текущий момент сделал связку через поле Номер команды, что на мой взгляд не совсем корректно или данное поле допустимо для такого применения?19.01.2018 в 13:46 #8264
MikhailМодераторПолучается, что это уже отправленная команда, когда канал управления уже не имеет значения.
Можете общими словами рассказать про связку в драйвере MQTT?19.01.2018 в 18:48 #8269Vyacheslav
УчастникПередача команд из RS осуществляется в параметры MQTT.
Предполагается что может быть сконфигурировано более одного параметра. Соотвественно необходимо принятые команды маршрутизировать далее в соответствующие параметры MQTT по какомуто признаку. Имено для этих целей я хотел использовать номер канала управления.
В текущей реализации в качестве такого ключа используется поле номер команды.В исходном коде клиента RS присутствует метод отправки команды с параметрами. Один из этих параметров номер канала управления. В методе этот параметр сериализуется для отправки в RS. RS принимает команду (0x06) десериализует этот номер для обработки команды на сервере и добавляет эту команду в список команд клиентов. Соответственно клиенты по (0x07) забирают команды. Мое предложение собственно было в том чтобы не терять в этом методе информацию о номере канала управления на который была отправлена команда, а сохранить для возможности обработки на клиентах.
20.01.2018 в 10:23 #8272
MikhailМодераторВ общем-то вполне нормально было бы добавить это поле в класс команды. Надо также смотреть, что там в TCP-протоколе. Однако номера команд Вы использовали по прямому назначению.
25.01.2018 в 17:10 #8286Vyacheslav
УчастникПоявилось еще 2 вопроса:
1. Один из пользователей написал на почту о том что KpMQTT не передает команду внеочередного опроса КП. Подскажите для чего нужна эта команда и нужна ли она на уровне пользователя? Мне казалось что эта команда имеет значение на уровне протокола Rapid Scada и к пользовательским данным никакого отношения не имеет.2. В продолжение темы добавления поля Номер канала управления в класс Command.сs. Если есть возможность добавить метод который бы сериализовал и десериализовал команду как массив байт в формате протокола Rapid Scada. Метод десериализации соотвественно принимает массив байт и заполняет соотвествующие поля. Такой массив байт было бы удобно отправлять и принимать напрямую через MQTT (или другие протоколы) без реализации этих методов на стороне драйвера.
25.01.2018 в 19:00 #8289
MikhailМодератор1. Команда внеочередного опроса не приходит в драйвер. Она работает так: если на линии связи много КП, то эта команда ставит опрос заданного КП следующим в очередь на сеанс связи, то есть на вызов метода Session.
2. В данный момент времени не хотелось бы трогать основные классы, т.к. сейчас силы направлены на компоненты схем. А прежде чем изменять класс команды, нужно проанализировать, что это затронет. Просто используйте подход сериализации отсюда.
25.01.2018 в 19:30 #8290
MikhailМодераторЕщё посмотрите extension methods в C# для сериализации/десериализации.
-
АвторЗаписи
- Для ответа в этой теме необходимо авторизоваться.