XMLWRITE

Developer topics relating to software that provides a tuning UI to alter ECU code and data

Moderator: Freon

Re: v6 bug/error, i think

Postby xswrex » Mon May 15, 2006 11:37 pm

gregsachs wrote:Generated a file for A2ZJB10J, 05 sti, and at least one scaling is, imo, wrong;
<scaling name="DATA-11-CCs" units="CCs" toexpr="2450000/x" frexpr="2450000/x" storagetype="float" endian="little" format="%.0f" inc="256" />

Aren't floats in the 32bit dbw thought to generally be in straight units? For sure, the corresponding map value is ~540, right inline with what i think the sti injectors are.


IMO it is correct, most certainly follows the same logic as the 16bit ecus. There was a 16bit entry for this particular data value, and the expression was 2447690/x. Now it is a 32bit entry and it has a similar scaling.
The fact that we use expressions in order to see the data as real world numbers does not mean that the ecu does the same.
xswrex
 
Posts: 110
Joined: Thu Oct 20, 2005 3:50 am

Re: v6 bug/error, i think

Postby gregsachs » Tue May 16, 2006 5:02 am

xswrex wrote:
gregsachs wrote:Generated a file for A2ZJB10J, 05 sti, and at least one scaling is, imo, wrong;
<scaling name="DATA-11-CCs" units="CCs" toexpr="2450000/x" frexpr="2450000/x" storagetype="float" endian="little" format="%.0f" inc="256" />

Aren't floats in the 32bit dbw thought to generally be in straight units? For sure, the corresponding map value is ~540, right inline with what i think the sti injectors are.


IMO it is correct, most certainly follows the same logic as the 16bit ecus. There was a 16bit entry for this particular data value, and the expression was 2447690/x. Now it is a 32bit entry and it has a similar scaling.
The fact that we use expressions in order to see the data as real world numbers does not mean that the ecu does the same.

Here's my logic for disagreeing:
1: that expression isn't reversible. perhaps it should be 2450000/x and 2450000*x, but having both the toexpr and frexpr the same cannot be correct.
2: My understanding was that float type data used no multiplier, based on using that ieee-754 data format as discussed here.
3: if one looks at those values as pure ieee-754 floats, they come out as 5375, which is very close to 10x what everyone says is the usdm injector size.
4: I'm not criticizing or anything, and am very grateful for xmlwrite and all the work you've done on this project, it is far more than I have. I just don't think this expression as generated _can_ be correct. Before you release this version I was hand generating an xml for this rom, and looking at all the values. I was using this thread as my primary reference, http://forums.openecu.org/viewtopic.php?t=448 along with the map offsets you released/posted.
thanks,
greg
edit: went and looked at my spreadsheet of notes, and I had one error; the value for the injector scaling actually resolves to 5372, not 537. I think this is tenths/cc/s. Not sure why it would be stored that way unless maybe for higher resolution. I've attatched my sheet of manually deciphered map data.
Attachments
2005_sti_ecu_maps.zip
(15.35 KiB) Downloaded 503 times
gregsachs
 
Posts: 39
Joined: Tue Jan 10, 2006 1:16 pm

Re: v6 bug/error, i think

Postby xswrex » Tue May 16, 2006 5:41 am

gregsachs wrote:Here's my logic for disagreeing:
that expression isn't reversible. perhaps it should be 2450000/x and 2450000*x, but having both the toexpr and frexpr the same cannot be correct.


my logic is simple math :lol:
so say 5372 is the 32bit float value in the ecu
2450000/5372=456
2450000/456=5372
y/x=z
y/z=x

it works!

and dont worry, no offense taken :wink:
xswrex
 
Posts: 110
Joined: Thu Oct 20, 2005 3:50 am

Re: v6 bug/error, i think

Postby gregsachs » Tue May 16, 2006 7:04 am

xswrex wrote:
gregsachs wrote:Here's my logic for disagreeing:
that expression isn't reversible. perhaps it should be 2450000/x and 2450000*x, but having both the toexpr and frexpr the same cannot be correct.


my logic is simple math :lol:
so say 5372 is the 32bit float value in the ecu
2450000/5372=456
2450000/456=5372
y/x=z
y/z=x

it works!

and dont worry, no offense taken :wink:

