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

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

Labotrays

#780
что за манера вопросом на вопрос отвечать? я спросил - есть или нет? если нет то буду из кнопок городить

asutpvit

Цитата: Labotrays от 14 декабря 2018, 05:17:44если нет то буду из кнопок городить
Простите великодушно ;)
Но Ваш ник и Ваша манера так же отвечать, говорят сами за себя.
П.с. кнопка с фиксацией выполняет роль переключателя. Или вам графический элемент нужен с анимацией.....?

pan2000

Цитата: Labotrays от 13 декабря 2018, 10:16:24делается для операторов бабулек и высока вероятность принять включено за включить.

При данных условиях вполне подходит переключатель из объекта "Уровень" при условии, что его переменная доступа целого типа со шкалой [0-1].
Процесс переключения заключается в перемещении указателя мыши на движок, захвата движка и его перемещении более чем на половину шкалы, что более сложно, чем просто переместить указатель на объект и нажать ЛКМ.
"Пример" во вложении.

alan54

#783
Хотел задать свой вопрос, но нашел аналогичный полуторалетней давности и ответ на него.

Цитата: Simple-Scada от 30 марта 2017, 09:24:23...При этом мы хорошо понимаем, что описанные Вами функции будут очень полезны даже при решении небольших задач, поэтому пункты 1, 2, 4 (касаемо глобальных классов) и 7 будут реализованы в будущих обновлениях...
Можно узнать, когда они (глобальные процедуры) будут реализованы? Надоело один и тот же кусок кода размножать по нескольким скриптам...

Simple-Scada

alan54, скорее всего в одном из двух ближайших обновлений добавим глобальные модули.

emoxristov

#785
Simple-Scada У меня есть несколько кнопок.
Button123
Button124
Button125
У меня есть один выход PWM  ArduinoSerial0_D2
Как изменить этот скрипт, чтобы получить другое напряжение на выходе ArduinoSerial0_D2 а нет променя цвета.

Код: pascal
begin
// Sender - это объект, который вызвал скрипт(например поле, изображение и т.д.)
   if Button123 is TM_Object then     // проверяем, что Sender это объект
     with Button123 as TM_Object do   // приводим Sender к типу "TM_Object"
       case AsInt of               // если значение переменной связанной с объектом равно:
         1..25: Color := clYellow;     // от 1 до 5 - изменить цвет на красный
         26..50: Color := clChartreuse;   // 6 или 7 - изменить цвет на зеленый
         51..255  : Color := clRed;  // 8 - изменить цвет на желтый
       end;
end.  

   Нажатие кнопки Button123 на    ArduinoSerial0_D2 примерно 1волт
   Нажатие кнопки Button124 на    ArduinoSerial0_D2 примерно 2волт
   Нажатие кнопки Button125 на    ArduinoSerial0_D2 примерно 2волт

Simple_Scada

Если требуется изменять значение переменной, то нужно использовать свойство переменной Value. Например:

Код: pascal
begin
  { записываем значение 15 в переменную ArduinoSerial0_D2}
  ArduinoSerial0_D2.Value := 15;
end.

emoxristov

Simple-Scada  скрипт не работает правильно.
Я хочу, чтобы при нажатии кнопки остальные не включались и на выходе имели, например, 1 вольт. Когда я нажимал вторую кнопку, первая выключалась, а вторая - на выходе, например, 2 вольт.

Мне действительно нужна эта опция, пожалуйста, настройте мой проект, который я вам отправляю.

Simple_Scada

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

У Вас в проекте к кнопкам привязана одна и та же переменная "ArduinoSerial0_D2" и для каждой кнопки написан скрипт по событию OnDataChange, в котором меняется значение той же переменной "ArduinoSerial0_D2". Т.е., при нажатии на любую кнопку будут выполняться все скрипты, так как значение переменной "ArduinoSerial0_D2" изменится. Это неправильно.

Если Вам требуется при нажатии на первую кнопку записать в переменную "ArduinoSerial0_D2" значение 15, при нажатии на вторую кнопку значение 50, на третью 70 и т.д., то это можно сделать без использования скриптов. Оставьте у кнопки только одно состояние и установите для каждой кнопки необходимое значение - см. скриншот во вложении. Проект с примером во вложении.

emoxristov

Simple-Scada
Это именно то, что мне нужно, но мне нужно получить нулевое значение при повторном нажатии кнопки.
Как это можно сделать, но кнопки имеют две позиции, например, когда вы нажимаете один раз, значение равно 75, а при повторном нажатии значение равно нулю?

pan2000

emoxristov!
 
Возможно Вам подойдет "радиокнопка", в примере два варианта алгоритма:
- не более одной нажатой кнопки (см. этот);
- только одна нажатая кнопка.

Кнопки с фиксацией и управляются битами переменной iButtons, тег кнопки равен битовой маске.
Переменная кнопок модифицируется скриптами по событию "Пользователь кликнул объект мышью"
Код: pascal
begin
  iButtons.Value := Sender.Tag and iButtons.AsInt;   //  не более одной нажатой кнопки
// действия по кнопкам
  case iButtons.AsInt of
      . . .
  end;
end.

Код: pascal
begin
  iButtons.Value := Sender.Tag;   // только одна нажатая кнопка
// действия по кнопкам
  case iButtons.AsInt of
      . . .
  end;
end.


emoxristov

Цитата: pan2000 от 26 декабря 2018, 16:26:47emoxristov!
 
Возможно Вам подойдет "радиокнопка", в примере два варианта алгоритма:
- не более одной нажатой кнопки (см. этот);
- только одна нажатая кнопка.

Кнопки с фиксацией и управляются битами переменной iButtons, тег кнопки равен битовой маске.
Переменная кнопок модифицируется скриптами по событию "Пользователь кликнул объект мышью"
Код: pascal
begin
  iButtons.Value := Sender.Tag and iButtons.AsInt;   //  не более одной нажатой кнопки
// действия по кнопкам
  case iButtons.AsInt of
      . . .
  end;
end.

Код: pascal
begin
  iButtons.Value := Sender.Tag;   // только одна нажатая кнопка
// действия по кнопкам
  case iButtons.AsInt of
      . . .
  end;
end.

А где поставил переменная ArduinoSerial0_D2 ?

pan2000

Цитата: emoxristov от 26 декабря 2018, 21:44:26А где поставил переменная ArduinoSerial0_D2 ?

Присвоение значений переменной ArduinoSerial0_D2:
Код: pascal
var i:integer;
begin
  iButtons.Value := Sender.Tag and iButtons.AsInt;   //  не более одной нажатой кнопки
// действия по кнопкам
  case iButtons.AsInt of
    2: i := 15;  // значения взяты из примера Button_without_scripts
    4: i := 50;
    8: i := 75;
   16: i := 200;
  else
    i := 0;
  end;
  ArduinoSerial0_D2.Value := i;
end.

vyacheslav

#793
Добрый день, подскажите как в этом скрипте:
Код: pascal
begin
  ReportView('my_client', 'Текущие данные');
end.
вместо определенного клиента, любой клиент нажавший на кнопку сформировать отчет получал его ?

Simple_Scada

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

Для этого нужно использовать функцию GetClientName, которая возвращает имя клиента, который вызвал скрипт:
Код: pascal
begin
  ReportView(GetClientName, 'Текущие данные');
end.