Aplikasi Komunikasi Serial pada PC Menggunakan Visual C# 2010 / Express

Komunikasi serial pada PC masih sering digunakan untuk beberapa aplikasi yang membutuhkan koneksi dengan mikrokontroler. Mikrokontroler yang mempunyai USART dapat terkoneksi dengan port serial pada PC dengan konektor DB9 dengan menggunakan RS232 standard . Jika menggunakan mikrokontroler avr, maka bisa lihat page berikut https://wangready.wordpress.com/2011/02/02/pemrograman-usart-pada-mikrokontroler-avr-avr-studio-4/ untuk pemrograman menggunakan AVR Studio 4. Berikut perancangan software untuk komunikasi serial dengan mode UART.

Pertama buka aplikasi Visual C# 2010. Kemudian, pilih new project. Lalu pilih lagi Windows Forms Aplication dan ketikan nama project pada bagian bawah form lalu OK. Lalu setelah itu buatlah Form seperti di bawah ini dengan terlebih daulu double click pada Form1.cs pada panel Solution Explorer sebelah kanan agar muncul template dari form tersebut.

Setelah selesai membuat form seperti di atas, perhatikan nilai property pada setiap komponen.

Control

Property

Value

Form1

Text

“Komunikasi serial”

Form1

AcceptButton

btnSend

lblMessage

BorderStyle

FixedSingle

txtDataReceived

ScrollBars

Vertical

txtDataReceived

MultiLine

True

txtDataToSend

MultiLine

True

Setelah itu klik Toolbox yang biasanya ada di sebelah kiri. Lalu pada sub Components klik SerialPort dan klik kembali pada form yang tampil untuk menambahkan komponen SerialPort pada form yang sedang kita buat. Setelah itu ganti nama serialPort1 dengan serialPort sebagai nama yang akan kita gunakan pada panel Properties.

Setelah selesai mengatur tampilan dari Form1, silakan fahami source code di bawah ini.

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;

namespace serial
{
public partial class Form1 : Form
{
public Form1()
{
InitializeComponent();
}

private void Form1_Load(object sender, EventArgs e)
{
//—menset event handler untuk DataReceived event—
serialPort.DataReceived += new System.IO.Ports.SerialDataReceivedEventHandler(DataReceived);
//—menampilkan nama serialport yang tersedia pada
// komputer—
string[] portNames = System.IO.Ports.SerialPort.GetPortNames();
for (int i = 0; i <= portNames.Length - 1; i++)
{
cbbCOMPorts.Items.Add(portNames[i]);
}
btnDisconnect.Enabled = false;
}

private void btnConnect_Click(object sender, EventArgs e)
{
//—menutup akses serialport apabila akses serialport terbuka—
if (serialPort.IsOpen)
{
serialPort.Close();
}
try
{
//—mengatur beberapa parameter untuk koneksi serial
// port—
serialPort.PortName = cbbCOMPorts.Text;
serialPort.BaudRate = 9600;
serialPort.Parity = System.IO.Ports.Parity.None;
serialPort.DataBits = 8;
serialPort.StopBits = System.IO.Ports.StopBits.One;
//—buka serial port—
serialPort.Open();
//—menampilkan status dari serial port dan
// enable/disable -kan tombol—
lblMessage.Text = cbbCOMPorts.Text + " connected.";
btnConnect.Enabled = false;
btnDisconnect.Enabled = true;
}
catch (Exception ex)
{
MessageBox.Show(ex.ToString());
}
}

private void btnDisconnect_Click(object sender, EventArgs e)
{
try
{
//—tutup serial port—
serialPort.Close();
//—menampilkan status dari serial port dan
// enable/disable -kan tombol—
lblMessage.Text = serialPort.PortName +" disconnected.";
btnConnect.Enabled = true;
btnDisconnect.Enabled = false;
}
catch (Exception ex)
{
MessageBox.Show(ex.ToString());
}
}

private void btnSend_Click(object sender, EventArgs e)
{
try
{
//—menulis tipe data string pada serial port—
serialPort.Write(txtDataToSend.Text + Environment.NewLine);
//—menambahkan string yang telah dikirim pada TextBox control—
txtDataReceived.AppendText(">" + txtDataToSend.Text +  Environment.NewLine);
txtDataReceived.ScrollToCaret();
//—bersihkanTextBox control—
txtDataToSend.Text = string.Empty;
}
catch (Exception ex)
{
MessageBox.Show(ex.ToString());
}
}

//—Event handler untuk DataReceived event—
private void DataReceived(object sender, System.IO.Ports.SerialDataReceivedEventArgs e)
{
//—memanggil delegasi untuk mengambil data yang diterima—
txtDataReceived.BeginInvoke(new myDelegate(updateTextBox));
}

//—Delegate and subroutine untuk ditampilkan pada TextBox control—
public delegate void myDelegate();
public void updateTextBox()
{
//—menambahkan data pada TextBox control—
txtDataReceived.AppendText(serialPort.ReadExisting());
txtDataReceived.ScrollToCaret();
}
}
}

