Kami menulis pemuat FPGA di LabVIEW. Bagian 1



Sebagian besar programmer "normal", secara sederhana, memiliki sikap ambigu terhadap teknologi LabVIEW . Di sini Anda dapat berdebat untuk waktu yang lama dan tidak berhasil. Situasi ini diperburuk oleh kenyataan bahwa ada banyak contoh program LabVIEW di jaringan, tetapi semuanya berorientasi pada pemula dan bermuara pada β€œoh, lihat betapa sederhananya, hubungkan putaran ke indikator, putar kenop, perubahan digit”, atau paling tidak, pada grafik dalam siklus nomor acak atau sinus ditampilkan, semua ini disertai dengan antarmuka yang marah dalam bentuk sakelar toggle raksasa, tombol putar dan indikator dial. Secara pribadi, pendekatan penyederhanaan sadar ini mengganggu saya. Dalam serangkaian artikel singkat saya akan mencoba memperkenalkan pembaca pada proses pengembangan perangkat lunak aplikasi di LabVIEW. Agar tidak mencurahkan banyak waktu untuk bidang subjek, kami akan menggunakan algoritma terperinci untuk mengunggah file konfigurasi ke FPGA melalui FTDI dalam mode MPSSE ( Mengunduh konfigurasi ke FPGA melalui USB atau membongkar FTDI MPSSE ). Pada artikel ini saya akan menunjukkan bagaimana mengimplementasikan loader FPGA yang sama, tetapi dalam bahasa LabVIEW.


Seperti disebutkan di atas, algoritma pemuatan FPGA dalam mode Serial Passive (SP) dan prinsip operasi FTDI dijelaskan dengan baik dalam artikel sebelumnya. Saya tidak akan mengulangi lagi. Kami percaya bahwa algoritme diuji dan diakui sebagai kecocokan. Dan ya, anggap pembaca setidaknya secara dangkal akrab dengan konsep LabVIEW dan berpengalaman dalam pemrograman klasik.


Meskipun proses pembuatan bootloader tidak memakan banyak waktu, deskripsi proses tidak berhasil masuk ke dalam volume satu artikel, jadi akan ada seri kecil. Karena tahap percobaan telah selesai, dan saya yakin dengan pengoperasian algoritma, saya akan membiarkan diri saya memulai pengembangan dari antarmuka pengguna. Pada artikel pertama, kami akan membuat antarmuka pengguna loader dan menerapkan struktur program. Dalam yang kedua - melalui dll driver FTDI, kami menerapkan pemuatan file * .rbf ke dalam FPGA.


Untuk produktivitas percakapan, tidak berlebihan untuk mengingat terminologi yang diadopsi di LabVIEW. Dalam LabVIEW, program aplikasi disebut Instrumen Virtual, juga dikenal sebagai VI, juga dikenal sebagai instrumen Virtual atau singkatnya VI. VP memiliki dua "sisi": Panel Depan, di mana kontrol dan indikator berada, dan diagram blok (Block Diagram), di mana elemen-elemen ini saling berhubungan dan fungsi serta aliran pemrosesan data diimplementasikan. Sebagai aturan, VP memiliki struktur hirarkis, semua VP di VP tingkat atas biasanya disebut subdevice atau SubVI.


Antarmuka pengguna


Aplikasi kita harus memuat file konfigurasi ke dalam FPGA. Pada saat yang sama, kami maksudkan bahwa beberapa FTDI dapat dihubungkan ke komputer secara bersamaan, dan beberapa di antaranya berpotensi digunakan untuk mengonfigurasi FPGA. Saya sarankan membuat pilihan perangkat dari daftar drop-down, memilih file melalui tombol dengan output path. Untuk memulai unduhan, tambahkan tombol "program". LED virtual akan menunjukkan status operasi. Luncurkan LabVIEW.


