background image

 

 
 

INFORMATOR TECHNICZNY WONDERWARE

Informator Techniczny nr 53 
11-04-2002 
 

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 

 

background image

 

 
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

background image

 

 

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

background image

 

 
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

background image

 

 
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

background image

 

 
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

background image

 

 

 
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

background image

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

background image

 

 
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

background image

 

 
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

background image

 

 
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

background image

 

 
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

background image

 

 
UWAGA! Powyższe zagadnienie można także rozwiązać poprzez przyłączenie w bazie danych Access 
tabeli ManualAnalogHistory z serwera. 

 

13