Wie kann man die Stärken von Python und imc FAMOS kombinieren?
Sowohl die Datenanalyse-Software imc FAMOS als auch die Programmiersprache Python sind sehr leistungsfähig und bieten umfangreiche Funktionen, um Messdaten auszuwerten. Diese reichen vom Import aus verschiedenen Dateiformaten über die grafische Darstellung bis hin zu automatisierten Berechnungen und Reporterstellung. Dennoch gibt es deutliche Unterschiede und Grenzen.
imc FAMOS verfügt im Vergleich mit Python vor allem über eine besondere Interaktivität und Usability in der Datenanalyse, Sichtung und der Erstellung eigener Benutzeroberflächen für Auswertungen. Einige Stärken von imc FAMOS liegen in folgenden Punkten:
- Dem interaktiven Sichten von Messdaten und Vergleichen von Messreihen
- Dem interaktiven Erstellen von aussagekräftigen Plots
- Beim interaktiven Analysieren von Messdaten, wenn noch nicht klar ist, wonach man sucht
- Beim Durchführen messtechnischer Berechnungen ohne Programmierkenntnisse
- Beim automatischen Berücksichtigen von Einheiten und Abtastraten
- Beim Erstellen eigener Benutzeroberflächen für halbautomatische Analysen
Python punktet dagegen mit Stärken in folgenden Anwendungen:
- Kombination von Messdatenanalyse mit anderen Software-Funktionalitäten
- Datenbank-, Data Lake- und Cloudanbindung
- Auswahl an Bibliotheken für spezialisierte mathematische Berechnungen
- Plattformunabhängigkeit
- Auswahl an Beispielprogrammen über die Community
- Arbeiten mit mehrschichtigen Listen, auch mit gemischten Datentypen
- Machine Learning
Um einen Eindruck zu gewinnen, wie sich imc FAMOS beziehungsweise Python optimal einsetzen lassen, beleuchten wir hier einige Details und zeigen auch, wo die Kombination von imc FAMOS mit Python Vorteile bietet sowie was darüber möglich ist.
Wie funktioniert die Darstellung und Sichtung von Messdaten?
Prinzipiell kann man unterscheiden zwischen
- Interaktiver Darstellung
- Programmierter Darstellung mit Vorlage
- Programmierter Darstellung ohne Vorlage
In imc FAMOS ist der primäre Weg die interaktive Erstellung mit der Maus. Ausgangspunkt ist in den meisten Fällen das QuickView-Fenster, das alle selektierten Kanäle automatisch fertig skaliert und beschriftet anzeigt. Von dort aus lassen sich verschiedene Anpassungen tätigen:
- Per Mausrad, Drag&Drop etc. kann flüssig in die Daten gezoomt werden, um einzelne Bereiche im Detail zu betrachten
- Ein Messfenster zeigt dynamisch die Amplituden an Cursorpositionen und Größen wie RMS oder die Steigung zwischen ihnen
- Per Drag&Drop lassen sich Kanäle neu anordnen, Achsen auf dB-Skalierung umstellen oder die Darstellung zu einem GPS-Plot oder einer Farbkarte ändern
- Beschriftungen, Farbüberlagerungen, Linienstärken und andere grafische Elemente lassen sich über Konfigurationsdialoge anpassen, ähnlich wie bei Microsoft Excel
- Markierungen der Maximal-Werte, Abstände zwischen Ereignissen oder ähnlichem lassen sich per Maus erstellen
Eine programmierte Darstellung mit Vorlage ist ebenfalls möglich, indem das interaktiv erstellte Fenster als Konfigurationsdatei (CCV) gespeichert und später geladen wird. Der Code dafür ist z.B.:
Eine programmierte Darstellung ohne Vorlage erfordert in imc FAMOS wie auch in Python einige Zeilen Code:
;--- Display ---
CwNewWindow("Curve6335","show")
CwDisplaySet("grid",1)
CwDisplaySet("color palette",1)
;--- Channels ---
CwNewChannel("append new axis",Speed_Engine_RPM)
CwNewChannel("append last axis",Ambient_Temp)
CwNewChannel("append new cosys",Velocity_Mph)
;--- RPM display: Set order of magnitude and color overlay ---
CwSelectByIndex("cosys",1)
CwSelectByIndex("y-axis in cosys",1)
CwAxisSet("exponent",0) ; set order of magnitude to 0 so we see 3000 RPM instead of 3*10³ RPM
CwSelectByIndex("line in axis",2) ; ambient temperature line
CwSelectByIndex("data in line",1)
CwDataSet("function",1) ; activate color overlay
;--- Increase line width ---
for i = 1 to 2
CwSelectByIndex("cosys",i)
CwSelectByIndex("y-axis in cosys",1)
CwSelectByIndex("line in axis",1)
CwLineSet("width.screen",0.53)
end
fig,axs = plt.subplots(2,sharex='all')
# First Plot with Colorbar
axs[0].plot(x,y1,lw=0.3,alpha=0.3,c='k') # Thin black line
sc = axs[0].scatter(x,y1,c=c1,s=2,alpha=0.9) # Colored scatter
cbar = fig.colorbar(sc, ax=axs.ravel().tolist()) # Make colorbar for all axes
cbar.set_label('Temp ['+c1_label+']')
# Second Plot
axs[1].plot(x,y2,lw=0.5,alpha=0.9)
# Adjust Axes
for ax in axs:
ax.set_xlabel('Time ['+x_label+']')
ax.grid()
axs[0].set_ylabel('Amplitude ['+y1_label+']')
axs[1].set_ylabel('Amplitude ['+y2_label+']')
plt.show()
Wie funktionieren Berechnungen?
Einfache Formeln lassen sich sowohl in imc FAMOS als auch in Python ähnlich und sehr einfach formulieren. Die Berechnung der Wurzel aus 2 erfolgt beispielsweise mit:
Die Berechnung, wie lange ein Linienbus insgesamt an Haltestellen stand, basierend auf seinem Geschwindigkeitssignal, lässt sich auf diese Weise ausdrücken:
imc FAMOS (mit automatischer Nutzung der Abtastzeit):
speed0 = speed < 0.5
speed0totaltime = sum(speed0) * xdel?(speed0)
PPython (Zur Vereinfachung mit fester Kodierung der Abtastzeit):
speed0 = speed < 0.5
speed0totaltime = sum(speed0) * 0.05
Bei komplexeren Funktionen blendet imc FAMOS einen Assistenten sowie einen Hilfetext mit Beispielen ein. Python bietet keine solchen integrierten Hilfestellungen, dafür aber umfangreiche Online-Dokumentationen und Foren zur Benutzung der Funktionen.

