オンラインでの変更中にポインター、リファレンス、およびインターフェース参照がどのように動作するかについての詳細は誰でも教えてください。オンラインでの変更中のポインターと参照動作
私は何を考慮していますか?私は他の答えから、各サイクル中にこれらが書かれていなければポインタが危険かもしれないことを理解していますが、主にインターフェイスと参照を使用します。
オンラインでの変更中にポインター、リファレンス、およびインターフェース参照がどのように動作するかについての詳細は誰でも教えてください。オンラインでの変更中のポインターと参照動作
私は何を考慮していますか?私は他の答えから、各サイクル中にこれらが書かれていなければポインタが危険かもしれないことを理解していますが、主にインターフェイスと参照を使用します。
オンラインで変更すると、変数、機能ブロック、およびその他のプログラム部分が別のメモリ位置に移動することがあります。従って、ポインタアドレスが古い情報であれば、それは何か他のものを含むメモリアドレスを参照するかもしれない。
ポインタが使用されている場合は、あなたが言ったように、それらは定期的にADRコマンドで更新する必要があります。
リファレンスとインターフェイスを使用しているときに、システムが自動的にそれらを処理する必要があるため、オンライン変更に関する問題はありません。 TwinCAT 3では、システムは自動的に変数を読み込みます(ソース:https://infosys.beckhoff.com/english.php?content=../content/1033/tc3_plc_intro/9007199390694027.html&id=)。これはCodesysベースなので、他のシステムと同じだと思います。
参照を使用する場合、参照が有効であることを確認することをお勧めします。 TwinCAT 3には、関数__ISVALIDREF
があり、それは他のCodesysベースのシステムにも存在するはずです。
私はBeckhoffの機能がCodesysの "core"でもサポートされているかどうかを確認するだけです。 :) FB_init()が呼び出されていなくても参照が更新されるため、私はあなたの答えからFB_init()の何かへの参照を渡す予定です。 – krakers
私は絶対にはわかりませんが、うまくいくはずです。コードを何度も何度も変更することで、どうやらローカルのソフトPLCでテストしようとするべきでしょうか?または、参照されたブロック/変数をmemcpy関数を使って別のメモリ位置にコピーする。 – Quirzo