![]() |
https://cdn.sparkfun.com/assets/2/5/c/4/5/50e1ce8bce395fb62b000000.png |
Bagi rekan-rekan yang sudah pernah mengembangkan aplikasi dengan menggunakan komunikasi serial UART, hampir bisa dipastikan sering berurusan dengan proses penerimaan data dari Serial Port.
Penerimaan data dari Serial Port sering kali menjadi kendala apabila data yang kita terima bisa sewaktu-waktu alias suka-suka si pengirim kapan mau mengirimkan data.
Kalau sudah begini, pasti si penerima yang dibikin pusing. Kalau tugas penerima hanya menerima data dari si pengirim ya bukan menjadi masalah.
Kalau si penerima harus mengerjakan tugas lain, lalu bagaimana???!!!!!
Si penerima harus terus menunggu data tanpa kepastian????
Itu mah namanya PHP..wkwkwk.....pemberi harapan palsu!!!!!.....
Dari gambar di atas, ketika A memberikan data (Data A ke B) dalam waktu yang tidak bisa diperkirakan, tentu saja program di B akan terus menunggu data (Data A ke B) secara terus menerus..
Lalu bagaimana solusinya?
Ada beberapa solusi yang diberikan, bisa menggunakan receive time-out atau received event.
Receive Time-Out
Proses pembacaan data dalam kurung waktu tertentu, misal, dalam 5 detik jika di serial port tidak ada data yang diterima, maka program akan mengerjakan tugas selanjutnya.Received Event
Proses pembacaan data jika diketahui ada data yang diterima. Dalam mikrokontroler kita bisa menggunakan serial receive interrupt. Jika di pemrograman PC (C++, C#, Basic, dll) kita bisa menggunakan thread terpisah dari thread utama untuk mendeteksinya adanya data di serial port.Pembahasan Received Event di Visual C#
Pada artikel kali ini, pembahasan teknik penerimaan data serial di Visual C# hanya dibatasi untuk Received Event dengan tampilan data di Console.![]() |
VS2008 |
Download kode program / project
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 | using System; using System.Collections.Generic; using System.ComponentModel; using System.Data; using System.Drawing; using System.Linq; using System.Text; using System.Windows.Forms; using System.IO; using System.IO.Ports; namespace ContohSerialEvent { public partial class Form1 : Form { SerialPort serialPort = new SerialPort(); public Form1() { InitializeComponent(); } private void Form1_Load(object sender, EventArgs e) { } private void btnComPort_Click(object sender, EventArgs e) { try { if (btnComPort.Text == "Buka") { serialPort.PortName = txtComPort.Text; serialPort.Open(); btnComPort.Text = "Tutup"; while (chkEvent.Checked == false) { Console.Write(serialPort.ReadExisting().ToString()); } } else if (btnComPort.Text == "Tutup") { serialPort.Close(); btnComPort.Text = "Buka"; } } catch (Exception ex) { MessageBox.Show(ex.Message); } } private static void terimaData(object sender,SerialDataReceivedEventArgs e) { SerialPort sp = (SerialPort)sender; string terimaData = sp.ReadExisting(); Console.Write(terimaData); } private void chkEvent_CheckedChanged(object sender, EventArgs e) { if (chkEvent.Checked == true) { serialPort.DataReceived += new SerialDataReceivedEventHandler(terimaData); } else { serialPort.DataReceived -= new SerialDataReceivedEventHandler(terimaData); } } } } |
Sebagai percobaan, saya menggunakan software com0com yang merupakan virtual serial port yang dapat berjalan di OS Windows.
Download software com0com x86, com0com x64
Sedangkan untuk bantuan pengiriman data serial, saya menggunakan software terminal serial HTerm.
- Jalankan "ContohSerialEvent.exe" atau Run "Project ContohSerialEvent"
- Ketikan nama ComPort. Saya menggunakan ComPort10 untuk menerima data dari HTerm yang menggunakan ComPort11.
- Centang "Received Event"
- Tekan tombol "Buka"
- Lalu pada software HTerm, pilih COM yang disediakan pada com0com. Saya menggunakan COM11. COM10 dan COM11 secara otomatis terkoneksi antara Tx dan Rx nya.
- Ketikan huruf atau kalimat dibagian Input Control pada software HTerm. Lalu perhatikan jendela output pada Visual Studio. Pada artikel ini saya menggunakan Visual Studio 2008 sebagai informasi tampilan.
- Lalu coba tekan tombol "Tutup" dan tekan kembali tombol "Buka".
- Apabila berhasil membuka dan menutup koneksi serial, maka fungsi Received Event di C# berfungsi dengan baik. Karena jika tidak, maka data serial tidak akan muncul di bagian jendela "Output" dan tombol "Tutup" atau "Buka" tidak bisa ditekan.
- Untuk menonaktifkan Received Event :
- tekan tombol "Tutup"
- lalu hilangkan centang "Received Event"
- tekan kembali tombol "Buka".
- Pada kondisi ini, maka program di C# akan selalu menunggu data dari serial dan tidak bisa mengerjakan tugas yang lain, seperti penekanan tombol "Tutup". Bahkan tulisan tombol "Buka tidak mau menjadi "Tutup" ketika tombol tersebut ditekan.
Informasi mengenai Received Event di Visual C# dapat dilihat melalui link ini
Bagaimana? Mudah bukan?
Selamat berkreasi dengan Visual C#....!!!!!
obat diabetes asli
ReplyDeleteobat diabetes denature
obat ampuh diabetes
obat ampuh diabetes
obat diabetes jos
cara menghubungkan atau config HTerm nya gimana ?
ReplyDelete