mehrere Werte vergleichen

Albion

Level-1
Beiträge
16
Reaktionspunkte
0
Zuviel Werbung?
-> Hier kostenlos registrieren
Hallo zusammen,

ich benutze LINEAR_INT aus der Oscat Bibliothek. Nun möchte ich überprüfen, ob die XY Werte (hier der Einfachheitshalber a1 a2 a3) nacheinander wirklich größer sind und ggf. einen Fehler ausgeben. Gedacht hatte ich folgendes, geht aber leider nicht:

Code:
IF a1 < a2 <a3 THEN
out := TRUE;
ELSE
...
END_IF

folgender Ansatz wäre mir zu aufwendig, da ich im Projekt insgesamt zwei mal 10 Werte vergleichen möchte:
Code:
IF (a1<a2) OR (a1<a3) OR (a2<a3) THEN

wahrscheinlich gibt es eine elegante Lösung, habe sie aber noch nicht gefunden.
 
Zuletzt bearbeitet:
Wenn das immer 2 x 10 Werte sind kannst du sie doch in zwei Arrays schreiben und dann eine for Schleife drauf loslassen.
 
Das INT beim FOR sind die Schritte, also der Index von deinem Array, nicht der Wert der in diesem steht.

Code:
VAR	Feld : ARRAY[1..10] OF REAL;
	index_array : INT;
	Fehler : BOOL := FALSE;
END_VAR

FOR index_array :=1 TO 10 BY 1 DO
	IF(Feld[index_array] > 10)
		THEN
			Fehler := TRUE;
	END_IF
END_FOR

Hier mal ein ganz dummes Beispiel mit einem eindimensionalen ARRAY OF REAL
 
Zuletzt bearbeitet:
oh ha, mit FOR habe ich noch nichts gemacht, aber so ist mein Beispiel:

Code:
VAR
    a1: ARRAY[0..2,0..1] OF REAL;
    ste: INT;
    out: BOOL;
    alarm: BOOL;
    OK: BOOL;
END_VAR

FOR ste:=0 TO 1 DO
    IF a1[ste,0] < a1[ste+1,0] THEN
        out:=TRUE;
     ELSE
        alarm:=TRUE;
    END_IF
END_FOR

OK:=(out OR OK) AND NOT alarm;

ist nur noch das Problem, das er die Schleife bei jeder Eingabe (Änderung des Array A1) neu durch fahren soll

Das INT beim FOR sind die Schritte, also der Index von deinem Array, nicht der Wert der in diesem steht.

Code:
VAR    Feld : ARRAY[1..10] OF REAL;
    index_array : INT;
    Fehler : BOOL := FALSE;
END_VAR

FOR index_array :=1 TO 10 BY 1 DO
    IF(Feld[index_array] > 10)
        THEN
            Fehler := TRUE;
    END_IF
END_FOR

Dann würde bei einem Index mit einem Wert größer 10 Fehler auf TRUE gehen oder? Ich möchte ja ARRAY[1] < ARRAY[2] usw vergleichen
 
Zuletzt bearbeitet:
Zuviel Werbung?
-> Hier kostenlos registrieren
Du fragst jetzt immer nur eine Spalte deines Arrays ab.

Du müsstest a1[ste_1,ste_2] haben und dann mit 2 FOR - Schleifen arbeiten.


Edit:

Du hast die Elemente

Code:
a1[0,0]
a1[0,1]
a1[1,0]
a1[1,1]
a1[2,0]
a1[2,1]

Jetzt könntest du dir 2 INT anlegen um das Feld zu durchlaufen, nennen wir sie mal i und k.

Dann würde ich

a1[i,k] durchsuchen, in der äußeren FOR Schleife i laufen lassen von 0 bis 2. In der FOR Schleife eine weitere FOR Schleife in der k von 0 bis 1 läuft.
 
Zuletzt bearbeitet:
Dann würde bei einem Index mit einem Wert größer 10 Fehler auf TRUE gehen oder? Ich möchte ja ARRAY[1] < ARRAY[2] usw vergleichen


Das war nur ein Beispiel wie man ein Array durchläuft. Wann man das Array durchsuchen möchte, wie oft und wie man wieder rauskommt musst du dir überlegen.
 
Zurück
Oben