(19.11.2013 15:35 )redhand schrieb: Danke, der erste Teil der Antwort hätte mir genügt, denn wenn ich das nicht weiß bringt mir auch die Mathematik nichts.
Also ist das folgendermaßen zu verstehen??
Wenn das erste Byte bsp so ankommt: 0001 0000 entspricht es dezimal 16(dem ersten Element), deshalb wird durch 16 geteilt, so weiß man welcher Kanal gerade gelesen wird.
Nicht ganz. Das erste "Datenbyte" wird nur selten 0001 0000 entsprechen, denn die letzten vier Bits bilden zusammen mit dem zweiten Datenbyte den "Kanalwert". Ganzzahlige Division durch 16 "entfernt" diese 4 "low bits.
(19.11.2013 16:10 )redhand schrieb: Da liegt bei mir auch noch ein Verständnisproblem.
Zunächst: Bis eine Information (Kanal und Weg) aufgenommen wurde, werden 5 Bytes abgearbeitet (3mal 0x00). Muss ich dann bei VISA-Lesen bei Byte-Anzahl auch 5 wählen oder wie ist hier der Zusammenhang?
Wenn dann beispielsweise 3x 0x00 kommt, klar dann sieht man, wenn man den kontinuierlichen Datenfluss anschaut, welches das Byte mit der Kanalinformation ist bzw wann es kommt.
Wie kann man dann das Auslesen des Strings so steuern, dass die 3x 0x00 immer abgewartet werden und die zwei darauf folgenden Bytes entsprechend ausgelesen werden?
Da kann ich auch nur spekulieren, du lieferst zu wenige Infos.
Punkt 1) Dein VI liest "nur" Daten von der Schnittstelle, ohne ein Write-Kommando.
Punkt 2) Dann hast du noch die Info mit den 3 0x0 Bytes nachgeliefert.
Deshalb die folgende plausible Vermutung:
Deine Gegenstelle sendet unaufgefordert ihre Messwerte. Mglw. werden immer alle Messkanäle als 1 langer Block gesendet, wobei die Blöcke durch die erwähnten 3 0x0 Bytes getrennt werden. Mglw. wird aber auch nach jedem Kanal der 0x0-Block eingefügt.
Prinzipiell musst du die Schnittstelle öffen, in einer Schleife andauernd die anliegenden Bytes auslesen und solange zu einem String zusammensetzen und analysieren (Stichwort Schieberegister), bis du auf das Synchronisationsmuster "3x 0x0" triffst. Jetzt muss das nächste Byte im Stream untersucht werden. Ist es ungleich 0x0, dann ist es das erste Byte einer Kanal-Info, falls es dagegen 0x0 lautet, dann war es das letzte Byte eines Trennblocks und das darauffolgende Byte muss das erste Byte einer Kanal-Info sein.
Gruß, Jens