C Sharp İle Seri Port Kullanımı

Merhaba arkadaşlar, bu dersimizde C# ile seri port kullanımını detaylı olarak anlatmaya çalışacağız. 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.

Öncelikle 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;

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;

Bilgisayarımızdaki tüm seri portları bir combobox’da listelemek için SerialPort nesnesinin GetPortNames özelliğini kullanarak portları bir diziye atarız. Ardından diziye atadığımız string türündekiport adlarını bir foreach döngüsü yardımı ile combobox’ta listeleyebiliriz;

 

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.

 

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:

 

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:

 

Seri port Char dizisi gönderme örnek:

 

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.

 

Ve ardından fonksiyonumuzu yazıyoruz:

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;

 

2- ReadLine() fonksiyonu ile yine Strig türünde satır satır okuma;

 

3- Read() fonksiyonu ile Byte dizisi olarak okuma:

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:

 

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.

Github’dan ya da ekteki dosyadan örnek C# Seri Port uygulamasını indirebilirsiniz;

CSharp_SeriPort_Haberlesmesi-master.zip (10 indirme)

Bir Yorum Ekle

E-posta hesabınız yayımlanmayacak. Gerekli alanlar * ile işaretlenmişlerdir