TIA Bereichslängenfehler nicht erkannt/ausgelöst

JanB1

Level-2
Beiträge
384
Reaktionspunkte
55
Zuviel Werbung?
-> Hier kostenlos registrieren
Hallo zusammen

Ich habe gerade ein interessantes kleines Problem.
Ich will mit dem OB121 "Programmierfehler" erkennen, ob ich einen ungültigen Zugriff mit einem Zeiger in einem bestimmten Baustein habe. Zum Test habe ich mit nun einen FC mit der Bausteinnummer 3 angelegt in AWL und erstelle einen Zeiger, welchen ich über einen DB mit Werten versorgen kann. Ich lasse den Zeiger Testweise auf den DB0 zeigen und rufe die Funktion BLKMOV auf. Im OB121 habe ich Code, welcher prüft ob "BlockNr"=3 und "BlockType"=2 (FC)ist und daraufhin ein Bit in einem DB setzt um zu sehen, ob der OB121 auch korrekt ausgeführt wird.
Soweit so gut, wenn ich den BLKMOV aktiviere erscheint im Diagnosepuffer der CPU ein temporärer Fehler "DB0 nicht geladen" und das Bit im DB wird gesetzt. OB121 erkennt also den Fehler im FC3 und setzt das Bit.

Nun zu meinem Problem:
Ich habe zum Test noch einen zweiten Baustein erstellt um zu prüfen dass wirklich alles korrekt funktioniert. Also habe ich einen FB mit der Nummer 1 in FUP erstellt, in welchen ich ein SCL Netzwerk eingefügt habe (ich habe immer einen FC und einen FB "Test" in meiner Test Area in FUP da ich in einem FUP Baustein Netzwerke in allen Sprachen (ausser Graph) einfügen kann). In diesem Baustein habe ich das gleiche wie in meinem FC3 aufgebaut (also Zeiger welcher auf DB0 zeigt und BLKMOV welcher aufgerufen wird und den Zugriffsfehler auslösen sollte). Im OB121 habe ich den entsprechenden Code hinzugefügt um ein zweites Bit zu setzen wenn ein Fehler in diesem FB erkannt wird.
Interessanterweise wird beim BLKMOV im FB1 KEIN Zugriffsfehler ausgelöst. Weder im Diagnosepuffer noch das Test-Bit lassen erkennen, dass ein Fehler aufgetreten ist.

Was ich geprüft habe:
  • Code in OB121 korrekt
  • Zusätzlichen FC in AWL und Szenario nachgestellt, Fehler wird erkannt
  • Zusätzlichen FB in AWL und Szenario nachgestellt, Fehler wird erkannt
  • Zusätzlichen FB in FUP und Szenario nachgestellt, Fehler wird erkannt
  • Zusätzlichen FB in SCL und Szenario nachgestellt, Fehler wird NICHT erkannt
  • Zusätzlichen FC in SCL und Szenario nachgestellt, Fehler wird NICHT erkannt

Anscheinend wird der Zugriffsfehler nicht erkannt wenn der Baustein in SCL geschrieben ist. Weiss irgendjemand von euch, warum das so ist oder habe ich soeben einen Bug/Feature entdeckt?
 
Wie sieht der SCL-Code aus? Z.B. wenn da nicht explizit BLKMOV verwendet wird sondern eine Zuweisung dann kann der SCL-Compiler den Code optimieren durch andere Anweisungen.
Falls Du Step7 classic V5.x verwendest: Wie sieht der vom SCL-Compiler erzeugte AWL-Code aus? Das kann man sich anschauen, indem man den KOP/AWL/FUP-Editor öffnet und da mit "Datei > Öffnen..." den erzeugten Baustein (FB/FC...) öffnet.

PS: für welche CPU programmierst Du da mit welcher Step7/TIA-Version?

Harald
 
Zuletzt bearbeitet:
Zuviel Werbung?
-> Hier kostenlos registrieren
Jetzt funktioniert der Anhang - ein Bild :(
Ideal wäre, wenn Du den Code als SCL-Quelle oder mindestens als Text hier anhängen würdest, und ein Aufrufbeispiel mit dem der Zugriffs-Fehler auftreten sollte. Ich habe keine Lust, Deinen Code erst vom Bild abzutippen für eigene Tests und um viele weitere Fragen zu klären...

Zu TIA V16 kann ich nichts sagen, das habe ich (noch) nicht.

Testest Du mit einer echten CPU S7-1513F oder mit einem PLCSIM?

Harald
 
Deine Formulierung "#Any_Pointer1.Bereichszeiger.%B3 += 16#84;" mag zwar hip aussehen ;) ist aber falsch. Das muß eine normale Zuweisung ":=" sein.

Liefert der BLKMOV beim erwarteten Zugriffsfehlerfall einen Fehlerstatus/Ret_Val?

Harald
 
Zuletzt bearbeitet:
Jetzt funktioniert der Anhang - ein Bild :(
Ideal wäre, wenn Du den Code als SCL-Quelle oder mindestens als Text hier anhängen würdest, und ein Aufrufbeispiel mit dem der Zugriffs-Fehler auftreten sollte. Ich habe keine Lust, Deinen Code erst vom Bild abzutippen für eigene Tests und um viele weitere Fragen zu klären...
Aii, sag doch das. Ich dachte du siehst das auf einen Blick. :ROFLMAO:

Deine Formulierung "#Any_Pointer1.Bereichszeiger.%B3 += 16#84;" mag zwar hip aussehen ;) ist aber falsch. Das muß eine normale Zuweisung ":=" sein.
Das war tatsächlich nicht beabsichtigt. Das ist noch ne Leiche da ich vorher nicht über den Slice-Zugriff gearbeitet habe sondern auf das DW den Wert 16#84000000 addiert habe.


Liefert der BLKMOV beim erwarteten Zugriffsfehlerfall einen Fehlerstatus/Ret_Val?
Der BLKMOV liefert mir den Status 0.


PS. Ich wollte gerade für dich ein TIA V15 Projekt erstellen damit du selber testen kannst. Tatsächlich muss ich aber nun sagen, dass ich den Fehler in dem TIA V15 Projekt nicht reproduzieren kann. Ich dachte es liegt am TIA, also hab ichs hochgerüstet, aber lässt sich immer noch nicht reproduzieren. Als nächstes hab ich ein Firmware-Upgrade von v2.5 auf v2.8 durchgeführt, aber auch da ohne Erfolg. Ich habe im Testprojekt 1:1 den gleichen Baustein wie in dem Bild oben, aber dort funktionierts. Ich weiss aber nicht warum... :confused:
 
Naja, verschwunden an sich ist sie nicht. Sie beschränkt sich nur auf ein spezifisches Projekt. :ROFLMAO:
 
Zurück
Oben