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

Ergebnis 1 bis 7 von 7

Thema: ANY-Pointer auf DB größer Byte 8480 möglich?

  1. #1
    Registriert seit
    09.03.2006
    Beiträge
    137
    Danke
    19
    Erhielt 4 Danke für 4 Beiträge

    Standard


    Zuviel Werbung?
    -> Hier kostenlos registrieren
    Hallo zusammen,

    Ich habe einen DB mit 16160Byte. Das ist ein DB mit Parametersätzen für 99 verschiedene Produkte. Ein Parametersatz hat 160Byte. Der Aufbau ist folgender:

    Byte 0- 159 Arbeitsfach
    Byte 160- 319 Parametersatz 1
    Byte 320- 479 Parametersatz 2
    ...
    Byte 15840-15998 Parametersatz 99
    Byte 16000-16158 Sicherungsfach

    In meinem S7-Programm habe habe ich nur die Parameter im Arbeitsfach verarbeitet. Wird das Produkt gewechselt, kopiere ich mit dem SFC20 den jeweiligen Parametersatz in das Arbeitsfach. Das mache ich dynamisch, indem ich mir den ANY-Pointer abhängig vom angewählten Produkt auf den entsprechenden Parametersatz berechne. Das sieht so aus:

    Code:
    // Netzwerk 1
          L     #Produkt                    // Aus aktuellem Produkt und ...
          L     160                         // der Datensatzlänge ...
          *I    
          T     #QuellDW                    // die QUELL-Startadresse berechnen.
    
    
    // Netzwerk 2
          LAR1  P##Quelle                   // Anfangsadresse des ANY-Pointers in AR1 laden
          L     B#(16, 2)                   // Syntax-ID und Typ: Byte laden
          T     LW [AR1,P#0.0]
          L     160                         // zu kopierende Länge (in Byte)
          T     LW [AR1,P#2.0]
          L     300                         // Quelle-DB 
          T     LW [AR1,P#4.0]
          L     P#DBX 0.0                   // Anfangs-Adresse im Quell-DB
          L     #QuellDW
          SLW   3
          +D    
          T     LD [AR1,P#6.0]
    
    // Netzwerk 3
          CALL  SFC   20
           SRCBLK :=#Quelle
           RET_VAL:=#RET_value
           DSTBLK :=P#DB300.DBX0.0 BYTE 160
    Nun habe ich festgestellt, das ab Parametersatz 53 (Byte 8480) der Datensatz nicht mehr kopiert wird. Weiß jemand woran das liegen kann? Gibt es irgendwo einen Überlauf? Oder wie kann ich das Netzwerk 2 in welchem ich den ANY-Pointer zusammenstelle anders aufbauen? Bin für jeden Hinweis dankbar!

    Gruß HarryH
    Zitieren Zitieren ANY-Pointer auf DB größer Byte 8480 möglich?  

  2. #2
    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

    Hallo,
    mach doch für #Quell_DW spaßeshalber mal den Datentyp DINT und die Operation davor mit *D ...
    Du hast nämlich einen Integer-Überlauf produziert ...

    Gruß
    LL

  3. #3
    Registriert seit
    12.02.2008
    Ort
    Westfalen (Dort wo's Schwarzbrot gibt)
    Beiträge
    417
    Danke
    8
    Erhielt 87 Danke für 72 Beiträge

    Standard

    Obwohl ich mal denke, das der Überlauf erst unten bei SLW3 auftritt. Oben wären es ja gerade mal 160 * 53 = 8480. Das sollte ja noch in ein Wort passen.

  4. #4
    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

    @Grubba:
    Da hast du natürlich Recht ... den hatte ich dann gar nicht mehr gesehen ...
    Also ... statt SLW 3 dann vielleicht lieber SLD 3 schreiben ...

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

    HarryH (06.11.2009)

  6. #5
    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 Larry Laffer Beitrag anzeigen
    Also ... statt SLW 3 dann vielleicht lieber SLD 3 schreiben ...
    aber brav das +D drunter stehen haben ...
    [SIGNATUR]
    Ironie setzt Intelligenz beim Empfänger voraus.
    [/SIGNATUR]

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

    HarryH (06.11.2009)

  8. #6
    Registriert seit
    17.07.2009
    Ort
    Am Rande der Ostalb
    Beiträge
    5.539
    Danke
    1.153
    Erhielt 1.254 Danke für 983 Beiträge

    Standard

    Irgendwie stör ich mich an deiner Addition:
    Üblicherweise löse ich es so:
    Code:
    L #QuellDW
    SLD 3
    L P#DBX0.0
    OD
    T DW[AR1,P#6.0]
    Gruß
    Dieter
    Geändert von Blockmove (06.11.2009 um 12:58 Uhr)

  9. #7
    Avatar von HarryH
    HarryH ist offline Erfahrener Benutzer
    Themenstarter
    Registriert seit
    09.03.2006
    Beiträge
    137
    Danke
    19
    Erhielt 4 Danke für 4 Beiträge

    Standard


    Zuviel Werbung?
    -> Hier kostenlos registrieren
    Vielen Dank zusammen!!!

    Das SLW war das Problem. Mit SLD funktioniert es einwandfrei!
    Vielen DANK!!!

    Gruß HarryH

Ähnliche Themen

  1. Pointer in ein Byte Array umwandeln
    Von kai86 im Forum Simatic
    Antworten: 31
    Letzter Beitrag: 04.02.2011, 11:09
  2. Pointer to Byte
    Von enter im Forum Simatic
    Antworten: 3
    Letzter Beitrag: 15.09.2010, 09:33
  3. Byte/Anfangswert nicht größer 99 möglich
    Von Kodan im Forum Simatic
    Antworten: 7
    Letzter Beitrag: 24.05.2008, 12:21
  4. Pointer <- Indirekter DB möglich ?
    Von rs-plc-aa im Forum Simatic
    Antworten: 33
    Letzter Beitrag: 26.04.2007, 18:22
  5. Antworten: 5
    Letzter Beitrag: 25.08.2006, 18:50

Lesezeichen

Berechtigungen

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