logo
Samet Karaca    12.05.2018    426 Görüntüleme     Yorum
Merhaba arkadaşlar, bu dersimizde C# ile seri port kullanımını detaylı olarak anlatmaya çalışacağım. C# ile string, byte ve char türü veri gönderip alma işlemlerini inceleyeceğiz. Ayrıca seri porttan otomatik veri okuma işlemini öğreneceğiz. Ölncelikle seri port nesnesini kullanabilmek için, System IO Ports kütüphanemizi projemize dahil ediyoruz. Bunun için sayfamızın en üst kısmına using System.IO.Ports; kodunu ekleyerek derleyiciye giriş çıkış portlarını kullanacağımızı bildiriyoruz. Seri port nesnesini kullanabilmek için öncelikle bir seri port oluşturuyoruz.
namespace SeriPort
{
    public partial class main : Form
    {
        SerialPort sp = new SerialPort(); // Seri port nesnesi oluşturuyoruz
        sp.PortName = "COM1"; // Kullanacağımız seri port adını seçiyoruz (String)
        sp.BaudRate = 19200;  // Seri haberleşme hızını seçiyoruz (int32)
        sp.DataBits = 8; // göndereceğimiz bilginin kaç bitten oluşacağını bildiriyoruz (int32).
        sp.Parity = Parity.None; // Eşlik bitidir. Gönderilen verinin doğruluğunu kontrol etmek için kullanılır. 
        sp.StopBits = StopBits.One; // Stop bitinin kaç bit olacağını belirtir.
    }
}
Yukarıda verdiğimiz kodları inceleyelim; PortName : Seri port adını belirtir. String türü değer alır. Bilgisayarınızda bağlı olan seri portları aygıt yöneticisinden görebilirsiniz. Port adı kesinlikle belirtilmeli. BaudRate : Seri haberleşme hızını belirtir. int32 türü değer alır. Bir saniyede gönderilebilecek maksimum bit sayısıdır. Alıcı ile aynı değer almak zorundadır. Standartlaşmış olarak 300, 600, 1200, 2400, 4800, 9600, 19200, 38400, 57600, 115200 değerlerini alabilir. Varsayılan değeri 9600 Baud'dur. DataBits : Gönderilecek her bilgini/karakterin kaç bitten oluşacağını belirtir. int32 türü değer alır. 5 ile 8 arasında değer alabilir. Genelde 7 ve 8 değerini alır. Varsayılan değeri 8'dir. Parity : Eşlik bitinin sayısını belirtir. Alınan verinin doğruluğunu kontrol etmek için kullanılır. None (0), Odd (1), Even (2), Mark (3), Space (4) değerlerini alabilir. Varsayılan değeri None 'dur. StopBits : Durdurma bitinin kaç bit olacağını belirtir. One (1), Two(2), OnePointFive(3) değerlerini alabilir. Varsayılan değeri One 'dır. Seri portu tek satır kod ile oluşturabiliriz;
SerialPort sp = new SerialPort("COM1",9600,Parity.None,8,StopBits.One);
Seri port nesnesini tanımladıktan sonra veri gönderip alabilmek için seri portumuzu açmamız gerekiyor. Bunun için Open() fonksiyonunu çağırıyoruz. Eğer seri port başka bir cihaz tarafından kullanıyorsa portumuz açılmayacaktır. Çünkü bir seri port aynı anda bir uygulama ya da bir cihaz tarafından kullanılabilir.
sp.Open(); // Seri portumuzu açıyoruz
Seri Port Veri Gönderme : Seri porta veri göndermek için Write() fonksiyonu kullanılır. Gönderilen veri String, Byte dizisi ya da Char dizisi olabilir. String türü veri göndermek için parantezler içerisinde Çift tırnak içerisinde gönderilecek veri yazılır. Örnek:
sp.Write("Yazı"); // Burada String türü veri gönderdik
Byte ya da Char dizisi göndermek için ise parantezler içerisinde dizi değişkeni, gönderilecek dizinin başlangıç indisi, ve dizide gönderilecek indis sayısı yazılır. Seri port Byte dizisi gönderme örnek:
/* 
* Örnek olarak veri adında bir byte dizisi oluşturalım
* Burada byte değişkeninin 8 bitlik sayı oluştuğunu 
* göz ardı etmeyin
*/
byte[] veri = new byte[] {12, 15, 22, 25};
/*
* Şimdi veri dizimizin sıfırıncı indisinden son indisine kadar
* olan tüm verileri seri porta yazdıralım.
*/
sp.Write(veri, 0, veri.Length); 
Seri port Char dizisi gönderme örnek:
/*
* Örnek olarak bir char dizisi oluşturalım
*/
char[] karakter = new char[] { 'a','1', (char)15,};
/*
* Şimdi dizinin tüm elemanlarını seri porta yazalım
*/
sp.Write(karakter, 0, karakter.Length);
Seri Port Veri Okuma : Bu konuda bir çok kişi sıkıntı yaşamaktadır. Seri port sadece açık olduğu zaman veri alabilir. Bir timer yardımıyla sürekli seri port kontrol edilebilir yada seri portun DataReceived eventi ile seri port dinlenebilir. Timer kullanarak seri porttan alınan veride kayıp yaşanma ihtimali yüksektir. Bu sebeple biz DataReceived eventini kullanacağız. Bunun için öncelikle DataReceived eventini tanımlamamız gerekiyor.
sp.DataReceived += new SerialDataReceivedEventHandler(sp_DataReceived);
Ve ardından fonksiyonumuzu yazıyoruz:

