<?xml version="1.0" encoding="utf-8"?>
<feed xml:lang="en" xmlns="http://www.w3.org/2005/Atom"><title>Recent posts to Parsen (serieller) Komandos</title><link href="https://forge.codesys.com/forge/talk/Deutsch/thread/6edee71c8d/" rel="alternate"/><link href="https://forge.codesys.com/forge/talk/Deutsch/thread/6edee71c8d/feed.atom" rel="self"/><id>https://forge.codesys.com/forge/talk/Deutsch/thread/6edee71c8d/</id><updated>2020-02-28T13:26:52.601000Z</updated><subtitle>Recent posts to Parsen (serieller) Komandos</subtitle><entry><title>Parsen (serieller) Komandos</title><link href="https://forge.codesys.com/forge/talk/Deutsch/thread/6edee71c8d/?limit=25#5dc4" rel="alternate"/><published>2020-02-28T13:26:52.601000Z</published><updated>2020-02-28T13:26:52.601000Z</updated><author><name>Oberchefe</name><uri>https://forge.codesys.com/u/oberchefe/</uri></author><id>https://forge.codesys.coma59ace275b17433d56947b5f26169674f06c7957</id><summary type="html">&lt;div class="markdown_content"&gt;&lt;p&gt;wenn's nur darum geht, dass mehrere Bytes auf einen bestimmten Wert (in Kombination) abgefragt werden sollen, kann man das auch so schreiben:&lt;/p&gt;
&lt;div class="codehilite"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;span class="k"&gt;IF&lt;/span&gt; &lt;span class="nv"&gt;Command&lt;/span&gt;[&lt;span class="mi"&gt;0&lt;/span&gt;]&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="mi"&gt;71&lt;/span&gt; &lt;span class="nv"&gt;AND&lt;/span&gt; &lt;span class="nv"&gt;Command&lt;/span&gt;[&lt;span class="mi"&gt;1&lt;/span&gt;]&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="mi"&gt;69&lt;/span&gt; &lt;span class="nv"&gt;AND&lt;/span&gt; &lt;span class="nv"&gt;Command&lt;/span&gt;[&lt;span class="mi"&gt;2&lt;/span&gt;]&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="mi"&gt;84&lt;/span&gt; &lt;span class="k"&gt;THEN&lt;/span&gt;
   &lt;span class="nv"&gt;Request&lt;/span&gt;:&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="nv"&gt;Command&lt;/span&gt;[&lt;span class="mi"&gt;4&lt;/span&gt;]&lt;span class="c1"&gt;;&lt;/span&gt;
       &lt;span class="nv"&gt;RVal&lt;/span&gt;:&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="nv"&gt;TRUE&lt;/span&gt;&lt;span class="c1"&gt;;&lt;/span&gt;
&lt;span class="nv"&gt;END_IF&lt;/span&gt;
&lt;/pre&gt;&lt;/div&gt;

