Array mit unterschiedlichen Datenformaten wieder zurücklesen
Wenn dein Problem oder deine Frage geklärt worden ist, markiere den Beitrag als "Lösung",
indem du auf den "Lösung" Button rechts unter dem entsprechenden Beitrag klickst. Vielen Dank!
Array mit unterschiedlichen Datenformaten wieder zurücklesen
Sachverhalt:
Ich hänge ein 2D-Array an eine bestehende Datei an mit dem Vi "Datei schreiben." Bei diesem VI schalte ich die Überschrift auf True. Dies bewirkt, dass ein Kopf vor die Daten gelegt wird in dem die Arraygrösse bekanntgeben wird (Bei 2-D Array Anzahl der Zeilen und Anzahl der Spalten).
Später lese ich die Datei zurück und separiere das 2D-Array.
In dem 2D Array steht ein Kopf welches das Array beschreibt Zeilen/Spalten und danach jeweils von 3Leerzeichen getrennt zunächst ein Formatbezeichner gefolgt vom Dateninhalt...
Ich schaffe es bislang mit keinem VI das (Big-)Endian Format zurückzulesen, es ist aber einwandfrei in der (beiligenden) Gerätedatei enthalten.
Schau mal rein, wenn du Zeit hast.
In der Datei ist zunächst der Kopf und die Sollwertdaten einer typischen Gerätedatei. Wenn Du diese Gerätedatei mit dem normalen Editor öffnest und die Schriftart auf Terminal stellst und den Zeilenumbruch abschaltest dann siehst du alle ASCII-Zeichen im Orginalformat. Öffne bitte die Datei 00-0000 001_000000000017.pnl (Diese wurde aus der Typdatei 00-0000 001 generiert und trägt die Seriennummer 17)
Das Array der Tastensollwerte beginnt in der Datei ab:
Zunächst steht ein von mir festgelegter String der heisst:"Ab hier Tastensollwerte:"
Wie du siehst wird jedes Zeichen bzw. jede Ascii-Zeichenkette durch 3 Leerzeichen (ASCI-Code 0Dez) getrennt. (Endian-Vereinbarung von Firma SUN?)
Danach kommt ein Kopf welcher das Array beschreibt. Das Array ist ein 2D-Array und hat 3 Zeilen (Tasten)mit je 21 Spalten (Tastensollwerte).
Das Herz bedeutet in ASCII =3
Das Paragraphzeichen in ASCII = 21. Dies war der Arraykopf.
Nun kommen wunderbar formatiert, die einzelnen Arraywerte. Jedem Arraywert steht ein Datendiscriptor vorangestellt, wie in der ApplicationNote154 von NI auf Seite 9 beschrieben. (Du benötigst hierbei eine ASCII-Tabelle; den ASCII-Code)
Es ist klar Erkennbar was z.B. 8Bit-Integer ist (1Dez bzw. Smilie als ASCII-Zeichen) oder welche anderen Formate. Leider kann ich nicht alle Datendiscriptoren entschlüsseln, weil die NI-Applikation note zB. das Ascii-Zeichen Karo (4Dez) und einige andere Datendesciptoren nicht beschreibt.
Das wäre eine Tolle Sache (kleine Aufgabe ein passendes VI zu erstellen) wenn alle Array-Elemente (auch die als String in einer Text oder Bytstream gespeicherten Arrays) wieder in ihr Orginal-Datenformat zurückgelesen werden könnten. Oder geht das bereits und ich kapiere es nur nicht. Die Daten und deren passende Datenbezeichner sind doch in der Datei vorhanden.
Habe auch das VI "unflatten from String" zu deutsch "String in Daten konvertieren " ausprobiert, ist aber auch nicht optimal, da ich auch dort die Formatierung vorgeben muss.
Vielleicht hasst du eine Lösung. Ich denke wenn man sich die Mühe macht und alle Datendeskriptoren (auch die die ich bei NI nicht auf die schnelle finden kann) zusammensammelt und entsprechend die Datei ausliesst, die Dimension und Spalten und Zeilen ausliesst (Kopf) und die entsprenden Daten mit den voranstehenden Datenbezeichner zusammenbringt, dann ist die wiederherstellung der Daten ohne jedesmal mühselige Rückformatierung möglich.
Im Anhang gezippt ein Bildschirmhardcopy: Kopf_Zerlegen_Array_freilegen.jpg
Erklärungen zu dieser Hardcopy: Die Arraydaten sind in String-Form in dem Anzeigeelemten"2D Tastensollw" enthalten.
Interressant ist es auch zum Entschlüsseln sich die Daten als "Vorzeichenloses Byte-Array" anzeigen zu lassen. Dort siehst du jedes Ascii-Zeichen dezimal-codiert. (Hardcopyauszug des Frontpanels)
Links davon das VI "String in Daten konvertieren" kein echter Hit um die Werte anzuzeigen, da dies auch nicht die internen Datendeskriptoren umsetzt, sondern die Formate von aussen zugeführt werden muss.
Hat da jemand Erfahrung oder schon das geleich Problem oder musstet
ihr bislang die Daten wieder mühsam zurückwandeln. (Hierzu siehe auch Anhang KunstoderKeine.jpg wo die Daten zurückgewandelt und die orginal Datentypen wiederhergestellt werden).