CodeSys Verschiedene INT Werte in einen Ausgang schieben

c-teg74

Level-1
Beiträge
54
Reaktionspunkte
6
Zuviel Werbung?
-> Hier kostenlos registrieren
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
 
Zuviel Werbung?
-> Hier kostenlos registrieren
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ß
 
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
 
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

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
 
Zuviel Werbung?
-> Hier kostenlos registrieren
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

Hi,
in diesem Beispiel greift ja immer Drehzahl_1.

Sollte irgendwie so aussehen...

Code:
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;
 
Code:
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;

Wenn die Doppelpunkte und Semikolons nicht fehlen würden wärs OK :p, aber ich denke das Prinzip wird deutlich.
 
Zuviel Werbung?
-> Hier kostenlos registrieren
Code:
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;

Für genau sowas wurde CASE erfunden...

Code:
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...
 
Danke,
ihr habt mir sehr geholfen. Hab mich am WE etwas in ST eingearbeitet und klappt soweit ganz.

Gruß Carsten
 
Zurück
Oben