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

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

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

alan54

  • Постоялец
  • ***
  • Сообщений: 145
    • Просмотр профиля
Re: Вопросы по скриптам в Simple-Scada 2
« Ответ #720 : 02 Октября 2018, 11:37:17 »
Спасибо, так оно и есть, превышено количество запусков отчета.
Еще вопрос: пытаюсь вызвать процедуру RunSQL() - никакой реакции. Видимо, она не работает в демо-версии? Но почему нет никакой ругани?

Simple_Scada

  • Администратор
  • *****
  • Сообщений: 1176
    • Просмотр профиля
Re: Вопросы по скриптам в Simple-Scada 2
« Ответ #721 : 02 Октября 2018, 15:08:51 »
Здравствуйте!

Процедура RunSQL недоступна в версии DEMO-64. Протестировать работу процедуры RunSQL можно на версии DEMO-TIME.

alan54

  • Постоялец
  • ***
  • Сообщений: 145
    • Просмотр профиля
Re: Вопросы по скриптам в Simple-Scada 2
« Ответ #722 : 02 Октября 2018, 18:20:27 »
Процедура RunSQL недоступна в версии DEMO-64. Протестировать работу процедуры RunSQL можно на версии DEMO-TIME.
Проверил - действительно... Спасибо еще раз. Буду раскручивать директора на покупку проф-версии.

abarenov

  • Новичок
  • *
  • Сообщений: 2
    • Просмотр профиля
Re: Вопросы по скриптам в Simple-Scada 2
« Ответ #723 : 05 Октября 2018, 15:58:47 »
огромное спасибо...возможно ли к данному скрипту прибавить сообщение..которое будет появляться в логе (+звук), при плохом признаке качества переменной... естественно сообщение должно соответствовать  тому полю которое окрасилось в красный цвет..
Да, можно. Вот так:

Код
var
  aVar: TM_Variable;
begin
  // сначала проверяем что скрипт вызван объектом
  if Sender is TM_Object then
  begin
    // получаем переменную с которой связан объект
    aVar := TM_Object(Sender).Variable;

    // если не удалось получить переменную объекта, то прерываем выполнение скрипта
    if not Assigned(aVar) then Exit;

    if aVar.IsGoodQuality then
      TM_Object(Sender).Color := clLime
    else
      begin
        TM_Object(Sender).Color := clRed;
        AddMessage(Now, mkWarning, Sender.Name + '. Плохое качество тега!', TRUE, TRUE);
      end;
  end;
end.

Обратите внимание, что процедура AddMessage появилась только в Simple-Scada 2.2.0.0. Обновите, если у Вас более старая версия.


Здравствуйте. В Simple Scada 2 имеется двадцать полей, в которые выводятся значения температур. Как можно периодически (по таймеру) подсвечивать поле с максимальным значением?
Здравствуйте. Правильнее будет не по таймеру, а по изменению (OnDataChange). Все поля придется перебирать в скрипте (в будущем сможем предложить лучшее решение, но пока только так). Далее подробное описание реализации.

Допустим наши поля называются Field1, Field2 ... Field20. Переходим в меню скриптов и нажимаем кнопку "Создать скрипт". В раскрывшемся окне вводим название скрипта, а тип события оставляем "Универсальный". И пишем такой код:

Код
var
  aMaxField: TM_Field;

  procedure GetMax(AField: TM_Field);
  begin
    AField.Color := clSilver;  // сбрасываем цвет поля на стандартный
    if AField.AsInt > aMaxField.AsInt then
      aMaxField := AField;
  end;

begin
  aMaxField := Field1;

  GetMax(Field1);
  GetMax(Field2);
  //... и так далее
  GetMax(Field20);

  aMaxField.Color := clIndianRed; 
end.

Готово. Теперь выделяем все 20 полей и на событие OnDataChange ставим этот скрипт.

Далее опишем код скрипта: есть локальная переменная aMaxField, которая сначала устанавливается равной первому полю Field1. Затем для каждого из полей вызывается подпроцедура GetMax в которую передается очередное поле. И если значение в переданном поле больше чем значение в aMaxField, то aMaxField приравнивается переданному полю. В итоге после всех процедур GetMax в переменной aMaxField будет поле с самым большим значением. Его мы и подсвечиваем красным цветом. В примере работа идет с целочисленными переменными. Если у вас в полях вещественные числа, то измените в коде AsInt на AsFloat.

может чтобы не перебирать поля связать их имя с переменной например таким образом
имя поля равно Field + ID переменной
а в переборе использовать GetFieldByName('Field' + inttostr(Variable.ID)) вместо Field1,Field2 и тп?
все равно ведь в скрипт будут добавляться переменные для отслеживания?
или если в качестве переменных в скрипте будут лежать TM_Field то может Variable.Maximum?
« Изменён: 05 Октября 2018, 16:04:27 от abarenov »

Simple-Scada

  • Администратор
  • *****
  • Сообщений: 2998
    • Просмотр профиля
    • Simple-Scada
Re: Вопросы по скриптам в Simple-Scada 2
« Ответ #724 : 07 Октября 2018, 22:13:13 »
abarenov, сообщения которые Вы процитировали от 07 марта 2017 года, тогда в Simple-Scada было значительно меньше возможностей, функции поиска были недоступны (например GetFieldByName). Поэтому это было невозможно. Сейчас задачу можно решить по-другому.

Олег Печёнов

  • Новичок
  • *
  • Сообщений: 17
    • Просмотр профиля
