Aplikasi MATLAB / Simulink dengan peralatan yang diproduksi oleh InSys JSC

Tugas praktis yang penting adalah penggunaan Matlab / Simulink dengan peralatan nyata yang memungkinkan Anda menerima sinyal dari dunia nyata. Ini sangat berguna untuk algoritma debugging. Makalah ini menyajikan teknologi untuk menghubungkan perangkat ADC yang diproduksi oleh InSys JSC ke Simulink. DLL digunakan untuk menghubungkan, yang terlihat di Simulink sebagai komponen sm_adc. Program konsol terpisah digunakan untuk bekerja dengan peralatan. Komunikasi dengan DLL adalah melalui memori bersama. Menurut teknologi ini, setiap ADC pada modul pendukung apa pun dari InSys JSC dapat dihubungkan. Karya ini menyajikan sistem generator A7_DAC dan modul akuisisi FMC128E / FM412x500M.

Karya ini didemonstrasikan pada konferensi "Teknologi untuk pengembangan dan debugging sistem teknis yang kompleks" pada 27-28 Maret 2018.





Pernyataan masalah

Ini membutuhkan pengembangan sistem generator sinyal dan ADC yang akan menghasilkan sinyal dengan parameter yang diberikan dan mendigitalkannya. Data yang diterima harus ditransfer ke Simulink untuk diproses.

Peralatan

Untuk pekerjaan, dudukan dipasang dari modul ADC dan generator. Sebagai ADC, submodule FM412x500M digunakan di mana terdapat empat saluran ADC dengan frekuensi pengambilan sampel 500 MHz. Submodule diinstal pada modul pembawa FMC128E di mana ada Artix 7 FPGA dan antarmuka USB 3.0. Kedua perangkat terhubung ke laptop yang menjalankan Simulink. Untuk memantau kinerja, tentu saja, osiloskop digunakan.

Penampilan stand:



Diagram struktural dudukan:



Sinyal yang dihasilkan:



Algoritma dudukan:

  1. Simulink bersiap untuk meluncurkan ADC dan generator
  2. Simulink memerintahkan generator untuk memulai
  3. Generator membentuk strobo (sinyal kuning) dan sinyal aktual (biru)
  4. ADC di bagian depan gerbang mulai mengumpulkan data
  5. ADC mengumpulkan array dan meneruskannya ke Simulink
  6. Simulink menampilkan sinyal yang diterima dari ADC


Ini adalah mode pengumpulan satu kali klasik. Keunikannya justru melajang. Peralatan di sepanjang bagian depan sinyal mengumpulkan array data yang diberikan. Fase pengumpulan data terjadi dalam mode "waktu nyata", tetapi pemrosesan adalah bagaimana cara mendapatkannya. Tingkat pengumpulan ditentukan oleh jumlah saluran yang dipilih dan tingkat pengambilan sampel. Untuk empat saluran ADC dan frekuensi pengambilan sampel 500 MHz, kecepatan data adalah 4 GB / s. Pada kecepatan ini, data dapat ditulis ke SODIMM FMC128E. Artinya, sampel 4 GB dapat disimpan.

Selanjutnya, data harus ditransfer ke komputer. Modul FMC128E terhubung ke komputer melalui antarmuka USB 3.0. Kecepatan transfer data adalah 300 MB / s.

Simulink menerima berbagai data dan meneruskannya untuk diproses lebih lanjut. Waktu untuk pemrosesan ini sudah ditentukan oleh kompleksitas model. Dalam contoh ini, array hanya ditampilkan pada panel osiloskop.

Pada titik tertentu, Simulink memutuskan bahwa perlu untuk melaksanakan siklus berikutnya dan semuanya berulang. Sekali lagi perintah USB dikirim untuk menyiapkan ADC, memulai generator dan mengumpulkan data.

Mode ini sangat nyaman untuk debugging perangkat keras dan algoritma. Anda tidak bisa terburu-buru ke mana pun. Kumpulkan berbagai data. Anda dapat dengan tenang melihatnya, membakarnya ke cakram, dan minum kopi. Tetapi ketika semuanya berhasil, maka sudah dimungkinkan untuk beralih ke mode pengumpulan berkelanjutan.

Koneksi DLL

Matlab memungkinkan Anda untuk menghubungkan fungsi yang diimplementasikan dalam DLL eksternal. Simulink juga memiliki kemampuan untuk menghubungkan DLL eksternal, sambil menambahkan beberapa persyaratan. Di dalam Simulink, DLL eksternal terlihat seperti blok S-Function.



MATLAB menyediakan sejumlah besar contoh, termasuk pembuatan DLL eksternal. Namun, metode yang ditawarkan MATLAB sangat tidak nyaman. Ada proyek easyLink OpenSource. Proyek ini telah mengembangkan perpustakaan kelas untuk terhubung ke Simulink.

Untuk membuat komponen, Anda perlu membuat kelas yang berasal dari BaseBlock dan mendeklarasikan port:





Masalah koneksi DLL

DLL eksternal memungkinkan banyak, tetapi ada sejumlah masalah ketika bekerja dengannya. Yang paling penting bagi saya pribadi adalah sebagai berikut:

  1. Debugging DLL sulit
  2. Canggung menonton keluaran printf ()
  3. Mengkompilasi ulang DLL membutuhkan jalan keluar dari MATLAB

Saat debugging suatu program, debugging langkah-demi-langkah diperlukan. Dalam kasus DLL, dimungkinkan untuk terhubung ke DLL yang sudah dimuat ke memori, menetapkan breakpoint di sana, dan melakukan sesi debugging. Tetapi perlu untuk menangkap momen memuat DLL melalui Simulink, entah bagaimana menunda awal kerja. Semua ini bisa dilakukan, tetapi tidak nyaman.

