Interpret
Zurück Nach oben Vorwärts

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();
}