1. Übersicht

Werbung
Brain Vision Analyzer
OLE Automation
Referenzhandbuch
Version 1.05
© Brain Products GmbH 1999 - 2004
Der Inhalt dieses Handbuchs ist geistiges Eigentum der Brain Products GmbH. Er kann ohne besondere
Ankündigung geändert werden. Die Brain Products GmbH übernimmt keine Gewähr oder Haftung für die
Richtigkeit einzelner Aussagen bzw. geht mit diesem Dokument keine Verpflichtung ein.
Alle in diesem Dokument aufgeführten Warenzeichen sind geschützte Marken ihrer jeweiligen Inhaber.
2
Inhalt
1.
Übersicht ....................................................................................................................................4
2.
Objekt-Hierarchie.......................................................................................................................5
3.
Objektklassen ............................................................................................................................5
3.1.
3.2.
3.3.
3.4.
3.5.
3.6.
3.7.
3.8.
3.9.
3.10.
3.11.
3.12.
3.13.
3.14.
3.15.
3.16.
3.17.
3.18.
3.19.
3.20.
3.21.
3.22.
3.23.
3.24.
3.25.
3.26.
4.
Aufrufbare Transformationen ................................................................................................30
4.1.
4.2.
4.3.
5.
Band-rejection Filters (Bandsperrfilter) .................................................................................31
Filters (Filter) .........................................................................................................................32
Formula Evaluator (Formelauswerter) ..................................................................................33
Aufzählungstypen ...................................................................................................................34
5.1.
5.2.
5.3.
5.4.
6.
Application ...............................................................................................................................5
Channel ...................................................................................................................................7
ChannelPosition ......................................................................................................................8
Channels .................................................................................................................................8
CurrentWorkspace ..................................................................................................................8
Dataset ....................................................................................................................................9
FastArray ...............................................................................................................................11
HistoryExplorer ......................................................................................................................15
HistoryFile .............................................................................................................................15
HistoryFiles............................................................................................................................16
HistoryNode ..........................................................................................................................17
HistoryNodes .........................................................................................................................19
HistoryTemplateNode ...........................................................................................................19
Landmark ..............................................................................................................................19
Landmarks.............................................................................................................................19
Marker ...................................................................................................................................20
Markers .................................................................................................................................20
NewHistoryNode ...................................................................................................................20
ProgressBar ..........................................................................................................................24
Segment ................................................................................................................................25
Segments ..............................................................................................................................25
Transformation ......................................................................................................................25
Window..................................................................................................................................27
Windows ................................................................................................................................28
Workspace ............................................................................................................................29
Workspaces...........................................................................................................................29
VisionDataType .....................................................................................................................34
VisionDataUnit ......................................................................................................................34
VisionSegType ......................................................................................................................34
VisionLayerIncFunction .........................................................................................................34
Fehlercodes .............................................................................................................................35
Vision Analyzer OLE Automation Referenzhandbuch
3
1. Übersicht
Der Vision Analyzer lässt sich über OLE Automation steuern. Das geschieht entweder über den eingebauten
Basic-Interpreter, oder aber über externe Programme.
Der Programm-ID (ProgID) für den externen Zugriff auf den Analyzer lautet "VisionAnalyzer.Application".
Der Analyzer enthält eine registrierte Typenbibliothek. Diese Typenbibliothek ist gespeichert in "Analyzer.exe".
Der Eintrag der Typenbibliothek in der Registry ist "Vision Analyzer x.x Type Library", wobei "x.x" für die
aktuelle Version steht.
4
2. Objekt-Hierarchie
Die folgende Abbildung zeigt die Objekt-Hierarchie im Analyzer. Sie dient der Orientierung im Zusammenhang
mit der Objektklassenbeschreibung im folgenden Kapitel.
Application
CurrentWorkspace
FastArray
HistoryExplorer
NewHistoryNode
HistoryFiles (HistoryFile)
ProgressBar
HistoryNodes (HistoryNode)
DataSet
Channels (Channel)
ChannelPosition
Markers (Marker)
HistoryNodes (HistoryNode)
Segments (Segment)
DataSet
...
Windows (Window)
...
Transformation
Windows (Window)
HistoryNode
...
Workspaces (Workspace)
Legende
Objekt und Auflistung
Nur Objekt
Abbildung 1: Objekt-Hierarchie
3. Objektklassen
Die Objektklassen werden in der üblichen Basic-Syntax beschrieben. Das heißt jedoch nicht, dass sie nicht auch
mit anderen Programmiersprachen ansprechbar sind.
Die "Auflistungen" (engl. Collections) dienen als Container für Objekte. Die Objekte können über eine
Indexnummer indiziert werden, wobei der erste Index immer 1 und nicht 0 ist. Einige Auflistungen erlauben
auch die Indizierung über den Namen oder Titel des gesuchten Objekts. Das ist allerdings nur machbar, wenn der
Name nur einmal in der Auflistung vertreten ist. Eine andere Möglichkeit Auflistungen zu durchlaufen, ist der
"For Each"-Befehl in Basic.
Der erste Index in den Datenfeldern (engl. Arrays) ist ebenfalls 1.
Die meisten Objekte verfügen über ein so genanntes Standardelement. Dabei handelt es sich um eine Methode
oder Eigenschaft, die nicht explizit erwähnt werden muss. Beim "Channel"-Objekt handelt es sich z.B. um die
Eigenschaft "DataPoint". Daher sind die folgenden Befehlssequenzen gleichwertig:
fValue = Channels(1).DataPoint(1)
fValue = Channels(1)(1)
3.1. Application
Beschreibung
Vision Analyzer OLE Automation Referenzhandbuch
5
Von der Application-Klasse gibt es nur ein Objekt, das das Programm als ganzes repräsentiert. Es ist das
Standardobjekt, was bedeutet, dass die Methoden und Eigenschaften dieses Objekts direkt ansprechbar sind, d.h.
z.B. "Visible" entspricht "Application.Visible".
Methoden
Function Ask(Text as String) as Long
Stellt eine Frage, die mit Ja/Nein beantwortet werden kann. Liefert je nach Antwort "vbYes"
(6) oder "vbNo" (7) zurück. Diese Funktion ist nützlich für Basic-Skripts in History-Vorlagen,
da sie bei der Umleitung von Meldungen in Log-Dateien im Gegensatz zur eingebauten
Funktion "MsgBox" ebenfalls berücksichtigt werden.
Sub ExecuteMenuItem(MenuItem as String)
Führt einen Menüpunkt aus. Dieser wird als Text eingegeben. Beispielsweise kann die FilterTransformation mit
ExecuteMenuItem "transformations\filters"
oder
ExecuteMenuItem "Transformations\Filters"
aufgerufen werden. Groß-/Kleinschreibung, sowie Leerzeichen und Punkte im Menü-Text
werden ignoriert.
Function Message(Text as String) as Long
Gibt einen Text aus, der mit Ok/Abbrechen quittiert werden kann. Liefert je nach Antwort
"vbOk" (1) oder "vbCancel" (2) zurück. Diese Funktion wird ebenso wie "Ask" beim Umleiten
von Meldungen in Log-Dateien berücksichtigt.
Sub MessageStatus(Text as String)
Gibt einen Text in der Statuszeile aus.
Sub Quit()
Beendet das Programm.
Eigenschaften
ActiveTemplateNode As HistoryTemplateNode
Schreibgeschützt
Falls sich der Analyzer bei der Abarbeitung einer Vorlage befindet, beschreibt dieses Objekt
den aktuell abgearbeitenen Vorlagen-Knoten.
ActiveWindow As Window
Schreibgeschützt
Das aktive Fenster im Arbeitsbereich des Analyzers. Wenn kein Fenster geöffnet ist, ist dieser
Wert "Nothing" (in anderen Programmiersprachen u.a. NULL bzw. NIL).
CurrentWorkspace As CurrentWorkspace
Schreibgeschützt
Aktueller Workspace
HistoryExplorer As HistoryExplorer
Schreibgeschützt
Der History-Explorer
HistoryFiles As HistoryFiles
Schreibgeschützt
Auflistung aller History-Dateien
InstalledComponents as String
Schreibgeschützt
Installierte Komponenten als Text
TemplateMode As Boolean
Flag, wenn "True" (-1), befindet sich das Programm bei der Ausführung einer Vorlage.
Version As Double
Schreibgeschützt
Gibt die aktuelle Programmversion an
Visible As Boolean
Flag, wenn "False" (0), dann ist das Programm nicht sichtbar.
Windows As Windows
Schreibgeschützt
Auflistung aller Arbeitsfenster
WorkFileFolder As String
Schreibgeschützt
6
Verzeichnis der Arbeitsdateien
Workspaces As Workspaces
Schreibgeschützt
Auflistung aller Workspaces im Verzeichnis der Arbeitsdateien
3.2. Channel
Beschreibung
Dieses Objekt beschreibt einen Kanal in einem History-Knoten. Da "DataPoint" das Standardelement ist, kann
auf einen einzelnen Datenpunkt sehr einfach zugegriffen werden.
Beispiel:
Dim fValue As Single
Dim hn As HistoryNode
Dim hf As HistoryFile
Dim ch As Channel
Set hf = HistoryFiles(1)
' Erste History-Ddatei.
hf.Open
Set hn = hf(1)
' Erster Datensatz
Set ch = hn.Dataset(1)
' Erster Kanal
f Value = ch(1)
' Erster Datenpunkt
Set ch = hn.Dataset("FP1")
' Alternativer Zugriff über den Kanalnamen.
f Value = ch(1)
' Erster Datenpunkt
hf.Close
Alternative Kurzfassung:
Dim fValue As Single
HistoryFiles(1).Open
fValue = HistoryFiles(1)(1).Dataset(1)(1)
HistoryFiles(1).Close
Falls größere Datenmengen gelesen werden sollen, empfiehlt sich aus Geschwindigkeitsgründen das einmalige
Einlesen eines Vektors mit "GetData()".
Beispiel:
Dim fVector() As Single
ch.GetData(1, 1000, fVector)
Noch erheblich schneller geht das Einlesen mehrerer Kanäle mit Dataset.GetData(). Weitere Einzelheiten hierzu
finden Sie unter Dataset.
Methoden
Sub GetData(Position As Long, Points As Long, Data() As Single)
Liest einen Datenvektor in "Data()" ein, beginnend ab "Position". Die Anzahl der
Datenpunkte, die eingelesen werden, bestimmt "Points".
Falls es sich bei dem Datensatz um komplexe Daten handelt, hat jeder Datenpunkt zwei Werte,
der erste Wert ist der reelle Anteil, und der zweite der Imaginäranteil der Zahl, d.h. z.B.
"Data(1)" ist der reelle Anteil des ersten Datenpunktes, "Data(2)" der imaginäre. Der zweite
Datenpunkt belegt nun "Data(3)", "Data(4)" usw..
Eigenschaften
DataPoint(Index As Long) As Single
Standardelement, schreibgeschützt
Datenpunkt, der Index gibt die Position im Datensatz an (1-...).
Im Falle, dass es sich beim Datensatz um komplexe Daten handelt, gibt diese Variable den
reellen Anteil der komplexen Zahl an.
DataPointLayered(Index As Long, Layer As Long) As Single
schreibgeschützt
Diese Eigenschaft entspricht "DataPoint", allerdings kann für Daten mit mehreren Ebenen (wie
z.B. bei kontinuierlichen Wavelets) zusätzlich die Ebene ("Layer") angegeben werden.
ImgPoint(Index As Long) As Single
Vision Analyzer OLE Automation Referenzhandbuch
7
Schreibgeschützt
Imaginäranteil einer komplexen Zahl, wenn der Datentyp komplex ist. Der Index gibt die
Position im Datensatz an.
ImgPointLayered(Index As Long, Layer As Long) As Single
Schreibgeschützt
Diese Eigenschaft entspricht "ImgPoint", allerdings kann für Daten mit mehreren Ebenen (wie
z.B. bei kontinuierlichen Wavelets) zusätzlich die Ebene ("Layer") angegeben werden.
Name As String
Schreibgeschützt
Kanalname
Position As ChannelPosition
Schreibgeschützt
Kopfposition des Kanals.
ReferenceChannel As String
Schreibgeschützt
Referenzkanalname
Unit As VisionDataUnit
Schreibgeschützt
Einheit der Daten in diesem Kanal, wie z.B. μV, μV2 usw., s.a. "VisionDataUnit" im Kapitel
"Aufzählungstypen".
3.3. ChannelPosition
Beschreibung
Dieses Objekt beschreibt die Position eines Kanals
Methoden
Eigenschaften
Phi As Single
Schreibgeschützt
Phi in Grad.
Radius As Single
Schreibgeschützt
Radius in Millimeter, 0 bedeutet ungültige Positionsangabe, 1 nimmt den Kopf als ideale
Kugel mit Einheitsradius an.
Theta As Single
Schreibgeschützt
Theta in Grad.
3.4. Channels
Beschreibung
Dieses Objekt ist eine Auflistung von "Channel"-Objekten.
Methoden
Eigenschaften
Count As Long
Schreibgeschützt
Anzahl der Kanäle in der Auflistung
Item(NameOrIndex As Variant) As Channel
Standardelement, schreibgeschützt
Liefert bei Angabe des Kanalnamens oder des Indexes (1-...) ein "Channel"-Objekt.
3.5. CurrentWorkspace
Beschreibung
Das Objekt repräsentiert den aktuellen Workspace
Methoden
Sub Load(FileName As String, [SingleHistoryFile As String])
Lädt die angegebene Workspace-Datei "FileName".
8
Der optionale Parameter "SingleHistoryFile" ermöglicht das Laden einer einzelnen HistoryDatei.
Sub Save()
Sichert die aktuelle Workspace-Datei.
Sub SaveAs(FileName As String)
Sichert die aktuelle Workspace-Datei unter einem neuen Namen.
Eigenschaften
ExportFileFolder As String
Schreibgeschützt
Standardverzeichnis der exportierten Dateien
FullName As String
schreibgeschützt
Name der Workspace-Datei mit voller Pfadangabe
HistoryFileFolder As String
Schreibgeschützt
Verzeichnis der History-Dateien
Name As String
schreibgeschützt
Basisname der Workspace-Datei ohne Verzeichnisangabe und Dateierweiterung.
RawFileFolder As String
Schreibgeschützt
Rohdatenverzeichnis
3.6. Dataset
Beschreibung
Das Objekt repräsentiert einen Datensatz, entweder die Daten in einem History-Knoten in ihrer Gesamtheit, oder
aber die Daten eines einzelnen Segments innerhalb des Gesamtdatensatzes.
Die Eigenschaften, die mit dem Präfix "Layer" ausgestattet sind, werden nur im Zusammenhang von Daten mit
mehreren Ebenen, also gewissermaßen dreidimensionalen Datensätzen angewendet. Ein Bespiel für Datensätze
mit mehreren Ebenen sind kontinuierliche Wavelets.
Methoden
Function GetData(Position As Long, Points As Long, [ChannelList as Variant]) as Single()
Liefert die Daten eines Ausschnitts beginnend ab "Position" als Matrix zurück. Die Anzahl der
Datenpunkte, die eingelesen werden, bestimmt "Points". Der optionale "ChannelList"Parameter kann entweder ein Array von Kanälen enthalten oder einen einzelnen Kanal. Die
Kanalangaben können als Indizes (Kanalpositionen) oder als Namen gemacht werden.
Wird dieser Parameter nicht verwendet, werden die Daten aller Kanäle zurück geliefert.
Die Daten werden gemultiplext geliefert, d.h. zuerst alle Daten des ersten Abtastpunktes, dann
des zweiten usw. Dieses Format entspricht der internen Datenverwaltung in den HistoryKnoten. Daraus ergibt sich ein beträchtlicher Geschwindigkeitsgewinn gegenüber
Channel.GetData().
Falls es sich bei dem Datensatz um komplexe Daten handelt, hat jeder Datenpunkt zwei Werte,
der erste Wert ist der reelle Anteil, und der zweite der Imaginäranteil der Zahl, d.h. z.B.
"Data(1)" ist der reelle Anteil des ersten Datenpunktes, "Data(2)" der imaginäre.
Beispiele
Dim Data() as Single
' Die ersten 2000 Punkte, alle Kanäle
Data = ds.GetData(1, 2000)
' Die ersten 2000 Punkte, Kanäle "Fp1" und "Fp2"
Data = ds.GetData(1, 2000, Array("FP1", "Fp2"))
' Die ersten 2000 Punkte, erster und zwölfter Kanal
Data = ds.GetData(1, 2000, Array(1, 12))
' Die ersten 2000 Punkte, Kanal "F3"
Data = ds.GetData(1, 2000, "F3")
Vision Analyzer OLE Automation Referenzhandbuch
9
Dim a(1 to 2) as Long
a(1) = 12
a(2) = 24
' Die ersten 2000 Punkte, 12. und 24. Kanal
Data = ds.GetData(1, 2000, a)
Eigenschaften
Averaged As Boolean
Schreibgeschützt
Flag, wenn "True" (-1), dann geht der Datensatz direkt oder indirekt aus einer Mittelung
hervor.
AverageCount As Long
Schreibgeschützt
Anzahl der Segmente, die in die Mittelung eingingen. Nur gültig, wenn "Averaged" Flag
"True" (-1) ist.
Channels As Channels
Standardelement, schreibgeschützt
Auflistung der Kanalobjekte im Datensatz.
LayerFunction As VisionLayerIncFunction
Schreibgeschützt
Schrittweiten-Funktion zwischen den Ebenen ("Layers") eines Datensatzes. Solche Ebenen
treten bei dreidimensionalen Daten, wie z.B. kontinuierliche Wavelets, auf. Die möglichen
Werte dieser Eigenschaft finden Sie im Kapitel "Aufzählungstypen".
LayerLowerLimit As Double
Schreibgeschützt
Der Wert der untersten Ebene eines mehrschichtigen Datensatzes.
Layers As Long
Schreibgeschützt
Anzahl der Ebenen im Datensatz. Daten mit mehreren Ebenen kommen z.B. bei
kontinuierlichen Wavelets zur Anwendung.
LayerUpperLimit As Double
Schreibgeschützt
Der Wert der obersten Ebene eines mehrschichtigen Datensatzes.
Length As Long
Schreibgeschützt
Länge des Datensatzes in Datenpunkten.
Markers As Markers
Schreibgeschützt
Auflistung der Marker im Datensatz.
SamplingInterval As Double
Schreibgeschützt
Auflösung in Mikrosekunden für Daten im Zeitbereich und Hertz für Daten im
Frequenzbereich.
Die folgende Formel konvertiert die Auflösung für Daten im Zeitbereich in die Abtastfrequenz:
Frequency = 1000000.0 / SamplingInterval
SegmentationType as VisionSegType
Schreibgeschützt
Gibt die Art der Segmentierung dieses Datensatzes an (siehe Kapitel 5.2).
Type As VisionDataType
Schreibgeschützt
Typ der Daten in diesem Datensatz, s.a. "VisionDataType" im Kapitel "Aufzählungstypen".
10
3.7. FastArray
Bei diesem Objekt handelt es sich um eine Hilfsklasse zum Beschleunigen des Zugriffs auf Datenfelder (engl.
Arrays). Der Einsatz macht eigentlich nur Sinn im eingebauten Basic. Obwohl dieses in einer Sekunde durchaus
einige Hunderttausend Manipulationen an Datenfeldern durchführen kann, lohnt es sich unter bestimmten
Umständen, Objekte vom Typ "FastArray" einzusetzen. Hier können bei geschickter Anordnung mehrere
Hundertmillionen Manipulationen in einer Sekunde durchgeführt werden.
Die Manipulationen bestehen aus Zuweisungen und einfachen Rechenoperationen. Bei den Rechenoperationen
ist das Zielfeld (Variable "TargetData") gleichzeitig auch linker Operand.
Das Quellenfeld (Variable "SourceData") bleibt unverändert.
Beispiel einer Division: Ziel = Ziel / Quelle (TargetData = TargetData / SourceData).
Bei Operationen mit nur einem Operanden ist das Zielfeld ("TargetData") gleichzeitig das Quellenfeld.
Beispiel einer Absolutwertberechnung ("RectifyData"): Ziel = abs(Ziel)
Alle Indizes, die in den Manipulationen verwendet werden, beziehen sich auf den Anfang eines Datenfeldes, d.h.
dass ein Datenfeld das mit "Dim Data(12 to 24) As Single" deklariert wurde, seinen ersten Datenpunkt bei
"Data(12)" hat. Ein Index-Parameter von 1 wird nun diesen Startpunkt betreffen. Wir empfehlen daher aus
Gründen der Übersicht, ein Datenfeld besser als "Dim Data(1 to …) As Single" zu deklarieren.
Alle Datenfelder, die übergeben werden, müssen eindimensional sein und bereits eine definierte Feldlänge
aufweisen.
Extrahieren / Definieren von Datenfeld-Untermengen
Die drei Parameter "StartIndex", "Step" und "Count" werden in den meisten Funktionen zum Beschreiben einer
Untermenge von Elementen eines Datenfeldes verwendet. Die resultierende Untermenge wird wie folgt
bestimmt:
"StartIndex" bestimmt den ersten Datenpunkt. Der nächste Datenpunkt ist um "Step" verschoben. Der
übernächste entsprechend. Die maximale Anzahl von Datenpunkten ist "Count". Ist das Datenfeld kleiner als
"Count", so wird die Datenmenge durch das Ende des Datenfeldes begrenzt. Ist "Count" auf -1 gesetzt, so fällt es
als Abbruchkriterium heraus und nur das Ende des Datenfeldes begrenzt die Untermenge.
Beispiele (StartIndex, Step, Count):
1,1,-1
komplettes Datenfeld (Standardeinstellung)
1,2,-1
alle ungeraden Elemente eines Datenfeldes
200, -1, -1
alle Elemente ab Position 200 rückwärts
7, 32, -1
 der 7., 39. ,71. … Datenpunkt.
