Port COM w windowsie i ustawianie jego prędkoś

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.

Reply to
Sebastian Bialy
Loading thread data ...

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

Reply to
Janusz U.

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.

Reply to
Sebastian Bialy

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.

Reply to
LukaszS

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

Reply to
Janusz U.

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

Reply to
Jerry1111

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

Reply to
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.

Reply to
Sebastian Bialy

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.

Reply to
Sebastian Bialy

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).

Reply to
Sebastian Bialy

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

Reply to
Sebastian Bialy

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.

Reply to
Sebastian Bialy

Witaj

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

Reply to
Wlodziu1986

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

Reply to
Jaroslaw Berezowski

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.

Reply to
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.

Reply to
RoMan Mandziejewicz

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.

Reply to
J.F.

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

Reply to
Sebastian Bialy

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.

Reply to
Mirek

ElectronDepot website is not affiliated with any of the manufacturers or service providers discussed here. All logos and trade names are the property of their respective owners.