Konuyu Oyla:
  • Derecelendirme: 0/5 - 0 oy
  • 1
  • 2
  • 3
  • 4
  • 5
Port asılı kalma sorunu.
#1
Merhaba. Serial porttan veri alıp gönderiyorum. Olursa işlem yaparken bağlantı koparsa closehandle yaptığım halde genede port kullanılıyor gözüküyor. Port kullanılıyor gözüktüğü için tekrar açma işlemi yapamıyorum. Ancak usb söküp takarsam o zaman ancak kapatıyor. Nerede hata yapıyorum ?  Yardımcı olursanız sevinirim.


Port açma işlemini şu şekilde yapıyorum.


      UsbHandle := CreateFile(PWideChar(DevicePath), GENERIC_READ or

       GENERIC_WRITE, 0, nil, OPEN_EXISTING, FILE_ATTRIBUTE_NORMAL, 0);

Set işlemini şu şekilde.

      if not SetupComm(UsbHandle, AdjustmentData.RxBufferSize,
       AdjustmentData.TxBufferSize) then
       Exit;

     DCB.BaudRate := AdjustmentData.Baud;

     DCB.Parity := 0;
     DCB.ByteSize := 8;
     DCB.StopBits := 0;
     DCB.EvtChar := #10;



     if not SetCommState(UsbHandle, DCB) then
       Exit;

     if not SetCommMask(UsbHandle, EV_RXCHAR or EV_ERR) then
       Exit;
     with CommTimeouts do
     begin
       ReadIntervalTimeout := AdjustmentData.ReadIntervalTimeout;
       ReadTotalTimeoutMultiplier := AdjustmentData.ReadTotalTimeoutMultiplier;
       ReadTotalTimeoutConstant := AdjustmentData.ReadTotalTimeoutConstant;
       WriteTotalTimeoutMultiplier :=
         AdjustmentData.WriteTotalTimeoutMultiplier;
       WriteTotalTimeoutConstant := AdjustmentData.WriteTotalTimeoutConstant;
     end;
     if not SetCommTimeouts(UsbHandle, CommTimeouts) then
       Exit;

Close işleminide şu şekilde.

      PurgeComm(UsbHandle, PURGE_TXABORT or PURGE_RXABORT or PURGE_TXCLEAR or
       PURGE_RXCLEAR);
     CloseHandle(UsbHandle);
Cevapla
#2
Seri adaptörün USB bağlantılı olduğunu değerlendiriyorum ( kodda USBHandle gördüm )
 
USB Comport hemen işleme alıp kapanamıyor. Windows sürücü sorunsalı...

Buna çare, port açmak için bir döngü ile kendiliğinden kapanma anını bulup, yeniden açılmasını art arda tekrar denemek.

Aşağıdaki deneme art arda önce 10 milisaniye sonra 20, sonra 30 ....  100 milisaniye bekleyerek (10) kere  bağlanmaya çalışır.


Kodunuz ( temsilidir..  Smile )
procedure TForm1.BitBtn1Click(Sender: TObject);
var
 i           : Integer;
 aSuccess    : Boolean;
 UsbHandle   : THandle;
 DevicePath  : String;
begin
 DevicePath := // Sizin cihazın path
 i := 0;
 repeat
   Inc(i);
   UsbHandle := CreateFile(  PWideChar(DevicePath), GENERIC_READ or GENERIC_WRITE,
                             0, nil, OPEN_EXISTING, FILE_ATTRIBUTE_NORMAL, 0);
   aSuccess := ( UsbHandle <> INVALID_HANDLE_VALUE);
   if not aSuccess
     then Sleep(i * 10); // her defasında biraz daha uzun bekler...
 until aSuccess or ( i >= 10);
end;
Saygılarımla
Muharrem ARMAN

guplouajuixjzfm15eqb.gif


Cevapla
#3
(09-05-2020, Saat: 15:08)mrmarman Adlı Kullanıcıdan Alıntı: Seri adaptörün USB bağlantılı olduğunu değerlendiriyorum ( kodda USBHandle gördüm )
 
USB Comport hemen işleme alıp kapanamıyor. Windows sürücü sorunsalı...

Buna çare, port açmak için bir döngü ile kendiliğinden kapanma anını bulup, yeniden açılmasını art arda tekrar denemek.

Aşağıdaki deneme art arda önce 10 milisaniye sonra 20, sonra 30 ....  100 milisaniye bekleyerek (10) kere  bağlanmaya çalışır.


Kodunuz ( temsilidir..  Smile )
procedure TForm1.BitBtn1Click(Sender: TObject);
var
 i           : Integer;
 aSuccess    : Boolean;
 UsbHandle   : THandle;
 DevicePath  : String;
begin
 DevicePath := // Sizin cihazın path
 i := 0;
 repeat
   Inc(i);
   UsbHandle := CreateFile(  PWideChar(DevicePath), GENERIC_READ or GENERIC_WRITE,
                             0, nil, OPEN_EXISTING, FILE_ATTRIBUTE_NORMAL, 0);
   aSuccess := ( UsbHandle <> INVALID_HANDLE_VALUE);
   if not aSuccess
     then Sleep(i * 10); // her defasında biraz daha uzun bekler...
 until aSuccess or ( i >= 10);
end;

Hocam cevap verdiğiniz için teşekkür ederim şuan sorun çözülmüş gibi gözüküyor. Aslında uzun süredir serial üzerine çalışıyorum ama çözümün aslında gözümün önünde olduğunu görmem baya zamanımı aldı Smile Tekrardan teşekkür ederim.
Cevapla


Konu ile Alakalı Benzer Konular
Konular Yazar Yorumlar Okunma Son Yorum
  Locate ve Lookup TR Karakter sorunu narkotik 3 1.280 15-06-2020, Saat: 16:49
Son Yorum: samsaros@gmail.com
  Delphi 10.3 Rest Debugger sorunu varyemez 4 295 31-05-2020, Saat: 01:36
Son Yorum: varyemez
  OrangeUI çoklu dil sorunu nguzeller 0 185 17-05-2020, Saat: 12:15
Son Yorum: nguzeller
  JSON UTF8 Sorunu pro_imaj 0 220 05-05-2020, Saat: 00:26
Son Yorum: pro_imaj
  delphi clamav library sorunu, eroniko 6 653 27-04-2020, Saat: 03:27
Son Yorum: eroniko



Konuyu Okuyanlar: 1 Ziyaretçi