View unanswered posts | View active topics It is currently Thu Dec 13, 2018 1:19 am



This topic is locked, you cannot edit posts or make further replies.  [ 9 posts ] 
Reading FreeEMS Logs 
Author Message
Moderator
User avatar

Joined: Tue Jan 15, 2008 2:31 pm
Posts: 15200
Location: Home sweet home!
FreeEMS currently has two types of logs, that will be expanding to 11 types in the future, or maybe more. I'll update them with one post per type of log and information on how to obtain and interpret them. This post will just be an index to those posts! In general you can get logs from FreeEMS in two ways. For the time being, the preferred way is with a terminal application such as CuteCom and the provided binary packets to control things. You can also use MegaTunix to record logs, however the polled textual types are nearly 5x lower resolution than binary types and binary types with MTX can be interrupted by packets from MTX if you perform any actions.

  • How to use CuteCom to record a specific type of log
  • Using OpenLogViewer (OLV) to view FreeEMS binary logs
  • Basic predefined log with fairly full information in it Available in MTX (~20Hz) and CuteCom (~100Hz)
  • Logic Analyser (LA) log types 8 bit is available now! 16 and 32 bit NOT Available Yet!
  • Buffered Logic Analyser (BLA) log types NOT Available Yet!
  • Position (RPM) log type NOT Available Yet!
  • Structs (STR) log types NOT Available Yet!
  • Scratch pad (SPD) log type NOT Available Yet!

Fred.

_________________
DIYEFI.org - where Open Source means Open Source, and Free means Freedom
FreeEMS.org - the open source engine management system
FreeEMS dev diary and its comments thread and my turbo truck!
n00bs, do NOT PM or email tech questions! Use the forum!
The ever growing list of FreeEMS success stories!


Thu Oct 13, 2011 12:01 am
Profile WWW
Moderator
User avatar

Joined: Tue Jan 15, 2008 2:31 pm
Posts: 15200
Location: Home sweet home!
How to use CuteCom to record a specific type of log

EDIT by request:

Using an application like cutecom to record a FreeEMS binary log is very straight forward. Just connect the cable to the device, turn the device on, open the correct device in your application, and start saving/recording the stream to a file with .bin extension.

The correct serial settings are the following: 8,O,1

Note, O stands for ODD, this is not the default configuration, if you fail to change it, you'll still get a data stream, however it will be very (95%+) corrupted and FreeEMS will reject all and any packets that you send it/it receives.

It should be possible to configure the serial port as 8,O,1 and then just cat the device file out to a file, however you need to configure the port correctly first. How to do that without an app, I'm not sure.

I'm unsure which applications are best to use on windows for this task, suggestions are welcome.

_________________
DIYEFI.org - where Open Source means Open Source, and Free means Freedom
FreeEMS.org - the open source engine management system
FreeEMS dev diary and its comments thread and my turbo truck!
n00bs, do NOT PM or email tech questions! Use the forum!
The ever growing list of FreeEMS success stories!


Thu Oct 13, 2011 12:01 am
Profile WWW
Moderator
User avatar

Joined: Tue Jan 15, 2008 2:31 pm
Posts: 15200
Location: Home sweet home!
Using OpenLogViewer (OLV) to view FreeEMS binary logs

EDIT by request:

Once you have a binary stream captured into a .bin file with some other application such as cutecom, you can view it with OLV.

Simply choose the file in the File >> Open dialog box and it will load. If it is very big, and you're using standard memory settings, it could fail. Ask on the forum if that happens to you. If it's reasonably sized you'll get some statistics from the file in the console and a window of fields to choose from. Drag the fields of interest into the division box to the lower left and create additional division boxes as required.

_________________
DIYEFI.org - where Open Source means Open Source, and Free means Freedom
FreeEMS.org - the open source engine management system
FreeEMS dev diary and its comments thread and my turbo truck!
n00bs, do NOT PM or email tech questions! Use the forum!
The ever growing list of FreeEMS success stories!


Thu Oct 13, 2011 12:17 am
Profile WWW
Moderator
User avatar

