Visual Basic te TEmel olarak Seri port Kullanımı

Başlatan INFINITY, 22 Kasım 2006, 23:39:07

INFINITY

arkadaslar forumda epey bi örnek var yalnız ben hem kendim icin hemde diger arkadaslar icin temelden visual basic te seri port kullanımını burada işleyelim derim...
öncelikle sorularım şunlar...

1. seri port kullanmak icin vb aynı inpout.dll veya benzeri bişey daha eklememiz gerekiyormu...
2. en basit şekilde vb de 1 tusuna basinca porta bagli olan max232 ye bagli olan pic16f877 nin bi bacagindaki ledi yakan bir program örnegi verebilirmisiniz....?

şimdiden teşekkürler..
Elektron Hacısı Çekirdek Kabesini Tavafta...  Eğer atomda çekirdek ile elektron arasındaki boşluk yok olursa 1 çay kaşığı toprak 40.000 Ton gelir.

OG

"MSCOMM" veya alternatifleri anahtar kelimeniz.
FORUMU İLGİLENDİREN KONULARA ÖM İLE CEVAP VERİLMEZ.

rree

Bend Lpt için arıyorum  Daha önce Vbio.dll  dosyayı bağlamıştım.
İşletim Win98 den Xp geçine çalışmaz oldu. Port ulaşımı Qbasic de
bile var Visual basic  de yok. Io   Dll dosyasını kendimiz yazamazmıyız.
Adını hatırladığım kadar daha önce MsDos yazılım kesmesinde bir çok
fonksiyon vardı  Windows Xp Sp2 böyle bir yaklaşım varmı bilen arkadaş bilgisini bizimle paylaşırsa memnun olurum.

mhk

Herşey win XP den kaynaklanıyor. Paralel port çıkışına izin vermiyor. Seri portta sorun yok. XP altında paralel port kullanmak için internette dosyalar vardı lakin isimlerini hatırlamıyorum. Aratırsan bulabilirsin.
"Ya olduğun gibi görün, Ya da göründüğün gibi ol..." Mevlana

sdonmez

seri porttan VB ile veri okumak için yapmanız gereken projenize MSCOMM nesnesini ekleme. ardında RThresold değerini 1 yapmak. Diğer parametreleri de haberleşme  ayarlarını "9600,n,8,1" gibi yapmanız gerekiyor.

okuma örneği için;

Private Sub MSComm1_OnComm()

   If MSComm1.CommEvent = comEvReceive Then
       gelenbilgi = MSComm1.Input
       databilgisi = Asc(gelenbilgi)
       
       If databilgisi = 65 Then
           serinumara = 0
       ElseIf databilgisi = 67 Then
           serinumara = 1
       End If
       
       If databilgisi <> 65 And databilgisi <> 67 Then
           If serinumara = 0 Then
               input_data = databilgisi
               input_goster (input_data)
           ElseIf serinumara = 1 Then
               output_data = databilgisi
               output_goster (output_data)
           End If
       End If
           
   End If
   
End Sub

bi uygulama için yazdığım koddu bu...

INFINITY

koskocaman teşekkürler arkadaslar
Elektron Hacısı Çekirdek Kabesini Tavafta...  Eğer atomda çekirdek ile elektron arasındaki boşluk yok olursa 1 çay kaşığı toprak 40.000 Ton gelir.

tnen

Merhaba arkadaşlar
VB ile comporttan okunan sıcaklık bilgisine bağlı olarak VB de grafik çizdirmek istiyorum bunun nasıl yapılacağı konusunda yardımlarınızı bekliyorum.
Proje ana khatlarıyla şu şekilde comporttan alınan sıcaklık verisi surekli ekranda gorulecek fakat belirli bir sureyle periyodik olarak bir dosyaya yazılacak ve yazılan bu dosya ismi tarihe bağlı olarak değişecek yani bugun bir dosya oluşacak tarih değiştiği anda yeni bir dosya oluşturulacak.Programın açılp kapanması ile dosyadaki veriler kaybolmayacak ve program kayıt etmeye kaldığı yerden devam edecek.
İstenildiğinde ilgili dosyadan yada online olarak grafik elde edilebilecek bunu nasıl halledebiliriz.
Yardımlarınız için şimdiden teşekkurler.

apollaa