Tambahkan elemen yang diperlukan ke panel depan (Panel Depan). Saya akan menggunakan gaya "Perak" untuk VP. Gambar di bawah ini menunjukkan hasilnya, semua elemen dalam kondisi murni mereka. Dengan nama, jika perlu, mereka cukup mudah ditemukan di palet.




Kami mengedit elemen: kami mentransfer, meregangkan, kami menambahkan prasasti - kami membawa ke formulir yang diperlukan. Di sini, pada kenyataannya, tangan desainer diperlukan, tetapi yang saya bisa:




Dan diagram blok:




Saya menarik perhatian Anda. Setiap elemen memiliki dua properti yang menentukan nama - Label dan Keterangan.




Properti pertama menetapkan nama elemen, di bawah nama ini akan ditampilkan pada diagram blok. Label, tidak seperti Keterangan, tidak dapat diubah selama pelaksanaan VI. Sehubungan dengan fitur ini, saya sarankan Anda menyembunyikan Label di VI Anda di panel depan dan menampilkan Keterangan. Untuk Label, buatlah nama yang bermakna, sebagai variabel dalam bahasa pemrograman klasik, lebih disukai dalam tata letak Latin. Untuk Caption, kami akan memperkenalkan nama yang berorientasi pada manusia, bisa sangat panjang, termasuk spasi dan, jika perlu, dalam bahasa Rusia. Menggunakan LabVIEW, Anda dapat menyesuaikan font tampilan untuk Keterangan. Saya harus mengatakan bahwa tidak ada yang memaksa kita untuk mengacaukan Keterangan: setiap prasasti dapat dibuat langsung di FP di tempat bebas apa pun.


Kami menerapkan operasi VP sesuai dengan skema klasik: While dan event handler. Tambahkan loop While (Pemrograman -> Struktur -> Loop Sementara) ke diagram blok, dan struktur pengendali acara (Pemrograman -> Struktur -> Struktur Acara).


Bantuan Singkat tentang Struktur Acara

Struktur menunggu peristiwa terjadi, kemudian pawang yang sesuai mengeksekusi. Struktur peristiwa memiliki satu atau beberapa subdiagram - penangan peristiwa, yang disebut kasus, salah satunya dieksekusi ketika suatu peristiwa terjadi. Menggunakan terminal di sudut kiri atas, Anda dapat menentukan jumlah milidetik selama struktur mengharapkan suatu peristiwa. Jika selama waktu ini tidak ada peristiwa yang terjadi, sub-diagram "Batas Waktu" akan dieksekusi. Nilai default adalah minus 1, yang berarti batas waktu tidak pernah berakhir.




  1. Label pemilih acara menunjukkan acara mana yang memicu kasus saat ini. Untuk melihat penangan lain, Anda dapat mengklik panah bawah di sebelah nama acara.
  2. Terminal timeout menetapkan jumlah milidetik untuk menunggu suatu peristiwa. Jika nilainya selain -1, maka subdiagram Timeout harus diimplementasikan.
  3. Terminal untuk memasuki acara dinamis. Terminal ini tidak ditampilkan secara default. Untuk menampilkannya, pilih "Show Dynamic Event Terminal" di menu konteks.
  4. Simpul data acara. Ketika suatu peristiwa terjadi, LabVIEW menghasilkan data yang terkait dengan acara ini. Node ini menyediakan data ini ke handler. Anda dapat menggunakan mouse untuk mengubah ukuran simpul secara vertikal dan memilih elemen yang diperlukan. Beberapa data, seperti Type dan Time , umum untuk semua peristiwa, yang lain, seperti Char dan VKey , tergantung pada jenis acara yang dikonfigurasi.
  5. Node filter peristiwa menentukan data peristiwa yang dapat Anda modifikasi sebelum antarmuka pengguna memproses data ini. Node ini hanya ditampilkan pada penangan yang menyediakan penyaringan. Anda bisa menghubungkan dan mengubah item dari node data acara ke simpul filter acara. Anda juga dapat mengubah peristiwa ini dengan menghubungkan nilai-nilai baru ke terminal simpul. Bisakah saya sepenuhnya membatalkan reaksi antarmuka ke acara jika saya mengirimkan true ke terminal Discard? . Jika Anda tidak menghubungkan nilai ke elemen filter, maka elemen data ini tetap tidak berubah.
  6. Seperti struktur Case , struktur acara mendukung terowongan. Jika Anda menambahkan sebuah terowongan dalam satu kasus, itu akan secara otomatis dibuat untuk setiap penangan. Namun, secara default tidak perlu menghubungkan terowongan output dari struktur acara di setiap handler. Semua terowongan yang tidak terhubung menggunakan nilai default untuk tipe data terowongan. Secara potensial, ini dapat menyebabkan kesalahan yang sulit dideteksi. Anda dapat mengembalikan mode di mana terowongan harus ditransfer di semua penangan, untuk ini, pilih "Gunakan Default Jika Tidak Dikabel" dalam menu konteks.

