Здравствуйте.
Если мы правильно поняли, то у Вас в "Multi-Protocol MasterOPC" тег считанный с OPC-HDA представляет собой массив значений типа Double. В Simple-Scada 2 можно работать с такими переменными. Для этого в меню редактирования переменных
нужно создать (или
импортировать с OPC-сервера) переменную. В Simple-Scada у такой переменной должен быть тип данных "Double array". Объекты (такие как Поле, Уровень, Текст и т.д) не могут работать напрямую с переменной-массивом. Сначала нужно "разложить" массив по другим переменным с типом данных Double.
Рассмотрим простой пример. Допустим у нас есть переменная массив (Double array) с именем vrMyArray и нам нужно разложить массив по трём отдельным внутренним переменным vrDouble1, vrDouble2, vrDouble3. Тогда решение будет таким:
1. Переходим в меню скриптов и создаем новый скрипт
с типом события "Изменились переменные". В список переменных добавляем нашу переменную-массив vrMyArray (
как в этой инструкции). Теперь этот скрипт будет вызываться каждый раз когда переменная-массив изменилась.
2. Пишем такой код в скрипт:
begin
vrDouble1.Value := Variable.Values[0];
vrDouble2.Value := Variable.Values[1];
vrDouble3.Value := Variable.Values[2];
end.
Готово. В скрипте мы в vrDouble1 записываем первое значение из массива. В vrDouble2 второе значение из массива и так далее. Теперь эти переменные сожно взяаться с полями, уровнями, или другими объектами. Этот способ подходит если нам точно известно, что массив содержит три элемента. Если массив может содержать любое количество элементов, или его размер меняется во время работы проекта, то нужно проходить по элементам массива в цикле, например так:
var
I: Integer;
begin
{ проходим в цикле по каждому элементу массива
и выводим весь массив в Text1 }
for I := Variable.LowBound to Variable.HighBound do
Text1.Text := Text1.Text + ', ' + Variable.ValuesStr[I];
end.
вопрос как заполнить таблицу из 6 строк расположенную в скаде. И обновлять показания из таблицы mysql/ Необходимо вывести показания за последние 6 часов
Вы можете выполнить любой SQL-запрос от таблицы к базе данных и результаты запроса автоматически будут выведены в таблице. Для этого используется
процедура RunSQL таблицы. Пример для вашей задачи:
var
aFrom, aTo: TDateTime;
aQuery, aFromStr, aToStr: string;
begin
aTo := Now; // текущее время в переменную aTo
aFrom := IncHour(Now, -6); // 6 часов назад в переменную aFrom
aToStr := MySQLDateTime(aTo, dttFull); // переводим время aTo в строку
aFromStr := MySQLDateTime(aFrom, dttFull); // переводим время aFrom в строку
{ формируем запрос к БД на выборку }
aQuery := 'SELECT * FROM `trends_data` WHERE ' +
'(`id`=' + IntToStr(MyVariable.ID) + ') AND ' +
'(`timestamp` >= ' + aFromStr + ') AND (`timestamp` <= ' + aToStr + ')';
{ выполнить запрос и заполнить таблицу результатом выполнения }
Table1.RunSQL(aQuery, tsAll);
end.
Сначала в переменные aFrom, aTo записывается интервал в последние шесть часов. Затем интервал переводится в строку пригодную для запросов к MySQL. Далее формируется запрос на выборку архивных данных переменной MyVariable за последние шесть часов. Результат выборки отобразится в таблице с именем Table1.