Minggu, 14 Juni 2015

Praktikum – Komunikasi Ethernet

Praktikum – Komunikasi Ethernet
I. Tujuan
  • Mahasiswa mempelajari komunikasi Ethernet di C#.
  • Mengetahui kegunaan socket di C#.
  • Dapat membuat aplikasi windows sederhana untuk mengirim teks.
II. Dasar Teori

Komunikasi Ethernet merupakan salah satu jenis komunikasi yang paling sering ditemui saat ini. Penggunaannya juga beragam, bisa digunakan untuk komunikasi antar PC, PC dengan mikrokontroller, PC dengan PLC, PLC dengan PLC dan sebagainya. Komunikasi Ethernet dapat menggunakan media berupa kabel maupun nirkabel. Media kabel yang digunakan biasanya berupa kabel UTP yang ditiap ujungnya terdapat konektor RJ45, sedangkan yang nirkabel biasanya memanfaatkan router wireless. Untuk mengenali tujuan pengiriman data, komunikasi ini menggunakan IP address dan port. IP Address dianalogikan sebagai kompleks perumahan, dan port dianalogikan sebagai nomor rumah. Jika IP Address dan port yang digunakan asal-asalan, maka paket data yang dikirimkan juga tidak akan pernah sampai ke device tujuan. Pada komunikasi Ethernet terdapat 2 jenis protocol pengiriman data, yaitu TCP dan UDP. Kedua protocol tersebut memiliki kelebihan dan kekurangan masing-masing. Pada praktikum kali ini, kita akan membuat sebuah aplikasi chatting teks sederhana menggunakan protocol UDP.
 
III. Praktikum
 
1. Buat project baru, kemudian susun form control seperti pada gambar.
2. Tambahkan coding berikut
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.Net;
using System.Net.Sockets;
using System.Threading;

namespace WindowsFormsApplication1
{
    public partial class chatform : Form
    {
        delegate void Addmessage(string message);
        //string username;
       // TcpClient topclient = new TcpClient();
        int port = 11000;
        const string broadcastAddress = "192.168.0.255";
        UdpClient receivingclient = new UdpClient(11000);
        UdpClient sendingclient;
        Thread receivingthread;

        public chatform()
        {
            InitializeComponent();
            this.Load += new EventHandler(chatform_Load);
            btnsend.Click += new EventHandler(btnsend_Click);
            //topclient.Connect("192.168.0.255",11000);
        }
      
        private void chatform_Load(object sender, EventArgs e)
        {
            textBoxtbsend.Focus();
            initializesender();
            initializeReceiver();

        }
        private void initializesender()
        {
            sendingclient = new UdpClient(broadcastAddress, port);
            sendingclient.EnableBroadcast = true;
        }

        private void initializeReceiver()
        {
            ThreadStart start = new ThreadStart (Receiver); //</p>
            receivingthread = new Thread(start); //</p>
            receivingthread .IsBackground  = true ;
            receivingthread.Start();

        }

        private void btnsend_Click(object sender, EventArgs e)
        {
            textBoxtbsend.Text = textBoxtbsend.Text.TrimEnd();
            if (!string.IsNullOrEmpty(textBoxtbsend.Text))
            {
                string tosend = "<" + Environment.MachineName + ">:" + textBoxtbsend.Text;
                byte[] data = Encoding.ASCII.GetBytes(tosend);
                sendingclient.Send(data, data.Length);
                textBoxtbsend.Text = "";

            }
            textBoxtbsend.Focus();

        }
        private void Receiver()
        {
            IPEndPoint endpoint = new IPEndPoint(IPAddress.Any, port);
            Addmessage messagedelegate = messagereceived;
            while (true)
            {
                byte []  data = receivingclient .Receive (ref endpoint);
                string message = Encoding .ASCII .GetString (data);
                Invoke (messagedelegate ,message );
                System.Console.Beep (1500,300);

            }
        }
        private void messagereceived(string message)
        {
            richTextBoxrtbchat.Text += message + "/n";
        }
    }
}
3. Compile dan jalankan aplikasi.
4. Coba ganti IP address dan port yang digunakan.
5. Compile aplikasi kemudian amati.




Minggu, 31 Mei 2015

PRAKTIKUM VIII – Serial Receive

I. Tujuan
  • Mahasiswa mempelajari Serial Port di C#
  • Mengetahui kegunaan Serial Port di SharpDevelop
  • Dapat mengunakan Serial Port dalam aplikasi windows sederhana untuk akuisisi data
