<?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 Port synchronisation]]></title><description><![CDATA[<p>Hallo</p>
<p>Ich habe eine Anwendung, die auf den COM Port lesen und schreiben soll. Funktioniert auch erstmal wunderbar.</p>
<p>Dazu beutze ich die Klasse von CodeProject (CSerialMFC)</p>
<p>[url]<br />
<a href="http://www.codeproject.com/system/serial.asp?df=100&amp;forumid=1996&amp;select=1840977&amp;msg=1840977" rel="nofollow">http://www.codeproject.com/system/serial.asp?df=100&amp;forumid=1996&amp;select=1840977&amp;msg=1840977</a><br />
[/url]</p>
<p>So, jetzt habe ich aber eine duale Kommunikation. Sprich:</p>
<p>Ich muss schreiben //m_serial.Write(&quot;Test&quot;);</p>
<p>und dann muss ich warten, bis ich eine dementsprechende Antwort von der COM bekomme, auf die ich dann entsprechend reagieren muss.</p>
<p>Kleines Example:</p>
<p>ICH SCHREIBE : &quot;Hey, wie gehts?&quot;</p>
<p>DIE ANTWORT : &quot;Danke, gut&quot;</p>
<p>ICH SCHREIBE: &quot;Das ist super.</p>
<p>....</p>
<p>nur als pseudocode.</p>
<p>Problem an der ganzen sache jedoch ist, dass ich einen MessageHandler (OnSerialMsg) mit eingebunden habe (steht in der klasse zur Verfügung).</p>
<p>Dieser macht dann nichts anderes, als mir entsprechende Events auf dem COM Port auszuwerten.</p>
<p>So, da er die Antwort, die die Schnittstelle sendet, auch als Event deklariert hat, wird diese Message leider erst abgearbeitet, wenn der oben geschriebene pseudocode schon geschrieben ist und das darf ich nicht machen.</p>
<p>Ich brauche also sowas wie:</p>
<p>ICH SCHREIBE : &quot;Hey, wie gehts?&quot;</p>
<p>//HIER MÜSSTE DER IRGENDWIE SOWAS WIE 'WaitFor...' HABEN, DAMIT ER DIE WINMSG ABFRAGEN KANN (WaitMessage() geht nicht, habe ich schon probiert)</p>
<p>ICH SCHREIBE : &quot;DAS IST GUT&quot;</p>
<p>Hat da jemand nen Tipp für mich?</p>
]]></description><link>https://www.c-plusplus.net/forum/topic/170161/com-port-synchronisation</link><generator>RSS for Node</generator><lastBuildDate>Tue, 28 Apr 2026 18:49:20 GMT</lastBuildDate><atom:link href="https://www.c-plusplus.net/forum/topic/170161.rss" rel="self" type="application/rss+xml"/><pubDate>Fri, 12 Jan 2007 12:14:16 GMT</pubDate><ttl>60</ttl><item><title><![CDATA[Reply to COM Port synchronisation on Fri, 12 Jan 2007 12:14:16 GMT]]></title><description><![CDATA[<p>Hallo</p>
<p>Ich habe eine Anwendung, die auf den COM Port lesen und schreiben soll. Funktioniert auch erstmal wunderbar.</p>
<p>Dazu beutze ich die Klasse von CodeProject (CSerialMFC)</p>
<p>[url]<br />
<a href="http://www.codeproject.com/system/serial.asp?df=100&amp;forumid=1996&amp;select=1840977&amp;msg=1840977" rel="nofollow">http://www.codeproject.com/system/serial.asp?df=100&amp;forumid=1996&amp;select=1840977&amp;msg=1840977</a><br />
[/url]</p>
<p>So, jetzt habe ich aber eine duale Kommunikation. Sprich:</p>
<p>Ich muss schreiben //m_serial.Write(&quot;Test&quot;);</p>
<p>und dann muss ich warten, bis ich eine dementsprechende Antwort von der COM bekomme, auf die ich dann entsprechend reagieren muss.</p>
<p>Kleines Example:</p>
<p>ICH SCHREIBE : &quot;Hey, wie gehts?&quot;</p>
<p>DIE ANTWORT : &quot;Danke, gut&quot;</p>
<p>ICH SCHREIBE: &quot;Das ist super.</p>
<p>....</p>
<p>nur als pseudocode.</p>
<p>Problem an der ganzen sache jedoch ist, dass ich einen MessageHandler (OnSerialMsg) mit eingebunden habe (steht in der klasse zur Verfügung).</p>
<p>Dieser macht dann nichts anderes, als mir entsprechende Events auf dem COM Port auszuwerten.</p>
<p>So, da er die Antwort, die die Schnittstelle sendet, auch als Event deklariert hat, wird diese Message leider erst abgearbeitet, wenn der oben geschriebene pseudocode schon geschrieben ist und das darf ich nicht machen.</p>
<p>Ich brauche also sowas wie:</p>
<p>ICH SCHREIBE : &quot;Hey, wie gehts?&quot;</p>
<p>//HIER MÜSSTE DER IRGENDWIE SOWAS WIE 'WaitFor...' HABEN, DAMIT ER DIE WINMSG ABFRAGEN KANN (WaitMessage() geht nicht, habe ich schon probiert)</p>
<p>ICH SCHREIBE : &quot;DAS IST GUT&quot;</p>
<p>Hat da jemand nen Tipp für mich?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1208654</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1208654</guid><dc:creator><![CDATA[MSS-Software]]></dc:creator><pubDate>Fri, 12 Jan 2007 12:14:16 GMT</pubDate></item><item><title><![CDATA[Reply to COM Port synchronisation on Fri, 12 Jan 2007 13:14:08 GMT]]></title><description><![CDATA[<p>Hallo,</p>
<p>ich arbeite auch mit dieser Klasse. Ich brauchte zwar noch nie die von dir beschriebene Funktionalität, aber vielleicht hätte ich da zwei Ansätze:</p>
<p>1. Es gibt da in der Serial.h ein Event EEventRecv, das signalisiert, ob die gesendeten Daten beim Empfänger angekommen sind. Du musst in der OnSerialMsg auf</p>
<pre><code class="language-cpp">if (eEvent &amp; CSerialMFC::EEventRcvEv)
{
   ....
}
</code></pre>
<p>reagieren.</p>
<p>2. Dein Empfänger sendet einfach eine Steuerzeichenfolge beim erfolgreichen Empfang. Weiß ja nicht wie der aussieht und ob du darauf Einfluss hast.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1208703</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1208703</guid><dc:creator><![CDATA[AndyDD]]></dc:creator><pubDate>Fri, 12 Jan 2007 13:14:08 GMT</pubDate></item><item><title><![CDATA[Reply to COM Port synchronisation on Fri, 12 Jan 2007 13:42:19 GMT]]></title><description><![CDATA[<p>hi</p>
<p>nee, einfluss habe ich da nicht drauf</p>
<p>das ist ein GSM Modem</p>
<p>nach jedem AT Befehl den ich sende, bekomme ich nur &quot;OK&quot; oder &quot;ERROR&quot;</p>
<p>deswegen kann ich nicht direkt alle mit Serial.Write() nacheinander senden...</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1208734</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1208734</guid><dc:creator><![CDATA[MSS-Software]]></dc:creator><pubDate>Fri, 12 Jan 2007 13:42:19 GMT</pubDate></item><item><title><![CDATA[Reply to COM Port synchronisation on Fri, 12 Jan 2007 15:08:22 GMT]]></title><description><![CDATA[<p>Wie sieht denn dein OK oder der ERROR aus? Sin das Steuerzeichen? Dann warte doch solange, bis du das OK oder den ERROR bekommen hast.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1208795</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1208795</guid><dc:creator><![CDATA[AndyDD]]></dc:creator><pubDate>Fri, 12 Jan 2007 15:08:22 GMT</pubDate></item><item><title><![CDATA[Reply to COM Port synchronisation on Fri, 12 Jan 2007 15:27:21 GMT]]></title><description><![CDATA[<p>genau das ist ja das problem *gg*</p>
<p>wenn ich wüsste wie, wäre das problem gelöst *g*</p>
<p>ich habe getracet und schreib dir mal wie das ausschaut:</p>
<pre><code class="language-cpp">void CTest::OnBnClickedSend()
{
   m_serial.Write(&quot;hallo1&quot;);   //1. Befehl aus einer Serie
   m_serial.Write(&quot;hallo2&quot;);   //2. Befehl aus einer Serie
   m_serial.Write(&quot;hallo3&quot;);   //3. Befehl aus einer Serie
}
</code></pre>
<p>So, das z.B. soll er machen, wenn ich aufn Button klicke.</p>
<p>Problem an der ganzen Sache ist nur, dass ich zwischen den einzelnen Befehlen lesen muss, weil ich da rückgabewerte habe.</p>
<p>Das &quot;Lesenevent&quot; führt er in der OnSerialMsg aber erst aus, wenn er aus der Methode OnBnClickedSend() rausgelaufen ist. Sprich: Wenn alle 3 gesendet sind und das ist falsch.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1208805</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1208805</guid><dc:creator><![CDATA[MSS-Software]]></dc:creator><pubDate>Fri, 12 Jan 2007 15:27:21 GMT</pubDate></item><item><title><![CDATA[Reply to COM Port synchronisation on Sat, 13 Jan 2007 10:29:23 GMT]]></title><description><![CDATA[<p>Jetzt nur noch mal zum Verständnis: weißt du jetzt nicht wie die Empfängerseite den Error oder das Ok signalisiert oder (was für mich jetzt wahrsscheinlicher ist) hast du ein Problem damit, das du nicht weißt wie die Abfolge von Senden und Empfangen der Bestätigung aussehen soll?<br />
Für letzteres wirst du sicher selber sehen, dass es so nicht geht. Pack die Nachrichten in ein Array oder eine Liste als Member der View-Klasse (über die Messagemap der View-Klasse wird ja auch die OnSerialMsg abgearbeitet). Zusätzlich brauchst du u.U. noch eine Variable, in der du die aktuelle Position innerhalb dieser Liste oder des Arrays speicherst. Kannst das aber auch über Referenzen machen.<br />
Den Rest würde ich über Nachrichten steuern. Mache eine Funktion OnClickSend(), die genau eine Nachricht sendet (als Übergabeparameter halt einen Verweis das Elemement aus der Liste). Der Buttonklick sendet nur eine Nachricht an die Messagemap, die dann die OnClickSend() veranlasst, die aktuelle Nachricht der Liste zu senden, mehr erst mal nicht. Irgendwann kommt ein Ok oder ein Error zurück. Die Auswertung findet in der OnSerialMsg() statt. Im Falle eines Errors sendest du eine Nachricht, dass das aktuelle Element nochmal gesendet wird, im Falle von Ok brauchst du nur die Position zu inkrementieren und dann das Senden per Nachricht zu veranlassen.<br />
Könnte mir vortsellen, dass es so funktioniert.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1209183</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1209183</guid><dc:creator><![CDATA[AndyDD]]></dc:creator><pubDate>Sat, 13 Jan 2007 10:29:23 GMT</pubDate></item><item><title><![CDATA[Reply to COM Port synchronisation on Sat, 13 Jan 2007 11:16:53 GMT]]></title><description><![CDATA[<p>ja, mir ging es darum, dass zwischen dem 1. und dem nächsten schreiben auf der Schnittstelle eine Nachrichtenabfrage laufen sollte, damit ich den OnSerialMsg() abfangen kann.</p>
<p>Hab das jetzt mit ::PeekMessage gelöst, weil ich ja sonst nicht anders in die Nachrichtenbehandlung rein kam.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1209193</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1209193</guid><dc:creator><![CDATA[MSS-Software]]></dc:creator><pubDate>Sat, 13 Jan 2007 11:16:53 GMT</pubDate></item></channel></rss>