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

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

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

AndrewNA

  • Новичок
  • *
  • Сообщений: 15
    • Просмотр профиля
Re: Вопросы по скриптам в Simple-Scada 2
« Ответ #1650 : 11 Декабря 2025, 09:01:50 »
В руководстве имеется описание Глобальные процедуры и функции > Время и дата > Таймеры

Подскажите, а как запустить обратный таймер?

Simple_Scada

  • Администратор
  • *****
  • Сообщений: 1387
    • Просмотр профиля
Re: Вопросы по скриптам в Simple-Scada 2
« Ответ #1651 : 11 Декабря 2025, 18:04:06 »
Здравствуйте.

Через таймерные процедуры нельзя запустить обратный отсчет. Это можно реализовать используя скрипт с типом события "Таймер" и методы для работы с датой/временем. Например, чтобы уменьшить время на 1 секунду, можно использовать функцию "IncSecond" с параметром -1. Пример проекта во вложении.

AndrewNA

  • Новичок
  • *
  • Сообщений: 15
    • Просмотр профиля
Re: Вопросы по скриптам в Simple-Scada 2
« Ответ #1652 : 15 Января 2026, 16:54:36 »
Отлично, спасибо за труды, попробовал ваш пример работает.

В руководстве имеются примеры по работе с БД. Подскажите как осуществить проверку записи в БД?
Спасибо.

Simple_Scada

  • Администратор
  • *****
  • Сообщений: 1387
    • Просмотр профиля
Re: Вопросы по скриптам в Simple-Scada 2
« Ответ #1653 : 15 Января 2026, 20:21:16 »
Здравствуйте.

Если при выполнении SQL-запроса возникнут проблемы, то СУБД вернет ошибку. Обработать ошибки в SQL-запросах можно в скрипе "Ошибка SQL-запроса".

AndrewNA

  • Новичок
  • *
  • Сообщений: 15
    • Просмотр профиля
Re: Вопросы по скриптам в Simple-Scada 2
« Ответ #1654 : 16 Января 2026, 13:18:22 »
Через таймерные процедуры нельзя запустить обратный отсчет. Это можно реализовать используя скрипт с типом события "Таймер" и методы для работы с датой/временем. Например, чтобы уменьшить время на 1 секунду, можно использовать функцию "IncSecond" с параметром -1. Пример проекта во вложении.

Доброго дня, к сожалению не могу разобраться не получается завести таймер на 2ч в этом примере.
И второе условие за 15 мин до окончания вывести сообщение
Спасибо. Расскажите как надо.
« Изменён: 16 Января 2026, 13:33:56 от AndrewNA »

Simple Scada

  • Глобальный модератор
  • *****
  • Сообщений: 280
    • Просмотр профиля
    • Simple-Scada
Re: Вопросы по скриптам в Simple-Scada 2
« Ответ #1655 : 16 Января 2026, 20:22:27 »
Здравствуйте.

В нашем примере время задаётся по переменной "vrTime", которая расположена в календаре. Для календаря задан формат времени "мм:сс" (минуты и секунды), чтобы задавать часы, нужно изменить формат времени, например на "чч:мм:сс".

Внесли изменения в проект – во вложении.

TamaTama

  • Новичок
  • *
  • Сообщений: 14
    • Просмотр профиля
Re: Вопросы по скриптам в Simple-Scada 2
« Ответ #1656 : 21 Января 2026, 14:34:52 »
Доброго времени суток гуру. Подскажите как мне обратиться к биту слова, чтобы привязать его к индикатору. В описании скриптов есть только обращение к одному биту. А мне надо по каждому биту зажигать свою лампочку. 16 скриптов писать? для 16 лампочек 0-15.

Simple_Scada

  • Администратор
  • *****
  • Сообщений: 1387
    • Просмотр профиля
Re: Вопросы по скриптам в Simple-Scada 2
« Ответ #1657 : 21 Января 2026, 14:59:05 »
Здравйствуйте.

Свяжите объекты с требуемой переменной и у каждого объекта в свойстве "Тэг" укажите номер бита, по которому должен меняться цвет (биты нумеруются с нуля). Далее, нужно написать один универсальный скрипт приведенный ниже и назначить его на событие OnDataChange требуемых объектов.
Код: (delphi)
begin
  if Sender is TM_Object then            // проверяем, что Sender это объект
    with Sender as TM_Object do          // приводим Sender к типу "TM_Object"
      if GetBit(AsInt, Tag) then         // если значение бита, указанного в свойстве "Тег" объекта равно True, то
        Color := clGreen                 // изменить цвет объекта на зеленый
      else                               // иначе
        Color := clRed;                  // изменить цвет объекта на красный
