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

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

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

pan2000

  • Постоялец
  • ***
  • Сообщений: 225
    • Просмотр профиля
Re: Вопросы по скриптам в Simple-Scada 2
« Ответ #1665 : 12 Февраля 2026, 17:31:31 »
   Здравствуйте.
Есть ли какая то возможность понять отображается где-то шаблонное окно или нет, чтобы я мог не выполнять скрипт для невидимых никому окон?
Стандартной возможности понять состояние окна нет. Но есть любительская, основанная на массиве пар <ссылка на окно> - <имя клиента>.
При открывании окна пара добавляется в массив. При закрывании - удаляется. При переходе на другую страницу или при отключении клиента удаляются все  пары клиента. Т.е. массив содержит информацию только об открытых окнах подключенных клиентов.
А далее пошли "прилады" - однотипный вызов скриптов для действий в открытых окнах. Скрипты выполняются один раз для каждого окна, независимо от того, сколько клиентов его открыло.
Во вложении пример в лучших традициях барона Мюнхгаузена - состояние массива выводится в таблицу, из которой в свою очередь, заполняются окна при открывании или при изменении таблицы. Переменные не используются, от слова вообще.
Или есть в принципе подход получше для решения такого рода задачи?
Вы изложили свой подход, но никак ни задачу. Для возможности других подходов недостаточно информации. "Огласите весь список, пж-жалуйста" (с) "Операция Ы и ...". Если это не страшная тайна, разумеется.
« Изменён: 13 Февраля 2026, 06:32:15 от pan2000 »

Елена_Силаева

  • Новичок
  • *
  • Сообщений: 1
    • Просмотр профиля
Re: Вопросы по скриптам в Simple-Scada 2
« Ответ #1666 : 13 Февраля 2026, 10:48:49 »
Здравствуйте.
В проекте есть скрипт Nasos1 типа Таймер, который срабатывает раз в секунду.
Код: (delphi)
begin
  i.Value:=(i.Value+1)mod 100;
  Pump_Frequency.Value:=i.Value;
end.
Как его запустить по нажатию кнопки в обработчике OnClick?
Код: (delphi)
 begin
  Nasos1;
end.
     
Данный код не работает пишет не известный идентификатор.
« Изменён: 13 Февраля 2026, 11:35:17 от Simple Scada »

Gabrrr

  • Новичок
  • *
  • Сообщений: 4
    • Просмотр профиля
Re: Вопросы по скриптам в Simple-Scada 2
« Ответ #1667 : 14 Февраля 2026, 20:07:45 »
Вы изложили свой подход, но никак ни задачу. Для возможности других подходов недостаточно информации. "Огласите весь список, пж-жалуйста" (с) "Операция Ы и ...". Если это не страшная тайна, разумеется.
Добрый день. Да я вроде довольно подробно изложил.
Но задача довольно банальная - обновить поля в окне, когда данные изменились. Конкретнее - есть куча мест хранения, отображаемая на мнемосхеме иконками. Тыкаем на иконку, открывается окно, в котором должна отображаться информации о том, что в этом месте хранится. Информация хранится в БД (хотя лично в моем подходе я использую таблицу в качестве буфера, для того чтобы хранить результаты последнего чтения, а не опрашивать БД каждый раз). Соответственно в окне места хранения есть несколько кнопок, например, "удалить предмет" или "создать предмет". Если я создаю предмет, то соответственно вызывается ещё одно окошко, которое надо заполнить. Если удаляю, то после окна конфирмации, я удаляю. И вот собственно вопрос отсюда и пошел. У меня на момент выполнения команд создания или удаления уже открыто окно с отображением информации. И эту информацию после выполненных действий надо как то обновить, без того чтобы оператор закрывал и открывал окно заново. А привязывать окна к внутренним переменным (в которые можно было бы закидывать результаты запроса) не очень хочется, т.к. даже структур и массивов для внутренних переменных нет, насколько я понял. 

pan2000

  • Постоялец
  • ***
  • Сообщений: 225
    • Просмотр профиля
Re: Вопросы по скриптам в Simple-Scada 2
« Ответ #1668 : 16 Февраля 2026, 05:37:32 »
   Здравствуйте.
Да я вроде довольно подробно изложил.
Можно считать что основа проекта "революционная тройка": иконка, информационное окно и окно редактирования. Всех их объединяет уникальный параметр "местоположение".
Пример проекта при следующих условиях: окна совмещены, иконка не является шаблоном и информация о предмете укладывается в одну строку таблицы. Можно достаточно просто работать с этой тройкой одиночными запросами к БД и нет необходимости в таблице. Да и в переменных.
При инициализации шаблонного окна устанавливается цепочка ссылок на управляющие и информационные объекты окна. При открывании окна выполняется запрос к БД на обновление данных в окне.
В окне есть три управляющих кнопки: "НОВЫЙ", "ЗАПИСЬ" и "УДАЛИТЬ". Поля данных доступны для редактирования.

