Archiwizacja w systemie SCADA zintegrowana z SQL Server

Wiktor Susfał Archiwizacja Danych, Łączność i Zarządzanie
Archiwizacja SCADA i serwer SQL - główne

Dowiedz się o tym, jak wygląda archiwizacja danych w systemie SCADA od ICONICS zintegrowana z MS SQL Server.

Funkcjonalność modułu archiwizacji od ICONICS

Narzędzie omawiane w tym wpisie to Hyper Historian. Służy ono do zapisywania danych, pobieranych w czasie rzeczywistym, do plików binarnych przechowywanych na dysku komputera/serwera.

Hyper Historian to wydajne narzędzie pozwalające zbierać duże ilości danych produkcyjnych, nawet do 100 000 próbek na sekundę. Moduł ten wykorzystuje najnowsze standardy, takie jak: OPC UA, OPC DA, OPC XML DA, BACnet, czy SNMP.

Pomimo, że zapisywanie wartości historycznych do plików binarnych (z natywnym rozszerzeniem .hhd) jest wydajnym rozwiązaniem, czasem zachodzi potrzeba odtworzenia składowanych informacji w tabelach – na przykład SQL. W związku z istniejącymi wymaganiami klientów, narzędzie Hyper Historian zostało wyposażone we własny silnik obsługujący zapytania SQL. Komponenty, które składają się na w/w silnik (SQL Query Engine) to:

  • Serwer Połączony (ang. Linked Server) o nazwie „HH2” – doinstalowywany automatycznie do istniejącej konfiguracji MS SQL Server;
  • ICONICS.HHOleDbProvider – sterownik pozwalający na komunikację z Hyper Historian za pomocą interfejsu OLE DB.

Podsumowując, z wykorzystaniem tych narzędzi użytkownik jest w stanie wykonywać większość standardowych zapytań SQL na serwerze HDA jakim jest Hyper Historian.

Serwer dołączony oraz sterownik OLE DB dla Hyper Historian w SQL Server
Serwer dołączony oraz sterownik OLE DB dla Hyper Historian w SQL Server

Dane archiwalne z systemu SCADA w SQL Server – Linked Server

Jak było to już wspominane w innych wpisach, konfiguracje wszystkich modułów systemu SCADA ICONICS są przechowywane w bazach SQL. Co więcej, wiele z tych modułów archiwizuje tam również informacje na temat obsługiwanych procesów.

Pomimo, że Hyper Historian zapisuje dane historyczne do plików z rozszerzeniem .hhd, istnienie dołączonego serwera „HH2” w MS SQL Server pozwala na odpytywanie go tak, jak każdego innego serwera SQL .

Aby wysłać zapytanie do dołączonego (zdalnego) serwera SQL, jakim jest tu Hyper Historian, należy użyć tzw. kwerend rozproszonych. Poniżej przedstawione są dwa sposoby, mówiące jak to zrobić.

Funkcja „OPENQUERY”

Po pierwsze, można posłużyć się funkcją tabelaryczną OPENQUERY. Jej składnia dla SQL Server jest następująca.

SELECT * FROM OPENQUERY( nazwa serwera powiazanego, ‘zapytanie SQL’ )

Posiadaną konfigurację Hyper Historian oraz przykład użycia kwerendy OPENQUERY przedstawiają poniższe zdjęcia.

Sterownik OLE DB do Hyper Historian obsługuje również kwerendy typu INSERT oraz UPDATE. Ponadto, silnik SQL od ICONICS ma zdefiniowane pewne domyślne procedury (ang. Stored Procedures). Są to gotowe szablony zapytań realizujących bardziej skomplikowane działania. Przykładem takiej procedury może być:

SELECT * FROM Signals.HDA_ANALOG( ‘2014-01-01 10:00:00′, ‘2014-01-01 12:00:00′, 300000, ‘Sine’ ); .

Zwraca ona pewne wartości opisujące daną zmienną, jak na przykład maksimum, minimum lub średnią za dany okres czasu. Więcej przykładów zapytań SQL lub dostępnych gotowych procedur znajduje się w dokumentacjach GENESIS64.

Niniejszy wpis ma na celu przedstawienie zastosowania silnika SQL dla modułu archiwizacji od ICONICS. Nie porusza on kwestii technicznych dotyczących samego języka zapytań SQL. Więcej informacji na ten temat można znaleźć na przykład pod poniższym linkiem:

Szczególną uwagę należy zwrócić na fakt, że zapytanie SQL wprowadzanie jako argument kwerendy OPENQUERY musi znajdować się pomiędzy apostrofami. Co więcej, wtedy każdy apostrof będący częścią zapytania musi zostać podwojony. Na przykład: … WHERE TAGNAME = ”Moja Zmienna2” … .

Zapytanie po jednoznacznej czteroczłonowej nazwie

Automatycznie dodany przy instalacji Hyper Historian’a serwer dołączony „HH2” jest widoczny w całym MS SQL Server. Dzięki temu odwołanie do konkretnych (mówiąc umownie) tabel Hyper Historian może następować poprzez podanie konkretnej ich lokalizacji – ścieżki dostępu. Składają się na nią następujące elementy.

[nazwa_serwera].[nazwa_bazy_danych].[nazwa_schematu].[nazwa.obiektu]

