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

Seite 1 von 2 12 LetzteLetzte
Ergebnis 1 bis 10 von 13

Thema: Bereichslängenfehler bei indirekter Adressierung

  1. #1
    Registriert seit
    20.11.2008
    Ort
    Hochstadt
    Beiträge
    67
    Danke
    13
    Erhielt 0 Danke für 0 Beiträge

    Standard


    Zuviel Werbung?
    -> Hier kostenlos registrieren
    Hallo zusammen,

    habe ein problem beim Schreiben in einen DB. Die ersten 5 Datensätze werden erfolgreich geschrieben und beim nächsten bekomme ich einen Bereichslängenfehler an der Adresse 94 (Bitzugriff). Ich habe schon versucht, dass ganze zu debuggen komme aber nicht dahinter wo der Fehler liegt.

    Wäre super, wenn mir jemand auf die Sprünge helfen kann.

    Hier mal ein Auszug aus dem Programm:

    // Flanke neues Teil an Laser --------------------
    U "Deb_Daten_schreiben"
    FP "FP_Daten_schreiben"

    U "FP_Daten_schreiben"
    S M 200.0

    // Neues Teil an Laser abfragen ------------------
    U "FP_Daten_schreiben"
    SPB M012
    SPA M013

    M012: NOP 0
    //Datum aktualisieren ---------------------------
    AUF "DB_Daten_IO_Teile"
    L "DB_Daten_IO_Teile".Index
    SLD 3
    LAR1

    L #Datum
    T DBW [AR1,P#0.0]

    // Uhrzeit aktualisieren -------------------------
    AUF "DB_Daten_IO_Teile"
    L "DB_Daten_IO_Teile".Index
    L 2
    +I
    SLD 3
    LAR1

    L #Uhrzeit
    T DBD [AR1,P#0.0]

    // Stueckzaehler erhoehen -----------------------
    AUF "DB_Daten_IO_Teile"
    L "DB_Daten_IO_Teile".Index
    L 6
    +I
    SLD 3
    LAR1

    L "DB_Daten_IO_Teile".Stueckzaehler
    T DBW [AR1,P#0.0]

    // Angewaehlte Schicht aktualisieren ------------
    AUF "DB_Daten_IO_Teile"
    L "DB_Daten_IO_Teile".Index
    L 12
    +I
    SLD 3
    LAR1

    L 3
    T DBW [AR1,P#0.0]



    // USS 30KHz IO --------------------------------
    AUF "DB_Daten_IO_Teile"
    L "DB_Daten_IO_Teile".Index
    L 14
    +I
    SLD 3
    LAR1

    U DB4.DBX 9.5
    SPB M040
    SPA M041
    M040: NOP 0
    L DBW [AR1,P#0.0]
    L 2#100000000
    OD
    T DBW [AR1,P#0.0]
    M041: NOP 0

    // USS 40KHz IO --------------------------------
    AUF "DB_Daten_IO_Teile"
    L "DB_Daten_IO_Teile".Index
    L 14
    +I
    SLD 3
    LAR1

    U DB4.DBX 17.5
    SPB M042
    SPA M043
    M042: NOP 0
    L DBW [AR1,P#0.0]
    L 2#1000000000
    OD
    T DBW [AR1,P#0.0]
    M043: NOP 0

    // WSS IO ------------------------------------
    AUF "DB_Daten_IO_Teile"
    L "DB_Daten_IO_Teile".Index
    L 14
    +I
    SLD 3
    LAR1

    U DB4.DBX 21.5
    SPB M044
    SPA M045
    M044: NOP 0
    L DBW [AR1,P#0.0]
    L 2#10000000000
    OD
    T DBW [AR1,P#0.0]
    M045: NOP 0

    // Widerstand IO -----------------------------
    AUF "DB_Daten_IO_Teile"
    L "DB_Daten_IO_Teile".Index
    L 14
    +I
    SLD 3
    LAR1

    U DB4.DBX 25.5
    SPB M046
    SPA M047
    M046: NOP 0
    L DBW [AR1,P#0.0]
    L 2#100000000000
    OD
    T DBW [AR1,P#0.0]
    M047: NOP 0


    // Widerstandswert
    AUF "DB_Daten_IO_Teile"
    L "DB_Daten_IO_Teile".Index
    L 16
    +I
    SLD 3
    LAR1

    AUF "DB_Schieberegister"
    L DBD 60

    AUF "DB_Daten_IO_Teile"
    T DBD [AR1,P#0.0]

    // Stueckzaehler erhoehen
    L "DB_Daten_IO_Teile".Stueckzaehler
    L 1
    +I
    T "DB_Daten_IO_Teile".Stueckzaehler

    // Index erhoehen
    L "DB_Daten_IO_Teile".Index
    L 20
    +I
    T "DB_Daten_IO_Teile".Index

    M013: NOP 0

    Geschrieben wird in einen DB mit einem Array von folgender Struktur:

    0.0 Datum DATE D#1990-1-1
    2.0 Uhrzeit TIME_OF_DAY TOD#0:0:0.0
    6.0 Stueckzaehler INT 0
    8.0 Prefix_Schicht STRING[1] 'S'
    12.0 Schicht INT 0
    14.0 USS30KHz BOOL FALSE
    14.1 USS40KHz BOOL FALSE
    14.2 WSS BOOL FALSE
    14.3 Widerstand_IO BOOL FALSE
    16.0 Widerstand REAL 0.000000e+000

    In dem DB gibt es am Ende noch einen Stückzähler und einen Index der für die Anfangsadressen benutzt wird.
    Falls noch Infos fehlen reiche ich diese gerne nach

    Also vielen Dank schon mal im Voraus.

    Gruß Peraho
    Zitieren Zitieren Bereichslängenfehler bei indirekter Adressierung  

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

    Standard

    Hallo,
    wie groß ist denn dein DB bzw. wie groß ist das ARRAY of Struct definiert ?
    Fragst du auch irgendwo ab, ob "DB_Daten_IO_Teile".Index größer wird als ARRAY_max ?

    Gruß
    LL

  3. #3
    peraho ist offline Benutzer
    Themenstarter
    Registriert seit
    20.11.2008
    Ort
    Hochstadt
    Beiträge
    67
    Danke
    13
    Erhielt 0 Danke für 0 Beiträge

    Standard

    Hi Larry,

    der DB hat 800 Elemente. Die Meldung kommt aber schon beim 5. Element.
    also Index wäre bei 80 und Fehlerhafte Adresse, die den Bereichslängenfehler verursacht die 94. Also über die 800 Elemente bin ich noch nicht gekommen.
    Die Abfrage der Grenzen muss ich noch programmieren und eine Meldung ausgeben, dass die Daten gesichert werden müssen.

    Das kommt später.

    Gruß Peraho

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

    Standard

    welche Zeile in deinem AWL-Script (in dem ich sonmst erstmal keinen Fehler erkenne) wird denn als die mit dem Fehler ausgewiesen ?
    Was hast du an Werten in deinem DB stehen ? Vor Allem, was steht an der Index-Adresse für ein Wert, wenn die CPU aussteigt ? 80 ? Wo und als was ist "FP_Daten_schreiben" deklariert ?

  5. #5
    Registriert seit
    09.11.2006
    Beiträge
    690
    Danke
    36
    Erhielt 31 Danke für 29 Beiträge

    Standard

    Hallo,

    ich kann im ersetn Anlauf keinen Fehler entdecken, außer das du Doppelwortweise veroderst und dann in ein Wort schreibst, das ist mir aufgefallen, weiß aber nicht einmal wie sich das verhält.

    Stell doch mal den S7 Code als Zip hier ein, dann kann man es leichter testen.
    Zeige nie deine Verblüffung, wenn dir etwas auf Anhieb gelingt.

    Praxis: Es funktioniert aber keiner weiß warum!
    Zitieren Zitieren S7 Code  

  6. Folgender Benutzer sagt Danke zu mitchih für den nützlichen Beitrag:

    peraho (02.06.2009)

  7. #6
    Registriert seit
    22.03.2007
    Ort
    Detmold (im Lipperland)
    Beiträge
    11.726
    Danke
    398
    Erhielt 2.402 Danke für 2.001 Beiträge

    Standard

    @Mitch:
    Stimmt, das mit dem OD ist nicht so schön - daran kann es aber nicht liegen ...
    Es ist auch nicht so schön, dass INDEX anscheinend ein INT ist und daraus dann ein Doppelwort mittels SLD gebaut wird, das man ja für das AR-Register braucht - aber auch das ist nicht der Fehler sondern eher unschön ...
    Geändert von Larry Laffer (29.05.2009 um 16:57 Uhr)

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

    peraho (02.06.2009)

  9. #7
    Registriert seit
    27.03.2007
    Beiträge
    59
    Danke
    28
    Erhielt 34 Danke für 28 Beiträge

    Standard

    Hallo peraho,

    hab mir deinen Code grad angesehen.

    Zitat Zitat von peraho Beitrag anzeigen

    // USS 30KHz IO --------------------------------
    AUF "DB_Daten_IO_Teile"
    L "DB_Daten_IO_Teile".Index
    L 14
    +I
    SLD 3
    LAR1

    U DB4.DBX 9.5
    SPB M040
    SPA M041
    M040: NOP 0
    L DBW [AR1,P#0.0]
    L 2#100000000
    OD
    T DBW [AR1,P#0.0]
    M041: NOP 0
    Du schlägst mit der Bit-Abfrage den DB4 auf. Danach lädst du ein Wort indirekt aus dem DB. Allerdings ist der geöffnete DB nicht mehr dein "DB_Daten_IO_Teile" sondern der DB4. Ist das so gewollt? Wie groß ist denn der DB4?

    Gruß pf

  10. Folgender Benutzer sagt Danke zu puzzlefreak für den nützlichen Beitrag:

    peraho (02.06.2009)

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

    Standard

    war Quatsch ...
    Geändert von Larry Laffer (29.05.2009 um 18:11 Uhr)

  12. #9
    peraho ist offline Benutzer
    Themenstarter
    Registriert seit
    20.11.2008
    Ort
    Hochstadt
    Beiträge
    67
    Danke
    13
    Erhielt 0 Danke für 0 Beiträge

    Standard

    Hallo Larry,

    wenn die CPU aussteigt steht 80 im Index. FP_daten _schreiben
    ist Merker 10.0
    die Zeile habe ich noch nicht nachgeschaut. Bin auch nicht mehr an der Anlage.

    Gruß peraho

  13. #10
    Registriert seit
    27.03.2007
    Beiträge
    59
    Danke
    28
    Erhielt 34 Danke für 28 Beiträge

    Standard


    Zuviel Werbung?
    -> Hier kostenlos registrieren
    Hallo,
    hab's grad extra nochmal getestet. Wenn ich den Code orginal teste, dann lande ich auf dem falschen DB. Aber wenn ich den Code erweitere, dann funktioniert es.
    Code:
    // USS 30KHz IO --------------------------------
          AUF   "DB_Daten_IO_Teile"
          L     "DB_Daten_IO_Teile".Index
          L     14
          +I    
          SLD   3
          LAR1  
    
          U     DB4.DBX    9.5
          SPB   M040
          SPA   M041
    M040: AUF "DB_Daten_IO_Teile"
          L     DBW [AR1,P#0.0]
          L     2#100000000
          OD    
    T     DBW [AR1,P#0.0]
    M041: NOP   0
    Nach der Lade-Anweisung wird ja normalerweise auch nochmal mitgeteilt, um welchen Speicherbereich es sich handelt (DBW, DIW, MW...). Obwohl das ganze ja eigentlich im Pointer hinterlegt ist.
    Aber ich bin da auch schon drübergestolpert.
    Wenn allerdings jetzt noch jemand eine gute Erklärung dafür hätte...
    Immer her damit

    Gruß pf

  14. Folgender Benutzer sagt Danke zu puzzlefreak für den nützlichen Beitrag:

    peraho (02.06.2009)

Ähnliche Themen

  1. IN_OUT mit Indirekter Adressierung
    Von SCM im Forum Simatic
    Antworten: 24
    Letzter Beitrag: 14.10.2011, 12:07
  2. Problem mit indirekter Adressierung
    Von Astralavista im Forum Simatic
    Antworten: 6
    Letzter Beitrag: 29.09.2010, 11:25
  3. Antworten: 12
    Letzter Beitrag: 10.05.2007, 21:14
  4. Kleines Problem mit indirekter Adressierung
    Von TobiS81 im Forum Simatic
    Antworten: 9
    Letzter Beitrag: 02.05.2007, 12:31
  5. Antworten: 1
    Letzter Beitrag: 19.06.2003, 19:34

Lesezeichen

Berechtigungen

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