Сравнение способов выборки данных средствами ODK и OLE DB из WinCC/User Archives

По просьбе наших посетителей, данный материал перенесен с сайта plc4good.org.ua, в связи с полной его потерей. Всё возражения принимаются через форму обратной связи.

plc4good.org.ua/view_post.php?id=128

Как известно в число опций SCADA системы WinCC входит такой функциональный модуль как User Archives. Он позволяет создавать несложные пользовательские архивы с произвольной структурой, в нем реализован удобный обмен данными между архивом и ПЛК, а для ввода, просмотра и редактирования данных в табличном виде имеется специальный ActiveX элемент – WinCC UserArchiveControl.

В большинстве случаев для работы с сохраненными в User Archives данными вполне достаточно элемента WinCC UserArchiveControl и других стандартных методов (представления, привязка полей к тегам, управляющие теги и т.д.). Однако иногда возникают задачи, решение которых не предусмотрено стандартными средствами. Например, когда вам необходимо: сделать выборку данных по какому-нибудь критерию из юзер-архива, затем над полученными данными произвести некоторые действия, а результат отдать за пределы архива. В этом случае разработчик имеет два основных способа:

  • использовать специализированную библиотеку для работы с пользовательскими архивами “ccuacapi” из состава пакета ODK,
  • использовать для доступа к архивам технологию OLE DB, а в качестве программного интерфейса – библиотеку компонентов ADO (ActiveX Data Object).

Невольно возникает вопрос: какому способу отдать предпочтение и как его лучше реализовать? Для ответа на этот вопрос был  создан проект WinCC с пользовательским архивом, а также несколько скриптов реализующих выборку данных различными способами. Было произведено сравнение способов по времени выборки данных из одного и того же пользовательского архива. (Проект WinCC можно скачать отсюда: https://disk.yandex.ru/d/cVv4KYV9GiarCg)

 

Исследования проводились на железе: Pentium D 925, 3000 MHz, ОЗУ – 2 GB. ПО: Win XP SP2, WinCC 7.0.1.3.

Для проведения исследований был создан пользовательский архив с именем “uaTest” (таблица “UA# uaTest” в рантаймовской базе проекта). В архиве созданы два поля: “intr” (тип integer) и “dbl”(тип double). По умолчанию во все значения “intr” было занесено значение 11, в “dbl” – 1,1. Всего было создано более 50 000 записей.

 

WinCC позволяет писать скрипты на двух языках: VBS и С. Компоненты ADO можно использовать как в С так и в VBS, а вот функции из состава ODK только в С.

Для проведения исследования было написано четыре скрипта:

  • VBS с использованием объекта ADO «Command»,
  • VBS с использованием объекта ADO «RecordSet»,
  • C-скрипт с использованием объекта ADO «RecordSet»,
  • C-скрипт с использованием функций из библиотеки “ccuacapi” ODK.

 

В скриптах, где применялись объекты ADO, для доступа к OLE DB  использовался провайдер «Microsoft OLE DB Provider for SQL Server».

Выборка данных проводилась для 100, 1000, 10 000, 20 000 и 50 000 значений, отдельно для каждого из столбцов “intr” и “dbl”. Выбранные значения суммировались по каждому столбцу, результат выводился в окно «GSC Diagnose».

Структура кода всех четырех скриптов построена по одному принципу, в начале выполнения скрипта в диагностическое окно выводится системное время, далее идет выборка значений архива и их суммирование, а в конце полученная сумма так же выводится в диагностическое окно вместе с системным временем окончания выполнения скрипта. Таким образом, разница во времени между окончанием и началом является временем, которое было затрачено на выборку данных.

В результате тестирования выяснилось, что время выборки для столбца «intr» (тип целое) оказалось почти таким же как и для столбца «dbl» (тип число с плавающей точкой двойной точности) при том же количестве выбранных значений, поэтому результаты исследования, приведенные в таблице 1, указаны только для столбца «intr» (тоже самое графически см. Рис.1).

 

Кол-во значений

VBS

OLE DB

Command

VBS

OLE DB RecordSet

C-Script

OLE DB

RecordSet

C-Script

ODK

100 0 – 250 мс

0 – 250 мс

50 мс

300 мс

1000 0 – 250 мс

0 – 250 мс

200 мс

2 с 700 мс

10 000 0 – 250 мс

250 мс

1 с  900 мс

27 с 80 мс

20 000 0 – 250 мс

250 мс

4 с  100 мс

57 с

50 000 0 – 250 мс

750 мс

10 с 300 мс

2 мин 20 с

Таблица 1. Зависимость времени выборки от количества значений

scada_time

Рис.1. Зависимость времени выборки от количества значений

Как видно из результатов тестирования, безусловным лидером является скрипт на VBS с объектом ADO «Command». Это объясняется тем, что все вычисления производятся на стороне SQL сервера. Время выборки почти не зависит от количества значений, единственный момент – время самого первого запроса бывает в разы больше последующих запросов и иногда оно достигало 1 секунды, но это справедливо для всех скриптов использующих OLE DB.

Скрипты с объектом «RecordSet» и на VBS  и ни С-скрипт до 1000 значений идут почти на равных, далее скрипт на С начинает заметно проигрывать VBS. Время выборки в обоих случаях пропорционально количеству выбранных значений.

Аутсайдером исследования является скрипт с использованием ODK. У него время выборки также пропорционально количеству значений, однако оно просто несравнимо больше по сравнению с предыдущими тремя способами.

Комментарии к материалу

Добавлен: Aleks Дата: 2016-03-17

как можно связаться с автором оной статьи ?

Добавлен: volek67 Дата: 2016-07-15

Muller со Старого Оскола- известный, активный и отзывчивый участник форума Siemens :www.dfpd.siemens.ru.
В момент написания этого коммента сайт не доступен

0 0 голоса

Оцените статью!

guest
0 Комментарий
Межтекстовые Отзывы
Посмотреть все комментарии