LabVIEW Team Indonesia

cancel
Showing results for 
Search instead for 
Did you mean: 

keanehan saat running labview

saya membuat sebuah percobaan menggunakan tangki dengan proses seperti didalam video...saya menggunakan arduino sebagai mikrokontrolernya. yang saya tanyakan, terlihat pada detik ke-29, tiba2 jumlah array (terlihat di probe wacth windows)yang saya gunakan berubah sendiri sehingga menyebabkan nilai output ikut berubah. tapi pada detik ke-34 kembali ke keadaan awal. dan hal itu terulang lg saat menit ke-1. begitu seterusnya.

kenapa bisa terjadi demikian?

apakah program arduino/labview saya salah?tapi kalau programnya ada yg salah,pasti outputnya jg salah, sedangkan ini outputnya sdh sesuai dengan yg saya inginkan..

arduino saya jg tidak kenapa2..mohon bantuannya,trims

0 Kudos
Message 1 of 19
(14,333 Views)

Halo,

sepertinya harus ditroubleshoot secara rinci mengenai penyebabnya.

Dari segi hardware, coba diukur tegangan secara langsung apakah ada anomali dari koneksi port TX/RX pada Arduino pin nya.

Dari segi software, saya tidak bisa komen banyak mengenai programming arduinonya karena kebetulan saya sendiri tidak familiar.

Dari segi LabVIEW, mungkin anda bisa coba menggunakan highlight execution untuk mengetahui dibagian mana datanya mulai memberikan hasil yang tiba2 kacau seperti itu.

Saya tidak mempunyai arduino IC sehingga tidak bisa mencoba program anda, tapi mungkin ada baiknya anda post VI anda sehingga saya dan rekan-rekan yang lain mungkin ada yang bisa memberikan komentar.

Regards,

Bian

0 Kudos
Message 2 of 19
(6,184 Views)

trims pak bian

mencoba menanggapi,

dari sisi hardware tidak ada masalah atau anomali seperti itu.

dari sisi labview terimakasih sarannya pak, saya coba analisa dulu.

dari sisi software, berikut VI saya

Untitled.jpg

jadi dari arduino mengirimkan data level tangki naik/turun dan status-status indikator. sementara dr labview jika suatu keadaan terpenuhi maka mengirim status indikator ke arduino dan status indikator dan itu dikirim lagi ke labview. y sebenarnya ini hal mudah yg saya jadikan rumit (jika saja keadaan di labview terpenuhi maka nyalakan saja indikatornya kan beres). tapi karena tuntutan tugas hrs ada input dan output dari labview & arduino ya sy jadikan seperti ini.

program ini menggunakan permainan array, baik sisi kirim dan terimanya dijadikan array. sebelum program ini saya mencoba menggunakan string saja, sehingga untuk memisahnya menggunakan blok "search/split string", keadaan "aneh"nya tidak terjadi. tp agak repot+rumit dan juga saya mau mengolah data analog yg hrs menggabungkan 2 byte array sehingga daripada campu2 string+array saya beralih menggunakan array saja. dan ketika  saat saya mencoba2 program sederhana menggunakan array, juga tidak kenapa2. tp saat programnya komplek bgini malah muncul kejadian ini.

VI saya sudah di attach. mohon bantuannya lagi pak

0 Kudos
Message 3 of 19
(6,186 Views)

hallo okta,

saya nggak gitu ngerti soal Ardunio (belum pernah pake), tapi lumayan sedikit ngerti soal Labview. Sedikit banyak dari sisi Labview keanehannya sepertinya ada di bagian kiri bawah while-loop (dimana ada 3 "AND" gate). Disitu input buat semua AND gate berasal dari satu source yang sama (Array dari Ardunio, index ke-7).  Artinya berapapun "value" disitu, output AND gate akan selalu False, karena gak mungkin value yang sama akan TRUE untuk kondisi "<=" dan ">=". Mungkin disitu maksudnya bukan pake AND, tapi pake OR gate?

Tapi sepertinya jawaban ini bukan jawaban yang bisa bantu masalah utama nya.

Salam,

Yance

*oiya, saya salah liat. Maaf lupain aja saran ini.

0 Kudos
Message 4 of 19
(6,186 Views)

Halo Okta,

Saya bantu dari sisi LabVIEW saja ya.