tnen hocam güzel bi konuya değinmiş
buna ek olarak bu kayıtları access te tablo halinde nasıl saklayabiliriz.
Vatan Sizden Hizmet Bekler ( Her Alanda)

paradox

arkadaşlar bende seri porttan pic16f877 vasıtası ile veri almak istiyorum.fakat 877 de 10 bit adc çözünürlüğü var.benim bildiğim seri port 8n1 kuralına göre veri alıyor yani toplam 10 bit.fakat benim elimde bu şekilde 12 bit oluyo.bunu nasıl programlıycaz acaba.

bu konuya forumda bir yer bulamadım kusurabakmayın.birde ben 877 nin adc sinden gelen verileri seri port vasıtası ile dat dostası olarak kaydetmek istiyorum bu mümkünmü.nolur yardım edin kaç gündür halledemedim bu sorunu...

tnen

Paradox hocam senin ADC den okuduğun değer 0-1023 arasındadır. Eğer seri porttan bunu yollamak istersen bunda herhangi bir problem çıkmaz .Fakat visual basic tarafında bunun cozmen gerekecek. Çünkü yollanan deger seri porta karakterlerin ascii kodunda yollanır.Demek istediğim şu mesela senin yollamak istediğin deger 512 ise seri porttan önce 5 sonra 1 sonrada 2 nin ascii karşılığı yollanır.Visual basic tarafında n kadar data geldiğinde kesme oluştur ve bufferdaki datayı oku diyebilirsin. Olay zaten burada tıkanıyor benim için sonuçta yollanılan deger 0-1023   arasında yani tek karakterde yollanabilir 4 karakterde eger 4 karakter dersek 4 karakterden daha az data yollandığında data birbirine karısacak gibi.

Eğer çözüm bulamazsan kaç karakterde kesme oluşacağı konusunda benim yaptığım gibi tam türk usulü bir yöntem kullanabilirsin.Yani elde ettiğin dataya 1000 ekleyip o şekilde yolla. bu sayede en küçük data 1000 en büyük data 2023 olacak  4 data gelince kesme oluşturup datayı al 1000 çıkar. kolay gelsin.

Bu arada benim projedeki tarihe göre dosya açmayı şu şekilde hallettim.
file = "c:\vbdenemeler\deneme1\" & Date$ & ".txt"
Open file For Append As #1
seklinde hallettim.
Geriye dönük dataların elde edilmesine gelince trendviewer isinli bir program üzerinde çalışıyorum. Herkese kolay gelsin

paradox

@tnen hocam verdiğin bilgiler için sağol.
dediğin gibi biraz karışıyo ve bunu yapabilecek kadar visual basic bilgim yok şuanda.onun için adc yi 8 bit olarak okumaya karar verdim.
sanırım 8 bit okuduğumuzda seri porttan direk bu veriyi alabiliriz.
peki aldığımız veriyi nasıl kaydedebilirim.bunu biraz açıklayabilirminiz.
mesela bir fonksiyona atıp adresi her gelen veride 1 arttırıp bu şekilde alsam bunu kaydedebilirmiyim.sanırm bu şekilde kayır oluyomuş. ama nasıl tam bilmiyorum

paradox

merhaba üstte belirtmiş olduğum adc uygulamasında şuan picten pc ye veri gönderebiliyorum.veriyi deciamal formatta gönderdim.hyperterminal vasıtası ile de veriyi görebildim.
şuan arayüz yapmakla uğraşıyorum.birkaç konuda yardımınıza ihtiyacım var.
şimdi gelen veriyi grafiksel çizdirmem gerek fakat önce hyperterminalde ki gibi vb ile veriyi almayı deniyceğim.bunun için listboxu kullanmayı düşündüm.
yukarıda vb ile veri alımıyla ilgili bir kod verimiş.şimdi bu koda göre gelen veriye atanan ve sürekli olarak değişen veriyi listboxta nasıl gösterebilirim.sorunum şu listboxta altalta her gelen veri gözükecek.bunu yapamadım.
birde üstteki programda ;
Alıntı YapIf MSComm1.CommEvent = comEvReceive Then
gelenbilgi = MSComm1.Input
databilgisi = Asc(gelenbilgi)

bölümünde dinleme yapılıyormu.yani comevereceive ne demek ?ben dinleme yapmasını ve ne zaman geleceği belli olamayan veriyi geldiğinde almasıını istiyorum.yardımcı olursanız sevinirim.
kolay gelsin...