II. Dasar Teori

Port merupakan kumpulan jalur elektronik untuk menyalurkan data. Port ada yang untuk input saja, output saja atau input/output. Port dipakai untuk komunikasi antara CPU dengan monitor, keyboard, mouse dll. Proses pengiriman data dapat langsung sekaligus secara paralel dengan menggunakan beberapa kabel, atau satu-persatu secara berurutan (serial) dengan menggunakan sepasang kabel. Contoh transmisi data secara paralel adalah komunikasi harddisk IDE dengan CPU, komunikasi printer dengan komputer. Contoh transmisi data secara serial adalah komunikasi harddisk SATA dengan CPU, komunikasi USB dll.
Mikrokontroller umumnya menggunakan standar komunikasi serial RS232 untuk koneksi dengan perangkat lain. Komputer juga memiliki port standar serialport, paralelport, USB, VGA dan PS/2. Pada praktikum ini kita akan mempelajari penggunaan serial port.

III. Praktikum

1. Tujuan praktikum ini adalah untuk menerima data dari mikrokontroller melalui port serial. Data yang dikirim oleh mikrokontroller adalah kondisi dari potensiometer. Nilai analog tegangan akan dikonversi oleh mikro ke nilai digital dalam range 0 - 1023. Kemudian nilai digital ini yang dikirim ke komputer melalui port serial. Program pada mikro (kita akan menggunakan arduino) cukup sederhana:
2. Buat solution baru. Susun form dengan control-control seperti terlihat pada gambar.
Atur properties “Series” pada chart, sehingga muncul window baru seperti dibawah ini.
Anda bisa mengubah jenis grafik dengan mengubah ChartType nya.
3. Komponen SerialPort ada di Components toolbar, sedangkan komponen Chart ada di data.
4. Tambahkan program berikut untuk control button1:
5. Tambahkan program berikut ke event DataReceived-nya serial:
Kita menggunakan method Invoke karena thread untuk receive serial berbeda dengan thread program utama. Padahal object RichTextBox atau Label, tempat kita untuk menampilkan data serial, terletak di thread utama. Invoke membuat kita dapat melakukan cross-thread.
Program di atas akan membuat event DataReceived memanggil event handler baru yang terletak di thread utama, yaitu DisplayText.
6. Untuk method DisplayText, tambahkan program berikut:
7. Compile dan jalankan program.
Sekian tentang Serial port dari saya, kurang lebihnya mohon maaf, Assalamu'alaikum WR.WB.

Control LED with Serial Port Communication

Control LED with Serial Port Communication


