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

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

Автор Тема: Работа с кнопками  (Прочитано 5594 раз)

EvgeniySM

  • Новичок
  • *
  • Сообщений: 30
    • Просмотр профиля
Работа с кнопками
« : 30 Августа 2016, 04:36:55 »
Здравствуйте. Очень понравилась ваша SCADA-система простотой и производительностью, планируем приобретать полную версию, а пока осваиваем бету. В процессе появляется много вопросов, в чём-то получается разобраться самому, иногда помогает Руководство, надеемся на вашу поддержку информацией. Встал следующий вопрос. Есть две кнопки - первая: Включить и Выключить, вторая: Авто и Ручн. Первая кнопка должна быть активна только тогда, когда вторая находится в режиме Ручн. В режиме Авто переменная кнопки Включить и Выключить должна меняться по определённому внешнему алгоритму. Как можно реализовать с помощью скриптов доступность одной кнопки в зависимости от состояния другой?

Fenix

  • Новичок
  • *
  • Сообщений: 30
    • Просмотр профиля
Re: Работа с кнопками
« Ответ #1 : 30 Августа 2016, 07:35:41 »
При значении тега привязанного к первой кнопке = 1 (например), кнопка2.Visible:=true, иначе :=false. Ну, или использовать свойство Enabled у кнопок.
« Изменён: 30 Августа 2016, 09:02:18 от Simple-Scada »

Simple-Scada

  • Администратор
  • *****
  • Сообщений: 2998
    • Просмотр профиля
    • Simple-Scada
Re: Работа с кнопками
« Ответ #2 : 30 Августа 2016, 09:02:00 »
Здравствуйте.

Как правильно подсказывает Fenix, для этого достаточно менять свойство Enabled (доступность) или Visible (видимость). Действия должны быть такими:
  • создаются кнопки "Включить/Выключить" (допустим с именем btnOnOff) и "Ручной/Авто" (с именем btnManAuto);
  • затем для этих кнопок вы задаёте переменную, с которой они связаны;
  • затем Вы должны перейти к событию OnDataChange кнопки btnManAuto. Это событие выполняется когда переменная, связанная с btnManAuto меняется;
  • по этому событию должен выполняться скрипт активации/деактивации кнопки btnOnOff.

Например так:
Код
begin
  if btnManAuto.AsInt = 0 then   // если кнопка "Ручной/Авто" в режиме Ручной
    btnOnOff.Enabled := True     // то делаем кнопку "Вкл./Выкл" активной
  else                           // иначе
    btnOnOff.Enabled := False;   // делаем кнопку "Вкл./Выкл" неактивной
end.

В этом примере ноль принимается за ручной режим, все остальные значения за автоматический. Свойство AsInt (и другие подобные) есть у каждого объекта, они подробно описаны здесь.
« Изменён: 30 Августа 2016, 09:06:53 от Simple-Scada »

EvgeniySM

  • Новичок
  • *
  • Сообщений: 30
    • Просмотр профиля
Re: Работа с кнопками
« Ответ #3 : 30 Августа 2016, 09:21:17 »
Всем спасибо, уже разобрался, использовал button1.Enabled  := false и button1.Enabled  := true (параметр - доступность). Теперь другой вопрос. В автоматическом режиме нужно включать несколько подряд кнопок (как раз тех, что стоят в режиме Авто) с определённым промежутком времени, который можно задать в поле ввода. По сути, это будет присваивание нескольким внешним переменным значения 1000 по порядку с нужным промежутком времени. Началом включения служит нажатие отдельной кнопки, специально для этого предназначенной. Как можно это организовать?

EvgeniySM

  • Новичок
  • *
  • Сообщений: 30
    • Просмотр профиля
Re: Работа с кнопками
« Ответ #4 : 31 Августа 2016, 09:34:36 »
Второй день бьюсь с этими временными задержками, подскажите, как можно реализовать последовательное включение с заданным промежутком времени?

