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:
Python punktet dagegen mit Stärken in folgenden Anwendungen:
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.
Prinzipiell kann man unterscheiden zwischen
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:
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()
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.

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.

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]))
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')
Sequenzen in imc FAMOS können mit Python-Code vermischt werden. Es gibt folgende Möglichkeiten:
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:
Andererseits bietet diese Kombination auch die Möglichkeit, Python-Programme zu erweitern, beispielsweise um:
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:

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.
Für viele Situationen, in denen Messdaten ausgewertet werden müssen, bietet imc FAMOS alles Nötige:
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.
In Version 2026 R1 unterstützt imc FAMOS die Python-Versionen 3.8 bis 3.14 und NumPy-Versionen 1.19 bis 2.3. Künftige Versionen werden auch neuere Versionen unterstützen.
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.
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).
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.
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:
In imc FAMOS gibt es kein globales Arbeitsverzeichnis, daher ist es empfehlenswert, Zielverzeichnisse als Variable an das Python-Script zu übergeben.
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.
Alle print-Ausgaben werden im Ausgabe-Fenster von imc FAMOS dargestellt. Enthält das Python-Script einen Fehler, werden dort stattdessen die Fehlerdetails angezeigt.