Jump to content
LegacyGT.com

Standalone Logging to MicroSD w/ OPv2.0


Underdog

Recommended Posts

I'm starting this post to get some help from the guys who are really into datalogging and the whole open-source thing. With my twinscroll project at the point where it is running pretty smooth, and all the little gremlins taken care of, I can finally focus on getting my datalogging setup to monitor the engine at all times.

 

My plan is to utilize the MicroSD logging that is now supported on the OPv2.0 and with my 8GB MicroSDHC card that I bought for $20 at Radioshack yesterday, I can get about ~20yrs worth of data before needing to dump it to my computer. :lol:

 

I have a couple basic issues that I need to sort out:

 

1. What data to log for general health of the engine and for my own curiosity? Here's what I have been monitoring and what I would like to add:

 

  • A/F Correction #1 (%)
  • A/F Learning #1 (%)
  • A/F Sensor #1 (AFR)
  • CL/OL Fueling* (status)
  • Engine Load (2-byte)** (g/rev)
  • Engine Speed (RPM)
  • Ignition Total Timing (degrees)
  • Knock Sum* (count)
  • Manifold Relative Pressure (PSI)
  • Throttle Opening Angle (%)

Adding:

 

  • LC1 Output
  • Mass Airflow (g/s) - Unless this can be derived from Engine Load.
  • Closed Loop Fueling Target (2-byte) - @ NSFW's recommendation.

2. I don't know how to parse all this information that I am collecting. I realize this is specific to my goals, so when it comes to plotting how my turbo is working on it's compressor map this is very straight-forward. However for monitoring general health, I don't really know what to do.

 

3. Finally, I don't know how to setup the logcfg.txt file for standalone logging. It seems like there are a lot of options for setting up parameters, scaling them, and grouping them, and I don't know the most efficient way to do it. I think I would like to log any time the car is 1) running and 2) coolant temperature is >= 160 (or something). Also, I would like to start a new log any time I go WOT.

 

 

Any insight would be appreciated... In the meantime I am going to take a stab at the logcfg.txt file and post it up for review.

Link to comment
Share on other sites

  • Replies 88
  • Created
  • Last Reply

Right now I use my laptop with RomRaider connected via Tactrix Open Port v2.0 (OPv2.0).

 

The OPv2.0 has a built in microSD card slot so you can datalog without hooking up a computer, but you need to specify what parameters to log with a logcfg.txt file in the root directory of the microSD card. :)

 

Here is the thread on OpenECU.org: http://forums.openecu.org/viewtopic.php?f=57&t=4319&hilit=microsd+logging

Link to comment
Share on other sites

Well, apologies for threadjacking with such a noob question, I was not aware of the existence of said OPV2.0. That is indeed a neat thing. I assume the same trigger to start/stop logging (rear defroster)? I have a list of parameters I was told to datalog but I am hesitant because I am a newbie at logging and don't want to potentially post the wrong thing.
Link to comment
Share on other sites

Ah, the heck with it. Others can correct me if I am wrong

Engine Load (2-byte)** (g/rev)

Engine Speed (rpm)

IAM (4-byte)* (multiplier)

Ignition Total Timing (degrees)

Knock Sum* (count)

Manifold Relative Pressure (4-byte)* (psi relative)

Mass Airflow (g/s)

Mass Airflow Sensor Voltage (V)

Primary Wastegate Duty Cycle Angle (%)

Throttle Opening Angle (%)

Link to comment
Share on other sites

It's no problem man... I'm a newbie to this stuff too. :)

 

There are a wide variety of triggers you can use. From what I have seen you can use any switch in the OBD2 data chain, or you can use logic functions with engine parameters.

 

For example, you can make it so that it only logs when RPM>0, coolant temp >=160, and the cruise control button is "on". What's more, you can have it start a new log any time there is some additional criteria... like every time you go WOT it starts a new log. Cool huh?

Link to comment
Share on other sites

The problem is the logcfg.txt file needs to be formatted in programming language. The parameter ID, the RPN scaling, the groups, bits, etc... all things I'm not sure what to do with. Also, I don't know which type of ECU I have... CAN or K-line?

 

For example:

 

type = ssmcan

 

paramname = Engine_Speed(rpm)

paramid = 0x00000E

databits = 16

scalingrpn = x,4,/

 

paramname = Ignition_Total_Timing(degrees)

paramid = 0x000011

databits = 8

scalingrpn = x,128,-,2,/

 

paramname = Intake_Air_Temperature©

paramid = 0x000012

databits = 8

