Промышленное производство
Промышленный Интернет вещей | Промышленные материалы | Техническое обслуживание и ремонт оборудования | Промышленное программирование |
home  MfgRobots >> Промышленное производство >  >> Manufacturing Technology >> Промышленные технологии

Как определить сложные порты GDS и подключить их к порту GDS в коде IEC

Аннотация

В этой статье я объясню, как определить сложные порты GDS, такие как структуры данных в C++, и подключить их к порту GDS в коде IEC.

Структуры данных

Как объявлять структуры данных. Давайте посмотрим на C++.

#pragma once
#include "Arp/System/Core/Arp.h"
#include "Arp/Plc/Commons/PlcTypes.h"

namespace MyComponent
{

class MyData
{
public:
    MyData() = default;
    ~MyData() = default;

public:
    Arp::boolean Valid = false;
    Arp::int16 IntegerValue = 0;
    Arp::Plc::Commons::Gds::StaticString<80> StringValue = "";
    Arp::uint8 Data[8] = {0x00};
};

} // namespace MyComponent

А в заголовке класса программы этот тип теперь можно определить как порт GDS.

#pragma once
...
#include "MyData.hpp"

namespace MyComponent
{

//#program
//#component(MyComponent::MyComponent)
class MyProgramm ...
{

...

public:
    //#port
    //#name(TheData)
    //#attributes(Input)
    MyData GdsPortMyData;

};

} // namespace MyComponent

Чтобы иметь возможность подключить порт GDS к порту GDS в коде IEC, переменная в коде IEC должна быть того же типа. Это означает, что структура IEC должна иметь ту же компоновку данных, что и тип данных C++. Кроме того, все имена элементов должны соответствовать элементам типа C++.

TYPE

UDT_PROJECT_MY_DATA : STRUCT
    Valid BOOL;
    IntegerValue : INT;
    StringValue : STRING;
    Data : ARRAY [0..7] OF BYTE;
END_STRUCT;

END_TYPE

Выходной порт GDS типа UDT_PROJECT_MY_DATA теперь можно подключиться к GDS через порт TheData программы C++.

Специальное примечание для STRING

Особое примечание к типу данных STRING. Имейте в виду, что код IEC на данный момент не поддерживает кодировку UTF-8. Строковые литералы используют кодировку ISO-8859-1. Поэтому может потребоваться преобразовать их в UTF-8, прежде чем сравнивать их со строковыми литералами в коде C++. Вы можете использовать библиотеку boost-locale для преобразования ISO-8859-1 в UTF-8 и обратно.

Arp::String toUtf8(const Arp::String& s)
{
    return boost::locale::conv::to_utf<char>(s.CStr(), "ISO-8859-1");
}

Промышленные технологии

  1. Семь распространенных ошибок при сборке и упаковке - и как их исправить
  2. Шесть распространенных логистических ошибок и как их избежать
  3. Как внутренний порт может лучше соединить цепочки поставок США
  4. Семь проблем доставки на последней миле и способы их решения
  5. Четыре типа кибератак и как их предотвратить
  6. Три ловушки доставки на последней миле - и как их избежать
  7. Семь распространенных ошибок при транспортировке и как их избежать
  8. 4 основные причины выхода из строя распределительного устройства и способы их предотвращения
  9. Основные причины сбоев машины и способы их предотвращения
  10. Что такое интероперабельность и как моя компания может ее достичь?