<?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[Serielle Schnittstelle liefert Piek]]></title><description><![CDATA[<p>Hallo,</p>
<p>ich versuche eine serielle Schnittstelle zu steuern. Das Senden der Befehle funktioniert, nur das Auslesen nicht. Ich bekomme immer ein Piek(Spielkartenzeichen) in der Ausgabe meines Dosfensters.<br />
Ich arbeite mit WinXP 32 und dem DEVC++-Compiler.<br />
Mein Gerät ist ein Counter (ND280 von Heidenhain).<br />
Wie lese ich die Daten (den auf dem Gerät angezeigtem Winkel) aus?</p>
<p>Hier ist der Teil meines Quellcodes:<br />
...<br />
void write(){</p>
<p>char test[256]; //Zeichenkette: 256 Zeichen</p>
<p>DWORD nWritten = 0; //Zahlvariable für Zeichen zum Schreiben<br />
DWORD nRead = 0;</p>
<p>//WriteFile( SerielleSchnittstelle, KeyEnter, 7, &amp;nWritten, NULL);<br />
//soll nur 7 Zeichen ohne die 0 senden</p>
<p>WriteFile( SerielleSchnittstelle, KeyC, 7, &amp;nWritten, NULL);</p>
<p>if( nWritten!= 7 ) //wenn ungleich 7 Zeichen geschrieben</p>
<p>{</p>
<p>cout &lt;&lt; &quot;hat nicht geklappt\n&quot;;</p>
<p>}<br />
else<br />
cout &lt;&lt; &quot;hat geklappt\n&quot;;</p>
<p>ReadFile(SerielleSchnittstelle, test, 256, &amp;nRead, NULL);<br />
cout &lt;&lt; &quot;es wurden &quot; &lt;&lt; nRead &lt;&lt; &quot; Bytes gelesen\n&quot;;</p>
<p>}</p>
<p>void nullen() {<br />
WriteFile( SerielleSchnittstelle, SetPositionTo0, 7, &amp;nWritten, NULL);<br />
}</p>
<p>void winkel(){</p>
<p>int s = 0;<br />
DWORD nRead = 0;<br />
char RxBuffer[256] = {0};</p>
<p>WriteFile( SerielleSchnittstelle, ShowActualPosition, 7, &amp;nWritten, NULL);<br />
ReadFile(SerielleSchnittstelle, RxBuffer, 256, &amp;nRead, NULL);<br />
//sizeof(RxBuffer) = s</p>
<p>cout &lt;&lt; &quot;Der Inhalt ist &quot; &lt;&lt; RxBuffer &lt;&lt; &quot; .\n&quot;;</p>
<p>}<br />
...</p>
<p>Liebe Grüße,<br />
ACDC</p>
]]></description><link>https://www.c-plusplus.net/forum/topic/322238/serielle-schnittstelle-liefert-piek</link><generator>RSS for Node</generator><lastBuildDate>Thu, 16 Jul 2026 15:43:35 GMT</lastBuildDate><atom:link href="https://www.c-plusplus.net/forum/topic/322238.rss" rel="self" type="application/rss+xml"/><pubDate>Thu, 12 Dec 2013 11:14:40 GMT</pubDate><ttl>60</ttl><item><title><![CDATA[Reply to Serielle Schnittstelle liefert Piek on Thu, 12 Dec 2013 11:14:40 GMT]]></title><description><![CDATA[<p>Hallo,</p>
<p>ich versuche eine serielle Schnittstelle zu steuern. Das Senden der Befehle funktioniert, nur das Auslesen nicht. Ich bekomme immer ein Piek(Spielkartenzeichen) in der Ausgabe meines Dosfensters.<br />
Ich arbeite mit WinXP 32 und dem DEVC++-Compiler.<br />
Mein Gerät ist ein Counter (ND280 von Heidenhain).<br />
Wie lese ich die Daten (den auf dem Gerät angezeigtem Winkel) aus?</p>
<p>Hier ist der Teil meines Quellcodes:<br />
...<br />
void write(){</p>
<p>char test[256]; //Zeichenkette: 256 Zeichen</p>
<p>DWORD nWritten = 0; //Zahlvariable für Zeichen zum Schreiben<br />
DWORD nRead = 0;</p>
<p>//WriteFile( SerielleSchnittstelle, KeyEnter, 7, &amp;nWritten, NULL);<br />
//soll nur 7 Zeichen ohne die 0 senden</p>
<p>WriteFile( SerielleSchnittstelle, KeyC, 7, &amp;nWritten, NULL);</p>
<p>if( nWritten!= 7 ) //wenn ungleich 7 Zeichen geschrieben</p>
<p>{</p>
<p>cout &lt;&lt; &quot;hat nicht geklappt\n&quot;;</p>
<p>}<br />
else<br />
cout &lt;&lt; &quot;hat geklappt\n&quot;;</p>
<p>ReadFile(SerielleSchnittstelle, test, 256, &amp;nRead, NULL);<br />
cout &lt;&lt; &quot;es wurden &quot; &lt;&lt; nRead &lt;&lt; &quot; Bytes gelesen\n&quot;;</p>
<p>}</p>
<p>void nullen() {<br />
WriteFile( SerielleSchnittstelle, SetPositionTo0, 7, &amp;nWritten, NULL);<br />
}</p>
<p>void winkel(){</p>
<p>int s = 0;<br />
DWORD nRead = 0;<br />
char RxBuffer[256] = {0};</p>
<p>WriteFile( SerielleSchnittstelle, ShowActualPosition, 7, &amp;nWritten, NULL);<br />
ReadFile(SerielleSchnittstelle, RxBuffer, 256, &amp;nRead, NULL);<br />
//sizeof(RxBuffer) = s</p>
<p>cout &lt;&lt; &quot;Der Inhalt ist &quot; &lt;&lt; RxBuffer &lt;&lt; &quot; .\n&quot;;</p>
<p>}<br />
...</p>
<p>Liebe Grüße,<br />
ACDC</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2371337</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2371337</guid><dc:creator><![CDATA[ACDC]]></dc:creator><pubDate>Thu, 12 Dec 2013 11:14:40 GMT</pubDate></item><item><title><![CDATA[Reply to Serielle Schnittstelle liefert Piek on Thu, 12 Dec 2013 11:23:01 GMT]]></title><description><![CDATA[<p>hallo und willkommen.</p>
<p>bitte codetags verwenden:<br />
<code>[code=&quot;cpp&quot;][/code]</code></p>
<p><img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/27a1.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--right_arrow"
      title=":arrow_right:"
      alt="➡"
    /></p>
<pre><code>int syntaxhighlighting;
void f()
{
    // einrückungen
}
</code></pre>
]]></description><link>https://www.c-plusplus.net/forum/post/2371339</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2371339</guid><dc:creator><![CDATA[asfasfd]]></dc:creator><pubDate>Thu, 12 Dec 2013 11:23:01 GMT</pubDate></item><item><title><![CDATA[Reply to Serielle Schnittstelle liefert Piek on Thu, 12 Dec 2013 11:45:05 GMT]]></title><description><![CDATA[<p>ACDC schrieb:</p>
<blockquote>
<pre><code>ReadFile(SerielleSchnittstelle, test, 256, &amp;nRead, NULL);
cout &lt;&lt; &quot;es wurden &quot; &lt;&lt; nRead &lt;&lt; &quot; Bytes gelesen\n&quot;;
</code></pre>
</blockquote>
<p>Und wieviele Bytes werden gelesen?<br />
Das Pik ist m.E. ein <code>ACK</code> (ASCII: 6) - sieht nicht unbedingt falsch aus. Was steht denn in der Doku zum Protokoll?</p>
<p><strong>Edit:</strong></p>
<p>Handbuch schrieb:</p>
<blockquote>
<p>Der ND quittiert jeden richtig erkannten Tastenbefehl durch das<br />
Senden des Steuerzeichens ACK [..]</p>
</blockquote>
<p>=&gt; Doku lesen!</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2371342</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2371342</guid><dc:creator><![CDATA[Caligulaminus]]></dc:creator><pubDate>Thu, 12 Dec 2013 11:45:05 GMT</pubDate></item><item><title><![CDATA[Reply to Serielle Schnittstelle liefert Piek on Wed, 08 Jan 2014 14:12:05 GMT]]></title><description><![CDATA[<p>Danke nochmal für die Antwort.<br />
Das Problem lag an der Warteschleife, die nicht ausgeführt wurde.<br />
Als Lösung ist die Funktion sleep(ms) hier verwendet worden. Eine Wartefunktion zwischen dem Auslesen der Werte ist von Nöten. Leider ist das Programm nun plattformabhängig.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2376010</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2376010</guid><dc:creator><![CDATA[ACDC]]></dc:creator><pubDate>Wed, 08 Jan 2014 14:12:05 GMT</pubDate></item><item><title><![CDATA[Reply to Serielle Schnittstelle liefert Piek on Wed, 08 Jan 2014 14:58:32 GMT]]></title><description><![CDATA[<p>ACDC schrieb:</p>
<blockquote>
<p>Als Lösung ist die Funktion sleep(ms) hier verwendet worden. Eine Wartefunktion zwischen dem Auslesen der Werte ist von Nöten. Leider ist das Programm nun plattformabhängig.</p>
</blockquote>
<p>Ab C++11 gibt es ein sleep im Standard falls dir das weiterhilft.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2376017</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2376017</guid><dc:creator><![CDATA[TNA]]></dc:creator><pubDate>Wed, 08 Jan 2014 14:58:32 GMT</pubDate></item><item><title><![CDATA[Reply to Serielle Schnittstelle liefert Piek on Wed, 08 Jan 2014 23:59:19 GMT]]></title><description><![CDATA[<p>ACDC schrieb:</p>
<blockquote>
<p>Leider ist das Programm nun plattformabhängig.</p>
</blockquote>
<p>Wie, &quot;nun&quot;?<br />
Meinst du etwa ReadFile und WriteFile wären nicht plattformabhängig?<br />
Eieiei...</p>
<p>BTW: du kannst über SetCommTimeouts timeouts einstellen.<br />
Dann kannst du, wenn du weisst dass 1 Byte als Antwort erwartet wird, dieses einfach mal lesen. Ohne Pause vorher.<br />
ReadFile wartet dann maximal so lange wie über SetCommTimeouts eingestellt wurde.</p>
<p>Hat den grossen Vorteil dass man sehr grosszügige Timeouts verwenden kann, ohne das Programm unnötig zu bremsen.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2376078</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2376078</guid><dc:creator><![CDATA[hustbaer]]></dc:creator><pubDate>Wed, 08 Jan 2014 23:59:19 GMT</pubDate></item></channel></rss>