mscomm dan alınan veri

madmax1

Üye
Katılım
12 Kas 2008
Mesajlar
8
Puanları
1
Yaş
40
Herkese Merhaba
Pic ten bilgisayara rs-232 den veri (diyelimki surekli "hello " yazısı geliyor )gonderiyorum.
bilgisayarda ise visual basic ile
deger=mscomm1.input diyorum ,programı calıstırdıgımda debug yapıyorum
mscomm.input yazısının uzerine mouse ile gelince hellohello.... seklindeki veriyi gorebiliyorum ancak deger uzerine mouse la geliyorum bos veya 0 gosteriyor .
bu yuzden diger yapacagım seyleri yapamıyorum
simdiden yardim icin tesekkurler
 
kullandığın değer (değişken dersen daha iyi anlaşılır) tipini string yapman gerekebilir

dim deger as string gibi...
 
Merhaba,

Dim deger As String

Evet, mutlaka string yap, bu birinci gereken, diğer konu ise Breakpointi

deger=mscomm1.input

satırına değil bir sonraki satıra koy.

Çünkü mscomm nesnesinin Input özelliği okunduğu anda bilgiler silinir, sen mouse ile mscomm1.input a gelip beklediğinde, içerideki bilgiler ekranda göründüğü anda içi boşalır.

Yani önce deger değişkenine veri gitsin, sonra gör.

Bir şey daha soracağım, yazdığın kodları başında 'On Error Resume Next' varsa, ve bir yerde hata gerçekleştiği için program akışın

deger=mscomm1.input

satırına geldiğinde veya daha öncesinde hata verdiği için o satırı işleyemiyor da olabilir.
 
Arkadaşlar seri port ve Basicle ilgili birisi olarak bu konu dikkatimi çekti ve yardımcı olmak istedim. Seri haberleşemede adındanda belli oduğu gibi bilgiler seri halde arka arkaya düzensiz bir şekilde gelirde hellohellohe... gibi hatta paketleri başından yakalayamaz isek canımız çok sıkılır gelen veriler baştan başlamaz "lohellohellohe" gibi olur. bunu ayırmak için gönderdiğin hello yazısının başını herhangi bir karakter kullanmanı tavsiye ederim mesela benim kullandığım !+ gibi. !+ Karakterlerini kullandığında gelen verinin. "lo!+hello!+hel" gibi olduğunu düşünürsek işimiz biraz daha kolaylaşacaktır. Ve verileri sürekli almak için bir timer kullan ve interval değerini 250 yap(daha sonra isteğine göre değiştirebilirsin).
Bunun için yazdığım fonksiyonu paylaşayım.

Private Sub Timer1_Timer()
Dim gelen, bas, tamam As String
gelen = MSComm1.Input ' gelen paketi gelen stringine eşitliyorum
bas = Mid(gelen, 1, 2) ' mid ile gelen paketin ilk 2 karekterini bas stringine eşitliyorum.
If bas = "!+" Then ' eğer gelen paketin ilk 2 karekteri !+ ise
tamam = Mid(gelen, 3, 5) ' gelen verinin 3. karekterinden sonra 5 karakter ayırıyorum
Label1.Caption = tamam ' ve bir labele yazdırıyorum
Else ' Tabi gelen verinin ilk iki karekteri !+ değil ise ....
Label1.Caption = "hata"
End If

inşallah yardımcı olabilmişimdir.
Takıldığınız yer olursa Sorularınızı esirgemeyin.
End Sub
 
OnComm olayını kullanmak çok daha kullanışlı, aksi taktirde Start - stop gibi özel karakterlere ihtiyaç duyuluyor.

Ama genellikle Carriage Return + Line feed ile bitmesi yeterli.
 
OnComm olayını kullanmak çok daha kullanışlı, aksi taktirde Start - stop gibi özel karakterlere ihtiyaç duyuluyor.

Ama genellikle Carriage Return + Line feed ile bitmesi yeterli.

Olabilir hocam benim anlatığım sorunuma kendi kendime geliştirdiğim çözüm.
mscomm onComm hakkında pek bilgim yok daha doğrusu hiç kullanmadım - böyle birşey olduğduğunu duymuşmutum fakat internette de araştırmama rağmen bilgi çöplüğünden başka bir şey bulamadım. Şimdi C# ile çalışıyorum orada işler daha yolunda gidiyor.
 

Forum istatistikleri

Konular
130,118
Mesajlar
933,293
Kullanıcılar
453,187
Son üye
Alex91102

Yeni konular

Geri
Üst