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.
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
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