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

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

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

vladka767

  • Новичок
  • *
  • Сообщений: 37
    • Просмотр профиля
Вопрос по скриптам
« : 19 Июня 2019, 19:25:43 »
Добрый день.
Можно ли вызывать скрипт не привязанный ни к какому объекту ни переменной? Т.е. постоянно работающий, в котором можно изменять свойства  не одного, а нескольких объектов.

И еще вопрос. Создал виртуалную переменную типа Single, привязал ее к элементу Поле, пытаюсь присвоить ей значение из скрипта (скрипт привязан к событию 1 сек.):
Код: (delphi)
var
  iVar1: integer;
begin
 iVar1 := iVar1 + 1;
 Variable1.AsInt := iVar1;
end.
Компилятор ругается на то что переменная только для чтения. Можно ли писать значения в виртуальные переменные, если да то как? Если нет, то как решить мою задачу - редактирование значения, отображаемое на элементе Поле из скрипта ?
« Изменён: 19 Июня 2019, 20:04:11 от Simple-Scada »

Simple_Scada

  • Администратор
  • *****
  • Сообщений: 1173
    • Просмотр профиля
Re: Вопрос по скриптам
« Ответ #1 : 20 Июня 2019, 10:32:35 »
Здравствуйте.

Цитировать
Можно ли вызывать скрипт не привязанный ни к какому объекту ни переменной? Т.е. постоянно работающий, в котором можно изменять свойства  не одного, а нескольких объектов.

Можно использовать скрипт с типом события "Прошла секунда".

Цитировать
Компилятор ругается на то что переменная только для чтения.
Компилятор указывает на то, что свойство AsInt доступно только для чтения. Если необходимо записать значение в переменную, то нужно использовать свойство переменной Value:
Код: (delphi)
var
  iVar1: integer;
begin
 iVar1 := iVar1 + 1;
 Variable1.Value := iVar1;
end.
« Изменён: 20 Июня 2019, 22:49:20 от Simple-Scada »

vladka767

  • Новичок
  • *
  • Сообщений: 37
    • Просмотр профиля
Re: Вопрос по скриптам
« Ответ #2 : 20 Июня 2019, 18:22:58 »
Сделал как у вас в примере, привязал виртуальную переменную Variable1 к элементу Поле.
При запуске в Поле отображается значение 10ти значное число -21208..., которое постоянно декрементируется примерно на 1000.

Simple-Scada

  • Администратор
  • *****
  • Сообщений: 2998
    • Просмотр профиля
    • Simple-Scada
Re: Вопрос по скриптам
« Ответ #3 : 20 Июня 2019, 22:52:50 »
В коде из предыдущего сообщения мы просто взяли Ваш код из первого сообщения и устранили ошибку с присвоением. Но этот код некорректен, в нём не инициализируется локальная переменная, что является ошибкой. Вот код с пояснениями:
Код: (delphi)
var
  iVar1: integer;  // переменная iVar1 является локальной, т.к. объявлена в пределах скрипта
begin
  { на этом этом этапе переменная iVar1 может иметь какое угодно
     значение (в пределах типа данных integer), т.к. она не инициализирована.
    Например она может быть равна 24736 }
 
  iVar1 := iVar1 + 1;        // тогда iVar1 := 24736 + 1 = 24737
  Variable1.Value := iVar1;  // в Variable1 запишется 24737
end.

Поэтому локальные переменные нужно инициализировать перед использованием:
Код: (delphi)
var
  iVar1: integer;  // переменная iVar1 является локальной, т.к. объявлена в пределах скрипта
begin
  iVar1 := 0;
  iVar1 := iVar1 + 1;   // тогда iVar1 := 0 + 1 = 1
  Variable1.Value := iVar1;  // в Variable1 запишется 1
end.
Как видно из примера, сделать нарастающий счетчик используя локальную переменную не получится, т.к. при каждом выполнении её придётся инициализировать. ПОэтому для счетчика с нарастанием нужно использовать обычную глобальную переменную из меню "Переменные" или из глобального модуля.

vladka767

  • Новичок
  • *
  • Сообщений: 37
    • Просмотр профиля
Re: Вопрос по скриптам
« Ответ #4 : 21 Июня 2019, 18:57:53 »
Да, все получилось .
Спасибо большое!