Programmierkonventionen zur Erstellung der IEC61131-3

Die folgenden Programmierkonventionen dienen dazu, Objekte, Variablen und Instanzen von Objekten und Variablen einheitlich zu benennen. Der Code und insbesondere die Schnittstellen von Funktionsblöcken und Funktionen (z.B. in den SPS Bibliotheken) wird für uns und andere leicht lesbar und verständlich. Die Wartung des Codes wird dadurch erleichtert.

Dieses Dokument bezieht sich natürlich nur auf die Erstellung neuer SPS-Bibliotheken. Schon bestehende Bibliotheken werden aus Kompatibilitätsgründen natürlich nicht geändert!!! Für die TwinCAT Anwender und SPS Programmierer ist dieses Dokument als Orientierungshilfe anzusehen, da in der IEC61131-3 Norm diese Programmierkonventionen nicht vorgeschrieben sind.

Alle Libraries die mit TwinCAT ausgeliefert werden oder von der Supplement CD installiert werden können, beginnen mit dem Präfix Tc.

Beispiel: TcUtilities.Lib

Die Bibliotheken für das Laufzeitsystem auf dem PC besitzen die Dateinamenserweiterung *.Lib die Buscontroller-Bibliotheken (BC’s) besitzen dagegen die Dateinamenserweiterung *.Lb6 und zusätzlich die Buchstaben BC am Ende des Bibliotheksnamens.

Beispiel:

TcTempCtrl.Lib

TcTempCtrlBC.Lb6

Bezeichner

Die Bezeichner sollten mit einem einheitlichen Präfix benannt werden, damit der Objekttyp leicht erkennbar ist. Empfohlene Konventionen sind im Folgenden aufgeführt:

Definieren von Objektnamen

Objekt | Präfix | Beschreibung | Beispiel
FUNCTION_BLOCK | FB_ | Funktionsblock | FB_GetData
STRUCT | ST_ | Struktur | ST_BufferEntry
ENUM | E_ | Aufzählungstyp | E_SignalStates
TYPE | T_ | Referenz | T_Nibble
PROGRAM | P_ | Programm | P_Axis
FUNCTION | F_ | Funktion | F_Convert

Generieren der Instanzen von Objekten

Objekt | Präfix | Beschreibung | Instanz | Beispiel
function block | fb | Instanzname vom Funktionsblock | fbGetData | fbGetData();
struct | st | Instanzname der Struktur | stBufferEntry | stBufferEntry.nCounter := 5;
enum | e | Instanz eines Enums | eSignalState | eSignalState := E_STOP;
alias type | kein | Instanzname eines Referenztypes | Nibble | Nibble := 1;

Generieren der Instanzen von Variablen

Typ | Präfix | Beschreibung | Beispiel
SINT, USINT, …, DINT, UDINT, BYTE, WORD, DWORD, LWORD.... | n, i | numeric / integer | nCount, iError
BOOL | b | bit | bSwitch
REAL, LREAL | f | float | fValue
STRING | s | string | sName
TIME | t | time | tDelay
DATE | d | date | dMonday
DATE_AND_TIME | dt | date and time | dtNewYear
ARRAY[...] OF ... | arr | arrays | arrMessages
p | p | pointer | pData

Weitere Präfixe, die ebenfalls benutzt werden können

Präfix | Beschreibung | Beispiel
cb | count of bytes | cbLength
cw | count of words | cwRead

Groß-/Kleinschreibung

Bei den Objektnamen wird das Präfix grundsätzlich groß geschrieben. Trennzeichen zwischen Präfix und Objektname ist der Unterstrich (_). Bei Variablen- und Instanznamen wird das Präfix immer klein geschrieben. Der erste Buchstabe eines Bezeichners wird immer groß geschrieben. Besteht ein Bezeichner aus mehreren Wörtern, so wird der erste Buchstabe eines Wortes immer Groß geschrieben. Ein Trennzeichen (z.B. _ ) zwischen beiden Wörtern sollte nicht verwendet werden (siehe Beispiele oben).

Gültige Zeichen

Die Bezeichner sollten nur die folgenden Buchstaben, Ziffern und Sonderzeichen enthalten

0...9, A...Z, a...z,

Anmerkungen

Alle Bezeichner sollten in englisch angegeben werden.

Versionsüberprüfung

Jede Bibliothek muss eine Funktion enthalten, in dem die folgenden Informationen abgelegt sind:

  • Versionsnummer

  • TwinCAT Version, unter der die Library erzeugt wurde

  • Datum (amerikanisches Format)

  • Programmierer

  • Bemerkungen

Die Versionsnummer muss zur Laufzeit des Programms auslesbar sein. Die Versionsnummer besteht aus drei numerischen Werten. Jeder Wert kann einzeln ausgelesen werden (siehe Beispiel). Damit der Name der Funktion eindeutig ist, enthält dieser den Namen der Bibliothek. Beispiel von der Bibliothek TcBABasic.lib:

FUNCTION F_GetVersionTcBABasic : UINT
VAR_INPUT
       nVersionElement       :       INT;
END_VAR
VAR
END_VAR
(* Version history:
Date          | Version    | created under      | Author          | Remark
----------------------------------------------------------------------------------------
10/01/2001    | 1.0.0      | V2.7.0 (Build 402) | S. Mustermann   | first release
*)

CASE nVersionElement OF
1: (* major number *)
       F_GetVersionTcBABasic := 1;
2: (* minor number *)
       F_GetVersionTcBABasic := 0;
3: (* revision number *)
       F_GetVersionTcBABasic := 0;
ELSE
   F_GetVersionTcBABasic := 16#FFFF;
END_CASE