Masalah utamanya ada di VISA Read, di mana fungsi ini membaca berdasarkan jumlah Bytes at Port di Property Node, yang memberikan jumlah bytes yang tersedia di serial port. Artinya, VISA Read selalu membaca berapapun jumlah Bytes yang ada di serial port, apakah itu 8 (sesuai ekspektasi) atau angka lainnya. Nah, jika kebetulan ada gangguan komunikasi sehingga jumlah byte yang tersedia adalah 6 (seperti saat di detik 0:29 di video), maka VISA Read hanya membaca 6 byte saja, dan array-nya pun jadi hanya berukuran 6. Artinya, 2 element terakhir tidak terbaca dan mereka jadi masuk ke pembacaan berikutnya, sehingga urutannya jadi salah dan keanehan terlihat.

Solusinya, set VISA Read untuk membaca jumlah byte yang konstan sesuai ekspektasi. Jika masih ada masalah, berarti ada gangguan di komunikasi Arduino ke LabVIEW. Coba baca datanya tanpa diproses dahulu untuk memastikan output-nya stabil.

Ada 2 saran lain, yaitu mengenai error handling dan coercion dot. Untuk mudahnya, saya jelaskan ini di VI terlampir. Bentuknya saya rapikan dengan menu Edit >> Clean-Up Diagram agar mudah dibaca. Silahkan dipelajari.

Semoga ini membantu.


Salam,

Yodha
AE, NI Singapore

Message 5 of 19
(6,186 Views)

Sebelumnya maaf pak file attachnya tidak bisa dibuka karena versi saya lebih lama dari miliknya Pak Yodha. Saya menggunakan LV 2011 SP1.

Trims Pak Yodha atas sarannya. Sebenarnya karena cukup lama belum ada yang menjawab posting saya, saya coba mencari tau sendiri. Dan benar sekali kata Pak Yodha, dengan mengatur VISA Read dengan jumlah byte yg sesuai, keanehan itu tidak terjadi lagi. Sebenarnya sih niat saya menggunakan fungsi "bytes as port" itu biar saya tidak perlu mengedit program saya jika saya mau menambah/mengurangi array yg saya kirim dari arduino. Ternyata justru disana masalahnya. Untuk masalah saya ini sekarang sudah teratasi dan sudah tidak "aneh" lagi.

 

Nah, saya mau tanya lagi Pak Yodha tentang perubahan urutan array pada Labview.

Saya kan mengirimkan 8 byte array dari arduino ke Labview. Program LV nya sama seperti diatas tapi Bytes as Port-nya saya hapus dan Byte Count pada VISA Read saya isi 8. Saya melihat urutan array menggunakan fungsi Probe Watch Window di block diagram saat program dijalankan. Arraynya saya namakan saja misal (A,B,C,D,E,F,G,H). Ketika saya kirimkan, awalnya urutan arraynya (A,B,C,D,E,F,G,H) tapi selang beberapa detik letak arraynya berubah jadi (G,H,A,B,C,D,E,F) lalu setelah beberapa lama kembali lagi ke (A,B,C,D,E,F,G,H). Hal serupa terjadi jika saya menggunakan 7 array. Array terakhir pasti berpindah ke depan padahal dari sisi arduino tidak saya kasih input. Tapi hal ini tidak terjadi ketika saya menggunakan 6 array. Kira-kira apa yg menyebabkan hal ini bisa terjadi ya pak?

Trims,

Okta

0 Kudos
Message 6 of 19
(6,186 Views)

Halo Okta,

Mengenai urutan array, ada beberapa kemungkinan penyebab yang bisa saya lihat:

1. Ada gangguan komunikasi serial dengan Arduino sehingga output-nya tidak stabil. Ini coba dikonfirmasi dahulu.

2. Ada kesalahan algoritma di LabVIEW.

Untuk nomor (2), kesalahan pengertian bisa terjadi di fungsi String to Byte. Perlu diingat bahwa fungsi ini mengkonversi setiap string menjadi angka yang merepresentasikan string tersebut, berdasarkan ASCII. Contoh:

String terbaca: 72

Kode ASCII untuk angka 7 = 55 (desimal)

Kode ASCII untuk angka 2 = 50 (desimal)

Output dari String to Byte = array yang terdiri dari angka 55 dan 50

Oleh karena itu, output yang dibaca mungkin tidak sesuai yang dinginkan. Gunakan fungsi Decimal String to Numeric untuk mengubah angka 72 (string) menjadi 72 (numeric).

Satu hal lagi, anda harus selalu memastikan bahwa LabVIEW membaca jumlah byte yang benar dari output Arduino. Misal:

Output Arduino = 768 (di mana sebenarnya ini terdiri dari dua data terpisah, 7 dan 68)

