2017-08-20 5 views
0

Könnte mir bitte jemand weiterhelfen, wie sich Zeiger, Referenzen und Schnittstellenreferenzen während einer Online-Änderung verhalten?Zeiger- und Referenzverhalten bei Online-Änderung

Worauf muss ich achten? Ich verstehe aus anderen Antworten, dass Zeiger gefährlich sein können, wenn diese nicht in jedem Zyklus geschrieben werden, aber ich werde hauptsächlich Interfaces und Referenzen verwenden.

Antwort

1

Wenn eine Online-Änderung vorgenommen wird, können sich Variablen, Funktionsblöcke und andere Programmteile an einem anderen Speicherort verschieben. Wenn die Zeigeradresse eine alte Information ist, könnte sie sich daher auf eine Speicheradresse beziehen, die etwas anderes enthält.

Also, wenn die Zeiger verwendet werden, sollten sie regelmäßig mit dem ADR-Befehl aktualisiert werden, wie Sie sagten.

Wenn ich Verweise und Schnittstellen verwende, sehe ich keine Probleme mit Online-Änderungen, weil das System sie automatisch behandeln sollte. In TwinCAT 3 wird das System Variablen automatisch neu adressieren (Quelle: https://infosys.beckhoff.com/english.php?content=../content/1033/tc3_plc_intro/9007199390694027.html&id=) und weil es auf Codesys basiert, denke ich, dass es mit anderen Systemen identisch ist.

Bei der Verwendung von Referenzen kann es sinnvoll sein, die Gültigkeit der Referenz zu überprüfen. In TwinCAT 3 gibt es eine Funktion __ISVALIDREF und diese sollte auch in anderen Codesys basierten Systemen enthalten sein.

+0

Danke, jetzt muss ich nur noch prüfen, ob die Beckhoff-Funktionalität auch in Codesys "Core" unterstützt wird. :) Ich plante, einen Verweis auf etwas in FB_init() zu übergeben, von Ihrer Antwort denke ich, dass das funktionieren wird, weil die Referenzen aktualisiert werden, selbst wenn FB_init() nicht aufgerufen wird? – krakers

+0

Ich bin mir nicht ganz sicher, aber ich denke, es sollte funktionieren. Sie sollten versuchen, es irgendwie in der lokalen weichen PLC zu testen, vielleicht indem Sie den Code oft und oft ändern? Oder kopieren Sie den referenzierten Block/die Variable an einen anderen Speicherort mit Memcpy-Funktion. – Quirzo