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

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

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

Simple_Scada

  • Администратор
  • *****
  • Сообщений: 1178
    • Просмотр профиля
Re: Вопросы по скриптам в Simple-Scada 2
« Ответ #1485 : 08 Января 2024, 22:30:09 »
Здравствуйте.

Использовать подстановки в скриптах нельзя. Принцип работы с шаблонными окнами описан по этой и этой ссылкам. Работа с шаблонами в скриптах рассмотрена по ссылке. При необходимости, Вы можете прислать на support@simple-scada.com текущую версию проекта и максимально подробно описать задачу - возможно мы сможем предложить решение.

yukiaire

  • Новичок
  • *
  • Сообщений: 9
    • Просмотр профиля
Re: Вопросы по скриптам в Simple-Scada 2
« Ответ #1486 : 17 Января 2024, 13:25:26 »
Здравствуйте! У меня вопрос, почему функция GetVariableByName не работает в глобальном модуле в части initialization? При создании проекта мне нужно заполнять список однотипными переменными, у которых по сути только отличаются номера, не хочется заполнять их напрямую, а перебором по получении имени не получается.

Simple Scada

  • Глобальный модератор
  • *****
  • Сообщений: 168
    • Просмотр профиля
    • Simple-Scada
Re: Вопросы по скриптам в Simple-Scada 2
« Ответ #1487 : 18 Января 2024, 13:32:32 »
Здравствуйте.

В секции initialization глобального модуля нельзя использовать функции поиска, т.к. на момент инициализации список, по которому осуществляется поиск, еще не сформирован. Можно перенести код из секции initialization в отдельный скрипт по событию "Запуск проекта".

ACHE

  • Новичок
  • *
  • Сообщений: 22
    • Просмотр профиля
Re: Вопросы по скриптам в Simple-Scada 2
« Ответ #1488 : 22 Февраля 2024, 10:02:19 »
Здравствуйте. Есть возможность вычислить в скрипте, какая страница открыта на клиенте?
В проекте сделана замена штатного интерфейса кнопками и все на шаблонах. Хочется менять границу кнопки открытой подстраницы.
« Изменён: 23 Февраля 2024, 15:22:58 от ACHE »

pan2000

  • Постоялец
  • ***
  • Сообщений: 172
    • Просмотр профиля
Re: Вопросы по скриптам в Simple-Scada 2
« Ответ #1489 : 23 Февраля 2024, 16:12:45 »
   Здравствуйте.
Есть возможность вычислить в скрипте, какая страница открыта на клиенте?
Такая возможность есть. Парные события "Пользователь перешел на эту страницу" и "Пользователь покинул эту страницу" позволяют контролировать пару страница - клиент (у которого по определению только ОДИН пользователь).
Собственно, необходимые действия можно выполнить в этих скриптах или отложить до скрипта, который понимает клиента (работает GetClietName) или варианта с одним клиентом (тому всё равно). Отельная неприятность от анонимных (без имени) десктоп-клиентов, неразличимых по определению (хотя у каждого клиента уникальный ID).
А зачем это всё нужно?
В проекте сделана замена штатного интерфейса кнопками и все на шаблонах. Хочется менять границу кнопки открытой подстраницы.
При замене штатной системы навигации страниц на каждой странице присутствуют уникальные кнопки навигации, либо как набор отдельных кнопок, либо в составе шаблона. В первом случае кнопку выбранной страницы можно изменить на этапе редактирования проекта, во втором - при инициализации шаблона.
 Пример слежения за клиентами-страницами и инициализации шаблона кнопок во вложении.

   Добавлено 25.02.2024
При инициализации шаблонов можно построить массив ссылок на активную кнопку страниц, что позволит изменять отображение кнопки из скриптов. Поиском по имени/ID клиента в парах "клиент-индекс открытой страницы" определяется индекс страницы, а по нему ссылку на объект-кнопку.
Однако следует помнить, что изменения видны у всех клиентов, перешедших на эту страницу.
Наличие таблицы клиентов позволяет передавать текстовые сообщения от клиента к клиенту.
См. "Граница_кнопки_3".
« Изменён: 26 Февраля 2024, 01:15:52 от pan2000 »

Pendalf

  • Новичок
  • *
  • Сообщений: 22
    • Просмотр профиля
