Вопросы по скриптам в Simple-Scada 2

Автор Simple-Scada, 29 января 2016, 15:19:20

alan54

Спасибо, так оно и есть, превышено количество запусков отчета.
Еще вопрос: пытаюсь вызвать процедуру RunSQL() - никакой реакции. Видимо, она не работает в демо-версии? Но почему нет никакой ругани?

Simple_Scada

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

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

alan54

Цитата: Simple_Scada от 02 октября 2018, 15:08:51Процедура RunSQL недоступна в версии DEMO-64. Протестировать работу процедуры RunSQL можно на версии DEMO-TIME.
Проверил - действительно... Спасибо еще раз. Буду раскручивать директора на покупку проф-версии.

abarenov

#723
Цитата: Simple-Scada от 08 марта 2017, 00:07:16
Цитата: Guchi от 07 марта 2017, 13:56:13огромное спасибо...возможно ли к данному скрипту прибавить сообщение..которое будет появляться в логе (+звук), при плохом признаке качества переменной... естественно сообщение должно соответствовать  тому полю которое окрасилось в красный цвет..
Да, можно. Вот так:

Код: pascal
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. Обновите, если у Вас более старая версия.


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

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

Код: pascal
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?

Simple-Scada

abarenov, сообщения которые Вы процитировали от 07 марта 2017 года, тогда в Simple-Scada было значительно меньше возможностей, функции поиска были недоступны (например GetFieldByName). Поэтому это было невозможно. Сейчас задачу можно решить по-другому.

Олег Печёнов

#725
Добрый день,

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

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

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

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

  Textfilewriteln(textwrite);

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

   { запуск }
   RunApplication('brew', 'smool.bat', '');  

Simple_Scada

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

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

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

maks48

Подскажите, пожалуйста, как нарисовать из скрипта эллипс при открытии экрана? Вариант с заранее нарисованным эллипсом и изменением свойства видимость слишком прост  :)

Simple_Scada

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

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

vyacheslav

Добрый день подскажите, нужен скрипт для открытия картинки (JPEG) из проекта,  которая находиться на сервере (путь:\\\\hproliant\info_simplescada\Температурный график )

maks48

Спасибо! А можете добавить возможность рисовать точку, окружность, прямоугольник с заданными координатами из скрипта? При переходе на другой экран - графические примитивы удаляются.

Simple_Scada

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

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

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

maks48

А через скрипты или как-то иначе можно менять фоновую картинку? Во время работы клиента, естественно.

Simple_Scada

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

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

maks48

Сторонняя утилита делает вычисления и результат выдает в виде картинки. Вот эту картинку мне динамически надо подгружать в скаду для отображения. Невозможно?