Powrót do strony głównej

Diagnostyka silników asynchronicznych w Javie: FFT, transformata Parka

Artykuł opisuje rozwój systemu diagnostyki silników asynchronicznych w Javie z wykorzystaniem szybkiej transformacji Fouriera i transformacji Clarke'a-Parka. Omówiono metody przetwarzania sygnałów, optymalizacji wydajności i wizualizacji danych w celu wykrywania defektów sprzętu.

Java w przemyśle: diagnostyka silników poprzez analizę prądu
Advertisement 728x90

Opracowanie systemu diagnostyki silników asynchronicznych w Java z wykorzystaniem FFT i transformacji Parka

System diagnostyki silników elektrycznych asynchronicznych, opracowany w Java, wykorzystuje analizę pobieranego prądu do wykrywania defektów. Aplikacja integruje przetwarzanie sygnałów, szybką transformację Fouriera (FFT) i transformację Clarka-Parka, dostarczając inżynierom narzędzie do monitorowania stanu urządzeń.

Architektura i przetwarzanie sygnałów

Rozwój prowadzono w JavaFX do stworzenia desktopowego zautomatyzowanego stanowiska roboczego (ARM). Kluczowym zadaniem stało się przetwarzanie sygnałów prądu, zapisanych z częstotliwością próbkowania 25,6 kHz. Dane źródłowe zawierają wysokoczęstotliwościowe szumy z falownika, co wymaga wstępnej filtracji.

Główne etapy przetwarzania sygnału:

Google AdInline article slot
  • Filtracja niskich częstotliwości: zastosowanie cyfrowego filtra Butterwortha z częstotliwością odcięcia 1 kHz do usuwania zakłóceń.
  • Ważenie oknem Hamminga: minimalizacja wycieku widmowego i zwiększenie dokładności analizy amplitud.
  • Realizacja FFT: obliczenie widma amplitudowego i fazowego dla identyfikacji składowych harmonicznych.

Przykład kodu filtracji i ważenia:

public double[] applyHammingWindow(double[] signal) {
    int N = signal.length;
    int Fs = 25600;
    int order = 4;
    int cutOff = 1000;
    
    Butterworth flt = new Butterworth(Fs);
    double[] result = flt.lowPassFilter(signal, order, cutOff);
    
    double[] windowedSignal = new double[N];
    Hamming w1 = new Hamming(N);
    double[] out = w1.getWindow();
    
    for (int i = 0; i < N; i++) {
        windowedSignal[i] = result[i] * out[i];
    }
    return windowedSignal;
}

Wizualizacja i analiza danych

Interfejs aplikacji wyświetla kilka typów wykresów dla kompleksowej diagnostyki:

  • Oscylogram prądu: analiza kształtu sygnału w dziedzinie czasu z możliwością skalowania.
  • Diagram wektorowy Parka: wizualizacja trajektorii prądu w współrzędnych d-q po transformacji Clarka-Parka.
  • Spektrogram FFT: identyfikacja dominujących częstotliwości i harmonicznych, wskazujących na defekty.

Dla ułatwienia porównania zaimplementowano przetwarzanie pakietowe do 40 plików CSV. System automatycznie stosuje ujednolicone ustawienia filtracji do wszystkich zestawów danych, umożliwiając śledzenie zmian stanu silnika.

Google AdInline article slot

Optymalizacja wydajności

Efektywność przetwarzania osiągnięto dzięki optymalizacji operacji wejścia-wyjścia i architekturze wielowątkowej:

  • Przetwarzanie pliku CSV o objętości 70 MB zajmuje mniej niż 2 sekundy w konfiguracji z procesorem Intel Core i5 i 16 GB RAM.
  • Wykresy aktualizują się z opóźnieniem poniżej 100 ms dzięki rozdzieleniu wątków obliczeń i wizualizacji.
  • Użycie BufferedReader do odczytu danych zmniejszyło obciążenie pamięci.

Biblioteka JDSP (Java Digital Signal Processing) zapewniła gotowe implementacje filtrów cyfrowych i funkcji okienkowych, przyspieszając rozwój prototypu.

Interfejs użytkownika i funkcjonalność

Interfejs zawiera elementy interaktywne dla szczegółowej analizy:

Google AdInline article slot
  • Podpowiedzi na wykresach: wyświetlanie wartości punktów po najechaniu kursorem.
  • Ustawienia wyświetlania: wybór jednostek miary (jednostki względne lub dB), zakresu częstotliwości, typu sygnału.
  • Motywy wyglądu: jasny i ciemny motyw dla komfortowej pracy.
  • Legenda i sterowanie: kolorowe rozróżnianie zestawów danych, suwaki skalowania, przyciski zarządzania plikami.

Przykład implementacji podpowiedzi dla LineChart:

public static void setupTooltip(XYChart.Data<Number, Number> data, String seriesName) {
    Circle circle = new Circle(2);
    circle.setOpacity(0.5);
    circle.setOnMouseEntered(event -> {
        Tooltip tooltip = new Tooltip(
            "Y: " + data.getYValue() + "\n" +
            "X: " + data.getXValue() + "\n" + seriesName
        );
        tooltip.setShowDelay(Duration.ONE);
        Tooltip.install(circle, tooltip);
    });
    data.setNode(circle);
}

Co jest ważne

  • Zastosowanie FFT i transformacji Parka pozwala wykrywać defekty silnika na podstawie harmonicznych prądu.
  • Optymalizacja przetwarzania danych zapewnia analizę plików o objętości 70 MB w 2 sekundy.
  • Architektura wielowątkowa gwarantuje odpowiedź interfejsu poniżej 100 ms.
  • Biblioteka JDSP upraszcza realizację cyfrowego przetwarzania sygnałów w Java.
  • Przetwarzanie pakietowe wspiera porównanie do 40 zestawów danych w jednolitym interfejsie.

— Editorial Team

Advertisement 728x90

Czytaj dalej