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

Seite 7 von 8 ErsteErste ... 5678 LetzteLetzte
Ergebnis 61 bis 70 von 72

Thema: Sortierbasutein mit Any Pointer

  1. #61
    Registriert seit
    22.02.2008
    Ort
    Mosel/Schwarzwald
    Beiträge
    25
    Danke
    7
    Erhielt 1 Danke für 1 Beitrag

    Standard


    Zuviel Werbung?
    -> Hier kostenlos registrieren
    Habs grade nochmal kontrolliert, Du hast recht. Die Bausteine stimmen.
    Werd sie wohl beim Downloaden durcheinander gewürfelt haben.
    Zitieren Zitieren Hast wohl recht  

  2. #62
    Registriert seit
    22.02.2008
    Ort
    Mosel/Schwarzwald
    Beiträge
    25
    Danke
    7
    Erhielt 1 Danke für 1 Beitrag

    Standard

    Muss nochmal nachhaken: Wenn ich die Sortierreihenfolge umdrehen will, wie müsste ich da vorgehen? Ich bräuchte den 1.Wert der größer ist als 0 an oberster Position.
    Zitieren Zitieren Andere Sortierreihenfolge?  

  3. #63
    Registriert seit
    30.06.2007
    Ort
    In der Pfalz
    Beiträge
    503
    Danke
    72
    Erhielt 77 Danke für 65 Beiträge

    Standard

    Zitat Zitat von RainerP Beitrag anzeigen
    Muss nochmal nachhaken: Wenn ich die Sortierreihenfolge umdrehen will, wie müsste ich da vorgehen? Ich bräuchte den 1.Wert der größer ist als 0 an oberster Position.
    Jetzt mal ohne groß darüber nachzudenken würde ich sagen da wo auf >D verglichen wird auf <D vergleichen.

  4. #64
    Registriert seit
    22.02.2008
    Ort
    Mosel/Schwarzwald
    Beiträge
    25
    Danke
    7
    Erhielt 1 Danke für 1 Beitrag

    Standard

    Das bringt mir den grössten Wert an unterste Position, und wenn einige Nullwerte dabei sind habe ich die an den ersten Positionen

  5. #65
    Registriert seit
    30.06.2007
    Ort
    In der Pfalz
    Beiträge
    503
    Danke
    72
    Erhielt 77 Danke für 65 Beiträge

    Standard

    Zitat Zitat von RainerP Beitrag anzeigen
    Das bringt mir den grössten Wert an unterste Position, und wenn einige Nullwerte dabei sind habe ich die an den ersten Positionen
    Das ist richtig, du kannst aber auch vor der Überprüfung auf <D die Werte auf 0 prüfen und in diesem Fall sie wie sehr große Werte (den maximal erreichbaren) behandeln und so die Tauschfunktion überspringen. Dann sollten zum Schluss die 0 Werte an den letzten Positionen stehen.

    Noch eine Möglichkeit wäre, auf 0 zu prüfen und wenn ja dort wo eine 0 ist den maximal möglichen Wert (+2147483647) hin zu transferieren.
    Geändert von Steve81 (18.11.2008 um 08:08 Uhr)

  6. #66
    Registriert seit
    22.02.2008
    Ort
    Mosel/Schwarzwald
    Beiträge
    25
    Danke
    7
    Erhielt 1 Danke für 1 Beitrag

    Standard

    Stimmt nicht ganz, hat mich aber auf den (hoffentlich?) richtigen Weg gebracht: Wenn der "Wert 1" 0 ist, muss ich auf jedenfall tauschen.
    Tauschen muss ich überspringen, wenn der "Wert 2" 0 ist.
    Habs mal überarbeitet und probiert, so scheints zu gehen:


    Code:
    Netzwerk 1: Register sichern
     
          L     DBNO                        // DB-Register
          T     #DB_REGISTER
          TAR1  #AR1_REGISTER               // AR1-Register
     
     
    Netzwerk 2: Bubblesort
     
          AUF   #DATENBAUSTEIN              // Datenbaustein
          L     #STARTADRESSE               // Startadresse
          ITD   
          SLD   3
          T     #BEREICHSZEIGER             // Bereichszeiger
          L     #BLOCKANZAHL                // Blockanzahl
          L     1
          -I    
    M01:  T     #SCHLEIFE_1
          L     #BEREICHSZEIGER             // Bereichszeiger
          LAR1  
          L     #SCHLEIFE_1
    M02:  T     #SCHLEIFE_2
     
          L     0
          L     DBD [AR1,P#0.0]             // Wert 1-1
          ==D   
          SPB   M04
          L     0
          L     DBD [AR1,P#8.0]             // Wert 2-1
          ==D   
          SPB   M03
          L     DBD [AR1,P#0.0]             // Wert 1-1
          <D    
          SPBN  M03
    M04:  L     DBD [AR1,P#0.0]             // Wert 1-1
          L     DBD [AR1,P#8.0]             // Wert 2-1
          T     DBD [AR1,P#0.0]             // Wert 2-1 => Wert 1-1
          TAK   
          T     DBD [AR1,P#8.0]             // Wert 1-1 => Wert 2-1
          L     DBD [AR1,P#4.0]             // Wert 1-2
          L     DBD [AR1,P#12.0]            // Wert 2-2
          T     DBD [AR1,P#4.0]             // Wert 2-2 => Wert 1-2
          TAK   
          T     DBD [AR1,P#12.0]            // Wert 1-2 => Wert 2-2
    M03:  L     P#8.0
          +AR1  
          L     #SCHLEIFE_2
          LOOP  M02
          L     #SCHLEIFE_1
          LOOP  M01
     
    Netzwerk 3:  Register wiederherstellen
     
          AUF   DB [#DB_REGISTER]
          LAR1  #AR1_REGISTER
    Die Bausteine hab ich mal angehängt, Bitte mal prüfen ob ich was übersehen habe.
    Angehängte Dateien Angehängte Dateien
    Zitieren Zitieren nicht ganz richtig  

  7. #67
    Registriert seit
    30.06.2007
    Ort
    In der Pfalz
    Beiträge
    503
    Danke
    72
    Erhielt 77 Danke für 65 Beiträge

    Standard

    Zitat Zitat von RainerP Beitrag anzeigen
    Stimmt nicht ganz, hat mich aber auf den (hoffentlich?) richtigen Weg gebracht: Wenn der "Wert 1" 0 ist, muss ich auf jedenfall tauschen.
    Tauschen muss ich überspringen, wenn der "Wert 2" 0 ist.
    Habs mal überarbeitet und probiert, so scheints zu gehen:
    Hallo,
    ja sorry, dass mit dem Tauschen wenn der "Wert1"(DBD [AR1,P#0.0]) 0 ist stimmt natürlich, sonst bleibt der ja einfach stehen wo er ist (hoffe ich habe nicht für zu viel Verwirrung gesorgt).
    Deine Lösung sieht jetzt aber mal sehr vielversprechend aus. Testen kann ichs im Moment leider nicht.

  8. #68
    Registriert seit
    22.02.2008
    Ort
    Mosel/Schwarzwald
    Beiträge
    25
    Danke
    7
    Erhielt 1 Danke für 1 Beitrag

    Standard

    Mal noch ne Frage:
    Hab derzeit noch keine Peripherie ums auszuprobieren und ich denke die Simulation mit PLC-Sim ist hierfür nicht wirklich aussagekräftig.
    Wenn ich bei 100 Datenblöcken ca. 4950 Durchläufe brauch, wäre eine Fertigmeldung, die mir anzeigt "Sortieren abgeschlossen" hilfreich.
    Reicht es hierfür aus, hinter der letzen Schleife ein Bit zu setzen?
    Zweite Frage:
    Wie wirken sich die 4950 Durchläufe auf die Zyklus-Zeit aus?
    Wenn ich das richtig verstehe werden die 4950 Durchläufe in einem Zyklus gemacht oder seh ich das falsch?
    Zitieren Zitieren Fertigmeldung ausgeben  

  9. #69
    Registriert seit
    30.06.2007
    Ort
    In der Pfalz
    Beiträge
    503
    Danke
    72
    Erhielt 77 Danke für 65 Beiträge

    Standard

    Ein Bit nach dem Beenden der letzten Schleife zu setzen sollte ausreichen (z.B. in NW3). Du musst es aber auch irgendwann wieder zurücksetzen.

    Die Auswirkung auf die Zykluszeit hängt von deiner CPU ab, sollte aber nicht dramatisch sein falls dich nicht schon in einem kritischen Bereich bewegst.

    Die Sortierung (also die 4950 Durchläufe) wird in einem Zyklus abgearbeitet.

  10. #70
    Registriert seit
    22.02.2008
    Ort
    Mosel/Schwarzwald
    Beiträge
    25
    Danke
    7
    Erhielt 1 Danke für 1 Beitrag

    Standard


    Zuviel Werbung?
    -> Hier kostenlos registrieren
    Ich stell mir das so vor, das ich dieses Bit als "in-Out" deklariere und die Schleife nur bearbeite wenn das Bit 0 ist. Dann kann ich das Bit von Aussen zurücksetzen und damit die Sortierung anstossen.
    CPU wird ne 319, die sollte damit keine Probleme haben.
    Problematisch wäre das sicher nur wenn die 4950 jedesmal einen Zyklus bräuchten, das wären bei einer Zyklus-Zeit von 5 ms knapp 25 sek.....

Ähnliche Themen

  1. Pointer
    Von OB1 im Forum Simatic
    Antworten: 5
    Letzter Beitrag: 20.02.2009, 17:52
  2. Pointer, was ist das?
    Von mendelfranz im Forum Simatic
    Antworten: 3
    Letzter Beitrag: 14.01.2009, 14:26
  3. DB und Pointer
    Von PhilippL im Forum Simatic
    Antworten: 8
    Letzter Beitrag: 12.09.2007, 07:02
  4. Pointer in SCL
    Von broesel im Forum Simatic
    Antworten: 3
    Letzter Beitrag: 16.05.2007, 11:32
  5. db und pointer
    Von fbeine im Forum Simatic
    Antworten: 26
    Letzter Beitrag: 13.03.2006, 10:02

Lesezeichen

Berechtigungen

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