private void sp_DataReceived(object sender, SerialDataReceivedEventArgs e)
{
}
Bu event içerisinde seri porttan gelen bilgileri otomatik olarak okuyup bir değişkene aktarabiliriz ya da textBox, listBox gibi araçlara yazdırabiliriz. Birkaç çeşit okuma şeklimiz vardır. 1- ReadExisting() fonksiyonu ile String olarak okumayı görelim;
string veri = sp.ReadExisting();
2- ReadLine() fonksiyonu ile yine Strig türünde satır satır okuma;
string veri = sp.ReadLine();
3- Read() fonksiyonu ile Byte dizisi olarak okuma:
/*
*Öncelikle okuyacağımız veriyi atayacağımız dizimizi oluşturuyoruz.
*Dizimizin uzunluk değeri gelen byte sayısı kadar olmalı
*BufferSize bize gelen verinin uzunluğunu verir.
*/
byte[] veri= new byte[sp.ReadBufferSize];

/*
*Ardından Read() fonksiyonu ile gelen her byte bilgisini 
*veri dizisine aktarıyoruz.
*/
sp.Read(veri,0,sp.ReadBufferSize);
Read() fonksiyonu ile byte dizisi gibi char dizisi şeklinde de okuma yapabiliriz. 4- ReadByte() ve ReadChar() fonsiyonları ile bir byte ve bir char veri okuma:
int veri = sp.ReadByte(); // Seri porttan integer türünden 1 byte veri okur
int veri = sp.ReadChar(); // Seri porttan integer türünden 1 karakter veri okur
Diğer Seri Port Fonksiyonları: Close(); Seri portu kapatır. ReadTimeout; Okuma zaman aşımını ayarlar. Milisaniye cinsinden değer alır. WriteTimeout; Yazma zaman aşımını ayarlar. Milisaniye cinsinden değer alır. DiscardInBuffer(); Gelen veri hafızasını temizler. DiscardOutBuffer(); Giden veri hafızasını temizler. IsOpen; Seri portun açık ya da kapalı olduğu bilgisini verir. True ya da False olarak bool cinsinden iki farklı değer döndürebilir. DtrEnable; Seri port DTR pinini aktif ya da pasif yapmak için kullanılır. Bool cinsinden True ya da False olmak üzere iki farklı değer alabilir. DTR pini cihazlar arası elsıkışma da denilen, cihazın veri almaya hazır olduğunu bildiren pindir. RtsEnable; Seri port RTS pinini aktif ya da pasif yapmak için kullanılır. Bool cinsinden True ya da False olmak üzere iki farklı değer alabilir. RTS pini cihazlar arası elsıkışma da denilen, cihazın veri göndereceğini bildiren pindir. Lütfen yorumlarınızı eksik etmeyin. Hemen aşağıdan bu dersi oylayabilirsiniz.
  • Yazar : Samet Karaca
  • Ekleme Tarihi : 12.05.2018
  • Görüntülenme : 426
  • Kategorideki diğer Dersleri : C Sharp
  • Facebook Twitter Google Plus Freelyshout Youtube Web Site
Bu Dersi Beğendiniz mi?

0% YARARLI

KATEGORİLER