Simple-Scada forum

Simple-Scada 2 => Ваши вопросы => Тема начата: Serrk от 19 Сентября 2024, 15:54:21

Название: Циклическое выполнение скрипта.
Отправлено: Serrk от 19 Сентября 2024, 15:54:21
Доброго дня. Мне требуется выполнять непрерывно некий код. Лучше, чем использовать Timer с периодом 1 сек. не придумал. Все работает, но ощущается секундная задержка. Не подскажете , есть ли способ организовать более быстрый цикл?
Название: Re: Циклическое выполнение скрипта.
Отправлено: Simple_Scada от 19 Сентября 2024, 16:05:30
Здравствуйте.

Максимально подробно опишите задачу, которую Вы пытаетесь решить и приложите текущий код скрипта.
Название: Re: Циклическое выполнение скрипта.
Отправлено: Serrk от 19 Сентября 2024, 16:45:08
Проверяется ток на допустимость, при превышении меняется бит переменной , и отключается контактор.  Так же отслеживается биты переменной для изменения элементов визуализаций. Код более ста строк, не знаю как весь скопировать.
Название: Re: Циклическое выполнение скрипта.
Отправлено: Simple_Scada от 19 Сентября 2024, 17:20:44
Цитировать
Код более ста строк, не знаю как весь скопировать
Нажать сочетание клавиш Ctrl + A (выделить все) и Ctrl + C (копировать). Но в этом случае лучше пришлите на support@simple-scada.com текущую версию проекта из директории "..\Simple-Scada 2\Projects\" и укажите скрипт, который нужно проверить.
Название: Re: Циклическое выполнение скрипта.
Отправлено: Simple-Scada от 20 Сентября 2024, 10:04:56
Не используйте таймеры и другие периодические скрипты в задачах, в которых можно обойтись без них. В большинстве случаев пользователи используют таймеры для переноса функционала контроллера на скаду (т.е. скада решает задачи, которые должен решать ПЛК), что является очень плохим решением.

Цитировать
Проверяется ток на допустимость, при превышении меняется бит переменной , и отключается контактор.
Это хороший пример неправильного использования скады вместо ПЛК. Именно ПЛК должен проверять ток на превышение и выключать контактор. Если эту задачу перенести на скаду, то при перезапусках скады / серверного ПК / сбоях ПК или сети между ПК и ПЛК, контактор не будет отключен по превышению тока. Поэтому проверять ток и выключать контактор нужно в программе ПЛК, а в скаду отправлять текущее состояние контактора и при необходимости отображать его на мнемосхеме.

Цитировать
Так же отслеживается биты переменной для изменения элементов визуализаций.
Биты также не имеет смысла отслеживать в периодических скриптах. Гораздо правильнее проверять их только по изменению переменной (например в событии OnDatachange). Таймеры будут выполняться всегда (даже если переменная не менялась) и просто растрачивать ресурсы.
Название: Re: Циклическое выполнение скрипта.
Отправлено: Serrk от 20 Сентября 2024, 12:58:04
Это испытательный стенд. На нижнем уровне нет ни одного ПЛК, ПР. Все делается СКАДой. Велено сделать на СКАДе, я делаю. Разрешили бы сделать на CodeSys, ни какая скада была бы не нужна. Так, что без цикла с кодом, видимо не обойтись.
Название: Re: Циклическое выполнение скрипта.
Отправлено: Simple-Scada от 21 Сентября 2024, 20:30:28
Цитировать
На нижнем уровне нет ни одного ПЛК, ПР. Все делается СКАДой. Велено сделать на СКАДе, я делаю. Разрешили бы сделать на CodeSys, ни какая скада была бы не нужна. Так, что без цикла с кодом, видимо не обойтись.
Скада для таких задач не предназначена, поэтому обычные циклы (в пределах одного скрипта) работать не будут.
Можно либо импортировать с OPC-сервера в проект постоянно меняющуюся переменную с частотой опроса 20 мс. и по событию OnDatachange выполнять какой-то код (т.е. в результате он будет вызываться каждые 20 мс.), либо вызывать выполнение через задержку (функция RunDelay) с минимальной частотой 16 мс.