<?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 mit VC++ 7]]></title><description><![CDATA[<p>Hallo!</p>
<p>Ich baue für einen Cockpitsimulator ein Bussystem auf, dass die Elektronik mit dem PC verknüpft. Die Kommunikation mit dem PC erfolgt über die serielle Schnittstelle.</p>
<p>Der PC sendet 3 Byte aus (1 Adressbyte und 2 Befehlsbyte). Diese werden von der Elektronik verarbeitet und es werden 2 Byte zurückgeschickt. Die Elektronik funktioniert einwandfrei.<br />
Baudrate ist 38400, keine Parität, ein Stoppbyte und Bytegröße = 8 Bit<br />
Eine solche Kommunikation tritt ca. alle 20 ms ein.</p>
<p>Zu meinem Problem: Das ganze funktioniert einige Mituten lang perfekt. Dann jedoch hängt sich das Programm auf und wartet auf ein Antwortbyte (das aber auf jeden Fall gesendet wurde -&gt; mit Digitaloszi nachgemessen).</p>
<p>Die folgende Funktion wird alle 20 ms aufgerufen. Findet hier jemand einen Fehler, woran das liegen könnte?</p>
<p>unsigned char* get_data(unsigned char *input)<br />
{<br />
unsigned char *data;<br />
LPDWORD dwBytesWritten = new DWORD;<br />
LPOVERLAPPED ov = new OVERLAPPED;<br />
DWORD dwEvtMask;<br />
char buffer[20];<br />
DCB dcb;<br />
dcb.DCBlength = sizeof(DCB);<br />
dcb.BaudRate = 38400;<br />
dcb.ByteSize = 8;<br />
dcb.Parity = 0;<br />
dcb.StopBits = ONESTOPBIT;</p>
<p>data = (unsigned char*)malloc(3 * sizeof(unsigned char));<br />
data[0] = 0x31; // Adressbyte<br />
data[1] = (unsigned char)*input; // erstes Befehlsbyte<br />
data[2] = 0x33; // zweites Befehlsbyte</p>
<p>HANDLE m_hCommPort = CreateFile(&quot;COM1&quot;,<br />
GENERIC_READ|GENERIC_WRITE,//access ( read and write)<br />
0, //(share) 0:cannot share the COM port<br />
0, //security (None)<br />
OPEN_EXISTING,// creation : open_existing<br />
FILE_ATTRIBUTE_NORMAL,// we want overlapped operation<br />
0// no templates file for COM port...<br />
);</p>
<p>SetCommState(&amp;m_hCommPort,&amp;dcb);</p>
<p>// Senden der Daten ...<br />
WriteFile(m_hCommPort,data,3,dwBytesWritten ,NULL);</p>
<p>SetCommMask (m_hCommPort, EV_RXCHAR);</p>
<p>// Empfangen des ersten Antwortbytes<br />
WaitCommEvent (m_hCommPort, &amp;dwEvtMask, 0);<br />
ReadFile(m_hCommPort,&amp;data[0],1,dwBytesWritten,NULL);</p>
<p>// Empfangen des zweiten Antwortbytes<br />
WaitCommEvent (m_hCommPort, &amp;dwEvtMask, 0);<br />
ReadFile(m_hCommPort,&amp;data[1],1,dwBytesWritten,NULL);</p>
<p>CloseHandle(m_hCommPort);<br />
return data;<br />
}</p>
<p>Ich wäre für eine helfende Antwort wirklich dankbar, da dies für ein Projekt ist, dass Mitte Januar funktionieren muss ... Ich hätte nicht gedacht, dass es hier zu einem Problem kommt ...</p>
<p>Vielen Dank &amp; viele Grüße<br />
Steffen</p>
]]></description><link>https://www.c-plusplus.net/forum/topic/60337/serielle-schnittstelle-mit-vc-7</link><generator>RSS for Node</generator><lastBuildDate>Wed, 03 Jun 2026 07:58:29 GMT</lastBuildDate><atom:link href="https://www.c-plusplus.net/forum/topic/60337.rss" rel="self" type="application/rss+xml"/><pubDate>Sun, 04 Jan 2004 16:53:30 GMT</pubDate><ttl>60</ttl><item><title><![CDATA[Reply to serielle Schnittstelle mit VC++ 7 on Sun, 04 Jan 2004 16:53:30 GMT]]></title><description><![CDATA[<p>Hallo!</p>
<p>Ich baue für einen Cockpitsimulator ein Bussystem auf, dass die Elektronik mit dem PC verknüpft. Die Kommunikation mit dem PC erfolgt über die serielle Schnittstelle.</p>
<p>Der PC sendet 3 Byte aus (1 Adressbyte und 2 Befehlsbyte). Diese werden von der Elektronik verarbeitet und es werden 2 Byte zurückgeschickt. Die Elektronik funktioniert einwandfrei.<br />
Baudrate ist 38400, keine Parität, ein Stoppbyte und Bytegröße = 8 Bit<br />
Eine solche Kommunikation tritt ca. alle 20 ms ein.</p>
<p>Zu meinem Problem: Das ganze funktioniert einige Mituten lang perfekt. Dann jedoch hängt sich das Programm auf und wartet auf ein Antwortbyte (das aber auf jeden Fall gesendet wurde -&gt; mit Digitaloszi nachgemessen).</p>
<p>Die folgende Funktion wird alle 20 ms aufgerufen. Findet hier jemand einen Fehler, woran das liegen könnte?</p>
<p>unsigned char* get_data(unsigned char *input)<br />
{<br />
unsigned char *data;<br />
LPDWORD dwBytesWritten = new DWORD;<br />
LPOVERLAPPED ov = new OVERLAPPED;<br />
DWORD dwEvtMask;<br />
char buffer[20];<br />
DCB dcb;<br />
dcb.DCBlength = sizeof(DCB);<br />
dcb.BaudRate = 38400;<br />
dcb.ByteSize = 8;<br />
dcb.Parity = 0;<br />
dcb.StopBits = ONESTOPBIT;</p>
<p>data = (unsigned char*)malloc(3 * sizeof(unsigned char));<br />
data[0] = 0x31; // Adressbyte<br />
data[1] = (unsigned char)*input; // erstes Befehlsbyte<br />
data[2] = 0x33; // zweites Befehlsbyte</p>
<p>HANDLE m_hCommPort = CreateFile(&quot;COM1&quot;,<br />
GENERIC_READ|GENERIC_WRITE,//access ( read and write)<br />
0, //(share) 0:cannot share the COM port<br />
0, //security (None)<br />
OPEN_EXISTING,// creation : open_existing<br />
FILE_ATTRIBUTE_NORMAL,// we want overlapped operation<br />
0// no templates file for COM port...<br />
);</p>
<p>SetCommState(&amp;m_hCommPort,&amp;dcb);</p>
<p>// Senden der Daten ...<br />
WriteFile(m_hCommPort,data,3,dwBytesWritten ,NULL);</p>
<p>SetCommMask (m_hCommPort, EV_RXCHAR);</p>
<p>// Empfangen des ersten Antwortbytes<br />
WaitCommEvent (m_hCommPort, &amp;dwEvtMask, 0);<br />
ReadFile(m_hCommPort,&amp;data[0],1,dwBytesWritten,NULL);</p>
<p>// Empfangen des zweiten Antwortbytes<br />
WaitCommEvent (m_hCommPort, &amp;dwEvtMask, 0);<br />
ReadFile(m_hCommPort,&amp;data[1],1,dwBytesWritten,NULL);</p>
<p>CloseHandle(m_hCommPort);<br />
return data;<br />
}</p>
<p>Ich wäre für eine helfende Antwort wirklich dankbar, da dies für ein Projekt ist, dass Mitte Januar funktionieren muss ... Ich hätte nicht gedacht, dass es hier zu einem Problem kommt ...</p>
<p>Vielen Dank &amp; viele Grüße<br />
Steffen</p>
]]></description><link>https://www.c-plusplus.net/forum/post/428545</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/428545</guid><dc:creator><![CDATA[flite]]></dc:creator><pubDate>Sun, 04 Jan 2004 16:53:30 GMT</pubDate></item><item><title><![CDATA[Reply to serielle Schnittstelle mit VC++ 7 on Mon, 05 Jan 2004 05:57:23 GMT]]></title><description><![CDATA[<p>Alle 20 ms ? Kommt darauf an wie du die Funktion aufrufts und welches BS du verwendest.<br />
Weiters solltest du daran arbeiten nicht jedesmal den COM-Port zu öffnen. Dauert viele zu lange.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/428864</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/428864</guid><dc:creator><![CDATA[Unix-Tom]]></dc:creator><pubDate>Mon, 05 Jan 2004 05:57:23 GMT</pubDate></item><item><title><![CDATA[Reply to serielle Schnittstelle mit VC++ 7 on Mon, 05 Jan 2004 12:29:21 GMT]]></title><description><![CDATA[<p>Hallo!</p>
<p>Danke für deine Antwort.</p>
<p>Ich verwende im Moment Win 2k, es muss aber auch unbedingt auf Win XP laufen (da XP das OS des Cockpitsimulators ist).</p>
<p>Die Funktion wird ganz einfach aufgerufen:<br />
data = get_data(&amp;temp); // wobei Data ein unsigned Char[3] ist und temp ein unsigned Char</p>
<p>Alle 20 ms muss sein, damit die Ansteuerung der Elektronik mit einer akzeptablen Framerate durchfürbar ist. Probehalber habe ich auch die Funktion nur alle 100 ms aufrufen lassen, sowie die Baudrate auf 9600 runtergedreht. Ergebnis war aber das selbe ...</p>
<p>Das Öffnen des Comports werde ich abändern ....</p>
<p>Was nun ?!?</p>
<p>Grüße<br />
Steffen</p>
]]></description><link>https://www.c-plusplus.net/forum/post/429050</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/429050</guid><dc:creator><![CDATA[flite]]></dc:creator><pubDate>Mon, 05 Jan 2004 12:29:21 GMT</pubDate></item><item><title><![CDATA[Reply to serielle Schnittstelle mit VC++ 7 on Mon, 05 Jan 2004 22:12:59 GMT]]></title><description><![CDATA[<p>Ich habe evtl. eine Möglichkeit gefunden. Ich möchte die Übertragung mit der DTR Leitung synkronisieren.</p>
<p>Kann mir jemand ein Beispiel posten, wie man die DTR Leitung auf high / low setzt?</p>
<p>Wäre echt super!<br />
Grüße<br />
Steffen</p>
]]></description><link>https://www.c-plusplus.net/forum/post/429596</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/429596</guid><dc:creator><![CDATA[flite]]></dc:creator><pubDate>Mon, 05 Jan 2004 22:12:59 GMT</pubDate></item><item><title><![CDATA[Reply to serielle Schnittstelle mit VC++ 7 on Tue, 06 Jan 2004 07:15:38 GMT]]></title><description><![CDATA[<p>Hallo,<br />
Du solltest Dir mal folgendes durchlesen:</p>
<p><a href="http://codeproject.com/system/serial_com.asp" rel="nofollow">http://codeproject.com/system/serial_com.asp</a></p>
<p>Das mit dem Event-gesteuerten Vom-COM-Port-Lesen funktioniert ein bisschen anders.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/429685</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/429685</guid><dc:creator><![CDATA[Cosmixx]]></dc:creator><pubDate>Tue, 06 Jan 2004 07:15:38 GMT</pubDate></item></channel></rss>