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

Ergebnis 1 bis 4 von 4

Thema: S7 Betriebsstunden vergleichen --> Auswahl 2 aus 4

  1. #1
    Registriert seit
    08.07.2013
    Beiträge
    12
    Danke
    7
    Erhielt 0 Danke für 0 Beiträge

    Standard


    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ß
    Zitieren Zitieren S7 Betriebsstunden vergleichen --> Auswahl 2 aus 4  

  2. #2
    Registriert seit
    29.06.2012
    Beiträge
    126
    Danke
    13
    Erhielt 19 Danke für 19 Beiträge

    Standard

    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;
    Geändert von Slaine (11.11.2015 um 17:11 Uhr)

  3. Folgender Benutzer sagt Danke zu Slaine für den nützlichen Beitrag:

    betaark (12.11.2015)

  4. #3
    Registriert seit
    22.06.2009
    Ort
    Sassnitz
    Beiträge
    11.197
    Danke
    926
    Erhielt 3.292 Danke für 2.661 Beiträge

    Standard

    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
    Es ist immer wieder überraschend, wie etwas plötzlich funktioniert, sobald man alles richtig macht.

    FAQ: Linkliste SIMATIC-Kommunikation über Ethernet

  5. Folgender Benutzer sagt Danke zu PN/DP für den nützlichen Beitrag:

    betaark (12.11.2015)

  6. #4
    betaark ist offline Neuer Benutzer
    Themenstarter
    Registriert seit
    08.07.2013
    Beiträge
    12
    Danke
    7
    Erhielt 0 Danke für 0 Beiträge

    Standard


    Zuviel Werbung?
    -> Hier kostenlos registrieren
    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

Ähnliche Themen

  1. Sonstiges Betriebsstunden einer ET200-S aus System auslesen?
    Von PLC-Gundel im Forum Simatic
    Antworten: 4
    Letzter Beitrag: 08.10.2013, 12:18
  2. Vergleichen von Betriebsstunden
    Von MS_SW im Forum CODESYS und IEC61131
    Antworten: 7
    Letzter Beitrag: 18.09.2012, 15:31
  3. Antworten: 10
    Letzter Beitrag: 11.06.2011, 23:19
  4. Bytes aus DB Laden und vergleichen
    Von bluebird277 im Forum Simatic
    Antworten: 1
    Letzter Beitrag: 30.09.2010, 15:10
  5. 2 Arrays aus 2 DBs vergleichen
    Von Günni1977 im Forum Simatic
    Antworten: 3
    Letzter Beitrag: 03.12.2008, 17:14

Stichworte

Lesezeichen

Berechtigungen

  • Neue Themen erstellen: Nein
  • Themen beantworten: Nein
  • Anhänge hochladen: Nein
  • Beiträge bearbeiten: Nein
  •