Sapikuda, Widya's Blog

Just New Begining

Membuat Program Koneksi ke PLC menggunakan C#

Kali ini saya mencoba membuat program untuk mengetes koneksi ke PLC (Programmable Logic Controller) menggunakan C# dengan IDE Visual Studio 2010. PLC adalah suatu perangkat elektronik digital yang mampu menyimpan memori dan menjalankan fungsinya sesuai fungsi spesifik: aritmatika, logika, timing, sequence dan counting yang mengatur operasional mesin industri baik yang di jalankan sendiri-sendiri (unlock) maupun yang berjalan bersamaan dan saling terkait (interlock). Mungkin untuk lebih lengkap, Anda dapat membaca di sini.

Ok, tanpa bertele-tele. Berikut yang diperlukan untuk membuat koneksi dengan PLC (kebetulan yang saya sudah coba adalah PLC Omron CS1GH). Pertama siapkan form pada C# seperti pada gambar berikut ini:

Untuk menggunakan library serial port, drag drop Windows Component SerialPort. Untuk koneksi hardware serial port PLC ke komputer Anda, Anda dapat menggunakan RS-232 to USB yang sudah terinstall drivernya.

Sekarang mulai untuk kodingnya. Untuk form Load isikan koding berikut:

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;
}

Untuk button Connect

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 serialport
  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());
 }
}

untuk catatan pada PLC baud rate bernilai 9600 dan data bit 8 atau 7 dengan parity even

Untuk button Disconnect:

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());
 }
}

Untuk button Kirim:

private void btnKirim_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());
 }
}

dan sisanya untuk beberapa handler untuk tiap data yang dikirim dan diterima:

private void txtDataReceived_TextChanged(object sender, EventArgs e)
{
 //memanggil delegasi untuk mengambil data yang diterima
 txtDataReceived.BeginInvoke(new myDelegate(updateTextBox));
}
//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();
}

dan berikut hasil eksekusinya:

Sekian untuk isi blog kali ini. Semoga bermanfaat,