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

Методи з опціональними аргументами

Користь від аргументів зі значеннями за замовчуванням, їх особливості та обмеження в TwinCAT/CoDeSys.

У TwinCAT 3.1.4026 з’явилася можливість не передавати значення для вхідних параметрів методу, якщо для них визначено значення за замовчуванням.

Хочу показати, як ця можливість допомагає зменшити кількість зайвого коду, а також поділитися кількома особливостями, які я виявив під час її використання.

Загалом усе працює дуже добре, за винятком деяких проблем у конструкціях __TRY/__CATCH, мали бути виправлені в новіших версіях TwinCAT, оскільки я неодноразово повідомляв про них у службу підтримки.

Проте є два моменти, які, на мою думку, ще можна було б покращити.

1. Значення за замовчуванням не підтримуються для типів ANY

Компілятор дозволяє написати щось на кшталт:

targetString : ANY_STRING := SystemAnyTypeVariable

але під час компіляції видає попередження, що така конструкція не підтримується. Як наслідок, під час виклику методу доводиться явно передавати всі аргументи типу ANY. Шкода, адже ця можливість була б дуже корисною.

2. Значення за замовчуванням не підтримуються для VAR_IN_OUT CONSTANT

Нагадаю, що VAR_IN_OUT CONSTANT дозволяє передавати строкові літерали за посиланням, створюючи для них приховану тимчасову змінну. Було б чудово, якби й тут можна було використовувати значення за замовчуванням, але наразі така можливість відсутня.

Де ця функція найбільш корисна?

Сценаріїв використання дуже багато, але особисто для мене найбільша перевага — можливість реалізувати значно зручнішу конкатенацію рядків.

У своєму фреймворку я створив набір утиліт, які суттєво спрощують конкатенацію як коротких рядків (до 255 символів), так і довгих рядків, причому як для STRING, так і для WSTRING.

На зображенні нижче можна побачити один із можливих варіантів реалізації. Якщо ви впровадите щось подібне у своєму проєкті, то відчуєте себе так, ніби зі світу програмування 80-х раптом потрапили в можливості 90-х. 🙂

Метод для конкатенації строк

#TwinCAT #CoDeSys #PLC #IEC61131 #StructuredText #IndustrialAutomation