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

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

Thema: B-Stack auslesen ohne CPU-Stop?

  1. #1
    Registriert seit
    24.02.2010
    Beiträge
    25
    Danke
    4
    Erhielt 0 Danke für 0 Beiträge

    Standard


    Zuviel Werbung?
    -> Hier kostenlos registrieren
    Hallo,

    habe einen FB der im Programm mehrere Male (aus anderen FBs & FCs) aufgerufen wird und ich möchte rausfinden, von wem der FB aufgerufen wurde. Eine Möglichkeit wäre die SPS in Stop zu setzen und dann den B-Stack anzugucken. Ist es aber evtl. möglich den aufrufenden Baustein mit einem Befehl (z.B. SZL) zu erfahren?

    Der Befehl DINO würde mir den Instanz-DB anzeigen, aber für den aufgerufenen FB gibt es keinen Befehl?!
    Zitieren Zitieren B-Stack auslesen ohne CPU-Stop?  

  2. #2
    Registriert seit
    19.06.2008
    Ort
    Ostalbkreis
    Beiträge
    3.140
    Danke
    201
    Erhielt 553 Danke für 498 Beiträge

    Standard

    Lad dir das Programm von der CPU.

    Referenzdaten generieren. Programmstruktur ansehen.

  3. #3
    Avatar von shotar
    shotar ist offline Neuer Benutzer
    Themenstarter
    Registriert seit
    24.02.2010
    Beiträge
    25
    Danke
    4
    Erhielt 0 Danke für 0 Beiträge

    Standard

    geht nicht bzw. es bringt mir nichts, denn in dem Programm sind jede Menge indirekte Aufrufe von FBs und FCs und ich vermute irgendwo dort den Fehler...

    Also kann man sich im laufendem Programm den B-Stack irgendwie auslesen? Ich dachte da an SZLs, habe aber nichts gefunden...

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

    Standard

    Weiss nicht ob ichs ganz verstanden habe.
    Es gibt mehrere Stellen von dem aus FB's indirekt aufgerufen werden.
    Diese sind aber bekannt oder? Jedes mal mit der gleichen Instanz nehme ich an....

    Na dann schreib vor jedem dieser indirekten Aufrufe einen Wert in ein Merkerwort, und lies das Merkerwort im FB auf. Dann sollte klar sein vorher der Aufruf kommt.
    Du kannst auch im FB mittels:

    L MW x
    L 1
    ==I
    S Bit

    herausfinden ob er mehrmals aufgerufen wird, das ist ja auch möglich.
    Komisch, indirekte FB Aufrufe.
    Wie sagte mal ein Kunde zu mir: "Speicherplatz ist egal, auf trickreiche Programmierung wird kein Wert gelegt".

    Gruß
    Karl

  5. #5
    Registriert seit
    06.10.2004
    Ort
    Kopenhagen.
    Beiträge
    4.626
    Danke
    377
    Erhielt 801 Danke für 642 Beiträge

    Standard

    Dafür hat man PLCSIM.
    Dann kanst du die Fehler-OBs löschen und dadurch ein CPU Stop auslösen wenn der Fehler auftritt.
    Und dann hast du den gewünschte Information in der B-Stack info.
    Jesper M. Pedersen

  6. #6
    Avatar von shotar
    shotar ist offline Neuer Benutzer
    Themenstarter
    Registriert seit
    24.02.2010
    Beiträge
    25
    Danke
    4
    Erhielt 0 Danke für 0 Beiträge

    Standard

    eure Lösungen gehen auch nicht, mein Programm ist viel zu groß (also sehr viele indirekte Aufrufe) dafür und der Fehler tritt nur in "Live"-Betrieb auf... dann muss ich wohl den doch den SFC46 aufrufen und die CPU stopppen...

  7. #7
    Registriert seit
    29.03.2004
    Beiträge
    5.741
    Danke
    143
    Erhielt 1.687 Danke für 1.226 Beiträge

    Standard

    Abhängig von deiner CPU kannst du auch die Daten des Fehler OB (in deinem Fall wohl der OB121) auswerten. Der liefert bei einer 300er aber nicht alle Informationen.

    Wenn du einen ungefähren Verdacht hast in welchem Baustein das wohl sein könnte, kannst du am Anfang jedes dieser Bausteine die Bausteinnummer und den gerade geöffneten DB/DI in einen Merker oder Datenbaustein wegschreiben. Im Fehler OB programmierst du dann eine Auswertung welche diese Informationen an anderer Stelle wegspeichert, wenn notwendig in einem Ringspeicher mit Zeitstempel.

    Über eine SZL-Abfrage kommt man an den B-Stack nicht heran. Wenn du über den Simatic Manager diese Funktion auslöst, werden die Informationen auch nicht über eine SZL abgefragt, sondern über eine andere Funktion. Dann wird es wohl auch keine undokumentierte Spezial-SZL geben.

  8. #8
    Registriert seit
    06.10.2004
    Ort
    Kopenhagen.
    Beiträge
    4.626
    Danke
    377
    Erhielt 801 Danke für 642 Beiträge

    Standard

    Zitat Zitat von shotar Beitrag anzeigen
    eure Lösungen gehen auch nicht, mein Programm ist viel zu groß (also sehr viele indirekte Aufrufe) dafür und der Fehler tritt nur in "Live"-Betrieb auf...
    Warum eigentlich ?
    PLCSIM hat kein Problem mit grosse Programme.
    Eine gute Simulations-Modus ist nicht einfach zu programmieren, aber ist den Einsatz wert. Z.B für genau solche Fälle wie diese.

    Zitat Zitat von shotar Beitrag anzeigen
    dann muss ich wohl den doch den SFC46 aufrufen und die CPU stopppen...
    SFC46 STP wird dich nichts erzählen. Nur ein stop verursacht durch den Fehler gibt die Informatione in den B-Stack.
    Jesper M. Pedersen

  9. #9
    Avatar von shotar
    shotar ist offline Neuer Benutzer
    Themenstarter
    Registriert seit
    24.02.2010
    Beiträge
    25
    Danke
    4
    Erhielt 0 Danke für 0 Beiträge

    Standard

    Zitat Zitat von JesperMP Beitrag anzeigen
    Warum eigentlich ?
    PLCSIM hat kein Problem mit grosse Programme.
    Eine gute Simulations-Modus ist nicht einfach zu programmieren, aber ist den Einsatz wert. Z.B für genau solche Fälle wie diese.
    Ich habe aber Kommunikationspartner über TCP/IP und PROFIBUS die evtl. etwas mit meinem Fehler zu tun haben.


    Zitat Zitat von JesperMP Beitrag anzeigen
    SFC46 STP wird dich nichts erzählen. Nur ein stop verursacht durch den Fehler gibt die Informatione in den B-Stack.
    OK, dann mach ich einfach eine Division durch 0

    Mit dem OB121 kann ich aber auch nur feststellen, in welchem Baustein der Fehler auftrat, jedoch nicht den Baustein der den Fehler-Bausteil aufgerufen hat.
    Ich könnte in dem Bausteil einen Pointer auf die Lokalvariablen des aufrufenden Bausteins machen, so könnte ich die OB Nummer auslesen. Aber eben nur wenn er aus einen OB direkt aufgerufen wird...

    Die Bausteinnummer müssen ja in der SPS irgendwo vorhanden sein (eben wenn mann den B-Stack ausliest), gibt es keinen Hack wie man an die Infos drankommt? Also eine Art Quellcode vom OB121?!
    Geändert von shotar (24.06.2012 um 11:30 Uhr)

  10. #10
    Avatar von shotar
    shotar ist offline Neuer Benutzer
    Themenstarter
    Registriert seit
    24.02.2010
    Beiträge
    25
    Danke
    4
    Erhielt 0 Danke für 0 Beiträge

    Standard


    Zuviel Werbung?
    -> Hier kostenlos registrieren
    Zitat Zitat von Thomas_v2.1 Beitrag anzeigen
    Über eine SZL-Abfrage kommt man an den B-Stack nicht heran. Wenn du über den Simatic Manager diese Funktion auslöst, werden die Informationen auch nicht über eine SZL abgefragt, sondern über eine andere Funktion. Dann wird es wohl auch keine undokumentierte Spezial-SZL geben.
    Gibt es undokumentierte SZLs? Was denn zum Beispiel?

Ähnliche Themen

  1. Daten aus Remote-CPU ohne Verbindung auslesen
    Von kassla im Forum Simatic
    Antworten: 3
    Letzter Beitrag: 14.05.2009, 14:26
  2. Antworten: 4
    Letzter Beitrag: 28.03.2008, 20:09
  3. DIagnoseRepeater auslesen ohne S7
    Von Peltzerserbe im Forum Hochsprachen - OPC
    Antworten: 1
    Letzter Beitrag: 02.11.2007, 17:56
  4. Baugruppenwechsel ohne Stop
    Von coma2205 im Forum Simatic
    Antworten: 7
    Letzter Beitrag: 16.07.2007, 12:24
  5. Antworten: 4
    Letzter Beitrag: 29.08.2005, 12:05

Lesezeichen

Berechtigungen

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