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
  Cas Terazi Veri gönderimi Delphi sürüm sorunu KUNTAY 12 4.300 08-11-2023, Saat: 00:06
Son Yorum: berkan
  TCMB Kur Almada Explorer Sertifika Sorunu Adem Kurt 3 580 24-10-2023, Saat: 15:14
Son Yorum: RAD Coder
  program exe icon sorunu cvheneburi 9 2.726 19-10-2023, Saat: 15:04
Son Yorum: harunyl
  TThread.Synchronize çalışmama sorunu muratmutlu 3 587 10-10-2023, Saat: 12:16
Son Yorum: Tuğrul HELVACI
  FastReport detail tablo gösterim sorunu Frrst 12 1.730 14-07-2023, Saat: 17:10
Son Yorum: hi_selamlar



Konuyu Okuyanlar: 1 Ziyaretçi