Friday, 4 August 2017

Labview moving average vi


Menghitung Pindah Rata-rata VI ini menghitung dan menampilkan rata-rata bergerak, dengan menggunakan nomor yang telah dipilih sebelumnya. Pertama, VI menginisialisasi dua register geser. Register geser atas diinisialisasi dengan satu elemen, kemudian terus menambahkan nilai sebelumnya dengan nilai baru. Register geser ini menyimpan total pengukuran x terakhir. Setelah membagi hasil penambahan fungsi dengan nilai yang dipilih sebelumnya, VI menghitung nilai rata-rata bergerak. Register geser bawah berisi array dengan dimensi Average. Register geser ini menyimpan semua nilai pengukuran. Fungsi pengganti menggantikan nilai baru setelah setiap loop. VI ini sangat efisien dan cepat karena menggunakan fungsi elemen pengganti di dalam loop sementara, dan menginisialisasi array sebelum memasuki loop. VI ini dibuat di LabVIEW 6.1. Bookmark amp ShareMean PtByPt. vi Tidak Rata-rata Jendela Data pada Masalah Waktu: Saya mencoba untuk rata-rata himpunan bagian dari 100 titik sekaligus dari sinyal masuk terus-menerus. Masalahnya adalah bahwa Mean PtByPt. vi akan rata-rata 100 poin pertama (0hellip99) dan kemudian 100 poin berikutnya (1. 100) menggunakan kembali 99 dari nilai yang sama. Daripada rata-rata jendela bergerak, saya ingin menerapkan rata-rata data blok, yaitu, saya ingin memecah data menjadi beberapa bagian dan mencatat rata-rata setiap potongan data. Solusi: Fungsi default Mean PtByPt. vi tidak memberikan rata-rata setiap potongan data. Sebaliknya, seperti yang dijelaskan dalam pernyataan masalah, untuk ukuran jendela tertentu n, Mean PtByPt. vi rata-rata menunjuk 0 sampai n-1, kemudian menunjuk 1 ke n, kemudian menunjuk 2 ke n1, jadi dan dan seterusnya. Untuk melakukan block averaging, Anda harus menulis beberapa kode solusi. Anda harus melakukan perhitungan modulus pada jumlah iterasi loop untuk menentukan kapan harus rata-rata dan kapan harus meneruskan data tanpa rata-rata. Dengan menghitung jumlah iterasi i mod n, Ketika i0, ujung jendela telah tercapai dan mean rata-rata PtByPt. vis benar. Kami kemudian menyimpan nilai ini dalam array atau indikator. Pada iterasi berikutnya nilai mod akan sama dengan 1, yang akan mengatur ulang Mean PtByPt. vi dan mempersiapkannya untuk subset berikutnya dari n poin. Caranya adalah dengan menyadari bahwa rata-rata yang diperoleh dengan rata-rata blok adalah subset dari rata-rata jendela bergerak yang dilakukan oleh Mean PtByPt. VI. Dalam beberapa kasus, Anda mungkin ingin semua data diperbarui di panel depan sementara hanya mencatat rata-rata seperti yang dijelaskan dalam pernyataan masalah di atas. Anda dapat melakukan fungsi ini dengan cara yang sama, yaitu dengan melakukan operasi modulus pada jumlah iterasi dan memilih sebuah kasus dalam struktur kasus berdasarkan hal ini. Silakan merujuk ke contoh komunitas di bawah Tautan Terkait untuk informasi lebih lanjut tentang bagaimana melakukan ini dan contoh kode yang mem-parsing dan mengubah data dinamis dan melakukan fungsi yang disebutkan di atas. Kode Anda masih tidak masuk akal. Karena Anda memanggil subskala satu skalar pada satu waktu, Anda tidak mendapatkan apa yang Anda inginkan karena register geser hanya mengingatkan kembali skalar N terakhir, tidak masalah salurannya. Kode anda masih sangat tidak efisien dan berbelit-belit. (Misalnya mengapa Anda masih menggunakan insert into array untuk menambahkan (baik di mani nad di sub). (Anda bisa menggunakan subVI penyatuan ulang dan loop terdalam yang paralel, tapi itu tampaknya terlalu rumit juga) Jika Anda ingin melakukan Menjalankan rata-rata pada setiap saluran, subVI perlu menyimpan array 2D di subVI Semua ini telah dilakukan sebelumnya Saya dapat memahami frustrasi Anda - lebih lagi ketika konteks pengkodean LV berbeda dalam kehidupan kita. Insinyur mekanik yang menambah dan yang dimulai sebagai waktu berlalu. Jadi kode mungkin bukan yang paling efisien atau yang mengekstrak tetes terakhir jus dari CPU. Bahkan dalam aplikasi kontrol mesin seluruh CPU tidak melakukan apa-apa Lebih sering daripada menjalankan kode kontrol. Dan dengan prosesor seperti i5 atau i7, itu membuatnya semakin mudah. Saya tidak mengatakan kode yang efisien adalah buang-buang waktu - saya hanya mengatakan konteksnya berbeda. Tepat sebelum saya turun Inilah satu lagi yang cepat dan kotor yang melakukan pekerjaan memberikan yang pertama Nilai w diabaikan - bukan masalah besar dalam aplikasi data logging yang berjalan berjam-jam. Raghunathan LV2012 untuk Mengotomatiskan Uji Uji Hidrolik. Maafkan Anda memiliki rasa rendah untuk keanggunan dan kebenaran, dan Anda merasa Cukup Baik Cukup Baik. Mungkin, di masa depan, Anda akan berkonsultasi dengan seseorang yang mengenal dan memahami LabVIEW dan katakan kepadanya (atau dia) apa yang ingin Anda lakukan dan biarkan mereka melakukannya untuk Anda. Namun, jika tujuan Anda adalah untuk (a) mengumpulkan data dari saluran N pada frekuensi F (dalam Hz), namun untuk menampilkan rata-rata titik M (jadi untuk setiap poin M Anda menghasilkan plot 1 poin, rata-rata titik M ), Heres cara yang baik untuk melakukannya: Buat Produser Loop yang menghasilkan data dengan mengatur Perangkat Sampling Anda untuk memberi Anda M Points dari N Channels, sampel pada frekuensi F. Ini harus berupa array 2D (baris M dari kolom N) . Letakkan ini di Antrean dan ulangi lagi, berulang-ulang sampai tombol Stop ditekan. Setelah keluar dari Producer Loop, kirimkan satu lagi array 2D yang kosong (Anda akan melihat mengapa dalam sekejap). Buat Loop Konsumen paralel dan beri makan Antrian yang digunakan oleh Produser Loop. Dequeue Array Data - jika sudah kosong, selesai, lepaskan Antrian dan hentikan Consumer Loop. Jika tidak, kita perlu Mengkonsumsi (Rata-rata dan Plot) data. Kita perlu mentranspos array M Points by N Channels ke rangkaian N Channel by M Points. Feed Array ini ke For Loop (yang akan dilewati Saluran), hitung Average o the M Points, dan tampilkan Average ini. Kami ingin merencanakan ini (tunggal) dari semua Saluran N, jadi lewati melalui Build Array untuk membuat 1 oleh N Array, dan plot ini. Berikut adalah Cuplikan di LabVIEW 2012 yang memungkinkan Anda mensimulasikan semua ini (ini menghasilkan titik pada frekuensi yang Anda tentukan, maks 1KHz). Saya juga skala Plot sehingga Time dalam hitungan detik. Ini tidak bisa diterjemahkan dengan baik untuk Cuplikan - saya benar-benar menggunakan Data Properti Rata-rata di sana. Ini, menurut saya, melakukan apa yang saya pahami yang benar-benar Anda inginkan, yaitu memiliki tampilan yang menunjukkan rata-rata (pada tingkat plot yang lebih lambat daripada data). Anda akan melihat bahwa setiap Saluran memiliki offset yang berbeda, jadi ketika Anda melihat plotnya, Anda harus melihat 16 garis, terlihat lebih dan lebih mulus saat Anda meningkatkan Ukuran Sampel. Anda perlu menentukan parameter sebelum menjalankan kode, karena prinsip-prinsip Aliran Data (yang berbasis pada LabVIEW) akan mengabaikan perubahan yang Anda buat pada Kontrol saat program berjalan. Pertama izinkan saya mengucapkan terima kasih atas tanggapan rinci dan cuplikan kode. Saya apprecaite niat Anda untuk membantu. Tanggapan saya sebelumnya mungkin terdengar agak kotor tapi saya akan menjadi orang terakhir yang telapak tangan dari sesuatu yang setengah dipanggang atau tidak stabil. Mari saya jelaskan: Bidang hidrolika aktivitas saya dan saya memiliki perusahaan saya sendiri yang didirikan pada tahun 1995 dan sebagai proposisi tambahan nilai saya menyediakan sistem terintegrasi dengan instrumentasi dan perangkat lunak. Kami beroperasi di dua bidang utama - Turbin Turbin dan Sistem Uji. Dan sampai saat ini kami telah menyediakan banyak sistem lengkap yang digunakan secara luas di industri otomotif di India dan juga di Eropa. Tapi perusahaan saya bukanlah organisasi yang besar dan berukuran sedang dan di sini ada tangkapan - hampir tidak mungkin untuk menemukan programmer LabVIEW yang ahli. India memiliki kumpulan insinyur perangkat lunak yang besar namun semuanya ada dalam komputasi desktop dan para insinyur di Fisika Komputasi hampir tidak ada atau tidak dapat diabaikan. Jadi ketika klien datang kepada saya dengan persyaratan baru (percayalah - semuanya berbeda), saya mengambil tantangan secara pribadi tapi untuk memberikan saya sepenuhnya bergantung pada dukungan dari komunitas online. Saat ini saya telah berhasil mengembangkan kode LV untuk mendapatkan data melalui CanOpen, Modbus RTU, Profinet dan EtherCAT. Dengan variasi seperti itu dan waktu yang singkat untuk permintaan pasar saya hanya tidak memiliki sumber daya untuk menyebarkan tim besar untuk disampaikan. Jadi, bermuara pada pengembangan kode dasar atau jelas yang melakukan apa yang seharusnya dan jika kliennya baik-baik saja - biarkan saja di sana. Its perbedaan antara kode Fungsional dan Smart kode dan saya mengisyaratkan yang sebelumnya. Dan tidak mengembangkan kode jelek Datang ke kode contoh Anda - model konsumen produsen ini adalah produk reguler yang saya gunakan untuk semua proyek saya di mana saya memiliki Utama sebagai produsen dan Sub VI sebagai konsumen. Dengan arus data via Antrian. Akan mempelajarinya lebih detail. Raghunathan LV2012 untuk Mengotomatiskan Uji Uji Hidrolik.

No comments:

Post a Comment