Home / Automasi / PLC / Omron Hostlink Protokol Komunikasi Data PLC Omron dengan C#

Omron Hostlink Protokol Komunikasi Data PLC Omron dengan C#

Apa Itu Omron Hostlink ?

Kali ini Saya akan menyampaikan tutorial yang sedikit berbeda. Kalau biasanya cuma tentang mikrokontroler, pada kesempatan kali ini kita akan sedikit berpindah topik ke PLC. Topik khususnya adalah komunikasi data pada PLC Omron. Setiap PLC pasti memiliki jalur komunikasi data. Serial RS232, RS485, dan ethernet merupakan jalur komunikasi data yang biasanya disertakan pada PLC. Nah, pada kesempatan kali ini kita akan bahas komunikasi data dengan jalur komunikasi serial RS232 pada PLC Omron. Komunikasi data pada PLC menggunakan protokol komunikasi tersendiri. Beberapa protokol komunikasi data yang terkenal pada PLC antara lain Hostlink untuk PLC Omron dan Modbus untuk PLC Twido dan M430 buatan Scheneider Electric. Untuk memperjelas pemahaman tentang komunikasi data pada PLC, kali ini akan dicoba mengintegrasikan PLC dengan komupter melalui aplikasi yang dibuat menggunakan bahasa pemrograman C#. Aplikasi yang dibuat nantinya bertujuan untuk mengontrol kondisi output PLC secara direct melalui RS232. Untuk dapat mencoba mempraktekkan Anda membutuhkan software Visual Studio. Saya menggunakan Visual Studio versi 2012. Selain itu tentunya Anda membutuhkan PLC Omron sebagai alat ujicoba. Saya menggunakan PLC Omron dengan tipe CPM2A pada percobaan kali ini. Jika Anda menggunakan laptop/komputer yang tidak memiliki port RS232 (serial) maka Anda memerlukan konverter USB to Serial. Saya merekomendasikan konverter USB to Serial merek ATEN, karena selama ini saya menggunakannya tidak pernah bermasalah. Jika Anda kesulitan untuk membelinya di kota Anda, Anda dapat memesan langsung ke saya.

Nah, sekarang saatnya membuat desain GUI dari aplikasi C#. Buatlah desain tampilan aplikasi Anda seperti berikut ini. Jangan lupa menyertakan komponen serial port, karena aplikasi Anda akan mengakses port serial.

Omron Hostlink
Omron Hostlink

 

Sebelum melangkah jauh keprogrammingnya, saya akan jelaskan sedikit tentang protokol Omron Hostlink. Omron Hostlink merupakan protokol komunikasi data yang digunakan pada PLC Omron. Dengan menggunakan protokol Omron Hostlink register-register yang ada pada PLC Omron dapat ditulis dan dibaca. Bahkan mode dari PLC juga dapat dirubah, menjadi mode program, mode run, atau mode monitor. Protokol komunikasi data Omron Hostlink menggunakan komunikasi serial dengan Baudrate 9600, Parity Even, Stop Bit 2, dan Databit 7. Jadi jika Anda ingin menghubungkan PLC Omron dengan perangkat lain, pastikan parameter komunikasi serial sama dengan yang saya jelaskan. Format data dari protokol Omron Hostlink sendiri dapat dilihat pada gambar di bawah ini

Omron Hostlink
Omron Hostlink

 

Setiap data diawali dengan karakter ‘@’ kemudian Node No, Header Code, Address (Beginning Word), Data (No Of Word), FCS, dan Terminator.

Node No merupakan nomor dari PLC (00 jika PLC yang digunakan hanya 1)
Header Code merupakan kode perintah untuk mengakses register
Address merupakan alamat register yang akan dibaca
Data merupakan data yang akan ditulis
FCS merpakan Frame Checksum Calculation (untuk pengecekan error)
Terminator merupakan karakter akhir dari pengiriman data yaitu ‘*’ dan diakhiri dengan enter (‘r’ dan ‘n’)

Untuk lebih jelasnya tentang protokol omron hostlink ini dapat Anda baca pada manual book PLC Omron. Dari penjelasan diatas dapat dicontohkan untuk menulis data 1 pada output PLC dengan alamat 10.00 dapat menggunakan format berikut ini

@00WR00100001+FCS+*rn => Dimana nilai FCS harus dikalkulasikan dulu melalui program

Untuk lebih jelasnya Anda dapat langsung menuliskan sourcecode berikut ini pada aplikasi yang telah anda buat

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;
using System.Diagnostics;