Joined: Tue Jan 15, 2008 2:31 pm
Posts: 15200
Location: Home sweet home!
Basic (BIN) predefined log with fairly full information in it

Available in MTX (~30Hz in CSV) and CuteCom (~90Hz)

Code:
   String[] coreStatusAFlagNames = {
         "CS-FuelPumpPrime",
         "CS-unused1",
         "CS-unused2",
         "CS-unused3",
         "CS-unused4",
         "CS-unused5",
         "CS-unused6",
         "CS-unused7"
      };

   String[] decoderFlagsFlagNames = {
         "DF-CombustionSync",
         "DF-CrankSync",
         "DF-CamSync",
         "DF-LAST_TIMESTAMP_VALID",
         "DF-LAST_PERIOD_VALID",
         "DF-LAST_MATCH_VALID",
         "DF-Spare-6",
         "DF-Spare-7"
      };
   
   String[] flaggableFlagsNames = {
         "FF-callsToUISRs",               // to ensure we aren't accidentally triggering unused ISRs.
         "FF-lowVoltageConditions",       // low voltage conditions.
         "FF-decoderSyncLosses",          // Number of times cam, crank or combustion sync is lost.
         "FF-decoderSyncCorrections",     // Definite decoder syncs found while already synced in a different position.
         "FF-decoderSyncStateClears",     // Sync loss called when not synced yet, thus discarding data and preventing sync.
         "FF-serialNoiseErrors",          // Incremented when noise is detected
         "FF-serialFramingErrors",        // Incremented when a framing error occurs
         "FF-serialParityErrors",         // Incremented when a parity error occurs
         "FF-serialOverrunErrors",        // Incremented when overrun occurs (duplicated in KeyUserDebug below)
         "FF-serialEscapePairMismatches", // Incremented when an escape is found but not followed by an escapee
         "FF-serialStartsInsideAPacket",  // Incremented when a start byte is found inside a packet
         "FF-serialPacketsOverLength",    // Incremented when the buffer fills up before the end
         "FF-serialChecksumMismatches",   // Incremented when calculated checksum did not match the received one
         "FF-serialPacketsUnderLength",   // Incremented when a packet is found that is too short
         "FF-commsDebugMessagesNotSent",  // Incremented when a debug message can't be sent due to the TX buffer
         "FF-commsErrorMessagesNotSent"   // Incremented when an error message can't be sent due to the TX buffer
   };

   private LogField[] fields = { // This should be read from a file at some point, as it's going to be flexible. See FreeEMS/src/inc/structs.h for definitive answers.
      // CoreVars struct contents:
      new LogField("IAT",  100),   // Inlet Air Temperature           : 0.0 -   655.35       (0.01 Kelvin (/100))
      new LogField("CHT",  100),   // Coolant / Head Temperature      : 0.0 -   655.35       (0.01 Kelvin (/100))
      new LogField("TPS",  640),   // Throttle Position Sensor        : 0.0 -   102.398438   (0.0015625 % (/640))
      new LogField("EGO",  32768), // Exhaust Gas Oxygen              : 0.0 -     1.99996948 (0.0000305175781 lambda (/32768))
      new LogField("MAP",  100),   // Manifold Absolute Pressure      : 0.0 -   655.35       (0.01 kPa (/100))
      new LogField("AAP",  100),   // Atmospheric Absolute Pressure   : 0.0 -   655.35       (0.01 kPa (/100))
      new LogField("BRV",  1000),  // Battery Reference Voltage       : 0.0 -    65.535      (0.001 Volts (/1000))
      new LogField("MAT",  100),   // Manifold Air Temperature        : 0.0 -   655.35       (0.01 Kelvin (/100))
      new LogField("EGO2", 32768), // Exhaust Gas Oxygen              : 0.0 -     1.99996948 (0.0000305175781 lambda (/32768))
      new LogField("IAP",  100),   // Intercooler Absolute Pressure   : 0.0 -   655.35       (0.01 kPa (/100))
      new LogField("MAF"),         // Mass Air Flow                   : 0.0 - 65535.0        (raw units from lookup)
      new LogField("DMAP"),        // Delta MAP kPa/second or similar : 0.0 - 65535.0        (raw units from lookup)
      new LogField("DTPS"),        // Delta TPS %/second or similar   : 0.0 - 65535.0        (raw units from lookup)
      new LogField("RPM", 2),      // Revolutions Per Minute (Calced) : 0.0 - 32767.5        (0.5 RPM (/2))
      new LogField("DRPM"),        // Delta RPM (Calced)              : 0.0 - 65535.0        (raw units from lookup)
      new LogField("DDRPM"),       // Delta Delta RPM (Calced)        : 0.0 - 65535.0        (raw units from lookup)

      // DerivedVars struct contents:
      new LogField("LoadMain", 512),        // Configurable unit of load, scale same as map by default
      new LogField("VEMain", 512),          // Volumetric Efficiency in 0 - 128%
      new LogField("Lambda", 32768),        // Integral Lambda 0 - 2.0
      new LogField("AirFlow"),              // raw intermediate, remove
      new LogField("densityAndFuel"),       // raw intermediate, remove
      new LogField("BasePW", 1250),         // Raw PW before corrections 0 - ~52ms
      new LogField("ETE", (100.0/32768.0)), // Engine Temperature Enrichment percentage correction 0 - 200%
      new LogField("TFCTotal", 1250),       // Transient fuel correction PW (+/-)  0 - ~52ms
      new LogField("EffectivePW", 1250),    // Actual PW of fuel delivery 0 - ~52ms
      new LogField("IDT", 1250),            // PW duration before fuel flow begins 0 - ~52ms
      new LogField("RefPW", 1250),          // Reference electrical PW 0 - ~52ms
      new LogField("Advance", 50),          // Ignition advance (scaled degrees / oneDegree(currently 50) = degrees) 0 - ~64*
      new LogField("Dwell", 1250),          // Dwell period, s 0 - ~52ms

      // KeyUserDebugs struct contents
      new LogField("tempClock", types.UINT8),     // Incremented once per log sent, to be moved to a char TODO
      new LogField("spareChar", types.UINT8),     // Spare
      new LogField("coreStatusA",  types.BITS8, coreStatusAFlagNames),    // Duplicated, migrate here, remove global var
      new LogField("decoderFlags", types.BITS8, decoderFlagsFlagNames),   // Various decoder state flags
      new LogField("flaggableFlags", types.BITS16, flaggableFlagsNames),///< Flags to go with our flaggables struct.
      new LogField("currentEvent",             types.UINT8), // Which input event was last to come in
      new LogField("syncLostWithThisID",       types.UINT8), // A unique identifier for the reason behind a loss of sync
      new LogField("syncLostOnThisEvent",      types.UINT8), // Where in the input pattern it all went very badly wrong
      new LogField("syncCaughtOnThisEvent",    types.UINT8), // Where in the input pattern that things started making sense
      new LogField("syncResetCalls",           types.UINT8), // Sum of losses, corrections and state clears
      new LogField("primaryTeethSeen",         types.UINT8), // Free running counters for number of input events, useful at lower RPM
      new LogField("secondaryTeethSeen",       types.UINT8), // Free running counters for number of input events, useful at lower RPM
      new LogField("serialOverrunErrors",      types.UINT8), // Incremented when an overrun occurs due to high interrupt load, not a fault, just a fact of life at high RPM
      new LogField("serialHardwareErrors",     types.UINT8), // Sum of noise, parity, and framing errors
      new LogField("serialAndCommsCodeErrors", types.UINT8), // Sum of checksum, escape mismatches, starts inside, and over/under length
      new LogField("inputEventTimeTolerance"),   // Required to tune noise rejection over RPM TODO add to LT1 and MissingTeeth
      new LogField("zsp10"), // Spare US variable
      new LogField("zsp9"),  // Spare US variable
      new LogField("zsp8"),  // Spare US variable
      new LogField("zsp7"),  // Spare US variable
      new LogField("zsp6"),  // Spare US variable
      new LogField("zsp5"),  // Spare US variable
      new LogField("zsp4"),  // Spare US variable
      new LogField("zsp3"),  // Spare US variable
      new LogField("clockInMilliSeconds"),       // Migrate to start of all large datalogs once analysed
      new LogField("clock8thMSsInMillis", 8) // Migrate to start of all large datalogs once analysed

_________________
DIYEFI.org - where Open Source means Open Source, and Free means Freedom
FreeEMS.org - the open source engine management system
FreeEMS dev diary and its comments thread and my turbo truck!
n00bs, do NOT PM or email tech questions! Use the forum!
The ever growing list of FreeEMS success stories!


Thu Oct 13, 2011 12:17 am
Profile WWW
Moderator
User avatar

Joined: Tue Jan 15, 2008 2:31 pm
Posts: 15200
Location: Home sweet home!
Logic Analyser (LA) log types

8 bit is available now!

16 and 32 bit NOT Available Yet!

_________________
DIYEFI.org - where Open Source means Open Source, and Free means Freedom
FreeEMS.org - the open source engine management system
FreeEMS dev diary and its comments thread and my turbo truck!
n00bs, do NOT PM or email tech questions! Use the forum!
The ever growing list of FreeEMS success stories!


Thu Oct 13, 2011 12:17 am
Profile WWW
Moderator
User avatar

Joined: Tue Jan 15, 2008 2:31 pm
Posts: 15200
Location: Home sweet home!
Buffered Logic Analyser (BLA) log types

NOT Available Yet!

_________________
DIYEFI.org - where Open Source means Open Source, and Free means Freedom
FreeEMS.org - the open source engine management system
FreeEMS dev diary and its comments thread and my turbo truck!
n00bs, do NOT PM or email tech questions! Use the forum!
The ever growing list of FreeEMS success stories!


Thu Oct 13, 2011 12:18 am
Profile WWW
Moderator
User avatar

Joined: Tue Jan 15, 2008 2:31 pm
Posts: 15200
Location: Home sweet home!
Position (RPM) log type

NOT Available Yet!

Tech info viewtopic.php?f=8&t=1339

_________________
DIYEFI.org - where Open Source means Open Source, and Free means Freedom
FreeEMS.org - the open source engine management system
FreeEMS dev diary and its comments thread and my turbo truck!
n00bs, do NOT PM or email tech questions! Use the forum!
The ever growing list of FreeEMS success stories!


Thu Oct 13, 2011 12:18 am
Profile WWW
Moderator
User avatar

Joined: Tue Jan 15, 2008 2:31 pm
Posts: 15200
Location: Home sweet home!
Structs (STR) log types

NOT Available Yet!

_________________
DIYEFI.org - where Open Source means Open Source, and Free means Freedom
FreeEMS.org - the open source engine management system
FreeEMS dev diary and its comments thread and my turbo truck!
n00bs, do NOT PM or email tech questions! Use the forum!
The ever growing list of FreeEMS success stories!


Thu Oct 13, 2011 12:19 am
Profile WWW
Moderator
User avatar

Joined: Tue Jan 15, 2008 2:31 pm
Posts: 15200
Location: Home sweet home!
Scratch pad (SPD) log type

NOT Available Yet!

_________________
DIYEFI.org - where Open Source means Open Source, and Free means Freedom
FreeEMS.org - the open source engine management system
FreeEMS dev diary and its comments thread and my turbo truck!
n00bs, do NOT PM or email tech questions! Use the forum!
The ever growing list of FreeEMS success stories!


Thu Oct 13, 2011 12:19 am
Profile WWW
Display posts from previous:  Sort by  
This topic is locked, you cannot edit posts or make further replies.   [ 9 posts ] 

Who is online

Users browsing this forum: No registered users and 2 guests


You cannot post new topics in this forum
You cannot reply to topics in this forum
You cannot edit your posts in this forum
You cannot delete your posts in this forum
You cannot post attachments in this forum

Search for:
Jump to:  
cron
Powered by phpBB® Forum Software © phpBB Group
Designed by ST Software for PTF. ColorizeIt.