Jump to content
Harun

GMTSoft ve C# Modbus RTU (RS232) Haberleşmesi

Önerilen İletiler

İyi çalışmalar. Elimde GLC-196R model bir PLC bulanmakta. PLC ile C# arasında RS232 üzerinden bir Modbus RTU haberleşmesi gerçekleştirmek istiyorum.  Bunun için C# tarafında EasyModbus paketini kullanıyorum. PLC ile PC arasında RS232-USB dönüştürücü ve GMT haberleşme kablosu takılı. C# ve PLC kısmında gerekli kodları yazdım ama hiçbir şekilde PLC ile C# arasında veri okuma veya yazma işlemi yapamıyorum. C# ile PLC tarafında bulunan ID ve BaudRate gibi ayarlar birbirini karşılıyor. Sistemin çalışması test amaçlı olacağı için thread gibi işlemler yapmadım. Kodları aşağıda paylaşıyorum.

Bu konu hakkında proje yapmış biri bilgilendirirse sevinirim. 

PLC TARAFI

Modbus Slave Config bloğu Enerjilenme biti ile çalıştırıldı.

C# KODLARI

using EasyModbus;

ModbusClient modbusClient;

	private void BtnConnect_Click(object sender, EventArgs e)
        {
            try
            {
                
                modbusClient = new ModbusClient(selectedPort);
                modbusClient.Baudrate = 9600;
                modbusClient.StopBits = StopBits.One;
                modbusClient.Parity = Parity.None;
                modbusClient.UnitIdentifier = 1;
                
                modbusClient.Connect();
                MessageBox.Show("Başarılı bir şekilde bağlandı");
            }
            catch (Exception)
            {

                MessageBox.Show("Bağlantı Sağlanamadı");
            }
            
        }
	//Word değer gönderme
        private void BtnSetWord_Click(object sender, EventArgs e)
        {
            try
            {
                int register = Convert.ToInt32(txtWordRegister.Text);
                int value = Convert.ToInt32(txtWordValue.Text);      
                modbusClient.WriteSingleRegister(40001 + register, value);
            }

            catch (Exception)
            {

                MessageBox.Show("Word gönderme başarısız.");
            }

        }

 

Yorum bağlantısı
Sitelerde Paylaş

Tavsiyem öncelikle Modscan (https://www.win-tech.com/demos/modscan32.zip) gibi programlarla haberleşmeyi sağlamandır. Böylelikle yazmış olduğun kodun içerebileceği hataları devre dışı bırakmış olursun.

Bağlantı için PLC' nin RJ11 (telefon jakı) soketini kullanıyorsun ve GMT' nin orjinal kablosunu kullanıyorum demişsin. GMT' nin kablosu PLC ile HMI arası bir haberleşme kablosudur. O kablonun 9 pinli kısmındaki bağlantı uçları 7-8-5 tir. Ancak PC için standart RS232 uçları ise 2-3-5 tir. Bu duruma dikkat edin.

PC ile haberleşirken Rx-Rx, Tx-Tx, Gnd-Gnd şeklinde bağlantı yapılması gerektiğini de hatırlatırım.

Yorum bağlantısı
Sitelerde Paylaş

On 10/27/2020 at 5:29 PM, Harun said:

İyi çalışmalar. Elimde GLC-196R model bir PLC bulanmakta. PLC ile C# arasında RS232 üzerinden bir Modbus RTU haberleşmesi gerçekleştirmek istiyorum.  Bunun için C# tarafında EasyModbus paketini kullanıyorum. PLC ile PC arasında RS232-USB dönüştürücü ve GMT haberleşme kablosu takılı. C# ve PLC kısmında gerekli kodları yazdım ama hiçbir şekilde PLC ile C# arasında veri okuma veya yazma işlemi yapamıyorum. C# ile PLC tarafında bulunan ID ve BaudRate gibi ayarlar birbirini karşılıyor. Sistemin çalışması test amaçlı olacağı için thread gibi işlemler yapmadım. Kodları aşağıda paylaşıyorum.

Bu konu hakkında proje yapmış biri bilgilendirirse sevinirim. 

PLC TARAFI

Modbus Slave Config bloğu Enerjilenme biti ile çalıştırıldı.

C# KODLARI

using EasyModbus;

ModbusClient modbusClient;

	private void BtnConnect_Click(object sender, EventArgs e)
        {
            try
            {
                
                modbusClient = new ModbusClient(selectedPort);
                modbusClient.Baudrate = 9600;
                modbusClient.StopBits = StopBits.One;
                modbusClient.Parity = Parity.None;
                modbusClient.UnitIdentifier = 1;
                
                modbusClient.Connect();
                MessageBox.Show("Başarılı bir şekilde bağlandı");
            }
            catch (Exception)
            {

                MessageBox.Show("Bağlantı Sağlanamadı");
            }
            
        }
	//Word değer gönderme
        private void BtnSetWord_Click(object sender, EventArgs e)
        {
            try
            {
                int register = Convert.ToInt32(txtWordRegister.Text);
                int value = Convert.ToInt32(txtWordValue.Text);      
                modbusClient.WriteSingleRegister(40001 + register, value);
            }

            catch (Exception)
            {

                MessageBox.Show("Word gönderme başarısız.");
            }

        }

 

çözüm bulundumu?

Yorum bağlantısı
Sitelerde Paylaş

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.

Misafir
Bu konuyu yanıtla

×   Yapıştırdığınız içerik biçimlendirme içeriyor.   Biçimlendirmeyi Temizle

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Önceki içeriğiniz geri yüklendi.   Editör içeriğini temizle

×   You cannot paste images directly. Upload or insert images from URL.



×
×
  • Yeni Oluştur...