Menguasai Tipe Data Sederhana dan Kompleks dalam C++ dengan PLCnext Engineer
Halo semuanya,
Dalam tulisan blog ini kita akan menjelajahi tipe data sederhana dan kompleks dalam C++ dan PLCnext Engineer. Ini akan berisi dua bagian yang berbeda, latihan sederhana dan kompleks.
Tutorial ini mengasumsikan Anda memiliki beberapa pengalaman dengan C++ dan PLCnext Engineer.
mulai
Pertama Anda akan membutuhkan alat yang tepat untuk pekerjaan, editor C++, perangkat lunak PLCnext Engineer dan Phoenix Contact PLC untuk menjalankan ini. Ini adalah bahan yang saya gunakan:
- AXC F 2152 pada versi firmware 2021.0.3
- PLCnext Engineer versi 2021.0.2
- Visual studio 2019 community versi 16.9.4
Saya pribadi memilih Visual Studio sebagai editor C++ saya, Tapi eclipse juga dapat digunakan. Tautan ke Tutorials dapat ditemukan di sini:
Seperti yang Anda ketahui, PLCnext Engineer dapat ditemukan di situs web kami.
Latihan sederhana
Untuk contoh pertama ini kita akan membuat aplikasi kecil yang memeriksa apakah angka yang benar dikirim dari PLC. Pertama buat proyek C++ baru. Kemudian kita pergi ke file header, nama seharusnya terlihat seperti [NameOfTheProject].hpp, ada juga file dengan nama [nameOfTheProject]component.hpp yang tidak akan kita gunakan. Setelah Anda berada di file header akan ada dinding kode di depan Anda tetapi jangan khawatir itu akan sederhana. Pertama-tama, kita akan mendefinisikan port, satu IN dan satu OUT. Mereka dapat didefinisikan seperti ini, ingat ini hanya untuk tipe data sederhana:
//#port
//#attributes(input)
//#name(InputTest)
int64 InputTest = 0;
//#port
//#attributes(Output)
//#name(outputTest)
int64 OutputTest = 0;
Kemudian kita pindah ke file berikutnya tempat kita akan melakukan coding aktual. Ini harus bernama [NameOfTheProject].cpp dan seharusnya tidak berisi banyak. Kita akan mengubahnya segera. Mari kita tambahkan beberapa kode untuk memeriksa angka baik dengan menggunakan If's atau switch case, terserah Anda. Saya menggunakan struktur if di sini:
void PLMProjectReadInputProgram::Execute()void PLMProjectReadInputProgram::Execute(){
if (InputTest == 1) {
OutputTest = 15;}
if (InputTest == 2) {
OutputTest = 150;}
if (InputTest == 3) {
OutputTest = 1500;}
if (InputTest == 4) {
OutputTest = 15000;}
}
Sebelum kita pergi ke PLCnext engineer kita perlu membuat proyek C++ ini menjadi library untuk PLC agar dapat dipahami. Ini dilakukan dengan hanya mengklik build di bagian atas layar. Ini akan berjalan beberapa saat dan akan memberi tahu Anda ketika library selesai. Jika langkah ini tidak jelas, saya sangat menyarankan Anda untuk memeriksa tutorial yang tercantum di atas.
Navigasikan ke program utama di tab components di bawah programming di folder 'Local' kemudian pilih variabel di dalam layar utama untuk melihat variabel di PLC. Di sini kita dapat memilih nama dan tipe data serta penggunaan. Tipe data di PLCnext engineer perlu sama dengan di program C++ dan tautan ke berbagai tipe dan samakannya dapat ditemukan di sini. Penggunaan akan menentukan apakah Variabel lokal atau dapat digunakan untuk mengirim dan menerima data dari program atau variabel luar.
Setelah melakukan ini kita akan mulai menghubungkan variabel setelah kita menambahkan library baru. Ini dapat dilakukan seperti ini:
Library yang Anda buat dapat ditemukan di dalam folder bin dari proyek Anda, salin ini ke folder libraries untuk PLCnext engineer. Lokasi terlihat seperti ini:
C:\Users\Public\Documents\PLCnext Engineer\Libraries
Setelah itu kita kembali ke PLCnext engineer untuk menambahkan library ke program kita. Kita akan navigasikan ke tab components, membuka kotak libraries dan klik kanan libraries. Kemudian klik 'add user library' ini akan membawa Anda ke folder libraries yang kita kunjungi sebelumnya. Pilih library yang ingin Anda gunakan dan lanjutkan.
Setelah ini selesai, kita perlu menambahkan program ke tugas yang dilakukan sebagai berikut. Di sisi kiri layar di dalam area plant klik dua kali pada PLCnext. Itu seharusnya terbuka di tengah. Kemudian pergi ke tab 'tasks and events' dan tambahkan program baru setelah MainInstance. Ini dapat dilakukan dengan dua cara, baik dengan memilih jenis program atau menariknya dari area components di bawah 'PLCnext Components & Programs'.
Kemudian variabel seharusnya muncul di tab 'Port list' yang berada di samping tab 'tasks and events'. Buka ini untuk disambut oleh semua variabel Anda dari C++ dan PLCnext. Itu seharusnya terlihat seperti ini:
Jika Anda melakukan semuanya dengan benar Anda seharusnya dapat menghubungkan port OUT dari PLC Anda ke port IN dari program C++, sebaliknya juga mungkin, dan seharusnya terlihat seperti ini. Jika ini tidak bekerja coba periksa tipe data Anda.
Untuk menambahkan nilai dummy ke variabel kita mari kita navigasikan ke program utama di tab components kemudian pilih code di dalam layar utama untuk melihat kode dan menambahkan beberapa kode kita sendiri. Kita hanya akan mengatur variabel yang keluar ke nilai numerik, dalam kasus ini 1.
Sekarang mari kita terapkan proyek ke plc dan kita seharusnya mendapatkan 15 sebagai respons dari kode C++. Anda dapat melihat variabel di 'Ports List' dari sebelumnya.
Latihan kompleks
Untuk contoh ini, kita akan membuat aplikasi kecil yang akan mengirim array structs ke dan dari PLC. Pertama buat proyek C++ baru. Kemudian kita pergi ke file header, nama seharusnya terlihat seperti [NameOfTheProject].hpp, ada juga file dengan nama [nameOfTheProject]component.hpp yang tidak akan kita gunakan. Setelah Anda berada di file header akan ada dinding kode di depan Anda tetapi jangan khawatir itu akan sederhana. Pertama-tama, kita perlu membuat struct untuk contoh ini kita akan membuat struct untuk mobil. Ini dilakukan sebagai berikut:
public: // typedefs
struct StrCar{
StaticString<80> sbrand;
int16 iHorsepower;
int16 iYear;
boolean xInsured;
};
!PENTING! Nama dan tipe dalam C++ dan PLCnext engineer perlu sama! Tipe data dapat ditemukan di sini.
Kemudian kita akan mendefinisikan port, satu IN dan satu OUT karena mereka akan menjadi daftar data buatlah sebagai demikian. Penting juga adalah untuk membuatnya sebagai daftar 'mobil'. Ini dilakukan seperti ini:
//#port
//#attributes(Input)
//#name(CarIn)
StrCar CarToC[2];
//#port
//#attributes(Output)
//#name(CarOut)
StrCar CarFromC[2];
Kemudian kita pindah ke file berikutnya tempat kita akan melakukan coding aktual. Ini harus bernama [NameOfTheProject].cpp dan seharusnya tidak berisi banyak. Kita akan mengubahnya segera. Di sini kita akan mengubah nilai dari mobil satu dan mobil dua.
//Set the first member of the car list equal to the car from the PLC
CarFromC[0].sbrand = CarToC[1].sbrand;
CarFromC[0].iHorsepower = CarToC[1].iHorsepower;
CarFromC[0].iYear = CarToC[1].iYear;
CarFromC[0].xInsured = CarToC[1].xInsured;
//Add dummy values to the second member
CarFromC[1].sbrand = CarToC[0].sbrand;
CarFromC[1].iHorsepower = CarToC[0].iHorsepower;
CarFromC[1].iYear = CarToC[0].iYear;
CarFromC[1].xInsured = CarToC[0].xInsured;
Sebelum kita pergi ke PLCnext engineer kita perlu membuat proyek C++ ini menjadi library untuk PLC agar dapat dipahami. Ini dilakukan dengan hanya mengklik build di bagian atas layar. Ini akan berjalan beberapa saat dan akan memberi tahu Anda ketika library selesai. Jika langkah ini tidak jelas, saya sangat menyarankan Anda untuk memeriksa tutorial yang tercantum di atas.
Sekarang sebelum kita dapat mulai membuat variabel di PLCnext engineer kita perlu membuat tipe data kita sendiri, dalam hal ini struct mobil dan daftar mobil. Untuk ini kita memerlukan file tipe data dan dapat ditemukan dan dibuat di sini:
Buka file ini jika belum, kemudian kita dapat mulai membuat struct kita sendiri seperti berikut:
TYPE
StrCar:
STRUCT
sBrand: STRING;
iHorsepower: INT;
iYear: int;
xInsured: BOOL;
END_STRUCT
END_TYPE
!PENTING! Nama dan tipe dalam C++ dan PLCnext engineer perlu sama! Tipe data dapat ditemukan di sini.
Setelah membuat struct kita perlu membuat array dari tipe ini dan dilakukan seperti ini dan dalam file yang sama tempat kita berada saat ini:
TYPE
carList: ARRAY[0..1] OF StrCar;
END_TYPE
Untuk membuat variabel dengan tipe 'carList' navigasikan ke program utama di tab components di bawah 'programming' kemudian di dalam folder 'Programs' kemudian pilih variabel di dalam layar utama untuk melihat variabel di PLC. Di sini kita dapat memilih nama dan tipe data serta penggunaan. Sebagai tipe data pilih yang kami buat sendiri:
Setelah melakukan ini kita akan mulai menghubungkan variabel setelah kita menambahkan library baru. Ini dapat dilakukan seperti ini:
Library yang Anda buat dapat ditemukan di dalam folder bin dari proyek Anda, salin ini ke folder libraries untuk PLCnext engineer. Lokasi terlihat seperti ini:
C:\Users\Public\Documents\PLCnext Engineer\Libraries
Setelah itu kita kembali ke PLCnext engineer untuk menambahkan library ke program kita. Kita akan navigasikan ke tab components, membuka kotak libraries dan klik kanan libraries. Kemudian klik 'add user library' ini akan membawa Anda ke folder libraries yang kita kunjungi sebelumnya. Pilih library yang ingin Anda gunakan dan lanjutkan.
Setelah ini selesai, kita perlu menambahkan program ke tugas yang dilakukan sebagai berikut. Di sisi kiri layar di dalam area plant klik dua kali pada PLCnext. Itu seharusnya terbuka di tengah. Kemudian pergi ke tab 'tasks and events' dan tambahkan program baru setelah MainInstance. Ini dapat dilakukan dengan dua cara, baik dengan memilih jenis program atau menariknya dari area components di bawah 'PLCnext Components & Programs'.
Kemudian variabel seharusnya muncul di tab 'Port list' yang berada di samping tab 'tasks and events'. Buka ini untuk disambut oleh semua variabel Anda dari C++ dan PLCnext. Itu seharusnya terlihat seperti ini.
Jika Anda melakukan semuanya dengan benar Anda seharusnya dapat menghubungkan port OUT dari PLC Anda ke port IN dari program C++, sebaliknya juga mungkin, dan seharusnya terlihat seperti ini. Jika ini tidak bekerja periksa tipe data dan nama variabel Anda.
Untuk menambahkan nilai dummy ke variabel kita mari kita navigasikan ke program utama di tab components kemudian pilih code di dalam layar utama untuk melihat kode dan menambahkan beberapa kode kita sendiri. Kita hanya akan mengatur variabel yang keluar ke beberapa spesifikasi mobil. Ini dapat dipilih secara acak tetapi akan perlu cocok dengan tipe data. (tergantung pada apa yang Anda pilih, gunakan string di tempat Anda menggunakan string dll.)
CarToC[0].sBrand := 'Audi';
CarToC[0].iHorsepower := 200;
CarToC[0].iYear := 2020;
CarToC[0].xInsured := TRUE;
CarToC[1].sBrand := 'Mazda';
CarToC[1].iHorsepower := 120;
CarToC[1].iYear := 2001;
CarToC[1].xInsured := FALSE;
Setelah kita menerapkan contoh ini daftar yang keluar harus ditukar dalam daftar yang masuk. Anda dapat melihat variabel di 'Ports List' dari sebelumnya.