Реализация простого протокола в C++

<< Click to Display Table of Contents >>

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

Реализация простого протокола в C++

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

realiz_prost_protocola_v_C

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

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

simple_test_protocol.h

В случае протокола наследоваться надо от класса ScadaProtocol. Также как и с ФБ, необходимы макросы регистрации класса MPLC_OBJECT(SimpleTestProtocol) в секции public. Также переопределению подлежат чисто виртуальные методы Execute() и Creatе(), которые отвечают за создание каналов и логику их хранения в самом классе протокола.

 

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

realiz_prost_protocola_v_C_1

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

Скриншот

Текст

realiz_prost_protocola_v_C_2

#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;

};

simple_test_protocol.cpp

Протокол и его свойства надо зарегистрировать в файлах исходных кодов макросом MPLC_PROTOCOL_TYPE.

Для этого в примере был создан файл реализации для протокола simple_test_protocol.cpp:

realiz_prost_protocola_v_C_3

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

Скриншот

Текст

realiz_prost_protocola_v_C_4

#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

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

realiz_prost_protocola_v_C_5

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

ОС Linux

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

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