Setelah program jadi dan tidak terdapat pesan pada Error List yang terdapat pada bagian bawah panel kerja, maka program bisa di debug. Klik tombol Start Debugging atau tekan F5.

Setelah berhasil di debug, maka program bisa langsung di-publish untuk menghasilkan setup.exe. Klik kanan pada nama project yang ada pada panel Solution Explorer dan klik properties. Lalu pilih menu Publish dan setting juga Publish Location sesuai keinginan. Lalu klik Publish Wizard… untuk melakukan settingan terlebih dahulu atau Publish Now untuk publish langsung.

Berikut link demo aplikasi komunikasi serial di atas :  files.indowebster.com/download/files/ser_file_app

Berikut link download project :  files.indowebster.com/download/files/ser_code

Daftar Pustaka:

Lee, Wei-Meng[2007].”Practical .NET 2.0 Networking Projects”. Apress, New York, USA.

Control

Property

Value

Form1

Text

“Komunikasi serial”

Form1

AcceptButton

btnSend

lblMessage

BorderStyle

FixedSingle

txtDataReceived

ScrollBars

Vertical

txtDataReceived

MultiLine

True

txtDataToSend

MultiLine

True

29 Responses to Aplikasi Komunikasi Serial pada PC Menggunakan Visual C# 2010 / Express

  1. Pingback: Komunikasi Serial Antara PC-Mikrokontroler dengan RS232 Standard « WanGReadY

  2. Seffin says:

    Mas bisa minta link tentang dasar-dasar pemrograman C# ga mas? saya tertarik dengan pemrograman C# karena mudah dalam membuat GUI-nya..
    Terimakasih banyak sebelumnya mas..🙂

  3. erwin says:

    mas saya mau tanya gimana ya caranya buat komunikasi serial dengan menggunakan windows console application??

    • wangready says:

      Mungkin bisa dicoba kode berikut. Kode serial console C#, yang bersumber dari balau82.wordpress.com/2009/04/18/simplest-serial-port-terminal-in-csharp/
      __________________________________________________
      using System;
      using System.Collections.Generic;
      using System.Text;
      using System.IO.Ports;

      namespace SerialTest
      {
      class Program
      {
      static void Main(string[] args)
      {
      string[] names = SerialPort.GetPortNames();
      Console.WriteLine("Serial ports:");
      foreach (string name in names)
      Console.WriteLine(name);
      Console.Write("Choose one:");
      SerialPort p = new SerialPort(Console.ReadLine());
      p.DataReceived += new SerialDataReceivedEventHandler(p_DataReceived);
      p.Open();
      string line;
      do
      {
      line = Console.ReadLine();
      p.Write(line);
      } while (line != "quit");
      p.Close();
      }

      static void p_DataReceived(object sender, SerialDataReceivedEventArgs e)
      {
      Console.WriteLine(
      (sender as SerialPort).ReadExisting());
      }
      }
      }

  4. Eko Pujiyanto says:

    saya coba di visual studio kok ga bisa baca port com yang ada ya pak?
    combo box nya kosong..
    kalo sya pake software yang sudah jadi dari bapak bisa dipakai..
    mohon pencerahan pak..
    terima kasih

    • wangready says:

      biasanya klo d Device Manager PC portCOM nya terdeteksi, di programnya jg bisa, atau pastikan kalo toolbox serialnya di drag ke Form design nya, lalu ganti namanya sesuai nama serialport-nya, misal klo yg di program saya “serialPort”….
      klo sudah benar indikasinya jika kita ketikan nama komponen serialPort diikuti tanda titik, maka akan muncul subbagian dari komponennya…

  5. wibi says:

    Pak link downloadnya broken tuh.. tolong diupload lagi dong..
    terima kasih

  6. risyanto says:

    saya coba download kok g bs y pak? disitu diterangkan kalo claim leakID , tolong di upload lagi pak, trima kasih

  7. risyanto says:

    mhn aplikasinya dikirimkan ke email sy boz, didonlot ndk prnh brhsil….trim ksh buanyaakkk.

  8. bos,aplikasi sama sourcenya kirim ke email saya dong.linknya mati tuh soalnya
    makasih

  9. risyanto says:

    terima kasih boz…. , filenya sangat bermanfaat , keep good posting….

  10. agam says:

    pak kalau baca data dari rs232 itu gimana caranya ?terimakasih

  11. suryani says:

    kalau misalnya kita mau makai visual c++ 2010, sama gak dg visual C# 2010 pak??

    • wangready says:

      saya gk tau peris bisa apa tidaknya, tp sepertinya tidak bisa…
      setau saya kalau C++ masih bisa dimasukin C,tp tidak sebaliknya, begitu juga C# bisa pake C, tp tidak sebaliknya….
      Tp kalau mau buat aplikasi di atas pake Visual C++ 2010, mungkin algoritmanya masih sama, jadi bisa di edit2 dikit…

  12. rahman says:

    ass..mas,saat ini saya ini sdng mengerjakan penelitian .mana tau mas bisa membantu..jadi saat ini penelitian saya terhamat untuk menghubungkan pc ke mikro (arduino) dng rs232.

    dsini saya memerintahkan untuk mengaktivkan bazzer dan putaran roda akan mati secara automatis setelah adanya terdeteksi kantuk dari kamera.. (dari pc k arduino)
    saya menggunkan open cv c++.mo nanyai kodingnya mas..

    mohon pencerahanya mas..udah nyari kemana2 g ketemu,mana tau mas bisa bantu..makasi telah dibaca,wassalam…
    doele072@gmail.com

  13. gamaulia says:

    klo pake codevisionAVR sebagai pemrograman AVR, programnya tetap bisa jalan? klo codevisionAVR kan ngirim datanya pake putchar

  14. riki says:

    mas mau tanya..kalau program c# ini datanya dikirimkan ke mikrokontroller atmega16 yang ditampilkan ke lcd 16×2 gimana caranya yah??
    mohon pencerahannya
    terimakasih..

  15. riki says:

    coding programnya di mikro gimana yah mas??soalnya saya kebingungan banget ini..

    • wangready says:

      klo gk salah
      int i;
      while(1)
      {
      lcd_clear();//brsihkan lcd
      //set cursor k 0,0
      lcd_gotoxy(0,0);
      //baca tulis data
      //16×2 kali = 32
      for(i=0;i<32;i++)
      {
      //kirim data ke lcd
      //16×2 kali kirim k lcd
      lcd_putchar(getchar());
      }
      }
      pake serial mode rx interrupt aja gan…

  16. rohman says:

    mas nanyak. .ada 3 buah sensor yang akan ditampilkan datanya. .dan ada 3 button yang akan dipakai untuk menampilkan data sensor tersebut. .jika button pertama kita klik maka yang muncul hanya data pada sensor pertama. begitu juga apabila diklik button 2 maka yang muncul hanya data sensor kedua . .sama halnya dengan sensor yang ketiga. .
    pengaturan sourcecodenya gmna mas ?

Leave a Reply

Fill in your details below or click an icon to log in:

WordPress.com Logo

You are commenting using your WordPress.com account. Log Out / Change )

Twitter picture

You are commenting using your Twitter account. Log Out / Change )

Facebook photo

You are commenting using your Facebook account. Log Out / Change )

Google+ photo

You are commenting using your Google+ account. Log Out / Change )

Connecting to %s