Версия для печати

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

Дата: 2012-08-20

Добавлено: Muller

Тема: Scada, HMI




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



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





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



Исследования проводились на железе: 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 только в С.



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





В скриптах, где применялись объекты 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. У него время выборки также пропорционально количеству значений, однако оно просто несравнимо больше по сравнению с предыдущими тремя способами.



Copyright © Muller, 2010     г. Старый Оскол









Просмотров: 8283

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

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

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

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

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

Добавить комментарий

Ваше имя:

Текст комментария (4000 max):

Введите сумму с картинки: