Informator Techniczny nr 53 11-04-2002 INFORMATOR TECHNICZNY WONDERWARE UŜywanie ActiveFactory z danymi składowanymi w bazie Microsoft Access Cel Celem niniejszego informatora jest pokazanie przykładowego rozwiązania dla zagadnień analiz danych złoŝonych w bazie IndustrialSQL Server razem z danym z innych systemów (np. biurowych, analiz jakości, analiz kosztów itp.). Przykład PoniŜszy przykład polega na stworzeniu w bazie danych IndustrialSQL Server zmiennej nieskładowanej, której wartości będą zbierane cyklicznie do tablic historii manualnej (ManualAnalogHistory) poprzez cyklicznie uruchamiany mechanizm DTS (Data Transformation Services) w serwerze Microsoft SQL. Kroki konfiguracji NaleŜy uruchomić serwer IndustrialSQL za pomocą programu InSQL Control. NaleŜy zdefiniować zmienną typu analogowego w programie InSQL Configure, której konfiguracja została zamieszczona na poniŝszych rysunkach. UWAGA! NaleŜy zapamiętać nazwę zdefiniowanej zmiennej. Dane dotyczące akwizycji mogą być dowolne (najlepiej uŝyć inne wcześniej skonfigurowane kanały komunikacyjne i istniejące adresy pamięci, np. komunikacja do nieuŝywanego rejestru w sterowniku PLC, z którym juŝ prowadzimy komunikację). ASTOR Sp. z o.o. Dział Oprogramowania Przemysłowego ul. Smoleńsk 29, 31-112 Kraków tel.: 012 428-63-30 fax: 012 428-63-09 e-mail: wonderware1@astor.com.pl http://www.astor.com.pl
W trybie składowania naleŝy wybrać opcję Not Stored IndustrialSQL Server nie będzie składował tej zmiennej. NaleŜy znaleźć identyfikator zmiennej, która została zdefiniowana. W tym celu naleŝy z grupy programów Microsoft SQL Server uruchomić program Query Analizer i zalogować się do serwera InSQL i do bazy danych Runtime wprowadzić zapytanie SQL: SELECT wwtagkey FROM Tag WHERE Tagname = nazwa zdefiniowanej zmiennej 2
Po uruchomieniu zapytania w dolnym panelu powinien pojawić się efekt w postaci rekordu z wartością identyfikatora (w przykładzie jest to liczba 103). Kolejnym krokiem konfiguracji w tym przykładzie jest stworzenie bazy danych Microsoft Access wraz tablicą, z której dane będą pobierane do bazy IndustrialSQL Server. W bazie (w przykładzie dts.mdb) naleŝy utworzyć tablicę (w przykładzie nazywa się Dane) o konfiguracji przedstawionej na poniŝszych rysunkach (najlepiej jeŝeli konfiguracji tabeli w Access pokrywa się z definicją tabeli ManualAnalogHistory w bazie danych Runtime IndustrialSQL Server a powoduje to uproszczenia przy dalszej konfiguracji DTS). WaŜnym elementem konfiguracji jest właściwość kaŝdego pola o nazwie: Wartość domyślna, którą trzeba skonfigurować tak jak na rysunkach poniŝej: 3
Dla pola DateTime naleŝy ustawić wartość domyślną Now() czyli automatyczne wprowadzanie bieŝącego czasu w momencie wstawiania dowolnego rekordu do tej tabeli. Dla pola Tagname naleŝy wprowadzić domyślną wartość w postaci nazwy zmiennej, która została stworzona w InSQL u. 4
Dla pola Value nie naleŝy wprowadzać Ŝadnej wartości domyślnej (będzie ona wprowadzana przez uŝytkownika Access a z poziomu Formularza - w praktyce tę wartość moŝe przygotowywać kwerenda lub np. Makro realizujące przeliczenia w programie Access). Dla pola Quality domyślną wartością powinno być 0 czyli wartość poprawna. 5
Dla pola QualityDetail wartość domyślna to 192 (dane poprawne). Dla pola wwtagkey wartość domyślna to 103, czyli identyfikator zmiennej w bazie danych IndustrialSQL Server. UWAGA! Wartość tego parametru na pewno będzie inna przy samodzielnej realizacji tego przykładu. Kolejnym krokiem (specyficznym dla tego przykładu) jest stworzenie prostego formularza, za pomocą którego wprowadzane będą dane to tabeli Dane. W tym celu moŝna uŝyć kreatora formularzy i wybrać wszystkie pola tabeli Dane lub tylko pole Value. Na poniŝszym rysunku przedstawiono przykładowy formularz, w którym wprowadzono dane (naleŝy zauwaŝyć, Ŝe wartości wszystkich pól za wyjątkiem Value są wprowadzane automatyczne). 6
Po stworzeniu formularza naleŝy za jego pomocą wprowadzić kilka rekordów do tabeli w Access ie. Następnym krokiem jest uruchomienie dodatkowej usługi serwera SQL o nazwie SQL Server Agent odpowiedzialnej za cykliczne uruchamianie na serwerze szeregu czynności. Usługa ta będzie potrzebna do cyklicznego wciągania danych do tabeli ManualAnalogHistory. W tym celu naleŝy z grupy programów Microsoft SQL Server uruchomić program Enterprise Manager i rozwinąć drzewo lokalnego serwera SQL tak jak na rysunku poniŝej. Za pomocą prawego klawisza myszy i wybrania polecenia Start z menu kontekstowego na ikonie SQL Server Agent naleŝy uruchomić tę usługę. (Aby zautomatyzować jej uruchamianie po kaŝdym restarcie serwera naleŝy uŝyć programu SQL Server Service Manager). 7
Kolejnym krokiem jest stworzenie pakietu DTS (Data Transformation Services) odpowiadającego za import danych z MS Access do MS SQL Server. W tym celu naleŝy z belki narzędziowej wybrać ikonę Run Wizard lub z menu Tools\Data Transformation Services\polecenie Import Data. Po zatwierdzeniu pierwszego okna wizarda importu naleŝy określić ścieŝkę dostępu do bazy danych Access oraz nazwę uŝytkownika domyślnie jest to Admin bez hasła. UWAGA! Na ten czas naleŝy zamknąć bazę danych w programie Access. W kolejnym oknie naleŝy określić docelowe miejsce dla danych, naleŝy tutaj wprowadzić nazwę serwera SQL (Local lub InSQL lub nazwa komputera, na którym pracuje IndustrialSQL Server) oraz nazwę uŝytkownika (wwadmin, sa, lub kaŝdy inny mający prawo wprowadzania danych do tablicy ManualAnalogHistory). W oknie Database naleŝy wybrać bazę danych Runtime. 8
Następnym krokiem jest określenie sposobu importu danych naleŝy wybrać opcję Use a query to specify the data to transfer. W kolejnym oknie - edytorze SQL naleŝy wprowadzić zapytanie SQL w notacji Jet SQL (format Access). W przykładzie jest to zapytanie pobierające wszystkie rekordy tabeli Dane zapisane w niej w ciągu ostatniej minuty i posortowane po czasie: SELECT * FROM Dane WHERE (Dane.DateTime >= DateAdd( s, -60, Now())) ORDER BY Dane.DateTime DESC 9
W kolejnym oknie naleŝy wybrać tabelę, do której będą importowane dane, czyli ManualAnalogHistory w bazie danych Runtime, tak jak na rysunku poniŝej: Ostatnim krokiem konfiguracji jest określenie czy import ma być uruchomiony w tym momencie (opcja Run Immediately), czy chcemy zapisać definicję na serwerze (Save DTS Package) oraz czy chcemy aby import odbywał się automatycznie w określonych momentach w czasie (Schedule DTS package for later execution). 10
W celu określenia definicji czasowego uruchamiania naleŝy wybrać przycisk z trzem kropkami po prawej stronie okna i określić odstępy czasu tak jak na rysunku poniŝej np. co 1 minutę. Po powrocie do głównego okna konfiguracji i próbie przejścia dalej powinno pojawić się okno definicji zapisu pakietu DTS. NaleŜy podać jego nazwę i nazwę serwera oraz nazwę uŝytkownika serwera podobnie jak na rysunku poniŝej: 11
Po zatwierdzeniu konfiguracji serwer powinien dokonać pierwszego importu i zakończyć go potwierdzeniem jak na rysunku poniŝej: Od tego momentu co 1 minutę będzie uruchamiany pakiet, który w oparciu o zapytanie SQL pobierze rekordy z bazy danych Access z ostatniej minuty i wpisze do tabeli ManualAnalogHistory. Aby podejrzeć efekty moŝna uruchomić z grupy programów ActiveFactory program Trend i odnaleźć zmienną na liście, dodać do wykresu i wyświetlić zakres czasu, z którego wpisywane były rekordy w tabeli Dane w programie Access. 12
UWAGA! PowyŜsze zagadnienie moŝna takŝe rozwiązać poprzez przyłączenie w bazie danych Access tabeli ManualAnalogHistory z serwera. 13