По просьбе наших посетителей, данный материал перенесен с сайта 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. Зависимость времени выборки от количества значений
Рис.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.
В момент написания этого коммента сайт не доступен
Оцените статью!