<?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[Hilfe beim kommunikation mit COM Port]]></title><description><![CDATA[<p>Hallo...</p>
<p>Ich habe ein großes Problem! Habe mir vorgenommen mich auf dem Gebiet der Kommunikation mit Schnittstellen im besonderen des COM Ports bissl schlau zu machen und hab mir verschiedene Sachen zusammen gestellt! Komme aber nicht richtig damit klar und hoffe ihr könnt mir helfen!</p>
<p>Habe diese Include Datei Serialcom gefunden und baue darauf auf!</p>
<pre><code class="language-cpp">#include &lt;windows.h&gt;
#include &quot;Serial.h&quot;

CSerial::CSerial()
{
	hComm = INVALID_HANDLE_VALUE;
}

CSerial::~CSerial()
{
	Close ();
}

BOOL CSerial::IsOpen()
{
   if (INVALID_HANDLE_VALUE != hComm)
       return (TRUE);
	else
		return (FALSE);
}

BOOL CSerial::ModeSet (int nBaud, int nBits, int nParity, int nStopp)
{
   if (INVALID_HANDLE_VALUE == hComm)
	{
		SetLastError(ERROR_INVALID_HANDLE);
      return (FALSE);
	}

   DCB dcb;

   ZeroMemory (&amp;dcb, sizeof(dcb));
	dcb.DCBlength = sizeof(DCB);

   if (!GetCommState (hComm, &amp;dcb))
      return (FALSE);

   dcb.BaudRate = nBaud;
   dcb.ByteSize = (BYTE)nBits;
   dcb.Parity   = (BYTE)nParity;
	dcb.StopBits = (BYTE)nStopp;

   if (!SetCommState (hComm, &amp;dcb))
		return (FALSE);

	return (TRUE);
}

BOOL CSerial::Open (int nComPortNr, int nBaud, int nBits, int nParity, int nStopp)
{
   if (INVALID_HANDLE_VALUE != hComm)
	{
      return (TRUE);
	}

   char szPort[16];

   wsprintf (szPort, &quot;\\\\.\\COM%d&quot;, nComPortNr);

   hComm = CreateFile (szPort,
						  GENERIC_READ | GENERIC_WRITE,
                    0,
                    0,
                    OPEN_EXISTING,
                    FILE_ATTRIBUTE_NORMAL,
                    NULL);

   if (hComm == INVALID_HANDLE_VALUE)
      return (FALSE);

   if (!GetCommTimeouts(hComm, &amp;timeouts_alt))
   {
		DWORD dwError = GetLastError();
		Close ();
		SetLastError(dwError);
      return (FALSE);
   }

   COMMTIMEOUTS timeouts;
   timeouts.ReadIntervalTimeout = MAXDWORD ;
   timeouts.ReadTotalTimeoutMultiplier = MAXDWORD ;
   timeouts.ReadTotalTimeoutConstant = 3000; // Timeout ist 3000ms
   timeouts.WriteTotalTimeoutMultiplier = 1000;
   timeouts.WriteTotalTimeoutConstant = 1000;

   if (!SetCommTimeouts(hComm, &amp;timeouts))
   {
		DWORD dwError = GetLastError();
		Close ();
		SetLastError(dwError);
      return (FALSE);
   }

   DCB dcb;
   ZeroMemory (&amp;dcb, sizeof(dcb));
	dcb.DCBlength = sizeof(DCB);

   if (!GetCommState (hComm, &amp;dcb))
   {
		DWORD dwError = GetLastError();
		Close ();
		SetLastError(dwError);
      return (FALSE);
   }

	dcb_alt = dcb;
	dcb.fBinary = TRUE; // muss immer &quot;TRUE&quot; sein!
	dcb.fParity = TRUE;
	dcb.fOutxCtsFlow = FALSE;
	dcb.fOutxDsrFlow = FALSE;
	dcb.fDtrControl = DTR_CONTROL_ENABLE;
	dcb.fDsrSensitivity = FALSE;
	dcb.fTXContinueOnXoff = TRUE;
	dcb.fOutX = FALSE;
	dcb.fInX = FALSE;
	dcb.fErrorChar = FALSE;
	dcb.fNull = FALSE;
	dcb.fRtsControl = RTS_CONTROL_ENABLE;
	dcb.fAbortOnError = FALSE;
	dcb.wReserved = 0; // muss immer &quot;0&quot; sein!

	dcb.BaudRate = nBaud;
	dcb.ByteSize = (BYTE)nBits;
	dcb.Parity   = (BYTE)nParity;
	dcb.StopBits = (BYTE)nStopp;

   dcb.fParity = (dcb.Parity != NOPARITY);

   if (!SetCommState(hComm, &amp;dcb))
   {
		DWORD dwError = GetLastError();
		Close ();
		SetLastError(dwError);
      return (FALSE);
   }

   return(TRUE);
}

BOOL CSerial::Close (void)
{
   BOOL bResult;

	if(INVALID_HANDLE_VALUE == hComm)
		return (TRUE);

	SetCommTimeouts(hComm, &amp;timeouts_alt);
	SetCommState(hComm, &amp;dcb_alt);

	bResult = CloseHandle(hComm);
	hComm   = INVALID_HANDLE_VALUE;

	return(bResult);
}

BOOL CSerial::SetTimeout (int iTotalReadTimeout)
{
   if (INVALID_HANDLE_VALUE == hComm)
      return (TRUE);

   COMMTIMEOUTS timeouts;
   timeouts.ReadIntervalTimeout = MAXDWORD ;
   timeouts.ReadTotalTimeoutMultiplier = MAXDWORD ;
   timeouts.ReadTotalTimeoutConstant = (DWORD) iTotalReadTimeout;
   timeouts.WriteTotalTimeoutMultiplier = 1000;
   timeouts.WriteTotalTimeoutConstant = 1000;

   if (!SetCommTimeouts(hComm, &amp;timeouts))
      return (FALSE);

   return(TRUE);
}

BOOL CSerial::WriteCommByte (unsigned char ucByte)
{
   if (INVALID_HANDLE_VALUE == hComm)
	{
		SetLastError(ERROR_INVALID_HANDLE);
      return (FALSE);
	}

   if (!TransmitCommChar(hComm, ucByte))
		return (FALSE);

   return (TRUE);
}

int CSerial::SendData (const char *buffer, int iBytesToWrite)
{
   if (INVALID_HANDLE_VALUE == hComm)
	{
		SetLastError(ERROR_INVALID_HANDLE);
      return (0);
	}

   DWORD dwBytesWritten = 0;
   WriteFile(hComm, buffer, iBytesToWrite, &amp;dwBytesWritten, NULL);

   return ((int) dwBytesWritten);
}

int CSerial::ReadData (char *buffer, int iMaxCount)
{
   if (INVALID_HANDLE_VALUE == hComm)
	{
		SetLastError(ERROR_INVALID_HANDLE);
      return (0);
	}

   DWORD dwRead = 0;
   char chRead;
   int i = 0;

   while (ReadFile(hComm, &amp;chRead, 1, &amp;dwRead, NULL))
   {
       if (dwRead != 1)
           break;

       buffer[i++] = chRead;

		 if (i == iMaxCount)
			 break;
	}

	return (i);
}
</code></pre>
<p>Und als cpp datei hab ich mir dann überlegt dass man diese Methoden ungefähr so aufrufen könnte!</p>
<pre><code class="language-cpp">#include &lt;iostream&gt;
#include &lt;serialcom&gt;

using namespace std;

void main()
{
  char* c;

  CSerial serial;
  serial.ModeSet(9600,8,0,1);
  serial.Open(1,9600,8,0,1);
  serial.ReadData(c,2);
  serial.Close();

  cout&lt;&lt;c&lt;&lt;endl;
  system(&quot;pause&quot;);
}
</code></pre>
<p>Bekomm aber nicht wirklich was sinnvolles raus hoffe ihr könnt mir sagen ob ich da irgendwas unsinniges reingebaut habe...</p>
<p>Vielen Dank schon mal!</p>
]]></description><link>https://www.c-plusplus.net/forum/topic/159222/hilfe-beim-kommunikation-mit-com-port</link><generator>RSS for Node</generator><lastBuildDate>Sat, 18 Jul 2026 20:29:53 GMT</lastBuildDate><atom:link href="https://www.c-plusplus.net/forum/topic/159222.rss" rel="self" type="application/rss+xml"/><pubDate>Wed, 13 Sep 2006 06:51:11 GMT</pubDate><ttl>60</ttl><item><title><![CDATA[Reply to Hilfe beim kommunikation mit COM Port on Wed, 13 Sep 2006 06:51:11 GMT]]></title><description><![CDATA[<p>Hallo...</p>
<p>Ich habe ein großes Problem! Habe mir vorgenommen mich auf dem Gebiet der Kommunikation mit Schnittstellen im besonderen des COM Ports bissl schlau zu machen und hab mir verschiedene Sachen zusammen gestellt! Komme aber nicht richtig damit klar und hoffe ihr könnt mir helfen!</p>
<p>Habe diese Include Datei Serialcom gefunden und baue darauf auf!</p>
<pre><code class="language-cpp">#include &lt;windows.h&gt;
#include &quot;Serial.h&quot;

