Zugriff auf falschen DB

floh041183

Level-1
Beiträge
10
Reaktionspunkte
0
Zuviel Werbung?
-> Hier kostenlos registrieren
Hallo,
ich hab folgendes Problem, vielleicht kann mir da jemand weiterhelfen...
In meinem FB300 schlage ich den DB302 auf und lese dort Messwerte aus, die mir ein Sensor via Ethernet geschickt hat. Die Messwerte füge ich mir aus mehreren BYTE zusammen (da ja eine Zeichenkette empfangen wurde) und speichere die Messwerte als INT, BOOL, oder REAL in einem gesonderten DB304.
Während ich den DB302 (Empfangspuffer) BYTE für BYTE durchlaufe und auswerte, lasse ich einen Pointer #Zeiger mitlaufen.
Wenn ich einen Messwert in DB304 gespeichert habe erhöhe ich den Pointer des DB302 um eins um zu schauen, ob eine NULL kommt also das Zeichenkettenende. Leider schaut dieser #Zeiger jetzt auf den DB304, wo ich zuvor gespeichert habe und nicht in den DB302.

Ich habe schon versucht an dieser Stelle erneut:
AUF DB[DB_Nr] // DB_Nr wurde der INT-Wert 302 übergeben
allerdings geht dann die SPS in STOP

Achja, ich verwende eine S7-319-3 PN/DP FW 2.7.1

MfG
FLOH
 

Anhänge

  • falscher Zugriff.JPG
    falscher Zugriff.JPG
    144,6 KB · Aufrufe: 50
An welcher Stelle woltlest Du das AUF DB einfügen?
Bist Du sicher, dass die CPU wegen des AUF DB in Stop geht?
Was sagt denn der Diagnosepuffer dazu?
 
Hallo M-Ott,
danke für deine schnelle Antwort.

Also den AUF DB302 Befehl hab ich ganz oben in NW17 gleich unter das NOP 0 geschrieben, habs aber auch schon einen Absatz tiefer probiert gleich über dem Vergleich auf 0, bringt aber keine Änderung.

Ich hab mal den Diagnosepuffer angehangen.
Auf jeden Fall geht die SPS nicht in den STOP, wenn ich den AUF-Befehl weglasse, aber dann greift er ja auf den falschen DB zu.

Ich hoffe der Diagnosepuffer hilft weiter...
 

Anhänge

  • Diagnosepuffer (1024 x 839).jpg
    Diagnosepuffer (1024 x 839).jpg
    177,9 KB · Aufrufe: 32
Wahrscheinlich erkennt Dein Programm das Ende nicht, liest deswegen immer weiter (deshalb der Bereichslängenfehler) und rennt schlußendlich in die Zykluszeitüberschreitung.

Ich empfehler Dir, wenn möglich, den OB121 herauszunehmen, so dass die CPU stoppt, sobald der Bereichslängenfehler auftritt. Dies lässt eine deutlich genauere Diagnose zu.
 
Zuviel Werbung?
-> Hier kostenlos registrieren
Da wird ein Zyklus Fehler angezeigt.
Da geht die PLC in eine Endlosschleife.
Dies ist scheinbar deine Problem wegen dem Stopp.

Wenn du bei dem Fehler in dem Bild unten links draufklickx, dann wird direkt an den Punkt gesprungen wo der Bereichslängenfehler ist.
Der kann auch bestehen, wenn die PLC rennt.


bike
 
hmm also ich hab gar keinen OB121, wo kommt der her?

Wie genau komm ich zu dem Bereichslängenfehler? Da lässt sich nichts anklicken...
 
hmm also ich hab gar keinen OB121, wo kommt der her?

Wie genau komm ich zu dem Bereichslängenfehler? Da lässt sich nichts anklicken...

