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

Seite 3 von 8 ErsteErste 12345 ... LetzteLetzte
Ergebnis 21 bis 30 von 72

Thema: Sortierbasutein mit Any Pointer

  1. #21
    Registriert seit
    22.03.2007
    Ort
    Detmold (im Lipperland)
    Beiträge
    11.794
    Danke
    398
    Erhielt 2.417 Danke für 2.013 Beiträge

    Standard


    Zuviel Werbung?
    -> Hier kostenlos registrieren
    So, wie du das realisiert hast vergleichst du 2 Bytes mit einander und tauscht die aus (ggf.).
    Wie steht das Ganze jetzt mit deinem 3-Byte-Gedanken vom Anfang in Verbindung und welcher Sinn steckt dahinter.

    Außerdem ... ich kann in deinem Code-Beispiel keine Schleife und keine Pointer-Erhöhung erkennen ... Liegt aber vielleicht auch an meinem fortgeschrittenen Alter ...

  2. #22
    Registriert seit
    03.03.2008
    Beiträge
    40
    Danke
    9
    Erhielt 0 Danke für 0 Beiträge

    Standard

    hab das 3 byte vergleich... mal zur seite gelegt und fang mit etwas leichterem an...


    also pointer erkennst du keinen >>>> L dbb[ar1,p#0.0] zb.


    ja ich probier mal einen DB welcher mit 10 Byte Werten gefüllt ist zu sortieren


    den code dazu habe ich ja schon gepostet funktioniert aber irgendwie nicth... (eigentlich 0)


    lg steve

  3. #23
    Registriert seit
    09.04.2008
    Beiträge
    50
    Danke
    9
    Erhielt 1 Danke für 1 Beitrag

    Standard

    So kommen wir dem ganzen etwas näher...
    Wo stehen die Werte, ich nehm mal an in einem Array...
    Wie viele Werte sind es, immer gleich viele???

  4. #24
    Registriert seit
    03.03.2008
    Beiträge
    40
    Danke
    9
    Erhielt 0 Danke für 0 Beiträge

    Standard

    hab momentan ein array mit 10 Byte


    programm soll aber variabel gestaltet sein

  5. #25
    Registriert seit
    09.04.2008
    Beiträge
    50
    Danke
    9
    Erhielt 1 Danke für 1 Beitrag

    Standard

    OK, mal ein Anfang,
    nimms mir nicht übel, aber ich glaub du hast noch keinen blassen Schimmer von indirekter Adressierung. Ist ja auch nicht schlimm, jeder hat mal angefangen. Mach dich mal damit vertraut, und dann wird das schon.
    kleines Beispiel:

    Code:
    L  dw#16#84000000
    LAR1
    
    auf [#DBin]
    
    L  B [ar1, p#0.0]
    L  B [ar1, p#1.0]
    ==I
    ...
    Wär jetzt nur mal ein Beispiel wie das erste Byte mit dem zweiten verglichen werden kann, nur mal so als kleiner Anstoss. Aber wie gesagt erst mal mit dem Aufbau des Adressregisters und co vertraut...

  6. #26
    Registriert seit
    22.03.2007
    Ort
    Detmold (im Lipperland)
    Beiträge
    11.794
    Danke
    398
    Erhielt 2.417 Danke für 2.013 Beiträge

    Standard

    Das mit dem DB-Aufruf und dem Register hat Steve schon richtig drin.
    Mit dem Zeiger auf die erste Adresse hapert es aber dann schon.

    Steve hat in seinem Code :
    Code:
    M002: LAR1 P##iStartadresse
    So würde ich es nicht machen.
    Start-Adresse ist ja warscheinlich die Nummer des ersten Bytes ...?

    Also müßte es heissen :
    Code:
    L iStartadresse
    ITD
    T hPointer      // DWORD im TEMP-Bereich
     
    LOOP: L hPointer
    SLD 3
    LAR1
    Für den nächsten Durchlauf der Schleife :
    Code:
    L hPointer
    L 3    // wegen der 3 Byte-Geschichte
    +D
    T hPointer
     
    L hPointer
    L #End_Adresse_Daten
    <D
    SPB Loop
    Versuch das mal mit in deinen Code zu integrieren ...

  7. #27
    Registriert seit
    03.03.2008
    Beiträge
    40
    Danke
    9
    Erhielt 0 Danke für 0 Beiträge

    Standard

    habs schon hinbekommen war nur ein paar kleine Fehler
    zum Thema indirekte Adressierung.. kannte ich mich eigentlich für meine Verhältnisse ziemlich gut aus



    L #iDB_Nr
    T #tDb_Nr
    L #iStartadresse
    T #sStartadresse
    U #iStart
    FP #sm1
    SPBN exit

    AUF DB [#tDb_Nr] //Aufruf Daten DB
    L #sStartadresse
    M001: LAR1
    SET
    S #oSort_done
    L #iAnz_Werte
    L 1
    -I
    next: T #sCount //Schleifenzaehler
    L DBB [AR1,P#0.0]
    L DBB [AR1,P#1.0]
    <=I
    SPB M002
    L DBB [AR1,P#0.0]
    T #tTemp
    L DBB [AR1,P#1.0]
    T DBB [AR1,P#0.0]
    L #tTemp
    T DBB [AR1,P#1.0]
    SET
    R #oSort_done
    SPB M002
    M002: TAR1
    L 8
    +D
    LAR1
    L #sCount
    LOOP next
    UN #oSort_done
    SPB M001
    BE
    exit: NOP 0

    thx für eure Hilfe.....




  8. #28
    Registriert seit
    03.03.2008
    Beiträge
    40
    Danke
    9
    Erhielt 0 Danke für 0 Beiträge

    Standard

    Ok muss doch wieder mit anypointern arbeiten aber nicht zum vergleichen von Blöcken sondern nur zum schieben
    ich soll dabei immer nur das erste Byte vom Block mit dem ertsen BYte vom 2ten Block vergleichen...

    irgendjemand eine Idee??

    code zum verschieben der Blöcke


    Code:
    CALL "BLKMOV" //Vergleichsblock1 Zwischenspeichern
    SRCBLK :=#tVergleichsblock1
    RET_VAL:=#tRetval
    DSTBLK :=#tSaveBlock
     
    CALL "BLKMOV" //Vergleichsblock2 in Vergleichsblock1 schieben
    SRCBLK :=#tVergleichsblock2
    RET_VAL:=#tRetval
    DSTBLK :=#tVergleichsblock1
     
    CALL "BLKMOV" //gespeicherten Vergleichsblock1 in Vergleiochsblock2 schieben
    SRCBLK :=#tSaveBlock
    RET_VAL:=#tRetval
    DSTBLK :=#tVergleichsblock2

  9. #29
    Registriert seit
    09.04.2008
    Beiträge
    50
    Danke
    9
    Erhielt 1 Danke für 1 Beitrag

    Standard

    Du schiebst Block1 nach Block2, und Block2 nach Block1???

    Was willst du eigentlich genau machen? Was vergleichen?

    gruß centrox

  10. #30
    Registriert seit
    03.03.2008
    Beiträge
    40
    Danke
    9
    Erhielt 0 Danke für 0 Beiträge

    Standard


    Zuviel Werbung?
    -> Hier kostenlos registrieren
    die beschreibung steht am anfang vom thread... der unterschied ist nur das ich nicht den gesamten block vergleiche und dann verschiebe sondern nur das erste byte im block mit dem ersten byte vom benachbarten Block und dann erst blockweise schiebe....


    hier der Code für Byteweise sortierung mit Bubblesort
    jedoch soll ich Blöcke vergleichen und entsprechend verschieben

    Code:
     
      L     #iDB_Nr                     //DB Nummer einlesen
          T     #tDb_Nr                     //temp. speichern
          L     #iStartadresse              //Startadresse laden
          T     #sStartadresse              //statisch abspeichern
          L     #iSortierbereich            //Lade Sortierbereich
          T     #ssortierbereich            //statisch abspeichern
          L     P#1.0                       //Lade Bytebereich
          ==I                               //Vergleich ob Sortierbereich in BYTE
          U     #iStart                     //bei Start
          FP    #tsm1                       //pos. Flanke  Sortieren
          SPBN  exit
          AUF   DB [#tDb_Nr]                //Aufruf Daten DB
          L     #sStartadresse              //laden der Anfangsadresse
    M001: LAR1  
          SET                               //Setze VKE 1
          S     #oSort_done                 //Setze Sortierung 1 Wert fertig
          L     #iAnz_Werte                 //Anzahl der Werte laden
          L     1                           // -1
          -I    
    next: T     #sCount                     //Schleifenzaehler 
          L     DBB [AR1,P#0.0]             //Lade Vergleichsbyte 1
          L     DBB [AR1,P#1.0]             //Lade Vergleichsbyte 2
          <=I                               //Vergleichsyte 1 kleiner gleich Vergleichsbyte 2
          SPB   M002
          L     DBB [AR1,P#0.0]             //Lade Vergleichsbyte 1
          T     #tTemp                      //temp. abspeichern
          L     DBB [AR1,P#1.0]             //Lade Vergleichsbyte 2
          T     DBB [AR1,P#0.0]             //transferiere Wert in Vergleichsbyte 1
          L     #tTemp                      //Lade abgespeichertes Vergleichsbyte 1
          T     DBB [AR1,P#1.0]             //transferiere Wert in Vergleichsbyte 2 
          SET                               //Setze VKE 1
          R     #oSort_done                 //Rücksetze Sortierung 1 Wert fertig
          SPB   M002
    M002: TAR1  
          L     P#1.0                       // addieren von 1 BYTE zur Adresse der Vergleichbytes
          +D    
          LAR1  
          L     #sCount                     //Schleifenzaehler laden
          LOOP  next
          UN    #oSort_done                 //Wenn Sortierung fuer 1 Wert nicht fertig
          SPB   M001
    exit: NOP   0
    Geändert von stevexxx (11.04.2008 um 11:23 Uhr)

Ä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
  •