Добро пожаловать, Гость. Пожалуйста, войдите или зарегистрируйтесь.
Не получили письмо с кодом активации?

Официальный форум Simple-Scada.

Автор Тема: Работа скриптов типа стоп/старт проект  (Прочитано 1532 раз)

Серега

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


Simple_Scada

  • Администратор
  • *****
  • Сообщений: 1306
    • Просмотр профиля
Re: Работа скриптов типа стоп/старт проект
« Ответ #1 : 15 Августа 2024, 15:22:51 »
Здравствуйте.

Скрипт "Запуск проекта" – выполняется до подключения к OPC-серверам, сразу после загрузки проекта. Соответственно, в данном типе события невозможно выполнить запись во внешние переменные.

Скрипт "Полностью запущен" – выполняется после того, как проект полностью запустился и подключился к OPC-серверам проекта (либо вышел таймаут на подключение). В этом типе события теоретически можно выполнить запись во внешнюю переменную, если OPC-сервер готов выполнять запись и подписки успели создаться.

Выполнить запись во внешнюю переменную через скрипт "Остановка проекта" также невозможно, т.к. это асинхронная операция (как и построение отчета, работа с БД, вызов архивных процедур и т.д.). При остановке проекта сервер не может ждать пока выполнятся все асинхронные операции, поэтому они игнорируются.

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

В скрипте с типом события "Таймер" и интервалом в 1 секунду производим завершение работы:
Код: (delphi)
begin
 if vrTimer.AsInt > 0 then                // если таймер запущен
   begin
     vrTimer.Value := vrTimer.AsInt - 1;  // начинаем отсчет
     if vrTimer.Value <= 0 then           // если задержка прошла, то производим завершение работы
        CloseApplicationClient;
   end;
end.
Задержка выключения нужна, чтобы переменная сброса гарантированно записалась в ПЛК. Если сброс на ПЛК реализовать нельзя, то аналогично можно через скаду записывать в переменные 0 и завершать работу через задержку, чтобы значения успели записаться на ПЛК перед остановкой проекта.
« Изменён: 29 Августа 2024, 10:30:20 от Simple-Scada »

Серега

  • Старожил
  • ****
  • Сообщений: 254
    • Просмотр профиля
Re: Работа скриптов типа стоп/старт проект
« Ответ #2 : 15 Августа 2024, 16:18:19 »
Теперь картина стала яснее!
Спасибо за пояснения.