Zuviel Werbung? - > Hier kostenlos beim SPS-Forum registrieren

Results 1 to 7 of 7

Thread: mehrere Werte vergleichen

  1. #1
    Join Date
    27.03.2019
    Location
    Berlin
    Posts
    7
    Danke
    4
    Erhielt 0 Danke für 0 Beiträge

    Default


    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.
    Last edited by Albion; 17.04.2019 at 11:35.
    Reply With Quote Reply With Quote mehrere Werte vergleichen  

  2. #2
    Join Date
    19.02.2015
    Location
    Hamburg
    Posts
    71
    Danke
    11
    Erhielt 11 Danke für 8 Beiträge

    Default

    Wenn das immer 2 x 10 Werte sind kannst du sie doch in zwei Arrays schreiben und dann eine for Schleife drauf loslassen.

  3. #3
    Albion's Avatar
    Albion is offline Neuer Benutzer
    Themenstarter
    Join Date
    27.03.2019
    Location
    Berlin
    Posts
    7
    Danke
    4
    Erhielt 0 Danke für 0 Beiträge

    Default

    es sind imer zwei Werte, aber es ist ein Array[1..10, 0..1] of Real, FOR braucht aber INT...

  4. #4
    Join Date
    19.02.2015
    Location
    Hamburg
    Posts
    71
    Danke
    11
    Erhielt 11 Danke für 8 Beiträge

    Default

    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
    Last edited by mek_meik; 17.04.2019 at 12:59.

  5. #5
    Albion's Avatar
    Albion is offline Neuer Benutzer
    Themenstarter
    Join Date
    27.03.2019
    Location
    Berlin
    Posts
    7
    Danke
    4
    Erhielt 0 Danke für 0 Beiträge

    Default

    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

    Quote Originally Posted by mek_meik View Post
    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
    Last edited by Albion; 17.04.2019 at 13:17.

  6. #6
    Join Date
    19.02.2015
    Location
    Hamburg
    Posts
    71
    Danke
    11
    Erhielt 11 Danke für 8 Beiträge

    Default

    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.
    Last edited by mek_meik; 17.04.2019 at 13:22.

  7. #7
    Join Date
    19.02.2015
    Location
    Hamburg
    Posts
    71
    Danke
    11
    Erhielt 11 Danke für 8 Beiträge

    Default


    Zuviel Werbung?
    -> Hier kostenlos registrieren
    Quote Originally Posted by Albion View Post


    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.

Similar Threads

  1. TIA Werte vergleichen
    By jurgen_wein in forum Simatic
    Replies: 12
    Last Post: 16.04.2019, 12:12
  2. Step 7 Werte in AWL vergleichen
    By Japapa10 in forum Simatic
    Replies: 11
    Last Post: 21.11.2017, 10:02
  3. Werte in DB vergleichen und wegspeichern
    By anne in forum Simatic
    Replies: 28
    Last Post: 02.07.2012, 11:18
  4. 3 Werte vergleichen
    By chipset in forum Simatic
    Replies: 3
    Last Post: 24.04.2012, 21:19
  5. 8 Integer Werte vergleichen
    By HarryH in forum Simatic
    Replies: 6
    Last Post: 20.09.2011, 08:00

Tags for this Thread

Bookmarks

Posting Permissions

  • You may not post new threads
  • You may not post replies
  • You may not post attachments
  • You may not edit your posts
  •