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

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

Автор Тема: Вопросы по скриптам в Simple-Scada 2  (Прочитано 423820 раз)

Simple Scada

  • Глобальный модератор
  • *****
  • Сообщений: 247
    • Просмотр профиля
    • Simple-Scada
Re: Вопросы по скриптам в Simple-Scada 2
« Ответ #1620 : 21 Февраля 2025, 15:01:17 »
Здравствуйте.

К сожалению, по описанию не совсем понятно, о чем идет речь. Опишите более подробно задачу, которую Вы пытаетесь решить.

Цитировать
Использовании в скриптах функции сдвига, например на определённое число минут IncMinute, в качестве параметра сдвига можно задать только константу.
В качестве параметра "ANumberOfMinutes" можно использовать любое целочисленное значение, в том числе и значение переменной. Например:
Код: (delphi)
begin
  // увеличить время переменной MyDateTime на количество минут, заданных в переменной vrInc
  MyDateTime.Value := IncMinute(MyDateTime.AsDateTime, vrInc.AsInt);
end.
,где "MyDateTime" – внутренняя или внешняя переменная с типом данных DateTime, "vrInc" – внутренняя или внешняя переменная с типом данных Integer.

Все доступные методы для работы с датой и временем можно найти в руководстве по ссылке.


B.B

  • Новичок
  • *
  • Сообщений: 27
    • Просмотр профиля
Re: Вопросы по скриптам в Simple-Scada 2
« Ответ #1621 : 21 Февраля 2025, 17:23:16 »
Прямо какой-то "эффект генерала" наоборот... всё работает.
Код: (delphi)
var
  DateStart, DateEnd: TDateTime;
begin
  DateEnd:= Now;                                                     // время завершения цикла
  DateStart:= IncMinute(DateEnd, -CycleTime.AsInt)   // время начала цикла
end.
Спасибо за оперативную помощь  :D
« Изменён: 21 Февраля 2025, 17:37:37 от Simple Scada »

prog2

  • Новичок
  • *
  • Сообщений: 1
    • Просмотр профиля
Re: Вопросы по скриптам в Simple-Scada 2
« Ответ #1622 : 01 Мая 2025, 16:30:43 »
Здраствуйте помогите организовать логику с этим скриптом, не могу понять это вообще возможно одним скриптом сделать или нужно 2 отдельно. В итоге работает так что поле марает либо красно желты либо желта зеленый   
Если температура ≤ 15 → сразу зелёный
Если температура > 15, но снижается (таймер растёт) → зелёный , даже если меньше 10 секунд
Если температура > 15 и не снижается , то: Первые 10 секунд — жёлтый После 10 секунд — красный
Код: (delphi)
begin
  // Проверяем, снижается ли температура
  if Shape1.Value < prevTemp.Value then
    vrCoolingTimer.Value := vrCoolingTimer.Value + 1
  else
    vrCoolingTimer.Value := 0;

  // Обновляем предыдущее значение после проверки
  prevTemp.Value := Shape1.Value;

  if Shape1.Value <= 15 then
  begin
    Shape1.Color := clLime;
    vrTimer.Value := 0;
    vrCoolingTimer.Value := 0;
  end
  else if vrCoolingTimer.AsInt > 0 then
  begin
    Shape1.Color := clLime; // Зелёный: температура снижается (до 10 сек)
  end
  else
  begin
    vrTimer.Value := vrTimer.Value + 1;

    if vrTimer.AsInt >= 100 then
      Shape1.Color := clRed // Красный: температура не снижается ≥ 10 сек
    else
      Shape1.Color := clYellow; // Жёлтый: только что вышла за норму
  end;
end.
« Изменён: 05 Мая 2025, 09:07:48 от Simple Scada »

PeninAndrey1996

  • Новичок
  • *
  • Сообщений: 5
    • Просмотр профиля
Re: Вопросы по скриптам в Simple-Scada 2
« Ответ #1623 : 06 Июня 2025, 16:01:41 »
Добрый день. Вопрос в следующем:
Хочу реализовать выбор режима работы по расписанию или по кнопке. Думаю реализовать с помощью метода OnActive. То есть, если произошло событие активации и флаг разрешающий работу по расписанию взведен, то тогда активируем OPC переменную пуска установки. Расписание находится в шаблонном окне. Переменная команды на пуск прилинкована в поле "Доп.переменная". Как в скрипт передать переменную-флаг режима работы? Я бы прилинковал переменную команду в поле переменная, но тогда он только включит при вхождении в интервал и все, без всякой доп. проверок.

pan2000

  • Постоялец
  • ***
  • Сообщений: 210
    • Просмотр профиля
