# Symboldeklerationen (IEC 61131-3)



## kiestumpe (22 April 2008)

Hallo,

es gibt sicherlich viele Ansätze, Symbolenamen zu erstellen. Ich habe mir grad das IEC-Buch online gezogen, allerdings fehlt genau dieses Kapitel.

Gibt es irgendwelche verbindlichen Vorschriften aus der Norm, wie z.B. den Datentyp mit in die Symbolik einpacken zu lassen?
Die Lesbarkeit leidet dadurch teilweise.

 Hat da einer einen guten Link?

Danke !


----------



## PeterEF (22 April 2008)

Wenn dem keine Vorgaben des Kunden entgegenstehen, verwende ich ähnliches wie das hier:

http://www.cg.informatik.uni-siegen...5_SS/GraPra/material/ungarische_notation.html

Vor allem  Windowsprogrammierern dürfte das bekannt sein...


----------



## MarkusP (22 April 2008)

Hatte vor etwa einem Jahr ähnliches Problem. Ich halte mich ziemlich an den Regelentwurf von 3S.

http://www.3s-software.com/se_data/_filebank/home/caatws/ergebnisse/Guidelines.pdf

Ein etwas ältere Ausgabe hätt ich bei Bedarf als PDF in deutscher Sprache.

Hoffe gedient zu haben,

schönen Abend.


----------



## Kai (22 April 2008)

Den WITO-Standard für STEP 7 finde ich ganz gut:

http://www.wito-ag.ch/download/S7_Standard_WITO.pdf

Gruß Kai


----------



## Kai (22 April 2008)

MarkusP schrieb:


> Ein etwas ältere Ausgabe hätt ich bei Bedarf als PDF in deutscher Sprache.


 
Ich hätte Interesse an der älteren Ausgabe in deutscher Sprache. Könntest Du die PDF-Datei hier in das Forum stellen?

Gruß Kai


----------



## MarkusP (23 April 2008)

Bitte schön.

Hinter dem ganzen steckt wesentlich mehr, ich verwende daraus aber nur was ich auch wirklich für mich benötige. Die englische Version ist jedoch wie schon gesagt aktueller. (V1.47 zu V1.44)

LG


----------



## zotos (24 April 2008)

In der CoDeSys Hilfe (hier 2.3.8.4) findet sich diese Empfehlung der "ungarische Notation" auch:


```
Die Benennung von Variablen soll in allen Applikationen und Bibliotheken 
möglichst angelehnt an die ungarische Notation erfolgen:
Für jede Variable sollte eine sinnvolle, möglichst kurze, 
englische Beschreibung gefunden werden, der Basisname. 
Der jeweils erste Buchstabe eines Wortes des Basisnamens soll groß, 
die übrigen klein geschrieben werden (Bsp.: FileSize). 
Vor diesen Basisnamen werden, entsprechend dem Datentyp der Variable, Präfix(e) in Kleinbuchstaben gehängt.


Datentyp        Untergrenze  Obergrenze  Informations-gehalt Präfix Kommentar                         
BOOL            FALSE        TRUE        1 Bit               x*                                       
                                                             b      reserviert                        
BYTE                                     8 Bit               by     nicht für arithm. Opera
WORD                                     16 Bit              w      nicht für arithm. Opera
DWORD                                    32 Bit              dw     nicht für arithm. Opera
LWORD                                    64 Bit              lw     nicht für arithm. Operationen     
                                                                                                     
SINT            -128         127         8 Bit               si                                       
USINT           0            255         8 Bit               usi                                      
INT             -32768       32,77       16 Bit              i                                        
UINT            0            65,54       16 Bit              ui                                       
DINT            -2147483648  2147483647  32 Bit              di                                       
UDINT           0            4294967295  32 Bit              udi                                      
LINT            -263         263 - 1     64 Bit              li                                       
ULINT           0            264 - 1     64 Bit              uli                                      
                                                                                                     
REAL                                     32 Bit              r                                        
LREAL                                    64 Bit              lr                                       
                                                                                                     
STRING                                                       s                                        
                                                                                                     
TIME                                                         tim                                      
TIME_OF_DAY                                                  tod                                      
DATETIME                                                     dt                                       
DATE                                                         date                                     
ENUM                                     16 Bit              e                         
POINTER                                                      p                                        
ARRAY                                                        a

* bewußt wurde für BOOLsche Variablen x als Präfix gewählt, 
um zum einen eine Abgrenzung zu BYTE zu finden, 
und zum anderen um der Sicht des IEC-Programmierers 
(vgl. Adressierung %IX0.0) entgegenzukommen.
```
Ich selbst gehe diese Empfehlung nicht nach. Ich schaue mir den Quellcode ja fast ausschließlich in der Entwicklungsumgebung an. Und da bekomme ich (bei CoDeSys) den Datentyp als Tooltip angezeigt, auch ob es sich um ein VAR, VAR_INPUT, VAR_OUTPUT, VAR_GLOBAL, usw. wird dort auch gleich verraten. Der Tooltip erscheint beim Editieren und auch im Onlinemodus. Auch bei Step7 bekomme ich diese Informationen in ähnlicher Form im Infofenster angezeigt.
Ich finde Präfixe die den Datentyp und den Gültigkeitsbereich angeben daher nicht erforderlich, stören tun sie mich aber auch nicht.

