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

Hi,

wenn ich mit CreateFile() ein Handle zum COM1 Port öffne, kann ich ja mit

ReadFile von diesem lesen.

Wenn allerdings keine Daten anliegen gibt RedFile() trotzdem einen Buffer mit

lauter Mist zurück. Kann ich irgendwie einstellen das ReadFile() nur etwas liest wenn

auch was da ist, bzw. sollte das normal nicht so sein?

Gruß

Guybrush

  • Autor

Mit dem Timeout hab ich auch probiert, ging aber irgendwie nicht.

Naja egal, ich hab das eh nur für nen Kumpel probiert, der das in C# macht.

Er geht jetzt hin und liest solange ein, wie er NULL bekommt. Sobald keine Nullen

zurückgeliefert werden, speichert er den Wert und fertig.

Trotzdem danke.

Gruß

Guybrush

  • 8 Monate später...
  • Autor

Gibt es eine Möglichkeit festzustellen ob wirklich etwas von einem Gerät ans Comport gesendet wurde?

Wenn ich z.B. einfach so etwas vom COM Port lese ohne das etwas dahin gesendet wird, erhalte ich immer ein Zeichen mit dem ASCII Code -52. Wenn jetzt ein Gerät etwas an den Port gesendet hat, dann nichts mehr sendet und ich vom Port lese erhalte ich immer das Zeichen was als letztes gesendet wurde. Kann ich da irgendwie feststellen das nichts neues mehr gesendet wurde?

  • Autor

Z.B. dieser hier:


HANDLE hPort=NULL;
DWORD dwError=0;

hPort=CreateFile("COM1", GENERIC_READ | GENERIC_WRITE, 0, NULL, OPEN_EXISTING, 0, NULL);
if (hPort == INVALID_HANDLE_VALUE)
{
return 0;
}
else
{
PurgeComm(hPort, PURGE_TXABORT | PURGE_RXABORT |
PURGE_TXCLEAR | PURGE_RXCLEAR ) ;
DCB dcb;
GetCommState(hPort,&dcb);
dcb.DCBlength = sizeof(DCB);
dcb.BaudRate = CBR_9600;
dcb.ByteSize = 8;
dcb.StopBits = ONESTOPBIT;
dcb.Parity = NOPARITY;

if (SetCommState(hPort, &dcb) == NULL)
{
dwError = GetLastError();
if(hPort != INVALID_HANDLE_VALUE)
CloseHandle(hPort);
SetLastError(dwError);
return 0;
}
else
{
SetupComm(hPort,512,512);
COMMTIMEOUTS cto;
GetCommTimeouts(hPort,&cto);
cto.ReadTotalTimeoutConstant = 50;
if (SetCommTimeouts(hPort,&cto) == NULL)
{
dwError = GetLastError();
if(hPort != INVALID_HANDLE_VALUE)
CloseHandle(hPort);
SetLastError(dwError);
return 0;
}
else
{
char cTemp;
DWORD dw1=0;
for (int i=0; i<40; i++)
{
ReadFile(hPort, &cTemp, 1, &dw1, NULL);
printf ("%i ",cTemp);
}
}
}
}
CloseHandle(hPort);
printf ("\nfertig...");
getch();
return 0;
[/PHP]

Hab ihn an mehreren PC`s ausprobiert. Wenn nichts an das Port gesendet wurde, kahm immer die -52.

Hab mein Problem jetzt aber anders gelöst:D

Original geschrieben von Guybrush Threepwood

Hab ihn an mehreren PC`s ausprobiert. Wenn nichts an das Port gesendet wurde, kahm immer die -52.

Wundert mich nicht. Du prüfst weder den Rückgabewert von ReadFile noch den Inhalt von dw1. Die -52 stand schon vorher drin ;)

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.