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

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

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

Виктор К

  • Новичок
  • *
  • Сообщений: 43
    • Просмотр профиля
Re: Вопросы по скриптам в Simple-Scada 2
« Ответ #1380 : 16 Июня 2022, 09:12:10 »
Добрый день. Столкнулся с ошибкой в логах сервера: Ошибка в скрипте ... в строке ... "Variant does not reference an automation object".
Скрипт компилировался без ошибок, но естественно не работал так как задумано.
Причина: некорректное обращение к значению переменной.
Код
Text2.Text:=var01.Value.AsStr; 
нужно было так:
Код
Text2.Text:=var01.AsStr; 

Simple-Scada

  • Администратор
  • *****
  • Сообщений: 2997
    • Просмотр профиля
    • Simple-Scada
Re: Вопросы по скриптам в Simple-Scada 2
« Ответ #1381 : 16 Июня 2022, 10:12:29 »
Здравствуйте.

Всё верно, свойство переменной "var01.Value" имеет тип данных Variant, через который можно обращаться к свойствам OLE-объектов. Поэтому "var01.Value.AsStr" будет рассматриваться компилятором как попытка обращения к свойству "AsStr" OLE-объекта и на этапе компиляции ошибок выдано не будет. Затем, во время запуска скрипта, обнаружится, что свойство Value не является OLE-объектом и будет выдана соответствующая ошибка: Variant-переменная не ссылается на объект автоматизации.

DJ

  • Новичок
  • *
  • Сообщений: 1
    • Просмотр профиля
Re: Вопросы по скриптам в Simple-Scada 2
« Ответ #1382 : 24 Августа 2022, 10:46:12 »
Добрый день. Можете расписать как работает этот скрипт? Весь проект почти сделан вот на таких скриптах. Именно интересует вот эта часть - ...AsInt and 128) Shr 7) + 1
Код: (delphi)
begin
  // ЦВ НЕИСП АВАР  НСУХ  СУХ  НПИТ  ПИТ  МП
  // 1    0     0    0     0    0     0    0

  TM_Image(Sender).Frame := ((TM_Object(Sender).AsInt and 128) Shr 7) + 1
end.
« Изменён: 24 Августа 2022, 13:25:43 от Simple-Scada »

pavel.sheva

  • Новичок
  • *
  • Сообщений: 15
    • Просмотр профиля
Re: Вопросы по скриптам в Simple-Scada 2
« Ответ #1383 : 24 Августа 2022, 12:26:36 »
Присвоить свойству кадр, значение вызвавшего объекта в (целочисленном формате с конвертацией в 1-о байтовый формат числа со сдвигом его в право на 7) + 1, Вроде бы так, если я не ошибаюсь.

А разве можно в Simple-Picture создать анимацию на 128 кадров? ;D :P, я как-то пытался, больше 30 не вмещается(
« Изменён: 24 Августа 2022, 20:47:22 от Simple-Scada »

alex29

  • Новичок
  • *
  • Сообщений: 15
    • Просмотр профиля
Re: Вопросы по скриптам в Simple-Scada 2
« Ответ #1384 : 25 Августа 2022, 16:33:58 »
Добрый день. Можете расписать как работает этот скрипт?
меняется картинка в зависимости от состояния 7-го бита. Можно было проще и понятнее сделать...

А разве можно в Simple-Picture создать анимацию на 128 кадров? ;D :P, я как-то пытался, больше 30 не вмещается(
при чем тут 128 кадров? Это логическая операция - and 128 - выделяем только 7-й бит. ИМХО  по извращенски код написан )
« Изменён: 25 Августа 2022, 16:53:59 от Simple-Scada »

pavel.sheva

  • Новичок
  • *
  • Сообщений: 15
    • Просмотр профиля
Re: Вопросы по скриптам в Simple-Scada 2
« Ответ #1385 : 26 Августа 2022, 14:05:19 »
Цитировать
при чем тут 128 кадров? Это логическая операция - and 128 - выделяем только 7-й бит. ИМХО  по извращенски код написан )
Ну это как посмотреть) младшим или старшим битом вперед), просто если вы говорите о выделение 7 бита, то понятное дело в 10-тичной это будет 64 в случае если там стоит 1, 64+1, 65 кадр, или я что-то не так понимаю
« Изменён: 26 Августа 2022, 19:43:38 от Simple_Scada »

