INFO: Dieses Forum nutzt Cookies...
Cookies sind für den Betrieb des Forums unverzichtbar. Mit der Nutzung des Forums erklärst Du dich damit einverstanden, dass wir Cookies verwenden.

Es wird in jedem Fall ein Cookie gesetzt um diesen Hinweis nicht mehr zu erhalten. Desweiteren setzen wir Google Adsense und Google Analytics ein.


Antwort schreiben 

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!

22.10.2005, 16:53
Beitrag #1

PeterGötz Offline
LVF-Grünschnabel
*


Beiträge: 36
Registriert seit: Aug 2005

2011
2005
DE

69253
Deutschland
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).

mfg. Peter Götz


Angehängte Datei(en) Thumbnail(s)
   

Sonstige .zip  DatenJonglieren.zip (Größe: 202,36 KB / Downloads: 337)

NixIschZuviel
Webseite des Benutzers besuchen Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren to top
Anzeige
30
Antwort schreiben 


Möglicherweise verwandte Themen...
Themen Verfasser Antworten Views Letzter Beitrag
  2 Parallele While-Schleifen mit unterschiedlichen Timer beenden Tomate27 3 2.949 18.08.2020 13:29
Letzter Beitrag: GerdW
  Fehlermeldung 91 bei 2D Array umwandeln zu Variant und wieder zurück Tobzn 4 4.916 31.03.2018 21:05
Letzter Beitrag: Tobzn
  DAQ Datenoutput an zwei Ziele mit unterschiedlichen Intervallen moTo 4 4.414 06.05.2016 20:05
Letzter Beitrag: GerdW
  For-Scheife zu unterschiedlichen Zeitpunkten unterbrechen? Stefan_r 6 4.868 03.11.2014 10:12
Letzter Beitrag: Stefan_r
Question Y-Achse mit unterschiedlichen Farben im Label LazyBoNe 2 3.770 02.07.2014 08:28
Letzter Beitrag: LazyBoNe
  Umgang mit vielen Variablen unterschiedlichen Typs dummyuser 6 5.611 13.01.2014 12:19
Letzter Beitrag: dummyuser

Gehe zu: