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

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

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

azrael454

  • Новичок
  • *
  • Сообщений: 30
    • Просмотр профиля
Re: Вопросы по скриптам в Simple-Scada 2
« Ответ #1095 : 31 Августа 2020, 15:45:44 »
Добрый день.

Имеется ли возможность отслеживать состояние окна? Если оно открыто, то делать те действия, а если закрыто, то другие.

Simple-Scada

  • Администратор
  • *****
  • Сообщений: 3197
    • Просмотр профиля
    • Simple-Scada
Re: Вопросы по скриптам в Simple-Scada 2
« Ответ #1096 : 02 Сентября 2020, 09:57:20 »
Здравствуйте.

Проект и его скрипты исполняются сервером скады на серверном ПК. Окна открывают клиенты, поэтому возможна ситуация. когда на одном клиенте окно открыто, а на другом оно же закрыто. У каждого окна есть два события OnShow (выполняется когда любой клиент отрыл окно) и OnClose (когда любой клиент закрыл окно). Если Вам эти события подходят, то можете решить задачу с их помощью.

azrael454

  • Новичок
  • *
  • Сообщений: 30
    • Просмотр профиля
Re: Вопросы по скриптам в Simple-Scada 2
« Ответ #1097 : 02 Сентября 2020, 11:39:48 »
Спасибо, не совсем подходит.

Задача у меня стоит такая, что я спроектировал маленькое меню, кнопками которых я вызываю отдельные окна. Соответственно, чтобы понимать какое окно открыто / закрыто, я меняю цвет у кнопки, привязанной к окну. На нее же я могу закрыть окно, но при этом я могу закрыть окно "крестиком", который не скроешь никак и отслеживать его нажатие или отжатие тоже нельзя.

То есть баг вот в чем. Есть две цепочки:
  • Нажал на кнопку - открыл окно - кнопка поменяла цвет 1 - нажал на ту же кнопку - окно закрылось - кнопка поменяла на цвет 0.
  • Нажал на кнопку - открыл окно - кнопка поменяла цвет 1 - закрыл окно крестиком - кнопка не сбросила своего состояния и не поменяла цвет
Чтобы мне еще раз окно вызвать, мне нужно нажать на кнопку, чтобы скинуть ей состояние и она поменяет цвет, и только потом я снова могу открыть окно. Решений этой задачки я вижу два:
  • Если есть параметр у окна, который завязан на "крестик", то надо отслеживать этот параметр
  • Если появится возможность скрывать "крестик" и заменять его своей кнопкой, то все становится сводится к событию OnCLick
« Изменён: 02 Сентября 2020, 12:02:32 от Simple-Scada »

Simple-Scada

  • Администратор
  • *****
  • Сообщений: 3197
    • Просмотр профиля
    • Simple-Scada
Re: Вопросы по скриптам в Simple-Scada 2
« Ответ #1098 : 02 Сентября 2020, 12:02:06 »
Цитировать
закрыть окно "крестиком"... и отслеживать его нажатие или отжатие тоже нельзя.
Отслеживать можно. Крестик закрывает окно, соответственно в окне вызывается событие OnClose. В нём можно сбрасывать цвет кнопки.

То, что Вы описали подходит только для проекта с одним клиентом. Если клиентов несколько, то это будет выглядеть как беспорядочное мигание кнопки. Допустим к проекту подключился клиент и нажимает на кнопку открывая и закрывая окно, и кнопка меняет цвет. Все остальные клиенты будут видеть мигание кнопки (хотя сами не открывали и не закрывали окна и не нажимали на кнопку).
Исходя из вышеописанного, реализация выделения объекта по нажатию (или по наведению мыши) подходит только для проектов с одним клиентом и нужно этого избегать.

azrael454

  • Новичок
  • *
  • Сообщений: 30
    • Просмотр профиля
Re: Вопросы по скриптам в Simple-Scada 2
« Ответ #1099 : 02 Сентября 2020, 12:26:51 »
Я поэтому и пишу, что не совсем подходит.

