Für eine Steuerung lese ich eine Komandosequenz über die serielle Schnittstelle (WAGE 750-873) ein.
Die Sequenz steht mir dann als ARRAY OF BYTE zur Verfügung. Bisher parse ich das ganze ziemlich
simpel, schlecht les- und erweiterbar durch geschachtelte Arrays ein:
  CASECommand[0]OF  71:(*G*)    CASECommand[1]OF    69:(*E*)      CASECommand[2]OF      84:(*T*)        Request:=Command[4];        RVal:=TRUE;      END_CASE    END_CASE  79:(*O*)...
Geht das sinnvoller? Z.B. Membersuche in einem ARRAY OF STRING?
Ich bekomme die Daten aus Serial_Interface_01.lib in einem Ringbuffer.
Bisher setze ich den Indexpointer einfach wieder auf 0, wenn ich einen
Befehl eingelesen habe. Dabei fürchte ich allerdings, dass Daten verloren
gehen können, sollte zwei Befehle schneller eingehen als ich sie parsen
kann. Ohne diesen Trick wäre allerdings ein mitgeführter Lesepointer und
ein Wrap-around-handling notwendig. Hat jemand mit sowas Erfahrung?
Ich gehe immer diesen Ansatz nach. (funzt wie doof)
Vergeiche jeden Zyklus ob sich der "Index" verändert hat.
Wenn nein, ist nich mehr im Lesepuffer der seriellen Schnittstelle.
Also nehme ich ann, dass der "Befehl" da ist.
Diesen kann man dann auswerten und dannach den Index wieder auf 0 setzen.
Hinweis noch zum Auswerten:
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.
Ich vergleiche aber meist die Arrayinhalte, spar Zeit und ist "kapiergeschützt"
Gruß schuero
If you would like to refer to this comment somewhere else in this project, copy and paste the following link:
Für eine Steuerung lese ich eine Komandosequenz über die serielle Schnittstelle (WAGE 750-873) ein.
Die Sequenz steht mir dann als ARRAY OF BYTE zur Verfügung. Bisher parse ich das ganze ziemlich
simpel, schlecht les- und erweiterbar durch geschachtelte Arrays ein:
Geht das sinnvoller? Z.B. Membersuche in einem ARRAY OF STRING?
Ich bekomme die Daten aus Serial_Interface_01.lib in einem Ringbuffer.
Bisher setze ich den Indexpointer einfach wieder auf 0, wenn ich einen
Befehl eingelesen habe. Dabei fürchte ich allerdings, dass Daten verloren
gehen können, sollte zwei Befehle schneller eingehen als ich sie parsen
kann. Ohne diesen Trick wäre allerdings ein mitgeführter Lesepointer und
ein Wrap-around-handling notwendig. Hat jemand mit sowas Erfahrung?
Related
Talk.ru: 1
Talk.ru: 2
Hallo.
Ich gehe immer diesen Ansatz nach. (funzt wie doof)
Vergeiche jeden Zyklus ob sich der "Index" verändert hat.
Wenn nein, ist nich mehr im Lesepuffer der seriellen Schnittstelle.
Also nehme ich ann, dass der "Befehl" da ist.
Diesen kann man dann auswerten und dannach den Index wieder auf 0 setzen.
Hinweis noch zum Auswerten:
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.
Ich vergleiche aber meist die Arrayinhalte, spar Zeit und ist "kapiergeschützt"
Gruß schuero
wenn's nur darum geht, dass mehrere Bytes auf einen bestimmten Wert (in Kombination) abgefragt werden sollen, kann man das auch so schreiben:
Related
Talk.ru: 1
Talk.ru: 2