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

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

Thema: FB aus einem FC heraus aufrufen wird mit falschen Werten übergeben

  1. #1
    Registriert seit
    02.12.2015
    Beiträge
    8
    Danke
    0
    Erhielt 0 Danke für 0 Beiträge

    Frage


    Zuviel Werbung?
    -> Hier kostenlos registrieren
    Hi,

    ich habe in einer Förderstrecke für z.B. Stopper einen FB geschrieben, der immer mit anderen Werten am IN sowie einem DB für jeden Stopper aufgerufen wird.
    Diese FB-Aufrufe liegen alle in einem FC in den Netzwerken hintereinander.

    Nach einiger Zeit allerdings ergibt es plötzlich Probleme:

    Im FB aus NW 2 bis Ende erscheinen teilweise Werte des FBs aus Netzwerk 1. In den dazugehörigen DBs sind die Werte, im FC selbst sind sie ebenfalls richtig, öffne ich allerdings den FB mit passendem DB zum beobachten stehen dort andere Aktualwerte vom IN-Parameter drin. Diese verhindern dann den weiteren Programmablauf.

    Es sind nicht nur INT-Werte, sondern auch einfache boolsche Operanden.

    Nehme ich nun einfach einen FB aus diesem FC heraus und stelle ihn in einen anderen FC ein, so funktioniert es ohne Probleme.

    Woher könnten solche Probleme kommen?
    Zeitstempel sind alle okay
    Datenbausteine und FBs habe ich von der CPU gelöscht, DBs neu im Programm generiert (gelöscht und generieren lassen) und wieder übertragen, ohne Erfolg.
    Kopiere ich den FB, bennenne ihn um und lade den neuen, dann funktioniert es auch, aber kann ja nicht des Rätsels Lösung sein. Dann hätte ich gleich einen FC schreiben können sowie DBs um die dann dort hineinzuschreiben, davon abgesehen würden 60 gleiche FBs den Speicher sprengen.

    Es gibt keine Querverweise auf Speicherbereiche, auch keinen absoluten Aufruf innerhalb des FBs. Alles was hinein soll wird an IN, IN/OUT, OUT verarbeitet. Genutzt wird für Flankenmerker der STAT-Bereich. Den TEMP nutze ich nie.

    Das Programm liegt auf einer CPU315-2DP 315-2AH14-0AB0 mit FW 3.3.11 - Aktualisierung der FW würde ich ungern machen, da ich bei einem Fehlschlag/Defekt keinen Ersatz bekommen kann (Afrika).
    Programmiert wurde mit Step7 5.5 + SP4

    Es betrifft im übrigen nicht nur diesen einen FB, sondern ALLE. Also alle Weichen, Stopper, Kettenschmierungen, Pufferstrecken, etc.

    Ein Urlöschen der CPU habe ich bereits einmal durchgeführt, naja mehrmals inkl. Werkseinstellungen.

    Der OB35 wird zyklisch mit 100ms aufgerufen und öffnet einen FC, welcher 4 PID-Regler beinhaltet. Sollte aber doch kein Problem darstellen.

    Der Gesamtzyklus beträgt 5ms laut Diagnose. Fehler sind keine eingetragen.

    Wie oben erwähnt, wird der FB problemlos ausgeführt wenn ich ihn verschiebe oder umkopiere, aber nur dann, wenn er nicht noch einmal verwendet wird, daher schliesse ich einen Programmierfehler aus.

    Gibt es evtl. die Möglichkeit das die DBs nicht richtig dem FB zugeordnet werden? Wie kann ich das feststellen, wenn er mit einfacher CALL-Anweisung mitsamt DB geöffnet wird?

    Es ist relativ schlecht, wenn der FB mit DB221 aufgerufen wird und der FB mit DB230 plötzlich den Wert des DB221 erhält, obwohl im DB230 ein anderer Wert steht.

    Hoffe auf Abhilfe .

    LG
    Björn

    EDIT:
    Ich habe den aufrufenden FC und den aufgerufenen FB angehangen. Der FB in Netzwerk 2 hat im DB seinen richtigen Wert stehen, aber beim Beobachten und auf der CPU nutzt er den Wert aus dem DB aus Netzwerk 1. Leider ist es kein einfacher Beobachten-Fehler, sondern tatsächlich blockiert es so (Im Testbetrieb beobachtet mit gleichem Ergebnis)
    Angehängte Dateien Angehängte Dateien
    Geändert von Escride (30.07.2016 um 21:02 Uhr)
    Zitieren Zitieren FB aus einem FC heraus aufrufen wird mit falschen Werten übergeben  

  2. #2
    Registriert seit
    03.12.2008
    Beiträge
    644
    Danke
    148
    Erhielt 183 Danke für 111 Beiträge

    Standard

    Hallo
    Ich vermute, dass das Programm schon korrekt abgearbeitet wird.

    Du schreibst:
    ......Im FB aus NW 2 bis Ende erscheinen teilweise Werte des FBs aus Netzwerk 1.

    Wenn du den FB öffnest und dann mit "Brille" beobachtest, siehst du die aktualwerte des ersten Aufrufes.
    Kannst du die Aufrufreihenfolge (zum beobachen) mal ändern, so dass der "Problemstopper" als erster (letzter?) augerufen wird?

    Man kann das einstellen, Zielsystem--Testbetrieb--Aufrufumgebung oder so ähnlich (habe momentan kein Step 7 parat).
    Geht aber glaube ich auch nur wenn der "Stopper-FB" in verschiedenen FCs aufgerufen wird und nicht in einem FC nacheinander

  3. #3
    Escride ist offline Neuer Benutzer
    Themenstarter
    Registriert seit
    02.12.2015
    Beiträge
    8
    Danke
    0
    Erhielt 0 Danke für 0 Beiträge

    Standard

    Ich öffne standardmäßig FBs, indem ich im dazugehörigen FC den Baustein rechtsklicke und dann auf Baustein-öffnen Beobachten gehe. Ich habe den Testbetrieb bereits versucht, hatte aber den gleichen Effekt.

    Wenn ich den "Problemstopper" als ersten aufrufe, dann haben alle folgenden FBs seine Werte, aber nur teilweise. So wird mal nur ein BOOL, mal ein INT falsch übergeben.

    Irgendwie glaube ich langsam das der FB der abgearbeitet wurde noch was im Speicher stehen hat, der vom darauf folgenden FB nicht überschrieben wird oder sowas, sprich Daten von DB1 bleiben zum Teil hängen.

    Tests kann ich erst morgen wieder machen, allerdings wollte ich die Anlage am Dienstag übergeben, was eh schon schwierig wird mittlerweile.

  4. #4
    Registriert seit
    03.12.2008
    Beiträge
    644
    Danke
    148
    Erhielt 183 Danke für 111 Beiträge

    Standard

    Zitat Zitat von Escride Beitrag anzeigen
    Irgendwie glaube ich langsam das der FB der abgearbeitet wurde noch was im Speicher stehen hat, der vom darauf folgenden FB nicht überschrieben wird oder sowas, sprich Daten von DB1 bleiben zum Teil hängen.
    Kann ich mir nicht vorstellen.
    Jeder FB-Aufruf hat ja seinen eigenen Instanz DB. Was für Werte stehen denn da drin?


    Das in dem FB keine absoluten Adressen (Merker, Zeiten...) erlaubt sind ist klar?
    Kommt in dem FB indirekte Adressierung vor?
    Sind #TEMP Variablen im Spiel?
    Geändert von Paul (30.07.2016 um 22:20 Uhr)

  5. #5
    Registriert seit
    29.03.2004
    Beiträge
    5.371
    Danke
    134
    Erhielt 1.586 Danke für 1.158 Beiträge

    Standard

    Zitat Zitat von Escride Beitrag anzeigen
    Ich öffne standardmäßig FBs, indem ich im dazugehörigen FC den Baustein rechtsklicke und dann auf Baustein-öffnen Beobachten gehe. Ich habe den Testbetrieb bereits versucht, hatte aber den gleichen Effekt.
    Das funktioniert aber so nicht. Es gibt zwei Möglichkeiten (dich ich zumindest verwende):
    1) FB öffnen, Testbetrieb einstellen, Instanz-DB manuell eingeben
    2) Übergeordeten Baustein ONLINE öffnen, Rechtsklick auf Instanz -> Beobachten mit Aufrufpfad

    Bei deiner Variante ist garantiert der falsche Instanz-DB beim Beobachten geöffnet. Lass dir beim Beobachten einer AWL-Zeile mal das DB2 Register anzeigen, das ist der geöffnete Instanz-DB.
    Die Genialität einer Konstruktion liegt in ihrer Einfachheit – Kompliziert bauen kann jeder.

    (Sergei Pawlowitsch Koroljow, sowjetischer Konstrukteur von Raketen und Weltraumpionier)

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

    Paul (30.07.2016)

  7. #6
    Registriert seit
    03.12.2008
    Beiträge
    644
    Danke
    148
    Erhielt 183 Danke für 111 Beiträge

    Standard

    Zitat Zitat von Thomas_v2.1 Beitrag anzeigen
    Lass dir beim Beobachten einer AWL-Zeile mal das DB2 Register anzeigen, das ist der geöffnete Instanz-DB.
    Guter Tip!

  8. #7
    Registriert seit
    15.05.2015
    Beiträge
    79
    Danke
    2
    Erhielt 17 Danke für 17 Beiträge

    Standard

    Warum hängen an deinen 3 FBs immer immer die gleichen drei boolschen Operanden aus dem L-Stack ? z.B. ZählenPusherDogs = L0.0 ?

  9. #8
    Registriert seit
    12.04.2005
    Ort
    Black Forest
    Beiträge
    1.282
    Danke
    15
    Erhielt 126 Danke für 113 Beiträge

    Standard

    Zitat Zitat von TP-Inc Beitrag anzeigen
    Warum hängen an deinen 3 FBs immer immer die gleichen drei boolschen Operanden aus dem L-Stack ? z.B. ZählenPusherDogs = L0.0 ?
    Weil das wohl der Editor selbst macht, da der Baustein bestimmt in KOP oder FUP eingegeben wurde.
    Selbst wenn AWL, wäre es ja egal, da diese Pararmeter jeweils vor dem Aufruf ja durch die Zuweisung beschrieben wurden...

    „Eine Frage raubt mir den Verstand bin ich verrückt oder sind es die Anderen ?“

    Albert Einstein

  10. #9
    Registriert seit
    03.12.2008
    Beiträge
    644
    Danke
    148
    Erhielt 183 Danke für 111 Beiträge

    Standard

    Zitat Zitat von TP-Inc Beitrag anzeigen
    Warum hängen an deinen 3 FBs immer immer die gleichen drei boolschen Operanden aus dem L-Stack ? z.B. ZählenPusherDogs = L0.0 ?
    Das kommt daher weil das ursprünglich in FUP programmiert ist.
    Wenn du dann auf AWL umschaltest macht Step7 die TEMP Variablen selbstständig daraus

    L 0.0 ist das Ergebnis der UND-Verknüpfung die in FUP am IN-Beinchen CU hängt
    Code:
    U #Schritt_1 #Schritt_1
    U #Kette_laeuft #Kette_laeuft
    UN #Schritt_2 #Schritt_2
    U #ZaehlenPusherDogs #ZaehlenPusherDogs
    = L 0.0
    BLD 103
    U(
    O #RESET #RESET
    O #HM_R #HM_R
    )
    = L 0.1
    BLD 103
    
    CALL #Zaehlwert_Schmieren #Zaehlwert_Schmieren
    CU:=L0.0
    R :=L0.1
    PV:=#Kettenlaenge_Pulse #Kettenlaenge_Pulse
    Q :=
    CV:=
    NOP 0
    

  11. #10
    Escride ist offline Neuer Benutzer
    Themenstarter
    Registriert seit
    02.12.2015
    Beiträge
    8
    Danke
    0
    Erhielt 0 Danke für 0 Beiträge

    Standard


    Zuviel Werbung?
    -> Hier kostenlos registrieren
    So hallo,

    erstmals Danke das Ihr Euch dem Problem angenommen habt soweit.

    Was ich heute getestet habe:
    CPU in Testbetrieb, Beobachten mit Aufrufpad und die Werte in folgenden FBs werden vom ersten DB übernommen, also wieder teilweise falsch.
    Das ganze habe ich sehr oft versucht, immer wieder mit dem gleichen Ergebnis. Bei vielen, aber nicht allen FBs.

    Wenn ich die Aufrufreihenfolge der FBs z.B. umdrehe, dann haben die folgenden die Werte des ersten, obwohl das ja eigentlich nicht sein darf.

    Im AWL zeigt er mir im FB immer wieder andere Werte an wie die die im DB stehen. Es sind dann immer wieder die gleichen. Zum Test habe ich die CPU komplett gelöscht und nur den FC, FB, OB1 und die drei DBs geladen. Gleiches Ergebnis.
    Erstelle ich drei FCs und rufe diese separat auf, gehts. Irgendwie macht es keinen Sinn.

    Ich habe das Programm nun soweit abgeändert das ich die FBs kopiert habe und mit neuem Namen aufrufe, als FB1, FB2, FB3, etc. Dadurch ist der Speicherplatz nun ziemlich am Ende. Ich hoffe, das ich mit dem Rest noch klar komme, schaut zumindest so aus da die Anlage alle 6 Teilbereiche startet und jetzt anständig abarbeitet. Werde dann eine größere Karte beim nächsten Besuch mitnehmen. Das Projekt habe ich so wie es ist mal an Siemens zur Überprüfung geschickt, am Telefon konnten die logischerweise auch nicht helfen.

    Das mit dem FB-Beobachten wusste ich vorher nicht mit dem Testbetrieb, immerhin habe ich das nun gelernt, aber bisher musste ich auch nie wirklich oft in einen FB schauen, weil die bisher immer problemlos liefen.

    Die Bausteine wurden ursprünglich in FUP geschrieben, ja. Liegt daran, das unsere Kunden ein leicht lesbares Programm haben wollen und FUP da natürlich für die meisten einfacher ist.

    Sollte Siemens mir eine Lösung angeben oder überhaupt herausfinden was da los ist, werde ich mich hier erneut melden und die Antwort zurückgeben.

    Bis dahin erstmal Vielen Dank!

    edit:
    An Siemens habe ich mich gewendet weil die Zeit zu knapp wird und das Problem ja nicht immer war, sondern erst seit kurzem. Vielleicht hat die CPU ja doch ne Macke oder sowas ^^.
    Geändert von Escride (31.07.2016 um 18:42 Uhr)

Ähnliche Themen

  1. Antworten: 6
    Letzter Beitrag: 10.03.2016, 08:54
  2. Antworten: 1
    Letzter Beitrag: 17.07.2014, 14:34
  3. Antworten: 1
    Letzter Beitrag: 04.01.2014, 16:27
  4. Aus TwinCat heraus von einem fremden OPC Server Daten lesen
    Von Byteverdreher im Forum CODESYS und IEC61131
    Antworten: 10
    Letzter Beitrag: 13.06.2008, 11:37
  5. SCL Funktion aus einem AWL FC aufrufen
    Von plant1 im Forum Simatic
    Antworten: 2
    Letzter Beitrag: 14.08.2006, 17:22

Lesezeichen

Berechtigungen

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