Re: Вопросы по скриптам в Simple-Scada 2
« Ответ #1624 : 08 Июня 2025, 07:23:54 »
   Здравствуйте.

Добрый день. Вопрос в следующем:
Хочу реализовать выбор режима работы по расписанию или по кнопке. Думаю реализовать с помощью метода OnActive.
При наличии ручного режима для управления ОРС-переменной хорошо подходит кнопка с двумя состояниями. Кнопку можно настроить либо на запись двух значений, либо на изменение одиночного бита.
А расписание уже просто управляет этой кнопкой, недоступной/невидимой.  В примере с двумя кнопками - "РУЧНОЕ-АВТОМАТ" и "ВЫКЛ.-ВКЛ." приведены два вида шаблонного окна - кнопки в окне или кнопки на странице.
Правила функционирования кнопок:
- кнопка "ВЫКЛ.-ВКЛ." непосредственно управляет ОРС-переменной, либо пара значений, либо одиночный бит. Для каждой пары шаблонное окно уникально, для одиночных бит достаточно одного шаблонного окна (для кнопок в окне +1 подстановка "номер бита");
- кнопка "РУЧНОЕ-АВТОМАТ" управляет видимостью или доступностью кнопки "ВЫКЛ.-ВКЛ." (для кнопок на странице может быть индикатором состояния ОРС-переменной);
- В состоянии "АВТОМАТ" расписание управляет кнопкой "ВЫКЛ.-ВКЛ." по значению основной переменной, к которой (по ID и имени проекта) собственно и привязана таблица интервалов этого расписания. В случае двух режимов использовать событий OnActivate и OnDeacnivate нецелесообразно, т.к. для правильного изменения значения ОРС-переменной при переключении режимов нужно знать текущее состояние расписания (внутри/вне интервала) и, следовательно придется его восстанавливать по событиям (что собственно и есть значение основной переменной).

Особенности варианта с кнопками на странице (поскольку приходится связывать реальные и виртуальные объекты, а очень желательно обойтись без уникальных скриптов для каждого), причем достаточно всего одного шаблонного окна:
- создать кнопку управления режимами "РУЧНОЕ-АВТОМАТ" с основной переменной и без событий;
- создать кнопку управления ОРС-переменной "ВЫКЛ.-ВКЛ." с соответствующим управлением ОРС-переменной и без событий;
- в подстановке шаблонного окна "кнопка_режима</>кнопка_переменной" записать имена кнопок через знак "наклонная черта";
- в подстановке шаблонного окна "переменная_расписания" указать уникальную переменную.
Связи (цепочка ссылок на объекты) устанавливаются при инициализации конкретного экземпляра шаблонного окна.

Simple_Scada

  • Администратор
  • *****
  • Сообщений: 1306
    • Просмотр профиля
Re: Вопросы по скриптам в Simple-Scada 2
« Ответ #1625 : 09 Июня 2025, 12:50:14 »
Здравствуйте.

Цитировать
Хочу реализовать выбор режима работы по расписанию или по кнопке. Переменная команды на пуск прилинкована в поле "Доп.переменная". Как в скрипт передать переменную-флаг режима работы?
Переменная на запуск/остановку должна быть назначена в качестве основной переменной расписания. Переменная режима работы должна быть назначена в качестве доп. переменной расписания. Включать/отключать расписание нужно через свойство Enabled по изменению доп. переменной. Для этого можно на событие "OnDataChangeEx" расписания написать универсальный скрипт:
Код: (delphi)
begin
  if Sender is TM_Schedule then     // проверяем, что Sender это расписание
    with Sender as TM_Schedule do   // приводим Sender к типу "TM_Schedule"
      Enabled := VariableEx.AsBool; // вкл/выкл расписание по значению доп. переменной
end.
Таким образом, когда расписание будет активно (автоматический режим), управление будет осуществляться через него. Когда расписание будет отключено (ручной режим), можно будет управлять оборудованием через кнопку ручного управления.
« Изменён: 09 Июня 2025, 14:24:14 от Simple_Scada »

AlexejKa38

  • Новичок
  • *
  • Сообщений: 21
    • Просмотр профиля
Re: Вопросы по скриптам в Simple-Scada 2
« Ответ #1626 : 18 Июня 2025, 08:54:59 »
Добрый день.

1. В справке и в руководстве на сайте нет описания свойства AllowInput объекта TM_Field.
Можно ли изменять это свойство из скриптов или оно доступно только для чтения?

2. Директива $Region в редакторе скриптов работает? Планируете ли добавить?