Simple-Scada

  • Администратор
  • *****
  • Сообщений: 2998
    • Просмотр профиля
    • Simple-Scada
Re: Работа с кнопками
« Ответ #5 : 31 Августа 2016, 10:00:52 »
EvgeniySM, Вы хотите перенести на скаду функции, которые должны выполняться контроллером. Мы не рекомендуем такие задачи решать при помощи скады, т.к. это должно решаться программой контроллера. Ведь если Вы завершите работу скады (или компьютер на котором запущена скада выйдет из строя), то процесс перестанет нормально функционировать. Т.е. процесс будет зависеть от работы скады и работы компьютера, чего быть не должно. Скада для этого не предназначена. Проект должен зависеть только от контроллера, а скада должна выполнять визуализацию данных, архивацию и т.п.

Если нужно решить задачу на скаде любой ценой, то решение должно быть следующим:
  • завести отдельную виртуальную переменную, по срабатыванию которой будем выполнять присвоение. Назовем её vrAssign;
  • свяжем кнопку с этой переменной, т.е. кнопка как раз будет включать/выключать присвоение значений по таймеру;
  • создать новый секундный скрипт (т.е. с типом события "Прошла секунда");
  • в этом скрипте по срабатыванию vrAssign присваивать значения поочередно в нужные переменные;
  • чтобы присваивать поочередно придется завести ещё одну виртуальную переменную в которой будем хранить номер очередной переменной, которую нужно присвоить и в секундном скрипте выполнять присвоение и увеличивать номер очередной переменной;

Как правильно реализовать таймер более 1 секунды описано здесь.
« Изменён: 31 Августа 2016, 10:03:19 от Simple-Scada »

Yuriy

  • Новичок
  • *
  • Сообщений: 11
    • Просмотр профиля
Re: Работа с кнопками
« Ответ #6 : 02 Ноября 2016, 18:08:51 »
Добрый день. У меня вопрос следующий. Мне нужно реализовать группу фиксированных кнопок, привязанных к разным переменным, в которой работает только одна кнопка (состояние ВКЛ с подсветкой, значение ее  переменной =1) - остальные автоматически выключаются (состояние ВЫКЛ без подсветки, значение их переменных =0). Каким образом это сделать? Подскажите пожалуйста!

Simple-Scada

  • Администратор
  • *****
  • Сообщений: 2998
    • Просмотр профиля
    • Simple-Scada
Re: Работа с кнопками
« Ответ #7 : 02 Ноября 2016, 18:53:05 »
Здравствуйте.

Прикрепляем пример проекта с решением задачи. В примере группа из трех кнопок, при необходимости можно добавить недостающее количество и дополнить универсальный скрипт.

Yuriy

  • Новичок
  • *
  • Сообщений: 11
    • Просмотр профиля
Re: Работа с кнопками
« Ответ #8 : 02 Ноября 2016, 20:41:32 »
Здорово - огромное спасибо! А я ломал голову - как изменить состояние кнопок на "отключено" со сменой ее свойств. Теперь половина задачи решена. А задача такая. Есть 2 группы кнопок и 1 переменная. Если значение переменной =1 - то работает 1 группа кнопок, если 0 - то вторая. Универсальный скрипт что в примере - не совсем правильно работает. Нужно, чтобы всегда в группе была активной одна кнопка. А скрипт работает так, что при повторном нажатии на кнопку - состояние ее переменной сбрасывается в 0 - а меняться не должно. Я так и не понял - почему.

Simple-Scada

  • Администратор
  • *****
  • Сообщений: 2998
    • Просмотр профиля
    • Simple-Scada
Re: Работа с кнопками
« Ответ #9 : 03 Ноября 2016, 10:57:20 »
Мы просто забыли удалить у кнопок второе состояние. Оно не нужно, т.к. присвоение значений выполняется скриптом. Прикрепляем обновленный проект.