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.
Benennung der SPS-Bibliotheken
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 BCam 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 | fbGet Data | 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