scalingrpn = x,40,-

 

paramname = Coolant_Temperature©

paramid = 0x000008

databits = 8

scalingrpn = x,40,-

 

paramname = Mass_Airflow(g/s)

paramid = 0x000013

databits = 16

scalingrpn = x,100,/

 

paramname = Throttle_Opening_Angle(%)

paramid = 0x000015

databits = 8

scalingrpn = x,100,*,255,/

 

paramname = Mass_Airflow_Sensor_Voltage(V)

paramid = 0x00001D

databits = 8

scalingrpn = x,50,/

 

paramname = Primary_Wastegate_Duty_Cycle(%)

paramid = 0x000030

databits = 8

scalingrpn = x,100,*,255,/

 

paramname = Fine_Learning_Knock_Correction(degrees)

paramid = 0x000199

databits = 8

scalingrpn = x,0.25,*,32,-

 

paramname = A/F_Learning_#1_A_(Stored)*(%)

paramid = 0xFF2C90

isfloat = 1

scalingrpn = x,100,*

 

paramname = A/F_Learning_#1_B_(Stored)*(%)

paramid = 0xFF2C98

isfloat = 1

scalingrpn = x,100,*

 

paramname = A/F_Learning_#1_C_(Stored)*(%)

paramid = 0xFF2CA0

isfloat = 1

scalingrpn = x,100,*

 

paramname = Engine_Load_(1-byte)**(g/rev)

paramid = 0xFF6A5F

databits = 8

scalingrpn = x,.015625,*

 

paramname = Feedback_Knock_Correction_(1-byte)**(degrees)

paramid = 0xFF6A69

databits = 8

scalingrpn = x,.3515625,*,45,-

 

paramname = IAM_(1-byte)**(multiplier)

paramid = 0xFF6A6B

databits = 8

scalingrpn = x,.0625,*

 

paramname = Manifold_Relative_Pressure_(4-byte)*(psi_relative)

paramid = 0xFF643C

isfloat = 1

scalingrpn = x,0.01933677,*

 

paramname = mylc1.afr

paramid = 0x0102 ; get lambda from first LC-1

scalingrpn = x,14.7,* ; scale to an AFR

 

paramname = defogger_sw

paramid = 0x64

databits = 1

offsetbits = 5

isvisible = 0

 

conditionrpn = defogger_sw,1,==

action = start

 

conditionrpn = defogger_sw,0,==

action = stop

Link to comment
Share on other sites

Ah, the heck with it. Others can correct me if I am wrong

Engine Load (2-byte)** (g/rev)

Engine Speed (rpm)

IAM (4-byte)* (multiplier)

Ignition Total Timing (degrees)

Knock Sum* (count)

Manifold Relative Pressure (4-byte)* (psi relative)

Mass Airflow (g/s)

Mass Airflow Sensor Voltage (V)

Primary Wastegate Duty Cycle Angle (%)

Throttle Opening Angle (%)

 

Log either mass airflow g/s or sensor volts. You don't need both. Also just check the IAM prior to logging. FWIW...seems easier to just log with the laptop.

"Gimme mines Balboa...Gimme mines".....Clubber Lang - Mr. T
Link to comment
Share on other sites

Once I get home I can share my logcofg.txt that I use. I have it automatically come on with coolant temperature as well.

 

You will love microSD datalogging. Its so easy. You get boatloads of data and pretty good sampling rates. I never did get LC-1 working but I did not dive that deep into it either.

Link to comment
Share on other sites

FWIW...seems easier to just log with the laptop.

 

Debatable. You can also setup to log with one of the car's switches... so if you just keep the Tactrix plugged in all the time, if you are ever in the mood to log, just trigger it. You can log whenever you want w/o the need for a laptop or any setup.

Its great for logging on the fly. Its also great for logging in CL to scale the maf. I logged all my CL driving for weeks and summarized it... you can really fine-tune the maf for daily driving. I just got in the car and drove, it did the logging automatically for me.

Link to comment
Share on other sites

Debatable. You can also setup to log with one of the car's switches... so if you just keep the Tactrix plugged in all the time, if you are ever in the mood to log, just trigger it. You can log whenever you want w/o the need for a laptop or any setup.

Its great for logging on the fly. Its also great for logging in CL to scale the maf. I logged all my CL driving for weeks and summarized it... you can really fine-tune the maf for daily driving. I just got in the car and drove, it did the logging automatically for me.

 

Exactly... I hate having the cable draped over my steering column and I find myself constantly looking at the computer to check the knock sum, and then alter my driving based on it. It's uncomfortable and unsafe.

 

