Simulink Rapid Accelerator dibangun kembali untuk data masukan variabel

Saya baru saja menemukan bug buruk karena saya terlalu mempercayai Simulink sehingga tidak peduli dengan semua ketergantungan saat menggunakan Rapid Accelerator.

Pada dasarnya saya memiliki ratusan iterasi yang dijalankan pada model yang sama tetapi dengan data masukan yang berbeda (berasal dari ruang kerja MATLAB melalui "Dari Ruang Kerja").

Simulink tampaknya mengabaikan ketergantungan pada data masukan dan tidak akan membangun kembali target sesuai dengan data masukan baru.

Sekarang saya dapat memaksa pembangunan kembali untuk setiap iterasi tetapi ini bukan inti dari model yang dioptimalkan ...

Bagaimana saya bisa memberitahu Simulink untuk hanya mengkompilasi satu file yang berisi input + linker (yang membangun setiap iterasi) daripada membangun keseluruhan model?

Sekalipun ini tidak berhasil: Bagaimana cara memaksa pembangunan kembali?

Juga tidak

 Simulink.BlockDiagram.buildRapidAcceleratorTarget('my_model');

lebih banyak pengaturan "Bangun kembali semua (termasuk perpustakaan)" di pengaturan Target Simulasi tampaknya memaksa pembangunan kembali ....


person divB    schedule 30.04.2016    source sumber


Jawaban (1)


Ini bukan bug, ini fakta yang terdokumentasi dengan baik.

Ketika model berisi blok "Dari Ruang Kerja" dikompilasi ke dalam target Rapid Accelerator, executable mandiri akan berisi semua variabel yang relevan di ruang kerja, dengan ukuran dan nilai yang sama dengan yang dimilikinya pada waktu kompilasi .

Ini adalah alasan yang cukup baik untuk menghindari blok seperti "Dari Ruang Kerja" secara default, kecuali dalam simulasi mode normal quick-n-dirty.

Hal ini cukup jelas jika Anda memikirkannya -- pertimbangkan apa yang akan terjadi jika model Anda menggunakan variabel di ruang kerja

myVar = [1 2 3];

selama proses pertama, tetapi pada proses berikutnya yang Anda atur

myVar = [1 2 3 4 5 6 7 8 9 10];

Fleksibilitas semacam ini sepele di lingkungan MATLAB/Simulink, namun mengimplementasikannya dalam bahasa seperti C atau C++ jauh lebih sulit. Meskipun memasukkan fleksibilitas ini ke dalam target Akselerasi Cepat adalah mungkin, saya tidak akan merekomendasikannya.

Pendekatan yang jauh lebih baik adalah dengan menggunakan input ke model Anda, atau bahkan lebih baik lagi, parameter model. Ini diuraikan misalnya, di postingan blog ini, dan berbagai tempat lain.

person Rody Oldenhuis    schedule 03.05.2016
comment
Sebenarnya, apakah Anda yakin tentang hal ini? Karena sementara itu saya mencoba hal-hal tertentu dan menemukan bahwa jika saya mengubah data ruang kerja untuk blok From Workspace saya masih mendapatkan hasil yang benar! Saya pasti menggunakan Rapid Accelerator. Argumen Anda wrt From Workspace tidak valid: Dalam hal ini, rantai kompilasi apa pun yang cukup baik akan secara otomatis membuat semua file dependen (biasanya subset yang lebih kecil) yang merupakan perilaku merek apa pun dan perilaku yang secara alami saya harapkan dari Simulink. Namun berdasarkan pengujian saya, sepertinya ini benar? - person divB; 05.05.2016
comment
Satu komentar lagi: Mungkin perilaku ini sudah berubah (saya menggunakan R2015a)? - person divB; 05.05.2016
comment
Tunggu apa? Jadi Anda mengubah data ruang kerja, dan tanpa membangun kembali, Anda mendapatkan keluaran yang berbeda? Lalu... Apa masalahmu? Yang saya tahu adalah itu tidak berfungsi pada R2010a (sayangnya masih saya gunakan), untuk alasan yang saya sebutkan. Itulah inti dari parameter model dan kemampuan merdu... Yah, mungkin mereka mengubahnya, saya harap begitu. - person Rody Oldenhuis; 05.05.2016
comment
Ya. Saya punya sesuatu seperti for simin=1:100;sim test;end. Semua variabilitas bagi saya berasal dari From Workspace. Tidak yakin apa yang sebenarnya terjadi di latar belakang tetapi tidak ada pesan seperti ### Building the rapid accelerator target for model kecuali untuk iterasi pertama. Jika tidak memperhitungkan hal ini, semua proses akan memberikan hasil yang sama, bukan? Tapi ternyata tidak... Bolehkah saya menyiapkan contoh sederhana untuk cross check? - person divB; 05.05.2016
comment
Apa yang salah pada awalnya? Apa yang menyebabkan Anda memposting pertanyaan ini dan apa yang Anda ubah? - person Rody Oldenhuis; 05.05.2016
comment
Saya membuat contoh dengan semua keluaran/tangkapan layar di dropbox.com/s/ 9psjlhs6k564nzg/test_rapid.zip?dl=0 . File mdlnya di ekspor untuk R2010a, mungkin bisa dicek disana? Pertanyaan awalnya adalah karena saya mendapatkan hasil yang tidak dapat saya jelaskan (mungkin tidak berhubungan) dan saya ingin memastikan bahwa saya dapat mengecualikan bahwa beberapa data kacau karena pembuatan ini karena saya melihat data aktual di file sumber dan merasa tidak nyaman. - person divB; 05.05.2016