<?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[Probleme mit serieller Datenübertragung an COM1]]></title><description><![CDATA[<p>Servus!</p>
<p>Ich habe ein Messgerät an COM1 angeschlossen. Führt man an dem Gerät eine Messung durch sendet dieses anschließend das Ergebnis an den PC. Mit dem Hyperterminal von WinXP empfange ich folgenden String:</p>
<pre><code class="language-cpp">&quot;&lt;10V(191)223&gt;
&lt;10U(16.12.1996)066&gt;
&lt;10D(#01:0.22#02:0.22#03:0.22#04:0.24#05:0.25#06:0.28#07:0.34#08:0.42#09:0.55#10
:0.78#11:1.10#12:1.48#13:1.99#14:2.42#15:2.74#16:2.88#17:2.91#18:2.93#19:2.94#20
:2.96#21:2.98)145&gt;
&lt;10K(#01:2.23#02:1.69#03:0.21#04:2.98#05:1.10#06:1.63#07:1.45#08:2.23#09:1.00#10
:0.25#11:2.00#12:4011)140&gt;&quot;
</code></pre>
<p>Soweit ist alles in Ordnung. In meiner Anwendung bearbeite ich die Kommunikation mit COM1 wie folgt:</p>
<pre><code class="language-cpp">// Variablen für Übertragung
int iPort =1;
int iBaud =9600;
int iSize =8;
int iParity =0;
int stopbit=1;
int fRtsControl =1;
int iTimeout =50;
int iTotalTimeout =1000;

char puffer[400];
for(int i=0; i&lt;400; i++) puffer[i] = 'x';
DWORD len = 323;
DWORD receive = 0;
bool ret = false;

char port[]= &quot;COM0123456789:&quot;;
sprintf(port, &quot;COM%i:&quot;, iPort);

// Erzeuge Handle für COM1
HANDLE m_hPort = CreateFile(	port, 
	GENERIC_READ | GENERIC_WRITE, 
	0, 
	NULL, 
	OPEN_EXISTING,
	FILE_ATTRIBUTE_NORMAL, 
	NULL);
</code></pre>
<p>Das Handle für den COMPort ist o.K. hat dann immer die Adresse 0x000007ac<br />
Die Parameter für CreateFile() habe ich aus einer Beipielanwendung entnommen.</p>
<pre><code class="language-cpp">// Setzte Timeouts
COMMTIMEOUTS comtime;
GetCommTimeouts(m_hPort, &amp;comtime);
comtime.ReadIntervalTimeout= iTimeout;
comtime.ReadTotalTimeoutConstant= iTotalTimeout;
comtime.WriteTotalTimeoutConstant= iTotalTimeout;
comtime.ReadTotalTimeoutMultiplier=2;
comtime.WriteTotalTimeoutMultiplier=0;
SetCommTimeouts(m_hPort, &amp;comtime);

// Setze Kommunikationsparameter
DCB dcb;							
GetCommState(m_hPort, &amp;dcb);
dcb.BaudRate= iBaud;
dcb.ByteSize= iSize;
dcb.DCBlength= 28;
dcb.EofChar= 0;
dcb.ErrorChar= 0;
dcb.fRtsControl= fRtsControl;
dcb.Parity= iParity;
dcb.StopBits= stopbit;
dcb.fInX=0;
dcb.fOutX=0;
dcb.fAbortOnError= 1;
</code></pre>
<p>Diese Beiden Objekte verstehe ich nicht wirklich. Habe die Parameter aus eine Beispielanwendung übernommen und nur die spezifischen Parameter vom Hersteller des Gerätes (iBaud, iSize, iParity, stopbit) geändert.</p>
<pre><code class="language-cpp">// Lese von COM bis spezielles Zeichen im String enthalten ist
while (puffer[220] != 'K') {
    ReadFile(m_hPort, puffer, len, &amp;receive, NULL);
}

CloseHandle(m_hPort);
</code></pre>
<p>Ab hier wirds problematisch. Wenn ich mein System neu starte und meine Anwendung laufen lasse (debugmodus) erhalte ich zwar keinen Fehler, aber nur merkwürde Zeichen anstelle den Messwerten (wie oben). So sieht der String dann aus:</p>
<pre><code class="language-cpp">&quot;2d!(j4zJJJBJ_JJijmjOJjjOJjOBjBJObB~JJBJJiJBjBjj&quot;
</code></pre>
<p>Wenn ich die Anwendung pausiere und kurz das Hyperterminal starte und die Messwerte erneut übertragen lasse, erscheinen Sie in gewünschter Form. Nun schließe ich das Hyperterminal und starte meine Anwendung erneut. Die jetzt übertragenen Werte entsprechen den gewünschten.</p>
<p>Was kann ich tun, ohne nach jedem Neustart erst das Hyperterminal zu starten? <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f61e.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--disappointed_face"
      title=":("
      alt="😞"
    /></p>
]]></description><link>https://www.c-plusplus.net/forum/topic/160027/probleme-mit-serieller-datenübertragung-an-com1</link><generator>RSS for Node</generator><lastBuildDate>Tue, 28 Jul 2026 09:21:54 GMT</lastBuildDate><atom:link href="https://www.c-plusplus.net/forum/topic/160027.rss" rel="self" type="application/rss+xml"/><pubDate>Thu, 21 Sep 2006 09:07:38 GMT</pubDate><ttl>60</ttl><item><title><![CDATA[Reply to Probleme mit serieller Datenübertragung an COM1 on Thu, 21 Sep 2006 09:10:31 GMT]]></title><description><![CDATA[<p>Servus!</p>
<p>Ich habe ein Messgerät an COM1 angeschlossen. Führt man an dem Gerät eine Messung durch sendet dieses anschließend das Ergebnis an den PC. Mit dem Hyperterminal von WinXP empfange ich folgenden String:</p>
<pre><code class="language-cpp">&quot;&lt;10V(191)223&gt;
&lt;10U(16.12.1996)066&gt;
&lt;10D(#01:0.22#02:0.22#03:0.22#04:0.24#05:0.25#06:0.28#07:0.34#08:0.42#09:0.55#10
:0.78#11:1.10#12:1.48#13:1.99#14:2.42#15:2.74#16:2.88#17:2.91#18:2.93#19:2.94#20
:2.96#21:2.98)145&gt;
&lt;10K(#01:2.23#02:1.69#03:0.21#04:2.98#05:1.10#06:1.63#07:1.45#08:2.23#09:1.00#10
:0.25#11:2.00#12:4011)140&gt;&quot;
</code></pre>
<p>Soweit ist alles in Ordnung. In meiner Anwendung bearbeite ich die Kommunikation mit COM1 wie folgt:</p>
<pre><code class="language-cpp">// Variablen für Übertragung
int iPort =1;
int iBaud =9600;
int iSize =8;
int iParity =0;
int stopbit=1;
int fRtsControl =1;
int iTimeout =50;
int iTotalTimeout =1000;

char puffer[400];
for(int i=0; i&lt;400; i++) puffer[i] = 'x';
DWORD len = 323;
DWORD receive = 0;
bool ret = false;

char port[]= &quot;COM0123456789:&quot;;
sprintf(port, &quot;COM%i:&quot;, iPort);

// Erzeuge Handle für COM1
HANDLE m_hPort = CreateFile(	port, 
	GENERIC_READ | GENERIC_WRITE, 
	0, 
	NULL, 
	OPEN_EXISTING,
	FILE_ATTRIBUTE_NORMAL, 
	NULL);
</code></pre>
<p>Das Handle für den COMPort ist o.K. hat dann immer die Adresse 0x000007ac<br />
Die Parameter für CreateFile() habe ich aus einer Beipielanwendung entnommen.</p>
<pre><code class="language-cpp">// Setzte Timeouts
COMMTIMEOUTS comtime;
GetCommTimeouts(m_hPort, &amp;comtime);
comtime.ReadIntervalTimeout= iTimeout;
comtime.ReadTotalTimeoutConstant= iTotalTimeout;
comtime.WriteTotalTimeoutConstant= iTotalTimeout;
comtime.ReadTotalTimeoutMultiplier=2;
comtime.WriteTotalTimeoutMultiplier=0;
SetCommTimeouts(m_hPort, &amp;comtime);

// Setze Kommunikationsparameter
DCB dcb;							
GetCommState(m_hPort, &amp;dcb);
dcb.BaudRate= iBaud;
dcb.ByteSize= iSize;
dcb.DCBlength= 28;
dcb.EofChar= 0;
dcb.ErrorChar= 0;
dcb.fRtsControl= fRtsControl;
dcb.Parity= iParity;
dcb.StopBits= stopbit;
dcb.fInX=0;
dcb.fOutX=0;
dcb.fAbortOnError= 1;
</code></pre>
<p>Diese Beiden Objekte verstehe ich nicht wirklich. Habe die Parameter aus eine Beispielanwendung übernommen und nur die spezifischen Parameter vom Hersteller des Gerätes (iBaud, iSize, iParity, stopbit) geändert.</p>
<pre><code class="language-cpp">// Lese von COM bis spezielles Zeichen im String enthalten ist
while (puffer[220] != 'K') {
    ReadFile(m_hPort, puffer, len, &amp;receive, NULL);
}

CloseHandle(m_hPort);
</code></pre>
<p>Ab hier wirds problematisch. Wenn ich mein System neu starte und meine Anwendung laufen lasse (debugmodus) erhalte ich zwar keinen Fehler, aber nur merkwürde Zeichen anstelle den Messwerten (wie oben). So sieht der String dann aus:</p>
<pre><code class="language-cpp">&quot;2d!(j4zJJJBJ_JJijmjOJjjOJjOBjBJObB~JJBJJiJBjBjj&quot;
</code></pre>
<p>Wenn ich die Anwendung pausiere und kurz das Hyperterminal starte und die Messwerte erneut übertragen lasse, erscheinen Sie in gewünschter Form. Nun schließe ich das Hyperterminal und starte meine Anwendung erneut. Die jetzt übertragenen Werte entsprechen den gewünschten.</p>
<p>Was kann ich tun, ohne nach jedem Neustart erst das Hyperterminal zu starten? <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f61e.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--disappointed_face"
      title=":("
      alt="😞"
    /></p>
]]></description><link>https://www.c-plusplus.net/forum/post/1141648</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1141648</guid><dc:creator><![CDATA[Fluffy]]></dc:creator><pubDate>Thu, 21 Sep 2006 09:10:31 GMT</pubDate></item><item><title><![CDATA[Reply to Probleme mit serieller Datenübertragung an COM1 on Thu, 21 Sep 2006 10:39:11 GMT]]></title><description><![CDATA[<p>Nimm doch die Klasse CSerial oder CSerialMFC von <a href="http://www.codeproject.com" rel="nofollow">www.codeproject.com</a><br />
Dazu gibts hier im Board auch genug Beiträge. Die funktioniert gut, außerdem kannst Du Dir aus der Beispielanwenung gleich noch die Dialoge für die Einstellungen ziehen. Dort kann man auch nachrichtenbasiert arbeiten, muss also nicht ständige die COM-Schnittstelle abfragen.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1141700</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1141700</guid><dc:creator><![CDATA[AndyDD]]></dc:creator><pubDate>Thu, 21 Sep 2006 10:39:11 GMT</pubDate></item><item><title><![CDATA[Reply to Probleme mit serieller Datenübertragung an COM1 on Thu, 21 Sep 2006 13:10:08 GMT]]></title><description><![CDATA[<p>Könnte evtl. an einem falschen Parameter der Schnittstelle liegen, falsche Geschwindigkeit, Start, Stop Bit etc.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1141822</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1141822</guid><dc:creator><![CDATA[UserMarcus]]></dc:creator><pubDate>Thu, 21 Sep 2006 13:10:08 GMT</pubDate></item></channel></rss>