Отмена сессии связи при получении команды?

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

Просмотр 9 сообщений - с 1 по 9 (из 9 всего)
  • Автор
    Записи
  • #38002
    akofor@mail.ru
    Участник

    На один com-port подключен модуль ввода-вывода, к которому подключено несколько устройств (и у каждого устройства есть несколько параметров, например статус, мощность, температура и т.д.). В связи с этим сессия опроса устройства занимает какое-то количество времени. Затем внутренняя логика драйвера обрабатывает ответы от всей подключенной периферии и назначает соответствующие теги
    Проблема в том, что когда я хочу отправить команду, скада сначала ждет окончания текущей сессии опроса, непосредственно выполняет команду, затем опрашивает дальше. В связи с этим между отправкой команды, непосредственной передачей этой команды на модуль ввода-вывода, и отображением новых данных в скаде проходит некоторое время (порядка 2-5 секунд)
    Вопрос: есть ли возможность в коде драйвера как-то прописать возможность команде поставить на паузу или отменить текущую сессию опроса, для сокращения этого интервала?

    #38004
    manjey73
    Участник

    не совсем понятно — к scada подключен один модуль в/в или несколько на одной линии?

    Есть галочка в настройках линии — Опрос устройства после команды. После прохождения команды, будет опрошено то устройство, в которое подана команда.

    #38005
    akofor@mail.ru
    Участник

    Подключен один, он опрашивается постоянно
    Но иногда нужно подать на него команду, вот в таком случае хотелось бы иметь «приоритет» над сеансом опроса

    #38006
    manjey73
    Участник

    честно не знаю, возможно ли это? Может Михаил что подскажет, может там есть какая-то возможность при обработке SendCommand в драйвере и можно допилить. На память не помню такой возможности

    #38008
    JurasskPark
    Участник

    То есть для вас 2-5 секунд долго ждать выполнения.
    А это «долго» вызвано какой то сверхсрочной необходимостью?
    Просто тут надо смотреть на сам подход.
    Если бы у вас устройства отвечали за 100мс, то может и команды бы выполнялись быстро?

    #38016
    manjey73
    Участник

    на самом деле вопрос довольно актуальный и при этом скользкий.

    1. когда много запросов можно после каждого запроса сделать некий параметр в коде драйвера, ну типа CheckCommand() внутри Session. Ну или в параметрах просто прописать CheckCommand = true. А там ядро само после каждого запроса проверяет очередь команд типа.

    2. Ну ок, проверили очередь, команда есть, сперва обработали ее — Как понять, группа опроса, в которой находится эта команда уже опросилась или только будет опрошена? см. п.1

    3. Значит для простоты на Команду надо получить подтверждение и конкретную переменную тут же отправить назад, но в SendCommand нет методов для отправки переменных Серверу, насколько помню. Значит SendCommand должен вернуть в Session что команда прошла успешно, код тега такой-то, верни в зад новое значение.

    Примерно как-то так бы это выглядело. То есть если делать, то на уровне ядра, где в коде драйверов достаточно было бы прописать CheckCommand = true.

    Было бы актуально для режимов, когда у нас опрос линии занимает минуты… А в ЖКХ это навалом.

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

    Добрый день!
    Если используется протокол Modbus, разделите большой шаблон устройства на несколько более мелких. То есть будет несколько устройств с компактными шаблонами в конфигурации, которые быстро опрашиваются.

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

    #38024
    manjey73
    Участник

    ну так если по сценарию — CheckCommand = true и Session после каждого Read Com Port делает проверку, в ответ получит или нет команд, или была команда, выполнена успешно, вот переменная, которую надо отправить Серверу.

    То есть чтобы вообще больше в коде драйвера ничего не писать. как-то так 🙂

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

    То есть чтобы вообще больше в коде драйвера ничего не писать.

    Было бы хорошо. Но проверку, что сессию необходимо прекратить, потребуется сделать. Отправка команды — это другой метод, который может быть выполнен Коммуникатором после завершения сеанса в том же потоке.

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