如何定义复杂的 GDS 端口并将它们连接到 IEC 代码中的 GDS 端口
摘要
在本文中,我将解释如何在 C++ 中定义复杂的 GDS 端口,如数据结构,并在 IEC 代码中将它们连接到 GDS 端口。
数据结构
如何声明数据结构。让我们看看 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
而在programm类的Header中,这个类型现在可以定义为GDS Port了。
#pragma once
...
#include "MyData.hpp"
namespace MyComponent
{
//#program
//#component(MyComponent::MyComponent)
class MyProgramm ...
{
...
public:
//#port
//#name(TheData)
//#attributes(Input)
MyData GdsPortMyData;
};
} // namespace MyComponent
为了能够将 GDS 端口连接到 IEC 代码中的 GDS 端口,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
UDT_PROJECT_MY_DATA
类型的 GDS 输出端口 现在可以连接到 GDS In Port TheData
C++ 程序。
STRING的特别说明
STRING 数据类型的特别说明。请注意,IEC 代码目前不知道 UTF-8 编码。字符串文字使用 ISO-8859-1 编码。因此,在将它们与 C++ 代码中的字符串文字进行比较之前,可能需要将它们转换为 UTF-8。您可以使用 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");
}
工业技术