Haben wir z.B. mit Dataset.GetData() Daten gemultiplext angefordert und die Anzahl der Kanäle ist 32, so
entspricht 7, 32, -1 den Daten des 7. Kanals.
Dies ist allerdings nur korrekt, solange es sich um nichtkomplexe Daten mit nur einer Ebene handelt.
Um auch Untermengen zu definieren, die Kanäle beschreiben, deren Datenpunkte z.B. komplex sind (2 Werte
pro Punkt) können Sie die Methode
"RepeatNextOperation(Count As Long, [TargetIndexIncrement As Long], [SourceIndexIncrement As Long])"
verwenden.
Diese Methode weißt die nachfolgende Methode an, sich selbst "Count" mal zu wiederholen mit inkrementierten
Startindizes, unabhängig zu setzen für Ziel ("TargetIndexIncrement") und Quelle ("SourceIndexIncrement"). Die
Methode wiederholt die nächste Operation um die dort definierten Untermengen zu erweitern.
Angenommen also, wir haben wieder gemultiplexte Daten - diesmal komplex - mit 32 Kanälen und wollen den
7. Kanal in ein separates Datenfeld kopieren. Die Befehlssequenz lautet:
Dim fa As New FastArray
Dim ChannelData() As Single
...
SourceData = ds.GetData(...)
fa.RepeatNextCommand(-1,,64)
ChannelData = fa.GetSelectedElements(SourceData,13,,2)
Der erste Datenpunkt des 7. Kanals beginnt an Position 13. Das ist der Startindex. Es werden zwei Punkte
kopiert. Anschließend wird der Startindex des Quellenfeldes um 64 erhöht und die Operation wiederholt. Dies
geschieht bis zu den Grenzen des Datenfeldes.
Namenskonventionen
Die Parameternamen unterliegen einer Konvention. Alle Namen mit dem Präfixe "Target" beziehen sich auf das
Zieldatenfeld und alle Namen mit dem Präfix "Source" beziehen sich auf das Quelldatenfeld.
Beispiel (abgekürzt):
Sub CopyArray(TargetData, SourceData, TargetStartIndex, TargetStep,
SourceStartIndex, SourceStep, Count)
Vision Analyzer OLE Automation Referenzhandbuch
11
Hier wird die Untermenge des Zieldatenfeldes "TargetData" durch "TargetStartIndex", "TargetStep" und
"Count" festgelegt.
Die Untermenge des Quelldatenfeldes ist definiert durch "SourceData", "SourceStartIndex", "SourceStep" und
"Count".
Erstellen eines Objekts
Ein Objekt vom Typ FastArray kann in Basic auf zwei Arten erzeugt werden.
Mit "New":
Dim fa as New FastArray
In diesem Falle muss die Typenbibliothek vorhanden sein (beim eingebauten Basic ist das der Fall).
Alternativ ohne Typenbibliothek:
Set fa = CreateObject("VisionAnalyzer.FastArray")
Methoden
Sub AddArray(TargetData() As Single, SourceData() As Single, [TargetStartIndex As Long = 1],
[TargetStep As Long = 1], [SourceStartIndex As Long = 1],
[SourceStep As Long = 1], [Count As Long = -1])
Addiert eine Untermenge von "SourceData" zu einer Untermenge von "TargetData".
Die Operation wird begrenzt durch die kleinere Untermenge der beiden Datenfelder.
Sub AddValue(TargetData() As Single, Value As Single, [StartIndex As Long = 1],
[Step As Long = 1], [Count As Long = -1], [ValuleIncrement As Single = 0])
Addiert den festen Wert "Value" zu einer Untermenge von "TargetData".
"Value" wird nach jeder Operation um "ValueIncrement" erhöht.
Sub Atan2Array(TargetData() As Single, SourceData() As Single, [TargetStartIndex As Long = 1],
[TargetStep As Long = 1], [SourceStartIndex As Long = 1], [SourceStep As Long =
1], [Count As Long = -1])
Berechnet den Arcus Tangens einer Untermenge von "TargetData" und "SourceData".
(TargetData = Atan2(TargetData/SourceData)).
Das Ergebnis wird in Radiantwerten (Bereich +/- π) in "TargetData" abgelegt.
Sub CopyArray(TargetData() As Single, SourceData() As Single, [TargetStartIndex As Long = 1],
[TargetStep As Long = 1], [SourceStartIndex As Long = 1],
[SourceStep As Long = 1], [Count As Long = -1])
Kopiert eine Untermenge von "SourceData" in eine Untermenge von "TargetData".
Die Operation wird begrenzt durch die kleinere Untermenge der beiden Datenfelder.
Sub CopyValue(TargetData() As Single, Value As Single, [StartIndex As Long = 1],
[Step As Long = 1], [Count As Long = -1], [ValuleIncrement As Single = 0])
Kopiert den festen Wert "Value" in eine Untermenge von "TargetData".
"Value" wird nach jeder Operation um "ValueIncrement" erhöht.
Sub DivideArray(TargetData() As Single, SourceData() As Single, [TargetStartIndex As Long = 1],
[TargetStep As Long = 1], [SourceStartIndex As Long = 1],
[SourceStep As Long = 1], [Count As Long = -1])
Dividiert eine Untermenge von "TargetData" mit einer Untermenge von "SourceData"
(TargetData = TargetData / SourceData) .
Die Operation wird begrenzt durch die kleinere Untermenge der beiden Datenfelder.
Sub DivideValue(TargetData() As Single, Value As Single, [StartIndex As Long = 1],
[Step As Long = 1], [Count As Long = -1], [ValuleIncrement As Single = 0])
Dividiert eine Untermenge von "TargetData" mit dem festen Wert "Value"
"TargetData" (TargetData = TargetData / Value).
"Value" wird nach jeder Operation um "ValueIncrement" erhöht.
Function GetMaximumValue(SourceData() As Single, [StartIndex As Long = 1], [Step As Long = 1],
[Count As Long = -1]) As Single
Liefert den größten Wert einer Untermenge von "SourceData".
12
Function GetMeanValue(SourceData() As Single, [StartIndex As Long = 1], [Step As Long = 1],
[Count As Long = -1]) As Single
Liefert den Mittelwert einer Untermenge von "SourceData".
Function GetMinimumValue(SourceData() As Single, [StartIndex As Long = 1], [Step As Long = 1],
[Count As Long = -1]) As Single
Liefert den kleinsten Wert einer Untermenge von "SourceData".
Function GetSelectedElements(SourceData() As Single, [StartIndex As Long = 1], [Step As Long = 1],
[Count As Long = -1]) As Single()
Liefert eine Untermenge von "SourceData".
Sub MultiplyArray(TargetData() As Single, SourceData() As Single, [TargetStartIndex As Long = 1],
[TargetStep As Long = 1], [SourceStartIndex As Long = 1],
[SourceStep As Long = 1], [Count As Long = -1])
Multipliziert eine Untermenge von "TargetData" mit einer Untermenge von "SourceData"
(TargetData = TargetData * SourceData) .
Die Operation wird begrenzt durch die kleinere Untermenge der beiden Datenfelder.
Sub MultiplyValue(TargetData() As Single, Value As Single, [StartIndex As Long = 1],
[Step As Long = 1], [Count As Long = -1], [ValuleIncrement As Single = 0])
Multipliziert den festen Wert "Value" zu einer Untermenge von "TargetData" (TargetData =
TargetData * Value).
"Value" wird nach jeder Operation um "ValueIncrement" erhöht.
Sub RectifyArray(TargetData() As Single, [StartIndex As Long = 1], [Step As Long = 1],
[Count As Long = -1])
Alle Elemente einer ausgewählten Untermenge werden in ihren Absolutwert umgerechnet
(gleichgerichtet). Quelle und Ziel ist "TargetData".
Sub RepeatNextOperation([Count As Long = -1], [TargetIndexIncrement As Long = 1],
[SourceIndexIncrement As Long = 1])
Wiederholt die nächste Operation um die dort definierten Datenfeld-Untermengen zu
erweitern. Dies geschieht "Count"-mal, bzw. wird durch das Ende von Datenfeldern begrenzt.
Bei jeder Wiederholung werden der Zielindex um "TargetIndexIncrement" und der Quellindex
um "SourceIndexIncrement" erhöht. Verfügt die nächste Operation nicht über ein Ziel- oder
Quellenfeld, so wird der betreffende Parameter ignoriert.
In der aktuellen Version dürfen "TargetIndexIncrement" und "SourceIndexIncrement" keine
negativen Werte haben. Auch dürfen die "Step"-Parameter der nachfolgenden Operation nicht
negativ sein.
Sub RootArray(TargetData() As Single, [StartIndex As Long = 1], [Step As Long = 1],
[Count As Long = -1])
Es wird die Quadratwurzel aller Elemente einer ausgewählten Untermenge basierend auf ihren
Absolutwert berechnet. Das bedeutet, dass auch negative Werte im Ausgangsdatensatz
vorhanden sein können. Quelle und Ziel ist "TargetData".
Sub RotateLeftArray(TargetData() As Single, [StartIndex As Long = 1], [Step As Long = 1],
[Count As Long = -1])
Alle Elemente einer ausgewählten Untermenge werden nach links rotiert. Das erste Element
erhält den Wert des zweiten, das zweite den Wert des dritten usw. Der ursprünglich erste Wert
wird zum letzten Wert.
Sub RotateRightArray(TargetData() As Single, [StartIndex As Long = 1], [Step As Long = 1],
[Count As Long = -1])
Alle Elemente einer ausgewählten Untermenge werden nach rechts rotiert. Das zweite Element
erhält den Wert des ersten, das dritte den Wert des zweiten usw. Der ursprünglich letzte Wert
wird zum ersten Wert.
Vision Analyzer OLE Automation Referenzhandbuch
13
Sub SortArray(TargetData() As Single, [StartIndex As Long = 1], [Step As Long = 1],
[Count As Long = -1])
Alle Elemente einer ausgewählten Untermenge werden in aufsteigender Folge sortiert. Quelle
und Ziel ist "TargetData".
Sub SquareArray(TargetData() As Single, [StartIndex As Long = 1], [Step As Long = 1],
[Count As Long = -1])
Alle Elemente einer ausgewählten Untermenge werden quadriert.. Quelle und Ziel ist
"TargetData".
Sub SubtractArray(TargetData() As Single, SourceData() As Single, [TargetStartIndex As Long = 1],
[TargetStep As Long = 1], [SourceStartIndex As Long = 1],
[SourceStep As Long = 1], [Count As Long = -1])
Subtrahiert eine Untermenge von "TargetData" mit einer Untermenge von "SourceData"
(TargetData = TargetData - SourceData) .
Die Operation wird begrenzt durch die kleinere Untermenge der beiden Datenfelder.
Sub SubtractValue(TargetData() As Single, Value As Single, [StartIndex As Long = 1],
[Step As Long = 1], [Count As Long = -1], [ValuleIncrement As Single = 0])
Subtrahiert den festen Wert "Value" von einer Untermenge von "TargetData" (TargetData =
TargetData - Value).
"Value" wird nach jeder Operation um "ValueIncrement" erhöht.
14
3.8. HistoryExplorer
Beschreibung
Dieses Objekt repräsentiert den History-Explorer.
Methoden
Eigenschaften
Visible As Boolean
Flag, wenn "False" (0), dann ist der Historyie-Explorer nicht sichtbar.
3.9. HistoryFile
Beschreibung
Dieses Objekt repräsentiert eine History-Datei.
Methoden
Sub AppendFile(FileName As String)
Hängt die Rohdaten der angegebenen History-Datei an diese History-Datei an. Erläuterungen
zu dem Verfahren finden Sie im Benutzerhandbuch, Kapitel "Aneinanderhängen mehrerer
Rohdatensätze".
Beispiel
' Haenge "P300b" an "P300a"
Dim hf as HistoryFile
Set hf = HistoryFiles("p300a")
hf.AppendFile "p300b"
Sub ApplyTemplate(FileName As String)
Wendet die angegebene History-Vorlage auf die History-Datei an.
Der Dateiname kann entweder komplett oder teilweise angegeben werden und wird – soweit
möglich – automatisch ergänzt.
Sub Close()
Schließt die History-Datei. Das sollte geschehen, sobald die Datei nicht mehr benötigt wird, da
eine offene Datei unter Umständen erheblichen Speicherbedarf hat.
Sub Compress()
Komprimiert die History-Datei. History-Dateien können eventuell größere "Löcher" enthalten,
wenn vorhandene Knoten gelöscht wurden. Diese Löcher lassen sich dann mit Hilfe der
Kompression entfernen.
Sub Open()
Öffnet die History-Datei. Erst nach dem Öffnen ist ein Zugriff auf die assoziierten
Historyknoten möglich.
Function FindNextNode() As HistoryNode
Sucht nach dem nächsten History-Knoten mit dem Namen wie in  "FindNode()" angegeben.
Function FindNode(Name As String) As HistoryNode
Sucht den ersten History-Knoten mit dem gegebenen Namen.
Beispiel
' Benenne alle Knoten mit dem Namen "Average" um nach "Avg".
Dim hn As HistoryNode
Dim hf as HistoryFile
Set hf = HistoryFiles(1)
Set hn = hf.FindNode("Average")
Do while Not hn Is Nothing
hn.Name = "Avg"
Set hn = hf.FindNext()
Loop
Eigenschaften
DisplayName As String
Aliasname der History-Datei, der vom Analyzer zur Darstellung verwendet wird. Dieser Name
ist nach dem Laden einer Workspace zuerst identisch mit der Eigenschaft "Name". Ein
Datenbankprogramm, das den Analyzer steuert, kann diese Eigenschaft verwenden, um z.B.
Probandennamen anzuzeigen.
FullName As String
schreibgeschützt
Vision Analyzer OLE Automation Referenzhandbuch
15
Name der History-Datei mit voller Pfadangabe
HistoryNodes As HistoryNodes
Standardelement, schreibgeschützt
Auflistung der Basisknoten dieser History-Datei. Diese Basisknoten repräsentieren meistens
eine Roh-EEG-Datei. Die meisten History-Dateien haben nur einen Basisknoten, da die RohEEG-Datei nur einen Datensatz enthält.
Neben Roh-EEG-Dateien können die Basisknoten aber auch beliebige andere Datensätze
repräsentieren, z.B. Grandaverages.
IsOpen As Boolean
schreibgeschützt
Flag, zeigt an, ob die History-Datei geöffnet ist.
LinkedData As Boolean
schreibgeschützt
Flag, zeigt an, ob die History-Datei einen Rohdatensatz repräsentiert (primäre History-Datei).
Name As String
schreibgeschützt
Basisname der History-Datei ohne Verzeichnisangabe und Dateierweiterung.
SubjectInfos As String
schreibgeschützt
Informationen über den Probanden/Patienten. Diese Informationen stehen nicht bei allen
Dateiformaten zur Verfügung.
3.10. HistoryFiles
Beschreibung
Dieses Objekt ist eine Auflistung von "HistoryFile"-Objekten.
Methoden
Function FindFile(Name As String) As HistoryFile
Sucht eine History-Datei nach ihrem Basisnamen ohne Verzeichnisangabe und
Dateierweiterung.
Sub KillFile(DisplayName as String)
Löscht die angegebene History-Datei. "DisplayName" ist der Aliasname der Datei.
Sub Refresh()
Erzeugt oder lädt gegebenenfalls neue History-Dateien falls nach dem Laden des Workspaces
neue Rohdaten-EEGs oder History-Dateien erzeugt wurden.
Sub Sort()
Sortiert die History-Dateien in der Auflistung und in der Darstellung im History-Explorer.
Eigenschaften
Count As Long
Schreibgeschützt
Anzahl der History-Dateien in der Auflistung
Item(DisplayNameOrIndex As Variant) As HistoryFile
Standardelement, schreibgeschützt
Liefert bei Angabe des Aliasnamens oder des Indexes (1-...) ein "HistoryFile"-Objekt.
16
3.11. HistoryNode
Beschreibung
Dieses Objekt beschreibt einen Knoten in der Baumstruktur einer History-Datei. Ein solcher Knoten
repräsentiert einen Datensatz. Der Datensatz ist ein Roh-EEG oder wurde von einer Transformation angelegt.
Da die Eigenschaft "HistoryNodes" als Standardelement festgelegt ist, kann der Zugriff auf Unterknoten sehr
einfach erfolgen.
Bespiel:
Dim hn As HistoryNode
Set hn = HistoryFiles("File1")(Raw Data")("Segmentation")("Filter")("Average")
oder:
Set hn = HistoryFiles(1)(1)(1)(1)(1)
Methoden
Sub ApplyTemplate(FileName As String)
Wendet die angegebene History-Vorlage auf den History-Knoten an.
Der Dateiname kann entweder komplett oder teilweise angegeben werden und wird – soweit
möglich – automatisch ergänzt.
Sub Delete()
Entfernt den Knoten und alle Unterknoten aus der History-Datei.
Function GetHeadSurface(Data() As Single) as Boolean
Füllt das Array "Data" mit den Koordinaten einer Punktwolke, die die Kopfoberfläche
beschreibt. Die Daten bestehen aus einer fortlaufende Sequenz von Koordinaten, die in der
Reihenfolge Radius, Theta und Phi die Punkte beschreiben.
Wenn keine Koordinaten vorhanden sind, liefert die Funktion "False" zurück.
Sub Hide()
Schließt alle mit dem Knoten assoziierten Datenfenster.
Sub Show()
Eröffnet ein Fenster und stellt die Daten des Knotens dar.
Sub ShowDescription()
Zeigt die Beschreibung, die in "Description" und "Description2" gespeichert ist, in einer
Dialogbox an.
Eigenschaften
Class As String
Schreibgeschützt
Name der Komponente, die den Knoten erzeugt hat
Comment As String
Kommentar des Anwenders.
ContainsData As Boolean
Schreibgeschützt
Flag, das angibt, ob dieser Knoten Daten enthält.
Der Knoten kann auch z.B. eine Exportkomponente repräsentieren. In diesem Falle enthält er
keine Daten.
DataAvailable As Boolean
Schreibgeschützt
Flag, das angibt, ob die Daten, die der Knoten enthält, verfügbar sind.
Befindet sich das zugehörige Rohdaten-EEG nicht im Rohdatenverzeichnis, so sind im
Allgemeinen die meisten Datensätze einer History-Datei nicht verfügbar. Erst der gemittelte
Datensatz ("Average"-Transformation) und alle ihm folgenden speichern ihre Daten in der
History-Datei ab.
Dataset As Dataset
Dieser Datensatz beschreibt die mit dem History-Knoten assoziierten Daten.
Er bezieht sich auf die Gesamtdaten, im Gegensatz zu dem Datensatz in einem Segmentobjekt.
Description As String
Schreibgeschützt
Beschreibung des Knotens, d.h. Informationen über die Operation, die den Knoten
hervorbrachte und ihre Eingangsparameter.
Diese Beschreibung wird zusammen mit "Description2" dargestellt mit "ShowDescription".
Description2 As String
Schreibgeschützt
Vision Analyzer OLE Automation Referenzhandbuch
17
Operationsergebnisse, diese Informationen können bei gleicher Operation für verschiedene
Eingangsdatensätze variieren, wie z.B. beim Averagen die Anzahl der Segmente.
FullPath As String
Schreibgeschützt
Voller Pfad des Knoten.
Der Pfad enthält den Namen der History-Datei, der der Knoten angehört, sowie die Namen
aller Vorgänger-Knoten, getrennt durch ein "/".
HistoryFile As HistoryFile
Schreibgeschützt
History-Datei, die diesen History-Knoten beherbergt.
HistoryNodes As HistoryNodes
Standardelement, schreibgeschützt
Auflistung der Unterknoten dieses Knotens.
Landmarks As Landmarks
Schreibgeschützt
Auflistung der Landmarks dieses Knotens.
Name As String
Name des Knotens, wie er im History-Explorer erscheint
ParentNode as HistoryNode
Schreibgeschützt
Elternknoten dieses History-Knotens
RecordingInfos As String
Informationen, die bei der Aufnahme eingegeben wurden, wie z.B. Kommentare oder
Fehlermeldungen. Diese Informationen stehen normalerweise nur bei Knoten zur Verfügung,
die Rohdaten darstellen. Auch hängt es vom Aufnahmesystem und dem verwendeten
Dateiformat ab, ob Informationen zur Verfügung stehen.
Segments As Segments
Schreibgeschützt
Auflistung aller Segmentobjekte in diesem Knoten.
Version As String
Schreibgeschützt
Version der Komponente, die den Knoten erzeugt hat. Diese Information ist ab der Analyzer
Version 1.05 verfügbar.
Windows As Windows
Schreibgeschützt
Auflistung aller Datenfenster dieses Knotens
18
3.12. HistoryNodes
Beschreibung
Dieses Objekt ist eine Auflistung von "HistoryNode"-Objekten.
Methoden
Eigenschaften
Count As Long
Schreibgeschützt
Anzahl der History-Knoten in der Auflistung
Item(NameOrIndex As Variant) As HistoryNode
Standardelement, schreibgeschützt
Liefert bei Angabe des Knotennamens oder des Indexes (1-...) ein "HistoryNode"-Objekt.
3.13. HistoryTemplateNode
Beschreibung
Dieses Objekt beschreibt einen einzelnen Knoten einer History-Vorlage. Eingesetzt wird es in
Application.ActiveTemplateNode.
Methoden
Eigenschaften
Description As String
Schreibgeschützt
Beschreibung des Knotens, d.h. Informationen über die Operation, die den Knoten
hervorbrachte und ihre Eingangsparameter.
3.14. Landmark
Beschreibung
Dieses Objekt dient der Markierung von markanten Kopfpositionen.
Methoden
Eigenschaften
Name As String
Schreibgeschützt
Name des Landmarks
Phi As Single
Schreibgeschützt
Phi in Grad.
Radius As Single
Schreibgeschützt
Radius in Millimeter, 0 bedeutet ungültige Positionsangabe, 1 nimmt den Kopf als ideale
Kugel mit Einheitsradius an.
Theta As Single
Schreibgeschützt
Theta in Grad.
3.15. Landmarks
Beschreibung
Dieses Objekt ist eine Auflistung von "Landmark"-Objekten.
Methoden
Eigenschaften
Count As Long
Schreibgeschützt
Anzahl der Marker in der Auflistung
Item(NameOrIndex As Variant) As Landmark
Standardelement, schreibgeschützt
Liefert bei Angabe des Landmark-Namens oder des Indexes (1-...) ein "Landmark"-Objekt.
Vision Analyzer OLE Automation Referenzhandbuch
19
3.16. Marker
Beschreibung
Dieses Objekt repräsentiert einen einzelnen Marker in einem Datensatz.
Methoden
Eigenschaften
ChannelNumber As Long
Schreibgeschützt
Kanal, den der Marker markiert (1-...). Ein Wert von 0 bedeutet, dass sich der Marker auf alle
Kanäle bezieht.
DateTime As Date
Schreibgeschützt
Datum/Zeit , die der Marker repräsentiert. Dieser Wert ist nur gültig bei Markern des Typs
"New Segment".
Description As String
Schreibgeschützt
Beschreibung des Markers.
Invisible As Boolean
Schreibgeschützt
Flag, das angibt, ob dieser Marker unsichtbar ist bei der Darstellung des EEGs.
Points As Long
Schreibgeschützt
Anzahl der Datenpunkte die der Marker markiert.
Position As Long
Schreibgeschützt
Position des Markers in Datenpunkten (1-...).
Type As String
Schreibgeschützt
Typ des Markers
3.17. Markers
Beschreibung
Dieses Objekt ist eine Auflistung von "Marker"-Objekten.
Methoden
Eigenschaften
Count As Long
Schreibgeschützt
Anzahl der Marker in der Auflistung
Item(Index As Long) As Marker
Standardelement, schreibgeschützt
Liefert bei Angabe des Indexes (1-...) ein "Marker"-Objekt.
3.18. NewHistoryNode
Beschreibung
Mit diesem Objekt können neue History-Knoten angelegt werden, sowohl als abgeleitete Child-Knoten, als auch
in neuen History-Dateien. Ein Objekt dieser Klasse kann in Basic auf zwei Arten erzeugt werden.
Mit "New":
Dim nhn as New NewHistoryNode
In diesem Falle muss die Typenbibliothek vorhanden sein (beim eingebauten Basic ist das der Fall).
Alternativ ohne Typenbibliothek:
set nhn = CreateObject("VisionAnalyzer.NewHistoryNode")
Es gibt im Prinzip drei verschiedene Arten neuer History-Knoten:
 neue History-Datei.
 Child-Knoten eines vorhandenen History-Knotens.
20

Child-Knoten eines vorhandenen History-Knotens, der alle Eigenschaften seines Parent erbt. Hier können
die Daten nicht manipuliert werden, aber alle anderen Eigenschaften, wie Kanalnamen und –Positionen,
sowie Marker gesetzt oder gelöscht werden.
Der Mechanismus zur Erzeugung eines neuen Knotens ist im folgenden Beispiel beschrieben:
Sub Main
Set hn = HistoryFiles(1)(1)
Set nhn = New NewHistoryNode
nhn.Create "BasicTest", hn, "", False, _
viDtTimeDomain, 32, 10000, hn.Dataset.SamplingInterval
nhn.SetChannelName 1, "Fp1"
nhn.SetChannelName 2, "Fp2"
nhn.AddMarker 0, 200, 100, "Bad Interval", "", False
Dim Data() As Single
hn.Dataset(3).GetData 1, 10000, Data
' Copy data from channel 3
nhn.WriteData 1, 1, 10000, Data
' Write data to channel 1.
nhn.Description = "Line1" & vbCrLf & "Line2"
nhn.SetChannelPosition 4, 1, 0, 90
nhn.Finish
End Sub
Im Wesentlichen sind zwei Prozeduren für die Erstellung und Fertigstellung des Knotens zuständig:
"Create" und "Finish". Zwischen diesen beiden Prozeduren können die Kanalnamen, Marker und Daten gesetzt
werden. Wurde "Create" erfolgreich aufgerufen und die Daten nicht vererbt vom Parent, wird ein Datensatz mit
Standardeinstellungen erstellt. Dieser kann nun manipuliert werden. "Finish" schließt den Erstellungsprozess ab.
Die neu erzeugten History-Knoten können eingeschränkt auch in History-Vorlagen eingesetzt werden.
Das ist aber nur möglich, wenn sie mit dem eingebauten Basic-Interpreter erzeugt wurden. Außerdem muss der
neue Knoten als Child-Knoten der vordefinierten Variablen "ActiveNode" erzeugt werden. Diese Variable ist
immer definiert, wenn der Basic-Interpreter läuft und zwar wie folgt:
Dim ActiveNode As HistoryNode
Der Knoten repräsentiert das aktuell offene Datenfenster. Ist kein Datenfenster geöffnet, so enthält dieser Knoten
keine Daten.
Um also ein vorlagenfähigen Datensatz zu erzeugen, sollte man alle offenen Datenfenster schließen, bis auf das
Fenster, das als Parent für den neuen Child-Knoten dienen soll. Dann wird der Code des Basic-Makros
ausgeführt. Es ist zu beachten, dass die Ausführung des Makros automatisch beendet wird, wenn die
NewHistoryNode.Finish()-Methode ausgeführt wird.
Beim Erstellen des neuen Knotens wird der gesamte Makro-Code in den Knoten kopiert. Jetzt kann man den
Knoten wie eine gewöhnliche Transformation auf andere Knoten ziehen, um die Operation zu wiederholen. Der
Knoten kann auch in eine History-Vorlage aufgenommen werden.
Sieht man sich mit der rechten Maustaste am Knoten die so genannten "Operation Infos" an, so wird zusätzlich
der Code angezeigt, der zur Erstellung des Knotens geführt hat.
Beispiel eines vorlagenfähigen Makros:
' Add a marker to the data set.
Sub Main
Set nhn = New NewHistoryNode
nhn.Create "Added Marker", ActiveNode
nhn.AddMarker 0, 200, 1, "Stimulus", "S1", False
nhn.Finish
End Sub
Dieses Makro setzt einen zusätzlichen Marker an Datenpunkt 200.
Methoden
Sub AddMarker(ChannelNumber As Long, Position As Long, Points As Long, Type As String,
Description As String, [Invisible As Boolean = False])
Fügt einen Marker in den neuen Datensatz ein.
Die Parameter im Einzelnen:
ChannelNumber
Vision Analyzer OLE Automation Referenzhandbuch
21
Kanalnummer, eine 0 bedeutet, dass der Marker für alle Kanäle gilt.
Position
Position im Datensatz, gerechnet in Datenpunkten (1-...)
Points
Länge des markierten Intervalls in Datenpunkten.
Type
Beliebiger Markertyp als Text. Sondertypen sind "New Segment" und "Time 0".
Description
Beschreibung des Markers, diese erscheint dann in der EEG-Darstellung.
Optionale Parameter:
Invisible
Wenn dieses Flag auf True gesetzt wird, ist das ein Hinweis, dass dieser Marker
unsichtbar bleiben sollte.
Sub Cancel()
Diese Funktion bricht den Erstellungsprozess des neuen Knotens ab.
Sub Create(NodeName As String, ParentNode As HistoryNode, [FileName As String = ""],
[InheritData As Boolean = True], [Type As VisionDataType = viDtTimeDomain],
[NumOfChannels As Long = 0], [Length As Long = 0], [SamplingInterval As Double = 0])
Erstellt den neuen Datensatz.
Die Parameter im Einzelnen:
NodeName
Name des neuen Knotens
ParentNode
Der Parent-Knoten.
Dieser Knoten dient als direkter Vorfahre des neuen Knotens. Wenn er auf Nothing
gesetzt wurde, muss "FileName" gesetzt sein.
Optionale Parameter:
FileName
Dateiname ohne Pfad und Endung. Ist dieser Parameter nicht mit "" oder vbNullChar
(in anderen Programmiersprachen NULL oder NIL) gesetzt, so wird eine neue
History-Datei mit diesem Namen im aktuellen Workspace erzeugt.
InheritData
Wenn dieses Flag nicht "False" (0) ist, und "ParentNode" verwendet wird, dann
werden die Daten, Eigenschaften und Marker des direkten Vorfahren geerbt. Dies
dient im Wesentlichen dem Hinzufügen und Löschen von Markern. "Type",
"NumOfChannels", "Length" und "SamplingInterval" werden in diesem Falle
ignoriert.
Type
Typ des neuen Datensatzes. Die folgenden vier Typen sind zulässig:
viDtTimeDomain, viDtTimeDomainComplex, viDtFrequencyDomain und
viDtFrequencyDomainComplex (siehe Kapitel 5.1).
NumOfChannels
Anzahl der Kanäle im neuen Datensatz
Length
Länge des neuen Datensatzes in Datenpunkten
SamplingInterval
Abtastinterval in Mikrosekunden
Sub CreateEx(NodeName As String, ParentNode As HistoryNode, [FileName As String = ""],
[InheritData As Boolean = True], [Type As VisionDataType = viDtTimeDomain],
[NumOfChannels As Long = 0], [Length As Long = 0], [SamplingInterval As Double=0],
[Layers As Long = 1], [LayerLowerLimit As Double=0], [LayerUpperLimit As Double=0],
[LayerFunction As VisionLayerIncFunction= viLifLinear]))
Diese Funktion ist eine erweiterte Version von "Create()". Sie ermöglicht das Anlegen von
Datensätzen mit mehreren Ebenen, wie sie z.B. bei der kontinuierlichen WaveletTransformation auftreten. Deshalb unterstützt der Parameter "Type" auch die Typen
"viDtTimeFrequencyDomain" und "viDTimeFrequencyDomainComplex".
Die Layer..-Parameter im einzelnen:
Layers As Long
22
Anzahl der Ebenen im Datensatz.
LayerLowerLimit As Long
Der Wert der untersten Ebene.
LayerUpperLimit As Long
Der Wert der obersten Ebene.
LayerFunction As VisionLayerIncFunction
Schrittweiten-Funktion zwischen den Ebenen eines Datensatzes. Die möglichen Werte
dieser Eigenschaft finden Sie im Kapitel "Aufzählungstypen".
Sub Finish()
Diese Funktion schließt die Erstellung des neuen Knotens ab.
Sub RemoveMarker(ChannelNumber As Long, Position As Long, Points As Long, Type As String,
Description As String)
Entfernen eines Markers, der zu der Beschreibung passt. Die Parameter entsprechen denen in
"AddMarker". Die Groß-/Kleinschreibung sowie Leerzeichen in "Type" und "Description"
werden beim Vergleich ignoriert.
Sub SetChannelName(ChannelNumber As Long, NewName As String)
Setzen eines Kanalnamens. Hierbei wird implizit die Positionsangabe angepasst.
Sub SetChannelPosition(ChannelNumber As Long, Radius As Single, Theta As Single, Phi As Single)
Setzen einer Kanalposition.
Sub SetChannelUnit(ChannelNumber As Long, Unit As VisionDataUnit)
Setzen der Einheit der Daten für einen Kanal, wie z.B. μV, μV2 u. ä. (s. a. "VisionDataUnit"
im Kapitel "Aufzählungstypen"). Wird die Einheit nicht individuell gesetzt, so erhält der Kanal
die Einheit, die in der Eigenschaft "Unit" festgelegt wurde.
Sub SetHeadSurface(Data() As Single)
Beschreiben der Kopfoberfläche als Punktwolke. "Data" steht für eine fortlaufende Sequenz
von Koordinaten, die in der Reihenfolge Radius, Theta und Phi die Punkte beschreiben.
Sub SetHeadLandmark(Name As String, Radius As Single, Theta As Single, Phi As Single)
Setzen eines mit "Name" benannten Landmarks zur Orientierung.
Sub SetRefChannelName(ChannelNumber As Long, NewName As String)
Setzen eines Referenzkanalnamens.
Sub TryLater()
Diese Funktion wird nur benötigt, wenn ein Makro in einer History-Vorlage eingesetzt wird.
Wenn in diesem Falle zur Berechnung des neuen Datensatzes Informationen aus einem
History-Knoten benötigt werden, der weder der aktuelle Knoten noch ein direkter Vorfahre des
aktuellen Knotens ist, kann es sein, dass dieser Knoten eventuell noch gar nicht berechnet
wurde. Durch den Aufruf dieser Funktion wird das dem Programm mitgeteilt. In diesem Falle
wird das Programm mit dem Erzeugen anderer History-Knoten fortfahren und später erneut
versuchen, den Knoten zu erstellen.
Sub WriteData(ChannelNumber As Long, Position As Long, Points As Long, Data() As Single)
Schreiben eines Datenblocks
Die Parameter im Einzelnen:
ChannelNumber
Kanalnummer, eine 0 bedeutet, dass der Block alle Kanäle umfasst. In diesem Falle
müssen die Daten gemultiplext vorliegen.
Position
Position im Datensatz, gerechnet in Datenpunkten (1-...)
Points
Länge des Datenblocks in Datenpunkten.
Data
Der Datenblock.
Eigenschaften
Averaged As Boolean
Hinweis, ob der Datensatz bereits gemittelt wurde. Dies ist insbesondere für die Freischaltung
und Sperrung von Transformationen im "Transformations"-Menü von Relevanz.
Description As String
Beschreibung der Operation und ihrer Eingangsparameter.
Description2 As String
Beschreibung der Operationsergebnisse.
SegmentationType As VisionSegType
Vision Analyzer OLE Automation Referenzhandbuch
23
Segmentierungstyp wie in Kapitel 5.3 beschrieben. Ebenfalls relevant für die Freischaltung und
Sperrung von Transformationen im "Transformations"-Menü.
Unit As VisionDataUnit
Einheit der Daten in diesem Datensatz, wie z.B. μV, μV2 usw., s. a. "VisionDataUnit" im
Kapitel "Aufzählungstypen".
Diese Einheit gilt für alle Kanäle, deren Einheit nicht explizit mit "SetChannelUnit()" gesetzt
wurde.
3.19. ProgressBar
Beschreibung
Dieses Objekt stellt eine Fortschrittsanzeige, einen so genannten "Progressbar" dar. Dieser gibt dem Anwender
bei längeren Operationen Hinweise auf den Fortschritt. Ein Objekt dieser Klasse kann in Basic auf zwei Arten
erzeugt werden.
Mit "New":
Dim pb as New ProgressBar
In diesem Falle muss die Typenbibliothek vorhanden sein (beim eingebauten Basic ist das der Fall).
Alternativ ohne Typenbibliothek:
set pb = CreateObject("VisionAnalyzer.ProgressBar")
Es können mehrere Progressbars gleichzeitig verschachtelt erzeugt werden. Diese werden dann in einem Fenster
untereinander dargestellt. Durch die Eigenschaft "UserCanceled" kann überprüft werden, ob der Anwender die
Operation abbrechen möchte.
Das folgende Beispiel zeigt eine fiktive Anwendung mit zwei verschachtelten Progressbars:
' Progressbar demo
Sub Main
Dim pb1 As New ProgressBar
Dim pb2 As New ProgressBar
pb1.Init "ProgressBar Demo", "First Bar"
pb2.Init "This title will not be shown", "Second Bar"
pb1.SetRange 0, 5
pb2.SetRange 0, 100
pb1.SetStep 1
pb2.SetStep 1
For i = 1 To 5
For j = 1 To 100
If pb2.UserCanceled Then
Exit For
End If
pb2.StepIt
Wait .001
Next j
pb1.StepIt
Next i
pb1.SetText "Done 1"
pb2.SetText "Done 2"
Wait 2
End Sub
Methoden
Sub Init(Title As String, Text As String)
Initialisiert den Progressbar und stellt ihn dar.
Die Parameter im Einzelnen:
Title
Titel des Progressbars. Bei verschachtelten Progressbars wird nur der Titel des ersten
Bars angezeigt.
Text
Der zum Bar gehörige Text. Der Text kann mit "SetText" nachträglich geändert
werden.
Sub SetText(Text As String)
Diese Funktion ersetzt den vorhandenen Text.
Sub SetRange(Lower As Long, Upper As Long)
24
Setzen der unteren und oberen Bereichsbegrenzungen. Standardmäßig sind diese Werte auf 0
und 100 gesetzt.
Sub SetPosition(Position As Long)
Setzen der Position des Bars.
Sub OffsetPosition(Position As Long)
Setzen der Position des Bars relativ zur aktuellen Position.
Sub SetStep(Step As Long)
Setzen der Schrittlänge die bei "StepIt" verwendet wird. Standard ist 10.
Sub StepIt()
Vorrücken der Position um die bei "SetStep" eingestellte Schrittlänge.
Sub Hide()
Das Progressbar-Fenster wird unsichtbar.
Sub Show()
Das Progressbar-Fenster wird wieder sichtbar.
Eigenschaften
UserCanceled As Boolean
Der Anwender hat den "Cancel"-Button betätigt.
3.20. Segment
Beschreibung
Diese Objekt beschreibt ein einzelnes Segment in den Daten eines History-Knotens.
Methoden
Eigenschaften
Dataset As Dataset
Schreibgeschützt
Ein Datensatz-Objekt, das die Daten in dem Segment beschreibt. Alle Positionsangaben
beziehen sich auf den Anfang des Segments. Es handelt sich bei dem Datensatz um eine
Untermenge des Datensatzes, der als Eigenschaft des History-Knotens auftritt.
Die "Markers"-Auflistung dieses Objekts enthält keine "New Segment"-Marker mehr.
DateTime As Date
Schreibgeschützt
Datum/Zeit zu Beginn des Segments.
3.21. Segments
Beschreibung
Dieses Objekt ist eine Auflistung von "Segment"-Objekten.
Methoden
Eigenschaften
Count As Long
Schreibgeschützt
Anzahl der Segmente in der Auflistung
Item(Index As Long) As Segment
Standardelement, schreibgeschützt
Liefert bei Angabe des Indexes (1-...) ein "Segment"-Objekt.
3.22. Transformation
Beschreibung
Mit diesem Objekt ist es möglich, einige primäre Transformationen des Analyzers mit Parametern aufzurufen.
Eine Liste der unterstützten Transformationen und ihrer Parameter finden Sie im Kapitel "Aufrufbare
Transformationen".
Der Vorteil dieser Vorgehensweise gegenüber dem Aufruf über das "Transformations"-Menü besteht in der
Möglichkeit der dynamischen Parametrisierung. Das bedeutet, dass die Parameter für die Transformation zur
Laufzeit ermittelt werden können. Es können also Ergebnisse von Operationen, die vorher abgelaufen sind, bei
der Parameterberechnung berücksichtigt werden.
Vision Analyzer OLE Automation Referenzhandbuch
25
Die neu erzeugten History-Knoten können auch in History-Vorlagen eingesetzt werden. Soll hierbei die
dynamische Parametrisierung gewahrt bleiben, so müssen bestimmte Regeln eingehalten werden. In diesem
Falle muss der Knoten mit dem eingebauten Basic-Interpreter erzeugt wurden. Außerdem muss der neue Knoten
als Child-Knoten der vordefinierten Variablen "ActiveNode" erzeugt werden (s. a. NewHistoryNode). Diese
Variable ist immer definiert, wenn der Basic-Interpreter läuft und zwar wie folgt:
Dim ActiveNode As HistoryNode
Der Knoten repräsentiert das aktuell offene Datenfenster. Ist kein Datenfenster geöffnet, so enthält dieser Knoten
keine Daten.
Um also einen solchen dynamischen Datensatz zu erzeugen, sollte man alle offenen Datenfenster schließen, bis
auf das Fenster, das als Parent für den neuen Child-Knoten dienen soll. Dann wird der Code des Basic-Makros
ausgeführt. Es ist zu beachten, dass die Ausführung automatisch beendet wird, nachdem Transformation.Do()
aufgerufen wurde.
Beim Erstellen des neuen Knotens wird der gesamte Makro-Code in den Knoten kopiert. Jetzt kann man den
Knoten wie eine gewöhnliche Transformation auf andere Knoten ziehen, um die Operation zu wiederholen. Der
Knoten kann auch in eine History-Vorlage aufgenommen werden.
Sieht man sich mit der rechten Maustaste am Knoten die so genannten "Operation Infos" an, so wird zusätzlich
der Code angezeigt, der zur Erstellung des Knotens geführt hat.
Hält man die eben besprochenen Regeln nicht ein, d.h. verwendet man nicht den Basic-Interpreter und
"ActiveNode", so ist der neue Knoten ebenfalls vorlagenfähig. Die Parameter sind jedoch eingefroren, werden
also bei der Neuanlage eines Knoten nicht dynamisch berechnet. Der Knoten verhält sich, als wäre er über das
"Transformations"-Menü erzeugt worden.
Beispiel eines Makros, das eine Filteroperation ausführt (keine dynamische Parametrisierung):
' Filter Data.
Sub Main
HistoryFiles(1).Open
Dim hn As HistoryNode
Set hn = HistoryFiles(1)(1)
Transformation.Do "Filters", "HighCutoff=30,48;Notch=50", hn, "FilterTest"
End Sub
Im folgenden Bespiel werden Daten des aktuellen Knotens zur Erstellung von Parametern verwendet. Dieses
Beispiel soll hierbei nur die Möglichkeiten der dynamischen Parametrisierung aufzeigen. Eine ernsthafte
Anwendung ist es nicht.
' Filter Data.
Sub Main
Dim nChannels as Long
nChannels = ActiveNode.Dataset.Channels.Count
' Create parameters string based on number of channels
Dim sParameters As String
For i = 1 To nChannels
sParameters = sParameters & "highcutoff(" & i & ")=" & i + nChannels
Next
Transformation.Do "Filters", sParameters, ActiveNode, "Filters"
End Sub
& ";"
Methoden
Sub Do(Transformation As String, Parameters As String, ParentNode As HistoryNode, [NodeName As
String])
Führt eine Transformation aus.
Die Parameter im Einzelnen:
Transformation
Name der Transformation
Parameters
Transformationsparameter
ParentNode
Der Parent-Knoten.
Optionaler Parameter:
NodeName
26
Name des neuen Knotens. Wenn kein Name eingegeben wird, so wird er von der
Transformation vergeben.
Sub TryLater()
Diese Funktion wird nur benötigt, wenn ein Makro in einer History-Vorlage eingesetzt wird.
Wenn in diesem Falle zur Berechnung des neuen Datensatzes Informationen aus einem
History-Knoten benötigt werden, der weder der aktuelle Knoten noch ein direkter Vorfahre des
aktuellen Knotens ist, kann es sein, dass dieser Knoten eventuell noch gar nicht berechnet
wurde. Durch den Aufruf dieser Funktion wird das dem Programm mitgeteilt. In diesem Falle
wird das Programm mit dem Erzeugen anderer History-Knoten fortfahren und später erneut
versuchen, den Knoten zu erstellen.
3.23. Window
Beschreibung
Diese Objekt beschreibt ein einzelnes Fenster im Arbeitsbereich.
Methoden
Sub ActivateTransientTransformation(Name As String)
Ermöglicht den Aufruf einer transienten Transformation, wenn ein Intervall markiert ist.
Beispiel einer FFT:
ActiveNode.Windows(1).ActivateTransientTransformation "FFT"
Sub Close()
Schließt das Fenster.
Sub Copy()
Nur für Type = "EEGData": kopiert den Inhalt des Fensters in die Zwischenablage (Clipboard).
Sub Maximize()
Fenstergröße maximieren
Sub Minimize()
Fenstergröße minimieren
Sub Print()
Nur für Type = "EEGData": druckt den Inhalt des Fensters.
Sub Restore()
Fenster auf normale Größe zurücksetzen
Sub SetDisplayedInterval(Position as Long, DataPoints as Long)
Nur für Type = "EEGData": bestimmt das dargestellte Datenintervall.
Sub SetMarkedInterval(Position as Long, DataPoints as Long)
Nur für Type = "EEGData": bestimmt das markierte Datenintervall. Der Bereich muss
innerhalb des dargestellten Intervalls liegen.
Sub MoveMarkedInterval(Position as Long)
Nur für Type = "EEGData": bewegt das das markierte Datenintervall. Der Bereich muss
innerhalb des dargestellten Intervalls liegen.
Sub SetScalingRange(MinValue as Single, MaxValue as Single)
Nur für Type = "EEGData": Einstellung der Skalierung.
Sub ResetScalingRange()
Nur für Type = "EEGData": Rücksetzen der Skalierung auf den voreingestellten Wert.
Eigenschaften
DisplayBaselineCorrection As Boolean
Nur für Type = "EEGData": Baseline-Korrektur der Kurvendarstellung ein/aus. Hierbei wird
nur die Baseline der Darstellung verändert, nicht die Daten selbst.
DisplayDataPoints as Long
Schreibgeschützt
Nur für Type = "EEGData": gibt die Anzahl der Datenpunkte im dargestellten Datenintervall
an.
DisplayStartPosition as Long
Schreibgeschützt
Nur für Type = "EEGData": gibt die Startposition des dargestellten Datenintervalls in
Datenpunkten an (1 - ...).
HistoryNode As HistoryNode
Schreibgeschützt
Vision Analyzer OLE Automation Referenzhandbuch
27
Für den Fall, dass es sich bei dem Fenster um ein EEG-Datenfenster handelt (Type =
"EEGData"), repräsentiert dieses Objekt den assoziierten History-Knoten.
MarkedIntervalDataPoints as Long
Schreibgeschützt
Nur für Type = "EEGData": gibt die Anzahl der Datenpunkte im markierten Intervall an.
MarkedIntervalStartPosition as Long
Schreibgeschützt
Nur für Type = "EEGData": gibt die Startposition des markierten Intervalls in Datenpunkten an
(1 - ...).
Title As String
Fenstertitel.
Type As String
Schreibgeschützt
Beschreibung des Fenstertyps.
Aktuell definierte Typen sind:
 "EEGData"
