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 zusammen!

Hab folgendes Problemm: Ich hab ein Windowsprogramm, dass Daten von der seriellen Schnittstelle einliest.

Die serielle Schnittstelle wird über USB-Emuliert, d.h. es kann mal COM3 oder COM11 usw. sein.

Mein Problemm: Wenn ich die COM fest im Programm angebe, funktioniert es wunderbar. Sobald aber ich die COM über Einstellungsdialog ändern will, sagt das Programm es kann die Schnittstelle nicht öffnen(Obwohl es diesselbe COM ist, und es wird richtig vom Dialog zurückgegeben).

Wie löse ich das Problemm?????

Mein Programm ist in C++, MFC und ich lese mit ReadFile, wenn jemand hier noch in C++ programmiert, bitte HILFE!

  • Autor

Hallo zusammen!

Ich habe ins .net- Forum geschrieben, weil ich in .net programiere, allerdings in C++.

Und hier etwas Code:

serialPort = new CSerial();

if(serialPort -> Open(sCom, dSpeed))	

{

 portOpen = TRUE;

 AfxBeginThread(ThreadFunc,this);//Aufruf des Lesethreads

}

else

{

portOpen = FALSE;

AfxMessageBox("Das Öffnen des COM- Portes ist fehlgeschlangen!");

}



BOOL CSerial::Open( CString sPort, DWORD dBaud )

{


	if( m_bOpened ) return( true );


	DCB dcb;

	//Der Verbindungshandle

	m_hIDComDev = CreateFile( sPort, GENERIC_READ | GENERIC_WRITE, 0, NULL, OPEN_EXISTING, FILE_FLAG_OVERLAPPED, NULL );


	if( m_hIDComDev == INVALID_HANDLE_VALUE ) return FALSE;//Oeffnen des Portes fehlgeschlagen



	memset( &m_OverlappedRead, 0, sizeof( OVERLAPPED ) );

 	memset( &m_OverlappedWrite, 0, sizeof( OVERLAPPED ) );


	COMMTIMEOUTS CommTimeOuts;

	CommTimeOuts.ReadIntervalTimeout = 0xFFFFFFFF;

	CommTimeOuts.ReadTotalTimeoutMultiplier = 0;

	CommTimeOuts.ReadTotalTimeoutConstant = 0;

	CommTimeOuts.WriteTotalTimeoutMultiplier = 0;

	CommTimeOuts.WriteTotalTimeoutConstant = 5000;

	SetCommTimeouts( m_hIDComDev, &CommTimeOuts );




	//Events fuer lesen uns Schreiben

	m_OverlappedRead.hEvent = CreateEvent( NULL, TRUE, FALSE, NULL );

	m_OverlappedWrite.hEvent = CreateEvent( NULL, TRUE, FALSE, NULL );


	//Holen der aktuellen Einstellungen des Portes

	dcb.DCBlength = sizeof( DCB );

	GetCommState( m_hIDComDev, &dcb );

	//Aendern der Einstellungen auf die gewuenschten Parameter

	dcb.BaudRate = dBaud;

	dcb.ByteSize = 8;	


	if( !SetCommState( m_hIDComDev, &dcb ) ||//Wenn Setzten der Paramerter der Einstellung fehlgeschlagen

		!SetupComm( m_hIDComDev, 10000, 10000 ) ||//Wenn Cash-Speicher reservierung fehlgeschlagen

		m_OverlappedRead.hEvent == NULL ||//Wenn LesenEvent nicht vorhanden

		m_OverlappedWrite.hEvent == NULL )//Wenn SchreibeEvent nicht vorhanden

{

		DWORD dwError = GetLastError();

		if( m_OverlappedRead.hEvent != NULL ) CloseHandle( m_OverlappedRead.hEvent );//Loeschen der beiden Events

		if( m_OverlappedWrite.hEvent != NULL ) CloseHandle( m_OverlappedWrite.hEvent );

		CloseHandle( m_hIDComDev );//Verbindung schliessen

		return( FALSE );//Hier bricht das Programm ab

		}


	m_bOpened = TRUE;


	return m_bOpened;


}

Den Code für den serialPort habe ich von meinem Vorgänger übernommen.

Nach Debuggen sieht es so aus als ob das Programm den Cash-Speicher nicht reservieren kann, aber nur, wenn ich den Port aus dem Programmfenster ändere, bei fest eingegebenen Werten funktioniert das ohne Probleme, warum?

danke im voraus :beagolisc

Ich habe ins .net- Forum geschrieben, weil ich in .net programiere, allerdings in C++.
Das ist kein .NET, das ist reines C++ mit MFC. Du benutzt vielleicht Visual Studio .NET, aber dein Code hat mit .NET nichts zu tun.

Und hier etwas Code:

...

DWORD dwError = GetLastError();

Und? Welchen Wert hat dwError? Das ist doch der interessante Teil, wenn SetupComm fehlschlägt.

Übrigens: Code-Tags erhöhen die Lesbarkeit ;)

  • Autor

ja, wenn es im Code gesetzt ist funktioniert es, und der MessageBox zeigt in beiden Fällen z.b. 'COM3, Länge 4'.

Mich wundert es auch, warum es nicht funktioniert, bin verzweifelt!

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.