LabVIEW Team Indonesia

cancel
Showing results for 
Search instead for 
Did you mean: 

High speed data streaming?

Hallo team LabVIEW Indonesia.

Saya perlu bantuan untuk streaming data dengan frekuensi 40MHz.

Hardwarenya:

Chassis: PXIe-1082

Controller: PXIe-8370

HSDIO: PXIe-6544

Saya coba modif contoh dari LabVIEW: Continuous Generation - Stream From Memory.vi

Pada dasarnya, sinyal yg ada di contoh LabVIEW sample numbers nya nggak lebih dari kapasitas buffer. Jadi di contoh diatas, sinyal nya pada dasarnya hanya di ulang terus menerus.

Tapi saya bingung gimana untuk sinyal yang sample numbers nya jauh lebih besar daripada buffer size nya HSDIO? Saya coba split, tapi sepertinya proses splitting data butuh waktu lebih banyak daripada HSDIO untuk mengisi buffer dan mengeluarkan sinyal. Data TDMS ada di attachment.

tdms.png

Salam,

HS

0 Kudos
Message 1 of 17
(9,641 Views)

Halo HS,

Maaf baru reply, notifikasinya di e-mail terlewat.

Example VI di atas memang hanya transfer total 40 MB (= 10485760 samples * 32-bits) dari 64 MB onboard memory di PXIe-6544 dan streaming-nya setiap 4 MB (karena dibagi jadi 10 blok), namun konsepnya bisa dipakai untuk jumlah sample yang jauh lebih besar dibanding onboard memory tersebut. Konsep ini dijelaskan dengan detil di NI Digital Waveform Generator/Analyzer Help, bagian Generating Waveforms using Streaming. Jika sudah install driver HSDIO, ini bisa dibuka dari Start -> National Instruments -> NI-HSDIO -> Documentation.

Generating Waveforms Using Streaming.jpg

Di dalam dokumen tersebut, dijelaskan cara transfer 1.6 GB waveform menggunakan 160 MB dari total 256 MB onboard memory yang tersedia. Bisa dilihat bahwa caranya sama dengan yang di Example VI di atas, karena memang itu contoh aplikasinya. Di dokumen tersebut ada beberapa tips untuk mempercepat streaming, misal membagi data jadi beberapa blok karena komputer lebih cepat transfer beberapa data block berukuran kecil dibanding satu data block yang besar. Cara-cara ini bisa dicoba untuk optimisasi aplikasinya.

Sebelum memakai data TDMS, mungkin bisa dicoba mengatur jumlah sampel di Example VI agar lebih dari onboard memory dan lihat apakah berhasil. Setelah itu bisa pakai yang dari TDMS.

Semoga ini membantu.

Salam,

Yodha

NI Singapore

0 Kudos
Message 2 of 17
(5,295 Views)

Terima kasih mas Yodha buat jawabannya.

Referensi itu memang sudah saya baca dan dari situ saya pikir saya sudah cukup mengerti prinsip kerjanya dan coba memakainya disini.

Tapi yang jadi masalah adalah (tebakan saya) kecepatan baca TDMS pada program saya. Sepertinya, proses baca tdms itu butuh waktu terlalu lama, jadi HSDIO buffer sudah terlanjur kosong dan jadi error.

Karena seperti saya bilang, proses itu, kalo hanya mengulang untuk "generate" sample yg persis sama untuk di transfer ke buffer, dan lalu dikeluarkan, tidak ada masalah.

Masalah datang kalo datanya beda. Pada kenyataannya, untuk data streaming, tentunya saya akan punya data yang berbeda2 di tiap pengulangan loop (iteration). Nah, yang menjadi masalah buat saya sepertinya, bagaimana bisa bikin proses baca ini jadi lebih cepat, sehingga buffer nggak terlanjur kosong.

Mungkinkah saya harus menggunakan HDD yang lebih cepat? saat ini saya pakai normal HDD, dan saya berpikir mau pakai SSD.

Saya sudah pesan SSD, dan mudah2an pesanan SSD saya sampai minggu ini. Tapi kira2 apakah SSD dengan chace 256MB akan menolong??

Atau ada trik yg saya belum gunakan? Saya sudah coba liat contoh streaming HSDIO di website, tapi nggak banyak menolong. Either sistemnya beda total (komponennya saya nggak punya) atau programnya nggak bisa di "run".

Salam,

HS

0 Kudos
Message 3 of 17
(5,295 Views)

Sepertinya memang masalahnya di pembacaan file TDMS yang kurang cepat. Benar bahwa kemungkinannya limitasi ini muncul dari kecepatan streaming-nya hard drive di mana file TDMS di simpan. Format TDMS sendiri sebenarnya sudah optimized untuk streaming dan sampai saat ini sudah dites bisa mencapai 1.2 GB/s (untuk driver DAQmx).

