Поле Номер канала управления.

Стартовая страница Форумы Понять, как работает ПО Поле Номер канала управления.

Помечено: 

Просмотр 7 сообщений - с 16 по 22 (из 22 всего)
  • Автор
    Записи
  • #8261
    Vyacheslav
    Участник

    Подскажите почему класс Command.cs не предусматривает информацию о номере канала управления, на который отправляется команда управления?
    При разработке функционала отправки команд для драйвера KpMQTT возникла задача связки канала управления с внешним параметром параметром MQTT. На текущий момент сделал связку через поле Номер команды, что на мой взгляд не совсем корректно или данное поле допустимо для такого применения?

    #8264
    Mikhail
    Модератор

    Получается, что это уже отправленная команда, когда канал управления уже не имеет значения.
    Можете общими словами рассказать про связку в драйвере MQTT?

    #8269
    Vyacheslav
    Участник

    Передача команд из RS осуществляется в параметры MQTT.
    Предполагается что может быть сконфигурировано более одного параметра. Соотвественно необходимо принятые команды маршрутизировать далее в соответствующие параметры MQTT по какомуто признаку. Имено для этих целей я хотел использовать номер канала управления.
    В текущей реализации в качестве такого ключа используется поле номер команды.

    В исходном коде клиента RS присутствует метод отправки команды с параметрами. Один из этих параметров номер канала управления. В методе этот параметр сериализуется для отправки в RS. RS принимает команду (0x06) десериализует этот номер для обработки команды на сервере и добавляет эту команду в список команд клиентов. Соответственно клиенты по (0x07) забирают команды. Мое предложение собственно было в том чтобы не терять в этом методе информацию о номере канала управления на который была отправлена команда, а сохранить для возможности обработки на клиентах.

    #8272
    Mikhail
    Модератор

    В общем-то вполне нормально было бы добавить это поле в класс команды. Надо также смотреть, что там в TCP-протоколе. Однако номера команд Вы использовали по прямому назначению.

    #8286
    Vyacheslav
    Участник

    Появилось еще 2 вопроса:
    1. Один из пользователей написал на почту о том что KpMQTT не передает команду внеочередного опроса КП. Подскажите для чего нужна эта команда и нужна ли она на уровне пользователя? Мне казалось что эта команда имеет значение на уровне протокола Rapid Scada и к пользовательским данным никакого отношения не имеет.

    2. В продолжение темы добавления поля Номер канала управления в класс Command.сs. Если есть возможность добавить метод который бы сериализовал и десериализовал команду как массив байт в формате протокола Rapid Scada. Метод десериализации соотвественно принимает массив байт и заполняет соотвествующие поля. Такой массив байт было бы удобно отправлять и принимать напрямую через MQTT (или другие протоколы) без реализации этих методов на стороне драйвера.

    #8289
    Mikhail
    Модератор

    1. Команда внеочередного опроса не приходит в драйвер. Она работает так: если на линии связи много КП, то эта команда ставит опрос заданного КП следующим в очередь на сеанс связи, то есть на вызов метода Session.

    2. В данный момент времени не хотелось бы трогать основные классы, т.к. сейчас силы направлены на компоненты схем. А прежде чем изменять класс команды, нужно проанализировать, что это затронет. Просто используйте подход сериализации отсюда.

    #8290
    Mikhail
    Модератор

    Ещё посмотрите extension methods в C# для сериализации/десериализации.

Просмотр 7 сообщений - с 16 по 22 (из 22 всего)
  • Для ответа в этой теме необходимо авторизоваться.