alex29

  • Новичок
  • *
  • Сообщений: 15
    • Просмотр профиля
Re: Вопросы по скриптам в Simple-Scada 2
« Ответ #1386 : 26 Августа 2022, 15:21:36 »
если 7-й бит == 0 , то TM_Image(Sender).Frame = 0+1  первый кадр
если 1, TM_Image(Sender).Frame = 1+1 второй кадр.
по моему так
« Изменён: 01 Сентября 2022, 09:51:56 от Simple-Scada »

pavel.sheva

  • Новичок
  • *
  • Сообщений: 15
    • Просмотр профиля
Re: Вопросы по скриптам в Simple-Scada 2
« Ответ #1387 : 31 Августа 2022, 11:32:46 »
Код: (delphi)
begin
  // ЦВ НЕИСП АВАР  НСУХ  СУХ  НПИТ  ПИТ  МП
  // 1    0     0    0     0    0     0    0
 
  TM_Image(Sender).Frame := ((TM_Object(Sender).AsInt and 128) Shr 7) + 1
end.
жЕсткая строчка кода, но вроде понял что вы имеете ввиду, а да я "Децл", при shr я обращаюсь к 1 биту, а не ко всему байту...
 
« Изменён: 01 Сентября 2022, 09:52:12 от Simple-Scada »

Дмитрий_021

  • Новичок
  • *
  • Сообщений: 14
    • Просмотр профиля
Re: Вопросы по скриптам в Simple-Scada 2
« Ответ #1388 : 12 Сентября 2022, 03:58:53 »
Добрый день, только разбираюсь с вашим продуктом. Как написать простой скрипт, к кнопке привязана Переменная (Внутренний тэг - str - содержащей имя страницы). При нажатии на кнопку нужно переходить на эту страницу.

Timothy Clement

  • Постоялец
  • ***
  • Сообщений: 149
  • ОАО Борисовский завод "Металлист"
    • Просмотр профиля
    • Полымя
Re: Вопросы по скриптам в Simple-Scada 2
« Ответ #1389 : 12 Сентября 2022, 13:45:29 »
Добрый день.

Код: (delphi)
var
  aPage : TM_Page;
begin
  With Sender As TM_Button do
    begin
      aPage := GetPageByName(Variable.Asstr);
      aPage.GoToPageClient(GetClientName);
    end;
end.

Но может просто не создавайте переменную, а присвойте свойству Тэг кнопки номер страницы, например 2. Тогда

Код: (delphi)
var
  aPage : TM_Page;
begin
  With Sender As TM_Button do
    begin
      aPage := GetPageByName('Page'+IntToStr(Tag));
      aPage.GoToPageClient(GetClientName);
    end;
end.

Таким образом перейдете на нужную страницу не создавая лишних переменных
« Изменён: 12 Сентября 2022, 13:53:26 от Timothy Clement »

Simple Scada

  • Глобальный модератор
  • *****
  • Сообщений: 160
    • Просмотр профиля
    • Simple-Scada
Re: Вопросы по скриптам в Simple-Scada 2
« Ответ #1390 : 12 Сентября 2022, 15:15:08 »
Здравствуйте.
Как написать простой скрипт, к кнопке привязана Переменная (Внутренний тэг - str - содержащей имя страницы). При нажатии на кнопку нужно переходить на эту страницу.
Если у кнопки в свойстве "Переменная" указана переменная, то при нажатии на кнопку будет изменяться значение этой переменной в соответствии с установленными значениями в свойстве "Состояния". Поэтому описанную Вами задачу таким способом решить не получится, так как при клике на кнопку переменная с именем страницы, перед выполнением скрипта, будет перезаписана.