If I could figure out how to properly set it up for normal CL logging and occasional conditional logging (like if I want to do a WOT run to plot on my compressor map) then it will be perfect.

Link to comment
Share on other sites

Thanks again! Here is what I got using your GUI.

 

Next step will be adding a line for creating a new file any time I go WOT, and finally adding my LC1 when I get it wired in.

 

 

type=ssmk

 

paramname = A/F_Correction_#1

paramid = 0x000009

databits = 8

scalingrpn = x,128,-,100,*,128,/

 

paramname = A/F_Learning_#1

paramid = 0x00000A

databits = 8

scalingrpn = x,128,-,100,*,128,/

 

paramname = Engine_Speed

paramid = 0x00000E

databits = 16

scalingrpn = x,4,/

 

paramname = Ignition_Total_Timing

paramid = 0x000011

databits = 8

scalingrpn = x,128,-,2,/

 

paramname = Mass_Airflow

paramid = 0x000013

databits = 16

scalingrpn = x,100,/

 

paramname = Throttle_Opening_Angle

paramid = 0x000015

databits = 8

scalingrpn = x,100,*,255,/

 

paramname = Manifold_Relative_Pressure

paramid = 0x000024

databits = 8

scalingrpn = x,128,-,37,*,255,/

 

paramname = A/F_Sensor_#1

paramid = 0x000046

databits = 8

scalingrpn = x,128,/,14.7,*

 

paramname = CL/OL_Fueling*

paramid = 0xFF6FA5

databits = 8

scalingrpn = x,6,+

 

paramname = Engine_Load_(2-byte)**

paramid = 0xFF5328

databits = 16

scalingrpn = x,.00006103516,*

 

paramname = Knock_Sum*

paramid = 0xFF5D08

databits = 8

scalingrpn = x

 

paramname = Closed_Loop_Fueling_Target_(2-byte)*

paramid = 0xFF5344

databits = 16

scalingrpn = x,.001794433,*

 

;-------------triggers---------------

; Change xxx and yyyy to your desired

; RPM settings

conditionrpn = Engine_Speed,xxx,>

action = start

 

conditionrpn = Engine_Speed,yyyy,==

action = stop

Link to comment
Share on other sites

I modified the code so that it will only log when the car is on and warm. Also, it will start a new log any time I go above 75% throttle. What do you think?

 

type=ssmk

 

paramname = A/F_Correction_#1

paramid = 0x000009

databits = 8

scalingrpn = x,128,-,100,*,128,/

 

paramname = A/F_Learning_#1

paramid = 0x00000A

databits = 8

scalingrpn = x,128,-,100,*,128,/

 

paramname = Engine_Speed

paramid = 0x00000E

databits = 16

scalingrpn = x,4,/

 

paramname = Ignition_Total_Timing

paramid = 0x000011

databits = 8

scalingrpn = x,128,-,2,/

 

paramname = Mass_Airflow

paramid = 0x000013

databits = 16

scalingrpn = x,100,/

 

paramname = Throttle_Opening_Angle

paramid = 0x000015

databits = 8

scalingrpn = x,100,*,255,/

 

paramname = Manifold_Relative_Pressure

paramid = 0x000024

databits = 8

scalingrpn = x,128,-,37,*,255,/

 

paramname = A/F_Sensor_#1

paramid = 0x000046

databits = 8

scalingrpn = x,128,/,14.7,*

 

paramname = CL/OL_Fueling*

paramid = 0xFF6FA5

databits = 8

scalingrpn = x,6,+

 

paramname = Engine_Load_(2-byte)**

paramid = 0xFF5328

databits = 16

scalingrpn = x,.00006103516,*

 

paramname = Knock_Sum*

paramid = 0xFF5D08

databits = 8

scalingrpn = x

 

paramname = Closed_Loop_Fueling_Target_(2-byte)*

paramid = 0xFF5344

databits = 16

scalingrpn = x,.001794433,*

 

paramname = Coolant_Temperature

paramid = 0x000008

databits = 8

scalingrpn = 32,9,x,40,-,*,5,/,+

;isvisible = 0

; Will track coolant temperature for first log to prove it works, then make it invisible

 

;-------------triggers---------------

; Engine speed must be greater than zero AND coolant temperature > 150 for log to start

conditionrpn = Engine_Speed,0,>,Coolant_Temperature,150,>=,&&

action = start

 

; Log stops when engine is shut off

conditionrpn = Engine_Speed,0,==

action = stop