Untuk mengatasi masalah ini, Bapak bisa load dulu file TDMS-nya di luar loop lalu dimasukkan ke Array. Dengan cara ini dia masuk RAM sehingga prosesnya jauh lebih cepat. Jadi yang masuk di dalam loop di program Bapak hanyalah Array ini, bukan TDMS Read yang baca dari hard drive. Array bisa simpan maksimal sampai (2^31)-1 elemen dalam satu dimensi, jika RAM-nya tersedia. Jadi ini seharusnya cukup untuk menyimpan 10^6 elemen dari file TDMS-nya Bapak. Kalau perlu array-nya bisa dibuat beberapa karena komputer lebih cepat baca kalau dalam chunks, dibanding baca sekalian banyak.

Dengan SSD pasti transfernya akan jauh lebih cepat dibanding HDD. Namun dengan cara di atas seharusnya Bapak tidak perlu sampai beli SSD. Jika ternyata masih kurang cepat juga saat sudah pakai SSD dan coba cara di atas, NI ada Data Storage module untuk PXIe (NI 8260) yang bisa mencapai read rate 700 MB/s (SSD), size 1.2 TB.

Semoga ini membantu ya Pak.

Salam,

Yodha

NI Singapore

0 Kudos
Message 4 of 17
(5,295 Views)

Wah,

sebenernya target saya dgn frekuensi 40Mhz HSDIO adalah bisa mengulang secara kontinyu singnal-generation yang total sample nya 40Mbit/s (1 sample terdiri dari 40bit dan total sample ada 1M).

Dari datasheet jelas, bahwa HSDIO ini bisa generate sinyal sampai 100MHz dengan full channel (4bytes) aktif, yang artinya 400MB/s.

Untuk case saya, karena saya cuma pake 4channels utk generation, jadi data cukup dengan 2bytes, artinya untuk streaming ini perlu speed sekitar 80MB/s. Dari HSDIO sendiri harusnya ini bukan masalah. Tapi utk baca data dari tdms, ini dia yang bermasalah.   

Saya berpikir untuk simpen di array seperti ide mas yodha. Tapi tetep ada kendala, sepertinya LabVIEW saya nggak cukup utk simpen 40Msamples di RAM, "error: not enough free memory". Padahal 40Msamples itu artinya sama dengan 160Mbytes memory, atau saya salah? Atau gimana caranya ya biar saya streaming data ke RAM (dalam bentuk array), terus dari RAM streaming ke onboard memory HSDIO. Producer/Consumer mungkin bisa, tapi saya belum ada bayangan, karena kalaupun istilahnya saya "curi start" utk streaming ke RAM, selama HSDIO nya selalu lebih cepat, cepat atau lambat pasti bakal ketinggalan. 

Saya akan coba lagi nanti dengan SSD kalo sudah datang.

Salam,

HS

0 Kudos
Message 5 of 17
(5,295 Views)

Hallo Mas Yodha,

saya sudah mencoba dengan SSD, tapi tetep nggak bisa. Dari example di website, saya menggunakan beberapa VI dari FileIOBenchmarkVIs, dan hasilnya ada perbedaan, kalo HDD biasa, read speed nya skitar 100MB/s, kalo SSD 250MB/s, kalo write speed nya HDD biasa bisa jauh lebih kecil, sementara SSD relatif sama.

Yg jadi pertanyaan sekarang, saya masi nggak bisa pake VI di post saya yang pertama dgn SSD, padahal kalo dihitung secara matematis, 40MHz x 4 bytes = 160MB/s.

Yang seharusnya nggak ada masalah dengan write/read speed dari SSD.

Salam,

HS

0 Kudos
Message 6 of 17
(5,295 Views)

sekedar komentar saja nih nimbrung. Kalau ketemu bottleneck di READ TDMS-nya ya artinya pilihan sudah tidak banyak:

1. pisahkan proses READ TDMS-nya menjadi loop independent (Producer - Consumer)

2. pisahkan proses READ TDMS-nya di luar loop (sedikit tricky dalam hal managing memory)

Mas Yodha udah sarankan dua-dua-nya, jadi tinggal kembali ke anda, apakah implementasinya sudah benar? Coba saya tarik contoh disini, komentar anda:

"Saya berpikir untuk simpen di array seperti ide mas yodha. Tapi tetep ada kendala, sepertinya LabVIEW saya nggak cukup utk simpen 40Msamples di RAM, "error: not enough free memory". Padahal 40Msamples itu artinya sama dengan 160Mbytes memory, atau saya salah? Atau gimana caranya ya biar saya streaming data ke RAM (dalam bentuk array)"