Der OB121 fängt Programmierfehler ab.
Das Programm läuft trotz Fehler
Diesen Baustein hast du nicht im Projekt?
Vermutlich doch, sonst würde die PLC an der Fehlerstelle stoppen.
Wenn die PLC steht kannst du nicht auf die Meldung "Bereichslängenfehler" klicken und es öffnet sich nicht der Editor und springt an die Stelle des Fehlers? :confused:


bike
 
Zuviel Werbung?
-> Hier kostenlos registrieren
Wahrscheinlich hast Du den OB121 nur online.
Schau Mal in der CPU nach!

Wenn ich mich nicht irre, bleibt die Schaltfläche "Baustein öffnen" ausgegraut, wenn die CPU nicht wegen dieses Fehlers in STOP geht.
 
Also ohne den DB-Aufruf kommt auch kein Bereichslängenfehler, siehe Bild.
Und den OB121 verwende ich auch nicht, siehe anderes Bild

den Bereichslängenfehler kann ich nicht anklicken, und "Baustein öffnen" ist ausgegraut, siehe die 4 Bilder von vorhin... doppelklick geht auch nicht...
oder meinst du was anderes?
 

Anhänge

  • Diagnosepuffer_ohne_AUF DB302.JPG
    Diagnosepuffer_ohne_AUF DB302.JPG
    74,5 KB · Aufrufe: 13
Zuletzt bearbeitet:
Habe gerade versucht, bei Bereichslängenfehler öffnet sich nicht der Baustein. Seltsam :confused:

Wenn die PLC steht kannst du die letzten 100 Fehler ansehen.
Da kommt irgend wo ein Hinweis, welcher Baustein ein Problem hat.
Wo und wie schreibst du das Auf[DB_Nr] rein?
Wenn du vergisst eine Nummer in DB_Nr zu transferieren, dann bleibt die PLC auch stehen.

bike
 
Bei mir öffnet sich sowohl beim Bereichslängenfehler als auch beim STOP durch Programmierfehler der entsprechende Baustein an der Fehlerstelle.
 
Du meinst die Fehler im Diagnosepuffer?
Die gehen bei mir bis 500 aber da stehen alles Bereichslängenfehler drin, wahrscheinlich für jede Adresse ein Fehler, die Nummern sind nämlich fortlaufend.

DB_Nr war ein IN-Parameter, ich habs aber jetzt mal direkt mit AUF DB302 gemacht, macht aber keinen Unterschied.

Der Bereichslängenfehler lässt sich aber trotzdem nicht anklicken

Hinweis zu dem OB121 geloescht Bild, da steht Zugriffsadresse:1004
genau dort endet mein DB302
 

Anhänge

  • OB121 geloescht.JPG
    OB121 geloescht.JPG
    73,2 KB · Aufrufe: 10
  • DB302 Aufruf.JPG
    DB302 Aufruf.JPG
    22 KB · Aufrufe: 15
  • DB302 Aufbau.JPG
    DB302 Aufbau.JPG
    15,2 KB · Aufrufe: 11
Offensichtlich hast Du in Deinem DB302 nicht das stehen, was drinstehen muss, um Deine Schleife zu beenden, dadurch zählt Deine CPU andauernd weiter hoch, um den DB auszulesen und am Ende des DB gibt es den Bereichslängenfehler.
 
Tausend dank an euch, war meine eigene Dummheit!!
Also mal zur Auflösung:
Ich hab jetzt mal nicht auf den Bereichslängenfehler geklickt sondern direkt auf den STOP-Fehler und dann ist er an die Stelle im Code gesprungen.
Und da befand er sich an einer Stelle, da hätte er gar nicht sein dürfen.
Das hab ich jetzt mit einem absoluten Sprung abgefangen und nun funzt es wie es soll, zumindest bis jetzt...das Programm ist ja noch lange nicht fertig.

Das mit dem Diagnosepuffer kannte ich bis jetzt nicht. Danke wieder was gelernt... SORRY bin noch STUDENT... passiert mir bestimmt nicht nochmal... ;)

Also nochmal vielen DANK, und dann einen schönen Feierabend

Grüße
FLOH
 
Zurück
Oben