; New log is created when throttle angle goes above 75%

conditionrpn = Throttle_Opening_Angle,75,>,#Throttle_Opening_Angle,75,<=,&&

action = newfile

Link to comment
Share on other sites

Worked like a charm enthusiast! I upped the coolant temp threshold to 175C (90% of steady-state operating temp) so it starts logging within ~5mins of starting the car. I also made coolant temp invisible so it doesn't increase my file size.

 

The next thing I want to learn is the "groups" so you can improve the capture rate of some parameters at the expense of the less important parameters.

 

It seems like it's only sampling every .25 seconds though. Is that normal?

Link to comment
Share on other sites

It seems like it's only sampling every .25 seconds though. Is that normal?

 

There are a couple of posts by Colby where he states that the size of the card can affect the capture speed (FAT32). I think that the class of the card can hurt as well.

 

What class is the card in your OP2? There should be a number on the face of your card with a C or O around it (cannot remember).

Link to comment
Share on other sites

Dang. It is an 8GB MicroSDHC card and it is stamped with a small C with a "2" in it. I was looking at a 4GB card but this was only a couple bucks more. Looks like I made the wrong choice.

 

I wonder if I partition it, if it would help?

 

I have been meaning to experiment with this. I am going to create 4 ~2GB partitions and format them in FAT16 (much faster than FAT32).

 

I will see if OP2 can can FAT16 and report back (should since it is small writes).

 

Although my microSD is a class 6 so it will be interesting to see what gains I can make.

Link to comment
Share on other sites

Yeah, unfortunately I already did that on day one! I haven't needed to use RR since getting the mSD logging going and LV still works, so I'm not worried about it. Do you think they'll fix the bugs in a subsequent rev.? Or is it an inherent problem going forward?

 

I wonder what would happen if you did the four 2GB partitions and put a logcfg.txt in each one? How would the OP2 handle that?

 

In the grand scheme of things I still have no idea how to make use of all this data, so it is all academic for me. :(

Link to comment
Share on other sites

It seems like it's only sampling every .25 seconds though. Is that normal?

Sample times are not microSD dependent here.

 

If you use K-line, which you do then yes this is normal. K-line is half-duplex and operates at 4800bps.

The more parameters you log the longer the query interval.

Two parameters: RPM, Throttle = 0.08 secs per sample

Nine parameters like for a WOT run = 0.15 secs per sample

 

Basically each parameter adds about 0.012 secs to the query interval.

 

As for the updated firmware in the OP2, you should still be able to use the older version 1.42 of ECUFlash without a problem. If you installed 1.43 just uninstall it and the drivers and go back to 1.42. I saw a post about that but can't find it ATM.

Dale

Link to comment
Share on other sites

So I just tried using the standalone logging feature but it didn't record anything :confused:

 

Here's my logcfg.txt file:

 

type=ssmk

 

paramname = Engine_Speed

paramid = 0x00000E

databits = 16

scalingrpn = x,4,/

 

paramname = Ignition_Total_Timing

paramid = 0x000011

databits = 8

scalingrpn = x,128,-,2,/

 

paramname = Mass_Airflow

paramid = 0x000013

databits = 16

scalingrpn = x,100,/

 

paramname = Throttle_Opening_Angle

paramid = 0x000015

databits = 8

scalingrpn = x,100,*,255,/

 

paramname = Mass_Airflow_Sensor_Voltage

paramid = 0x00001D

databits = 8

scalingrpn = x,50,/

 

paramname = Primary_Wastegate_Duty_Cycle

paramid = 0x000030

databits = 8

scalingrpn = x,100,*,255,/

 

paramname = Engine_Load_(2-byte)**

paramid = 0xFF530C

databits = 16

scalingrpn = x,.00006103516,*

 

paramname = IAM_(1-byte)**

paramid = 0xFF5339

databits = 8

scalingrpn = x,.0625,*

 

paramname = Manifold_Relative_Pressure_(4-byte)*

paramid = 0xFF4F34

databits = 32

scalingrpn = x,0.01933677,*

 

paramname = Knock_Sum*

paramid = 0xFF5CEC

databits = 8

scalingrpn = x

 

;-------------triggers---------------

paramname = defogger_sw

paramid = 0x64

databits = 1

offsetbits = 5

isvisible = 0

 

conditionrpn = defogger_sw,1,==

action = start

 

conditionrpn = defogger_sw,0,==

action = stop

Link to comment
Share on other sites

Archived

This topic is now archived and is closed to further replies.




×
×
  • Create New...

Important Information

Terms of Use