Pada kesempatan kali ini saya ingin berbagi cara koneksi antar serial port, namun tanpa menggunakan hardware(antar aplikasi, dengan menggunakan aplikasi tambahan “Virtual Port”). Dalam kasus ini kita dapat mengirim dan menerima data sederhana(berupa text) antar serial port yang kemudian kita beri fungsi untuk mengontrol beberapa lampu LED, kita cukup menggunakan method Write dengan parameter berupa string yang akan dikirim dan diterima dalam bentuk string juga.
Hal pertama yang harus dilakukan yaitu:
1. Virtual Serial Port
2. Hterm
 install virtual serial port dan kemudian buatlah penghubung antar com (seperti pada gambar)
  • Kemudian kita dapat langsung membuat aplikasi untuk control led.
  • Buka ms. visual studio 2010, dan buatlah project baru.
  • Desain windows form sesuai keinginan masing masing atau dapat mengikuti desain yang saya buat.
  • Jangan lupa menambahkan Timer dan Serial Port yang terdapat pada toolbox.
 

  • etelah desain yang dibuat dirasa cukup, maka kita langsung masuk ke codingan nya.
  • Dibawah ini adalah version code dari aplikasi yang telah saya buat.
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.Ports;
using System.IO;
namespace komunikasi_serial
{
public partial class Form1 : Form
{
// Pengenalan variable gambar
Image white = Properties.Resources.redcircle;
Image black = Properties.Resources.whitecircle;
public Form1()
{
InitializeComponent();
//Port yang aktif pada komputer
foreach (String Port in System.IO.Ports.SerialPort.GetPortNames())
{
cbports.Items.Add(Port);
}
//tulisan awal textbox
textBox1.Text = “Receive Here…”;
//Posisi gambar awal
L1.Image = L2.Image = L3.Image = L4.Image = L5.Image = black;
//mengaktifkan timer
timer1.Enabled = true;
}
private void timer1_Tick(object sender, EventArgs e)
{
//mengecek apakah port serial telah terbuka
if (serialPort1.IsOpen)
{
// mengirim data
if (serialPort1.BytesToRead != 0)
{
if (textBox1.Text == “Receive Here…”)
{
textBox1.Text = “\n”;
}
else
{
string masuk = serialPort1.ReadExisting();
textBox1.AppendText(masuk + “\n”);
//kode untuk kontrol lampu
if (masuk.ToUpper() == “L1 ON” || masuk.ToUpper() == “L1ON”)
{
L1.Image = white;
}
if (masuk.ToUpper() == “L2 ON” || masuk.ToUpper() == ” L2ON”)
{
L2.Image = white;
}
if (masuk.ToUpper() == “L3 ON” || masuk.ToUpper() == “L3ON”)
{
L3.Image = white;
}
if (masuk.ToUpper() == “L4 ON” || masuk.ToUpper() == “L4ON”)
{
L4.Image = white;
}
if (masuk.ToUpper() == “L5 ON” || masuk.ToUpper() == “L5ON”)
{
L5.Image = white;
}
// komen lampu mati
if (masuk.ToUpper() == “L1 OFF” || masuk.ToUpper() == “L1OFF”)
{
L1.Image = black;
}
if (masuk.ToUpper() == “L2 OFF” || masuk.ToUpper() == “L2OFF”)
{
L2.Image = black;
}
if (masuk.ToUpper() == “L3 OFF” || masuk.ToUpper() == “L3OFF”)
{
L3.Image = black;
}
if (masuk.ToUpper() == “L4 OFF” || masuk.ToUpper() == “L4OFF”)
{
L4.Image = black;
}
if (masuk.ToUpper() == “L5 OFF” || masuk.ToUpper() == “L5OFF”)
{
L5.Image = black;
}
}
}
}
else
{
}
}
private void pictureBox1_Click(object sender, EventArgs e)
{
//langsung mengklik pada lampu
try
{
PictureBox select = (PictureBox)sender;
if (select.Image == black)
{
serialPort1.Write(select.Name + ” on “);
select.Image = white;
}
else
{
serialPort1.Write(select.Name + ” off “);
select.Image = black;
}
}
catch (Exception)
{
MessageBox.Show(“Komunikasi belum terhubung”, “Warning”, MessageBoxButtons.OK, MessageBoxIcon.Warning);
}
}
private void btconnect_Click(object sender, EventArgs e)
{
//menghubungkan ke port serial yang aktif
try
{
serialPort1.PortName = cbports.Text;
if (!serialPort1.IsOpen)
{
btconnect.BackColor = Color.Lime;
btconnect.Enabled = false;
btdisc.BackColor = Color.Red;
btdisc.Enabled = true;
serialPort1.Open();
}
else
{
}
}
catch (Exception)
{
MessageBox.Show(“Pilih Com Port terlebih dahulu”, “Warning”,MessageBoxButtons.OK, MessageBoxIcon.Warning);
}
}
private void btdisc_Click(object sender, EventArgs e)
{
//memutuskan port serial yang aktif
if (serialPort1.IsOpen)
{
btdisc.BackColor = Color.Lime;
btdisc.Enabled = false;
btconnect.BackColor = Color.Red;
btconnect.Enabled = true;
serialPort1.Close();
}
else
{
}
}
private void textBox2_KeyDown(object sender, KeyEventArgs e)
{
//mengirim data
if (e.KeyData == Keys.Enter)
{
if (serialPort1.IsOpen)
{
serialPort1.Write(textBox2.Text);
textBox2.Text = “”;
}
else { }
}
}
private void button1_Click(object sender, EventArgs e)
{
try
{
//tombol send
serialPort1.Write(textBox2.Text);
textBox2.Text = “”;
}
catch (Exception)
{
MessageBox.Show(“Pilih Com Port terlebih dahulu”, “Warning”, MessageBoxButtons.OK, MessageBoxIcon.Warning);
}
}
private void Form1_SizeChanged(object sender, EventArgs e)
{
//warning untuk mengubah size form
MessageBox.Show(“Size tidak dapat diubah”, “Warning”, MessageBoxButtons.OK, MessageBoxIcon.Warning);
}
}
}
  • Setelah program selesai di ketik, coba running programnya.
  • Buka htem dan kemudian pilih com yang telah di pair tadi lalu klik tombol connect.

Testing aplikasi