Every other scaling factor uses inverse equations. Why would this one not?
I strongly believe that the only scaling needed for this one is on the order of x/10 and 10*x. That gives a value very close to the accepted flow rate for the 05sti injectors. Your scaling gives a number that does not work, and attempting to edit using that scaling will give nonsensical rom values. Stock value is 45a7e000,=5372.0.
editing this and incrementing it by 2 usiing the posted scalings gives hex of 451e2d01, which converts to 2530.8127. Editing it using my scaling, and punching in 600, gives hex of 45bb8000, which converts to 6000.0
(i'm using this converter: http://www.h-schmidt.net/FloatApplet/IEEE754.html
If this is a 32bit float, as described in the map offset listing, where am I off base?
gregsachs
 
Posts: 39
Joined: Tue Jan 10, 2006 1:16 pm

Postby RICK SCHU » Tue May 16, 2006 7:44 am

I have a problem with version 6 in Enginuity, that I didn't have with v4 or 5. When trying to open the ROM, it is says, "ECU definition not found". I traced it down to the very beginning part of the XML and if I replace the first <romid> with the output from v5 it works:

Example: Version 6 shows:
Code: Select all
<romid>
   <xmlid>A4TE300D</xmlid>
   <make>Subaru</make>
   <model>All</model>
   <submodel>Non-DBW</submodel>
   <filesize>192kb</filesize>
</romid>


Version 5
Code: Select all
<romid>
   <xmlid>DENSOBASE</xmlid>
   <make>Subaru</make>
   <model>All</model>
   <submodel>Non-DBW</submodel>
   <filesize>192kb</filesize>
</romid>
RICK SCHU
 
Posts: 17
Joined: Sun Apr 02, 2006 11:01 am

Postby Freon » Tue May 16, 2006 8:35 am

Well 2450000/x and x/10 or so both sound reasonable at first.

I just swapped my injectors and am currently using my UTEC for injector scaling. I will remove my UTEC and see if I can make the car run using either of the above equations. It is my goal not to use the UTEC for injector scalng anyway, as it does injector scaling by cutting MAF voltage, which is ugly.

Even if a value in the ECU is a float and doesn't have any multiplier or intercept values, it doesn't mean the ECU uses the units YOU expect. Injector scaling could be in some odd unit we're not expecting.

The inverse of 2450000/[value] is 2450000/[value]. It's not [value]*2450000 for sure.
Freon
 
Posts: 700
Joined: Thu Nov 17, 2005 5:50 pm
Location: Indianapolis, IN

Postby gregsachs » Tue May 16, 2006 8:45 am

Freon wrote:Well 2450000/x and x/10 or so both sound reasonable at first.

I just swapped my injectors and am currently using my UTEC for injector scaling. I will remove my UTEC and see if I can make the car run using either of the above equations. It is my goal not to use the UTEC for injector scalng anyway, as it does injector scaling by cutting MAF voltage, which is ugly.

Even if a value in the ECU is a float and doesn't have any multiplier or intercept values, it doesn't mean the ECU uses the units YOU expect. Injector scaling could be in some odd unit we're not expecting.

The inverse of 2450000/[value] is 2450000/[value]. It's not [value]*2450000 for sure.

But the scalings don't want to be inverted, they should be opposite; at least that is how _every_ other scaling is done. do you have a 32bit ecu? Maybe wolfplayer can look at street tuner to see the injector value it has. I just do not believe that the current xmlwrite scaling is correct for this table for (at least) the 05 sti rom. .
gregsachs
 
Posts: 39
Joined: Tue Jan 10, 2006 1:16 pm

Postby Freon » Tue May 16, 2006 4:20 pm

Well I am now running on Perrin modified STI injectors on a reflash only. I used the 2450000/[value] routine and reflashed with several values until the car would start and idle right at 14.7:1 without having to sit and adjust for half an hour. I ended up changing it from stock value of 456 to 680. The injectors are supposedly 816cc, so 2450000 may not be the correct value, and stock may not be 456, but either way, the trend is there.

So [value]/X would not work. That would be the opposite of what I just proved to actually work. The straight [value] or 32bit float value stored in the ECU actually went DOWN for me to run larger injectors.

Yes, it is odd this particular scaling factor is inverted, but I gotta think it is right.
Freon
 
Posts: 700
Joined: Thu Nov 17, 2005 5:50 pm
Location: Indianapolis, IN

Postby cboles » Tue May 16, 2006 4:45 pm

The scaling is an inverse relationship for a good reason. The ECU thinks not about injector flow rates but instead in terms of the amount of time that it must turn and injector on to dispense a certain amount of fuel. A higher flow injector requires less time, hence the inverse relationship.
cboles
Site Admin
 
Posts: 1233
Joined: Wed Dec 29, 2004 5:45 pm
Location: Seattle, WA

Postby gregsachs » Tue May 16, 2006 5:38 pm

Freon wrote:Well I am now running on Perrin modified STI injectors on a reflash only. I used the 2450000/[value] routine and reflashed with several values until the car would start and idle right at 14.7:1 without having to sit and adjust for half an hour. I ended up changing it from stock value of 456 to 680. The injectors are supposedly 816cc, so 2450000 may not be the correct value, and stock may not be 456, but either way, the trend is there.

So [value]/X would not work. That would be the opposite of what I just proved to actually work. The straight [value] or 32bit float value stored in the ECU actually went DOWN for me to run larger injectors.

Yes, it is odd this particular scaling factor is inverted, but I gotta think it is right.

Ok, guess I'm wrong. Next question would be (I think) if we can figure out what the scaling factor _should_ be to get that into useful units. 2 data points should be sufficient, right? Or does latency apply as well? Other side of that would be if someone can clear up for me how it is interpreting that saved number? I know the stock number is 45A7E000, and I have been told it is 32bit float. Using freon's 680=816, and stock 456=550, any reason not to use 2954600 as the constant? that gives 550 for the stock value, and gives nearly the same saved value for freon's perrin's as his 680 did. (figuring there is probably some granularity we are missing here.)
gregsachs
 
Posts: 39
Joined: Tue Jan 10, 2006 1:16 pm

Postby JRSCCivic98 » Tue May 16, 2006 5:39 pm

I created an xml file for ecuFlash using v6 of xmlwrite and the value fields are all condensed. You can't read any of the cels... also some of the tables don't match those that Cavlin has predefined for other basic maps like the 02 WRX ones that are already predefined in ecuFlash.
JRSCCivic98
 
Posts: 201
Joined: Sat Nov 12, 2005 9:45 am

Postby Freon » Tue May 16, 2006 7:16 pm

I've been using Ecuedit, it works like a charm. XMLwrite created a darn good XML. It doesn't include the injector scaling factor conversion to CC (because it isn't in the rom that way), but the map editing is really good.
Freon
 
Posts: 700
Joined: Thu Nov 17, 2005 5:50 pm
Location: Indianapolis, IN

Re: v6 bug/error, i think

Postby cboles » Tue May 16, 2006 7:29 pm

gregsachs wrote:Here's my logic for disagreeing:
1: that expression isn't reversible. perhaps it should be 2450000/x and 2450000*x, but having both the toexpr and frexpr the same cannot be correct.


It is reversible.

take

toexpr(x) = A / x
frexpr(x) = A / x

Now what is

toexpr(frexpr(x)) ?

= A / (A / x) = x

Which is the identity function - exactly what you want. It looks counterintuitive at first glance, but if you check the math, you will believe. :)

btw, EcuFlash has a check button in the scalings editor you can use to sanity check your expressions. It will use your expressions and other scaling settings to show how real world ROM data will be transformed forward and back.
cboles
Site Admin
 
Posts: 1233
Joined: Wed Dec 29, 2004 5:45 pm
Location: Seattle, WA

Re: v6 bug/error, i think

Postby gregsachs » Tue May 16, 2006 7:35 pm

cboles wrote:
gregsachs wrote:Here's my logic for disagreeing:
1: that expression isn't reversible. perhaps it should be 2450000/x and 2450000*x, but having both the toexpr and frexpr the same cannot be correct.


It is reversible.

take

toexpr(x) = A / x
frexpr(x) = A / x

Now what is

toexpr(frexpr(x)) ?

= A / (A / x) = x

Which is the identity function - exactly what you want. It looks counterintuitive at first glance, but if you check the math, you will believe. :)

