Реализация ФБ со структурой в C++

<< Click to Display Table of Contents >>

Navigation:  API MasterSCADA 4D > Функции, ФБ, Протоколы на С++ > API для ФБ и протоколов > Разработка функциональных блоков > Разработка ФБ с параметром Структура >

Реализация ФБ со структурой в C++

Пример реализации подключен к Examples.sln как mplc_fb_with_struct:

real_FB_struct

Для разработки собственных ФБ нужно открыть пример и изменить те части проекта, которые отвечают за логику работы. Вспомогательные файлы, служащие для взаимодействия с исполнительной системой, редактировать не требуется.

Порядок разработки

fb_with_struct.h

Как и в случае с простым ФБ, нужно создать класс-наследник ScadaFB, объявить поля, реализовать метод Execute(), и зарегистрировать поля и ФБ макросами MPLC_OBJECT(FBWithStruct), MPLC_DECLARE_PROPERTIES и MPLC_FB_TYPE.

Так как в качестве одного поля используется структура, её необходимо определить отдельно как наследника ScadaStruct.

Как и в случае ФБ, для структур необходимо прописывать макрос MPLC_OBJECT(ExampleStruct).

Для этого в примере был создан заголовочный файл fb_with_struct.h:

real_FB_struct_1

Содержимое файла:

Скриншот

Текст

real_FB_struct_2

#pragma once
#include <mplc/api.h>
struct ExampleStruct : mplc::api::ScadaStruct {
    MPLC_OBJECT(ExampleStruct);
    STRING text_data;
    DINT dint_data{};
};
struct FBWithStruct : mplc::api::ScadaFB {
    MPLC_OBJECT(FBWithStruct);
    ExampleStruct input_struct;
    ExampleStruct output_struct;
    STRING additional;
    STRING input_struct_data;
    FBWithStruct() {}
    ~FBWithStruct() override {}
    const STRING& GetStrField() {
        return input_struct.text_data;
    }
    void Execute() override;
};

fb_with_struct.cpp

Структуру и ее поля, как и в случае ФБ, необходимо регистрировать. Для этого используется макросы MPLC_DECLARE_PROPERTIES и MPLC_DECLARE_API.

Важно! Названия ExampleStruct и FBWithStruct должны совпадать с названиями структуры и ФБ в проекте MasterSCADA 4D.

Для этого был создан файл реализации для ФБ fb_with_struct.cpp:

real_FB_struct_3

Содержимое файла:

Скриншот

Текст

real_FB_struct_4

#include "fb_with_struct.h"
void FBWithStruct::Execute() {
    std::string tmp = "";
    for (int i = 0; i < input_struct.dint_data; i++) {
        tmp += input_struct.text_data;
    }
    tmp += additional;
    output_struct.text_data = tmp;
    output_struct.dint_data = tmp.size();
}
MPLC_DECLARE_PROPERTIES(ExampleStruct){
    MPLC_InOut(text_data),
    MPLC_InOut(dint_data),
};
MPLC_DECLARE_API(ExampleStructExampleStruct);
MPLC_DECLARE_PROPERTIES(FBWithStruct){
    MPLC_In(input_struct),
    MPLC_In(additional),
    MPLC_Out(output_struct),
    MPLC_Out(input_struct_data, GetStrField),
};
MPLC_FB_TYPE(FBWithStructFBWithStruct);

Далее можно компилировать проект.

Компиляция проекта

ОС Windows

Для компиляции проекта на ОС Windows нужно выполнить команду Build в контекстном меню проекта:

real_FB_struct_5

Скомпилированные файлы появятся в папке проекта: C:\mplc\api\platform\x64\bin\Release (адрес действителен, если название папок, которые делал разработчик, совпадают с названиями, которые давались в этой инструкции).

ОС Linux

Чтобы произвести сборку под Linux платформы, нужно сохранить проект и перенести все файлы из папки C:\mplc\api (адрес действителен, если название папок, которые делал разработчик, совпадают с названиями, которые давались в этой инструкции) в созданный каталог на компьютере с ОС Linux. Подробнее смотрите в разделе Сборка под Linux платформы.

После сборки можно приступать к тестированию созданного ФБ.