Mendefinisikan Array Kustom di Blok Fungsi Asli – Panduan Praktis
Mengapa Postingan Ini?
Faktanya, postingan ini dibuat karena ketika saya mengembangkan Blok Fungsi Asli, saya menemukan bahwa tidak mungkin menggunakan array struktur khusus. Atau dengan kata lain, sayang sekali GitHub resmi dari PLCnext tidak memiliki tutorial seperti ini. Jika Anda menggunakan tutorial C# untuk membuat array khusus di Blok Fungsi Asli, Anda akan menemukan bahwa Anda tidak berhasil mengkompilasinya, atau mengatur nilai array di PLCnext Engineer tidak memiliki respons. Contoh kasusnya kebetulan berkaitan dengan database, itu saja.
Deskripsi demo
- Contoh berikut menggunakan Blok Fungsi Asli untuk membuat antarmuka Array yang ditentukan pengguna dengan rantai alat PLCncli
- Array terdiri dari 21 elemen, yang masing-masing merupakan struktur. Strukturnya berisi dua IecString80, dan sebuah enumerasi, seperti yang ditunjukkan pada diagram berikut.
https://github.com/Leeable/UserDefineArray_NativeFB/tree/Master
Persyaratan
- Pastikan versi ToolChain adalah 23.0 atau lebih tinggi. Contoh ini menggunakan 23.6 ToolChain untuk tujuan demonstrasi.
- Paham dengan proses dasar pembuatan Blok Fungsi Asli.
- Visual Studio 2019 atau 2022 dengan plugin tambahan ToolChain
$ plcncli --version
plcncli 23.6.0.1450 (23.6.0.1450)
LANGKAH1
- Buat proyek baru menggunakan Visual Studio, pilih jenis proyek "Blok Fungsi Asli Bersama", dan beri nama proyek "ArrayTest".
- Kemudian, dalam proyek ArrayTest di Visual Studio, buat Blok Fungsi Asli baru bernama "ArrayCplus."
LANGKAH2
-
Salin kode tersebut ke ArrayCplus.cs
-
Karena ada beberapa masalah tampilan saat langsung memasukkan kode sumber di sini, seperti &dan>, saya menyediakan tautannya.
-
misalnya, &akan dikodekan sebagai & dalam html ini.....
ArrayCplus.cs
LANGKAH3
Buka terminal di folder ArrayTestCpp dan masukkan yang berikut ini.
$ plcncli generate code
Setelah membuat kode, cari ArrayTest-cli32.h dan ArrayTest-cli64.h file di direktori src, dan temukan tempat di mana #error ditunjukkan.
Kita perlu menghapus komentar dan memperbaiki kodenya. Klik untuk menavigasi ke InArrayFB-cli.cpp dan memodifikasi implementasinya.
IntArrayFB-cli.cpp
LANGKAH4
Di ArrayCplus.cpp , masukkan kode berikut. Konten yang mengandung string harus diinisialisasi dalam proses, bukan di wilayah Init; menginisialisasinya di wilayah Init tidak akan berfungsi, mengakibatkan ketidakmampuan untuk menulis nilai ke sName dan sAttribute melalui Engineer.
ArrayCplus-cli.cpp
LANGKAH5
Buka terminal di folder ArrayTestCpp dan masukkan yang berikut ini.
$ plcncli build all
$ plcncli deploy
LANGKAH6
Buka PLCnext Engineer dan muat ArrayTest.pcwlx tambahkan variabel ke ArrayTest bernama arr
Sekarang bisa berfungsi
Pertanyaan
- Meskipun metode ini berhasil dalam praktiknya, mengapa perlu menginisialisasi konten yang berisi IecString atau String Buatan Pengguna di void PInvoke ArrayTest::ArrayCplus::Process() alih-alih di void PInvoke ArrayTest::ArrayCplus::Init() ? tidak berfungsi jika saya memasukkan kode ke dalam void PInvoke ArrayTest::ArrayCplus::Init() .
- Jelas bahwa tidak ada tutorial terkait tentang array yang ditentukan pengguna untuk Blok Fungsi Asli di GitHub. Adakah yang bisa melengkapi dan memperbaikinya? (cara array Csharp Userdefine tidak berfungsi di blok fungsi asli)
- Satu poin terakhir yang juga membingungkan saya adalah mengapa, terlepas dari apakah itu IecString, User-Defined String, atau IecStringEx*, jika berisi string, maka harus dalam bentuk 【InOut 】dalam kode CSharp saat digunakan sebagai Blok Fungsi Asli?
Catatan:
Blog Pembuat menampilkan aplikasi dan kisah pengguna anggota komunitas yang tidak diuji atau ditinjau oleh Phoenix Contact. Gunakan dengan risiko Anda sendiri.