Стартовая страница › Форумы › Понять, как работает ПО › Отмена сессии связи при получении команды?
- В этой теме 8 ответов, 4 участника, последнее обновление 1 год, 3 месяца назад сделано
Mikhail.
-
АвторЗаписи
-
09.04.2025 в 15:21 #38002
akofor@mail.ru
УчастникНа один com-port подключен модуль ввода-вывода, к которому подключено несколько устройств (и у каждого устройства есть несколько параметров, например статус, мощность, температура и т.д.). В связи с этим сессия опроса устройства занимает какое-то количество времени. Затем внутренняя логика драйвера обрабатывает ответы от всей подключенной периферии и назначает соответствующие теги
Проблема в том, что когда я хочу отправить команду, скада сначала ждет окончания текущей сессии опроса, непосредственно выполняет команду, затем опрашивает дальше. В связи с этим между отправкой команды, непосредственной передачей этой команды на модуль ввода-вывода, и отображением новых данных в скаде проходит некоторое время (порядка 2-5 секунд)
Вопрос: есть ли возможность в коде драйвера как-то прописать возможность команде поставить на паузу или отменить текущую сессию опроса, для сокращения этого интервала?09.04.2025 в 15:45 #38004
manjey73Участникне совсем понятно — к scada подключен один модуль в/в или несколько на одной линии?
Есть галочка в настройках линии — Опрос устройства после команды. После прохождения команды, будет опрошено то устройство, в которое подана команда.
09.04.2025 в 15:50 #38005akofor@mail.ru
УчастникПодключен один, он опрашивается постоянно
Но иногда нужно подать на него команду, вот в таком случае хотелось бы иметь «приоритет» над сеансом опроса09.04.2025 в 16:41 #38006
manjey73Участникчестно не знаю, возможно ли это? Может Михаил что подскажет, может там есть какая-то возможность при обработке SendCommand в драйвере и можно допилить. На память не помню такой возможности
09.04.2025 в 19:49 #38008
JurasskParkУчастникТо есть для вас 2-5 секунд долго ждать выполнения.
А это «долго» вызвано какой то сверхсрочной необходимостью?
Просто тут надо смотреть на сам подход.
Если бы у вас устройства отвечали за 100мс, то может и команды бы выполнялись быстро?10.04.2025 в 10:56 #38016
manjey73Участникна самом деле вопрос довольно актуальный и при этом скользкий.
1. когда много запросов можно после каждого запроса сделать некий параметр в коде драйвера, ну типа CheckCommand() внутри Session. Ну или в параметрах просто прописать CheckCommand = true. А там ядро само после каждого запроса проверяет очередь команд типа.
2. Ну ок, проверили очередь, команда есть, сперва обработали ее — Как понять, группа опроса, в которой находится эта команда уже опросилась или только будет опрошена? см. п.1
3. Значит для простоты на Команду надо получить подтверждение и конкретную переменную тут же отправить назад, но в SendCommand нет методов для отправки переменных Серверу, насколько помню. Значит SendCommand должен вернуть в Session что команда прошла успешно, код тега такой-то, верни в зад новое значение.
Примерно как-то так бы это выглядело. То есть если делать, то на уровне ядра, где в коде драйверов достаточно было бы прописать CheckCommand = true.
Было бы актуально для режимов, когда у нас опрос линии занимает минуты… А в ЖКХ это навалом.
10.04.2025 в 12:45 #38018
MikhailМодераторДобрый день!
Если используется протокол Modbus, разделите большой шаблон устройства на несколько более мелких. То есть будет несколько устройств с компактными шаблонами в конфигурации, которые быстро опрашиваются.Пожелание по поводу прерывания сессии записал. Но в любом случае работа подобной опции будет зависеть от реализации конкретного драйвера.
10.04.2025 в 17:35 #38024
manjey73Участникну так если по сценарию — CheckCommand = true и Session после каждого Read Com Port делает проверку, в ответ получит или нет команд, или была команда, выполнена успешно, вот переменная, которую надо отправить Серверу.
То есть чтобы вообще больше в коде драйвера ничего не писать. как-то так 🙂
11.04.2025 в 18:01 #38041
MikhailМодераторТо есть чтобы вообще больше в коде драйвера ничего не писать.
Было бы хорошо. Но проверку, что сессию необходимо прекратить, потребуется сделать. Отправка команды — это другой метод, который может быть выполнен Коммуникатором после завершения сеанса в том же потоке.
-
АвторЗаписи
- Для ответа в этой теме необходимо авторизоваться.