Variablennamen im allgemeinen sind ein nettes Thema. Da gibt es Abkürzungen und Vermischungen von Deutsch und Englisch in einem Variablennamen das einem die Haare zu Berge stehen. Ich nehme mich da nicht aus.


----------



## marlob (24 April 2008)

zotos schrieb:


> ...
> Ich finde Präfixe die den Datentyp und den Gültigkeitsbereich angeben daher nicht erforderlich, stören tun sie mich aber auch nicht.
> ...


Sehe ich genauso. Wichtig ist, das die Bennenung der Variablen im Programm einheitlich ist.
Der Variablenname sollte auch darauf hinweisen, wofür er gebraucht wird und nicht aus irgendwelchen seltsamen Abkürzungen bestehen. Ob aus dem Namen nur ersichtlich wird ob es ein Word oder Integer ist ist mir persönlich egal.



zotos schrieb:


> ...
> Variablennamen im allgemeinen sind ein nettes Thema. Da gibt es Abkürzungen und Vermischungen von Deutsch und Englisch in einem Variablennamen das einem die Haare zu Berge stehen. Ich nehme mich da nicht aus.
> ...


Ich habe im Moment ein Projekt, das ist von einem Belgier programmiert und von einem Engländer und Niederländer erweitert worden. Jetzt wird das ganze von einem Deutschen (von mir) korrigiert. Also echt interessant, was da so an Variablennamen in verschiedenen Sprachen auftaucht.


----------



## zotos (24 April 2008)

marlob schrieb:


> ...
> Der Variablenname sollte auch darauf hinweisen, wofür er gebraucht wird und nicht aus irgendwelchen seltsamen Abkürzungen bestehen.
> ...



Ich habe mir gerade das PDF von WITO angeschaut das Kai verlinkt hat. Das überzeugt mich überhaupt nicht. 

Also sowas:

```
LT = Lichtaster
LS = Lichtschranke
IN = Initiator 
RS = Reedschalter
usw.
```
... finde ich auch überflüssig.

Meiner Meinung nach sollte der Variablen Namen die Funktion wiederspiegeln und nicht welche Hardware dahinter steckt. Zumal das ja eh nicht zwingend mit dem Programm verbunden ist. Wenn ein Lichttaster gegen eine Lichtschranke ausgetauscht wird weil der Lichttaster Probleme bereitet hat verstehe ich nicht warum ich dann das Programm ändern sollte. Da hat sich ja außer dem Namen nichts geändert.


----------



## marlob (24 April 2008)

zotos schrieb:


> Ich habe mir gerade das PDF von WITO angeschaut das Kai verlinkt hat. Das überzeugt mich überhaupt nicht.
> ...


Das habe ich mir auch mal angeguckt. Meiner Meinung nach taugt das auch nichts. Dann doch lieber die ungarische Notation



zotos schrieb:


> Meiner Meinung nach sollte der Variablen Namen die Funktion wiederspiegeln und nicht welche Hardware dahinter steckt. ...