Wie werden Einheiten berücksichtigt?
Einheiten wie auch Zeitstempel sind in imc FAMOS fest an die Daten gekoppelt. Daher erscheinen sie auch automatisch beim Anzeigen von Kurvenfenstern. Sie können per Funktion gesetzt, aber auch direkt aus Dateien importiert, implizit angegeben werden und werden auch in Verrechnungen automatisch einbezogen:
P = 230 'V' * 3 'A' ; Einheit für P wird automatisch 'W'
SetUnit(speed, "km/h", 1)
ConvertUnit(speed, "m/s", 1) ; Umrechnung zu m/s
Ähnlich wie in diesem Beispiel automatisch die Einheit zu Watt wird, finden Umrechnungen auch bei Integralen, PSD-Berechnungen usw. statt. Die ConvertUnit-Funktion ermöglicht eine fehlerfreie Umrechnung der Daten in passende Zieleinheiten, u.a. nach den Regeln des NIST. Ist eine Umrechnung nicht möglich, schlägt die Analysesequenz fehl, statt wie bei manueller Umrechnung mit falschen Werten weiterzurechnen.
Damit tragen die Einheiten durchgängig zu Plausibilitätsprüfungen und zum schnellen Verständnis der Daten bei.
In Python werden Einheiten üblicherweise manuell gesetzt, oder mit Hilfe von Dictionaries oder Listen an den Daten mitgeführt. Es gibt verschiedene Vorgehensweisen und einige Hilfsmittel wie UnitPy, aber keine standardisierten Wege. Der Programmierer ist also selbst für konsistente Einheiten verantwortlich.
Ist die Erstellung von Unterfunktionen möglich?

