Komunikasi Serial di Visual Studio C# / Serial Communication C#

Halo Sobat, hari ini saya ingin berbagi sedikit pengalaman tentang komunikasi serial di visual studio C#. Mungkin bagi para master, hal ini udah biasa atau mudah. Namun, dulu pertama kali saya di tugasi oleh dosen pembimbing TA saya untuk membuat komunikasi serial PC to PC, PC to node hardware, saya mencari-cari cara untuk membuat komunikasi serial di visual studio C#. pertama kali, sulit sekali dicari. Berbagai potongan coding saya kumpulkan, hingga dapat deh. Sehingga saya ingin membuat catatan kecil disini. Yuk mulai aja membuatnya. 
1. Berikut ini tampilan form design nya
Dalam komunikasi serial, minimal kita membutuhkan COM port jika melalui serial port dan Boud rate. Untuk membuat form design seperti diatas, kita membutuhkan komponen di toolbox antara lain.
Nama Form Window
Name Property
ComboBox untuk port
cboPort
ComboBox untuk baudrate
cboBaudrate
ComboBox untuk data bits
cboDatabits
ComboBox untuk parity
cboParity
ComboBox untuk stop bits
cboStopBits
ComboBox untuk hand shake
cboHS
Button untuk open
btnPort
Butoon untuk close
blnclose
TextBox untuk Data sent
rtbOutgoing
TextBox untuk Data Received
rtbIncoming
TextBox untuk status port
TextPrompt
SerialPort
serialPort1

Apabila sudah membuat form design nya, saat nya untuk mem-program design nya supaya bekerja sesuai dengan kehendak kita. Untuk menulis listing program, klik kiri pada formà view code. Berikut listing program nya. 

using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;
using System.IO.Ports;

namespace detectPort1
{
    public partial class Form1 : Form
    {
        //menggunakan serial port baru
        SerialPort comport = new SerialPort();
        delegate void SetTextCallback(string text);
        String data = String.Empty;
        public Form1()
        {
            comport.DataReceived += new System.IO.Ports.SerialDataReceivedEventHandler(portDataReceived);
            InitializeComponent();
            cboBaudrate.Items.Add(300);
            cboBaudrate.Items.Add(600);
            cboBaudrate.Items.Add(1200);
            cboBaudrate.Items.Add(2400);
            cboBaudrate.Items.Add(9600);
            cboBaudrate.Items.Add(14400);
            cboBaudrate.Items.Add(19200);
            cboBaudrate.Items.Add(38400);
            cboBaudrate.Items.Add(57600);
            cboBaudrate.Items.Add(115200);
            cboBaudrate.Text = cboBaudrate.Items[0].ToString();

            cboDatabits.Items.Add(8);
            cboDatabits.Items.Add(7);
            cboDatabits.Text = cboDatabits.Items[0].ToString();

            cboParity.Items.Add("None");
            cboParity.Items.Add("Even");
            cboParity.Items.Add("Odd");
            cboParity.Items.Add("Mark");
            cboParity.Items.Add("Space");
            cboParity.Text = cboParity.Items[0].ToString();

            cboStopBits.Items.Add("One");
            cboStopBits.Items.Add("OnePointFive");
            cboStopBits.Items.Add("Two");
            cboStopBits.Text = cboStopBits.Items[0].ToString();

            cboHS.Items.Add("None");
            cboHS.Items.Add("XOnXOff");
            cboHS.Items.Add("RequestToSend");
            cboHS.Items.Add("RequestToSendXOnXOff");
            cboHS.Text = cboHS.Items[0].ToString();
        }
      
