<?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[eigenes Protokoll auswerten]]></title><description><![CDATA[<p>Hallo liebes Forum,</p>
<p>ich hab mal wieder ein Problem. Wir brauchen ein Programm um Daten die uns auf der Seriellen Schnittstelle (9600bit/s also laaaaangsam) gesendet werden zu verarbeiten.<br />
Die Daten sind in eine Art Protokoll verpackt. Ich benötige also ein Programm um diese Daten auszuwerden. Ich beschreibe hier mal kurz das Protokoll (Alles in Hex). Es wird jede Sekunde ein Frame gesendet. Innerhalb eines Frames gibt es sogenannte Batches (Unternachrichten) die die Nutzdaten enthalten</p>
<p>FF FF 00 00- leitet ein Frame ein<br />
10 2A - Leitet Batch 2A ein<br />
10 2B - Leitet Batch 2B ein<br />
10 03 - beendet 2A o. 2B</p>
<p>Ein Frame sieht also so aus.</p>
<p>FF FF 00 00 10 2A {ca. 50 byte Nutzdaten} 10 03 10 2B {ca. 100 byte Nutzdaten}</p>
<p>Das wars schon.</p>
<p><strong>Was ich von euch will:</strong></p>
<p>Ich möchte kein fertiges Programm (würde ich eh nicht bekommen) sondern Tips wie man sowas am besten online verabeitet. Alle meine Lösungen mündeten in einem durcheinander an if-else Anweisungen. <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="😞"
    /><br />
Wie würdet ihr diese Daten verarbeiten?</p>
<p>Beste Grüße</p>
<p>Christian</p>
]]></description><link>https://www.c-plusplus.net/forum/topic/250724/eigenes-protokoll-auswerten</link><generator>RSS for Node</generator><lastBuildDate>Tue, 15 Sep 2026 22:37:04 GMT</lastBuildDate><atom:link href="https://www.c-plusplus.net/forum/topic/250724.rss" rel="self" type="application/rss+xml"/><pubDate>Wed, 23 Sep 2009 07:05:37 GMT</pubDate><ttl>60</ttl><item><title><![CDATA[Reply to eigenes Protokoll auswerten on Wed, 23 Sep 2009 07:05:37 GMT]]></title><description><![CDATA[<p>Hallo liebes Forum,</p>
<p>ich hab mal wieder ein Problem. Wir brauchen ein Programm um Daten die uns auf der Seriellen Schnittstelle (9600bit/s also laaaaangsam) gesendet werden zu verarbeiten.<br />
Die Daten sind in eine Art Protokoll verpackt. Ich benötige also ein Programm um diese Daten auszuwerden. Ich beschreibe hier mal kurz das Protokoll (Alles in Hex). Es wird jede Sekunde ein Frame gesendet. Innerhalb eines Frames gibt es sogenannte Batches (Unternachrichten) die die Nutzdaten enthalten</p>
<p>FF FF 00 00- leitet ein Frame ein<br />
10 2A - Leitet Batch 2A ein<br />
10 2B - Leitet Batch 2B ein<br />
10 03 - beendet 2A o. 2B</p>
<p>Ein Frame sieht also so aus.</p>
<p>FF FF 00 00 10 2A {ca. 50 byte Nutzdaten} 10 03 10 2B {ca. 100 byte Nutzdaten}</p>
<p>Das wars schon.</p>
<p><strong>Was ich von euch will:</strong></p>
<p>Ich möchte kein fertiges Programm (würde ich eh nicht bekommen) sondern Tips wie man sowas am besten online verabeitet. Alle meine Lösungen mündeten in einem durcheinander an if-else Anweisungen. <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="😞"
    /><br />