btw, EcuFlash has a check button in the scalings editor you can use to sanity check your expressions. It will use your expressions and other scaling settings to show how real world ROM data will be transformed forward and back.

Well, the empirical evidence from freon has convinced me that it is an inverse function as described, so lets call that horse dead;-). I do think we may want to adjust the numerator, for our convenience, to get it to useful units, and I think freon's data has made that doable. Next (minor) issue I'm trying to pin down is the VIN coding, which on the 05 sti a2zb10j map i'm pretty sure is at ff8.
gregsachs
 
Posts: 39
Joined: Tue Jan 10, 2006 1:16 pm

Postby xswrex » Tue May 16, 2006 9:34 pm

RICK SCHU wrote:I have a problem with version 6 in Enginuity, that I didn't have with v4 or 5. When trying to open the ROM, it is says, "ECU definition not found". I traced it down to the very beginning part of the XML and if I replace the first <romid> with the output from v5 it works:

Example: Version 6 shows:
Code: Select all
<romid>
   <xmlid>A4TE300D</xmlid>
   <make>Subaru</make>
   <model>All</model>
   <submodel>Non-DBW</submodel>
   <filesize>192kb</filesize>
</romid>


Version 5
Code: Select all
<romid>
   <xmlid>DENSOBASE</xmlid>
   <make>Subaru</make>
   <model>All</model>
   <submodel>Non-DBW</submodel>
   <filesize>192kb</filesize>
</romid>


this will be fixed, sorry about that :oops:
xswrex
 
Posts: 110
Joined: Thu Oct 20, 2005 3:50 am

PreviousNext

Return to Tuning Software

Who is online

Users browsing this forum: No registered users and 7 guests

cron