Simple-Scada forum

Simple-Scada 2 => Ваши вопросы => Тема начата: Серега от 13 Августа 2024, 14:58:12

Название: Работа скриптов типа стоп/старт проект
Отправлено: Серега от 13 Августа 2024, 14:58:12
Добрый день!
Столкнулся со следующей ситуацией.
И сервер и клиент на одной физической машине. Проект для проработки решения. Ни каких наворотов.  База данных не подключена. Версия демо лимит по времени.
Есть внешняя переменная. ОРС + modbus устройство.
Берем просто скрипт "Проект запущен" и переменной присваиваем 0 (или 1). Допустим нужно для инициализации.
Берем просто скрипт "Проект запущен полностью" и переменной присваиваем 0 (или 2). Допустим нужно для отслеживания готовности операторов.
Берем просто скрипт "Проект остановлен" и переменной присваиваем 0 (или 3). Допустим нужно для безопасной остановки оборудования.
И вот если в клиенте присвоить значение переменной, то обнуления не происходит при остановке/запуске проекта.
Не совсем понятно как это все работает.
Подозреваю, что связано с ОРС. Но хотелось бы получить от Вас комментарий, а то опять окажется, что это только для внутренних переменных.
Если только для внутренних, тогда подскажите как при остановке проекта, но работающем оборудовании и ОРС сервере обнулить переменные в оборудовании?

Название: Re: Работа скриптов типа стоп/старт проект
Отправлено: Simple_Scada от 15 Августа 2024, 15:22:51
Здравствуйте.

Скрипт "Запуск проекта (https://simple-scada.com/help/script/launch-project.html)" – выполняется до подключения к OPC-серверам, сразу после загрузки проекта. Соответственно, в данном типе события невозможно выполнить запись во внешние переменные.

Скрипт "Полностью запущен (https://simple-scada.com/help/script/completely-started.html)" – выполняется после того, как проект полностью запустился и подключился к OPC-серверам проекта (либо вышел таймаут на подключение). В этом типе события теоретически можно выполнить запись во внешнюю переменную, если OPC-сервер готов выполнять запись и подписки успели создаться.

Выполнить запись во внешнюю переменную через скрипт "Остановка проекта (https://simple-scada.com/help/script/stop-project.html)" также невозможно, т.к. это асинхронная операция (как и построение отчета, работа с БД, вызов архивных процедур и т.д.). При остановке проекта сервер не может ждать пока выполнятся все асинхронные операции, поэтому они игнорируются.

Цитировать
подскажите как при остановке проекта, но работающем оборудовании и ОРС сервере обнулить переменные в оборудовании?
Самым надежным вариантом будет обнулять переменные непосредственно на ПЛК. Например, добавить в ПЛК переменную, которая будет активировать сброс (к примеру, с именем vrReset), а в скада-системе создать кнопку, которая будет использоваться для завершения работы (к примеру, используя CloseApplicationAll (https://simple-scada.com/help/script/closeappall.html) или CloseApplicationClient (https://simple-scada.com/help/script/closeappclient.html)). Дополнительно создать внутреннюю переменную Integer, например с именем vrTimer, которая будет использоваться для задержки выключения. При нажатии кнопки завершения работы производить запись в переменную vrReset для активации сброса и записывать в vrTimer требуемую задержку, например:
Код: (delphi)
begin
  vrReset.Value := 1   // активируем сброс на ПЛК
  vrTimer.Value := 10  // задаем задержку выключения в секундах
end.

В скрипте с типом события "Таймер (https://simple-scada.com/help/script/second-passed.html)" и интервалом в 1 секунду производим завершение работы:
Код: (delphi)
begin
 if vrTimer.AsInt > 0 then                // если таймер запущен
   begin
     vrTimer.Value := vrTimer.AsInt - 1;  // начинаем отсчет
     if vrTimer.Value <= 0 then           // если задержка прошла, то производим завершение работы
        CloseApplicationClient;
   end;
end.
Задержка выключения нужна, чтобы переменная сброса гарантированно записалась в ПЛК. Если сброс на ПЛК реализовать нельзя, то аналогично можно через скаду записывать в переменные 0 и завершать работу через задержку, чтобы значения успели записаться на ПЛК перед остановкой проекта.
Название: Re: Работа скриптов типа стоп/старт проект
Отправлено: Серега от 15 Августа 2024, 16:18:19
Теперь картина стала яснее!
Спасибо за пояснения.