# Vollständige Operatorenliste für TwinCat



## Gerri (17 Juni 2009)

Hallo,
ich bin heute in TwinCat auf viele operatoren für ST gestossen die nicht in der Hilfe zu finden sind. Kennst jemand einen Link für eine vollständige operatorenliste?

Im Augenblick würde es mir auch schon weiterhelfen, wenn mir jemand einen Tip für "Sprünge" in ST gibt!
gruss
Gerald


----------



## bonatus (17 Juni 2009)

Hallo,

soweit ich weiß gibt es keine Sprünge, man könnte sich nur mit IF Anweisungen behelfen.

Eine komplette Liste der ST-Operatoren sind in der Eingabehilfe zu finden. Einfach im ST-Editor die Taste F2 drücken und im linken Feld "ST-Operatoren" bzw. "ST-Schlüsselwort" auswählen.

gruß bonatus


----------



## Gerri (17 Juni 2009)

Danke,
leider kenne ich einige nicht und würde gerne wissen was sich dahinter verbirgt!


----------



## bonatus (17 Juni 2009)

Hallo,

einfach das Schlüsselwort eingeben und dann mit F1 Hilfe aufrufen.


----------



## Gerri (17 Juni 2009)

funkt nicht... als Beispiel - ich hab den Operator Move und will wissen was der macht.
Ich drücke F2, füge ihn ein oder wähle den Befehl an und drücke F1. Und schon komme ich zur allgemeinen Hilfe.
Hier finde ich nichts über den Move Operator.


----------



## trinitaucher (17 Juni 2009)

http://infosys.beckhoff.com/index.p...rol/html/tcplcctrl_iec_operators_overview.htm


----------



## bonatus (17 Juni 2009)

OK-stimmt. 

Hab auch nichts in der Hilfe gefunden.

In CoDeSys steht in der Hilfe folgendes darüber:
MOVE:
Arithmetischer IEC Operator:  Zuweisung einer Variablen auf eine andere Variable eines entsprechenden  Typs.

Ich denke, das wurde einfach so von CoDeSys übernommen aber in der Hilfe nicht eingbaut.

Der Operator ist desweiteren ohne jegliche Nutzen für die Programmierung.

gruß bonatus​


----------



## trinitaucher (17 Juni 2009)

bonatus schrieb:


> MOVE:
> Arithmetischer IEC Operator:  Zuweisung einer Variablen auf eine andere Variable eines entsprechenden  Typs.
> 
> Der Operator ist desweiteren ohne jegliche Nutzen für die Programmierung.​


stimmt:

```
var2 := var1;
```


----------



## zotos (17 Juni 2009)

Keine Ahnung ob man in ST Sprünge programmieren kann, aber verwenden sollte man diese eh nicht. Sprünge wie sie in AWL verwendet werden sind der Tod jeder strukturierten Programmierung. 
Also angenommen die IEC sieht für ST keine Sprünge vor würde sich Edsger Dijkstra sicher freuen (wenn er denn noch leben würde).



bonatus schrieb:


> Hallo,
> 
> soweit ich weiß gibt es keine Sprünge, man könnte sich nur mit IF Anweisungen behelfen.
> ...



Außer IF sollte man noch CASE als Verzweigung erwähnen. Sprünge werden ja aber auch für schleifen verwendet. IMHO sind FOR-Schleifen bevorzugen da diese wenn man keinen groben Schnitzer macht sich nicht so schnell in Endlosschleifen verwandeln. WHILE und REPEAT-Schleifen können zwar auch sehr nützlich sein aber hier ist die Abbruchbedingung immer zu berücksichtigen.

Um noch mal auf die CASE Verzweigung zurück zu kommen hier empfieht es sich fast immer auch den Defautfall "ELSE" zu berücksichtigen.


----------



## Werner29 (18 Juni 2009)

Ich denke auch: wer in ST Sprünge braucht macht irgendwas falsch.
Es ist im übrigen tatsächlich so, dass das die Norm so vorsieht. 

