Динамічне створення об'єктів у TwinCAT з параметрами FB_Init
Як динамічно створити екземпляр класу в TwinCAT, коли клас має додаткові параметри в FB_Init.
Як динамічно створити екземпляр класу в TwinCAT, коли клас має додаткові параметри в FB_Init?
Якщо у вас є клас, який вимагає параметрів у своєму конструкторі, динамічне створення екземпляра зазвичай є простим завданням — якщо тільки ви не працюєте зі Structured Text (ST).
ST тут приносить два сюрпризи:
- Класи (які досі називаються функціональними блоками) не мають конструкторів, але можуть містити єдиний метод
FB_Initз необов’язковими параметрами. - Документація пояснює, як створити екземпляр без параметрів, але не описує, як інстанціювати клас, чий
FB_Initвимагає параметрів.
Зрештою я дізнався, як це зробити: після типу класу, в дужках, потрібно явно перерахувати всі параметри, використовуючи їхні імена та значення.
Ось синтаксис:
VAR
<object> : POINTER TO <Class>;
END_VAR
<object> := __NEW(
<Class>(
<parameter_1_Name> := <value_For_Parameter_1>
[, <parameter_N_Name> := <value_For_Parameter_N>]
)
);
Реальний приклад наведено на скріншоті нижче.

#TwinCAT, #CoDeSys, #OOP, #StructuredText, #FB_Init, #__NEW