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

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

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

Ragnarok

  • Новичок
  • *
  • Сообщений: 11
    • Просмотр профиля
Re: Вопросы по скриптам в Simple-Scada 2
« Ответ #600 : 02 Марта 2018, 08:29:15 »
Создаем скрипт с запуском по изменению переменной.
Это не совсем то, что нужно. Например:
Код: (delphi)
begin
    if Variable.AsInt = -1 then
       text1.FontColor := clRed;
end.
Переменная стала -1, скрипт выполнился и цвет текста стал красным. Переменная стала 0, но цвет текста по-прежнему красный. Если делать так:
Код: (delphi)
begin
  if Variable.AsInt = -1 then
    text1.FontColor := clRed
  else
    text1.FontColor := clGreen;
end.
тогда переменная равна -1, цвет изменился, но другая переменная изменила значение, скажем стала 0, цвет меняется на зеленый, хотя одна из переменных по-прежнему равна -1.

Для себя сделал по-другому. Секундный скрипт с кодом:
Код: (delphi)
begin
  if (aVar1 = -1) or (aVar2 = -1) or (aVar3 = -1) or (aVar4 = -1) or (aVar5 = -1) or (aVar6 = -1) then
    Text1.fontColor := clRed
  else Text1.FontColor := clBlack;
end;
Теперь цвет красный, если хотя бы одна из переменных равна -1.
« Изменён: 26 Мая 2018, 13:42:02 от Simple-Scada »

Victor_P.

  • Пользователь
  • **
  • Сообщений: 69
    • Просмотр профиля
Re: Вопросы по скриптам в Simple-Scada 2
« Ответ #601 : 02 Марта 2018, 08:39:37 »
Ragnarok, а почему секундный?
Сделайте все то-же самое, но в скрипте по изменению переменной.

Simple-Scada

  • Администратор
  • *****
  • Сообщений: 2996
    • Просмотр профиля
    • Simple-Scada
Re: Вопросы по скриптам в Simple-Scada 2
« Ответ #602 : 02 Марта 2018, 08:54:40 »
Цитировать
Сделайте все то-же самое, но в скрипте по изменению переменной.
Именно, а секундный скрипт будет впустую расходовать ресурсы.

Ragnarok

  • Новичок
  • *
  • Сообщений: 11
    • Просмотр профиля
Re: Вопросы по скриптам в Simple-Scada 2
« Ответ #603 : 02 Марта 2018, 08:55:52 »
Кстати, да. Так лучше. Так и сделаю

Simple-Scada

  • Администратор
  • *****
  • Сообщений: 2996
    • Просмотр профиля
    • Simple-Scada
Re: Вопросы по скриптам в Simple-Scada 2
« Ответ #604 : 02 Марта 2018, 10:02:34 »
Пишу дипломный проект, в котором присутствует автоматизированное управление котлоагрегатом и параметрическая диагностика.
Возник вопрос: как написать скрипт для управления над заслонкой?
еcolor=red]Есть заслонка, к нему прикрепил Поля(Field)- значения параметров и  три кнопки ( Откр, Стоп, Закр) - нужно чтобы заслонка меняла цвет в зависимости от нажатия кнопок и значение в Поле(Field) увеличивалась/уменьшалась при открытии/закрытии заслонки, а при нажатии СТОП сохраняла последнее значение. СКРИНШОТ 1
Вы можете просто связать поле, заслонку и кнопки "Открыть" и "Закрыть" (кнопки должны быть без фиксации) с одной целочисленной переменной. Первая кнопка должна записывать единицу в переменную. Вторая - ноль. Заслонка будет автоматически менять цвет на зелёный когда открыта и на серый когда закрыта.
« Изменён: 02 Марта 2018, 10:11:32 от Simple-Scada »

tgeka86

  • Новичок
  • *
  • Сообщений: 6
    • Просмотр профиля
Re: Вопросы по скриптам в Simple-Scada 2
« Ответ #605 : 22 Марта 2018, 09:05:47 »
Здравствуйте! Обнаружился неприятный баг в версии 2.2.7.1:
Необходим универсальный скрипт, который обрабатывал бы два DI сигнала и менял цветовую индикацию разгных объектов. Пусть будут два сигнала DI_1 и DI_2. На основную переменную - DI_1, на дополнительную - DI_2. Объекты Клапан и Изображение.
Цветовая схема:
Код
Если DI_1 = 1 DI_2 = 0 - зелёный цвет;
Если DI_0 = 1 DI_2 = 1 - серый цвет;
Если DI_1 = 1 DI_2 = 1 - красный цвет;
Если DI_1 = 0 DI_2 = 0 - серый цвет, жёлтое моргание;
Пишем скрипт (листинг ниже) и подвязываем его на оба события по основному и дополнительному тэгу. С приведённым листингом - объект изображение отрабатывает правильно по цветовой схеме, а вот клапан - нет.
Клапан работает двояко: если был сигнал DI_1 = 0, DI_2 = 1, пришло событие DI_1 = 1 - клапан становится зелёным (так не должно быть), а изображение - красным (как и положено).
Если был сигнал DI_1 = 1, DI_2 = 0, пришло событие DI_2 = 1 - клапан становится карсным как и положено.
Другие переменные на клапан не подвязывались.

