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

Ergebnis 1 bis 5 von 5

Thema: Probleme mit Any Pointer

  1. #1
    Registriert seit
    17.03.2014
    Beiträge
    3
    Danke
    0
    Erhielt 0 Danke für 0 Beiträge

    Frage


    Zuviel Werbung?
    -> Hier kostenlos registrieren
    Hallöchen !!

    ich habe ein kleines problemchen ... (was auch sonst)....

    Ich habe ein FIFO geschrieben mit einer "reset funktion" .... Wenn der Anlagenbediener den Reset-Button drückt soll der entsprechende Eintrag (der Eintrag der entsprechenden Linie) gefunden und gelöscht werden.

    Funzt normalerweise supi ..... hier der entsprechende Code Teil ....:
    Code:
    SPA End
    rst: NOP 0
    LAR1 #AR1Speicher
    L L#0
    T #Fertig
    loop: NOP 0
    AUF "Qeue2"
    L #TeilnehmerNr
    L DBD [AR1,P#0.0]
    ==D 
    SPB mov
    L -4
    SLD 3
    +AR1 
    L #Fertig
    L 1
    +D 
    T #Fertig
    U( 
    L #Fertig
    L 60
    >=D 
    ) 
    SPB End
    SPA loop
    mov: NOP 0
    //Zeiger für Quellbereich###############################
    L B#16#10
    T LB 6
    L B#16#2 //Datentyp Byte
    T LB 7
    // L 8
    // 234 Byte Qeue Laenge - Position für Austrag
    L 234
    TAR1 
    -D 
    //#########################################
    T LW 8
    L 2008
    T LW 10
    TAR1 
    SRD 3
    L 8
    +D 
    ITD 
    SLD 3
    T LD 12
    L B#16#84
    T LB 12
    //#############################################################
    //Zeiger auf Zielbereich#######################################
    L B#16#10
    T LB 16
    L B#16#2
    T LB 17
    // L 8
    //236 Byte Qeue Laenge - Position für Austrag
    L 234
    TAR1 
    -D 
    //############################################################
    T LW 18
    L 2008
    T LW 20
    TAR1 
    ITD 
    T LD 22
    L B#16#84
    T LB 22
    /////########################################################
    CALL "S7_BLKMOV"
    SRCBLK :=#Quelle
    RET_VAL:=DB2008.DBW400
    DSTBLK :=#Ziel
    //######Queue ist nicht leer#################################
    U( 
    L "Qeue2".Index
    L L#2
    >=D 
    ) 
    //###############Reduziere Index um 2########################
    SPBN End
    L "Qeue2".Index
    L L#2
    -D 
    T "Qeue2".Index
    //#############Reduzier AR1 Speicher um 2####################
    LAR1 #AR1Speicher
    L L#-8
    SLD 3
    +AR1 
    TAR1 #AR1Speicher
    //###########################################################
    SPA End
    Nun habe ich heute leider mit ansehen müssen das die Adressierung der BLKMOV's nicht ganz gepasst hat ... und somit mein AR1 Speicher mit in die Queue gemovt wurde ....

    Falls also irgendwer einen Rechen bzw. Programmierfehler findet wäre ich sehr dankbar .....
    Vielen Dank im Voraus


    edit:

    OK Sorry .... war ein Bisschen hingeklatscht vorhin, hatte wenig Zeit .. Also hier ein Paar Zusatzinfo's :

    Die Länge der Queue ist 236 Byte ... Datentyp der Einträge ist DINT Ein Eintrag besteht aus 2 DINT TeilnehmerNr. und Incode. Nach der Queue im DB kommt ein Zwischenspeicher für AR1 und Index welche ich zur internen Adressierung im FB benutze.
    Was passiert ist ...: der BLKMOV hat Zahlenwerte mit in den Bereich der Queue gezogen, diese können nur vom AR1 Speicher kommen. Ich habe versucht den Fehler zu reproduzieren .. ohne Erfolg.
    Code:
    L B#16#10
    T LB 16
    L B#16#2
    T LB 17
    // L 8
    //236 Byte Qeue Laenge - Position für Austrag
    L 234     Hier habe ich meine Berechnungfür den Quellbereich schon um 2 Byte gekürzt .... 
    TAR1 
    -D
    CPU 417 ... S7 5.5

    Also .... hoffe irgendwer hat eine Idee Gruß
    Geändert von D.Fricke (20.03.2014 um 19:22 Uhr)
    Zitieren Zitieren Probleme mit Any Pointer  

  2. #2
    Registriert seit
    27.05.2004
    Ort
    Thüringen/Berlin
    Beiträge
    12.227
    Danke
    534
    Erhielt 2.698 Danke für 1.950 Beiträge

    Standard

    Code:
    SPA End
    rst: NOP 0
    LAR1 #AR1Speicher
    L L#0
    T #Fertig
    loop: NOP 0
    AUF "Qeue2"
    L #TeilnehmerNr
    L DBD [AR1,P#0.0]
    ==D 
    SPB mov
    L -4
    SLD 3  //das müßte man mal testen, bin mir nicht ganz sicher, was passiert, wenn man mit -4 ein SLD 3 ausführt, kommt da wirklich  32 (als Pointer) raus???
    +AR1 
    L #Fertig
    L 1
    +D 
    T #Fertig
    U( 
    L #Fertig
    L 60
    >=D 
    ) 
    SPB End
    SPA loop
    mov: NOP 0
    //Zeiger für Quellbereich###############################
    L B#16#10
    T LB 6
    L B#16#2 //Datentyp Byte
    T LB 7
    // L 8
    // 234 Byte Qeue Laenge - Position für Austrag
    L 234
    TAR1 
    -D 
    //#########################################
    T LW 8
    L 2008
    T LW 10
    TAR1 
    SRD 3
    L 8
    +D 
    ITD //das ist schon 32 bit, wozu die Wandlung? Das macht bei großen Adressen Ärger, da bit 15, wenn 1 als Minuszeichen interpretiert wird, also weg damit
    SLD 3
    T LD 12
    L B#16#84
    T LB 12
    //#############################################################
    //Zeiger auf Zielbereich#######################################
    L B#16#10
    T LB 16
    L B#16#2
    T LB 17
    // L 8
    //236 Byte Qeue Laenge - Position für Austrag
    L 234
    TAR1 
    -D 
    //############################################################
    T LW 18
    L 2008
    T LW 20
    TAR1 
    ITD //Wozu die Wandlung? Auch hier unnötig, bzw. eher falsch, denn ITD macht nur Sinn, wenn man mit negativen Zahlen arbeitet. Das macht bei großen Adressen Ärger, da bit 15, wenn 1 als Minuszeichen interpretiert wird, also weg damit
    T LD 22
    L B#16#84
    T LB 22
    /////########################################################
    CALL "S7_BLKMOV"
    SRCBLK :=#Quelle
    RET_VAL:=DB2008.DBW400
    DSTBLK :=#Ziel
    //######Queue ist nicht leer#################################
    U( 
    L "Qeue2".Index
    L L#2
    >=D 
    ) 
    //###############Reduziere Index um 2########################
    SPBN End
    L "Qeue2".Index
    L L#2
    -D 
    T "Qeue2".Index
    //#############Reduzier AR1 Speicher um 2####################
    LAR1 #AR1Speicher
    L L#-8
    SLD 3  //um zwei verschieben bedeutet L L#-2 SLD3  (macht 16 als Pointer) oder um was genau soll reduziert werden? hier -8*8 und siehe oben, das Verschieben des Minuszeichens!!!
    +AR1 
    TAR1 #AR1Speicher
    //###########################################################
    SPA End
    Ich hab mal schnell drübergeschaut und die Sachen rot angestrichen, die ich für nicht korrekt halte.
    Generell halte ich das Arbeiten in negative Richtung für etwas unglücklich, da auch schwer lesbar.
    Aber das SLD 3 auf eine negative Zahl, ist nicht das Selbe, wie mit 8 multiplizieren, würde ich mal so aus der Hüfte behaupten.
    In diesem Falle also lieber *8 rechnen.
    Ich rechne in der Regel mit einem Index, den ich normal hochzähle und erst zu einem Pointer (SLD3) mache, wenn ich ihn als Pointer einsetzen will.
    Ist oft besser lesbar und verständlicher.
    Geändert von Ralle (20.03.2014 um 20:47 Uhr)
    Gruß
    Ralle

    ... there\'re 10 kinds of people ... those who understand binaries and those who don\'t …
    and the third kinds of people … those who love TIA-Portal

  3. #3
    Registriert seit
    27.05.2004
    Ort
    Thüringen/Berlin
    Beiträge
    12.227
    Danke
    534
    Erhielt 2.698 Danke für 1.950 Beiträge

    Standard

    Ich hab das mal geprüft.
    Es geht, ist aber reichlich gefährlich.

    L -2
    SLD3
    T MW10 --> -16
    T MD20 --> 524272

    L L# -2
    T MW10 --> -16
    T MD20 --> -16

    Das hast du also richtig, da du beim 2. Mal L L#-8 eingesetzt hast, beim ersten Mal bin ich mir nicht sicher, was im AR1 landet!

    Aber: Schön ist das wirklich nicht und es birgt halt die Gefahr, dass man nicht L L# -8 sondern wie oben L -2 schreibt.
    Insgesamt würde ich das auf jeden Fall ändern.
    Geändert von Ralle (20.03.2014 um 21:16 Uhr)
    Gruß
    Ralle

    ... there\'re 10 kinds of people ... those who understand binaries and those who don\'t …
    and the third kinds of people … those who love TIA-Portal

  4. #4
    D.Fricke ist offline Neuer Benutzer
    Themenstarter
    Registriert seit
    17.03.2014
    Beiträge
    3
    Danke
    0
    Erhielt 0 Danke für 0 Beiträge

    Standard

    Hallo Ralle,

    erstmal vielen Dank für die Hilfe ....

    Bin nicht darauf gekommen die Queue von unten nach oben zu durchsuchen ..... ... da hätte ich mir die negativen Vorzeichen sparen können....Fehler sind dazu da um gemacht zu werden

    AR1 um 2 verringern ... da meinte ich 2 Einträge also 2x DINT. 64 bit ...

    Das ITD ... habe ich drin gelassen da ich mal gelesen habe das es nix ausmacht .... Aber man lernt nie aus ....

    Werde mir morgen den Code nochmal vornehmen ... der kommt Montag zum Kunden ....

    Vielen Dank für die Mühe zu der Zeit ... Die Änderungen werde ich morgen umsetzen und dann nochmal die Ergebnisse posten !!!

    Gruß

  5. #5
    D.Fricke ist offline Neuer Benutzer
    Themenstarter
    Registriert seit
    17.03.2014
    Beiträge
    3
    Danke
    0
    Erhielt 0 Danke für 0 Beiträge

    Standard


    Zuviel Werbung?
    -> Hier kostenlos registrieren
    So Guten Morgen ....

    Habe die Änderungen übernommen... lediglich die negativen Vorzeichen bleiben ... in diesem speziellen Fall brauch das nicht lesbar sein....

    Habe ca. 20 Einträge generiert und über die Resetfunktion ausgetragen ... Problemlos !!!

    Vielen Dank !!!! Echt super Forum

Ähnliche Themen

  1. S7 LAR P##... --- pointer auf pointer
    Von milmu im Forum Simatic
    Antworten: 7
    Letzter Beitrag: 22.11.2010, 17:39
  2. Störmledungsbaustein mit Pointer?!?
    Von CrazyMC im Forum Simatic
    Antworten: 27
    Letzter Beitrag: 20.05.2010, 00:49
  3. Verständnisproblem mit pointer ?
    Von Waelder im Forum Simatic
    Antworten: 1
    Letzter Beitrag: 03.08.2009, 09:02
  4. Problem mit Pointer
    Von Mathias im Forum Simatic
    Antworten: 9
    Letzter Beitrag: 06.02.2009, 10:03
  5. Sortierbasutein mit Any Pointer
    Von stevexxx im Forum Simatic
    Antworten: 71
    Letzter Beitrag: 19.11.2008, 08:39

Lesezeichen

Berechtigungen

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