Wie würdet ihr diese Daten verarbeiten?</p>
<p>Beste Grüße</p>
<p>Christian</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1782870</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1782870</guid><dc:creator><![CDATA[vonglahn]]></dc:creator><pubDate>Wed, 23 Sep 2009 07:05:37 GMT</pubDate></item><item><title><![CDATA[Reply to eigenes Protokoll auswerten on Wed, 23 Sep 2009 08:02:32 GMT]]></title><description><![CDATA[<p>Ein Anfang wäre zB folgendes:</p>
<p>- einen ganzen Frame einlesen (also von FFFF0000 bis vor FFFF0000)<br />
- dann zwei Byte lesen (die ja ein Batch einleiten).</p>
<p>dann kannst du zB folgendes machen:</p>
<pre><code class="language-cpp">std::map&lt;string, void (*)(string)&gt; Batchverarbeiter;

void fktFuerBatchA(string inhalt) { }
void fktFuerBatchB(string inhalt) { }
// usw.

Batchverarbeiter[&quot;102A&quot;] = fktFuerBatchA;
Batchverarbeiter[&quot;102B&quot;] = fktFuerBatchB;
</code></pre>
<p>Du erstellst also eine Map von string nach Funtionszeiger. abhängig vom start des batches kannst du so die Verarbeitung beser verteilen:</p>
<pre><code class="language-cpp">// Pseudomäßig
string frame = frameLesen();

int i = 0;
while(i &lt; frame.size())
{
  string batchIdentifier = frame.substr(i, 2);
  // irgendwie das Ende des Batches finden, bzw. bis zum nächsten batchanfang
  string inhalt = frame.substr(i+2, lengthOfBatch(batchIdentifier));

  Batchverarbeiter[batchIDentifier](inhalt);   // die jeweilige Funktion für den speziellen Batch aufrufen

  i += 2 + inhalt.size();
}
</code></pre>
<p>So kannst du den frame schonmal in die einzelnen Batches leichter zerlegen</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1782889</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1782889</guid><dc:creator><![CDATA[Maxi]]></dc:creator><pubDate>Wed, 23 Sep 2009 08:02:32 GMT</pubDate></item><item><title><![CDATA[Reply to eigenes Protokoll auswerten on Wed, 23 Sep 2009 09:33:55 GMT]]></title><description><![CDATA[<p>Was Maxi da vorschlägt ist eine mögliche Form des State Pattern. So als Google Stichwort.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1782944</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1782944</guid><dc:creator><![CDATA[Tyrdal]]></dc:creator><pubDate>Wed, 23 Sep 2009 09:33:55 GMT</pubDate></item><item><title><![CDATA[Reply to eigenes Protokoll auswerten on Wed, 23 Sep 2009 11:18:57 GMT]]></title><description><![CDATA[<h2>Hallo!<br />
Das würde ich ganz einfach angehen: switch case Anweisung.<br />
Eine Konvertierung in einen string Index ala Batch[&quot;NOT NECESSARY&quot;] = ... halte ich für unnötig. Aber bei der langsamen Schnittstelle ist es wohl eh egal, rattert der Prozi halt ein paar Millionen mal öfter. <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f603.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--grinning_face_with_big_eyes"
      title=":D"
      alt="😃"
    /></h2>
<p>Es werden wohl kaum tausende von Funktionen sein, die es aufzurufen gilt, daher dürfte eine switch case Anweisung genügen. Ansonsten könntest du das Prinzip von Maxi verfolgen und anstelle eines string Index &quot;10 2A&quot; gleich einen Index auf ein Funktionszeigerarray senden, dann hast du direkten 1:1 Zugriff auf die Batchfunktionen, schneller gehts nimma:</p>
<pre><code class="language-cpp">#define BATCHFUNC_QUANTITY 20
typedef void (*pBatchFunc)(); 
pBatchFunc pFuncArr[BATCHFUNC_QUANTITY];
</code></pre>
]]></description><link>https://www.c-plusplus.net/forum/post/1783003</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1783003</guid><dc:creator><![CDATA[batch0r]]></dc:creator><pubDate>Wed, 23 Sep 2009 11:18:57 GMT</pubDate></item></channel></rss>