8 Globale Variablen (variables)

Der Aufbau einer Variablendeklaration setzt sich aus dem Schlüsselwort variable, dem Datentyp, dem Variablenidentifikator und dem Endezeichen (Terminator) ; zusammen. In einer Anweisung können mehrere Variablen mit demselben Datentyp deklariert werden. Dabei sind die Identifikatoren der Variablen durch , (Komma) zu trennen.

Wird die Variable direkt im Dialog oder Modul und nicht innerhalb einer Regel oder Methode (siehe auch Kapitel „Lokale Variablen“) definiert, handelt es sich um eine globale Variable.

Globale Variablen werden im IDM ähnlich wie Objekte behandelt, sodass nicht nur der Inhalt der Variablen sondern auch die Variable selbst zur Laufzeit geändert werden kann (siehe Kapitel „Änderbare Attribute von globalen Variablen“).

8.1 Variablendefinition

Syntax

{ export | reexport } variable <Datentyp> <Variablenname>
  [ , <Variablenname> ] ;

Es stehen folgende Datentypen zur Verfügung:

Datentyp

Wertebereich

anyvalue

beliebiger undefinierter Datentyp; wird erst durch aktuelle Belegung definiert.

attribute

Datentyp der Attribute im IDM.

boolean

Boolescher Wert (true | false).

datatype

IDM-Datentyp.

class

Klasse eines Objekts, z.B. "window".

enum

Symbolische Konstante; Aufzählungstyp für verschiedene spezielle Attribute, z.B. "sel_row".

event

Ereignisart, z.B. "select".

index

Indexwert für 2-dimensionale Attribute [I,J].

integer

Ganzzahl ("long integer"), z.B. 42.

method

Methode, z.B. "delete".

object

Objekt im Sinne des DM (eigentliche Objekte, Ressourcen, Funktionen, Regeln…).

pointer

Zeiger aus der Anwendung.

string

beliebig lange Zeichenkette (Null-terminiert), z.B. "Hallo".

8.2 Variablendefinition mit Initialisierung

Die folgende Definition initialisiert die erzeugte Variable sofort mit einem Wert. Der Datentyp des Wertes muss selbstverständlich mit dem Datentyp der Variablen identisch sein.

Syntax

{ export | reexport } variable <Datentyp> <Variablenname> := <Wert>
  [ , <Variablenname> := <Wert> ] ;

Objektreferenzen, Zahlen, Farben, Strings und boolesche Werte, d.h. alles was vom IDM unterstützt wird, kann in den Variablen vom Typ anyvalue gespeichert werden.

Beispiel

variable integer Fuellstand;

variable boolean Ventil_Zustand := true;

variable string  Ventil_Name := "Hauptventil";

variable enum    Mode;

variable object  PbSchalter;  // PbSchalter sei ein Pushbutton

Ein String ist immer eine in doppelte Hochkommas eingeschlossene Zeichenkette.

Ventil_Name := "Hauptventil";

In diesem Beispiel ist das Wort "Hauptventil" ein String.

8.3 Konfigurierbare Variablen

Das zusätzliche Schlüsselwort config kennzeichnet eine globale Variable als konfigurierbar, d.h. ihr Wert kann in einer Konfigurationsdatei gesetzt werden.

Syntax

{ export | reexport } { config } variable <Datentyp>
  <Variablenname> { := <Wert> } [ , <Variablenname> { := <Wert> } ] ;

Die Konfigurationsdatei wird mit den Funktionen loadprofile(), DM_LoadProfile oder DMcob_LoadProfile geladen.

Siehe auch

Attribut .configurable

Kapitel „Konfigurationsdatei“ im Handbuch „Entwicklungsumgebung“

8.4 Variable vor Änderungen schützen

Durch Verwendung des Schlüsselworts constant statt variable oder des Setzens des Attributs .constant an der Variablen auf true kann eine Änderung des Inhalts der globalen Variablen verhindert werden.

Syntax

{ export | reexport } constant <Datentyp> <Variablenname> := <Wert>
  [ , <Variablenname> := <Wert> ] ;

Siehe auch

Attribut .constant

Beispiel

dialog D

 

variable integer V := 123;

constant integer C := 456;

 

on dialog start

{

  C:=V;      // Evaluationsfehler da C nicht veränderbar

  V := 234;  // OK

  V.constant := true;

  V := 345;  // Fehler – Variable nun schreibgeschützt

}

8.5 Änderbare Attribute von globalen Variablen

Bei globalen Variablen können folgende Attribute dynamisch zur Laufzeit verändert werden:

Attribut

Wertebereich

Bedeutung

.value

anyvalue

Wert

.type

datatype

Datentyp

.constant

boolean

Änderbarkeit des Inhalts

Um eine Variable und nicht ihren Inhalt anzusprechen, ist das Attribut .self zu verwenden. Danach kann dann das Attribut folgen, das man von der Variablen ansprechen möchte.

Beispiel

variable integer I := 2;

 

print I.self.type    // integer

print I.self.value   // 2

 

I.self.type := boolean;

print I.self.type;  // boolean

Hinweis

Dies ist nur bei globalen, nicht jedoch bei lokalen Variablen (Variablen, die innerhalb von Regeln und Methoden deklariert werden), möglich.