Pertama-tama, kami akan mengurus bagaimana siklus berakhir dan keluar dari program. Cara termudah adalah menambahkan tombol stop, yang akan menghentikan siklus, tetapi, menurut pendapat saya, adalah kebiasaan untuk mengakhiri program dengan palang merah di sudut atas jendela.
Tambahkan handler yang sesuai ke Event Structure . Di menu konteks, pilih "Tambah Kasus Acara". Sebagai sumber acara, pilih "VI ini", acara menunjukkan "Panel Tutup?"


Edit acara


Gambar yang dapat diklik


Harap dicatat, jika Anda memilih "Panel Close" (tanpa pertanyaan), maka acara ini tanpa filter, tidak dapat dibatalkan. Dan jika dengan sebuah pertanyaan, maka ketika Anda mengklik tanda salib, kita dapat mengambil kendali dan menyelesaikan program dengan benar secara independen. Di "Panel Close?" melalui terowongan kita menghubungkan konstanta Boolean true dengan terminal untuk menghentikan while . Input "Buang?" juga melayani dengan true .


Sekarang tidak ada nuansa yang jelas: jika VI saat ini diluncurkan bukan di lingkungan LabVIEW, tetapi dalam bentuk aplikasi yang dikompilasi, maka mengklik salib tidak menutup jendela, tetapi menghentikan aplikasi, yang tidak kita butuhkan. Untuk mengatasi masalah ini, setelah selesainya siklus utama, kami akan memeriksa apakah kami berada dalam lingkungan pengembangan atau dalam mode program, jika masih dalam mode program, maka kami akan mengakhiri aplikasi. Untuk memahami di mana VI saat ini berjalan, gunakan simpul properti (Pemrograman -> Kontrol Aplikasi -> Node Properti). Node ini menyediakan akses ke properti dari suatu objek dengan merujuk ke objek ini. Dalam hal ini, kita harus mendapatkan tautan ke seluruh aplikasi secara keseluruhan. Pilih konstanta VI Server Reference dari palet yang sama. Setelah konstanta diset ke diagram blok, Anda perlu mengubah tipenya menjadi This Application (tombol kiri mouse). Kami menghubungkan tautan yang dihasilkan dengan simpul properti. Pilih properti Application:Kind Property - mengembalikan jenis sistem LabVIEW di mana VI saat ini berjalan. Kami menghubungkan output properti ke Struktur Kasus, tambahkan kasus "Run Time System", di mana kami mengakhiri aplikasi ( Quit LabVIEW ). Agar blok ini dapat dieksekusi setelah siklus, dan bukan sebelumnya, kami menghubungkan error in terminal input ke siklus melalui terowongan.



Gambar yang dapat diklik


Sekarang ketika Anda memulai program, Anda dapat menghentikannya dengan mengklik tanda silang jendela. Program yang diluncurkan terlihat seperti ini:




Menurut saya, banyak yang berlebihan. Pergi ke properti VI (File -> menu VI Properties), pilih kategori "Window Appearance", atur Custom.


