Bu site emekli olmuştur. Arşiv amaçlı olarak BT AKADEMİ sponsorluğunda yayın hayatına devam etmektedir.




C#nedir?com
 
YAZAR HAKKINDA
Caner Şahan
Caner Şahan
http://www.csharpnedir.com/
İletişme geçmek için tıklayın.
24 Makalesi yayınlanmakta.
Yazar hakkında detaylı bilgi için tıklayın.
Yayınlanan diğer makaleleri için tıklayın.
İlgili etiketler: ayarlamamizi bitinin byte?lik durumunu framework haberlesme haberlesmede haberlesmesi makalemizde porttan portun string terminal veriyi windows C# / VC#/.NET Caner Şahan
 
YAZI HAKKINDA
Türü : Makale
Serbest Köşede C#nedir?com üyelerinin hazırladıkları yazılar yayınlanır. Bu yazılar editör incelemesine girmeden yayınlanır.
Seviyesi : Orta
Kategori : C# / VC#/.NET
Yayınlanma Tarihi : 10.1.2005
Okunma Sayısı : 72644
Yorum Sayısı : 8     yorum yaz
Site İçi AramaSİTE İÇİ ARAMA
Üye Girişini AçÜye GİRİŞİ
Üye girişi için tıklayın.
Kullanıcı Adı
Şifre
 
Beni her zaman hatırla
Bir hafta boyunca kullanıcı bilgilerinizi kullanıcı çıkışı yapana kadar hatırlar. (Paylaşılan bilgisayarlarda önerilmez.)
 
Şifremi / Kullanıcı Adımı unuttum.
 
.net TV RSS Serbest KÖŞE (?)
Serbest Köşede C#nedir?com üyelerinin hazırladıkları yazılar yayınlanır. Bu yazılar editör incelemesine girmeden yayınlanır.
emre TAŞ
Silindi
emre TAŞ
yazının devamı >
emre TAŞ
silindi
emre TAŞ
yazının devamı >
emre TAŞ
silindi
emre TAŞ
yazının devamı >
emre TAŞ
silindi
emre TAŞ
yazının devamı >
emre TAŞ
silindi
emre TAŞ
yazının devamı >
Makale Gönder Bende Yazmak İstiyorum
.net TV RSSBlogroll
Turhal Temizer
Conda install environment.yml Package 21.11.2024
Turhal Temizer
Mac OS/X Removing CUDA 21.11.2024
Burak Selim Şenyurt
Rust ile ECS Yaklaşımını Anlamak 21.11.2024
Burak Selim Şenyurt
Birlikte Rust Öğrenelim Serisi 21.11.2024
  Diğer Herşey
Sponsorlar
BT Akademi
Medya Portakal
Video Hosting Sponsoru
Csharpnedir.com bir Ineta üyesidir
Uzman Abi
Her Yönüyle C# - Sefer Algan
.NET Framework 2.0 ile Seri Port Haberleşmesi
 
Kapat
Sayfayı Yazdır Sık Kullanılanlara Ekle Arkadaşıma Gönder MySpace Del.Ico.Us Digg Facebook Google Mixx Reddit StumbleUpon
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.0’dan ö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.

RS232’yi 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 byte’lık veriyi transfer ederken, tek kablo üzerinden bitlerini belirli zaman aralıklarıyla tek tek yollamaktadır. 1 byte’lık veriyi bit bit yollarken elbetteki belirli bir sıra ve düzene göre yollamaktadır. Çalışmasını internette kullanılan TCP/IP’ye kısmen benzetebiliriz. TCP/IP’de gönderilecek olan pakete hedef ve kaynak ip adresleri eklenerek haberleşme sağlanır. Seri haberleşmede ip’lerin 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.

Serialport’un 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 4096’dı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 Rate’lerin 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.

Serialport’un 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 BaudRate’ini 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 byte’taki 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
  • Yazılan Yorumlar
  • Yorum Yaz
HAZ
15
2012
Caner Bey ben şu an visual stdio 2010 kullanıyorum seri haberleşme ile ve modbus tcp ile PLC ile haberleşme yapmak istiyorum. Bu konuda bir makaleniz veya çalışmanız var mı bu konuda yardımcı olabilir misiniz?
OCA
4
2012
hocam gelen veri oldugunda otomatik textbox vb. bir yere nasıl atayabiliriz?
OCA
4
2012
hocam gelen veri oldugunda otomatik textbox vb. bir yere nasıl atayabiliriz?
OCA
4
2012
hocam gelen veri oldugunda otomatik textbox vb. bir yere nasıl atayabiliriz?
TEM
24
2006
access to port com1 denied diyor nerde hata yapıyorum acaba aynı kodu yazdım
TEM
24
2006
acces to com port denied gibi hata veriyo
Sayfalar : 1 
Yorum yazabilmek için üye girişi yapmalısınız. Üye girişi için tıklayın.
Üye değilseniz Üyel Ol linkine tıklayarak üyeliğinizi hemen başlatabilirisniz.
 
  • Bu Konuda Son 10
  • 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