In beiden Lösungen sind Unterfunktionen möglich. In imc FAMOS heißen sie Sequenzfunktionen und werden über einen Assistenten erstellt. Dort werden Parameter, Rückgabewert sowie Beschreibungstexte definiert. Zur Verwendung werden später wie bei werkseigenen Funktionen ein Assistent angeboten sowie die Hilfetexte eingeblendet.
Der Inhalt der Sequenzfunktion wäre in dem Beispiel:
Result = mean(Data)
Der Aufruf erfolgt mit einem vorangestellten Aufrufezeichen:
m = !MakeMean([1,2,3,4])
In Python werden Erstellung wie auch Inhalt durch Quellcode umgesetzt, z.B.:
import numpy as np
def makemean(data):
# Calculate the average of a dataset.
# Use this function to calculate the
# data: Input channel.
# Returns the calculation result. Single value.
# Tags: mean, avg, average
value = np.mean(data)
return value
m = makemean(np.array([1,2,3,4]))
Kann ich automatisiert Office-Dokumente erstellen?
Sowohl in imc FAMOS als auch in Python ist das möglich, wobei imc FAMOS aber auf PowerPoint- und Excel-Fernsteuerung spezialisiert ist. Ein Erzeugen eines PPTX-Reports gestaltet sich dort beispielsweise mit folgenden Kommandos:
PptOpenPresentation("c:\temp\template.pptx", 0)
PptAddSlides(1, "c:\temp\plotpagetemplate.pptx")
PptSetText(1, "Heading", "Example report")
CwSelectWindow("ForceVsDisplacement")
PptSetCurve(1, "plot1", 1, 0, "printer")
PptSavePresentation("c:\temp\report.pptx")
PptClosePresentation()
Die Erzeugung eines Word-Reports mit Python sieht ganz ähnlich aus:
from docx import Document
# If docx missing, run in terminal: pip install PyDocX
doc = Document('c:\\temp\\template.docx')
doc.add_page_break()
doc.add_heading('Example report')
doc.add_paragraph('Example plot')
doc.add_picture('c:\\temp\\plot1.png')
doc.save('c:\\temp\\report.docx')
Welche Kombinationsmöglichkeiten bestehen zwischen imc FAMOS und Python?
Sequenzen in imc FAMOS können mit Python-Code vermischt werden. Es gibt folgende Möglichkeiten:
- Aufruf bestimmter Python-Kommandos mit PyRun()
- Aufruf eine expliziten Python-Funktion mit PyCallFunction
- Aufruf einer .py-Datei mit PyRunFile(), wenn Sie die Datei extern z.B. mit Visual Studio Code erstellen
Beispielsweise kann die folgende Sequenz eine Wurzel mit Python berechnen:
PyRun("import math")
result = PyCallFunction("math", "sqrt", 2)
Auch komplexere Funktionen wie eine diskreten Wavelet-Transformation sind damit erreichbar:
PyRun(["import pywt", "import numpy as np"])
result = PyCallFunction("pywt", "cwt", signal, !CreateSignal.Ramp(1, 129, 1, 129), "gaus1")
Gibt eine Funktion wie In diesem Beispiel die Funktion cwt zwei Ergebnisse zurück, wird als Ergebnis in imc FAMOS eine Gruppe mit zwei Variablen erzeugt. Wird ein komplexes Script (oder eine externe Quellcode-Datei) aufgerufen, können Variablen auch explizit an die Python-Umgebung übergeben bzw. die Ergebnisse zurück übertragen werden. Über diesen Weg kann dieser Austausch auch beliebig generisch gestaltet werden.
Im Folgenden sieht man beispielsweise, wie zwei Kanäle aus einer Apache Parquet-Datei geladen werden:
PySetVar("", "p", "c:\temp\weather.parquet")
PyRun([
"import pandas as pd",
"df = pd.read_parquet(p)",
"MinTemp = df['MinTemp'].to_numpy()",
"MaxTemp = df['MaxTemp'].to_numpy()"])
MinTemp = PyGetVar("", "MinTemp")
MaxTemp = PyGetVar("", "MaxTemp")
Die Streckung eines FAMOS-Aufrufs über mehrere Zeilen, wie hier zu sehen, kann über die Verwendung von Shift+Enter erreicht werden und ist empfehlenswert, wenn der Python-Code überschaubar ist.
Das Einlesen einer Python-typischen pkl-Datei gestaltet sich ganz ähnlich, beispielsweise:
PyRun([
"import pickle",
"with open('c:\\temp\\famos.pkl', 'rb') as fp:",
" famosdata = pickle.load(fp)",
"values = famosdata['value_y']"])
values = PyGetVar("", "values")

