Simple-Scada forum

Simple-Scada 2 => Ваши вопросы => Тема начата: ZzSlipZz от 15 Мая 2024, 02:28:55

Название: Запись трендов с UA OPC
Отправлено: ZzSlipZz от 15 Мая 2024, 02:28:55
Здравствуйте. Столкнулся с проблемой как начинающий пользователь. Беру данные с OvenCloud через UA OPC все отображает начинаю их подвязывать для записи в тренды ничего не пишет в графиках.(СУБД стоит и другие тренды пишет) И сами переменные не хотят архивироваться при перезагрузке Editor переменные возвращаться в не архивируемые(делал сохранения проекта после изменения переменных)
Название: Re: Запись трендов с UA OPC
Отправлено: Simple Scada от 15 Мая 2024, 09:44:00
Здравствуйте.

Проблема в том, что OwenCloud передает все переменные с типом String, а архивация  (https://simple-scada.com/help/manual/vararchive.html)доступна только для численных переменных. Массивы и строки (это тоже массив - символов) архивировать нельзя. Если есть возможность, то лучше использовать другой OPC-сервер, который поддерживает работу с типами данных, а не передает все в String. Если использовать другой OPC-сервер возможности нет, то единственным вариантом будет создать внутренние переменные с нормальными типами данных и преобразовывать (https://simple-scada.com/help/script/type-conv.html) поступающие переменные String к требуемым типам данных. Тогда эти переменные можно будет архивировать  (https://simple-scada.com/help/manual/vararchive.html)и выводить в тренды (https://simple-scada.com/help/manual/editor-trends.html). Также, если использовать для переменных тип String в скаде, то контроль при вводе значений в переменную пропадает и случайно можно ввести что угодно, в том числе буквы и спецсимволы.
Название: Re: Запись трендов с UA OPC
Отправлено: ZzSlipZz от 16 Мая 2024, 02:02:55
Подскажите пример скрипта как это осуществить :( я про подвязывания к виртуальной переменной и преобразовать а то сервер пишет что число не являться  float и сам не догоняю
Код: (delphi)
var
 TestKost1: Single;
 P1_Davlenie_na_vyhode_kotla_4_12500: string;
begin
 TestKost1:= StrToFloat(P1_Davlenie_na_vyhode_kotla_4_12500);
end.
Название: Re: Запись трендов с UA OPC
Отправлено: Simple Scada от 16 Мая 2024, 09:04:06
Здравствуйте.

Мы все же рекомендуем использовать другой OPC-сервер, который поддерживает работу с типами данных – так будет проще, надежнее, лучше по производительности и не придётся писать скрипты. Ниже пояснения по скрипту.

В первую очередь, перед написанием скриптов, рекомендуем ознакомиться с руководством по скриптам (https://simple-scada.com/help/script/index.html). Изучить базовые возможности, какие бывают скрипты (https://simple-scada.com/help/script/creatscript.html), какие типы переменных (https://simple-scada.com/help/script/var-types.html) существуют, ознакомиться с разделами "Рекомендации по работе со скриптами (https://simple-scada.com/help/script/script-recomend.html)" и "Отладка скриптов (https://simple-scada.com/help/script/debugscripts.html)". Посмотреть примеры наиболее часто используемых скриптов (https://simple-scada.com/help/script/sample-scripts.html).

В скрипте Вы объявляете переменные в разделе var. В данном случае Вы получаете локальные переменные скрипта, которые существуют только внутри скрипта и никак не связаны с переменными, добавленными через редактор переменных (https://simple-scada.com/help/manual/variable-editor.html) – подробнее см. по ссылке (https://simple-scada.com/help/script/var-types.html). Соответственно, данный скрипт работать не будет.

Вам нужно:
1. В редакторе переменных (https://simple-scada.com/help/manual/variable-editor.html) создать внутренние переменные (https://simple-scada.com/help/script/var-types.html) с именами, как у внешних переменных + приставка "_Filter" и нужным типом данных (https://simple-scada.com/help/manual/data-types.html). Например, для переменной "P1_Davlenie_na_vyhode_kotla_4_12500" -> "P1_Davlenie_na_vyhode_kotla_4_12500_Filter" и тд.
2. Если в скаду передаются значения с единицами измерения, то удалите единицы измерения в настройках сервиса OwenCloud, чтобы в скаду передавались только значения (без лишних символов). При необходимости единицы измерения можно будет настроить в скаде (https://simple-scada.com/help/manual/edit-scale.html). В ином случае, удалять единицы измерения придётся в скрипте перед преобразованием в число.
3. Создать скрипт с типом события "Изменились переменные (https://simple-scada.com/help/script/event-types.html)", добавить в список скрипта все необходимые внешние переменные (переменные с OPC-сервера) и написать такой код:
Код: (delphi)
var
  aVar: TM_Variable;
begin
  aVar := GetVariableByName(Variable.Name + '_Filter');  // ищем внутреннюю переменную с именем: "имя переменной вызвавшей скрипт" + "_Filter"
  if aVar <> nil then                                    // если переменная существует
    aVar.Value := StrToFloatDef(Variable.AsStr, -1);     // то, записываем значение внешней переменной во внутреннюю
end.
Теперь эти внутренние переменные можно архивировать (https://simple-scada.com/help/manual/vararchive.html) и выводить в тренды (https://simple-scada.com/help/manual/editor-trends.html).
Название: Re: Запись трендов с UA OPC
Отправлено: ZzSlipZz от 21 Мая 2024, 02:19:10
Спасибо за помощь 🤝