Hi all,
vielleicht gibt es ja hier einen Crack, der mir helfen kann:
Ein ausgereiftes Programm (seit 2 Jahren erfolgreich im Einsatz)
funktioniert plötzlich auf meinem (nur diesen!) PC nicht mehr.
Phänomen: Der Port kann geöffnet werden, das Handle ist gültig aber dann
kann der Port weder gelesen, noch beschrieben werden (GetLastError()==
29 bzw. 30)...
Wenn ich jetzt irgendein anderes Programm, das auf die RS232 zugreift
starte (Hyperterminal, OCConsole, HotSync) und wieder beende
funktioniert mein Programm auch wieder, bis zum nächsten Kaltstart.
Ich habe ein anderes Tool geschrieben, das verfügbare COM-Ports
auflistet. In diesem wird die WMI bemüht (IWbemLocator). Auch danach
funktioniert der Port auch wieder wie erwartet.
An fehlenden Administratorrechten liegt es übrigens auch nicht, das habe
ich schon getestet.
Ich befürchte, das ist ein BIOS od. Treiberproblem, daher noch kurz das
Board benannt:
ASUS P5B mit Windows XP.
Google hat dazu nicht viel ausgespuckt, einen Leidensgenossen habe ich
gefunden:
http://www.cygwin.com/ml/cygwin/2006-01/msg01092.html
Bei ihm lag's jedoch an Cygwin, das ich bei mir nicht installiert
habe...
Kann sich da jemand einen Reim drauf machen?
Danke und Gruß,
Andreas Martin
Hilft es, die COM-Ports im Gerätemanager zu löschen? (und dann Neustart)
Das BIOS hat da ausser Port ein/ausschalten eigentlich nicht viel zu
sagen.
Wenn Windows mit sowas anfängt hilft evtl. Neuinstallation ;)
Neuinstallation ist gut. Der Rechner ist nagelneu...
Proprietäre Software hat ja kein Problem mit der RS232. Das ist ja
gerade das was mich ärgert: An was haben DIE gedacht, was ICH nicht
beachtet habe..?
Auf meinem alten Rechner lief alles keimfrei, deshalb hole ich den jetzt
aber nicht wieder raus :)
Gruß,
Andreas Martin
Holger,
ja, das Programm funktioniert einwandfrei. Da bin ich mir 100% sicher (2
Jahre Einsatz/Entwicklung). Ein Thread arbeitet im Hintergrund und
erkennt das angeschlossene Gerät. Mit den Handshakeleitungen wird die
Stromversorgung für das Gerät geschaltet. Das funktioniert auch.
Lediglich Daten Senden/Empfangen scheitert. Ich muss nach jedem
Kaltstart einmalig Hyperterminal o.ä. auf COM1 schalten und dann ist der
Port "reanimiert".
An den Defaulteinstellungen für den Port liegt es auch nicht: Nachdem
das Programm wieder läuft hatte ich die Einstellungen mal verstellt
(alles). Danach funktionierte es trotzdem.
Ich werd' wohl einen neuen Port kaufen müssen...
Danke und Gruß,
Andreas
Mir ist da noch was eingefallen.
Schau mal in der Systemsteuerung die COM Ports an.
Handschake Baudrate ect.
Das Hotsync als Task installiert für PDA_s ist ein ganz gefährliches
Teil.
( Dienst Kanalarbeiter Prozess )
Das Pollt und Triggert die Handschakeleitungen rum.
Tip:
Mach dir mal ein extra USB-COM Port da dran,und versuche das zu öffnen.,
und im Loop-Back zu schreiben.Pin.2<---->Pin.3-
Schau dir mal mit den Status-Leds den Com-Port beim
hochbooten an, ob da die Handschake-Pins sich toggeln.
( Das Handshake Toggen kan man mit dem Reg-Editor sogar unterbinden. )
Lösche mal brutal die Com-Ports aus dem System,
Bau dir mal ein kleines Terminal-Prog mit dienem Compiler auf dem
System.
Open Close ect.
Wenn der DCB nicht genullt ist, und die DCB-Struktur nicht richtig,
oder der Transmit-Receiver-Buffer = Null ect..
Poste mal dein Test Code für das Mini-Terminal hier rein. )
( Was habe ich vergessen ??? was andere da noch machen )
Was ist das für ein Compiler ???
Ich hatte mal mit XP-Laptop USB-COM so was ähnliches.
Habe den Treiber entfernt u. explizit neu aufgezogen....
Gruss Holger.
Mir ist da noch was eingefallen.
Die neuen COM-Chips haben sogar sleep Funktioen,
Fifo-Buffers und Timeouts.
Auf welchem Betriebssystem hast du das Prog. vorher
entwickelt. Hast du eine echte HW-COM oder USB-COM
Kanst du das Kompilat auf einer anderen XP-Platform testen ???.
Kanst du ein TestCom-Prog mit z.B MS-VC 6.x machen.
Mit dem Tool womit du die freien Com-Ports ermittelst
geht das eigentliche Prog. danach. ????
( Damit wird der Driver ja auch verkettet u. ermittelt ect. Properies
...
Ist dein Handle global ????
und auch im DCB eingetragen.
Worauf hin wird Thread Prozess gestartet.
bzw auf welches Ereignisses Synchronisiert ect.
( Interprozesskommunikation )
Das XP-System ist nach dem Kaltstart hochgebootet.
Deine Com-Exe wird gestartet.
Daraufhin wird der Com-Treiber VXD ,Com-.Dll in den Cache Dll-Cache
geholt.
Der Thread wird ..... auf erfolgreiches Open gestartet oder
..sync-timing ....
Ich denke da an das Timing was da abgeht. Nachrichtenschleife ect...
Der Com-Empfangsbuffer-Treiber wird durch das XP-System alloziert ect.
Versuche mal eine Aplikation mit deinem Compiler-Tool zu schreiben,
die ohne den "Thread" für den (Handshake ect.pp ) auskommt, und einfach
nur sendet.
Du must das Problem auf diesem System frakturiesieren.
( Ich habe damals unter NT-4 Prozessverhalten erlebt die bei WIN98 ganz
anders abliefen Nachrichtenschleife ect. Oder auch speziell nur unter NT
so
realieserbar waren )
Schade das du nich noch mal das gleiche XP-System u.HW hast.
Ich habe immer grosse Interesse an solchen Effekten.
Ich hatte mal mit XP-Laptop und USB-COM so was ähnliches.
Das Prog. lief auf dem Teil schon immer gut.
Bis ich es eines Tages neu angestöpselt hatte, u die Com auch noch
explizit auf die Nummer gesetzt hatte, weil beim USB die Com immer
mit einem neuen Nummer vergeben wird, wenn man nicht den gleichen
USB-Buchsenklinke nimmt, die man vorher hatte.
( USB-Bus ist Platz-Portorientiert )
Das war ein simples Terminal-Prog mit poll Thread für die Zeichen.
Geschreiben in MS-VC 6.0
Trotz Loop-Back von 2 auf 3 Pin, ging nix rein was auf dem Keyboard
getippt wurde .
( Bis ich daraufhin den Treiber neu aufgedröselt hatte )
( Also HW-Treiber und Prozessoren u. Compiler-Tools u. die
entsprechenden
Platformen-Betriebssysteme sind immer für Überraschungen gut.)
Bei den neuen Doppel-KernProzessoren kan auch noch der Zonk drin sein.
FTDI 232 ect. hat sogar extra Treiber für AMD
Prozessoren..Derivate.....
Mach mal einen File-Compare von den beiden Compilaten,
alt u. neu System.
Das muss man halt einkreisen.
Hier im Formum habe ich auch schon so etwas in der Richtung
vor ca. 6 Monaten gelesen.
Berichte mal wie du da vorgehst.
Gruss Holger.
Holger,
erstmal vielen Dank für Deine Unterstützung!
Ich habe ein kleines Testprogramm geschrieben und hiermit stellt sich
für mich wieder alles auf den Kopf:
Danach funktioniert auch mein "Problem-Programm"...
Das kann doch alles nicht wahr sein! In dem anderen Programm nutze ich
die SAPI (sourceforge.net) und hat auf mehreren Rechnern (mind. 6) nie
Probleme gemacht...
Wenn ich doch noch was Interessantes herausfinden sollte poste ich es.
Aber möglichweise kann jemand anderes ja den Code für eigene Zwecke
gebrauchen:
Ich habe den (meinen) Fehler gefunden:
Nur(!) auf meinem neuen Rechner ist das Flag fDsrSensitivity per default
auf 1 gesetzt. Daher konnten keine Zeichen gelesen werden.
Ich habe den DCB immer mit GetCommState() ausgefüllt, daher blieb das
Flag gesetzt.
(So'n Mist)
Danke trotzdem Holger, Arc Net und *.*
Gruß,
Andreas