--> coba diberikan VInya yang anda buat sehingga ada error ini? Jadi bisa jelas masalahnya dimana.

Saya coba fokus ambil READ TDMS-nya saja ya, tanpa streaming HSDIO, sampai ke 10MS dari i32 data type (artinya kan 40MB) saja, saya ambil random data dan tidak ada error. Saya menggunakan Initialize Array, sehingga ukuran array sudah fix sejak awal program di running (kemungkinan memory error lebih sedikit dibandingkan menggunakan Build Array atau Indexing di For Loop). Monggo dicoba.

snippet.png

Certified LabVIEW Developer (CLD)
Certified TestStand Developer (CTD)
Using LabVIEW 8.5.1 (2008) to LabVIEW 2024
Message 7 of 17
(5,295 Views)

Hallo mas Krisna,

terimakasih banyak buat masukannya, ternyata setelah diteliti lagi, masalah saya dengan memory 40Msamples ini cuma muncul kalo array nya di tampilin di LV. Beda hasilnya kalo dia nggak perlu ditampilin, memory using LV jadinya lebih kecil.

Setelah baca post mas Krisna, ternyata kok jadi nggak ada masalah yah,,, hahaha.... ini saya coba tampilin streaming 40Msamples nya dalam bentuk simple-array.

Tapi saya mau kepastian, apa benar cara saya ini uda ok? artinya, waveform saya 100parts nggak akan ada yang di skip (index nggak akan bertambah kalo case structure saya FALSE), dan akan di repeat berulang2 (False case: index cuma di pass).

Gimana caranya para technicker di NI bisa streaming dengan waveform yang seandainya sample nya ada sampai 100Msamples, baru boleh diulang.

40MS.png

Salam,

HS

0 Kudos
Message 8 of 17
(5,295 Views)

saya belum install 2013, masih 2012, tp kelihatannya sudah ok. Apa ada error?

memang, kalau kita buat indicator, dan menyambung wire ke indikator tsb, maka labview akan mengcopy datanya, selain yang mengalir di wire, ada juga copiannya di indicator. Jadi sesuai ekspektasi.

oh saya lupa mention, contoh yang saya buat di atas itu, FOR LOOP itu untuk READ-TDMS. Keluaran While Loop, data, itu akan masuk ke Loop Write HSDIO

Semoga berhasil.

Certified LabVIEW Developer (CLD)
Certified TestStand Developer (CTD)
Using LabVIEW 8.5.1 (2008) to LabVIEW 2024
0 Kudos
Message 9 of 17
(5,295 Views)

Halo Mas HS,

Maaf saya baru sempat balas sekarang. Minggu lalu sedang ada tugas di luar.

Dari VI Snippet yang dikirim, saya ada saran untuk kedua bagian yang di-highlight di bawah:

2013-09-16 Customer VI Snippet (Highlighted).png

1. Index terminal dari Array Subset VI di-set selalu ke 400.000, lalu Length terminal di-set agar selalu bertambah sebanyak 400.000 pada setiap iterasi (True Case). Artinya data selalu start dari index yang sama namun panjangnya selalu bertambah. Dari deskripsi yang diinginkan, seharusnya ini dibalik, di mana index selalu bertambah 400.000 pada setiap iterasi namun jumlah data yang terkirim konstan.

Mystogan wrote:

Tapi saya mau kepastian, apa benar cara saya ini uda ok? artinya, waveform saya 100parts nggak akan ada yang di skip (index nggak akan bertambah kalo case structure saya FALSE), dan akan di repeat berulang2 (False case: index cuma di pass).

Gimana caranya para technicker di NI bisa streaming dengan waveform yang seandainya sample nya ada sampai 100Msamples, baru boleh diulang.

HS

2. Kondisi untuk cek akhir data bisa coba pakai nomor dari part yang dikirim agar lebih mudah dicek, dibanding pakai index dari array-nya. Misal, jika paket nomor 100 sudah terkirim, datanya diulang.

Saya lampirkan contoh VI (2013) yang saya buat untuk mensimulasikan streaming ke HSDIO dengan saran di atas. Data akan dikirim secara berurutan setiap kali user klik tombol Continue sampai akhir data, kemudian diulang lagi dari awal sampai user klik tombol Stop. Data hanya terkirim jika HSDIO (simulasi) punya cukup on-board memory. Berikut screenshot dari algoritma utamanya:

2013-09-16 Simulated Streaming.png

Silahkan dicoba contohnya sebagai referensi bagaimana algoritmanya bekerja.

Salam,
Yodha
NI Singapore

0 Kudos
Message 10 of 17
(5,295 Views)