Port COM w windowsie i ustawianie jego prędkoś

Sep 04, 2007 50 Replies

Mała uwaga: ten kod to kod po paru eksperymentach z róznymi ustawieniami w nadziei że trafę na właściwą. A co do tej flagi to na 100% było to copy&paste z jednej ze stron msdn. Acz nie pomnę z której.

To jedna z przeróbek, z length też nie działało.

Czytam i spędziłem już wiele godzin na próbach i eksperymentach.

Nie. Separuje w ten sposób resztę kodu od możliwości pomyłki. Ukrywam również klasę zależną od Win od reszty przenośnego kodu.

To też przeróbka, w niczym nie zmienia sytuacji.

O ile pamiętam, to psrawdzałem, ale zobaczę ponownie jak tylko odrwę go w łapska.

Owszem, ale mam pewne podejrzenia, że cygwin robi to lepiej ode mnie i też mu nie działa na tym jednym.

Ale zauwaz ze sprzet nie musi takiej dopuszczac.

typowy pecetowy tej nie dopuszcza.

J.

Czy po wsadzeniu karty z portami COM do tego felernego komputera problem pozostaje?

Wątek ciekawy, ale pomysły się kończą, może bios update?

z ta liczba to mial byc tylko przyklad; poza tym - wiesz dobrze o co mi chodzilo;

typowy pecet z rs232, czy rs232 z usb umozliwia ustawienie wiekszej liczby roznych predkosci niz tylko te 10-20 "na krzyz" z rozwijanej listy; /wartosc dzielnika nie jest liczba 4-bitowa;

jakbys przeczytal to co napisales, ze przeczytales, to bys z ta flaga nie eksperymentowal :)

...i przy okazji sie ograniczasz :)

a tak powaznie:

  1. jaki to moze miec wplywa na pomylke? wg mnie - znikomy;
  2. jaki to ma miec wplyw na przenosnosc? wg mnie - znikomy; nigdy jeszcze nie spotkalem sie, aby na roznych systemach (win,linux,qnx) te stale mialy rozne wartosci; tzn. to sa liczby rowne ustawionemu bps;

ps. mam nadzieje, ze znajdziesz przyczyne tego "niedzialania", ale jak sprzet dziala, ht sie laczy przez driver portu, to niestety - wypada, ze blad jest w Twoim kodzie :( /sprobuj odpalic lacznosc innymi programami typu ht; jak beda one dzialac, to blad masz nie na 99% ale na 100% :(

z ciekawosci - pod czym dzialasz pod winda? visual c++ 2005 express ?

Użytkownik "Q" snipped-for-privacy@spam.pl napisał w wiadomości news:fbse04$ekl$ snipped-for-privacy@nemesis.news.tpi.pl...

No właśnie - tym tropem bym szedł. Nie każde "zajęcie" portu powoduje niemożność jego otwarcia. Port jest teoretycznie wolny - otwierasz go, ale nie udaje się ustawić parametrów albo pobrać statusu.

Odnośnie flag przy otwieraniu portu - ja zawsze używam: fileopen(handle, GENERIC_READ or GENERIC_WRITE, 0, Nil, OPEN_EXISTING, FILE_ATTRIBUTE_NORMAL, 0);

i zawsze działa.

PrzemekD pisze:

Możesz jeszcze dawać 0 zamiast FILE_ATTRIBUTE_NORMAL - ta flaga ma zastosowanie do plików (na dysku np).

Dariusz Żołna

nie jestem pewien, ale jesli zawolasz CreateFile() z flaga ShareMode ustawiona na 0 (a tak SB otwiera COM'a) i ktos inny juz ma otwarty dany COM (nawet w trybie shared read/write), to raczej nie otworzysz portu (CreateFile() zwroci blad); /ale moze sie myle!

ps. pod np. QNX'em to nawet nie da sie sprawdzic czy cos otworzylo danego rs'a (np. "/dev/ser1"); kazdy proces moze se zrobic open() a potem read() / write() ile razy chce - totalna kaszana :(

Dyskusja juz dluga. Dodam jeszcze ze swojej strony, iz do konfiguracji portu, jak tylko sie da najlepiej uzywac standardowego okna dialogowego windows (poprzed odpowiednie wywolanie..). Ma to te wade, iz jest okno nie zawsze mile widziane w naszym programie. Z drugiej strony rozwiazanie takie dziala niezaleznie od sterownika portu szeregowego. Z tym ostatnim najwiecej problemow, kiedy jest to port COM z USB. Nie wiem jak to Microsoft opracowal, ale to dziwne, ze ich okno dialogowe dziala zawsze poprawnie, a wg MSDN juz roznie, zaleznie od producenta. Moze to tez wina producentow. Nie wiem. Wynika z tego tylko tyle, ze istnieja pola DCB nieudokumentowane lub komentarze ktorych nie sa do konca precyzyjne.

pozdrawiam Janusz

P.S. Trzymajcie kciuki, bo w poniedzialek bronie mgr z fizyki :)

Masz jakis kawalek dokumentacji do tego? Bo prawde powiedziawszy pierwszy raz slysze o takim problemie.

Wlasnie wypilem za powodzenie circa 5l piwa!

Join the Discussion

Have something to add? Share your thoughts — no account required.

Didn't find your answer?

Ask the community — no account required