Matikan tampilan menu (tetap dalam mode editing), matikan bilah gulir, sembunyikan bilah alat ketika aplikasi sedang berjalan (Tampilkan bilah alat saat menjalankan). Kami melarang mengubah ukuran jendela, kami memungkinkan meminimalkan dan meminimalkan jendela. Itu lebih baik:




Tentu saja, ada baiknya menghapus prasasti "Instrumen Nasional. Perangkat Lunak Evaluasi LabVIEW", tetapi saya tidak ingin membeli lisensi untuk komputer di rumah, kami akan memasang prasasti dan mengelola masa uji coba 45 hari.


Secara alami, Anda dapat menyesuaikan warna latar belakang dan setiap elemen, memilih font, tapi saya bukan seorang desainer, tetapi sesuatu memberitahu saya bahwa saya hanya akan memperburuknya.


Daftar Instrumen


VP harus menawarkan kepada pengguna daftar perangkat yang terhubung ke komputer yang sesuai untuk firmware FPGA sehingga pengguna dapat memilih yang diinginkan. Di perpustakaan FTD2XX, fungsi FT_CreateDeviceInfoList dan FT_GetDeviceInfoDetail untuk tujuan ini dimaksudkan. Seperti dibahas dalam artikel sebelumnya , pustaka driver dapat digunakan untuk menggunakan API FTD2XX. LabVIEW memiliki mekanisme yang nyaman untuk berinteraksi dengan pustaka dinamis - simpul Simpul Fungsi Pustaka Panggilan, Anda dapat menemukannya di palet "Konektivitas -> Perpustakaan & Eksekusi". Node panggilan fungsi harus dikonfigurasi: pertama, tentukan jalur ke dll (tab "Function"), setelah itu sistem memindai perpustakaan dan meminta Anda untuk memilih nama fungsi dalam daftar "Function Name" - pilih FT_CreateDeviceInfoList , konvensi pemanggilan - pilih stdcall (WINAPI) . Kedua, pada tab "Parameter", Anda harus memasukkan daftar parameter fungsi, di mana elemen pertama dari daftar adalah nilai balik. Di sini akan lebih baik untuk mengingat dokumentasi untuk API, atau file header. Saat mengatur parameter di area "Function prototype", prototipe dari fungsi yang diimpor ditampilkan. Ketika tanda tangan dari dokumentasi cocok dengan prototipe yang dikonfigurasi, klik OK.


Misalkan pemindaian harus dilakukan sekali per detik. Kami menempatkan simpul panggilan dalam struktur event handler pada tab "Timeout", mengatur waktu tunggu hingga 1000 ms. Kami menambahkan indikator ke pin node, dan jika semuanya dilakukan dengan benar, maka ketika memulai VI, jumlah perangkat yang terhubung dengan FTDI harus ditampilkan:


Panel depan dan diagram blok


Gambar yang dapat diklik