Re: Вопросы по скриптам в Simple-Scada 2
« Ответ #1490 : 04 Марта 2024, 16:58:20 »
Что-то похожее мы делали в своём проекте. Надо было подсвечивать кнопку, которая была в шапке экранной формы. Кнопка была индикатором выбранной экранной формы.
Верхняя панель представляла из себя шаблон с кнопками. Подсвечивались кнопки скриптом при инициализации. На шаблоне в одной из кнопок просто задавалось число в скрытой подсказке либо в поле Tag. Кнопки были пронумерованы в приставке к названию. При инициализации этот TAG считывался и подсвечивал соответствующую кнопку. Работает отлично. Из минусов только то, что надо пройтись по всем экранным формам, где используется этот шаблон и "ручками" вбить номер кнопки, которая должна подсвечиваться.

Других более удобных и быстрых вариантов не придумали. Встроенная навигация от Simple-SCADA не устроила принципиально.
« Изменён: 04 Марта 2024, 17:10:02 от Simple_Scada »

pan2000

  • Постоялец
  • ***
  • Сообщений: 172
    • Просмотр профиля
Re: Вопросы по скриптам в Simple-Scada 2
« Ответ #1491 : 11 Марта 2024, 06:28:35 »
   Здравствуйте.

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

Agro_1

  • Новичок
  • *
  • Сообщений: 9
    • Просмотр профиля
Re: Вопросы по скриптам в Simple-Scada 2
« Ответ #1492 : 27 Марта 2024, 14:55:54 »
Добрый день! Есть переменная со шкалой 0-254 и у нее включено масштабирование в 0-100%. Частный случай - переменная может принимать значение 255.
Можно ли как-то узнать, что переменная что эта переменная вне диапазона? Шкалу не могу изменить, так как к ней многое привязано.

Simple Scada

  • Глобальный модератор
  • *****
  • Сообщений: 168
    • Просмотр профиля
    • Simple-Scada
Re: Вопросы по скриптам в Simple-Scada 2
« Ответ #1493 : 28 Марта 2024, 12:37:45 »
Здравствуйте.

Можно выполнять проверку превышения оригинального значения переменной (например, используя свойство "OriginalAsInt") над максимумом шкалы переменной и выдавать соответствующее сообщение. Пример универсального скрипта на событие "OnDataChange" объекта, с которым связана переменная:
Код: (delphi)
begin
  if Sender is TM_Object then   // проверяем, что Sender это объект
    with Sender as TM_Object do // приводим Sender к типу "TM_Object"
      if Variable.OriginalAsInt > Maximum then
        AddMessage(Now, mkAlarm, 'Значение переменной "' + Variable.Name +
        '" вышло за пределы диапазона допустимых значений: ' + AsStr, True, False);
end.

Agro_1

  • Новичок
  • *
  • Сообщений: 9
    • Просмотр профиля
Re: Вопросы по скриптам в Simple-Scada 2
« Ответ #1494 : 28 Марта 2024, 12:46:58 »
Спасибо большое! Попробую

ZWolol

  • Новичок
  • *
  • Сообщений: 17
    • Просмотр профиля
Re: Вопросы по скриптам в Simple-Scada 2
« Ответ #1495 : 08 Апреля 2024, 07:55:44 »
Задана группа сообщений "Двери скважин", ID=1
Как нажав кнопку можно проквитировать все сообщения этой группы?

Все эти сообщения привязаны к битам переменных, которые сбрасываются при квитировании сообщений.
Если я сбрасываю этот бит, то появляется дата завершения, но сообщение остается не подтвержденным.

Simple_Scada

  • Администратор
  • *****
  • Сообщений: 1178
    • Просмотр профиля
Re: Вопросы по скриптам в Simple-Scada 2
« Ответ #1496 : 08 Апреля 2024, 11:43:25 »
Здравствуйте.

Цитировать
Как нажав кнопку можно проквитировать все сообщения этой группы?
Подтвердить сообщения определенной группы, возможности нет. Можно подтвердить либо последнее неподтвержденное сообщение (процедура "ConfirmMessage"), либо все неподтвержденные сообщения (процедура "ConfirmAllMessages").

Цитировать
Все эти сообщения привязаны к битам переменных, которые сбрасываются при квитировании сообщений. Если я сбрасываю этот бит, то появляется дата завершения, но сообщение остается не подтвержденным.
В группе "Неподтвержденные" отображаются все неподтвержденные сообщения проекта. Для подтверждения сообщения его необходимо квитировать через клиент, либо через скрипты, как это описано выше. Сброс бита сообщения не приведет к его квитированию.

