Menggunakan tipe data sederhana dan kompleks di C++
Halo semuanya,
Dalam posting blog ini kita akan menjelajahi tipe data sederhana dan kompleks di C++ dan PLCnext Engineer. Ini akan berisi dua bagian berbeda, latihan sederhana dan kompleks.
Tutorial ini mengasumsikan Anda memiliki beberapa pengalaman dengan C++ dan PLCnext Engineer.
mulai
Pertama, Anda memerlukan alat yang tepat untuk pekerjaan itu, editor C++, perangkat lunak PLCnext Engineer, dan Phoenix Contact PLC untuk menjalankannya. Ini adalah bahan yang saya gunakan:
- AXC F 2152 pada firmware versi 2021.0.3
- PLCnext Engineer versi 2021.0.2
- Komunitas visual studio 2019 versi 16.9.4
Saya pribadi telah memilih Visual Studio sebagai editor C++ saya, Tetapi Eclipse juga dapat digunakan. Tautan ke Tutorial dapat ditemukan di sini:
Untuk PLCnext Engineer, ini dapat ditemukan di situs web kami.
Latihan sederhana
Untuk contoh pertama ini kita akan membuat aplikasi kecil yang memeriksa apakah nomor yang dikirim benar dari PLC. Pertama buat proyek C++ baru. Kemudian kita menuju ke file header, namanya akan terlihat seperti ini [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 sebelum Anda tapi jangan khawatir itu akan sederhana. Pertama, kita akan mendefinisikan port, satu IN dan satu OUT. Mereka dapat didefinisikan seperti ini, perlu diingat ini hanya untuk tipe data sederhana:
//#port
//#atribut(masukan)
//#nama(Uji Masukan)
int64 InputTest =0;
//#port
//#atribut(Keluaran)
//#nama(Uji keluaran)
int64 OutputTest =0;
Kemudian kita pindah ke file berikutnya di mana kita akan melakukan pengkodean yang sebenarnya. Ini harus diberi nama [NameOfTheProject].cpp dan tidak boleh mengandung banyak. Kami akan segera mengubahnya. Mari kita tambahkan beberapa kode untuk memeriksa nomor baik dengan menggunakan if atau switch case, itu terserah Anda. Saya telah menggunakan struktur if yang satu ini:
batalkan 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 menuju ke insinyur PLCnext, kita perlu membuat proyek C++ ini menjadi perpustakaan untuk dipahami oleh PLC. Ini dilakukan hanya dengan mengklik build di bagian atas layar. Ini akan berjalan sebentar dan akan memberi tahu Anda ketika perpustakaan selesai. Jika langkah ini tidak jelas, saya sangat menyarankan Anda untuk memeriksa tutorial yang tercantum di atas.
Arahkan ke program utama di tab komponen di bawah pemrograman di folder 'Lokal' lalu pilih variabel di dalam layar utama untuk melihat variabel di PLC. Di sini kita dapat memilih nama dan tipe data dan penggunaannya. Tipe data di PLCnext engineer harus sama seperti di program C++, tautan ke tipe yang berbeda dan persamaannya dapat ditemukan di sini. Penggunaan akan menentukan apakah Variabel bersifat 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 perpustakaan baru. Ini dapat dilakukan seperti ini:
Pustaka yang Anda buat dapat ditemukan di dalam folder bin proyek Anda, salin ini ke folder pustaka untuk insinyur PLCnext. Lokasinya terlihat seperti ini:
C:\Users\Public\Documents\PLCnext Engineer\Libraries
Setelah itu kami kembali ke insinyur PLCnext untuk menambahkan perpustakaan ke program kami. Kami akan menavigasi ke tab komponen, membuka kotak perpustakaan dan mengklik kanan perpustakaan. Kemudian klik 'tambah perpustakaan pengguna' ini akan membawa Anda ke folder perpustakaan yang kami kunjungi sebelumnya. Pilih perpustakaan yang ingin Anda gunakan dan lanjutkan.
Setelah ini selesai, kita perlu menambahkan program ke tugas-tugas yang dilakukan sebagai berikut. Di sisi kiri layar di dalam area pabrik, klik dua kali pada PLCnext. Itu harus terbuka di tengah. Lalu buka tab 'tugas dan acara' dan tambahkan program baru setelah MainInstance. Ini dapat dilakukan dengan dua cara, dengan memilih jenis program atau menyeretnya dari area komponen di bawah 'Komponen &Program PLCnext'.
Kemudian variabel akan muncul di tab 'Daftar port' yang ditemukan di sebelah tab 'tugas dan acara'. Buka ini untuk disambut oleh semua variabel Anda dari C++ dan PLCnext. 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 dimungkinkan, dan akan terlihat seperti ini. Jika ini tidak berhasil, coba periksa tipe data Anda.
Untuk menambahkan nilai dummy ke variabel kita, mari kita menavigasi ke program utama di tab komponen lalu pilih kode di dalam layar utama untuk melihat kode dan menambahkan beberapa kode kita sendiri. Kami hanya akan mengatur variabel keluar ke nilai numerik, dalam hal ini 1.
Sekarang mari kita menyebarkan proyek ke plc dan kita akan mendapatkan 15 sebagai respons dari kode C++. Anda dapat melihat variabel di 'Daftar Port' dari sebelumnya.
Latihan kompleks
Untuk contoh ini, kita akan membuat aplikasi kecil yang akan mengirimkan array struct ke dan dari PLC. Pertama buat proyek C++ baru. Kemudian kita menuju ke file header, namanya akan terlihat seperti ini [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 sebelum Anda tapi jangan khawatir itu akan sederhana. Pertama, kita perlu membuat struct untuk contoh ini kita akan membuat struct untuk mobil. Ini dilakukan sebagai berikut:
publik:// typedefs
struct StrCar{
StaticString<80> sbrand;
int16 iHorsepower;
int16 iTahun;
boolean xInsured;
};
!PENTING! Nama dan tipe di C++ dan PLCnext engineer harus sama! Tipe data dapat ditemukan di sini.
Kemudian kita akan mendefinisikan port, satu IN dan satu OUT karena mereka akan menjadi daftar data yang membuatnya seperti itu. Yang juga penting adalah menjadikannya daftar 'mobil'. Ini dilakukan seperti ini:
//#port
//#atribut(Masukan)
//#nama(Mobil)
StrCar CarToC[2];
//#port
//#atribut(Keluaran)
//#nama(CarOut)
StrCar CarFromC[2];
Kemudian kita pindah ke file berikutnya di mana kita akan melakukan pengkodean yang sebenarnya. Ini harus diberi nama [NameOfTheProject].cpp dan tidak boleh mengandung banyak. Kami akan segera mengubahnya. Di sini kita akan mengubah nilai dari mobil satu dan mobil dua.
//Menyetel anggota pertama dari daftar mobil sama dengan mobil dari 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;
//Tambahkan nilai dummy ke anggota kedua
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 menuju ke insinyur PLCnext, kita perlu membuat proyek C++ ini menjadi perpustakaan untuk dipahami oleh PLC. Ini dilakukan hanya dengan mengklik build di bagian atas layar. Ini akan berjalan sebentar dan akan memberi tahu Anda ketika perpustakaan selesai. Jika langkah ini tidak jelas, saya sangat menyarankan Anda untuk memeriksa tutorial yang tercantum di atas.
Sekarang sebelum kita bisa membuat variabel di PLCnext engineer kita perlu membuat tipe data kita sendiri, dalam hal ini struct car dan daftar mobil. Untuk ini kita memerlukan file tipe data dan dapat ditemukan dan dibuat di sini:
Buka file ini jika belum, maka kita bisa mulai membuat struct sendiri seperti berikut:
JENIS
StrCar:
STRUKTUR
sMerek:STRING;
iHorsepower:INT;
iTahun:int;
xDiasuransikan:BOOL;
END_STRUCT
END_TYPE
!PENTING! Nama dan tipe di C++ dan PLCnext engineer harus sama! Tipe data dapat ditemukan di sini.
Setelah membuat struct, kita perlu membuat array jenis ini dan selesai seperti ini dan di file yang sama kita berada saat ini:
JENIS
daftar mobil:ARRAY[0..1] OF StrCar;
END_TYPE
Untuk membuat variabel dengan tipe 'carList' navigasikan ke program utama di tab komponen di bawah 'pemrograman' lalu di dalam folder 'Program' lalu pilih variabel di dalam layar utama untuk melihat variabel di PLC. Di sini kita dapat memilih nama dan tipe data dan penggunaannya. Sebagai tipe data pilih yang dibuat khusus kami:
Setelah melakukan ini, kita akan mulai menghubungkan variabel setelah kita menambahkan perpustakaan baru. Ini dapat dilakukan seperti ini:
Pustaka yang Anda buat dapat ditemukan di dalam folder bin proyek Anda, salin ini ke folder pustaka untuk insinyur PLCnext. Lokasinya terlihat seperti ini:
C:\Users\Public\Documents\PLCnext Engineer\Libraries
Setelah itu kami kembali ke insinyur PLCnext untuk menambahkan perpustakaan ke program kami. Kami akan menavigasi ke tab komponen, membuka kotak perpustakaan dan mengklik kanan perpustakaan. Kemudian klik 'tambah perpustakaan pengguna' ini akan membawa Anda ke folder perpustakaan yang kami kunjungi sebelumnya. Pilih perpustakaan yang ingin Anda gunakan dan lanjutkan.
Setelah ini selesai, kita perlu menambahkan program ke tugas-tugas yang dilakukan sebagai berikut. Di sisi kiri layar di dalam area pabrik, klik dua kali pada PLCnext. Itu harus terbuka di tengah. Lalu buka tab 'tugas dan acara' dan tambahkan program baru setelah MainInstance. Ini dapat dilakukan dengan dua cara, dengan memilih jenis program atau menyeretnya dari area komponen di bawah 'Komponen &Program PLCnext'.
Kemudian variabel akan muncul di tab 'Daftar port' yang ditemukan di sebelah tab 'tugas dan acara'. Buka ini untuk disambut oleh semua variabel Anda dari C++ dan PLCnext. 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 dimungkinkan, dan akan terlihat seperti ini. Jika ini tidak berhasil, periksa tipe data dan nama variabel Anda.
Untuk menambahkan nilai dummy ke variabel kita, mari kita menavigasi ke program utama di tab komponen lalu pilih kode di dalam layar utama untuk melihat kode dan menambahkan beberapa kode kita sendiri. Kami hanya akan mengatur variabel untuk beberapa spesifikasi mobil. Ini dapat dipilih secara acak tetapi harus cocok dengan tipe data. (tergantung pada apa yang Anda pilih, gunakan string di mana Anda menggunakan string, dll.)
CarToC[0].sMerek :=‘Audi’;
CarToC[0].iHorsepower :=200;
CarToC[0].iTahun :=2020;
CarToC[0].xInsured :=TRUE;
CarToC[1].sBrand :=‘Mazda’;
CarToC[1].iHorsepower :=120;
CarToC[1].iTahun :=2001;
CarToC[1].xInsured :=FALSE;
Setelah kami menerapkan contoh ini, daftar yang keluar harus ditukar dengan daftar yang masuk. Anda dapat melihat variabel di 'Daftar Port' dari sebelumnya.