# CodeSys Verschiedene INT Werte in einen Ausgang schieben



## c-teg74 (5 August 2011)

Hallo zusammen,

ich versuche gerade mich an der Programmierung einer Wago CPU.
Und versuche gerade unterschiedliche INT Werte unter verschiedenen Freigabe Bedingungen in einen Ausgang/INT Variable zu kriegen. 
z.b.
VAR 1 = 10000
VAR 2 = 20000
VAR 3 = 30000

VAR Ausgang = VAR 1,2, oder 3

Das Problem ist, das er immer den letzten Wert setzt. Und wenn dieser keine Freigabe hat, dann den Wert 0 in den VAR AUSGANG schreibt.
Bei Siemens habe ich mit Datenbausteinen gearbeitet da ging das ohne Probleme. Mit CodeSys bin ich ein wenig am Kämpfen...


Danke im Vorraus für ein paar Tips

Carsten


----------



## MrLeeh (5 August 2011)

Hallo Carsten,


c-teg74 schrieb:


> VAR Ausgang = VAR 1,2, oder 3


damit kann ich leider nicht sehr viel anfangen. Wie sieht denn dein Code aus und welche Programmiersprache verwendest du? Bei ST kannst du das doch sehr gut mit IF THEN lösen.

mfg
MrLeeh


----------



## c-teg74 (5 August 2011)

Sorry ich vergass,

Ich Programmiere im FUP mit ST kenne ich mich leider (noch)nicht aus. Ich fange aber gerade an zu merken das ST bei Codesys doch einiges besser zu lösen geht.
Mein gedanke ist Verischiedene Integer Variablen, in einen Integer Ausgang zu schieben.
Damit will ich einen Analogausgang ansteuern um die Drehzahl eines FU´s zu regeln.

Meine Variablen dazu
PROGRAM Drehzahl_FU
VAR
 Drehzahl_1: INT;
 Drehzahl_2: INT;
 Drehzahl_3; INT;
IST_Drehzahl; INT;
END_VAR

Hast Du vielleicheit ein einfaches IF Then Beispiel? Wäre nett, dann könnte ich mich am WE mal ein wenig in ST einarbeiten. Damit ich vielleicht einfache ST Funktionen selbst hinkriege.

Gruß


----------



## Cerberus (5 August 2011)

Mal als Anstoß:

VAR
  bDrehzahl_gesetzt: BOOL;
END_VAR

IF NOT bDrehzahl_gesetzt THEN
  IST_Drehzahl := Drehzahl_1;
  bDrehzahl_gesetzt = TRUE;
END_IF

IF NOT bDrehzahl_gesetzt THEN
  IST_Drehzahl := Drehzahl_2;
  bDrehzahl_gesetzt = TRUE;
END_IF

IF NOT bDrehzahl_gesetzt THEN
  IST_Drehzahl := Drehzahl_3;
  bDrehzahl_gesetzt = TRUE;
END_IF


----------



## MrLeeh (5 August 2011)

Cerberus schrieb:


> Mal als Anstoß:
> 
> VAR
> bDrehzahl_gesetzt: BOOL;
> ...



Wenn mehrere Bedingungen erfüllt sind greift hier aber immer die letzte Anweisung. Das kannst du umgehen wenn du die folgenden Anweisungen mit Else ausschließt:

If Bedingung 1 Then
;
Else If Bedingung 2 Then (*Wird nur ausgeführt wenn Bedingung1 nicht erfüllt ist*)
;
End_If;
End_If;

mfg
MrLeeh


----------



## bits'bytes (5 August 2011)

MrLeeh schrieb:


> Wenn mehrere Bedingungen erfüllt sind greift hier aber immer die letzte Anweisung. Das kannst du umgehen wenn du die folgenden Anweisungen mit Else ausschließt:
> 
> If Bedingung 1 Then
> ;
> ...


 
Hi,
in diesem Beispiel greift ja immer Drehzahl_1.

Sollte irgendwie so aussehen...


```
if (Drehzahl_wunsch = 1) then
    IST_Drehzahl = Drehzahl_1
else if(Drehzahl_wunsch = 2) then
    IST_Drehzahl = Drehzahl_2
else if(Drehzahl_wunsch = 3) then
    IST_Drehzahl = Drehzahl_3
endif
 
Drehzahl_wunsch = Drehzahl_wunsch or $8000;
```


----------



## MrLeeh (5 August 2011)

bits'bytes schrieb:


> ```
> if (Drehzahl_wunsch = 1) then
> IST_Drehzahl = Drehzahl_1
> else if(Drehzahl_wunsch = 2) then
> ...



Wenn die Doppelpunkte und Semikolons nicht fehlen würden wärs OK , aber ich denke das Prinzip wird deutlich.


----------



## bits'bytes (5 August 2011)

MrLeeh schrieb:


> Wenn die Doppelpunkte und Semikolons nicht fehlen würden wärs OK , aber ich denke das Prinzip wird deutlich.


 
hmm, bin ich faul ?


----------



## gloeru (5 August 2011)

bits'bytes schrieb:


> ```
> if (Drehzahl_wunsch = 1) then
> IST_Drehzahl = Drehzahl_1
> else if(Drehzahl_wunsch = 2) then
> ...



Für genau sowas wurde CASE erfunden...


```
CASE Drehzahl_Wunsch OF
1:
    IST_Drehzahl := Drehzahl_1;
2:
    IST_Drehzahl := Drehzahl_2;

3..5:
  // Bereiche

7,8,9:
  // Einzelne Werte
END_CASE
```
Sieht doch viel übersichtlicher aus, zudem ist garantiert, dass nur ein Wert geschrieben wird...


----------



## c-teg74 (8 August 2011)

Danke,
ihr habt mir sehr geholfen. Hab mich am WE etwas in ST eingearbeitet und klappt soweit ganz.

Gruß Carsten


----------

