Haberler:

Forum kuralları güncellendi LÜTFEN  okuyunuz:  https://bit.ly/2IjR3ME

Ana Menü

c#.net seri port okuma

Başlatan armsistem, 05 Ocak 2012, 12:03:58

armsistem

Arkadaşlar merhaba , c#.net üzerinden seri port okuyorum ,seri porttan veri geldiğinde problem yok lakin seri portta veri kesildiğinde program kilitleniyor.
i = serialPort1.ReadLine();


aşağıdaki şekilde seri portu dinliyor veri kesilsede problem yok ama veri okuduğumda verileri düzgün alamıyorum , satır sonun <cr><lf> problem çıkıyor.
i = serialPort1.ReadExisting();


Nasıl seri portu düzgün şekilde okuyabilirim. Şimdiden yardımlarınız için teşekkür ederim.

mfy40

arkadaşım tek okumada programın başaralı olmuş fakat ikincisinde aynı şeyi yapamazsın diğer kodlarını incelemedim ama galiba projene kanal koymamışsın. verileri alırken delege oluşturup invoke ile almalısın yoksa ikinci okumada program saçma sapan verileri çekmeye başlar. aşağıda örnek bi program veriyorum kodları incelerseniz ne demek istediğimi anlarsınız. iyi çalışmalar kolay gelsin

http://www.dosya.tc/server9/hOOHTl/ComPortClient.rar.html

armsistem

mfy40 teşekkür ederim ,yapiyi yanlis kurmusum programda calisan timer vardi onu kaldirdim gonderdigin ornek cok yardimci oldu.

mfy40

rica ederim. takıldığınız yer olursa yardımcı olabilirim kolay gelsin

micelow

#4
Merhaba
Bende C# ta bir arayüz yazdım verileri alıp işledikten sonra  yazdırıyorum ancak debug dediğimde program veri alma butonuna tıkladığımdan itibaren donuyor fakat bu sırada veriler gelmeye devam ediyor ve etiketlere yazılıyor.Programı kapattığımda aşağıdaki komut satırı sarı renk ile işaretlenmiş ve "Bir iş parçacığı çıkışı veya bir uygulama isteği nedeniyle G/Ç işlemi iptal edildi." uyarısı vermekte.
               
                gelenveri =serialPort1.ReadLine();

Bu noktada nasıl bir çözüm önerirsiniz.İlgileriniz için şimdiden teşekkür ederim.

               
"Bir tek şeye ihtiyacımız var çalışkan olmak."

fractal

#5
sanırım donma olayı veribekleme noktasında takılı kaldığı için olabilir...

ekteki dosya silinmiş..(http://www.dosya.tc/server9/hOOHTl/ComPortClient.rar.html)
Restantum cogniscutur Quantum deligutur

micelow

Evet ekteki dosya yok. Ben veriyi alma işleme ve yazdırma komutlarını " DataReceived " olay bloğuna yazmadım.Komutlar   button1_Click bloğunda ve komut penceresinin en altında da böyle tanımlı.

      private void serialPort1_DataReceived(object sender, SerialDataReceivedEventArgs e)
        {

        }

Program Bu bloğa girip içinde kalıyor diye düşünüyorum ama donma esnasında sürekli değişen veriler gelmeye ve labellara yazılmaya devam ediyor bu ihtimalide çürütmüş oluyor. :o
"Bir tek şeye ihtiyacımız var çalışkan olmak."

mfy40

#7
Alıntı yapılan: micelow - 28 Şubat 2012, 11:27:21
Evet ekteki dosya yok. Ben veriyi alma işleme ve yazdırma komutlarını " DataReceived " olay bloğuna yazmadım.Komutlar   button1_Click bloğunda ve komut penceresinin en altında da böyle tanımlı.

      private void serialPort1_DataReceived(object sender, SerialDataReceivedEventArgs e)
        {

        }

Program Bu bloğa girip içinde kalıyor diye düşünüyorum ama donma esnasında sürekli değişen veriler gelmeye ve labellara yazılmaya devam ediyor bu ihtimalide çürütmüş oluyor. :o

kardeşim kusura bakma işlerim dolayısıyla maillerime pek bakamıyorum sorununu yeni gördüm hemen dosyayı linke ekliyorum ama bence senin sorunun readline komutunu kullanırken ReadTimeOut a bir değer girmemen. c# oku diyorsun iyi güzelde nereye kadar okusun makine. sonsuza kadar ordan veri gelmesini beklidiğin için hata veriyor ve bu sonsuza kadar veri okumadan sana cevap vermek istemiyor. yani bu fonksiyonu kullanacağın zaman ReadTimeOut a değer vermen gerekiyor ki belli bi süreye kadar okuma yapsın. bence bu fonksiyonu kullanma getbytes fonksiyonu daha mantıklı. ayrıca bu şekilde bi kod yazarsan bilgisayarına veriyi bir seferinde çekersin ikinci kez program patlar programa kanallar eklemezsen yeni gelen verileri alamazsın. takıldığın yer olursa yardımcı olurum
http://www.dosya.tc/server12/D3azKM/ComPortClient.rar.html

mfy40@hotmail.com / Fatih yorulmaz

micelow

   Estağfurullah, verdiğin bilgiler ilaç gibi geldi çok teşekkür ederim.
ReadTimeOut süresi ayarı ve verinin alınmasından sonraki aşamaları
                   
             private void button1_Click(object sender, SerialDataReceivedEventArgs e)
        {
         }
    bloğuna yazmam problemi büyük ölçüde çözdü fakat program hala tam olarak kararlı çalışır durumda değil bununda nedeni dediğin gibi kanallar eklememiş olmam.Thread ve Delegate konularına henüz vakıf olmadığımdan şimdilik formun load olayına yazdığım " CheckForIllegalCrossThreadCalls = false " komutu ile geçici bir çözüm elde ettim.Devreyi kurup fiziksel bağlantı ile çalıştırmak kaldı.Yardımlarınız için teşekkür ederim.
"Bir tek şeye ihtiyacımız var çalışkan olmak."