NI Ürünleri İle İlgili Tartışmalar

cancel
Showing results for 
Search instead for 
Did you mean: 

Serial Port Cummunication Problem

Öncelikle Merhabalar;
Elimde bulunan MSP430G2553 ile LabVIEW üzerinden Serial Communication kullanarak haberleşmek istiyorum. Bunun içinde internette bulduğum ve ekledğim dökümanı kullandım.

Resimde hem kod hemde bilgisayarın kitlendiğini görülüyor.

Yardımlarınız için şimdiden teşekkür ederim.

Download All
0 Kudos
Message 1 of 13
(10,844 Views)

1.Aynı porta iki farklı referans ile erişmeye çalışmanız hatalı. Tek kaynak (VISA Resource Name) üzerinden yazma/okuma yapmalısınız.

2.Yazma ile okuma arasına bekleme koymalısınız (örneğin 20ms). Zira karşıdaki cihazın verdiğiniz sorguyu işlemesi ve cevaplaması zaman alacaktır.

3.Okurken "Bytes at Port" kullanın.

4.Döngüyü kaldırın ya da belli döngü süresi koyun.Böylece portu donanımın kaldıracağından daha hızlı meşgul etmemiş olursunuz.

5.İşiniz bitince seri haberleşme referanslarını "VISA Close.vi" kullanarak kapatın.

6.Döngü kullanacaksanız referans açma ve kapatma işlemlerini döngü dışında yapın. Döngü içinde yazma/okuma işlemleri olsun.

Örnekler içerisindeki "Simple Serial.vi" ı incelemenizi öneririm.

Serial.png

0 Kudos
Message 2 of 13
(10,126 Views)

Verdğiniz VI 2014 de çalışmıyor. Yapmak istediğimiz istediğim aslında daha önceki sorum ile aynı Xbee veya direk msp430 a RS232 üzerinden joystick ile kontrol etmek istiyorum. Bunun için mutlaka gecikmemi koymam lazım.?

0 Kudos
Message 3 of 13
(10,127 Views)

Tek yönlü yazma/okuma yapıyorsanız yani sadece gönderiyor yada sadece alıyorsanız nispeten daha kolay bir işlem yapıyorsunuz. Sadece yazma işlemi yapmak daha da kolay. Bağlantı tamamsa (donanıma da bağlı olarak) istediğiniz zaman veriyi kanala yazarsınız. O an bir hata almamışsanız verinin karşıya iletildiğini varsayarsınız. Okurken (dinlerken) ise iki ana unsur öne çıkıyor. Donanım el veriyorsa kesme (interrupt) üzerinden kanalı dinlersiniz ve genelde paket şeklinde veriyi alırsınız. Kesme yoksa kanalı belli aralıklarla kontrol eder ve aldığınız verileri toplayarak belli karakterleri de takip ederek paketi elde edersiniz.

Çift yönlü haberleşmek ise biraz daha zordur. Sorgulama ve karşıdan cevap alma şeklinde işleyen bu haberleşmede sorgulamanın yapılmasından başlayarak karşı tarafın veriyi alıp işlemesi ve geri cevap yollamasına kadar süre geçecektir (bu süre kanal hızına ve karşıdaki donanımın işlem süresine doğrudan bağlıdır). Bu süre zarfında sizin cevap beklediğiniz kanalda herhangi bir veri olmayacaktır. Haberleştiğiniz cihazın özelliklerinde bu sürenin yaklaşık ne kadar olduğu yazılıdır. Bu süreyi esas alarak bekleme belirler ve birkaç kere kanalı kontrol ederek okuma yaparsınız. Bu eşzamanlı (senkron) haberleşme olur. Yani sorgulama yapar ve cevap beklersiniz. Diğer karşılıklı haberleşme ise eşzamansız (asenkron) haberleşmedir. Bu haberleşmede yazma işi bir görevde okuma (dinleme) işi başka görevde yürütülür. Yani okuma ve yazma birbirinden bağımsız çalışan görevlerdir. Sorgulama istediğiniz zaman kanala veriyi yazarsınız ve o görevde cevap beklemezsiniz. Kanalı dinleyen diğer göreve cevap geldiğinde ise gelen cevabı ilgili işleme sevk (dispatch) edersiniz. Eşzamansız haberleşmeden alınan cevabın hangi sorgu ile ilişkili olduğunu bilmek gerekir. Karşıdaki cihaz (bilgisayar da olabilir) yolladığı cevabın içerisinde sorgu tipi ile ilgili bilgi vermelidir. Yoksa okunan veri ilişkilendirilemez.