CSerial::CSerial()
{
	hComm = INVALID_HANDLE_VALUE;
}

CSerial::~CSerial()
{
	Close ();
}

BOOL CSerial::IsOpen()
{
   if (INVALID_HANDLE_VALUE != hComm)
       return (TRUE);
	else
		return (FALSE);
}

BOOL CSerial::ModeSet (int nBaud, int nBits, int nParity, int nStopp)
{
   if (INVALID_HANDLE_VALUE == hComm)
	{
		SetLastError(ERROR_INVALID_HANDLE);
      return (FALSE);
	}

   DCB dcb;

   ZeroMemory (&amp;dcb, sizeof(dcb));
	dcb.DCBlength = sizeof(DCB);

   if (!GetCommState (hComm, &amp;dcb))
      return (FALSE);

   dcb.BaudRate = nBaud;
   dcb.ByteSize = (BYTE)nBits;
   dcb.Parity   = (BYTE)nParity;
	dcb.StopBits = (BYTE)nStopp;

   if (!SetCommState (hComm, &amp;dcb))
		return (FALSE);

	return (TRUE);
}

BOOL CSerial::Open (int nComPortNr, int nBaud, int nBits, int nParity, int nStopp)
{
   if (INVALID_HANDLE_VALUE != hComm)
	{
      return (TRUE);
	}

   char szPort[16];

   wsprintf (szPort, &quot;\\\\.\\COM%d&quot;, nComPortNr);

   hComm = CreateFile (szPort,
						  GENERIC_READ | GENERIC_WRITE,
                    0,
                    0,
                    OPEN_EXISTING,
                    FILE_ATTRIBUTE_NORMAL,
                    NULL);

   if (hComm == INVALID_HANDLE_VALUE)
      return (FALSE);

   if (!GetCommTimeouts(hComm, &amp;timeouts_alt))
   {
		DWORD dwError = GetLastError();
		Close ();
		SetLastError(dwError);
      return (FALSE);
   }

   COMMTIMEOUTS timeouts;
   timeouts.ReadIntervalTimeout = MAXDWORD ;
   timeouts.ReadTotalTimeoutMultiplier = MAXDWORD ;
   timeouts.ReadTotalTimeoutConstant = 3000; // Timeout ist 3000ms
   timeouts.WriteTotalTimeoutMultiplier = 1000;
   timeouts.WriteTotalTimeoutConstant = 1000;

   if (!SetCommTimeouts(hComm, &amp;timeouts))
   {
		DWORD dwError = GetLastError();
		Close ();
		SetLastError(dwError);
      return (FALSE);
   }

   DCB dcb;
   ZeroMemory (&amp;dcb, sizeof(dcb));
	dcb.DCBlength = sizeof(DCB);

   if (!GetCommState (hComm, &amp;dcb))
   {
		DWORD dwError = GetLastError();
		Close ();
		SetLastError(dwError);
      return (FALSE);
   }

	dcb_alt = dcb;
	dcb.fBinary = TRUE; // muss immer &quot;TRUE&quot; sein!
	dcb.fParity = TRUE;
	dcb.fOutxCtsFlow = FALSE;
	dcb.fOutxDsrFlow = FALSE;
	dcb.fDtrControl = DTR_CONTROL_ENABLE;
	dcb.fDsrSensitivity = FALSE;
	dcb.fTXContinueOnXoff = TRUE;
	dcb.fOutX = FALSE;
	dcb.fInX = FALSE;
	dcb.fErrorChar = FALSE;
	dcb.fNull = FALSE;
	dcb.fRtsControl = RTS_CONTROL_ENABLE;
	dcb.fAbortOnError = FALSE;
	dcb.wReserved = 0; // muss immer &quot;0&quot; sein!

	dcb.BaudRate = nBaud;
	dcb.ByteSize = (BYTE)nBits;
	dcb.Parity   = (BYTE)nParity;
	dcb.StopBits = (BYTE)nStopp;

   dcb.fParity = (dcb.Parity != NOPARITY);

   if (!SetCommState(hComm, &amp;dcb))
   {
		DWORD dwError = GetLastError();
		Close ();
		SetLastError(dwError);
      return (FALSE);
   }

   return(TRUE);
}

BOOL CSerial::Close (void)
{
   BOOL bResult;

	if(INVALID_HANDLE_VALUE == hComm)
		return (TRUE);

	SetCommTimeouts(hComm, &amp;timeouts_alt);
	SetCommState(hComm, &amp;dcb_alt);

	bResult = CloseHandle(hComm);
	hComm   = INVALID_HANDLE_VALUE;

	return(bResult);
}

BOOL CSerial::SetTimeout (int iTotalReadTimeout)
{
   if (INVALID_HANDLE_VALUE == hComm)
      return (TRUE);

   COMMTIMEOUTS timeouts;
   timeouts.ReadIntervalTimeout = MAXDWORD ;
   timeouts.ReadTotalTimeoutMultiplier = MAXDWORD ;
   timeouts.ReadTotalTimeoutConstant = (DWORD) iTotalReadTimeout;
   timeouts.WriteTotalTimeoutMultiplier = 1000;
   timeouts.WriteTotalTimeoutConstant = 1000;

   if (!SetCommTimeouts(hComm, &amp;timeouts))
      return (FALSE);

   return(TRUE);
}

BOOL CSerial::WriteCommByte (unsigned char ucByte)
{
   if (INVALID_HANDLE_VALUE == hComm)
	{
		SetLastError(ERROR_INVALID_HANDLE);
      return (FALSE);
	}

   if (!TransmitCommChar(hComm, ucByte))
		return (FALSE);

   return (TRUE);
}

int CSerial::SendData (const char *buffer, int iBytesToWrite)
{
   if (INVALID_HANDLE_VALUE == hComm)
	{
		SetLastError(ERROR_INVALID_HANDLE);
      return (0);
	}

   DWORD dwBytesWritten = 0;
   WriteFile(hComm, buffer, iBytesToWrite, &amp;dwBytesWritten, NULL);

   return ((int) dwBytesWritten);
}

int CSerial::ReadData (char *buffer, int iMaxCount)
{
   if (INVALID_HANDLE_VALUE == hComm)
	{
		SetLastError(ERROR_INVALID_HANDLE);
      return (0);
	}

   DWORD dwRead = 0;
   char chRead;
   int i = 0;

   while (ReadFile(hComm, &amp;chRead, 1, &amp;dwRead, NULL))
   {
       if (dwRead != 1)
           break;

       buffer[i++] = chRead;

		 if (i == iMaxCount)
			 break;
	}

	return (i);
}
</code></pre>
<p>Und als cpp datei hab ich mir dann überlegt dass man diese Methoden ungefähr so aufrufen könnte!</p>
<pre><code class="language-cpp">#include &lt;iostream&gt;
#include &lt;serialcom&gt;

using namespace std;

