Zum Inhalt springen
View in the app

A better way to browse. Learn more.

Fachinformatiker.de

A full-screen app on your home screen with push notifications, badges and more.

To install this app on iOS and iPadOS
  1. Tap the Share icon in Safari
  2. Scroll the menu and tap Add to Home Screen.
  3. Tap Add in the top-right corner.
To install this app on Android
  1. Tap the 3-dot menu (⋮) in the top-right corner of the browser.
  2. Tap Add to Home screen or Install app.
  3. Confirm by tapping Install.

Empfohlene Antworten

Veröffentlicht

Hallo Leute!

Ich möchte einen COM-Port öffnen und möchte die Einstellungen, wie Bitrate selbst vornehmen.

Wie geht das und muss ich das vor CREATEFILE oder danach machen?

  • Autor

Da sind ja 'ne ganze Menge Werte einzustellen.

In der MSDN habe ich auch nicht so recht was gefunden, wo die Werte erklärt werden.

Ich möchte den COM-Port so einstellen:

Baudrate: 9600

Parität: keine

Bitgröße: 8

Stopbit: 1

Flowcontrol: xon/xoff

Ich habe das mit BuildCommDCB("9600,n,8,1", &dcb) probiert, bekomme aber einen Fehler "Unbehandelte Ausnahme".

Deine DCB-Struktur wird auf dem Stack angelegt, also ist sie zunächst mit zufälligen Werten gefüllt. Da BuildCommDCB nur die Werte in der Struktur setzt, die auch im String stehen, ist die Struktur danach immer noch ungültig.

Füll zuerst mit GetCommState die Struktur mit den aktuellen Einstellungen der Schnittstelle, bevor du BuildCommDCB aufrufst, dann sollte das klappen.

Original geschrieben von Narf!

BuildCommState("9600,n,8,1",&dcb);

Ich nehme an, dass im "richtigen" Code BuildCommDCB steht. Bist du sicher (sprich: hast du mit dem Debugger geprüft), dass genau an dieser Stelle eine Exception auftritt, und nicht irgendwann später? Bei mir läuft das nämlich einwandfrei.
  • Autor

Ups! Na klar steht da BuildCommDCB.

Ja, an genau der Stelle kommt:

"Unbehandelte Ausnahme in [Programm.exe] (Kernel32.dll): 0XC0000005: Access Violation."

Kannst Du mir auch das Beispiel mit SetCommState geben?

// ...
HANDLE hSerial = CreateFile( "COM1", GENERIC_READ | GENERIC_WRITE, 0, NULL, OPEN_EXISTING, 0, NULL );
if( INVALID_HANDLE_VALUE == hSerial )
{
return GetLastError();
}

DCB dcb;
if( !GetCommState( hSerial, &dcb ) )
{
CloseHandle( hSerial );
return GetLastError();
}

if( !BuildCommDCB( "9600,n,8,1", &dcb ) )
{
CloseHandle( hSerial );
return GetLastError();
}

if( !SetCommState( hSerial, &dcb ) )
{
CloseHandle( hSerial );
return GetLastError();
}
// ...
[/CODE]

Original geschrieben von Narf!

Ich wollte eigentlich wissen, wo ich bei SetCommState die o.g. Werte eintragen soll.

Gar nicht. Wenn du nicht BuildCommDCB verwenden willst, musst du die Elemente der DCB-Struktur von Hand setzen:

dcb.BaudRate = CBR_9600;

dcb.fParity = FALSE;

dcb.ByteSize = 8;

dcb.StopBits = ONESTOPBIT;

SetCommState musst du in beiden Fällen aufrufen.

Erstelle ein Konto oder melde dich an, um einen Kommentar zu schreiben.

Configure browser push notifications

Chrome (Android)
  1. Tap the lock icon next to the address bar.
  2. Tap Permissions → Notifications.
  3. Adjust your preference.
Chrome (Desktop)
  1. Click the padlock icon in the address bar.
  2. Select Site settings.
  3. Find Notifications and adjust your preference.