Weil das weiter oben im Thread angesprochen wurde: der MOVE Operator macht nur in Verbindung mit KOP und EN-Eingang Sinn.
Es sind aber alle Operatoren in allen Sprachen verfügbar und daher darf man auch in ST 
a := MOVE(b); 
schreiben, wenn es einen glücklich macht. Warum der Eintrag in der Hilfe bei Twincat nicht auftaucht kann ich auch nicht sagen.
In der Codesys-Hilfe gibt es jedenfalls die vollständige Liste der Operatoren.


----------



## MasterOhh (18 Juni 2009)

Ich kenn nur memmove und das mach schon sinn 

Mit Schleifen, insbesondere While und Repeat sollten man in Twincat aber allgeimein ganz ganz vorsichtig sein. IdR sind sind nicht nötig weil der Code eh zyklisch durchgerödelt wird. Laut meiner Erfahrung provozieren sie geradezu Abstürze der SPS.


----------



## MSB (19 Juni 2009)

@MasterOhh
Da ich jetzt mal nicht davon ausgehe, das TwinCat bei Schleifen irgendwelche Bugs hat,
kann man bei deinem "provozieren sie geradezu Abstürze der SPS", davon ausgehen,
das der Programmierer wohl nicht so wirklich wusste, was er da eigentlich macht,
was naturgemäß vor allem für WHILE und REPEAT gilt.

Mfg
Manuel


----------



## MasterOhh (19 Juni 2009)

Das Problem ist einfach mal die Zykluszeit. Twincat versucht die Schleife innerhalb eines Zyklus abzuarbeiten. Wenn das nicht klappt wirds hässlich. So zumindest hatte mir das der Support von Beckhoff erklärt als wir damit mal Probleme hatten. Uns wurde explizit davon abgeraten While oder Repeat Schleifen zu verwenden. Und wie gesagt, sind die auch unnötig.


----------



## MSB (19 Juni 2009)

MasterOhh schrieb:


> Das Problem ist einfach mal die Zykluszeit. Twincat versucht die Schleife innerhalb eines Zyklus abzuarbeiten. Wenn das nicht klappt wirds hässlich. So zumindest hatte mir das der Support von Beckhoff erklärt als wir damit mal Probleme hatten. Uns wurde explizit davon abgeraten While oder Repeat Schleifen zu verwenden. Und wie gesagt, sind die auch unnötig.



Genau das meinte ich mit:
"Das der Programmierer eigentlich nicht so genau weiß was er damit eigentlich fabriziert."
Danke das du das hiermit nochmal bestätigt hast.

Das liegt aber nicht an Beckhoff/Twincat/Codesys.


----------



## MarkusP (19 Juni 2009)

*Schleifen*

Was spricht gegen WHILE und REPEAT ? Ich verwende das sehr oft, nun ja, vielleicht weiß ich was ich damit tue. Kann Euch nicht ganz folgen. Schleifen die so lange dauern, dass TwinCAT abstürzt? Dann weiß derjenige wirklich nicht was er tut... Dafür habe ich seit immer schon GOTO bei BASIC vor 20 Jahren schon gehaßt. Überigens, es gibt Abbruchbedingungen aus Schleifen...

PS: 
Man sollte beim Programmieren generell wissen was man tut.

Schönes WE

Markus.


----------



## trinitaucher (20 Juni 2009)

Solange man einfache und "sichere" Abbruchbedingungen nutzt, kommt man auch mit WHILE oder REPEAT zurecht.

Aber oftmals sind Abbruchbedindungen ja an berechnete Ergebnisse geknüpft. Wehe wenn dann mal ein nicht einkalkulierter Fall eintritt 

Daher verwende ich als "Schleifen" meistens nur FOR.
Ansonsten arbeite ich gern mit selbstinkrementierenden Zählern (i := i+1) zusammen mit IF/ELSE.
Vorteil: Man kann die Steuerung damit nicht abschießen.


----------



## MarkusP (20 Juni 2009)

@Trinitraucher
Stimme Dir voll und ganz zu, ich wollte mich nur gegen die generelle Verdammung von WHILE und REPEAT aussprechen.

Schönes WE


----------



## Fx64 (21 Juni 2009)

Hallo,

ist nichts gegen WHILE und REPEAT zu sagen! Man muß eben wissen (wie an vielen anderen Stellen auch), was man tut!

Viele Grüße


----------

