Как вытащить string в отчет по изменению?
Архивировать можно только численные переменные, поэтому для архивации строковой переменной придется создать собственную таблицу в БД с колонками [`id`, `timestamp`, `value`] и записывать в неё значение строковой переменной из скрипта, который выполняется по изменению (https://simple-scada.com/help/script/changemulvar.html) этой переменной. Например так:
var
aQuery: string;
begin
{ формируем запрос на вставку текущего значения переменной в таблицу БД `my_table` }
aQuery := 'INSERT INTO `my_table` (`ID`, `Timestamp`, `Value`) VALUES (' +
IntToStr(Variable.ID) + ', ' +
'NOW(), ' +
Variable.AsStr +
');';
{ отправляем запрос на выполнение }
RunSQL(aQuery, nil, 0);
end.
В результате получаем таблицу `my_table` в которой хранятся все изменения строковой переменной. Эту таблицу можно вывести в отчет используя пользовательский источник данных (https://simple-scada.com/help/report/rep-user-data.html).
Второй вариант. Подойдёт, если различных строковых значений мало. Допустим строковая переменная принимает только три значения: "один", "два" и "три". Тогда можно создать отдельную целочисленную переменную (например в именем vrStrAsInt), включить у неё архивацию по-изменению и записывать в неё уникальное число соответствующее значению строковой переменной:
begin
if myStr.Value = 'один' then
vrStrAsInt.Value := 1
else
if myStr.Value = 'два' then
vrStrAsInt.Value := 2
else
if myStr.Value = 'три' then
vrStrAsInt.Value := 3;
end.
Затем в отчет можно вывести переменную vrStrAsInt в обычный источник данных "по-изменению" (https://simple-scada.com/help/report/change-rep.html). Но нужно будет в отчете выполнить преобразование численного значения обратно в строковое. Это можно сделать через условия (см. скрин во вложении). Т.е. этот способ заключается в том, чтобы создать числовой эквивалент каждому значению строковой переменной и архивировать его. Затем в отчете привести его снова к строке.