Добро пожаловать, Гость. Пожалуйста, войдите или зарегистрируйтесь.
Не получили письмо с кодом активации?

Официальный форум Simple-Scada.

Автор Тема: Запись трендов с UA OPC  (Прочитано 2647 раз)

ZzSlipZz

  • Новичок
  • *
  • Сообщений: 5
    • Просмотр профиля
Запись трендов с UA OPC
« : 15 Мая 2024, 02:28:55 »
Здравствуйте. Столкнулся с проблемой как начинающий пользователь. Беру данные с OvenCloud через UA OPC все отображает начинаю их подвязывать для записи в тренды ничего не пишет в графиках.(СУБД стоит и другие тренды пишет) И сами переменные не хотят архивироваться при перезагрузке Editor переменные возвращаться в не архивируемые(делал сохранения проекта после изменения переменных)
« Изменён: 15 Мая 2024, 03:15:55 от ZzSlipZz »

Simple Scada

  • Глобальный модератор
  • *****
  • Сообщений: 288
    • Просмотр профиля
    • Simple-Scada
Re: Запись трендов с UA OPC
« Ответ #1 : 15 Мая 2024, 09:44:00 »
Здравствуйте.

Проблема в том, что OwenCloud передает все переменные с типом String, а архивация доступна только для численных переменных. Массивы и строки (это тоже массив - символов) архивировать нельзя. Если есть возможность, то лучше использовать другой OPC-сервер, который поддерживает работу с типами данных, а не передает все в String. Если использовать другой OPC-сервер возможности нет, то единственным вариантом будет создать внутренние переменные с нормальными типами данных и преобразовывать поступающие переменные String к требуемым типам данных. Тогда эти переменные можно будет архивировать и выводить в тренды. Также, если использовать для переменных тип String в скаде, то контроль при вводе значений в переменную пропадает и случайно можно ввести что угодно, в том числе буквы и спецсимволы.

ZzSlipZz

  • Новичок
  • *
  • Сообщений: 5
    • Просмотр профиля
Re: Запись трендов с UA OPC
« Ответ #2 : 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.
« Изменён: 16 Мая 2024, 06:09:19 от Simple Scada »

Simple Scada

  • Глобальный модератор
  • *****
  • Сообщений: 288
    • Просмотр профиля
    • Simple-Scada
Re: Запись трендов с UA OPC
« Ответ #3 : 16 Мая 2024, 09:04:06 »
Здравствуйте.

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

В первую очередь, перед написанием скриптов, рекомендуем ознакомиться с руководством по скриптам. Изучить базовые возможности, какие бывают скрипты, какие типы переменных существуют, ознакомиться с разделами "Рекомендации по работе со скриптами" и "Отладка скриптов". Посмотреть примеры наиболее часто используемых скриптов.

В скрипте Вы объявляете переменные в разделе var. В данном случае Вы получаете локальные переменные скрипта, которые существуют только внутри скрипта и никак не связаны с переменными, добавленными через редактор переменных – подробнее см. по ссылке. Соответственно, данный скрипт работать не будет.

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

ZzSlipZz

  • Новичок
  • *
  • Сообщений: 5
    • Просмотр профиля
Re: Запись трендов с UA OPC
« Ответ #4 : 21 Мая 2024, 02:19:10 »
Спасибо за помощь 🤝