Добрый день.
Можно ли вызывать скрипт не привязанный ни к какому объекту ни переменной? Т.е. постоянно работающий, в котором можно изменять свойства не одного, а нескольких объектов.
И еще вопрос. Создал виртуалную переменную типа Single, привязал ее к элементу Поле, пытаюсь присвоить ей значение из скрипта (скрипт привязан к событию 1 сек.):
var
iVar1: integer;
begin
iVar1 := iVar1 + 1;
Variable1.AsInt := iVar1;
end.
Компилятор ругается на то что переменная только для чтения. Можно ли писать значения в виртуальные переменные, если да то как? Если нет, то как решить мою задачу - редактирование значения, отображаемое на элементе Поле из скрипта ?
Здравствуйте.
Можно ли вызывать скрипт не привязанный ни к какому объекту ни переменной? Т.е. постоянно работающий, в котором можно изменять свойства не одного, а нескольких объектов.
Можно использовать скрипт с типом события "Прошла секунда (https://simple-scada.com/help/script/second-passed.html)".
Компилятор ругается на то что переменная только для чтения.
Компилятор указывает на то, что свойство AsInt (https://simple-scada.com/help/script/varasint.html) доступно только для чтения. Если необходимо записать значение в переменную, то нужно использовать свойство переменной Value (https://simple-scada.com/help/script/varvalue.html):
var
iVar1: integer;
begin
iVar1 := iVar1 + 1;
Variable1.Value := iVar1;
end.
В коде из предыдущего сообщения мы просто взяли Ваш код из первого сообщения и устранили ошибку с присвоением. Но этот код некорректен, в нём не инициализируется локальная переменная, что является ошибкой. Вот код с пояснениями:
var
iVar1: integer; // переменная iVar1 является локальной, т.к. объявлена в пределах скрипта
begin
{ на этом этом этапе переменная iVar1 может иметь какое угодно
значение (в пределах типа данных integer), т.к. она не инициализирована.
Например она может быть равна 24736 }
iVar1 := iVar1 + 1; // тогда iVar1 := 24736 + 1 = 24737
Variable1.Value := iVar1; // в Variable1 запишется 24737
end.
Поэтому локальные переменные нужно инициализировать перед использованием:
var
iVar1: integer; // переменная iVar1 является локальной, т.к. объявлена в пределах скрипта
begin
iVar1 := 0;
iVar1 := iVar1 + 1; // тогда iVar1 := 0 + 1 = 1
Variable1.Value := iVar1; // в Variable1 запишется 1
end.
Как видно из примера, сделать нарастающий счетчик используя локальную переменную не получится, т.к. при каждом выполнении её придётся инициализировать. ПОэтому для счетчика с нарастанием нужно использовать обычную глобальную переменную из меню "Переменные" (https://simple-scada.com/help/manual/variable-editor.html) или из глобального модуля.