Programmstruktur

Jedes Programm in Pascal Script oder anderen Programmiersprachen weist bestimmte Bereiche und Strukturen auf. Aufgrund des Umfangs dieses Themas existiert dazu eine eigene Seite.

Kommentare

Kommentare im Quellcode erläutern die einzelnen Befehle und helfen beim Verstehen, welcher Code welche Funktionalität umfasst. Das ist besonders wichtig, wenn man den Code anderer Entwickler verstehen möchte oder zu dessen Ergänzung oder Wartung beitragen soll.

Pascal Script kennt zwei unterschiedliche Wege, Kommentare im Quelltext einzuleiten.

Mehrzeiliger Kommentar

{ Ein mehrzeiliger
Kommentar steht
in geschweiften
Klammern }
...

Einzeiliger Kommentar

begin
  ...
  // Einzeilige Kommentare werden durch 
  // zwei Schrägstriche eingeleitet ...
  ...
  cpSleep(1000);   // ... und können auch nach einem Befehl stehen
  ...

Konstanten

Dieses Sprachelement steht für einen festen, unveränderlichen Wert. Er wird vor allen anderen Bereichen im Code mit definiert. Die Inhalte können nicht durch andere Befehle verändert werden, sind also nicht variabel.

const
  Konstante1 = 45;
  Konstante2 = 'Max Mustermann';
  Konstante3 = 17.459;
...

Konstanten erhalten ihre Werte durch das Zuweisungszeichen =. Der Datentyp wird automatisch durch den Wert bestimmt, der in der Konstante gespeichert wird. Konstante2 ist damit automatisch vom Typ String. Konstante3 ist durch die Gleitkommazahl vom Typ Extended.

Variablen

In jeder Programmiersprache existieren Platzhalter, die im Programmablauf die zu verarbeitenden Daten speichern oder beinhalten. Diese Platzhalter nennt man Variable. Neben den diversen Datentypen wird zwischen lokalen, Package- und globalen Variablen unterschieden.

Lokale Variablen gelten nur in dem Event, in dem sie definiert sind. Eine Variable slot im Event StartZiel kann nicht im Event TankenEinfahrt verwendet werden. Selbst wenn man den gleichen Namen nutzt, handelt es sich um zwei völlig separate Dinge.

Package-Variablen ermöglichen es, den gleichen Wert innerhalb eines AddOns (Package) in allen Events zu verwenden. Da es sich um eigene Konstrukte der Cockpit-XP AddOn-Sprache handelt, beginnen sie alle mit cp… und enden mit …Var. Die weiteren Namensbestandteile sind der Datentyp (Float, Integer und String) und ein Hinweis, ob diese Variable abgerufen (Get) oder mit neuen Inhalten belegt werden soll (Set).

Globale Variablen sind die höchste Verfügbarkeitsebene. Sie lassen sich zur Laufzeit auch in weiteren AddOns abfragen. Möglicher Einsatz wäre z.B. ein AddOn-Ereignis, das auf Ergebnisse aus einem anderen AddOn reagieren soll.

Deklaration von Variablen

Um dem Programm mitzuteilen, dass die folgenden Zeilen der Deklaration (Festlegung) von Variablen dienen beginnt man eine Zeile mit dem Schlüsselbegriff var. Die nächsten Zeilen haben das Format Name : Typ;

...
var
  ganzzahl : Integer;
  zeichenfolge : String;
  wahroderfalsch : Boolean;
  gleitkommazahl : Extended;
...

Da hier noch keine Werte zugewiesen werden, fehlt der Zuweisungsoperator :=.

Wichtig ist auch die Stelle der Variablendeklaration. Möchte man z.B. die Variable zeichenfolge in eigenen Prozeduren/Funktionen und dem Hauptprogramm nutzen, muss diese Variable vor diesen Sprachelementen stehen.

...
var
  zeichenfolge : String;
  
procedure meineProzedur;
var
  textProzedur : String;
begin
 ...
end;

function meineFunktion;
var
  textFunktion : String;
begin
  ...
end;

var
  textNichtInProdFunc : String;

// Hauptprogramm  
begin
  ...
end.

Die Variable zeichenfolge wäre bei diesem Beispiel in alle Funktionen/Prozeduren und dem Hauptprogramm nutzbar.

Ganz anders ist das bei den Variablen textProzedur und textFunktion. Diese sind jeweils nur in ihrer Funktion/Prozedur ansprechbar. Das Hauptprogramm hat darauf keinen Zugriff.

Dafür kann das Hauptprogramm auf die Variable textNichtInProdFunc zugreifen, während die Funktion und Prozedur hier ausgesperrt bleiben.

Prozeduren und Funktionen

In Prozeduren und Funktionen lassen sich wiederholende Codebestandteile in einem Block zusammenfassen. Diese Sprachelemente verhalten sich grundsätzlich wie das Hauptprogramm, das eine Prozedur darstellt. Jedes AddOn muss diesen Hauptbestandteil aufweisen. Er wird durch die Schlüsselworte begin … end. eingeschlossen.

Prozeduren und Funktionen können eigene Konstanten- und Variablenbereiche haben.

Wo liegt nur der Unterschied zwischen beiden Kontrukten?

Kurz gesagt ist es so: Eine Funktion liefert immer einen Wert zurück, eine Prozedur ist eine Befehlsfolge ohne Rückgabewert.

Als Beispiele seien hier die Cockpit-Befehle cpGetPowerOnSlots() und cpPowerOnSlots() genannt. Die erste meldet, ob der Bahnstrom ein- oder ausgeschaltet ist (Abfrage des Zustands der angeschlossenen Bahnstromrelais). Das Resultat (Rückgabewert) ist entweder True oder False. Damit haben wir es mit einer Funktion zu tun. Der zweite Befehl schaltet die konfigurierten Relais. Das war's auch schon. Es gibt keinen Rückgabewert (Prozedur)

Standardfunktionen und -prozeduren

Jede Sprache beinhaltet einen mehr oder weniger umfangreichen Satz bereits vorhandener Befehle. Die in Cockpit-XP verfügbaren Elemente sind im Dokument Standardfunktionen näher beschrieben.

Cockpit-XP Befehle

Diese speziell nur in Cockpit-XP verfügbaren Sprachelemente sind in der Befehlsreferenz im Detail gelistet.

Weiter geht es mit der Beschreibung des Programmablaufs innerhalb eines Ereignisses (Events).



Start - FAQ - Glossar - Sitemap - Impressum

 
cockpit-xp/addon/programmstruktur.txt · Zuletzt geändert: 2020/11/28 12:14 (Externe Bearbeitung)