Если требуется видеть только активные сообщения проекта, то нужно просматривать группу "Активные сообщения". При необходимости, активные сообщения можно вывести в компонент "Список сообщений" (в свойстве "Группа" указать "Активные сообщения"). При сбросе бита сообщения, оно будет удаляться из группы "Активные сообщения".

surgutking

  • Новичок
  • *
  • Сообщений: 1
    • Просмотр профиля
Re: Вопросы по скриптам в Simple-Scada 2
« Ответ #1497 : 10 Апреля 2024, 16:03:47 »
Есть необходимость управлять цветом фигуры по изменению основной и дополнительной переменной. По основной переменной вызывается скрипт меняющий прозрачность фигуры, и это работает: 1-фигура окрашена в цвет, 0-фигура прозрачна. По дополнительной переменной предполагалось включать или отключать мигание цветом: 1-фигура мигает заданным цветом, 0-фигура не мигает. Совместно эти два события корректно не обрабатываются, при нулевом значении дополнительной переменной фигура мигает если значение основной переменной 1.

Simple Scada

  • Глобальный модератор
  • *****
  • Сообщений: 168
    • Просмотр профиля
    • Simple-Scada
Re: Вопросы по скриптам в Simple-Scada 2
« Ответ #1498 : 10 Апреля 2024, 20:45:50 »
Здравствуйте.

Для работы с дополнительной переменной необходимо использовать свойство переменной VariableEx. Также, Вы можете ознакомиться с этим разделом руководства - в нем рассмотрены частые ошибки при работе со скриптами, в том числе и ошибки в скриптах по событию OnDataChangeEx.

Если таких объектов будет несколько, то писать отдельные скрипты для каждого объекта не требуется. Можно написать один универсальный скрипт и использовать его для всех объектов. Судя по описанию, Ваши переменные имеют тип данных Boolean? Для обращения к значению переменной рекомендуется использовать явное приведение значения переменной к нужному типу. Например, при сравнении с True/False нужно брать значение переменной, переведенное в тип Boolean (свойство AsBool).

Пример универсального скрипта на событие OnDataChange:
Код: (delphi)
begin
  if Sender is TM_Shape then     // проверяем, что Sender это фигура
     with Sender as TM_Shape do  // приводим Sender к типу "TM_Shape"
       if AsBool then            // если значение основной переменной связанной с фигурой равно True/1
         Alpha := 255            // изменить прозрачность фигуры на 255
       else                      // иначе
         Alpha := 0              // изменить прозрачность фигуры на 0
end.

Пример универсального скрипта на событие OnDataChangeEx:
Код: (delphi)
begin
  if Sender is TM_Shape then      // проверяем, что Sender это фигура
     with Sender as TM_Shape do   // приводим Sender к типу "TM_Shape"
       if  VariableEx.AsBool then // если значение доп.переменной связанной с фигурой равно True/1
         FlashColor := clRed      // включить мигание объекта красным цветом
       else                       // иначе
         FlashColor := clNone;    // отключить мигание объекта
end.
« Изменён: 10 Апреля 2024, 21:02:28 от Simple_Scada »

avtzarenko

  • Новичок
  • *
  • Сообщений: 1
    • Просмотр профиля
Re: Вопросы по скриптам в Simple-Scada 2
« Ответ #1499 : 18 Апреля 2024, 13:22:34 »
Добрый день.
Просьба подсказать как организовать подсчет выпуска продукции в минуту.
С контролера  передаются накопительные данные 0~25000, требуется получить какое количество произведено в минуту с выводом на форму для просмотра и построения трендов.

Написал скрипт, но не понимаю, как организовать: выпуск продукции в мин= выпуск продукции текущий - выпуск продукции минуту назад (например текущий - 1200, минуту назад - 1150, т.е выпуск в минуту равен 50 шт)

Код: (delphi)
var
  Speedbotle_temp: integer;

begin
  if Dicount2.Value = 0 then
    Speedbotle_min.Value := 0
  else
    Speedbotle_min.Value := Dicount2.Value - Speedbotle_temp;
  Speedbotle_temp := Dicount2.Value
end.
« Изменён: 18 Апреля 2024, 17:37:54 от Simple_Scada »