Simple_Scada

  • Администратор
  • *****
  • Сообщений: 1385
    • Просмотр профиля
Re: Вопросы по скриптам в Simple-Scada 2
« Ответ #1669 : 16 Февраля 2026, 10:37:30 »
В проекте есть скрипт Nasos1 типа Таймер, который срабатывает раз в секунду.
Код: (delphi)
begin
  i.Value:=(i.Value+1)mod 100;
  Pump_Frequency.Value:=i.Value;
end.
Как его запустить по нажатию кнопки в обработчике OnClick?
1. Скрипт с типом события "Таймер" будет выполняться периодически, с заданным интервалом сразу после запуска проекта.
2. При работе со значением переменной, рекомендуем использовать явное приведение к нужному типу, например .AsInt, .AsBool и так далее. Также, использование свойства ".Value" в условиях может приводить к некорректной работе – подробнее см. по ссылке.

Если требуется, чтобы код выполнялся по дополнительным условиям, то такие условия нужно добавить в скрипт. Например, чтобы код скрипта выполнялся после нажатия на кнопку необходимо:
1. Создать переменную с типом данных "Boolean", например с именем "vrStart".
2. Связать кнопку с данной переменной.
3. Изменить код скрипта следующим образом:
Код: (delphi)
begin
  if vrStart.AsBool then   // если значение переменной vrStart равно True, то
  begin
    i.Value := (i.AsInt + 1) mod 100;
    Pump_Frequency.Value := i.AsInt;
  end;
end.

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

Gabrrr

  • Новичок
  • *
  • Сообщений: 4
    • Просмотр профиля
Re: Вопросы по скриптам в Simple-Scada 2
« Ответ #1670 : 16 Февраля 2026, 17:22:15 »
иконка не является шаблоном
Я потыкался, но не понимаю откуда это ограничение. Вроде как без разницы кто окно вызовет шаблон или просто объект. Вся "магия" у вас вроде внутри окна происходит.

Можно достаточно просто работать с этой тройкой одиночными запросами к БД и нет необходимости в таблице
У меня к таблице ещё состояние иконок привязано, чтобы было понятно заполнено (т.е. есть какая то информация в БД отличная от нулл для этого места). Я конечно чую, что я  в определенный момент где-то окараюсь и не обновлю вовремя таблицу, но и слать сотни мелких запросов вместо одного большого как будто странно.

При инициализации шаблонного окна устанавливается цепочка ссылок на управляющие и информационные объекты окна.
Это действительно интересная идея и реализация. Думаю цепочку ссылающихся друг на друга объектов могу куда то прикрутить.
А подскажите в SimpleScada инициализация этих шаблонных окон ведь происходит на этапе компиляции/старта сервера? Т.е. когда вы в проекте сделали ссылки на TemplateWnd1 для нескольких текстовых полей, то экземпляры этого окна сразу создались? Или они в момент клика реально инициализируются и появляются в памяти?

И ещё, хотя это немного оффтопик для данной темы, не подскажите как обычно реализуют многострочный ввод/отображение текстовой информации. Т.е. у меня будет запись в бд "комментарий" для каждого места, который неплохо было бы вводить, да и отображать, в несколько строк для читаемости. Для вывода я так понимаю можно подменять что-то на #13#10, либо просто читать текст из БД в котором уже есть переносы строк, но как это вводить не очень понятно. Пока идеи или заставлять оператора использовать какой то символ (условно @) в качестве символа переноса, или делать несколько полей для ввода, каждое из которых будет отвечать за свою строку.



pan2000

  • Постоялец
  • ***
  • Сообщений: 225
    • Просмотр профиля
Re: Вопросы по скриптам в Simple-Scada 2
« Ответ #1671 : 16 Февраля 2026, 20:49:17 »
       Здравствуйте.
иконка не является шаблоном
На опережение, в случае требования двух окон - информационного и редактирования, т.к одностороннюю ссылку между объектами разных шаблонов можно организовать только через обычный объект, имеющий свойство UserData.
Ссылки на объекты шаблонов можно хранить и в глобальном скрипте, но там свои сложности из-за неопределенного порядка выполнения скриптов инициализации.

Цитировать
У меня к таблице ещё состояние иконок привязано
Очередной пример с индикацией состояния мест хранения, тут уж иконка обязательно должна быть обычным объектом.

Цитировать
А подскажите в SimpleScada инициализация этих шаблонных окон ведь происходит на этапе компиляции/старта сервера?
Точно ответить могут лишь авторы Simple-Scada, но полагаю, что создание на этапе компиляции, а инициализация при запуске проекта. Ссылки - сила! Жаль что ссылочное свойство UserData есть не у всех объектов и его не видно в инспекторе.

Цитировать
...как обычно реализуют многострочный ввод/отображение текстовой информации
Можно попробовать "Пишущую машинку" из вложения. Это просто основа, к которой можно добавить редактирование,  и т.д.
« Изменён: 17 Февраля 2026, 03:43:46 от pan2000 »