&lt;/div&gt;</summary></entry><entry><title>Parsen (serieller) Komandos</title><link href="https://forge.codesys.com/forge/talk/Deutsch/thread/6edee71c8d/?limit=25#c17a" rel="alternate"/><published>2020-02-28T13:26:49.979000Z</published><updated>2020-02-28T13:26:49.979000Z</updated><author><name>Schuero</name><uri>https://forge.codesys.com/u/schuero/</uri></author><id>https://forge.codesys.comd05ffd8e0fe96148830a6ee23ef71dfac18ad7db</id><summary type="html">&lt;div class="markdown_content"&gt;&lt;p&gt;Hallo.&lt;/p&gt;
&lt;p&gt;Ich gehe immer diesen Ansatz nach. (funzt wie doof)&lt;/p&gt;
&lt;p&gt;Vergeiche jeden Zyklus ob sich der "Index" verändert hat.&lt;br/&gt;
Wenn nein, ist nich mehr im Lesepuffer der seriellen Schnittstelle.&lt;br/&gt;
Also nehme ich ann, dass der "Befehl" da ist.&lt;/p&gt;
&lt;p&gt;Diesen kann man dann auswerten und dannach den Index wieder auf 0 setzen.&lt;/p&gt;
&lt;p&gt;Hinweis noch zum Auswerten: &lt;br/&gt;
Meist werden die Befehle im Ascii Byte Format übertragen, dann ist das Array nix anders als ein String (String = Anzahl von Bytes der Länge x). Diesen kann man dann prima vergleichen.&lt;br/&gt;
Ich vergleiche aber meist die Arrayinhalte, spar Zeit und ist "kapiergeschützt" &lt;/p&gt;
&lt;p&gt;Gruß schuero&lt;/p&gt;&lt;/div&gt;</summary></entry><entry><title>Parsen (serieller) Komandos</title><link href="https://forge.codesys.com/forge/talk/Deutsch/thread/6edee71c8d/?limit=25#0806" rel="alternate"/><published>2020-02-28T13:26:42.401000Z</published><updated>2020-02-28T13:26:42.401000Z</updated><author><name>Nikodemus</name><uri>https://forge.codesys.com/u/nikodemus/</uri></author><id>https://forge.codesys.com46d66a748cdf7b7a2e3fb9719e87c70ce0b5bff1</id><summary type="html">&lt;div class="markdown_content"&gt;&lt;p&gt;Für eine Steuerung lese ich eine Komandosequenz über die serielle Schnittstelle (WAGE 750-873) ein.&lt;br/&gt;
Die Sequenz steht mir dann als ARRAY OF BYTE zur Verfügung. Bisher parse ich das ganze ziemlich&lt;br/&gt;
simpel, schlecht les- und erweiterbar durch geschachtelte Arrays ein:&lt;/p&gt;
&lt;div class="codehilite"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;span class="err"&gt; &lt;/span&gt; &lt;span class="err"&gt; &lt;/span&gt;&lt;span class="nt"&gt;CASE&lt;/span&gt; &lt;span class="nt"&gt;Command&lt;/span&gt;&lt;span class="cp"&gt;[&lt;/span&gt;&lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="cp"&gt;]&lt;/span&gt; &lt;span class="nt"&gt;OF&lt;/span&gt;
&lt;span class="err"&gt; &lt;/span&gt; &lt;span class="err"&gt; &lt;/span&gt;&lt;span class="nt"&gt;71&lt;/span&gt;&lt;span class="o"&gt;:&lt;/span&gt; &lt;span class="o"&gt;(*&lt;/span&gt;&lt;span class="nt"&gt;G&lt;/span&gt;&lt;span class="o"&gt;*)&lt;/span&gt;
&lt;span class="err"&gt; &lt;/span&gt; &lt;span class="err"&gt;  &lt;/span&gt; &lt;span class="err"&gt; &lt;/span&gt;&lt;span class="nt"&gt;CASE&lt;/span&gt; &lt;span class="nt"&gt;Command&lt;/span&gt;&lt;span class="cp"&gt;[&lt;/span&gt;&lt;span class="mi"&gt;1&lt;/span&gt;&lt;span class="cp"&gt;]&lt;/span&gt; &lt;span class="nt"&gt;OF&lt;/span&gt;
&lt;span class="err"&gt; &lt;/span&gt; &lt;span class="err"&gt;  &lt;/span&gt; &lt;span class="err"&gt; &lt;/span&gt;&lt;span class="nt"&gt;69&lt;/span&gt;&lt;span class="o"&gt;:&lt;/span&gt; &lt;span class="o"&gt;(*&lt;/span&gt;&lt;span class="nt"&gt;E&lt;/span&gt;&lt;span class="o"&gt;*)&lt;/span&gt;
&lt;span class="err"&gt; &lt;/span&gt; &lt;span class="err"&gt;  &lt;/span&gt; &lt;span class="err"&gt;  &lt;/span&gt; &lt;span class="err"&gt; &lt;/span&gt;&lt;span class="nt"&gt;CASE&lt;/span&gt; &lt;span class="nt"&gt;Command&lt;/span&gt;&lt;span class="cp"&gt;[&lt;/span&gt;&lt;span class="mi"&gt;2&lt;/span&gt;&lt;span class="cp"&gt;]&lt;/span&gt; &lt;span class="nt"&gt;OF&lt;/span&gt;
&lt;span class="err"&gt; &lt;/span&gt; &lt;span class="err"&gt;  &lt;/span&gt; &lt;span class="err"&gt;  &lt;/span&gt; &lt;span class="err"&gt; &lt;/span&gt;&lt;span class="nt"&gt;84&lt;/span&gt;&lt;span class="o"&gt;:&lt;/span&gt; &lt;span class="o"&gt;(*&lt;/span&gt;&lt;span class="nt"&gt;T&lt;/span&gt;&lt;span class="o"&gt;*)&lt;/span&gt;
&lt;span class="err"&gt; &lt;/span&gt; &lt;span class="err"&gt;  &lt;/span&gt; &lt;span class="err"&gt;  &lt;/span&gt; &lt;span class="err"&gt;  &lt;/span&gt; &lt;span class="err"&gt; &lt;/span&gt;&lt;span class="nt"&gt;Request&lt;/span&gt;&lt;span class="o"&gt;:=&lt;/span&gt;&lt;span class="nt"&gt;Command&lt;/span&gt;&lt;span class="cp"&gt;[&lt;/span&gt;&lt;span class="mi"&gt;4&lt;/span&gt;&lt;span class="cp"&gt;]&lt;/span&gt;&lt;span class="o"&gt;;&lt;/span&gt;
&lt;span class="err"&gt; &lt;/span&gt; &lt;span class="err"&gt;  &lt;/span&gt; &lt;span class="err"&gt;  &lt;/span&gt; &lt;span class="err"&gt;  &lt;/span&gt; &lt;span class="err"&gt; &lt;/span&gt;&lt;span class="nt"&gt;RVal&lt;/span&gt;&lt;span class="o"&gt;:=&lt;/span&gt;&lt;span class="nt"&gt;TRUE&lt;/span&gt;&lt;span class="o"&gt;;&lt;/span&gt;
&lt;span class="err"&gt; &lt;/span&gt; &lt;span class="err"&gt;  &lt;/span&gt; &lt;span class="err"&gt;  &lt;/span&gt; &lt;span class="err"&gt; &lt;/span&gt;&lt;span class="nt"&gt;END_CASE&lt;/span&gt;
&lt;span class="err"&gt; &lt;/span&gt; &lt;span class="err"&gt;  &lt;/span&gt; &lt;span class="err"&gt; &lt;/span&gt;&lt;span class="nt"&gt;END_CASE&lt;/span&gt;
&lt;span class="err"&gt; &lt;/span&gt; &lt;span class="err"&gt; &lt;/span&gt;&lt;span class="nt"&gt;79&lt;/span&gt;&lt;span class="o"&gt;:&lt;/span&gt; &lt;span class="o"&gt;(*&lt;/span&gt;&lt;span class="nt"&gt;O&lt;/span&gt;&lt;span class="o"&gt;*)&lt;/span&gt;
&lt;span class="o"&gt;...&lt;/span&gt;
&lt;/pre&gt;&lt;/div&gt;


&lt;p&gt;Geht das sinnvoller? Z.B. Membersuche in einem ARRAY OF STRING?&lt;/p&gt;
&lt;p&gt;Ich bekomme die Daten aus Serial_Interface_01.lib in einem Ringbuffer.&lt;br/&gt;
Bisher setze ich den Indexpointer einfach wieder auf 0, wenn ich einen&lt;br/&gt;
Befehl eingelesen habe. Dabei fürchte ich allerdings, dass Daten verloren&lt;br/&gt;
gehen können, sollte zwei Befehle schneller eingehen als ich sie parsen&lt;br/&gt;
kann. Ohne diesen Trick wäre allerdings ein mitgeführter Lesepointer und&lt;br/&gt;
ein Wrap-around-handling notwendig. Hat jemand mit sowas Erfahrung?&lt;/p&gt;&lt;/div&gt;</summary></entry></feed>