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:

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