end.

TamaTama

  • Новичок
  • *
  • Сообщений: 14
    • Просмотр профиля
Re: Вопросы по скриптам в Simple-Scada 2
« Ответ #1658 : 21 Января 2026, 15:19:19 »
А я сегодня смотрел на этот тэг и думал как бы его использовать. Спасибо
« Изменён: 21 Января 2026, 15:27:58 от Simple_Scada »

dure.mark

  • Новичок
  • *
  • Сообщений: 3
    • Просмотр профиля
Re: Вопросы по скриптам в Simple-Scada 2
« Ответ #1659 : 21 Января 2026, 16:02:41 »
Добрый день!

Подскажите по одному вопросу. У меня есть 3 устройства, с которых я считываю параметр "Активная мощность". На экран вывожу поле с "Суммарной активной мощностью", которую рассчитываю скриптом "По таймеру" каждую секунду и записываю во внутреннюю переменную.
Код: (delphi)
Sum.Value := Configuration_PLC_P_1.Value + Configuration_PLC_P_2.Value + Configuration_PLC_P_3.Value;
Но поле отображается пустым, если связь с одним из устройств нарушена. Например, устройство №3 на техническом обслуживании и связь с ним отключена, но расчет суммы мощностей устройств №1 и №2 по скрипту не проходит.
Есть ли возможность настройки, чтобы при отсутствии связи переменная принимала нулевое значение?
« Изменён: 21 Января 2026, 16:07:54 от Simple-Scada »

Simple_Scada

  • Администратор
  • *****
  • Сообщений: 1387
    • Просмотр профиля
Re: Вопросы по скриптам в Simple-Scada 2
« Ответ #1660 : 21 Января 2026, 17:59:40 »
Здравствуйте.

Скорее всего, OPC-сервер при потере связи с ПЛК/устройством записывает в переменные пустые значения, из-за чего вычисления работают некорректно. Вероятно в журнале сервера Simple-Scada имеются ошибки выполнения скрипта.

1. У некоторых OPC-серверов имеются параметры, позволяющие настроить поведение при отказах (в том числе обрыв связи с ПЛК/устройством), например записывать в переменные нули, оставлять последние достоверные значения или пустые значения. Такой параметр есть к примеру в OPC-сервере arOPC - см. скриншот во вложении. Проверьте, возможно подобные настройки имеются у Вашего OPC-сервера.
2. У Вас в скрипте при обращении к значению переменной используется свойство ".Value". Свойство ".Value" имеет тип Variant (неопределённый тип). Т.е., если переменная является строкой, то свойство ".Value" вернёт строку. Если переменная типа Boolean, то свойство ".Value" вернёт значение true или false и так далее. При вычислениях рекомендуем использовать явное приведение значения к нужному типу, например .AsInt, .AsBool и так далее. Это позволит избежать ошибок при недостоверных значениях, приходящих с OPC-сервера. Например, если переменные имеют тип "Integer", то используйте следующий код:
Код: (delphi)
begin
  Sum.Value := Configuration_PLC_P_1.AsInt + Configuration_PLC_P_2.AsInt + Configuration_PLC_P_3.AsInt;
end.

Если не разберетесь, то пришлите для проверки на support@simple-scada.com текущую версию Вашего проекта из директории "..\Simple-Scada 2\Projects\", целиком папку с логами "..\Simple-Scada 2\Logs" и конфигурацию OPC-сервера.

Ivan_Vit

  • Новичок
  • *
  • Сообщений: 2
    • Просмотр профиля
Re: Вопросы по скриптам в Simple-Scada 2
« Ответ #1661 : 02 Февраля 2026, 10:57:17 »
Подскажите, а если есть в свойствах объекта и "Тэг" и "Бит", то в какую из этих нужно указать номер бита и почему ?
Исходя из скрипта    if GetBit(AsInt, Tag) then    он будет брать значение из "Тэг". А как тогда сделать, чтобы брал из "Бит"?


Здравйствуйте.