Demikian pula, buat simpul untuk fungsi FT_GetDeviceInfoDetail . Prototipe fungsi adalah:


 FTD2XX_API FT_STATUS WINAPI FT_GetDeviceInfoDetail( DWORD dwIndex, LPDWORD lpdwFlags, LPDWORD lpdwType, LPDWORD lpdwID, LPDWORD lpdwLocId, LPVOID lpSerialNumber, LPVOID lpDescription, FT_HAN 

Saat menjelaskan parameter, harus dicatat bahwa lpdwFlags , lpdwType , lpdwID , lpdwLocId diteruskan sebagai pointer ke uint32 . Parameter lpSerialNumber dan lpDescription adalah inti dari byte string ( char array dengan terminator nol). Parameter semacam ini di simpul panggilan dapat diformat dengan berbagai cara, Anda dapat memasukkannya ke dalam susunan kata 8-bit, tetapi saya pikir paling mudah untuk segera menunjukkan bahwa ini adalah string dan mengatur ukuran yang diharapkan. Dalam hal ini, output akan langsung menjadi garis "labirin" yang valid dan tidak ada transformasi tambahan yang diperlukan.



Panggil fungsi perpustakaan


Fungsi ini mengembalikan informasi dengan nomor seri dwIndex . Jika beberapa FTDI terhubung ke komputer, untuk membaca informasi untuk setiap konverter, fungsinya harus dipanggil dalam satu lingkaran. Jumlah iterasi dari loop akan diberikan kepada kami oleh fungsi FT_CreateDeviceInfoList sebelumnya.


Panel depan dan diagram blok


Gambar yang dapat diklik



Ada fitur yang tidak menyenangkan: semua port node panggilan harus terhubung setidaknya di satu sisi. Oleh karena itu, sebuah terowongan dibuat dalam loop untuk terminal-terminal output yang tidak akan kita gunakan.


Types array berisi tipe chip FTDI, kami membutuhkannya untuk membatasi pilihan hanya pada mereka yang mendukung MPSSE dan berpotensi dapat digunakan untuk pemrograman FPGA. Namun, beroperasi dengan "angka ajaib" tidak nyaman - saya mengusulkan untuk mengatur tipe FTDI dalam bentuk enum . Selain itu, enum seperti enum sudah ada dalam file header ftd2xx.h. Di LabVIEW, Anda bisa menggunakan dua kontrol untuk membuat enumerasi: Cincin Teks dan Enum itu sendiri. Keduanya berisi daftar string dengan nilai numerik di antaranya Anda dapat beralih. Perbedaan utama adalah bahwa "Enum" mensyaratkan bahwa nilai numerik menjadi bilangan bulat berturut-turut, sedangkan "Teks Cincin" memiliki lebih banyak kebebasan - Anda dapat menentukan nilai apa pun.


Enum. Ciptaan

Kami memasukkan nilai secara manual, sangat disayangkan tidak ada fungsi untuk mengimpor enum dari C



Di panel depan indikator ini terlihat seperti ini



Memilih nilai dengan mengklik kiri


Untuk menautkan dan menyinkronkan semua instance daftar yang dibuat di masa mendatang, akan lebih mudah menggunakan "Make Type Def." (pemilihan melalui menu konteks item). Akibatnya, tipe data khusus akan dibuat. Tipe baru ditempatkan di file terpisah dengan ekstensi * .ctl. Mengedit file ini akan mengubah semua instance elemen ini. Saya pikir tidak ada gunanya menjelaskan betapa nyamannya hal ini. Akses ke file definisi dapat diperoleh dari menu konteks instance dengan memilih "Open Type Def", di menu yang sama Anda harus memperhatikan item "Auto-Update from Type Def." dan "Putus dari Jenis Def".


Kami mengubah indikator Types menjadi array indikator dari FTDI Type dan sebagai hasilnya, ketika VI mulai, tipe konverter yang terhubung ditampilkan:



Tiga perangkat ditemukan


Sangat mudah untuk melihat bahwa fungsionalitas kode yang dihasilkan dalam kasus "Timeout" selesai, oleh karena itu dapat dipindahkan ke SubVI yang terpisah. Pilih elemen yang ingin kita transfer ke subdevice dan pilih "Buat SubVI" dari menu utama Edit.


diagram blok dengan sub-instrumen yang dibuat

Semua indikator tetap ada, dan VI baru dengan ikon standar dibentuk menggantikan node panggilan.

Gambar yang dapat diklik


Mengklik dua kali pada subVI baru akan meluncurkan jendela pengeditannya. Pertama-tama, kami menyimpannya dan memberikan nama yang bermakna, misalnya, "FT_GetDeviceInfo". Siapkan terminal I / O. Untuk melakukan ini, gunakan Panel Connector:



Panel adalah seperangkat terminal yang sesuai dengan kontrol dan indikator VI.


Jika Anda memilih terminal pada panel koneksi, elemen yang sesuai pada panel depan disorot. Jika Anda memilih terminal kosong dan kemudian mengklik elemen di panel depan, maka elemen tersebut akan dilampirkan ke terminal, tetapi sebelum itu tidak boleh ditugaskan ke terminal lain. Dalam menu konteks, Anda dapat secara individu atau sekaligus memutuskan terminal dari elemen, Anda dapat mengubah pola panel secara keseluruhan.


Saya tidak suka bagaimana terminal ditugaskan saat membuat subVI saat ini, jadi saya pilih "Putuskan Semua Terminal" dan tandai secara manual. Saya merekomendasikan menempatkan terminal input di sebelah kiri, dan output di sebelah kanan, input opsional dapat ditempatkan di atas, dan output opsional di bagian bawah. Ini akan memastikan pembacaan kode dan tatanan visual yang baik dalam diagram blok.


Untuk mengontrol kesalahan, buat dua elemen tambahan, Error in dan Error out . Topik kesalahan kontrol LabVIEW sangat luas dan melampaui ruang lingkup artikel ini, jadi kami akan membatasi diri pada penjelasan minimum dan mematuhi prinsip "do as I". Jadi, kami membuat dua terminal untuk kesalahan - input dan output.


Lebih mudah untuk membuatnya menggunakan menu konteks

Klik kanan pada terminal kesalahan dari sembarang simpul:



Di LabVIEW, sudah biasa menempatkan terminal input dari kesalahan pada panel koneksi di kiri bawah, dan terminal output di kanan bawah.


Akan lebih mudah untuk menggabungkan output ke dalam suatu struktur. Untuk output, kita akan membuat dua array: array pertama akan berisi semua perangkat FTDI yang ditemukan, array kedua hanya akan berisi yang bisa MPSSE dan secara teoritis dapat digunakan untuk mengkonfigurasi FPGA.


Sentuhan terakhir saat membuat sub-instrumen adalah mengkonfigurasi ikon. Mengklik dua kali pada ikon di sudut kanan atas jendela akan meluncurkan editor. Kami mencoba untuk membuat semacam gambar yang bermakna yang memungkinkan kami untuk menafsirkan tujuan perangkat secara jelas dalam diagram blok.


FT_GetDeviceInfo.vi

Panel depan



Diagram blok


Dan ini adalah bagaimana kasus "Timeout" terlihat setelah membereskan semuanya:

Gambar yang dapat diklik


Hingga saat ini, daftar drop-down dengan nama "Select a device" kosong, sekarang kami memiliki data untuk mengisinya. Kami membuat simpul properti untuk daftar dengan properti "Strings []" (menu konteks -> Buat -> Properti Node -> Strings []). Setiap properti dapat ditulis dan dibaca, mode saat ini dipilih dalam menu konteks dari Property Node. Saat membuat simpul secara default, properti dikonfigurasikan untuk membaca. Ubah untuk menulis: "Ubah Untuk Menulis".


Dari array struktur, pilih array dengan deskripsi dan berikan ke Strings[] . Anda dapat memilih array menggunakan For Loop .


Setelah memulai VI, menekan tombol kiri pada elemen "Pilih perangkat", Anda dapat menentukan perangkat untuk konfigurasi. Dalam hal ini, daftar perangkat diperbarui dua kali per detik. Tentu saja, akan mungkin untuk memperbarui properti hanya jika daftar telah diperbarui, tetapi sejauh ini akan menghasilkan kekacauan yang tidak perlu dari diagram blok.


Apa yang terjadi

Panel depan



Gambar yang dapat diklik


Sebelumnya, saya lupa menyebutkan fitur yang menarik, loop For tidak harus menentukan jumlah iterasi secara eksplisit, cukup membuat terowongan input array dan loop akan mengeksekusi untuk setiap elemen, perilaku ini menyerupai foreach di C ++ 11. Namun, Anda harus berhati-hati ketika lebih dari satu array tiba di input loop.


Dalam struktur acara, tambahkan penangan untuk menekan tombol "program". Meskipun kami tidak memiliki VI yang bertanggung jawab untuk memuat file ke FPGA, kami akan membuat sub-perangkat "rintisan". Misalkan dibutuhkan path ke file konfigurasi dan deskriptor FTDI sebagai input, dan menurut hasil operasi itu mengembalikan status firmware: berhasil atau tidak. Dan untuk membuatnya lebih menarik untuk menguji antarmuka program, kami akan membuat status ini acak.


Stub FT_MPSSE_SP_FPGA.vi

Panel depan



Diagram blok


Kami akan meneruskan deskriptor FTDI ke input rintisan melalui properti daftar (menu konteks -> Buat -> Properti Node -> Teks Dering -> Teks), untuk mentransfer path file ke elemen "File Path", membuat variabel lokal (menu konteks -> Buat -> Lokal Variabel) dan atur untuk membaca (Change To Read). Dan hubungkan output status langsung ke indikator Status . Tombol Programm diseret ke pengendali acara. Merupakan praktik yang baik untuk menempatkan elemen-elemen yang peristiwanya dikonfigurasikan dalam penangan - sekarang mengklik dua kali pada elemen ini di panel depan tidak hanya akan menunjukkan elemen yang sesuai dalam diagram blok, tetapi juga penangan peristiwa yang terkait dengan elemen ini.


Sekarang, dengan menekan tombol "Program", indikator menjadi hijau (sukses) atau hijau gelap (tidak berhasil). Tidak terlalu jelas. Di properti indikator, ubah warna "Mati" menjadi merah. Itu lebih baik. Jika indikator berwarna hijau, maka kita dapat mengatakan bahwa FPGA pada perangkat yang dipilih dikonfigurasi oleh file, jalur yang ditunjukkan di jendela:



Panel depan


Tetapi pernyataan ini menjadi salah jika kita mengubah file atau memilih perangkat lain. Pada saat yang sama, kami tidak dapat mewarnai indikator merah, karena kesalahan pemrograman tidak terjadi. Dalam hal perubahan file atau perangkat, akan lebih mudah untuk menekankan bahwa nilai indikator tidak relevan - menggelapkannya. Untuk ini, Anda dapat menggunakan properti indikator Disabled . Properti ini dapat mengambil tiga nilai. Enabled - tampilan normal, pengguna dapat mengontrol objek; Disabled - objek ditampilkan di panel depan seperti biasa, tetapi pengguna tidak dapat mengontrol objek; Disabled and Grayed Out - objek ditampilkan pada panel depan yang gelap, dan pengguna tidak dapat mengontrol objek.


Kami membuat penangan acara untuk Devices list dan File Path , dan di dalamnya kami menggelapkan indikator status, dan di penangan kami menetapkan tombol "Program" untuk properti Enabled .


Apa yang terjadi


Handler "Programm": Perubahan Nilai.



Penangan daftar perangkat: Perubahan Nilai



Ini adalah bagaimana indikator yang gelap terlihat


Mari kita cari file konfigurasi dengan nyaman bagi pengguna - kita akan mengonfigurasi jendela tampilan file. Pergi ke properti elemen File Path , pada tab "Browse Options", isi Prompt, Label Pola, tentukan filter jenis file (Pola) dan nama untuk tombol (Teks Tombol).


Jendela pemilihan file

Hanya file rbf yang ditampilkan



Membuat antarmuka pengguna dapat dianggap lengkap.



Menjalankan bootloader


Apa yang kamu temui hari ini?


Pada artikel ini, sebagai contoh membuat aplikasi lengkap fungsional dengan antarmuka minimalis, saya mencoba untuk menunjukkan berbagai pendekatan untuk bekerja di LabVIEW.


Sebagai hasilnya, kami menyentuh mereka:


  • Mengatur properti alat virtual. .
  • : .
  • .
  • .
  • dll.
  • .

API FTD2XX MPSSE. .



  1. USB FTDI MPSSE
  2. labview_mpsse . .
  3. .
  4. Software Application Development D2XX Programmer's Guide . API D2XX.

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


All Articles