Programming conventions for creating the IEC61131-3

The following programming conventions are used for naming objects, variables and instances of objects and variables in a standardised fashion. This will make the code and particularly the interfaces of function blocks and functions (e.g. in the PLC libraries) easily legible and comprehensible for us and for others. Code maintenance becomes easier. 

It goes without saying that this document only refers to the creation of new PLC libraries. For compatibility reasons, existing libraries are, of course, not changed!!! For TwinCAT users and PLC programmers, this document should be seen as a guideline since these programming conventions are not specified in the IEC61131-3 standard.

Naming of the PLC libraries

All libraries that are supplied with TwinCAT or can be installed from the Supplement CD start with the prefix Tc.

Example: TcUtilities.Lib

The libraries for the PC runtime system have the extension *.Lib, the Bus Controller libraries(BCs)have the extension *.Lb6 and additionally the letters BC at the end of the library name. 

Example:

TcTempCtrl.Lib

TcTempCtrlBC.Lb6 

Identifier

The identifier should be named with a uniform prefix, so that the object type can easily be recognised. The recommended conventions are listed below:  

Definition of object names

Object

Prefix

Description

Example

FUNCTION_BLOCK

FB_

Function Block

FB_GetData

STRUCT

ST_ 

Structure

ST_BufferEntry

ENUM

E_ 

Type of Enumeration

E_SignalStates

TYPE

T_

Reference

T_Nibble

PROGRAM

P_

Program

P_Axis

FUNCTION

F_

Function

F_Convert

Generating instances of objects

Object

Prefix

Description

Instance

Call example

function block 

fb

Instance name from function block  

fbGetData

fbGetData();

struct 

st

Instance name of the structure  

stBufferEntry

stBufferEntry.nCounter := 5;

enum 

e

Enum instance

eSignalState

eSignalState := E_STOP;

alias type

none

Instance name of a reference type  

Nibble

Nibble := 1;

Generating instances of variables

Type

Prefix

Description

Example

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

Other prefixes that may also be used

Prefix

Description

Example

cb

count of bytes

cbLength

cw

count of words

cwRead

Upper / lower case

The object name prefix will always be upper case. Underscore (_) is used as a separator between prefix and object name. For variable and instance names, the prefix will always be lower case. The first letter of an identifier will always be upper case. If an identifier consists of several words, the first letter of a word will always be upper case. Separators (e.g. _ ) between the two words should not be used (see examples above).

Valid characters

The identifiers should only contain the following letters, digits and special characters:

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

Remarks

All identifiers should be specified in English.  

Version check

Each library must contain a function in which the following information is stored:

The version number must be readable during program run-time. The version number consists of three numeric values. Each value can be read individually (see example). In order to make the function name unambiguous, it will contain the name of the library. Example from the library 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