void main()
{
  char* c;

  CSerial serial;
  serial.ModeSet(9600,8,0,1);
  serial.Open(1,9600,8,0,1);
  serial.ReadData(c,2);
  serial.Close();

  cout&lt;&lt;c&lt;&lt;endl;
  system(&quot;pause&quot;);
}
</code></pre>
<p>Bekomm aber nicht wirklich was sinnvolles raus hoffe ihr könnt mir sagen ob ich da irgendwas unsinniges reingebaut habe...</p>
<p>Vielen Dank schon mal!</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1136339</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1136339</guid><dc:creator><![CDATA[Kalle77]]></dc:creator><pubDate>Wed, 13 Sep 2006 06:51:11 GMT</pubDate></item><item><title><![CDATA[Reply to Hilfe beim kommunikation mit COM Port on Wed, 13 Sep 2006 07:10:36 GMT]]></title><description><![CDATA[<p>Kalle77 schrieb:</p>
<blockquote>
<p>Bekomm aber nicht wirklich was sinnvolles raus...</p>
</blockquote>
<p>Geht's eventuell etwas genauer? Was schickst du an den COMPort, was gibt er dir aus, gibt's Fehlermeldungen?</p>
<p>Mfg, North.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1136350</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1136350</guid><dc:creator><![CDATA[North]]></dc:creator><pubDate>Wed, 13 Sep 2006 07:10:36 GMT</pubDate></item><item><title><![CDATA[Reply to Hilfe beim kommunikation mit COM Port on Wed, 13 Sep 2006 07:21:12 GMT]]></title><description><![CDATA[<p>Also das Programm soll von einer Messschieber den Wert herauslesen damit ich ihn dann weiter verarbeiten kann. Aber im Moment bringt er keine Zahlen sondern nur Wirrwarr was dem ASCII Code sehr nahe kommt (Bsp: ê$4). Habe erst gedacht das ist die Adresse von Zeiger, aber das wars auch nicht!</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1136354</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1136354</guid><dc:creator><![CDATA[Kalle77]]></dc:creator><pubDate>Wed, 13 Sep 2006 07:21:12 GMT</pubDate></item><item><title><![CDATA[Reply to Hilfe beim kommunikation mit COM Port on Wed, 13 Sep 2006 08:25:31 GMT]]></title><description><![CDATA[<p>Nun, deine Variable c ist ein Pointer auf char, also quasi ein String. Also gibt dein Programm natürlich auch nur Zeichen aus und keine Zahlen.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1136407</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1136407</guid><dc:creator><![CDATA[North]]></dc:creator><pubDate>Wed, 13 Sep 2006 08:25:31 GMT</pubDate></item><item><title><![CDATA[Reply to Hilfe beim kommunikation mit COM Port on Wed, 13 Sep 2006 09:04:07 GMT]]></title><description><![CDATA[<p>Klingt erstmal logisch (Ich Depp!!!). Du meinst also wenn ich die Pointer c als float instanziere müsste er die Zahlen vom Messschieber übertragen!</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1136433</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1136433</guid><dc:creator><![CDATA[Kalle77]]></dc:creator><pubDate>Wed, 13 Sep 2006 09:04:07 GMT</pubDate></item><item><title><![CDATA[Reply to Hilfe beim kommunikation mit COM Port on Wed, 13 Sep 2006 11:06:33 GMT]]></title><description><![CDATA[<p>Ich hab von c++ leider keinen Schimmer. Ich programmiere nur in c, weil ich in der Regel recht Hardware nah arbeite.<br />
Wenn der Messschiebr float überträgt(bist du sicher?), dann sähe das bei mir etwa so aus:</p>
<pre><code class="language-cpp">float zahl;

zahl = (c[0]&lt;&lt;24)|(c[1]&lt;&lt;16)|(c[2]&lt;&lt;8)|c[3];
printf(&quot;%f&quot;,zahl);
</code></pre>
<p>Mfg, North.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1136526</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1136526</guid><dc:creator><![CDATA[North]]></dc:creator><pubDate>Wed, 13 Sep 2006 11:06:33 GMT</pubDate></item><item><title><![CDATA[Reply to Hilfe beim kommunikation mit COM Port on Wed, 13 Sep 2006 11:15:53 GMT]]></title><description><![CDATA[<p>Auf jedenfall liefert der Schieber Kommzahlen. Aber sonst sieht der Code doch eigentlich recht okay aus. Er kompiliert ja auch ohne Probleme. Weiß jetzt allerdigs nicht wo ich deinen Code hinpacken soll bzw was er ersetzt!</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1136533</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1136533</guid><dc:creator><![CDATA[Kalle77]]></dc:creator><pubDate>Wed, 13 Sep 2006 11:15:53 GMT</pubDate></item><item><title><![CDATA[Reply to Hilfe beim kommunikation mit COM Port on Wed, 13 Sep 2006 11:53:56 GMT]]></title><description><![CDATA[<p>Probier doch mal folgendes:</p>
<p>Ersetze:</p>
<pre><code>serial.ReadData(c,2);
serial.Close();

cout&lt;&lt;c&lt;&lt;endl;
</code></pre>
<p>Durch:</p>
<pre><code>float zahl;
</code></pre>
<p>.<br />
.<br />
.</p>
<pre><code>serial.ReadData(c,4);  //float sind 4 Byte
serial.Close();
zahl = (c[0]&lt;&lt;24)|(c[1]&lt;&lt;16)|(c[2]&lt;&lt;8)|c[3];
cout&lt;&lt;zahl&lt;&lt;endl;
</code></pre>
]]></description><link>https://www.c-plusplus.net/forum/post/1136565</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1136565</guid><dc:creator><![CDATA[North]]></dc:creator><pubDate>Wed, 13 Sep 2006 11:53:56 GMT</pubDate></item><item><title><![CDATA[Reply to Hilfe beim kommunikation mit COM Port on Wed, 13 Sep 2006 12:43:32 GMT]]></title><description><![CDATA[<p>Hab das jetzt mal so probiert aber er gibt immer den selben Wert aus. das kann ja auch nicht richtig sein, weil sich ja der Wert des Schibers verändert.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1136606</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1136606</guid><dc:creator><![CDATA[Kalle77]]></dc:creator><pubDate>Wed, 13 Sep 2006 12:43:32 GMT</pubDate></item><item><title><![CDATA[Reply to Hilfe beim kommunikation mit COM Port on Wed, 13 Sep 2006 13:14:17 GMT]]></title><description><![CDATA[<p>Mir fällt gerade auf, dass du für c garkeinen Speicher allozierst <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f62e.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--face_with_open_mouth"
      title=":open_mouth:"
      alt="😮"
    /><br />
Ansonsten sieht das eigentlich ganz OK aus.<br />
Was genau ist denn das für ein Messschieber? Gibt's da 'nen Datenblatt zu?</p>
<p>Mfg, North.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1136645</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1136645</guid><dc:creator><![CDATA[North]]></dc:creator><pubDate>Wed, 13 Sep 2006 13:14:17 GMT</pubDate></item><item><title><![CDATA[Reply to Hilfe beim kommunikation mit COM Port on Wed, 13 Sep 2006 13:24:58 GMT]]></title><description><![CDATA[<p>Was genau meinst du mir allozieren? (auch wenn doof klingt)<br />
Es ist ein Digitalschieber und hat Werte mit 3 Nachkomm stellen. Ein Datenblatt gibt es glaub ich nicht mehr.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1136653</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1136653</guid><dc:creator><![CDATA[Kalle77]]></dc:creator><pubDate>Wed, 13 Sep 2006 13:24:58 GMT</pubDate></item><item><title><![CDATA[Reply to Hilfe beim kommunikation mit COM Port on Wed, 13 Sep 2006 13:45:45 GMT]]></title><description><![CDATA[<p>char *c; reserviert nur den Speicher für einen Pointer auf char.<br />
Wenn du den mit Leben füllen willst, dann musst du dem noch entsprechend der Anzahl der Element Speicher zuweisen.<br />
Also,<br />
1. dynamisch:</p>
<pre><code>char *c;
c = (char*)malloc(4*sizeof(char));
</code></pre>
<p>oder</p>
<pre><code>c = (char*)calloc(4,sizeof(char));
</code></pre>
<p>oder</p>
<pre><code>c = (char*)LocalAlloc(LMEM_ZEROINIT,4*sizeof(char));
</code></pre>
<p>2. statisch</p>
<pre><code>char c[4];
</code></pre>
<p>Bei 1. am Schluß nicht das free(c) bzw. LocalFree(c) vergessen.<br />
Komisch, dass dein Programm nicht abgeschmiert ist.</p>
<p>Mfg, North.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1136674</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1136674</guid><dc:creator><![CDATA[North]]></dc:creator><pubDate>Wed, 13 Sep 2006 13:45:45 GMT</pubDate></item><item><title><![CDATA[Reply to Hilfe beim kommunikation mit COM Port on Thu, 14 Sep 2006 06:59:21 GMT]]></title><description><![CDATA[<p>Also es hat sich schon mal was getan aber er gibt immer noch eine Zahl aus und zwar immer die selbe. Trotz Veränderung am Schieber. Kann es sein das gar nicht der COM Port angesprochen wird?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1137023</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1137023</guid><dc:creator><![CDATA[Kalle77]]></dc:creator><pubDate>Thu, 14 Sep 2006 06:59:21 GMT</pubDate></item><item><title><![CDATA[Reply to Hilfe beim kommunikation mit COM Port on Thu, 14 Sep 2006 07:38:41 GMT]]></title><description><![CDATA[<p>OK, das kriegen wir schon raus.<br />
1. Überprüf doch mal mit dem Hyperterminal o.ä. was an der seriellen Schnittstelle ankommt.<br />
2. Check mal die Rückgabewerte der Methoden die du aufrufst.<br />
3. Steht da auf deinem Schieber nicht irgend ein Name oder Nummer drauf nach der man mal googeln könnte?</p>
<p>Mfg, North.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1137037</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1137037</guid><dc:creator><![CDATA[North]]></dc:creator><pubDate>Thu, 14 Sep 2006 07:38:41 GMT</pubDate></item><item><title><![CDATA[Reply to Hilfe beim kommunikation mit COM Port on Thu, 14 Sep 2006 15:28:03 GMT]]></title><description><![CDATA[<p>Hi</p>
<p>Also, ich würde auch erstmal anfangen, alle rückgabewerte zu überprüfen, und über GetLastError rauskriegen, ob alles geklappt hat.</p>
<p>Dann mußt du erstmal wissen, welche baudrate der Meßschieber braucht, 9600 ist zwar anzunehmen, aber man weiß nie.</p>
<p>Dein Pointer auf char sollte genausogroß sein, wie iMaxCount.</p>
<p>Mfg Reinhold Fischer</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1137458</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1137458</guid><dc:creator><![CDATA[Reinhold Fischer]]></dc:creator><pubDate>Thu, 14 Sep 2006 15:28:03 GMT</pubDate></item><item><title><![CDATA[Reply to Hilfe beim kommunikation mit COM Port on Fri, 15 Sep 2006 06:56:05 GMT]]></title><description><![CDATA[<p>Etwas andere Wortwahl aber im Grunde was ich meinte <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f642.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--slightly_smiling_face"
      title=":)"
      alt="🙂"
    /></p>
]]></description><link>https://www.c-plusplus.net/forum/post/1137729</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1137729</guid><dc:creator><![CDATA[North]]></dc:creator><pubDate>Fri, 15 Sep 2006 06:56:05 GMT</pubDate></item><item><title><![CDATA[Reply to Hilfe beim kommunikation mit COM Port on Fri, 15 Sep 2006 08:48:01 GMT]]></title><description><![CDATA[<p>Merci. Hab ich gemacht! Aber jetzt sagt er Fehler beim Setzen der Com Port Parameter.</p>
<p>Hab hier mal den aktuellen Code:</p>
<pre><code class="language-cpp">#include &lt;iostream&gt;
#include &lt;windows.h&gt;

class CSerial
{

public:
	CSerial();
	~CSerial();

	BOOL Open (int nComPortNr, int nBaud, int nBits, int nParity, int nStopp);
	BOOL Close (void);
	BOOL ModeSet (int nBaud, int nBits, int nParity, int nStopp);
	BOOL SetTimeout (int iTotalReadTimeout);
	BOOL IsOpen (void);

	int ReadData (char *buffer, int iMaxCount);
	int SendData (const char *buffer, int iBytesToWrite);
	BOOL WriteCommByte (unsigned char ucByte);

private:
	HANDLE hComm;
	DCB dcb_alt;
	COMMTIMEOUTS timeouts_alt;
};

CSerial::CSerial()
{
	hComm = INVALID_HANDLE_VALUE;
}

CSerial::~CSerial()
{
	Close ();
}

BOOL CSerial::IsOpen()
{
   if (INVALID_HANDLE_VALUE != hComm)
       return (TRUE);
	else
		return (FALSE);
}

BOOL CSerial::ModeSet (int nBaud, int nBits, int nParity, int nStopp)
{
   if (INVALID_HANDLE_VALUE == hComm)
	{
		SetLastError(ERROR_INVALID_HANDLE);
      return (FALSE);
	}

   DCB dcb;

   ZeroMemory (&amp;dcb, sizeof(dcb));
	dcb.DCBlength = sizeof(DCB);

   if (!GetCommState (hComm, &amp;dcb))
	{
		//close();
		MessageBox (NULL, &quot;Fehler beim Ändern der COM-Port Parameter\nGetCommState()&quot;,
                  NULL, NULL);
		return (FALSE);
	}

   dcb.BaudRate = nBaud;
   dcb.ByteSize = (BYTE)nBits;
   dcb.Parity   = (BYTE)nParity;
	dcb.StopBits = (BYTE)nStopp;

   if (!SetCommState (hComm, &amp;dcb))
  {
      Close ();
      MessageBox (NULL, &quot;Fehler beim Ändern der COM-Port Parameter\nSetCommState()&quot;,
                  NULL, NULL);
      return (FALSE);
   }

	return (TRUE);
}

BOOL CSerial::Open (int nComPortNr, int nBaud, int nBits, int nParity, int nStopp)
{
   if (INVALID_HANDLE_VALUE != hComm)
	{
      return (TRUE);
	}

   char szPort[16];

   wsprintf (szPort, &quot;\\\\.\\COM%d&quot;, nComPortNr);

   hComm = CreateFile (szPort,
						  GENERIC_READ | GENERIC_WRITE,
                    0,
                    0,
                    OPEN_EXISTING,
                    FILE_ATTRIBUTE_NORMAL,
                    NULL);

   if (hComm == INVALID_HANDLE_VALUE)
   {
      MessageBox (NULL, &quot;Fehler beim Öffnen des COM-Ports!\nCreateFile()&quot;, NULL, NULL);

      return (FALSE);
   }

   if (!GetCommTimeouts(hComm, &amp;timeouts_alt))
   {
		DWORD dwError = GetLastError();
		Close ();
		SetLastError(dwError);

      		MessageBox (NULL, &quot;Fehler beim Öffnen des COM-Ports!\nGetCommTimeouts()&quot;,
                  NULL, NULL);
      	return (FALSE);

   }

   COMMTIMEOUTS timeouts;
   timeouts.ReadIntervalTimeout = MAXDWORD ;
   timeouts.ReadTotalTimeoutMultiplier = MAXDWORD ;
   timeouts.ReadTotalTimeoutConstant = 3000; // Timeout ist 3000ms
   timeouts.WriteTotalTimeoutMultiplier = 1000;
   timeouts.WriteTotalTimeoutConstant = 1000;

   if (!SetCommTimeouts(hComm, &amp;timeouts))
   {
		DWORD dwError = GetLastError();
		Close ();
		SetLastError(dwError);
		MessageBox (NULL, &quot;Fehler beim Öffnen des COM-Ports!\nSetCommTimeouts()&quot;,
                  NULL, NULL);

      return (FALSE);
   }

   DCB dcb;
   ZeroMemory (&amp;dcb, sizeof(dcb));
	dcb.DCBlength = sizeof(DCB);

   if (!GetCommState (hComm, &amp;dcb))
   {
		DWORD dwError = GetLastError();
		Close ();
		SetLastError(dwError);
		MessageBox (NULL, &quot;Fehler beim Öffnen des COM-Ports!\nGetCommState()&quot;,
                  NULL, NULL);

      return (FALSE);
   }

	dcb_alt = dcb;
	dcb.fBinary = TRUE; // muss immer &quot;TRUE&quot; sein!
	dcb.fParity = TRUE;
	dcb.fOutxCtsFlow = FALSE;
	dcb.fOutxDsrFlow = FALSE;
	dcb.fDtrControl = DTR_CONTROL_ENABLE;
	dcb.fDsrSensitivity = FALSE;
	dcb.fTXContinueOnXoff = TRUE;
	dcb.fOutX = FALSE;
	dcb.fInX = FALSE;
	dcb.fErrorChar = FALSE;
	dcb.fNull = FALSE;
	dcb.fRtsControl = RTS_CONTROL_ENABLE;
	dcb.fAbortOnError = FALSE;
	dcb.wReserved = 0; // muss immer &quot;0&quot; sein!

	dcb.BaudRate = nBaud;
	dcb.ByteSize = (BYTE)nBits;
	dcb.Parity   = (BYTE)nParity;
	dcb.StopBits = (BYTE)nStopp;

   dcb.fParity = (dcb.Parity != NOPARITY);

   if (!SetCommState(hComm, &amp;dcb))
   {
		DWORD dwError = GetLastError();
		Close ();
		SetLastError(dwError);
		MessageBox (NULL, &quot;Fehler beim setzen der COM-Port Parameter\nSetCommState()&quot;,
                  NULL, NULL);

      return (FALSE);
   }

   return(TRUE);
}

BOOL CSerial::Close (void)
{
   if (INVALID_HANDLE_VALUE == hComm) // COM-Port überhaupt geöffnet?
       return(TRUE);

   if (!SetCommTimeouts(hComm, &amp;timeouts_alt))
   {
      MessageBox (NULL, &quot;Fehler beim Schließen des COM-Ports\nSetCommTimeouts()&quot;,
                  NULL, NULL);
      return (FALSE);
   }
   // alte Parameter zurückschreiben. Bei Fehler ist hier Schluss!
   if (!SetCommState (hComm, &amp;dcb_alt)) 
   {
      MessageBox (NULL, &quot;Fehler beim Schließen des COM-Ports\nSetCommState()&quot;,
                  NULL, NULL);
      return (FALSE);
   }
   CloseHandle (hComm); // Port schließen
   hComm = INVALID_HANDLE_VALUE; // das Handle zurücksetzen

   return (TRUE);
}

BOOL CSerial::SetTimeout (int iTotalReadTimeout)
{
   if (INVALID_HANDLE_VALUE == hComm)
      return (TRUE);

   COMMTIMEOUTS timeouts;
   timeouts.ReadIntervalTimeout = MAXDWORD ;
   timeouts.ReadTotalTimeoutMultiplier = MAXDWORD ;
   timeouts.ReadTotalTimeoutConstant = (DWORD) iTotalReadTimeout;
   timeouts.WriteTotalTimeoutMultiplier = 1000;
   timeouts.WriteTotalTimeoutConstant = 1000;

   if (!SetCommTimeouts(hComm, &amp;timeouts))

      return (FALSE);

   return(TRUE);
}

BOOL CSerial::WriteCommByte (unsigned char ucByte)
{
   if (INVALID_HANDLE_VALUE == hComm)
	{

      	return (FALSE);
	}

   if (!TransmitCommChar(hComm, ucByte))
      {
      MessageBox (NULL, &quot;Fehler beim Schreiben auf COM-Port!\nTransmitCommChar()&quot;,
                  NULL, NULL);
      }

   return (TRUE);
}

int CSerial::SendData (const char *buffer, int iBytesToWrite)
{
   if (INVALID_HANDLE_VALUE == hComm)
	{

      return (0);
	}

   DWORD dwBytesWritten = 0;
   WriteFile(hComm, buffer, iBytesToWrite, &amp;dwBytesWritten, NULL);

   return ((int) dwBytesWritten);
}

int CSerial::ReadData (char *buffer, int iMaxCount)
{
   if (INVALID_HANDLE_VALUE == hComm)
	{
		SetLastError(ERROR_INVALID_HANDLE);
      return (0);
	}

   DWORD dwRead = 0;
   char chRead;
   int i = 0;

   while (ReadFile(hComm, &amp;chRead, 1, &amp;dwRead, NULL))
   {
       if (dwRead != 1)
           break;

       buffer[i++] = chRead;

		 if (i == iMaxCount)
			 break;
	}

	return (i);
}
</code></pre>
<p>Aber die Parameter müssten eigentlich stimmen. Hab da bei Systemsteuerung Ssytem.. die COM eigenschaften übernommen oder müssen da andere rein??</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1137811</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1137811</guid><dc:creator><![CDATA[Kalle77]]></dc:creator><pubDate>Fri, 15 Sep 2006 08:48:01 GMT</pubDate></item><item><title><![CDATA[Reply to Hilfe beim kommunikation mit COM Port on Fri, 15 Sep 2006 11:25:21 GMT]]></title><description><![CDATA[<p>Füg doch mal anstatt:</p>
<pre><code>SetLastError(dwError);
MessageBox (NULL, &quot;Fehler beim setzen der COM-Port Parameter\nSetCommState()&quot;,
                  NULL, NULL);
</code></pre>
<p>folgendes ein:</p>
<pre><code>LPVOID	error_text;
FormatMessage(FORMAT_MESSAGE_ALLOCATE_BUFFER
             |FORMAT_MESSAGE_FROM_SYSTEM
             |FORMAT_MESSAGE_FROM_HMODULE
             |FORMAT_MESSAGE_IGNORE_INSERTS
             ,NULL,dwError,0,(LPTSTR) &amp;error_text,0,NULL);
MessageBox(NULL,(LPCSTR)error_text,NULL,NULL);
LocalFree(error_text);
</code></pre>
<p>und sag was er ausgibt.</p>
<p>Mfg, North.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1137878</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1137878</guid><dc:creator><![CDATA[North]]></dc:creator><pubDate>Fri, 15 Sep 2006 11:25:21 GMT</pubDate></item><item><title><![CDATA[Reply to Hilfe beim kommunikation mit COM Port on Fri, 15 Sep 2006 12:41:22 GMT]]></title><description><![CDATA[<p>Hab ich gemacht!</p>
<p>Jetzt zeigt er das Fehlerfenster aber es steht nix drin also alles grau?<br />
Was sagt mir das jetzt? Na ich hoffe euch sagt es was denn ich steh ziehmlich auf'm Schlauch.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1137936</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1137936</guid><dc:creator><![CDATA[Kalle77]]></dc:creator><pubDate>Fri, 15 Sep 2006 12:41:22 GMT</pubDate></item><item><title><![CDATA[Reply to Hilfe beim kommunikation mit COM Port on Fri, 15 Sep 2006 12:46:32 GMT]]></title><description><![CDATA[<p>Bin ich jetzt doof <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f615.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--confused_face"
      title=":confused:"
      alt="😕"
    /><br />
Der sollte dir dann eigentlich die Fehlermeldung von SetCommState() ausgeben...<br />
Was hat denn dwError für 'nen Wert?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1137940</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1137940</guid><dc:creator><![CDATA[North]]></dc:creator><pubDate>Fri, 15 Sep 2006 12:46:32 GMT</pubDate></item><item><title><![CDATA[Reply to Hilfe beim kommunikation mit COM Port on Fri, 15 Sep 2006 12:50:36 GMT]]></title><description><![CDATA[<p>Sorry für doppelpost:</p>
<p>Probier mal FormatMessage ohne |FORMAT_MESSAGE_FROM_HMODULE</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1137945</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1137945</guid><dc:creator><![CDATA[North]]></dc:creator><pubDate>Fri, 15 Sep 2006 12:50:36 GMT</pubDate></item><item><title><![CDATA[Reply to Hilfe beim kommunikation mit COM Port on Fri, 15 Sep 2006 13:00:38 GMT]]></title><description><![CDATA[<p>Er gibt aus:</p>
<p>Fehler falscher Parameter! <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f615.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--confused_face"
      title=":confused:"
      alt="😕"
    /></p>
<p>Das hat ich doch schonmal...</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1137958</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1137958</guid><dc:creator><![CDATA[Kalle77]]></dc:creator><pubDate>Fri, 15 Sep 2006 13:00:38 GMT</pubDate></item><item><title><![CDATA[Reply to Hilfe beim kommunikation mit COM Port on Fri, 15 Sep 2006 13:20:56 GMT]]></title><description><![CDATA[<p>Kalle77 schrieb:</p>
<blockquote>
<p>Das hat ich doch schonmal...</p>
</blockquote>
<p>Wann? Bisher wußten wir nur wo der Fehler auftrat, jetzt wissen wir was es für ein Fehler ist.<br />
Also ich mache bei mir folgende Einstellungen:</p>
<pre><code>ZeroMemory (&amp;dcb, sizeof(dcb));
dcb.DCBlength=sizeof(sDcb);
dcb.BaudRate		= 9600;
dcb.fParity		= FALSE;
dcb.fBinary		= TRUE;
dcb.Parity		= NOPARITY;
dcb.StopBits		= ONESTOPBIT;
dcb.fOutxCtsFlow	 	= FALSE;
dcb.fOutxDsrFlow 		= FALSE;
dcb.fDtrControl		= DTR_CONTROL_ENABLE;
dcb.fRtsControl		= RTS_CONTROL_ENABLE;
dcb.fDsrSensitivity	= FALSE;
dcb.fAbortOnError		= FALSE;
dcb.ByteSize		= 8;
</code></pre>
<p>Den Rest lasse ich unverändert(auch kein GetCommState).<br />
Damit klappts.</p>
<p>MfG, North.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1137968</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1137968</guid><dc:creator><![CDATA[North]]></dc:creator><pubDate>Fri, 15 Sep 2006 13:20:56 GMT</pubDate></item><item><title><![CDATA[Reply to Hilfe beim kommunikation mit COM Port on Fri, 15 Sep 2006 13:38:20 GMT]]></title><description><![CDATA[<p>Die Fehlermeldung hatte ich heut gegen 11:00 schon mal irgendwie!</p>
<p>Also nach der Änderung bringt er jetzt 3 Fehlermeldungen<br />
1. Fehler beim schließen des COM Ports SetCommState()<br />
2. Fehler beim ändern des COM Ports SetCommState()<br />
3. Fehler beim schließen des COM Ports SetCommState()</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1137976</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1137976</guid><dc:creator><![CDATA[Kalle77]]></dc:creator><pubDate>Fri, 15 Sep 2006 13:38:20 GMT</pubDate></item><item><title><![CDATA[Reply to Hilfe beim kommunikation mit COM Port on Fri, 15 Sep 2006 13:55:29 GMT]]></title><description><![CDATA[<p>Wenn ich das richtig sehe, gibt's jetz kein Prblem mehr beim Öffnen des Ports.<br />
Hast du immernoch ModeSet in deiner main? Wenn ja, schmeiß raus.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1137988</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1137988</guid><dc:creator><![CDATA[North]]></dc:creator><pubDate>Fri, 15 Sep 2006 13:55:29 GMT</pubDate></item><item><title><![CDATA[Reply to Hilfe beim kommunikation mit COM Port on Thu, 21 Sep 2006 06:39:31 GMT]]></title><description><![CDATA[<p>Sorry habe das Problem immer noch! ModeSet hab ich rausgehauen und jetzt kommt der Fehler beim schließen. Nur warum ist die Frage? irgendwelche Anregungen. Ich find der Code scheint ganz okay zu sein!</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1141547</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1141547</guid><dc:creator><![CDATA[Kalle77]]></dc:creator><pubDate>Thu, 21 Sep 2006 06:39:31 GMT</pubDate></item></channel></rss>