Posted by : Niam Tamami May 12, 2013



Modbus (Modicon Bus) adalah teknologi lama yang dikembangkan oleh Modicon pada 1979. Modbus
merupakan salah satu protokol komunikasi serial yang memungkinkan beberapa sistem berbeda saling berkomunikasi satu sama lain. Modbus telah mengalami perkembangan mulai dari Modbus dimana ada satu yang bertindak sebagai Modbus Master dan lainnya adalah Modbus Slave (sering disebut sebagai Modbus RTU). Karena diperlukan komunikasi dalam bentuk teks, maka dibuat pula Modbus ASCII, yang kemudian karena tuntutan kecepatan dikembangkan pula Modbus Plus. Dengan perkembangan teknologi jaringan yang menggunakan Ethernet dan TCP/IP, Gambar 1. Sistem Otomasi Industri maka Modbus dibungkus (encapsulated) untuk bisa Menggunakan Protokol Modbus ditransmisikan melalui Ethernet dan muncul dengan nama Modbus/TCP.
 [http://www.lpp.ac.id/images/downloads/lppcom/fold2/Sept10_protokol_komunikasi_mobdus_RTU.pdf]

Bentar, tak belajar dulu

using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Text;
using System.Windows.Forms;
using System.Runtime.InteropServices;

namespace SimpleSerial
{
    public partial class Form1 : Form
    {

      
        string RxString_Respon_dari_slave;
private void buttonStart_Click(object sender, EventArgs e)
        {
            serialPort1.PortName = "COM1";
            serialPort1.BaudRate = 9600;

            serialPort1.Open();
            if (serialPort1.IsOpen)
            {
                buttonStart.Enabled = false;
                buttonStop.Enabled = true;
                textBox1.ReadOnly = false;
            }
        }
 private void buttonStop_Click(object sender, EventArgs e)
        {
            if (serialPort1.IsOpen)
            {
                serialPort1.Close();
                buttonStart.Enabled = true;
                buttonStop.Enabled = false;
                textBox1.ReadOnly = true;
            }

        }
private void button2_Click(object sender, EventArgs e)
        {

            
            byte[] CRC = new byte[2];
            byte[] message = new byte[8];
            ushort start = Convert.ToUInt16(textAlamatAwal.Text);
            ushort reg_qty = Convert.ToUInt16(textJumlahRegister.Text);
            // jika port belum di open , keluar
            if (!serialPort1.IsOpen) return;
            //Clear in/out buffers:
            serialPort1.DiscardOutBuffer();
            serialPort1.DiscardInBuffer();

            message[0] = Convert.ToByte(txtalamat.Text);
            message[1] = Convert.ToByte(textFunctionCode.Text); 

            message[2] = (byte)(start >> 8);
            message[3] = (byte)start;

            message[4] = (byte)(reg_qty >> 8);
            message[5] = (byte)reg_qty;

            HitungCRC(message, ref CRC);
            message[message.Length-2] = CRC[0];
            message[message.Length-1] = CRC[1];
        //tampilkan hasil CRC ke textbox
            textCRC.Text = CRC[1].ToString() + " " + CRC[0].ToString();
            textCRCHigh.Text = CRC[1].ToString();
            textCRCLow.Text = CRC[0].ToString();
            //kirim data di buffer message ke serial port
            serialPort1.Write(message, 0, message.Length);

        }
//tampilkan data respon dari slave
 private void DisplayText(object sender, EventArgs e)
        {
textBox1.AppendText(RxString_Respon_dari_slave);

        }

        private void serialPort1_DataReceived(object sender, System.IO.Ports.SerialDataReceivedEventArgs e)
        {
            RxString_Respon_dari_slave = serialPort1.ReadExisting();

            this.Invoke(new EventHandler(DisplayText));
        }

 private void HitungCRC(byte[] message, ref byte[] CRC)
        {
           

            ushort CRCFull = 0xFFFF;
            byte CRCHigh = 0xFF, CRCLow = 0xFF;
            char CRCLSB;

            for (int i = 0; i < (message.Length) - 2; i++)
            {
                CRCFull = (ushort)(CRCFull ^ message[i]);

                for (int j = 0; j < 8; j++)
                {
                    CRCLSB = (char)(CRCFull & 0x0001);
                    CRCFull = (ushort)((CRCFull >> 1) & 0x7FFF);

                    if (CRCLSB == 1)
                        CRCFull = (ushort)(CRCFull ^ 0xA001);
                }
            }
            CRC[1] = CRCHigh = (byte)((CRCFull >> 8) & 0xFF);
            CRC[0] = CRCLow = (byte)(CRCFull & 0xFF);
        }
[http://khoironi1986.blogspot.com/2012/10/contoh-code-master-modbus-rtu-dengan-c.html]
[http://pccontrol.wordpress.com/2011/07/29/contoh-code-slave-modbus-dengan-microcontroller-avr-atmega8535-dgn-bahasa-c-codevision/]
[http://pccontrol.wordpress.com/2011/06/03/protokol-modbus/]

Leave a Reply

Subscribe to Posts | Subscribe to Comments

Entri Populer

tweet

- Copyright © 2013 blog.nitbot.com -Metrominimalist- Powered by Blogger - Designed by Johanes Djogan -