<< Click to Display Table of Contents >> Navigation: API MasterSCADA 4D > Функции, ФБ, Протоколы на С++ > API для ФБ и протоколов > Разработка протоколов > Разработка простого протокола > Реализация простого протокола в C++ |
Пример реализации подключен к Examples.sln как mplc_simple_test_protocol:
Для разработки своих собственных протоколов нужно открыть пример и изменить те части проекта, которые отвечают за логику работы. Вспомогательные файлы, служащие для взаимодействия с исполнительной системой, редактировать не требуется.
В случае протокола наследоваться надо от класса ScadaProtocol. Также как и с ФБ, необходимы макросы регистрации класса MPLC_OBJECT(SimpleTestProtocol) в секции public. Также переопределению подлежат чисто виртуальные методы Execute() и Creatе(), которые отвечают за создание каналов и логику их хранения в самом классе протокола.
Для этого в примере был создан заголовочный файл simple_test_protocol.h:
Содержимое файла:
Скриншот |
Текст |
#pragma once #include <mplc/api.h>
#include "emulator.h"
class SimpleTestProtocol final : public mplc::api::ScadaProtocol { private: std::vector<mplc::api::ScadaChannel*> channels; Emulator *emulator;
public: MPLC_OBJECT(SimpleTestProtocol); SimpleTestProtocol(); ~SimpleTestProtocol(); void Execute() override; mplc::api::ScadaChannel* Create(const mplc::vm::Channel* channel) override; void Init() override; }; |
Протокол и его свойства надо зарегистрировать в файлах исходных кодов макросом MPLC_PROTOCOL_TYPE.
Для этого в примере был создан файл реализации для протокола simple_test_protocol.cpp:
Содержимое файла:
Скриншот |
Текст |
#include "simple_test_protocol.h"
SimpleTestProtocol::SimpleTestProtocol() { emulator = new Emulator(); }
SimpleTestProtocol::~SimpleTestProtocol() { emulator->close(); delete emulator; }
void SimpleTestProtocol::Init() { emulator->init(); }
void SimpleTestProtocol::Execute() { std::string buff;
for (auto ch : channels) { if (ch->InVar) { buff = emulator->read(); ch->Write(LuaProvider(), buff); } if (ch->OutVar) { ch->OutVar->Read(LuaProvider()); ch->OutVar->Value.GetString(buff); emulator->write(buff); } } }
mplc::api::ScadaChannel* SimpleTestProtocol::Create(const mplc::vm::Channel* channel) { auto ch = new mplc::api::ScadaChannel(); channels.push_back(ch); return ch; }
MPLC_PROTOCOL_TYPE(SimpleTestProtocol, SimpleTestProtocol);
|
Ввод и вывод данных из каналов модулей происходит методами Read и Write класса ScadaChannel. ch - это указатель на класс ScadaChannel.
Важно! Метод Read выдаёт ошибку и не возвращает значение, пока заменяется на комбинацию методов.
Далее можно компилировать проект.
Для компиляции проекта на ОС Windows нужно выполнить команду Build в контекстном меню проекта:
Скомпилированные файлы появятся в папке проекта: C:\mplc\api\platform\x64\bin\Release (адрес действителен, если название папок, которые делал разработчик, совпадают с названиями, которые давались в этой инструкции).
Чтобы произвести сборку под Linux платформы, нужно сохранить проект и перенести все файлы из папки C:\mplc\api (адрес действителен, если название папок, которые делал разработчик, совпадают с названиями, которые давались в этой инструкции) в созданный каталог на компьютере с ОС Linux. Подробнее смотрите в разделе Сборка под Linux платформы.
После сборки можно приступать к тестированию созданного ФБ.