2D Array zerlegen - Druckversion +- LabVIEWForum.de (https://www.labviewforum.de) +-- Forum: LabVIEW (/Forum-LabVIEW) +--- Forum: LabVIEW Allgemein (/Forum-LabVIEW-Allgemein) +--- Thema: 2D Array zerlegen (/Thread-2D-Array-zerlegen) |
2D Array zerlegen - che-salih - 23.10.2013 14:06 Hi Community, folgendes habe ich bis jetzt gemacht. Ich habe ein VI erstellt, womit ich aus einem Gerät (RFID Reader) folgende Information auslesen kann. 2D Array String (Hex) und 2D Array Integer (Ich habe den 2D String Array einfach in Zahl umgewandelt). Mein VI liefert mir verschiedene Informationen, wie z.B. Auslesezeit, ID-Nummer, Datum, Antennennummer, etc. Nur die erste Zeile ist für mich wichtig. Die gesammte Informationen liegt genau in der 1. Zeile. Dieses VI funktioniert aber nur mit 1 Transponder. Die 1.Zeile ist bei einem Transponder immer 45 Byte groß und ich kann auf bestimmte Elemente zugreifen und mir die Information ausgeben lassen. Was ich jetzt machen möchte: ich möchte dieses VI erweitern. D.h es soll auch mit n Transpondern arbeiten und mir alle wichtigen Informationen liefern, wie bei einem Transponder. Folgende Information habe ich: Die 1. Zeile des 2D Arrays erweitert sich immer um 34 Byte mit steigender Transponderzahl, die ausgelesen wird. Also: 1 Transponder ----> 45 Byte 2 Transponder ----> 79 Byte 3 Transponer -----> 113 Byte usw. Die Data Länge ist immer 34 Byte und wird hinterneinander angehängt. Die letzten Bytes sind LSB CRC16 und MSB CRC16, was erstmal nicht so wichtig ist. Also konkret: Data Länge ist immer 9. Byte bis n-1 mit 34 Byte Schritten für neue Data Sets. Die ersten 8 Bytes representieren STX/MSB/LSB/COM Addr/Command/Status/TRData1/Data Set und es bleibt immer gleich. Bevor es noch mehr wird!!! Wie kann ich ein Regel aufstellen und sagen, ich möchte den Data Inhalt von 9. Byte bis n-1 Byte immer ausschneiden und in 34 Byte Frames aufteilen? Und das unabhängig vom Transponderzahl. Naja es ist etwas kompliziert erklärt aber mal schauen, ob es jemand versteht MfG Che RE: 2D Array zerlegen - BsaiboT - 23.10.2013 15:57 Schneide zuerst alles vor dem 9. Byte ab (beachte die Indizierung beginnend bei 0). Dadurch erhälst du ein neues Array, von dem du dir die Göße geben lässt. Die Arraygröße sollte dann nach deinen Angaben immer ein vielfaches von 34 Byte sein. Sprich du teilst die Arraygröße durch 34 und bekommst die Anzahl n der gelesenen Transponder. Alle Funktionen hierzu findest du in der Array-Palette. Ich würde mir ein neues Array mit n x 34 Byte Daten daraus erstellen. Das ist dann für die weitere Bearbeitung relativ einfach zu addressieren und zu händeln. Gruß, //Tobias Edit: Wie kommst du eigentlich auf 45 Byte? 34 + 8 = 42; 45 - 8 = 37; 45 - 34 = 11 usw... Entweder du hast dich verrechnet oder 3 byte vergessen. RE: 2D Array zerlegen - GerdW - 23.10.2013 17:05 Hallo, ergänzend zu Tobias' Anmerkungen: Wenn du die Header-Bytes weggeschnitten hast, kannst du mittels ReshapeArray dein 1D-Array sehr bequem in ein 2D-Array mit 34 Byte pro Zeile umwandeln. Dann kannst du per Autoindexing auf die Daten jedes Transponders zugreifen... RE: 2D Array zerlegen - che-salih - 24.10.2013 14:59 Zitat:Wie kommst du eigentlich auf 45 Byte? 34 + 8 = 42; 45 - 8 = 37; 45 - 34 = 11 usw... Entweder du hast dich verrechnet oder 3 byte vergessen. 1 Transponder: 8 Byte Header 34 Byte Data 2 Byte CRC16 macht 45 Byte angefangen bei 0. ich habe das etwas schöner mit While Schleife und Schieberegister gelöst. Im Prinzip das gleiche was Ihr vorgeschlagen habt. Mein Data Block steht jetzt in 2D Array zuverfügung, unabhängig davon wieviele Transponder im Lesefeld sind. Jetzt probiere ich mal die Informationen im Data Block gezielt anzuzeigen oder umzuformen Mfg Che. RE: 2D Array zerlegen - BsaiboT - 25.10.2013 07:59 (24.10.2013 14:59 )che-salih schrieb: 8 Byte Header Entweder ich stehe völlig auf dem Schlauch oder ich weiss es nicht.... 8 + 34 + 2 = 44 Byte 0 bis Byte 45 sind dennoch 46 Bytes total. Fehlen also immernoch 2 Bytes.... Naja, hauptsache Dein VI funktioniert jetzt. Du kannst mich ja bzgl. der Bytes noch einmal erleuchten, aber vielleicht sieht auch jmd anderes den Fehler. Ich bin ja schliesslich nicht lernresistent. RE: 2D Array zerlegen - che-salih - 25.10.2013 15:09 0. Element bis 8. Element = Header= 9 Bytes 9. Element bis 42. Element= Data= 34 Bytes 43. Element und 44. Element= CRC16= 2 Bytes Macht 45 Byte ------------------------------------------------------------- Jetzt habe ich´s aber hinbekommen RE: 2D Array zerlegen - che-salih - 28.10.2013 09:19 Guten Morgen, ich brauche noch etwas Hilfe. Nach der Indexing habe ich wieder ein 2D Array (U8), was ich aber zeilenweise als Gesamtzahll anzeigen möchte. Bsp.: 2D Array sieht so aus 30 00 30 08 33 30 00 30 08 33 Ich möchte das aber so haben: 3000300833 3000300833 nachdem möchte ich noch Arrays hinzufügen. Am Ende soll es etwa so aussehen: 3000300833 09:15:12.32 28.10.2013 1 3000300833 09:15:17.32 28.10.2013 2 usw. ID | Zeit | Datum | Antennnummer danke.. Che RE: 2D Array zerlegen - GerdW - 28.10.2013 09:26 Hallo che, hier mal die primitive Variante, dein 2D-Array in Strings umzuwandeln: [attachment=46972] RE: 2D Array zerlegen - BsaiboT - 28.10.2013 09:32 Moin Che. Genau wie Gerd es zeigt. Umwandeln deines Array in String und die Inhalte der Zeilen dabei verknüpfen. Anschliessend kannst du das entstandene Array mit den Infos wie Datum, Zeit, Empfänger erweitern. Wenn du einige Daten aber als Zahl behalten und andere als Zeitstempel und als String in einem Array, dann musst du dir ein Array of clusters erstellen. Gruß, //Tobias RE: 2D Array zerlegen - che-salih - 28.10.2013 12:55 Hi zusammen, es funktioniert wunderbar. Ich habe jetzt alle Informationen in 1D Arrays umformatiert. Am Ende werde ich dann alle zusammenfügen. Array of Cluster hört sich sehr gut an. Denke ich werde es damit lösen. Bevor ich aber alle zusammenführen kann, muss ich noch ein Schritt erledigen. Ich habe mir gedacht, die Zeitdarstellung genauso wie oben zu machen. Das heisst, ich verknüpfe die Zeitinformation und formatiere es über den Format-String. Die Formatvarianten habe ich mir unter Hilfe schon angeguckt. Das funktioniert aber nicht so wirklich. Also was ich habe ist: 134520307 1345218212 134521932 es soll: 13:48:23,007 13:48:38,212 13.48:39,32 Geht das überhaupt über Format-String? Che |