logo elektroda
logo elektroda
X
logo elektroda
REKLAMA
REKLAMA
Adblock/uBlockOrigin/AdGuard mogą powodować znikanie niektórych postów z powodu nowej reguły.

[DELPHI] ComPort - jak poprawnie zwolnić port po przesłaniu danych?

axel234 16 Lis 2009 22:42 4373 10
REKLAMA
  • #1 7270687
    axel234
    Poziom 17  
    Posty: 315
    Pomógł: 12
    Ocena: 6
    Witam

    Korzystam z komponentu ComPort do przesyłania danych na port com. Przed przesłaniem danych korzystam z comport1.open, po przesłaniu daję comport1.close.
    Dane przesyłane są prawidłowo, ale jeśli po przesłaniu danych ponownie użyję przycisku, który wysyła dane, aplikacja się zawiesza i dane nie są wysłane. Dopiero jak wyciągnę wtyczkę z portu program się odwiesza i pojawia się komunikat: 'Purge Comm function failed...'

    Wnioskuję, że port jest w jakimś sensie zajęty po pierwszym przesłaniu danych, ale sądziłem, że comport1.close zwalnia port. Chyba się myliłem. Jakiej komendy powinienem użyć, żeby port był 'zwalniany' po każdym przesłaniu danych?
  • REKLAMA
  • #2 7270744
    Dżyszla
    Poziom 42  
    Posty: 7077
    Pomógł: 1095
    Ocena: 226
    Zawiesza się na Open czy na Send? Jakie są ustawienia portu w systemie włącznie z buforowaniem? Najlepiej, jakbyś fragmenty kodu zamieścił.
  • REKLAMA
  • #3 7270793
    axel234
    Poziom 17  
    Posty: 315
    Pomógł: 12
    Ocena: 6
    Sprawdziłem przed sekundą - zawiesza się na open. Kod jest prosty - jest to przesłanie sygnału do drukarki fiskalnej poprzez comport1.writestr(...). Przed wysłaniem jest open a po wysłaniu close. Dla powyższej próby rozpisałem to na trzy buttony - 1.open, 2.writestr, 3.close - program stanął po kliknięciu open.
  • #5 7272068
    axel234
    Poziom 17  
    Posty: 315
    Pomógł: 12
    Ocena: 6
    Po kilkunastu próbach samego otwierania i zamykania, program się nie zawiesił. Jak coś wysłałem to stanął przy próbie otwarcia, ale co ciekawe nie przy pierwszej próbie: po wysłaniu otworzyłem port i zamknąłem i dopiero przy drugiej próbie otwarcia program stanął. Po wyjęciu wtyczki pojawił się komunikat: Unknown error #31 on com16.

    Jeśli dobrze zaobserwowałem to to chyba nie jest reguła - czasem przy pierwszej próbie otwarcia program przestaje odpowiadać, czasem przy drugiej.

    Co jeszcze zaobserwowałem to to, że do drugiego portu obok mam podłączony modem i w momencie kiedy program się zawiesza (program nie korzysta wogóle z modemu ani z portu do którego modem jest podpięty) rozłącza mi internet (nie na modemie tylko po prostu w windowsie). Wystarczy, że też wyjmę wtyczkę modemu z gniazda i włożę ją ponownie i internet znowu działa. Dziwna sytuacja.

    Oczywiście cały czas mówię o portach USB. I drukarka fiskalna i modem są podłączone przez USB.
  • REKLAMA
  • #7 7272139
    axel234
    Poziom 17  
    Posty: 315
    Pomógł: 12
    Ocena: 6
    W jakim sensie czego używam? Tak jak powyżej napisałem używam ComPort, ale domyślam się, że nie o to pytasz(?). Dostałem druk. fiskalną + sterowniki usb producenta do tej drukarki, zainstalowałem i drukarka drukuje prawidłowo.
  • #8 7272166
    Dżyszla
    Poziom 42  
    Posty: 7077
    Pomógł: 1095
    Ocena: 226
    ComPort, ale to jakiś komponent, jakiegoś producenta w jakiejś wersji? Bo sugerowałbym poszukanie jakiejś aktualizacji.
  • #9 7272235
    axel234
    Poziom 17  
    Posty: 315
    Pomógł: 12
    Ocena: 6
    Myślę, że to nie ma związku z komponentem, ponieważ wcześniej używałem serialportng i występowały te same problemy - no chyba, że z tymi dwoma komponentami jest coś nie tak.

    Zauważyłem, że jeśli użyję open ale nie użyje close to wszystko działa prawidłowo. Zamykam program, uruchamiam ponownie, drukuję paragon i program nie wiesza się (przynajmniej po 10 przeprowadzonych próbach).

    ComPort, którego używam to wersja 2.63 - w dokumentacji w dziale 'co nowego' jedną z informacji jest to, że poprawiony został bug nieprawidłowego rozłączania portu.
  • REKLAMA
  • #11 7272840
    Konto nie istnieje
    Konto nie istnieje  

Podsumowanie tematu

LABEL_AI_GENERATED
Użytkownik korzysta z komponentu ComPort do komunikacji z portem COM, jednak napotyka problem z zawieszaniem się aplikacji po wysłaniu danych. Po otwarciu portu (comport1.open) i wysłaniu danych (comport1.writestr(...)), aplikacja przestaje odpowiadać przy ponownym otwarciu portu. Użytkownik zauważył, że problem występuje sporadycznie, a także wpływa na inne urządzenia USB, takie jak modem. Inni uczestnicy dyskusji sugerują sprawdzenie ustawień portu, sterowników drukarki oraz aktualizacji komponentu ComPort. Użytkownik informuje, że wersja ComPort to 2.63, która miała poprawić problemy z rozłączaniem portu. Wskazano również na możliwość, że problem leży w sterownikach drukarki.
Podsumowanie AI na podstawie dyskusji. Może zawierać błędy.
REKLAMA