Листинг:
Код: (delphi)
var
Color1_0, Font1_0, Color0_1, Font0_1, Color1_1, Font1_1, Color0_0, Font0_0, Flash1_1, Flash0_0:  Cardinal;
begin
Color1_0 := $00CE00;    //Green
Font1_0  := clBlack;
Color0_1 := clLightGray;
Font0_1  := ClBlack;
Color1_1 := ClRed;    //Green
Font1_1  := clBlack;
Color0_0 := clLightGray;
Font0_0  := clBlack;
Flash1_1 := ClNone;
Flash0_0 := clYellow;
//Если вызвавший объект - изображение
if Sender is TM_Image then
  with Sender as TM_Image do
    begin
      if  ((Variable.AsBool = true) AND (VariableEX.AsBool = false)) then
        begin
        Alpha := 255; Color := Color1_0;
        FlashColor := clNone;
        end;
      if  ((Variable.AsBool = false) AND (VariableEX.AsBool = true)) then
        begin
        Alpha := 255; Color := Color0_1;
        FlashColor := clNone;
        end;
      if  ((Variable.AsBool = true) AND (VariableEX.AsBool = true)) then
        begin
        Alpha := 255; Color := Color1_1;
        FlashColor := Flash1_1;
        end;
      if  ((Variable.AsBool = false) AND (VariableEX.AsBool = false)) then
        begin
        Alpha := 255; Color := Color0_0;
        FlashColor := Flash0_0;
        end;
    end;
//Если вызвавший объект - клапан
if Sender is TM_Valve then
  with Sender as TM_Valve do
    begin
      if  ((Variable.AsBool = true) AND (VariableEX.AsBool = false)) then
        begin
        Alpha := 255; Color := Color1_0;
        FlashColor := clNone;
        end;
      if  ((Variable.AsBool = false) AND (VariableEX.AsBool = true)) then
        begin
        Alpha := 255; Color := Color0_1;
        FlashColor := clNone;
        end;
      if  ((Variable.AsBool = true) AND (VariableEX.AsBool = true)) then
        begin
        Alpha := 255; Color := Color1_1;
        FlashColor := Flash1_1;
        end;
      if  ((Variable.AsBool = false) AND (VariableEX.AsBool = false)) then
        begin
        Alpha := 255; Color := Color0_0;
        FlashColor := Flash0_0;
        end;
    end;