Re: Вопросы по скриптам в Simple-Scada 2
« Ответ #725 : 10 Октября 2018, 21:36:36 »
Добрый день,

долго мучился и обнаружил, что запись файла происходит по пути "SScada\projects\название проекта\user files", а исполнение из директории Sscada\

как  уровнять пути?

Код: (delphi)
TextFileOpen('smool.bat', '', fomRewrite, fcpUTF8);     { открыть файл для записи }

  { записать в файл строку }

  Textfilewriteln(textwrite);

  { закрыть файл }
  TextFileClose;

   { запуск }
   RunApplication('brew', 'smool.bat', ''); 
« Изменён: 11 Октября 2018, 09:50:17 от Simple_Scada »

Simple_Scada

  • Администратор
  • *****
  • Сообщений: 1176
    • Просмотр профиля
Re: Вопросы по скриптам в Simple-Scada 2
« Ответ #726 : 11 Октября 2018, 10:07:36 »
Здравствуйте!

Если в функции TextFileOpen оставить пустым параметр APath(полный путь к файлу), как это сделано у Вас, то будет взят стандартный путь: "\Simple-Scada\Projects\Папка_проекта\User files\". Также и с процедурой RunApplication - во втором параметре AFileName нужно указать путь к приложению. Например, если нужно записывать в файл, расположенный в директории "D:\Моя папка\", а затем выполнить его, то код необходимо изменить так:

Код: (delphi)
TextFileOpen('smool.bat', 'D:\Моя папка\', fomRewrite, fcpUTF8);     { открыть файл для записи }
 
  { записать в файл строку }
 
  Textfilewriteln(textwrite);
 
  { закрыть файл }
  TextFileClose;
 
   { запуск }
   RunApplication('brew', 'D:\Моя папка\smool.bat', '');

maks48

  • Новичок
  • *
  • Сообщений: 23
    • Просмотр профиля
Re: Вопросы по скриптам в Simple-Scada 2
« Ответ #727 : 12 Октября 2018, 18:23:48 »
Подскажите, пожалуйста, как нарисовать из скрипта эллипс при открытии экрана? Вариант с заранее нарисованным эллипсом и изменением свойства видимость слишком прост  :)

Simple_Scada

  • Администратор
  • *****
  • Сообщений: 1176
    • Просмотр профиля
Re: Вопросы по скриптам в Simple-Scada 2
« Ответ #728 : 13 Октября 2018, 20:51:12 »
Здравствуйте!

Создавать объекты из скрипта нельзя, поэтому самым простым вариантом будет изменение свойства объекта "Видимость".

vyacheslav

  • Новичок
  • *
  • Сообщений: 40
    • Просмотр профиля
Re: Вопросы по скриптам в Simple-Scada 2
« Ответ #729 : 15 Октября 2018, 08:33:14 »
Добрый день подскажите, нужен скрипт для открытия картинки (JPEG) из проекта,  которая находиться на сервере (путь:\\\\hproliant\info_simplescada\Температурный график )

maks48

  • Новичок
  • *
  • Сообщений: 23
    • Просмотр профиля
Re: Вопросы по скриптам в Simple-Scada 2
« Ответ #730 : 15 Октября 2018, 09:33:53 »
Спасибо! А можете добавить возможность рисовать точку, окружность, прямоугольник с заданными координатами из скрипта? При переходе на другой экран - графические примитивы удаляются.

Simple_Scada

  • Администратор
  • *****
  • Сообщений: 1176
    • Просмотр профиля
Re: Вопросы по скриптам в Simple-Scada 2
« Ответ #731 : 15 Октября 2018, 22:33:26 »
Здравствуйте!

Цитировать
нужен скрипт для открытия картинки (JPEG) из проекта,  которая находиться на сервере (путь:\\\\hproliant\info_simplescada\Температурный график )
Для этого нужно запустить приложение для просмотра изображений(при помощи процедуры RunApplication) и в параметры передать путь к файлу, например:
Код: (delphi)
begin
  RunApplication(GetClientName, 'mspaint.exe', '"\\hproliant\info_simplescada\Температурный график.jpeg"');
end.
При этом, не забудьте открыть доступ к нужному файлу на удаленном ПК.

Цитировать
А можете добавить возможность рисовать точку, окружность, прямоугольник с заданными координатами из скрипта?
Добавление такой возможности не планируется.

maks48

  • Новичок
  • *
  • Сообщений: 23
    • Просмотр профиля
Re: Вопросы по скриптам в Simple-Scada 2
« Ответ #732 : 18 Октября 2018, 10:30:34 »
А через скрипты или как-то иначе можно менять фоновую картинку? Во время работы клиента, естественно.

Simple_Scada

  • Администратор
  • *****
  • Сообщений: 1176
    • Просмотр профиля
Re: Вопросы по скриптам в Simple-Scada 2
« Ответ #733 : 18 Октября 2018, 11:08:06 »
Здравствуйте!

Из скриптов можно менять цветовую схему проекта с помощью процедур SetColorSchemeAll и SetColorSchemeClient. Если требуется менять цвет фона страницы, то это можно сделать только разместив на странице фоновое изображение и менять его цвет.

maks48

  • Новичок
  • *
  • Сообщений: 23
    • Просмотр профиля
Re: Вопросы по скриптам в Simple-Scada 2
« Ответ #734 : 18 Октября 2018, 11:22:30 »
Сторонняя утилита делает вычисления и результат выдает в виде картинки. Вот эту картинку мне динамически надо подгружать в скаду для отображения. Невозможно?