==LOGWORKS PLUGIN FOR MYECU== This started out as a proof of concept to show Cliff how easy it would be to incorporate the ActiveX stuff into ECUControl but it was so much fun I just could not stop. The downside of using my plugin instead of something Cliff wrote is that my code will probably not cope with older firmware versions, and will not currently work with MyP8 unless you (or I) recompile it with the correct crank/cam sensor data. My plugins need .NET 3.5 to work. There is no fancy installer and the software is a bit crude so it may very well just crash instead of telling you some needed stuff are missing. The plug is currently hard coded for My15M/My16M but the relevant stuff (PulsesPer and "TDC 0x1600" like stuff) is placed in one location so it's easily fixed. You can build the project using the freely downloadable Microsoft Visual C# Express. I'll improve it over time too. Virtually all data that the ECU tell us is fed to Logworks. Actually there are even some bonus channels calculated, like Injector Duty Cycle. One design goal has been to minimize lag, and you can verify that the analog Lambda reading from the ECU will match the digital channel very closely. A raw .dmp file is also produced (unless you press cancel when asked for file name) and this one can be fed to ECUControl the usual way. Any version strings caught (they are sent on ECU power-on) are shown in the GUI. Also, any Diagnostic Messages are shown as a count so you can [ask Cliff to] investigate them in the .dmp file if they come in numbers. I usually get one or two when starting the engine, that is normal. ==USAGE== The green "progress bar" reflects your throttle so you can see that you chose the correct COM port. If the GUI shows excessive timeouts (like 50 per second) you have a bad serial port driver. My code deals with it but you may want to replace it. Always start the plugin first, then LogWorks. If you quit the plugin, you must quit LogWorks and restart the plugin, otherwise they will never find each other again. Not my fault. If you click on that throttle "progress bar", it acts like a hidden button: It lets you choose a .dmp file that is parsed and sent to Logworks at about the speed data would normally come from the serial port. This is for debugging but maybe it can be useful for someone. The bad news is Logworks will not listen to any plugin data unless it gets data from a real device first. ==CHANNELS CURRENTLY EXPORTED== All channels are 10 bit resolution (this is a Logworks limitation): ===Timing Info=== RPM 0 - 10239 Engine speed SpkAdv 0 - 90 °BTDC, Spark Advance StartInj0 0 - 1023 °BTDC, Start of Injection, cylinder 0 [1] StartInj1 0 - 1023 °BTDC, Start of Injection, cylinder 1 [1] EndOfInj 0 - 1023 °BTDC, End of Injection InjDuty0 0 - 100 % Injector Duty Cycle [2] InjDuty1 0 - 100 % [2] MapRpmX 0 - 15 Map column (note that these may have decimals) MapThrY 0 - 14 Map Row ===Analog Inputs=== TPS 0 - 1023 Throttle position sensor OilT -30 - 130 °C Oil, head, engine or coolant temperature [3] AirT -30 - 130 °C [3] BatV 0 - 16 volts AFR0 7.35 - 22.39 Lambda sensor readings [4] Lambda0 0.5 - 1.523 [4] AFR1 7.35 - 22.39 [4] Lambda1 0.5 - 1.523 [4] ===Compensation Info=== AirP 256 - 1279 mBar Ambient air pressure InjDur0 0 - 16383 µs (incl. CLAdj but excl. BaroAdj and Deadtime) InjDur1 0 - 16383 µs [5] CylOffs -30 - 30 % MapInjDur0 0 - 16383 µs (excluding CLAdj, BaroAdj and Deadtime) MapInjDur1 0 - 16383 µs [5] TargAFR0 7.35 - 22.39 [4] Target value TargLambda0 0.5 - 1.523 [4] TargAFR1 7.35 - 22.39 [4] TargLambda1 0.5 - 1.523 [4] O2Adjust0 50 - 150 % Closed loop adjustment O2Adjust1 50 - 150 % BaroAdj 50 - 150 % Barometric Adjustment (temperatures & air pressure) DeadTime 0 - 8191 µs Injector Dead Time [1] This value is not sent by ECU but calculated by the plugin. It includes Injector Deadtime in that calculation so this is the actual electrical pulse. [2] Duty cycle excludes deadtime: (effective pw) / (time per 720°) [3] MyECU use a table for converting sensor voltage to temperature. I use an equation called Steinhart-Hart which is more accurate. Just so you know why they may differ a little - it's definitely not a big deal as far as I know. [4] AFR and Lambda are the same data represented in different ways. Innovate blocked us from configuring analog Lambda channels so the "Show mixture as..." and "Set Fuel Type" options does not work. [5] This value is calculated from InjDur0 and CylOffs (which is percent difference). ==CHANGES== 2010-02-14 Changed serial port speed to 57600. Still hardcoded. 2009-10-06 Changed Duty Cycle to not include deadtime after consulting forum wizards. 2009-10-01 Added code to save what com port we used, it will be pre-selected at next program invocation. 2009-09-30 Now sending MapInjDur as interpolated value from map (no BaroAdj, O2adj or deadtime) and InjDur as final duration including O2Adj, but excluding BaroAdj and deadtime. Renamed some channels. Added CylOffs and calculated InjDur1 from it. Added FinalInjDur and cylinder one version of all data. Added Injector Deadtime. 2009-09-27 First "release". It is threaded and uses a blocking serial read for minimizing lag. Due to an oversight, this version sends injector durations including BaroAdj (and O2Adj). This is not good for later processing. ==TO DO== * Menu for configuration. Store config in registry. - ECU setup (TDC, pulsecounts etc) - O2 setup (using zero, one or two sensors? Voltages?) - Lambda or AFR? Fuel multiplier?