Menguasai Definisi dan Koneksi Port GDS Komplek dalam Pemrograman IEC
Abstrak
Dalam artikel ini saya akan menjelaskan cara mendefinisikan port GDS kompleks seperti struktur data dalam C++ dan menghubungkannya ke port GDS dalam kode IEC.
Struktur Data
Cara 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 dari class program tipe ini sekarang dapat didefinisikan sebagai 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
Untuk dapat menghubungkan GDS Port ke GDS Port dalam kode IEC variabel dalam kode IEC harus memiliki tipe yang 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
Sekarang GDS Out Port dengan tipe UDT_PROJECT_MY_DATA dapat dihubungkan ke GDS In Port TheData dari program C++.
Catatan Khusus tentang STRING
Catatan khusus tentang tipe data STRING. Perhatikan bahwa kode IEC untuk saat ini tidak menyadari encoding UTF-8. String literals menggunakan encoding ISO-8859-1. Jadi mungkin perlu untuk mengonversinya ke UTF-8 sebelum membandingkannya dengan string literals dalam kode C++. Anda dapat menggunakan perpustakaan 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"); }