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

Динамічне створення об'єктів у TwinCAT з параметрами FB_Init

Як динамічно створити екземпляр класу в TwinCAT, коли клас має додаткові параметри в FB_Init.

Як динамічно створити екземпляр класу в TwinCAT, коли клас має додаткові параметри в FB_Init?

Якщо у вас є клас, який вимагає параметрів у своєму конструкторі, динамічне створення екземпляра зазвичай є простим завданням — якщо тільки ви не працюєте зі Structured Text (ST).

ST тут приносить два сюрпризи:

  1. Класи (які досі називаються функціональними блоками) не мають конструкторів, але можуть містити єдиний метод FB_Init з необов’язковими параметрами.
  2. Документація пояснює, як створити екземпляр без параметрів, але не описує, як інстанціювати клас, чий 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>]
    )
);

Реальний приклад наведено на скріншоті нижче.

Скріншот коду __NEW

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