        private void btnPort_Click(object sender, EventArgs e)
        {
            comport.PortName = Convert.ToString(cboPort.Text);
            comport.BaudRate = Convert.ToInt32(cboBaudrate.Text);
            comport.DataBits = Convert.ToInt16(cboDatabits.Text);
            comport.StopBits = (StopBits)Enum.Parse(typeof(StopBits), cboStopBits.Text);
            comport.Parity = (Parity)Enum.Parse(typeof(Parity), cboParity.Text);
            comport.Handshake = (Handshake)Enum.Parse(typeof(Handshake), cboHS.Text);
            comport.Open();
            if (comport.IsOpen)
            {
                TextPrompt.AppendText("Port status : Open\n");
            }
        }

        private void blnclose_Click(object sender, EventArgs e)
        {
            comport.Close();
            TextPrompt.AppendText("Port status : Close\n");
        }

        private void rtbOutgoing_KeyPress(object sender, KeyPressEventArgs e)
        {
            if (e.KeyChar == (char)13) //mendeteksi enter
            {
                comport.Write("\r\n");
                rtbOutgoing.Text = "";
            }
            else if (e.KeyChar < 32 || e.KeyChar > 126)
            {
                e.Handled = true;
            }
            else
            {
                comport.Write(e.KeyChar.ToString());
            }
        }

        private void portDataReceived(object sender, SerialDataReceivedEventArgs e)
        {
            data = comport.ReadExisting();
            if (data != String.Empty)
            {
                this.BeginInvoke(new SetTextCallback(SetText), new object[] { data });
            }
        }

        private void SetText(string text)
        {
            this.rtbIncoming.Text += text;
        }

        private void cboPort_Click(object sender, EventArgs e)
        {
            //
            string[] ArrayComPortName = null;
            int index = -1;
            cboPort.Items.Clear();
            ArrayComPortName = SerialPort.GetPortNames();
            foreach(String ports in ArrayComPortName)
            {
                index++;
                cboPort.Items.Add(ArrayComPortName[index]);
            }
            if (index >= 0) cboPort.Text=ArrayComPortName[0];
          
        }
    }
}
Setealah itu, uji programnya. Untuk menguji programnya, saya menggunakan virtual port. Jadi harus install software VSPE, atau Hyperterminal. Namun kali ini saya menggunakan VSPE.
Berikut ini cara membuat virtual port nya.
1. Tampilan awal VSPE
      2.      Pilih create new deviceà pada device type pilih pair
      3.      Setelah itu tekan next. Dan pilih com port nya. Kali ini saya menggunakan port COM 1 dan port COM 2.
      4.      Tekan finish. Maka akan terbentuk koneksi antara COM 1 dan COM 2.
Setelah terbentuk komunikasi port, maka kita membutuhkan 2 interface. Interface pertama kita gunakan program kita yang baru di-run. Interface ke dua saya menggunakan aplikasi hterm. Berikut ini uji coba program nya.
Gunakan baudrate yang sama. Program yang di run menggunakan COM1. Sedangkan hterm menggunakan COM 2.

----Semoga Bermanfaat----
Terima kasih kepada Mas Bima, Mas Jodi, dan Mas Tian


SHARE

Adam Surya Putra

Hi. I’m student of telecommunications engineering in EEPIS (Electronic Engineering Polytechnic Institute of Surabaya). I’m a private teacher for elementary, middle, and high school student. I am currently working on research in the field of node localization in wireless sensor networks. Thank you for coming

  • Image
  • Image
  • Image
  • Image
  • Image
    Blogger Comment
    Facebook Comment

5 komentar:

  1. mas saya alfi dari PENS,
    boleh minta file project detectPort1 nya.
    bisa kirimkan ke email : alfiansyah.ramadlan@yahoo.com

    terima kasih

    BalasHapus
  2. yg cboPortnya kok jd Click ya gan?

    BalasHapus
  3. Soalnya combobox cboPortnya masih belum munculin pilihan portnya gan.. pdhl sudah konek ke COMport(dicheck di device manager). Mohon bantuanya gan... thx thx

    BalasHapus
  4. Dadan, dari ITS Kalo bole bagi ilmu softilenya dong gan amanuisdadan04@gmail.com

    BalasHapus