# Daten aus DB größer 10 werden nicht ausgelesen.Warum?



## Chris80 (19 April 2012)

Hallo
Mein DB ist so aufgebaut:

Adresse 0.0    steht der Maximale wert der die antriebe haben kann (steht jetzt auf 19)
Adresse 2.0   steht die nummer von den antrieb  das wäre   1  (INT)
Adresse 4.0   steht  der zugehörgige code für den antrieb1   DW#16#10C01  (DWORD)
Adresse 8.0   steht die nummer von den antrieb  das wäre   2  (INT)
Adresse 10.0   steht  der zugehörgige code für den antrieb2   DW#16#10C02  (DWORD)
Adresse 14.0   steht die nummer von den antrieb  das wäre   3  (INT)
Adresse 16.0   steht  der zugehörgige code für den antrieb3   DW#16#10C03  (DWORD)

usw bis antrieb 19

ich gebe jetzt über mein MW 423 z.B(VAT) den antrieb an zb 2
das folgende programm soll mir dann an den MD 100 den code für antrieb ausgeben das wäre dann DW#16#10C02

das funktioniert auch aber wenn ich 11 an MW423 eingebe geht die CPU in Stop warum?



Hier mein programm

die program teile die ich mit // ausgeklammert habe waren nur für testzwecke gedacht um auf den fehler zu kommen.


  L     1
      T     #zaehler


M010: L     #zaehler
  //    T     MW   471
      L     1
      -I    
      L     6
      *I    
      L     2
      +I    
      T     #ZEIGER
//    T     MW   467
      SLW   3
      T     #zpointer
//     T     MW   465


      L     "pos db".Antrieb_max
      L     #zaehler

      <I    
      SPB   M011

      AUF   "pos db"
      L     DBW [#zpointer]
      L     MW   423
// L     "db op77".Antriebsfunktionen.antrieb_1
      ==I   
      SPBN  M012
      AUF   "pos db"
      L     #ZEIGER
      L     2
      +I    
      T     #ZEIGER
//     T     MW   469
      SLW   3
      T     #zpointer

      L     DBD [#zpointer]
      T     #antrieb_ausw
      T     MD   100
      SPA   M013

M012: NOP   0
      L     #zaehler
      L     1
      +I    
      T     #zaehler
//    T     MW   473
      SPA   M010

M011: L     33
      T     "db op77".Antriebsfunktionen.antrieb_fkt1


      SPA   M00e
M013: NOP   0
      BEA


----------



## M-Ott (19 April 2012)

Hallo Chris und willkommen,

```
wenn Du Code
postest, dann
verwende bitte
Code-Tags,
```
damit wird das deutlich übersichtlicher.

Wir helfen gerne, aber Du musst uns beim Helfen helfen, z.B. indem Du uns möglichst viele Informationen zu Deinem Problem zur Verfügung stellst.
Also: Was steht im Diagnosepuffer?

( 48 )


----------



## Chris80 (19 April 2012)

Diagnosepuffer?

Stop durch Programmierfehler (OP nicht geladen oder nicht möglich
Bereichslängenfehler beim Lesen


----------



## Chris80 (19 April 2012)

welcher icon ist für:
Code-Tags


----------



## M-Ott (19 April 2012)

Auf Anhieb würde ich sagen, Dein DB ist nicht groß genug.

( 46 )


----------



## M-Ott (19 April 2012)

Das Icon für Code gibt's zur Zeit bei "Direkt antworten" nicht, nur unter "Erweitert", es ist das mit dem "#".

( 45 )


----------



## Chris80 (19 April 2012)

Also mein DB geht bis adresse 118 das ist dann der code für antrieb 20.
oder kann es sein das es nur an der simulierung liegt (S7-PLCSIM)?


----------



## Chris80 (19 April 2012)

das icon habe ich gefunden  Danke darfür.


----------



## Tigerente1974 (19 April 2012)

Dein Pointer scheint nicht zu stimmen und zeigt auf eine Adresse die es nicht gibt, weil der DB zu klein ist.


----------



## Verpolt (19 April 2012)

Falschaussage.......


----------



## M-Ott (19 April 2012)

Du solltest testweise jedesmal nach dem T #zpointer ein LAR1 einfügen, dann kannst Du wenigsten in den Stacks gucken, wo Deine indirekte Adressierung hingezeigt hat.

( 44 )


----------



## Tigerente1974 (19 April 2012)

Ich mutmaße jetzt mal Du könntest das auch etwas anders aufziehen. Mein Vorschlag:

Im DBW0 steht meinetwegen noch eine Konstante zur Angabe der maximalen Anzahl von Antrieben.

Ab DBD2 legst Du ein Array[1..n] des Datentyps DINT an.
Der Zeiger auf das gewünschte DINT kann dann direkt auf das entsprechende Feldelement des Arrays zeigen.

Nicht vergessen: +2 für das Anpassen der Startadresse und *4 wegen DINT beim Zusammenbauen des Zeigers.


----------



## Chris80 (19 April 2012)

Mit 12 tritt der gleich fehler auf


----------



## Verpolt (19 April 2012)

Falschaussage.......


----------



## Chris80 (19 April 2012)

hmm ? bis antrieb 10 geht es da kommt der wert.


----------



## M-Ott (19 April 2012)

Ok, uns ist jetzt klar: es geht bis 10 und darüber nicht mehr.
Hast Du mal meinen Ratschlag befolgt?

( 43 )


----------



## Verpolt (19 April 2012)

Vergiss mal meine Aussage über den Vergleicher....

Hab in Kopf den Zeiger und nicht den Inhalt verglichen


----------



## Chris80 (19 April 2012)

bei den ersten #zpointer ist die adresse 2.0
der zweite #zpointer wird nur bearbeitet wenn ich an MW 423 eine 1 schreibe. So sieht es zumindestens aus wenn ich online schaue und dann steht er auf adresse 4.0 .


----------



## Chris80 (19 April 2012)

wenn ich zb 14 eingebe gibt er mir noch den passenden code herraus erst dann geht er in stop. habe es mit haltepunkten auch mal getestet erst wenn er BEA erreicht hatt geht die cpu in stop.


----------



## M-Ott (19 April 2012)

An welcher Adresse im DB versucht er bei 11 zu lesen?
Um das herauszufinden, solltest Du meinen Ratschlag mit dem Adressregister befolgen, anschließend kannst Du nach CPU-STOP in den Stacks nachgucken.

( 42 )


----------



## Chris80 (19 April 2012)

Ja habe ich gemacht und dadurch habe ich festgestellt das ich in einen anderen FB auf die gleich adresse zugreife und da gab es konflikte.  den fb habe ich raus genommen und siehe da es geht. vielen Dank


----------



## Paule (19 April 2012)

Chris80 schrieb:


> das funktioniert auch aber wenn ich 11 an MW423 eingebe geht die CPU in Stop warum?


Hallo Chris
ich sehe nirgendwo dass du etwas mit dem MW423 machst außer das du es einmal mit einem anderen Wert vergleichst, wo dient es dir als Zeiger?
Und ganz, ganz Wichtig: Vergib bitte gerade Adressen für die Merkerwörter. Klingt vielleicht komisch, macht man aber so! 

@M-Ott, ist das ( 42 ) etwa der Countdownzähler für deine Beiträge bis 1000?


----------



## bike (19 April 2012)

Paule schrieb:


> @M-Ott, ist das ( 42 ) etwa der Countdownzähler für deine Beiträge bis 1000?



Ist aus  "Anhalter durch die Galaxis"


bike


----------



## M-Ott (19 April 2012)

@Paule
Ja, genau. 

( 41 )


----------

