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

Chris80

Level-1
Beiträge
182
Reaktionspunkte
1
Zuviel Werbung?
-> Hier kostenlos registrieren
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
 
Hallo Chris und willkommen,
Code:
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 )
 
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)?
 
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 )
 
Zuviel Werbung?
-> Hier kostenlos registrieren
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.
 
Ok, uns ist jetzt klar: es geht bis 10 und darüber nicht mehr.
Hast Du mal meinen Ratschlag befolgt?

( 43 )
 
Vergiss mal meine Aussage über den Vergleicher....

Hab in Kopf den Zeiger und nicht den Inhalt verglichen :confused:
 
Zuviel Werbung?
-> Hier kostenlos registrieren
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 .
 
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.
 
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 )
 
Zurück
Oben