Der Austausch zwischen imc FAMOS und Python findet direkt im Arbeitsspeicher des PCs statt und ist damit auch für große Datenmengen leistungsfähig und schnell.
Typische Anwendungsfälle für diese Kombination sind einerseits die Erweiterung von FAMOS durch:
- Spezialisierte Berechnungsalgorithmen wie Netzqualitätsanalyse für Windparks nach IEC 61400, Wavelet-Transformation oder die Erzeugung von rotem Rauschen (1/f²-Rauschen)
- Cloud- oder Web-Service-Anbindung zum Abrufen oder Hochladen von Daten bzw. Analyseergebnissen
- Spezialisierte Datenbank-Anbindung
- Importieren von Daten aus spezialisierten Dateiformaten, z.B. parquet-, json- oder pickle-Dateien
- Komplexe Abläufe, die effizienter in einer Universal-Programmiersprache umsetzbar sind
Andererseits bietet diese Kombination auch die Möglichkeit, Python-Programme zu erweitern, beispielsweise um:
- Eigene Benutzeroberflächen für eine halbautomatische Analyse zu erstellen
- Eine interaktive Sichtung und Analyse vorzunehmen, wenn das Python-Auswertungsprogramm unerwartete Ergebnisse liefert
- Interaktiv Messungen oder Kanälen auszuwählen, bevor die Analyse startet
Welche Beispiele und Hilfestellungen existieren zur Python-Integration in imc FAMOS?
Für einen ersten Einstieg am besten geeignet ist oft der Assistent zum Starten eines Python-Scripts. Sein Zweck ist, aus einem Python-Script eine FAMOS-Sequenzfunktion zu generieren. Er fordert dabei schrittweise dazu auf, alle Informationen einzugeben:
- Namen und Beschreibung der Sequenzfunktion
- Den Python-Code oder eine externe Python-Script-Datei
- Die Liste der Variablen, die das Script verarbeiten und die der Ergebnisse, die es zurückgeben soll

Am Ende lässt sich die entstandene Sequenzfunktion testen, bevor sie als Datei generiert wird. Alle Felder sind so vorbelegt, dass auch ohne Eingabe ein sinnvolles Beispiel entsteht (Das Berechnen einer Quadratwurzel, die Funktion heißt dann z.B. „!PythonLib.CalcSquareRoot“). Ein Aufruf erfolgt dann also zum Beispiel mit:

