Поведение указателя и ссылки во время онлайн-изменения

может ли кто-нибудь помочь мне с дополнительной информацией о том, как указатели, ссылки и ссылки на интерфейс ведут себя во время онлайн-изменения?

Чего я должен остерегаться? Из других ответов я понимаю, что указатели могут быть опасными, если они не записываются во время каждого цикла, но я в основном буду использовать интерфейсы и ссылки.


person krakers    schedule 20.08.2017    source источник


Ответы (1)


Когда производится изменение в режиме онлайн, переменные, функциональные блоки и другие части программы могут перемещаться в другую ячейку памяти. Следовательно, если адрес указателя - это старая информация, он может относиться к адресу памяти, содержащему что-то еще.

Поэтому, если указатели используются, их следует регулярно обновлять с помощью команды ADR, как вы сказали.

При использовании ссылок и интерфейсов я не вижу проблем с онлайн-изменениями, потому что система должна обрабатывать их автоматически. В TwinCAT 3 система автоматически переадресовывает переменные (источник: https://infosys.beckhoff.com/english.php?content=../content/1033/tc3_plc_intro/9007199390694027.html&id=) и поскольку он основан на Codesys, я думаю, что это то же самое и с другими системами.

При использовании ссылок может быть хорошей идеей проверить, действительна ли ссылка. В TwinCAT 3 есть функция __ISVALIDREF, она должна быть и в других системах на базе Codesys.

person Quirzo    schedule 21.08.2017
comment
Спасибо, теперь мне нужно только проверить, поддерживается ли функциональность Beckhoff и в ядре Codesys. :) Я планировал передать ссылку на что-то в FB_init (), из вашего ответа я считаю, что это сработает, потому что ссылки обновляются, даже если FB_init () не вызывается? - person krakers; 22.08.2017
comment
Я не совсем уверен, но думаю, это должно сработать. Вам стоит попробовать как-то протестировать это в локальном программном ПЛК, может быть, много и много раз меняя код? Или скопируйте указанный блок / переменную в другое место памяти с помощью функции memcpy. - person Quirzo; 23.08.2017