namespace OmronHostlink
{
public partial class Form1 : Form
{

String RxString;

public Form1()
{
InitializeComponent();
}

private void Form1_Load(object sender, EventArgs e)
{
buttonConnect.Enabled = true;
buttonDisconnect.Enabled = false;
comboBoxSerial.Items.Clear();
foreach (string item in SerialPort.GetPortNames())
{
comboBoxSerial.Items.Add(item);
}
comboBoxSerial.SelectedIndex = 0;
}

private void buttonConnect_Click(object sender, EventArgs e)
{
serialPortOmron.PortName = comboBoxSerial.Text;
try
{
serialPortOmron.BaudRate = 9600;
serialPortOmron.Parity = Parity.Even;
serialPortOmron.StopBits = StopBits.Two;
serialPortOmron.DataBits = 7;
serialPortOmron.Open();
}
catch (Exception error)
{
MessageBox.Show(error.ToString(), "Serial Port Error !");
}
if (serialPortOmron.IsOpen)
{
buttonConnect.Enabled = false;
buttonDisconnect.Enabled = true;
FCS("@00SC02");
}
}

private void buttonDisconnect_Click(object sender, EventArgs e)
{
if (serialPortOmron.IsOpen)
{
serialPortOmron.Close();
buttonConnect.Enabled = true;
buttonDisconnect.Enabled = false;
}
}

string FCS(string kalimat)
{
//buka halaman 239 FCS (Frame Check Sequence)
int atas, bawah, cari = 0;
//ubah string ke array byte
byte[] array = Encoding.ASCII.GetBytes(kalimat);

//buat XOR untuk setiap bytenya
foreach (byte element in array)
{
cari = cari ^ element;
Debug.Write("Element = ");
Debug.WriteLine(element);
Debug.Write("cari = ");
Debug.WriteLine(cari);
}

//FCS ada 2 byte yaitu byte atas dan bawah
atas = cari & 240; // 240 = B11110000
atas >>= 4; // geser kekanan 4 kali
bawah = cari & 15; //15 = B00001111

string dataToPLC = kalimat + atas + bawah + "*rn";
serialPortOmron.Write(dataToPLC);
textBox1.Text = dataToPLC;
return dataToPLC;
}

private void button10_00On_Click(object sender, EventArgs e)
{
FCS("@00WD00100001");
}

private void button10_00Off_Click(object sender, EventArgs e)
{
FCS("@00WR00100000");
}

private void button10_01On_Click(object sender, EventArgs e)
{
FCS("@00WR00100002");
}

private void button10_02On_Click(object sender, EventArgs e)
{
FCS("@00WR00100004");
}

private void button10_03On_Click(object sender, EventArgs e)
{
FCS("@00WR0010000B");
}

private void serialPortOmron_DataReceived(object sender, SerialDataReceivedEventArgs e)
{
RxString = serialPortOmron.ReadExisting();
this.Invoke(new EventHandler(DisplayText));
}

private void DisplayText(object sender, EventArgs e)
{
richTextBoxData.AppendText(RxString);
}
}
}

Coba jalankan aplikasi yang telah Anda buat, kemudian tekan salah satu button untuk mengaktifkan output pada PLC. Kemudian perhatikan kondisi output pada PLC Omron Anda.

Sekian tutorial kali ini, Selamat mencoba

Bersambung ke tutorial berikutnya, Membaca kondisi input PLC Menggunakan C#

About Eko Rudiawan

Seorang lelaki yang punya ketertarikan dengan dunia elektronika dan robot yang saat ini sedang serius belajar tentang dunia bisnis dan internet marketing. My dream to be success technopreneur

4 comments

  1. Mas, saya sudah mencoba membuat interface sprti di atas, saya sdang belajar menggunakan komunikasi serial RS232C built-in PLC Omron CP1E-N40s1DR-A, ketika tekan tombol on/off dri aplikasi di atas, lampu indikator rs23c di PLC menyala berkedip, tetapi lampu indikator sesuai address diatas tidak mau menyala dan tidak ada respon/balasan teks dari plc, untuk menyalakan lampu pertama saya kirim teks @00WD01000001 = 0100 ( CH100/output ), 0001 ( led bit ke 1 )… minta pencerahannya mas, terimakasih … :))

  2. Pastikan konfigurasi serial port sudah sesuai dengan standar omron hostlink, data bit, baudrate, stop bit, parity, dll

  3. atas = cari & 240; // 240 = B11110000
    atas >>= 4; // geser kekanan 4 kali
    bawah = cari & 15; //15 = B00001111

    itu source codenya gimana mas, kok error ya, hehe
    makasih mas

  4. atas = cari & 240; // 240 = B11110000
    atas >>= 4; // geser kekanan 4 kali
    bawah = cari & 15; //15 = B00001111

    itu maksudnya gimana mas? kok error ya hehe
    makasih :))

Leave a Reply

Your email address will not be published. Required fields are marked *

six + 6 =