Step 7 S7 Betriebsstunden vergleichen --> Auswahl 2 aus 4

betaark

Level-1
Beiträge
13
Reaktionspunkte
0
Zuviel Werbung?
-> Hier kostenlos registrieren
Hallo zusammen,
ich habe die Betriebsstunden von 4 Pumpen erfasst.
Nun möchte ich wissen welche Reihenfolge diese haben anhand der Betriebsstunden.

Ich hab mich schon ein wenig hier in vorhandenen Threads eingelesen und kam auf das Thema Bubblesort.
Mit Bubblesort habe ich die Betriebsstunden schon sortiert, allerdings erhalte ich als Ergebnis hier ja nur die Sortierung nach der Größe der Betriebsstunden. Nachher weiß ich ja nicht mehr welche Betriebsstunden zu welcher Pumpe gehören.

Bsp.:
Pumpe 1: 4 Stunden
Pumpe 2: 8 Stunden
Pumpe 3: 3 Stunden
Pumpe 4: 5 Stunden

Nach Bubblesort erhalte ich dann folgendes Ergebnis
Rang 1: 3 Stunden
Rang 2: 4 Stunden
Rang 3: 5 Stunden
Rang 4: 8 Stunden

Ich stelle mir aber folgendes Ergebnis vor:
Pumpe 1: Rang 2
Pumpe 2: Rang 4
Pumpe 3: Rang 1
Pumpe 4: Rang 3

Mir fehlt aber momentan die Idee wie ich das realisieren kann.

Gruß
 
Man könnte z.B. eine Struktur anlegen und über die Betriebsstunden in der Struktur sortieren...

Code:
Pumpen : ARRAY [0..3] OF STRUCT
   Pumpe : INT;
   Betriebsstunden : DINT;
END_STRUCT;
 
Zuletzt bearbeitet:
Zuviel Werbung?
-> Hier kostenlos registrieren
In die "Rangliste" mußt Du die Motornummer bzw. den -Index einsortieren, nicht die Betriebsstunden.

Vielleicht wäre auch diese Ergebnis-Anordnung geeignet:
Rang 1: Pumpe 3
Rang 2: Pumpe 1
Rang 3: Pumpe 4
Rang 4: Pumpe 2

Vermutlich hilft Dir diese Diskussion auf die Sprünge oder Du benutzt mal die Forumsuche nach Bubblesort.

Harald
 
Danke für eure Tipps.
Hab es jetzt wie folgt hinbekommen.

Scheint auch zu funktionieren :)

Code:
VAR_INPUT
    Sortier_Eingang: ARRAY[1..4] OF STRUCT
        Antriebsnummer : INT;
        Betriebsstunden : DINT;
    END_STRUCT;
END_VAR


VAR_TEMP
    tauschen : BOOL;
    index, hilfsantriebsnummer, x : INT;
    hilfsbetriebsstunden : DINT;
END_VAR


VAR_OUTPUT
    Sortier_Ausgang: ARRAY[1..4] OF STRUCT
        Antriebsnummer : INT;
        Betriebsstunden : DINT;
    END_STRUCT;
END_VAR


(* Arbeitsvariablen vorbelegen *)
FOR x:=1 TO 4 BY +1 DO
    Sortier_Ausgang[x].Antriebsnummer := Sortier_Eingang[x].Antriebsnummer;
    Sortier_Ausgang[x].Betriebsstunden := Sortier_Eingang[x].Betriebsstunden;
END_FOR;




    REPEAT
        tauschen := false;
            FOR index := 4 TO 2 BY -1 DO
                IF Sortier_Ausgang[index-1].Betriebsstunden > Sortier_Ausgang[index].Betriebsstunden
                    THEN
                        // Werte aus xxx.[Index] sichern
                        hilfsbetriebsstunden := Sortier_Ausgang[index].Betriebsstunden ;
                        hilfsantriebsnummer  := Sortier_Ausgang[index].Antriebsnummer ;
                        // index = index-1
                        Sortier_Ausgang[index].Betriebsstunden := Sortier_Ausgang[index-1].Betriebsstunden ;
                        Sortier_Ausgang[index].Antriebsnummer := Sortier_Ausgang[index-1].Antriebsnummer ;
                        
                        Sortier_Ausgang[index-1].Betriebsstunden := hilfsbetriebsstunden;
                        Sortier_Ausgang[index-1].Antriebsnummer :=    hilfsantriebsnummer;                      
                        
                        tauschen := TRUE;
                END_IF;
            END_FOR;
        UNTIL NOT tauschen
        END_REPEAT;     
END_FUNCTION_BLOCK
 
Zurück
Oben