Свяжите объекты с требуемой переменной и у каждого объекта в свойстве "Тэг" укажите номер бита, по которому должен меняться цвет (биты нумеруются с нуля). Далее, нужно написать один универсальный скрипт приведенный ниже и назначить его на событие OnDataChange требуемых объектов.
Код: (delphi)
begin
  if Sender is TM_Object then            // проверяем, что Sender это объект
    with Sender as TM_Object do          // приводим Sender к типу "TM_Object"
      if GetBit(AsInt, Tag) then         // если значение бита, указанного в свойстве "Тег" объекта равно True, то
        Color := clGreen                 // изменить цвет объекта на зеленый
      else                               // иначе
        Color := clRed;                  // изменить цвет объекта на красный
end.

Simple_Scada

  • Администратор
  • *****
  • Сообщений: 1387
    • Просмотр профиля
Re: Вопросы по скриптам в Simple-Scada 2
« Ответ #1662 : 02 Февраля 2026, 17:25:55 »
Здравствуйте.

1. Описание свойств объектов можно посмотреть по ссылке. Описание свойств объектов доступных в скриптах по ссылке.
2. Свойство "Тэг" – это дополнительный параметр, который можно использовать как угодно, например для каких-либо условий и проверок в скриптах.
3. Свойство "Бит" имеется только у компонентов "Кнопка" и "Флажок". Обычно используется, когда необходимо управлять битом переменной (без использования скриптов).

Вы задавали похожий вопрос по работе с битами в этой теме.
Если требуется управлять значением или битом переменной, то используйте Кнопку или Флажок. Если нужно создать индикатор работы оборудования, то используйте Фигуру, Изображение или Текст.

Если не разберетесь, то пришлите на support@simple-scada.com текущую версию Вашего проекта из директории "..\Simple-Scada 2\Projects" и максимально подробно опишите задачу - постараемся предложить наиболее простой способ решения.

Gabrrr

  • Новичок
  • *
  • Сообщений: 4
    • Просмотр профиля
Re: Вопросы по скриптам в Simple-Scada 2
« Ответ #1663 : 09 Февраля 2026, 14:07:14 »
Добрый день.
Исходные данные - Есть шаблонные окна. Информация отображаемая в окне берется из таблицы. Таблица заполняется из базы данных. Информация заполняется скриптом, вызываемым событием OnShow окна.
Задача - Обновить отображаемые в окне данные, при изменении данных в таблице, если окно уже открыто.
Мое решение - У меня есть переменная, которая изменяется каждый раз при изменении таблицы. В шаблонном окне я на шейп повесил эту переменную, и на OnDataChange я повесил свой скрипт. Скрипт выполняет нужную мне задачу, данные обновляются, но мне не очень нравится что скрипт вызывается и для тех окон, которые на текущий момент не видны никому. Я предполагаю, что окна инициализируются на старте проекта на сервере, поэтому они существуют и скрипты для них выполняются.

Вопросы- Есть ли какая то возможность понять отображается где-то шаблонное окно или нет, чтобы я мог не выполнять скрипт для невидимых никому окон? Или есть в принципе подход получше для решения такого рода задачи? (Если что хранить данные не в таблицах, а в переменных не очень хочется, т.к. окон таких в проекте штук 300-500 и создавать под всё это переменные как то не с руки). Может быть можно как то скриптом перебрать все отображаемые в данный момент окна, и вызвать для них нужное событие?

Simple_Scada

  • Администратор
  • *****
  • Сообщений: 1387
    • Просмотр профиля
Re: Вопросы по скриптам в Simple-Scada 2
« Ответ #1664 : 09 Февраля 2026, 18:37:59 »
Здравствуйте.

Цитировать
Есть шаблонные окна. Информация отображаемая в окне берется из таблицы. Таблица заполняется из базы данных. Информация заполняется скриптом, вызываемым событием OnShow окна.
Учитывайте, что описанный Вами способ может некорректно работать в проектах с несколькими клиентами. Все объекты проекта существуют в единственном экземпляре и изменение их свойств будет отображаться на всех клиентах одновременно. Поэтому, если несколько пользователей будут одновременно открывать указанные окна, то могут увидеть в них не то содержимое, которое ожидалось (т.к. содержимое может замениться при открытии окна другим пользователем).

Цитировать
Есть ли какая то возможность понять отображается где-то шаблонное окно или нет
Может быть можно как то скриптом перебрать все отображаемые в данный момент окна, и вызвать для них нужное событие?
Такой возможности нет.