end.
P.S.: у нас приобретены лицензии Simple Scada 2.2.7.1. версии Professional (с расиренной техподдержкой, ФКП "Комбинат "Каменский").
Просим также прислать последниие версии скады (ссылки наскачивание) на наш email.
« Изменён: 26 Мая 2018, 10:12:44 от Simple-Scada »

GEW

  • Новичок
  • *
  • Сообщений: 47
    • Просмотр профиля
Re: Вопросы по скриптам в Simple-Scada 2
« Ответ #606 : 22 Марта 2018, 09:17:27 »
По данному вопросу (баг с клапаном) може писать также на мой email (до этого отписался мой коллега)

Simple-Scada

  • Администратор
  • *****
  • Сообщений: 2996
    • Просмотр профиля
    • Simple-Scada
Re: Вопросы по скриптам в Simple-Scada 2
« Ответ #607 : 22 Марта 2018, 09:25:05 »
Здравствуйте.

Здесь нет ошибки. Когда Вы связываете клапан с переменной - он автоматически начинает менять цвет в зависимости от значения этой переменной. Прочтите эту статью. Т.е. встроенное поведение клапана перекрывает действия скрипта. Чтобы клапан не менял цвет автоматически нужно разорвать его связь с переменной. Для Вашей задачи возможно будет проще вместо стандартного клапана использовать компонент "Изображение" с текстурой клапана.

GEW

  • Новичок
  • *
  • Сообщений: 47
    • Просмотр профиля
Re: Вопросы по скриптам в Simple-Scada 2
« Ответ #608 : 22 Марта 2018, 09:36:05 »
Хорошо. Я это предполагал. Существуют ли планы добавить вторую дополнительную переменную к некоторым объектам? Это бы решило очень много проблем. Или добавить  отключение основной переменной от функционала клапанов, кнопок (и т.д.)?
Хочется работать с концепцией универсальных скриптов. Но одна доп переменная для многих задач это слишком мало. Часто сталкиваемся с тем что приходится писать неуниверсальные скрипты и добавлять тонны листинга с повторяющимся текстом и разницей лишь в названиях двух -трёх переменных.
Как ещё один вариант - сделать событие - изменилось значение переменных из списка.
С использованием изображений для этой задачи тоже не всё так просто: как только встаёт задача использования флешинга - возникают некоторые сложности с цветом (у меня было сообщение по этому поводу на примере трёхходового клапана, который мы нарисовали сами).
« Изменён: 22 Марта 2018, 09:39:54 от GEW »

Simple-Scada

  • Администратор
  • *****
  • Сообщений: 2996
    • Просмотр профиля
    • Simple-Scada
Re: Вопросы по скриптам в Simple-Scada 2
« Ответ #609 : 22 Марта 2018, 09:39:41 »
Цитировать
Как ещё один вариант - сделать событие - изменилось значение переменных из списка.
Такое событие есть начиная с версии 2.2.6.0. Пример реализации подробно описан здесь.

GEW

  • Новичок
  • *
  • Сообщений: 47
    • Просмотр профиля
Re: Вопросы по скриптам в Simple-Scada 2
« Ответ #610 : 22 Марта 2018, 09:45:10 »
Я имел ввиду сделать подобное в свойствах объекта. Скриптом мы сейчас так и будем переделывать проект, просто когда несколько сотен таких связанных логикой переменных, заводить под них сотню дополнительных Result не слишком удобно.

emoxristov

  • Пользователь
  • **
  • Сообщений: 53
    • Просмотр профиля
Re: Вопросы по скриптам в Simple-Scada 2
« Ответ #611 : 22 Марта 2018, 19:27:16 »
У меня есть кнопка с аналоговым входом AI15 .получение сигнала AI15 для активации других кнопок какой скрипт следует писать для первой кнопки ?

emoxristov

  • Пользователь
  • **
  • Сообщений: 53
    • Просмотр профиля
Re: Вопросы по скриптам в Simple-Scada 2
« Ответ #612 : 22 Марта 2018, 20:44:40 »
как добавить паузу между Button14 и Button1  Я хочу, чтобы пауза составляла около 10 секунд

Simple-Scada

  • Администратор
  • *****
  • Сообщений: 2996
    • Просмотр профиля
    • Simple-Scada
Re: Вопросы по скриптам в Simple-Scada 2
« Ответ #613 : 25 Марта 2018, 09:50:32 »
Я имел ввиду сделать подобное в свойствах объекта. Скриптом мы сейчас так и будем переделывать проект, просто когда несколько сотен таких связанных логикой переменных, заводить под них сотню дополнительных Result не слишком удобно.
Рассмотрим вариант с добавлением произвольного количества доп. переменных для каждого объекта.

У меня есть кнопка с аналоговым входом AI15 .получение сигнала AI15 для активации других кнопок какой скрипт следует писать для первой кнопки ?
Не понятен Ваш вопрос. Нужно нажать другие кнопки при включении переменной AI15?

как добавить паузу между Button14 и Button1  Я хочу, чтобы пауза составляла около 10 секунд
Только через таймеры. Т.е. создать новую внутреннюю переменную vrTimer с типом данных Integer. На скрипт Button20_OnDataChange пишем код:
Код: (delphi)
begin
  Button14.Value := 0;
  vrTimer.Value := 10;
end.

Далее создаем такой секундный скрипт:
Код: (delphi)
begin
  if vrTimer.AsInt > 0 then
  begin
    vrTimer.Value := vrTimer.Value - 1;
    if vrTimer.AsInt = 0 then
      Button1.Value := 0;
  end;
end.
« Изменён: 26 Мая 2018, 10:13:33 от Simple-Scada »

serg

  • Новичок
  • *
  • Сообщений: 16
    • Просмотр профиля
Re: Вопросы по скриптам в Simple-Scada 2
« Ответ #614 : 17 Апреля 2018, 04:04:29 »
Подскажите , как переменную типа REAL  (codesys ) вывести на скаду ?

Хочу вывести показания температуры с двумя знаками после запятой . В codesys есть переменная тип REAL , а в simple-scada SINGLE . Думаю , надо   в codesys real умножить на 100 и преобразовать в integer , а в скаде integer преобразовать в single и разделить на 100 . Не могу разобраться со скриптом преобразования типов (Преобразует целое число Value в строку).

Или как-то делается по другому .