Dalam prosesnya, saya benar-benar ingin melihat keluaran debug yang dibentuk sebagai aliran stdout standar. Dalam kasus DLL, utas ini entah bagaimana dapat dicegat, tapi saya tidak berhasil.

Dan akhirnya, ketidaknyamanan yang paling penting adalah kebutuhan untuk keluar dari MATLAB saat mengkompilasi ulang DLL. Kalau tidak, Anda tidak bisa menulis file baru. Dan keluar dan peluncuran MATLAB berikutnya membutuhkan banyak waktu.

Untuk mengatasi masalah ini, ada cara klasik untuk membangun sistem perangkat lunak yang kompleks. Ini adalah interaksi antar program melalui memori bersama.

Koneksi Memori Bersama

Sistem operasi modern, baik Windows maupun Linux, memungkinkan Anda mengatur area memori yang umum. Ini memungkinkan Anda membuat program yang andal. Misalnya, satu program dapat berisi antarmuka grafis dan berinteraksi dengan operator, dan program lain dapat berinteraksi dengan peralatan. Dalam hal ini, pembekuan program yang berinteraksi dengan peralatan tidak akan menyebabkan pembekuan program interaksi dengan operator. Dalam kasus Simulink, pendekatan ini juga memberikan beberapa keuntungan. Program untuk bekerja dengan peralatan akan diluncurkan sekali, itu akan mempersiapkan peralatan dan akan menunggu perintah melalui memori bersama. DLL akan dimuat setiap kali Anda menjalankan Simulink pada simulasi. Karena DLL tidak bekerja secara langsung dengan perangkat keras, peluncuran ini akan cepat.

Dua program dan dua DLL telah dikembangkan untuk stand ini:

  1. simulink_a7dac - program kontrol generator
  2. simulink_adc - program kontrol ADC
  3. sm_ctrl - kontrol DLL generator
  4. sm_adc - kontrol ADC DLL


Diagram blok disajikan pada gambar di bawah ini:



Program simulink_adc didasarkan pada perpustakaan Bardy. Program ini memungkinkan Anda untuk bekerja dengan ADC apa pun yang diproduksi oleh InSys JSC. Menyetel ke ADC dan modul operator tertentu dilakukan melalui file inisialisasi.

Tampilan skema di Simulink

Dan akhirnya, seperti apa di dalam Simulink:



Semuanya terlihat seperti di Simulink. Satu unit untuk kontrol ADC. Blok kedua untuk mengontrol generator. Sejumlah parameter tersedia untuk mengontrol generator. Untuk ADC, semuanya melalui file inisialisasi. Jika perlu, sejumlah parameter ADC juga dapat ditampilkan di level blok.

Perhatikan dua osilator master. Dalam hal waktu model, mereka menentukan waktu mulai dan saat pengumpulan data. Poin-poin ini sangat penting. Mereka benar-benar mengatur hubungan antara model dan dunia nyata. Sinyal awal memasuki blok ADC, diproses di DLL. Melalui memori bersama, ia memasuki program ADC. Kemudian dikonversi menjadi urutan perintah tulis ke register, yang melalui USB masukkan FPGA. Dan di dalam FPGA, tepi depan pencarian sinyal start dikokang. Dan hanya setelah mesin dimiringkan ke arah yang berlawanan, konfirmasi melewati rantai yang sama. Ketika konfirmasi mencapai Simulink, sinyal start_out akan muncul pada output dari blok sm_adc, yang akan diteruskan ke blok sm_ctrl. Dan itu semua akan menjadi momen yang sama dari waktu model. Dalam blok sm_ctrl, sepanjang rantai yang sama, sinyal akan dikirim ke FPGA generator dan itu akan membentuk sinyal. ADC akan menangkap sinyal ini dalam memorinya. Sinyal akuisisi data akan dihasilkan dari osilator master kedua. Dengan cara yang sama, data pergi ke Simulink dan pergi ke output data dari blok sm_adc. Saat ini, satu blok dari jumlah 16384 sedang dikembalikan. Blok yang diterima ditampilkan pada osiloskop.



Hasil

Bekerja melalui memori bersama telah terbukti efektif. Program manajemen ADC memungkinkan Anda untuk bekerja dengan salah satu ADC kami. Pada saat yang sama, masih ada cara yang mudah untuk mengkonfigurasi parameter melalui file konfigurasi. Program ini dirancang sebagai aplikasi konsol, sementara semua hasil debug terlihat. Ada indikasi operabilitas. Komponen SM_CTRL memungkinkan Anda untuk menghubungkan berbagai aplikasi eksternal untuk mengendalikan peralatan. Debugging program kontrol ADC tidak menyebabkan kesulitan. Ini adalah program umum di mana Anda dapat mengatur breakpoints dan debug. Dengan menggunakan teknologi yang sama, program lain untuk interaksi antara Matlab / Simulink dan dunia luar dapat dikembangkan.

Karya ini diterbitkan di situs hub.exponenta.ru ;

Referensi:
  1. Proyek SIMULINK_SM - kode sumber program: https://github.com/dsmv/simulink_sm
  2. Proyek EasyLink: https://sourcesup.renater.fr/frs/?group_id=1500
  3. Modul pembawa FMC128E http://insys.ru/fmc/fmc128e
  4. Submodule FM412x500M http://insys.ru/mezzanine/fm412x500m
  5. Saluran telegram InSys Research

Source: https://habr.com/ru/post/id470327/


All Articles