[{"data":1,"prerenderedAt":8},["ShallowReactive",2],{"ecu:mhd":3},{"slug":4,"wikiHtml":5,"adapter":6,"channels":7},"mhd","\u003Cul>\n\u003Cli>\u003Cstrong>File type:\u003C\u002Fstrong> CSV datalogs exported from the MHD Tuning flashing\u002Flogging app\u003C\u002Fli>\n\u003Cli>\u003Cstrong>Supported devices:\u003C\u002Fstrong> BMW N54, N55, S55, B58, and other platforms flashed and logged with MHD Tuning\u003C\u002Fli>\n\u003Cli>\u003Cstrong>Features:\u003C\u002Fstrong> Skips the leading \u003Ccode>#\u003C\u002Fcode> metadata block, UTF-8 BOM handling, unit extraction from column headers, MHD&#39;s \u003Ccode>*\u003C\u002Fcode>-for-degree notation normalized to °\u003C\u002Fli>\n\u003C\u002Ful>\n\u003Ch2>Supported File Format\u003C\u002Fh2>\n\u003Cp>MHD logs are comma-delimited CSV with a leading block of \u003Ccode>#\u003C\u002Fcode>-prefixed metadata lines, then a header row whose first column is \u003Ccode>Time\u003C\u002Fcode> and whose channel names carry their unit in trailing parentheses:\u003C\u002Fp>\n\u003Cpre>\u003Ccode class=\"language-text\">#Encoding: UTF-8\n#Ecu CALID: \n#Ecu PRGID: 7616431\n#VIN: REDACTED\nTime,Boost (Bar),Coolant (*C),RPM (RPM),Gear (-),MHD 5.26 IJE0S ST2V7.bin\n539.607,-0.479,89,1346,2,0\n539.742,-0.466,89,1350,2,0\n\u003C\u002Fcode>\u003C\u002Fpre>\n\u003Ch2>How to Export from MHD Tuning\u003C\u002Fh2>\n\u003Col>\n\u003Cli>Open the logged session in the MHD Tuning app\u003C\u002Fli>\n\u003Cli>Use the log export option to save the session as CSV\u003C\u002Fli>\n\u003Cli>Load the resulting \u003Ccode>.csv\u003C\u002Fcode> file directly into UltraLog\u003C\u002Fli>\n\u003C\u002Fol>\n\u003Ch2>Supported Data\u003C\u002Fh2>\n\u003Cul>\n\u003Cli>Boost and boost target, wastegate duty cycle (WGDC)\u003C\u002Fli>\n\u003Cli>RPM, coolant and intake air temperature, engine load\u003C\u002Fli>\n\u003Cli>Per-cylinder ignition timing correction\u003C\u002Fli>\n\u003Cli>Lambda\u002FAFR per bank, short-term fuel trim per bank\u003C\u002Fli>\n\u003Cli>Fuel rail pressure, gear, torque\u003C\u002Fli>\n\u003Cli>Any additional channel selected in the MHD logging configuration\u003C\u002Fli>\n\u003C\u002Ful>\n\u003Ch2>Metadata Block\u003C\u002Fh2>\n\u003Cp>MHD writes a leading block of \u003Ccode>#\u003C\u002Fcode>-prefixed lines before the header row (\u003Ccode>#Encoding\u003C\u002Fcode>, \u003Ccode>#Ecu CALID\u003C\u002Fcode>, \u003Ccode>#Ecu PRGID\u003C\u002Fcode>, \u003Ccode>#VIN\u003C\u002Fcode>). UltraLog reads these into log metadata, then skips past them to find the header row. This preamble is also why MHD detection runs against the raw file text ahead of the rest of the format-detection chain, rather than after the generic comment-stripping step every other CSV parser sees.\u003C\u002Fp>\n\u003Cp>The final header column is normally the active tune file name (e.g. \u003Ccode>MHD 5.26 IJE0S ST2V7.bin\u003C\u002Fcode>) — UltraLog captures this in log metadata rather than treating it as a channel.\u003C\u002Fp>\n\u003Ch2>Degree Notation\u003C\u002Fh2>\n\u003Cp>MHD substitutes \u003Ccode>*\u003C\u002Fcode> for the degree sign in channel headers: \u003Ccode>(*C)\u003C\u002Fcode> normalizes to °C, \u003Ccode>(*)\u003C\u002Fcode> to °, and \u003Ccode>(*CRK)\u003C\u002Fcode> to °CRK. A unit of \u003Ccode>-\u003C\u002Fcode> means the channel is unitless (e.g. \u003Ccode>Gear (-)\u003C\u002Fcode>).\u003C\u002Fp>\n\u003Ch2>Missing Data\u003C\u002Fh2>\n\u003Cp>Unparseable or blank fields are filled with the last successfully parsed value for that column (\u003Ccode>0.0\u003C\u002Fcode> before the first valid sample), the same approach used by the Haltech and ECUMaster parsers. This keeps every row aligned with the channel list instead of shifting later columns when one field fails to parse.\u003C\u002Fp>\n",null,[],1792894560279]