Autor |
Beitrag |
mandras
Beiträge: 430
Erhaltene Danke: 107
Win 10
Delphi 6 Prof, Delphi 10.4 Prof
|
Verfasst: Fr 15.08.14 21:47
Gemeint ist die Dateiposition $1800=dezimal 6144
Davor stehen nur wenige Daten, ein paar Details zur Messung im Klartext.
Erst ab der o.g. Dateiposition fangen die Meßwerte an.
|
|
Christoph1972
Beiträge: 690
Erhaltene Danke: 16
VS2015 Pro / C# & VB.Net
|
Verfasst: Fr 15.08.14 22:14
Ah ok, das sieht in meinem Editor etwas anders aus "ox1800", ich habe immer nach dem $ Zeichen gesucht. Aber die Nummer finde ich in dem Stream doch nicht wieder!? Oder etwa doch? Gut, wenn ich sie von Ende zum Anfang einlese und die Schleife immer bei "0000 0000" verlasse solte doch das selbe raus kommen. Ich denke das ich die Daten falsch einlese und daher kommen die obskuren Zahlen. Daher meine Frage ob es eine fertige Methode zum lesen gibt, oder muss ich die Logik selbst erstellen?
_________________ Gruß
Christoph
|
|
GuaAck
Beiträge: 378
Erhaltene Danke: 32
Windows 8.1
Delphi 10.4 Comm. Edition
|
Verfasst: Fr 15.08.14 22:27
Hallo Christoph,
unten ein Code, der läuft, quick-and-dirty. Zu den $1800: Das sieht man mit jedem Hex-Viewer: Vorher sieht es recht unstrukturiert aus, man sieht den Text "HP Agilent....", aber ab $1800 sind die Zeilen alle gleich strukturiert: 2 x (4 x 0, 4 x Zeichen); Die Zeichen enden immer mit E40 o.ä.
Gruß GuaAck
1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12: 13: 14: 15: 16: 17: 18: 19: 20: 21: 22: 23: 24: 25: 26: 27: 28: 29: 30: 31: 32: 33: 34: 35: 36: 37: 38: 39: 40: 41: 42: 43: 44: 45: 46: 47: 48: 49: 50: 51:
| UNIT UHp_Gas;
INTERFACE
USES Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, Dialogs, StdCtrls;
TYPE TForm1 = CLASS(TForm) Button1: TButton; Memo1: TMemo; PROCEDURE Button1Click(Sender: TObject); PRIVATE PUBLIC a: ARRAY[0..100000] OF single; END;
VAR Form1: TForm1;
IMPLEMENTATION
{$R *.dfm}
PROCEDURE TForm1.Button1Click(Sender: TObject); VAR f: FILE OF single; i: integer; dummy: single; BEGIN assignfile(f, 'Test88.txt'); ReSet(f); FOR i := 0 TO ($1800 DIV 4) - 1 DO Read(f, dummy); i := 0; WHILE NOT eof(f) DO BEGIN Read(f, a[i]); IF (i < 20) AND ((i MOD 2) = 1) THEN Memo1.Lines.Add(floattostr(a[i])); i := i + 1; END; closefile(f); Memo1.Lines.Add(inttostr(i) + ' Werte eingelesen');
END;
END. |
|
|
Christian S.
Beiträge: 20451
Erhaltene Danke: 2264
Win 10
C# (VS 2019)
|
Verfasst: Fr 15.08.14 22:41
Und hier in C# (weil ich's schon fertig hatte, bevor ich GuaAcks Beitrag gesehen habe ):
C#-Quelltext 1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11:
| var filename = @"d:\downloads\Test88.txt";
var bytes = File.ReadAllBytes(filename);
var sb = new StringBuilder(); for(int i = 0x1800; i < bytes.Length; i+=8 ) { var value = BitConverter.ToDouble(bytes, i); sb.AppendLine(value.ToString()); }
File.WriteAllText(@"d:\downloads\Test88_out.txt", sb.ToString()); |
_________________ Zwei Worte werden Dir im Leben viele Türen öffnen - "ziehen" und "drücken".
|
|
Christoph1972
Beiträge: 690
Erhaltene Danke: 16
VS2015 Pro / C# & VB.Net
|
Verfasst: Sa 16.08.14 09:57
_________________ Gruß
Christoph
|
|
Christoph1972
Beiträge: 690
Erhaltene Danke: 16
VS2015 Pro / C# & VB.Net
|
Verfasst: Mo 18.08.14 16:47
Hallo zusammen,
das Problem ist scheinbar doch nicht gelöst. Und zwar habe ich eine neue Datei, von einem anderen, aber identischem Gerät. Aus dieser Datei bekomme ich einfach keine plausiblen Werte.
Ich habe auch schon den Index hin und her geschoben, da kommt einfach nichts passendes raus. Wenn ich die alte Datei nach und nach ab 0 einlese, kann man genau erkennen ab wann die Datenreihe der Messung beginnt und die Daten machen sinn. Jetzt sieht man auch wann die Reihe beginnt, aber die Werte machen einfach keinen sinn.
Ich habe einfach keine Idee was ich da falsch mache. Wäre es möglich das ihr euch die neue Datei mal anschaut?
Anbei die Datei:
Einloggen, um Attachments anzusehen!
_________________ Gruß
Christoph
|
|
Martok
Beiträge: 3661
Erhaltene Danke: 604
Win 8.1, Win 10 x64
Pascal: Lazarus Snapshot, Delphi 7,2007; PHP, JS: WebStorm
|
Verfasst: Mo 18.08.14 20:34
Jeder einzelne der Messwerte ist ein NaN (warum merkt Tiny Hexer das eigentlich nicht?)... sicher, dass das Messgerät auch was gemessen hat?
Immerhin, mit 2 Dateien hätte man jetzt schon eine realistische Chance den Dateikopf zu untersuchen.
_________________ "The phoenix's price isn't inevitable. It's not part of some deep balance built into the universe. It's just the parts of the game where you haven't figured out yet how to cheat."
|
|
gehstock
Beiträge: 19
Erhaltene Danke: 2
|
Verfasst: Mo 18.08.14 21:32
|
|
GuaAck
Beiträge: 378
Erhaltene Danke: 32
Windows 8.1
Delphi 10.4 Comm. Edition
|
Verfasst: Mo 18.08.14 21:52
Für mich ist Test89 ein "File of Array[0..3] of 16_bit_integer" als BIG Endian (!!), Offset ist wieder wie gehabt $1800.
Logisch, nur eine Schätzung, jedenfalls vollkommen anders als Test88.
Gruß
GuaAck
|
|
gehstock
Beiträge: 19
Erhaltene Danke: 2
|
Verfasst: Mo 18.08.14 22:05
Test88 R e v . C . 0 1 . 0 5 [ 3 5 ]
Test89 R e v . C . 0 1 . 0 3 [ 3 7 ]
Vieleicht hat sich mit der Firmware auch das Dateiformat geändert
|
|
Christoph1972
Beiträge: 690
Erhaltene Danke: 16
VS2015 Pro / C# & VB.Net
|
Verfasst: Mo 18.08.14 22:19
Martok hat folgendes geschrieben : | Jeder einzelne der Messwerte ist ein NaN (warum merkt Tiny Hexer das eigentlich nicht?)... sicher, dass das Messgerät auch was gemessen hat?
Immerhin, mit 2 Dateien hätte man jetzt schon eine realistische Chance den Dateikopf zu untersuchen. |
Also mein Hex Editor bei der Arbeit hat das auch nicht gemerkt, ich auch nicht
Ich hatte mir schon extra eine neue Datei rausgesucht um sicher zu sein das ich keinen abgerochenen Lauf untersuche.
Ich denke das hilft mir nicht wirklich weiter, aber trotzdem vielen Dank für den Link!
gehstock hat folgendes geschrieben : | Test88 R e v . C . 0 1 . 0 5 [ 3 5 ]
Test89 R e v . C . 0 1 . 0 3 [ 3 7 ]
Vieleicht hat sich mit der Firmware auch das Dateiformat geändert |
Ah sehr gut, DANKE! Da hätte ich auch mal selbst drauf kommen können
Gut, wenn ich jetzt noch wüsste wie wie man da brauchbare Daten rausbekommt, könnte ich mich gut darauf einstellen. Ist gut möglich das es noch weitere Firmeware Versionen gib, wir haben 10 Geräte. Mit Updates und Neuanschaffungen könnte das ein Dauerthema für mich werden
_________________ Gruß
Christoph
|
|
Martok
Beiträge: 3661
Erhaltene Danke: 604
Win 8.1, Win 10 x64
Pascal: Lazarus Snapshot, Delphi 7,2007; PHP, JS: WebStorm
|
Verfasst: Mo 18.08.14 23:41
Christoph1972 hat folgendes geschrieben : | Ist gut möglich das es noch weitere Firmeware Versionen gib, wir haben 10 Geräte. Mit Updates und Neuanschaffungen könnte das ein Dauerthema für mich werden |
Hm, da müssten die ja die Auswertesoftware auch ständig patchen. Mal vergleichen, vielleicht gibts ja einen Datentyp-Identifier oder sowas.
Sicher, dass das Test89 komplett war? Bei 0x1074 ist in der anderen Datei sowas wie ein Kanalbezeichner, und vorher kommt mehrfach etwas was ich für Min/Max-Werte halten würde - in dieser Datei ist das +INF und NAN.
Edit2: Och menno, ich wollte doch was ganz anderes machen
Ich hab mal etwas rumgebastelt, so macht das mehr Sinn, ist aber auch noch nicht komplett. Was in dem record D1..D7 und A..J heißt sind die Stellen, wo ich keine Ahnung hab was das ist. Oh, und die zweite Datei ist auch nicht wirklich lesbar, aber falls das was ich "flags" getauft hab Flags sind, steht das da vielleicht sogar drin
Einheit picoAmpere? Wär jetzt die Frage was der Detektor dort tut, aber irgendwas mit Ionisation und Leitfähigkeit ists ja, wär also nicht so unerwartet.
Einloggen, um Attachments anzusehen!
_________________ "The phoenix's price isn't inevitable. It's not part of some deep balance built into the universe. It's just the parts of the game where you haven't figured out yet how to cheat."
|
|
Christoph1972
Beiträge: 690
Erhaltene Danke: 16
VS2015 Pro / C# & VB.Net
|
Verfasst: Di 19.08.14 06:52
Guten Morgen
Ja das mit dem patchen ist mir auch ein Dorn im Auge. Zudem muss ich ja damit rechnen, das ich die Datei irgendwann nicht mehr ausgelesen bekomme, vielleicht nicht mal mit eurer Hilfe!
Da ich mir nur zu 99% sicher bin das die Datei ok ist, werde ich noch mal eine neue raussuchen, die ich zuvor selbst auswerte.
Genau die Einheit ist pA, das Signal kommt von einem FID (Flammenionisationsdetektor).
Schade, dein Projekt kann ich mir nicht anschauen, bin C#er.
Vielen Dank für eure Unterstützung, das ist echt super!
_________________ Gruß
Christoph
|
|
gehstock
Beiträge: 19
Erhaltene Danke: 2
|
Verfasst: Di 19.08.14 09:05
Mach mal mehrere logs pro gerät das würde weiterhelfen
Für diesen Beitrag haben gedankt: Martok
|
|
Christoph1972
Beiträge: 690
Erhaltene Danke: 16
VS2015 Pro / C# & VB.Net
|
Verfasst: Di 19.08.14 23:36
Hi,
gehstock hat folgendes geschrieben : | Mach mal mehrere logs pro gerät das würde weiterhelfen |
Öhm, du meinst sicher Läufe/Runs, oder Logfiles?
Also, heute hatte ich leider nur wenig Zeit. Ich habe nur raus gefunden, das es nicht an der Firmware liegt. Ein weiters Gerät hat die selbe Firmware und die Datei kann ich auswerten. Die von uns nicht auswertbaren Dateien stammen von gültigen Messungen, das hatte ich auch noch mal kontrolliert. Auch die interne Export Funktion spuckt die Daten der X,Y Punkte korrekt aus. Die ChemStation hat scheinbar keine Problem ihr Format zu lesen
Morgen werde ich mal von allen Geräten CH Files zusammen suchen und prüfen ob es noch weitere Geräte gibt die nicht gelesen werden können.
_________________ Gruß
Christoph
|
|
Christoph1972
Beiträge: 690
Erhaltene Danke: 16
VS2015 Pro / C# & VB.Net
|
Verfasst: Mi 20.08.14 20:16
Heute habe ich mir eine Demo Version runtergeladen und installiert. Diese hat kein Problem die Dateien einzulesen und es wird alles korrekt gezeichnet. Es muss also ein Trick geben. Hat vielleicht noch jemand eine weitere Idee?
_________________ Gruß
Christoph
|
|
C#
Beiträge: 561
Erhaltene Danke: 65
Windows 10, Kubuntu, Android
Visual Studio 2017, C#, C++/CLI, C++/CX, C++, F#, R, Python
|
Verfasst: Do 21.08.14 00:17
ALso ich bin kein Profi aber hast du schon versucht die Demo zu dekompilieren? Dann könntest du dort nach der Formatierung schauen.
_________________ Der längste Typ-Name im .NET-Framework ist: ListViewVirtualItemsSelectionRangeChangedEventHandler
|
|