+ Antworten
Seite 1 von 9 1 2 3 ... LetzteLetzte
Ergebnis 1 bis 10 von 83

Thema: Universal Datenformat

  1. #1
    Registriert seit
    09.04.2006
    Alter
    42
    Beiträge
    396
    Downloads
    0
    Uploads
    0

    Daumen hoch Universal Datenformat

    Es gibt verschiedenst kleine Projekte und Eigenentwicklung, welche Daten visualisiert haben möchten.
    Aktuell ist das der Minilloger V2 als auch eigene Derivate von dem Minilogger V1. Auch das Logformat vom Opencharge verwendet derzeit ein vorhandenes Datenformat eines kommerziellen Ladegerätes, was einiges Einschränkungen bedeutet.

    Angeleht an einem CSV Format, möchte ich die Definition eines offenen Formates anregen. Das könnte etwa so aussehen:
    • 10 Datenkanäle
    • 1'er Datenkanal ist die X-Achse
    • Einheit und Faktor Definition im INI File
    • zusätzlich 5 frei zu berechnende Datenkanäle nach einfachen durch in den INI File zu definierenden Formeln( z.B. Ch12 = CH10 * Ch1 oder aufsummierend CH12=Ch12+Ch3)
    • Universelle Trennung der gesendetet Daten durch ein Trennzeichen ( dadurch variable Bytelänge der Daten) und/oder definierter Abschluss eines Datenblocks durch ein Sonderzeichen.
    Zukünftige Projeke sollten diese Format als Standart ansehen und für ihrer Entwicklung nur passende INI's mitliefern.

    Thomas
    ------------------------------------------------------------------------------
    Neue Webseite des Opensource Ladegerät: http://www.opencharge.de

  2. #2
    Registriert seit
    20.02.2005
    Ort
    Arnstadt
    Alter
    43
    Beiträge
    703
    Downloads
    1
    Uploads
    0
    Blog-Einträge
    1

    Standard

    Hallo Thomas,

    das ist ein interessanter Vorschlag!

    Und das ist ein Thema, worüber Dominik und ich schon oft gesprochen haben. Wir haben uns gerade in den letzten Tagen auch über die mögliche Verwendung von regular expressions Gedanken gemacht.
    Dein Vorschlag eines offenen Datenformats klingt sehr vielversprechend und erscheint mir auch umsetzbar.
    Es muss in dem von Dir erwähnten ini-File dann auch Anweisungen geben, wie LogView z.B. den Beginn eines Datensatzes erkennen kann. Und ob ein Wert z.B. beim Beginn eines Datensatzes wieder auf Null gesetzt werden soll. ...
    Da ist also noch einiges an Details festzulegen.

    Wir hoffen, dass sich noch viele Leute an der Diskussion dazu beteiligen werden!

    Der bisherige Stand der Umsetzung eines Universalformates in LogView ist in etwa folgendes:

    1.) Es muss ein Basisformat geben, welches ohne Änderungen sofort zu brauchbaren Ergebnissen in LogView führt.

    2.) Bei Bedarf kann man nachträglich über zusätzliche Steuerdateien Erweiterungen/Änderungen/Anpassungen vornehmen.

    3.) Die Trennung der einzelnen Daten in einem Wertesatz (entspricht beim Empfang einem Datentelegramm) erfolgt durch ein Trennzeichen, z.B. das Semikolon. Abschluss eines Wertesatzes über Sonderzeichen.

    4.) Die Werte selbst werden nicht mit Dezimaltrennungen versehen. Da es international nun mal Unterschiede bei der Verwendung von Komma und Punkt gibt, würde das insgesamt mehr Ärger als Nutzen bringen.
    Deshalb werden z.B. Spannung, Strom, Kapazität und andere elektrische Kennwerte als Tausendstel übertragen, also in mV, mA, mAh.

    Bis auf den Punkt 2.) erfüllt das bereits in LogView integrierte Datenformat 'Testformat Lader' diese Anforderungen. (Für Datenlogger gibt es das 'Testformat Logger'). Das Format geht im Moment von einer festen Länge von 44 Zeichen aus, das könnte man aber bei Bedarf flexibel halten. Für feste Längen ist die Verarbeitung in LogView generell schneller.

    An Punkt 2.), also die Erweiterbarkeit der Auswertung, kann man arbeiten.

    Zum Testen hier mal die Details des Datenformates 'Testformat Lader':
    (realisiert für max. 3 Kanäle)

    {-------------------------------------------------------------------------------
    Datenformatbeschreibung
    Schnittstelle: 9600 Baud
    8 Datenbits
    N keine Parität
    1 Stopbit
    Code:
     
            1         2         3         4
    1234567890123456789012345678901234567890123 4
    k;tttttt;UUUUU;IIIII;CCCCCC;TTTTT;xx;y;zzz<cr><lf>
    k Kanalnummer (1, 2 oder 3)
    tttttt Zeit in Sekunden (neuer Datensatz beginnt bei 0) 
    UUUUU Spannung in mV
    IIIII Strom in mA
    CCCCCC Ladung in mAh
    TTTTT Temperatur in 0.1°C Schritten
    xx Zyklusnummer (wenn keine Zyklen verwendet werden = 00 ansonsten
    steht dort halt die Zyklusnummer)
    y Status dezimal (0 = laden, 1 = entladen, 2 = Pause,
    9 = keine Aktion)
    zzz Erweiterungen (im Moment einfach 000 dezimal)
    Hinweise:
    ------------------------
    1) Die Daten kommen im Sekundentakt. Die Zeit beginnt bei 0 Sekunden !
    2) Wenn Spannung oder Strom nicht in 1000er Schritten zur Verfügung stehen,
    muss der Wert passend ausgegeben werden (10V = 10000 im Datenformat)
    3) Wird normal geladen / entladen ist die Zyklusnummer gleich 00. Werden
    Zyklen verwendet, beginnt der Zyklenwert mit 01.
    4) Der Status muss passend gesetzt werden. Für Laden, Entladen entsprechend
    0 bzw. 1 in dezimal ausgeben. Wenn der Lader eine Pause macht
    (z.b. zwischen Laden und Entladen), dann muss eine 2 gesendet werden.
    Macht der Lader nichts, also ist er mit seiner (Ent-)Ladung durch,
    dann sendet er 9.
    9 wird auch nach dem Start gesendet, erst wenn der Lader seine
    Arbeit aufnimmt, geht dieser Wert auf 0,1 oder 2.
    5) Die Erweiterungen sind im Moment ungenutzt. Hier einfach 000 dezimal senden.
    6) Die Kanalnummer ist bei Geräten mit einem Ausgang halt immer 1. Bei
    mehreren Ausgängen je nach Ausgangszahl.
    Jeder Kanal sendet trotzdem im Sekundentakt. Alternativ sendet jeder
    Kanal nur alle x Sekunden. Dabei muss aber auf die Zeit geachtet werden.
    Diese Zeitangaben müssen stimmen!
    7) Es können auch permanent Daten gesendet werden. In diesem Fall muss aber
    bei sinnlosen Telegrammen die Zeit auf 000000 stehen und der Status auf 9.
    -------------------------------------------------------------------------------}

    Und zur Vollständigkeit hier noch das Datenformat 'Testformat Logger':
    (realisiert für max. einen Kanal)

    {-------------------------------------------------------------------------------
    Datenformatbeschreibung
    Schnittstelle: 9600 Baud
    8 Datenbits
    N keine Parität
    1 Stopbit
    Code:
     
            1         2         3         4
    12345678901234567890123456789012345678901234567 8
    k;tttttt;UUUUU;IIIII;CCCCCC;PPPPPP;TTTTT;y;zzz<cr><lf>
    (48 Byte)
    k Kanalnummer (Hier immer 1)
    tttttt Zeit in Sekunden (neuer Datensatz beginnt bei 0) 
    UUUUU Spannung in mV
    IIIII Strom in mA
    CCCCCC Ladung in mAh 
    PPPPPP digitaler Zähler
    y Status dezimal (0 = laden, 1 = entladen, 2 = Antriebsmessung,
    9 = keine Aktion)
    zzz Erweiterungen (im Moment einfach 000 dezimal)
    Hinweise:
    ------------------------
    1) Die Daten kommen im Sekundentakt. Die Zeit beginnt bei 0 Sekunden !
    2) Wenn Spannung oder Strom nicht in 1000er Schritten zur Verfügung stehen,
    muss der Wert passend ausgegeben werden (10V = 10000 im Datenformat)
    3) Der Status kann passend gesetzt werden - muss aber nicht
    4) Die Erweiterungen sind im Moment ungenutzt. Hier einfach 000 dezimal senden.
    5) LogView startet die Aufzeichnung beim Erkennen einer 000000 in der Zeit und
    einem Wechsel im Status von 9 auf 0 oder 1 oder 2.
    Infos zu PPPPPP digitaler Zähler
    Dieser Zähler kann mit einer beliebigen Zahl beschrieben werden. So kann man
    hier z.B. einen Drehzahlmesser mit übertragen. Wichtig ist hier nur folgendes:
    Der Zähler wird von LogView nicht angepasst. Es müssen also (falls erforderlich)
    Berechnungen vom Logger vorgenommen werden!
    -------------------------------------------------------------------------------}

    Gruß, Holger

  3. #3
    Registriert seit
    09.04.2006
    Alter
    42
    Beiträge
    396
    Downloads
    0
    Uploads
    0

    Standard

    Hallo Holger,

    du sprichst mir so aus dem Herzen mit der Definition des Openformates. Punkt 1-4 stimme ich uneingeschränkt zu.
    Zu dem Punkt 2:
    Mal überlegen, was muss definiert werden für eine Erweiterung...?

    Also grundsätzlich erstmal muss definiert werden ob es sich um einen 'realen' Datenkanal handelt welcher vom Lader/Logger empfangen wird, oder um einen reinen rechnerischen Kanal der sich aus anderen Werten zusammenrechnet.

    Dann sollte als einfachste rechnerische Korrektur ein Faktor definierbar sein, welche 'default "1" ist.

    Die Einheit muss definiert werden, z.B. "eta" oder "RPM"

    Die "geografische" Lage im Datenframe, z.B. das die Daten nach dem 7'en Trennzeichen im Frame übermittelt werden.

    Was fehlt.....?




    'Testformat Lader' bzw. 'Testformat Logger':

    Ich gehe mal davon aus, das bei dem 'Testformat Lader' die Geschwindigkeit von 9600 einfach über das Ini file verändert werden kann? Stichwort Prozessortakt und RS232 Taktfehler...

    Wunsch währe noch, die X Achse (Sekunde) auch per Kanal zu übermitteln. Das hat den Vorteil dass ich Logview auch bei laufender Ladung/Logging nachträglich einschalten kann.

    Die Anzahl der Kanäle sind meiner Meinung nach zu gering, sonst würde ich mit Opencharge dort aufspringen. Ich würde gerne hier flexibel agieren, also auch mal eine Interne Variable auf einem Kanal ausgeben...definiert das ganze im INI File .

    Wir hoffen, dass sich noch viele Leute an der Diskussion dazu beteiligen werden!
    Ich denke das Interesse an einem Openformat beschränkt sich auf Personen mit eigenen Projekten (z.B. ich mit Opencharge) oder Gemeinschaftsprojekten wir Minilogger (V1/2) oder deren Derivaten.

    Vielleicht kann man ja mit einem offenen Format auch einen Standart setzen, so das zukünftig auch kommerzielle Hersteller ein Openformat verwenden oder warum erfindet jeder das Rad neu, wenn er etwas mit RS232 Schnittstelle auf den Markt bringt.


    Thomas
    ------------------------------------------------------------------------------
    Neue Webseite des Opensource Ladegerät: http://www.opencharge.de

  4. #4
    Registriert seit
    20.02.2005
    Ort
    Arnstadt
    Alter
    43
    Beiträge
    703
    Downloads
    1
    Uploads
    0
    Blog-Einträge
    1

    Standard

    Hallo Thomas,

    Wunsch währe noch, die X Achse (Sekunde) auch per Kanal zu übermitteln.
    Das ist doch im Datenformat für jeden Kanal schon separat drin:
    tttttt Zeit in Sekunden

    Ich gehe mal davon aus, das bei dem 'Testformat Lader' die Geschwindigkeit von 9600 einfach über das Ini file verändert werden kann?
    Ja, so isses.

    Die Anzahl der Kanäle sind meiner Meinung nach zu gering, sonst würde ich mit Opencharge dort aufspringen.
    Kein Problem. Das läßt sich mit relativ wenig Aufwand auf 8 Kanäle aufbohren. Hat bisher nur niemand gebraucht.

    Vielleicht kann man ja mit einem offenen Format auch einen Standart setzen, so das zukünftig auch kommerzielle Hersteller ein Openformat verwenden
    Das wäre ne feine Sache!

    Gruß, Holger

  5. #5
    Registriert seit
    13.11.2006
    Ort
    Bodensee
    Beiträge
    32
    Downloads
    0
    Uploads
    0

    Standard

    Ich habe hier einen Eigenbau SD Card Logger (FAT) mit PIC gebaut. Zeichnet momentan NMEA Daten vom GPS im Flieger auf. Können dann direkt mit LVGPS ohne Umwege dargestellt werden.
    Jetzt will ich natürlich noch 2x U, I, Kapazität, Drehzahl und Temp. erfassen und speichern.
    Habe eben oben das Testformat Logger angesehen, ist sicher sehr sinnvoll.
    Mir ist noch nicht ganz klar, wie ich die beiden Datensätze GPS-NMEA und Messdaten verheiraten soll.
    Im NMEA Format gibts ein proprietäres Format (tolles Wort):
    $Pxx,yyyyyyy,zzzzzzz,aaaaaa,bbbbbbbb,ccccc*cs
    Zeile hat max 82 Zeichen, Daten werden durch Komma getrennt,*cs ist Checksumme.
    Das wäre die einfachste Einbindung der zusätzlichen erfassten Daten.
    Und es wäre alles NMEA konform.
    Danach könnte ein kleines Programm unter Windows die $Pxx Daten-Sätze entnehmen und in Testformat Logger wandeln und als Datei für LV speichern.
    Jetzt bin ich mir nur nicht sicher ob LV solche Dateien lesen kann. Bekomme ich aber dann raus.
    Was haltet Ihr von meinem Vorhaben?
    Gruss
    Wolfgang

  6. #6
    Registriert seit
    20.02.2005
    Ort
    Arnstadt
    Alter
    43
    Beiträge
    703
    Downloads
    1
    Uploads
    0
    Blog-Einträge
    1

    Standard

    Hallo Wolfgang,

    hört sich interessant und gut an.
    Halte uns bitte auf dem Laufenden!

    Gruß, Holger

  7. #7
    Registriert seit
    09.04.2006
    Alter
    42
    Beiträge
    396
    Downloads
    0
    Uploads
    0

    Standard

    Hab mal ne Frage, wegen dem definierten Trennzeichen sollt die Byteanzahl pro Datenkanal eigentlich egal sein, oder?

    Beispiel:
    k;tttttt;UUUUU;IIIII;CCCCCC;PPPPPP;TTTTT;y;zzz<cr> <lf>

    für ;tttttt; muss nicht ;000009; gesendet werden sondern es geht auch ;9;


    Der Print Befehl in Bascom verbraucht 228 Bytes mehr, als der Printbin Befehl. Diese 228 Bytes würde ich gerne sparen (das sind ~12% des ATTINY26 Speichers)....
    ..könnt ihr das in dem Teslogger/Lader Format implementieren das in dem Ini File auch konfiguriert werden kann ob ASCI Werte oder Binärwerte ausgewertet werden sollen?
    Das Trennzeichen ( ; sollte dann wohl als $H3B gesendet werden.

    TH
    ------------------------------------------------------------------------------
    Neue Webseite des Opensource Ladegerät: http://www.opencharge.de

  8. #8
    Registriert seit
    17.02.2005
    Ort
    Madfeld
    Alter
    34
    Beiträge
    3.596
    Downloads
    9
    Uploads
    3
    Blog-Einträge
    9

    Standard

    Moin !

    sollt die Byteanzahl pro Datenkanal eigentlich egal sein, oder
    ein klares Nein.

    für ;tttttt; muss nicht ;000009; gesendet werden sondern es geht auch ;9;
    ein klares geht nicht

    Noch kurz ein paar Worte hierzu. Das Format ist im Moment sehr statisch. Also es werden bei der Auswertung direkt Positionen abgegriffen und nicht nach ; gesucht. BsP:
    Code:
    Ladungswert_mAh := StrToInt(Copy(Data, 22,6));
    Ich könnte das natürlich alles umstellen. Das macht dann aber die Erkennung etwas schwieriger ob die ankommenden Daten denn auch wirklich gültig sind.

    ..könnt ihr das in dem Teslogger/Lader Format implementieren das in dem Ini File auch konfiguriert werden kann ob ASCI Werte oder Binärwerte ausgewertet werden sollen?
    Das Trennzeichen ( ; sollte dann wohl als $H3B gesendet werden.
    Hmm, könnten wir sicherlich einbauen. Wobei man dann genau definieren sollte wie das genau ausschaut. Also wieviel Bytes hat dann die Zeit, die Spannung, etc. Und wie soll die ganze Sache umgerechnet werden?
    Sind 0500h dann 12,8V als Bsp?
    Vielleicht kannst du hier mal beschreiben wie nach deiner Vorstellung die Sache in HEX aussehen sollte. Dann schaue ich mal ob man das umsetzen kann.
    Greetz Dominik (Site Admin)
    Skype: schmidom

  9. #9
    Registriert seit
    09.04.2006
    Alter
    42
    Beiträge
    396
    Downloads
    0
    Uploads
    0

    Standard

    Hy Holger,

    das klingt ja nicht so gut. Das ";" wird im Moment nur als Dummy mitgeführt.Das heisst man muss von der Loggerseite her, die Stopfnullen generieren. Das müsste unter Bascom dann so aussehen:
    Code:
    Dim S as String * 5
    S = Str(zahlenvariable)
    S = Format ( s; "00000")
    Das sind 168 Bytes extra unter Bascom, für die Formatierung eines 5 Byte Blocks. Für einen 4 Byte Block wird fast nochmal das selbe an Platz benötigt. Für 6 Byte Blöcke etc... das kann doch der Gigaherz Prozessor mit der 500GByte Festplatte viel besser als der Attiny26....der arme Atmel snüfff. Die Formatierung selbstgestrickt, bringt auch nicht deutlich mehr Ersparnis, das habe ich schon in Opencharge geprüft.
    Erinnere ich mich recht, LV ist unter Pascal programmiert. Ein einfaches "cut" gibt es dort nicht?:
    STROM=$( echo $LOGSTRING | cut -f 3 -d ";" )
    Ich denke da müsst ihr wirklich nochmal ran, um ein sauberes CSV Format auszuwerten, ansonsten kann man das nicht ein offenes Format nennen.



    Der Unterschied zwischen PRINT und PRINTBIN unter Bascom als Beispiel:
    Dim WERT as WORD
    WERT = 100
    print WERT ' ergibt "100" als Output
    printbin WERT ' ergibt "b" als Output, vom Terminalprogramm interpretiert
    Im Minilogger V1 wird das ganze so verwendet:
    printbin WERT_highbyte
    printbin WERT_lowbyte
    oder noch einfacher

    printbin WERT ' sendet WERT_lowbyte printbin WERT_highbyte

    Wenn ich mir die Logformate anderer in LV eingebundene Lader anschaue, kommt das bereits zur Anwendung, oder? Auch hier das selbe Thema, zwischen Print und Printbin sind das 218 Byte Flashspeicher.
    ------------------------------------------------------------------------------
    Neue Webseite des Opensource Ladegerät: http://www.opencharge.de

  10. #10
    Registriert seit
    09.03.2005
    Beiträge
    306
    Downloads
    0
    Uploads
    0

    Standard

    Hi zusammen,

    ich will auch mal in die ´Kerbe von space schlagen. Im Moment ist es bei den universellen Testformaten (Lader / Logger) tatsächlich so, dass dem Sender mit der Aufbereitung der Daten eine gehörige Last aufgebürdet wird.
    Ich würde folgendes für ein offenes Format vorschlagen:

    K;T;X1;X2;X3;X4;X5;X6;X7;X8;CS<cr><lf>

    K...Kanalnummer (Integer von 1 bis 999)
    T...Zeit (Integer von 0-4294967296, also 32Bit ohne Vorzeichen, 1 entspricht 10ms)
    X1-X8...Werte (Integer 32Bit mit Vorzeichen, also -2147483648 bis 2147483647)
    CS...Prüfsumme (optional, 0-99, 0 wird immer als gültig anerkannt, CS-Berechnung noch festzulegen)

    Ausgabe als ASCII
    führende Nullen nicht erforderlich
    ; (Semikolon) als Trennzeichen für die Daten
    bei jedem Kanal wird die Zeit mitgesendet
    jeder Kanal umfasst maximal 8 Werte
    die Einheit für die einzelnen Werte und die Bedeutung der Kanäle wird in einem INI-File festgelegt
    eine Telegram ist maximal 115Byte lang

    Bsp. für das Inifile für Ladegeräte:
    [Kanal1]
    status=standby
    X1_name="Spannung"
    X1_skalierung="0.001"
    X1_einheit="Volt"
    X2_name="Strom"
    X2_skalierung="0.001"
    X2_einheit="Ampere"
    X3_name="Temperatur"
    X3_skalierung="0.1"
    X3_einheit="°C"
    X4_name=""
    X4_skalierung=""
    X4_einheit=""
    X5_name=""
    X5_skalierung=""
    X5_einheit=""
    X6_name=""
    X6_skalierung=""
    X6_einheit=""
    X7_name=""
    X7_skalierung=""
    X7_einheit=""
    X8_name=""
    X8_skalierung=""
    X8_einheit=""
    [Kanal2]
    status=laden
    X1_name="Spannung"
    X1_skalierung="0.001"
    X1_einheit="Volt"
    X2_name="Strom"
    X2_skalierung="0.001"
    X2_einheit="Ampere"
    X3_name="Temperatur"
    X3_skalierung="0.1"
    X3_einheit="°C"
    X4_name="Kapazität"
    X4_skalierung="1"
    X4_einheit="mAh"
    X5_name=""
    X5_skalierung=""
    X5_einheit=""
    X6_name=""
    X6_skalierung=""
    X6_einheit=""
    X7_name=""
    X7_skalierung=""
    X7_einheit=""
    X8_name=""
    X8_skalierung=""
    X8_einheit=""
    [Kanal4]
    status=entladen
    X1_name="Spannung"
    X1_skalierung="0.001"
    X1_einheit="Volt"
    X2_name="Strom"
    X2_skalierung="0.001"
    X2_einheit="Ampere"
    X3_name="Temperatur"
    X3_skalierung="0.1"
    X3_einheit="°C"
    X4_name="Kapazität"
    X4_skalierung="1"
    X4_einheit="mAh"
    X5_name=""
    X5_skalierung=""
    X5_einheit=""
    X6_name=""
    X6_skalierung=""
    X6_einheit=""
    X7_name=""
    X7_skalierung=""
    X7_einheit=""
    X8_name=""
    X8_skalierung=""
    X8_einheit=""

    Der Lader sendet jetzt z.B.
    1;100;12500;0;;;;;;0
    1;200;12400;0;;;;;;0
    --> der Lader ist im standby, sendet jede Sekunde, misst 12.5V und 0.0A, Temp wird nicht ausgegeben
    --> jetzt startet eine Entladung, der Lader sendet deshalb jetzt auf Kanal3
    3;300;11900;1000;;0;;;;;;0
    3;400;11900;1000;;1;;;;;;0
    -> sendet auch jede Sekunde, 11.9V, 1A, keine Temp., 0 bzw. 1mAh

    Ich denke, damit hätten wir einen guten Kompromiss für beide Seiten: Die Sender-Seite ist relativ resourcenschonend für Mikrocontroller, die Daten sind notfalls am Terminal lesbar, die Stringauswertung lässt sich mittels Abzählen der Semikolons erschlagen, bei 999 möglichen Kanälen lassen sich ausreichend viele Zustände abbilden

    Schöne Grüsse
    Thomas
    Geändert von Thomas (05.02.2007 um 17:52 Uhr)

+ Antworten

Berechtigungen

  • Neue Themen erstellen: Nein
  • Themen beantworten: Nein
  • Anhänge hochladen: Nein
  • Beiträge bearbeiten: Nein