Я правильно понял, что при проекте на несколько клиентов, если нажимается на одном клиенте одна кнопка и выделяется цветом, то это увидят все, не смотря на права доступа и прочее?
« Изменён: 02 Сентября 2020, 17:34:27 от Simple_Scada »

Simple_Scada

  • Администратор
  • *****
  • Сообщений: 1365
    • Просмотр профиля
Re: Вопросы по скриптам в Simple-Scada 2
« Ответ #1100 : 02 Сентября 2020, 17:48:18 »
Да, Вы правильно поняли. Все объекты проекта существуют в единственном экземпляре. Если создать в проекте кнопку Button1 и подключиться к нему с нескольких клиентов, то на всех клиентах Вы увидите одну и ту же кнопку Button1. Если, к примеру через скрипт происходит смена цвета кнопки Button1, то соответственно данное изменение отобразится на всех клиентах. Права доступа пользователей не имеют никакого отношения к изменению свойств объектов через скрипты, они используются для ограничения доступа пользователя к объектам(например, если доступ пользователя ограничен, то он не сможет нажать на кнопку, ввести значение в поле и т.д.).

Елена

  • Новичок
  • *
  • Сообщений: 14
    • Просмотр профиля
Re: Вопросы по скриптам в Simple-Scada 2
« Ответ #1101 : 04 Сентября 2020, 15:48:28 »
Добрый день!
Задача по значению тэга менять пользовательское изображение. Сделала анимацию из отдельных изображений. Написала скрипт на OnDataChange:
Код: (delphi)
begin
  if Sender is TM_Image then   // проверяем, что Sender это объект
    with Sender as TM_Image do // приводим Sender к типу "TM_Image"
      case AsInt of
      0:  Frame := 1;        // изменить кадр на стоп
      1:  Frame := 2;        // изменить кадр на работа
      2:  Frame := 3;        // изменить кадр на ОП
      3:  Frame := 4;        // изменить кадр на ОП
      4:  Frame := 5;        // изменить кадр на ПП
      end;
end.
Но изображение не меняется. Может, что-то не учла в других свойствах изображения?
« Изменён: 04 Сентября 2020, 15:56:18 от Simple-Scada »

Simple-Scada

  • Администратор
  • *****
  • Сообщений: 3197
    • Просмотр профиля
    • Simple-Scada
Re: Вопросы по скриптам в Simple-Scada 2
« Ответ #1102 : 04 Сентября 2020, 15:55:18 »
Здравствуйте.

Перепроверьте следующие пункты:
  • компонент "Изображение" действительно привязан к переменной (см. свойство "Переменная" компонента "Изображение");
  • у компонента "Изображение" на событие OnDataChange назначен скрипт, который Вы описали;
  • переменная с которой связано изображение меняет своё значение. Если же она статична и равна нулю во время работы проекта, то кадр изображения всегда будет равен 1;
  • изображение было разделено на кадры через утилиту "Pictures.exe";
Если после этого выявить проблему всё равно не получается, то вышлите проект на support@simple-scada.com, мы укажем точную причину.

Елена

  • Новичок
  • *
  • Сообщений: 14
    • Просмотр профиля
Re: Вопросы по скриптам в Simple-Scada 2
« Ответ #1103 : 07 Сентября 2020, 15:02:40 »
Добрый день!
Можно ли в скриптах работать и с основной переменной и с дополнительной. Например, есть поле Field, в нём отображается основная переменная, а фон поля изменяется по доп. переменной. Мой скрипт по изменению доп. переменной почему то не работает.
Код: (delphi)
begin
if Sender is TM_Shape then
with Sender as TM_Shape do
  case VariableEx.AsInt of
    0: Color := clGray;
    1: Color := clRed;
   end;
end.
Какую я сделала ошибку?
« Изменён: 07 Сентября 2020, 15:15:16 от Simple_Scada »

Simple_Scada

  • Администратор
  • *****
  • Сообщений: 1365
    • Просмотр профиля
