Bagaimana mendefinisikan Port GDS yang kompleks dan menghubungkannya ke Port GDS dalam kode IEC
Abstrak
Dalam artikel ini saya akan menjelaskan cara mendefinisikan port GDS yang kompleks seperti struktur data di C++ dan menghubungkannya ke port GDS dalam kode IEC.
Struktur Data
Bagaimana mendeklarasikan struktur data. Mari kita lihat 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
Dan di Header kelas programm jenis ini sekarang dapat didefinisikan sebagai Port GDS.
#pragma once
...
#include "MyData.hpp"
namespace MyComponent
{
//#program
//#component(MyComponent::MyComponent)
class MyProgramm ...
{
...
public:
//#port
//#name(TheData)
//#attributes(Input)
MyData GdsPortMyData;
};
} // namespace MyComponent
Untuk dapat menghubungkan Port GDS ke Port GDS dalam kode IEC, variabel dalam kode IEC harus bertipe sama. Ini berarti struktur IEC harus memiliki tata letak data yang sama dengan tipe data C++. Selain itu, semua nama elemen harus cocok dengan elemen dalam tipe C++.
TYPE
UDT_PROJECT_MY_DATA : STRUCT
Valid BOOL;
IntegerValue : INT;
StringValue : STRING;
Data : ARRAY [0..7] OF BYTE;
END_STRUCT;
END_TYPE
Port Keluar GDS dengan tipe UDT_PROJECT_MY_DATA
sekarang dapat terhubung ke GDS In Port TheData
dari program C++.
Catatan khusus untuk STRING
Catatan khusus untuk tipe data STRING. Ketahuilah bahwa kode IEC untuk saat ini tidak mengetahui penyandian UTF-8. Literal string menggunakan pengkodean ISO-8859-1. Jadi mungkin perlu untuk mengonversinya ke UTF-8 sebelum membandingkannya dengan literal string dalam kode C++. Anda dapat menggunakan pustaka boost-locale untuk mengonversi antara ISO-8859-1 ke UTF-8 dan sebaliknya.
Arp::String toUtf8(const Arp::String& s)
{
return boost::locale::conv::to_utf<char>(s.CStr(), "ISO-8859-1");
}