Visual Basic ile Elektronik Sayaç Okuma

mscomm un
InputLen = 0
RThreshold = 1
property leri yukarıdaki gibi olsun..



dim buffer as string 'bu global veya static değişken olacak

alttaki kodlar mscomm un oncomm eventine yazılacak.
Kendine göre düzenlersin..

private sub comm_oncomm

dim i as string
dim stmp as string

do
buffer = buffer & uart.Input
i = instr (buffer, vbcrlf)
if i > 0 then
stmp = left(buffer, i-2)
buffer = mid(buffer , i+2)
i = instr(stmp , "(")
if i > 0 then
vsgrid.additem left(stmp, i-1) & vbtab &mid(stmp ,i)
else
vsgrid.additem stmp
end if
else
exit do
end if
loop until buffer = ""
end sub
 
Son düzenleme:
ComData nın
InputLen = 0
RThreshold = 1

Private Sub ComData_OnComm()

Dim Buffer As String

Select Case ComData.CommEvent

Case comEvReceive
Dim i As String
Dim stmp As String

Do
Buffer = Buffer & ComData.Input
i = InStr(Buffer, vbCrLf)
If i > 0 Then
stmp = Left(Buffer, i - 2)
Buffer = Mid(Buffer, i + 2)
i = InStr(stmp, "(")
If i > 0 Then
vsgrid.AddItem Left(stmp, i - 1) & vbTab & Mid(stmp, i)
Else
vsgrid.AddItem stmp
End If
Else
Exit Do
End If
Loop Until Buffer = ""


End Select
End Sub

olarak düzenledim ama olmadı. gride hiçbişey eklemiyor. Arada sırada bir kaç satır ekledği oldu ama... Program hata vermiyor.

bufferı textboxu da gösterdim bu seferde program kilitlendi.
 
Gelen veriyi hiç bekletmeden alabilmek için inputlen ve RThreshold property lerini comport u açmadan önce set etmelisin.

Buffer = Buffer & ComData.Input
satırı yerine

stmp = ComData.Input
debug.print stmp;
Buffer = Buffer & stmp

bu satırları koyup deneyip debug penceresinde gelen karakterleri bi kontrol et.
Gelen veride sorun yoksa ama gride atmıyorsa muhtemelen satır sonu karakterlerinde sorun var. Bi bak ona göre devam ederiz. Debug dan aldığın veriyi de buraya yazarsın.
 
Sayaçtan ilk alınan byte ve son alınan byte' ı burası kabul etmediği için txt dosyasına kaydettim.

Ancak şu dikkatimi çektim. Normalde benim textboxta gördüğümde her satır sonunda 1 alt satıra geçiyor ama debugda çoğu satırda 2 alt satıra geçiyor.
 

Ekli dosyalar

  • gelen.txt
    1.1 KB · Görüntüleme: 42
  • textboxa elen.txt
    992 bayt · Görüntüleme: 35
Tamam oldu. :D HandleInput satırlarını iptal etmeyi unutmuşum :) Ellerine sağlık çok iyi oldu.
 
Son bir soru daha :D

Bazı satırlarda 2 adet parantez içi bilgisi var. Bunları 3. columna yazdırmak için ne yapabiliriz?
 
Ben de iyi mi okumadım ne ... Vb den anlarım biraz ben x den çok iyi degil
 
Son bir soru daha :D

Bazı satırlarda 2 adet parantez içi bilgisi var. Bunları 3. columna yazdırmak için ne yapabiliriz?

vsgrid.AddItem Left(stmp, i - 1) & vbTab & Mid(stmp, i)

yerine

stmp2 = Mid(stmp, i)
stmp = Left(stmp, i - 1)
i = instr (stmp2, "(" )
vsgrid.AddItem stmp & vbtab & iif(i=0,stmp2, Left(stmp2, i - 1)) & vbTab & iif(i=0,"", Mid(stmp2, i)
 
vsgrid.AddItem Left(stmp, i - 1) & vbTab & Mid(stmp, i)

yerine

stmp2 = Mid(stmp, i)
stmp = Left(stmp, i - 1)
i = instr (stmp2, "(" )
vsgrid.AddItem stmp & vbtab & iif(i=0,stmp2, Left(stmp2, i - 1)) & vbTab & iif(i=0,"", Mid(stmp2, i))

Hocam bu kodu yazınca 2. columnu atlıyor 3. columna yazıyor. Aşağıdaki gibi yapmak istiyorum.

1.6.0(00000)(11111) = 1.6.0=>1. columna, (00000)=>2. columna, (11111)=>3. columna

1.8.0(00000) = 1.8.0=>1. columna, (00000)=>2. columna, !!!3.column boş kalacak.!!!
 
Son düzenleme:
stmp2 = Mid(stmp, i)
stmp = Left(stmp, i - 1)
i = instr (stmp2, "(" )
vsgrid.AddItem stmp & vbtab & iif(i=0,stmp2, Left(stmp2, i - 1)) & vbTab & iif(i=0,"", Mid(stmp2, i)

ilk parantez açı atlamısız anlaşılan. Renkli satırı aşağıdaki gibi yazıp denermisin.
i = instr (2, stmp2, "(" )
 

Forum istatistikleri

Konular
128,126
Mesajlar
915,254
Kullanıcılar
449,841
Son üye
nazoyata

Yeni konular

Geri
Üst