Dabei bietet die Funktion auch automatisch einen Assistenten zur Auswahl der Parameter sowie einen Hilfetext, der automatisch eingeblendet wird.
Neben diesem Assistenten bietet sich auch ein Demoprojekt „Python“ an, das ebenfalls immer Teil der imc FAMOS Installation ist. Es zeigt beispielhaft, wie sich Histogramm-, Perzentil- oder FFT-Berechnungen mit Python-Code ausführen lassen und enthält auch Beispiel-Messdaten, so dass es direkt verwendet und an eigene Zwecke angepasst werden kann.
Schließlich ist auch ein Einstieg über die einzelnen Funktionen möglich, die in der Kategorie „Python-Kit“ zusammengefasst sind. Auch diese acht Funktionen haben jeweils Beschreibungstexte mit Beispielen, auf deren Basis sich leicht eine eigene Lösung erstellen lässt.
Fazit
Für viele Situationen, in denen Messdaten ausgewertet werden müssen, bietet imc FAMOS alles Nötige:
- Import von Messdaten aus vielen Dateiformaten
- Schnelle und einfache Darstellung der Messdaten
- Schneller Vergleich von Messreihen
- Leichte Erstellung von aussagekräftigen Plots inkl. Markern
- Umfangreiche messtechnische Berechnungen, die ohne Programmierkenntnisse und interaktiv nutzbar sind
- Hohe Performance bei Darstellung und Berechnungen
- Interaktive Erstellung von Reports und eigenen Benutzeroberflächen für halbautomatische Analysen
- Erstellung vollautomatischer Analysen inklusive der Generierung von PowerPoint-Dateien oder ähnlichem.
Viele dieser Aspekte sind mit Python zwar realisierbar, aber etwas umständlicher. Python-Programmierer, die mehr Interaktivität bei Datensichtung und -verarbeitung erreichen wollen, können dafür also imc FAMOS nutzen und dabei ihre bestehenden Analyse-Skripte bei Bedarf aufrufen.
Da imc FAMOS wiederum in einigen anderen Aspekten eingeschränkt ist, um durch Messtechnik-Ingenieure ohne große Programmierkenntnisse beherrschbar zu bleiben, stößt es auch in einigen Fällen an seine Grenzen.
Die Schnittstelle zu Python bringt in diesen Fällen die Möglichkeit, imc FAMOS beliebig zu erweitern und die Stärken beider Pakete voll auszunutzen.
In der Test-Version von imc FAMOS ist ein Demoprojekt enthalten, mit dem diese Erweiterbarkeit beliebig ausprobiert werden kann.
FAQ
Welche Python-Versionen werden von imc FAMOS unterstützt?
In Version 2024 R3 unterstützt imc FAMOS die Python-Versionen 3.8 bis 3.12 und NumPy-Versionen 1.19 bis 2.1. Künftige Versionen werden auch neuere Versionen unterstützen.
Der Aufruf meiner Python-Datei schlägt fehl, weil Pandas nicht gefunden wurde, es ist aber installiert. Was ist das Problem?
Möglicherweise ist das Paket nur lokal für den Benutzer installiert. Bitte prüfen Sie mit „pip list --user“, ob dies der Fall ist. Falls ja, installieren Sie es bitte erneut für alle User.
Ich benutze Anaconda, und der Python-Aufruf von imc FAMOS aus funktioniert nicht. Was kann das Problem sein?
In vielen Fällen funktioniert auch mit einer Anaconda-Umgebung alles reibungslos. Falls das bei Ihnen nicht der Fall ist, versuchen Sie bitte, imc FAMOS von einem Anaconda-Terminal-Fenster aus zu starten (cmd.exe- oder Powershell-Prompt).
Kann ich neben den Werten eines Kanals auch seine Eigenschaften, z.B. Einheit und Abtastrate nach Python übertragen?
Ja, wobei es individuell erstellt werden muss, da es auf Python-Seite dafür kein allgemeingültiges Konzept gibt. Bewährt hat sich z.B., auf FAMOS-Seite eine Gruppe zu erstellen, die neben dem Kanal die Einzelwertvariablen zu den Eigenschaften enthält. Diese Gruppe kann als Ganzes nach Python übertragen werden und wird dann zu einem Dictionary.
Wie kann ich eine spezielle Python-Umgebung (Environment) einbinden bzw. für die Ausführung nutzen?
Aktuell bietet imc FAMOS keine direkte Unterstützung für Environments. Eine Steuerungsmöglichkeit bietet aber das Hinzufügen des entsprechenden Pfades mit dem Python-Befehl sys.path.insert direkt nach PyInit. Wichtig ist dabei der Index 0. Wenn der Umgebungspfad c:\py_venv ist, ist der Aufruf beispielsweise:
Wie kann ich im Python-Script auf das FAMOS-Arbeitsverzeichnis zugreifen?
In imc FAMOS gibt es kein globales Arbeitsverzeichnis, daher ist es empfehlenswert, Zielverzeichnisse als Variable an das Python-Script zu übergeben.
Mein PyPlot wächst mit wiederholten Script-Aufrufen, statt immer gleich aufgebaut zu sein. Was mache ich falsch?
Bitte schließen Sie den Plot mit plt.close() am Ende des Skripts, wenn Sie es nicht mehr benötigen. Es wird nicht automatisch nach der Ausführung geschlossen.
Wie bekomme ich mit, welche Konsolenausgaben mein Python-Script mit print erzeugt hat, nachdem ich es von FAMOS aus aufgerufen habe?
Alle print-Ausgaben werden im Ausgabe-Fenster von imc FAMOS dargestellt. Enthält das Python-Script einen Fehler, werden dort stattdessen die Fehlerdetails angezeigt.