Mscomm ve dizi içine byte alma...?

Başlatan sitenindelisi, 16 Mart 2008, 22:13:04

sitenindelisi

VB ile yapmam gereken bir arayuz var. com1 uzerinden 10 byte bilgiyi alip bir dizi icine kaydetmem gerekiyor. 10 byte bilgi 2400 baud ile gelecek ve 10 adet textbox icinde gösterilecek ve yeni bilgiyi gelinceye kadar dizi icinde  kalacak .

Daha önce VB ile calısmadim. İlk defa kod yazıyorum( bu durumu goz onune alirsa yardim edecek arkadaslar sevinirim)

Su an icin devre ile vb yi haberlestirdim. Devreden gelen bilgileri 1 byte seklinde textbox icinde gosterebiliyorum ve diger textbox icine yazdıgım bilgiyi devreye gonderebiliyorum.
Takıldıgım nokta; mscomm` dan  gelen datayi nasil dizi icine alabilirim?
Paketim 10 byte ve ben bunu g_data(0),g_data(1) ... seklinde kayit etmek istiyorum...

kadirbas

Selamlar.

Sanırım bunu yapmanın birden fazla yolu var.

Bunlardan biri, bir indeks değeri tutmak ve seri porttan her veri gelişinde

With MSComm1
       Select Case .CommEvent
            Case comEvReceive
                g_data(receiveIndex) = .Input
                receiveIndex = receiveIndex + 1

         .
         .


şeklinde veriyi istediğiniz tampon alanının ilgili yerine koymak şeklinde olabilir.

Bir diğeri ise .InBufferCount değerini (ki bu değer normalde seri port tampon alanına birikmiş olan veriyi gösterir) kontrol edip, istediğiniz değere geldiğinde (ki bu değer sizin vermiş olduğunuz örnek için 10) hepsini birden çekmek şeklinde olabilir.

Bir diğer yol ise, .InputLen değerini çekmek istediğiniz karakter sayısına ayarlamak. Bu sayede her defasında istediğiniz sayıda karakter gelene kadar .Input fonksiyonu size boş string (yani "") döndürecek. Sizin örneğinizde 10 byte istediğinizi düşünürsek, 10 byte tamamlandığında .Input fonksiyonundan tamamını alabilirsiniz.

Dim CommData as String

MSComm1.InputLen = 10
CommData = MSComm1.Input


Benim aklıma gelenler şimdilik bu kadar.

Veli B.

Tesekkur ederim, lakin gordugum kadarı ile vb de degiskeni string tanımlarsak sadece ascii olarak alabiliyor. Ben ise ascii kullanmayacagim. Bu durumda variant veya byte kullanip, mscomm input metodu ise text değil binary yapmaliyim, dogru mu?
Edit:
String olarak aldım ve hiç içime sinmediği halde bu şekilde şimdilik sorunu çözdüm. İlgilenen arkadaşlara teşekkür ederim.

sdonmez

ben de PIC ve PC tarafından dizi içinde saklanan 10 byte veriyi karşılıklı olarak birbirlerine gönderebilmek istiyorum.
Buradaki
dosyanın 11. sayfasının sonundaki gibi mscomm.input ile okunan veriyi direkt dizi içine atmayı denediğimde hata veriyor.  Hata mı yapıyorum anlayamadım.  Nasıl bir yöntem kullanılabilir?