Інженерні нотатки TwinCAT
← Всі записи

Особливості поведінки FB_exit у TwinCAT

Розуміння того, коли та як автоматично викликається FB_exit у TwinCAT, включаючи основні обмеження компілятора.

Метод FB_exit має викликатися автоматично щоразу, коли об’єкт видаляється з пам’яті. У теорії все звучить чудово, але на практиці різні версії компілятора мали свої нюанси з цим.

  1. Бували випадки, коли FB_exit мав викликатися, але цього не відбувалося. Тому тим, хто досі працює зі старішими версіями, слід бути особливо обережними. У найновішому компіляторі, доступному на цей момент (TwinCAT 3.1.4026.19), мені відомо лише про одну проблему: якщо об’єкт було створено як локальну змінну всередині методу, сам метод викликався в блоці __TRY / __CATCH, і виникло виключення (exception), тоді FB_exit викликаний не буде.

  2. FB_exit викликається лише тоді, коли видалення виконується через вказівник (pointer) на тип функціонального блока. В іншому випадку пам’ять буде просто очищено, але FB_exit не викличеться. Нижче наведено демонстрацію цієї поведінки, яка стосується всіх версій.

Демонстрація коду FB_exit

#TwinCAT #CoDeSys #OOP #StructuredText #IndustrialAutomation #FbExit