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

Ergebnis 1 bis 10 von 10

Thema: Frage an Erfahrene - Pointer und falsche Adresse

  1. #1
    Registriert seit
    16.11.2007
    Beiträge
    67
    Danke
    2
    Erhielt 8 Danke für 6 Beiträge

    Standard


    Zuviel Werbung?
    -> Hier kostenlos registrieren
    Ich habe in meinem Programm umfangreiche Zugriffe auf Datenbausteine mittels Pointer, also z.B

    AUF DB [#DB_NR_T]
    L P#0.0
    T #offset
    L #Adresse //z.B. Bytenummer
    SLD 3
    L #offset
    +D
    LAR1
    L Wert
    T DBW [AR1,P#0.0]

    und außerdem etliche Kopiervorgänge mit dem SFC20.
    Um sporadische Fehler eingrenzen zu können, würde mich interessieren, was eigentlich passiert, wenn man mit Pointer auf Bereiche außerhalb des eigentlich angesprochenen Bereichs zugreift, desgleichen bei SFC20.
    Hat da jemand Erfahrung oder sicheres Wissen?

    Danke!
    Zitieren Zitieren Frage an Erfahrene - Pointer und falsche Adresse  

  2. #2
    Registriert seit
    06.10.2009
    Ort
    NRW
    Beiträge
    1.572
    Danke
    63
    Erhielt 259 Danke für 219 Beiträge

    Standard

    Das ist relativ einfach:

    Wenn der Adressbereich vorhanden ist, wird die Adresse angesprochen auf die der Pointer zeigt.

    Wenn der Adressbereich nicht vorhanden ist, geht die SPS in Stop. Es sei denn der Fehler wird mit dem OB121 abgefangen.
    Meine Motivation läuft nackig mit einem Cocktail über eine Wiese.

  3. #3
    Registriert seit
    29.04.2013
    Beiträge
    6
    Danke
    0
    Erhielt 0 Danke für 0 Beiträge

    Standard

    Um die Fehler besser eingrenzen zu können, kannst du vor dem LAR1 die berechnete Adresse auf ein DWORD (Merker, temporäre Variable, DB) legen. Dann kannst du sie im "Beobachten" anschauen.
    Im OB121 kannst du diesen berechneten Wert auch in ein Array in einem DB schreiben, um den Fehler im laufe der Zeit beheben zu können.
    Ich bin jedoch der Meinung, dass der OB121 in einer laufenden Anlage nichts verloren hat, zumindest nicht um einfach die CPU vor dem Stop zu bewahren.
    Außerdem kannst du in der Baugruppendiagnose unter "Stacks" wenn die CPU in Stop geht anschauen, in welchem FB/FC und Netzwerk der Stop ausgelöst wurde.
    Wenn die der Fehler sporadisch ein paar Mal am Tag auftritt, würde ich "Warten auf Stop und Stack schauen"-Variante bevorzugen.
    Falls der Fehler nur ein Paar mal in der Woche auftritt, würde ich im OB121 den berechneten Adress-Merker in einen DB schreiben und dann alle paar Tage rein schauen.

    Ich hoffe, das hilft dir etwas weiter.

    Gruß

  4. #4
    Registriert seit
    16.11.2007
    Beiträge
    67
    Danke
    2
    Erhielt 8 Danke für 6 Beiträge

    Standard

    Danke an alle.
    Die CPU (übrigens eine 315F PN/DP) stürzt leider nicht ab, da käme man mit dem Diagnosespeicher weiter (zumindest oft), sondern angeblich kippen irgendwo Werte.
    Kriegt man eigentlich irgendwo heraus, in welche Reihenfolge die DB's im Speicher liegen? Außer die DB's alle nacheinander aufzumachen und sich die Adresse des ersten Bytes anzeigen zulassen?

    Ich meine mal bemerkt zu haben, daß zumindest der SFC20 Zugriffe verweigert, wenn der zu kopierende Bereich (Quelle und Ziel) den DB wechselt. Zumindest gibt es ja im Fehlerwort Werte, die auf so etwas hindeuten.

    Grüsse

  5. #5
    Registriert seit
    08.02.2007
    Ort
    A-2320
    Beiträge
    2.252
    Danke
    244
    Erhielt 332 Danke für 303 Beiträge

    Standard

    Zitat Zitat von knuffy Beitrag anzeigen
    Um die Fehler besser eingrenzen zu können, kannst du vor dem LAR1 die berechnete Adresse auf ein DWORD (Merker, temporäre Variable, DB) legen. Dann kannst du sie im "Beobachten" anschauen.
    Im OB121 kannst du diesen berechneten Wert auch in ein Array in einem DB schreiben, um den Fehler im laufe der Zeit beheben zu können.
    Ich bin jedoch der Meinung, dass der OB121 in einer laufenden Anlage nichts verloren hat, zumindest nicht um einfach die CPU vor dem Stop zu bewahren.
    Außerdem kannst du in der Baugruppendiagnose unter "Stacks" wenn die CPU in Stop geht anschauen, in welchem FB/FC und Netzwerk der Stop ausgelöst wurde.
    Wenn die der Fehler sporadisch ein paar Mal am Tag auftritt, würde ich "Warten auf Stop und Stack schauen"-Variante bevorzugen.
    Falls der Fehler nur ein Paar mal in der Woche auftritt, würde ich im OB121 den berechneten Adress-Merker in einen DB schreiben und dann alle paar Tage rein schauen.

    Ich hoffe, das hilft dir etwas weiter.

    Gruß
    1. Im "Beobachten" kann ich mir gleich das AR1 anschauen.
    2. Also pauschal einen OB121 zu verdammen ist zumindest vom Anlagentyp abhängig. Wenn ein chemischer Prozess am werkeln ist, ist das der letzte Baustein den ich löschen würde. Wegen einem "Verschreiber" eine Anlage abstellen die vielleicht wieder einen Tag braucht um in die Höhe zu kommen könnte ich einer Werksleitung nicht erklären. Gefährliche Zustände können/dürfen ja sowieso nicht auftreteten.

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

    Raabun (04.09.2013)

  7. #6
    Registriert seit
    17.07.2009
    Ort
    Am Rande der Ostalb
    Beiträge
    5.480
    Danke
    1.141
    Erhielt 1.240 Danke für 973 Beiträge

    Standard

    Wenn ich aus irgendwelchen Werten eine Adresse berechne dann mache generell vorher eine Bereichs- bzw. eine Plausibiliätsprüfung.
    Damit ist die Gefahr des Überschreibens anderer Bereiche geringer.

    Gruß
    Dieter

  8. #7
    Registriert seit
    29.04.2013
    Beiträge
    6
    Danke
    0
    Erhielt 0 Danke für 0 Beiträge

    Standard

    ich weiß, dass ich das AR gleich im beobachten anschauen kann, jedoch lege ich mir manchmal bei mehreren Berechnungen das Ergebnis in einen Merker-Bereich, um mithilfe einer Variablentabelle debuggen zu können.
    ich habe nichts gegen den OB121 generell, habe aber in der letzten Zeit zu oft gesehen, dass ein leerer OB121 im Programm ist um die CPU vor dem Stop zu bewahren, obwohl wissentlich noch Fehler in der Berechnung waren.
    Habe leider keine Erfahrung mit größeren verfahrenstechnischen Anlagen. Unsere Anlagen sind normalerweise Fördertechnik oder Beladesysteme für Maschinen. Nach einem Ausfall benötigt es zum Wiederanlauf meist nur wenig Zeit

  9. #8
    Registriert seit
    16.11.2007
    Beiträge
    67
    Danke
    2
    Erhielt 8 Danke für 6 Beiträge

    Standard

    Also ich habe jetzt mal einen Zugriff wie oben in meiner Frage in der PLCSim ausprobiert. Sobald ich auf einen Bereich außerhalb des eigentlich geöffneten DB's zugreife, geht die CPU mit Bereichsfehler in Stop. Mit SFC20 habe ich es nicht noch einmal probiert, da meine ich schlichte Arbeitsverweigerung in solchen Fällen in Erinnerung zu haben. Ich bin insofern beruhigter, da es ohne CPU-Stop unwahrschweinlicher ist, daß meine Zeigeroperationen Mist machen.
    Danke an alle Torsten

  10. #9
    Registriert seit
    22.06.2009
    Ort
    Sassnitz
    Beiträge
    11.181
    Danke
    923
    Erhielt 3.289 Danke für 2.658 Beiträge

    Standard

    Die CPU geht in Stop bzw. meldet Bereichsfehler nur wenn man auf Bereiche zugreift die es nicht gibt. Wenn das Programm auf eine falsche jedoch existierende Adresse zugreift, dann stört das die CPU nicht.

    Harald
    Es ist immer wieder überraschend, wie etwas plötzlich funktioniert, sobald man alles richtig macht.

    FAQ: Linkliste SIMATIC-Kommunikation über Ethernet

  11. #10
    Registriert seit
    16.11.2007
    Beiträge
    67
    Danke
    2
    Erhielt 8 Danke für 6 Beiträge

    Standard


    Zuviel Werbung?
    -> Hier kostenlos registrieren
    So hatte ich es eigentlich erwartet, denn so machen es auch die B+R - CPU's zum Beispiel.
    Bei S7-300 scheint doch noch eine Überprüfung stattzufinden, denn sobald ich auf eine Adresse hinter dem eigentlichen Ziel-DB zugreife, geht die CPU in Stop. Und dabei habe ich ca. 60 DB's geladen und greife auf einen in der "Mitte" zu, bei dem ich erwarten würde, daß danach noch was kommt.
    Von der Syntax her würde so etwas ja auch Sinn machen, denn wozu muß ich sonst mit AUF den DB erst öffnen. Schaut man sich die berechneten Adressen an, sieht man auch, daß danach auf das erste Byte bei jedem(!) DB mit Adresse 0 zugegriffen wird. Offensichtlich bewirkt der AUF-Befehl hier zusammen mit den Zugriffsbefehlen (L DIX, L DBX) eine interne Verwaltung des richtigen Adressbereichs.

    Greife ich innerhalb des DB auf eine falsche Adresse zu, kann die CPU das mangels Kristallkugel natürlich nicht erkennen. Das ist mir schon klar. Doch am fehlerträchtigsten sind ja immer die Randbereiche.

  12. Folgender Benutzer sagt Danke zu Ingmar64 für den nützlichen Beitrag:

    00alex (18.06.2013)

Ähnliche Themen

  1. Inhalt der Adresse des Any-Pointer
    Von makken im Forum Simatic
    Antworten: 5
    Letzter Beitrag: 05.11.2012, 09:55
  2. Adresse übergeben? - Pointer?
    Von GSOhm im Forum Simatic
    Antworten: 5
    Letzter Beitrag: 17.10.2012, 15:46
  3. ANY-Pointer Adresse Symbolisch
    Von Oele im Forum Simatic
    Antworten: 7
    Letzter Beitrag: 13.07.2011, 07:26
  4. Adresse an Pointer übergeben
    Von schuld im Forum Simatic
    Antworten: 14
    Letzter Beitrag: 17.11.2010, 12:42
  5. Suchen Erfahrene SPS-Programmierer und Roboterprogrammierer
    Von Bitte_ein_Bit im Forum Suche - Biete
    Antworten: 0
    Letzter Beitrag: 08.12.2007, 22:16

Lesezeichen

Berechtigungen

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