EEG-Datenfenster
 "Macro"
Makrofenster, d.h. Fenster zum Editieren von Basic-Quellcode.
 "Template"
History-Vorlagenfenster
3.24. Windows
Beschreibung
Dieses Objekt ist eine Auflistung von "Window"-Objekten, die den offenen Fenstern im Arbeitsbereich
entsprechen.
Methoden
Eigenschaften
Count As Long
Schreibgeschützt
Anzahl der offenen Fenster
Item(TitleOrIndex As Variant) As Window
Standardelement, schreibgeschützt
Liefert bei Angabe des Titels oder des Indexes (1-...) ein "Window"-Objekt.
28
3.25. Workspace
Beschreibung
Diese Objekt beschreibt einen einzelnen Workspace.
Methoden
Eigenschaften
ExportFileFolder As String
Schreibgeschützt
Standardverzeichnis der exportierten Dateien
FullName As String
schreibgeschützt
Name der Workspace-Datei mit voller Pfadangabe
HistoryFileFolder
Schreibgeschützt
Verzeichnis der History-Dateien
Name As String
schreibgeschützt
Basisname der Workspace-Datei ohne Verzeichnisangabe und Dateierweiterung.
RawFileFolder As String
Schreibgeschützt
Rohdatenverzeichnis
3.26. Workspaces
Beschreibung
Dieses Objekt ist eine Auflistung von "Workspace"-Objekten. Es wird im Objekt "Application" genutzt, um alle
Workspaces im Arbeitsverzeichnis aufzulisten.
Methoden
Sub Refresh()
Diese Methode dient der Auffrischung der Workspace-Informationen.
Eigenschaften
Count As Long
Schreibgeschützt
Anzahl der verfügbaren Workspaces
Item(NameOrIndex As Variant) As Workspace
Standardelement, schreibgeschützt
Liefert bei Angabe des Namens oder des Indexes (1-...) ein "Workspace"-Objekt.
Vision Analyzer OLE Automation Referenzhandbuch
29
4. Aufrufbare Transformationen
In diesem Kapitel werden die aktuell verfügbaren Transformationen und ihre Parameter aufgelistet, die mit
Transformation.Do(Transformation As String, Parameters As String, ParentNode As
HistoryNode, [NodeName As String])
aufgerufen werden können.
Es gibt hier zwei Funktionsargumente, "Transformation" und "Parameters", die in den folgenden Unterkapiteln
für die verschiedenen Transformationen erläutert werden.
Die folgenden Regeln gelten für die Transformationsparameter.
Es gibt immer das Paar Variable=Wert.
Transformation.Do "Filters", "Highcutoff=70", ActiveNode
Werden mehrere Variablen eingegeben, so werden diese mit einem Semikolon (";") getrennt.
Transformation.Do "Filters", "Highcutoff=70;Lowcutoff=2;Notch=50", ActiveNode
Gehören einer Variablen mehrere Werte an, so werden sie durch Komma (",") getrennt.
Transformation.Do "Filters", "Highcutoff=70,48;Lowcutoff=2,24;Notch=50", ActiveNode
Wenn Variablen als Vektoren vorgesehen sind, so werden die Elemente mit Klammern indiziert "()". Der erste
Index ist die 1. Ein Wert ohne Klammern wird einem Wert mit Index (1) gleichgesetzt, d.h. "Highcutoff" ist
gleich "Highcutoff(1)".
Transformation.Do "Filters", "Highcutoff = 12,48; Highcutoff(3)=70,48; Lowcutoff(3) =
2; Notch(3)=50", ActiveNode
Groß- und Kleinschreibung der Variablennamen werden ignoriert.
Die Variablenzuweisung kann in beliebiger Reihenfolge erfolgen.
Die nachfolgenden Transformationen werden im Benutzerhandbuch genauer erläutert. Wir beschränken uns hier
nur auf ihre Parameter-Syntax.
30
4.1. Band-rejection Filters (Bandsperrfilter)
Transformationsname: BandRejection
Variable
Filter
Channels
NamedChannels
Beschreibung
Hier wird ein Bandsperrfilter definiert. Da mehrere Filter definiert werden können, kann
die Variable indiziert werden. Ein Filter wird immer durch drei Werte beschrieben:
Frequenz, Bandbreite und Ordnung. Die Ordnung kann nur die Werte 2 oder 4 annehmen.
Beispiel:
Filter(1)=17,2,4;Filter(2)=50,2,2;
Diese Variable listet die Kanäle, die gefiltert werden sollen, numerisch auf.
Beispiel:
Channels=1,2,15
Die Variable darf nicht gleichzeitig mit der Variablen "NamedChannels" definiert sein.
Ist weder "Channels" noch "NamedChannels" definiert, werden alle Kanäle gefiltert.
Hier können die Kanäle, die gefiltert werden sollen, mit ihren Namen aufgelistet werden.
Beispiel:
NamedChannels=Fp1,F7,Oz
Diese Variable darf nicht gleichzeitig mit der Variablen "Channels" definiert sein.
Beispiele:
Transformation.Do "BandRejection", "Filter=20,2,4", ActiveNode
Es wird ein Bandsperrfilter bei 20 Hertz mit einer Bandbreite von 2 Hertz und einer Ordnung von 4 eingestellt.
Es werden alle Kanäle gefiltert.
Transformation.Do "BandRejection", "Filter(1)=20,2,4; Filter(2)=30,3,4;Channels=2,4,16",
ActiveNode
Hier werden ein Bandsperrfilter bei 20 Hertz mit einer Bandbreite von 2 Hertz und einer Ordnung von 4, sowie
ein Filter bei 30 Hertz, einer Bandbreite von 3 Hertz und einer Ordnung von 4 definiert. Der zweite, der vierte
und der sechzehnte Kanal werden gefiltert.
Transformation.Do "BandRejection", "Filter=20,2,2;NamedChannels=Fp1", ActiveNode
Der Kanal "Fp1" wird mit einem Bandsperrfilter von 20 Hertz, einer Bandbreite von 2 Hertz und einer Ordnung
von 2 gefiltert.
Vision Analyzer OLE Automation Referenzhandbuch
31
4.2. Filters (Filter)
Transformationsname: Filters
Variable
LowCutoff
HighCutoff
Notch
IndividualFilters
Beschreibung
Hier wird ein Hochpassfilter definiert. Die Variable kann indiziert werden. In diesem
Falle bezeichnet der Index die Nummer des Kanals, der gefiltert werden soll. Das Filter
wird durch zwei Werte beschrieben, Frequenz und Steilheit in db/Oktave. Die Steilheit
kann die Werte 12, 24 oder 48 annehmen. Wird sie nicht angegeben, so wird sie mit 12
angesetzt.
Beispiel:
LowCutoff(1)=2,24;LowCutoff(2)=4;
Diese Variable bezeichnet ein Tiefpassfilter. Ansonsten trifft die Beschreibung des
Hochpassfilters auch auf dieses Filter zu.
Beispiel:
HighCutoff(1)=70,24;HighCutoff(2)=70;
Hier kann das Bandsperrfilter für das Netzbrummen angegeben werden. Es kann hier
ebenso wie bei Hoch- und Tiefpass ein Kanal indiziert werden. Die zulässigen Werte für
das Netzfilter sind 50 oder 60.
Beispiel:
Notch=50
Dies ist eine so genannte boolsche Variable. Sie kann die Werte "false" (Falsch) oder
"true" annehmen. Diese Variable entscheidet, ob die Kanäle individuell gefiltert werden
oder alle mit denselben Filtern versehen werden.
Normalerweise entscheidet das Programm selbsttätig, ob individuell gefiltert wird. Wenn
irgendwo in den Filterparametern ein Index größer als eins auftaucht, wird auf
individuelle Filterung umgeschaltet. Ansonsten werden alle Kanäle gleich gefiltert. Nur
für den Fall also, dass ausschließlich der erste Kanal gefiltert werden soll, ist diese
Variable auf "true" zu setzen..
Beispiel:
IndividualFilters=true
Beispiele:
Transformation.Do "Filters", "HighCutoff=70", ActiveNode
Hier wird ein Tiefpassfilter von 70 Hertz definiert. Da die Steilheit nicht angegeben wurde wird sie mit 12
db/Oktave angesetzt. Es werden alle Kanäle mit diesem Wert gefiltert.
Transformation.Do "Filters", "LowCutoff(10)=0.535,48;HighCutoff(10)=70,48;Notch(10)=50",
ActiveNode
Nur der zehnte Kanal wird hier mit einem Hochpass von 0,535 Hertz, 48db/Oktave, einem Tiefpass von 70
Hertz, 48 db/Oktave sowie einem Netzsperrfilter von 50 Hertz gefiltert.
Transformation.Do "Filters", "IndividualFilters=True; LowCutoff(1)=2", ActiveNode
Hier wird nur der erste Kanal mit einem Hochpassfilter von 2 Hertz gefiltert.
32
4.3. Formula Evaluator (Formelauswerter)
Transformationsname: Formula
Variable
Formula
Unit
KeepOldChannels
Beschreibung
Die Variable beschreibt die Formel für einen neuen Kanal als Text. Da mehrere Formeln
definiert werden können, kann die Variable indiziert werden. Die Formel wird gemäß der
Syntax des Formelauswerters eingegeben. Diese Syntax finden Sie im Benutzerhandbuch.
Beispiel:
Formula(1) = Fp1Power = Fp1 * Fp1
Diese Variable beschreibt die Einheit mit der ein neu formulierter Kanal versehen wird.
Wenn die Einheit nicht angegeben wird, wird Mikrovolt angenommen. Die möglichen
Werte sind ("µ" kann durch "u", "²" kann durch "2" ersetzt werden, Groß-,
Kleinschreibung wird ignoriert):
"None" (einheitenlos)
"µV" oder "uV"
"μV/Hz" oder "uV/Hz"
"μV²" oder "uV2"
"μV²/Hz" oder "uV2/Hz"
"μV/m²" oder "uV/m2"
Beispiel:
Unit(1) = uV2
Dies ist eine so genannte boolsche Variable. Sie kann die Werte "false" (Falsch) oder
"true" annehmen. Diese Variable entscheidet, ob die Daten des Vorgängerknotens in den
neuen Datensatz übernommen werden.
Beispiel:
KeepOldChannels = true
Beispiele:
Transformation.Do "Formula", "Formula(1) = RelationFp1Fp2 = Fp1 / Fp2; Unit(1) = none",
ActiveNode
Der neue Datensatz enthält einen neuen Kanal mit dem Namen "RelationFp1Fp2". Die Daten sind einheitenlos.
Die Daten des Vorgängerknotens werden nicht übernommen.
Transformation.Do "Formula", "Formula(1) = Fp1' = (shift(Fp1, -1) + Fp1 + shift(Fp1, 1)) / 3;
Formula(2) = Fp2' = (shift(Fp2, -1) + Fp2 + shift(Fp2, 1)) / 3; KeepOldChannels = true",
ActiveNode
Die zwei neuen Kanäle "Fp1'" und "Fp2'" werden erstellt. Die Einheiten sind, da nicht definiert, µV. Die Daten
des Vorgängerknotens werden übernommen.
Vision Analyzer OLE Automation Referenzhandbuch
33
5. Aufzählungstypen
Im Folgenden werden die verschiedenen Aufzählungstypen (Enumeratoren) erläutert.
Zu beachten ist, dass der eingebaute Basic-Interpreter keine Deklaration von Variablen eines Aufzählungstyps
erlaubt, sofern der Aufzählungstyp über eine Automatisierungsschnittstelle importiert wird. Überall wo diese
Typen auftreten, ist daher der Typ "Long" zu verwenden.
Beispiel:
Nicht:
Dim vdt As VisionDataType
' Gibt Fehlermeldung
vdt = viDtTimeDomain
Sondern:
Dim vdt As Long
' Korrekt
vdt = viDtTimeDomain
5.1. VisionDataType
Konstanten für die verschiedenen Datentypen, die ein History-Knoten verwalten kann.
Enum VisionDataType
viDtTimeDomain = &H101
' Daten im Zeitbereich
viDtTimeDomainComplex = &H102
' Komplexe Daten im Zeitbereich
viDtFrequencyDomain = &H201
' Daten im Frequenzbereich
viDtFrequencyDomainComplex = &H202 ' Komplexe Daten im Frequenzbereich
viDtTimeFrequencyDomain = &H301
' Daten im Zeit-, Frequenzbereich (z.B. Wavelet-Daten)
viDtTimeFrequencyDomainComplex = &H302
' Daten im Zeit-, Frequenzbereich, komplex
viDtUserDefined = &H10001
' Benutzerdefinierter Typ
viDtUserDefinedComplex = &H10002
' Benutzerdefinierter Typ, komplex
viDtUserDefinedNoMatrix = &H100FF
' Benutzerdefinierter Typ, der nicht in das
' Standardraster passt.
End Enum
5.2. VisionDataUnit
Konstanten für die verschiedenen Einheiten, die Daten eines Kanals haben können.
Enum VisionDataUnit
viDuMicrovolt = 0
' μV
viDuUnitless = 1
' Keine Einheit.
viDuMicrovoltsPerHertz = 2
' μV/Hz
viDuMicrovoltSquare = 3
' μV2
viDuMicrovoltSquarePerHertz = 4
' μV2/Hz
viDuMicrovoltPerMeterSquare = 5
' μV/m2
End Enum
5.3. VisionSegType
Konstanten für die verschiedenen Segmentierungsarten.
Enum VisionSegType
viStNotSegmented = 0
' Unsegmentiert
viStMarker = 1
' Segmentiert relativ zu Markerpositionen
viStMarkerAndABE = 2 ' Segmentiert relativ zu Markerpositionen mit Hilfe eines ABE-Ausdrucks
viStFixedTime = 3
' Segmentiert in festen Zeiteinheiten
vistManual = 4
' Manuell segmentiert, Segmente unterschiedlicher Länge möglich
End Enum
5.4. VisionLayerIncFunction
Konstanten für die Schrittweiten-Funktion zwischen den Ebenen ("Layers") eines Datensatzes. Solche Ebenen
treten bei dreidimensionalen Daten, wie z.B. kontinuierliche Wavelets, auf.
Enum VisionLayerIncFunction
viLifLinear = 0
' Linear, d.h. gleicher Abstand zwischen den Ebenen
viLifLogarithmic = 1
' Logarithmischer Abstand zwischen den Ebenen
End Enum
34
6. Fehlercodes
Dieses Kapitel listet die Fehlercodes und die mit ihnen assoziierten Meldungen auf, die in den verschiedenen
Funktionen auftreten können. Die Fehlernummern kennzeichnen nur die unteren 15 Bits des Fehlercodes. Um
also den entsprechenden Fehlercode zu extrahieren, müssen die oberen Bits ausmaskiert werden.
Beispiel:
Sub Main
On Error GoTo CheckError
' Initialize error handling.
Set hf = HistoryFiles(1)
MsgBox "First channel name: " + hf(1).Dataset.Channels(1).Name
Exit Sub
CheckError:
nError = Err.Number And &h7fff
' Extract pure error code.
Select Case nError
Case 1501
' History file is closed.
MsgBox "History file was closed. Please open the first history file " _
" and then retry"
End Select
End Sub
Nachfolgend die finden Sie die Fehlercodes:
Code
1500
1501
1502
1503
1504
1505
1506
1507
1508
1509
1510
1511
1512
1513
1514
1515
1516
1517
1518
1519
1520
1521
1522
1523
1524
1525
1526
1527
1528
1529
1530
1531
1532
Meldung
Display name of History File: Invalid characters found in '%s'. '%s' can't be used for naming.
History file is closed.
Can't handle this data type.
History node is invalid.
History node not found.
The data set is currently not available.
History file is invalid.
History node does not contain data.
History file not found.
Can't access workspace.
Index is out of range.
A history node with the same name already exists.
Rename History Node: Invalid characters found in '%s'. '%s' can't be used for naming.
Channel not found.
No workspace is loaded.
Window does no longer exist.
Requested data is out of segment range.
Window not found.
History node collection is invalid.
History template not found.
History Template: Type mismatch.
User canceled history template processing.
The start node '%s' was not found in the history template '%s'.
User defined message.
A history file with this display name already exists in the current workspace.
Can't change display name on open history file.
'Create' has not been called.
Invalid data size or format.
Channel is out of range.
NewHistoryNode.Create: Invalid data type.
NewHistoryNode.Create: Parameters mismatch.
NewHistoryNode.AddMarker: Marker out of range.
NewHistoryNode.WriteData: Can't write data. Data set inherits data.
Vision Analyzer OLE Automation Referenzhandbuch
35
1533
1534
1535
1536
1537
1538
1539
1540
1541
1542
1543
1544
1545
1546
1547
1548
1549
1550
1551
1552
1553
1554
1555
1556
1557
36
Transformation.Do: Transformation '%s' not found.
Transformation.Do: '%s', parameters '%s' are not correct.
Transformation.Do: Type mismatch
<Error, warning or other message from Transformation>
Dataset.GetData: The "ChannelList" parameter is incorrect.
The requested data layer is out of range.
The requested number of layers is invalid.
Wrong function for this type of data. Use NewHistoryNode.CreateEx().
The requested layer function is not supported.
Workspace not found.
Landmark not found.
Marked interval can only be inside of a displayed interval.
User canceled operation.
Invalid characters in history node name. '\/:' can't be used for naming.
Progress bar is not initialized.
Menu item not found.
FastArray: First element is out of range.
FastArray: Division by Zero.
FastArray: Source data array is not initialized.
FastArray: Out of memory.
Fast Array: Target data array is not initialized.
FastArray: Only one dimensional floating point single precision arrays are supported.
FastArray.Parameters lead into infinite loop.
FastArray: Parameter exceeds the limt of 536870912.
FastArray: The parameters would lead into more than 536870912 assignments. This means long
lasting operations that can't be interrupted.
Herunterladen