Strukturę serwera dołączonego HH2 sprawdza się poprzez wywołanie pewnych standardowych procedur. Należą do nich: sp_catalogs oraz sp_tables_ex. W wyniku ich działania można poznać odpowiednio: bazy danych oraz tabele Hyper Historian.

Mimo istnienia większej ilości baz danych w drzewku pod serwerem HH2 widocznym w SQL Management Studio, wszystkie dane są domyślnie przechowywane w bazie „!Root”. Ponadto, domyślnie nazwy „!Root” i „_default_catalog_” (zob. zdj. poniżej) można stosować wymiennie.

Dlatego, że wpis ten jest poświęcony głownie narzędziom od ICONICS, więcej informacji o strukturach danych w bazach SQL znajduje się pod poniższym linkiem.

Odczyt danych z systemu SCADA przy użyciu interfejsu OLE DB

Ten paragraf zawiera informacje o tym, jak wyświetlić dane z systemu SCADA wykorzystując aplikację komunikującą się po OLE DB. W przeciwieństwie do metody opisanej wyżej, ten sposób nie zakłada wykorzystania serwera dołączonego. Dalej, jako aplikacja wymieniająca dane za pomocą OLE DB, posłuży Microsoft Excel. Prezentowane tutaj rozwiązanie pozwoli w efekcie na wyświetlanie wartości historycznych pożądanej zmiennej OPC.

Konfiguracja SQL Server

Po pierwsze, należy utworzyć odpowiednią procedurę operującą na tabeli zawierającej wartości wszystkich tagów w SQL Server. Przykładem może być poniższy kod.

Create PROCEDURE dbo.HHRead @Tag nvarchar(30)
AS
DECLARE @TSQL nvarchar(max)
SET @TSQL =

select * from openquery(HH2, ”select * from “!Root”.”!All”.RAWDATA where TAGNAME = ””’+@Tag+”””’)’
print @TSQL
EXEC (@TSQL)
GO

Tworzy on procedurę przyjmującą jako parametr nazwę określonej zmiennej i w efekcie swego działania – zwracającą jej wartości.

Konfiguracja Excel

Następnie w programie Excel należy utworzyć źródło danych czerpiące informacje z zapytań Microsoft SQL. Użytkownik zostanie poproszony o wskazanie serwera SQL oraz opcjonalnie o podanie loginu i hasła.

Po wypełnieniu opcji konfiguracyjnych otworzy się nowe natywne okno programu Excel. Zawiera ono opcje pozwalające na wywołanie odpowiedniej procedury. W omawianym przypadku wywołanie procedury wygląda następująco.

{CALL master.dbo.HHRead (?)}

Jako bazę „pod którą” procedura zostaje wykonana wybrano bazę systemową „master” programu SQL Server. Pytajnik w powyższym wywołaniu oznacza, że występuje tu jeden parametr.

Idąc dalej, wyświetla się okno proszące użytkownika o podanie parametru. Należy pamiętać, że forma procedury użytej w tym wpisie narzuca podanie pełnej ścieżki do zmiennej w Hyper Historian.

Po wykonaniu powyższych czynności, w tymczasowym oknie powinien pojawić się podgląd pobranych danych. Po ponownym przejściu do arkusza Excel, samoistnie pojawia się okno importu pozwalające na wybór gdzie na arkuszu wyświetlą się dane.

Raz dodane w ten sposób źródło danych można odświeżać za pomocą jednej opcji – „Refresh All” w zakładce „Data”. Wymaga to jedynie powtórnego wprowadzenia wartości parametru (parametrów).

OLE DB – dane z Hyper Historian w Excel

Uwagi końcowe

Ten wpis przedstawił jedynie poglądowo, w jaki sposób archiwizacja zmiennych w systemach SCADA może współpracować z oprogramowaniem SQL Server. Nie porusza on kwestii m. in. optymalizacji przesyłu danych podczas łączenia dużych systemów opartych na serwerach SQL. W przypadku, gdy dane kwerendy wywołuje się na serwerze Hyper Historian, który zawiera znaczne ilości informacji, odpowiednie sformułowanie komendy może mieć kluczowe znaczenie. Na przykład zapytanie:

SELECT * FROM OPENQUERY( HH2, ‘select * from MojFolder.RAWDATA WHERE TIMESTAMP = ”2014-01-01 10:00:00” ’)

spowoduje wyszukanie na serwerze dołączonym HyperHistorian wszystkich próbek z podanej chwili, a następnie wysłanie ich do głównego serwera SQL. Z drugiej strony, kwerenda:

SELECT * FROM OPENQUERY( HH2, select * from MojFolder.RRAWDATA’ )
WHERE TIMESTAMP = 2014-01-01 10:00:00′

wymusi już wysłanie całej zawartości folderu „Moj Folder” do głównego serwera SQL, a następnie przefiltrowanie tych danych na głównym serwerze.

Na powyższym przykładzie widać, że odpowiednio sformułowane polecenia mają znaczenie nie tylko dla wydajności systemu, lecz czasem mogą decydować w ogóle o jego działaniu. Można sobie wyobrazić ile próbek jest w stanie zawierać Hyper Historian, skoro nie jest problemem dla tego narzędzia zapisywać dziesiątki tysięcy wartości na sekundę.

Elmark Automatyka udostępnia wersję demo oprogramowania GENESIS64 w celu osobistego przetestowania funkcjonalności pakietu. Skontaktuj się z nami na ICONICS@elmark.com.pl w celu otrzymania wersji testowej lub oferty handlowej.