Informator_techniczny_Wonderware_009.pdf

(300 KB) Pobierz
INFORMATOR TECHNICZNY WONDERWARE
Informator Techniczny nr 9
23-11-1998
Wonderware IndustrialSQL Server
Zapytania w języku IndustrialSQL
Zadaniem współczesnych systemów baz danych jest wspomaganie procesów decyzyjnych i zarządzania
na poziomie różnych warstw przedsiębiorstwa. Współczesna baza danych nie tylko musi spełniać
wymogi wydajnościowe w zastosowaniach przemysłowych, ale także musi dostarczać narzędzi do
łatwego korzystania z danych tak, aby przedstawiać informacje o odpowiedniej jakości, będące jak
najpełniejszym odzwierciedleniem rzeczywistości.
Wonderware IndustrialSQL Server jest systemem, który w tym aspekcie oferuje kilka innowacyjnych
rozwiązań. Oprócz oprogramowania klienckiego służącego do wizualizacji danych historycznych posiada
on zaimplementowane rozszerzenia języka SQL (Structured Query Language) służącego do
odzyskiwania informacji z bazy danych. Rozszerzenia standardowego języka TransactSQL w dziedzinie
czasu i częstotliwości tworzą nowy język zapytań adekwatny do zastosowań przemysłowych -
IndustrialSQL .
Personel różnego szczebla potrzebuje najróżniejszego typu informacji o procesach nad którymi czuwa i
tak na przykład.
Warstwa zarządzania cala sfera produkcyjna potrzebuje informacji czy założenia pokrywają się z
faktyczna ilością produkcji, jej kosztami oraz jakością. Mogą oni potrzebować odpowiedzi na pytania:
Czy osiągnęliśmy oczekiwany uzysk produkcyjny?
Gdzie i w jakich ilościach znajdują się materiały do produkcji?
Co wywoływało przestoje produkcyjne?
Czy koszty produkcji pokrywają się z założonymi?
Inżynierowie kontroli procesu maja na celu optymalizacje procesów i potrzebują rzeczywistych informacji
o zachowaniu się systemu. Mogą oni zadawać pytania:
Czy proces jest stabilny?
Jak wczorajsze zmiany wpłynęły na dzisiejsza prace systemu?
Dlaczego wybrana maszyna nie pracuje w trybie automatycznym?
Jaki były ustawienia procesu w momencie gdy mięliśmy maksymalny lub minimalny uzysk?
Jakie są zależności pomiędzy obciążeniem danej maszyny, a stabilnością jej pracy?
Personel utrzymania ruchu mający na celu minimalizacje czasu przestojów oraz maksymalizacje
żywotności maszyn może zadawać pytania:
Ile razy w ostatnim roku był rozruch danego silnika?
Kiedy maszyna wymaga smarowania?
Jak kształtowały się temperatury łożysk w trakcie danej operacji?
Czy wydajność pompy spadła w ostatnim miesiącu?
Inżynierowie zarządzania jakością mogą zadawać pytania:
Czy mój proces mieści się w założonych granicach kontrolnych?
Jakie są główne przyczyny braków?
Jakiego uzysku mogę oczekiwać po danym procesie?
Co jest przyczyna niestabilności procesu?
ASTOR Sp. z o.o.
Dział Oprogramowania Przemysłowego
ul. Smoleńsk 29, 31-112 Kraków
e-mail: wonderware1@astor.com.pl
http://www.astor.com.pl
tel.: 012 428-63-30
fax: 012 428-63-09
926567204.008.png 926567204.009.png 926567204.010.png 926567204.011.png 926567204.001.png 926567204.002.png 926567204.003.png
 
Dział finansów monitorujący i minimalizujący koszty może chcieć odpowiedzi na pytania:
Czy zarobiliśmy jakieś pieniądze produkując ten element?
Jakie jest zużycie materiałów w porównaniu z ostatnim miesiącem?
Co spowodowało zmianę kosztów produkcji w tym miesiącu?
IndustrialSQL Server czyli unifikacja formatu danych historycznych (jedna baza danych dla zastosowań
przemysłowych i biznesowych), standardy komunikacyjne, dobre narzędzia obróbki danych może
sprawić, ze odpowiedzi na powyższe pytania będą łatwiejsze do uzyskania w wielu zakładach.
Poniżej zostanie przedstawionych kilka prostych przykładów zapytań w języku IndustrialSQL.
Zapytanie SQL wyciągające z bazy danych aktualna wartość danego parametru procesu (bądź
ostatnia wartość, jaka została zebrana w bazie)
SELECT TagName, Value FROM AnalogLive
WHERE TagName = ‘Zmienna1’
Rezultat:
TagName
Value
ReactLevel
1134.0
(1 row affected)
Zapytanie SQL przeszukujące tabele typu “Wide” będące transpozycjami zwykłych tablic
historycznych
Jest to szybki sposób znalezienia przedziałów czasowych, w których dana zmienna przybierała
określoną wartość (w jakich godzinach ostatniej doby temperatura łożyska przekraczała wartość
dopuszczalną). Jest to także szybki sposób wyszukiwania wartości w zadanym przedziale czasu (jak
wyglądał rozkład temperatury w kotle za ostatnia godzinę).
SELECT DateTime, Temperatura1, Temperatura2
FROM AnalogWideHistory
WHERE Temperatura1 > 100
AND Temperatura2 < 150
Rezultat:
DateTime
Temperatura1
Temperatura2
Mar 2 1998 6:20 PM
110.0
144.0
Mar 2 1998 6:20 PM
112.0
142.0
Mar 2 1998 6:20 PM
114.0
140.0
Mar 2 1998 6:20 PM
115.0
139.0
Mar 2 1998 6:20 PM
118.0
135.0
(5 rows affected)
Zapytanie pobierające wartości z określonego przedziału czasu przeprowadzające prosta
obróbkę statystyczna
Zapytanie to jest przykładem jak IndustrialSQL potrafi inteligentnie odczytywać parametr w postaci czasu
- w języku TransactSQL wymaga to bardzo żmudnych i trudnych czynności (podaj mi maksymalna
wartość poziomu zbiornika X na trzeciej zmianie w piątek zeszłego tygodnia).
2
926567204.004.png 926567204.005.png
 
