Kurzbeschreibung
Parameter Funktionsweise Ein/Ausgänge Limitierungen Querverweise Beispiele
Syntax... Funktionen...
 | Kurzbeschreibung
Der
Benutzer legt eine individuelle Befehlsfolge (Programm) fest und integriert diese in den
Signalgraphen.
Interpret arbeitet als Quellen- oder Verarbeitungsmodul. Die eingegebene Befehlsfolge wird
abgearbeitet, sobald die Quelle aufgerufen oder an einem Trigger-Eingang
(Verarbeitungsmodul) ein Signal anliegt.
|
 | Parameter
 | ASCII-Text Interpret-Programm
|
|
 | Funktionsweise
Programm (ASCII-Text):
Im ASCII-Textfeld wird ein Programm eingegeben. Dieses wird im Rahmen der
syntaktischen Regeln unter Verwendung der implementierten Funktionen, Operatoren und
Konstanten frei erstellt. Bei den Operatoren werden die üblichen Prioritäten
berücksichtigt. Die Typen von Aus- und Eingängen werden im ASCII-Text angegeben.
Button Syntax überprüft das Programm auf Korrektheit.
Button Speichern speichert das eingegebene Programm als ASCII-Text
(name.txt). Button Laden lädt einen ASCII-Text als Programm in das
Editorfenster.
Der zuletzt verwendete Dateiname einer Modulinstanz wird jeweils als Defaultname
vorgeschlagen. Das entsprechende Verzeichnis bestimmt der Benutzer.
Zu Beginn des Programms werden Eingänge, Trigger-Eingänge, Ausgänge und
Variablen deklariert.
Eingänge:
 | alle Eingänge sind obligatorisch
|
 | Quellenmodul: keine Trigger-Eingänge
|
 | Programm-Ablauf: einlesen neuer Daten von
Nichttrigger-Eingängen und überschreiben vorhandener Werte.
|
Trigger-Eingänge:
 | OR (Default), AND (TRIGGER=T_AND)
|
 | alle deklarierten Trigger-Eingänge sind obligatorisch
|
 | Verarbeitungsmodul: mindestens ein Trigger-Eingang
|
 | Programm-Ablauf: Liegen an mindestens einem (OR) bzw. an allen (AND)
Trigger-Eingängen Daten an, erfolgt die Programm-Ausführung.
Dabei werden die Triggerinformationen blockweise eingelesen, das Execute-Programm
ausgeführt und Daten an die Ausgänge geschickt, bis alle Trigger-Eingänge leer sind.
|
Ausgänge:
 | Programm-Ablauf: Während der Abarbeitung des Execute-Programms
werden Daten an Ausgänge geschickt (<<) bzw. zugewiesen (=). Die angesammelten
Daten stehen nach Ausführung des Execute-Programms an den Ausgängen zur Verfügung.
|
 | Vektor fester Länge oder Skalar: wird immer ausgegeben (evtl.
Initialwerte)
|
 | Vektor variabler Länge: wird nur dann ausgegeben, wenn Daten
vorhanden sind.
|
Sektionen:
Nach den Deklarationen können folgende Sektionen angelegt werden:
Init: wird nur bei Messung-Start aufgerufen, z. B.
für Hardware-Initialisierungen. Daten aus Eingängen stehen erst in der Execute-Sektion
zur Verfügung.
Execute: wird ausgeführt, falls an Trigger-Eingängen Daten anliegen,
oder falls Quellenmodul.
Done: wird nur bei Messung-Stop aufgerufen.
Status:
- Default: START (nach Programmstart), BUSY
- im Programm Status lesen/setzen (siehe Funktionen | TypeInfo).
TypeInfo:
Signalname, Einheit, Bereich, Samplerate, Zeitstempel, ... werden ebenfalls im
Execute-Abschnitt für jeden Ausgang gesetzt bzw. von einem Eingang kopiert.
|
 | Ein-/Ausgänge
Eingänge |
Z.B. I0 |
TYPEINFO{TypeInfo}
SWORD[1]{BIN} |
Anzahl und Datentypen ergeben sich aus den Input-Deklarationen |
Ausgänge |
Z.B.
O0 |
TYPEINFO{TypeInfo}
DOUBLE[]{TIME_DOMAIN} |
Anzahl und Datentypen ergeben sich aus den Output-Deklarationen
|
|
 | Limitierungen
-
|
 | Querverweise
CAN IEEE488 SoftnetDP RS232
|
 | Beispiele
// Kommentare starten mit //
und gelten bis Zeilenende
// Beispiel: TypeInfo
// Deklarationen
input trigger i1 ( "TYPEINFO", "TypeInfo", "DOUBLE[]",
"TIME_DOMAIN" );
output o1 ( "TYPEINFO", "TypeInfo", "DOUBLE[]",
"TIME_DOMAIN" );
char name[20]; char unit[20];
int erg; int status;
double d; double timestamp; double samplerate; double rangemin;
double rangemax; double scale;
// Funktionen
typeinfo_kopieren()
{
// kopiert werden:
// name, timestamp, samplerate, rangemin, rangemax, unit, scale
ti_copy( o1, i1);
// der status wird nicht kopiert
status = ti_getstatus( i1 );
ti_setstatus( status, o1 );
}
typeinfo_lesen()
{
ti_getname( name, i1 );
timestamp = ti_gettimestamp ( i1 );
samplerate = ti_getsamplerate( i1 );
rangemin = ti_getrangemin ( i1 );
rangemax = ti_getrangemax ( i1 );
erg = ti_getunit( unit, i1 );
scale = ti_getscale ( i1 );
status = ti_getstatus ( i1 );
}
typeinfo_setzen()
{
ti_setname( name, o1 );
ti_settimestamp ( timestamp, o1 );
ti_setsamplerate( samplerate, o1 );
ti_setrangemin ( rangemin, o1 );
ti_setrangemax ( rangemax, o1 );
erg = ti_setunit( unit, o1 );
ti_setscale ( scale, o1 );
ti_setstatus ( status, o1 );
}
// Sektionen
execute
{
typeinfo_kopieren();
typeinfo_lesen();
typeinfo_setzen();
}
|
|