<?xml version="1.0" encoding="UTF-8"?><rss xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:content="http://purl.org/rss/1.0/modules/content/" xmlns:atom="http://www.w3.org/2005/Atom" version="2.0"><channel><title><![CDATA[COM Schnittstelle auslesen]]></title><description><![CDATA[<p>ich muss für mein aktuelles Projekt über einen COM Port ein Messgerät auslesen.<br />
dafür habe ich bis jetzt immer die Windows Funktionen createFile(..) und writeFile(..) sowie readFile(..) verwendet.</p>
<p>also ZB:</p>
<p>BOOL ReadFile(<br />
HANDLE hFile,<br />
LPVOID lpBuffer,<br />
DWORD nNumberOfBytesToRead,<br />
LPDWORD lpNumberOfBytesRead,<br />
LPOVERLAPPED lpOverlapped<br />
);</p>
<p>Wenn ich das ganze richtig verstanden habe sollte nun in der lpNumberOfBytesRead zu sehen sein wie viele Bytes ausgelesen wurden ....<br />
und nNumberOfBytesToRead sollte die maximale Anzahl der zu lesenden Bytes angeben.</p>
<p>Jetzt das Problem:</p>
<p>Wenn ich für nNumberOfBytesToRead einen größeren Wert einsetze als Zeichen im Buffer sind (also theoretiscgh lpNumberOfBytesRead &lt; nNumberOfBytesToRead) dann blockiert die Funktion und gibt gar keinen Wert zurück</p>
]]></description><link>https://www.c-plusplus.net/forum/topic/166128/com-schnittstelle-auslesen</link><generator>RSS for Node</generator><lastBuildDate>Fri, 17 Jul 2026 01:49:39 GMT</lastBuildDate><atom:link href="https://www.c-plusplus.net/forum/topic/166128.rss" rel="self" type="application/rss+xml"/><pubDate>Sun, 26 Nov 2006 15:02:17 GMT</pubDate><ttl>60</ttl><item><title><![CDATA[Reply to COM Schnittstelle auslesen on Sun, 26 Nov 2006 15:02:17 GMT]]></title><description><![CDATA[<p>ich muss für mein aktuelles Projekt über einen COM Port ein Messgerät auslesen.<br />
dafür habe ich bis jetzt immer die Windows Funktionen createFile(..) und writeFile(..) sowie readFile(..) verwendet.</p>
<p>also ZB:</p>
<p>BOOL ReadFile(<br />
HANDLE hFile,<br />
LPVOID lpBuffer,<br />
DWORD nNumberOfBytesToRead,<br />
LPDWORD lpNumberOfBytesRead,<br />
LPOVERLAPPED lpOverlapped<br />
);</p>
<p>Wenn ich das ganze richtig verstanden habe sollte nun in der lpNumberOfBytesRead zu sehen sein wie viele Bytes ausgelesen wurden ....<br />
und nNumberOfBytesToRead sollte die maximale Anzahl der zu lesenden Bytes angeben.</p>
<p>Jetzt das Problem:</p>
<p>Wenn ich für nNumberOfBytesToRead einen größeren Wert einsetze als Zeichen im Buffer sind (also theoretiscgh lpNumberOfBytesRead &lt; nNumberOfBytesToRead) dann blockiert die Funktion und gibt gar keinen Wert zurück</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1181707</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1181707</guid><dc:creator><![CDATA[Don_Corleone]]></dc:creator><pubDate>Sun, 26 Nov 2006 15:02:17 GMT</pubDate></item><item><title><![CDATA[Reply to COM Schnittstelle auslesen on Sun, 26 Nov 2006 15:15:58 GMT]]></title><description><![CDATA[<p>Wenn du ReadFile ohne die OVERLAPPED-Struktur verwendest, dann blockiert es immer solang, bis nNumberOfBytesToRead Bytes eingelesen wurden. Entweder du liest wenn du das nicht willst, musst du eben immer in kleinen Häppchen einlesen, oder asynchron arbeiten (also mit der OVERLAPPED-Struktur)</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1181714</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1181714</guid><dc:creator><![CDATA[flenders]]></dc:creator><pubDate>Sun, 26 Nov 2006 15:15:58 GMT</pubDate></item><item><title><![CDATA[Reply to COM Schnittstelle auslesen on Sun, 26 Nov 2006 15:36:22 GMT]]></title><description><![CDATA[<p>Vielen Dank schonmal für den Tip!<br />
allerdings muss ich sagen das ich das ganze nicht wirklich hinkriege....<br />
ich schreib jetzt mal rein was ich bis jetzt gemacht hab:</p>
<p>der char pointer port weist auf den Namen des Ports also zB &quot;COM1&quot;</p>
<pre><code class="language-cpp">int MessCom::create(char* port)
{
   DCB dcb;
   BOOL fSuccess;

   hCom = CreateFile( port,
                    GENERIC_READ | GENERIC_WRITE,
                    0,    // must be opened with exclusive-access
                    NULL, // no security attributes
                    OPEN_EXISTING, // must use OPEN_EXISTING
                    FILE_FLAG_OVERLAPPED,    // not overlapped I/O
                    NULL  // hTemplate must be NULL for comm devices
                    );

   if (hCom == INVALID_HANDLE_VALUE)
   {
   return 1;
   }

   // Build on the current configuration, and skip setting the size
   // of the input and output buffers with SetupComm.

   fSuccess = GetCommState(hCom, &amp;dcb);

   if (!fSuccess)
   {
   return 2;
   }

   // Fill in DCB: 57,600 bps, 8 data bits, no parity, and 1 stop bit.

   dcb.BaudRate = CBR_115200;     // set the baud rate
   dcb.ByteSize = 8;             // data size, xmit, and rcv
   dcb.Parity = NOPARITY;        // no parity bit
   dcb.StopBits = ONESTOPBIT;    // one stop bit

   fSuccess = SetCommState(hCom, &amp;dcb);

   if (!fSuccess)
   {
   return 3;
   }
   return 0;
}
</code></pre>
<p>Die Read Funktion soll immer 1 Zeichen auslesen bis LF(LF=0x0A;) ausgelesen wird (wird vom Messgerät am Ende jedes Strings angefügt)</p>
<pre><code class="language-cpp">int MessCom::read(char* text)
{
    char temp;
    int i=0;

    do
    {
        ReadFile(hCom,(void*)&amp;temp,1,lbytesRead,NULL);
        text[i]=temp;
        i++;
    }while(temp != LF);
    text[i-1]=0;
    return 0;
}
</code></pre>
<p>Das anze Funktioniert eine ganze Zeit auch recht gut ....<br />
allerdings liest irgendwann die ReadFile nix mehr aus. und das Programm läuft nicht weiter</p>
<p>wie funktioniert denn das ganze mit dem OVERLAPPED Teil...</p>
<p>Blick das nich so ganz</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1181724</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1181724</guid><dc:creator><![CDATA[Don_Corleone]]></dc:creator><pubDate>Sun, 26 Nov 2006 15:36:22 GMT</pubDate></item><item><title><![CDATA[Reply to COM Schnittstelle auslesen on Sun, 26 Nov 2006 16:14:59 GMT]]></title><description><![CDATA[<p>Nimm doch eine fertige Klasse und erfinde nicht das Rad neu. Serielle Kommunikation ist *nicht* trivial. Auch wenn es sich so anhört...<br />
<a href="http://www.codeproject.com/system/serial.asp" rel="nofollow">http://www.codeproject.com/system/serial.asp</a></p>
]]></description><link>https://www.c-plusplus.net/forum/post/1181750</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1181750</guid><dc:creator><![CDATA[Jochen Kalmbach]]></dc:creator><pubDate>Sun, 26 Nov 2006 16:14:59 GMT</pubDate></item><item><title><![CDATA[Reply to COM Schnittstelle auslesen on Sun, 26 Nov 2006 18:18:31 GMT]]></title><description><![CDATA[<p>Vielen Dank dafür. <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f603.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--grinning_face_with_big_eyes"
      title=":D"
      alt="😃"
    /><br />
damit gehts ....</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1181832</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1181832</guid><dc:creator><![CDATA[Don_Corleone]]></dc:creator><pubDate>Sun, 26 Nov 2006 18:18:31 GMT</pubDate></item></channel></rss>