Simple_Scada

  • Администратор
  • *****
  • Сообщений: 1306
    • Просмотр профиля
Re: Вопросы по скриптам в Simple-Scada 2
« Ответ #1627 : 18 Июня 2025, 15:20:54 »
Здравствуйте.

1. Добавили информацию о свойстве AllowInput в руководство - ссылка. Данное свойство доступно для изменения из скриптов. Также, для блокировки доступа к полю можно использовать свойство Enabled (в этом случае, помимо ограничения ввода, не будут выполняться скрипты OnClick, OnDblClick, OnMouseUp).
2. Добавление директивы $Region в ближайшем будущем не планируется. Рекомендуем использовать универсальные скрипты. Для сокращения повторяющегося кода можно использовать подпроцедуры и глобальные модули.
« Изменён: 18 Июня 2025, 15:48:14 от Simple-Scada »

msigx680

  • Новичок
  • *
  • Сообщений: 6
    • Просмотр профиля
Re: Вопросы по скриптам в Simple-Scada 2
« Ответ #1628 : 19 Июня 2025, 20:28:01 »
Здравствуйте! Подскажите пожалуйста, как реализовать опрос OPC сервера по расписанию (времени)? Например с 12-00 до 13-00 опрос запрещен, а в остальное время разрешен. Или опрос по времени отдельных переменных.

Simple_Scada

  • Администратор
  • *****
  • Сообщений: 1306
    • Просмотр профиля
Re: Вопросы по скриптам в Simple-Scada 2
« Ответ #1629 : 20 Июня 2025, 15:16:59 »
Здравствуйте.

Цитировать
как реализовать опрос OPC сервера по расписанию (времени)? Например с 12-00 до 13-00 опрос запрещен, а в остальное время разрешен.
Такой возможности нет.

Цитировать
Или опрос по времени отдельных переменных.
Если используется DA-сервер, то запустить/остановить опрос переменной можно используя свойство "Active" (не работает для UA серверов).

PeninAndrey1996

  • Новичок
  • *
  • Сообщений: 5
    • Просмотр профиля
Re: Вопросы по скриптам в Simple-Scada 2
« Ответ #1630 : 02 Июля 2025, 13:29:19 »
Вопрос касается метода User.SendMail. Для тестов взял две личные почты. Одну использовал для настройки SMTP (тест прошел успешно). Вторую указал  у нового пользователя созданного через редактор. Взял скрипт из примера и переделал его под своего пользователя и завел этот скрипт на событие клика кнопки:
Код: (delphi)
begin
  // отправить e-mail пользователю usAdmin
  User1.SendMail('Simple-Scada', 'Авария котла!', 'Превышена максимальная температура');
end.
Все VPN отключены. Тест прошел успешно. Но в рантайме при нажатии на кнопку письмо не отправляется. Подскажите, что я не правильно делаю?
« Изменён: 02 Июля 2025, 15:20:37 от PeninAndrey1996 »

Simple Scada

  • Глобальный модератор
  • *****
  • Сообщений: 247
    • Просмотр профиля
    • Simple-Scada
Re: Вопросы по скриптам в Simple-Scada 2
« Ответ #1631 : 02 Июля 2025, 15:30:16 »
Здравствуйте.

1. Отправка E-mail сообщений доступна только в версиях Professional и Demo-Time. Какую версию Simple-Scada Вы используете?
2. Убедитесь, что после внесения изменений в настройки отправки E-mail Вы перезапустили сервер Simple-Scada.
3. После выполнения скрипта (клика по кнопке) проверьте журнал сервера скады, возможно в нём есть ошибки, которые помогут понять причину проблемы.
4. Если Вы запускаете проект в режиме отладки, то убедитесь, что в настройках проекта включена опция "Отправка e-mail".
5. Если самостоятельно разобраться не получится, то воспроизведите проблему и пришлите нам на support@simple-scada.com текущую версию Вашего проекта из директории "..\Simple-Scada 2\Projects\" и целиком папку с логами "..\Simple-Scada 2\Logs". Если в проекте имеются конфиденциальные данные, то создайте копию проекта, удалите всё лишнее, проверьте, что проблема повторяется и пришлите нам полученный проект.

PeninAndrey1996

  • Новичок
  • *
  • Сообщений: 5
    • Просмотр профиля
Re: Вопросы по скриптам в Simple-Scada 2
« Ответ #1632 : 02 Июля 2025, 15:55:55 »
Да,совершенно замылился глаз. Работал на лицензии, почему то был уверен что работаю в про версии. Оказывается стандарт... Перешел на тайм демо. Все летает. Спасибо!