SELECT ‘Maximum’ = max(PoziomZbiornikaX),
‘Minimum’ = min(PoziomZbiornikaX),
‘Srednia’ = avg(PoziomZbiornikaX),
FROM AnalogWideHistory
WHERE DateTime >’28 Feb 1998 10:00 PM’
AND
DateTime <’29 Feb 1998 6:00 AM’
Rezultat:
Maximum
Minimum
Srednia
99
5
45
(1 row affected)
O ile powyższe zapytania przy znacznych nakładach pracy i dużych umiejętnościach programistycznych
można zrealizować w zwykłej bazie danych te przedstawione poniżej są możliwe do stworzenia tylko za
pomocą języka IndustrialSQL. Zawierają one tzw. procedury zachowane (stored procedures) czyli
skompilowane skrypty SQL dające możliwość łatwego osiągnięcia dużej funkcjonalności zapytań.
Zapytanie SQL ściśle określające ilość pomiarów jakie chcemy odczytać w zadanych przedziale
czasowym na temat (np. podaj mi 100 wartości ciśnienia za ostatnia godzinę w równomiernych
odstępach czasu)
ww_SetRowCount 100
SELECT Tagname, DateTime, Value
FROM nalogHistory
A
WHERE Tagname = ‘CisnienieZbiornika1’
AND DateTime >= ‘Mar 20 1998 6:00:00 AM’
AND DateTime <= ‘Mar 20 1998 7:00:00 AM’
Rezultat:
TagName
DateTime
Value
CisnienieZbiornika1
Mar 20 1998 6:00:00 AM 5.67
CisnienieZbiornika1
Mar 20 1998 6:00:40 AM 5.67
CisnienieZbiornika1
Mar 20 1998 6:01:20 AM 5.66
CisnienieZbiornika1
Mar 20 1998 6:02:00 AM 5.65
CisnienieZbiornika1
Mar 20 1998 6:02:40 AM 5.64
.....
(100 rows affected)
Zapytanie SQL ściśle określające z jaka rozdzielczością czasowa chcemy pobrać dane z bazy w
podanym okresie (podaj mi rozkład prędkości silnika w podanym przedziale czasowym z
dokładnością co jedna sekundę)
ww_SetResolution 1000
SELECT DateTime, TagName, Value
FROM AnalogHistory
WHERE TagName = ‘Predkosc_silnika_X’
AND DateTime >= ‘Mar 20 1998 6:00:00 AM’
AND DateTime <= ‘Mar 20 1998 7:00:00 AM’
Rezultat:
3
926567204.006.png
 
DateTime
TagName
Value
Predkosc_silnika_X
Mar 20 1998 6:00:00 AM 1125
Predkosc_silnika_X
Mar 20 1998 6:00:01 AM 1126
Predkosc_silnika_X
Mar 20 1998 6:00:02 AM 1124
Predkosc_silnika_X
Mar 20 1998 6:00:03 AM 1125
......
Predkosc_silnika_X
Mar 20 1998 7:00:00 AM 1120
(60 001 rows affected)
Zapytanie SQL określające sztywno przedział czasowy dla odczytu danych.
Procedury ww_SetStartDate i ww_SetEndDate ustawiają globalny przedział czasowy dla zapytań (nie
musimy ich specyfikować w zapytaniu), procedura ww_SetDuration określa długość przedziału
czasowego wstecz od daty ustawionej przez procedurę ww_SetEndDate (np. zapytanie, które zbierze
wszystkie wartości z bazy 3 minuty wstecz od godziny 15 i wyliczy ich średnia).
ww_SetDuration (minute, 3)
ww_SetEndDate ‘Mar 30 1998 3:00 PM’
SELECT ‘Srednia’ = avg(Value)
FROM AnalogHistory
WHERE TagName = ‘Poziom’
Rezultat:
Srednia
78
(1 row affected)
Zapytanie ciągle wybierające z bazy danych informacje zawsze gdy zostaną zebrane lub z zadana
czasowa strefa nieczułości
Zapytanie takie jest wykonywane do momentu zamknięcia edytora SQL (np. Microsoft ISQL_w) bądź
wykonania zapytania wyłączającego ten typ odczytu danych (przykładowe zapytanie może brzmieć
następująco: przedstawiaj mi co 5 sekund aktualna wartość ciśnienia zbiornika).
Set_wwContinuous ON, 5000
SELECT TagName, DateTime, Sec = DATEPART(ss, DateTime), Value,
FROM AnalogLive
WHERE TagName = ‘Cisnienie1’
Rezultat:
TagName
DateTime
Sec Value
Cisnienie1
Oct 30 1998 3:00 PM
10
8.1
Cisnienie1
Oct 30 1998 3:00 PM
15
8.1
Cisnienie1
Oct 30 1998 3:00 PM
20
8.2
.......
4
926567204.007.png
 
Zgłoś jeśli naruszono regulamin