Zawieszanie się strony graficznej SCADA: analiza przyczyn źródłowych i optymalizacja dla Foxboro I/A Series oraz Woodward EasyGen

Problem: Zawieszanie się stacji roboczej tylko podczas otwierania określonych ekranów
Operatorzy zgłaszają, że niektóre ekrany SCADA otwierają się w czasie 15–30 sekund. Kursor myszy zacina się podczas ładowania. Inne ekrany otwierają się w ciągu 2–3 sekund. Status komunikacji PLC pozostaje prawidłowy. W diagnostyce nie pojawiają się błędy sieciowe.
Ten wzorzec wskazuje, że problem dotyczy warstwy graficznej, a nie warstwy komunikacyjnej. Zawieszający się ekran zawiera bardziej złożone obiekty niż te ładujące się szybko. W Foxboro I/A Series menedżer wyświetlania zarządza inicjalizacją obiektów. W Woodward EasyGen środowisko GraphWorX renderuje grafikę opartą na SVG. Obie platformy mają trudności, gdy pojedynczy ekran przekracza ich projektowe możliwości.
Przyczyna 1: Nadmiar obiektów animacji w czasie rzeczywistym
Symbole obrotu pomp, ruch taśmy przenośnikowej, animacje obrotu mieszadła oraz wskaźniki stanu kolorów wymagają ciągłych cykli odświeżania. Każdy animowany obiekt zużywa jeden wątek CPU do obliczeń odrysowania. Gdy ekran zawiera ponad 40 aktywnych obiektów animacji, silnik renderujący osiąga maksymalne obciążenie.
W Foxboro I/A Series V7.0 menedżer wyświetlania przydziela jeden wątek renderujący na 10 obiektów animacji. Przy 50 animacjach system uruchamia 5 równoczesnych wątków renderujących plus główny wątek wyświetlania. Wykorzystanie CPU wzrasta do 85–100% na jednym rdzeniu.
W Woodward EasyGen z GraphWorX64 każda animacja obrotu wywołuje przeliczenie transformacji macierzy co 100 ms. Strona przeglądu generatora z 30 obracającymi się symbolami generuje 300 operacji transformacji na sekundę. Próg akceleracji GPU to 25 jednoczesnych transformacji bez dedykowanego sprzętu graficznego.
Środki zaradcze: Zastąp animacje obrotu statycznymi wskaźnikami stanu kolorów. Użyj częstotliwości migania 1 (0,5 s włączone/wyłączone) zamiast płynnego obrotu dla statusu pracy. To zmniejsza obciążenie CPU o 60–70% na obiekt.
Przyczyna 2: Nagły wzrost subskrypcji tagów podczas inicjalizacji strony
Każdy element graficzny jest powiązany z jednym lub więcej tagami PLC. Gdy operator otwiera ekran, klient SCADA wysyła jednocześnie żądania subskrypcji dla wszystkich powiązanych tagów. Ekran z 800 odwołaniami do tagów generuje 800 indywidualnych wiadomości subskrypcyjnych w ciągu 200 ms.
W Foxboro I/A Series AW (Application Workstation) przekazuje subskrypcje do CP (Control Processor) przez Nodebus. Każda subskrypcja wymaga transakcji Nodebus. Nodebus obsługuje maksymalnie 500 transakcji na sekundę na węzeł. Ekran z 800 tagami przekracza ten limit podczas początkowego ładowania.
Wynik: pierwsze 500 tagów aktualizuje się natychmiast. Pozostałe 300 tagów trafia do kolejki i pojawia się 1–3 sekundy później. Operatorzy widzą częściowe aktualizacje ekranu, gdzie niektóre wartości wydają się przestarzałe.
W Woodward EasyGen klient OPC UA subskrybuje tagi partiami po 100. Ekran z 800 tagami wymaga 8 cykli partii. Przy 250 ms na cykl pełna inicjalizacja trwa co najmniej 2 sekundy przed rozpoczęciem renderowania.
- Krok 1: Policz całkowitą liczbę odwołań do tagów na problematycznym ekranie. W Foxboro Display Editor użyj Narzędzia > Raport liczby tagów. W GraphWorX64 użyj Edycja > Znajdź > Wszystkie powiązane zmienne.
- Krok 2: Jeśli liczba przekracza 600, podziel ekran na dwa podekrany połączone przyciskami nawigacyjnymi. Maksymalnie 400 tagów na ekran.
- Krok 3: Dla Foxboro I/A Series zwiększ bufor transakcji Nodebus z domyślnych 256 do 512 w Właściwościach systemu CP > zakładka Sieć.
- Krok 4: Dla Woodward EasyGen skonfiguruj tryb subskrypcji OPC UA na dodawanie monitorowanych elementów zamiast tworzenia subskrypcji w pliku konfiguracyjnym GraphWorX. To pozwala na ponowne użycie istniejących sesji.
Przyczyna 3: Osadzone wykresy trendów zapytujące dane historyczne
Wiele ekranów zawiera okna trendów czasu rzeczywistego pokazujące ostatnie 60 minut danych procesowych. Po otwarciu ekranu każdy wykres trendu zapytuje bazę danych historycznych o dane początkowe. Trzy wykresy na jednym ekranie generują trzy jednoczesne zapytania historyczne.
W Foxboro I/A Series Historian (oparty na Informix lub SQL) obsługuje żądania trendów przez API AIM Historian. Trend 60-minutowy z interwałem próbkowania 5 sekund zwraca 720 punktów danych na pióro. Wykres 4-piórowy pobiera 2 880 punktów. Trzy wykresy pobierają łącznie 8 640 punktów. Czas wykonania zapytania wynosi od 3 do 8 sekund w zależności od stanu indeksów bazy danych.
Podczas wykonywania zapytania wątek wyświetlania jest zablokowany, czekając na dane. Operator widzi zamrożony ekran aż do momentu otrzymania wszystkich danych trendu.
- Krok 1: Zidentyfikuj osadzone obiekty trendów na wolno ładującym się ekranie. Zanotuj zakres czasowy i interwał próbkowania dla każdego z nich.
- Krok 2: Zmniejsz początkowy zakres czasowy z 60 minut do 15 minut. To zmniejsza liczbę punktów danych na pióro z 720 do 180, skracając czas zapytania o 75%.
- Krok 3: Włącz leniwe ładowanie danych trendu. Skonfiguruj trendy tak, aby dane były ładowane 2 sekundy po otwarciu ekranu, a nie podczas inicjalizacji. W Foxboro ustaw właściwość obiektu Trend InitialLoadDelay = 2000 ms.
- Krok 4: Ogranicz liczbę piór trendu na wykres do maksymalnie 4. Używaj osobnych wykresów, jeśli potrzeba śledzić więcej zmiennych.
Przyczyna 4: Obrazy tła o wysokiej rozdzielczości zużywające pamięć
Grafika procesowa często wykorzystuje zeskanowane diagramy P&ID jako tła. Typowe skany P&ID w 300 DPI dla dużego obszaru procesu generują pliki obrazów o rozmiarze 8–15 MB w formacie PNG. Po załadowaniu do ekranu SCADA nieskompresowana bitmapa zajmuje 50–80 MB RAM.
Menedżer wyświetlania Foxboro I/A Series buforuje obrazy tła w pamięci współdzielonej. Domyślny rozmiar bufora to 128 MB. Dwa ekrany z obrazami tła po 12 MB każdy zużywają 24 MB w buforze plus 48 MB kopii roboczej = 72 MB łącznie. Otwarcie trzeciego ekranu wymusza usunięcie z bufora i ponowne załadowanie, co powoduje widoczne zatrzymanie.
Woodward EasyGen GraphWorX64 przechowuje tła jako ciągi zakodowane base64 w pliku GDFX ekranu. Tło o rozmiarze 10 MB zwiększa rozmiar pliku GDFX o 13 MB (narzut base64). Parsowanie tego ciągu dodaje 1,5–2 sekundy do czasu ładowania ekranu.
- Krok 1: Sprawdź rozmiary plików obrazów tła w katalogu projektu SCADA. Zaznacz każdy obraz przekraczający 2 MB.
- Krok 2: Eksportuj tła ponownie w 96 DPI z kompresją JPEG (jakość 85%). To zmniejsza plik PNG 10 MB do JPEG 400–600 KB przy minimalnej utracie jakości wizualnej.
- Krok 3: W Foxboro I/A Series zwiększ rozmiar bufora menedżera wyświetlania do 256 MB przez zmienną środowiskową AW DISPLAY_CACHE_SIZE=262144.
- Krok 4: Dla Woodward EasyGen konwertuj obrazy tła na tryb odniesienia zewnętrznego zamiast osadzania. Używaj ImageSource=File path zamiast ImageSource=Embedded.
Wnioski i zalecenia
Zawieszanie się stron graficznych SCADA wynika z czterech nakładających się wymagań zasobów. Po pierwsze, nadmiar obiektów animacji przeciąża wątek renderujący CPU. Po drugie, nagłe wzrosty subskrypcji tagów przekraczają pojemność transakcji magistrali komunikacyjnej. Po trzecie, osadzone wykresy trendów blokują wątek wyświetlania podczas zapytań o dane historyczne. Po czwarte, obrazy tła o wysokiej rozdzielczości wyczerpują pamięć podręczną.
Dla systemów Foxboro I/A Series priorytetem jest zwiększenie bufora transakcji Nodebus do 512, ustawienie opóźnienia leniwego ładowania trendów na 2 sekundy, rozszerzenie bufora wyświetlania do 256 MB oraz ograniczenie ekranów do maksymalnie 600 tagów. Dla systemów Woodward EasyGen zaleca się zastąpienie animacji obrotu wskaźnikami stanu kolorów, użycie trybu ponownego użycia monitorowanych elementów OPC UA oraz konwersję osadzonych obrazów tła na odniesienia do plików zewnętrznych.
Przeprowadź audyt wszystkich ekranów ładujących się powyżej 8 sekund. Udokumentuj metryki przed i po w systemie CMMS. Celuj w maksymalny czas ładowania 5 sekund dla każdego ekranu na standardowym sprzęcie stacji roboczej (Intel i5, 8 GB RAM, zintegrowana grafika).
