Реализация ФБ с массивом в C++

<< Click to Display Table of Contents >>

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

Реализация ФБ с массивом в C++

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

realiz_FB_array_v_C

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

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

fb_with_array.h

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

Для создания параметров статических массивов есть шаблонный тип ARRAY<TYPE, LEN>, где TYPE - тип элементов массива, а LEN - его длина.

Для создания параметров динамических массивов можно использовать макрос MPLC_ARRAY(TYPE), где TYPE - тип элементов массива. Так же для работы с динамическими массивами можно использовать std::vector<TYPE>.

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

realiz_FB_array_v_C_1

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

Скриншот

Текст

realiz_FB_array_v_C_2

#pragma once
#include <mplc/api.h>
struct FBWithArray : mplc::api::ScadaFB {
    BOOL mask;
    bool prev_mask;
    INT dynamic_array_len;
    ARRAY<BOOL, 10> static_array_in;
    ARRAY<BOOL, 10> static_array_out;
    MPLC_ARRAY(bool) dynamic_array_in;
    MPLC_ARRAY(bool) dynamic_array_out;
    std::vector<bool> vector_in;
    std::vector<bool> vector_out;
    MPLC_OBJECT(FBWithArray);
    FBWithArray() {}
    ~FBWithArray() override {}
    void Execute() override;
};

fb_with_array.cpp

Регистрируются массивы таким же образом, как и простые параметры. Регистрация самого класса так же не отличается от простого ФБ.. Для этого используется макрос MPLC_DECLARE_PROPERTIES.

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

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

realiz_FB_array_v_C_3

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

Скриншот

Текст

realiz_FB_array_v_C_4

#include "fb_with_array.h"
void FBWithArray::Execute() {
    if (dynamic_array_in.size() > dynamic_array_out.size()) {
        dynamic_array_out.resize(dynamic_array_in.size());
    }
    if (vector_in.size() > vector_out.size()) {
        vector_out.resize(vector_in.size());
    }
    std::cout << "Static array data:" << std::endl;
    for (int i = 0; i < static_array_in.size(); i++) {
        std::cout << "[" << i + 1 << "]: " << static_array_in[i] << "\t";
        static_array_out[i] = static_array_in[i] ^ mask;
    }
    std::cout << std::endl;
    std::cout << "Dynamic array data:" << std::endl;
    for (int i = 0; i < dynamic_array_in.size(); i++) {
        std::cout << "[" << i + 1 << "]: " << dynamic_array_in[i] << "\t";
        dynamic_array_out[i] = dynamic_array_in[i] ^ mask;
    }
    if (prev_mask != mask) {
        dynamic_array_out.push_back(mask);
    }
    std::cout << std::endl;
    std::cout << "Vector data:" << std::endl;
    for (int i = 0; i < vector_in.size(); i++) {
        std::cout << "[" << i + 1 << "]: " << vector_in[i] << "\t";
        vector_out[i] = vector_in[i] ^ mask;
    }
    if (prev_mask != mask) {
        vector_out.push_back(mask);
    }
    std::cout << std::endl;
    dynamic_array_len = dynamic_array_out.size();
    prev_mask = mask;
}
MPLC_DECLARE_PROPERTIES(FBWithArray){
    MPLC_In(mask),
    MPLC_In(static_array_in),
    MPLC_In(dynamic_array_in),
    MPLC_In(vector_in),
    MPLC_Out(static_array_out),
    MPLC_Out(dynamic_array_out),
    MPLC_Out(vector_out),
    MPLC_Out(dynamic_array_len)};
MPLC_FB_TYPE(FBWithArrayFBWithArray);

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

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

ОС Windows

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

realiz_FB_array_v_C_5

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

ОС Linux

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

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