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

Обробка винятків у TwinCAT: конструкція __TRY, __CATCH, __FINALLY

Аналіз механізму обробки помилок за допомогою конструкцій TRY-CATCH-FINALLY в TwinCAT 3.1.4026. Особливості використання, обмеження рантайму та реалізація в TwinCAT.OpenFramework.

У середовищі TwinCAT 3.1.4026 та вище доступна конструкція __TRY → __CATCH → __FINALLY → __ENDTRY.

Цей синтаксис дозволяє виконувати блок коду, перехоплювати й обробляти винятки (якщо вони виникають) та гарантовано запускати логіку фіналізації незалежно від результату.

🔹 Особливості та нюанси:

• Не всі винятки можна обробити. Наприклад, __TRY → __CATCH не захистить від критичних порушень роботи з пам’яттю (таких як некоректна адресація або подвійне звільнення пам’яті).

• Усередині блоку __CATCH ви можете отримати числовий код помилки. Деякі коди попередньо визначені в перерахуванні __SYSTEM.ExceptionCode.

• Користувацькі винятки можна створювати та генерувати за допомогою функції Tc2_System.F_RaiseException.

• Конструкція __TRY → __FINALLY → __ENDTRY без блоку __CATCH наразі не підтримується.

• Починаючи з версії TwinCAT 3.1.4026.21, блок __FINALLY не виконується, якщо інший виняток виникає всередині __CATCH. Схоже, це баг, який мають виправити у майбутніх версіях.

• Існують інші нюанси та тонкощі, які тут не описані, оскільки вони ще можуть змінитися. Загалом, цей механізм є достатньо стабільним для практичного використання.

💡 Що я побудував поверх цього:

На базі цього механізму в TwinCAT.OpenFramework я реалізував розширену систему обробки винятків, яка значно покращує роботу з помилками.

Вона забезпечує: • Детальне повідомлення про помилку • Код помилки • Місце виникнення помилки (простір імен, клас, метод, рядок) • Часову мітку виникнення • Підтримку вкладених винятків (inner exception) • Можливість створення агрегованих винятків (декілька вкладених винятків)

Якщо вам цікаво — спробуйте за посиланням. Вона потужна, безкоштовна для комерційного використання та має відкритий вихідний код.

Опис концепції: ExceptionsConcept.md

Обробка винятків у TwinCAT

#TwinCAT #StructuredText #OOP #IndustrialAutomation #OpenFramework #Exceptions #TryCatch