RS-232 Schnittstelle



  • sorry, verstehe nur Bahnhof ..

    Beim öffnen des Ports wird ohnehin

    serial4.SetupHandshaking(CSerialMFC::EHandshakeHardware);
    

    ausgeführt! Somit habe ich eine Hardware Flusskontrolle, oder?



  • sieht so aus. vielleicht haste RTS/CTS nicht angeschlossen?



  • .. schon, sonst würde ja auch die Demo-Software zu meinen Boards nicht
    funktionieren .. Wie groß ist der Input Buffer des COM Ports, wenn er auf Maxium gestellt ist? Kann man da 200Byte zwischenlagern?



  • du kannst die buffers mit 'SetupComm' einstellen. es geht auch viel mehr als 200 bytes.

    btw: dass deine demo software funzt heisst ja nicht zwangsläufig dass die flusskontrolle geht.



  • .. habe immer noch keine Ahnung, wie ich bei den 4 Ports via SetupComm() die Eingangspuffer verändern kann??? Mein C++/Schnittstellenverständiss ist ohnehin schon ziemlich ausgeschöpft .. 😕



  • Wie kann ich im übrigen testen, ob die Flusskontrolle funzt ??



  • das ist nicht schwer. jede geöffnete comm schnittstelle hat eine 'handle' nummer. für vier schnittstellen musst du die 'SetupComm' also vier mal aufrufen (pro handle einmal), jedesmal mit den gewünschten buffergrössen. guckst du: http://msdn.microsoft.com/library/default.asp?url=/library/en-us/devio/base/setupcomm.asp



  • .. und woher krieg ich die handle nummer ??



  • daMike schrieb:

    Wie kann ich im übrigen testen, ob die Flusskontrolle funzt ??

    so wie du's beschrieben hast (windows verschluck daten) musste den RTS ausgang am pc messen ob der auf 0 geht (das sollte der wenn windows keinen platz mehr im eingangsbuffer hat). tut er's nicht, dann ist dein rs232 falsch konfiguriert. das RTS-signal muss auf der anderen seite am CTS erscheinen. umgekehrt gilt das gleiche...

    daMike schrieb:

    .. und woher krieg ich die handle nummer ??

    irgendwo in deinem code muss 'CreateFile' aufgerufen werden um die comm-ports zu öffnen. der rückgabewert dieser funktion ist das 'handle'



  • Besten Dank net!!

    'SetComm' konnte ich anwenden, hat aber nicht wirklich was geändert ..

    RTS/CTS ist auch richtig angeschlossen und funktioniert (bestätigt durch Handshake anzeige der OEM Board Software + Oszi) .. nur anscheinend nicht bei mir?!?

    Wie kann ich im übrigen feststellen, von welchen der 4 Ports gerade Daten ankommen? Mache dies momentan mit 'dwBytesRead' als Indikator .. ist aber nicht wirklich schön!



  • daMike schrieb:

    RTS/CTS ist auch richtig angeschlossen und funktioniert (bestätigt durch Handshake anzeige der OEM Board Software + Oszi) .. nur anscheinend nicht bei mir?!?

    um herauszufinden wie die windows rs232 konfiguriert ist kannst du die funktion 'GetCommState' aufrufen. die füllt eine DCB struct. diese struct kannste untersuchen, speziell die members fOutxCtsFlow und fRtsControl. die sind zuständig für das RTS/CTS handshaking. wie die gesetzt sein müssen findest du hier: http://msdn.microsoft.com/library/default.asp?url=/library/en-us/dnfiles/html/msdn_serial.asp
    (durchsuch die seite nach dem satz 'hardware flow control')

    daMike schrieb:

    Wie kann ich im übrigen feststellen, von welchen der 4 Ports gerade Daten ankommen? Mache dies momentan mit 'dwBytesRead' als Indikator .. ist aber nicht wirklich schön!

    da gibts mehrere möglichkeiten. z.b. ein thread der mit 'WaitCommEvent' wartet oder du fragst es ab mit 'ClearCommError'. letzteres füllt eine 'COMSTAT' struct dessen member 'cbInQue' angibt, wieviele bytes im input buffer des windoofs rs232 treibers darauf warten abgeholt zu werden.


Anmelden zum Antworten