Welcome to our new forum
All users of the legacy CODESYS Forums, please create a new account at account.codesys.com. But make sure to use the same E-Mail address as in the old Forum. Then your posts will be matched.
Close
If you would like to refer to this comment somewhere else in this project, copy and paste the following link:
Anonymous
-
2007-02-06
Originally created by: Bernhard Werner
Hallo Kent,
Sie müssen einen Datentyp definieren. Also auf der linken Seite im Object Organizer das Register Datentyp wählen. Objekt einfügen wählen, als Name STATE_TYPE angeben. Dann den Code einfügen, so wie sie ihn geschrieben haben. Dann können sie den Datentyp überall verwenden, so wie sie es gemacht haben.
Bernhard Werner
If you would like to refer to this comment somewhere else in this project, copy and paste the following link:
Bitte noch eine kurze Nachfrage zu oben gegebener Ablaufsteuerung:
Ist es syntaktisch korrekt innerhalb der Anweisung 'case of' nur die sich ändernden Ausgangsvariablen auszugeben, oder sollten für jeden Zustandsübergang auch sämtliche Ausgangsvariablen gelistet sein?
If you would like to refer to this comment somewhere else in this project, copy and paste the following link:
Anonymous
-
2007-02-09
Originally created by: Bernhard Werner
Hallo Kent,
Syntaktisch korrekt ist es auf jeden Fall. Es ist nur so: in einem Funktionsblock werden die Outputs nur beim Programmstart initialisiert. Die Variablen werden nicht bei jedem Aufruf initialisiert. Das heisst, vermutlich macht es schon Sinn die Variablen immer auf die zu erwartenden Werte zu setzen.
Bernhard Werner
If you would like to refer to this comment somewhere else in this project, copy and paste the following link:
Man kann also sagen, sobald der Code das "Top Module" (PRG) beschreibt ist es korrekt, da die Variablen ständig initialisiert werden, doch kann es zu Problemen kommen sobald der Einsatz als Funktionsblock (FB) gewünscht ist.
Vielen Dank und schönes Wochenende, Gruß
Kent
If you would like to refer to this comment somewhere else in this project, copy and paste the following link:
Habe mich gerade nochmals informiert: Demnach wird die Variablendeklaration einmalig und nur bei Programmstart (Kaltstart) durchlaufen. Ausgangsvariablen die in 'case' wirksam sein sollen sind nach der Deklaration im Programmteil nochmals auszugeben. Diese werden dann mit jedem Takt NEU initialisiert.
Hallo !
Wo muss ich die Zustandsdefinition meines eigens erstellten Datentyps (* TYPE STATE_TYPE : (FUELLEN_T1,FUELLEN_T2,LEEREN_T1,LEEREN_T2);
END_TYPE;*) hinpacken, dass die Beschreibung übersetzt werden kann ?
Vielen Dank ! Kent
QUELLTEXT:
TYPE STATE_TYPE : (FUELLEN_T1,FUELLEN_T2,LEEREN_T1,LEEREN_T2);
END_TYPE;
PROGRAM MAIN
VAR
STATE : STATE_TYPE;
END_VAR
VAR_INPUT
T1LEER : BOOL ;
T1VOLL : BOOL ;
T2LEER : BOOL ;
T2VOLL : BOOL ;
END_VAR
VAR_OUTPUT
VEIN1 : BOOL := 0 ;
VAUS1 : BOOL := 1 ;
VEIN2 : BOOL := 0 ;
VAUS2 : BOOL := 1 ;
STOER : BOOL := 0 ;
END_VAR
CASE STATE OF
FUELLEN_T1 : IF T1VOLL = FALSE THEN
FUELLEN_T2 : IF T2VOLL = FALSE THEN
LEEREN_T2 : IF T2LEER = FALSE THEN
LEEREN_T1 : IF T1LEER = FALSE THEN
END_CASE ;
END_PROGRAM
Originally created by: Bernhard Werner
Hallo Kent,
Sie müssen einen Datentyp definieren. Also auf der linken Seite im Object Organizer das Register Datentyp wählen. Objekt einfügen wählen, als Name STATE_TYPE angeben. Dann den Code einfügen, so wie sie ihn geschrieben haben. Dann können sie den Datentyp überall verwenden, so wie sie es gemacht haben.
Bernhard Werner
Vielen Dank Herr Werner !
Gruß Kent Johnson
Hallo !
Bitte noch eine kurze Nachfrage zu oben gegebener Ablaufsteuerung:
Ist es syntaktisch korrekt innerhalb der Anweisung 'case of' nur die sich ändernden Ausgangsvariablen auszugeben, oder sollten für jeden Zustandsübergang auch sämtliche Ausgangsvariablen gelistet sein?
Minimal:
VAR_OUTPUT
VEIN1 : BOOL := 0 ;
VAUS1 : BOOL := 1 ;
VEIN2 : BOOL := 0 ;
VAUS2 : BOOL := 1 ;
STOER : BOOL := 0 ;
END_VAR
CASE STATE OF
FUELLEN_T1 : IF T1VOLL = FALSE THEN
==============================================
Zum Vergleich:
VAR_OUTPUT
VEIN1 : BOOL := 0 ;
VAUS1 : BOOL := 1 ;
VEIN2 : BOOL := 0 ;
VAUS2 : BOOL := 1 ;
STOER : BOOL := 0 ;
END_VAR
CASE STATE OF
FUELLEN_T1 : IF T1VOLL = FALSE THEN
VAUS1 := 1 ;
VEIN2 := 0 ;
VAUS2:= 1 ;
STOER := 0 ;
VEIN1 := 0 ;
VAUS1 := 1 ;
VEIN2 := 0 ;
VAUS2:= 1 ;
Originally created by: Bernhard Werner
Hallo Kent,
Syntaktisch korrekt ist es auf jeden Fall. Es ist nur so: in einem Funktionsblock werden die Outputs nur beim Programmstart initialisiert. Die Variablen werden nicht bei jedem Aufruf initialisiert. Das heisst, vermutlich macht es schon Sinn die Variablen immer auf die zu erwartenden Werte zu setzen.
Bernhard Werner
Hallo Bernhard,
Man kann also sagen, sobald der Code das "Top Module" (PRG) beschreibt ist es korrekt, da die Variablen ständig initialisiert werden, doch kann es zu Problemen kommen sobald der Einsatz als Funktionsblock (FB) gewünscht ist.
Vielen Dank und schönes Wochenende, Gruß
Kent
Habe mich gerade nochmals informiert: Demnach wird die Variablendeklaration einmalig und nur bei Programmstart (Kaltstart) durchlaufen. Ausgangsvariablen die in 'case' wirksam sein sollen sind nach der Deklaration im Programmteil nochmals auszugeben. Diese werden dann mit jedem Takt NEU initialisiert.
Bsp:
...
VAR_OUTPUT
A : BOOL ;
B : BOOL ;
END_VAR
A:=0;
B:=0;
CASE STATE OF
Z1 : IF Q1 = 1 THEN
...