Port COM w windowsie i ustawianie jego prędkoś

Sep 04, 2007 50 Replies

Witam!



Dziwny problem. Pytam tutaj bo mam nadzieje znaleźć ludzi mających doświadczenie.



Otwieram port COM1 za pomocą mojeg programu. Program używa funkcji api windowsa w celu otwarcia i w zasadzie ... działa.



Jednak na jednym z komputerów nie. Konkretnie to jeden komputer z Windows XP. Po uruchomieniu API windowsa nie zgłasza błędów ale port nie działa na ustawionej prędkości. Działa ja jakieś innej, zdaje się że



1200 bodów.

O dziwo uruchomienie Hyper Terminala, ustawienie prędkości i zamknięcie powoduje, że mój program uruchomiony później działa poprawnie. HyperTerminal robi "coś" w systemie co powoduje ustawienie prędkości. Najciekawsze, że nie ważne na jaką ustawie w Hyper terminalu mój program potrafi później ustawić taką jak powinien.



W zasadzie nie było by sprawy, bład jest u mnie w kodzie gdyby ... tak samo jak mój program zachowuje się dowolna aplikacja pod cywinem. Może ona ustawiać prędkość dopiero po otwarciu i zamknięciu portu przez hyperterminal.



Zupełnie nie wiem gdzie szukać przyczyny. Kodów nie przedstawiam, bo są typowe i jak mówie cygwin też kłopoty.



Może ktoś mający podobny problem wcześniej poratuje mnie szybką informacją co z tym zrobić?



W systemie _teoretycznie_ nie ma nic groźnego. ActiveSync który najwięcej przestawia wyłaczony.


wszystko zalezy czy uzywasz dawnego, standardowego API Windowsow czy tez jakiegos komponentu .net. Jesli chodzi o to pierwsze to polecam zainteresowac sie struktura DCB dla comm.

formatting link
pozdrawiam Janusz

Wszystko to oczywiście robie. Niestety coś "magicznego" w systemie nie pozwala mi zmienić prędkości COM dopóki nie uruchomie HyperTermial. On zwalnia jakąs blokadę i od tej pory mój program może uzywając DCB ustawić co chce. Ponadto podobne kłopoty ma cygwin - też system olewa ustawienia programów w cygwinie do czasu otwarcia i zamknięcia portu przez HyperTerminal. Wtedy wszystko zaczyna działać.

Jestem przekonany że problem dotyczny konkretnego windowsa albo aplikacji w nim z powodu działania wszystkiego na innych komputerach z WinXP. Tylko jeden sprawia kłopoty.

Sprawdziłem też z USB->RS232 - ten sam efekt.

Oczywiście mam prawa administratora. I żadnych podejrzanych programów uruchomionych w systemie.

Dok³adnie sprawd¼ wszystkie pola struktury, która steruje portem. Mo¿e jakie¶ ustawienie sterowania przep³ywem albo jeszcze co¶ innego.Kabelka u¿ywaj ze zwartymi 4-6 i 7-8 (o ile dobrze pamietam).

Po ustawieniu DCB musisz go zapisać f-cją SetCommState(...). Nigdy nie miałem z tym problemu, a program pracuje na kilku tysiącach stanowisk. Poniżej masz przykład.

uzywajac niektorych magicznych USB-RS232 ich sterowniki zmusily mnie do wywolywania w swoim programie oryginalnego dialogu konfiguracji portu z Windows. Po tym zabiegu nie bylo sprzetu, z ktorym program nie chcial dzialac poprawnie. Nigdy wowczas sam nie wypelnialem struktury DCB, gdyz robil to wspomniany dialog.

Janusz

Mialem cos podobnego na w2k. Pomoglo odinstalowanie i zainstalowanie driverow do COMa.

Spróbuj użyć programu do podgladu transmisji przez port szeregowy PortMon

formatting link
to co robi twój program z tym co robi Hyperterminal. AS

Program działa poprawnie na wielu WinXP i nie tylko. Niestety na jednym na którym zalezy mi najbardziej nie chce. Oczywiście reinstalowałem system.

_WSZYSTKO_ co znalazłem w MSDNie jest wypełnione i poprawnie wywoływane nie zwracając błedów. Port mnie po prostu olewa.

Nie ma znaczenia.

Robie prawie dokładnie tak samo. Nie działa na jednym komputerze z WinXP a działa na wielu innych. To zapewne problem z hardware, ale hyper terminal potrafi _coś_ zrobic, że na nim działa ok po użyciu HT.

Nie mogę. Program jest bezobsługowy (startuje wtle jako demon) i w dodatku ... zmienia prędkości w locie praę rzazy na minutę (mam dwa urządzenia modbusowe nie mające wspólnego mianownika prędkości ... a dzielące jeden kabelek rs485).

Akuratnie robiłem już wszystko włacznie z reistalacją windowsa. Nie pomaga. Swoją drogą działa na tym hardware z Win98. Z XP nie.

Dziekuje za informacje. Obawiam sie jednak, że jeśli nie znajdę szybko odpowiedzi to ... zmienie system na linuxa. To jeden z paru powodów który mnie do tego skłania i sam sie zastanawiam po co się jeszcze męczę z tymi comami w windowsie skoro cały soft mam przenośny.

Skoro więc nie ma prostej odpowiedzi, to temat uważam raczej za zamknięty.

Witaj

Wyślij mi ten programik na którym ci zależy aby uruchomić przetestuje go i dam ci odpowiedz.

To zapodaj monitorek z SysInternals i zobacz co ten HT tam robi.

Nie pamiętam już, ale któraś instalka windowsów na początku ładuje "Moduł Wyliczania Portów Szeregowych"... zawsze mnie to śmieszyło cokolwiek to jest - faktycznie, żeby policzyć przeważnie do dwóch to trzeba Modułu że ho ho ;)

Mirek.

Tłumaczenie "enumerating"...

A skąd pomysł, że do dwóch? Wiele urządzeń USB emuluje porty szeregowe. A nawet w starych czasach, kilkanaście lat temu, posiadanie więcej niż dwóch portów szerogowych nie było niczym niezwykłym. Dla przykładu, BBS prowadzony przeze mnie pracował na komputerze

386DX, wyposażonym w 4 porty szeregowe. Obsługiwał dwa modemy, na pozostałych portach była mysz i jedna drukarka. Komputer miał też dwa porty równoległe a przed zmianą karty grafiki nawet trzy. Było to w roku 1990.

Rok później miałem okazję podziwiać komputer wyposażony w 12 portów szeregowych ale pracował pod $CO Unix.

Na 8 byly przewidziane adresy, kiedys mialem chyba 6 [sztuka dla sztuki]. A teraz USB, Bluetooth, irda, karty wieloportowe, emulacja - jest co liczyc. Wlasnie widzialem notebooka z 42 .. tzn fizycznego nie mial zadnego, ale telefon po BT zainstalowal sie jako 42 :-)

J.

Dziękuje za propozycję, ale nie dzasz rady bez reszty hardware po drugiej stronie kabla :) No i soft nie jest opensource :)

Przeciętny komputer miał 2.

Wiem, wiem - bawię się nawet zdalnymi NPort-ami MOXA, ale niechby ich było i z tysiąc, to chyba komputer nie powinien mieć problemów z "wyliczeniem" ;)

Mirek.

Join the Discussion

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

Didn't find your answer?

Ask the community — no account required