Das hatte ich mit meiner vorherigen Aussage gemeint
Normalerweise hat eine Maschine/Anlage P&ID-Codes. Die kann man immer gut als Variablennamen benutzen und im Kommentar eine etwas ausführlichere Erläuterung.


----------



## Perfektionist (24 April 2008)

meine Meinung zu WITO: zu detailliert, zu viele mögliche Abkürzungen.

meine Meinung zur ungarischen Notation: warum Time zu tim abkürzen? i=INT braucht man nicht abkürzen - geht nur auf Kosten der Lesbarkeit! (wobei INT bereits eine Abkürzung ist)

meine Meinung zu Symbolnamen: 24 Zeichen reichen mir schon lange nicht mehr :? !!! Heutige Programmierumgebungen sollten mit Leichtigkeit längere Symbole zulassen können (@Siemens: bitte mehr!!! so schreibfaul wie vor zwanzig Jahren bin ich längst nicht mehr).

gut, ob nun eine Variable dann tatsächlich "Digitaler_Eingang_Produkterfassung_Anlagenteil_1_Produktionsstrecke_2_Station_4" heißen soll ... hmmm, ich weiß es nicht ... aber wer gerne abkürzt, soll m.E. sein Programm mit den Abkürzungen coden und anschließend die Abkürzungen mit Suche/Ersetze auf lesbar umstellen (oder aber eine liebe Bitte an Siemens: shortcuts für z.B. "Digitaler_Eingang")


----------



## kiestumpe (25 April 2008)

Zunächst mal vielen Dank für die zahlreichen Anregung an alle.

1. Ungarische Notation:

Ich halte das nicht für zwingend. Gerade im s7-Bereich (und auch teilweise bei anderen Herstellern) lassen sich sowohl Adresse als auch Typ ein/ausblenden.






Perfektionist schrieb:


> meine Meinung zu Symbolnamen: 24 Zeichen reichen mir schon lange nicht



Mir eigentlich schon, allerdings würde ich mir bei:


```
"Digitaler_Eingang_Produkterfassung_Anlagenteil_1_Produktionsstrecke_2_Station_4" heißen soll ... hmmm, ich weiß es nicht ... aber wer gerne abkürzt, soll m.E.
```
Entweder durch Baumstrukturen oder durch Nummernkreise weiterhelfen.Also so frei Schnautze mal, das BMK in eine Struktur kopieren oder das BMK als Symbolnamen und den Rest in den Kommentar packen.


oft:

```
A1P2_4B12 : BOOL ;// Produkterfassung in Anlagenteil1 Produktionsstrecke2 Station4
```
eigentlich imho besser, aber in S7 schlechter unterstützt sind UDT's:

```
Anlage1.Produktionsstrecke2.Station4.Produkterfassung := A1P2_4B12; // Produktsensor
```
Nun, im aktuellen Fall ist's ne B&R, hier klappt das ein/ausblenden nicht überall, besonders im Automation-Basic. 
Was die Wartbarkeit in diesem Fall vorwärts bringt, ist zumindest das Präfix "g" für Global diesem Fall.

B&R hatte mir auch noch was gegeben, hält man sich von Anfang an daran, ist das sicherlich gut. Der Schreiber hatte auf jeden Fall Humor - Homer Simpson kommt auch darin vor  Aber praktiziert wird's eher nicht so.


----------



## marlob (25 April 2008)

Was ich noch wichtig, zumindest bei binären Variablen, finde.
Der Name der Variablen sollte den 1 (High) Zustand wiedergeben.
Also z.B. wenn Variable Notstop 1 ist, dann ist Notstop ausgelöst.
Falls 1 wiedergeben soll, das kein Notstop gedrückt ist, kann man die Variable 
ja Notstop_ok nennen.
Dadurch wird ein Programm auch besser lesbar.


----------



## Perfektionist (25 April 2008)

Das Kapitel 5.2.7 von B&R trifft auf mich genau zu  



marlob schrieb:


> ...
> Der Name der Variablen sollte den 1 (High) Zustand wiedergeben.
> ...


100%  

bei mir heisst das dann z.B. (ach, wo waren noch mal die code-tags?):
	
	



```
ah, hier code:
U "DI_Befehl_Start"
U "DI_Befehl_nicht_Stopp"
... usw
```


----------