Gabrrr

  • Новичок
  • *
  • Сообщений: 4
    • Просмотр профиля
Re: Вопросы по скриптам в Simple-Scada 2
« Ответ #1672 : 17 Февраля 2026, 12:17:30 »
Очередной пример с индикацией состояния мест хранения, тут уж иконка обязательно должна быть обычным объектом.   
Большое спасибо за уделенное время. Я точно пару полезных вещей подсмотрел. Не уверен правда пока на каком варианте остановиться, то что у меня было или что-то ближе к вашему сделать.

Цитировать
Можно попробовать "Пишущую машинку" из вложения. Это просто основа, к которой можно добавить редактирование,  и т.д.
Как вариант. Для меня может даже проще будет просто таблицу использовать, а при чтении парсить знаки переноса обратно в новую строку таблицы.

gl_ingener@nurzhanar.kz

  • Новичок
  • *
  • Сообщений: 3
    • Просмотр профиля
Re: Вопросы по скриптам в Simple-Scada 2
« Ответ #1673 : 19 Февраля 2026, 09:12:09 »
Добрый день. почему не работает данный скрипт.
Код: (delphi)
var
  aQuery: string;
begin
  // запрос на вставку в БД значения переменной vrTemperature
  aQuery := 'INSERT IGNORE INTO `my_archive` (`timestamp`, `value`) ' +
            'VALUES (NOW(), ' + QuotedStr(vrTemperature.AsStr) + ')';
  RunSQL(aQuery, nil, 0);
end.
Необходимо сохранять переменную в базе данных. Делал все по инструкции, не работает
« Изменён: 19 Февраля 2026, 09:52:06 от Simple_Scada »

Simple Scada

  • Глобальный модератор
  • *****
  • Сообщений: 279
    • Просмотр профиля
    • Simple-Scada
Re: Вопросы по скриптам в Simple-Scada 2
« Ответ #1674 : 19 Февраля 2026, 11:53:35 »
Здравствуйте.

1. В любых непонятных ситуациях нужно в первую очередь проверить журнал сервера скады. С большой вероятностью в нем будут содержаться ошибки или предупреждения, которые укажут, в чем именно проблема.
2. В примере по ссылке описано, как сохранять значение требуемой переменной с заданной периодичностью в свою таблицу БД. Если строго следовать руководству, то проблем быть не должно. Убедитесь, что в проекте настроено подключение к БД и в указанной БД создана таблица "my_archive".
3. Какая версия Simple-Scada используется? Возможно, Вы используете версию с ограничением на выполнение SQL-запросов – это версии Minimal и Demo-64.
4. Если требуется архивация переменных, то в этом случае использовать скрипты не требуется. Для этого нужно у требуемых переменных настроить архивацию – описание доступных способов архивации и их настроек доступно по ссылке. Тогда, после запуска проекта переменные, у которых включена архивация будут архивироваться в БД и можно будет работать с архивными данными этих переменных, например просмотреть тренды, создать отчет и т.д.

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

gl_ingener@nurzhanar.kz

  • Новичок
  • *
  • Сообщений: 3
    • Просмотр профиля
Re: Вопросы по скриптам в Simple-Scada 2
« Ответ #1675 : 19 Февраля 2026, 16:23:26 »
Большое спасибо разобрался. Установили демо версию на 64 тега

gl_ingener@nurzhanar.kz

  • Новичок
  • *
  • Сообщений: 3
    • Просмотр профиля
Re: Вопросы по скриптам в Simple-Scada 2
« Ответ #1676 : 19 Февраля 2026, 16:48:28 »
Данный скрипт запускал по событию Изменились переменные. Добавил в список скрипта необходимые переменные которые нужно передавать в БД в кол. 10-15 шт. Все работает, а как теперь при перезагрузке scada системы записать последние данные из БД в эти переменные обратно. у меня все сбрасывается.
Код: (delphi)
var
  aQuery: string;
begin
  // запрос на вставку в БД значения переменной vrTemperature
  aQuery := 'INSERT IGNORE INTO `my_archive` (`timestamp`, `value`) ' +
            'VALUES (NOW(), ' + QuotedStr(vrTemperature.AsStr) + ')';
  RunSQL(aQuery, nil, 0);
end.
Хотим обвязать данной системой Емкости брожения пива
заранее спасибо
« Изменён: 19 Февраля 2026, 17:22:47 от Simple Scada »

Simple_Scada

  • Администратор
  • *****
  • Сообщений: 1385
    • Просмотр профиля
Re: Вопросы по скриптам в Simple-Scada 2
« Ответ #1677 : 24 Февраля 2026, 10:15:54 »
Здравствуйте.

Пришлите на support@simple-scada.com текущую версию Вашего проекта из директории "..\Simple-Scada 2\Projects\" и подробно опишите, какую именно задачу Вы пытаетесь решить. Переменные внешние (с OPC-сервера) или внутренние?