LabVIEW harus memisahkan string tersebut menjadi 7 dan 68 dengan fungsi String Subset, baru kemudian dikonversi ke angka. Karena kalau labVIEW baca semuanya, jadinya keluar angka 768, yang tidak benar untuk aplikasi anda.

Terlampir contoh VI untuk String to Numeric dan juga VI edit sebelumnya. Sudah versi 2011.

Semoga membantu.

Salam

Yodha

AE, NI Singapore

Download All
0 Kudos
Message 7 of 19
(6,186 Views)

Trims atas koreksi dan sarannya Pak Yodha.

     Untuk saran dari Pak Yodha ini kan katanya kemungkinan ada kesalahan di String to Byte. Alasan saya menggunakan String to Byte karena saya merasa lebih mudah memisah array dan memprosesnya secara langsung. Jika memroses string menggunakan String Subset saya sudah pernah coba pak, programnya jadi lebih banyak dan ruwet. Ini dikarenakan harus memisah satu persatu stringnya apalagi harus dibagi jadi 8 substring. Tidak seperti saat saya menggunakan array tinggal pakai fungsi Index Array dan cantumkan Number Index nya saja.

      Untuk fungsi Decimal String to Numeric itu saya memang merepresentasikan 72 sebagai "H" bukan sebagai 72 desimal pak karena dari arduino mengirim "H". Tapi terimakasih banyak atas pencerahannya.

Nah jadi ada pertanyaan baru nih pak dari penjelasan dan koreksinya :

1. Untuk koreksi "algorithm error" yg Pak Yodha sebut itu sebenarnya kalo di running hasilnya benar kok ada nilai True-nya jika keadaannya terpenuhi. Logika yg saya inginkan adalah "Jika nilai tangki antara 7 - 46 maka kirimkan 'B' ke arduino". Dan hasilnya benar kok pak, seperti dalam video tapi tanpa keanehan.

2. Kenapa pada fungsi String to Byte itu mengubah string menjadi array dengan jenis data Unisgned 8byte (U8). Kenapa kok jadi U8 pak? Apakah untuk array jenis datanya memang U8?

0 Kudos
Message 8 of 19
(6,186 Views)

Halo Okta,

Maaf baru bisa balas sekarang, beberapa hari ini ada tugas kerja di luar.

Mengenai String to Byte, jika memang output-nya adalah "H" atau satu karakter lainnya, maka seharusnya tidak masalah. Memang lebih mudah dimanipulasi jika diubah dulu ke byte array. Tapi bisa juga mengubah rentetan string menjadi array string dengan menggunakan String Subset dalam For Loop kemudian dimasukkan ke array.

Mengenai algorithm error yang saya tunjukkan, ternyata memang saya salah lihat comparisonnya, dan benar yang anda bilang.

Mengenai output U8 dari String to Byte, fungsi ini memang didesain seperti itu. Alasannya, karena semua karakter dalam string direpresentasikan dengan menggunakan satu Byte saja, tanpa perlu bit untuk tanda minus (unsigned). Dari tabel ASCII, bisa dilihat bahwa range dari string hanya 0-255, jadi U8 sudah cukup. Dengan cara ini, fungsi tersebut jadi lebih efisien dalam penggunaan memory. Jika perlu diubah ke representasi lain, tinggal konversi saja pakai Conversion palette di dalam Numeric palette.

Untuk array sendiri jenis datanya bisa numeric, Boolean, path, string, waveform, atau cluster. Silahkan cek LabVIEW Help file untuk info lebih jauh.

Kembali ke keanehan yang ditemui, saya sarankan untuk membuat error checking code yang membaca keluaran dari VISA Serial. Misalnya dengan menyimpan state dari beberapa wire ke indicator terpisah jika terjadi keanehan.

Error Handling.jpg

Selain itu, coba juga eksplorasi opsi-opsi debugging di LabVIEW selain probes. Cari artikel "Debugging Techniques" di LabVIEW Help file. Mungkin error handling di atas bisa digabung dengan menggunakan Breakpoint agar VI pause saat ada keanehan.

Silahkan dicoba.

Salam,

Yodha

AE, NI Singapore

0 Kudos
Message 9 of 19
(6,186 Views)

Wah terimakasih sekali Pak Yodha atas saran dan masukkannya. Bagus sekali forum ini ada karena saya cari buku tentang labview cuma ada 1, jadi cukup terbantu dengan adanya grup ini sebagai media komunikasi.

Trims

Message 10 of 19
(6,186 Views)