TwinCAT 3: SPS anhalten

LeFish

Level-1
Beiträge
60
Reaktionspunkte
3
Zuviel Werbung?
-> Hier kostenlos registrieren
Hallo allerseits,

ich habe eine Datentypprüfung in meine Bibliothek implementiert und schreibe im Fehlerfalle in ein Log-Array. Analog zu Beckhoff: TRY/CATCH

Die Datentypprüfung habe ich mittels __ISVALIDREF implementiert und soweit funktioniert das auch. Der Logeintrag wird gemacht, die SPS läuft weiter.

Ich möchte nun die SPS an der Stelle anhalten, an der der fehlerhafte Zugriff auftritt. Ich werfe den Fehler in verschiedenen Methoden eines FBs innerhalb der Lib. Der Zugriff passiert immer von außerhalb der Bibliothek aus einem konkreten Projekt in dem die Bibliothek eingebunden wird. Die Bibliothek wird zu diesem Zeitpunkt auch noch als .library und nicht als .compiled-library eingebunden, um maximale Transparenz zu gewährleisten.

Ob die SPS kontrolliert angehalten wird oder unkontrolliert genau an der Stelle abstürzt ist nicht so relevant, da es hier um Debugging während der Entwicklungsphase geht. Dieser Datentypfehler kann nur während dieser frühen Phase eintreten. Danach sind die Datentypen immer statisch hinterlegt, und der Fehler kann nicht mehr eintreten.

Ideal wäre ein PopUp im Online-Modus mit direktem Sprung zu Fehlerstelle, ähnlich wie ich es von CodeSys kenne, wenn man auf einen NULL-POINTER zugreift. Das wäre ausreichend, da ich gewährleisten kann, dass ich immer bereits Online auf der SPS bin während der Fehler potenziell eintritt.

Auch wäre eine Möglichkeit super, die auf eine CodeSys-Steuerung übertragbar wäre.

Ich habe mir den Tc2_Utilities.PLC_STOP FB angeschaut, aber der scheint die SPS nur anzuhalten und nicht auf die entsprechende Stelle zu verweisen.

Weiß jemand Rat?

Danke!

Beste Grüße
LeFish
 
Zuletzt bearbeitet:
Zuviel Werbung?
-> Hier kostenlos registrieren
@KLM: Vielen Dank für den Input.

Ich habe es soeben so probiert, bekomme aber auf dem TwinCAT-System bei
Code:
_pApp := AppGetCurrent(pResult:=_result);

nur einen nullptr zurück.

Ich denke es liegt daran: TC arbeitet mit AMSNetID und Port. Ich muss nun noch den Zusammenhang zwischen CodeSysApp und TC-Runtime herstellen...
Ich hab diesbezgl. schon an den Beckhoff-Support geschrieben und hoffe auf eine Antwort.

zB.: Kann ich mit
Code:
Tc2Utilities.PLC_STOP(NETID := '', PORT := 851, STOP := TRUE);
die Runtime anhalten. Da aber keine Exception generiert wird springt die IDE auch nicht auf einen spezifischen Punkt im Code...
 
Für TwinCAT und 4024 (möglich das sich da mit 4026 was ändert).
Jeder reguläre Stopp-Befehl wird den Zyklus zu Ende rechnen.
Die einzige Möglichkeit ist die Debug-Features von CoDeSys/TwinCAT zu nutzen. Konkret irgend einen Mist zu codieren der das System in eine Exception schickt. Bei dem Mist muss man nur aufpassend, das muss man testen und mag auch Platform (e.g Division durch 0 bei REALS) oder sogar Projektabhängig sein (Speicherzugriffe).

Guga
 
Zurück
Oben