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

Ergebnis 1 bis 10 von 10

Thema: Bubblesort von 2000 Produkte

  1. #1
    Registriert seit
    17.10.2013
    Beiträge
    27
    Danke
    7
    Erhielt 0 Danke für 0 Beiträge

    Standard


    Zuviel Werbung?
    -> Hier kostenlos registrieren
    Hallo Zusammen,
    mich würde interessieren, wie das Algorithmus im SCL nur mit IF-Anweisung aussehen wird. ich habe schon ein programm für 40 produkte und dies aber gut geklappt.
    MfG
    LG
    Vokal
    Zitieren Zitieren Bubblesort von 2000 Produkte  

  2. #2
    Registriert seit
    25.11.2008
    Ort
    Westpfalz
    Beiträge
    1.550
    Danke
    187
    Erhielt 212 Danke für 186 Beiträge

    Standard

    Zitat Zitat von Vokal12 Beitrag anzeigen
    Hallo Zusammen,
    mich würde interessieren, wie das Algorithmus im SCL nur mit IF-Anweisung aussehen wird. ich habe schon ein programm für 40 produkte und dies aber gut geklappt.
    MfG
    LG
    Vokal
    Wo ist dein Problem, was mit 40 geht, sollte auch mit 2000 funktionieren, es sei denn deine maximale Zykluszeit wird erreicht.
    and we all support the team (S.King - Die Arena)

  3. #3
    Vokal12 ist offline Neuer Benutzer
    Themenstarter
    Registriert seit
    17.10.2013
    Beiträge
    27
    Danke
    7
    Erhielt 0 Danke für 0 Beiträge

    Standard

    Sorry hatte vergessen zu sagen: mit 40 habe ich mit FOR-Schleife gemacht. dann wollte ich es mit 2000 machen aber Fehlermeldung.

  4. #4
    Registriert seit
    25.11.2008
    Ort
    Westpfalz
    Beiträge
    1.550
    Danke
    187
    Erhielt 212 Danke für 186 Beiträge

    Standard

    Der Vorteil von IF-anweisung, wäre ja ein zyklusübergreifendes Sortieren und sollte nicht schwer zu realisieren sein.
    So ganz ohne Abbruch und Startbedingung einfachster Ansatz:

    Code:
    IF Produkt[i] > Produkt[i+1] 
        THEN Zwischenspeicher := Produkt[i]; 
              Produkt[i] := Produkt[i+1]; 
              Produkt[i+1] := Zwischenspeicher; 
              Unsortiert := TRUE;
    EndIf;
    
    i := i+1;
    
    IF i>=2000
     THEN 
        IF Unsortiert :=  TRUE
          THEN i=0; 
           Unsortiert := FALSE;
        ELSE
            Sortiert := TRUE;
        EndIF;
    EndIF;
    Es gibt aber auch noch andere Algorithmen zum Sortieren mit mehr Code, die aber schneller sind.
    MfG
    and we all support the team (S.King - Die Arena)

  5. Folgender Benutzer sagt Danke zu Sinix für den nützlichen Beitrag:

    Vokal12 (25.11.2013)

  6. #5
    Registriert seit
    22.03.2007
    Ort
    Detmold (im Lipperland)
    Beiträge
    11.716
    Danke
    398
    Erhielt 2.398 Danke für 1.998 Beiträge

    Standard

    Zitat Zitat von Vokal12 Beitrag anzeigen
    Sorry hatte vergessen zu sagen: mit 40 habe ich mit FOR-Schleife gemacht. dann wollte ich es mit 2000 machen aber Fehlermeldung.
    Was hattest du denn für eine Fehler-Meldung ?
    Wie wäre es, wenn du mal deinen Code postest ?

    So ist es m.E. schwer, sinnvolle Ratschläge zu geben ...

    Gruß
    Larry

  7. #6
    Vokal12 ist offline Neuer Benutzer
    Themenstarter
    Registriert seit
    17.10.2013
    Beiträge
    27
    Danke
    7
    Erhielt 0 Danke für 0 Beiträge

    Standard

    REPEAT
    Sort_Change:= False;
    FOR i:=1 TO 2000 BY 1 DO ;
    IF (DB1.Nummer[i]) > (DB1.Nummer[i+1]) THEN
    hilf:=DB1.Nummer[i];
    DB1.Nummer[i]:=DB1.Nummer[i+1];
    DB1.Nummer[i+1]:=hilf;
    Sort_Change:=True;
    END_IF;

    END_FOR;

    UNTIL NOT Sort_Change
    END_REPEAT;

    Der Fehler war mit Zeitzyklus verbunden. ich will am Ende meinen sortierten DB1 in DB2 kopieren.
    MfG
    Vokal

  8. #7
    Registriert seit
    19.06.2003
    Beiträge
    2.200
    Danke
    85
    Erhielt 259 Danke für 175 Beiträge

    Standard

    Für N Datenpunkte wächst der Aufwand für Bubblesort mit n^2.
    Bessere Sortieralgorithmen kommen hier auf n*log2(n).
    Deine innere (die FOR-)Schleife braucht nur beim ersten Mal bis 2000 zu laufen, danach würde jedesmal eins weniger genügen.

    Mußt du deine Daten innerhalb eines Zyklus sortieren?
    Meiner Meinung nach ist es keine gute Idee, da es im Grunde die Echtzeitfähigkeit der SPS aushebelt.
    Es belastet einen einzigen Zyklus mit 4000000 Ausführungen der inneren Schleife!

    Der folgende Code führt eine Operation der inneren Schleife in jedem Zyklus aus:
    Code:
    // anstossZumSortieren: ein Merker, den du einmal setzt, um den Vorgang zu starten.
    IF anstossZumSortieren THEN // initialisieren
      SortierenLaeuft:=true;
      SortChange:=false;
      innereZyklen=:2000;
      i:=0;
      anstossZumSortieren:=false;
    END_IF
    
    
    IF SortierenLaeuft THEN  // Zustand von Sort_Change aus dem letzten Zyklus
    
        IF (DB1.Nummer[i]) > (DB1.Nummer[i+1]) THEN 
                 hilf:=DB1.Nummer[i];
                 DB1.Nummer[i]:=DB1.Nummer[i+1];
                 DB1.Nummer[i+1]:=hilf;
                 Sort_Change:=True;
            END_IF;
               
    i:=i+1; // das ist das i für den nächsten Zyklus
    IF (i>innereZyklen) THEN 
      IF (NOT Sort_Change) THEN SortierenLaeuft:=FALSE; END_IF; // nix mehr zu sortieren;
      i:=0; // wieder bei 0 beginnen
      Sort_Change:=FALSE;
      innereZyklen=:innereZyklen-1;
    END_IF;
    
    END_IF;
    Das braucht dann (n^2-n)/2 oder ungefähr 2 Millionen Zyklen. Wäre also bei 5ms Zykluszeit 100000 Sekunden zugange.
    Wenn das nicht tragbar ist, kann man jetzt den obigen Code in einer Schleife z.B. 1000 mal ausführen.

  9. Folgende 3 Benutzer sagen Danke zu Zottel für den nützlichen Beitrag:

    Ganz (21.07.2014),neon (16.01.2016),Vokal12 (25.11.2013)

  10. #8
    Registriert seit
    19.06.2003
    Beiträge
    2.200
    Danke
    85
    Erhielt 259 Danke für 175 Beiträge

    Standard

    Nachtrag:
    Als Nächstes solltest du überlegen, wie oft sich eigentlich die Daten ändern, die du mühsam sortierst. Wenn der größte Teil gleich bleibt und nur selten etwas dazukommt, ist es besser, die neu hinzukommenden Daten in die sortierten Daten einzusetzen.

  11. Folgender Benutzer sagt Danke zu Zottel für den nützlichen Beitrag:

    Vokal12 (25.11.2013)

  12. #9
    Registriert seit
    25.11.2008
    Ort
    Westpfalz
    Beiträge
    1.550
    Danke
    187
    Erhielt 212 Danke für 186 Beiträge

    Standard

    Zitat Zitat von Zottel Beitrag anzeigen
    Das braucht dann (n^2-n)/2 oder ungefähr 2 Millionen Zyklen. Wäre also bei 5ms Zykluszeit 100000 Sekunden zugange.
    ach du Pessimist

    Nachtrag:
    Als Nächstes solltest du überlegen, wie oft sich eigentlich die Daten ändern, die du mühsam sortierst. Wenn der größte Teil gleich bleibt und nur selten etwas dazukommt, ist es besser, die neu hinzukommenden Daten in die sortierten Daten einzusetzen.
    oder doch Optimist
    and we all support the team (S.King - Die Arena)

  13. #10
    Vokal12 ist offline Neuer Benutzer
    Themenstarter
    Registriert seit
    17.10.2013
    Beiträge
    27
    Danke
    7
    Erhielt 0 Danke für 0 Beiträge

    Standard


    Zuviel Werbung?
    -> Hier kostenlos registrieren
    Thks!!!@ Alle

Ähnliche Themen

  1. Diverse Siemens Produkte
    Von Noah_der_Riese im Forum Suche - Biete
    Antworten: 0
    Letzter Beitrag: 21.04.2013, 10:42
  2. Sortieren von DINT Werten mit Bubblesort Methode
    Von hermann67 im Forum Simatic
    Antworten: 7
    Letzter Beitrag: 20.11.2012, 10:38
  3. Bubblesort in ST
    Von timod79 im Forum Simatic
    Antworten: 6
    Letzter Beitrag: 05.02.2009, 09:07
  4. Wo Siemens Produkte kaufen ?
    Von arena im Forum Stammtisch
    Antworten: 11
    Letzter Beitrag: 20.06.2008, 08:48
  5. Bubblesort
    Von Milo_M im Forum Simatic
    Antworten: 14
    Letzter Beitrag: 05.02.2008, 06:28

Lesezeichen

Berechtigungen

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