Led sondur yak projesini vb.net uyarladım. Led yakıp söndürüyor.Fakat ben her zaman pic bilgi göndermesini isitemiyorum. Css de pic veri göndermesini erteliyorum.
my_hid.ReadPipe(gelen_buffer, 84, TransactionType.Interrupt) satırında time out hatası veriyor.
Hatayı es geçmesi için On error goto xxxxx ve oneror resume next komutlarını kullandım. Bu eror komutunu bir defa işletirse bu sefer picden data gelse bile dataları okumuyor.Çözüm önerilerinizi bekliyorum.
Private Sub btn_oku_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btn_oku.Click
On Error GoTo BtnOkuHata
If my_hid.IsOpen Then
'OkuHandler my_oku = new OkuHandler(Oku);
'my_oku.BeginInvoke(new AsyncCallback(IslemTamam), null);
txt_okunan.Text = ""
my_buffer(3) = AscW("o"c)
If my_hid.IsWindowsXpOrLater Then
my_hid.WritePipe(my_buffer, TransactionType.Interrupt)
Else
my_hid.WritePipe(my_buffer, TransactionType.Control)
End If
If my_hid.IsWindowsXpOrLater Then
my_hid.ReadPipe(gelen_buffer, 84, TransactionType.Interrupt) ' Bu satırda time out hatası veriyor.
Else
my_hid.ReadPipe(gelen_buffer, 84, TransactionType.Control)
End If
txt_okunan.Text = Convert.ToString(gelen_buffer(2))
Else
txt_durum.Text = "Cihaz ile bağlantı yok!"
End If
GoTo BtnOkuson
BtnOkuHata:
Exit Sub
BtnOkuson:
End Sub
pic in data göndermesini engelliyorum derken, pooling yapmasını nasıl sağlıyorsunuz. yani usb cihaz bir müdder bilgi göndermrsze ve "ben buradayım" demezse PC cihazı deattach eder.
Pic in data gönderme işini porta yani butona bağladım.
if(Input(Pin_Oku)==0)
{
Delay_ms(10);
//Generate_tone(G_note[2],200);
Lab_Pinoku_Bekle1:
if(Input(Pin_Oku)==0){goto Lab_Pinoku_Bekle1;}
paket[0]=10;
paket[1]=11;
paket[63]=63;
paket[64]=64;
paket[65]=65;
paket[83]=83;
paket[84]=84;
Delay_ms(10);
usb_put_packet(UcNokta1, paket, 84, USB_DTS_TOGGLE);//84 Pakti gonder
Lcd_Mesaj_TestOkundu();
Mikro denetleyiciye optik okuma görevi sırasında usb yi cevab vermemesi gerkiyor.Optik okuma sırasında gecikmeler us süresince önemli. Esasında meşgul pic den meşgul iletisi alabilsem olur.
-Bağlandıktan sonra data alış veriş yapmadan 1 dakika bekledim pic deki butana bastım. sonra vb.net den okudum. Bağlantı problemi olmadı . Win7 64 bit isis ile deniyorum. deattach bir bağlantı problemi olmadı.Ancak picden veri göndermeden Vb.net den veri okumaya kalkarsam time out hatası alıyorum.
ccs bilmem. ama veri gönderilmediği zaman bağlantının kopmaması için bir "ben buradayım" komutunun olması gerek.
Sizin dedğiniz muhakkak doğrudur.Usb cihazları bağlantı kuran cihazlar. Ana programdan hariç arka planda kesme oluşturup bağlantı sağlıyor olabilirmi. Ben sadece Paket dizisini gönderme kısmını butona bağladım.
Alıntı yapılan: rree - 19 Haziran 2012, 01:02:42
Ancak picden veri göndermeden Vb.net den veri okumaya kalkarsam time out hatası alıyorum.
PC Get Report ile cihazdan okuma isteginde bulunursa buna karsilik cihaz veri yollamazsa time out sure dolumunda hata verecek tabiki.
PC ile cihaz arasinda yazilimsal bir handshake mekanizmasi kurabilirsin.
Epey uğraştım geçici bir çözüm buldum işimi görecek kotlar aşağıda.
-TimeOut değerini 0 atadım
- Hata oluştuğunda Hata etiketine My_hid. close sonrada My_hid.open komutları ile tekrara bağlantı kurdum
- Şimdiki durum okuma butonuna basınca data yosa "0" değerini dönüyor vars ise pic deki değer ulaşıyor.
- Daha iyi çözüm bilen varsa, mesajlarını beklerim. İlgilenen arkadaşlara teşekkür.
Private Sub btn_oku_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btn_oku.Click
On Error GoTo ErrorHandler
If my_hid.IsOpen Then
'OkuHandler my_oku = new OkuHandler(Oku);
'my_oku.BeginInvoke(new AsyncCallback(IslemTamam), null);
txt_okunan.Text = ""
my_buffer(3) = AscW("o"c)
If my_hid.IsWindowsXpOrLater Then
my_hid.WritePipe(my_buffer, TransactionType.Interrupt)
Else
my_hid.WritePipe(my_buffer, TransactionType.Control)
End If
my_hid.ReadTimeOut = 0
If my_hid.IsWindowsXpOrLater Then
'my_hid.ReadPipe(gelen_buffer, 84, TransactionType.Control)
my_hid.ReadPipe(gelen_buffer, 84, TransactionType.Interrupt)
Else
my_hid.ReadPipe(gelen_buffer, 84, TransactionType.Control)
End If
txt_okunan.Text = Convert.ToString(gelen_buffer(2))
Else
txt_durum.Text = "Cihaz ile bağlantı yok!"
End If
Exit Sub
ErrorHandler:
If my_hid.IsOpen Then
my_hid.ClosePipe()
End If
If (Not my_hid.IsOpen) Then
If my_hid.OpenPipe(VendorID, ProductID) Then
End If
End If
Exit Sub
End Sub