Çift yönlü haberleşme yapmak istiyorsanız ve şartlar değişken değilse kolay olması sebebiyle eş zamanlı haberleşin. Sorgulama metnini gönderin, bir süre bekleyin ve kanalı kontrol ederek cevabı okuyun.

Kolay gelsin.

0 Kudos
Message 4 of 13
(10,127 Views)

Tamam demek istediğinizi anladım O zaman sadece yazma işlemini yapacağım.

Birde bu anlattığınız sistem TCP/IP içinde geçerli mi?

Örneğin elimde Ethernet modulü var haberleşme yaptım ve çalışıyor. Bunun üzerinden TCP/IP yapsam da durum aynı mıdır?

0 Kudos
Message 5 of 13
(10,127 Views)

Mantık genel olarak aynıdır. Zaten yazıyı özellikle seri haberleşme için değil genel amaçlı yazdım. TCP/IP için biraz daha detaylandırayım.

1.TCP/IP haberleşmesinde bir taraf sunucu (host) diğer taraf(lar) istemci olur. Sunucu tarafı ilgili kanalı (portu) dinleyerek gelen bağlantıları takip eder ve iki taraf arasında bağlantı oluşturur.

2.Bağlantı bir kere sağlandığında bağlantının referansı üzerinden okuma/yazma yapar.

3.İstemci tarafında iş daha kolaydır. Sunucu adresi ve kanalı (port) belirterek karşı tarafa bağlantı isteği yapar. Bağlantı başarılı olursa bu bağlantı referansı ile okuma/yazma yapabilir.

4.Yazma işlemi yine istenildiği anda yapılabilir.

5.Okuma ise anlık yada ara bellek (buffered) yöntemleri ile yapılabilir. Ara bellek kullanırken belli sonlandırma yada veri uzunluğu belirlenerek verinin tamamlanması beklenir.

6.TCP/IP haberleşme kullanırken eş zamansız (asenkron) haberleşmenizi öneririm. Her bağlantı için dinamik bir "dinleyici" (Listener) açarak bağlantıları bağımsız takip edin.

7.Bağlantı kesilmesi durumunu ise karşılıklı "canlıtut" (keepalive) sinyalleri göndererek kontrol edebilirsiniz.

https://en.wikipedia.org/wiki/Keepalive

8.Dinleme yaparken veri boyutu üzerinden dinlemek daha kararlı netice verecektir. Zira TCP/IP haberleşmesi paket esasına göre değildir (yayın ""stream" esaslıdır). Bunun için sabit uzunluklu öncül bit pakette (mesela 4 karakter) gelecek asıl bilginin uzunluğu gönderilir. Okuyan taraf önce bu 4 karakteri bekler. Bu 4 karaktere bağlı olarak gelecek asıl paketin uzunluğunu tespit eder ve asıl veri uzunluğunu buna göre okur.

Örnekler içerisindeki "TCP Multiple Connections.lvproj" u incelemenizi öneririm.

Kolay gelsin.

0 Kudos
Message 6 of 13
(10,127 Views)

Zafer Bey;

Şimdi gönderdiğiniz VI'yı çalıştırdım da bir sorum olacak bende kendim normalde bir tane farklı şekilde yaptım sdaece " write " olarak yani tek yönlü çalışması için.

Örneğin ben konsoldan aldığım veya klavyeden aldığım birden çok girdiği mspye göndermek istiyorum bunun için nasıl bir  "array" veya "string" oluşturmam lazım acaba?Resim01.png

0 Kudos
Message 7 of 13
(10,127 Views)

Aynı VI içerisinden okuma kısmını silin. Göndermek istediğiniz veriyi metin olarak porta yazın.

0 Kudos
Message 8 of 13
(10,127 Views)

yani joystickten aldığım bilgileri metin haline getirip ardından okuma yaptırmam lazım doğru mu?

0 Kudos
Message 9 of 13
(10,127 Views)

Ne alınan bilgiyi ne de gönderilmesi gereken bilginin nasıl olması gerektiğini biliyorum. Demek istediğim verileri metin olarak topluca gönderebileceğiniz. Karşı taraf böyle bir veriyi alacak şekilde tasarlandıysa sorun çıkmayacaktır.

0 Kudos
Message 10 of 13
(10,127 Views)