В данном случае переменную с именем страницы можно указать в свойство "Доп.переменная" и на событие "OnClick" кнопки написать скрипт:
Код: (delphi)
var
  aPage: TM_Page;
  aButton: TM_Button;
begin
  if Sender is TM_Button then   // проверяем, что Sender это кнопка
  begin
    aButton := Sender as TM_Button;
    // ищем страницу с именем из доп.переменной
    aPage := GetPageByName(aButton.VariableEx.AsStr);
    if aPage <> nil then                      // если страница существует,
      aPage.GoToPageClient(GetClientName);    // то перейти на нее
  end;
end
Также в руководстве по ссылке можно найти пример создания "Кнопок вместо панели страниц".
« Изменён: 12 Сентября 2022, 16:38:48 от Simple-Scada »

Дмитрий_021

  • Новичок
  • *
  • Сообщений: 14
    • Просмотр профиля
Re: Вопросы по скриптам в Simple-Scada 2
« Ответ #1391 : 13 Сентября 2022, 12:54:47 »
Спасибо, помогло. а есть ли функция, позволяющая получить текущую страницу? ( Условно аналог GetPageByName, но возвращающая страницу с которой был вызван скрипт )

Simple_Scada

  • Администратор
  • *****
  • Сообщений: 1174
    • Просмотр профиля
Re: Вопросы по скриптам в Simple-Scada 2
« Ответ #1392 : 14 Сентября 2022, 10:45:27 »
Для этого можно использовать функцию GetOwner.

asutpfoma

  • Новичок
  • *
  • Сообщений: 17
    • Просмотр профиля
Re: Вопросы по скриптам в Simple-Scada 2
« Ответ #1393 : 19 Сентября 2022, 06:36:19 »
Вопрос про подтверждение событий. При подтверждении события оператором (нажатие галочки), хочу вызывать всплывающее окно, которое бы добавляло комментарий к событию.
Существует метод OnClick на стандартную клавишу подтверждения события? Можно добавлять комментарий?

При подтверждении оператором сообщения, хочу отображать всплывающее окно со списком, выбранная информация в котором отображалась бы в соответствующем сообщении в колонке "Подтвердил". Это реально?
Хочу чтобы в этом столбце отображалась информация о причине возникновения сообщения. Эти причины будут перечислены во всплывающем окне.

Можно ли изменять текст сообщения после его возникновения в списке сообщений?
« Изменён: 19 Сентября 2022, 17:15:20 от Simple_Scada »

Simple_Scada

  • Администратор
  • *****
  • Сообщений: 1174
    • Просмотр профиля
Re: Вопросы по скриптам в Simple-Scada 2
« Ответ #1394 : 19 Сентября 2022, 17:53:05 »
Здравствуйте.

Цитировать
Существует метод OnClick на стандартную клавишу подтверждения события?
Создать скрипт для штатной кнопки подтверждения сообщений нельзя. При необходимости, можно скрыть штатную панель сообщений и создать свою(для этого лучше всего использовать шаблон). Вместо панели сообщений можно использовать компонент "Список сообщений". Смену пользователя можно реализовать через кнопку и скрипт по событию OnClick используя процедуру ChangeUser. Переход в меню сообщений можно реализовать используя скрипты для навигации. Для подтверждения сообщений можно использовать кнопку и процедуру ConfirmMessage. В этом случае, можно будет написать необходимый скрипт по событию OnClick своей кнопки подтверждения.

Цитировать
> Можно добавлять комментарий?
> выбранная информация отображалась бы в соответствующем сообщении в колонке "Подтвердил". Это реально?
> Можно ли изменять текст сообщения после его возникновения в списке сообщений?
Таких возможностей нет.