===== Programmstruktur ===== Jedes Programm in Pascal Script oder anderen Programmiersprachen weist bestimmte Bereiche und Strukturen auf. Aufgrund des Umfangs dieses Themas existiert dazu eine eigene [[cockpit-xp:addon:programmstruktur|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. { Ein mehrzeiliger Kommentar steht in geschweiften Klammern } ... 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 [[cockpit-xp:addon:befehlsreferenz:cpgetpoweronslots|cpGetPowerOnSlots()]] und [[cockpit-xp:addon:befehlsreferenz:cppoweronslots|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 [[cockpit-xp:addon:standardfunktionen|Standardfunktionen]] näher beschrieben. ==== Cockpit-XP Befehle ==== Diese speziell nur in Cockpit-XP verfügbaren Sprachelemente sind in der [[cockpit-xp:addon:befehlsreferenz:befehlsreferenz|Befehlsreferenz]] im Detail gelistet. Weiter geht es mit der Beschreibung des [[cockpit-xp:addon:programmablauf|Programmablaufs]] innerhalb eines Ereignisses (Events). \\ ---- [[cockpit-xp:start|Start]] - [[cockpit-xp:faq|FAQ]] - [[cockpit-xp:glossar|Glossar]] - [[cockpit-xp:sitemap|Sitemap]] - [[cockpit-xp:impressum|Impressum]]