Здравствуйте.
Скрипт "
Запуск проекта" – выполняется до подключения к OPC-серверам, сразу после загрузки проекта. Соответственно, в данном типе события невозможно выполнить запись во внешние переменные.
Скрипт "
Полностью запущен" – выполняется после того, как проект полностью запустился и подключился к OPC-серверам проекта (либо вышел таймаут на подключение). В этом типе события теоретически можно выполнить запись во внешнюю переменную, если OPC-сервер готов выполнять запись и подписки успели создаться.
Выполнить запись во внешнюю переменную через скрипт "
Остановка проекта" также невозможно, т.к. это асинхронная операция (как и построение отчета, работа с БД, вызов архивных процедур и т.д.). При остановке проекта сервер не может ждать пока выполнятся все асинхронные операции, поэтому они игнорируются.
подскажите как при остановке проекта, но работающем оборудовании и ОРС сервере обнулить переменные в оборудовании?
Самым надежным вариантом будет обнулять переменные непосредственно на ПЛК. Например, добавить в ПЛК переменную, которая будет активировать сброс (к примеру, с именем vrReset), а в скада-системе создать кнопку, которая будет использоваться для завершения работы (к примеру, используя
CloseApplicationAll или
CloseApplicationClient). Дополнительно создать внутреннюю переменную Integer, например с именем vrTimer, которая будет использоваться для задержки выключения. При нажатии кнопки завершения работы производить запись в переменную vrReset для активации сброса и записывать в vrTimer требуемую задержку, например:
begin
vrReset.Value := 1 // активируем сброс на ПЛК
vrTimer.Value := 10 // задаем задержку выключения в секундах
end.
В скрипте с типом события "
Таймер" и интервалом в 1 секунду производим завершение работы:
begin
if vrTimer.AsInt > 0 then // если таймер запущен
begin
vrTimer.Value := vrTimer.AsInt - 1; // начинаем отсчет
if vrTimer.Value <= 0 then // если задержка прошла, то производим завершение работы
CloseApplicationClient;
end;
end.
Задержка выключения нужна, чтобы переменная сброса гарантированно записалась в ПЛК. Если сброс на ПЛК реализовать нельзя, то аналогично можно через скаду записывать в переменные 0 и завершать работу через задержку, чтобы значения успели записаться на ПЛК перед остановкой проекта.