<?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[[erledigt] Daten auslesen am Port]]></title><description><![CDATA[<p>Hallo<br />
ich habe hier ein Geraet das am seriellen Port angeschlossen ist und ich muss die Daten auslesen koennen.</p>
<p>Es werden zwar Daten ausgelesen, aber irgendwie ist alles um 15 Bytes verschoben.<br />
Also Normlerweise sehen die Daten so aus:</p>
<p>Counter,Data0,...,DataN, 0x0D0A<br />
Counter,Data0,...,DataN, 0x0D0A<br />
Counter,Data0,...,DataN, 0x0D0A<br />
usw.<br />
Alles ist 16bit Integer, Big Endian.</p>
<p>Was ich allerdings auslesen, sieht so aus:<br />
15 Bytes irgendwas, 0x0D0A, Counter, 3 Bytes irgendwas</p>
<p>Wieso ist das alles irgendwie verschoben, hat vielleicht jemand einen Tipp?</p>
<p>Ich habe hier eine Software die die Daten aus dem seriellen Port auslesen und anzeigen kann. Da ist alles zu 100% richtig. Allerdings ist es nicht meine Software und sie ist in Delphi geschrieben (RealTerm: Serial Capture Program).</p>
<p>Ich bin mir sicher das der Counter und der Marker &quot;0x0D0A&quot; richtig ausgelesen werden. Aber bei den anderen Werten bin ich mir nicht sicher.</p>
<p>Edit: Es waren unsigned Werte, und ich bin mir jetzt fast sicher das es die richtigen sind. Aber wieso sind die Daten um 15 Bytes verschoben?</p>
<p>Code ist nichts besonders:</p>
<pre><code class="language-cpp">//...
{
    // framesize = Frame Number + Daten + \nl\cr
    const size_t framesize = (1 + 8 + 1) * 2;
    const size_t buffsize = framesize * count;
    char* buffer = calloc(buffsize, 1);
    read(portdata, buffer, buffsize, &amp;read);

    int move = 0;
    short d;
    for ( i = 0; i &lt; count; i++ )
    {
      size_t offset = move+framesize*i;
      memcpy(&amp;d, buffer+offset, 2);
      datas[i].frame = htons(d);

      offset += 2;
      memcpy(&amp;d, buffer+offset, 2);
      datas[i].sensordatas[0] = htons(d);

      offset += 2;
      memcpy(&amp;d, buffer+offset, 2);
      datas[i].sensordatas[1] = htons(d);

      offset += 2;
      memcpy(&amp;d, buffer+offset, 2);
      datas[i].sensordatas[2] = htons(d);

      offset += 2;
      memcpy(&amp;d, buffer+offset, 2);
      datas[i].sensordatas[3] = htons(d);

      offset += 2;
      memcpy(&amp;d, buffer+offset, 2);
      datas[i].sensordatas[4] = htons(d);

      offset += 2;
      memcpy(&amp;d, buffer+offset, 2);
      datas[i].sensordatas[5] = htons(d);

      offset += 2;
      memcpy(&amp;d, buffer+offset, 2);
      datas[i].sensordatas[6] = htons(d);

      offset += 2;
      memcpy(&amp;d, buffer+offset, 2);
      datas[i].sensordatas[7] = htons(d);

      offset += 2;
      memcpy(&amp;d, buffer+offset, 2);
      short marker = htons(d);
      printf(&quot;marker: %d\n&quot;, marker);

}

bool read(Portdata* portdata, void* data, size_t length, size_t* read)
{
    DWORD r;
    ReadFile(pdata-&gt;portHandle, data, length, &amp;r, NULL);
    *read = r;

    return true;
}
</code></pre>
<p>Ich setzte folgende Werte:</p>
<pre><code>fOutxCtsFlow = 0;                    // Disable CTS monitoring
        fOutxDsrFlow = 0;                    // Disable DSR monitoring
        fDtrControl = DTR_CONTROL_DISABLE;        // Disable DTR monitoring
        fOutX = 0;                            // Disable XON/XOFF for transmission
        fInX = 0;                            // Disable XON/XOFF for receiving
        fRtsControl = RTS_CONTROL_DISABLE;        // Disable RTS (Ready To Send)
    baudRate = 921600;
    parityon = FALSE;
    parity = NOPARITY;
    stopBits = ONESTOPBIT;
    byteSize = 8;
</code></pre>
<p>Ich hab das ganze unter Linux nochmal programmiert und dort werden die Werte alle richtig ausgelesen, da ist nichts verschoben oder so. Es wird immer zuerst der Counter, dann die Daten und dann 0x0D0A ausgelesen.</p>
]]></description><link>https://www.c-plusplus.net/forum/topic/220764/erledigt-daten-auslesen-am-port</link><generator>RSS for Node</generator><lastBuildDate>Mon, 13 Apr 2026 15:28:24 GMT</lastBuildDate><atom:link href="https://www.c-plusplus.net/forum/topic/220764.rss" rel="self" type="application/rss+xml"/><pubDate>Wed, 20 Aug 2008 15:52:11 GMT</pubDate><ttl>60</ttl><item><title><![CDATA[Reply to [erledigt] Daten auslesen am Port on Wed, 20 Aug 2008 20:55:37 GMT]]></title><description><![CDATA[<p>Hallo<br />
ich habe hier ein Geraet das am seriellen Port angeschlossen ist und ich muss die Daten auslesen koennen.</p>
<p>Es werden zwar Daten ausgelesen, aber irgendwie ist alles um 15 Bytes verschoben.<br />
Also Normlerweise sehen die Daten so aus:</p>
<p>Counter,Data0,...,DataN, 0x0D0A<br />
Counter,Data0,...,DataN, 0x0D0A<br />
Counter,Data0,...,DataN, 0x0D0A<br />
usw.<br />
Alles ist 16bit Integer, Big Endian.</p>
<p>Was ich allerdings auslesen, sieht so aus:<br />
15 Bytes irgendwas, 0x0D0A, Counter, 3 Bytes irgendwas</p>
<p>Wieso ist das alles irgendwie verschoben, hat vielleicht jemand einen Tipp?</p>
<p>Ich habe hier eine Software die die Daten aus dem seriellen Port auslesen und anzeigen kann. Da ist alles zu 100% richtig. Allerdings ist es nicht meine Software und sie ist in Delphi geschrieben (RealTerm: Serial Capture Program).</p>
<p>Ich bin mir sicher das der Counter und der Marker &quot;0x0D0A&quot; richtig ausgelesen werden. Aber bei den anderen Werten bin ich mir nicht sicher.</p>
<p>Edit: Es waren unsigned Werte, und ich bin mir jetzt fast sicher das es die richtigen sind. Aber wieso sind die Daten um 15 Bytes verschoben?</p>
<p>Code ist nichts besonders:</p>
<pre><code class="language-cpp">//...
{
    // framesize = Frame Number + Daten + \nl\cr
    const size_t framesize = (1 + 8 + 1) * 2;
    const size_t buffsize = framesize * count;
    char* buffer = calloc(buffsize, 1);
    read(portdata, buffer, buffsize, &amp;read);

    int move = 0;
    short d;
    for ( i = 0; i &lt; count; i++ )
    {
      size_t offset = move+framesize*i;
      memcpy(&amp;d, buffer+offset, 2);
      datas[i].frame = htons(d);

      offset += 2;
      memcpy(&amp;d, buffer+offset, 2);
      datas[i].sensordatas[0] = htons(d);

      offset += 2;
      memcpy(&amp;d, buffer+offset, 2);
      datas[i].sensordatas[1] = htons(d);

      offset += 2;
      memcpy(&amp;d, buffer+offset, 2);
      datas[i].sensordatas[2] = htons(d);

      offset += 2;
      memcpy(&amp;d, buffer+offset, 2);
      datas[i].sensordatas[3] = htons(d);

      offset += 2;
      memcpy(&amp;d, buffer+offset, 2);
      datas[i].sensordatas[4] = htons(d);

      offset += 2;
      memcpy(&amp;d, buffer+offset, 2);
      datas[i].sensordatas[5] = htons(d);

      offset += 2;
      memcpy(&amp;d, buffer+offset, 2);
      datas[i].sensordatas[6] = htons(d);

      offset += 2;
      memcpy(&amp;d, buffer+offset, 2);
      datas[i].sensordatas[7] = htons(d);

      offset += 2;
      memcpy(&amp;d, buffer+offset, 2);
      short marker = htons(d);
      printf(&quot;marker: %d\n&quot;, marker);

}

bool read(Portdata* portdata, void* data, size_t length, size_t* read)
{
    DWORD r;
    ReadFile(pdata-&gt;portHandle, data, length, &amp;r, NULL);
    *read = r;

    return true;
}
</code></pre>
<p>Ich setzte folgende Werte:</p>
<pre><code>fOutxCtsFlow = 0;                    // Disable CTS monitoring
        fOutxDsrFlow = 0;                    // Disable DSR monitoring
        fDtrControl = DTR_CONTROL_DISABLE;        // Disable DTR monitoring
        fOutX = 0;                            // Disable XON/XOFF for transmission
        fInX = 0;                            // Disable XON/XOFF for receiving
        fRtsControl = RTS_CONTROL_DISABLE;        // Disable RTS (Ready To Send)
    baudRate = 921600;
    parityon = FALSE;
    parity = NOPARITY;
    stopBits = ONESTOPBIT;
    byteSize = 8;
</code></pre>
<p>Ich hab das ganze unter Linux nochmal programmiert und dort werden die Werte alle richtig ausgelesen, da ist nichts verschoben oder so. Es wird immer zuerst der Counter, dann die Daten und dann 0x0D0A ausgelesen.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1568426</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1568426</guid><dc:creator><![CDATA[DEvent]]></dc:creator><pubDate>Wed, 20 Aug 2008 20:55:37 GMT</pubDate></item><item><title><![CDATA[Reply to [erledigt] Daten auslesen am Port on Wed, 20 Aug 2008 17:37:17 GMT]]></title><description><![CDATA[<p>Die serielle Schnittstelle ist *nicht* trivial, deswegen verwende am besten eine fertige Klasse:<br />
<a href="http://www.codeproject.com/system/serial.asp" rel="nofollow">http://www.codeproject.com/system/serial.asp</a></p>
]]></description><link>https://www.c-plusplus.net/forum/post/1568476</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1568476</guid><dc:creator><![CDATA[Jochen Kalmbach]]></dc:creator><pubDate>Wed, 20 Aug 2008 17:37:17 GMT</pubDate></item><item><title><![CDATA[Reply to [erledigt] Daten auslesen am Port on Wed, 20 Aug 2008 20:55:16 GMT]]></title><description><![CDATA[<p>Jochen Kalmbach schrieb:</p>
<blockquote>
<p>Die serielle Schnittstelle ist *nicht* trivial, deswegen verwende am besten eine fertige Klasse:<br />
<a href="http://www.codeproject.com/system/serial.asp" rel="nofollow">http://www.codeproject.com/system/serial.asp</a></p>
</blockquote>
<p>Danke, werde mir anschauen. Es hat sich aber erledigt, weil die Daten doch alle richtig sind. Die 15 Bytes waren eine Art &quot;echo&quot; vom Geraet, also die Steuerzeichen die ich zuvor gesendet hatte wurden mir als Bestaetigung zurueckgesendet.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1568567</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1568567</guid><dc:creator><![CDATA[DEvent]]></dc:creator><pubDate>Wed, 20 Aug 2008 20:55:16 GMT</pubDate></item></channel></rss>