|
.NET Framework 2.0 ile Seri Port Haberleşmesi |
|
Gönderiliyor lütfen bekleyin... |
|
|
Bu makalemizde Framework
2,0(Beta) kullanarak seriport; namı diğer RS232 ile haberleşmesinin nasıl yapılabileceğini
inceleyeceğiz. Aslında 2.0dan önceki Framework sürümlerinde portlarla haberleşme
ile ilgili bir sınıf yoktu. Bu yüzden seri port haberleşmesi Windows API leri
kullanılarak yapılıyordu. Bu eksiklik .NET 2.0 ile giderilmiş görülüyor. Framework
2.0 bizlere System.IO.Ports isimli yeni bir sınıf sağlamakta. Bu makalemizde
el sıkışma(handshaking) veya akış kontrolü(flow control) gibi seri haberleşme
kavramlarına değinmeyeceğiz. Amacımız .NET 2.0 ile gelen System.IO.Ports
sınıfını incelemek olduğu için seri port haberleşmesi konusunda deneyimli olduğunuzu
varsayıyorum. Öte yandan detaylı port işlemleri için hand shaking,flow control
gibi kavramları ayrıntılı olarak araştırmanızı öneririm.
RS232yi
Tanıyalım:
Pin |
Sinyal Anlamı |
Pin |
Sinyal Anlamı |
1 |
taşıyıcı data sezme |
6 |
veri set etme |
2 |
alınan data(okunanlar) |
7 |
gönderme için istek |
3 |
yollanan
datalar(yazılanlar) |
8 |
silme için istek |
4 |
veri terminal
hazırlama |
9 |
modemden gelen sinyaller |
5 |
toprak |
|
|
Seri portlar, bilgisayarımız üzerinde hem veri
yollayıp hemde veriyi aynı anda alarak çalışmaktadır. Bu tarz çalışma şekline
terminolojide full-duplex denmektedir. Kullanacağımız seri portlar da full-duplex
çalışmaktadır. Seri port haberleşmede 1 bytelık veriyi transfer ederken, tek
kablo üzerinden bitlerini belirli zaman aralıklarıyla tek tek yollamaktadır.
1 bytelık veriyi bit bit yollarken elbetteki belirli bir sıra ve düzene göre
yollamaktadır. Çalışmasını internette kullanılan TCP/IPye kısmen benzetebiliriz.
TCP/IPde gönderilecek olan pakete hedef ve kaynak ip adresleri eklenerek haberleşme
sağlanır. Seri haberleşmede iplerin yerini start ve stop bitleri denilen terimler
almaktadır. Yani veri önce start bit,sonra veri ve son olarakta stop bit şeklinde
yollanır. RS232, haberleşmede çok önemli bir kavramdır. Çok fazla detaya inmemiz
makale sınırlarımızı aşacağı için sadece temel haberleşmedeki kavramlar ele
almakla yetindim.
System.IO.Ports sınıfından kendimiz nesne
yaratarak kullanabileceğimiz gibi Whidbey ile sürükle-bırak yöntem ile de bu
nesneyi kolayca oluşturabiliriz.
SerialPort serialPort1=new SerialPort( );
yada
şeklinde ekleme yapabiliriz.
Serialportun bileşeninin özelliklerini Properties
penceresinden kolayca ayarlayabiliriz. Bu özellikler aşadaki şekilde gözükmektedir.
Özelliklerde dikkatimizi çeken ReadBufferSize
özelliğidir. Bu özellik porttan okunan değerin bekletildiği yerdir. Bu değer
default olarak 4096dır ama isteğe bağlı olarak (uygulamanın durumuna bağlı
olarak) değiştirilebilir. SerialPort sınıfından yarattığımız nesnede en fazla
kullanılan metotlar ise WriteLine() ve ReadLine() metotlarıdır. Adlarındanda
anlaşılacağı gibi biri yazma diğeri ise okuma işlemini yapmaktadır. Bunun yanı
sıra portları açan ve kapayan Open(), Close() gibi metotları da bulunmaktadır.
Open() ve Close() metotlarından bahsetmişken şunu belirtmekte fayda var. Eğer
bir port açıksa ve siz bu portu tekrar açma isteğinde bulunursanız hata ile
karşılaşırsınız. Aynı şekilde kapalı bir porttan da veri okumaya kalkışırsanız
gene bir hata mesajı alırsınız. Bu gibi durumları önlemek için IsOpen() methodu
kullanılmaktadır. Bu metot ile portun açık olup olmadığı belirlenir ve bu metot
bool türünden bir değer döner.
Porttaki haberleşmeyi görmek için basit
bir mesajlaşma sistemi geliştirelim. Bu sistemde DB 9 denilen female-female
kabloları iki bilgisayara bağlayınız. Eğer iki bilgisayara sahip değilseniz,
küçük bir tel ile 2. ve 3. pinleri kısa devre yapın. Böylelikle gönderdiğiniz
veriyi tekrardan geri almış olacaksınız. Aşadaki formda yaz ve oku butonlarının
olaylarına bakalım.
private void yaz_click(object sender,
EventArgs e)
{
if (!serialPort1.IsOpen)
{
serialPort1.Open();
}
string sendmesaj = textBox1.Text+"-->>>>";
serialPort1.WriteLine(sendmesaj);
}
private void oku_click(object sender, EventArgs e)
{
string i=serialPort1.ReadLine();
textBox2.Text ="<<<<---"+i;
serialPort1.Close();
} |
İlk önce göndereceğimiz veriyi yazıyoruz ve yaz
buttonuna basıyoruz. Bu noktada; bu string byte dizine çevriliyor ve çevrim
ASCII kodlama ile yapılıyor. Bu yüzden karşı tarafta türkçe karekterlerin
yerine ? çıkıyor.
Notlar:
- Eğer iki bilgisayarı bağlayarak deneme
yapıyorsanız;
Her iki bilgisayarın aynı porta takılı olduğundan emin olun,
Her iki bilgisayar içinde Bound Ratelerin aynı
olduğundan emin olun. Bu hız senkronizasyonu sağlayacaktır.
- Her iki sistemde de .NET Framework 2.0(beta)
ve programın yüklü olup olmadığını kontrol edin.
- Tek bilgisayarda çalışıyorsanız 2 ile 3
pinlerini kısa devre yaptığınızdan emin olun.
Bu bileşenin çalışabildiği platformlar:
Windows
Millennium Edition, Windows 2000, Windows 2000 Server, Windows 2000 Advanced
Server, Windows XP Home Edition, Windows XP Professional, Windows Server 2003,
.NET Compact Framework.
Serialportun
Diğer Özellikleri
Genel Özellikler
|
Özellik
İsmi: |
Tanımı |
|
BaseStream |
Alt akım(Stream) nesnesini Serialport
için döndürür. |
|
BaudRate |
Seri portun BaudRateini geri dönder
veya ayarlamamızı sağlar. |
|
BreakState |
Durdurma sinyalinin durumunu almaya
veya ayarlamaya yarar. |
|
BytesToRead |
Alınan buffer bölgesindeki verinin
boyutu geri döner.(Sadece okunabilir) |
|
BytesToWrite |
Yazılan buffer bölgesindeki verinin
boyutunu döner.(Sadece okunabilir) |
|
CDHolding |
Taşıyıcı data sezme bitinin durumunu
döner.(Sadece okunabilir) |
|
CtsHolding |
Silme için istek bitinin durumunu
döner.(Sadece okunabilir) |
|
DataBits |
Bir bytetaki standart boyutunu
ayarlamaya veya büyüklüğünü almaya yarar. |
|
DsrHolding |
Veri set etme bitinin durumunu döner. |
|
DtrEnable |
Veri Terminal hazırlamanın durumunu
belirtiriz. |
|
Encoding |
Veri transferi başlamadan önceki
encoding şeklinin seçilmesini sağlar veya ayarlamamızı sağlar. |
|
Handshake |
Seri porttaki handshaking protokolünü
ayarlamamızı sağlar. |
|
IsOpen |
Seri portun açık olup olmadığını geri
döner.(Sadece okunabilir) |
|
Parity |
Parity kontrol protoklunun ayarlamak
için kullanılır. |
|
PortName |
Port ismini belirtmemizi sağlar. |
|
ReadBufferSize |
Seri porttan okunan verilerin
bufferdaki ne kadar yer kaplayacağını belirleriz. |
|
WriteBufferSize |
Seri porta yazılan verilerin
bufferdaki ne kadar yer kaplayacağını belirleriz. |
|
|
|
Kaynaklar : MSDN Online,
MSDN Magazine
Makale:
.NET Framework 2.0 ile Seri Port Haberleşmesi C#, Visual C# ve .NET Caner Şahan
|
|
|
-
-
Eklenen Son 10
-
Bu Konuda Geçmiş 10
Bu Konuda Yazılmış Yazılmış 10 Makale Yükleniyor
Son Eklenen 10 Makale Yükleniyor
Bu Konuda Yazılmış Geçmiş Makaleler Yükleniyor
|
|