61
Ваши вопросы / Re: Чтение массивов из arOPC
« : 13 Мая 2025, 10:21:45 »
Здравствуйте.
Если переменная на OPC-сервере является одномерным массивом, то её можно импортировать в скаду и использовать для чтения (внешние переменные являющиеся массивами доступны только для чтения). См. описание и пример этой ссылке.
Вышеописанное касается только массивов, которые читаются с OPC-серверов. С массивами объявленными в скриптах можно работать как угодно (читать, записывать, менять размерность и т.п.).
Пример для Вашего кода:
Если переменная на OPC-сервере является одномерным массивом, то её можно импортировать в скаду и использовать для чтения (внешние переменные являющиеся массивами доступны только для чтения). См. описание и пример этой ссылке.
Вышеописанное касается только массивов, которые читаются с OPC-серверов. С массивами объявленными в скриптах можно работать как угодно (читать, записывать, менять размерность и т.п.).
Цитировать
может все таки есть способ написать это как то более элегантно?Не совсем понятно зачем вообще нужен локальный массив в Вашем коде, когда можно просто пройти по переменным А1..А120 в цикле. Например:
Код: (delphi)
// проходим по переменным А1..А120
for i := 1 to 120 do
begin
aVar := GetVariableByName('A' + IntToStr(i));
// здесь работаем c переменной
end;
Пример для Вашего кода:
Код: (delphi)
var
aQuery: string;
aVar: TM_Variable;
begin
count := 1;
aQuery := 'DELETE FROM table_report; ';
for i := 1 to 120 do
begin
aVar := GetVariableByName('A' + IntToStr(i));
if (aVar.AsInt > 0) then
begin
Insert('INSERT INTO `table_report` (id, adr, vs) VALUES ( ' + IntToStr(count) + ' , ' + IntToStr(aVar.AsInt) + ', ' + IntToStr(voltArray[i]) + ' );', aQuery, 99999);
count := count + 1;
end;
end;
end.