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

Seite 4 von 8 ErsteErste ... 23456 ... LetzteLetzte
Ergebnis 31 bis 40 von 72

Thema: Sortierbasutein mit Any Pointer

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

    Standard


    Zuviel Werbung?
    -> Hier kostenlos registrieren
    AR1 auf erstes Byte Block1,
    AR2 auf erstes Byte Block2,

    nach einem Vergleichskriterium vergleichen,
    dann verschieben / sortieren falls erfüllt oder nicht erfüllt.

    Soll es so in etwa funktionieren?

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

    Standard

    ja soweit so gut... die frage ist wie ich das mit dem Offset der ja variabel sein muss hinbekomme


    zb .

    L DBB[Ar1,P#0.0]
    LDBB[Ar2,P#4.0]
    <=I


    die 4.0 also 4 byte versatz sollte ich über eine Variable einstellen können

  3. #33
    Registriert seit
    08.08.2007
    Ort
    Dresden
    Beiträge
    9.648
    Danke
    1.059
    Erhielt 2.046 Danke für 1.627 Beiträge

    Standard

    Zitat Zitat von stevexxx Beitrag anzeigen
    ja soweit so gut... die frage ist wie ich das mit dem Offset der ja variabel sein muss hinbekomme
    die 4.0 also 4 byte versatz sollte ich über eine Variable einstellen können
    die einfachste möglichkeit die mir dazu einfällt:

    Code:
          L     #variable1
          SLD   3
          LAR1  
    
          L     DBB [AR1,P#0.0]
          T     #vergleichswert1
    
          L     #variable2
          SLD   3
          LAR1  
    
          L     DBB [AR1,P#0.0]
          T     #vergleichswert2
    
          L     #vergleichswert1
          L     #vergleichswert2
          <=I
          ....
    [SIGNATUR]
    Ironie setzt Intelligenz beim Empfänger voraus.
    [/SIGNATUR]

  4. Folgender Benutzer sagt Danke zu vierlagig für den nützlichen Beitrag:

    stevexxx (11.04.2008)

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

    Standard

    das klingt gut werd ich gliech mals ausprobiern aber wieso schiebst du das ganze um 3??

    thx
    Geändert von stevexxx (11.04.2008 um 12:23 Uhr)

  6. #35
    Registriert seit
    20.06.2003
    Ort
    Sauerland.NRW.Deutschland
    Beiträge
    4.850
    Danke
    78
    Erhielt 800 Danke für 543 Beiträge

    Standard

    wie der anypointer aussieht ist in der FAQ deutlich beschrieben.
    der link dazu ist bereits gefallen.

    für das tauschen der blöcke falls mehr als 1 dwort getauscht werden soll.
    quellzeiger bauen
    zielzeiger bauen

    CALL SFC 20
    SRCBLK := quellzeiger
    RET_VAL:=
    DSTBLK :=P#DB10.DBX 0.0 BYTE 8

    CALL SFC 20
    SRCBLK := zielzeiger
    RET_VAL:=
    DSTBLK :=P#DB10.DBX 8.0 BYTE 8

    CALL SFC 20
    SRCBLK := P#DB10.DBX 8.0 BYTE 8
    RET_VAL:=
    DSTBLK := quellzeiger

    CALL SFC 20
    SRCBLK := P#DB10.DBX 0.0 BYTE 8
    RET_VAL:=
    DSTBLK := zielzeiger
    .
    mfg Volker .......... .. alles wird gut ..

    =>Meine Homepage .. direkt zum Download

    Meine Definition von TIA: Total Inakzeptable Applikation

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

    Standard

    Any zeiger dazu hab ich mir dazu ja schon gebastelt

    das ganze funktioniert mit einmal zwischenspeichern auch und verkürzt somit das programm

    ist wert 1 gößer als wert 2 so wird werd i zwischengespeichert wert 2 in wert 1 geschoben und der zwischengespeicherte wert in wert 2....

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

    Standard

    komm mit meinem proggi nicht mehr weiter....


    bisheriger code
    Code:
          L     #iDB_Nr                     //DB Nummer einlesen
          T     #tDb_Nr                     //temp. speichern
          L     #iStartadresse              //Startadresse laden
          T     #sStartadresse              //statisch abspeichern
          L     #iBlockgroesse              //Lade Sortierbereich
          T     #sBlockgroesse              //statisch abspeichern
          L     #iSave_DB                   //Db Nummer Zwischenspeicher einlesen
          T     #sSave_DB                   //statisch abspeichern
          L     #sBlockgroesse              //Blockoffsteberechnung
          L     P#1.0
          *D    
          T     #tBlockoffset
          LAR1  P##tVergleichsblock1
          L     B#16#10                     //10h für s7
          T     LB [AR1,P#0.0]
          L     B#16#2                      //Typ BYTE
          T     LB [AR1,P#1.0]
          L     #sBlockgroesse              //Anzahl (Wiederholungsfaktor)
          T     LW [AR1,P#2.0]
          L     #tDb_Nr                     //Datenbaustein
          T     LW [AR1,P#4.0]
          L     #sStartadresse              //Startadresse des ersten Bytes
          SLD   3                           //Pointer bauen
          T     LD [AR1,P#6.0]              //Ergebnis in  Anypointer eintragen
          L     B#16#84                     //Speicherbereich (hier DB)
          T     LB [AR1,P#6.0]
          LAR1  P##tVergleichsblock2
          L     B#16#10                     //10h für s7
          T     LB [AR1,P#0.0]
          L     B#16#2                      //Typ BYTE
          T     LB [AR1,P#1.0]
          L     #sBlockgroesse              //Anzahl (Wiederholungsfaktor)
          T     LW [AR1,P#2.0]
          L     #tDb_Nr                     //Datenbaustein
          T     LW [AR1,P#4.0]
          L     #tBlockoffset               //Startadresse des ersten Bytes
          T     LD [AR1,P#6.0]              //Ergebnis in  Anypointer eintragen
          L     B#16#84                     //Speicherbereich (hier DB)
          T     LB [AR1,P#6.0]
          LAR1  P##tSaveBlock
          L     B#16#10                     //10h für s7
          T     LB [AR1,P#0.0]
          L     B#16#2                      //Typ BYTE
          T     LB [AR1,P#1.0]
          L     #sBlockgroesse              //Anzahl (Wiederholungsfaktor)
          T     LW [AR1,P#2.0]
          L     #sSave_DB                   //Datenbaustein
          T     LW [AR1,P#4.0]
          L     0                           //Startadresse des ersten Bytes
          T     LD [AR1,P#6.0]              //Ergebnis in  Anypointer eintragen
          L     B#16#84                     //Speicherbereich (DB)
          T     LB [AR1,P#6.0]
     
     
     
          U     #iStart                     //bei Start
          FP    #tsm1                       //pos. Flanke  Sortieren
          SPBN  M001
          AUF   "DB3 Sortierung"            //Aufruf Daten DB
          L     #sStartadresse              //laden der Anfangsadresse
    M003: LAR1  
          SET                               //Setze VKE 1
          S     #oSort_done                 //Setze Sortierung 1 Wert fertig
          L     #iAnz_Werte                 //Anzahl der Werte laden
          L     1                           // -1
          -I    
    M004: T     #sCount                     //Schleifenzaehler 
          AUF   "DB3 Sortierung"            //Auruf Sortier DB
          L     #sMD1                       //Adresse Vergleichsbyte 1
          T     #tMD1
          SLD   3
          LAR1  
          L     DBB [AR1,P#0.0]
          T     #sVergleichswert1
          L     #tMD2
          SLD   3
          LAR1  
          L     DBB [AR1,P#0.0]
          T     #sVergleichswert2
          L     #sVergleichswert1
          L     #sVergleichswert2
          <=I                               //Vergleichsyte 1 kleiner gleich Vergleichsbyte 2
          SPB   M002
          LAR1  P##tVergleichsblock1
          L     #tMD1                       //Speicherbereich (hier DB)
          T     LD     6                    //Ergebnis in  Anypointer eintragen
          LAR1  P##tVergleichsblock2
          L     #tMD2                       //Speicherbereich (hier DB)
          T     LD     6                    //Ergebnis in  Anypointer eintragen
     
          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
          SET                               //Setze VKE 1
          R     #oSort_done                 //Rücksetze Sortierung 1 Wert fertig
          SPB   M002
    M002: L     #tMD2                       //Vergleichsadresse 2 in Vergleichsadresse 1 transferieren
          T     #tMD1
          T     #sMD1
          L     #tMD2
          L     #sBlockoffset               //  addieren des Blockoffsets zur Adresse des Vergleichsblock2
          +D    
          T     #tMD2
          T     #sMD2
          L     #sCount                     //Schleifenzaehler laden
          LOOP  M004
          UN    #oSort_done                 //Wenn Sortierung fuer 1 Wert nicht fertig
          SPB   M003
    M001: NOP   0

  9. #38
    Registriert seit
    22.03.2007
    Ort
    Detmold (im Lipperland)
    Beiträge
    11.726
    Danke
    398
    Erhielt 2.401 Danke für 2.001 Beiträge

    Standard

    ... was hat das mit dem ursprünglich geschilderten Problem zu tun ...?

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

    Standard

    mit dem ursprünglichen problem ... ja damit hat es zu tun


    also bsb hab einen speicher mit 10 byte


    diese 10 byte teile ich ein in 5 blöcke
    von diesen blöcken vergleiche ich jeweils das erste byte auf ihre größe und verschiebe dann mit blockmove die blöcke

  11. #40
    Registriert seit
    22.03.2007
    Ort
    Detmold (im Lipperland)
    Beiträge
    11.726
    Danke
    398
    Erhielt 2.401 Danke für 2.001 Beiträge

    Standard


    Zuviel Werbung?
    -> Hier kostenlos registrieren

    Ein Block ist 10 Byte groß und davon hast du 10 ...?
    Ist das Byte_1 von Block_1 > Byte_1 von Block_2, dann tauscht du die beiden Blöcke ... so richtig verstanden ...?
    Wenn ja, dann musst du erst Block_1 in einen Zwischen-Puffer schreiben, dann Block_2 in Block_1 und dann den Zwischenpuffer in Block_2 ...

    Gruß
    LL

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