Здравствуйте.
Мы все же рекомендуем использовать другой OPC-сервер, который поддерживает работу с типами данных – так будет проще, надежнее, лучше по производительности и не придётся писать скрипты. Ниже пояснения по скрипту.
В первую очередь, перед написанием скриптов, рекомендуем ознакомиться с
руководством по скриптам. Изучить базовые возможности, какие бывают
скрипты, какие
типы переменных существуют, ознакомиться с разделами "
Рекомендации по работе со скриптами" и "
Отладка скриптов". Посмотреть
примеры наиболее часто используемых скриптов.
В скрипте Вы объявляете переменные в разделе var. В данном случае Вы получаете локальные переменные скрипта, которые существуют только внутри скрипта и никак не связаны с переменными, добавленными через
редактор переменных – подробнее см.
по ссылке. Соответственно, данный скрипт работать не будет.
Вам нужно:
1. В
редакторе переменных создать
внутренние переменные с именами, как у внешних переменных + приставка "_Filter" и нужным
типом данных. Например, для переменной "P1_Davlenie_na_vyhode_kotla_4_12500" -> "P1_Davlenie_na_vyhode_kotla_4_12500_Filter" и тд.
2. Если в скаду передаются значения с единицами измерения, то удалите единицы измерения в настройках сервиса OwenCloud, чтобы в скаду передавались только значения (без лишних символов). При необходимости
единицы измерения можно будет настроить в скаде. В ином случае, удалять единицы измерения придётся в скрипте перед преобразованием в число.
3. Создать скрипт с типом события "
Изменились переменные", добавить в список скрипта
все необходимые внешние переменные (переменные с OPC-сервера) и написать такой код:
var
aVar: TM_Variable;
begin
aVar := GetVariableByName(Variable.Name + '_Filter'); // ищем внутреннюю переменную с именем: "имя переменной вызвавшей скрипт" + "_Filter"
if aVar <> nil then // если переменная существует
aVar.Value := StrToFloatDef(Variable.AsStr, -1); // то, записываем значение внешней переменной во внутреннюю
end.
Теперь эти внутренние переменные можно
архивировать и выводить в
тренды.