Seri Port, Hyper Terminal, MATLAB

Başlatan mistek, 27 Ekim 2012, 23:32:20

mistek

İşlemciden printf("%f   \r\n",falanca) şeklinde bir değişkeni 115200 baud hızında seriporttan PC ye gönderiyorum ve windowsun hyper terminalinden bilgiyi doğru bir şekilde alıyorum.
Ancak yapmak istediğim bu gelen verinin anlık veya 15-20 saniyesini alıp grafiğini çizdirip karşılaştırma yapmak...
Matlabde biraz uğraştım ancak bi türlü beceremedim serial chart gibi farklı programlarlada denedim yine başarılı olamadım.

Bu bilgiyi nasıl grafiğe dökebilirim? yardımcı olursanız sevinirim...
boş işlerin adamı ---- OHM Kanunu: I = V/R ---- Güç Formülü: P = V*I = I^2*R = V^2/R

ferdem

Gelen seri datanın gerçek zamanlı grafiğe dökülmesi konusu hep aranan istenen bir konu, ben zamanında şöyle bir yöntem kullanmıştım: Eltima nın http://www.eltima.com/products/rs232-data-logger/ programı ile datayı text dosyasına yazıyordum, Matlab den dosyaya erişip grafiği çizdiriyordum, kayıt sürerken dosya erişiminde herhangi bir sıkıntı olmuyor. Matlabda text dosyasının son N datasını alıyordum, yatay ekseni sürekli güncelliyordum vs. Bu gibi işlemleri Matlab'a yaptırabilirsiniz.
Yöntem iş gören bir yöntem ama bu işlem daha verimli yollardan yapılır, forumda konuşulmuş da olabilir. İyi çalışmalar.

Klein

#2
Bir zamanlar bunun için bir program yazmıştım. Ancak Win7'de kullanmak için programın uyumluluk modunda çalıştırılması gerekiyor. Aynı şekilde BDE(borland database engine")'nin de uyumluluk modunda ve yönetici olarak çalıştırılması gerekiyor. Denetim masasından BDE  ayarı yapılabilir.  O zaman 10milisaniyede bir veri alıp işleyebiliyordum. Ama uyumluluk modu yüzünden hızı düşer mi bilmiyorum. Veriyi daha yavaş hızda göndermen gerekebilir.
Program seri portu açarken , karşıdaki cihazın benim kartım olup olmadığını sorguluyor. Senin de buna cevap vermen gerekiyor. Aynı şekilde vari aktarımını başlatmak için de sana bir string gönderiyor.
Protokol basit.  Ben bununla uğraşırım dersen , program linki ve ekran görüntüsü aşağıda. İşimi görür dersen ve İndirdirip çalıştırabilirsen protokolü anlatırım.
 
http://www.dosya.tc/server23/MvH0aH/setup.rar.html



Ekleme:
Grafik üzerinde kaydırma , zumlama vs.. işlemler yapılabiliyor.
Grafik ve datalar yazıcıdan çıktı olarak alınabiliyor.  Dosyaya kaydedilip tekrar açılabiliyor.

mistek

@klein programı indirdim kurdum çalıştı ancak kullanamadım açıkçası işlemcideki baud ayarlarını da bozmak istemiyorum ilginiz için çok teşekkür ederim.

@ferdem programı indirip kurdum teşekkürler dediğiniz gibi txt dosyasına kaydediyor.
İşlemciden aynı anda 3 farklı veri geliyor olsun.  printf("%d   %d     %d",a,b,c); bunların üçünüde aynı anda alıp grafikleri üst üste bindirmek istiyorum txt dosyasına şu şekilde değerler geliyor     
1   2    3
4   5    6
7   8    9
a=fopen('C:\Users\xxx\Desktop\f.txt','r');
[b,sayi]=fscanf(a,'%d',inf)    ile okuduğumda ve ekrana "b" yi yazdırdığımda

b =

     1
     2
     3
     4
     5
     6
     7
     8
     9

şekilde sıralı hale geliyor ve ben istediğimi yapamıyorum bu değerleri sütun olarak nasıl seçebilirim ?
boş işlerin adamı ---- OHM Kanunu: I = V/R ---- Güç Formülü: P = V*I = I^2*R = V^2/R

ferdem

fopen yerine Matlab in importdata fonksiyonu veya benzer fonksiyonlarını kullanabilirsiniz, mdata=importdata('C:\test.txt'); şeklinde daha düzenli, sütunlar ayrılmış şekilde veriyi alabilirsiniz.
Yaptığınız şekilde de olur, tek boyutlu diziyi reshape ile istediğiniz formata getirebilirsiniz, Nx3 boyutlarına getirebilirsiniz ama importdata daha kolay olacaktır. Matlab help ilerlemenizi hızlandırır. İyi çalışmalar.

mistek

Sabahtan beri boşyere zaman kaybetmişim tek tek sütünları alıp dizilere aktarıyordum importdata komutu aynı şeyi 2 satırda yaptı :)
Çok teşekkür ederim
boş işlerin adamı ---- OHM Kanunu: I = V/R ---- Güç Formülü: P = V*I = I^2*R = V^2/R

atillaa

merhaba bende aynı olayı yapmaya çalışıyorum
text den verileri okuyup 3e böldüm veri1 veri2 ve veri3 gibi
ama bunları eşzamanlı çizdirmeye çalıştığımda bir görüntü oluşturamıyorum
yardımcı olabilirmisiniz