Mit Hilfe von Qucs (Quite Universal Circuit Simulator) kann das Ergebnis einer Schaltungssimulation mit einer Scriptsprache nachverarbeitet werden. Somit kann man z.B. echte Messdaten eines Sensors mit dem Schaltungssimulator analog aufbereiten (verstärken, filtern, ...) und danach mit Hilfe der Scriptsprache direkt Controler-mäßig verarbeiten.
Die Programme findet man unter http://qucs.sourceforge.net/ und https://www.gnu.org/software/octave/. Qucs muss man nur entpacken und kann ohne Installation gestartet werden (qucs.bat). Der Projekt-Ordner wird automatisch unter "C:\Users\xxx\.qucs\" angelegt. Octave wird mit Hilfe des Installers installiert und legt danach ein Icon für die eigene Oberfläche am Desktop an. Damit Qucs die Octave Umgebung findet muss sie noch in den Einstellungen eingetragen werden. Dafür wird der Octave Pfad auf "C:\Octave\Octave-5.1.0.0\mingw64\bin\octave.bat" gesetzt.
Danach kann man bereits ein neues Projekt anlegen und den Schaltplan grafisch eingeben. Das Test-Projekt beinhaltet eine Datei basierende Spannungsquelle. Somit kann man das Signal durch die Daten einer csv-Datei vorgeben. Um die gewünschten Signale anschließend wiederzufinden werden noch Labels gesetzt.
Mit Hilfe des Data Displays können die Ergebnisse der Schaltungssimulation betrachtet werden.
Das Octave Post-Processing Script kann unter den Schematic Einstellungen (Rechts-Klick > Document Settings) eingetragen werden. Des Weiteren kann hier auch das automatische Abarbeiten des Scripts ausgewählt werden.
Mit Hilfe von Qucs Funktionen können die Simulationsergebnisse eingelesen werden (loadQucsDataSet, getQucsVariable). Die weitere Verarbeitung kann mit dem Octave-Syntax und Funktionen erfolgen (sehr ähnlich zu Matlab).
% testing of Octave post processing function void = test() % threshold parameters thr_ris = 0.5; % rising threshold thr_fal = 0.2; % falling threshold data = loadQucsDataSet("test.dat"); if isempty(data) printf("no data available"); else %showQucsDataSet(data); time = getQucsVariable(data, "time"); sgnl = getQucsVariable(data, "Uout.Vt"); % show filtered signal figure(1) AH(1) = subplot(4,1,1); plot(time, sgnl); grid on %% tresholding of signal with hysteresis sgnl_length = size(sgnl, 2); sgnl_ris = double(sgnl > thr_ris); sgnl_fal = double(sgnl < thr_fal); sgnl_ris_edg = sgnl_ris - circshift(sgnl_ris, [0 1]); sgnl_fal_edg = sgnl_fal - circshift(sgnl_fal, [0 1]); % show thresholded signal AH(3) = subplot(4,1,2); plot(time, sgnl_ris_edg); ylim([-0.5 1.5]) grid on AH(3) = subplot(4,1,3); plot(time, sgnl_fal_edg); ylim([-0.5 1.5]) grid on sgnl_edges = double(sgnl_ris_edg > 0) - ... double(sgnl_fal_edg > 0); sgnl_thr = cumsum(sgnl_edges); while((max(sgnl_thr) > 1) || (min(sgnl_thr) < 0)) first = find(sgnl_thr > 1, 1, 'first'); if (size(first,2) > 0) sgnl_thr(1, first:sgnl_length) = ... sgnl_thr(1, first:sgnl_length) - 1; end first = find(sgnl_thr < 0, 1, 'first'); if (size(first,2) > 0) sgnl_thr(1, first:sgnl_length) = ... sgnl_thr(1, first:sgnl_length) + 1; end end % show threshoulded signal AH(3) = subplot(4,1,4); plot(time, sgnl_thr); ylim([-0.5 1.5]) grid on end endfunction
Nach Eingabe eines Fehlerfreien Scripts kann die Ausgabe betrachtet werden. Falls die Ausgabe aus irgendeinem Grund hängen bleibt, kann man das Ausgabe Toolkit ändern. Bei Eingabe von "graphics_toolkit" erhält man das aktuell verwendete Toolkit (bei mir z.B. "ans = fltk"). Mit "graphics_toolkit('gnuplot')" stellt man auf gnuplot um.
Das original QUCS wird nicht mehr aktiv weiterentwickelt. Als Alternative kann man QUCS-S oder QUCS Studio verwenden. Einen Überblick erhält man mit diesem Artikel.
Attachment | Size |
---|---|
Test Projekt - Source Dateien | 154.17 KB |