Re: Вопросы по скриптам в Simple-Scada 2
« Ответ #1104 : 07 Сентября 2020, 15:23:21 »
Здравствуйте.

Цитировать
Например, есть поле Field
В скрипте происходит работа с объектом как с "Фигурой"(TM_Shape) и если данный скрипт назначен на событие Поля, то он не будет выполняться. Если указанный скрипт нужно применить к объекту Поле, то нужно изменить его так:
Код: (delphi)
begin
  if Sender is TM_Field then
    with Sender as TM_Field do
      case VariableEx.AsInt of
        0: Color := clGray;
        1: Color := clRed;
       end;
end.

Елена

  • Новичок
  • *
  • Сообщений: 14
    • Просмотр профиля
Re: Вопросы по скриптам в Simple-Scada 2
« Ответ #1105 : 07 Сентября 2020, 15:56:38 »
Можно ли в TM_Text. text вводить 2 строки? Т.е. фразу со знаком переноса строки.

Simple_Scada

  • Администратор
  • *****
  • Сообщений: 1365
    • Просмотр профиля
Re: Вопросы по скриптам в Simple-Scada 2
« Ответ #1106 : 07 Сентября 2020, 16:31:46 »
Да, это возможно. Пример:
Код: (delphi)
begin
  Text1.Text := 'Строка 1' + CharToStr(#10) + 'Строка 2';
end.

Елена

  • Новичок
  • *
  • Сообщений: 14
    • Просмотр профиля
Re: Вопросы по скриптам в Simple-Scada 2
« Ответ #1107 : 08 Сентября 2020, 15:56:02 »
Добрый день!
У TM_Text нужно менять сам текст и цвет.
Вот мой скрипт:
Код: (delphi)
begin
if Sender is TM_Text then   // проверяем, что Sender это текст
    with Sender as TM_Text do // приводим Sender к типу "TM_Text"
    if Mode.VALUE=TRUE then
    begin
      case AsInt of
        0: begin Text := 'РАБОТА В АВТОМАТИЧЕСКОМ РЕЖИМЕ ОСТАНОВЛЕНА'; Color := clWhite; end;
        1: begin Text := 'РАБОТА В АВТОМАТИЧЕСКОМ РЕЖИМЕ';  Color := clBlue; end;
        2: begin Text := 'АВТОМАТИЧЕСКИЙ РЕЖИМ. АВАРИЯ!';  Color := clRed; end;
       end;
    end else
    begin
      Text := 'РЕЖИМ НАЛАДКИ'; Color := clWhite;
    end;
end.
Текст меняется, а его цвет нет. Пробовала менять цвет рамки текста - не меняется. Что я делаю не так?
« Изменён: 08 Сентября 2020, 15:59:47 от Simple_Scada »

Simple-Scada

  • Администратор
  • *****
  • Сообщений: 3197
    • Просмотр профиля
    • Simple-Scada
Re: Вопросы по скриптам в Simple-Scada 2
« Ответ #1108 : 08 Сентября 2020, 16:06:03 »
Здравствуйте.

Цвету шрифта соответствует свойство FontColor, не Color. Все базовые свойства описаны здесь.

Миханик

  • Постоялец
  • ***
  • Сообщений: 182
    • Просмотр профиля
    • www.vpa-dv.ru
Re: Вопросы по скриптам в Simple-Scada 2
« Ответ #1109 : 09 Сентября 2020, 08:07:09 »
Подскажите, формирую таблицу вот таким скриптом Table1.RunSQL(aQuery, tsAll); А как узнать, что таблица сформирована и с ней можно работать?
К сожалению узнать о выполнении SQL-запроса отправленного от таблицы - нельзя. Постараемся добавить таблице отдельное событие на этот случай.
UPD: в версиях 2.4.0.3 и выше у таблицы есть событие OnDoneSQL для отслеживания выполнения SQL-запросов
Большое спасибо за оперативность. Теперь всё работает как надо!