Anfängerfrage ST

Dann als Reset

xLevel_1 := FALSE;

In ST gibt es kein Set und Reset, die Variable behält Ihren Wert in FBs solange der Wert nicht geändert wird.
Die TRUE und die FALSE Anweisung musst Du dann halt in je eine If Anweisung tun.
 
also in etwa so:

Code:
IF rmode >=1 AND rmode <2 THEN
    xLevel_1:= TRUE;


    ELSIF rmode >=2 AND rmode <3 THEN
        xLevel_2:= TRUE;
            xLevel_1:= FALSE;
 
aktueller Stand:
Code:
IF rmode >=1 AND rmode <2 THEN
    xLevel_1:= TRUE;
        xLevel_2:= FALSE;
            xLevel_3:= FALSE;
                xLevel_4:= FALSE;
                    xLevel_5:= FALSE;
                        xLevel_6:= FALSE;


    ELSIF rmode >=2 AND rmode <3 THEN
            xLevel_1:= FALSE;
                xLevel_2:= TRUE;
                    xLevel_3:= FALSE;
                        xLevel_4:= FALSE;
                            xLevel_5:= FALSE;
                                xLevel_6:= FALSE;


        ELSIF rmode >=3 AND rmode <4 THEN
                xLevel_1:= FALSE;
                    xLevel_2:= FALSE;
                        xLevel_3:= TRUE;
                            xLevel_4:= FALSE;
                                xLevel_5:= FALSE;
                                    xLevel_6:= FALSE;

            ELSIF rmode >= 4 AND rmode < 5 THEN
                    xLevel_1:= FALSE;
                        xLevel_2:= FALSE;
                            xLevel_3:= FALSE;
                                xLevel_4:= TRUE;
                                    xLevel_5:= FALSE;
                                        xLevel_6:= FALSE;

        ELSIF rmode >=5 AND rmode <6 THEN
                xLevel_1:= FALSE;
                    xLevel_2:= FALSE;
                        xLevel_3:= FALSE;
                            xLevel_4:= FALSE;
                                xLevel_5:= TRUE;
                                    xLevel_6:= FALSE;

    ELSIF rmode >=6 AND rmode <8 THEN
                xLevel_1:= FALSE;
                    xLevel_2:= FALSE;
                        xLevel_3:= FALSE;
                            xLevel_4:= FALSE;
                                xLevel_5:= FALSE;
                                    xLevel_6:= TRUE;

END_IF;

Wie kann ich aber das Problem lösen das bei fallendem "rmode" die "xLevel" nicht wieder zurückgestellt. Dies soll durch eine separate Variable "Reset" geschehen unabhängig von "rmode".
 
Zuletzt bearbeitet:
Hallo coldice,

sinnvoll ist es sicherlich Variablen möglichst Zentral an einem Ort mit einer Bedingung zu verknüpfen.
So siehst du direkt unter welcher Bedingung, welcher Zustand besteht, ohne lange das Programm zu durchsuchen.

Code:
// Mode 1
IF rmode = 1 THEN
    xLevel_1 := TRUE;
ELSE
    xLevel_1 := FALSE;
END_IF;

// Mode 2
IF rmode = 2 THEN
    xLevel_2 := TRUE;
ELSE
    xLevel_2 := FALSE;
END_IF;

// Mode 3
IF rmode = 3 THEN
    xLevel_3 := TRUE;
ELSE
    xLevel_3 := FALSE;
END_IF;

// Mode 4
IF rmode = 4 THEN
    xLevel_4 := TRUE;
ELSE
    xLevel_4 := FALSE;
END_IF;

// Mode 5
IF rmode = 5 THEN
    xLevel_5 := TRUE;
ELSE
    xLevel_5 := FALSE;
END_IF;

// Mode 6
IF rmode = 6 THEN
    xLevel_6 := TRUE;
ELSE
    xLevel_6 := FALSE;
END_IF;
 
Zuviel Werbung?
-> Hier kostenlos registrieren
Das soll es aber nicht. s.o.
Geht "rmode" rückwärts soll sich "xLevel" nicht mehr ändern. "xLevel" soll durch eine separate Variable "RESET" auf false gesetzt werden.
 
Zuletzt bearbeitet:
Mal am Rande...

rmode ist keine Reahlzahl, oder? (entweder 1 oder 2 aber nie 1.3...)
dann ist das >=1 und <2 nix anderes als ein Vergleich auf =1

Wago... hat das ja bereits übersichtlich dargestellt.

Das soll es aber nicht...
???

bezieht sich auf...?
 
Hallo coldice,

das ging aus deinem Beispielcode so nicht hervor. Ich habe nur die gleiche Funktionalität abgebildet.
Also hier nochmal die von dir beschriebene:

Code:
rMode: REAL:= 0.0;
xLevel_1: BOOL:= FALSE;
xLevel_2: BOOL:= FALSE;
xLevel_3: BOOL:= FALSE;
xLevel_4: BOOL:= FALSE;
xLevel_5: BOOL:= FALSE;
xLevel_6: BOOL:= FALSE;
xReset: BOOL:= FALSE;

// Level 1
IF rMode >= 1.0 THEN
    xLevel_1 := TRUE;
END_IF;

IF xReset THEN
    xLevel_1 := FALSE;
END_IF;


// Level 2
IF rMode >= 2.0 THEN
    xLevel_2 := TRUE;
END_IF;

IF xReset THEN
    xLevel_2 := FALSE;
END_IF;


// Level 3
IF rMode >= 3.0 THEN
    xLevel_3 := TRUE;
END_IF;

IF xReset THEN
    xLevel_3 := FALSE;
END_IF;


// Level 4
IF rMode >= 4.0 THEN
    xLevel_4 := TRUE;
END_IF;

IF xReset THEN
    xLevel_4 := FALSE;
END_IF;


// Level 5
IF rMode >= 5.0 THEN
    xLevel_5 := TRUE;
END_IF;

IF xReset THEN
    xLevel_5 := FALSE;
END_IF;


// Level 6
IF rMode >= 6.0 THEN
    xLevel_6 := TRUE;
END_IF;

IF xReset THEN
    xLevel_6 := FALSE;
END_IF;
 
Zuletzt bearbeitet:
Zurück
Oben