RS232 zugriff läuft nicht auf jeden Rechner
-
Hallo,
ich kommuniziere mit einem Controller via RS232.
Die kommunikation funktioniert.
Nun habe ich meine Software auf einem Notebook ausprobiert, hier
funtioniert die Kommunikation über RS232 nicht mehr einwandfrei,
es sieht aus als ob die Daten irgendwie verfälscht werden.Auf dem PC befindet sich Win98SE, auf dem Notbook Win98ME.
Kann das eventuell mit dem Betriebssytem zusammenhängen?Gruß
Johann
-
hermes schrieb:
Kann das eventuell mit dem Betriebssytem zusammenhängen?
Nein. Das ist entweder ein Bock in der Hardware (z.B. keine sauberen Pegel) oder noch ein Problem in Deinem Programm.
-
Hallo,
erzähle doch mal was passiert (oder nicht passiert) auf deinem Laptop.
-
TheLastOne schrieb:
Hallo,
erzähle doch mal was passiert (oder nicht passiert) auf deinem Laptop.
Also, auf dem Controller Board befindet sich eine Echtzeituhr die vom Controller regelmässig ausgelesen wird um dann Datum und Uhrzeit zum
PC zu senden.
Auf dem Notebook wird dann totaler Mist angezeigt. Z.b die Uhrzeit
00:80:00.
Wie gesagt, auf dem anderen Rechner sowie auf einem weiteren läuft die
Software einwandfrei, nur nicht auf dem Notebook.
Muss ich vieleicht im Gerätemanager igendwelche Einstellungen ändern?
Hier mein Create Filebool Trs232::init_rs232_(int baudrate,char* com) // char* com zeiger auf "COM1" { chandle1 = CreateFile(com,GENERIC_WRITE | GENERIC_READ,0,NULL,OPEN_EXISTING,0,NULL); if (chandle1 != INVALID_HANDLE_VALUE) { GetCommState(chandle1,&dcb); GetCommTimeouts(chandle1,&rs232timeout); dcb.BaudRate = baudrate; // set the baud rate dcb.ByteSize = 8; // data size, xmit, and rcv dcb.Parity = NOPARITY; // no parity bit dcb.StopBits = ONESTOPBIT; // one stop bit rs232timeout.ReadTotalTimeoutMultiplier = 2000; if(SetCommState(chandle1, &dcb)) { if (SetCommTimeouts(chandle1,&rs232timeout)) { return 1; } else { CloseHandle(chandle1); return 0; } } else { CloseHandle(chandle1); return 0; } } return 0; }
-
hermes schrieb:
Muss ich vieleicht im Gerätemanager igendwelche Einstellungen ändern?
Nein, aber in Deinem Programm. Wie öffnest Du den Port? Wie baust Du den DCB zusammen? Schon mal mit dem PortMon geschaut, was tatsächlich passiert?
Hast Du ordentliche Pegel, oder nur sowas halbherziges, mit dem Laptops sowieso nicht klarkommen?
Du mußt uns schon mit ein paar Infos versorgen, ansonsten scheint eine sinnvolle Antwort unmöglich.
/EDIT: Der Code war eben aber noch nicht da! Also:
- Du öffnest den Port falsch, das muß \.\COM1 heissen (oder in C++: "\\\.\\COM1"). Das ist aber hier nicht das Problem- Du initialisierst nur einen Teil des DCB. Du mußt den DCB vollständig initialisieren. Das wird das Problem sein.
-
Das Problem war nicht der DCB, ich in meiner Schaltung ist die RS232
Schnittstelle über Optokoppler isoliert, um mir eine zusätzliche
Hilfsspannung zu sparen habe ich die isolierte Seite mit den
Signalen RTS DSR versorgt.Leider habe ich die PC Masse vergessen, bei einem geerdeten PC funktionierte
das ganze noch halbwegs doch bei einem Notebook lief es dann nicht mehr.Trotzdem hatt sich die frage gelohnt, denn ich bin endlich mal dazu gekommen
mir den DCB genauer anzusehen.Johann