;------------------------------------------------------------------------------- ; $Id: core.ini,v 1.623 2023/04/20 01:42:48 culverk Exp $ ; ; This ini file is Copyright 2007,2008,2009,2010,2011,2012,2013 James Murray and Kenneth Culver. ; It is only to be used with a genuine B&G MS3. ; ; Original author(s) uncertain. Contains work of Eric Fahlgren ; Re-written to support MS3 ; ; ; configuration defines, either #set or #unset ;This enables the "full" CAN/serial commands so this INI can be used anywhere on the CAN network. #set CAN_COMMANDS #unset INI_VERSION_2 ; this is set by TunerStudio, but needs to be unset for Megatune to work #unset INTERNAL_LOG_FIELDS #unset PORT_STATUS #unset OUTMSG_EDITING ; Allow editing of the outmsg data #unset EXPANDED_CLT_TEMP [MegaTune] MTversion = 2.25 ; MegaTune itself; needs to match exec version. #if CAN_COMMANDS versionInfo = "r\$tsCanId\x0e\x00\x00\x00\x3c" ; Title bar queryCommand = "r\$tsCanId\x0f\x00\x00\x00\x14" ; Verify against signature. #else versionInfo = "S" ; Put this in the title bar. queryCommand = "Q" ; Verify against signature. #endif signature = "MS3 Format 0601.16U" ; 123456789.123456789. [TunerStudio] iniSpecVersion = 3.78 helpManualDownloadRoot = "http://www.msextra.com/doc/pdf/" ;---------------------------------------------------------------------------- #if INI_VERSION_2 ; ok #else #error Megatune cannot be used with MS3 - please upgrade to TunerStudio #endif ;---------------------------------------------------------------------------- ; Temperature Limits and Settings Reference ; contributed by Mike Soultanian ;---------------------------------------------------------------------------- ; ; Below is a listing of all of the temperature ranges used throughout the INI ; for the MegaSquirt. ; ; CELSIUS (Expanded/Normal): ; Low limit: -40C/-40C ; High limit: 230C/150C ; Low danger: 65C/10C ; Low warning: 93C/65C ; High warning: 162C/93C ; High danger: 176C/104C ; ; FAHRENHEIT (Expanded/Normal): ; Low Limit: -40F/-40F ; High limit: 450F/300F ; Low danger: 150F/50F ; Low warning: 200F/150F ; High warning: 325F/200F ; High danger: 350F/220F (also used for curve editor limits) ;---------------------------------------------------------------------------- [ReferenceTables] tableWriteCommand = "w\$tsCanId%2i%2o%2c%v" #if CAN_COMMANDS tableBlockingFactor = 256 ; just in case MS2 is used #else tableBlockingFactor = 2048 #endif ;This next section copied and modified from ms2ReferenceTables.ini referenceTable = std_ms2gentherm, "Calibrate Thermistor Tables..." ;topichelp?? tableIdentifier = 000, "Coolant Temperature Sensor", 001, "Air Temperature Sensor", 003, "Custom#1 Temperature Sensor" ; tableLimits (optional) = intentifier, min, max, defaultVal ; will set the default value if value is outside the min and max limits. #if EXPANDED_CLT_TEMP tableLimits = 000, -40, 400, 350 #else tableLimits = 000, -40, 350, 180 #endif tableLimits = 001, -40, 350, 70 tableLimits = 003, -40, 400, 70 adcCount = 1024 ; length of the table bytesPerAdc = 2 ; using shorts scale = 10 ; scale by 10 before sending to controller ;tableGenerator = Generator type, Label tableGenerator = thermGenerator, "Thermistor Measurements" tableGenerator = fileBrowseGenerator, "Browse for Inc File" ; thermOption = name, resistor bias, tempPoint1(C), resPoint1, tempPoint2, resPoint2, tempPoint3, resPoint3 thermOption = "BMW", 2490, -10, 9500, 20, 2500, 80, 330 thermOption = "Chrysler 85 up", 2490, 5.5, 24500, 30.5, 8100, 88.3, 850 thermOption = "Ford", 2490, 0, 94000, 50, 11000, 98, 2370 thermOption = "GM", 2490, -40, 100700, 30, 2238, 99, 177 thermOption = "Mazda", 2490, -20, 16150, 40, 1150, 80, 300 thermOption = "Mazda RX-7_MAT", 2490, 20, 41500, 50, 11850, 85, 3500 thermOption = "Mazda other", 2490, -40, 2022088, 21, 68273, 99, 3715 thermOption = "Mitsubishi", 2490, -40, 100490, 30, 1875, 99, 125 thermOption = "Nissan", 2490, -10, 9000, 20, 1875, 50, 820 thermOption = "Toyota", 2490, -20, 15000, 20, 2500, 100, 185 thermOption = "Toyota", 2490, -40, 101890, 30, 2268, 99, 156 thermOption = "Subaru", 2490, -20, 22000, 20, 2500, 80, 330 thermOption = "Porsche", 2490, -20, 22000, 20, 2500, 80, 330 thermOption = "Saab (Bosch)", 2490, 0, 5800, 80, 320, 100, 180 thermOption = "VW L-Jet Cylinder Head Temp Sensor II", 2490, -13.888, 11600, 53.888, 703, 95.555, 207 solution = "3 Point Therm Generator", thermGenerator solution = "Custom inc File", fileBrowseGenerator [SettingGroups] ; the referenceName will over-ride previous, so if you are creating a ; settingGroup with a reference name of lambdaSensor, it will replace the ; setting group defined in the settingGroups.xml of the TunerStudio config ; folder. If is is an undefined referenceName, it will be added. ; keyword = referenceName, DisplayName settingGroup = lambdaSensor, "Oxygen Sensor / Display" settingOption = NARROW_BAND_EGO, "Narrowband Sensor - Volts" settingOption = LAMBDA, "Wideband - Lambda" settingOption = DEFAULT, "WideBand - AFR" ; DEFAULT will be over looked and this will fall into the #else block of the statement. settingGroup = lambdaDisplay, "" ; Hide this settingGroup option settingOption = DEFAULT, "" ; [PcVariables] ; valid types: boolean, double, int, list ; ; no offset as they are local variables. ; entry format the same as Constants, except there is no offset. ; arrays are not yet supported. ; name = class, type, shape, units, scale, translate, lo, hi, digits ; name = type, min, max; ; ; type List: value will be index. ;tsCanId = bits, U08, [0:3] ; The short one, just numbers tsCanId = bits, U08, [0:3], "CAN ID 0", "CAN ID 1", "CAN ID 2", "CAN ID 3", "CAN ID 4", "CAN ID 5", "CAN ID 6", "CAN ID 7", "CAN ID 8", "CAN ID 9", "CAN ID 10","CAN ID 11","CAN ID 12","CAN ID 13","CAN ID 14","INVALID" ; testScale = scalar, U16, "%", 0.001, 0, 0, 600, 4 ; testTransform = scalar, U08, "#", 0.1, 0, 0, 25.5, 1 rpmhigh = scalar, U16, "rpm", 1, 0, 0, 30000, 0 rpmwarn = scalar, U16, "rpm", 1, 0, 0, 30000, 0 rpmdang = scalar, U16, "rpm", 1, 0, 0, 30000, 0 loadhigh = scalar, U16, "", 1, 0, 100, 1000, 0 wue_lpg = bits, U08, [0:0], "No", "Yes" clt_exp = bits, U08, [0:0], "Normal", "Expanded" algorithmUnits = bits, U08, [0:3], "%", "kPa", "%Baro", "% TPS", "MAFload", "MAFload", "ITB", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID" ; * sensor01Alias = string, ASCII, 20 sensor02Alias = string, ASCII, 20 sensor03Alias = string, ASCII, 20 sensor04Alias = string, ASCII, 20 sensor05Alias = string, ASCII, 20 sensor06Alias = string, ASCII, 20 sensor07Alias = string, ASCII, 20 sensor08Alias = string, ASCII, 20 sensor09Alias = string, ASCII, 20 sensor10Alias = string, ASCII, 20 sensor11Alias = string, ASCII, 20 sensor12Alias = string, ASCII, 20 sensor13Alias = string, ASCII, 20 sensor14Alias = string, ASCII, 20 sensor15Alias = string, ASCII, 20 sensor16Alias = string, ASCII, 20 scatterRuntimeEnabled = bits, U08, [0:0], "Disabled", "Enabled" portLabels = bits, U08, [0:8], "unused", "injection LED", "warmup LED", "squirt LED", "fuel pump", "PWM or on/off idle", "stepper idle", "primary injectors", "secondary injectors", "a programmable on/off output", "spark outputs", "HEI bypass", "knock", "MAF", "MAP", "baro", "EGO", "tacho out", "A/C idleup out", "A/C idleup in", "fan out", "boost out", "N2O stage 1 nitrous", "N2O stage 1 fuel", "N2O stage 2 nitrous", "N2O stage 2 fuel", "N2O in", "launch in", "variable launch in", "3 step in", "datalog button", "datalog LED", "bike shift in", "bike shift out", "generic PWM A", "generic PWM B", "generic PWM C", "generic PWM D", "generic PWM E", "generic PWM F", "datalog stream", "dual fuel in", "fuel tableswitch", "spark tableswitch", "boost tableswitch", "overboost tableswitch", "ReqFuel switch", "AFR tableswitch", "stoich switch", "max AFR safety switch", "accelerometer X", "accelerometer Y", "accelerometer Z", "vss out", "water inj pump", "water inj valve", "water inj in", "ignition trigger LED", "flex fuel in", "cam input", "vss1 in", "vss2 in", "speed sensor 1 in", "speed sensor 2 in", "gear position in", "anti-lag in", "anti-lag out", "anti-lag PWM out", "Boost 2 out", "EGT 1 in", "EGT 2 in", "EGT 3 in", "EGT 4 in", "EGT 5 in", "EGT 6 in", "EGT 7 in", "EGT 8 in", "EGT 9 in", "EGT 10 in", "EGT 11 in", "EGT 12 in", "EGT 13 in", "EGT 14 in", "EGT 15 in", "EGT 16 in", "Generic Sensor 1 in", "Generic Sensor 2 in", "Generic Sensor 3 in", "Generic Sensor 4 in", "Generic Sensor 5 in", "Generic Sensor 6 in", "Generic Sensor 7 in", "Generic Sensor 8 in", "Generic Sensor 9 in", "Generic Sensor 10 in", "Generic Sensor 11 in", "Generic Sensor 12 in", "Generic Sensor 13 in", "Generic Sensor 14 in", "Generic Sensor 15 in", "Generic Sensor 16 in", "VVT 1 output", "VVT 2 output", "VVT 3 output", "VVT 4 output", "VVT cam 2/3/4 input", "Real Time Clock", "Torque Convertor Lockup", "Traction control", "Rotary trailing dwell timer", "Internal SPI2", "2nd MAP", "Long Term Trim button", "dual-fuel injectors", "launch timed in", "launch timed out", "throttle stop", "check engine light", "vss3 in", "vss4 in", "Staged inj switch output 1", "Alternator control output", "Alternator load monitor input", "Alternator current monitor input", "Alternator lamp output", "Staged inj switch output 1", "Shift light output", "Oil pressure warning output", "TCS input", "MAP2", "Generic Closed-Loop Out 1", "Generic Closed-Loop Out 2", "Line-lock staging input", "Line-lock staging output", "SDcard trigger output", "Pit limiter input", "TC LED out", "Dome fill out", "Dome empty out", "Power Control", "P&H control", "Pullup", "PWM Fuel Pump", "crank input", "CAN Parameters", "IObox1", "IObox2", "IObox3", "IObox4", "CAN Receiving", "Int. Wideband" prefSpeedUnits = bits, U08, [0:0], "MPH", "KPH" prefLengthUnits = bits, U08, [0:0], "m", "in" accel_vs_yaw_name = bits, U08, [0:0], "Accel Z", "Yaw Z" accel_vs_yaw_units = bits, U08, [0:0], "ms-2", "deg/sec" [LoggerDefinition] ; valid logger types: composite, tooth, trigger, csv ;loggerDef = uniqueName, Display Name, type loggerDef = mapLogger, "MAP Logger", csv dataReadCommand = "r\\x00\\xf4\\x00\\x00\\x04\\x00" ; standard TS command format dataReadTimeout = 10000 ; time in ms dataReadyCondition = { ( status3 & 0x02 ) == 0x02 } ;dataLength = 1024 ; in bytes, including headers, footers and data (not used) ;recordDef = headerLen. footerLen, recordLen recordDef = 0, 0, 2; in bytes, the recordLen is for each record, currently limited to 4 bytes ;recordField = Name, HeaderName, startBit, bitCount, scale, units, updateCondition recordField = nonMap, "Not MAP", 15, 1, 1.0, "Flag" recordField = mapWindow, "MAPwindow", 14, 1, 1.0, "Flag", { !nonMap } recordField = rpmPrint, "isRPM", 14, 1, 1.0, "Flag", { nonMap } recordField = mapSensor, "Sensor", 10, 3, 1.0, "#", { !nonMap } recordField = mapAdc, "MAP ADC", 0, 10, 1.0, "ADC", { !nonMap } recordField = sampleRpm, "RPM", 0, 14, 1.0, "rpm", { nonMap && rpmPrint } recordField = crankAngle, "CrankAngle", 0, 13, 0.1, "deg", { nonMap && !rpmPrint } ;calcField = name, HeaderName, units, expression calcField = mapValue, "MAP", "kPa", { map0 + (mapmax - map0) * mapAdc/1023 } loggerDef = mafLogger, "MAF Logger", csv dataReadCommand = "r\\x00\\xf5\\x00\\x00\\x04\\x00" ; standard TS command format dataReadTimeout = 10000 ; time in ms dataReadyCondition = { ( status3 & 0x02 ) == 0x02 } ;dataLength = 1024 ; in bytes, including headers, footers and data (not used) ;recordDef = headerLen. footerLen, recordLen recordDef = 0, 0, 2; in bytes, the recordLen is for each record, currently limited to 4 bytes ;recordField = Name, HeaderName, startBit, bitCount, scale, units, updateCondition recordField = nonMaf, "Not MAF", 15, 1, 1.0, "Flag" recordField = mapWindow, "MAPwindow", 14, 1, 1.0, "Flag", { !nonMaf } recordField = rpmPrint, "isRPM", 14, 1, 1.0, "Flag", { nonMaf } recordField = mapSensor, "Sensor", 10, 3, 1.0, "#", { !nonMaf } recordField = mafAdc, "MAF ADC", 0, 10, 1.0, "ADC", { !nonMaf } recordField = sampleRpm, "RPM", 0, 14, 1.0, "rpm", { nonMaf && rpmPrint } recordField = crankAngle, "CrankAngle", 0, 13, 0.1, "deg", { nonMaf && !rpmPrint } calcField = mapValue, "MAF Freq", "Hz", { (MAFOption_t == 0 || (!(mafAdc > 0))) ? 0 : (maf_freq1 > 62.5) ? (1000000 / (32 * mafAdc)) : (1000000 / (128 * mafAdc)) } loggerDef = mafLogger, "Engine Logger", csv dataReadCommand = "r\\x00\\xf6\\x00\\x00\\x04\\x00" ; standard TS command format dataReadTimeout = 10000 ; time in ms dataReadyCondition = { ( status3 & 0x02 ) == 0x02 } ;dataLength = 1024 ; in bytes, including headers, footers and data (not used) ;recordDef = headerLen. footerLen, recordLen recordDef = 0, 0, 3; in bytes, the recordLen is for each record, currently limited to 4 bytes ;recordField = Name, HeaderName, startBit, bitCount, scale, units, updateCondition recordField = PT7, "PTT7", 23, 1, 1, "" recordField = PT6, "PTT6", 22, 1, 1, "" recordField = PT5, "PTT5", 21, 1, 1, "" recordField = PT4, "PTT4", 20, 1, 1, "" recordField = PT3, "PTT3", 19, 1, 1, "" recordField = PT2, "PTT2", 18, 1, 1, "" recordField = PT1, "PTT1", 17, 1, 1, "" recordField = PT0, "PTT0", 16, 1, 1, "" recordField = PB7, "Spk H", 15, 1, 1, "" recordField = PB6, "Spk G", 14, 1, 1, "" recordField = PB5, "Spk F", 13, 1, 1, "" recordField = PB4, "Spk E", 12, 1, 1, "" recordField = PB3, "Spk D", 11, 1, 1, "" recordField = PB2, "Spk C", 10, 1, 1, "" recordField = PB1, "Spk B", 9, 1, 1, "" recordField = PB0, "Spk A", 8, 1, 1, "" recordField = PA7, "Inj H", 7, 1, 1, "" recordField = PA6, "Inj G", 6, 1, 1, "" recordField = PA5, "Inj F", 5, 1, 1, "" recordField = PA4, "Inj E", 4, 1, 1, "" recordField = PA3, "Inj D", 3, 1, 1, "" recordField = PA2, "Inj C", 2, 1, 1, "" recordField = PA1, "Inj B", 1, 1, 1, "" recordField = PA0, "Inj A", 0, 1, 1, "" loggerDef = mafLogger, "Engine Logger + MAP", csv dataReadCommand = "r\\x00\\xf7\\x00\\x00\\x04\\x00" ; standard TS command format dataReadTimeout = 10000 ; time in ms dataReadyCondition = { ( status3 & 0x02 ) == 0x02 } ;dataLength = 1024 ; in bytes, including headers, footers and data (not used) ;recordDef = headerLen. footerLen, recordLen recordDef = 0, 0, 4; in bytes, the recordLen is for each record, currently limited to 4 bytes ;recordField = Name, HeaderName, startBit, bitCount, scale, units, updateCondition recordField = mapAdc, "MAP ADC", 24, 8, 4.0, "ADC" ; scaled to 8 bits recordField = PT7, "PTT7", 23, 1, 1, "" recordField = PT6, "PTT6", 22, 1, 1, "" recordField = PT5, "PTT5", 21, 1, 1, "" recordField = PT4, "PTT4", 20, 1, 1, "" recordField = PT3, "PTT3", 19, 1, 1, "" recordField = PT2, "PTT2", 18, 1, 1, "" recordField = PT1, "PTT1", 17, 1, 1, "" recordField = PT0, "PTT0", 16, 1, 1, "" recordField = PB7, "Spk H", 15, 1, 1, "" recordField = PB6, "Spk G", 14, 1, 1, "" recordField = PB5, "Spk F", 13, 1, 1, "" recordField = PB4, "Spk E", 12, 1, 1, "" recordField = PB3, "Spk D", 11, 1, 1, "" recordField = PB2, "Spk C", 10, 1, 1, "" recordField = PB1, "Spk B", 9, 1, 1, "" recordField = PB0, "Spk A", 8, 1, 1, "" recordField = PA7, "Inj H", 7, 1, 1, "" recordField = PA6, "Inj G", 6, 1, 1, "" recordField = PA5, "Inj F", 5, 1, 1, "" recordField = PA4, "Inj E", 4, 1, 1, "" recordField = PA3, "Inj D", 3, 1, 1, "" recordField = PA2, "Inj C", 2, 1, 1, "" recordField = PA1, "Inj B", 1, 1, 1, "" recordField = PA0, "Inj A", 0, 1, 1, "" calcField = mapValue, "MAP", "kPa", { map0 + (mapmax - map0) * mapAdc/1023 } loggerDef = mafLogger, "Engine Logger + MAF", csv dataReadCommand = "r\\x00\\xf8\\x00\\x00\\x04\\x00" ; standard TS command format dataReadTimeout = 10000 ; time in ms dataReadyCondition = { ( status3 & 0x02 ) == 0x02 } ;dataLength = 1024 ; in bytes, including headers, footers and data (not used) ;recordDef = headerLen. footerLen, recordLen recordDef = 0, 0, 4; in bytes, the recordLen is for each record, currently limited to 4 bytes ;recordField = Name, HeaderName, startBit, bitCount, scale, units, updateCondition recordField = mafAdc, "MAF ADC", 24, 8, 4.0, "ADC" ; scaled to 8 bits recordField = PT7, "PTT7", 23, 1, 1, "" recordField = PT6, "PTT6", 22, 1, 1, "" recordField = PT5, "PTT5", 21, 1, 1, "" recordField = PT4, "PTT4", 20, 1, 1, "" recordField = PT3, "PTT3", 19, 1, 1, "" recordField = PT2, "PTT2", 18, 1, 1, "" recordField = PT1, "PTT1", 17, 1, 1, "" recordField = PT0, "PTT0", 16, 1, 1, "" recordField = PB7, "Spk H", 15, 1, 1, "" recordField = PB6, "Spk G", 14, 1, 1, "" recordField = PB5, "Spk F", 13, 1, 1, "" recordField = PB4, "Spk E", 12, 1, 1, "" recordField = PB3, "Spk D", 11, 1, 1, "" recordField = PB2, "Spk C", 10, 1, 1, "" recordField = PB1, "Spk B", 9, 1, 1, "" recordField = PB0, "Spk A", 8, 1, 1, "" recordField = PA7, "Inj H", 7, 1, 1, "" recordField = PA6, "Inj G", 6, 1, 1, "" recordField = PA5, "Inj F", 5, 1, 1, "" recordField = PA4, "Inj E", 4, 1, 1, "" recordField = PA3, "Inj D", 3, 1, 1, "" recordField = PA2, "Inj C", 2, 1, 1, "" recordField = PA1, "Inj B", 1, 1, 1, "" recordField = PA0, "Inj A", 0, 1, 1, "" [TurboBaud] turboBaudOnCommand = "w\$tsCanId\x07\x02\xad\x00\x01\x51" turboBaudOffCommand = "w\$tsCanId\x07\x02\xad\x00\x01\x50" ; turboBaudSpeed defines the speed for ; TS to set the PC baud to when turboBaud is activated turboBaudSpeed = { baudhigh } ; reference the Constant so they will always be in sync with one setting. sdTurboActive = { 1 } ; this can reference a Constant or PcVariable in order to make it user selectable. runtimeTurboActive = { 0 } [Constants] ;---------------------------------------------------------------------------- ; Constants Definition ; -------------------- ; ; Scalar Values ; ------------- ; The scaling and translation values are used as follows: ; msValue = userValue / scale - translate ; userValue = (msValue + translate) * scale ; ; Array Values ; ------------ ; Arrays are specified just like scalars, except that they have a "shape" ; entry in the fourth parameter. The shape allows you to define lists or ; tables, for example [8] defines a list with eight values and [2x4] defines ; a table with eight values (two rows and four columns). Tables may be ; stored in either "X-" or "Y-order." X-order means that memory is layed ; out like. ; ; [x1,y1] [x2,y1]...[xn,y1] [x1,y2]... ; ; Y-order would be ; ; [x1,y1] [x1,y2]...[x1,yn] [x2,y1]... ; ; To use the TableEditor, you must define two lists and a table, and ; the lengths of the lists must correspond to the shape of the table. ; ; Bit Fields ; ---------- ; Bits are numbered 0-7, the rightmost being bit zero. The basic ; data word that stores bit fields must be unsigned. ; ; You need NOT supply the correct number of labels matching the ; number of bits you've specified (one bit requires 2 values, two ; bits requires 4 values and so on). If you neglect to supply enough ; labels, they will be synthesized using the sequence "1", "2" and so ; on based upon their position in the sequence (the cltType and matType ; will end up with identical lists). ; ;---------------------------------------------------------------------------- ; updated settings from "new" serial pageActivationDelay = 1 blockReadTimeout = 500 tsWriteBlocks = on ; writeBlocks = on interWriteDelay = 0 ;Relationship between TS pages and MS3 pages ;TS MS3 internal ;MS3 internal pages 0-3 are sensor lookup tables ;1 4 ;2 5 ;MS3 internal pages 6,7 are outpc,txbuf ;3 8 ;4 9 ;5 10 ;6 11 ;7 12 ;8 13 ;9 18 ;10 19 ;11 21 ;12 22 ;13 23 ;14 24 ;15 25 ;16 26 ; RAM only page ;17 27 ;18 28 ;19 29 ;20 30 ;21 31 endianness = big nPages = 21 pageSize = 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024 pageIdentifier = "\$tsCanId\x04", "\$tsCanId\x05", "\$tsCanId\x08", "\$tsCanId\x09", "\$tsCanId\x0a", "\$tsCanId\x0b", "\$tsCanId\x0c", "\$tsCanId\x0d", "\$tsCanId\x12", "\$tsCanId\x13", "\$tsCanId\x15", "\$tsCanId\x16", "\$tsCanId\x17", "\$tsCanId\x18", "\$tsCanId\x19", "\$tsCanId\x1a", "\$tsCanId\x1b", "\$tsCanId\x1c", "\$tsCanId\x1d", "\$tsCanId\x1e", "\$tsCanId\x1f" burnCommand = "b%2i", "b%2i", "b%2i", "b%2i", "b%2i", "b%2i", "b%2i", "b%2i", "b%2i", "b%2i", "b%2i", "b%2i", "b%2i", "b%2i", "b%2i", "", "b%2i", "b%2i", "b%2i", "b%2i", "b%2i" pageReadCommand = "r%2i%2o%2c", "r%2i%2o%2c", "r%2i%2o%2c", "r%2i%2o%2c", "r%2i%2o%2c", "r%2i%2o%2c", "r%2i%2o%2c", "r%2i%2o%2c", "r%2i%2o%2c", "r%2i%2o%2c", "r%2i%2o%2c", "r%2i%2o%2c", "r%2i%2o%2c", "r%2i%2o%2c", "r%2i%2o%2c", "r%2i%2o%2c", "r%2i%2o%2c", "r%2i%2o%2c", "r%2i%2o%2c", "r%2i%2o%2c", "r%2i%2o%2c" pageValueWrite = "w%2i%2o%2c%v", "w%2i%2o%2c%v", "w%2i%2o%2c%v", "w%2i%2o%2c%v", "w%2i%2o%2c%v", "w%2i%2o%2c%v", "w%2i%2o%2c%v", "w%2i%2o%2c%v", "w%2i%2o%2c%v", "w%2i%2o%2c%v", "w%2i%2o%2c%v", "w%2i%2o%2c%v", "w%2i%2o%2c%v", "w%2i%2o%2c%v", "w%2i%2o%2c%v", "w%2i%2o%2c%v", "w%2i%2o%2c%v", "w%2i%2o%2c%v", "w%2i%2o%2c%v", "w%2i%2o%2c%v", "w%2i%2o%2c%v" pageChunkWrite = "w%2i%2o%2c%v", "w%2i%2o%2c%v", "w%2i%2o%2c%v", "w%2i%2o%2c%v", "w%2i%2o%2c%v", "w%2i%2o%2c%v", "w%2i%2o%2c%v", "w%2i%2o%2c%v", "w%2i%2o%2c%v", "w%2i%2o%2c%v", "w%2i%2o%2c%v", "w%2i%2o%2c%v", "w%2i%2o%2c%v", "w%2i%2o%2c%v", "w%2i%2o%2c%v", "w%2i%2o%2c%v", "w%2i%2o%2c%v", "w%2i%2o%2c%v", "w%2i%2o%2c%v", "w%2i%2o%2c%v", "w%2i%2o%2c%v" crc32CheckCommand = "k%2i\x00\x00\x00\x04", "k%2i\x00\x00\x00\x04", "k%2i\x00\x00\x00\x04", "k%2i\x00\x00\x00\x04", "k%2i\x00\x00\x00\x04", "k%2i\x00\x00\x00\x04", "k%2i\x00\x00\x00\x04", "k%2i\x00\x00\x00\x04", "k%2i\x00\x00\x00\x04", "k%2i\x00\x00\x00\x04", "k%2i\x00\x00\x00\x04", "k%2i\x00\x00\x00\x04", "k%2i\x00\x00\x00\x04", "k%2i\x00\x00\x00\x04", "k%2i\x00\x00\x00\x04", "k%2i\x00\x00\x00\x04", "k%2i\x00\x00\x00\x04", "k%2i\x00\x00\x00\x04", "k%2i\x00\x00\x00\x04", "k%2i\x00\x00\x00\x04", "k%2i\x00\x00\x00\x04" tableCrcCommand = "k\$tsCanId%2i%2o%2c" retrieveConfigError = "r\$tsCanId\x07\x04\x00\x00\xff" ; new serial messageEnvelopeFormat = msEnvelope_1.0 ; TS could use the 'F' command to determine this automatically. ;TS could use the 'f' command to determine this automatically. Will change if using CAN passthrough #if CAN_COMMANDS blockingFactor = 256 ; just in case MS2 is used #else blockingFactor = 2048 #endif validateArrayBounds = true ;New for TS 3.0.08ish upwards, define lists of standard I/O options ; Analogue input options. [0:5] options 1-63 #define PIN_ADCS1 = "INVALID", "INVALID", "Analog In 3", "Analog In 1", "Analog In 2", "Internal MAP Sensor", "INVALID", "CAN ADC01", "CAN ADC02", "CAN ADC03", "CAN ADC04", "CAN ADC05", "CAN ADC06", "CAN ADC07", "CAN ADC08", "CAN ADC09", "CAN ADC10", "CAN ADC11", "CAN ADC12", "CAN ADC13", "CAN ADC14", "CAN ADC15", "CAN ADC16", "CAN ADC17", "CAN ADC18", "CAN ADC19", "CAN ADC20", "CAN ADC21", "CAN ADC22", "CAN ADC23", "CAN ADC24", "Analog In 4", "Analog In 5", "Analog In 6", "Analog In 7", "Analog In 8", "INVALID", "O2 In", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID" #define PIN_ADCS = "INVALID", $PIN_ADCS1 #define PIN_ADCS_OFF = "Off", $PIN_ADCS1 #define PIN_ADCS_EGO = "O2 In", $PIN_ADCS1 ;Digital inputs. [0:5] ;options1 onwards #define PIN_DIGIN1 = "Digital Switched In 3", "Digital Input 4", "Digital Input 5", "Digital Frequency In 2", "INVALID", "INVALID", "INVALID", "Digital Switched 12V In", "Digital Switched In 2", "Digital Frequency In 3", "Digital Frequency In 1", "CMP", "Digital Switched In 1", "INVALID", "INVALID", "CANIN1", "CANIN2", "CANIN3", "CANIN4", "CANIN5", "CANIN6", "CANIN7", "CANIN8", "Loop 1", "Loop 2", "Loop 3", "Loop 4", "Loop 5", "Loop 6", "Loop 7", "Loop 8", "Digital In Out 1", "Digital In Out 2", "Digital In Out 3", "Digital In Out 4", "Digital In Out 5", "Analog In 3", "Analog In 1", "Analog In 2", "Analog In 4", "Analog In 5", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID" ;add the zeroth option #define PIN_DIGIN = "INVALID", $PIN_DIGIN1 #define PIN_DIGIN_OFF = "Off", $PIN_DIGIN1 ; (Hardware) Frequency inputs [0:2] typically. #define PIN_HWFREQIN = "Digital Frequency In 1", "CMP", "Digital Frequency In 2", "Digital Frequency In 3" ;Digital outputs [0:6] ;options 1-39 #define PIN_DIGOUT1 = "Stepper Out 1", "Stepper Out 2", "PWM / Idle Out 1", "INVALID", "High Current Out 1", "High Current Out 2", "Tach Out", "PWM Out 2", "High Current Out 3", "PWM Out 3", "Injector Out I", "Injector Out J", "INVALID", "INVALID", "INVALID", "Injector Out A", "Injector Out B", "Injector Out C", "Injector Out D", "Injector Out E", "Injector Out F", "Injector Out G", "Injector Out H", "Digital Frequency In 1", "Digital Frequency In 2", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "Spark Out A", "Spark Out B", "Spark Out C", "Spark Out D", "Spark Out E", "Spark Out F", "Spark Out G", "Spark Out H" #define PIN_DIGOUT_INVALID8 = "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", ;options 40-47 #define PIN_DIGOUT_CANPWM = "CANPWM1", "CANPWM2", "CANPWM3", "CANPWM4", "CANPWM5", "CANPWM6", "CANPWM7", "CANPWM8" ;options 48-63 #define PIN_DIGOUT_CANOUT = "CANOUT1", "CANOUT2", "CANOUT3", "CANOUT4", "CANOUT5", "CANOUT6", "CANOUT7", "CANOUT8", "CANOUT9", "CANOUT10", "CANOUT11", "CANOUT12", "CANOUT13", "CANOUT14", "CANOUT15", "CANOUT16" ;options 64-127 #define PIN_DIGOUT2 = "Digital In Out 1", "Digital In Out 2", "Digital In Out 3", "Digital In Out 4", "Digital In Out 5", "PWM Out 4", "PWM Out 5", "Digital Output 1 LED", "Digital Output 2", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID" ;Build complete option list from 0. #define PIN_DIGOUT = "INVALID", $PIN_DIGOUT1, $PIN_DIGOUT_INVALID8, $PIN_DIGOUT_INVALID8, $PIN_DIGOUT_INVALID8, $PIN_DIGOUT2 #define PIN_DIGOUT_OFF = "Off", $PIN_DIGOUT1, $PIN_DIGOUT_INVALID8, $PIN_DIGOUT_INVALID8, $PIN_DIGOUT_INVALID8, $PIN_DIGOUT2 #define PIN_DIGOUT_CANOUT_OFF = "Off", $PIN_DIGOUT1, $PIN_DIGOUT_INVALID8, $PIN_DIGOUT_CANOUT, $PIN_DIGOUT2 #define PIN_DIGOUT_CANOUT_INVALID = "INVALID", $PIN_DIGOUT1, $PIN_DIGOUT_INVALID8, $PIN_DIGOUT_CANOUT, $PIN_DIGOUT2 #define PIN_DIGOUT_CANPWM = "INVALID", $PIN_DIGOUT1, $PIN_DIGOUT_CANPWM, $PIN_DIGOUT_CANOUT, $PIN_DIGOUT2 #define PIN_HWPWMOUT = "High Current Out 3", "PWM Out 2", "PWM Out 3", "High Current Out 1", "High Current Out 2", "PWM / Idle Out 1", "PWM Out 4", "PWM Out 5" #define PIN_HWPWMOUT_FIDLE3 = "Off", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", $PIN_HWPWMOUT #define PIN_HWPWMOUT_VVT = "Off", $PIN_HWPWMOUT, "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID" ;VSS inputs, only 4 bits. Options 1-15 #define VSS_OPTS1 = "Digital Switched In 3", "Digital Input 4", "Digital Input 5", "Digital Frequency In 2", "INVALID", "INVALID", "INVALID", "Digital Switched 12V In", "Digital Switched In 2", "Digital Frequency In 3", "Digital Frequency In 1", "CMP", "Digital Switched In 1" #define VSS_OPTS = "INVALID", $VSS_OPTS1, "CAN VSS", "Use CAN PWMin", "Use GPS speed", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID" #define VSS_OPTS_OFF = "Off", $VSS_OPTS1, "CAN VSS", "Use CAN PWMin", "Use GPS speed", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID" #define SS_OPTS_OFF1 = "Off", $VSS_OPTS1, "From VSS1", "Poll CAN" #define SS_OPTS_OFF2 = "Off", $VSS_OPTS1, "INVALID", "Poll CAN" page = 1 ; name = class, type, offset, shape, units, scale, translate, lo, hi, digits nCylinders = bits, U08, 0, [0:4], "INVALID","1","2","3","4","5","6","7","8","9","10","11","12","13","14","15","16","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID" no_skip_pulses = scalar, U08, 1, "", 1.00000, 0.00000, 1.00, 10.00, 0 ; * ( 1 byte) ICIgnCapture = bits, U08, 2, [0:0], "Falling Edge", "Rising Edge" ; ICIgnOption engineType = bits, U08, 2, [3:3], "Even fire", "Odd fire" ; old setting and settings spkout_hi_lo = bits, U08, 2, [4:4], "Going Low (Normal)", "Going High (Inverted)" ; * ; new settings spkout_hi_lo2 = bits, U08, 2, [4:4], "Going Low", "Going High" ; * max_coil_dur = scalar, U08, 3, "ms", 0.1000, 0.00000, 1.00, 8.00, 1 ; * ( 1 byte) max_spk_dur = scalar, U08, 4, "ms", 0.1000, 0.00000, 0.00, 25.50, 1 ; * ( 1 byte) ; dwellAcc = scalar, U08, 5, "ms", 0.1000, 0.00000, 0.00, 25.50, 0 ; * ( 1 byte) crankingRPM = scalar, S16, 6, "RPM", 1.00000, 0.00000, 200, 3000.0, 0 ; * ( 2 bytes) triggerOffset = scalar, S16, 8, "deg", 0.10000, 0.00000, -90.0, 380.00, 1 ; * ( 2 bytes) TpsBypassCLTRevlim = scalar, S16, 10, "TPS %", 0.10000, 0.00000, 0, 120, 1 ; * ( 2 bytes) ; RevLimRpm2 = scalar, S16, 12, "RPM", 1.00000, 0.00000, 0.00,20000, 0 ; * ( 2 bytes) map0 = scalar, S16, 14, "kPa", 0.10000, 0.00000, -3276.8, 3276.7, 1 ; * ( 2 bytes) mapmax = scalar, S16, 16, "kPa", 0.10000, 0.00000, -3276.8, 3276.7, 1 ; * ( 2 bytes) #if CELSIUS clt0 = scalar, S16, 18, "°C", 0.05555, -320.000, -100.0, 500.0, 1 ; * ( 2 bytes) cltmult = scalar, S16, 20, "%", 1.00000, 0.00000, -200.0, 200.0, 0 ; * ( 2 bytes) mat0 = scalar, S16, 22, "°C", 0.05555, -320.000, -100.0, 500.0, 1 ; * ( 2 bytes) #else clt0 = scalar, S16, 18, "°F", 0.10000, 0.00000, -100.0, 500.0, 1 cltmult = scalar, S16, 20, "%", 1.00000, 0.00000, -200.0, 200.0, 0 mat0 = scalar, S16, 22, "°F", 0.10000, 0.00000, -100.0, 500.0, 1 #endif matmult = scalar, S16, 24, "%", 1.00000, 0.00000, -200.0, 200.0, 0 ; * ( 2 bytes) tpsMin = scalar, S16, 26, "ADC", 1.00000, 0.00000, 0, 1023, 0 ; * ( 2 bytes) tpsMax = scalar, S16, 28, "ADC", 1.00000, 0.00000, 0, 1023, 0 ; * ( 2 bytes) batt0 = scalar, S16, 30, "V", 0.10000, 0.00000, -10, 10, 1 ; ( 2 bytes) battmax = scalar, S16, 32, "V", 0.10000, 0.00000, 10, 100, 1 ; ( 2 bytes) ego0 = scalar, S16, 34, "afr", 0.10000, 0.00000,-3276.8, 3276.7, 1 ; ( 2 bytes) egomult = scalar, S16, 36, "%", 1.00000, 0.00000, -200.0, 200.0, 0 ; ( 2 bytes) baro0 = scalar, S16, 38, "kPa", 0.10000, 0.00000,-3276.8, 3276.7, 1 ; * ( 2 bytes) baromax = scalar, S16, 40, "kPa", 0.10000, 0.00000,-3276.8, 3276.7, 1 ; * ( 2 bytes) bcor0 = scalar, S16, 42, "%", 1.00000, 0.00000,-3276.8, 3276.7, 1 ; * ( 2 bytes) bcormult = scalar, S16, 44, "%", 1.00000, 0.00000, -200.0, 200.0, 0 ; * ( 2 bytes) iacfullopen = scalar, S16, 46, "steps", 1.00000, 0.00000, 0.0, 4000.0, 0 reluctorteeth1 = scalar, U16, 48, "", 0.01, 0,0,255,2 ; this is VSS1 ; crankTolerance = scalar, U08, 50, "%", 1.00000, 0.00000, 0.00, 255.00, 0 ; * ( 1 byte) ; asTolerance = scalar, U08, 51, "%", 1.00000, 0.00000, 0.00, 255.00, 0 ; * ( 1 byte) ; pulseTolerance = scalar, U08, 52, "%", 1.00000, 0.00000, 0.00, 255.00, 0 ; * ( 1 byte) ; IdleCtl = bits , U08, 53, [0:3], "None", "On/Off valve", "IAC Stepper Moving Only", "IAC Stepper Always On", "PWM Warmup", "15-Minute IAC", "PWM Closed-loop", "IAC Closed-loop moving only", "IAC Closed-loop always-on", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID" ; * IdleCtl = bits , U08, 53, [0:2], "None", "On/Off valve", "PWM valve (2 or 3 wire)", "Stepper valve (4 or 6 wire)", "DBW", "INVALID", "INVALID", "INVALID" IdleCtl_alg = bits , U08, 53, [3:3], "Open-loop (warmup)", "Closed-loop" IdleCtl_vss = bits , U08, 53, [4:4], "Use Engine State", "Use VSS" IdleCtl_home = bits , U08, 53, [5:5], "Closed", "Open" IACtstep = scalar, U08, 54, "ms", 1.000, 0.00000, 0.00, 25, 0 ; * ( 1 byte) IAC_tinitial_step=scalar, U08, 55, "ms", 1.000, 0.00000, 0.00, 25, 0 ; * ( 1 byte) IACminstep = scalar, U08, 56, "steps", 1.00000, 0.00000, 0.00, 255.00, 0 ; * ( 1 byte) dwellduty = scalar, U08, 57, "%", 0.39, 0.0, 0, 100,0 IACStart = scalar, S16, 58, "", 1.00000, 0.00000, 0.00, 4000.00, 0 #if CELSIUS IdleHyst = scalar, S16, 60, "°C", 0.05555, 0.00000, -40.0, {clthighlim}, 1 ; * ( 2 bytes) #else IdleHyst = scalar, S16, 60, "°F", 0.10000, 0.00000, -40.0, {clthighlim}, 1 #endif IACcrankpos = scalar, S16, 62, "steps", 1.00000, 0.00000, 0.00, 4000.00, 0 ; * ( 2 bytes) IACcrankxt = scalar, S16, 64, "s", 1.00000, 0.00000, 0.00,32767.00, 0 ; * ( 2 bytes) IACcurlim = bits, U08, 66, [0:1], "Moving only", "Hold current", "Always on", "INVALID" ;gap reluctorteeth2 = scalar, U16, 68, "", 0.01, 0,0,255,2 ; this is VSS2 boosttol = scalar, S16, 70, "kPa", 0.10000, 0.00000, 0.00, 50, 1 OverBoostKpa2 = scalar, S16, 72, "kPa", 0.10000, 0.00000, 0.00, 700, 1 fc_rpm_lower = scalar, U16, 74, "rpm", 1.00000, 0.0, 0.0, 20000, 0 ; * ( 1 byte) OverBoostOption = bits, U08, 76, [0:1], "None", "Fuel Cut", "Spark Cut", "Both" OverBoostOption_tol = bits, U08, 76, [2:2], "Off", "On" hardware_spk = bits, U08, 77, [0:2], "INVALID", "INVALID", "Spark", "INVALID", "Tacho Out", "INVALID", "INVALID", "INVALID" hardware_fuel = bits, U08, 77, [4:4], "Inj I/J", "Inj A,B.." hardware_cam = bits, U08, 77, [6:7], "Digital Frequency In 2", "CMP", "MAP sensor", "INVALID" OverBoostKpa = scalar, S16, 78, "kPa", 0.10000, 0.00000, 0.00, 700, 1 OverBoostHyst = scalar, S16, 80, "kPa", 0.10000, 0.00000, 0.00, 100, 1 N2Olaunchmaxmap = scalar, S16, 82, "kPa", 0.1, 0, 100, 700, 1 tpsThresh = scalar, S16, 84, "%/s", 0.10000, 0.00000, 0.00, 3276.0, 1 ; * ( 2 byte) mapThresh = scalar, S16, 86, "kPa/s", 1.00000, 0.00000, 0.00, 10000.0, 0 ; * ( 2 byte) threshold for MAE taeColdA = scalar, U08, 88, "%ReqFuel", 1, 0.00000, 0, 255, 0 ; * ( 1 byte) ; Tpsacold taeColdM = scalar, U08, 89, "%", 1.00000, 0.00000, 100, 255.00, 0 ; * ( 1 byte) ; AccMult taeTime = scalar, U08, 90, "s", 0.010000, 0.00000, 0.00, 1.00, 2 ; * ( 1 byte) ; TpsAsync tpsasync_events = scalar, U08, 90, "events", 1, 0.00000, 0.00, 255, 0 ; * ( 1 byte) ; TpsAsync tdePct = scalar, U08, 91, "", 1.00000, 0.00000, 50.00, 100.00, 0 ; * ( 1 byte) ; TPSDQ floodClear = scalar, S16, 92, "%", 0.10000, 0.00000, 0.00, 100.00, 1 ; * ( 2 bytes) ; TPSWOT TPSOXLimit = scalar, S16, 94, "%", 0.10000, 0.00000, 0.00, 300.00, 1 ; * ( 2 bytes) ; TPSOXLimit tpsProportion = scalar, U08, 96, "%", 1.00000, 0.00000, 0.00, 100.00, 0 ; * ( 1 byte) ; Tps_acc_wght baroCorr = bits , U08, 97, [0:1], "None", "Initial MAP Reading", "Two Independent Sensors", "INVALID"; BaroOption egoType = bits , U08, 98, [0:1], "Disabled", "Narrow Band", "Wide Band", "INVALID" ; egoOption egoCount = scalar, U08, 99, "", 1.00000, 0.00000, 0.00, 255.00, 0 ; * ( 1 byte) egoDelta = scalar, U08, 100, "%", 0.10000, 0.00000, 0.00, 25.50, 1 ; * ( 1 byte) oldegoLimit = scalar, U08, 101, "%", 1.00000, 0.00000, 0.00, 255.00, 0 ; * ( 1 byte) EGOVtarget = scalar, U08, 102, "Volts", 0.00489, 0.00000, 0.00, 1, 3 tempUnits = bits , U08, 103, [0:0], "Coolant/MAT Tables in °F", "Coolant/MAT Tables in °C" ; * ( 1 byte) egonum = scalar, U08, 104, "", 1, 0, 0, 12, 0 rtc_trim = scalar, S08, 105, "ppm", 1, 0, -127, +127, 0 #if CELSIUS fastIdleT = scalar, S16, 106, "°C", 0.05555, -320.000,-40.00, {clthighlim}, 1 ; * ( 2 bytes) egoTemp = scalar, S16, 108, "°C", 0.05555, -320.000,-40.00, {clthighlim}, 1 ; * ( 2 bytes) #else fastIdleT = scalar, S16, 106, "°F", 0.10000, 0.00000,-40.00, {clthighlim}, 1 egoTemp = scalar, S16, 108, "°F", 0.10000, 0.00000,-40.00, {clthighlim}, 1 #endif egoRPM = scalar, U16, 110, "RPM", 1.00000, 0.00000, 0.00, 20000, 0 ; RPMOXLimit reqFuel = scalar, U16, 112, "ms", 0.001, 0.00000, 0.00, 65.535, 2 ; * ( 2 bytes) divider = scalar, U08, 114, "", 1.00000, 0.00000, 0.00, 255, 0 ; * ( 1 byte) alternate = bits, U08, 115, [0:0], "Simultaneous", "Alternating" ; * ( 1 byte) altcrank = bits, U08, 115, [1:1], "Every event", "Alternate events" alternate_blend = bits, U08, 115, [2:2], "Off", "Blend Curve (7)" injPwmT = scalar, U08, 116, "ms", 0.12800, 0.128, 0.00, 32.64, 1 ; * ( 1 byte) injPwmPd = scalar, U08, 117, "us", 1.00000, 0.00000, 40.00, 100.00, 0 ; * ( 1 byte) injPwmP = scalar, U08, 118, "%", 1.00000, 0.00000, 0.00, 100.00, 0 ; * ( 1 byte) twoStroke = bits, U08, 119, [0:1], "Four-stroke", "Two-stroke", "INVALID", "Rotary" ; * ; injType = bits, U08, 120, [0:0], "Port Injection", "Throttle Body" ; * not used by code nInjectors = bits, U08, 121, [0:4], "INVALID", "1", "2", "3", "4", "5", "6", "7", "8", "9", "10", "11", "12", "13", "14", "15", "16", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID" OddFireang = scalar, U16, 122, "", 0.10000, 0.00000, 0.00, 720.00, 1 ; * ( 2 byte) rpmLF = scalar, U08, 124, "", 1.00000, 0.00000, 10.00, 100.00, 0 ; * ( 1 byte) mapLF = scalar, U08, 125, "", 1.00000, 0.00000, 10.00, 100.00, 0 ; * ( 1 byte) tpsLF = scalar, U08, 126, "", 1.00000, 0.00000, 10.00, 100.00, 0 ; * ( 1 byte) egoLF = scalar, U08, 127, "", 1.00000, 0.00000, 10.00, 100.00, 0 ; * ( 1 byte) adcLF = scalar, U08, 128, "", 1.00000, 0.00000, 10.00, 100.00, 0 ; * ( 1 byte) knk_pin_out = bits, U08, 129, [0:6], $PIN_DIGOUT_OFF mafLF = scalar, U08, 130, "", 1.00000, 0.00000, 10.00, 100.00, 0 ;gap algorithm = bits, U08, 132, [0:3], "INVALID", "Speed Density", "Percent Baro", "Alpha-N", "INVALID", "MAF", "ITB", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID" ; * algorithm2 = bits, U08, 132, [4:7], "Disabled", "Speed Density", "Percent Baro", "Alpha-N", "INVALID", "MAF", "ITB", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID" IgnAlgorithm = bits, U08, 133, [0:3], "INVALID", "Speed Density", "Percent Baro", "Alpha-N", "INVALID", "MAF", "ITB", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID" IgnAlgorithm2 = bits, U08, 133, [4:7], "Disabled", "Speed Density", "Percent Baro", "Alpha-N", "INVALID", "MAF", "ITB", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID" AfrAlgorithm = scalar, U08, 134, "", 1.00000, 0.00000, 0.00, 255.00, 0 ; U ( 1 byte) UNUSED dwelltime = scalar, U08, 135, "ms", 0.10000, 0, 0.1, 25.5, 1 trigret_ang = scalar, U16, 136, "deg", 0.1, 0, 5, 180,1 RevLimOption_retard = bits,U08, 138, [0:1], "Off", "Progressive retard", "Fixed angle", "INVALID" RevLimOption_spkcut = bits,U08, 138, [2:2], "Off", "On" RevLimCLTbased = bits, U08, 138, [3:3], "Normal", "CLT based" RevLimOption_fuelprog=bits,U08, 138, [4:4], "Off", "On" RevLimOption_fuelcut =bits,U08, 138, [5:5], "Off", "On" RevLimMaxRtd = scalar, U08, 139, "deg", 0.10000, 0.00000,0, 25.5, 0 ; * ( 1 byte) ego_startdelay = scalar, U08, 140, "s", 1, 0, 0, 120, 0 can_poll2_gps = bits, U08, 141, [1:2], "Off", "JBperf GPS", "Race Technology 11bit", "INVALID" can_poll2_vss = bits, U08, 141, [3:3], "Listen", "Poll" can_poll2_egolag= bits, U08, 141, [4:4], "Off", "On" opt142_rtc = bits, U08, 142, [0:1], "Off", "On-board", "CAN", "INVALID" opt142_gs_share = bits, U08, 142, [2:2], "Off", "On" injPwmT2 = scalar, U08, 143, "ms", 0.12800, 0.12800, 0.00, 32.64, 1 ; * ( 1 byte) injPwmPd2 = scalar, U08, 144, "us", 1.00000, 0.00000, 40.00, 100.00, 0 ; * ( 1 byte) injPwmP2 = scalar, U08, 145, "%", 1.00000, 0.00000, 0.00, 100.00, 0 ; * ( 1 byte) can_ego_id = scalar, U08, 146, "", 1.00000, 0.00000, 0.00, 14, 0 ; can_ego_table = scalar, U08, 147, "", 1.00000, 0.00000, 0, 15, 0 ; * ( 1 byte) can_ego_offset = scalar, U16, 148, "bytes", 1.00000, 0.00000, 0, 4095, 0 baro_upper = scalar, S16, 150, "kPa", 0.10000, 0.00000, 60, 150, 1 ; baro_lower = scalar, S16, 152, "kPa", 0.10000, 0.00000, 60, 150, 1 ; baro_default = scalar, S16, 154, "kPa", 0.10000, 0.00000, 60, 150, 1 ; can_poll2_ego2 = bits, U08, 156, [0:3], "Disable", "Innovate format", "AEM 4ch UEGO", "ECOTRONS ALM", "Generic", "AEM X UEGO", "CANEGT broadcast", "14point7 Spartan3", "AMPEFI CAN WB", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID" ego_limdelay = scalar, U08, 157, "s", 0.1, 0, 0, 10, 1 launchcutzone = scalar, S16, 158, "RPM", 1.00000, 0.00000, 0.00, 1000, 0 RevLimNormal2 = scalar, S16, 160, "RPM", 1.00000, 0.00000, 0.00, 20000, 0 ; hw_latency = scalar, U08, 162, "usec", 1.0, 0.00000, 0.00, 255.00, 0 ;next three are loadopts in the firmware loadCombine = bits, U08, 163, [0:1], "additive", "multiplicitive", "Blend Curve (1)", "INVALID" loadMult = bits, U08, 163, [2:2], "don't multiply", "multiply" loadStoich = bits, U08, 163, [3:3], "don't include AFRtarget", "include AFRtarget" loadCombineign = bits, U08, 163, [4:4], "additive", "Blend Curve (2)" loadMult2 = bits, U08, 163, [5:5], "don't multiply", "multiply" loadopts_oldbaro= bits, U08, 163, [6:6], "Off", "On" baud = scalar, U32, 164, "", 1.00000, 0.00000,9600.0,500000.0, 0 ; x ( 4 bytes) MAPOXLimit = scalar, S16, 168, "%", 0.10000, 0.00000, 0.00, 500, 2 ; * ( 2 bytes) can_poll_id_rtc = scalar, U08, 170, "", 1.00000, 0.00000, 0.00, 14, 0 mycan_id = scalar, U08, 171, "", 1.00000, 0.00000, 0.00, 14, 0 mapsample_percent = scalar, U08, 172, "%", 1.00000, 0.00000, 0.00, 50, 0 can_poll_id_ports = scalar, U08, 173, "", 1.00000, 0.00000, 0.00, 14, 0 ; can_poll_id = scalar, U08, 174, "", 1.00000, 0.00000, 0.00, 14, 0 ; aeTaperTime = scalar, U08, 175, "s", 0.010000, 0.00000, 0.00, 1.00, 2 ; * ( 1 byte) ; TpsAsync2 tpsasync2_events= scalar, U08, 175, "events", 1, 0.00000, 0.00, 255, 0 ; * ( 1 byte) ; TpsAsync2 aeEndPW = scalar, S16, 176, "%ReqFuel", 1, 0.00000, 0.00, 100, 0 ; * tpsaccel2 ; TpsAccel2 egoAlgorithm = bits , U08, 178, [0:1], "Simple", "INVALID", "PID", "No correction" ; * ( 1 byte) egoAlgorithm_auth=bits , U08, 178, [2:2], "Off", "On" egoAlgorithm_delay_table=bits, U08, 178, [3:3], "Use IGN events", "Use delay table" egoAlgorithm_auth2=bits , U08, 178, [4:4], "Combined", "Separate" egoKP = scalar, U08, 179, "%", 1.00000, 0.00000, 0.00, 200.00, 0 ; * ( 1 byte) egoKI = scalar, U08, 180, "%", 1.00000, 0.00000, 0.00, 200.00, 0 ; * ( 1 byte) egoKD = scalar, U08, 181, "%", 1.00000, 0.00000, 0.00, 200.00, 0 ; * ( 1 byte) ac_idleup_vss_offpoint = scalar, U16, 182, { bitStringValue( prefSpeedUnits , prefSpeedUnits ) }, { msToPrefUnitsScale }, 0.00000, 0.00, { maxspeed }, 0 ; * ( 2 bytes) ac_idleup_vss_hyst = scalar, U16, 184, { bitStringValue( prefSpeedUnits , prefSpeedUnits ) }, { msToPrefUnitsScale }, 0.00000, 0.00, { maxspeed }, 0 ; * ( 2 bytes) flexFuel = bits , U08, 186, [0:0], "Disabled", "Enabled" ; * ( 1 byte) flexport = bits, U08, 186, [1:2], "INVALID", "INVALID", "Digital Switched In 1", "Digital Frequency In 1"; (1 byte ) fuelFreq = array , U08, 187, [ 2], "Hz", 1.00000, 0.00000, 0.00, 255, 0 ; * ( 2 bytes) fuelFreq0 = scalar, U08, 187, "Hz", 1.00000, 0.00000, 0.00, 255, 0 fuelFreq1 = scalar, U08, 188, "Hz", 1.00000, 0.00000, 0.00, 255, 0 fuelCorr = array , U08, 189, [ 2], "%", 1.00000, 0.00000, 50, 255, 0 ; * ( 2 bytes) fuelCorr0 = scalar, U08, 189, "%", 1.00000, 0.00000, 50, 255, 0 fuelCorr1 = scalar, U08, 190, "%", 1.00000, 0.00000, 50, 255, 0 dwellmode = bits , U08, 191, [0:1], "Standard Dwell", "Fixed Duty", "Time after Spark", "Charge at Trigger" pwmidle_shift_lower_rpm = scalar, U16, 192, "rpm", 1.00000, 0.00000, 0.00, 20000, 0 ac_idleup_tps_offpoint = scalar, S16, 194, "%", 0.10000, 0.00000, 0.00, 100.00, 1 ac_idleup_tps_hyst = scalar, S16, 196, "%", 0.10000, 0.00000, 0.00, 100.00, 1 fan_idleup_tps_offpoint = scalar, S16, 198, "%", 0.10000, 0.00000, 0.00, 150.00, 1 fan_idleup_tps_hyst = scalar, S16, 200, "%", 0.10000, 0.00000, 0.00, 100.00, 1 fan_idleup_vss_offpoint = scalar, U16, 202, { bitStringValue( prefSpeedUnits , prefSpeedUnits ) }, { msToPrefUnitsScale }, 0.00000, 0.00, { maxspeed }, 0 knk_option = bits , U08, 204, [0:1], "Disabled", "Safe Mode", "Aggressive Mode", "INVALID" ; * ( 1 byte ) knk_option_an = bits , U08, 204, [2:3], "On/Off", "Analogue", "INVALID", "Internal" knkDirection = bits , U08, 204, [4:4], "Low Input", "High Input" ; * knkpull = bits , U08, 204, [5:6], "INVALID", "None", "Pull up", "INVALID" ; * knk_option_wind = bits , U08, 204, [7:7], "At end", "Peak" knk_maxrtd = scalar, U08, 205, "deg", 0.1, 0.0, 0.0, 25.5, 1 ; * ( 1 byte ) knk_step1 = scalar, U08, 206, "deg", 0.1, 0.0, 1.0, 25.5, 1 ; * ( 1 byte ) knk_step2 = scalar, U08, 207, "deg", 0.1, 0.0, 0.5, 10.0, 1 ; * ( 1 byte ) knk_trtd = scalar, U08, 208, "s", 0.1, 0.0, 0.0, 25.5, 1 ; * ( 1 byte ) knk_tadv = scalar, U08, 209, "s", 0.1, 0.0, 0.0, 25.5, 1 ; * ( 1 byte ) knk_dtble_adv = scalar, U08, 210, "deg", 0.1, 0.0, 0.0, 25.5, 1 ; * ( 1 byte ) knk_ndet = scalar, U08, 211, "knocks", 1.0, 0.0, 0.0, 255, 0 ; * ( 1 byte ) EAEOption = bits , U08, 212, [0:2], "Off", "EAE", "INVALID", "X-tau", "X-tau with CLT correction", "INVALID", "INVALID", "INVALID" ; * ( 1 byte ) knkport = bits, U08, 213, [0:5], $PIN_DIGIN knk_maxmap = scalar, S16, 214, "kPa", 0.1, 0.0, 0.0, 500, 1 ; * ( 2 bytes) knk_lorpm = scalar, U16, 216, "rpm", 1.0, 0.0, 0.0, 20000, 0 ; * ( 2 bytes) knk_hirpm = scalar, U16, 218, "rpm", 1.0, 0.0, 0.0, 20000, 0 ; * ( 2 bytes) triggerTeeth = scalar, U16, 220, "teeth", 1.0, 0.0, 2, 255, 0 ; * ( 2 bytes) No_Miss_Teeth = scalar, U08, 222, "teeth", 1.0, 0.0, 0.0, 4, 0 ; * ( 1 byte ) pwmidle_shift_open_time = scalar, U08, 223, "s", 1.0, 0.0, 0.0, 20, 0 ; * ( 1 byte ) Miss_ang = scalar, U16, 224, "deg BTDC", 0.1, 0.0, 0.0, 720, 1 ; * ( 2 bytes ) ICISR_tmask = scalar, U08, 226, "ms", 0.1, 0.0, 0.0, 25.5, 1 ; * ( 1 byte ) ICISR_pmask = scalar, U08, 227, "%", 1.0, 0.0, 0.0, 90, 0 ; * ( 1 byte ) ae_lorpm = scalar, U16, 228, "rpm", 1.0, 0.0, 0.0, 20000, 0 ; * ( 2 bytes) ae_hirpm = scalar, U16, 230, "rpm", 1.0, 0.0, 0.0, 20000, 0 ; * ( 2 bytes) fuelSpkDel = array , S16, 232, [ 2], "deg", 0.10000, 0.00000,-45.00, 45.00, 1 ; * ( 4 bytes) fuelSpkDel0 = scalar, S16, 232, "deg", 0.10000, 0.00000,-45.00, 45.00, 1 fuelSpkDel1 = scalar, S16, 234, "deg", 0.10000, 0.00000,-45.00, 45.00, 1 spk_conf2_gmtfi = bits , U08, 236, [0:2], "Off", "GM Bypass on SpkB", "Buick C3I", "TFI Non-signature", "TFI Signature PIP", "INVALID", "INVALID", "INVALID" spk_conf2_oddodd= bits , U08, 236, [3:4], "Alternate", "INVALID", "Paired", "Custom" spk_conf2_dwell = bits , U08, 236, [5:5], "Off", "On" spk_conf2_dwelltbl = bits, U08, 236, [6:6], "Off", "On" spk_conf2_dli = bits , U08, 236, [7:7], "Off", "Toyota DLI" ;spk_config spk_config_campol =bits, U08, 237, [0:0], "Low", "High" spk_config_camcrank = bits, U08, 237, [1:1], "Crank wheel", "Cam wheel" spk_config_trig2 =bits, U08, 237, [2:3], "INVALID", "Single wheel with missing tooth", "Dual wheel", "Dual wheel with missing tooth" spk_config_trig2l =bits, U08, 237, [4:5], "INVALID", "Rising edge", "Falling edge", "Poll level" spk_config_resetcam =bits, U08, 237, [6:7], "Cam", "Crank", "Every cylinder", "INVALID" ; invalids in next line are spare and should be used, extra CASes hidden. spk_mode0 = bits , U08, 238, [0:5], "EDIS", "EDIS Multispk", "Basic trigger", "Trigger return", "Toothed wheel", "420A/Neon", "36-2+2", "36-2-2-2", "Subaru 6/7", "Miata 99-05", "6g72", "IAW Weber", "CAS 4/1", "4G63", "Twin trigger", "Chrysler 2.2/2.5", "Renix 44-2-2", "Suzuki Swift", "Suzuki Vitara 2.0", "Daihatsu 3cyl", "Daihatsu 4cyl", "VTR1000", "Rover#1", "Rover#2", "Rover#3", "GM 7X", "Log crank", "Log crank&cam", "QR25DE", "Honda RC51", "Fiat 1.8 16V", "Fuel Only", "Optispark", "Nissan SR20", "Nissan RB25", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID","LS1", "YZF1000", "Honda Acura", "VQ35DE","Jeep 2000", "Jeep 2002", "Zetec VCT", "Flywheel tri-tach", "2JZ VVTi", "Honda TSX/D17/K24A2", "Mazda6 2.3 VVT", "Viper V10","Viper V10 Gen1", "INVALID", "HD32-2", "Miata 36-2","Daihatsu 12+1", "Subaru 36-2-2-2 VVT", "Ski doo PTEC", "Nissan QG15","Mazda MZR", "6G75", "INVALID", "INVALID" spk_mode3_trim = bits, U08, 239, [0:0], "Off", "On" spk_mode3_tach3 = bits, U08, 239, [1:1], "CMP", "Digital Frequency Input 2" spk_mode3_hirespol= bits, U08, 239, [2:2], "Normal", "Inverted" spk_mode3_kick = bits, U08, 239, [3:3], "Off", "On" spk_mode3_wasted= bits, U08, 239, [4:4], "Wasted-COP startup", "Wait for cam signal" spk_mode3 = bits, U08, 239, [5:7], "Single coil", "INVALID", "Wasted spark", "Wasted COP", "Coil on plug", "INVALID", "Dual dizzy", "INVALID" ; (1 byte ) rtbaroport = bits, U08, 240, [0:5], $PIN_ADCS, 0="Internal MAP Sensor", 37="Internal Baro Sensor" ego2port = bits, U08, 241, [0:5], $PIN_ADCS mapport = bits, U08, 242, [0:5], $PIN_ADCS, 0="Internal MAP Sensor" mapport_t = bits, U08, 242, [6:7], "Voltage", "Frequency", "Off", "INVALID" ;NB these mapport are in next byte mapport_f = bits, U08, 243, [6:7], $PIN_HWFREQIN knkport_an = bits, U08, 243, [0:5], $PIN_ADCS OvrRunC = bits , U08, 244, [0:0], "Off", "On" OvrRunC_progcut= bits , U08, 244, [1:1], "Off", "On" OvrRunC_progret= bits , U08, 244, [2:2], "Off", "On" OvrRunC_progign= bits , U08, 244, [3:3], "Off", "On" OvrRunC_retign = bits , U08, 244, [4:4], "Off", "On" poll_level_tooth = scalar, U08, 245, "", 1, 0, 0, 255, 0 ; feature4_0ftrig = bits, U08, 246, [0:0], "Simple", "Advanced" feature4_0igntrig= bits, U08, 246, [1:1], "Off", "Ignition trigger indicator" feature4_0maxdwl = bits, U08, 246, [3:3], "Off", "On" feature4_0ftrig = bits, U08, 246, [4:5], "Off", "INVALID", "Simple", "Advanced" feature4_0mindwl = bits, U08, 246, [6:6], "Off", "On" feature4_0resyncdel = bits, U08, 246, [7:7], "Off", "On" timing_flags = bits, U08, 247, [0:0], "Use Table", "Fixed timing"; use_prediction = bits, U08, 247, [1:1], "No Prediction", "1st Deriv Prediction"; crank_dwell = scalar, U08, 248, "ms", 0.1000,0.00000,1.00,8.00,1 tsw_pin_f = bits, U08, 249, [0:5], $PIN_DIGIN, 14="Blend Curve (3)" crank_timing = scalar, S16, 250, "degrees", 0.10000,0.00000,-10.00,90.00,1; fixed_timing = scalar, S16, 252, "degrees", 0.10000,0.00000,-90.00,90.00,1; tsf_rpm = scalar, U16, 254, "rpm", 1, 0, 0, 20000, 0 tsf_kpa = scalar, S16, 256, "kPa", 0.1, 0, 0, 500, 1 tsf_tps = scalar, S16, 258, "%", 0.10000, 0.00000, 0.00, 100.00, 1; tss_rpm = scalar, U16, 260, "rpm", 1, 0, 0, 20000, 0 tss_kpa = scalar, S16, 262, "kPa", 0.1, 0, 0, 500, 1 tss_tps = scalar, S16, 264, "%", 0.10000, 0.00000, 0.00, 100.00, 1; ; feature5_0 266 f5_0_tsf = bits , U08, 266, [0:0], "Off", "On" f5_0_tsf_opt = bits , U08, 266, [1:3], "Hardware", "rpm", "kPa", "TPS", "On/Off VVT", "INVALID", "INVALID", "INVALID" f5_0_tss = bits , U08, 266, [4:4], "Off", "On" f5_0_tss_opt = bits , U08, 266, [5:7], "Hardware", "rpm", "kPa", "TPS", "On/Off VVT", "INVALID", "INVALID", "INVALID" tsw_pin_s = bits, U08, 267, [0:5], $PIN_DIGIN, 14="Blend Curve (4)" pwmidlecranktaper= scalar, U08, 268, "s", 1.00000, 0.00000, 0.00, 100.00, 0 knk_step_adv = scalar, U08, 269, "deg", 0.1, 0.0, 0.5, 10.0, 1 ; * ( 1 byte ) fc_rpm_upper = scalar, U16, 270, "rpm", 1.00000, 0.0, 0.0, 20000, 0 resyncdel_rpm = scalar, U16, 272, "rpm", 1.00000, 0.0, 0.0, 20000, 0 boost_ctl_upperlimit = scalar, S16, 274, "kPa",0.10000, 0.00000, 5, 500, 1 #if CELSIUS fc_clt = scalar, S16, 276, "°C", 0.05555, -320.000, -40.0, {clthighlim}, 1 ; * ( 2 bytes) #else fc_clt = scalar, S16, 276, "°F", 0.10000, 0.00000, -40.0, {clthighlim}, 1 #endif fc_delay = scalar, U08, 278, "s", 0.1, 0, 0, 5.0, 1 tacho_opt3f = bits, U08, 279, [0:6], $PIN_DIGOUT fc_ego_delay = scalar, U08, 280, "s", 1, 0, 0.00, 10, 0 tacho_opt80 = bits, U08, 281, [7:7], "Off", "On" ; tacho_opt2 tacho_optvar = bits, U08, 281, [6:6], "Fixed", "Variable" tacho_opt40 = bits, U08, 281, [5:5], "Normal", "Half speed" tacho_scale = scalar, U16, 282, "%", 0.1, 0, 10, 1000, 1 launch_opt2_ignorerpm = bits, U08, 284, [0:0], "Off", "On" slew_opts_tss = bits, U08, 285, [0:0], "Off", "On" slew_opts_blend4= bits, U08, 285, [1:2], "None", "Increasing", "Decreasing", "Both" feature3_tps = bits, U08, 286, [0:0], "Off", "On" feature3_aseunit= bits, U08, 286, [1:1], "Cycles", "0.1 seconds" feature3_maplog = bits, U08, 286, [2:2], "Off", "On" feature3_3 = bits, U08, 286, [3:3], "Off", "On" feature3_battv = bits, U08, 286, [4:4], "Off", "On" feature3_n2oin = bits, U08, 286, [5:5], "On", "Off" feature3_matase = bits, U08, 286, [6:6], "Off", "On" feature3_dwell = bits, U08, 286, [7:7], "Off", "On" launch_opt_vss = bits, U08, 287, [0:1], "Off", "VSS1", "VSS2", "INVALID" launch_opt_vssgear = bits, U08, 287, [2:2], "Off", "On" launch_opt_retard = bits, U08, 287, [3:3], "Off", "On" launch_opt_bank = bits, U08, 287, [4:5], "Off","Bank1", "Bank2", "Both" launch_opt_on = bits, U08, 287, [6:7], "Off", "Launch","INVALID","Launch/Flatshift" launch_sft_zone = scalar, S16, 288, "RPM", 1.00000, 0.00000, 100, 2000, 0 ; * ( 2 bytes) launch_sft_deg = scalar, S16, 290, "deg", 0.10000, 0.00000, -90.0, 180.00, 2 ; * ( 2 bytes) launch_hrd_lim = scalar, S16, 292, "RPM", 1.00000, 0.00000, 0.00, 20000, 0 ; * ( 2 bytes) launch_tps = scalar, S16, 294, "%", 0.10000, 0.00000, 0.0, 100.00, 0 ; launchlimopt = bits , U08, 296, [0:1], "None", "Spark Cut", "Fuel Cut", "Spark and fuel" ; * ( 1 byte) launchlimopt_adv= bits , U08, 296, [2:2], "Basic", "Advanced" launchlimopt_cut= bits , U08, 296, [3:4], "Random Progressive", "Random Ramped", "Fixed 5/7", "Fixed 4/5" launchlimopt_map= bits , U08, 296, [5:5], "Off", "On" launchvsstime = scalar, U08, 297, "s", 1, 0, 0, 255, 0 launchvss_maxgear= scalar, U08, 298, "", 1, 0, 1, 6, 0 launch_opt_pins = bits, U08, 299, [0:5], $PIN_DIGIN flats_arm = scalar, U16, 300, "RPM", 1.00000, 0.00000, 0.00, 20000, 0 launchvss_minvss = scalar, U16, 302, { bitStringValue( prefSpeedUnits , prefSpeedUnits ) }, { msToPrefUnitsScale }, 0.00000, 1, { maxspeed }, 1 flats_deg = scalar, S16, 304, "deg", 0.10000, 0.00000, -90.0, 180.00, 2 ; * ( 2 bytes) flats_hrd = scalar, U16, 306, "RPM", 1.00000, 0.00000, 0.00, 20000, 0 ; * ( 2 bytes) staged_pri_size = scalar, U16, 308, "cc", 1.00000, 0.00000, 0.0000, 15000.0, 0 ; * ( 2 bytes) staged_sec_size = scalar, U16, 310, "cc", 1.00000, 0.00000, 0.0000, 15000.0, 0 ; * ( 2 bytes) staged_first_param = bits, U08, 312, [0:2], "Off", "RPM", "MAP", "TPS", "Duty", "Table", "INVALID", "INVALID" staged_second_param = bits, U08, 312, [3:5], "Off", "RPM", "MAP", "TPS", "Duty", "INVALID", "INVALID", "INVALID" staged_transition_on = bits, U08, 312, [6:6], "Off", "On" staged_second_logic = bits, U08, 312, [7:7], "OR", "AND" staged_pw1_0 = bits, U08, 312, [7:7], "Off", "On" staged_transition_events = scalar, U08, 313, "ign events", 1.00000, 0.00000, 0.00, 255.0, 0 staged_param_1 = scalar, S16, 314, "units", 1.00000, 0.00000, 0.00, 25500.0, 0 staged_param_2 = scalar, S16, 316, "units", 1.00000, 0.00000, 0.00, 25500.0, 0 staged_hyst_1 = scalar, S16, 318, "units", 1.00000, 0.00000, 0.00, 25500.0, 0 staged_hyst_2 = scalar, S16, 320, "units", 1.00000, 0.00000, 0.00, 25500.0, 0 ; Nitrous System N2Oopt_01 = bits, U08, 322,[0:1],"INVALID","Bank1", "Bank2", "Both" N2Oopt_2 = bits, U08, 322,[2:2], "Off", "On" ; enables stage 1 N2Oopt_3 = bits, U08, 322,[3:3], "Off", "On" ; enables stage 2 N2Oopt_4 = bits, U08, 322,[4:4], "Off", "On" ; use AFR2 N2Oopt_5 = bits, U08, 322,[5:5], "Off", "On" ; nitrous + launch N2Oopt2_prog_time= bits, U08, 322,[6:7], "RPM-based", "Time-based", "VSS-based", "INVALID" ;input and output pins moved N2Oopt2_prog = bits, U08, 323,[0:0], "On/Off", "Progressive" N2Oopt2_fuel = bits, U08, 323,[1:1], "Use N2O duty", "Own curve" N2Oopt2_prog_freq= bits, U08, 323,[2:4], "INVALID", "78Hz", "39Hz", "26Hz", "19.5Hz", "15.6Hz", "13Hz", "11.1Hz" N2Oopt2_prog_freqf= bits, U08, 323,[5:7], "Same", "78Hz", "39Hz", "26Hz", "19.5Hz", "15.6Hz", "13Hz", "11.1Hz" N2ORpm = scalar, U16, 324, "RPM", 1, 0, 1000, 20000, 0 N2ORpmMax = scalar, U16, 326, "RPM", 1, 0, 1000, 20000, 0 N2OTps = scalar, S16, 328, "%", 0.10000, 0.00000, 0.00, 100.00, 1; #if CELSIUS N2OClt = scalar, S16, 330, "°C", 0.05555, -320.000, -40.0, {clthighlim}, 1 ; * ( 2 bytes) #else N2OClt = scalar, S16, 330, "°F", 0.10000, 0.00000, -40.0, {clthighlim}, 1 #endif N2OAngle = scalar, S16, 332, "deg", 0.10000, 0.00000, 0, 50, 2 ; * ( 2 bytes) N2OPWLo = scalar, S16, 334, "ms", 0.001, 0, -32, +32, 3 N2OPWHi = scalar, S16, 336, "ms", 0.001, 0, -32, +32, 3 ;nitrous/launch N2Odel_launch = scalar, U08, 338, "s", 0.01, 0, 0, 2.55, 2 N2Odel_flat = scalar, U08, 339, "s", 0.01, 0, 0, 2.55, 2 N2Oholdon = scalar, U08, 340, "s", 0.01, 0, 0, 2.55, 2 ;nitrous stage 2 ; Nitrous System N2O2delay = scalar, U08, 341, "s", 0.01, 0, 0, 2.55,2 N2O2Rpm = scalar, U16, 342, "RPM", 1, 0, 1000, 25000, 0 N2O2RpmMax = scalar, U16, 344, "RPM", 1, 0, 1000, 25000, 0 N2O2Angle = scalar, S16, 346, "deg", 0.10000, 0.00000, 0, 50, 2 ; * ( 2 bytes) N2O2PWLo = scalar, S16, 348, "ms", 0.001, 0, -32, +32, 3 N2O2PWHi = scalar, S16, 350, "ms", 0.001, 0, -32, +32, 3 RotarySplitModeFD = bits, U08, 352, [0:0], "FC mode", "FD mode" RotarySplitModeNeg = bits, U08, 352, [1:1], "Not Allowed", "Allowed" dlyct = scalar, U08, 353, "", 1,0,0,255,0 dwelltime_trl = scalar, U08, 354, "ms", 0.10000, 0, 0.1, 25.5, 1 N2Oopt_pins = bits, U08, 355, [0:5], $PIN_DIGIN RevLimRtdAng = scalar, S16, 356, "deg", 0.10000, 0.00000,-10, 25.5, 1 vss4_can_offset = scalar, U16, 358, "", 1.00000, 0.00000, 0.00, 65535, 0 ; RevLimNormal2_hyst= scalar,U16, 360, "RPM", 1.00000, 0.00000, 100, 1000, 0 pwmidleset_inv = bits, U08, 362, [3:3], "Normal, 0%=off", "Inverted, 100%=off" trig_init = scalar, U08, 363, "", 1,0,0,255,0 ;pwmidle pwmidle_ms = scalar, U16, 364, "ms", 1, 0.00000, 0, 500, 0 pwmidle_close_delay = scalar, U08, 366, "s", 1, 0.00000, 0, 10, 0 pwmidle_open_duty = scalar, U08, 367, "%", 0.392, 0.00000, 0, 100, 1 pwmidle_open_steps = scalar, U08, 367, "steps", 1.00000, 0.00000, 0, 255, 0 ; same but steps pwmidle_closed_duty = scalar, U08, 368, "%", 0.392, 0.00000, 0, 100, 1 pwmidle_closed_steps = scalar, U08, 368, "steps", 1.00000, 0.00000, 0, 255, 0 ; same but steps pwmidle_pid_wait_timer = scalar, U08, 369, "s", 0.1, 0.00000, 1, 10, 0 pwmidle_freq_pin3 = bits, U08, 370, [0:3], $PIN_HWPWMOUT_FIDLE3 pwmidle_freq_koeo = bits, U08, 370, [7:7], "Off", "On" ac_idleup_min_rpm = scalar, U16, 371, "rpm", 1, 0, 0, 20000, 0 pwmidle_flags_wot = bits, U08, 373, [0:0], "Off", "On" slew_rate_global = scalar, U08, 374, "deg/tenth", 1, 0.00000, 1, 40, 0 pwmidle_dp_adder = scalar, U08, 375, "%", 0.392, 0.00000, 0, 20, 1 pwmidle_dp_adder_steps = scalar, U08, 375, "steps", 1.00000, 0.00000, 0, 51, 0 ; same but steps (51 steps = 20%) n2o_opt3_pedal = bits, U08, 376, [0:0], "Re-start", "Continue" n2o_opt3_enable2 = bits, U08, 376, [1:1], "Off", "On" n2o_pedal_time = scalar, U08, 377, "s", 0.1, 0.0, 0, 2, 1 n2o_enable2_pin = bits, U08, 378, [0:5], $PIN_DIGIN blend4LF = scalar, U08, 379, "%", 1, 0, 1, 100, 0 pwmidle_Kp_new = scalar, U16, 380, "%", 0.1, 0.00000, 0, 200, 1 pwmidle_Ki_new = scalar, U16, 382, "%", 0.1, 0.00000, 0, 200, 1 pwmidle_Kd_new = scalar, U16, 384, "%", 0.1, 0.00000, 0, 200, 1 pwmidle_freq_scale = bits, U08, 386, [0:3], "1021Hz", "766Hz", "613Hz", "511Hz", "383Hz", "306Hz", "204Hz", "153Hz", "99Hz", "75Hz", "50Hz", "48Hz", "30Hz", "20Hz", "15Hz", "12Hz" pwmidle_freq_pin = bits, U08, 386, [4:6], $PIN_HWPWMOUT boost_ctl_settings_freq = bits, U08, 387, [0:2], "INVALID", "78Hz", "39Hz", "26Hz", "19.5Hz", "15.6Hz", "13Hz", "11.1Hz" boost_ctl_settings_on = bits, U08, 387, [3:3], "Off","On" boost_ctl_settings_cl = bits, U08, 387, [4:4], "Open-loop", "Closed-loop" boost_ctl_settings_invert_new= bits, U08, 387, [5:5], "Normal", "Inverted" boost_ctl_settings_dome = bits, U08, 387, [6:6], "Single Solenoid", "Dome Control" boost_ctl_settings_biasonly = bits, U08, 387, [7:7], "Off", "On" boost_ctl_pins = bits, U08, 388, [0:6], $PIN_DIGOUT_OFF boost_ctl_Kp = scalar, U08, 389, "%", 1, 0.00000, 0, 200, 0 boost_ctl_Ki = scalar, U08, 390, "%", 1, 0.00000, 0, 200, 0 boost_ctl_Kd = scalar, U08, 391, "%", 1, 0.00000, 0, 200, 0 boost_ctl_closeduty = scalar, U08, 392, "%", 1, 0.00000, 0, 100, 0 boost_ctl_openduty = scalar, U08, 393, "%", 1, 0.00000, 0, 100, 0 boost_ctl_pwm_scale = bits, U08, 396, [0:3], "1021Hz", "766Hz", "613Hz", "511Hz", "383Hz", "306Hz", "204Hz", "153Hz", "99Hz", "75Hz", "50Hz", "48Hz", "30Hz", "20Hz", "15Hz", "12Hz" boost_ctl_pwm = bits, U08, 396, [4:5], "INVALID", "INVALID","Slow", "INVALID" NoiseFilterOpts = bits, U08, 397, [0:0], "Off", "On" NoiseFilterOpts1 = bits, U08, 397, [1:1], "Off", "On" NoiseFilterOpts2 = bits, U08, 397, [2:2], "Off", "On" NoiseFilterOpts3 = bits, U08, 397, [3:3], "Off", "On" launchcuttiming = scalar, S16, 398, "deg", 0.10000, 0.00000, -50.00, 50.00, 1 pwmidle_max_rpm_new = scalar, U16, 400, "", 1, 0.00000, 0, 4000, 0 pwmidle_targ_ramptime = scalar, U08, 402, "s", 1, 0.00000, 0, 10, 0 boost_ctl_pins_pwm = bits, U08, 403, [0:2], $PIN_HWPWMOUT vss_opt1 = bits, U08, 404, [0:4], $VSS_OPTS vss_opt2 = bits, U08, 405, [0:4], $VSS_OPTS vss_opt3 = bits, U08, 406, [0:4], $VSS_OPTS_OFF vss_opt4 = bits, U08, 407, [0:4], $VSS_OPTS_OFF boost_ctl_range1 = scalar, U08, 408, "%", 1, 0.00000, 1, 100, 0 prefFuelPressUnits = bits, U08, 409, [0:1], "kPa.d", "psi.d", "bar.d", "INVALID" ; gap 18 bytes secondtrigopts = bits, U08, 428, [0:0], "Off", "On" secondtrigopts1 = bits, U08, 428, [1:1], "Off", "On" secondtrigopts2 = bits, U08, 428, [2:2], "Off", "On" secondtrigopts3 = bits, U08, 428, [3:3], "Off", "On" TC5_required_width = scalar, U16, 429, "uSec", 1.0, 0.00000, 0.00, 5000, 0 ; egoLimit = scalar, S16, 431, "%", 0.10000, 0.00000, 0.00, 50, 0 ; stoich = scalar, S16, 433, "AFR", 0.10000, 0.00000, 0.00, 25.5, 1 ; MAPOXMin = scalar, S16, 435, "%", 0.10000, 0.00000, -10, 500, 2 ; * ( 2 bytes) IC2ISR_tmask = scalar, U08, 437, "ms", 0.1, 0.0, 0.0, 25.5, 1 ; * ( 1 byte ) IC2ISR_pmask = scalar, U08, 438, "%", 1.0, 0.0, 0.0, 90, 0 ; * ( 1 byte ) ;afrload and eaeload are part of extra_load_opts in firmware afrload = bits, U08, 439, [0:3], "Use primary load (Algorithm)", "MAP", "% baro", "TPS", "INVALID", "MAF", "ITB", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID" eaeload = bits, U08, 439, [4:7], "Use primary load (Algorithm)", "MAP", "% baro", "TPS", "INVALID", "MAF", "ITB", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID" ; airden_scaling = scalar, U08, 440, "%", 1, 0.00000, 0, 150.00, 0 fan_idleup_vss_hyst = scalar, U16, 441, { bitStringValue( prefSpeedUnits , prefSpeedUnits ) }, { msToPrefUnitsScale }, 0, 0, { maxspeed }, 0 log_style_led = bits, U08, 443, [0:6], $PIN_DIGOUT_CANOUT_OFF primedelay = scalar, U08, 444, "s", 0.1, 0.0, 0.0, 3, 1 pwmidle_cl_opts_initvaluetable = bits, U08, 445, [0:0], "Use last value", "Use initial value table" pwmidle_cl_opts_initval_clt = bits, U08, 445, [1:1], "Use MAT", "Use CLT" pwmidle_cl_opts_display_pid = bits, U08, 445, [2:2], "Basic", "Advanced" boost_ctl_flags = bits, U08, 446, [0:1], "INVALID", "Setup Mode", "Basic Mode", "Advanced Mode" boost_ctl_flags2 = bits, U08, 446, [2:3], "INVALID", "Setup Mode", "Basic Mode", "Advanced Mode" idleveadv_to_pid_idleadv = bits, U08, 447, [0:0], "Use Engine State", "Use PID idle activation" idleveadv_to_pid_idleve = bits, U08, 447, [1:1], "Use Engine State", "Use PID idle activation" boost_ctl_sensitivity = scalar, S16, 448, "", 0.1, 0, 0, 500, 1 boost_ctl_sensitivity2 = scalar, S16, 450, "", 0.1, 0, 0, 500, 1 fuelcut_fuelon_upper_rpmdot = scalar, U16, 452, "rpmdot", 10, 0, 0, 10000, 0 fuelcut_fuelon_lower_rpmdot = scalar, U16, 454, "rpmdot", 10, 0, 0, 10000, 0 staged_secondary_enrichment = scalar, U16, 456, "ms", 0.001, 0, 0, 10, 3 staged_primary_delay = scalar, U08, 458, "ign events", 1, 0, 0, 30, 0 idleadvance_on = bits, U08, 459, [0:0], "Off", "On" ; idleve_on = bits, U08, 459, [1:1], "Off", "On" idleadv_vsson = bits, U08, 459, [4:5], "Off", "VSS1", "VSS2", "INVALID" idle_special_ops_timing_assist = bits, U08, 459, [6:6], "Off", "On" ; dummy 6 bytes #if CELSIUS idleadvance_clt = scalar, S16, 466, "°C", 0.05555, -320, -40, {clthighlim}, 1 #else idleadvance_clt = scalar, S16, 466, "°F", 0.10000, 0.00000, -40, {clthighlim}, 1 #endif idleadvance_delay = scalar, U08, 468, "s", 1, 0, 0, 5, 0 idleadvance_curve = array, S16, 469, [ 4 ], "deg", 0.10000, 0.00000, -10.00, 90.00, 1 idleadvance_loads = array, S16, 477, [ 4 ], "%", 0.10000, 0.00000, 0, 100, 1 ;SD datalogging log_style2_but = bits, U08, 485, [0:5], $PIN_DIGIN log_style_block = bits, U08, 486, [0:1], "64 byte", "64 byte + stream", "128 byte", "INVALID" log_style_gps = bits, U08, 486, [5:5], "Off", "On" ; log_style_on = bits, U08, 486, [6:7], "Disabled", "Insertion", "Button", "Trigger" ; old names log_style_on2 = bits, U08, 486, [6:7], "Disabled", "Always", "Button", "Trigger" ; new names log_style2_cont = bits, U08, 487, [0:0], "Start new log", "Stop after log" log_style2_alwaysin=bits,U08,487, [1:1], "Use detect switch", "Always in" log_style2_samp = bits, U08, 487, [3:4], "Timed", "every tooth", "every cycle", "INVALID" log_style2_clg = bits, U08, 487, [5:5], "Off", "On" log_style_ledspd = bits, U08, 487, [6:7], "Normal", "Slower", "Faster", "Fastest" ; note old name -moved log_style2_ledspd = bits, U08, 487, [6:7], "Normal", "Slower", "Faster", "Fastest" ; new name log_style3_adc = bits, U08, 488, [0:2], "INT_MAP", "INVALID", "INVALID", "Analog In 3", "Analog In 1", "Analog In 2", "INVALID", "INVALID" log_length = scalar, U08, 489, "mins", 1, 0, 1, 255, 0 log_int = scalar, U16, 490, "ms", 0.128,0,2.0,8388,1 log_rate = scalar, U16, 490, "", 1.0, { (1000/log_int) - (log_int/ 0.128) },0,1000,0 canegt_base = scalar, U16, 492, "", 1, 0, 1, 2047, 0 canegt_base2 = scalar, U16, 494, "", 1, 0, 1, 2047, 0 fanctl1_mode = bits, U08, 496, [0:0], "On/Off", "PWM variable" fanctl1_inv = bits, U08, 496, [1:1], "Normal", "Inverted" fanctl1_freq = bits, U08, 497, [0:3], "INVALID", "INVALID", "250Hz", "225Hz", "200Hz", "175Hz", "150Hz", "125Hz", "100Hz", "78Hz", "39Hz", "26Hz", "19.5Hz", "15.6Hz", "13Hz", "11.1Hz" fanctl1_duty_off = scalar, U08, 498, "%", 1,0,0,100,0 fanctl1_duty_min = scalar, U08, 499, "%", 1,0,0,100,0 fanctl1_duty_full = scalar, U08, 500, "%", 1,0,0,100,0 ;spare501 #if CELSIUS fanctl1_temp_full = scalar, S16, 502, "°C", 0.05555, -320, -40, 150.00, 1 #else fanctl1_temp_full = scalar, S16, 502, "°F", 0.10000, 0.00000, -40, 300, 1 #endif boost_ctl_upperlimit2 = scalar, S16, 504, "kPa",0.10000, 0.00000, 5, 500, 1 boost_ctl_rate_disable = scalar, S16, 506, "kPa/sec", 1, 0.00000, 5, 500, 0 boost_ctl_rate_disable2 = scalar, S16, 508, "kPa/sec", 1, 0.00000, 5, 500, 0 canego_base = scalar, U16, 510, "", 1, 0, 1, 2047, 0 ;168 bytes free ; big gap 2 testval1 = scalar, U16, 680, "", 1,0,0,65535,0 testval2 = scalar, U16, 682, "", 1,0,0,65535,0 firea = scalar, U08, 684, "", 1,0,0,16,0 fireb = scalar, U08, 685, "", 1,0,0,16,0 firec = scalar, U08, 686, "", 1,0,0,16,0 fired = scalar, U08, 687, "", 1,0,0,16,0 firee = scalar, U08, 688, "", 1,0,0,16,0 firef = scalar, U08, 689, "", 1,0,0,16,0 fireg = scalar, U08, 690, "", 1,0,0,16,0 fireh = scalar, U08, 691, "", 1,0,0,16,0 firei = scalar, U08, 692, "", 1,0,0,16,0 firej = scalar, U08, 693, "", 1,0,0,16,0 firek = scalar, U08, 694, "", 1,0,0,16,0 firel = scalar, U08, 695, "", 1,0,0,16,0 firem = scalar, U08, 696, "", 1,0,0,16,0 firen = scalar, U08, 697, "", 1,0,0,16,0 fireo = scalar, U08, 698, "", 1,0,0,16,0 firep = scalar, U08, 699, "", 1,0,0,16,0 sequential = bits, U08, 700, [0:1], "Off", "Semi-sequential", "Fully Sequential", "INVALID" sequential_angle_spec = bits, U08, 700, [2:4], "INVALID", "End of squirt", "Middle of Squirt", "INVALID", "Beginning of squirt", "INVALID", "INVALID", "INVALID" sequential_trim_on_off = bits, U08, 700, [5:5], "Off", "On" boost_launch_duty = scalar, U08, 701, "%", 1,0,0,100,0 boost_launch_target = scalar, U16, 702, "kPa", 0.1,0,0,700,1 boost_feats_tsw = bits, U08, 704, [0:5], $PIN_DIGIN_OFF, 14="Blend Curve(6)", 15="Gear" boost_feats_launch = bits, U08, 704, [7:7], "Off", "On" boost_feats_timed = bits, U08, 704, [6:6], "Off", "On" ;see lower for launch_var_on launch_3step_in = bits, U08, 705, [0:5], $PIN_DIGIN_OFF launch_var_low = scalar, U16, 706, "rpm", 1,0,0,20000,0 launch_var_up = scalar, U16, 708, "rpm", 1,0,0,20000,0 vssout_scale = scalar, U32, 710, "", 1, 0, 0, 300000, 0 launch_sft_deg3 = scalar, S16, 714, "deg", 0.10000, 0.00000, -90.0, 180.00, 2 ; * ( 2 bytes) launch_hrd_lim3 = scalar, U16, 716, "RPM", 1.00000, 0.00000, 0.00, 20000, 0 ; * ( 2 bytes) map_sample_duration = scalar, S16, 718, "deg", 0.10000, 0.00000, 0, 180, 1 ; * ( 2 bytes ) opentime_opt1_master = bits, U08, 720, [7:7], "Same", "Individual" opentime_opt1_table = bits, U08, 720, [6:6], "Voltage Curve", "Voltage/Pressure Table" #define OPENTIME_OPTS = "Curve/Table 1", "Curve/Table 2", "Curve/Table 3", "Curve/Table 4" opentime_opt1 = bits, U08, 720, [0:1], $OPENTIME_OPTS opentime_opt2 = bits, U08, 721, [0:1], $OPENTIME_OPTS opentime_opt3 = bits, U08, 722, [0:1], $OPENTIME_OPTS opentime_opt4 = bits, U08, 723, [0:1], $OPENTIME_OPTS opentime_opt5 = bits, U08, 724, [0:1], $OPENTIME_OPTS opentime_opt6 = bits, U08, 725, [0:1], $OPENTIME_OPTS opentime_opt7 = bits, U08, 726, [0:1], $OPENTIME_OPTS opentime_opt8 = bits, U08, 727, [0:1], $OPENTIME_OPTS opentime_opta = bits, U08, 728, [0:1], $OPENTIME_OPTS opentime_opta_pwm= bits, U08, 728, [4:4], "Off", "On" opentime_opta_ph = bits, U08, 728, [5:5], "4A/1A", "8A/2A" opentime_optb = bits, U08, 729, [0:1], $OPENTIME_OPTS opentime_optb_pwm= bits, U08, 729, [4:4], "Off", "On" opentime_optb_own= bits, U08, 729, [5:5], "Off", "On" opentime_opt11 = bits, U08, 730, [0:1], $OPENTIME_OPTS opentime_opt12 = bits, U08, 731, [0:1], $OPENTIME_OPTS opentime_opt13 = bits, U08, 732, [0:1], $OPENTIME_OPTS opentime_opt14 = bits, U08, 733, [0:1], $OPENTIME_OPTS opentime_opt15 = bits, U08, 734, [0:1], $OPENTIME_OPTS opentime_opt16 = bits, U08, 735, [0:1], $OPENTIME_OPTS ; opentime_opt17 = bits, U08, 736, [0:1], $OPENTIME_OPTS ; opentime_opt18 = bits, U08, 737, [0:1], $OPENTIME_OPTS smallpw_opt1_master = bits, U08, 738, [7:7], "Off", "On" smallpw_opt1 = bits, U08, 738, [0:1], "Curve 1", "Curve 2", "Curve 3", "Curve 4" smallpw_opt2 = bits, U08, 739, [0:1], "Curve 1", "Curve 2", "Curve 3", "Curve 4" smallpw_opt3 = bits, U08, 740, [0:1], "Curve 1", "Curve 2", "Curve 3", "Curve 4" smallpw_opt4 = bits, U08, 741, [0:1], "Curve 1", "Curve 2", "Curve 3", "Curve 4" smallpw_opt5 = bits, U08, 742, [0:1], "Curve 1", "Curve 2", "Curve 3", "Curve 4" smallpw_opt6 = bits, U08, 743, [0:1], "Curve 1", "Curve 2", "Curve 3", "Curve 4" smallpw_opt7 = bits, U08, 744, [0:1], "Curve 1", "Curve 2", "Curve 3", "Curve 4" smallpw_opt8 = bits, U08, 745, [0:1], "Curve 1", "Curve 2", "Curve 3", "Curve 4" smallpw_opta = bits, U08, 746, [0:1], "Curve 1", "Curve 2", "Curve 3", "Curve 4" smallpw_optb = bits, U08, 747, [0:1], "Curve 1", "Curve 2", "Curve 3", "Curve 4" smallpw_opt11 = bits, U08, 748, [0:1], "Curve 1", "Curve 2", "Curve 3", "Curve 4" smallpw_opt12 = bits, U08, 749, [0:1], "Curve 1", "Curve 2", "Curve 3", "Curve 4" smallpw_opt13 = bits, U08, 750, [0:1], "Curve 1", "Curve 2", "Curve 3", "Curve 4" smallpw_opt14 = bits, U08, 751, [0:1], "Curve 1", "Curve 2", "Curve 3", "Curve 4" smallpw_opt15 = bits, U08, 752, [0:1], "Curve 1", "Curve 2", "Curve 3", "Curve 4" smallpw_opt16 = bits, U08, 753, [0:1], "Curve 1", "Curve 2", "Curve 3", "Curve 4" ; smallpw_opt17 = bits, U08, 754, [0:1], "Curve 1", "Curve 2", "Curve 3", "Curve 4" ; smallpw_opt18 = bits, U08, 755, [0:1], "Curve 1", "Curve 2", "Curve 3", "Curve 4" maxafr_opt1_on = bits, U08, 756, [0:0], "Off", "On" maxafr_opt1_load= bits,U08, 756, [1:2], "MAP", "TPS", "INVALID", "INVALID" maxafr_opt1_led = bits,U08, 757, [0:6], $PIN_DIGOUT_CANOUT_OFF maxafr_en_load = scalar, U16, 758, "%", 0.10000, 0, 0, 500, 1 maxafr_en_rpm = scalar, U16, 760, "rpm", 1, 0, 0, 20000, 0 maxafr_en_time = scalar, U16, 762, "s", 0.001, 0, 0, 5.000, 1 maxafr_spkcut_time=scalar, U16, 764, "s", 0.001, 0, 0, 5.000, 2 maxafr_ret_tps = scalar, S16, 766, "%", 0.10000, 0, 0, 110, 1 maxafr_ret_map = scalar, S16, 768, "%", 0.10000, 0, 0, 500, 1 maxafr_ret_rpm = scalar, U16, 770, "rpm", 1, 0, 0, 20000, 1 launch_addfuel = scalar, S16, 772, "ms", 0.001, 0.0000, -32, +32, 3 wheeldia1 = scalar, U16, 774, { bitStringValue( prefLengthUnits , prefLengthUnits ) }, { prefLengthUnits == 0 ? 0.001 : 0.03937 }, 0, { prefLengthUnits == 0 ? 0.3 : 12 }, { prefLengthUnits == 0 ? 2 : 79 }, 3;{ prefLengthUnits == 0 ? 3 : 1 } wheeldia2 = scalar, U16, 778, { bitStringValue( prefLengthUnits , prefLengthUnits ) }, { prefLengthUnits == 0 ? 0.001 : 0.03937 }, 0, { prefLengthUnits == 0 ? 0.3 : 12 }, { prefLengthUnits == 0 ? 2 : 79 }, 3;{ prefLengthUnits == 0 ? 3 : 1 } fdratio1 = scalar, U16, 776, ":1", 0.01, 0.00000, 0.40, 6.0, 2 ; * ( 2 bytes) ;not a gap vss1_pos = bits, U08, 780, [0:1], "Wheel", "Driveline", "Pulses per mile", "Pulses per km" vss2_pos = bits, U08, 780, [2:3], "Wheel", "Driveline", "Pulses per mile", "Pulses per km" launch_var_on = bits, U08, 781, [0:5], $PIN_ADCS_OFF flats_minvss = scalar, U16, 782, { bitStringValue( prefSpeedUnits , prefSpeedUnits ) }, { msToPrefUnitsScale }, 0.00000, 0.00, { maxspeed }, 0 ; * ( 2 bytes) ;gap vss1_an = bits, U08, 785,[0:5], $PIN_ADCS vss1_can_id = scalar, U08, 786, "", 1.00000, 0.00000, 0.00, 255, 0 ; tsw_pin_ob = bits, U08, 787, [0:5], $PIN_DIGIN_OFF vss1_can_offset = scalar, U16, 788, "", 1.00000, 0.00000, 0.00, 65535, 0 ; vss2_can_offset = scalar, U16, 790, "", 1.00000, 0.00000, 0.00, 65535, 0 ; MapThreshXTD = scalar, U08, 792, "-kpa/sec", 1.00000, 0.00000, 0.00, 255.00, 0 ; MapThreshXTD2 = scalar, U08, 793, "-kpa/sec", 1.00000, 0.00000, 0.00, 255.00, 0 ; vss_opt0_1 = bits, U08, 794, [0:1], "Off", "Digital", "Analogue", "INVALID" vss_opt0_2 = bits, U08, 794, [2:3], "Off", "Digital", "Analogue", "INVALID" vss_opt0_3 = bits, U08, 794, [4:4], "Off", "On" vss_opt0_4 = bits, U08, 794, [6:6], "Off", "On" ; 1 gap ss_opt1 = bits, U08, 796, [0:3], $SS_OPTS_OFF1 ss_opt1_spd = bits, U08, 796, [7:7], "Off", "On" vss2_an = bits, U08, 797,[0:5], $PIN_ADCS ss1_pwmseq = scalar, U08, 798, "", 1.00000, 0.00000, 1, 4, 0 ss2_pwmseq = scalar, U08, 799, "", 1.00000, 0.00000, 1, 4, 0 gear_can_offset = scalar, U16, 800, "", 1.00000, 0.00000, 0.00, 65535, 0 ; mapsample_opt1 = bits, U08, 802, [0:1], "1", "2", "4", "INVALID" mapsample_opt2 = bits, U08, 802, [2:2], "Use timed min", "Use event average" map2port = bits, U08, 803, [0:5], $PIN_ADCS_OFF n2o1n_pins = bits, U08, 804, [0:6], $PIN_DIGOUT n2o1f_pins = bits, U08, 805, [0:6], $PIN_DIGOUT, 0="Same" n2o2n_pins = bits, U08, 806, [0:6], $PIN_DIGOUT n2o2f_pins = bits, U08, 807, [0:6], $PIN_DIGOUT, 0="Same" ; these an_max did use msToPrefUnitsScale, but that didn't change the values in real time vss1_an_max = scalar, U16, 808, { bitStringValue( prefSpeedUnits , prefSpeedUnits ) }, { prefSpeedUnits == 0 ? 0.22369 : 0.36 }, 0.00000, 0.00, 1000, 0 vss2_an_max = scalar, U16, 810, { bitStringValue( prefSpeedUnits , prefSpeedUnits ) }, { prefSpeedUnits == 0 ? 0.22369 : 0.36 }, 0.00000, 0.00, 1000, 0 tsw_pin_rf = bits, U08, 812, [0:5], $PIN_DIGIN_OFF tsw_pin_afr = bits, U08, 813, [0:5], $PIN_DIGIN_OFF, 14="Blend curve(5)" tsw_pin_stoich = bits, U08, 814, [0:5], $PIN_DIGIN_OFF boost_vss = bits, U08, 815, [0:2], "Off", "VSS1", "VSS2", "Gear", "Time since launch", "INVALID", "INVALID", "INVALID" boost_vss_biasgear = bits, U08, 815, [3:3], "Off", "On" ReqFuel_alt = scalar, U16, 816, "ms", 0.001, 0.00000, 0.00, 65.535, 2 stoich_alt = scalar, S16, 818, "AFR", 0.10000, 0.00000, 0.00, 25.5, 1 water_pins_pump = bits, U08, 820, [0:6], $PIN_DIGOUT_CANOUT_OFF water_pins_valve = bits, U08, 821, [0:6], $PIN_DIGOUT_OFF water_pins_in_shut = bits, U08, 822, [0:5], $PIN_DIGIN_OFF water_freq_on = bits, U08, 823,[0:0], "Off", "On" water_freq = bits, U08, 823,[1:4], "INVALID", "INVALID", "250Hz", "225Hz", "200Hz", "175Hz", "150Hz", "125Hz", "100Hz", "78Hz", "39Hz", "26Hz", "19.5Hz", "15.6Hz", "13Hz", "11.1Hz" water_freq_type = bits, U08, 823,[5:6], "Off", "Fast", "Slow", "INVALID" boost_vss_tps = scalar, U16, 824, "%", 0.1, 0, 0, 100, 0 water_tps = scalar, S16, 826, "%", 0.1, 0, 0, 100, 0 water_rpm = scalar, U16, 828, "RPM", 1, 0, 0, 20000, 0 water_map = scalar, S16, 830, "kPa", 0.1, 0, 0, 500, 1 #if CELSIUS water_mat = scalar, S16, 832, "°C", 0.05555, -320, -40, 150.00, 1 #else water_mat = scalar, S16, 832, "°F", 0.10000, 0.00000, -40, 300, 1 #endif boost_ctl_lowerlimit = scalar, S16, 836, "kPa",0.10000, 0.00000, 5, 500, 1 enable_pollADC = bits, U08, 838, [0:0], "Disable", "Enable" ; enable_poll enable_pollPWM = bits, U08, 838, [1:2], "Disable", "16bit", "32bit", "INVALID" enable_pollports_digin = bits, U08,838, [3:3], "Disable", "Enable" enable_pollports_digout = bits,U08,838, [4:5], "Disable", "One", "Two", "INVALID" enable_pwmout = bits,U08,838, [6:6], "Disable", "Enable" enable_pwmout255 = bits,U08,838, [7:7], "Disable", "Enable" poll_table_rtc = scalar, U08, 839, "", 1.00000, 0.00000, 0, 15, 0 poll_tablePWM = scalar, U08, 840, "", 1.00000, 0.00000, 0, 15, 0 ; * ( 1 byte) poll_tableports = scalar, U08, 841, "", 1.00000, 0.00000, 0, 15, 0 ; * ( 1 byte) poll_offset_rtc = scalar, S16, 842, "bytes", 1.00000, 0.00000, 0, 4095, 0 poll_offsetPWM = scalar, S16, 844, "bytes", 1.00000, 0.00000, 0, 4095, 0 ; can_poll_digin_offset = scalar, S16, 846, "bytes", 1.00000, 0.00000, 0, 4095, 0 ; can_poll_digout_offset = scalar, S16, 848, "bytes", 1.00000, 0.00000, 0, 4095, 0 ; egt_num = bits, U08, 850, [0:4], "Off", "1", "2", "3", "4", "5", "6", "7", "8", "9", "10", "11", "12", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID" accXport = bits, U08, 851, [0:5], $PIN_ADCS_OFF accYport = bits, U08, 852, [0:5], $PIN_ADCS_OFF accZport = bits, U08, 853, [0:5], $PIN_ADCS_OFF accXcal1 = scalar, S16, 854, "ADC", 1, 0, 0, 4095, 0 accXcal2 = scalar, S16, 856, "ADC", 1, 0, 0, 4095, 0 accYcal1 = scalar, S16, 858, "ADC", 1, 0, 0, 4095, 0 accYcal2 = scalar, S16, 860, "ADC", 1, 0, 0, 4095, 0 accZcal1 = scalar, S16, 862, "ADC", 1, 0, 0, 4095, 0 accZcal2 = scalar, S16, 864, "ADC", 1, 0, 0, 4095, 0 accxyzLF = scalar, U08, 866, "%", 1, 0, 10, 100, 0 egt1port = bits, U08, 867, [0:5], $PIN_ADCS_OFF egt2port = bits, U08, 868, [0:5], $PIN_ADCS_OFF egt3port = bits, U08, 869, [0:5], $PIN_ADCS_OFF egt4port = bits, U08, 870, [0:5], $PIN_ADCS_OFF egt5port = bits, U08, 871, [0:5], $PIN_ADCS_OFF egt6port = bits, U08, 872, [0:5], $PIN_ADCS_OFF egt7port = bits, U08, 873, [0:5], $PIN_ADCS_OFF egt8port = bits, U08, 874, [0:5], $PIN_ADCS_OFF egt9port = bits, U08, 875, [0:5], $PIN_ADCS_OFF egt10port = bits, U08, 876, [0:5], $PIN_ADCS_OFF egt11port = bits, U08, 877, [0:5], $PIN_ADCS_OFF egt12port = bits, U08, 878, [0:5], $PIN_ADCS_OFF egt13port = bits, U08, 879, [0:5], $PIN_ADCS_OFF egt14port = bits, U08, 880, [0:5], $PIN_ADCS_OFF egt15port = bits, U08, 881, [0:5], $PIN_ADCS_OFF egt16port = bits, U08, 882, [0:5], $PIN_ADCS_OFF egt_conf_action = bits, U08, 883, [0:0], "Off", "On" egt_conf_shutdown = bits, U08, 883, [1:1], "Off", "On" egt_conf_bank = bits, U08, 883, [2:3], "INVALID", "Bank 1", "Bank 2", "Both" egt_conf_percyl = bits, U08, 883, [4:4], "Off", "On" egt_conf_input = bits, U08, 883, [5:5], "Manual", "CANEGT broadcast" egt_conf_numbering= bits, U08, 883, [6:6], "1234", "1357" ;EGT calibration #if CELSIUS egtcal_temp0 = scalar, S16, 884, "°C", 0.05555, -320, -40, 1500, 0 egtcal_tempmax= scalar, S16, 886, "°C", 0.05555, -320, -40, 1500, 0 egt_warn = scalar, S16, 888, "°C", 0.05555, -320, -40, 1500, 0 egt_max = scalar, S16, 890, "°C", 0.05555, -320, -40, 1500, 0 #else egtcal_temp0 = scalar, S16, 884, "°F", 0.1, 0, -40, 2700, 0 egtcal_tempmax= scalar, S16, 886, "°F", 0.1, 0, -40, 2700, 0 egt_warn = scalar, S16, 888, "°F", 0.1, 0, -40, 2700, 0 egt_max = scalar, S16, 890, "°F", 0.1, 0, -40, 2700, 0 #endif egt_time = scalar, U16, 892, "s", 0.001, 0, 0, 10, 2 vss1_can_scale= scalar, U16, 894, "%", 0.1, 0, 0, 6553, 1 vss1_can_scale_pulse= scalar, U16, 894, "", 1, 0, 0, 65535, 0 vss2_can_scale= scalar, U16, 896, "%", 0.1, 0, 0, 6553, 1 vss2_can_scale_pulse= scalar, U16, 896, "", 1, 0, 0, 65535, 0 vss1_pwmseq = scalar, U08, 898, "", 1.00000, 0.00000, 1, 4, 0 vss2_pwmseq = scalar, U08, 899, "", 1.00000, 0.00000, 1, 4, 0 MAFOption = bits, U08, 900, [0:5], $PIN_ADCS MAFOption_t = bits, U08, 900, [6:7], "Voltage", "Frequency", "Off", "INVALID" enginesize = scalar, U16, 901, "cc", 1.00000, 0.00000, 0, 65536, 0 vssout_opt = bits, U08, 903, [0:6], $PIN_DIGOUT_OFF vss3_can_offset = scalar, U16, 904, "", 1.00000, 0.00000, 0.00, 65535, 0 ; vss1_can_size = bits, U08, 906, [0:0], "8bit", "16bit" vss2_can_size = bits, U08, 906, [1:1], "8bit", "16bit" ;vssout_optunits in vss_can_size byte vssout_optunits= bits, U08, 906, [2:3], "Time", "Pulses per mile", "Pulses per km", "INVALID" ;MAF Freq options in vss_can_size byte MAFOption_f = bits, U08, 906, [6:7], $PIN_HWFREQIN canpwm_clk = scalar, U08, 907, "MHz", 1,0,0,100,0 canpwm_pre = scalar, U08, 908, "", 1,0,0,255,0 canpwm_div = scalar, U08, 909, "", 1,0,0,255,0 vss1_can_table = scalar, U08, 910, "", 1,0,0,255,0 feature7_mafmat = bits, U08, 911, [0:0], "Off", "On" feature7_maftrim = bits, U08, 911, [1:1], "Off", "On" feature7_aeevents= bits, U08, 911, [3:3], "Time", "Events" feature7_aetpswot= bits, U08, 911, [4:4], "Off", "On" feature7_batchcrank= bits,U08, 911, [5:5], "Off", "On" feature7_cranktaper= bits,U08, 911, [6:6], "Off", "On" feature7_crtpunits= bits, U08, 911, [7:7], "Time", "Events" vss1LF = scalar, U08, 912, "", 1,0,10,100,0 vss2LF = scalar, U08, 913, "", 1,0,10,100,0 ss1LF = scalar, U08, 914, "", 1,0,10,100,0 ss2LF = scalar, U08, 915, "", 1,0,10,100,0 egt_addfuel = scalar, U16, 916, "ms", 0.001, 0.00000, 0.00, 65.535, 2 launch_fcut_rpm= scalar, U16, 918, "RPM", 1, 0, 1000, 65000, 0 ;gear ratios gear1ratio = scalar, U16, 920, ":1", 0.01, 0.00000, 0.40, 5.0, 2 ; * ( 2 bytes) gear2ratio = scalar, U16, 922, ":1", 0.01, 0.00000, 0.40, 5.0, 2 ; * ( 2 bytes) gear3ratio = scalar, U16, 924, ":1", 0.01, 0.00000, 0.40, 5.0, 2 ; * ( 2 bytes) gear4ratio = scalar, U16, 926, ":1", 0.01, 0.00000, 0.40, 5.0, 2 ; * ( 2 bytes) gear5ratio = scalar, U16, 928, ":1", 0.01, 0.00000, 0.40, 5.0, 2 ; * ( 2 bytes) gear6ratio = scalar, U16, 930, ":1", 0.01, 0.00000, 0.40, 5.0, 2 ; * ( 2 bytes) gear_method = bits, U08, 932, [0:1], "Off", "VSS/RPM", "Analogue", "CAN Gear#" gear_port_an = bits, U08, 933, [0:5], $PIN_ADCS_OFF gear0v = scalar, U16, 934, "V", 0.01, 0.00000, 0.00, 5.0, 2 ; * ( 2 bytes) gear1v = scalar, U16, 936, "V", 0.01, 0.00000, 0.00, 5.0, 2 ; * ( 2 bytes) gear2v = scalar, U16, 938, "V", 0.01, 0.00000, 0.00, 5.0, 2 ; * ( 2 bytes) gear3v = scalar, U16, 940, "V", 0.01, 0.00000, 0.00, 5.0, 2 ; * ( 2 bytes) gear4v = scalar, U16, 942, "V", 0.01, 0.00000, 0.00, 5.0, 2 ; * ( 2 bytes) gear5v = scalar, U16, 944, "V", 0.01, 0.00000, 0.00, 5.0, 2 ; * ( 2 bytes) gear6v = scalar, U16, 946, "V", 0.01, 0.00000, 0.00, 5.0, 2 ; * ( 2 bytes) gear_no = scalar, U08, 948, "", 1, 0, 1, 6, 0 vssdotLF = scalar, U08, 949, "", 1,0,10,100,0 vssdot_int = scalar, U08, 950, "ms", 10, 0 , 10, 2000, 0 ac_idleup_io_in = bits, U08, 951, [0:5], $PIN_DIGIN ac_idleup_settings_inv = bits, U08,951, [6:6], "Normal", "Inverted" ac_idleup_settings = bits, U08, 951, [7:7], "Off", "On" ac_idleup_io_out = bits, U08, 952, [0:6], $PIN_DIGOUT_CANOUT_OFF ac_idleup_delay = scalar, U16, 953, "ms", 1.0000, 0.00000, 0.00, 1000, 0 ac_idleup_adder_duty = scalar, U08, 955, "%", 0.392, 0.00000, 0, 100, 1 ac_idleup_adder_steps = scalar, U08, 955, "steps", 1, 0, 0, 255, 0 fanctl_settings_pin = bits, U08, 956, [0:6], $PIN_DIGOUT_CANOUT_INVALID fanctl_idleup_delay = scalar, U16, 957, "ms", 1.0000, 0.00000, 0.00, 1000, 0 fanctl_idleup_adder_duty = scalar, U08, 959, "%", 0.392, 0.00000, 0, 100, 1 fanctl_idleup_adder_steps = scalar, U08, 959, "steps", 1.000, 0.00000, 0, 255, 0 #if CELSIUS fanctl_ontemp =scalar, S16, 960, "°C", 0.05555, -320.000,-40.00, 150.00, 1 fanctl_offtemp =scalar, S16, 962, "°C", 0.05555, -320.000,-40.00, 150.00, 1 #else fanctl_ontemp =scalar, S16, 960, "°F", 0.10000, 0.00000,-40.00, 300.00, 1 fanctl_offtemp =scalar, S16, 962, "°F", 0.10000, 0.00000,-40.00, 300.00, 1 #endif canadc_opt1 = bits, U08, 964, [0:0], "Off", "On" canadc_opt2 = bits, U08, 964, [1:1], "Off", "On" canadc_opt3 = bits, U08, 964, [2:2], "Off", "On" canadc_opt4 = bits, U08, 964, [3:3], "Off", "On" canadc_opt5 = bits, U08, 964, [4:4], "Off", "On" canadc_opt6 = bits, U08, 964, [5:5], "Off", "On" ; these next bits now grouped together. Names don't reflect firmware variable names. fanctl_opt2_engineoff = bits, U08, 965, [0:0], "No", "Yes" fan_ctl_settings_acfan = bits, U08, 965, [1:1], "Leave Fan off", "Turn fan on" fanctl_opt2_tps = bits, U08, 965, [2:2], "Off", "On" fanctl_opt2_vss = bits, U08, 965, [3:3], "Off", "On" fanctl_settings_idleup = bits, U08, 965, [6:6], "No", "Yes" fanctl_settings_on = bits, U08, 965, [7:7], "Off", "On" canadc_id1 = scalar, U08, 966, "", 1, 0, 0, 14, 0 canadc_id2 = scalar, U08, 967, "", 1, 0, 0, 14, 0 canadc_id3 = scalar, U08, 968, "", 1, 0, 0, 14, 0 canadc_id4 = scalar, U08, 969, "", 1, 0, 0, 14, 0 canadc_id5 = scalar, U08, 970, "", 1, 0, 0, 14, 0 canadc_id6 = scalar, U08, 971, "", 1, 0, 0, 14, 0 canadc_tab1 = scalar, U08, 972, "", 1, 0, 0, 31, 0 canadc_tab2 = scalar, U08, 973, "", 1, 0, 0, 31, 0 canadc_tab3 = scalar, U08, 974, "", 1, 0, 0, 31, 0 canadc_tab4 = scalar, U08, 975, "", 1, 0, 0, 31, 0 canadc_tab5 = scalar, U08, 976, "", 1, 0, 0, 31, 0 canadc_tab6 = scalar, U08, 977, "", 1, 0, 0, 31, 0 canadc_off1 = scalar, U16, 978, "", 1, 0, 0, 1023, 0 canadc_off2 = scalar, U16, 980, "", 1, 0, 0, 1023, 0 canadc_off3 = scalar, U16, 982, "", 1, 0, 0, 1023, 0 canadc_off4 = scalar, U16, 984, "", 1, 0, 0, 1023, 0 canadc_off5 = scalar, U16, 986, "", 1, 0, 0, 1023, 0 canadc_off6 = scalar, U16, 988, "", 1, 0, 0, 1023, 0 ac_idleup_cl_targetadder = scalar, S16, 990, "rpm", 1, 0, 0, 700, 0 fan_idleup_cl_targetadder = scalar, S16, 992, "rpm", 1, 0, 0, 700, 0 #if CELSIUS boost_ctl_clt_threshold = scalar, S16, 994, "°C", 0.05555, -320, -40, {clthighlim}, 1 #else boost_ctl_clt_threshold = scalar, S16, 994, "°F", 0.10000, 0.00000, -40, {clthighlim}, 1 #endif ac_idleup_set2_tps = bits, U08, 996, [0:0], "Off", "On" ac_idleup_set2_vss = bits, U08, 996, [1:1], "Off", "On" ac_idleup_set2_rpm = bits, U08, 996, [2:2], "Off", "On" ac_idleup_set2_outinv = bits, U08, 996, [3:3], "Normal", "Inverted" #if LAMBDA ego_upper_bound = scalar, U08, 997, "Lambda", { 0.1 / stoich }, 0.00000, 0.0476, 1.7, 3 ego_lower_bound = scalar, U08, 998, "Lambda", { 0.1 / stoich }, 0.00000, 0.0476, 1.7, 3 #else ego_upper_bound = scalar, U08, 997, "AFR", 0.10000, 0.00000, 1, 25, 1 ego_lower_bound = scalar, U08, 998, "AFR", 0.10000, 0.00000, 1, 25, 1 #endif ss_opt2 = bits, U08, 999, [0:3], $SS_OPTS_OFF2 ss_opt2_spd = bits, U08, 999, [7:7], "Off", "On" launch_maxvss = scalar, U16, 1000, { bitStringValue( prefSpeedUnits , prefSpeedUnits ) }, { msToPrefUnitsScale }, 0.00000, 0.00, { maxspeed }, 0 ; * ( 2 bytes) maf_range = bits, U08, 1002, [0:1], "650g/s", "1300g/s", "1950g/s", "2600g/s" ac_delay_since_last_on = scalar, U08, 1003, "s", 1.00000, 0.00000, 0, 30, 0 reluctorteeth3 = scalar, U16, 1004, "", 0.01, 0,0,255,2 ; this is SS1 reluctorteeth4 = scalar, U16, 1006, "", 0.01, 0,0,255,2 ; this is SS2 boost_gear_switch = scalar, U08, 1008, "gear", 1, 0, 1, 7, 0 staged_extended_opts_use_v3 = bits, U08, 1009, [0:0], "Use Inj A-H (if possible)", "Use Inj I/J" staged_extended_opts_simult = bits, U08, 1009, [1:1], "Alternating (2 squirts)", "Simultaneous (1 squirt)" staged_extended_opts_pw1off = bits, U08, 1009, [2:2], "Off", "On" can_pwmout_id = scalar, U08, 1010, "", 1.00000, 0.00000, 0, 15, 0 ; * ( 1 byte) can_pwmout_tab = scalar, U08, 1011, "", 1.00000, 0.00000, 0, 15, 0 ; * ( 1 byte) can_pwmout_offset = scalar, S16, 1012, "bytes", 1.00000, 0.00000, 0, 4095, 0 ; n2o_timing_delay = scalar, U16, 1014, "s", 0.000128, 0, 0.0, 2, 3 n2o_timing_taper = scalar, U16, 1016, "s", 0.000128, 0, 0.0, 2, 3 spare1018 = scalar, U16, 1018, "", 1, 0, 0, 65535, 0 #if CELSIUS idleve_clt = scalar, S16, 1020, "°C", 0.05555, -320, -40, {clthighlim}, 1 #else idleve_clt = scalar, S16, 1020, "°F", 0.10000, 0.00000, -40, {clthighlim}, 1 #endif idleve_delay = scalar, U08, 1022, "s", 1.00000, 0.0000, 0, 10, 0 ;gap page = 2 pwm_testio = bits, U08, 0, [0:2], "INVALID", "78Hz", "39Hz", "26Hz", "19.5Hz", "15.6Hz", "13Hz", "11.1Hz" duty_testio = scalar, U08, 1, "%", 1, 0, 0, 100, 1 testop_0 = scalar, U08, 2, "", 1,0,0,255,0 testop_coil = bits, U08, 2, [0:1], "Off", "One", "Sequence", "INVALID" testop_fp = bits, U08, 2, [4:4], "Off", "On" testop_inj = bits, U08, 2, [5:6], "Off", "One", "Sequence", "All" testop_pwm = bits, U08, 2, [7:7], "Standard", "As below" testdwell = scalar, U08, 3, "ms", 0.1,0,0,25.5,1 testint = scalar, U16, 4, "ms", 0.128,0,1,8388,1 ;this depend on single coil or seq etc. testrpm = scalar, U16, 4, "RPM", 1.0, { (120000/testint) - (testint/ 0.128) },0,937500,0 testpw = scalar, U16, 6, "ms", 0.001, 0.00000, 0, 65.535, 3 testinjcnt = scalar, U16, 8, "", 1,0,0,65535,0 ;gap testinjPwmT = scalar, U08, 11, "ms", 0.12800, 0.12800, 0.00, 32.64, 1 testinjPwmPd = scalar, U08, 12, "us", 1.00000, 0.00000, 40.00, 100.00, 0 testinjPwmP = scalar, U08, 13, "%", 1.00000, 0.00000, 0.00, 100.00, 0 testsel_inj = bits, U08, 14, [0:3], "InjA", "InjB", "InjC", "InjD", "InjE", "InjF", "InjG", "InjH", "InjI", "InjJ" ,"InjK", "InjL", "INVALID", "INVALID", "INVALID", "INVALID" testsel_coil = bits, U08, 14, [4:7], "CoilA", "CoilB", "CoilC", "CoilD", "CoilE", "CoilF", "CoilG", "CoilH", "CoilI", "CoilJ", "CoilK", "CoilL", "INVALID", "INVALID", "INVALID", "INVALID" dbgtooth = scalar, U08, 15, "tooth", 1,0,0,255,0 iacpostest = scalar, S16, 16, "steps", 1,0,0,32767,0 iachometest = scalar, S16, 18, "steps", 1,0,0,32767,0 iactest_0 = scalar, U08, 20, "", 1,0,0,255,0 flashlock = bits, U08, 21, [0:0], "Locked", "Unlocked" ; tables 0-3 boost_ctl_settings_on2 = bits, U08, 22, [3:3], "Off","On" boost_ctl_settings_cl2 = bits, U08, 22, [4:4], "Open-loop", "Closed-loop" boost_ctl_pins2 = bits, U08, 23, [0:6], $PIN_DIGOUT boost_ctl_Kp2 = scalar, U08, 24, "%", 1, 0.00000, 0, 200, 0 boost_ctl_Ki2 = scalar, U08, 25, "%", 1, 0.00000, 0, 200, 0 boost_ctl_Kd2 = scalar, U08, 26, "%", 1, 0.00000, 0, 200, 0 boost_ctl_closeduty2 = scalar, U08, 27, "%", 1, 0.00000, 0, 100, 0 boost_ctl_openduty2 = scalar, U08, 28, "%", 1, 0.00000, 0, 100, 0 boost_ctl_pins_pwm2 = bits, U08, 29, [0:2], $PIN_HWPWMOUT boost_ctl_lowerlimit2 = scalar, S16, 30, "kPa",0.10000, 0.00000, 5, 500, 1 boost_ctl_sensor2 = bits, U08, 32, [0:3], "Sensor 1", "Sensor 2","Sensor 3","Sensor 4","Sensor 5","Sensor 6","Sensor 7","Sensor 8","Sensor 9","Sensor 10","Sensor 11","Sensor 12","Sensor 13","Sensor 14","Sensor 15","Sensor 16" ;gap vss3_an = bits, U08, 34,[0:5], $PIN_ADCS vss4_an = bits, U08, 35,[0:5], $PIN_ADCS vss3_pwmseq = scalar, U08, 36, "", 1.00000, 0.00000, 1, 4, 0 vss4_pwmseq = scalar, U08, 37, "", 1.00000, 0.00000, 1, 4, 0 u08_debug38 = scalar, U08, 38, "", 1, 0.00000, 0, +255, 0 ; u08_debug38_0 = bits, U08, 38, [0:0], "Normal", "Loopback" u08_debug38_1 = bits, U08, 38, [1:1], "Off", "On" u08_debug38_2 = bits, U08, 38, [2:2], "Useful data", "Whole file" ; pad gap egoport1 = bits, U08, 40, [0:5], $PIN_ADCS_EGO, 7="CAN EGO", 38="INVALID" egoport2 = bits, U08, 41, [0:5], $PIN_ADCS_EGO, 7="CAN EGO", 38="INVALID" egoport3 = bits, U08, 42, [0:5], $PIN_ADCS_EGO, 7="CAN EGO", 38="INVALID" egoport4 = bits, U08, 43, [0:5], $PIN_ADCS_EGO, 7="CAN EGO", 38="INVALID" egoport5 = bits, U08, 44, [0:5], $PIN_ADCS_EGO, 7="CAN EGO", 38="INVALID" egoport6 = bits, U08, 45, [0:5], $PIN_ADCS_EGO, 7="CAN EGO", 38="INVALID" egoport7 = bits, U08, 46, [0:5], $PIN_ADCS_EGO, 7="CAN EGO", 38="INVALID" egoport8 = bits, U08, 47, [0:5], $PIN_ADCS_EGO, 7="CAN EGO", 38="INVALID" egoport9 = bits, U08, 48, [0:5], $PIN_ADCS_EGO, 7="CAN EGO", 38="INVALID" egoport10 = bits, U08, 49, [0:5], $PIN_ADCS_EGO, 7="CAN EGO", 38="INVALID" egoport11 = bits, U08, 50, [0:5], $PIN_ADCS_EGO, 7="CAN EGO", 38="INVALID" egoport12 = bits, U08, 51, [0:5], $PIN_ADCS_EGO, 7="CAN EGO", 38="INVALID" ; egoport13 = bits, U08, 52, [0:5], $PIN_ADCS_EGO, 7="CAN EGO", 38="INVALID" ; egoport14 = bits, U08, 53, [0:5], $PIN_ADCS_EGO, 7="CAN EGO", 38="INVALID" ; egoport15 = bits, U08, 54, [0:5], $PIN_ADCS_EGO, 7="CAN EGO", 38="INVALID" ; egoport16 = bits, U08, 55, [0:5], $PIN_ADCS_EGO, 7="CAN EGO", 38="INVALID" #define EGOMAP = "EGO1", "EGO2", "EGO3", "EGO4", "EGO5", "EGO6", "EGO7", "EGO8", "EGO9", "EGO10", "EGO11", "EGO12", "EGO13", "EGO14", "EGO15", "EGO16" egomap1 = bits, U08, 56, [0:3], $EGOMAP egomap2 = bits, U08, 57, [0:3], $EGOMAP egomap3 = bits, U08, 58, [0:3], $EGOMAP egomap4 = bits, U08, 59, [0:3], $EGOMAP egomap5 = bits, U08, 60, [0:3], $EGOMAP egomap6 = bits, U08, 61, [0:3], $EGOMAP egomap7 = bits, U08, 62, [0:3], $EGOMAP egomap8 = bits, U08, 63, [0:3], $EGOMAP egomap9 = bits, U08, 64, [0:3], $EGOMAP egomap10 = bits, U08, 65, [0:3], $EGOMAP egomap11 = bits, U08, 66, [0:3], $EGOMAP egomap12 = bits, U08, 67, [0:3], $EGOMAP ; egomap13 = bits, U08, 68, [0:3], $EGOMAP ; egomap14 = bits, U08, 69, [0:3], $EGOMAP ; egomap15 = bits, U08, 70, [0:3], $EGOMAP ; egomap16 = bits, U08, 71, [0:3], $EGOMAP ;egomap?t is not presently implemented in the code egomap1t = bits, U08, 56, [4:4], "1", "2" egomap2t = bits, U08, 57, [4:4], "1", "2" egomap3t = bits, U08, 58, [4:4], "1", "2" egomap4t = bits, U08, 59, [4:4], "1", "2" egomap5t = bits, U08, 60, [4:4], "1", "2" egomap6t = bits, U08, 61, [4:4], "1", "2" egomap7t = bits, U08, 62, [4:4], "1", "2" egomap8t = bits, U08, 63, [4:4], "1", "2" egomap9t = bits, U08, 64, [4:4], "1", "2" egomap10t = bits, U08, 65, [4:4], "1", "2" egomap11t = bits, U08, 66, [4:4], "1", "2" egomap12t = bits, U08, 67, [4:4], "1", "2" ; egomap13t = bits, U08, 68, [4:4], "1", "2" ; egomap14t = bits, U08, 69, [4:4], "1", "2" ; egomap15t = bits, U08, 70, [4:4], "1", "2" ; egomap16t = bits, U08, 71, [4:4], "1", "2" tc_opt_on = bits, U08, 72, [0:0], "Off", "On" tc_opt_method = bits, U08, 72, [1:3], "Perfect Run", "VSS %slip", "Perfect Run RPM", "Switch input", "INVALID", "INVALID", "INVALID", "None" tc_opt_slipcurve=bits,U08, 72, [4:4], "Fixed value", "Adjustable" tc_opt_n2o = bits, U08, 72, [5:5], "On/Off", "INVALID" tc_opt_bank = bits, U08, 72, [6:7], "INVALID", "Bank 1", "Bank 2", "Both" tc_slipthresh = scalar, U08, 73, "%", 1, 0.00000, 0, 100, 0 tc_minvss = scalar, U16, 74, { bitStringValue( prefSpeedUnits , prefSpeedUnits ) }, { msToPrefUnitsScale }, 0.00000, 0, { maxspeed }, 1 tc_maxvss = scalar, U16, 76, { bitStringValue( prefSpeedUnits , prefSpeedUnits ) }, { msToPrefUnitsScale }, 0.00000, 0, { maxspeed }, 1 tc_mintps = scalar, S16, 78, "%", 0.10000, 0.00000, 0, 100, 1 tc_enin = bits, U08, 80, [0:5], $PIN_DIGIN_OFF knock_bpass = bits, U08, 81, [0:5], "1.22", "1.26", "1.31", "1.35", "1.40", "1.45", "1.51", "1.57", "1.63", "1.71", "1.78", "1.87", "1.96", "2.07", "2.18", "2.31", "2.46", "2.54", "2.62", "2.71", "2.81", "2.92", "3.03", "3.15", "3.28", "3.43", "3.59", "3.76", "3.95", "4.16", "4.39", "4.66", "4.95", "5.12", "5.29", "5.48", "5.68", "5.90", "6.12", "6.37", "6.64", "6.94", "7.27", "7.63", "8.02", "8.46", "8.95", "9.50", "10.12", "10.46", "10.83", "11.22", "11.65", "12.10", "12.60", "13.14", "13.72", "14.36", "15.07", "15.84", "16.71", "17.67", "18.76", "19.98" knock_conf_num = bits, U08, 82, [0:0], "1", "2" knock_conf_debug = bits, U08, 82, [4:4], "Off", "On" knock_conf_percylact = bits, U08, 82, [5:5], "Off", "On" knock_conf_launch = bits, U08, 82, [6:6], "Off", "On" knock_conf_percyl = bits, U08, 82, [7:7], "Off", "On" knock_int = bits, U08, 83, [0:4], "40", "45", "50", "55", "60", "65", "70", "75", "80", "90", "100", "110", "120", "130", "140", "150", "160", "180", "200", "220", "240", "260", "280", "300", "320", "360", "400", "440", "480", "520", "560", "600" ff_tpw0 = scalar, U08, 84, "ms", 0.05, 0, 0, 12.7, 2 ff_tpw1 = scalar, U08, 85, "ms", 0.05, 0, 0, 12.7, 2 #if CELSIUS ff_temp0 = scalar, S16, 86, "°C", 0.05555, -320, -40, 150.00, 1 ff_temp1 = scalar, S16, 88, "°C", 0.05555, -320, -40, 150.00, 1 #else ff_temp0 = scalar, S16, 86, "°F", 0.10000, 0.00000, -40, 300, 1 ff_temp1 = scalar, S16, 88, "°F", 0.10000, 0.00000, -40, 300, 1 #endif fueltemp1 = bits, U08, 90, [0:4], "Off", "Flex fuel", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "Sensor 1", "Sensor 2","Sensor 3","Sensor 4","Sensor 5","Sensor 6","Sensor 7","Sensor 8","Sensor 9","Sensor 10","Sensor 11","Sensor 12","Sensor 13","Sensor 14","Sensor 15","Sensor 16" fueltemp1_corr = bits, U08, 90, [7:7], "Off", "On" tc_knob = bits, U08, 91, [0:5], $PIN_ADCS_OFF maf_freq0 = scalar, U16, 92, "Hz", 0.25, 0.00000, 0, 16383,1 maf_freq1 = scalar, U16, 94, "Hz", 0.25, 0.00000, 0, 16383,1 map_freq0 = scalar, U16, 96, "Hz", 0.2, 0.00000, 0, 13107,1 map_freq1 = scalar, U16, 98, "Hz", 0.2, 0.00000, 0, 13107,1 #define KNOCK_GAIN = "2.000", "1.882", "1.778", "1.684", "1.600", "1.523", "1.455", "1.391", "1.333", "1.280", "1.231", "1.185", "1.143", "1.063", "1.000", "0.944", "0.895", "0.85", "0.81", "0.773", "0.739", "0.708", "0.680", "0.654", "0.630", "0.607", "0.586", "0.567", "0.548", "0.500", "0.471", "0.444", "0.421", "0.400", "0.381", "0.364", "0.348", "0.333", "0.320", "0.308", "0.296", "0.286", "0.276", "0.267", "0.258", "0.250", "0.236", "0.222", "0.211", "0.200", "0.190", "0.182", "0.174", "0.167", "0.160", "0.154", "0.148", "0.143", "0.138", "0.133", "0.129", "0.125", "0.118", "0.111" knock_gain01 = bits, U08, 100, [0:5], $KNOCK_GAIN knock_gain02 = bits, U08, 101, [0:5], $KNOCK_GAIN knock_gain03 = bits, U08, 102, [0:5], $KNOCK_GAIN knock_gain04 = bits, U08, 103, [0:5], $KNOCK_GAIN knock_gain05 = bits, U08, 104, [0:5], $KNOCK_GAIN knock_gain06 = bits, U08, 105, [0:5], $KNOCK_GAIN knock_gain07 = bits, U08, 106, [0:5], $KNOCK_GAIN knock_gain08 = bits, U08, 107, [0:5], $KNOCK_GAIN knock_gain09 = bits, U08, 108, [0:5], $KNOCK_GAIN knock_gain10 = bits, U08, 109, [0:5], $KNOCK_GAIN knock_gain11 = bits, U08, 110, [0:5], $KNOCK_GAIN knock_gain12 = bits, U08, 111, [0:5], $KNOCK_GAIN knock_gain13 = bits, U08, 112, [0:5], $KNOCK_GAIN knock_gain14 = bits, U08, 113, [0:5], $KNOCK_GAIN knock_gain15 = bits, U08, 114, [0:5], $KNOCK_GAIN knock_gain16 = bits, U08, 115, [0:5], $KNOCK_GAIN knock_sens01 = bits, U08, 116, [0:0], "1", "2" knock_sens02 = bits, U08, 117, [0:0], "1", "2" knock_sens03 = bits, U08, 118, [0:0], "1", "2" knock_sens04 = bits, U08, 119, [0:0], "1", "2" knock_sens05 = bits, U08, 120, [0:0], "1", "2" knock_sens06 = bits, U08, 121, [0:0], "1", "2" knock_sens07 = bits, U08, 122, [0:0], "1", "2" knock_sens08 = bits, U08, 123, [0:0], "1", "2" knock_sens09 = bits, U08, 124, [0:0], "1", "2" knock_sens10 = bits, U08, 125, [0:0], "1", "2" knock_sens11 = bits, U08, 126, [0:0], "1", "2" knock_sens12 = bits, U08, 127, [0:0], "1", "2" knock_sens13 = bits, U08, 128, [0:0], "1", "2" knock_sens14 = bits, U08, 129, [0:0], "1", "2" knock_sens15 = bits, U08, 130, [0:0], "1", "2" knock_sens16 = bits, U08, 131, [0:0], "1", "2" s16_debug = scalar, S16, 132, "", 1, 0.00000, -32768, +32767, 0 u08_debug134 = scalar, U08, 134, "", 1, 0.00000, 0, +255, 0 AE_options = bits, U08, 135, [0:0], "Time-based AE", "Accel-pump AE" MAP_fastsample = bits, U08, 135, [1:1], "Use normal sample setting", "Fast sample" accel_blend_percent = scalar, S16, 136, "%", 0.1, 0.0, 0, 100, 1 accel_tpsdot_threshold = scalar, U16, 138, "%/sec", 0.1, 0, 0, 3276, 0 accel_mapdot_threshold = scalar, U16, 140, "kpa/sec", 1, 0, 0, 20000, 0 ae_lorpm2 = scalar, U16, 142, "rpm", 1.0, 0.0, 0.0, 20000, 0 ae_hirpm2 = scalar, U16, 144, "rpm", 1.0, 0.0, 0.0, 20000, 0 accel_blend_percent2 = scalar, S16, 146, "%", 0.1, 0.0, 0, 100, 1 accel_tpsdot_threshold2 = scalar, U16, 148, "%/sec", 0.1, 0, 0, 3276, 0 accel_mapdot_threshold2 = scalar, U16, 150, "kpa/sec", 1, 0, 0, 20000, 0 tpsThresh2 = scalar, S16, 152, "%/s", 0.10000, 0.00000, 0.00, 3276.0, 1 mapThresh2 = scalar, S16, 154, "kPa/s", 1.00000, 0.00000, 0.00, 10000.0, 0 aeEndPW2 = scalar, S16, 156, "%ReqFuel", 1, 0.00000, 0.00, 100, 0 taeColdA2 = scalar, U08, 158, "%ReqFuel", 1, 0.00000, 0, 255, 0 taeColdM2 = scalar, U08, 159, "%", 1.00000, 0.00000, 100, 255.00, 0 taeTime2 = scalar, U08, 160, "s", 0.010000, 0.00000, 0.00, 1.00, 2 taeTime_events2 = scalar, U08, 160, "events", 1, 0.00000, 0.00, 255, 0 tdePct2 = scalar, U08, 161, "", 1.00000, 0.00000, 50.00, 100.00, 0 aeTaperTime2 = scalar, U08, 162, "s", 0.010000, 0.00000, 0.00, 1.00, 2 aeTaperTime_events2= scalar, U08, 162, "events", 1, 0.00000, 0.00, 255, 0 tpsProportion2 = scalar, U08, 163, "%", 1.00000, 0.00000, 0.00, 100.00, 0 accel_CLT_multiplier2 = scalar, S16, 164, "%", 0.1, 0, 100, 255, 1 tc_led_out = bits, U08, 166, [0:6], $PIN_DIGOUT_CANOUT_OFF tc_opt_driven = bits, U08, 167, [0:2], "VSS1", "VSS3", "Avg VSS1+VSS3", "Max VSS1+VSS3", "Side2side", "Avg VSS1-4", "Max VSS1-4", "INVALID" tc_opt_undriven = bits, U08, 168, [0:2], "VSS2", "VSS4", "Avg VSS2+VSS4", "Max VSS2+VSS4", "Side2side", "GPS Speed", "INVALID", "INVALID" tc_opt3_vssdiff = bits, U08, 169, [0:0], "Off", "On" ;gap ;gap 36 bytes ;gap accel_CLT_multiplier = scalar, S16, 206, "%", 0.1, 0, 100, 255, 1 cl_idle_timing_target_deltas = array, S16, 208, [8], "rpm", 1, 0, -1000, 1000, 0 cl_idle_timing_advance_deltas = array, S16, 224, [8], "deg", 0.1, 0, -90, 90, 0 ltt_opt_on = bits, U08, 240, [0:0], "Off", "On" ltt_opt_mode = bits, U08, 240, [1:1], "Timed", "Button" ltt_opt_feedback = bits, U08, 240, [2:2], "Off", "On" ltt_but_in = bits, U08, 241, [0:5], $PIN_DIGIN ltt_int = scalar, U08, 242, "min", 1, 0.00000, 5, 30, 0 ltt_led_out = bits, U08, 243, [0:6], $PIN_DIGOUT_CANOUT_OFF ltt_thresh = scalar, U16, 244, "%", 0.1, 0.0, 10, 65535, 1 tc_minmap = scalar, S16, 246, "kPa", 0.10000, 0.00000, 0, 700, 1 can_bcast1_on = bits, U08, 248, [0:0], "Off", "On" can_bcast1_280x4 = bits, U08, 248, [1:1], "Off", "On" can_bcast1_280x1 = bits, U08, 248, [2:2], "Off", "On" can_bcast1_289 = bits, U08, 248, [3:3], "Off", "On" can_bcast1_316 = bits, U08, 248, [4:4], "Off", "On" can_bcast1_329 = bits, U08, 248, [5:5], "Off", "On" can_bcast1_561 = bits, U08, 248, [6:6], "Off", "On" can_bcast1_361 = bits, U08, 248, [7:7], "Off", "On" can_bcast2_041 = bits, U08, 249, [0:0], "Off", "On" can_bcast2_he351 = bits, U08, 249, [1:1], "Off", "On" can_bcast2_23d = bits, U08, 249, [2:2], "Off", "On" can_bcast2_lotus0407 = bits, U08, 249, [3:3], "Off", "On" can_bcast2_lotus0815 = bits, U08, 249, [4:4], "Off", "On" can_bcast2_xxx = bits, U08, 249, [7:7], "Off", "On" can_bcast_int = scalar, U16, 250, "ms", 0.128, 0.00000, 10, 1000,1 timedout1_in = bits, U08, 252, [0:5], $PIN_DIGIN_OFF, 15="Same as launch" timedout1_out = bits, U08, 253, [0:6], $PIN_DIGOUT_CANOUT_OFF timedout1_offdelay = scalar, U16, 254, "s", 0.001, 0, 0, 15, 3 tstop_out = bits, U08, 256, [0:6], $PIN_DIGOUT_CANOUT_OFF can_enable_on = bits, U08, 257, [0:0], "Off", "On" can_enable_alcan = bits, U08, 257, [1:1], "Off", "On" can_enable_baud = bits, U08, 257, [2:3], "500k", "250k", "1M", "INVALID" can_enable_outpc = bits, U08, 257, [4:4], "Off", "On" can_enable_tuning = bits, U08, 257, [5:5], "Off", "On" tstop_delay = scalar, U16, 258, "s", 0.001, 0, 0, 15, 3 tstop_hold = scalar, U16, 260, "s", 0.001, 0, 0, 15, 3 oddfireangs1 = scalar, U16, 262, "", 0.10000, 0.00000, 0.00, 720.00, 1 ; * ( 2 byte) oddfireangs2 = scalar, U16, 264, "", 0.10000, 0.00000, 0.00, 720.00, 1 ; * ( 2 byte) oddfireangs3 = scalar, U16, 266, "", 0.10000, 0.00000, 0.00, 720.00, 1 ; * ( 2 byte) oddfireangs4 = scalar, U16, 268, "", 0.10000, 0.00000, 0.00, 720.00, 1 ; * ( 2 byte) oddfireangs5 = scalar, U16, 270, "", 0.10000, 0.00000, 0.00, 720.00, 1 ; * ( 2 byte) oddfireangs6 = scalar, U16, 272, "", 0.10000, 0.00000, 0.00, 720.00, 1 ; * ( 2 byte) cel_opt_on = bits, U08, 274, [0:0], "Off", "On" cel_opt_stat = bits, U08, 274, [1:3], "Off", "MAP", "MAT", "CLT", "TPS", "Batt", "EGO", "EGT1" cel_opt_adc = bits, U08, 274, [5:5], "Fluctuation", "ADC counts" cel_opt_flash = bits, U08, 274, [6:6], "Solid", "Flash-codes" cel_opt_when = bits, U08, 274, [7:7], "Off", "On" cel_port = bits, U08, 275, [0:6], $PIN_DIGOUT_CANOUT_OFF afr_min = scalar, U08, 276, "AFR", 0.10000, 0.00000, 0.00, 25.5, 1 ; afr_max = scalar, U08, 277, "AFR", 0.10000, 0.00000, 0.00, 25.5, 1 ; afr_var_upper = scalar, U16, 278, "", 1, 0, 0.00, 65535, 0 afr_var_lower = scalar, U16, 280, "", 1, 0, 0.00, 65535, 0 map_minadc = scalar, U16, 282, "", 1, 0, 0.00, 1023, 0 map_maxadc = scalar, U16, 284, "", 1, 0, 0.00, 1023, 0 map_var_upper = scalar, U16, 286, "", 1, 0, 0.00, 65535, 0 mat_minadc = scalar, U16, 288, "", 1, 0, 0.00, 1023, 0 mat_maxadc = scalar, U16, 290, "", 1, 0, 0.00, 1023, 0 mat_var_upper = scalar, U16, 292, "", 1, 0, 0.00, 65535, 0 clt_minadc = scalar, U16, 294, "", 1, 0, 0.00, 1023, 0 clt_maxadc = scalar, U16, 296, "", 1, 0, 0.00, 1023, 0 clt_var_upper = scalar, U16, 298, "", 1, 0, 0.00, 65535, 0 tps_minadc = scalar, U16, 300, "", 1, 0, 0.00, 1023, 0 tps_maxadc = scalar, U16, 302, "", 1, 0, 0.00, 1023, 0 tps_var_upper = scalar, U16, 304, "", 1, 0, 0.00, 65535, 0 batt_minv = scalar, U08, 306, "", 0.1, 0, 7.00, 23.0, 1 batt_maxv = scalar, U08, 307, "", 0.1, 0, 7.00, 23.0, 1 batt_var_upper = scalar, U16, 308, "", 1, 0, 0.00, 65535, 0 cel_opt2_map = bits, U08, 310, [0:0], "Off", "On" cel_opt2_mat = bits, U08, 310, [1:1], "Off", "On" cel_opt2_clt = bits, U08, 310, [2:2], "Off", "On" cel_opt2_tps = bits, U08, 310, [3:3], "Off", "On" cel_opt2_batt = bits, U08, 310, [4:4], "Off", "On" cel_opt2_afr0 = bits, U08, 310, [5:5], "Off", "On" cel_opt2_sync = bits, U08, 310, [6:6], "Off", "On" cel_opt2_egt = bits, U08, 310, [7:7], "Off", "On" cel_action1_map = bits, U08, 311, [0:0], "Off", "On" cel_action1_mat = bits, U08, 311, [1:1], "Off", "On" cel_action1_clt = bits, U08, 311, [2:2], "Off", "On" cel_action1_tps = bits, U08, 311, [3:3], "Off", "On" cel_action1_batt= bits, U08, 311, [4:4], "Off", "On" cel_action1_ego = bits, U08, 311, [5:5], "Off", "On" cel_action1_sync = bits, U08, 311, [6:6], "Off", "On" cel_action1_map_an = bits, U08, 311, [7:7], "Off", "On" #if CELSIUS cel_clt_cold = scalar, S16, 312, "°C", 0.05555, -320.000,-40.00, {clthighlim}, 1 cel_clt_warm = scalar, S16, 314, "°C", 0.05555, -320.000,-40.00, {clthighlim}, 1 #else cel_clt_cold = scalar, S16, 312, "°F", 0.10000, 0.00000,-40.00, {clthighlim}, 1 cel_clt_warm = scalar, S16, 314, "°F", 0.10000, 0.00000,-40.00, {clthighlim}, 1 #endif cel_warmtime = scalar, U16, 316, "mins", 0.01666, 9, 1, 20,1 #if CELSIUS cel_mat_default = scalar, S16, 318, "°C", 0.05555, -320.000,-40.00, {clthighlim}, 1 #else cel_mat_default = scalar, S16, 318, "°F", 0.10000, 0.00000,-40.00, {clthighlim}, 1 #endif cel_revlim = scalar, S16, 320, "RPM", 1.00000, 0.00000, 0.00,20000, 0 cel_overboost = scalar, S16, 322, "kPa", 0.10000, 0.00000, 0.00, 700, 1 cel_boost_duty = scalar, U08, 324, "%", 1, 0.00000, 0, 100, 0 cel_boost_duty2 = scalar, U08, 325, "%", 1, 0.00000, 0, 100, 0 cel_synctol = scalar, U08, 326, "", 1, 0.00000, 0, 100, 0 cel_opt3_flex = bits, U08, 327, [0:0], "Off", "On" cel_retard = scalar, S16, 328, "deg", 0.10000, 0.00000,0.00, 10.00, 1 map_var_lower = scalar, U16, 330, "", 1, 0, 0.00, 65535, 0 #if CELSIUS egt_minvalid = scalar, S16, 332, "°C", 0.05555, -320.000,-40.00, 1500, 1 egt_maxvalid = scalar, S16, 334, "°C", 0.05555, -320.000,-40.00, 1500, 1 #else egt_minvalid = scalar, S16, 332, "°F", 0.10000, 0.00000,-40.00, 2700, 1 egt_maxvalid = scalar, S16, 334, "°F", 0.10000, 0.00000,-40.00, 2700, 1 #endif egt_var_upper = scalar, U16, 336, "", 1, 0, 0.00, 65535, 0 egt_var_lower = scalar, U16, 338, "", 1, 0, 0.00, 65535, 0 cel_runtime = scalar, U08, 340, "s", 1, 0.00000, 5, 100, 0 cel_action2_flex = bits, U08, 341, [0:0], "Off", "On" cel_action2_egt = bits, U08, 341, [1:1], "Off", "On" cel_action2_oil = bits, U08, 341, [2:2], "Off", "On" blend_opt1 = bits, U08, 342, [0:4], "TPS", "MAP", "RPM", "MAFload", "Flex%", "VSS1", "Gear", "RPM*load/100", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "Sensor 1", "Sensor 2","Sensor 3","Sensor 4","Sensor 5","Sensor 6","Sensor 7","Sensor 8","Sensor 9","Sensor 10","Sensor 11","Sensor 12","Sensor 13","Sensor 14","Sensor 15","Sensor 16" blend_opt2 = bits, U08, 343, [0:4], "TPS", "MAP", "RPM", "MAFload", "Flex%", "VSS1", "Gear", "RPM*load/100", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "Sensor 1", "Sensor 2","Sensor 3","Sensor 4","Sensor 5","Sensor 6","Sensor 7","Sensor 8","Sensor 9","Sensor 10","Sensor 11","Sensor 12","Sensor 13","Sensor 14","Sensor 15","Sensor 16" blend_opt3 = bits, U08, 344, [0:4], "TPS", "MAP", "RPM", "MAFload", "Flex%", "VSS1", "Gear", "RPM*load/100", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "Sensor 1", "Sensor 2","Sensor 3","Sensor 4","Sensor 5","Sensor 6","Sensor 7","Sensor 8","Sensor 9","Sensor 10","Sensor 11","Sensor 12","Sensor 13","Sensor 14","Sensor 15","Sensor 16" blend_opt4 = bits, U08, 345, [0:4], "TPS", "MAP", "RPM", "MAFload", "Flex%", "VSS1", "Gear", "RPM*load/100", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "Sensor 1", "Sensor 2","Sensor 3","Sensor 4","Sensor 5","Sensor 6","Sensor 7","Sensor 8","Sensor 9","Sensor 10","Sensor 11","Sensor 12","Sensor 13","Sensor 14","Sensor 15","Sensor 16" blend_opt5 = bits, U08, 346, [0:4], "TPS", "MAP", "RPM", "MAFload", "Flex%", "VSS1", "Gear", "RPM*load/100", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "Sensor 1", "Sensor 2","Sensor 3","Sensor 4","Sensor 5","Sensor 6","Sensor 7","Sensor 8","Sensor 9","Sensor 10","Sensor 11","Sensor 12","Sensor 13","Sensor 14","Sensor 15","Sensor 16" blend_opt6 = bits, U08, 347, [0:4], "TPS", "MAP", "RPM", "MAFload", "Flex%", "VSS1", "Gear", "RPM*load/100", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "Sensor 1", "Sensor 2","Sensor 3","Sensor 4","Sensor 5","Sensor 6","Sensor 7","Sensor 8","Sensor 9","Sensor 10","Sensor 11","Sensor 12","Sensor 13","Sensor 14","Sensor 15","Sensor 16" blend_opt7 = bits, U08, 348, [0:4], "TPS", "MAP", "RPM", "MAFload", "Flex%", "VSS1", "Gear", "RPM*load/100", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "Sensor 1", "Sensor 2","Sensor 3","Sensor 4","Sensor 5","Sensor 6","Sensor 7","Sensor 8","Sensor 9","Sensor 10","Sensor 11","Sensor 12","Sensor 13","Sensor 14","Sensor 15","Sensor 16" ;gap in case of more blend curve options fp_opt_mode = bits, U08, 350, [0:1], "On/Off", "Open-Loop PWM", "Closed-Loop PWM", "INVALID" fp_opt_reg = bits, U08, 350, [4:5], "Vac referenced", "Fixed pressure", "Custom correction", "INVALID" fp_opt_inv = bits, U08, 350, [6:6], "Normal", "Inverted" fp_opt_safety = bits, U08, 350, [7:7], "Off", "On" fp_out1 = bits, U08, 351, [0:6], $PIN_DIGOUT, 0="Fuel Pump" rail_pressure_psig = scalar, U16, 352, "psi.g", 0.014504, 0.00000, 0, 100, 1 rail_pressure_kpag = scalar, U16, 352, "kPa.g", 0.1, 0.00000, 0, 680, 1 fp_Kp = scalar, U16, 354, "%", 0.1, 0.00000, 0, 200, 1 fp_Ki = scalar, U16, 356, "%", 0.1, 0.00000, 0, 200, 1 fp_Kd = scalar, U16, 358, "%", 0.1, 0.00000, 0, 200, 1 fp_prime_duty = scalar, U08, 360, "%", 0.392, 0.00000, 0, 100, 1 fp_press_in = bits, U08, 361, [0:3], "Off","Sensor 1", "Sensor 2","Sensor 3","Sensor 4","Sensor 5","Sensor 6","Sensor 7","Sensor 8","Sensor 9","Sensor 10","Sensor 11","Sensor 12","Sensor 13","Sensor 14","Sensor 15" ; note off by 1 fp_press_type = bits, U08, 361, [6:7], "Gauge", "Absolute", "Differential", "INVALID" fp_freq = bits, U08, 362, [0:3], "INVALID", "INVALID", "250Hz", "225Hz", "200Hz", "175Hz", "150Hz", "125Hz", "100Hz", "78Hz", "39Hz", "26Hz", "19.5Hz", "15.6Hz", "13Hz", "11.1Hz" ;spare alternator_opt_mode = bits, U08, 364, [0:2], "Off", "On-Off", "Open-loop frequency", "Open-loop duty", "Closed-loop field control", "High-speed feedback field control", "INVALID", "INVALID" ; possible application specific option bits alternator_freq = bits, U08, 365, [0:3], "INVALID", "INVALID", "250Hz", "225Hz", "200Hz", "175Hz", "150Hz", "125Hz", "100Hz", "78Hz", "39Hz", "26Hz", "19.5Hz", "15.6Hz", "13Hz", "11.1Hz" alternator_controlout = bits, U08, 366, [0:6], $PIN_DIGOUT alternator_control_inv = bits, U08, 366, [7:7], "Normal", "Inverted" alternator_lampout = bits, U08, 367, [0:6], $PIN_DIGOUT_CANOUT_OFF alternator_Kp = scalar, U16, 368, "%", 0.1, 0.00000, 0, 200, 1 alternator_Ki = scalar, U16, 370, "%", 0.1, 0.00000, 0, 200, 1 alternator_Kd = scalar, U16, 372, "%", 0.1, 0.00000, 0, 200, 1 alternator_startdelay = scalar, U08, 374, "s", 0.1, 0.00000, 0, 25.5, 1 alternator_ramptime = scalar, U08, 375, "s", 0.1, 0.00000, 0, 25.5, 1 alternator_wot = scalar, U16, 376, "%", 0.1, 0.00000, 0, 110, 1 alternator_wotv = scalar, U08, 378, "V", 0.1, 0.00000, 10.0, 16.0, 1 alternator_overrv = scalar, U08, 379, "V", 0.1, 0.00000, 10.0, 16.0, 1 alternator_wottimeout = scalar, U08, 380, "s", 1, 0.00000, 0, 30, 0 alternator_tempin = bits, U08, 381, [0:3], "Off","Sensor 1", "Sensor 2","Sensor 3","Sensor 4","Sensor 5","Sensor 6","Sensor 7","Sensor 8","Sensor 9","Sensor 10","Sensor 11","Sensor 12","Sensor 13","Sensor 14","Sensor 15" ; note off by 1 alternator_freq_monin = bits, U08, 382, [0:5], $PIN_DIGIN_OFF alternator_freq_moninv = bits, U08, 382, [6:6], "Normal", "Inverted" alternator_targv = scalar, U08, 383, "V", 0.1, 0.00000, 10.0, 16.0, 1 alternator_ctl_ms = scalar, U16, 384, "ms", 0.128, 0.00000, 10, 500, 0 fp_ctl_ms = scalar, U16, 386, "ms", 0.128, 0.00000, 10, 500, 0 alternator_freq_currin = bits, U08, 388, [0:5], $PIN_DIGIN_OFF alternator_freq_currinv = bits, U08, 388, [6:6], "Normal", "Inverted" alternator_chargetime = scalar, U08, 389, "min", 1, 0.00000, 0, 30, 0 alternator_targvr = scalar, U08, 390, "V", 0.1, 0.00000, 10.0, 16.0, 1 alternator_diff = scalar, U08, 391, "V", 0.1, 0.00000, 0.1, 3.0, 1 alternator_maxload = scalar, U08, 392, "%", 1, 0.00000, 75, 101, 0 hpte_opt_on = bits, U08, 393, [0:0], "Off","On" hpte_load = scalar, S16, 394, "%", 0.10000, 0, 0, 500, 1 hpte_rpm = scalar, U16, 396, "rpm", 1, 0, 0, 20000, 0 shiftlight_opt_pins = bits, U08, 398, [0:6], $PIN_DIGOUT_CANOUT_OFF fc_trans_time_ret = scalar, U08, 399, "s", 0.1, 0, 0.5, 5.0, 1 shiftlight_limit1 = scalar, U16, 400, "rpm", 1, 0, 0, 20000, 0 shiftlight_limit2 = scalar, U16, 402, "rpm", 1, 0, 0, 20000, 0 shiftlight_limit3 = scalar, U16, 404, "rpm", 1, 0, 0, 20000, 0 shiftlight_limit4 = scalar, U16, 406, "rpm", 1, 0, 0, 20000, 0 shiftlight_limit5 = scalar, U16, 408, "rpm", 1, 0, 0, 20000, 0 shiftlight_limit6 = scalar, U16, 410, "rpm", 1, 0, 0, 20000, 0 ltt_samp_time = scalar, U08, 412, "s", 1, 0, 0, 255, 0 ltt_agg = scalar, U08, 413, "", 1, 0, 10, 255, 0 oilpress_in = bits, U08, 414, [0:3], "Off","Sensor 1", "Sensor 2","Sensor 3","Sensor 4","Sensor 5","Sensor 6","Sensor 7","Sensor 8","Sensor 9","Sensor 10","Sensor 11","Sensor 12","Sensor 13","Sensor 14","Sensor 15" ; note off by 1 oilpress_in_safety = bits, U08, 414, [7:7], "Off", "On" oilpress_out = bits, U08, 415, [0:6], $PIN_DIGOUT_CANOUT_OFF fuelcalctime = scalar, U16, 416, "ms", 0.128, 0, 100, 8000, 0 alternator_sensitivity = scalar, U16, 420, "", 0.1, 0.00000, 0, 20, 0 idleminvss = scalar, U16, 422, { bitStringValue( prefSpeedUnits , prefSpeedUnits ) }, { msToPrefUnitsScale }, 0.00000, 0.00, { maxspeed }, 0 flex_baseline = scalar, U16, 424, "%", 0.1, 0.00000, 0, 100,1 fc_transition_time = scalar, U08, 426, "s", 0.1, 0, 0.5, 5.0, 1 fc_ae_time = scalar, U08, 427, "s", 0.01, 0, 0, 0.5, 2 fc_timing = scalar, S16, 428, "deg", 0.10000, 0.00000, -90.0, 180.00, 2 fc_ae_pct = scalar, U08, 430, "%ReqFuel", 1, 0.00000, 0, 255, 0 fp_off_duty = scalar, U08, 431, "%", 0.392, 0.00000, 0, 100, 1 fp_min_duty = scalar, U08, 432, "%", 0.392, 0.00000, 0, 100, 1 fp_max_duty = scalar, U08, 433, "%", 0.392, 0.00000, 0, 100, 1 tcs_in = bits, U08, 434, [0:5], $PIN_DIGIN_OFF tcs_moves = scalar, U08, 435, "", 1, 0, 1, 50, 0 tcs_offtime = scalar, U16, 436, "s", 0.001, 0, 0.001, 0.200, 3 tcs_ontime = scalar, U16, 438, "s", 0.001, 0, 0.001, 0.300, 3 boost_geartarg1 = scalar, S16, 440, "kPa", 0.10000, 0.00000, 0.00, 500, 1 boost_geartarg2 = scalar, S16, 442, "kPa", 0.10000, 0.00000, 0.00, 500, 1 boost_geartarg3 = scalar, S16, 444, "kPa", 0.10000, 0.00000, 0.00, 500, 1 boost_geartarg4 = scalar, S16, 446, "kPa", 0.10000, 0.00000, 0.00, 500, 1 boost_geartarg5 = scalar, S16, 448, "kPa", 0.10000, 0.00000, 0.00, 500, 1 boost_geartarg6 = scalar, S16, 450, "kPa", 0.10000, 0.00000, 0.00, 500, 1 fp_drop_psig = scalar, U16, 452, "psi.g", 0.014504, 0.00000, 0, 100, 1 fp_drop_kpag = scalar, U16, 452, "kPa.g", 0.1, 0.00000, 0, 680, 1 fp_drop_load = scalar, U16, 454, "%", 0.1, 0, 0, 500, 1 fp_drop_rpm = scalar, U16, 456, "rpm", 1, 0, 0, 20000, 0 fp_drop_time = scalar, U16, 458, "s", 0.001,0, 0, 10, 2 pwm_opt_load_a_offset = scalar, U16, 460, "", 1, 0, 0, 65535, 0 pwm_opt_load_b_offset = scalar, U16, 462, "", 1, 0, 0, 65535, 0 pwm_opt_load_c_offset = scalar, U16, 464, "", 1, 0, 0, 65535, 0 pwm_opt_load_d_offset = scalar, U16, 466, "", 1, 0, 0, 65535, 0 pwm_opt_load_e_offset = scalar, U16, 468, "", 1, 0, 0, 65535, 0 pwm_opt_load_f_offset = scalar, U16, 470, "", 1, 0, 0, 65535, 0 pwm_opt_load_a_size = scalar, U08, 472, "", 1, 0, 0, 255, 0 pwm_opt_load_b_size = scalar, U08, 473, "", 1, 0, 0, 255, 0 pwm_opt_load_c_size = scalar, U08, 474, "", 1, 0, 0, 255, 0 pwm_opt_load_d_size = scalar, U08, 475, "", 1, 0, 0, 255, 0 pwm_opt_load_e_size = scalar, U08, 476, "", 1, 0, 0, 255, 0 pwm_opt_load_f_size = scalar, U08, 477, "", 1, 0, 0, 255, 0 can_gps_id = scalar, U08, 478, "", 1.00000, 0.00000, 0.00, 14, 0 ; can_gps_table = scalar, U08, 479, "", 1.00000, 0.00000, 0, 15, 0 ; * ( 1 byte) can_gps_offset = scalar, U16, 480, "bytes", 1.00000, 0.00000, 0, 4095, 0 spkadj_max = scalar, S16, 482, "deg", 0.10000, 0.00000,0, 45, 1 spkadj_min = scalar, S16, 484, "deg", 0.10000, 0.00000,-45, 0, 1 can_outpc_msg = scalar, U16, 486, "", 1, 0.00000, 1, 2047, 0 can_outpc_gp00_master = bits, U08, 488, [7:7], "Off", "On" #define CAN_OUTPC_FREQ = "Off", "1Hz", "2Hz", "5Hz", "10Hz", "20Hz", "50Hz", "100Hz" can_outpc_gp00 = bits, U08, 488, [0:2], $CAN_OUTPC_FREQ can_outpc_gp01 = bits, U08, 489, [0:2], $CAN_OUTPC_FREQ can_outpc_gp02 = bits, U08, 490, [0:2], $CAN_OUTPC_FREQ can_outpc_gp03 = bits, U08, 491, [0:2], $CAN_OUTPC_FREQ can_outpc_gp04 = bits, U08, 492, [0:2], $CAN_OUTPC_FREQ can_outpc_gp05 = bits, U08, 493, [0:2], $CAN_OUTPC_FREQ can_outpc_gp06 = bits, U08, 494, [0:2], $CAN_OUTPC_FREQ can_outpc_gp07 = bits, U08, 495, [0:2], $CAN_OUTPC_FREQ can_outpc_gp08 = bits, U08, 496, [0:2], $CAN_OUTPC_FREQ can_outpc_gp09 = bits, U08, 497, [0:2], $CAN_OUTPC_FREQ can_outpc_gp10 = bits, U08, 498, [0:2], $CAN_OUTPC_FREQ can_outpc_gp11 = bits, U08, 499, [0:2], $CAN_OUTPC_FREQ can_outpc_gp12 = bits, U08, 500, [0:2], $CAN_OUTPC_FREQ can_outpc_gp13 = bits, U08, 501, [0:2], $CAN_OUTPC_FREQ can_outpc_gp14 = bits, U08, 502, [0:2], $CAN_OUTPC_FREQ can_outpc_gp15 = bits, U08, 503, [0:2], $CAN_OUTPC_FREQ can_outpc_gp16 = bits, U08, 504, [0:2], $CAN_OUTPC_FREQ can_outpc_gp17 = bits, U08, 505, [0:2], $CAN_OUTPC_FREQ can_outpc_gp18 = bits, U08, 506, [0:2], $CAN_OUTPC_FREQ can_outpc_gp19 = bits, U08, 507, [0:2], $CAN_OUTPC_FREQ can_outpc_gp20 = bits, U08, 508, [0:2], $CAN_OUTPC_FREQ can_outpc_gp21 = bits, U08, 509, [0:2], $CAN_OUTPC_FREQ can_outpc_gp22 = bits, U08, 510, [0:2], $CAN_OUTPC_FREQ can_outpc_gp23 = bits, U08, 511, [0:2], $CAN_OUTPC_FREQ can_outpc_gp24 = bits, U08, 512, [0:2], $CAN_OUTPC_FREQ can_outpc_gp25 = bits, U08, 513, [0:2], $CAN_OUTPC_FREQ can_outpc_gp26 = bits, U08, 514, [0:2], $CAN_OUTPC_FREQ can_outpc_gp27 = bits, U08, 515, [0:2], $CAN_OUTPC_FREQ can_outpc_gp28 = bits, U08, 516, [0:2], $CAN_OUTPC_FREQ can_outpc_gp29 = bits, U08, 517, [0:2], $CAN_OUTPC_FREQ can_outpc_gp30 = bits, U08, 518, [0:2], $CAN_OUTPC_FREQ can_outpc_gp31 = bits, U08, 519, [0:2], $CAN_OUTPC_FREQ can_outpc_gp32 = bits, U08, 520, [0:2], $CAN_OUTPC_FREQ can_outpc_gp33 = bits, U08, 521, [0:2], $CAN_OUTPC_FREQ can_outpc_gp34 = bits, U08, 522, [0:2], $CAN_OUTPC_FREQ can_outpc_gp35 = bits, U08, 523, [0:2], $CAN_OUTPC_FREQ can_outpc_gp36 = bits, U08, 524, [0:2], $CAN_OUTPC_FREQ can_outpc_gp37 = bits, U08, 525, [0:2], $CAN_OUTPC_FREQ can_outpc_gp38 = bits, U08, 526, [0:2], $CAN_OUTPC_FREQ can_outpc_gp39 = bits, U08, 527, [0:2], $CAN_OUTPC_FREQ can_outpc_gp40 = bits, U08, 528, [0:2], $CAN_OUTPC_FREQ can_outpc_gp41 = bits, U08, 529, [0:2], $CAN_OUTPC_FREQ can_outpc_gp42 = bits, U08, 530, [0:2], $CAN_OUTPC_FREQ can_outpc_gp43 = bits, U08, 531, [0:2], $CAN_OUTPC_FREQ can_outpc_gp44 = bits, U08, 532, [0:2], $CAN_OUTPC_FREQ can_outpc_gp45 = bits, U08, 533, [0:2], $CAN_OUTPC_FREQ can_outpc_gp46 = bits, U08, 534, [0:2], $CAN_OUTPC_FREQ can_outpc_gp47 = bits, U08, 535, [0:2], $CAN_OUTPC_FREQ can_outpc_gp48 = bits, U08, 536, [0:2], $CAN_OUTPC_FREQ can_outpc_gp49 = bits, U08, 537, [0:2], $CAN_OUTPC_FREQ can_outpc_gp50 = bits, U08, 538, [0:2], $CAN_OUTPC_FREQ can_outpc_gp51 = bits, U08, 539, [0:2], $CAN_OUTPC_FREQ can_outpc_gp52 = bits, U08, 540, [0:2], $CAN_OUTPC_FREQ can_outpc_gp53 = bits, U08, 541, [0:2], $CAN_OUTPC_FREQ can_outpc_gp54 = bits, U08, 542, [0:2], $CAN_OUTPC_FREQ can_outpc_gp55 = bits, U08, 543, [0:2], $CAN_OUTPC_FREQ can_outpc_gp56 = bits, U08, 544, [0:2], $CAN_OUTPC_FREQ can_outpc_gp57 = bits, U08, 545, [0:2], $CAN_OUTPC_FREQ can_outpc_gp58 = bits, U08, 546, [0:2], $CAN_OUTPC_FREQ can_outpc_gp59 = bits, U08, 547, [0:2], $CAN_OUTPC_FREQ can_outpc_gp60 = bits, U08, 548, [0:2], $CAN_OUTPC_FREQ can_outpc_gp61 = bits, U08, 549, [0:2], $CAN_OUTPC_FREQ can_outpc_gp62 = bits, U08, 550, [0:2], $CAN_OUTPC_FREQ can_outpc_gp63 = bits, U08, 551, [0:2], $CAN_OUTPC_FREQ can_rcv_opt_on = bits, U08, 552, [0:0], "Off", "On" can_rcv_opt_share = bits, U08, 552, [1:1], "Off", "On" ; engine_state_accel_fast_thresh = scalar, S16, 553, "rpm/sec", 10, 0, 0, 20000, 0 engine_state_accel_slow_thresh = scalar, S16, 555, "rpm/sec", 10, 0, 0, 20000, 0 ; engine_state_decel_fast_thresh = scalar, S16, 557, "rpm/sec", 10, 0, -20000, 0, 0 engine_state_decel_slow_thresh = scalar, S16, 559, "rpm/sec", 10, 0, -20000, 0, 0 engine_state_tps_closed_thresh = scalar, S16, 561, "%", 0.1, 0, 0, 5, 1 engine_state_overrun_map_thresh = scalar, S16, 563, "kPa", 0.1, 0, 0, 100, 1 engine_state_overrun_rpm_thresh = scalar, U16, 565, "rpm", 1, 0, 0, 20000, 0 engine_state_flags_use_vss = bits, U08, 567, [0:0], "Off", "Use VSS" vss_samp_int = scalar, U16, 568, "ms", 0.05, 0, 10, 50, 2 engine_state_vss_thresh = scalar, U16, 570, { bitStringValue( prefSpeedUnits , prefSpeedUnits ) }, { msToPrefUnitsScale }, 0, 0, 300, 0 engine_state_tps_wot_thresh = scalar, S16, 572, "%", 0.1, 0, 80, 100, 1 oilpress_time = scalar, U16, 574, "s", 0.001,0, 0, 10, 2 can_bcast_lotus_fuel = bits, U08, 576, [0:3], "Sensor 1", "Sensor 2","Sensor 3","Sensor 4","Sensor 5","Sensor 6","Sensor 7","Sensor 8","Sensor 9","Sensor 10","Sensor 11","Sensor 12","Sensor 13","Sensor 14","Sensor 15","Sensor 16" tbrake_opt1_creep = bits, U08, 577, [0:0], "Single steps", "Creep mode" launch_debounce = scalar, U08, 578, "s", 0.001, 0, 0.001, 0.020, 3 shiftlight_opt2_test= bits, U08, 579, [0:0], "Off", "On" shiftlight_opt_gear = bits, U08, 579, [7:7], "Off", "On" ; somewhat big gap here ; ###### ### ##### ##### # ###### ; # # # # # # # # # # # ; # # # # # # # # # ; ###### # # #### # #### # # ###### ; # # # # # # # ####### # ; # # # # # # # # # # ; ###### ### ##### ##### # # # ; ; big pad dummyfield = bits, U08, 637, [0:0], "","" staged_out2 = bits, U08, 638, [0:6], $PIN_DIGOUT_CANOUT_OFF staged_out2_inv = bits, U08, 638, [7:7], "Normal", "Inverted" staged_out2_time = scalar, U08, 639, "s", 0.1, 0, 0, 1, 1 u16_debug640 = scalar, U16, 640, "", 1, 0.00000, 0, 65536, 0 staged_out1 = bits, U08, 642, [0:6], $PIN_DIGOUT_CANOUT_OFF staged_out1_inv = bits, U08, 642, [7:7], "Normal", "Inverted" log_style4_opt = bits, U08, 643, [0:1], "RPM", "TPS", "MAP", "INVALID" log_trig_rpm = scalar, U16, 644, "RPM", 1, 0, 0, 20000, 0 log_trig_tps = scalar, U16, 646, "%", 0.1, 0, 0, 100, 0 baudhigh = scalar, U32, 648, "", 1.00000, 0.00000,9600.0,500000.0, 0 ; x ( 4 bytes) fuelCorr_default = scalar, U08, 652, "%", 1.00000, 0.00000, 50, 255, 0 sdpulse_out = bits, U08, 653, [0:6], $PIN_DIGOUT_CANOUT_OFF fuelSpkDel_default = scalar, S16, 654, "deg", 0.10000, 0.00000,-45.00, 45.00, 1 map_phase_thresh = scalar, S16, 656, "kPa", 0.10000, 0.00000, 0.00, 500, 1 flex_pct0 = scalar, U16, 658, "%", 0.1, 0.00000, 0, 100,1 flex_pct1 = scalar, U16, 660, "%", 0.1, 0.00000, 0, 100,1 ;generic sensors sensor01_source = bits, U08, 662, [0:5], $PIN_ADCS_OFF sensor02_source = bits, U08, 663, [0:5], $PIN_ADCS_OFF sensor03_source = bits, U08, 664, [0:5], $PIN_ADCS_OFF sensor04_source = bits, U08, 665, [0:5], $PIN_ADCS_OFF sensor05_source = bits, U08, 666, [0:5], $PIN_ADCS_OFF sensor06_source = bits, U08, 667, [0:5], $PIN_ADCS_OFF sensor07_source = bits, U08, 668, [0:5], $PIN_ADCS_OFF sensor08_source = bits, U08, 669, [0:5], $PIN_ADCS_OFF sensor09_source = bits, U08, 670, [0:5], $PIN_ADCS_OFF sensor10_source = bits, U08, 671, [0:5], $PIN_ADCS_OFF sensor11_source = bits, U08, 672, [0:5], $PIN_ADCS_OFF sensor12_source = bits, U08, 673, [0:5], $PIN_ADCS_OFF sensor13_source = bits, U08, 674, [0:5], $PIN_ADCS_OFF sensor14_source = bits, U08, 675, [0:5], $PIN_ADCS_OFF sensor15_source = bits, U08, 676, [0:5], $PIN_ADCS_OFF sensor16_source = bits, U08, 677, [0:5], "INVALID", "ECU temp", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID" #define GEN_SENSOR_OPTS = "Raw", "Linear", "Same as MAP", "Same as CLT", "Same as MAT", "Same as EGO", "Custom#1", "GM calibration", "INVALID", "Linear 0.5-4.5V", "Raw/10", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID" sensor01_trans = bits, U08, 678, [0:3], $GEN_SENSOR_OPTS sensor02_trans = bits, U08, 679, [0:3], $GEN_SENSOR_OPTS sensor03_trans = bits, U08, 680, [0:3], $GEN_SENSOR_OPTS sensor04_trans = bits, U08, 681, [0:3], $GEN_SENSOR_OPTS sensor05_trans = bits, U08, 682, [0:3], $GEN_SENSOR_OPTS sensor06_trans = bits, U08, 683, [0:3], $GEN_SENSOR_OPTS sensor07_trans = bits, U08, 684, [0:3], $GEN_SENSOR_OPTS sensor08_trans = bits, U08, 685, [0:3], $GEN_SENSOR_OPTS sensor09_trans = bits, U08, 686, [0:3], $GEN_SENSOR_OPTS sensor10_trans = bits, U08, 687, [0:3], $GEN_SENSOR_OPTS sensor11_trans = bits, U08, 688, [0:3], $GEN_SENSOR_OPTS sensor12_trans = bits, U08, 689, [0:3], $GEN_SENSOR_OPTS sensor13_trans = bits, U08, 690, [0:3], $GEN_SENSOR_OPTS sensor14_trans = bits, U08, 691, [0:3], $GEN_SENSOR_OPTS sensor15_trans = bits, U08, 692, [0:3], $GEN_SENSOR_OPTS sensor16_trans = bits, U08, 693, [0:3], "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "Default calibration", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID" sensor01_val0 = scalar, S16, 694, "", 0.10000, 0.00000, -3276.7, 3276.7, 1 ; * ( 2 bytes) sensor02_val0 = scalar, S16, 696, "", 0.10000, 0.00000, -3276.7, 3276.7, 1 ; * ( 2 bytes) sensor03_val0 = scalar, S16, 698, "", 0.10000, 0.00000, -3276.7, 3276.7, 1 ; * ( 2 bytes) sensor04_val0 = scalar, S16, 700, "", 0.10000, 0.00000, -3276.7, 3276.7, 1 ; * ( 2 bytes) sensor05_val0 = scalar, S16, 702, "", 0.10000, 0.00000, -3276.7, 3276.7, 1 ; * ( 2 bytes) sensor06_val0 = scalar, S16, 704, "", 0.10000, 0.00000, -3276.7, 3276.7, 1 ; * ( 2 bytes) sensor07_val0 = scalar, S16, 706, "", 0.10000, 0.00000, -3276.7, 3276.7, 1 ; * ( 2 bytes) sensor08_val0 = scalar, S16, 708, "", 0.10000, 0.00000, -3276.7, 3276.7, 1 ; * ( 2 bytes) sensor09_val0 = scalar, S16, 710, "", 0.10000, 0.00000, -3276.7, 3276.7, 1 ; * ( 2 bytes) sensor10_val0 = scalar, S16, 712, "", 0.10000, 0.00000, -3276.7, 3276.7, 1 ; * ( 2 bytes) sensor11_val0 = scalar, S16, 714, "", 0.10000, 0.00000, -3276.7, 3276.7, 1 ; * ( 2 bytes) sensor12_val0 = scalar, S16, 716, "", 0.10000, 0.00000, -3276.7, 3276.7, 1 ; * ( 2 bytes) sensor13_val0 = scalar, S16, 718, "", 0.10000, 0.00000, -3276.7, 3276.7, 1 ; * ( 2 bytes) sensor14_val0 = scalar, S16, 720, "", 0.10000, 0.00000, -3276.7, 3276.7, 1 ; * ( 2 bytes) sensor15_val0 = scalar, S16, 722, "", 0.10000, 0.00000, -3276.7, 3276.7, 1 ; * ( 2 bytes) sensor16_val0 = scalar, S16, 724, "", 0.10000, 0.00000, -3276.7, 3276.7, 1 ; * ( 2 bytes) sensor01_max = scalar, S16, 726, "", 0.10000, 0.00000, -3276.7, 3276.7, 1 ; * ( 2 bytes) sensor02_max = scalar, S16, 728, "", 0.10000, 0.00000, -3276.7, 3276.7, 1 ; * ( 2 bytes) sensor03_max = scalar, S16, 730, "", 0.10000, 0.00000, -3276.7, 3276.7, 1 ; * ( 2 bytes) sensor04_max = scalar, S16, 732, "", 0.10000, 0.00000, -3276.7, 3276.7, 1 ; * ( 2 bytes) sensor05_max = scalar, S16, 734, "", 0.10000, 0.00000, -3276.7, 3276.7, 1 ; * ( 2 bytes) sensor06_max = scalar, S16, 736, "", 0.10000, 0.00000, -3276.7, 3276.7, 1 ; * ( 2 bytes) sensor07_max = scalar, S16, 738, "", 0.10000, 0.00000, -3276.7, 3276.7, 1 ; * ( 2 bytes) sensor08_max = scalar, S16, 740, "", 0.10000, 0.00000, -3276.7, 3276.7, 1 ; * ( 2 bytes) sensor09_max = scalar, S16, 742, "", 0.10000, 0.00000, -3276.7, 3276.7, 1 ; * ( 2 bytes) sensor10_max = scalar, S16, 744, "", 0.10000, 0.00000, -3276.7, 3276.7, 1 ; * ( 2 bytes) sensor11_max = scalar, S16, 746, "", 0.10000, 0.00000, -3276.7, 3276.7, 1 ; * ( 2 bytes) sensor12_max = scalar, S16, 748, "", 0.10000, 0.00000, -3276.7, 3276.7, 1 ; * ( 2 bytes) sensor13_max = scalar, S16, 750, "", 0.10000, 0.00000, -3276.7, 3276.7, 1 ; * ( 2 bytes) sensor14_max = scalar, S16, 752, "", 0.10000, 0.00000, -3276.7, 3276.7, 1 ; * ( 2 bytes) sensor15_max = scalar, S16, 754, "", 0.10000, 0.00000, -3276.7, 3276.7, 1 ; * ( 2 bytes) sensor16_max = scalar, S16, 756, "", 0.10000, 0.00000, -3276.7, 3276.7, 1 ; * ( 2 bytes) sensor01LF = scalar, U08, 758, "", 1,0,10,100,0 sensor02LF = scalar, U08, 759, "", 1,0,10,100,0 sensor03LF = scalar, U08, 760, "", 1,0,10,100,0 sensor04LF = scalar, U08, 761, "", 1,0,10,100,0 sensor05LF = scalar, U08, 762, "", 1,0,10,100,0 sensor06LF = scalar, U08, 763, "", 1,0,10,100,0 sensor07LF = scalar, U08, 764, "", 1,0,10,100,0 sensor08LF = scalar, U08, 765, "", 1,0,10,100,0 sensor09LF = scalar, U08, 766, "", 1,0,10,100,0 sensor10LF = scalar, U08, 767, "", 1,0,10,100,0 sensor11LF = scalar, U08, 768, "", 1,0,10,100,0 sensor12LF = scalar, U08, 769, "", 1,0,10,100,0 sensor13LF = scalar, U08, 770, "", 1,0,10,100,0 sensor14LF = scalar, U08, 771, "", 1,0,10,100,0 sensor15LF = scalar, U08, 772, "", 1,0,10,100,0 sensor16LF = scalar, U08, 773, "", 1,0,10,100,0 sensor_temp = bits, U08, 774, [0:0], "degF", "degC" ;pad ; injOpen1 = scalar, U16, 776, "ms", 0.001, 0.00000, 0.00, 25.50, 3 ; * ( 1 byte) ; injOpen2 = scalar, U16, 778, "ms", 0.001, 0.00000, 0.00, 25.50, 3 ; * ( 1 byte) ; injOpen3 = scalar, U16, 780, "ms", 0.001, 0.00000, 0.00, 25.50, 3 ; * ( 1 byte) ; injOpen4 = scalar, U16, 782, "ms", 0.001, 0.00000, 0.00, 25.50, 3 ; * ( 1 byte) ; injOpen5 = scalar, U16, 784, "ms", 0.001, 0.00000, 0.00, 25.50, 3 ; * ( 1 byte) ; injOpen6 = scalar, U16, 786, "ms", 0.001, 0.00000, 0.00, 25.50, 3 ; * ( 1 byte) ; injOpen7 = scalar, U16, 788, "ms", 0.001, 0.00000, 0.00, 25.50, 3 ; * ( 1 byte) ; injOpen8 = scalar, U16, 790, "ms", 0.001, 0.00000, 0.00, 25.50, 3 ; * ( 1 byte) ; injOpena = scalar, U16, 792, "ms", 0.001, 0.00000, 0.00, 25.50, 3 ; * ( 1 byte) ; injOpenb = scalar, U16, 794, "ms", 0.001, 0.00000, 0.00, 25.50, 3 ; * ( 1 byte) ;next 8 not yet used ; injOpen11 = scalar, U16, 796, "ms", 0.001, 0.00000, 0.00, 25.50, 3 ; injOpen12 = scalar, U16, 798, "ms", 0.001, 0.00000, 0.00, 25.50, 3 ; injOpen13 = scalar, U16, 800, "ms", 0.001, 0.00000, 0.00, 25.50, 3 ; injOpen14 = scalar, U16, 802, "ms", 0.001, 0.00000, 0.00, 25.50, 3 ; injOpen15 = scalar, U16, 804, "ms", 0.001, 0.00000, 0.00, 25.50, 3 ; injOpen16 = scalar, U16, 806, "ms", 0.001, 0.00000, 0.00, 25.50, 3 ; injOpen17 = scalar, U16, 808, "ms", 0.001, 0.00000, 0.00, 25.50, 3 ; injOpen18 = scalar, U16, 810, "ms", 0.001, 0.00000, 0.00, 25.50, 3 shift_cut_on = bits, U08, 812, [0:0], "Off", "On" shift_cut_auto = bits, U08, 812, [1:1], "Button", "Auto" shift_cut_gear = bits, U08, 812, [2:2], "Off", "On" shift_cut_fuel = bits, U08, 812, [3:3], "Off", "On" shift_cut_in = bits, U08, 813, [0:5], $PIN_DIGIN shift_cut_out = bits, U08, 814, [0:6], $PIN_DIGOUT_OFF shift_cut_rpm = scalar, U16, 815, "RPM", 1, 0, 0, 20000, 0 shift_cut_tps = scalar, U16, 817, "%", 0.1, 0, 0, 100, 0 shift_cut_delay = scalar, U08, 819, "s", 0.01024, 0, 0, 2.55, 2 shift_cut_time = scalar, U08, 820, "s", 0.01024, 0, 0, 2.55, 2 shift_cut_add12 = scalar, U08, 821, "s", 0.01024, 0, 0, 2.55, 2 shift_cut_add23 = scalar, U08, 822, "s", 0.01024, 0, 0, 2.55, 2 shift_cut_add34 = scalar, U08, 823, "s", 0.01024, 0, 0, 2.55, 2 shift_cut_add45 = scalar, U08, 824, "s", 0.01024, 0, 0, 2.55, 2 shift_cut_add56 = scalar, U08, 825, "s", 0.01024, 0, 0, 2.55, 2 shift_cut_soldelay=scalar, U08, 826, "s", 0.01024, 0, 0, 2.55, 2 shift_cut_rpm12 = scalar, U16, 827, "RPM", 1, 0, 0, 20000, 0 shift_cut_rpm23 = scalar, U16, 829, "RPM", 1, 0, 0, 20000, 0 shift_cut_rpm34 = scalar, U16, 831, "RPM", 1, 0, 0, 20000, 0 shift_cut_rpm45 = scalar, U16, 833, "RPM", 1, 0, 0, 20000, 0 shift_cut_rpm56 = scalar, U16, 835, "RPM", 1, 0, 0, 20000, 0 shift_cut_reshift= scalar, U08, 837, "s", 0.01024, 0, 0, 2.55, 2 ;open-loop PWM. all arrays pwm_opt_on_a = bits, U08, 838, [0:0], "Off", "On" pwm_opt_freq_a = bits, U08, 838, [1:4], "On-Off", "Variable Freq", "250Hz", "225Hz", "200Hz", "175Hz", "150Hz", "125Hz", "100Hz", "78Hz", "39Hz", "26Hz", "19.5Hz", "15.6Hz", "13Hz", "11.1Hz" pwm_opt_load_a = bits, U08, 838, [5:7], "RPM", "MAP", "% baro", "TPS", "MAFload", "CLT", "BattV", "MAT" ; ITB hidden pwm_opt_on_b = bits, U08, 839, [0:0], "Off", "On" pwm_opt_freq_b = bits, U08, 839, [1:4], "On-Off", "Variable Freq", "250Hz", "225Hz", "200Hz", "175Hz", "150Hz", "125Hz", "100Hz", "78Hz", "39Hz", "26Hz", "19.5Hz", "15.6Hz", "13Hz", "11.1Hz" pwm_opt_load_b = bits, U08, 839, [5:7], "RPM", "MAP", "% baro", "TPS", "MAFload", "CLT", "BattV", "MAT" pwm_opt_on_c = bits, U08, 840, [0:0], "Off", "On" pwm_opt_freq_c = bits, U08, 840, [1:4], "On-Off", "Variable Freq", "250Hz", "225Hz", "200Hz", "175Hz", "150Hz", "125Hz", "100Hz", "78Hz", "39Hz", "26Hz", "19.5Hz", "15.6Hz", "13Hz", "11.1Hz" pwm_opt_load_c = bits, U08, 840, [5:7], "RPM", "MAP", "% baro", "TPS", "MAFload", "CLT", "BattV", "MAT" pwm_opt_on_d = bits, U08, 841, [0:0], "Off", "On" pwm_opt_freq_d = bits, U08, 841, [1:4], "On-Off", "Variable Freq", "250Hz", "225Hz", "200Hz", "175Hz", "150Hz", "125Hz", "100Hz", "78Hz", "39Hz", "26Hz", "19.5Hz", "15.6Hz", "13Hz", "11.1Hz" pwm_opt_load_d = bits, U08, 841, [5:7], "RPM", "MAP", "% baro", "TPS", "MAFload", "CLT", "BattV", "MAT" pwm_opt_on_e = bits, U08, 842, [0:0], "Off", "On" pwm_opt_freq_e = bits, U08, 842, [1:4], "On-Off", "Variable Freq", "250Hz", "225Hz", "200Hz", "175Hz", "150Hz", "125Hz", "100Hz", "78Hz", "39Hz", "26Hz", "19.5Hz", "15.6Hz", "13Hz", "11.1Hz" pwm_opt_load_e = bits, U08, 842, [5:7], "RPM", "MAP", "% baro", "TPS", "MAFload", "CLT", "BattV", "MAT" pwm_opt_on_f = bits, U08, 843, [0:0], "Off", "On" pwm_opt_freq_f = bits, U08, 843, [1:4], "On-Off", "Variable Freq", "250Hz", "225Hz", "200Hz", "175Hz", "150Hz", "125Hz", "100Hz", "78Hz", "39Hz", "26Hz", "19.5Hz", "15.6Hz", "13Hz", "11.1Hz" pwm_opt_load_f = bits, U08, 843, [5:7], "RPM", "MAP", "% baro", "TPS", "MAFload", "CLT", "BattV", "MAT" pwm_opt2_a = bits, U08, 844, [0:6], $PIN_DIGOUT_CANPWM pwm_opt2_b = bits, U08, 845, [0:6], $PIN_DIGOUT_CANPWM pwm_opt2_c = bits, U08, 846, [0:6], $PIN_DIGOUT_CANPWM pwm_opt2_d = bits, U08, 847, [0:6], $PIN_DIGOUT_CANPWM pwm_opt2_e = bits, U08, 848, [0:6], $PIN_DIGOUT_CANPWM pwm_opt2_f = bits, U08, 849, [0:6], $PIN_DIGOUT_CANPWM pwm_onabove_a = scalar, U08, 850, "%", 1, 0, 0, 100, 0 pwm_onabove_b = scalar, U08, 851, "%", 1, 0, 0, 100, 0 pwm_onabove_c = scalar, U08, 852, "%", 1, 0, 0, 100, 0 pwm_onabove_d = scalar, U08, 853, "%", 1, 0, 0, 100, 0 pwm_onabove_e = scalar, U08, 854, "%", 1, 0, 0, 100, 0 pwm_onabove_f = scalar, U08, 855, "%", 1, 0, 0, 100, 0 pwm_offbelow_a = scalar, U08, 856, "%", 1, 0, 0, 100, 0 pwm_offbelow_b = scalar, U08, 857, "%", 1, 0, 0, 100, 0 pwm_offbelow_c = scalar, U08, 858, "%", 1, 0, 0, 100, 0 pwm_offbelow_d = scalar, U08, 859, "%", 1, 0, 0, 100, 0 pwm_offbelow_e = scalar, U08, 860, "%", 1, 0, 0, 100, 0 pwm_offbelow_f = scalar, U08, 861, "%", 1, 0, 0, 100, 0 dualfuel_sw_on = bits, U08, 862, [0:0], "Off", "On" dualfuel_sw_fuel = bits,U08, 862, [1:1], "Off", "On" dualfuel_sw_spk = bits, U08, 862, [2:2], "Off", "On" dualfuel_sw_afr = bits, U08, 862, [3:3], "Off", "On" dualfuel_sw_rf = bits, U08, 862, [4:4], "Off", "On" dualfuel_sw_stoich=bits,U08, 862, [5:5], "Off", "On" dualfuel_sw_wue = bits, U08, 862, [6:6], "Off", "On" dualfuel_sw_ase = bits, U08, 862, [7:7], "Off", "On" dualfuel_sw2_prime=bits,U08, 863, [0:0], "Off", "On" dualfuel_sw2_crank=bits,U08, 863, [1:1], "Off", "On" dualfuel_sw2_injp =bits,U08, 863, [2:2], "Off", "On" dualfuel_sw2_smpw =bits,U08, 863, [3:3], "Off", "On" dualfuel_sw2_ob =bits ,U08, 863, [4:4], "Off", "On" dualfuel_sw2_boosw=bits,U08, 863, [5:5], "Off", "On" dualfuel_sw2_ae =bits,U08, 863, [6:6], "Off", "On" opentime2_opt1_master = bits, U08, 864, [7:7], "Same", "Individual" opentime2_opt1 = bits, U08, 864, [0:1], $OPENTIME_OPTS opentime2_opt2 = bits, U08, 865, [0:1], $OPENTIME_OPTS opentime2_opt3 = bits, U08, 866, [0:1], $OPENTIME_OPTS opentime2_opt4 = bits, U08, 867, [0:1], $OPENTIME_OPTS opentime2_opt5 = bits, U08, 868, [0:1], $OPENTIME_OPTS opentime2_opt6 = bits, U08, 869, [0:1], $OPENTIME_OPTS opentime2_opt7 = bits, U08, 870, [0:1], $OPENTIME_OPTS opentime2_opt8 = bits, U08, 871, [0:1], $OPENTIME_OPTS opentime2_opta = bits, U08, 872, [0:1], $OPENTIME_OPTS opentime2_opta_pwm= bits, U08, 872, [4:4], "Off", "On" opentime2_optb = bits, U08, 873, [0:1], $OPENTIME_OPTS opentime2_optb_pwm= bits, U08, 873, [4:4], "Off", "On" opentime2_optb_own= bits, U08, 873, [5:5], "Off", "On" opentime2_opt11 = bits, U08, 874, [0:1], $OPENTIME_OPTS opentime2_opt12 = bits, U08, 875, [0:1], $OPENTIME_OPTS opentime2_opt13 = bits, U08, 876, [0:1], $OPENTIME_OPTS opentime2_opt14 = bits, U08, 877, [0:1], $OPENTIME_OPTS opentime2_opt15 = bits, U08, 878, [0:1], $OPENTIME_OPTS opentime2_opt16 = bits, U08, 879, [0:1], $OPENTIME_OPTS ; opentime2_opt17 = bits, U08, 880, [0:1], $OPENTIME_OPTS ; opentime2_opt18 = bits, U08, 881, [0:1], $OPENTIME_OPTS smallpw2_opt1_master = bits, U08, 864, [7:7], "Off", "On" smallpw2_opt1 = bits, U08, 882, [0:1], "Curve 1", "Curve 2", "Curve 3", "Curve 4" smallpw2_opt2 = bits, U08, 883, [0:1], "Curve 1", "Curve 2", "Curve 3", "Curve 4" smallpw2_opt3 = bits, U08, 884, [0:1], "Curve 1", "Curve 2", "Curve 3", "Curve 4" smallpw2_opt4 = bits, U08, 885, [0:1], "Curve 1", "Curve 2", "Curve 3", "Curve 4" smallpw2_opt5 = bits, U08, 886, [0:1], "Curve 1", "Curve 2", "Curve 3", "Curve 4" smallpw2_opt6 = bits, U08, 887, [0:1], "Curve 1", "Curve 2", "Curve 3", "Curve 4" smallpw2_opt7 = bits, U08, 888, [0:1], "Curve 1", "Curve 2", "Curve 3", "Curve 4" smallpw2_opt8 = bits, U08, 889, [0:1], "Curve 1", "Curve 2", "Curve 3", "Curve 4" smallpw2_opta = bits, U08, 890, [0:1], "Curve 1", "Curve 2", "Curve 3", "Curve 4" smallpw2_optb = bits, U08, 891, [0:1], "Curve 1", "Curve 2", "Curve 3", "Curve 4" smallpw2_opt11 = bits, U08, 892, [0:1], "Curve 1", "Curve 2", "Curve 3", "Curve 4" smallpw2_opt12 = bits, U08, 893, [0:1], "Curve 1", "Curve 2", "Curve 3", "Curve 4" smallpw2_opt13 = bits, U08, 894, [0:1], "Curve 1", "Curve 2", "Curve 3", "Curve 4" smallpw2_opt14 = bits, U08, 895, [0:1], "Curve 1", "Curve 2", "Curve 3", "Curve 4" smallpw2_opt15 = bits, U08, 896, [0:1], "Curve 1", "Curve 2", "Curve 3", "Curve 4" smallpw2_opt16 = bits, U08, 897, [0:1], "Curve 1", "Curve 2", "Curve 3", "Curve 4" ; smallpw2_opt17 = bits, U08, 898, [0:1], "Curve 1", "Curve 2", "Curve 3", "Curve 4" ; smallpw2_opt18 = bits, U08, 899, [0:1], "Curve 1", "Curve 2", "Curve 3", "Curve 4" dualfuel_pin = bits, U08, 900, [0:5], $PIN_DIGIN dualfuel_opt_temp= bits, U08, 901, [0:0], "Off", "On" dualfuel_opt_press=bits, U08, 901, [1:1], "Off", "On" dualfuel_opt_mode = bits,U08, 901, [2:3], "Switching", "Dual table", "Flex blend", "INVALID" dualfuel_opt_out = bits,U08, 901, [4:4], "Shared outputs+relay", "Different outputs" inj2Open1 = scalar, U16, 902, "ms", 0.001, 0.00000, 0.00, 25.50, 3 ; * ( 1 byte) inj2Open2 = scalar, U16, 904, "ms", 0.001, 0.00000, 0.00, 25.50, 3 ; * ( 1 byte) inj2Open3 = scalar, U16, 906, "ms", 0.001, 0.00000, 0.00, 25.50, 3 ; * ( 1 byte) inj2Open4 = scalar, U16, 908, "ms", 0.001, 0.00000, 0.00, 25.50, 3 ; * ( 1 byte) inj2Open5 = scalar, U16, 910, "ms", 0.001, 0.00000, 0.00, 25.50, 3 ; * ( 1 byte) inj2Open6 = scalar, U16, 912, "ms", 0.001, 0.00000, 0.00, 25.50, 3 ; * ( 1 byte) inj2Open7 = scalar, U16, 914, "ms", 0.001, 0.00000, 0.00, 25.50, 3 ; * ( 1 byte) inj2Open8 = scalar, U16, 916, "ms", 0.001, 0.00000, 0.00, 25.50, 3 ; * ( 1 byte) inj2Opena = scalar, U16, 918, "ms", 0.001, 0.00000, 0.00, 25.50, 3 ; * ( 1 byte) inj2Openb = scalar, U16, 920, "ms", 0.001, 0.00000, 0.00, 25.50, 3 ; * ( 1 byte) ;next 8 not yet used inj2Open11 = scalar, U16, 922, "ms", 0.001, 0.00000, 0.00, 25.50, 3 inj2Open12 = scalar, U16, 924, "ms", 0.001, 0.00000, 0.00, 25.50, 3 inj2Open13 = scalar, U16, 926, "ms", 0.001, 0.00000, 0.00, 25.50, 3 inj2Open14 = scalar, U16, 928, "ms", 0.001, 0.00000, 0.00, 25.50, 3 inj2Open15 = scalar, U16, 930, "ms", 0.001, 0.00000, 0.00, 25.50, 3 inj2Open16 = scalar, U16, 932, "ms", 0.001, 0.00000, 0.00, 25.50, 3 inj2Open17 = scalar, U16, 934, "ms", 0.001, 0.00000, 0.00, 25.50, 3 inj2Open18 = scalar, U16, 936, "ms", 0.001, 0.00000, 0.00, 25.50, 3 inj2PwmT = scalar, U08, 938, "ms", 0.12800, 0.128, 0.00, 32.64, 1 ; * ( 1 byte) inj2PwmPd = scalar, U08, 939, "us", 1.00000, 0.00000, 40.00, 100.00, 0 ; * ( 1 byte) inj2PwmP = scalar, U08, 940, "%", 1.00000, 0.00000, 0.00, 100.00, 0 ; * ( 1 byte) inj2PwmT2 = scalar, U08, 941, "ms", 0.12800, 0.128, 0.00, 32.64, 1 ; * ( 1 byte) inj2PwmPd2 = scalar, U08, 942, "us", 1.00000, 0.00000, 40.00, 100.00, 0 ; * ( 1 byte) inj2PwmP2 = scalar, U08, 943, "%", 1.00000, 0.00000, 0.00, 100.00, 0 ; * ( 1 byte) dualfuel_temp_sens = bits, U08, 944, [0:3], "Off", "Sensor 1", "Sensor 2","Sensor 3","Sensor 4","Sensor 5","Sensor 6","Sensor 7","Sensor 8","Sensor 9","Sensor 10","Sensor 11","Sensor 12","Sensor 13","Sensor 14","Sensor 15" dualfuel_press_sens = bits, U08, 945, [0:3], "Off", "Sensor 1", "Sensor 2","Sensor 3","Sensor 4","Sensor 5","Sensor 6","Sensor 7","Sensor 8","Sensor 9","Sensor 10","Sensor 11","Sensor 12","Sensor 13","Sensor 14","Sensor 15" dualfuel_press_type = bits, U08, 945, [6:7], "Gauge", "Absolute", "Differential", "INVALID" ; Leave these unused variables matching MS2 in case trans controller erroneously adjusts them ; FuelAdj 946 ; SpkAdj, 948 ; IdleAdj, 950 ; SprAdj; 952 pwm_opt_curve_a = bits, U08, 954, [0:0], "Table", "Curve" pwm_opt_curve_b = bits, U08, 954, [1:1], "Table", "Curve" pwm_opt_curve_c = bits, U08, 954, [2:2], "Table", "Curve" pwm_opt_curve_d = bits, U08, 954, [3:3], "Table", "Curve" pwm_opt_curve_e = bits, U08, 954, [4:4], "Table", "Curve" pwm_opt_curve_f = bits, U08, 954, [5:5], "Table", "Curve" ;gap ITB_load_mappoint = scalar, S16, 956, "% baro", 0.1000, 0, 30, 100.0, 1 ITB_load_idletpsthresh = scalar, S16, 958, "%", 0.1000, 0, -10, 100, 0 idle_voltage_comp_voltage = array, S16, 960, [6], "V", 0.1000, 0, 9, 17, 1 idle_voltage_comp_delta = array, S16, 972, [6], "%", 0.392, 0.00000, -20, 20, 1 ac_idleup_max_rpm = scalar, U16, 984, "rpm", 1, 0, 1000, 20000, 0 llstg_in = bits, U08, 986, [0:5], $PIN_DIGIN_OFF llstg_out = bits, U08, 987, [0:6], $PIN_DIGOUT kickdelay = scalar, U16, 988, "ms", 0.001,0.00000,0.1,35.00,3 log_trig_map = scalar, S16, 990, "%", 0.1, 0, 0, 500, 0 flexpct_default = scalar, U16, 992, "%", 0.1, 0.00000, 0, 100,1 inpshare_test2 = scalar, U16, 994, "", 1, 0, 0, 65535, 0, controllerPriority inpshare_test1 = scalar, U08, 996, "", 1, 0, 0, 255, 0, controllerPriority page = 3 ; 8 boost_ctl_load_targets = array, S16, 0, [8x8], "kPa", 0.1, 0, 0, 700, 1 boost_ctl_loadtarg_tps_bins=array, S16, 128, [8], "%", 0.1, 0, 0, 100, 1 boost_ctl_loadtarg_rpm_bins=array, U16, 144, [8], "rpm", 1, 0, 0, 20000, 0 boost_ctl_pwm_targets = array, U08, 160, [8x8], "%", 1, 0, 0, 100, 0 boost_ctl_pwmtarg_tps_bins=array, S16, 224, [8], "%", 0.1, 0, 0, 100, 1 boost_ctl_pwmtarg_rpm_bins=array, U16, 240, [8], "rpm", 1, 0, 0, 20000, 0 primePWTable = array, S16, 256, [ 10], "ms", 0.10000, 0.00000, 0.00, 65.00, 1 ; * ( 20 bytes) crankPctTable =array, U16, 276, [ 10], "%", 1, 1, 1, 10000, 0 ; * ( 20 bytes) asePctTable =array, S16, 296, [ 10], "%", 1.00000, 0.00000, 0.00, 400.00, 0 ; * ( 2 bytes) aseCntTable =array, S16, 316, [ 10], "cycles", 1.00000, 0.00000, 0.00, 2500.00, 0 ; * ( 2 bytes) #if CELSIUS matTemps =array, S16, 336, [ 6], "°C", 0.05555, -320.000,-40.00, 150.00, 1 ; * ( 12 bytes) #else matTemps =array, S16, 336, [ 6], "°F", 0.10000, 0.00000,-40.00, 300.00, 1 #endif matRetard =array, U08, 348, [ 6], "deg", 0.10000, 0.00000, 0.00, 25.5, 1 ; * ( 6 bytes) EAEAWCRPMbins = array, U16, 354, [ 12], "rpm", 1.00000, 0.00000,0, 20000, 0 ; * (24 bytes) EAESOCRPMbins = array, U16, 378, [ 12], "rpm", 1.00000, 0.00000,0, 20000, 0 ; * (24 bytes) EAEAWCKPAbins = array, U16, 402, [ 12], { bitStringValue( algorithmUnits , (eaeload ? eaeload : algorithm) ) }, 0.10000, 0.00000,0, 500, 0 ; * (24 bytes) EAESOCKPAbins = array, U16, 426, [ 12], { bitStringValue( algorithmUnits , (eaeload ? eaeload : algorithm) ) }, 0.10000, 0.00000,0, 500, 0 ; * (24 bytes) EAEBAWC = array, U08, 450, [ 12], "%", 1.00000, 0.00000,0, 100, 0 ; * (12 bytes) EAEBSOC = array, U08, 462, [ 12], "%", 0.10000, 0.00000,0, 25.5, 1 ; * (12 bytes) EAEAWN = array, U08, 474, [ 12], "%", 1.00000, 0.00000,0, 200, 0 ; * (12 bytes) EAESON = array, U08, 486, [ 12], "%", 1.00000, 0.00000,0, 200, 0 ; * (12 bytes) EAEAWW = array, U08, 498, [ 12], "%", 1.00000, 0.00000,0, 200, 0 EAESOW = array, U08, 510, [ 12], "%", 1.00000, 0.00000,0, 200, 0 ; Supplemental corrections for barometer and MAT. baroCorrVals = array , S16, 522, [ 9], "kPa", 0.10000, 0.00000, 0.00, 110.00, 1 ; * ( 24 bytes) #if CELSIUS matCorrTemps2 = array , S16, 540, [ 9], "°C", 0.05555, -320.000,-40.00, 150.00, 1 ; * ( 12 bytes) #else matCorrTemps2 = array , S16, 540, [ 9], "°F", 0.10000, 0.00000,-40.00, 300.00, 1 #endif #if CELSIUS temp_table_p5 = array, S16, 558, [ 10], "°C", 0.05555, -320.000, -40.00, {clthighlim}, 0 #else temp_table_p5 = array, S16, 558, [ 10], "°F", 0.10000, 0.000,-40.00, {clthighlim}, 1 #endif #if CELSIUS EAEAWWCLTbins = array, S16, 578, [ 12], "deg", 0.05555, -320.000, -40.00, {clthighlim}, 0 EAESOWCLTbins = array, S16, 602, [ 12], "deg", 0.05555, -320.000, -40.00, {clthighlim}, 0 #else EAEAWWCLTbins = array, S16, 578, [ 12], "deg", 0.10000, 0.000,-40.00, {clthighlim}, 1 EAESOWCLTbins = array, S16, 602, [ 12], "deg", 0.10000, 0.000,-40.00, {clthighlim}, 1 #endif pwmidle_target_rpms = array, U16, 626, [ 8 ], "rpms", 1, 0.00000, 0.00, 2000, 0; #if CELSIUS pwmidle_clt_temps = array, S16, 642, [8], "°C", 0.05555, -320.000,-40.00, {clthighlim}, 1 ; #else pwmidle_clt_temps = array, S16, 642, [8], "°F", 0.10000, 0.00000,-40.00, {clthighlim}, 1 #endif ;gap 20 bytes #if CELSIUS RevLimLookup = array , S16, 678, [ 8], "°C", 0.05555, -320.000,-40.00, {clthighlim}, 1 ; * ( 16 bytes) #else RevLimLookup = array , S16, 678, [ 8], "°F", 0.10000, 0.00000,-40.00, {clthighlim}, 1 ; * ( 16 bytes) #endif RevLimRpm1 = array , U16, 694, [ 8], "RPM", 1.00000, 0.00000, 0.00,20000, 0 ; * ( 16 bytes ;gap 24 bytes RotarySplitTable = array, S16, 734, [8x8], "deg", 0.10000, 0.00000, -60, 20, 1 RotarySplitLoad = array, U16, 862, [ 8 ], { bitStringValue( algorithmUnits , IgnAlgorithm ) }, 0.10000, 0.00000, 0, 500, 0 RotarySplitRPM = array, U16, 878, [ 8 ], "RPM", 1, 0.00000, 0, 20000, 0 NoiseFilterRpm = array, U16, 894, [ 4], "RPM", 1, 0.00000, 0.00, 20000, 0 NoiseFilterLen = array, U16, 902, [ 4], "usec", 1.0, 0.00000, 0.00, 43000, 1 VariableLagTPSBins = array, U08, 910, [4], "%/sec", 1, 0.000000, 0.00, 255.00, 0 VariableLagMapLags = array, U08, 914, [4], "Lag", 1, 0.000000, 0.00, 255.00, 0 pwmidle_crank_dutyorsteps_duty = array, U16, 918, [4], "%", 0.392, 0.00000, 0, 100, 1 pwmidle_crank_dutyorsteps_steps = array, U16, 918, [4], "steps", 1, 0, 0, 512, 0 #if CELSIUS pwmidle_crank_clt_temps = array, S16, 926, [4], "°C", 0.05555, -320.000,-40.00, {clthighlim}, 1 #else pwmidle_crank_clt_temps = array, S16, 926, [4], "°F", 0.10000, 0.00000,-40.00, {clthighlim}, 1 #endif matclt_pct = array, U16, 934, [6], "%", 0.010, 0, 0, 100, 1 matclt_flow = array, U16, 946, [6], "load*rpm", 100, 0, 0, 6553500, 0 ;user defined ; these are not used by the code and are provided for users to use and learn from ; if you want to add more... you also have to make matching changes in ms2_extra.h ; and ms2_extra_main.c ; note that it you add an 'int' that two bytes are consumed and two of the following ; spare array will need to be removed! user_value1 = scalar, U16, 958, "", 1, 0, 0, 65535, 0 user_value2 = scalar, U16, 960, "", 1, 0, 0, 65535, 0 user_conf0 = bits, U08, 962, [0:0], "Off", "On" user_conf1 = bits, U08, 962, [1:2], "Mode 0", "Mode 1", "Mode 2", "Mode 3" ;spare 10 bytes ;end user defined ;pad1 baroCorrDelta = array , S16, 974, [ 9], "%", 0.10000, 0.00000,-200.0, 200.0, 1 ; * ( 6 bytes) matCorrDelta2 = array , S16, 992, [ 9], "%", 0.10000, 0.00000,-120.0, 150.0, 1 ; * ( 6 bytes) ; space page = 4 ; 9 - injector channel trims inj_trima = array , S08, 000, [6x6], "%", 0.50000, 0.00000, -63.5, 63.5, 1 ; * (36 bytes) inj_trimb = array , S08, 036, [6x6], "%", 0.50000, 0.00000, -63.5, 63.5, 1 ; * (36 bytes) inj_trimc = array , S08, 072, [6x6], "%", 0.50000, 0.00000, -63.5, 63.5, 1 ; * (36 bytes) inj_trimd = array , S08, 108, [6x6], "%", 0.50000, 0.00000, -63.5, 63.5, 1 ; * (36 bytes) inj_trime = array , S08, 144, [6x6], "%", 0.50000, 0.00000, -63.5, 63.5, 1 ; * (36 bytes) inj_trimf = array , S08, 180, [6x6], "%", 0.50000, 0.00000, -63.5, 63.5, 1 ; * (36 bytes) inj_trimg = array , S08, 216, [6x6], "%", 0.50000, 0.00000, -63.5, 63.5, 1 ; * (36 bytes) inj_trimh = array , S08, 252, [6x6], "%", 0.50000, 0.00000, -63.5, 63.5, 1 ; * (36 bytes) inj_trimi = array , S08, 288, [6x6], "%", 0.50000, 0.00000, -63.5, 63.5, 1 ; * (36 bytes) inj_trimj = array , S08, 324, [6x6], "%", 0.50000, 0.00000, -63.5, 63.5, 1 ; * (36 bytes) inj_trimk = array , S08, 360, [6x6], "%", 0.50000, 0.00000, -63.5, 63.5, 1 ; * (36 bytes) inj_triml = array , S08, 396, [6x6], "%", 0.50000, 0.00000, -63.5, 63.5, 1 ; * (36 bytes) inj_trimm = array , S08, 432, [6x6], "%", 0.50000, 0.00000, -63.5, 63.5, 1 ; * (36 bytes) inj_trimn = array , S08, 468, [6x6], "%", 0.50000, 0.00000, -63.5, 63.5, 1 ; * (36 bytes) inj_trimo = array , S08, 504, [6x6], "%", 0.50000, 0.00000, -63.5, 63.5, 1 ; * (36 bytes) inj_trimp = array , S08, 540, [6x6], "%", 0.50000, 0.00000, -63.5, 63.5, 1 ; * (36 bytes) inj_trim_rpm = array, U16, 576, [6], "rpm", 1, 0.00000, 0, 20000, 0 ; * (12 bytes) inj_trim_load =array, U16, 588, [6], { bitStringValue( algorithmUnits , algorithm ) }, 0.1, 0.0000, 0, 500, 1 inj_timing = array, S16, 600, [12x12], "deg", 0.10000, 0.00000, -360.0, 720.0, 1 inj_timing_rpm = array, U16, 888, [12], "rpm", 1, 0, 0, 20000, 0 inj_timing_load = array, S16, 912, [12], "%", 0.10000, 0, 0, 500, 1 maxafr1_load = array, U16, 936, [6], "%", 0.10000, 0, 0, 500, 1 maxafr1_rpm = array, U16, 948, [6], "rpm", 1, 0, 0, 20000, 0 #if LAMBDA maxafr1_diff = array, U08, 960, [6x6], "Lambda", { 0.1 / stoich }, 0.00000, 0.00, 0.14, 3 #else maxafr1_diff = array, U08, 960, [6x6], "AFR", 0.10000, 0.00000, 0.00, 2.00, 1 #endif dwellrpm_dwell = array, U08, 996, [6], "ms", 0.1, 0, 1, 8, 1 dwellrpm_rpm = array, U16, 1002, [6], "RPM", 1, 0, 0, 15000, 0 page = 5 ; 10 boost_ctl_load_targets2 = array, S16, 0, [8x8], "kPa", 0.1, 0, 0, 700, 1 boost_ctl_loadtarg_tps_bins2=array, S16, 128, [8], "%", 0.1, 0, 0, 100, 1 boost_ctl_loadtarg_rpm_bins2=array, U16, 144, [8], "rpm", 1, 0, 0, 20000, 0 boost_ctl_pwm_targets2 = array, U08, 160, [8x8], "%", 1, 0, 0, 100, 0 boost_ctl_pwmtarg_tps_bins2=array, S16, 224, [8], "%", 0.1, 0, 0, 100, 1 boost_ctl_pwmtarg_rpm_bins2=array, U16, 240, [8], "rpm", 1, 0, 0, 20000, 0 ; boost_timed_pct = array, U08, 256, [ 6 ], "%", 1, 0, 0, 100, 0 ; boost_timed_time= array, U16, 262, [ 6 ], "s", 0.001, 0, 0, 15, 1 ; boostvss_duty = array, U08, 274, [ 6 ], "%", 1, 0, 0, 100, 0 ; boostvss_target = array, U16, 280, [ 6 ], "kPa", 0.1, 0, 0, 700, 1 ; boostvss_speed = array, U16, 292, [ 6 ], { bitStringValue( prefSpeedUnits , prefSpeedUnits ) }, { msToPrefUnitsScale }, 0, 0, { maxspeed }, 0 ; boostvss_time = array, U16, 292, [ 6 ], "s", 0.001, 0, 0, 65, 3 ; Same data space as _speed map_sample_rpms = array, U16, 304, [ 8 ], "rpm", 1, 0, 0, 20000, 0 map_sample_timing = array, S16, 320, [ 8 ], "deg", 0.10000, 0, -360, 720, 1 #if LAMBDA afrTable1 = array , U08, 336, [12x12], "Lambda", { 0.1 / stoich }, 0.00000, 0.00, 2.00, 3 ; * (144 bytes) afrTable2 = array , U08, 480, [12x12], "Lambda", { 0.1 / stoich }, 0.00000, 0.00, 2.00, 3 ; * (144 bytes) #else afrTable1 = array , U08, 336, [12x12], "AFR", 0.10000, 0.00000, 1.00, 25.00, 1 afrTable2 = array , U08, 480, [12x12], "AFR", 0.10000, 0.00000, 1.00, 25.00, 1 #endif wueBins = array , U08, 624, [ 10], "%", 1.00000, 0.00000, { wue_lpg?50:100 }, 255.00, 0 ; * ( 10 bytes) ;gap 8 bytes iacstepTable = array , S16, 642, [ 10], "steps", 1.00000, 0.00000, 0.00, 500.00, 0 ; * ( 20 bytes) arpm_table1 = array , U16, 662, [ 12], "RPM", 1.00000, 0.00000, 0.00,20000, 0 ; * ( 24 bytes) arpm_table2 = array , U16, 686, [ 12], "RPM", 1.00000, 0.00000, 0.00,20000, 0 ; * ( 24 bytes) amap_table1 = array , S16, 710, [ 12], { bitStringValue( algorithmUnits , (afrload ? afrload : algorithm) ) }, 0.10000, 0.00000, 0.00, 500, 1 ; * ( 24 bytes) amap_table2 = array , S16, 734, [ 12], { bitStringValue( algorithmUnits , (afrload ? afrload : algorithm) ) }, 0.10000, 0.00000, 0.00, 500, 1 ; * ( 24 bytes) #if CELSIUS tempTable = array , S16, 758, [ 10], "°C", 0.05555, -320.000,-40.00, {clthighlim}, 1 ; * ( 20 bytes) Temperature bins for cranking, cold AE and WUE ; temp_table #else tempTable = array , S16, 758, [ 10], "°F", 0.10000, 0.00000,-40.00, {clthighlim}, 1 #endif ;gap dwellvolts = array , U08, 794, [ 6], "V", 0.10000, 0.00000,6, 18, 1 ; * ( 6 bytes) dwellcorr = array , U08, 800, [ 6], "%", 2, 0.00000,20, 512, 0 ; * ( 6 bytes) cold_adv_table = array , S16, 806, [ 10], "deg", 0.10000, 0.00000,-10.00, 10.00, 1 ; * ( 20 bytes) ipwmTable = array , S16, 826, [ 10], "%", 0.392, 0.00000, 0.00, 100.00, 1 ;846 ; opentimepct0 = array, U16, 846, [ 6], "%", 0.1, 0.00000, 0.00, 500, 1 ; opentimepct1 = array, U16, 858, [ 6], "%", 0.1, 0.00000, 0.00, 500, 1 ; opentimepct2 = array, U16, 870, [ 6], "%", 0.1, 0.00000, 0.00, 500, 1 ; opentimepct3 = array, U16, 882, [ 6], "%", 0.1, 0.00000, 0.00, 500, 1 ; opentimev = array, U16, 894, [ 6], "V", 0.100, 0.00000, 6, 19.2, 1 smallpw0 = array, U16, 906, [ 6], "ms", 0.001, 0.00000, 0.00, 2, 3 smallpw1 = array, U16, 918, [ 6], "ms", 0.001, 0.00000, 0.00, 2, 3 smallpw2 = array, U16, 930, [ 6], "ms", 0.001, 0.00000, 0.00, 2, 3 smallpw3 = array, U16, 942, [ 6], "ms", 0.001, 0.00000, 0.00, 2, 3 smallpwpw = array, U16, 954, [ 6], "ms", 0.001, 0.00000, 0.00, 2, 3 waterinj_rpm = array, U16, 966, [ 8], "RPM", 1, 0.00000, 0.00, 20000, 0 waterinj_map = array, U16, 982, [ 4], "kPa", 0.1, 0.00000, 0.00, 500, 0 waterinj_duty = array, U08, 990, [8 x 4], "%", 1, 0, 0, 100, 0 page = 6 ; 11 - spark channel trims spk_trima = array , S08, 000, [6x6], "%", 0.10000, 0.00000, -12.7, 12.7, 1 ; * (36 bytes) spk_trimb = array , S08, 036, [6x6], "%", 0.10000, 0.00000, -12.7, 12.7, 1 ; * (36 bytes) spk_trimc = array , S08, 072, [6x6], "%", 0.10000, 0.00000, -12.7, 12.7, 1 ; * (36 bytes) spk_trimd = array , S08, 108, [6x6], "%", 0.10000, 0.00000, -12.7, 12.7, 1 ; * (36 bytes) spk_trime = array , S08, 144, [6x6], "%", 0.10000, 0.00000, -12.7, 12.7, 1 ; * (36 bytes) spk_trimf = array , S08, 180, [6x6], "%", 0.10000, 0.00000, -12.7, 12.7, 1 ; * (36 bytes) spk_trimg = array , S08, 216, [6x6], "%", 0.10000, 0.00000, -12.7, 12.7, 1 ; * (36 bytes) spk_trimh = array , S08, 252, [6x6], "%", 0.10000, 0.00000, -12.7, 12.7, 1 ; * (36 bytes) spk_trimi = array , S08, 288, [6x6], "%", 0.10000, 0.00000, -12.7, 12.7, 1 ; * (36 bytes) spk_trimj = array , S08, 324, [6x6], "%", 0.10000, 0.00000, -12.7, 12.7, 1 ; * (36 bytes) spk_trimk = array , S08, 360, [6x6], "%", 0.10000, 0.00000, -12.7, 12.7, 1 ; * (36 bytes) spk_triml = array , S08, 396, [6x6], "%", 0.10000, 0.00000, -12.7, 12.7, 1 ; * (36 bytes) spk_trimm = array , S08, 432, [6x6], "%", 0.10000, 0.00000, -12.7, 12.7, 1 ; * (36 bytes) spk_trimn = array , S08, 468, [6x6], "%", 0.10000, 0.00000, -12.7, 12.7, 1 ; * (36 bytes) spk_trimo = array , S08, 504, [6x6], "%", 0.10000, 0.00000, -12.7, 12.7, 1 ; * (36 bytes) spk_trimp = array , S08, 540, [6x6], "%", 0.10000, 0.00000, -12.7, 12.7, 1 ; * (36 bytes) spk_trim_rpm = array, U16, 576, [6], "rpm", 1, 0.00000, 0, 20000, 0 ; * (12 bytes) spk_trim_load = array, U16, 588, [6], { bitStringValue( algorithmUnits , IgnAlgorithm ) }, 0.1, 0.0000, 0, 500, 1 ; * (12 bytes) XAcc =array, U16, 600, [5], "%", 0.10000, 0.00000, 5.00, 90, 1 ; * ( 10 bytes) TauAcc =array, U16, 610, [5], "ms",1.00000, 0.00000, 2.00, 20000, 0 ; * ( 10 bytes) XDec =array, U16, 620, [5], "%", 0.10000, 0.00000, 5.00, 90, 1 ; * ( 10 bytes) TauDec =array, U16, 630, [5], "ms",1.00000, 0.00000, 2.00, 20000, 0 ; * ( 10 bytes) XTrpms =array, U16, 640, [5], "rpm",1.00000, 0.00000, 0.00, 20000, 0 ; * ( 10 bytes) XClt =array, U16, 650, [10], "%", 1.00000, 0.00000, 0.00, 600, 0 ; * ( 20 bytes) TauClt =array, U16, 670, [10], "%", 1.00000, 0.00000, 0.00, 600, 0 ; * ( 20 bytes) #if CELSIUS XClt_temps = array, S16, 690, [ 10], "°C", 0.05555, -320.000, -40.00, {clthighlim}, 0 TauClt_temps = array, S16, 710, [ 10], "°C", 0.05555, -320.000, -40.00, {clthighlim}, 0 #else XClt_temps = array, S16, 690, [ 10], "°F", 0.10000, 0.000,-40.00, {clthighlim}, 1 TauClt_temps = array, S16, 710, [ 10], "°F", 0.10000, 0.000,-40.00, {clthighlim}, 1 #endif launch_time = array, U16, 730, [10], "s", 0.001, 0, 0, 15, 2 launch_retard = array, U16, 750, [10], "deg", 0.1, 0, 0, 30, 1 ;gap 770 (68 bytes) ; staged tables staged_percents=array, U08, 838, [8x8], "%", 1, 0, 0, 100, 0 staged_rpms = array, U16, 902, [8], "rpm", 1, 0, 0, 20000, 0 staged_loads = array, S16, 918, [8], "%", 0.1, 0, 0, 250, 1 ;gap 934 (60 bytes) cranktaper_time=array, U16, 994, [6], "s", 0.1, 0, 0, 15, 1 cranktaper_timeevents=array,U16, 994, [6], "events", 1, 0, 0, 1000, 0 ; same again, different units cranktaper_pct =array, U16, 1006, [6], "%", 0.1, 0, 0, 500, 0 page = 7 ; 12 veTable1 = array , U16, 000, [16x16], "%", 0.10000, 0.00000, 0.00, 400, 1 ; * (512 bytes) veTable2 = array , U16, 512, [16x16], "%", 0.10000, 0.00000, 0.00, 400, 1 ; page = 8 ; 13 advanceTable1 = array , S16, 000, [16x16], "deg", 0.10000, 0.00000,-10.00, 90.00, 1 ; * (512 bytes) advanceTable2 = array , S16, 512, [16x16], "deg", 0.10000, 0.00000,-10.00, 90.00, 1 ; * (512 bytes) page = 9 ; 18 veTable3 = array , U16, 000, [16x16], "%", 0.10000, 0.00000, 0.00, 400, 1 ; advanceTable3 = array , S16, 512, [16x16], "deg", 0.10000, 0.00000,-10.00, 90.00, 1 ; * (288 bytes) page = 10 ; 19 frpm_table1 = array , U16, 000, [ 16], "RPM", 1.00000, 0.00000, 0.00,20000, 0 ; * ( 24 bytes) frpm_table2 = array , U16, 032, [ 16], "RPM", 1.00000, 0.00000, 0.00,20000, 0 ; * ( 24 bytes) frpm_table3 = array , U16, 064, [ 16], "RPM", 1.00000, 0.00000, 0.00,20000, 0 ; * ( 24 bytes) fmap_table1 = array , S16, 096, [ 16], { bitStringValue( algorithmUnits , algorithm ) }, 0.10000, 0.00000, 0.00, 500, 1 ; * ( 24 bytes) fmap_table2 = array , S16, 128, [ 16], { bitStringValue( algorithmUnits , algorithm2 ) }, 0.10000, 0.00000, 0.00, 500, 1 ; * ( 24 bytes) fmap_table3 = array , S16, 160, [ 16], { bitStringValue( algorithmUnits , algorithm ) }, 0.10000, 0.00000, 0.00, 500, 1 ; * ( 24 bytes) srpm_table1 = array , U16, 192, [ 16], "RPM", 1.00000, 0.00000, 0.00,20000, 0 ; * ( 24 bytes) srpm_table2 = array , U16, 224, [ 16], "RPM", 1.00000, 0.00000, 0.00,20000, 0 ; * ( 24 bytes) srpm_table3 = array , U16, 256, [ 16], "RPM", 1.00000, 0.00000, 0.00,20000, 0 ; * ( 24 bytes) smap_table1 = array , S16, 288, [ 16], { bitStringValue( algorithmUnits , IgnAlgorithm ) }, 0.10000, 0.00000, 0.00, 500, 1 ; * ( 24 bytes) smap_table2 = array , S16, 320, [ 16], { bitStringValue( algorithmUnits , IgnAlgorithm2 ) }, 0.10000, 0.00000, 0.00, 500, 1 ; * ( 24 bytes) smap_table3 = array , S16, 352, [ 16], { bitStringValue( algorithmUnits , IgnAlgorithm ) }, 0.10000, 0.00000, 0.00, 500, 1 ; * ( 24 bytes) EAEAWCRPMbins2 = array, U16, 384, [ 12], "rpm", 1.0000, 0.00000, 0.00, 20000, 0 ; * ( 24 bytes) EAESOCRPMbins2 = array, U16, 408, [ 12], "rpm", 1.0000, 0.00000, 0.00, 20000, 0 ; * ( 24 bytes) EAEAWCKPAbins2 = array, U16, 432, [ 12], { bitStringValue( algorithmUnits , (eaeload ? eaeload : algorithm) ) }, 0.1000, 0.00000, 0.00, 500, 1 EAESOCKPAbins2 = array, U16, 456, [ 12], { bitStringValue( algorithmUnits , (eaeload ? eaeload : algorithm) ) }, 0.1000, 0.00000, 0.00, 500, 1 EAEBAWC2 = array, U08, 480, [ 12], "%", 1.0000, 0.00000, 0.00, 100.00, 0 EAEBSOC2 = array, U08, 492, [ 12], "%", 0.10000, 0.00000, 0.00, 25.5, 1 EAEAWN2 = array, U08, 504, [ 12], "%", 1.00000, 0.00000,0, 200, 0 ; * (12 bytes) EAESON2 = array, U08, 516, [ 12], "%", 1.00000, 0.00000,0, 200, 0 EAEAWW2 = array, U08, 528, [ 12], "%", 1.0000, 0.00000, 0.00, 100, 0 EAESOW2 = array, U08, 540, [ 12], "%", 1.0000, 0.00000, 0.00, 100, 0 #if CELSIUS EAEAWWCLTbins2 = array, S16, 552, [ 12], "deg", 0.05555, -320.000, -40.00, {clthighlim}, 0 EAESOWCLTbins2 = array, S16, 576, [ 12], "deg", 0.05555, -320.000, -40.00, {clthighlim}, 0 #else EAEAWWCLTbins2 = array, S16, 552, [ 12], "deg", 0.10000, 0.000,-40.00, {clthighlim}, 1 EAESOWCLTbins2 = array, S16, 576, [ 12], "deg", 0.10000, 0.000,-40.00, {clthighlim}, 1 #endif ITB_load_loadvals= array, S16, 600, [ 12], "%", 0.10000, 0.000, 0, 100.00, 1 ITB_load_switchpoints = array,S16, 624, [ 12], "%", 0.10000, 0.000, 0, 100.00, 1 ITB_load_rpms = array, U16, 648, [ 12], "rpm", 1.0000, 0.000, 0, 20000, 0 idleve_table1 = array, U16, 672, [4x4], "%", 0.10000, 0.000, 0, 200, 1 idleve_table2 = array, U16, 704, [4x4], "%", 0.10000, 0.000, 0, 200, 1 idleve_loads1 = array, S16, 736, [4 ], "%", 0.10000, 0.000, 0, 255, 1 idleve_loads2 = array, S16, 744, [4 ], "%", 0.10000, 0.000, 0, 255, 1 idleve_rpms1 = array, U16, 752, [4 ], "rpm", 1.00000, 0.000, 0, 20000, 0 idleve_rpms2 = array, U16, 760, [4 ], "rpm", 1.00000, 0.000, 0, 20000, 0 ;TC tc_perfect_vss = array, U16, 768, [ 10 ], { bitStringValue( prefSpeedUnits , prefSpeedUnits ) }, { msToPrefUnitsScale }, 0.00000, 0, { maxspeed }, 1 tc_perfect_time = array, U16, 788, [ 10 ], "s", 0.001024, 0.00000, 0, 30, 1 tc_react_x = array, U16, 808, [ 4 ], "slip% x 0.01s", 0.1, 0.00000, 0, 10000, 1 tc_retard = array, U16, 816, [ 4 ], "deg", 0.1, 0.00000, 0, 30, 1 tc_spkcut = array, U08, 824, [ 4 ], "cut%", 1, 0.00000, 0, 100, 0 tc_addfuel = array, U08, 828, [ 4 ], "add%", 1, 0.00000, 0, 100, 1 tc_nitrous = array, U08, 832, [ 4 ], "cut%", 1, 0.00000, 0, 100, 1 tc_boost = array, U08, 836, [ 4 ], "cut%", 1, 0.00000, 0, 100, 1 ;840 knock_rpms = array, U16, 840, [10], "rpm", 1, 0, 0, 20000, 0 knock_thresholds= array, U16, 860, [10], "%", 0.1, 0, 0, 100, 1 knock_starts= array, S16, 880, [10], "deg", 0.1, 0, -50, 50, 1 knock_durations = array, S16, 900, [10], "deg", 0.1, 0, 0, 50, 1 ;920 pwmidle_cl_initialvalue_rpms = array, U16, 920, [5], "rpm", 1, 0, 0, 20000, 0 #if CELSIUS pwmidle_cl_initialvalue_matorclt = array, S16, 930, [5], "°C", 0.05555, -320, -40, 230, 0 #else pwmidle_cl_initialvalue_matorclt = array, S16, 930, [5], "°F", 0.10000, 0.000, -40, 450, 0 #endif pwmidle_cl_initialvalues_duties = array, U08, 940, [5 x 5], "%", 0.392, 0.00000, 0, 100, 1 pwmidle_cl_initialvalues_steps = array, U08, 940, [5 x 5], "steps", 1, 0, 0, 255, 0 ;pad #if CELSIUS knock_clts = array, S16, 966, [ 4], "°C", 0.05555, -320.000, -40.00, {clthighlim}, 0 #else knock_clts = array, S16, 966, [ 4], "°F", 0.10000, 0.000,-40.00, {clthighlim}, 1 #endif knock_upscale = array, U16, 974, [4], "%", 0.1, 0, 100, 600, 1 tc_perfect_rpm = array, U16, 982, [ 10 ], "rpm", 1.0000, 0.00000, 0, 20000, 0 tc_boost_duty_delta = array, S08, 1002, [ 4 ], "+/-duty", 1, 0.00000, -100, 100, 0 page = 11 ; 21 pwm_rpms_a = array, S16, 0, [6], "rpm",{ pwm_opt_curve_a == 0 ? 1 : getChannelScaleByOffset(pwm_opt_load_a_offset) } , { pwm_opt_curve_a == 0 ? 0 : getChannelTranslateByOffset(pwm_opt_load_a_offset) }, { pwm_opt_curve_a == 0 ? 0 : getChannelMinByOffset(pwm_opt_load_a_offset) }, { pwm_opt_curve_a == 0 ? 20000 : getChannelMaxByOffset(pwm_opt_load_a_offset) }, { pwm_opt_curve_a == 0 ? 0 : getChannelDigitsByOffset(pwm_opt_load_a_offset) } pwm_loadvals_a = array, S16, 12, [6], "%", { getChannelScaleByOffset(pwm_opt_load_a_offset) } , { getChannelTranslateByOffset(pwm_opt_load_a_offset) }, { getChannelMinByOffset(pwm_opt_load_a_offset) }, { getChannelMaxByOffset(pwm_opt_load_a_offset) }, { getChannelDigitsByOffset(pwm_opt_load_a_offset) } pwm_xaxis_a = array, S16, 0, [12], "", { getChannelScaleByOffset(pwm_opt_load_a_offset) } , { getChannelTranslateByOffset(pwm_opt_load_a_offset) }, { getChannelMinByOffset(pwm_opt_load_a_offset) }, { getChannelMaxByOffset(pwm_opt_load_a_offset) }, { getChannelDigitsByOffset(pwm_opt_load_a_offset) } pwm_rpms_b = array, S16, 24, [6], "rpm",{ pwm_opt_curve_b == 0 ? 1 : getChannelScaleByOffset(pwm_opt_load_b_offset) } , { pwm_opt_curve_b == 0 ? 0 : getChannelTranslateByOffset(pwm_opt_load_b_offset) }, { pwm_opt_curve_b == 0 ? 0 : getChannelMinByOffset(pwm_opt_load_b_offset) }, { pwm_opt_curve_b == 0 ? 20000 : getChannelMaxByOffset(pwm_opt_load_b_offset) }, { pwm_opt_curve_b == 0 ? 0 : getChannelDigitsByOffset(pwm_opt_load_b_offset) } pwm_loadvals_b = array, S16, 36, [6], "%", { getChannelScaleByOffset(pwm_opt_load_b_offset) } , { getChannelTranslateByOffset(pwm_opt_load_b_offset) }, { getChannelMinByOffset(pwm_opt_load_b_offset) }, { getChannelMaxByOffset(pwm_opt_load_b_offset) }, { getChannelDigitsByOffset(pwm_opt_load_b_offset) } pwm_xaxis_b = array, S16, 24, [12], "", { getChannelScaleByOffset(pwm_opt_load_b_offset) } , { getChannelTranslateByOffset(pwm_opt_load_b_offset) }, { getChannelMinByOffset(pwm_opt_load_b_offset) }, { getChannelMaxByOffset(pwm_opt_load_b_offset) }, { getChannelDigitsByOffset(pwm_opt_load_b_offset) } pwm_rpms_c = array, S16, 48, [6], "rpm",{ pwm_opt_curve_c == 0 ? 1 : getChannelScaleByOffset(pwm_opt_load_c_offset) } , { pwm_opt_curve_c == 0 ? 0 : getChannelTranslateByOffset(pwm_opt_load_c_offset) }, { pwm_opt_curve_c == 0 ? 0 : getChannelMinByOffset(pwm_opt_load_c_offset) }, { pwm_opt_curve_c == 0 ? 20000 : getChannelMaxByOffset(pwm_opt_load_c_offset) }, { pwm_opt_curve_c == 0 ? 0 : getChannelDigitsByOffset(pwm_opt_load_c_offset) } pwm_loadvals_c = array, S16, 60, [6], "%", { getChannelScaleByOffset(pwm_opt_load_c_offset) } , { getChannelTranslateByOffset(pwm_opt_load_c_offset) }, { getChannelMinByOffset(pwm_opt_load_c_offset) }, { getChannelMaxByOffset(pwm_opt_load_c_offset) }, { getChannelDigitsByOffset(pwm_opt_load_c_offset) } pwm_xaxis_c = array, S16, 48, [12], "", { getChannelScaleByOffset(pwm_opt_load_c_offset) } , { getChannelTranslateByOffset(pwm_opt_load_c_offset) }, { getChannelMinByOffset(pwm_opt_load_c_offset) }, { getChannelMaxByOffset(pwm_opt_load_c_offset) }, { getChannelDigitsByOffset(pwm_opt_load_c_offset) } pwm_rpms_d = array, S16, 72, [6], "rpm",{ pwm_opt_curve_d == 0 ? 1 : getChannelScaleByOffset(pwm_opt_load_d_offset) } , { pwm_opt_curve_d == 0 ? 0 : getChannelTranslateByOffset(pwm_opt_load_d_offset) }, { pwm_opt_curve_d == 0 ? 0 : getChannelMinByOffset(pwm_opt_load_d_offset) }, { pwm_opt_curve_d == 0 ? 20000 : getChannelMaxByOffset(pwm_opt_load_d_offset) }, { pwm_opt_curve_d == 0 ? 0 : getChannelDigitsByOffset(pwm_opt_load_d_offset) } pwm_loadvals_d = array, S16, 84, [6], "%", { getChannelScaleByOffset(pwm_opt_load_d_offset) } , { getChannelTranslateByOffset(pwm_opt_load_d_offset) }, { getChannelMinByOffset(pwm_opt_load_d_offset) }, { getChannelMaxByOffset(pwm_opt_load_d_offset) }, { getChannelDigitsByOffset(pwm_opt_load_d_offset) } pwm_xaxis_d = array, S16, 72, [12], "", { getChannelScaleByOffset(pwm_opt_load_d_offset) } , { getChannelTranslateByOffset(pwm_opt_load_d_offset) }, { getChannelMinByOffset(pwm_opt_load_d_offset) }, { getChannelMaxByOffset(pwm_opt_load_d_offset) }, { getChannelDigitsByOffset(pwm_opt_load_d_offset) } pwm_rpms_e = array, S16, 96, [6], "rpm",{ pwm_opt_curve_e == 0 ? 1 : getChannelScaleByOffset(pwm_opt_load_e_offset) } , { pwm_opt_curve_e == 0 ? 0 : getChannelTranslateByOffset(pwm_opt_load_e_offset) }, { pwm_opt_curve_e == 0 ? 0 : getChannelMinByOffset(pwm_opt_load_e_offset) }, { pwm_opt_curve_e == 0 ? 20000 : getChannelMaxByOffset(pwm_opt_load_e_offset) }, { pwm_opt_curve_e == 0 ? 0 : getChannelDigitsByOffset(pwm_opt_load_e_offset) } pwm_loadvals_e = array, S16, 108,[6], "%", { getChannelScaleByOffset(pwm_opt_load_e_offset) } , { getChannelTranslateByOffset(pwm_opt_load_e_offset) }, { getChannelMinByOffset(pwm_opt_load_e_offset) }, { getChannelMaxByOffset(pwm_opt_load_e_offset) }, { getChannelDigitsByOffset(pwm_opt_load_e_offset) } pwm_xaxis_e = array, S16, 96, [12], "", { getChannelScaleByOffset(pwm_opt_load_e_offset) } , { getChannelTranslateByOffset(pwm_opt_load_e_offset) }, { getChannelMinByOffset(pwm_opt_load_e_offset) }, { getChannelMaxByOffset(pwm_opt_load_e_offset) }, { getChannelDigitsByOffset(pwm_opt_load_e_offset) } pwm_rpms_f = array, S16, 120, [6], "rpm",{ pwm_opt_curve_f == 0 ? 1 : getChannelScaleByOffset(pwm_opt_load_f_offset) } , { pwm_opt_curve_f == 0 ? 0 : getChannelTranslateByOffset(pwm_opt_load_f_offset) }, { pwm_opt_curve_f == 0 ? 0 : getChannelMinByOffset(pwm_opt_load_f_offset) }, { pwm_opt_curve_f == 0 ? 20000 : getChannelMaxByOffset(pwm_opt_load_f_offset) }, { pwm_opt_curve_f == 0 ? 0 : getChannelDigitsByOffset(pwm_opt_load_f_offset) } pwm_loadvals_f = array, S16, 132, [6], "%", { getChannelScaleByOffset(pwm_opt_load_f_offset) } , { getChannelTranslateByOffset(pwm_opt_load_f_offset) }, { getChannelMinByOffset(pwm_opt_load_f_offset) }, { getChannelMaxByOffset(pwm_opt_load_f_offset) }, { getChannelDigitsByOffset(pwm_opt_load_f_offset) } pwm_xaxis_f = array, S16, 120, [12], "", { getChannelScaleByOffset(pwm_opt_load_f_offset) } , { getChannelTranslateByOffset(pwm_opt_load_f_offset) }, { getChannelMinByOffset(pwm_opt_load_f_offset) }, { getChannelMaxByOffset(pwm_opt_load_f_offset) }, { getChannelDigitsByOffset(pwm_opt_load_f_offset) } pwm_duties_a = array, U08, 144, [6x6], "%", 1, 0, 0, 250, 0 pwm_yaxis_a = array, U08, 144, [12], "%", 1, 0, 0, 250, 0 pwm_duties_b = array, U08, 180, [6x6], "%", 1, 0, 0, 250, 0 pwm_yaxis_b = array, U08, 180, [12], "%", 1, 0, 0, 250, 0 pwm_duties_c = array, U08, 216, [6x6], "%", 1, 0, 0, 250, 0 pwm_yaxis_c = array, U08, 216, [12], "%", 1, 0, 0, 250, 0 pwm_duties_d = array, U08, 252, [6x6], "%", 1, 0, 0, 250, 0 pwm_yaxis_d = array, U08, 252, [12], "%", 1, 0, 0, 250, 0 pwm_duties_e = array, U08, 288, [6x6], "%", 1, 0, 0, 250, 0 pwm_yaxis_e = array, U08, 288, [12], "%", 1, 0, 0, 250, 0 pwm_duties_f = array, U08, 324, [6x6], "%", 1, 0, 0, 250, 0 pwm_yaxis_f = array, U08, 324, [12], "%", 1, 0, 0, 250, 0 primePWTable2 = array, S16, 360, [ 10], "ms", 0.10000, 0.00000, 0.00, 65.00, 1 ; * ( 20 bytes) crankPctTable2 = array, U16, 380, [ 10], "%", 1, 1, 1, 10000, 0 ; * ( 20 bytes) asePctTable2 = array, S16, 400, [ 10], "%", 1.00000, 0.00000, 0.00, 400.00, 0 ; * ( 2 bytes) aseCntTable2 = array, S16, 420, [ 10], "cycles", 1.00000, 0.00000, 0.00, 2500.00, 0 ; * ( 2 bytes) wueBins2 = array, U08, 440, [ 10], "%", 1.00000, 0.00000, { wue_lpg?50:100 }, 255.00, 0 ; * ( 10 bytes) #if CELSIUS temp_table_p21 = array, S16, 450, [ 10], "°C", 0.05555, -320.000, -40.00, {clthighlim}, 0 #else temp_table_p21 = array, S16, 450, [ 10], "°F", 0.10000, 0.000,-40.00, {clthighlim}, 1 #endif frpm_table4 = array , U16, 470, [ 16], "RPM", 1.00000, 0.00000, 0.00,20000, 0 ; * ( 24 bytes) fmap_table4 = array , S16, 502, [ 16], { bitStringValue( algorithmUnits , algorithm2 ) }, 0.10000, 0.00000, 0.00, 500, 1 ; * ( 24 bytes) srpm_table4 = array , U16, 534, [ 16], "RPM", 1.00000, 0.00000, 0.00,20000, 0 ; * ( 24 bytes) smap_table4 = array , S16, 566, [ 16], { bitStringValue( algorithmUnits , IgnAlgorithm2 ) }, 0.10000, 0.00000, 0.00, 500, 1 ; * ( 24 bytes) #if CELSIUS dualfuel_temp = array, S16, 598, [ 10], "°C", 0.05555, -320.000, -40.00, {clthighlim}, 0 #else dualfuel_temp = array, S16, 598, [ 10], "°F", 0.10000, 0.000,-40.00, {clthighlim}, 1 #endif dualfuel_temp_adj=array, S16, 618, [ 10], "%", 0.10000, 0.000,-200.00, 200.00, 1 dualfuel_press = array, S16, 638, [ 10], "kPa", 0.10000, 0.000, 70.00, 600.00, 1 dualfuel_press_adj=array, S16, 658, [ 10], "%", 0.10000, 0.000,-200.00, 200.00, 1 inj_timing_sec=array, S16, 678, [12x12], "deg", 0.10000, 0.000, -360, 720, 1 inj_timing_sec_load=array, S16, 966, [ 12], "%", 0.10000, 0.000, 0, 500, 1 inj_timing_sec_rpm=array, U16, 990, [ 12], "rpm", 1, 0, 0, 20000, 0 page = 12 ; 22 veTable4 = array , U16, 000, [16x16], "%", 0.10000, 0.00000, 0.00, 400, 1 ; advanceTable4 = array , S16, 512, [16x16], "deg", 0.10000, 0.00000,-10.00, 90.00, 1 ; * (288 bytes) page = 13 ; 23 ; Generic on/off outputs "Spare Port Settings" psEnabled = array , U08, 0, [ 51], "", 1, 0, 0, 1, 0, noSizeMutation psCondition = array , U08, 51, [ 51x2], "", 1, 0, 32, 124, 0, noSizeMutation psConnector = array , U08, 153, [ 51], "", 1, 0, 32, 124, 0, noSizeMutation psInitValue = array , U08, 204, [ 51], "", 1, 0 0, 1, 0, noSizeMutation psPortValue = array , U08, 255, [ 51], "", 1, 0, 0, 1, 0, noSizeMutation psOutSize = array , U08, 306, [ 51x2], "", 1, 0, 0, 255, 0, noSizeMutation psOutOffset = array , U16, 408, [ 51x2], "", 1, 0, 0, 1024, 0, noSizeMutation psThreshold = array , S16, 612, [ 51x2], "", 1, 0, -32768, 32767, 0, noSizeMutation psHysteresis = array , S16, 816, [ 51x2], "", 1, 0, -32768, 32767, 0, noSizeMutation ;next is 1020 vvt_softout1 = bits, U08, 1020, [0:6], $PIN_DIGOUT_CANPWM vvt_softout2 = bits, U08, 1021, [0:6], $PIN_DIGOUT_CANPWM vvt_softout3 = bits, U08, 1022, [0:6], $PIN_DIGOUT_CANPWM vvt_softout4 = bits, U08, 1023, [0:6], $PIN_DIGOUT_CANPWM page = 14 ; 24 narrowband_tgts = array, U16, 0, [12x12], "V", 0.00488, 0.00000, 0, 1, 3 narrowband_tgts_rpms = array, U16, 288, [ 12], "rpm", 1.00000, 0.00000, 0, 20000, 0 narrowband_tgts_loads = array, S16,312, [ 12], "%", 0.10000, 0.00000, 0, 500, 1 als_opt_fc = bits, U08, 336, [0:0], "Off", "On" als_opt_sc = bits, U08, 336, [1:1], "Off", "On" als_opt_idle = bits, U08, 336, [2:2], "Off", "On" als_opt_fuel = bits, U08, 336, [3:3], "Off", "On" als_opt_pwmout= bits, U08, 336, [4:4], "Off", "On" als_opt_ri = bits, U08, 336, [5:5], "Off", "On" als_maxtime = scalar, U08, 337, "s", 0.1, 0, 1, 25.5, 1 vvt_startdelay= scalar, U08, 338, "s", 0.1, 0, 1, 25.5, 1 ;gap 1 byte als_maxtps = scalar, S16, 340, "%", 0.10000, 0.00000, 0, 100, 1 als_iac_duty = scalar, U08, 342, "%", 0.392, 0.00000, 0, 100, 1 als_iac_steps = scalar, U08, 342, "steps", 1, 0, 0, 255, 0 als_in_pin = bits, U08, 343, [0:5], $PIN_DIGIN_OFF als_out_pin = bits, U08, 344, [0:6], $PIN_DIGOUT_CANOUT_OFF als_pwm_duty = scalar, U08, 345, "%", 1, 0, 0, 100, 0 als_pausetime = scalar, U08, 346, "s", 0.1, 0, 0, 25.5, 1 vvt_slew = scalar, U08, 347, "deg", 0.1, 0, 0.1, 25.5, 1 #if CELSIUS als_minclt = scalar, S16, 348, "°C", 0.05555, -320.000, -40.00, 150.00, 1 als_maxclt = scalar, S16, 350, "°C", 0.05555, -320.000, -40.00, 150.00, 1 #else als_minclt = scalar, S16, 348, "°F", 0.10000, 0.000,-40.00, 300.00, 1 als_maxclt = scalar, S16, 350, "°F", 0.10000, 0.000,-40.00, 300.00, 1 #endif ;ALS tables als_rpms = array, U16, 352, [6], "rpm", 1, 0, 0, 20000, 0 als_tpss = array, U16, 364, [6], "%", 0.1, 0, 0, 100, 0 als_timing = array, S16, 376, [6x6], "degrees", 0.10000,0.00000,-50.00, 50.00,1; als_addfuel = array, S16, 448, [6x6], "%", 0.1, 0, 0, 100, 1 als_fuelcut = array, U08, 520, [6x6], "%", 1, 0, 0, 100, 0 als_sparkcut = array, U08, 556, [6x6], "%", 1, 0, 0, 100, 0 als_minrpm = scalar, U16, 592, "rpm", 1, 0, 0, 20000, 0 als_maxrpm = scalar, U16, 594, "rpm", 1, 0, 0, 20000, 0 #if CELSIUS als_maxmat = scalar, S16, 596, "°C", 0.05555, -320.000, -40.00, 150.00, 1 #else als_maxmat = scalar, S16, 596, "°F", 0.10000, 0.000,-40.00, 300.00, 1 #endif vvt_onoff_ang = scalar, S16, 598, "degrees", 0.10000,0.00000,0, 720.00,1; vvt_opt1_on = bits, U08, 600, [0:1], "Off", "1", "2", "4" vvt_opt1_filter = bits, U08, 600, [2:2], "Off", "On" vvt_opt1_int = bits, U08, 600, [3:3], "Synced to cam", "Timed" vvt_opt1_tst = bits, U08, 600, [4:6], "Off", "VVT1", "VVT2", "VVT3", "VVT4", "INVALID", "INVALID", "INVALID" ; 0, 1, 2, 3, 4 vvt_opt1_dir_exhaust = bits, U08, 600, [7:7], "Advance", "Retard" vvt_hold_duty = scalar, U08, 601, "%", 0.392, 0, 0, 100, 1 vvt_out1 = bits, U08, 602, [0:3], $PIN_HWPWMOUT_VVT vvt_out2 = bits, U08, 603, [0:3], $PIN_HWPWMOUT_VVT vvt_out3 = bits, U08, 604, [0:3], $PIN_HWPWMOUT_VVT vvt_out4 = bits, U08, 605, [0:3], $PIN_HWPWMOUT_VVT vvt_out1_dir = bits, U08, 602, [7:7], "Advance", "Retard" vvt_out2_dir = bits, U08, 603, [7:7], "Advance", "Retard" vvt_out3_dir = bits, U08, 604, [7:7], "Advance", "Retard" vvt_out4_dir = bits, U08, 605, [7:7], "Advance", "Retard" vvt_ctl_ms = scalar, U16, 606, "ms", 1, 0.00000, 10, 500, 0 vvt_ctl_Kp = scalar, U08, 608, "%", 1, 0.00000, 0, 200, 0 vvt_ctl_Ki = scalar, U08, 609, "%", 1, 0.00000, 0, 200, 0 vvt_ctl_Kd = scalar, U08, 610, "%", 1, 0.00000, 0, 200, 0 vvt_test_duty = scalar, U08, 611, "%", 0.392, 0.00000, 0, 100, 1 vvt_min_ang1 = scalar, S16, 612, "abs.deg.", 0.10000,0.00000,0, 720.00,1; vvt_min_ang2 = scalar, S16, 614, "abs.deg.", 0.10000,0.00000,0, 720.00,1; vvt_min_ang3 = scalar, S16, 616, "abs.deg.", 0.10000,0.00000,0, 720.00,1; vvt_min_ang4 = scalar, S16, 618, "abs.deg.", 0.10000,0.00000,0, 720.00,1; vvt_max_ang1 = scalar, S16, 620, "abs.deg.", 0.10000,0.00000,0, 720.00,1; vvt_max_ang2 = scalar, S16, 622, "abs.deg.", 0.10000,0.00000,0, 720.00,1; vvt_max_ang3 = scalar, S16, 624, "abs.deg.", 0.10000,0.00000,0, 720.00,1; vvt_max_ang4 = scalar, S16, 626, "abs.deg.", 0.10000,0.00000,0, 720.00,1; vvt_opt2_pid = bits, U08, 628, [0:0], "On/off", "PID" vvt_opt2_pid2 = bits, U08, 628, [0:0], "On/Off", "Variable" vvt_opt2_use_hold_intake = bits, U08, 628, [1:1], "Off", "On" vvt_opt2_use_hold_exhaust = bits, U08, 628, [2:2], "Off", "On" vvt_opt2_cam2pol = bits, U08, 628, [4:4], "Falling Edge", "Rising Edge" vvt_opt2_cam3pol = bits, U08, 628, [5:5], "Falling Edge", "Rising Edge" vvt_opt2_cam4pol = bits, U08, 628, [6:6], "Falling Edge", "Rising Edge" vvt_opt2_cam1pol = bits, U08, 628, [7:7], "Falling Edge", "Rising Edge" vvt_opt3_cam2 = bits, U08, 629, [0:1], $PIN_HWFREQIN vvt_opt3_cam3 = bits, U08, 629, [2:3], $PIN_HWFREQIN vvt_opt3_cam4 = bits, U08, 629, [4:5], $PIN_HWFREQIN vvt_opt3_cam1 = bits, U08, 629, [6:6], "Main cam", "INVALID" ; for display only vvt_timing_load = array, S16, 630, [ 8], "%", 0.10000, 0.000, 0, 500, 1 vvt_timing_rpm = array, U16, 646, [ 8], "rpm", 1, 0, 0, 20000, 0 vvt_timing1 = array, S16, 662, [8x8], "deg", 0.10000, 0.000, -360, 720, 1 vvt_timing2 = array, S16, 790, [8x8], "deg", 0.10000, 0.000, -360, 720, 1 vvt_tth1 = scalar, U08, 918, "", 1, 0, 0, 24, 0 vvt_tth2 = scalar, U08, 919, "", 1, 0, 0, 24, 0 vvt_tth3 = scalar, U08, 920, "", 1, 0, 0, 24, 0 vvt_tth4 = scalar, U08, 921, "", 1, 0, 0, 24, 0 vvt_coldpos1 = scalar, S16, 922, "degrees", 0.10000,0.00000,0, 720.00,1; vvt_coldpos2 = scalar, S16, 924, "degrees", 0.10000,0.00000,0, 720.00,1; tclu_opt_vss = bits, U08, 926, [0:1], "Off", "VSS1", "VSS2", "INVALID" tclu_opt_gear = bits, U08, 926, [2:2], "Off", "On" tclu_brakepin = bits, U08, 927, [0:5], $PIN_DIGIN_OFF tclu_enablepin = bits, U08, 928, [0:5], $PIN_DIGIN_OFF tclu_outpin = bits, U08, 929, [0:6], $PIN_DIGOUT_CANOUT_OFF tclu_gearmin = scalar, U08, 930, "", 1, 0, 0, 8, 0 tclu_delay = scalar, U08, 931, "s", 0.1, 0, 0, 10, 1 tclu_vssmin = scalar, U16, 932, { bitStringValue( prefSpeedUnits , prefSpeedUnits ) }, { msToPrefUnitsScale }, 0, 0, { maxspeed }, 0 tclu_tpsmin = scalar, S16, 934, "%", 0.1, 0, 0, 110, 1 tclu_tpsmax = scalar, S16, 936, "%", 0.1, 0, 0, 110, 1 tclu_mapmin = scalar, S16, 938, "%", 0.1, 0, 0, 500, 1 tclu_mapmax = scalar, S16, 940, "%", 0.1, 0, 0, 500, 1 vvt_opt4_decode = bits, U08, 942, [0:2], "Standard", "BMW V10", "BMW S54", "Hemi VVT", "Ford Coyote", "Ford Duratec 4 cyl", "Barra", "INVALID" vvt_opt5_add1 = bits, U08, 943, [0:1], "Off", "Cam 1", "Cam 2", "INVALID" vvt_opt5_add2 = bits, U08, 943, [2:2], "Commanded", "Actual" vvt_opt5_err = bits, U08, 943, [3:3], "Yes","No" vvt_opt5_vvt1 = bits, U08, 943, [4:4], "Intake","Exhaust" vvt_opt5_vvt2 = bits, U08, 943, [5:5], "Intake","Exhaust" vvt_opt5_vvt3 = bits, U08, 943, [6:6], "Intake","Exhaust" vvt_opt5_vvt4 = bits, U08, 943, [7:7], "Intake","Exhaust" vvt_hold_duty_exh = scalar, U08, 944, "%", 0.392, 0, 0, 100, 1 vvt_ctl_Kp_exh = scalar, U08, 945, "%", 1, 0.00000, 0, 200, 0 vvt_ctl_Ki_exh = scalar, U08, 946, "%", 1, 0.00000, 0, 200, 0 vvt_ctl_Kd_exh = scalar, U08, 947, "%", 1, 0.00000, 0, 200, 0 vvt_cam1tth1 = scalar, U08, 948, "", 1, 0.00000, 0, 255, 0 vvt_cam1tth2 = scalar, U08, 949, "", 1, 0.00000, 0, 255, 0 vvt_cam2tth1 = scalar, U08, 950, "", 1, 0.00000, 0, 255, 0 vvt_cam2tth2 = scalar, U08, 951, "", 1, 0.00000, 0, 255, 0 vvt_cam3tth1 = scalar, U08, 952, "", 1, 0.00000, 0, 255, 0 vvt_cam3tth2 = scalar, U08, 953, "", 1, 0.00000, 0, 255, 0 vvt_cam4tth1 = scalar, U08, 954, "", 1, 0.00000, 0, 255, 0 vvt_cam4tth2 = scalar, U08, 955, "", 1, 0.00000, 0, 255, 0 vvt_opt6_freq = bits, U08, 956, [0:3], "1021Hz", "766Hz", "613Hz", "511Hz", "383Hz", "306Hz", "204Hz", "153Hz", "99Hz", "75Hz", "50Hz", "48Hz", "30Hz", "20Hz", "15Hz", "12Hz" vvt_opt7_yaxis = bits, U08, 957, [0:2], "Fuelload", "MAP", "% baro", "TPS", "MAFload", "INVALID", "INVALID", "INVALID" als_rifuelcut = array, U08, 958, [6x6], "%", 1, 0, 0, 100, 0 als_rirpms = array, U16, 994, [6], "rpm", 1, 0, 0, 20000, 0 als_ritpss = array, U16, 1006, [6], "%", 0.1, 0, 0, 100, 0 als_pwm_opt_freq = bits, U08, 1018, [1:4], "On-Off", "INVALID", "250Hz", "225Hz", "200Hz", "175Hz", "150Hz", "125Hz", "100Hz", "78Hz", "39Hz", "26Hz", "19.5Hz", "15.6Hz", "13Hz", "11.1Hz" als_pwm_opt2 = bits, U08, 1019, [0:6], $PIN_DIGOUT_CANPWM #if CELSIUS vvt_minclt = scalar, S16, 1020, "°C", 0.05555, -320.000, -40.00, 150.00, 1 #else vvt_minclt = scalar, S16, 1020, "°F", 0.10000, 0.000,-40.00, 300.00, 1 #endif vvt_minduty1 = scalar, U08, 1022, "%", 0.392, 0.00000, 0, 100, 1 vvt_maxduty1 = scalar, U08, 1023, "%", 0.392, 0.00000, 0, 100, 1 page = 15 ; 25 mafv = array, U16, 0, [64], "V", 0.001, 0.00000, 0.00, 5, 3 maff = array, U16, 0, [64], "Hz", { (maf_freq1 - maf_freq0) / 5000 }, { maf_freq0 * 5000 / (maf_freq1 - maf_freq0) }, {maf_freq0}, { maf_freq1 }, 0 mafflow = array, U16, 128, [64], "g/sec", {0.01 * (maf_range + 1)}, -8192, {-81 * (maf_range + 1)}, {573 * (maf_range + 1)}, 2 alphaMAPtable = array , S16, 256, [ 6x 6], "kPa", 0.10000, 0.00000, 0.00, 200.00, 1 ; * ( 72 bytes) amap_tps = array , S16, 328, [ 6], "%", 0.10000, 0.00000, 0.0, 100.00, 1 ; * ( 12 bytes) amap_rpm = array , U16, 340, [ 6], "RPM", 1.00000, 0.00000, 0.00,20000, 0 ; * ( 12 bytes) tpswot_tps = array , S16, 352, [ 6], "%", 0.10000, 0.00000, 0.0, 100.00, 1 ; * ( 12 bytes) tpswot_rpm = array , U16, 364, [ 6], "RPM", 1.00000, 0.00000, 0.00,20000, 0 ; * ( 12 bytes) #if CELSIUS matCorrTemps = array , S16, 376, [ 6], "°C", 0.05555, -320.000,-40.00, 150.00, 1 ; * ( 12 bytes) #else matCorrTemps = array , S16, 376, [ 6], "°F", 0.10000, 0.00000,-40.00, 300.00, 1 #endif matCorrDelta = array , S16, 388, [ 6], "%", 0.10000, 0.00000,-120.0, 120.0, 1 ; * ( 6 bytes) ;next is 400 Xboost_ctl_cl_pwm_targs1 = array, U08, 400, [8x8], "%", 1.000, 0.00000, 0.00, 100, 0 Xboost_ctl_cl_pwm_targs2 = array, U08, 464, [8x8], "%", 1.000, 0.00000, 0.00, 100, 0 Xboost_ctl_cl_pwm_rpms1 = array, U16, 528, [8], "rpm", 1, 0, 0, 25000, 0 Xboost_ctl_cl_pwm_rpms2 = array, U16, 544, [8], "rpm", 1, 0, 0, 25000, 0 Xboost_ctl_cl_pwm_targboosts1 = array, S16, 560, [8], "kPa", 0.10000, 0, 0, 600, 0 Xboost_ctl_cl_pwm_targboosts2 = array, S16, 576, [8], "kPa", 0.10000, 0, 0, 600, 0 blendx1 = array, S16, 592, [9], "X", 1, 0, -32767, 32767, 0 blendx2 = array, S16, 610, [9], "X", 1, 0, -32767, 32767, 0 blendx3 = array, S16, 628, [9], "X", 1, 0, -32767, 32767, 0 blendx4 = array, S16, 646, [9], "X", 1, 0, -32767, 32767, 0 blendx5 = array, S16, 664, [9], "X", 1, 0, -32767, 32767, 0 blendx6 = array, S16, 682, [9], "X", 1, 0, -32767, 32767, 0 blendx7 = array, S16, 700, [9], "X", 1, 0, -32767, 32767, 0 blendx8 = array, S16, 718, [9], "Flex%", 0.1, 0, 0, 100, 1 blendy1 = array, U08, 736, [9], "VE2", 1, 0, 0, 100, 0 blendy2 = array, U08, 745, [9], "Spk2", 1, 0, 0, 100, 0 blendy3 = array, U08, 754, [9], "VE3/4", 1, 0, 0, 100, 0 blendy4 = array, U08, 763, [9], "Spk3/4", 1, 0, 0, 100, 0 blendy5 = array, U08, 772, [9], "AFR2", 1, 0, 0, 100, 0 blendy6 = array, U08, 781, [9], "Boost2", 1, 0, 0, 100, 0 blendy7 = array, U08, 790, [9], "Crank%2", 1, 0, 0, 100, 0 blendy8 = array, U08, 799, [9], "Blend%", 1, 0, 0, 100, 0 fpd_duty= array, U08, 808, [6x6], "%", 0.392, 0.00000, 0, 100, 1 fpd_load= array, S16, 844, [6], "%", 0.10000, 0.00000, 0.0,500, 1 fpd_rpm = array, U16, 856, [6], "RPM", 1.00000, 0.00000, 0.00,20000, 0 #if CELSIUS fp_temps = array, S16, 868, [ 10], "°C", 0.05555, -320.000, -40.00, {clthighlim}, 0 #else fp_temps = array, S16, 868, [ 10], "°F", 0.10000, 0.000,-40.00, {clthighlim}, 1 #endif fp_temp_adj = array, S16, 888, [ 10], "%", 0.10000, 0.000,-200.00, 200.00, 1 fp_presss = array, S16, 908, [ 10], "kPa", 0.10000, 0.000, 70.00, 600.00, 1 fp_press_adj = array, S16, 928, [ 10], "%", 0.10000, 0.000,-200.00, 200.00, 1 hpte_times = array, S16, 948, [ 6], "s", 0.10000, 0.000, 0.00, 25.5, 1 hpte_afrs = array, U08, 960, [ 6], "AFR", 0.10000, 0.000, 0.00, 5.0, 1 oil_rpm = array, U16, 966, [6], "RPM", 1.00000, 0.00000, 0.00,20000, 0 oil_press_min = array, S16, 978, [6], "", 0.10000, 0.00000, 0.0,3276, 1 oil_press_max = array, S16, 990, [6], "", 0.10000, 0.00000, 0.0,3276, 1 alt_dutyin = array, U16, 1002, [7], "%", 1, 0, 0, 100, 0 alt_dutyout = array, U08, 1016, [7], "%", 1, 0, 0, 100, 0 page = 16 ; 26 ; this is a RAM only page with no burnable flash ; Quickform realtime data. Lower part of data is offset into outpc. Upper 3 bits are size. 0 = nothing, 1 = 1 byte, 2 = 2 bytes, 3 = 4 bytes qfrtfielddata= array, U16, 0, [ 256], "", 1.0000, 0.00000, 0.00, 65535, 0, noMsqSave ltt_table1 = array , S08, 512, [16x16], "%", 0.10000, 0.00000, -12.7, 12.7, 1, noMsqSave,controllerPriority ; * (512 bytes) ltt_rpms = array , U16, 768, [ 16], "RPM", 1.00000, 0.00000, 0.00, 20000, 0, noMsqSave,controllerPriority ; * ( 24 bytes) ltt_loads = array , S16, 800, [ 16], "%", 0.10000, 0.00000, 0.00, 500, 1, noMsqSave,controllerPriority ; * ( 24 bytes) portusage = array, U08, 832, [ 148], "", 1, 0, 0, 255, 0, noMsqSave portusage_a = array, U08, 832, [ 8], "", 1, 0, 0, 255, 0, noMsqSave portusage_b = array, U08, 840, [ 8], "", 1, 0, 0, 255, 0, noMsqSave portusage_e = array, U08, 848, [ 8], "", 1, 0, 0, 255, 0, noMsqSave portusage_h = array, U08, 856, [ 8], "", 1, 0, 0, 255, 0, noMsqSave portusage_j = array, U08, 864, [ 8], "", 1, 0, 0, 255, 0, noMsqSave portusage_k = array, U08, 872, [ 8], "", 1, 0, 0, 255, 0, noMsqSave portusage_m = array, U08, 880, [ 8], "", 1, 0, 0, 255, 0, noMsqSave portusage_p = array, U08, 888, [ 8], "", 1, 0, 0, 255, 0, noMsqSave portusage_t = array, U08, 896, [ 8], "", 1, 0, 0, 255, 0, noMsqSave portusage_ad0h=array, U08, 904, [ 8], "", 1, 0, 0, 255, 0, noMsqSave portusage_ad0l=array, U08, 912, [ 8], "", 1, 0, 0, 255, 0, noMsqSave portusage_canin=array, U08, 920, [ 8], "", 1, 0, 0, 255, 0, noMsqSave portusage_canout=array,U08, 928, [16], "", 1, 0, 0, 255, 0, noMsqSave portusage_canadc=array,U08, 944, [24], "", 1, 0, 0, 255, 0, noMsqSave portusage_canpwm=array,U08, 968, [ 8], "", 1, 0, 0, 255, 0, noMsqSave portusage_pwmscl=array,U08, 976, [ 4], "", 1, 0, 0, 255, 0, noMsqSave portusage_loop =array, U08, 980, [ 8], "", 1, 0, 0, 255, 0, noMsqSave portusage_s = array, U08, 988, [ 8], "", 1, 0, 0, 255, 0, noMsqSave portusage_canin_src = scalar, U08, 996, "", 1, 0, 0, 255, 0, noMsqSave portusage_canout1_src = scalar, U08, 997, "", 1, 0, 0, 255, 0, noMsqSave portusage_canout2_src = scalar, U08, 998, "", 1, 0, 0, 255, 0, noMsqSave portusage_canadc_src = array, U08, 999,[6], "", 1, 0, 0, 255, 0, noMsqSave portusage_canpwm_src = scalar, U08, 1005, "", 1, 0, 0, 255, 0, noMsqSave page = 17 ; 27 ego_auth_table = array, U08, 0, [12x12], "%", 0.10000, 0.00000, 0, 25.5, 1 ego_auth_rpms = array, U16, 144, [ 12], "RPM", 1.00000, 0.00000, 0.00,20000, 0 ego_auth_loads = array, S16, 168, [ 12], { bitStringValue( algorithmUnits , (afrload ? afrload : algorithm) ) }, 0.10000, 0.00000, 0.00, 500, 1 vsslaunch_vss = array, U16, 192, [ 10], { bitStringValue( prefSpeedUnits , prefSpeedUnits ) }, { msToPrefUnitsScale }, 0.00000, 0.00, { maxspeed }, 0 vsslaunch_rpm = array, U16, 212, [ 10], "RPM", 1.00000, 0.00000, 0.00,20000, 0 vsslaunch_retard = array, U16, 232, [ 10], "deg", 0.10000, 0.00000, 0.00, 50, 1 ego_delay_table = array, U08, 252, [12x12], "ms", 10.00000, 0, 0, 2550, 0 ego_delay_rpms = array, U16, 396, [ 12], "rpm", 1.00000, 0, 0, 20000, 0 ego_delay_loads = array, S16, 420, [ 12], "%", 0.10000, 0, 0, 500, 0 ego_sensor_delay = scalar,U08, 444, "ms", 2, 0, 0, 510, 0 ; 2 Generic PID channels generic_pid_flags_a_on = bits,U08, 445, [0:0], "Off", "On" generic_pid_flags_a_type = bits, U08, 445, [1:2], "INVALID","Type B","Type C", "INVALID" generic_pid_flags_a_direction = bits, U08, 445, [3:3], "Normal (higher duty = higher PV)", "Inverted (lower duty = higher PV)" generic_pid_flags_a_output_type = bits, U08, 445, [4:4], "PWM", "Stepper" generic_pid_flags_a_lookup_type = bits, U08, 445, [5:5], "Table", "Curve" generic_pid_flags_b_on = bits,U08, 446, [0:0], "Off", "On" generic_pid_flags_b_type = bits, U08, 446, [1:2], "INVALID","Type B","Type C", "INVALID" generic_pid_flags_b_direction = bits, U08, 446, [3:3], "Normal (higher duty = higher PV)", "Inverted (lower duty = higher PV)" generic_pid_flags_b_output_type = bits,U08, 446, [4:4], "PWM", "Stepper" generic_pid_flags_b_lookup_type = bits, U08, 446, [5:5], "Table", "Curve" generic_pid_pwm_opts_freq_a = bits, U08, 447, [1:4], "INVALID", "Variable Freq", "250Hz", "225Hz", "200Hz", "175Hz", "150Hz", "125Hz", "100Hz", "78Hz", "39Hz", "26Hz", "19.5Hz", "15.6Hz", "13Hz", "11.1Hz" generic_pid_pwm_opts_load_a = bits, U08, 447, [5:7], "RPM", "MAP", "% baro", "TPS", "MAFload", "CLT", "BattV", "MAT" ; ITB hidden generic_pid_pwm_opts_freq_b = bits, U08, 448, [1:4], "INVALID", "Variable Freq", "250Hz", "225Hz", "200Hz", "175Hz", "150Hz", "125Hz", "100Hz", "78Hz", "39Hz", "26Hz", "19.5Hz", "15.6Hz", "13Hz", "11.1Hz" generic_pid_pwm_opts_load_b = bits, U08, 448, [5:7], "RPM", "MAP", "% baro", "TPS", "MAFload", "CLT", "BattV", "MAT" generic_pid_pwm_outs_a = bits, U08, 449, [0:6], $PIN_DIGOUT_CANPWM generic_pid_pwm_outs_b = bits, U08, 450, [0:6], $PIN_DIGOUT_CANPWM generic_pid_load_offset_a = scalar, U16, 451, "", 1, 0, 0, 65535, 0 generic_pid_load_offset_b = scalar, U16, 453, "", 1, 0, 0, 65535, 0 generic_pid_load_size_a = scalar, U08, 455, "", 1, 0, 0, 255, 0 generic_pid_load_size_b = scalar, U08, 456, "", 1, 0, 0, 255, 0 ; These are positioned here so that TS reads them in the correct order and the autoscaling on the next block function generic_pid_PV_offset_a = scalar, U16, 469, "", 1, 0, 0, 65535, 0 generic_pid_PV_offset_b = scalar, U16, 471, "", 1, 0, 0, 65535, 0 generic_pid_PV_size_a = scalar, U08, 473, "", 1, 0, 0, 255, 0 generic_pid_PV_size_b = scalar, U08, 474, "", 1, 0, 0, 255, 0 generic_pid_upper_inputlim_a = scalar, S16, 457, "", { getChannelScaleByOffset(generic_pid_PV_offset_a) } , { getChannelTranslateByOffset(generic_pid_PV_offset_a) }, { getChannelMinByOffset(generic_pid_PV_offset_a) }, { getChannelMaxByOffset(generic_pid_PV_offset_a) }, { getChannelDigitsByOffset(generic_pid_PV_offset_a) } generic_pid_upper_inputlim_b = scalar, S16, 459, "", { getChannelScaleByOffset(generic_pid_PV_offset_b) } , { getChannelTranslateByOffset(generic_pid_PV_offset_b) }, { getChannelMinByOffset(generic_pid_PV_offset_b) }, { getChannelMaxByOffset(generic_pid_PV_offset_b) }, { getChannelDigitsByOffset(generic_pid_PV_offset_b) } generic_pid_lower_inputlim_a = scalar, S16, 461, "", { getChannelScaleByOffset(generic_pid_PV_offset_a) } , { getChannelTranslateByOffset(generic_pid_PV_offset_a) }, { getChannelMinByOffset(generic_pid_PV_offset_a) }, { getChannelMaxByOffset(generic_pid_PV_offset_a) }, { getChannelDigitsByOffset(generic_pid_PV_offset_a) } generic_pid_lower_inputlim_b = scalar, S16, 463, "", { getChannelScaleByOffset(generic_pid_PV_offset_b) } , { getChannelTranslateByOffset(generic_pid_PV_offset_b) }, { getChannelMinByOffset(generic_pid_PV_offset_b) }, { getChannelMaxByOffset(generic_pid_PV_offset_b) }, { getChannelDigitsByOffset(generic_pid_PV_offset_b) } generic_pid_output_upperlim_a = scalar, U08, 465, "%", 0.392, 0.00000, 0, 100, 1 generic_pid_output_upperlim_b = scalar, U08, 466, "%", 0.392, 0.00000, 0, 100, 1 generic_pid_output_lowerlim_a = scalar, U08, 467, "%", 0.392, 0.00000, 0, 100, 1 generic_pid_output_lowerlim_b = scalar, U08, 468, "%", 0.392, 0.00000, 0, 100, 1 ; ; not a gap! ; generic_pid_rpms_a = array, S16, 475, [8], "rpm", 1, 0, 0, 20000, 0 generic_pid_loadvals_a = array, S16, 491, [8], "%", { getChannelScaleByOffset(generic_pid_load_offset_a) } , { getChannelTranslateByOffset(generic_pid_load_offset_a) }, { getChannelMinByOffset(generic_pid_load_offset_a) }, { getChannelMaxByOffset(generic_pid_load_offset_a) }, { getChannelDigitsByOffset(generic_pid_load_offset_a) } generic_pid_rpms_b = array, S16, 507, [8], "rpm", 1, 0, 0, 20000, 0 generic_pid_loadvals_b = array, S16, 523, [8], "%", { getChannelScaleByOffset(generic_pid_load_offset_b) } , { getChannelTranslateByOffset(generic_pid_load_offset_b) }, { getChannelMinByOffset(generic_pid_load_offset_b) }, { getChannelMaxByOffset(generic_pid_load_offset_b) }, { getChannelDigitsByOffset(generic_pid_load_offset_b) } generic_pid_targets_a = array, S16, 539, [8x8], "", { getChannelScaleByOffset(generic_pid_PV_offset_a) } , { getChannelTranslateByOffset(generic_pid_PV_offset_a) }, { getChannelMinByOffset(generic_pid_PV_offset_a) }, { getChannelMaxByOffset(generic_pid_PV_offset_a) }, { getChannelDigitsByOffset(generic_pid_PV_offset_a) } generic_pid_targets_b = array, S16, 667, [8x8], "", { getChannelScaleByOffset(generic_pid_PV_offset_b) } , { getChannelTranslateByOffset(generic_pid_PV_offset_b) }, { getChannelMinByOffset(generic_pid_PV_offset_b) }, { getChannelMaxByOffset(generic_pid_PV_offset_b) }, { getChannelDigitsByOffset(generic_pid_PV_offset_b) } generic_pid_control_interval_a = scalar, U08, 795, "ms", 1, 0, 10, 255, 0 generic_pid_control_interval_b = scalar, U08, 796, "ms", 1, 0, 10, 255, 0 generic_pid_P_a = scalar, U08, 797, "%", 1, 0, 0, 255, 0 generic_pid_P_b = scalar, U08, 798, "%", 1, 0, 0, 255, 0 generic_pid_I_a = scalar, U08, 799, "%", 1, 0, 0, 255, 0 generic_pid_I_b = scalar, U08, 800, "%", 1, 0, 0, 255, 0 generic_pid_D_a = scalar, U08, 801, "%", 1, 0, 0, 255, 0 generic_pid_D_b = scalar, U08, 802, "%", 1, 0, 0, 255, 0 ;gap tcslipx = array, U16, 804, [9], "Knob%", 0.0978, 0, 0, 100, 0 tcslipy = array, U08, 822, [9], "Slip threshold %", 1, 0, 0, 100, 0 ;gap ; 4 outmsg outmsg1_offset01 = scalar, U16, 832, "", 1, 0, 0, 512, 0 outmsg1_offset02 = scalar, U16, 834, "", 1, 0, 0, 512, 0 outmsg1_offset03 = scalar, U16, 836, "", 1, 0, 0, 512, 0 outmsg1_offset04 = scalar, U16, 838, "", 1, 0, 0, 512, 0 outmsg1_offset05 = scalar, U16, 840, "", 1, 0, 0, 512, 0 outmsg1_offset06 = scalar, U16, 842, "", 1, 0, 0, 512, 0 outmsg1_offset07 = scalar, U16, 844, "", 1, 0, 0, 512, 0 outmsg1_offset08 = scalar, U16, 846, "", 1, 0, 0, 512, 0 outmsg1_offset09 = scalar, U16, 848, "", 1, 0, 0, 512, 0 outmsg1_offset10 = scalar, U16, 850, "", 1, 0, 0, 512, 0 outmsg1_offset11 = scalar, U16, 852, "", 1, 0, 0, 512, 0 outmsg1_offset12 = scalar, U16, 854, "", 1, 0, 0, 512, 0 outmsg1_offset13 = scalar, U16, 856, "", 1, 0, 0, 512, 0 outmsg1_offset14 = scalar, U16, 858, "", 1, 0, 0, 512, 0 outmsg1_offset15 = scalar, U16, 860, "", 1, 0, 0, 512, 0 outmsg1_offset16 = scalar, U16, 862, "", 1, 0, 0, 512, 0 outmsg1_size01 = scalar, U08, 864, "", 1, 0, 0, 8, 0 outmsg1_size02 = scalar, U08, 865, "", 1, 0, 0, 8, 0 outmsg1_size03 = scalar, U08, 866, "", 1, 0, 0, 8, 0 outmsg1_size04 = scalar, U08, 867, "", 1, 0, 0, 8, 0 outmsg1_size05 = scalar, U08, 868, "", 1, 0, 0, 8, 0 outmsg1_size06 = scalar, U08, 869, "", 1, 0, 0, 8, 0 outmsg1_size07 = scalar, U08, 870, "", 1, 0, 0, 8, 0 outmsg1_size08 = scalar, U08, 871, "", 1, 0, 0, 8, 0 outmsg1_size09 = scalar, U08, 872, "", 1, 0, 0, 8, 0 outmsg1_size10 = scalar, U08, 873, "", 1, 0, 0, 8, 0 outmsg1_size11 = scalar, U08, 874, "", 1, 0, 0, 8, 0 outmsg1_size12 = scalar, U08, 875, "", 1, 0, 0, 8, 0 outmsg1_size13 = scalar, U08, 876, "", 1, 0, 0, 8, 0 outmsg1_size14 = scalar, U08, 877, "", 1, 0, 0, 8, 0 outmsg1_size15 = scalar, U08, 878, "", 1, 0, 0, 8, 0 outmsg1_size16 = scalar, U08, 879, "", 1, 0, 0, 8, 0 outmsg2_offset01 = scalar, U16, 880, "", 1, 0, 0, 512, 0 outmsg2_offset02 = scalar, U16, 882, "", 1, 0, 0, 512, 0 outmsg2_offset03 = scalar, U16, 884, "", 1, 0, 0, 512, 0 outmsg2_offset04 = scalar, U16, 886, "", 1, 0, 0, 512, 0 outmsg2_offset05 = scalar, U16, 888, "", 1, 0, 0, 512, 0 outmsg2_offset06 = scalar, U16, 890, "", 1, 0, 0, 512, 0 outmsg2_offset07 = scalar, U16, 892, "", 1, 0, 0, 512, 0 outmsg2_offset08 = scalar, U16, 894, "", 1, 0, 0, 512, 0 outmsg2_offset09 = scalar, U16, 896, "", 1, 0, 0, 512, 0 outmsg2_offset10 = scalar, U16, 898, "", 1, 0, 0, 512, 0 outmsg2_offset11 = scalar, U16, 900, "", 1, 0, 0, 512, 0 outmsg2_offset12 = scalar, U16, 902, "", 1, 0, 0, 512, 0 outmsg2_offset13 = scalar, U16, 904, "", 1, 0, 0, 512, 0 outmsg2_offset14 = scalar, U16, 906, "", 1, 0, 0, 512, 0 outmsg2_offset15 = scalar, U16, 908, "", 1, 0, 0, 512, 0 outmsg2_offset16 = scalar, U16, 910, "", 1, 0, 0, 512, 0 outmsg2_size01 = scalar, U08, 912, "", 1, 0, 0, 8, 0 outmsg2_size02 = scalar, U08, 913, "", 1, 0, 0, 8, 0 outmsg2_size03 = scalar, U08, 914, "", 1, 0, 0, 8, 0 outmsg2_size04 = scalar, U08, 915, "", 1, 0, 0, 8, 0 outmsg2_size05 = scalar, U08, 916, "", 1, 0, 0, 8, 0 outmsg2_size06 = scalar, U08, 917, "", 1, 0, 0, 8, 0 outmsg2_size07 = scalar, U08, 918, "", 1, 0, 0, 8, 0 outmsg2_size08 = scalar, U08, 919, "", 1, 0, 0, 8, 0 outmsg2_size09 = scalar, U08, 920, "", 1, 0, 0, 8, 0 outmsg2_size10 = scalar, U08, 921, "", 1, 0, 0, 8, 0 outmsg2_size11 = scalar, U08, 922, "", 1, 0, 0, 8, 0 outmsg2_size12 = scalar, U08, 923, "", 1, 0, 0, 8, 0 outmsg2_size13 = scalar, U08, 924, "", 1, 0, 0, 8, 0 outmsg2_size14 = scalar, U08, 925, "", 1, 0, 0, 8, 0 outmsg2_size15 = scalar, U08, 926, "", 1, 0, 0, 8, 0 outmsg2_size16 = scalar, U08, 927, "", 1, 0, 0, 8, 0 outmsg3_offset01 = scalar, U16, 928, "", 1, 0, 0, 512, 0 outmsg3_offset02 = scalar, U16, 930, "", 1, 0, 0, 512, 0 outmsg3_offset03 = scalar, U16, 932, "", 1, 0, 0, 512, 0 outmsg3_offset04 = scalar, U16, 934, "", 1, 0, 0, 512, 0 outmsg3_offset05 = scalar, U16, 936, "", 1, 0, 0, 512, 0 outmsg3_offset06 = scalar, U16, 938, "", 1, 0, 0, 512, 0 outmsg3_offset07 = scalar, U16, 940, "", 1, 0, 0, 512, 0 outmsg3_offset08 = scalar, U16, 942, "", 1, 0, 0, 512, 0 outmsg3_offset09 = scalar, U16, 944, "", 1, 0, 0, 512, 0 outmsg3_offset10 = scalar, U16, 946, "", 1, 0, 0, 512, 0 outmsg3_offset11 = scalar, U16, 948, "", 1, 0, 0, 512, 0 outmsg3_offset12 = scalar, U16, 950, "", 1, 0, 0, 512, 0 outmsg3_offset13 = scalar, U16, 952, "", 1, 0, 0, 512, 0 outmsg3_offset14 = scalar, U16, 954, "", 1, 0, 0, 512, 0 outmsg3_offset15 = scalar, U16, 956, "", 1, 0, 0, 512, 0 outmsg3_offset16 = scalar, U16, 958, "", 1, 0, 0, 512, 0 outmsg3_size01 = scalar, U08, 960, "", 1, 0, 0, 8, 0 outmsg3_size02 = scalar, U08, 961, "", 1, 0, 0, 8, 0 outmsg3_size03 = scalar, U08, 962, "", 1, 0, 0, 8, 0 outmsg3_size04 = scalar, U08, 963, "", 1, 0, 0, 8, 0 outmsg3_size05 = scalar, U08, 964, "", 1, 0, 0, 8, 0 outmsg3_size06 = scalar, U08, 965, "", 1, 0, 0, 8, 0 outmsg3_size07 = scalar, U08, 966, "", 1, 0, 0, 8, 0 outmsg3_size08 = scalar, U08, 967, "", 1, 0, 0, 8, 0 outmsg3_size09 = scalar, U08, 968, "", 1, 0, 0, 8, 0 outmsg3_size10 = scalar, U08, 969, "", 1, 0, 0, 8, 0 outmsg3_size11 = scalar, U08, 970, "", 1, 0, 0, 8, 0 outmsg3_size12 = scalar, U08, 971, "", 1, 0, 0, 8, 0 outmsg3_size13 = scalar, U08, 972, "", 1, 0, 0, 8, 0 outmsg3_size14 = scalar, U08, 973, "", 1, 0, 0, 8, 0 outmsg3_size15 = scalar, U08, 974, "", 1, 0, 0, 8, 0 outmsg3_size16 = scalar, U08, 975, "", 1, 0, 0, 8, 0 outmsg4_offset01 = scalar, U16, 976, "", 1, 0, 0, 512, 0 outmsg4_offset02 = scalar, U16, 978, "", 1, 0, 0, 512, 0 outmsg4_offset03 = scalar, U16, 980, "", 1, 0, 0, 512, 0 outmsg4_offset04 = scalar, U16, 982, "", 1, 0, 0, 512, 0 outmsg4_offset05 = scalar, U16, 984, "", 1, 0, 0, 512, 0 outmsg4_offset06 = scalar, U16, 986, "", 1, 0, 0, 512, 0 outmsg4_offset07 = scalar, U16, 988, "", 1, 0, 0, 512, 0 outmsg4_offset08 = scalar, U16, 990, "", 1, 0, 0, 512, 0 outmsg4_offset09 = scalar, U16, 992, "", 1, 0, 0, 512, 0 outmsg4_offset10 = scalar, U16, 994, "", 1, 0, 0, 512, 0 outmsg4_offset11 = scalar, U16, 996, "", 1, 0, 0, 512, 0 outmsg4_offset12 = scalar, U16, 998, "", 1, 0, 0, 512, 0 outmsg4_offset13 = scalar, U16, 1000, "", 1, 0, 0, 512, 0 outmsg4_offset14 = scalar, U16, 1002, "", 1, 0, 0, 512, 0 outmsg4_offset15 = scalar, U16, 1004, "", 1, 0, 0, 512, 0 outmsg4_offset16 = scalar, U16, 1006, "", 1, 0, 0, 512, 0 outmsg4_size01 = scalar, U08, 1008, "", 1, 0, 0, 8, 0 outmsg4_size02 = scalar, U08, 1009, "", 1, 0, 0, 8, 0 outmsg4_size03 = scalar, U08, 1010, "", 1, 0, 0, 8, 0 outmsg4_size04 = scalar, U08, 1011, "", 1, 0, 0, 8, 0 outmsg4_size05 = scalar, U08, 1012, "", 1, 0, 0, 8, 0 outmsg4_size06 = scalar, U08, 1013, "", 1, 0, 0, 8, 0 outmsg4_size07 = scalar, U08, 1014, "", 1, 0, 0, 8, 0 outmsg4_size08 = scalar, U08, 1015, "", 1, 0, 0, 8, 0 outmsg4_size09 = scalar, U08, 1016, "", 1, 0, 0, 8, 0 outmsg4_size10 = scalar, U08, 1017, "", 1, 0, 0, 8, 0 outmsg4_size11 = scalar, U08, 1018, "", 1, 0, 0, 8, 0 outmsg4_size12 = scalar, U08, 1019, "", 1, 0, 0, 8, 0 outmsg4_size13 = scalar, U08, 1020, "", 1, 0, 0, 8, 0 outmsg4_size14 = scalar, U08, 1021, "", 1, 0, 0, 8, 0 outmsg4_size15 = scalar, U08, 1022, "", 1, 0, 0, 8, 0 outmsg4_size16 = scalar, U08, 1023, "", 1, 0, 0, 8, 0 page = 18 ; 28 etc_opt_on = bits, U08, 0, [0:1], "Off", "Idle control", "INVALID", "DBW" etc_opt_follow = bits, U08, 0, [4:4], "Off", "On" ;spare bits ;gap etc_canbase = scalar,U16, 2, "", 1, 0, 0, 2047, 0 etc_app_min = scalar,U16, 4, "", 1, 0, 0, 65535, 0 etc_app_max = scalar,U16, 6, "", 1, 0, 0, 65535, 0 etc_tp_min = scalar,U16, 8, "", 1, 0, 0, 65535, 0 etc_tp_max = scalar,U16, 10, "", 1, 0, 0, 65535, 0 etc_tp_act_min = scalar,U16, 12, "", 1, 0, 0, 65535, 0 etc_tp_act_max = scalar,U16, 14, "", 1, 0, 0, 65535, 0 ;gap etc_testpos = scalar,U16, 18, "%", 0.01, 0, 0, 100.0, 2 etc_pedal_pos = array, S16, 20, [10], "%", 0.01, 0, 0, 100.0, 2 etc_rpms = array, S16, 40, [10], "", 1, 0, 0, 20000, 0 etc_targ_pos = array, U16, 60, [10x10], "%", 0.01, 0, 0, 100.0, 2 etc_idlescale = scalar,U16, 260, "%", 0.01, 0, 0, 100, 2 dwell_table_values = array, U08, 262, [8x8], "%", 0.10000, 0.00000, 0.5, 25.5, 1 dwell_table_rpms = array, U16, 326, [ 8], "RPM", 1.00000, 0.00000, 0.00,20000, 0 dwell_table_loads = array, S16, 342, [ 8], { bitStringValue( algorithmUnits , IgnAlgorithm ) }, 0.10000, 0.00000, 0.00, 500, 1 launch_var_maps = array, U16, 358, [ 6], "kPa", 0.1, 0.0, 0.0,700.0, 1 launch_var_rpms = array, U16, 370, [ 6], "RPM", 1.0, 0, 0, 20000, 0 ;8bytes gap here #define CAN_RCV_VARS = "Off", "CAN VSS1", "CAN VSS2", "CAN VSS3", "CAN VSS4", "CANIN 1-8", "gear", "status5", "CAN ADC01", "CAN ADC02", "CAN ADC03", "CAN ADC04", "CAN ADC05", "CAN ADC06", "CAN ADC07", "CAN ADC08", "CAN ADC09", "CAN ADC10", "CAN ADC11", "CAN ADC12", "CAN ADC13", "CAN ADC14", "CAN ADC15", "CAN ADC16", "CAN ADC17", "CAN ADC18", "CAN ADC19", "CAN ADC20", "CAN ADC21", "CAN ADC22", "CAN ADC23", "CAN ADC24", "CAN EGO01", "CAN EGO02", "CAN EGO03", "CAN EGO04", "CAN EGO05", "CAN EGO06", "CAN EGO07", "CAN EGO08", "CAN EGO09", "CAN EGO10", "CAN EGO11", "CAN EGO12", "INVALID", "INVALID", "INVALID", "INVALID", "CAN PWMin 1", "CAN PWMin 2", "CAN PWMin 3", "CAN PWMin 4", "FuelAdj", "SpkAdj", "IdleAdj", "INVALID", "gps_latdeg", "gps_latmin", "gps_latmmin", "gps_londeg", "gps_lonmin", "gps_lonmmin", "gps_outstatus", "gps_altk", "gps_altm", "gps_speedkm", "gps_course", "shutdowncode", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID" can_rcv_var1 = bits, U08, 390, [0:6], $CAN_RCV_VARS can_rcv_var2 = bits, U08, 391, [0:6], $CAN_RCV_VARS can_rcv_var3 = bits, U08, 392, [0:6], $CAN_RCV_VARS can_rcv_var4 = bits, U08, 393, [0:6], $CAN_RCV_VARS can_rcv_var5 = bits, U08, 394, [0:6], $CAN_RCV_VARS can_rcv_var6 = bits, U08, 395, [0:6], $CAN_RCV_VARS can_rcv_var7 = bits, U08, 396, [0:6], $CAN_RCV_VARS can_rcv_var8 = bits, U08, 397, [0:6], $CAN_RCV_VARS can_rcv_var9 = bits, U08, 398, [0:6], $CAN_RCV_VARS can_rcv_var10 = bits, U08, 399, [0:6], $CAN_RCV_VARS can_rcv_var11 = bits, U08, 400, [0:6], $CAN_RCV_VARS can_rcv_var12 = bits, U08, 401, [0:6], $CAN_RCV_VARS can_rcv_var13 = bits, U08, 402, [0:6], $CAN_RCV_VARS can_rcv_var14 = bits, U08, 403, [0:6], $CAN_RCV_VARS can_rcv_var15 = bits, U08, 404, [0:6], $CAN_RCV_VARS can_rcv_var16 = bits, U08, 405, [0:6], $CAN_RCV_VARS can_rcv_off1 = scalar, U08, 406, "", 1, 0.00000, 0, 7, 0 can_rcv_off2 = scalar, U08, 407, "", 1, 0.00000, 0, 7, 0 can_rcv_off3 = scalar, U08, 408, "", 1, 0.00000, 0, 7, 0 can_rcv_off4 = scalar, U08, 409, "", 1, 0.00000, 0, 7, 0 can_rcv_off5 = scalar, U08, 410, "", 1, 0.00000, 0, 7, 0 can_rcv_off6 = scalar, U08, 411, "", 1, 0.00000, 0, 7, 0 can_rcv_off7 = scalar, U08, 412, "", 1, 0.00000, 0, 7, 0 can_rcv_off8 = scalar, U08, 413, "", 1, 0.00000, 0, 7, 0 can_rcv_off9 = scalar, U08, 414, "", 1, 0.00000, 0, 7, 0 can_rcv_off10 = scalar, U08, 415, "", 1, 0.00000, 0, 7, 0 can_rcv_off11 = scalar, U08, 416, "", 1, 0.00000, 0, 7, 0 can_rcv_off12 = scalar, U08, 417, "", 1, 0.00000, 0, 7, 0 can_rcv_off13 = scalar, U08, 418, "", 1, 0.00000, 0, 7, 0 can_rcv_off14 = scalar, U08, 419, "", 1, 0.00000, 0, 7, 0 can_rcv_off15 = scalar, U08, 420, "", 1, 0.00000, 0, 7, 0 can_rcv_off16 = scalar, U08, 421, "", 1, 0.00000, 0, 7, 0 #define CAN_RCV_SIZES = "1U", "1S", "B2U", "B2S", "B4U", "B4S", "L2U", "L2S", "L4U", "L4S","INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID" can_rcv_size1 = bits, U08, 422, [0:3], $CAN_RCV_SIZES can_rcv_size2 = bits, U08, 423, [0:3], $CAN_RCV_SIZES can_rcv_size3 = bits, U08, 424, [0:3], $CAN_RCV_SIZES can_rcv_size4 = bits, U08, 425, [0:3], $CAN_RCV_SIZES can_rcv_size5 = bits, U08, 426, [0:3], $CAN_RCV_SIZES can_rcv_size6 = bits, U08, 427, [0:3], $CAN_RCV_SIZES can_rcv_size7 = bits, U08, 428, [0:3], $CAN_RCV_SIZES can_rcv_size8 = bits, U08, 429, [0:3], $CAN_RCV_SIZES can_rcv_size9 = bits, U08, 430, [0:3], $CAN_RCV_SIZES can_rcv_size10 = bits, U08, 431, [0:3], $CAN_RCV_SIZES can_rcv_size11 = bits, U08, 432, [0:3], $CAN_RCV_SIZES can_rcv_size12 = bits, U08, 433, [0:3], $CAN_RCV_SIZES can_rcv_size13 = bits, U08, 434, [0:3], $CAN_RCV_SIZES can_rcv_size14 = bits, U08, 435, [0:3], $CAN_RCV_SIZES can_rcv_size15 = bits, U08, 436, [0:3], $CAN_RCV_SIZES can_rcv_size16 = bits, U08, 437, [0:3], $CAN_RCV_SIZES ; same locations repeated can_rcv_size_ext1 = bits, U08, 422, [7:7], "Std", "Ext" can_rcv_size_ext2 = bits, U08, 423, [7:7], "Std", "Ext" can_rcv_size_ext3 = bits, U08, 424, [7:7], "Std", "Ext" can_rcv_size_ext4 = bits, U08, 425, [7:7], "Std", "Ext" can_rcv_size_ext5 = bits, U08, 426, [7:7], "Std", "Ext" can_rcv_size_ext6 = bits, U08, 427, [7:7], "Std", "Ext" can_rcv_size_ext7 = bits, U08, 428, [7:7], "Std", "Ext" can_rcv_size_ext8 = bits, U08, 429, [7:7], "Std", "Ext" can_rcv_size_ext9 = bits, U08, 430, [7:7], "Std", "Ext" can_rcv_size_ext10 = bits, U08, 431, [7:7], "Std", "Ext" can_rcv_size_ext11 = bits, U08, 432, [7:7], "Std", "Ext" can_rcv_size_ext12 = bits, U08, 433, [7:7], "Std", "Ext" can_rcv_size_ext13 = bits, U08, 434, [7:7], "Std", "Ext" can_rcv_size_ext14 = bits, U08, 435, [7:7], "Std", "Ext" can_rcv_size_ext15 = bits, U08, 436, [7:7], "Std", "Ext" can_rcv_size_ext16 = bits, U08, 437, [7:7], "Std", "Ext" can_rcv_mult1 = scalar, S16, 438, "", 1, 0.00000, -32767, 32767,0 can_rcv_mult2 = scalar, S16, 440, "", 1, 0.00000, -32767, 32767,0 can_rcv_mult3 = scalar, S16, 442, "", 1, 0.00000, -32767, 32767,0 can_rcv_mult4 = scalar, S16, 444, "", 1, 0.00000, -32767, 32767,0 can_rcv_mult5 = scalar, S16, 446, "", 1, 0.00000, -32767, 32767,0 can_rcv_mult6 = scalar, S16, 448, "", 1, 0.00000, -32767, 32767,0 can_rcv_mult7 = scalar, S16, 450, "", 1, 0.00000, -32767, 32767,0 can_rcv_mult8 = scalar, S16, 452, "", 1, 0.00000, -32767, 32767,0 can_rcv_mult9 = scalar, S16, 454, "", 1, 0.00000, -32767, 32767,0 can_rcv_mult10 = scalar, S16, 456, "", 1, 0.00000, -32767, 32767,0 can_rcv_mult11 = scalar, S16, 458, "", 1, 0.00000, -32767, 32767,0 can_rcv_mult12 = scalar, S16, 460, "", 1, 0.00000, -32767, 32767,0 can_rcv_mult13 = scalar, S16, 462, "", 1, 0.00000, -32767, 32767,0 can_rcv_mult14 = scalar, S16, 464, "", 1, 0.00000, -32767, 32767,0 can_rcv_mult15 = scalar, S16, 466, "", 1, 0.00000, -32767, 32767,0 can_rcv_mult16 = scalar, S16, 468, "", 1, 0.00000, -32767, 32767,0 can_rcv_div1 = scalar, U16, 470, "", 1, 0.00000, 1, 32767,0 can_rcv_div2 = scalar, U16, 472, "", 1, 0.00000, 1, 32767,0 can_rcv_div3 = scalar, U16, 474, "", 1, 0.00000, 1, 32767,0 can_rcv_div4 = scalar, U16, 476, "", 1, 0.00000, 1, 32767,0 can_rcv_div5 = scalar, U16, 478, "", 1, 0.00000, 1, 32767,0 can_rcv_div6 = scalar, U16, 480, "", 1, 0.00000, 1, 32767,0 can_rcv_div7 = scalar, U16, 482, "", 1, 0.00000, 1, 32767,0 can_rcv_div8 = scalar, U16, 484, "", 1, 0.00000, 1, 32767,0 can_rcv_div9 = scalar, U16, 486, "", 1, 0.00000, 1, 32767,0 can_rcv_div10 = scalar, U16, 488, "", 1, 0.00000, 1, 32767,0 can_rcv_div11 = scalar, U16, 490, "", 1, 0.00000, 1, 32767,0 can_rcv_div12 = scalar, U16, 492, "", 1, 0.00000, 1, 32767,0 can_rcv_div13 = scalar, U16, 494, "", 1, 0.00000, 1, 32767,0 can_rcv_div14 = scalar, U16, 496, "", 1, 0.00000, 1, 32767,0 can_rcv_div15 = scalar, U16, 498, "", 1, 0.00000, 1, 32767,0 can_rcv_div16 = scalar, U16, 500, "", 1, 0.00000, 1, 32767,0 can_rcv_add1 = scalar, S16, 502, "", 1, 0.00000, -32767, 32767,0 can_rcv_add2 = scalar, S16, 504, "", 1, 0.00000, -32767, 32767,0 can_rcv_add3 = scalar, S16, 506, "", 1, 0.00000, -32767, 32767,0 can_rcv_add4 = scalar, S16, 508, "", 1, 0.00000, -32767, 32767,0 can_rcv_add5 = scalar, S16, 510, "", 1, 0.00000, -32767, 32767,0 can_rcv_add6 = scalar, S16, 512, "", 1, 0.00000, -32767, 32767,0 can_rcv_add7 = scalar, S16, 514, "", 1, 0.00000, -32767, 32767,0 can_rcv_add8 = scalar, S16, 516, "", 1, 0.00000, -32767, 32767,0 can_rcv_add9 = scalar, S16, 518, "", 1, 0.00000, -32767, 32767,0 can_rcv_add10 = scalar, S16, 520, "", 1, 0.00000, -32767, 32767,0 can_rcv_add11 = scalar, S16, 522, "", 1, 0.00000, -32767, 32767,0 can_rcv_add12 = scalar, S16, 524, "", 1, 0.00000, -32767, 32767,0 can_rcv_add13 = scalar, S16, 526, "", 1, 0.00000, -32767, 32767,0 can_rcv_add14 = scalar, S16, 528, "", 1, 0.00000, -32767, 32767,0 can_rcv_add15 = scalar, S16, 530, "", 1, 0.00000, -32767, 32767,0 can_rcv_add16 = scalar, S16, 532, "", 1, 0.00000, -32767, 32767,0 can_bcast_user_id = scalar, U16, 534, "", 1, 0, 1, 2047, 0 can_bcast_user_d0 = scalar, U08, 536, "", 1, 0, 0, 255, 0 can_bcast_user_d1 = scalar, U08, 537, "", 1, 0, 0, 255, 0 can_bcast_user_d2 = scalar, U08, 538, "", 1, 0, 0, 255, 0 can_bcast_user_d3 = scalar, U08, 539, "", 1, 0, 0, 255, 0 can_bcast_user_d4 = scalar, U08, 540, "", 1, 0, 0, 255, 0 can_bcast_user_d5 = scalar, U08, 541, "", 1, 0, 0, 255, 0 can_bcast_user_d6 = scalar, U08, 542, "", 1, 0, 0, 255, 0 can_bcast_user_d7 = scalar, U08, 543, "", 1, 0, 0, 255, 0 iobox_opta1 = bits, U08, 544, [0:0], "Off", "On" iobox_opta1adv = bits, U08, 544, [1:1], "Automatic", "Advanced" iobox_opta1canin = bits, U08, 544, [2:3], "CANIN1", "CANIN4", "CANIN7", "Off" iobox_opta1canout= bits, U08, 544, [4:5], "CANOUT1", "CANOUT9", "Off", "INVALID" iobox_opta1canadc= bits, U08, 544, [6:7], "CANADC1", "CANADC9", "CANADC17", "INVALID" iobox_opta2 = bits, U08, 545, [0:0], "Off", "On" iobox_opta2adv = bits, U08, 545, [1:1], "Automatic", "Advanced" iobox_opta2canin = bits, U08, 545, [2:3], "CANIN1", "CANIN4", "CANIN7", "Off" iobox_opta2canout= bits, U08, 545, [4:5], "CANOUT1", "CANOUT9", "Off", "INVALID" iobox_opta2canadc= bits, U08, 545, [6:7], "CANADC1", "CANADC9", "CANADC17", "INVALID" iobox_opta3 = bits, U08, 546, [0:0], "Off", "On" iobox_opta3adv = bits, U08, 546, [1:1], "Automatic", "Advanced" iobox_opta3canin = bits, U08, 546, [2:3], "CANIN1", "CANIN4", "CANIN7", "Off" iobox_opta3canout= bits, U08, 546, [4:5], "CANOUT1", "CANOUT9", "Off", "INVALID" iobox_opta3canadc= bits, U08, 546, [6:7], "CANADC1", "CANADC9", "CANADC17", "INVALID" iobox_opta4 = bits, U08, 547, [0:0], "Off", "INVALID" iobox_opta4adv = bits, U08, 547, [1:1], "Automatic", "Advanced" iobox_opta4canin = bits, U08, 547, [2:3], "CANIN1", "CANIN4", "CANIN7", "Off" iobox_opta4canout= bits, U08, 547, [4:5], "CANOUT1", "CANOUT9", "Off", "INVALID" iobox_opta4canadc= bits, U08, 547, [6:7], "CANADC1", "CANADC9", "CANADC17", "INVALID" iobox_optb1tachrate= bits, U08, 548, [0:1], "50Hz", "100Hz", "INVALID", "INVALID" iobox_optb1inrate = bits, U08, 548, [2:3], "10Hz", "20Hz", "50Hz", "100Hz" iobox_optb1outrate = bits, U08, 548, [4:5], "10Hz", "20Hz", "50Hz", "100Hz" iobox_optb1vss = bits, U08, 548, [6:7], "Off", "Speed in 1,2", "Speed in 3,4", "Speed in 1,2,3,4" iobox_optb2tachrate= bits, U08, 549, [0:1], "50Hz", "100Hz", "INVALID", "INVALID" iobox_optb2inrate = bits, U08, 549, [2:3], "10Hz", "20Hz", "50Hz", "100Hz" iobox_optb2outrate = bits, U08, 549, [4:5], "10Hz", "20Hz", "50Hz", "100Hz" iobox_optb2vss = bits, U08, 549, [6:7], "Off", "Speed in 1,2", "Speed in 3,4", "Speed in 1,2,3,4" iobox_optb3tachrate= bits, U08, 550, [0:1], "50Hz", "100Hz", "INVALID", "INVALID" iobox_optb3inrate = bits, U08, 550, [2:3], "10Hz", "20Hz", "50Hz", "100Hz" iobox_optb3outrate = bits, U08, 550, [4:5], "10Hz", "20Hz", "50Hz", "100Hz" iobox_optb3vss = bits, U08, 550, [6:7], "Off", "INVALID", "INVALID", "INVALID" iobox_optb4tachrate= bits, U08, 551, [0:1], "50Hz", "100Hz", "INVALID", "INVALID" iobox_optb4inrate = bits, U08, 551, [2:3], "10Hz", "20Hz", "50Hz", "100Hz" iobox_optb4outrate = bits, U08, 551, [4:5], "10Hz", "20Hz", "50Hz", "100Hz" iobox_optb4vss = bits, U08, 551, [6:7], "Off", "INVALID", "INVALID", "INVALID" iobox_id1 = scalar, U16, 552, "", 1, 0.00000, 0, 2047, 0 iobox_id2 = scalar, U16, 554, "", 1, 0.00000, 0, 2047, 0 iobox_id3 = scalar, U16, 556, "", 1, 0.00000, 0, 2047, 0 iobox_id4 = scalar, U16, 558, "", 1, 0.00000, 0, 2047, 0 pitlim_opt_on = bits, U08, 560, [0:0], "Off", "On" pitlim_opt_mode = bits, U08, 560, [1:1], "Fixed", "Holding" pitlim_opt_retard=bits, U08, 560, [2:2], "Off", "On" pitlim_opt_spkcut=bits, U08, 560, [3:3], "Off", "On" pitlim_opt_fuelcut=bits,U08, 560, [4:4], "Off", "On" pitlim_opt_fuelprog=bits,U08, 560, [5:5], "Off", "On" pitlim_opt_vssrpm= bits,U08, 560, [6:6], "VSS", "RPM" pitlim_enin = bits, U08, 561, [0:5], $PIN_DIGIN_OFF pitlim_speed = scalar, U16, 562, { bitStringValue( prefSpeedUnits , prefSpeedUnits ) }, { msToPrefUnitsScale }, 0.00000, 0.00, { maxspeed }, 0 pitlim_retardmax= scalar, S16, 564, "deg", 0.1, 0.00000, 0, 30, 1 pitlim_sensitivity=scalar, U16, 566, "", 0.1, 0.00000, 0, 20, 0 pitlim_speed_range=scalar, U16, 568, { bitStringValue( prefSpeedUnits , prefSpeedUnits ) }, { msToPrefUnitsScale }, 0.00000, 0.00, { maxspeed }, 1 pitlim_rpm_range=scalar, U16, 570, "RPM", 1.00000, 0.00000, 200, 1000, 0 ;accel wizard mini tables taeBins = array , U08, 572, [ 4], "%", 1, 0.00000, 0.00, 255, 0 ; * ( 4 bytes) maeBins = array , U08, 576, [ 4], "%", 1, 0.00000, 0.00, 255, 0 ; * ( 4 bytes) taeRates = array , S16, 580, [ 4], "%/s", 0.10000, 0.00000, 0.00, 3276.00, 1 ; * ( 8 bytes) tpsDot bins used for AE: x for TAE interpolation maeRates = array , S16, 588, [ 4], "kPa/s", 1.00000, 0.00000, 0.00, 32767.0, 0 ; * ( 8 bytes) mapDot bins used for AE: x for MAE ;accel wizard #2 taeBins2 = array , U08, 596, [ 4], "%", 1, 0.00000, 0.00, 255, 0 ; * ( 4 bytes) maeBins2 = array , U08, 600, [ 4], "%", 1, 0.00000, 0.00, 255, 0 ; * ( 4 bytes) taeRates2 = array , S16, 604, [ 4], "%/s", 0.10000, 0.00000, 0.00, 3276.00, 1 ; * ( 8 bytes) tpsDot bins used for AE: x for TAE interpolation maeRates2 = array , S16, 612, [ 4], "kPa/s", 1.00000, 0.00000, 0.00, 32767.0, 0 ; * ( 8 bytes) mapDot bins used for AE: x for MAE accel_mapdots = array, S16, 620, [8], "kpa/sec", 1, 0, -5000, 5000, 0 accel_tpsdots = array, S16, 636, [8], "%/sec", 0.1, 0, -3000, 3000, 1 accel_mapdot_amts = array, S16, 652, [8], "%", 0.1, 0, -500, 500, 1 accel_tpsdot_amts = array, S16, 668, [8], "%", 0.1, 0, -500, 500, 1 accel_mapdots2 = array, S16, 684, [8], "kpa/sec", 1, 0, -5000, 5000, 0 accel_tpsdots2 = array, S16, 700, [8], "%/sec", 0.1, 0, -3000, 3000, 1 accel_mapdot_amts2 = array, S16, 716, [8], "%", 0.1, 0, -500, 500, 1 accel_tpsdot_amts2 = array, S16, 732, [8], "%", 0.1, 0, -500, 500, 1 dashbcast_id1 = scalar, U16, 748, "", 1, 0.00000, 0, 2047, 0 dashbcast_opta1 = bits, U08, 750, [0:0], "Off", "On" dashbcast_opta1adv = bits, U08, 750, [1:1], "Automatic", "Advanced" dashbcast_opta4outrate=bits, U08, 750, [4:5], "10Hz", "20Hz", "50Hz", "100Hz" canrx1_opt_accel = bits, U08, 751, [0:1], "Off", "Race Technology 11bit", "Kia IMU", "INVALID" canrx1_rt_gps_base = scalar, U16, 752, "", 1, 0.00000, 0, 2047, 0 canrx1_rt_accel_base = scalar, U16, 754, "", 1, 0.00000, 0, 2047, 0 can_rcv_id1 = scalar, U32, 756, "", 1, 0.00000, 0, 536870912, 0 can_rcv_id2 = scalar, U32, 760, "", 1, 0.00000, 0, 536870912, 0 can_rcv_id3 = scalar, U32, 764, "", 1, 0.00000, 0, 536870912, 0 can_rcv_id4 = scalar, U32, 768, "", 1, 0.00000, 0, 536870912, 0 can_rcv_id5 = scalar, U32, 772, "", 1, 0.00000, 0, 536870912, 0 can_rcv_id6 = scalar, U32, 776, "", 1, 0.00000, 0, 536870912, 0 can_rcv_id7 = scalar, U32, 780, "", 1, 0.00000, 0, 536870912, 0 can_rcv_id8 = scalar, U32, 784, "", 1, 0.00000, 0, 536870912, 0 can_rcv_id9 = scalar, U32, 788, "", 1, 0.00000, 0, 536870912, 0 can_rcv_id10= scalar, U32, 792, "", 1, 0.00000, 0, 536870912, 0 can_rcv_id11= scalar, U32, 796, "", 1, 0.00000, 0, 536870912, 0 can_rcv_id12= scalar, U32, 800, "", 1, 0.00000, 0, 536870912, 0 can_rcv_id13= scalar, U32, 804, "", 1, 0.00000, 0, 536870912, 0 can_rcv_id14= scalar, U32, 808, "", 1, 0.00000, 0, 536870912, 0 can_rcv_id15= scalar, U32, 812, "", 1, 0.00000, 0, 536870912, 0 can_rcv_id16= scalar, U32, 816, "", 1, 0.00000, 0, 536870912, 0 ;next is 820 ego_auth_table2 = array, U08, 820, [12x12], "%", 0.10000, 0.00000, 0, 25.5, 1 can_accelx_offset = scalar, S16, 964, "ms-2", 0.001, 0, -20, 20, 3 can_accely_offset = scalar, S16, 966, "ms-2", 0.001, 0, -20, 20, 3 can_accelz_offset = scalar, S16, 968, { bitStringValue( accel_vs_yaw_units , accel_vs_yaw ) }, 0.001, 0, -20, 20, 3 page = 19 ; 29 ; dome settings boost_dome_targets1 = array, U16, 0, [ 8x8 ], "kPa", 0.1, 0, 0, 700, 0 boost_dome_targets2 = array, U16, 128, [ 8x8 ], "kPa", 0.1, 0, 0, 700, 0 boost_dome_target_rpms1 = array, U16, 256, [ 8 ], "RPM", 1, 0, 0, 20000, 0 boost_dome_target_rpms2 = array, U16, 272, [ 8 ], "RPM", 1, 0, 0, 20000, 0 boost_dome_target_kpas1 = array, U16, 288, [ 8 ], "kPa", 0.1, 0, 0, 700, 0 boost_dome_target_kpas2 = array, U16, 304, [ 8 ], "kPa", 0.1, 0, 0, 700, 0 boost_dome_Kp1 = scalar, S16, 320, "%", 0.1, 0, 0, 200, 1 boost_dome_Kp2 = scalar, S16, 322, "%", 0.1, 0, 0, 200, 1 boost_dome_Ki1 = scalar, S16, 324, "%", 0.1, 0, 0, 200, 1 boost_dome_Ki2 = scalar, S16, 326, "%", 0.1, 0, 0, 200, 1 boost_dome_Kd1 = scalar, S16, 328, "%", 0.1, 0, 0, 200, 1 boost_dome_Kd2 = scalar, S16, 330, "%", 0.1, 0, 0, 200, 1 boost_dome_outputs_fill1 = bits, U08, 332, [0:6], $PIN_DIGOUT boost_dome_outputs_fill2 = bits, U08, 333, [0:6], $PIN_DIGOUT ; boost_dome_settings1_on = bits, U08, 334, [0:0], "Off", "On" boost_dome_settings1_emptydome_offboost = bits, U08, 334, [1:1], "Do not empty", "Empty" boost_dome_settings1_advanced = bits, U08, 334, [2:2], "Basic mode", "Advanced mode" boost_dome_settings1_mode = bits, U08, 334, [4:4], "Simple", "PID" boost_dome_settings1_biasen = bits, U08, 334, [5:5], "Bias table", "Max dome target" boost_dome_settings1_range = bits, U08, 334, [6:6], "Range", "Min/max" ; boost_dome_settings2_on = bits, U08, 335, [0:0], "Off", "On" ; boost_dome_settings2_emptydome_offboost = bits, U08, 335, [1:1], "Do not empty", "Empty" ; boost_dome_settings2_advanced = bits, U08, 335, [2:2], "Basic mode", "Advanced mode" ; boost_dome_settings2_mode = bits, U08, 335, [4:4], "Simple", "PID" boost_dome_empty_out_mins1 = scalar, S08, 336, "%", 1, 0, 0, 100, 0 boost_dome_empty_out_mins2 = scalar, S08, 337, "%", 1, 0, 0, 100, 0 boost_dome_empty_out_maxs1 = scalar, S08, 338, "%", 1, 0, 0, 100, 0 boost_dome_empty_out_maxs2 = scalar, S08, 339, "%", 1, 0, 0, 100, 0 boost_dome_hyst1 = scalar, U16, 340, "kPa", 0.1, 0, 0, 500, 1 boost_dome_hyst2 = scalar, U16, 342, "kPa", 0.1, 0, 0, 500, 1 boost_dome_testtarg = scalar, U16, 344, "kPa", 0.1, 0, 0, 500, 1 ;progressive nitrous tables n2o1_time = array, U16, 346, [10], "s", 0.001, 0, 0, 15, 2 n2o1_rpm = array, U16, 366, [10], "RPM", 1, 0, 0, 20000, 0 n2o1_vss = array, U16, 386, [10], { bitStringValue( prefSpeedUnits, prefSpeedUnits ) }, { msToPrefUnitsScale }, 0.00000, 0.00, { maxspeed }, 1 n2o1_duty = array, U08, 406, [10], "%", 1, 0, 0, 100, 1 n2o1_pw = array, S16, 416, [10], "ms", 0.001, 0, -20, 20, 3 n2o1_retard = array, U16, 436, [10], "deg", 0.1, 0, 0, 30, 1 n2o2_time = array, U16, 456, [10], "s", 0.001, 0, 0, 15, 2 n2o2_rpm = array, U16, 476, [10], "RPM", 1, 0, 0, 20000, 0 n2o2_vss = array, U16, 496, [10], { bitStringValue( prefSpeedUnits, prefSpeedUnits ) }, { msToPrefUnitsScale }, 0.00000, 0.00, { maxspeed }, 1 n2o2_duty = array, U08, 516, [10], "%", 1, 0, 0, 100, 1 n2o2_pw = array, S16, 526, [10], "ms", 0.001, 0, -20, 20, 3 n2o2_retard = array, U16, 546, [10], "deg", 0.1, 0, 0, 30, 1 alternator_pvolts = array , U16, 566, [ 6], "V", 0.10000, 0.00000,6, 18, 1 ; * ( 6 bytes) alternator_periodv = array , U08, 578, [ 6], "ms", 0.128, 0.00000,0, 32, 1 ; * ( 6 bytes) #if CELSIUS alternator_temp = array, S16, 584, [ 6], "°C", 0.05555, -320.000, -40.00, {clthighlim}, 0 #else alternator_temp = array, S16, 584, [ 6], "°F", 0.10000, 0.000,-40.00, {clthighlim}, 1 #endif alternator_targvolts = array , U08, 596, [ 6], "V", 0.10000, 0.00000,6, 18, 1 ; * ( 6 bytes) alternator_dvolts = array , U16, 602, [ 6], "V", 0.10000, 0.00000,6, 18, 1 ; * ( 6 bytes) alternator_dutyv = array , U08, 614, [ 6], "", 1, 0.00000,0, 255, 1 ; * ( 6 bytes) ; next is 620 boost_dome_sensitivities1 = scalar, S16, 620, "", 0.1, 0, 0, 500, 0 boost_dome_sensitivities2 = scalar, S16, 622, "", 0.1, 0, 0, 500, 0 boost_dome_fill_out_mins1 = scalar, S08, 624, "%", 1, 0, 0, 100, 0 boost_dome_fill_out_mins2 = scalar, S08, 625, "%", 1, 0, 0, 100, 0 boost_dome_fill_out_maxs1 = scalar, S08, 626, "%", 1, 0, 0, 100, 0 boost_dome_fill_out_maxs2 = scalar, S08, 627, "%", 1, 0, 0, 100, 0 boost_ctl_dome_min = scalar, U16, 628, "kPa", 0.1, 0, 90, 700, 1 boost_ctl_dome_max = scalar, U16, 630, "kPa", 0.1, 0, 90, 700, 1 boost_dome_freqs1 = bits, U08, 632, [0:2], "INVALID", "78Hz", "39Hz", "26Hz", "19.5Hz", "15.6Hz", "13Hz", "11.1Hz" boost_dome_freqs2 = bits, U08, 633, [0:2], "INVALID", "78Hz", "39Hz", "26Hz", "19.5Hz", "15.6Hz", "13Hz", "11.1Hz" boost_dome_inputs1 = bits, U08, 634, [0:3], "INVALID","Sensor 1", "Sensor 2","Sensor 3","Sensor 4","Sensor 5","Sensor 6","Sensor 7","Sensor 8","Sensor 9","Sensor 10","Sensor 11","Sensor 12","Sensor 13","Sensor 14","Sensor 15" ; note off by 1 boost_dome_inputs2 = bits, U08, 635, [0:3], "INVALID","Sensor 1", "Sensor 2","Sensor 3","Sensor 4","Sensor 5","Sensor 6","Sensor 7","Sensor 8","Sensor 9","Sensor 10","Sensor 11","Sensor 12","Sensor 13","Sensor 14","Sensor 15" ; note off by 1 boost_dome_outputs_empty1 = bits, U08, 636, [0:6], $PIN_DIGOUT boost_dome_outputs_empty2 = bits, U08, 637, [0:6], $PIN_DIGOUT vvt_onoff_rpms = array, U16, 638, [ 8], "rpm", 1, 0, 0, 20000, 0 vvt_onoff_loads = array, S16, 654, [ 8], "%", 0.1, 0, 0, 500, 1 boost_dome_testopt = bits, U08, 670, [0:1], "Off", "Channel 1", "INVALID", "INVALID" map_predict_on = bits, U08, 671, [0:0], "Off", "On" n2o1_fuelpct = array, U08, 672, [10], "%", 1, 0, 0, 255, 1 n2o2_fuelpct = array, U08, 682, [10], "%", 1, 0, 0, 255, 1 boost_dome_bias_range1 = scalar, U16, 692, "kPa", 0.1, 0, 0, 500, 1 map_predict_lookup_table = array, S16, 696, [8x8], "%", 0.1, 0, 0, 500, 1 map_predict_lookup_table2 = array, S16, 824, [8x8], "%", 0.1, 0, 0, 500, 1 map_predict_tps = array, S16, 952, [8], "%", 0.1, 0, 0, 100, 0 map_predict_rpm = array, S16, 968, [8], "rpm", 1, 0, 0, rpmhigh, 0 map_predict_tps2 = array, S16, 984, [8], "%", 0.1, 0, 0, 100, 0 map_predict_rpm2 = array, S16, 1000, [8], "rpm", 1, 0, 0, rpmhigh, 0 map_predict_tpsdot = scalar, S16, 1016, "%/sec", 0.1, 0, 0, 2000, 0 page = 20 ; 30 ; Generic on/off outputs "Spare Port Settings" 2 psEnabled_2 = array , U08, 0, [ 24], "", 1, 0, 0, 1, 0, noSizeMutation psCondition_2 = array , U08, 24, [ 24x2], "", 1, 0, 32, 124, 0, noSizeMutation psConnector_2 = array , U08, 72, [ 24], "", 1, 0, 32, 124, 0, noSizeMutation psInitValue_2 = array , U08, 96, [ 24], "", 1, 0 0, 1, 0, noSizeMutation psPortValue_2 = array , U08, 120, [ 24], "", 1, 0, 0, 1, 0, noSizeMutation psOutSize_2 = array , U08, 144, [ 24x2], "", 1, 0, 0, 255, 0, noSizeMutation psOutOffset_2 = array , U16, 192, [ 24x2], "", 1, 0, 0, 1024, 0, noSizeMutation psThreshold_2 = array , S16, 288, [ 24x2], "", 1, 0, -32768, 32767, 0, noSizeMutation psHysteresis_2 = array , S16, 384, [ 24x2], "", 1, 0, -32768, 32767, 0, noSizeMutation logFieldOffset = array , U16, 480, [ 100], "", 1.0000, 0.00000, 0.00, 65535, 0, noSizeMutation ; * ( 100 words) logFieldLength = array , U08, 680, [ 100], "", 1.0000, 0.00000, 0.00, 255.00, 0, noSizeMutation ; * ( 100 bytes) vss_diff_vss1 = array , S16, 780, [10], { bitStringValue( prefSpeedUnits, prefSpeedUnits ) }, { msToPrefUnitsScale }, 0.00000, 0.00, { maxspeed }, 1 vss_diff_vss2 = array , S16, 800, [10], { bitStringValue( prefSpeedUnits, prefSpeedUnits ) }, { msToPrefUnitsScale }, 0.00000, 0.00, { maxspeed }, 1 vss_diff_table = array , S16, 820, [10x10], "deg", 0.1, 0.00000, 0.00, 40, 1 ; pad1020 4 page = 21 ; 31 inj_deadtime_volts1 = array , S16, 0, [ 6], "V", 0.10000, 0.00000,6, 18, 1 inj_deadtime_volts2 = array , S16, 12, [ 6], "V", 0.10000, 0.00000,6, 18, 1 inj_deadtime_volts3 = array , S16, 24, [ 6], "V", 0.10000, 0.00000,6, 18, 1 inj_deadtime_volts4 = array , S16, 36, [ 6], "V", 0.10000, 0.00000,6, 18, 1 inj_deadtime_pressure1 = array , S16, 48, [ 6], { bitStringValue( prefFuelPressUnits , prefFuelPressUnits ) }, { kpadToPrefFuelPressUnitsScale }, 0.00000, 0, 700, 1 inj_deadtime_pressure2 = array , S16, 60, [ 6], { bitStringValue( prefFuelPressUnits , prefFuelPressUnits ) }, { kpadToPrefFuelPressUnitsScale }, 0.00000, 0, 700, 1 inj_deadtime_pressure3 = array , S16, 72, [ 6], { bitStringValue( prefFuelPressUnits , prefFuelPressUnits ) }, { kpadToPrefFuelPressUnitsScale }, 0.00000, 0, 700, 1 inj_deadtime_pressure4 = array , S16, 84, [ 6], { bitStringValue( prefFuelPressUnits , prefFuelPressUnits ) }, { kpadToPrefFuelPressUnitsScale }, 0.00000, 0, 700, 1 inj_deadtime_table1 = array , S16, 96, [ 6x6], "us", 1, 0.00000, 0, 3000, 0 inj_deadtime_table2 = array , S16, 168, [ 6x6], "us", 1, 0.00000, 0, 3000, 0 inj_deadtime_table3 = array , S16, 240, [ 6x6], "us", 1, 0.00000, 0, 3000, 0 inj_deadtime_table4 = array , S16, 312, [ 6x6], "us", 1, 0.00000, 0, 3000, 0 ; First row of above four tables re-defined for curves. inj_deadtime_curve1 = array , S16, 96, [ 6], "us", 1, 0.00000, 0, 3000, 0 inj_deadtime_curve2 = array , S16, 168, [ 6], "us", 1, 0.00000, 0, 3000, 0 inj_deadtime_curve3 = array , S16, 240, [ 6], "us", 1, 0.00000, 0, 3000, 0 inj_deadtime_curve4 = array , S16, 312, [ 6], "us", 1, 0.00000, 0, 3000, 0 ;384 boost_timed_pct = array, U08, 384, [ 12 ], "%", 1, 0, 0, 100, 0 boost_timed_time= array, U16, 396, [ 12 ], "s", 0.001, 0, 0, 15, 1 boostvss_duty = array, U08, 420, [ 12 ], "%", 1, 0, 0, 100, 0 boostvss_target = array, U16, 432, [ 12 ], "kPa", 0.1, 0, 0, 700, 1 boostvss_speed = array, U16, 456, [ 12 ], { bitStringValue( prefSpeedUnits , prefSpeedUnits ) }, { msToPrefUnitsScale }, 0, 0, { maxspeed }, 0 boostvss_time = array, U16, 456, [ 12 ], "s", 0.001, 0, 0, 65, 3 ; Same data space as _speed ; 480 boost_ctl_cl_pwm_rpms = array, U16, 480, [8], "rpm", 1, 0, 0, 25000, 0 boost_ctl_cl_pwm_targboosts = array, S16, 496, [8], "kPa", 0.10000, 0, 0, 600, 0 boost_ctl_cl_pwm_targs1 = array, U08, 512, [8x8], "%", 1.000, 0.00000, 0.00, 100, 0 boost_ctl_cl_pwm_targs2 = array, U08, 576, [8x8], "%", 1.000, 0.00000, 0.00, 100, 0 boost_ctl_cl_pwm_targs3 = array, U08, 640, [8x8], "%", 1.000, 0.00000, 0.00, 100, 0 boost_ctl_cl_pwm_targs4 = array, U08, 704, [8x8], "%", 1.000, 0.00000, 0.00, 100, 0 boost_ctl_cl_pwm_targs5 = array, U08, 768, [8x8], "%", 1.000, 0.00000, 0.00, 100, 0 boost_ctl_cl_pwm_targs6 = array, U08, 832, [8x8], "%", 1.000, 0.00000, 0.00, 100, 0 [ConstantsExtensions] requiresPowerCycle = nCylinders requiresPowerCycle = ICIgnCapture requiresPowerCycle = engineType requiresPowerCycle = divider requiresPowerCycle = spkout_hi_lo2 ; requiresPowerCycle = triggerOffset requiresPowerCycle = triggerTeeth requiresPowerCycle = No_Miss_Teeth requiresPowerCycle = IdleCtl requiresPowerCycle = IdleCtl_alg requiresPowerCycle = IACcurlim requiresPowerCycle = IAC_tinitial_step requiresPowerCycle = hardware_spk requiresPowerCycle = hardware_cam requiresPowerCycle = hardware_fuel requiresPowerCycle = baroCorr requiresPowerCycle = egoType ; requiresPowerCycle = alternate requiresPowerCycle = twoStroke requiresPowerCycle = nInjectors requiresPowerCycle = OddFireang requiresPowerCycle = algorithm requiresPowerCycle = algorithm2 requiresPowerCycle = IgnAlgorithm requiresPowerCycle = IgnAlgorithm2 requiresPowerCycle = AfrAlgorithm requiresPowerCycle = opt142_rtc requiresPowerCycle = mycan_id requiresPowerCycle = flexFuel requiresPowerCycle = flexport requiresPowerCycle = dwellmode requiresPowerCycle = knk_option requiresPowerCycle = knkDirection requiresPowerCycle = knkpull requiresPowerCycle = knk_option_an requiresPowerCycle = knkport requiresPowerCycle = spk_conf2_gmtfi requiresPowerCycle = spk_conf2_oddodd requiresPowerCycle = spk_conf2_dli requiresPowerCycle = spk_config_campol requiresPowerCycle = spk_config_camcrank requiresPowerCycle = spk_config_trig2 requiresPowerCycle = spk_config_trig2l requiresPowerCycle = spk_config_resetcam requiresPowerCycle = spk_mode0 requiresPowerCycle = spk_mode3 requiresPowerCycle = spk_mode3_hirespol requiresPowerCycle = rtbaroport requiresPowerCycle = map2port requiresPowerCycle = ego2port requiresPowerCycle = mapport requiresPowerCycle = mapport_t requiresPowerCycle = mapport_f requiresPowerCycle = knkport_an requiresPowerCycle = shiftlight_opt_pins requiresPowerCycle = feature4_0igntrig requiresPowerCycle = tsw_pin_f requiresPowerCycle = tsw_pin_s requiresPowerCycle = tsw_pin_rf requiresPowerCycle = tsw_pin_ob requiresPowerCycle = tsw_pin_afr requiresPowerCycle = tsw_pin_stoich requiresPowerCycle = f5_0_tsf requiresPowerCycle = f5_0_tsf_opt requiresPowerCycle = f5_0_tss requiresPowerCycle = f5_0_tss_opt requiresPowerCycle = tacho_opt3f requiresPowerCycle = tacho_optvar requiresPowerCycle = launch_opt_on requiresPowerCycle = launch_opt_pins requiresPowerCycle = launch_opt_vss requiresPowerCycle = N2Oopt_2 requiresPowerCycle = N2Oopt_3 requiresPowerCycle = N2Oopt_pins requiresPowerCycle = n2o_enable2_pin requiresPowerCycle = pwmidle_freq_scale requiresPowerCycle = boost_ctl_pins_pwm requiresPowerCycle = boost_ctl_pins requiresPowerCycle = boost_ctl_pwm_scale requiresPowerCycle = boost_ctl_pwm requiresPowerCycle = boost_ctl_settings_invert_new requiresPowerCycle = boost_ctl_settings_dome requiresPowerCycle = afrload requiresPowerCycle = eaeload requiresPowerCycle = log_style_led requiresPowerCycle = log_style2_but requiresPowerCycle = log_style_on2 requiresPowerCycle = log_style3_adc requiresPowerCycle = sequential requiresPowerCycle = boost_feats_tsw requiresPowerCycle = launch_3step_in requiresPowerCycle = maxafr_opt1_led requiresPowerCycle = vss1_pos requiresPowerCycle = vss2_pos requiresPowerCycle = launch_var_on requiresPowerCycle = reluctorteeth1 requiresPowerCycle = reluctorteeth2 requiresPowerCycle = vss_opt1 requiresPowerCycle = vss_opt2 requiresPowerCycle = vss1_an requiresPowerCycle = vss2_an requiresPowerCycle = vss1_can_scale requiresPowerCycle = vss2_can_scale requiresPowerCycle = ss_opt1 requiresPowerCycle = ss_opt2 requiresPowerCycle = wheeldia1 requiresPowerCycle = wheeldia2 requiresPowerCycle = fdratio1 requiresPowerCycle = vss1_can_id requiresPowerCycle = vss1_can_offset requiresPowerCycle = vss2_can_offset requiresPowerCycle = vss3_can_offset requiresPowerCycle = vss4_can_offset requiresPowerCycle = vss_opt0_1 requiresPowerCycle = vss_opt0_2 requiresPowerCycle = vss_opt0_3 requiresPowerCycle = vss_opt0_4 requiresPowerCycle = ss_opt1_spd requiresPowerCycle = ss1_pwmseq requiresPowerCycle = ss2_pwmseq requiresPowerCycle = gear_can_offset requiresPowerCycle = n2o1n_pins requiresPowerCycle = n2o1f_pins requiresPowerCycle = n2o2n_pins requiresPowerCycle = n2o2f_pins requiresPowerCycle = water_freq_on requiresPowerCycle = water_pins_pump requiresPowerCycle = water_pins_valve requiresPowerCycle = water_pins_in_shut requiresPowerCycle = egt_num requiresPowerCycle = accXport requiresPowerCycle = accYport requiresPowerCycle = accZport requiresPowerCycle = egt1port requiresPowerCycle = egt2port requiresPowerCycle = egt3port requiresPowerCycle = egt4port requiresPowerCycle = egt5port requiresPowerCycle = egt6port requiresPowerCycle = egt7port requiresPowerCycle = egt8port requiresPowerCycle = egt9port requiresPowerCycle = egt10port requiresPowerCycle = egt11port requiresPowerCycle = egt12port ; requiresPowerCycle = egt13port ; requiresPowerCycle = egt14port ; requiresPowerCycle = egt15port ; requiresPowerCycle = egt16port requiresPowerCycle = MAFOption requiresPowerCycle = MAFOption_t requiresPowerCycle = MAFOption_f requiresPowerCycle = vssout_opt requiresPowerCycle = vssout_optunits requiresPowerCycle = gear_method requiresPowerCycle = gear_port_an requiresPowerCycle = ac_idleup_io_in requiresPowerCycle = ac_idleup_settings requiresPowerCycle = ac_idleup_io_out requiresPowerCycle = fanctl_settings_on requiresPowerCycle = fanctl_settings_pin requiresPowerCycle = fanctl1_mode requiresPowerCycle = fanctl1_inv requiresPowerCycle = fanctl1_freq requiresPowerCycle = staged_extended_opts_use_v3 requiresPowerCycle = staged_extended_opts_simult requiresPowerCycle = boost_ctl_settings_on2 requiresPowerCycle = boost_ctl_settings_cl2 requiresPowerCycle = boost_ctl_pins_pwm2 requiresPowerCycle = boost_ctl_pins2 requiresPowerCycle = boost_ctl_sensor2 requiresPowerCycle = egoport1 requiresPowerCycle = egoport2 requiresPowerCycle = egoport3 requiresPowerCycle = egoport4 requiresPowerCycle = egoport5 requiresPowerCycle = egoport6 requiresPowerCycle = egoport7 requiresPowerCycle = egoport8 requiresPowerCycle = egoport9 requiresPowerCycle = egoport10 requiresPowerCycle = egoport11 requiresPowerCycle = egoport12 ; requiresPowerCycle = egoport13 ; requiresPowerCycle = egoport14 ; requiresPowerCycle = egoport15 ; requiresPowerCycle = egoport16 requiresPowerCycle = tc_opt_on requiresPowerCycle = tc_led_out requiresPowerCycle = tc_opt_method requiresPowerCycle = tc_enin requiresPowerCycle = fueltemp1 requiresPowerCycle = sensor01_source requiresPowerCycle = sensor02_source requiresPowerCycle = sensor03_source requiresPowerCycle = sensor04_source requiresPowerCycle = sensor05_source requiresPowerCycle = sensor06_source requiresPowerCycle = sensor07_source requiresPowerCycle = sensor08_source requiresPowerCycle = sensor09_source requiresPowerCycle = sensor10_source requiresPowerCycle = sensor11_source requiresPowerCycle = sensor12_source requiresPowerCycle = sensor13_source requiresPowerCycle = sensor14_source requiresPowerCycle = sensor15_source requiresPowerCycle = sensor16_source requiresPowerCycle = shift_cut_on requiresPowerCycle = shift_cut_gear requiresPowerCycle = shift_cut_in requiresPowerCycle = shift_cut_out requiresPowerCycle = shift_cut_fuel requiresPowerCycle = pwm_opt_on_a requiresPowerCycle = pwm_opt_on_b requiresPowerCycle = pwm_opt_on_c requiresPowerCycle = pwm_opt_on_d requiresPowerCycle = pwm_opt_on_e requiresPowerCycle = pwm_opt_on_f requiresPowerCycle = pwm_opt2_a requiresPowerCycle = pwm_opt2_b requiresPowerCycle = pwm_opt2_c requiresPowerCycle = pwm_opt2_d requiresPowerCycle = pwm_opt2_e requiresPowerCycle = pwm_opt2_f requiresPowerCycle = dualfuel_sw_on requiresPowerCycle = dualfuel_pin requiresPowerCycle = dualfuel_opt_mode requiresPowerCycle = dualfuel_opt_out requiresPowerCycle = dualfuel_temp_sens requiresPowerCycle = dualfuel_press_sens requiresPowerCycle = dualfuel_sw_fuel requiresPowerCycle = dualfuel_sw_spk requiresPowerCycle = dualfuel_sw_afr requiresPowerCycle = dualfuel_sw_rf requiresPowerCycle = dualfuel_sw_stoich requiresPowerCycle = dualfuel_sw_wue requiresPowerCycle = dualfuel_sw_ase requiresPowerCycle = dualfuel_sw2_prime requiresPowerCycle = dualfuel_sw2_crank requiresPowerCycle = dualfuel_sw2_injp requiresPowerCycle = dualfuel_sw2_smpw requiresPowerCycle = dualfuel_sw2_ob requiresPowerCycle = dualfuel_sw2_boosw requiresPowerCycle = dualfuel_sw2_ae requiresPowerCycle = als_opt_pwmout requiresPowerCycle = als_in_pin requiresPowerCycle = als_out_pin requiresPowerCycle = als_pwm_opt_freq requiresPowerCycle = als_pwm_opt2 requiresPowerCycle = vvt_opt1_on requiresPowerCycle = vvt_out1 requiresPowerCycle = vvt_out2 requiresPowerCycle = vvt_out3 requiresPowerCycle = vvt_out4 requiresPowerCycle = vvt_opt2_cam1pol requiresPowerCycle = vvt_opt2_cam2pol requiresPowerCycle = vvt_opt2_cam3pol requiresPowerCycle = vvt_opt2_cam4pol requiresPowerCycle = vvt_opt3_cam2 requiresPowerCycle = vvt_opt3_cam3 requiresPowerCycle = vvt_opt3_cam4 requiresPowerCycle = tclu_brakepin requiresPowerCycle = tclu_enablepin requiresPowerCycle = tclu_outpin requiresPowerCycle = vvt_opt4_decode requiresPowerCycle = vvt_opt6_freq requiresPowerCycle = vvt_softout1 requiresPowerCycle = vvt_softout2 requiresPowerCycle = vvt_softout3 requiresPowerCycle = vvt_softout4 requiresPowerCycle = knk_pin_out requiresPowerCycle = ltt_opt_on requiresPowerCycle = ltt_but_in requiresPowerCycle = ltt_led_out requiresPowerCycle = timedout1_in requiresPowerCycle = timedout1_out requiresPowerCycle = tstop_out requiresPowerCycle = NoiseFilterOpts requiresPowerCycle = map_phase_thresh requiresPowerCycle = staged_extended_opts_use_v3 requiresPowerCycle = staged_extended_opts_simult requiresPowerCycle = staged_extended_opts_pw1off requiresPowerCycle = staged_first_param requiresPowerCycle = staged_second_param requiresPowerCycle = staged_transition_on requiresPowerCycle = staged_pw1_0 requiresPowerCycle = staged_out1 requiresPowerCycle = fp_opt_mode requiresPowerCycle = fp_opt_inv requiresPowerCycle = fp_out1 requiresPowerCycle = alternator_opt_mode requiresPowerCycle = alternator_controlout requiresPowerCycle = alternator_control_inv requiresPowerCycle = alternator_freq requiresPowerCycle = alternator_lampout requiresPowerCycle = alternator_freq_monin requiresPowerCycle = alternator_freq_moninv requiresPowerCycle = alternator_freq_currin requiresPowerCycle = alternator_freq_currinv requiresPowerCycle = oilpress_in requiresPowerCycle = oilpress_out requiresPowerCycle = cel_port requiresPowerCycle = generic_pid_flags_a_on requiresPowerCycle = generic_pid_flags_b_on requiresPowerCycle = generic_pid_flags_a_direction requiresPowerCycle = generic_pid_flags_b_direction requiresPowerCycle = generic_pid_pwm_opts_freq_a requiresPowerCycle = generic_pid_pwm_opts_freq_b requiresPowerCycle = generic_pid_pwm_outs_a requiresPowerCycle = generic_pid_pwm_outs_b requiresPowerCycle = can_rcv_opt_on requiresPowerCycle = iobox_opta1 requiresPowerCycle = iobox_opta2 requiresPowerCycle = iobox_opta3 requiresPowerCycle = iobox_opta4 requiresPowerCycle = iobox_optb1vss requiresPowerCycle = iobox_optb2vss requiresPowerCycle = iobox_optb3vss requiresPowerCycle = iobox_optb4vss requiresPowerCycle = dashbcast_opta1 requiresPowerCycle = pitlim_opt_on requiresPowerCycle = pitlim_enin requiresPowerCycle = boost_dome_outputs_fill1 requiresPowerCycle = boost_dome_outputs_empty1 requiresPowerCycle = boost_dome_settings1_mode ; requiresPowerCycle = boost_dome_settings1_on ; requiresPowerCycle = boost_dome_settings2_on ; requiresPowerCycle = boost_dome_outputs_fill2 ; requiresPowerCycle = boost_dome_outputs_empty2 ; requirePowerCycle = boost_dome_settings2_mode requiresPowerCycle = can_rcv_id1 requiresPowerCycle = can_rcv_id2 requiresPowerCycle = can_rcv_id3 requiresPowerCycle = can_rcv_id4 requiresPowerCycle = can_rcv_id5 requiresPowerCycle = can_rcv_id6 requiresPowerCycle = can_rcv_id7 requiresPowerCycle = can_rcv_id8 requiresPowerCycle = can_rcv_id9 requiresPowerCycle = can_rcv_id10 requiresPowerCycle = can_rcv_id11 requiresPowerCycle = can_rcv_id12 requiresPowerCycle = can_rcv_id13 requiresPowerCycle = can_rcv_id14 requiresPowerCycle = can_rcv_id15 requiresPowerCycle = can_rcv_id16 requiresPowerCycle = can_poll2_ego2 requiresPowerCycle = can_enable_alcan requiresPowerCycle = can_enable_baud requiresPowerCycle = canrx1_opt_accel requiresPowerCycle = egt_conf_input defaultValue = tsCanId, "CAN ID 0" defaultValue = rpmhigh, 9000 defaultValue = rpmwarn, 3000 defaultValue = rpmdang, 5000 defaultValue = loadhigh, 400 defaultValue = wue_lpg, "No" defaultValue = clt_exp, 0 defaultValue = sensor01Alias, "Sensor 01" defaultValue = sensor02Alias, "Sensor 02" defaultValue = sensor03Alias, "Sensor 03" defaultValue = sensor04Alias, "Sensor 04" defaultValue = sensor05Alias, "Sensor 05" defaultValue = sensor06Alias, "Sensor 06" defaultValue = sensor07Alias, "Sensor 07" defaultValue = sensor08Alias, "Sensor 08" defaultValue = sensor09Alias, "Sensor 09" defaultValue = sensor10Alias, "Sensor 10" defaultValue = sensor11Alias, "Sensor 11" defaultValue = sensor12Alias, "Sensor 12" defaultValue = sensor13Alias, "Sensor 13" defaultValue = sensor14Alias, "Sensor 14" defaultValue = sensor15Alias, "Sensor 15" defaultValue = sensor16Alias, "Sensor 16" defaultValue = prefSpeedUnits, 0 defaultValue = prefLengthUnits, 0 defaultValue = scatterRuntimeEnabled, 1 [SettingContextHelp] ; constantName = "Help Text" ; tool tips tooltips ;Ensure all settings are defined as some MS2/BG words shipped with TS are not applicable. nCylinders = "Количество цилиндров или роторов в вашем двигателе.\nТипичные значения: 1 — мотоциклы/одноцилиндровые, 2 — V-twin, 3 — трёхцилиндровые, 4 — самый распространённый вариант, 6 — V6/I6, 8 — V8.\nДля роторных двигателей (Wankel) укажите количество роторов (обычно 2 для 13B или 3 для 20B)." engineType = "Большинство двигателей имеют равномерный порядок вспышек (Even Fire). Неравномерный порядок (Odd Fire) встречается у V-twin (Harley-Davidson, Ducati), некоторых V4, Yamaha Vmax, некоторых V6 (например, Buick), V10 (Dodge Viper).\nЕсли у вас стандартный рядный двигатель или обычный V6/V8 — выбирайте Even Fire." reqFuel = "Глобальная топливная константа. Используйте калькулятор ReqFuel для расчёта. (Технически связана с длительностью импульса при 100% VE.)\n\nСначала заполните все настройки ниже, затем нажмите кнопку [Required Fuel].\n\nЭто базовое значение, от которого рассчитываются все топливные импульсы. Неправильное значение приведёт к слишком богатой или бедной смеси по всей карте. Обязательно укажите правильный объём двигателя, количество цилиндров и размер форсунок перед расчётом." tempTable = "" map0 = "Показание MAP датчика при 0В. Обычно выбирается из списка 'стандартные MAP датчики'.\nДля большинства 1-бар датчиков (GM, Bosch) это значение равно 10 кПа. Для 2-бар и 3-бар датчиков значения будут другими. Убедитесь, что калибровка соответствует вашему конкретному датчику." mapmax = "Показание MAP датчика при 5В. Обычно выбирается из списка 'стандартные MAP датчики'.\nДля 1-бар датчика (атмосферные двигатели) это обычно 105 кПа. Для турбированных двигателей используйте 2-бар (205 кПа) или 3-бар (305 кПа) датчик в зависимости от давления наддува." clt0 = "" cltmult = "" mat0 = "" matmult = "" tpsMin = "При выключенном двигателе установите дроссельную заслонку в минимальное положение (нога снята с педали), затем нажмите 'get current'.\nВажно: выполняйте эту калибровку при выключенном двигателе. Значение TPS должно показывать 0% при полностью закрытой заслонке." tpsMax = "При выключенном двигателе установите дроссельную заслонку в максимальное положение (педаль в пол), затем нажмите 'get current'.\nЗначение TPS должно показывать 100% при полностью открытой заслонке (WOT). Если значения TPS инвертированы (100% на холостом ходу), поменяйте min и max местами." batt0 = "Может использоваться для коррекции показаний напряжения бортовой сети.\nОбычно не требует изменения. Если показания напряжения в TunerStudio не совпадают с мультиметром, откорректируйте это значение." battmax = "Может использоваться для коррекции показаний напряжения бортовой сети.\nОбычно не требует изменения. Сравните показания с мультиметром при работающем двигателе (13.5–14.5В — норма для исправного генератора)." ego0 = "" egomult = "" baro0 = "Показание датчика барометрического давления при 0В. Обычно выбирается из списка 'стандартные датчики Baro'.\nБарометрический датчик необходим для коррекции топлива при изменении высоты над уровнем моря." baromax = "Показание датчика барометрического давления при 5В. Обычно выбирается из списка 'стандартные датчики Baro'.\nНа уровне моря атмосферное давление составляет примерно 101.3 кПа, на высоте 1000м — около 90 кПа." bcor0 = "Барометрическая коррекция топлива при полном вакууме.\nДля новых установок установите оба значения (это и rate) в ноль и настройте кривую барометрической коррекции для компенсации высоты.\nИмпортированные настройки из старых версий прошивки используют vacuum=147, rate=-47 — настройте кривую барометрической коррекции для компенсации высоты.\nТакже прочитайте подсказку к кривой барометрической коррекции." bcormult = "Скорость изменения коррекции.\nДля новых установок установите оба значения в ноль и настройте кривую барометрической коррекции для компенсации высоты.\nИмпортированные настройки из старых версий прошивки используют vacuum=147, rate=-47.\nТакже прочитайте подсказку к кривой барометрической коррекции." ; crankTolerance = "Percentage tolerance for next input pulse while cranking." ; asTolerance = "Percentage tolerance for next input pulse during after start period." ; pulseTolerance = "Percentage tolerance for next input pulse while running." IdleCtl = "Выбор метода управления холостым ходом.\nNone = нет клапана холостого хода.\nOn/Off valve = простой клапан открыт/закрыт (встречается редко).\nPWM valve (2,3 wire) = ШИМ-клапан, распространён у Ford и Bosch.\nStepper (4,6 wire) = шаговый мотор, распространён у GM, Subaru, Toyota.\nDBW = электронный дроссель, отдельный клапан ХХ не нужен.\n\nВыбирайте тип в соответствии с установленным на вашем двигателе клапаном. Шаговые моторы обеспечивают плавное управление, но требуют больше настроек." IdleCtl_alg = "Open-Loop (разомкнутый контур) — управляет клапаном только по температуре ОЖ. Подходит для простых установок.\nClosed-Loop (замкнутый контур) — регулирует положение клапана для достижения целевых RPM. Обеспечивает стабильный холостой ход при включении нагрузок (кондиционер, фары, ГУР).\n\nРекомендуется начинать с Open-Loop и переходить на Closed-Loop после базовой настройки." IACtstep = "Время между шагами шагового мотора (в микросекундах).\nУвеличьте это значение, если мотор работает прерывисто или пропускает шаги.\nТипичные значения: 3000–7000 мкс. Более высокие значения = более медленное, но надёжное перемещение." IAC_tinitial_step = "Длительность первого шага мотора. Обычно устанавливается немного больше стандартного для повышения надёжности старта движения.\nПервый шаг требует больше энергии, чтобы сдвинуть ротор из состояния покоя." IACminstep = "Минимальное количество шагов за один ход.\nЕсли установлено 1, мотор будет двигаться по одному шагу за раз. Увеличьте, если требуется более быстрая реакция клапана." IACStart = "При запуске шаговый мотор выполнит указанное количество шагов для возврата в исходное (домашнее) положение. Установите значение больше, чем полный ход клапана.\n(Ранее этот параметр назывался 'Start Value')\n\nНапример, если полный ход клапана составляет 200 шагов, установите 210–250 для гарантированного возврата в крайнее положение." IdleCtl_home = "Определяет, в какое положение возвращается клапан при инициализации — полностью закрытое или полностью открытое.\nBottom (closed) — для большинства установок. Top (open) — если клапан имеет обратную логику." IACcurlim = "Управление током шагового мотора между шагами.\nMoving only: ток отключается между шагами — мотор остаётся холоднее, но может быть ненадёжным.\nHold current: применяется удерживающий ток между шагами — хороший компромисс.\nAlways on: полный ток всегда подаётся — максимальный нагрев, но максимальная надёжность.\n\nРекомендация: начните с 'Hold current'. Используйте 'Always on' только если мотор пропускает шаги." iacfullopen = "Количество шагов от закрытого до полностью открытого положения. Значение Homing steps должно быть больше этого числа.\nТипичные значения: 150–300 шагов в зависимости от типа клапана." IdleHyst = "Величина изменения температуры ОЖ, необходимая для изменения положения клапана ХХ.\nПредотвращает частые мелкие корректировки. Типичное значение: 0.5–2°C." IACcrankxt = "После запуска двигателя клапан ХХ перемещается из положения 'прокрутка' в положение 'работа'. Этот параметр определяет время перехода (в секундах).\nТипичные значения: 30–120 секунд. Слишком быстрый переход может вызвать глохнание холодного двигателя." pwmidlecranktaper = "После запуска двигателя клапан ХХ перемещается из положения 'прокрутка' в положение 'работа'. Этот параметр определяет время перехода.\nВключите начальные значения (Initial Values) для лучших результатов. Это обеспечит плавный переход от повышенных оборотов прогрева к рабочим оборотам ХХ." pwmidleset_inv = "Большинство клапанов работают по принципу 0% = закрыт. Некоторые клапаны имеют обратную полярность (0% = открыт).\nЕсли клапан работает в противоположном направлении от ожидаемого, включите инверсию." pwmidle_freq_pin = "Выход для клапана холостого хода.\nВыберите физический выход ЭБУ, к которому подключён ваш ШИМ-клапан ХХ." pwmidle_freq_pin3 = "Второй выход для клапана ХХ в 3-проводном режиме.\nТрёхпроводные клапаны (например, Bosch) используют два ШИМ-выхода для управления направлением движения штока." pwmidle_freq_scale = "Частота ШИМ-сигнала. Зависит от типа клапана.\nFord/Bosch клапаны обычно работают на 50–100 Гц.\nМиата (Mazda MX-5) — около 300 Гц.\nToyota — 200–300 Гц.\n\nНеправильная частота приведёт к жужжанию клапана или нестабильной работе." pwmidle_freq_koeo = "Определяет, работает ли клапан ХХ при включённом зажигании и выключенном двигателе (Key-On-Engine-Off).\nВключение может помочь при запуске, обеспечивая дополнительный воздух в первые обороты двигателя.\nРекомендуется включить, если двигатель плохо запускается из-за недостатка воздуха." fastIdleT = "Открывать клапан ХХ дополнительно при температуре ОЖ ниже указанной для быстрого прогрева (fast idle).\nТипичное значение: 60–70°C. Ниже этой температуры обороты ХХ будут повышенными для стабильной работы холодного двигателя." divider = "" alternate = "Режим работы форсунок в не-секвенциальных режимах.\nAlternating (попеременный) = форсунки работают поочерёдно — стандартный выбор.\nSimultaneous (одновременный) = все форсунки срабатывают одновременно.\n\nДля секвенциального впрыска установите: 2 Squirts/Alternating или 1 Squirt/Simultaneous.\nПопеременный режим обычно предпочтительнее для лучшего распределения топлива." twoStroke = "Тип двигателя: четырёхтактный (большинство автомобильных), двухтактный или роторный (Wankel).\nЧетырёхтактный — стандартный выбор для 99% автомобилей.\nДвухтактный — мотоциклы, снегоходы, лодочные моторы.\nРоторный — Mazda RX-7, RX-8." ; injType = "Not used presently." nInjectors = "Количество основных (первичных) форсунок, без учёта вторичных (staged) форсунок, если они установлены.\nОбычно равно количеству цилиндров. Для систем с одной форсункой на дроссель (TBI) укажите 1 или 2." rpmLF = "Коэффициент сглаживания сигнала RPM. 100% = без сглаживания (мгновенное значение). 10% = сильное сглаживание.\nСглаживание помогает убрать скачки показаний, но добавляет задержку. Типичное значение: 80–100% для большинства установок." mapLF = "Коэффициент сглаживания сигнала MAP. 100% = без сглаживания. 10% = сильное сглаживание.\nДля турбодвигателей с быстрыми изменениями давления используйте меньшее сглаживание (80–100%). Для атмосферных можно использовать 50–80%." mafLF = "Коэффициент сглаживания сигнала MAF. 100% = без сглаживания. 10% = сильное сглаживание.\nMAF обычно требует минимального сглаживания для корректной работы. Рекомендуется 80–100%." tpsLF = "Коэффициент сглаживания сигнала TPS. 100% = без сглаживания. 10% = сильное сглаживание.\nTPS обычно не требует сильного сглаживания. 80–100% для большинства случаев. Слишком сильное сглаживание ухудшит работу ускорительного насоса." egoLF = "Коэффициент сглаживания сигнала лямбда-зонда (EGO). 100% = без сглаживания. 10% = сильное сглаживание.\nДля широкополосного зонда (wideband) используйте 50–80%. Для узкополосного (narrowband) — 30–60%. Слишком малое сглаживание вызовет колебания коррекции." adcLF = "Коэффициент сглаживания ADC (аналого-цифровой преобразователь). 100% = без сглаживания. 10% = сильное сглаживание.\nВлияет на общее сглаживание аналоговых входов." blend4LF = "Коэффициент задержки/сглаживания входного сигнала. 100% = без задержки. 1% = максимальная задержка.\nТипичные полезные значения — около 10. Используется для входов смешивания (blend), где нужна плавность переключения." feature3_tps = "Автоматическая рекалибровка TPS при обнаружении отрицательных значений. Полезно, если нулевое положение TPS плавает.\n(Временная рекалибровка не сохраняется в память.)\n\nРекомендуется включить, если TPS показывает отрицательные значения на холостом ходу, что может вызвать проблемы с ускорительным насосом." feature3_battv = "Позволяет отключить дополнительную фильтрацию напряжения бортовой сети для более быстрой реакции на изменения.\nOff = сильно сглаженные показания (медленная реакция).\nOn = более отзывчивые показания (быстрая реакция).\n\nВключите, если коррекция deadtime форсунок не успевает за изменениями напряжения." baud = "Скорость обмена данными. Должна быть установлена на 115200.\n\nНЕ ИЗМЕНЯЙТЕ БЕЗ ВЕСКОЙ ПРИЧИНЫ.\n\nЕсли вы измените это значение, вы также должны изменить скорость в TunerStudio: Communications -> Settings.\nНеправильная настройка приведёт к потере связи с ЭБУ." baudhigh = "Стандартно = 115200.\n\nОпциональная повышенная скорость для считывания логов с SD-карты.\nДоступные варианты: 115200, 230400, 460800.\nИспользуйте максимальную скорость, которая работает стабильно с вашим оборудованием. Прямой USB-кабель обычно работает лучше всего.\nЕсли возникают ошибки при считывании логов, уменьшите скорость." ; These tips for on/off outputs do not show up in 2.1.13, but added for the future psEnabled = "Включает этот выход для программируемого управления. НЕ включайте выход, который уже используется для другой функции (ХХ, буст, и т.д.).\nДля каждого выхода 'On' означает следующее:\nPM3 - Injection LED D14 = Масса на D14\nPM4 - Accel LED D16 = Масса на D16\nPM5 - Warmup LED D15 = Масса на D15\nPJ0 - IAC2 = 12В на IAC2A\nPJ1 - IAC1 = 12В на IAC1A\nPJ7 - JS11 = 5В\nPP2 - Idle = Масса\nPP3 - Boost = Масса\nPP4 - Nitrous 1 = Масса\nPP5 - Nitrous 2 = Масса\nPP6 - VVT = Масса\nPP7 - Fidle = Масса\nPT1 - V3 Inj 1 = Масса\nPT3 - V3 Inj 2 = Масса\nPT5 - JS10 = 5В\nPK0 - Tacho = Масса\nPA0 - Inj A = Масса\nPA1 - Inj B = Масса\nPA2 - Inj C = Масса\nPA3 - Inj D = Масса\nPA4 - Inj E = Масса\nPA5 - Inj F = Масса\nPA6 - Inj G = Масса\nPA7 - Inj H = Масса\nPB0 - Spk A = 5В\nPB1 - Spk B = 5В\nPB2 - Spk C = 5В\nPB3 - Spk D = 5В\nPB4 - Spk E = 5В\nPB5 - Spk F = 5В\nPB6 - Spk G = 5В\nPB7 - Spk H = 5В" psCondition = "Переменная слева (как в дата-логе) сравнивается с целевым значением, выход срабатывает если:\n> переменная больше целевого значения.\n= переменная точно равна целевому (практически бесполезно).\n< переменная меньше целевого значения.\nAnd — логическое побитовое И с целевым значением.\n\nНапример, можно включить вентилятор при температуре ОЖ > 95°C или активировать реле при RPM > 3000." psConnector = "Включать ли второе условие и логика связи: оба условия 1 И 2 должны быть истинны (AND) или достаточно одного — условие 1 ИЛИ 2 (OR).\nAND — более строгий контроль, OR — более свободный." psInitValue = "Обычно устанавливается в 0, что означает, что выход выключен по умолчанию.\nУстановите 1, если выход должен быть включён при старте и выключаться по условию." psPortValue = "Обычно устанавливается в 1, что означает, что выход включается при срабатывании условия.\nУстановите 0, если нужна инвертированная логика." psOutSize = "" psOutOffset = "" psThreshold = "Целевое значение, с которым сравнивается переменная.\nНапример: 95 для температуры ОЖ в °C, 3000 для RPM, 80 для TPS в процентах." psHysteresis = "Зона нечувствительности (deadband) для предотвращения частого включения/выключения выхода на границе порога.\nНапример, если порог = 95°C и гистерезис = 3°C, выход включится при 95°C и выключится при 92°C." firea = "Порядок зажигания используется для индивидуальных коррекций (trim) и поцилиндровых поправок, чтобы коррекция применялась к правильному номеру цилиндра.\nФорсунки и катушки должны быть подключены в порядке зажигания: InjA = цилиндр 1, InjB = следующий по порядку зажигания цилиндр и т.д.\n\nПример для 4-цилиндрового 1-3-4-2: InjA=1, InjB=3, InjC=4, InjD=2." enginesize = "Объём двигателя в кубических сантиметрах (cc). Заполните до использования калькулятора ReqFuel.\nДля перевода из кубических дюймов (cu.in) в cc умножьте на 16.39.\n\nПримеры: 302 cu.in × 16.39 = 4950 cc, 350 cu.in × 16.39 = 5735 cc.\nДля 2.0L двигателя = 2000 cc, 1.6L = 1600 cc." staged_pri_size = "Размер каждой основной (первичной) форсунки в cc/min.\nТипичный перевод из lbs/hr: умножьте на 10.5.\n\nПримеры: 19 lbs/hr ≈ 200 cc/min, 36 lbs/hr ≈ 380 cc/min, 60 lbs/hr ≈ 630 cc/min.\nРазмер форсунок должен обеспечивать рабочий цикл (duty cycle) не выше 80% при максимальной мощности." sequential = "Off — отключает секвенциальный впрыск, работает в режиме batch fire (попарный).\nSemi-sequential — форсунки работают попарно с распределением по обороту коленвала (требуется датчик коленвала).\nFully-Sequential — каждая форсунка срабатывает индивидуально с распределением по полному циклу двигателя (требуется датчик распредвала для определения фазы на 4-тактных).\n\nСеквенциальный впрыск даёт лучшую экономичность и чистоту выхлопа." sequential_angle_spec = "Определяет, по какой точке импульса впрыска привязывается угол: начало, середина или конец импульса.\nEnd (конец) — наиболее распространённый вариант. Обычно настраивается так, чтобы впрыск завершился непосредственно перед открытием впускного клапана.\nЭто обеспечивает испарение топлива на горячем клапане." sequential_trim_on_off = "Включение поцилиндровых таблиц коррекции (trim). Позволяет настроить каждый цилиндр индивидуально.\nТребуется установка поцилиндровых широкополосных лямбда-зондов (wideband) или датчиков EGT.\nПолезно для турбодвигателей и многоцилиндровых моторов с неравномерным распределением смеси." baroCorr = "Включает/отключает коррекцию топлива по барометрическому давлению (высоте над уровнем моря).\nOff = игнорировать барометр.\nInitial MAP reading = одноразовое считывание MAP при включении зажигания. Не рекомендуется — может дать неверное значение, если быстро включить/выключить зажигание или при работающем двигателе.\nTwo independent sensors = отдельный датчик барометрического давления.\n\nНастоятельно рекомендуется использовать отдельный датчик baro, если автомобиль эксплуатируется в горной местности или на разных высотах." rtbaroport = "Подключение внешнего или внутреннего датчика барометрического давления.\nВыберите аналоговый вход, к которому подключён ваш датчик baro." baro_upper = "Максимально возможное барометрическое давление, которое может наблюдаться. Типично 102 кПа.\nОграничивает ошибочные показания датчика. На уровне моря давление обычно 99–103 кПа." baro_lower = "Минимально возможное барометрическое давление. Типично 68–80 кПа.\nОграничивает ошибочные показания. На высоте 3000м давление около 70 кПа.\nУстановите нижний предел с запасом для вашего региона эксплуатации." baro_default = "Фиксированное значение барометрического давления, используемое при отключённой барометрической коррекции.\nУстановите значение, соответствующее вашему обычному месту эксплуатации. На уровне моря — 101 кПа." mapport_t = "Выбор типа входа MAP датчика: по напряжению (распространённый) или по частоте (редкий).\nOff — отключает вход MAP, например, для чистого Alpha-N или MAF режима.\n\nБольшинство MAP датчиков (GM, Bosch, Honeywell) выдают аналоговый сигнал напряжения 0–5В." mapport = "Подключение внешнего или внутреннего MAP датчика (аналоговый вход).\nОбычно используется встроенный MAP датчик на плате Megasquirt, подключённый вакуумной трубкой к впускному коллектору." mapport_f = "Подключение внешнего или внутреннего частотного MAP датчика.\nЧастотные MAP датчики встречаются редко. Обычно используется аналоговый (voltage) вход." map_freq0 = "Нижняя частота, соответствующая минимальному давлению MAP.\nНастройте согласно спецификации вашего частотного MAP датчика." map_freq1 = "Верхняя частота, соответствующая максимальному давлению MAP.\nНастройте согласно спецификации вашего частотного MAP датчика." map2port = "Подключение второго MAP датчика (при наличии).\nНе путайте с датчиком baro — это второй датчик давления во впускном коллекторе.\nИспользуется обычно только на двигателях с двумя раннерами или пленумами без балансной трубки (например, некоторые V-образные двигатели с раздельным впуском)." tempUnits = "Выбор единиц температуры, отображаемых на опциональном дисплее MegaView.\nFahrenheit или Celsius — выберите удобную для вас систему." algorithm = "Метод расчёта топливоподачи:\nSpeed Density (использует MAP датчик) — самый распространённый, подходит для большинства установок.\nPercent Baro — Speed Density с включённой разницей барометрического давления.\nAlpha-N (использует TPS) — подходит для двигателей с агрессивными распредвалами, ITB.\nMAF (использует MAF) — расходомер воздуха.\nITB — специальный режим для независимых дроссельных заслонок.\n\nДля стандартных двигателей рекомендуется Speed Density. Alpha-N — для гоночных двигателей с нестабильным вакуумом на ХХ." algorithm2 = "Включает вторую модифицирующую или смешанную топливную таблицу (VE2).\n\nТолько для продвинутого использования. Позволяет смешивать два алгоритма, например, Speed Density + Alpha-N." loadCombine = "Выбирает метод модификации или смешивания таблиц.\nMultiply — умножение (VE1 × VE2).\nAdd — сложение.\nBlend — плавное смешивание по параметру." loadMult = "Для стандартного Speed Density следует включить 'Multiply MAP'.\nВ редких случаях можно отключить.\n%baro работает аналогично.\nДля Alpha-N: включённый 'Multiply MAP' даёт 'Hybrid Alpha-N' (гибридный) — отключённый даёт 'Pure Alpha-N' (чистый).\nMAF никогда не использует умножение MAP.\n\nHybrid Alpha-N рекомендуется для уличных автомобилей с ITB — он обеспечивает лучшую работу на частичных нагрузках." loadMult2 = "Аналогично Multiply MAP, но управляет вторичными таблицами VE2 и VE4. Позволяет, например, смешивать Speed Density (с MAP) на VE1 с Pure Alpha-N (без MAP) на VE2.\nЭто продвинутая настройка для особых случаев." loadStoich = "Включение целевого AFR в алгоритм Speed Density делает таблицу VE 'реальной' таблицей объёмной эффективности, а желаемый AFR задаётся в отдельной таблице AFR.\nПри отключении AFR таблица AFR служит только для справки, а таблица 'VE' полностью контролирует топливоподачу.\n\nДля алгоритма MAF эта функция ДОЛЖНА быть включена для учёта целевого AFR в расчёте.\n\nРекомендуется включить для упрощения настройки — так VE таблица отражает реальную эффективность наполнения." loadopts_oldbaro = "Включает старый режим совместимости барометрических расчётов.\nНе рекомендуется для новых установок. Используйте только при переносе настроек со старой прошивки MS2." stoich = "Стехиометрический (химически идеальный) AFR для используемого топлива. Используется только при включённой опции 'incorporate AFR target'.\nБензин: 14.7\nE85: 9.8\nE100 (этанол): 9.0\nМетанол: 6.4\nПропан (LPG): 15.7\n\nПри переходе на альтернативное топливо измените это значение, таблицу AFR и калибровку широкополосного зонда." IgnAlgorithm = "Ось нагрузки (Y) для таблицы опережения зажигания.\nОбычно MAP для Speed Density или TPS для Alpha-N. Должна соответствовать выбранному алгоритму расчёта топлива." IgnAlgorithm2 = "Включает вторую модифицирующую или смешанную таблицу зажигания (Spk2).\n\nТолько для продвинутого использования." loadCombineign = "Выбирает метод модификации или смешивания таблиц зажигания.\nАналогично настройке для топлива." afrload = "Ось нагрузки (Y) для таблицы целевого AFR.\nОбычно должна совпадать с осью нагрузки основной топливной таблицы." eaeload = "Ось нагрузки (Y) для кривых EAE (Enhanced Accel Enrichment — улучшенное обогащение при ускорении)." OvrRunC = "Отсечка топлива при торможении двигателем (overrun fuel cut) — полностью прекращает подачу топлива в режиме принудительного холостого хода (например, при спуске с горки на передаче).\nУбедитесь, что параметры настроены так, чтобы отсечка срабатывала только в реальных условиях торможения двигателем, а не при обычном вождении.\nЭкономит топливо и снижает выбросы." OvrRunC_progcut = "Позволяет последовательно отключать форсунки (в секвенциальном режиме) для более плавного срабатывания отсечки.\nВместо мгновенного отключения всех форсунок, они отключаются по одной, что уменьшает рывки." OvrRunC_progret = "Позволяет последовательно возвращать форсунки для более плавного возобновления подачи топлива.\nНе имеет смысла использовать вместе с опцией accel-event. Обеспечивает плавное возвращение к нормальной работе." OvrRunC_progign = "Позволяет плавно изменять угол опережения зажигания при активации отсечки топлива.\nПлавный переход к углу зажигания во время overrun снижает рывки." OvrRunC_retign = "Позволяет плавно изменять угол опережения зажигания при возврате топлива после отсечки." fc_clt = "Установите порог температуры ОЖ, чтобы предотвратить работу отсечки на холодном двигателе.\nХолодный двигатель может заглохнуть при отсечке. Типичное значение: 60–70°C." fc_delay = "Задержка предотвращает рывковое включение/выключение отсечки при переходных режимах.\nТипичное значение: 0.5–2 секунды. Слишком малая задержка вызовет дёргание при частых отпусканиях газа." fc_ego_delay = "При отсечке лямбда-зонд покажет бедную смесь, и замкнутый контур EGO должен быть отключён до получения корректных показаний.\nУстановите достаточно большое значение, чтобы зонд успел вернуться к достоверным показаниям после возобновления подачи топлива.\nТипичное значение: 5–15 секунд." fc_rpm_upper = "Позволяет отключить отсечку (возобновить подачу топлива) при этих RPM при высокой скорости замедления.\nЗащищает от глохнания при резком торможении двигателем. Типичное значение: 1500–2000 RPM." fc_rpm_lower = "Позволяет отключить отсечку (возобновить подачу топлива) при этих RPM при низкой скорости замедления.\nТипичное значение: 1200–1500 RPM. Должно быть выше оборотов холостого хода." fc_transition_time = "После истечения основного таймера задержки отсечки, этот параметр задаёт время перехода от нормального опережения зажигания к опережению во время overrun. Таймер также используется для прогрессивной отсечки топлива.\nОбычно устанавливается позднее зажигание для overrun с плавным переходом." fc_trans_time_ret = "Время перехода от режима overrun к нормальным условиям. Используется совместно с прогрессивным возвратом искры и топлива.\nЕсли дроссель открывается выше порога, топливо и зажигание немедленно возвращаются к норме, отменяя этот таймер." fc_ae_time = "Длительность дополнительного обогащения после окончания отсечки, чтобы избежать провала (lean spike).\nТипичное значение: 0.5–2 секунды. Помогает плавно перейти от отсечки к нормальной работе." fc_timing = "Угол опережения зажигания во время overrun. Обычно устанавливается малое значение или ATDC (после ВМТ).\nТипичное значение: 0–5° BTDC или даже отрицательное значение. Позднее зажигание снижает торможение двигателем и шум выхлопа." fc_ae_pct = "Добавочный процент топлива после окончания отсечки, чтобы избежать бедного провала.\nТипичное значение: 10–30%. Подберите так, чтобы не было рывка при возобновлении подачи топлива." RevLimOption_retard = "Опции ограничения оборотов с помощью позднего зажигания.\nOff = ограничение зажиганием не используется.\nProgressive Retard = опережение зажигания плавно уменьшается выше заданных RPM.\nFixed angle = выше заданных RPM опережение мгновенно переключается на указанный угол.\n\nProgressive Retard — более плавный метод, рекомендуется для уличных автомобилей." RevLimMaxRtd = "Максимальное значение позднения зажигания при ограничении оборотов.\nТипичное значение: 10–20°. Слишком большое значение может вызвать перегрев выпускного тракта." RevLimRtdAng = "Значение угла зажигания, используемое в режиме Fixed angle.\nОбычно устанавливается 0° или отрицательное значение (ATDC)." RevLimOption_spkcut = "Включает ограничение оборотов отключением искры.\nВнимание! Может вызвать повреждение катализатора и создаёт громкие хлопки.\nНе работает с EDIS, TFI или GMDIS.\n\nОтключение искры подаёт несгоревшую смесь в выхлоп — используйте с осторожностью на автомобилях с катализатором." RevLimNormal2 = "Устанавливает максимальные RPM для отсечки.\nВы ДОЛЖНЫ также выбрать тип ограничителя ниже.\n\nСм. страницу 'Gauge and Settings Limits' для изменения максимально допустимого числа RPM.\nУстановите значение с запасом ниже красной зоны тахометра вашего двигателя." RevLimNormal2_hyst = "Задаёт зону нечувствительности (deadband) по RPM. Мягкие ограничители начинают работать на указанное количество RPM ниже жёсткого лимита. При полной отсечке обороты должны упасть на это значение перед возобновлением подачи.\nРекомендуется несколько сотен RPM (например, 200–400)." RevLimCLTbased = "Включает опциональный ограничитель оборотов по температуре ОЖ, позволяя снижать лимит RPM на холодном двигателе.\nКривая задаёт жёсткий лимит оборотов при выбранных температурах.\nПолезно для защиты двигателя при прогреве." TpsBypassCLTRevlim = "Выше этого TPS% кривая температурного ограничения игнорируется и используется стандартный жёсткий лимит.\nДолжно быть установлено высокое значение (например, 90–95%), чтобы только в экстренной ситуации при полном газе на холодном двигателе можно было превысить температурный лимит.\nУстановите больше 100%, чтобы температурный лимит действовал всегда." RevLimOption_fuelcut = "Включение ограничения оборотов отсечкой топлива.\nНаиболее безопасный метод ограничения для катализатора по сравнению с отсечкой искры." RevLimOption_fuelprog = "Включает прогрессивную безвращательную отсечку топлива — отключает цилиндры по мере роста оборотов между нижним и жёстким лимитом.\nНЕ ДОЛЖНО использоваться со staged или TBI впрыском.\nОбеспечивает плавное ограничение оборотов." tacho_opt80 = "Включает выход тахометра.\nНеобходим для подключения штатного тахометра автомобиля к Megasquirt." tacho_opt3f = "Выбирает выходной пин для сигнала тахометра.\nОбычно используется PK0 (Tacho)." tacho_opt40 = "Normal — выходной импульс генерируется для каждого события цилиндра (4-цилиндровый = 4 импульса за цикл).\nHalf speed — выход работает на половинной скорости. Позволяет использовать 4-цилиндровый тахометр на 8-цилиндровом двигателе." tacho_optvar = "Fixed = фиксированное масштабирование тахометра (полная или половинная скорость).\nVariable = полностью настраиваемый выход тахометра.\nТипичные настройки: 'Fixed' и 'Normal'.\nVariable полезен при использовании тахометра от другого двигателя." tacho_scale = "Процентное масштабирование выхода тахометра. 100% = истинный выход.\nУвеличьте или уменьшите для компенсации неточностей вашего тахометра.\nНапример, если тахометр показывает на 10% меньше, установите 110%." fanctl_settings_on = "Включает управление вентилятором охлаждения.\nПозволяет Megasquirt автоматически управлять электрическим вентилятором радиатора по температуре ОЖ." fanctl_settings_idleup = "Должно ли включение вентилятора автоматически повышать обороты ХХ.\nВключение вентилятора создаёт нагрузку на двигатель — повышение оборотов предотвращает глохнание, особенно на малообъёмных двигателях." fanctl_settings_pin = "Выбирает выходной пин для реле вентилятора.\nПодключите через реле — не подключайте вентилятор напрямую к выходу ЭБУ!" fanctl_idleup_delay = "Задержка между повышением оборотов ХХ и включением вентилятора (в секундах).\nПозволяет двигателю стабилизироваться на повышенных оборотах перед включением нагрузки." fanctl_idleup_adder_duty = "Добавочный ШИМ-цикл (duty cycle) для открытия клапана ХХ при включении вентилятора (Open-Loop режим).\nТипичное значение: 5–15%." fanctl_idleup_adder_steps = "Дополнительные шаги шагового мотора ХХ для компенсации нагрузки от вентилятора.\nТипичное значение: 10–30 шагов в зависимости от двигателя и вентилятора." fan_idleup_cl_targetadder = "Добавочные целевые RPM при включении вентилятора (Closed-Loop режим).\nТипичное значение: 50–150 RPM. Повышает целевые обороты ХХ для компенсации нагрузки." fanctl_ontemp = "Включить вентилятор при температуре ОЖ выше указанной.\nТипичное значение: 90–95°C. Для термостата на 82°C — вентилятор на 90°C." fanctl_offtemp = "Выключить вентилятор при температуре ОЖ ниже указанной (должно быть ниже температуры включения).\nТипичное значение: 85–88°C. Разница с температурой включения (гистерезис) предотвращает частое включение/выключение."on" temperature)" fanctl1_temp_full = "Вентилятор работает на полной скорости при температуре ОЖ равной или выше указанной.\nИспользуется в режиме PWM variable. Между температурой включения и этим значением скорость вентилятора плавно нарастает." fanctl_opt2_engineoff = "Позволяет вентилятору работать при включённом зажигании и выключенном двигателе.\nПолезно для дополнительного охлаждения после выключения двигателя (например, после стояния в пробке)." fan_ctl_settings_acfan = "Автоматическое включение вентилятора для охлаждения конденсатора кондиционера.\nЕсли используется A/C, рекомендуется включить для предотвращения перегрева при работе кондиционера на ХХ." fan_idleup_tps_offpoint = "Отключить вентилятор при TPS выше указанного процента.\nСнижает нагрузку на двигатель, когда требуется максимальная мощность. Типичное значение: 60–80%.\nПри движении на большой дроссельной заслонке набегающий поток воздуха обычно достаточен для охлаждения." fan_idleup_tps_hyst = "Зона нечувствительности TPS для управления вентилятором.\nПредотвращает частое включение/выключение вентилятора при колебаниях TPS вокруг порога." fan_idleup_vss_offpoint = "Отключить вентилятор при скорости автомобиля выше указанной.\nНа высоких скоростях набегающий поток воздуха через радиатор обычно достаточен для охлаждения. Типичное значение: 60–80 км/ч." fan_idleup_vss_hyst = "Зона нечувствительности датчика скорости (VSS) для управления вентилятором.\nПредотвращает частое включение/выключение при колебаниях скорости вокруг порога." fanctl_opt2_tps = "Использовать ли TPS для отключения вентилятора.\nВключите, если хотите отключать вентилятор при высоком положении дроссельной заслонки." fanctl_opt2_vss = "Использовать ли VSS для отключения вентилятора.\nВключите, если хотите отключать вентилятор на высокой скорости." fanctl1_mode = "Тип управления вентилятором:\nOn/Off — используется с обычным электромагнитным реле (вкл/выкл).\nPWM variable — используется с твердотельным реле (SSR) для плавного регулирования скорости вентилятора.\n\nPWM режим обеспечивает тихую работу на низких скоростях и экономит электроэнергию." fanctl1_inv = "Некоторые SSR или модули управления вентилятором требуют инвертированный ШИМ-сигнал.\nВключите, если вентилятор работает наоборот (максимум вместо минимума)." fanctl1_freq = "Частота ШИМ-сигнала для SSR. Твердотельные реле обычно предпочитают более высокую частоту.\nТипичное значение: 100–500 Гц. Слишком низкая частота может вызвать слышимый гул мотора вентилятора." fanctl1_duty_off = "ШИМ-цикл для выключенного состояния. Для обычных SSR — 0%.\nНекоторые специальные модули управления могут требовать другое значение, например 10%." fanctl1_duty_min = "ШИМ-цикл для минимальной скорости вращения. Зависит от вашего вентилятора и SSR.\nИспользуйте тестовый режим, чтобы найти значение, при котором вентилятор стабильно вращается и реально перемещает воздух.\nТипично: 20–40%." fanctl1_duty_full = "ШИМ-цикл для полной скорости. Для обычных SSR — 100%.\nНекоторые специальные модули управления могут требовать другое значение, например 90%." tclu_outpin = "Выбирает выходной порт для подключения соленоида блокировки гидротрансформатора (TCC lockup).\nИспользуется для автоматических трансмиссий с блокировкой гидротрансформатора." tclu_enablepin = "Выбирает опциональный входной порт для переключателя активации.\nМожет использоваться для датчика давления 4-й передачи, активируя блокировку только на повышающей передаче." tclu_brakepin = "Выбирает опциональный входной порт для выключателя стоп-сигнала.\nПри нажатии тормоза блокировка гидротрансформатора снимается для предотвращения глохнания." tclu_tpsmin = "Минимальный TPS для разрешения блокировки гидротрансформатора.\nПредотвращает блокировку при слишком малом дросселе. Типичное значение: 5–15%." tclu_tpsmax = "Максимальный TPS для разрешения блокировки гидротрансформатора.\nСнимает блокировку при полном газе для использования ГДТ как демпфер. Типичное значение: 80–90%." tclu_mapmin = "Минимальное MAP для разрешения блокировки.\nТипичное значение: 30–40 кПа." tclu_mapmax = "Максимальное MAP для разрешения блокировки.\nСнимает блокировку при высоком наддуве для защиты трансмиссии. Типичное значение зависит от двигателя." tclu_opt_vss = "Опционально разрешает использование скорости VSS1 или VSS2 как критерия для блокировки.\nРекомендуется включить для предотвращения блокировки на низких скоростях." tclu_vssmin = "Минимальная скорость для блокировки ГДТ.\nТребуется вход VSS (настройте в speed/gear sensors).\nТипичное значение: 40–60 км/ч. Блокировка на низкой скорости вызовет рывки." tclu_opt_gear = "Опционально разрешает использование номера передачи как критерия.\nТребуется настройка определения передачи в speed/gear sensors. Обычно блокировка разрешена только на высших передачах." tclu_gearmin = "Минимальная передача для разрешения блокировки.\nТипичное значение: 3 или 4 (блокировка только на 3-й и выше, или только на 4-й)." tclu_delay = "Задержка после выполнения условий перед блокировкой (в секундах).\nПредотвращает мгновенную блокировку при кратковременном выполнении условий. Типичное значение: 0.5–2 секунды." MAFOption_t = "Выбор между аналоговым входом 0–5В (большинство MAF) или частотным входом (например, GM MAF).\nOff — отключает вход MAF.\n\nБольшинство современных MAF используют аналоговый выход. Частотный выход встречается на старых GM автомобилях." MAFOption = "Выбирает аппаратный вход, к которому подключён аналоговый MAF датчик.\nУбедитесь, что выбранный вход не используется другим датчиком." MAFOption_f = "Выбор из четырёх возможных частотных входов для MAF.\nИспользуется для MAF датчиков с частотным выходом (GM)." maf_freq0 = "Частота MAF, соответствующая минимальному расходу воздуха.\nНастройте согласно спецификации вашего MAF датчика." maf_freq1 = "Частота MAF, соответствующая максимальному расходу воздуха.\nНастройте согласно спецификации вашего MAF датчика." feature7_mafmat = "Опционально включает корректирующую кривую по датчику температуры воздуха (MAT/IAT).\nПлотность воздуха зависит от температуры — более горячий воздух менее плотный и содержит меньше кислорода." feature7_maftrim = "Опционально включает таблицу VE1 как корректирующую таблицу для MAF.\nНачните заполнение таблицы значениями 100% (нет коррекции). Затем корректируйте по результатам дата-логов." maf_range = "Устанавливает диапазон в соответствии с вашим MAF датчиком. Установите до загрузки калибровочной кривой MAF.\nНа бензине: 650 г/с ≈ 600 л.с.; 1300 г/с ≈ 1200 л.с.; 1950 г/с ≈ 1800 л.с.; 2600 г/с ≈ 2400 л.с.\nИспользуйте минимальный подходящий диапазон для лучшей точности на малых расходах." opentime_opt1_master = "Same = одно значение deadtime для всех форсунок. Самый распространённый вариант.\n\nIndividual = deadtime для каждой форсунки задаётся отдельно. В основном используется для staged впрыска, где применяются форсунки разных типов." opentime_opt1_table = "Voltage curve: deadtime (время открытия) форсунки определяется по кривой напряжения бортовой сети.\n\nVoltage/Pressure table: deadtime определяется по таблице напряжение/давление топлива. Требуется установленный датчик давления топлива и настроенная система давления.\n\nДля большинства установок достаточно Voltage curve." opentime_opt1 = "Выбор одной из четырёх кривых коррекции по напряжению батареи.\nЕсли не уверены — выберите кривую 1 и оставьте значения по умолчанию.\nDeadtime критичен для точности дозирования на малых открытиях — неправильное значение вызовет бедную смесь на ХХ и при малых нагрузках." ; injOpen1 = "Injector dead time.\nTypically 0.9ms for high-z (~14ohm)" opentime_opta_pwm = "Включает ШИМ-управление током (peak and hold) для низкоомных форсунок.\nНизкоомные форсунки (1–4 Ом) требуют ограничения тока для предотвращения перегрева. Высокоомные форсунки (12–16 Ом) не нуждаются в этом." opentime_opta_ph = "Configures the injector peak and hold output for either 4A peak and 1A hold or 8A peak and 2A hold.\n4A/1A is recommended for hi-z injectors.\n\nPowercycle required." injPwmPd = "Период/частота во время фазы удержания (hold). Безопасно оставить 66 мкс.\nЭтот параметр определяет частоту ШИМ-модуляции тока удержания форсунки." injPwmT = "Время фазы 'peak' (пик тока). Обычно устанавливается 1–1.5 мс.\nЭто время, в течение которого форсунка получает полный ток для быстрого открытия. После этого ток снижается до удерживающего." injPwmP = "Процент тока удержания ('hold'). Типичные значения: 30–50%.\nСлишком низкий процент может вызвать нестабильную работу форсунки. Слишком высокий — перегрев форсунки и драйвера." opentime_optb_own = "Включает отдельные настройки для банка 2. Применяется только если физически разные форсунки установлены на втором банке. Может использоваться со staged впрыском.\nДля большинства двигателей должно быть Off." opentime_opta = "Выбор одной из четырёх кривых коррекции по напряжению батареи.\nЕсли не уверены — выберите кривую 1 и оставьте значения по умолчанию." smallpw_opt1_master = "Функция коррекции малых длительностей импульса форсунки позволяет компенсировать нелинейность форсунки на очень коротких импульсах.\nЕсли у вас нет калибровочных данных для ваших форсунок, измеренных на вашем ЭБУ, оставьте эту функцию выключенной.\nНеправильные значения ухудшат работу на ХХ и малых нагрузках." smallpw2_opt1_master = "Функция коррекции малых длительностей импульса форсунки. Позволяет линеаризовать нелинейную область работы форсунки.\nЕсли у вас нет калибровочных данных для ваших форсунок, оставьте выключенной.\n\nЭта настройка применяется к переключаемым по таблице форсункам другого типа." staged_first_param = "Включает двухступенчатый (staged) впрыск и задаёт основной параметр стейджинга, определяющий момент включения вторичных форсунок.\nДля табличного стейджинга: 0% = стейджинг не используется, 100% = полный стейджинг, промежуточные значения = частичный стейджинг.\n\nStaged впрыск позволяет использовать маленькие форсунки для точности на низких нагрузках и большие для высоких нагрузок." staged_sec_size = "Размер вторичных форсунок в cc/min.\nОбычно вторичные форсунки больше первичных. Соотношение 1:2 или 1:3 типично." staged_extended_opts_pw1off = "Off = при стейджинге первичные и вторичные форсунки работают с одинаковой длительностью.\n\nOn = при стейджинге первичные форсунки полностью отключаются и работают только вторичные.\nИспользуйте On, если вторичные форсунки покрывают весь диапазон мощности." staged_extended_opts_use_v3 = "Выбор подключения вторичных форсунок: к выходам MS3X (A-H) или к каналам batch fire 'V3' на основной плате.\nЗависит от вашей схемы подключения." staged_extended_opts_simult = "Определяет, чередуются ли каналы batch fire в течение цикла двигателя или срабатывают одновременно.\nОдновременный режим проще, но чередование обеспечивает более равномерное распределение." staged_transition_on = "Позволяет плавный переход к стейджингу вместо резкого переключения.\nРекомендуется включить для предотвращения рывков при включении вторичных форсунок." staged_transition_events = "Количество событий зажигания для перехода от нулевого стейджинга к полному.\nБольшее значение = более плавный переход, но более медленная реакция. Типично: 10–50 событий." staged_primary_delay = "Задерживает уменьшение длительности импульса первичных форсунок на указанное количество событий зажигания после включения вторичных.\nПредотвращает кратковременное обеднение смеси при переходе." staged_secondary_enrichment = "Дополнительное обогащение на вторичных форсунках сверх расчётного значения.\nПолезно для устранения небольшого провала (обеднения) сразу после полного включения стейджинга.\nТипичное значение: 0–15%." staged_param_1 = "Порог включения стейджинга по выбранному параметру (RPM, MAP, TPS или Duty).\nНапример, при параметре RPM: стейджинг включится при достижении указанных оборотов." staged_hyst_1 = "Зона нечувствительности для определения момента отключения стейджинга.\nПредотвращает частое включение/выключение на границе порога." staged_second_param = "Добавляет второй параметр для определения момента включения стейджинга.\nНапример, можно комбинировать RPM и TPS для более точного контроля." staged_param_2 = "Порог включения стейджинга по второму параметру (RPM, MAP, TPS или Duty)." staged_hyst_2 = "Зона нечувствительности для второго параметра стейджинга." staged_second_logic = "Логика связи двух параметров: AND (оба условия должны выполняться) или OR (достаточно одного).\nAND — более безопасный вариант, OR — более агрессивный." staged_out1 = "Использование релейного выхода для включения вторичных форсунок (системы GM), где первичные и вторичные форсунки подключены к одному выходу.\nПрименяется в системах, где реле физически переключает питание вторичных форсунок." staged_out2 = "Использование релейного выхода, срабатывающего раньше вторичных форсунок (например, воздушные заслонки GM).\nПозволяет подготовить систему перед активацией стейджинга." staged_out1_inv = "Позволяет инвертировать полярность выходного сигнала.\nВключите, если реле требует противоположной полярности управления." staged_out2_inv = "Позволяет инвертировать полярность выходного сигнала предварительного реле.\nВключите, если реле требует противоположной полярности." staged_out2_time = "Время работы предварительного выхода перед началом перехода к стейджингу (в секундах).\nДаёт время на открытие воздушных заслонок или подготовку топливной системы." flexFuel = "Включает или отключает систему Flex Fuel (многотопливная система).\nПозволяет автоматически корректировать топливоподачу и зажигание в зависимости от содержания этанола в топливе.\nТребуется датчик содержания этанола (например, GM Flex Fuel sensor)." flexport = "Выбирает вход, к которому подключён датчик содержания этанола.\nДатчик GM Flex Fuel выдаёт частотный сигнал, пропорциональный содержанию этанола." fueltemp1 = "Вход для датчика температуры топлива (при наличии).\nТемпература топлива влияет на его плотность и испаряемость. Горячее топливо менее плотное и требует коррекции." fuelFreq0 = "Нижняя и верхняя частоты, генерируемые датчиком содержания этанола.\nДля датчика GM: 50 Гц (нижняя) и 150 Гц (верхняя)." flex_pct0 = "Процент этанола, соответствующий нижней и верхней частотам датчика.\nДля датчика GM: 0% и 100%." fuelCorr0 = "Множитель топливоподачи. 100% = без изменений.\nСтандартное значение 163% для E100 означает +63% дополнительного топлива.\nЭтанол имеет меньшую теплотворность, поэтому требуется больше топлива. E85 обычно требует примерно +30–40% (130–140%)." fuelSpkDel0 = "Добавка к углу опережения зажигания (в градусах).\nE85 горит медленнее чистого бензина и требует большего опережения.\nТипичное добавление: +3–8° для E85. Точное значение зависит от двигателя и степени сжатия." ff_tpw0 = "Длительность импульса от датчика при низкой и высокой температурах.\nДля датчика GM: 1.0 мс и 5.0 мс." ff_temp0 = "Температуры, соответствующие низкой и высокой длительности импульса.\nДля датчика GM: -40°C и +125°C." fuelCorr_default = "Множитель топлива при выходе частоты датчика за допустимый диапазон (неисправный датчик или ошибка).\nОбычно устанавливается для бензина (100%) как безопасное значение.\nДвигатель продолжит работать, но без коррекции Flex Fuel." fuelSpkDel_default = "Добавка к опережению зажигания при неисправности датчика.\nОжидается 0 или отрицательное значение (уменьшение опережения для безопасности).\nПри неисправности датчика безопаснее использовать настройки для бензина." fuelFreq1 = "" flex_pct1 = "" fuelCorr1 = "" fuelSpkDel1 = "" flex_baseline = "Процент этанола в вашем обычном топливе. Предполагается, что основные таблицы топлива и зажигания настроены для обычного топлива.\nПозволяет включить Flex Fuel без перенастройки базовых таблиц.\nНапример, если таблица настроена на E10, установите baseline=10 — при включении Flex Fuel длительность останется прежней на E10.\nУстановите 0 для обратной совместимости." flexpct_default = "Процент этанола, используемый при неисправности датчика.\nУстановите значение, соответствующее вашему наиболее вероятному топливу. Для безопасности обычно устанавливают 0 (чистый бензин)." egoAlgorithm = "Алгоритм замкнутого контура EGO (лямбда-коррекция):\nNone — коррекция по лямбда-зонду не выполняется.\nSimple — подходит для узкополосного (narrowband) лямбда-зонда. Простая коррекция шагами.\nPID — использует ПИД-регулятор (пропорционально-интегрально-дифференциальный). При правильной настройке быстро достигает целевого AFR и удерживает его без колебаний.\n\nPID рекомендуется для широкополосных (wideband) зондов. Simple — для узкополосных." egoAlgorithm_auth = "Включает таблицу авторитета (полномочий) EGO коррекции по RPM/нагрузке. Позволяет более точно контролировать, когда и насколько сильно работает замкнутый контур.\nАвторитет 0 = коррекция не выполняется. Оси RPM и нагрузки обычно должны совпадать с таблицей AFR." egoAlgorithm_auth2 = "Combined — одна таблица авторитета для обоих направлений коррекции (обогащение и обеднение).\nTwo — отдельные таблицы для положительного (выше 100%) и отрицательного (ниже 100%) авторитета.\nДве таблицы полезны, если нужно ограничить коррекцию только в одном направлении." egoCount = "Количество событий зажигания между каждой коррекцией.\nМеньшее значение = более быстрая реакция, но возможны колебания. Большее = более стабильно, но медленнее.\nТипичное значение: 4–16." egoDelta = "Размер каждого шага коррекции (в процентах).\nТипичное значение: 1–3%. Слишком большие шаги вызовут колебания смеси, слишком малые — медленную реакцию." egoLimit = "Максимальный процент коррекции, который может выполнить замкнутый контур.\nТипичное значение: 10–25%. Если коррекция постоянно упирается в лимит, таблица VE нуждается в корректировке.\nБольшие лимиты маскируют ошибки настройки." ego_lower_bound = "Коррекция применяется только при AFR выше указанного значения.\nПозволяет отключить коррекцию при очень богатой смеси (например, при обогащении при полном газе).\nТипичное значение: 10–12 AFR." ego_upper_bound = "Коррекция применяется только при AFR ниже указанного значения.\nПозволяет отключить коррекцию при очень бедной смеси.\nТипичное значение: 18–20 AFR." egoTemp = "Коррекция применяется только при температуре ОЖ выше указанной.\nЛямбда-зонд не даёт корректных показаний на холодном двигателе. Типичное значение: 60–70°C." egoRPM = "Коррекция применяется только при RPM выше указанного значения.\nНа очень низких оборотах (прокрутка стартером) коррекция не нужна. Типичное значение: 500–800 RPM." TPSOXLimit = "Коррекция применяется только при TPS ниже указанного значения (в процентах).\nОтключает замкнутый контур при полном газе, где обычно нужна богатая смесь для защиты двигателя. Типичное значение: 80–90%." MAPOXLimit = "Коррекция применяется только при нагрузке ниже указанного значения (MAP в кПа).\nОтключает коррекцию при высоких нагрузках (полный наддув). Типичное значение для атмосферного: 90–95 кПа." MAPOXMin = "Коррекция применяется только при нагрузке выше указанного значения.\nОтключает коррекцию при очень низком вакууме (торможение двигателем). Типичное значение: 20–30 кПа." ego_startdelay = "Коррекция начинается только после работы двигателя не менее указанного времени (в секундах).\nПозволяет двигателю стабилизироваться после запуска и лямбда-зонду прогреться. Типичное значение: 15–60 секунд." ego_limdelay = "При активации отсечки (топлива или искры) EGO коррекция останавливается и замораживается. Эта задержка определяет время ожидания после снятия отсечки перед возобновлением коррекции.\nПозволяет выхлопным газам достичь зонда и стабилизировать показания. Типичное значение: 5–15 секунд." egoKP = "Пропорциональный коэффициент PID-регулятора.\nУвеличение ускоряет реакцию, но слишком большое значение вызывает колебания.\nНачните с малого значения (например, 50) и увеличивайте постепенно." egoKI = "Интегральный коэффициент PID-регулятора.\nУстраняет статическую ошибку. Слишком большое значение вызывает медленные колебания.\nОбычно устанавливается меньше, чем KP." egoKD = "Дифференциальный коэффициент PID-регулятора.\nСглаживает быстрые изменения. Для EGO коррекции обычно устанавливается очень малое значение или 0.\nСлишком большое значение делает систему чувствительной к шуму." egoType = "Тип лямбда-зонда:\nDisabled — датчик EGO не используется.\nNarrowband — узкополосный зонд (0–1В, переключается около λ=1). Только для определения стехиометрии.\nWideband — широкополосный зонд (точное измерение AFR в широком диапазоне).\n\nWideband настоятельно рекомендуется для качественной настройки." egonum = "Количество используемых лямбда-зондов.\nОдин зонд — стандартно. Два — для V-образных двигателей (по одному на банк). Четыре и более — для поцилиндровой настройки." egoport1 = "Выбирает вход, к которому подключён зонд или контроллер.\nДля прямого подключения каждый зонд должен использовать отдельный вход.\nДля подключения по CAN выберите 'CANEGO' для всех входов.\nУбедитесь, что контроллер wideband совместим с входом ЭБУ." egomap1 = "Выбирает, какой лямбда-зонд относится к данному цилиндру (при нескольких зондах).\nЕсли установлен только один зонд — убедитесь, что все цилиндры назначены на EGO1.\nДля V-образных двигателей с двумя зондами назначьте банки соответственно." spk_mode0 = "Устанавливает тип декодера входного сигнала тахометра (датчика положения коленвала).\nВыберите тип, соответствующий вашему коленвальному датчику и задающему диску.\nПравильный выбор критически важен для работы зажигания. Неправильный выбор = двигатель не заведётся." triggerOffset = "В режимах 'Basic Trigger' и 'Trigger Return' — угол BTDC (до ВМТ), при котором приходит каждый импульс. Оптимально 0–19° или 50–80°.\n\nВ режиме 'Toothed Wheel' всегда устанавливайте 0 — используйте tooth#1 angle.\n\nВ других режимах позволяет сделать корректировку ±20° к встроенному опорному углу.\n\nЭтот параметр определяет базовое опережение зажигания. Неправильное значение сдвинет ВСЮ таблицу зажигания." trigret_ang = "Используется только в режиме CAS 4/1. Указывает угловую длину каждого зуба задающего диска.\nНастройте согласно спецификации вашего CAS датчика." OddFireang = "Для двигателей с неравномерным порядком вспышек: угол поворота коленвала от выхода искры A до выхода искры B.\nНапример, для V-twin с углом развала 90° это может быть 270° и 450°." spk_conf2_gmtfi = "Специальные опции для GM HEI, Ford TFI и Buick C3I.\nДля HEI7/8 и GM-DIS включает выход 'bypass' на Spark B.\nРежим C3I включает 'bypass' и быструю синхронизацию после получения сигнала распредвала.\nSignature PIP — используется с 'Basic Trigger' для распределителей, где одна шторка короче остальных, позволяя определить фазу для секвенциального впрыска." spk_conf2_oddodd = "Alternate = большинство двигателей с неравномерным порядком вспышек: Ford V4, Chevy V6, Viper V10.\n\nPaired = Yamaha Vmax.\n\nCustom = установите собственные углы неравномерного зажигания." no_skip_pulses = "Количество импульсов тахометра при запуске, которые игнорируются перед началом расчётов зажигания и декодирования.\nЗначение по умолчанию 3 подходит для большинства установок.\nУвеличьте, если возникают ложные синхронизации при прокрутке стартером." ICIgnCapture = "Полярность входного сигнала тахометра. Должна соответствовать вашему датчику.\nНеправильная настройка вызовет дрейф угла зажигания с оборотами или ошибки декодирования зубьев.\nИспользуйте Tooth Logger для проверки правильности полярности.\n\nHall/оптические датчики обычно: Rising Edge. VR (индуктивные): зависит от подключения." spkout_hi_lo2 = "Эта настройка КРИТИЧНА — неправильный выбор приведёт к расплавлению катушек зажигания!\nДля 99% установок с выходами MS3X установите 'Going high' (нарастающий фронт).\n\nГоворит ЭБУ, каким фронтом сигнала разряжать катушку (подавать искру). Проверьте с помощью стробоскопа при первом запуске." spk_mode3 = "Тип катушек зажигания и автоматическое назначение выходов:\nSingle-coil — один выход, одна катушка или внешний коммутатор. TFI, HEI, EDIS, GMDIS — выбирайте 'single coil'.\nWasted-spark — один выход на пару цилиндров (катушка с двумя выводами).\nWasted-COP — по одной катушке на цилиндр, но срабатывают попарно.\nCoil on plug — индивидуальные катушки, каждая срабатывает отдельно (требуется датчик распредвала).\nDual dizzy — два выхода, работают поочерёдно." hardware_spk = "Выбор между MS3X и LED выходами. Выходы MS3X — готовые к использованию логические выходы зажигания.\nLED выходы обычно используются только при модернизации с MS2 или без платы MS3X.\nДля большинства установок выбирайте MS3X." hardware_cam = "Вход датчика распредвала: MS3X, JS10 или 'MAP Sensor'.\nОбычно устанавливается MS3X.\nНЕ выбирайте 'MAP Sensor' без понимания причины.\n\nВход MS3X готов к использованию. JS10 требует доработки платы.\n'MAP Sensor' — ТОЛЬКО если MAP используется для определения фазы на 1-цилиндровом или V-twin двигателе. Используется с режимом 'Dual wheel with missing tooth'. Включите сэмплирование MAP 'Timed min' и настройте порог фазы MAP.\n\nДля Optispark и Nissan CAS: выбор 'MS3X' активирует 'PT4' как вход высокого разрешения." spk_mode3_tach3 = "Выбирает, куда подключён третий вход тахометра (при наличии).\nИспользуется для двигателей со сложными датчиковыми системами." spk_mode3_hirespol = "Позволяет инвертировать полярность входа распредвала или высокоразрешающего тахометра.\n\nПользовательские декодеры требуют одинаковую полярность сигналов коленвала и распредвала. Если датчики разных типов (например, Hall + VR) делают это невозможным, используйте эту настройку.\nПрименяется не ко всем декодерам." spk_mode3_kick = "В первую очередь для двигателей с кик-стартером. Включает задержку искры при прокрутке.\nЗарядка и разряд катушки планируются в точке trigger-return для снижения риска обратного удара.\n\nМожет использоваться только с:\n- 'Trigger-Return'\n- 'Basic Trigger' при Trigger Angle < 20°" kickdelay = "Время ожидания после trigger-return перед началом зарядки катушки в режиме кик-старта (в миллисекундах).\nУвеличьте, если происходит обратный удар при кик-старте." timing_flags = "Fixed Advance = фиксированный угол опережения (значение ниже). Используется для проверки угла стробоскопом при настройке.\n\nUse table = нормальная работа по таблице опережения зажигания.\n\nВАЖНО: всегда проверяйте базовый угол стробоскопом в режиме Fixed перед первым запуском. Это гарантирует, что фактический угол совпадает с заданным в TunerStudio." use_prediction = "1st Deriv Prediction = учитывается ускорение/замедление двигателя при расчёте момента зажигания. Нормальная настройка.\n\nNo Prediction = без учёта ускорения/замедления. Может быть полезно при диагностике проблем с синхронизацией.\nДля нормальной эксплуатации всегда используйте предсказание." fixed_timing = "Угол опережения зажигания в режиме 'Fixed' (в градусах BTDC).\nОбычно устанавливается 10–15° для проверки стробоскопом. Сравните показания стробоскопа с этим значением — они должны совпадать.\nЕсли не совпадают, скорректируйте triggerOffset." crank_dwell = "Базовое время зарядки катушки зажигания при прокрутке стартером (до коррекции по напряжению).\nПри прокрутке напряжение падает, и коррекция автоматически увеличит dwell.\nТипичное значение: 4–6 мс для большинства катушек. LS-катушки — 3–4 мс. CNP (Mazda MX-5) — 2–3 мс." crank_timing = "Угол опережения зажигания при прокрутке стартером. Типично 5–10° BTDC.\nСлишком большое опережение может вызвать обратный удар стартера. Слишком малое — затруднённый запуск.\nДля большинства двигателей 8–10° — хорошая отправная точка." spk_conf2_dli = "Включает специальные мультиплексированные выходы для использования с модулем зажигания Toyota.\nНапример, используется на двигателе 7M-GTE (Toyota Supra).\nТолько для специфических установок с родным модулем зажигания Toyota." dwellmode = "Режим управления катушкой зажигания:\nStandard Dwell — стандартный, подходит для большинства установок. ЭБУ контролирует время зарядки катушки.\nFixed Duty — фиксированный ШИМ-цикл вместо контроля dwell. Для модулей Ford TFI 'Push Start', Bosch 'smart', MSD и других CD-боксов.\n\nTime After Spark — только для кассет зажигания Saab Tri-Ionic DI.\nCharge at trigger — редко используется. Может применяться с CDI-боксами типа MSD при Basic Trigger." spk_conf2_dwell = "Для режима Time-After-Spark dwell может изменяться в зависимости от RPM.\nПозволяет оптимизировать время зарядки на разных оборотах для специфических систем зажигания." spk_conf2_dwelltbl = "Для режима 'Standard Dwell' можно использовать таблицу значений dwell по RPM.\nОбычно используется одно фиксированное значение dwell — этого достаточно для большинства катушек.\nТаблица полезна для высокооборотных двигателей, где dwell нужно сократить на высоких RPM для предотвращения перегрева катушек." max_coil_dur = "Базовое время накопления (dwell) катушки зажигания до коррекции по напряжению бортовой сети. Типичные значения — 3–4 мс. Для большинства штатных катушек зажигания 3 мс — безопасная отправная точка. Катушки типа LS (GM) обычно требуют 4–5 мс. Слишком большое время dwell приведёт к перегреву катушки и её выходу из строя, слишком малое — к слабой искре и пропускам зажигания. Проверяйте рекомендации производителя катушки." max_spk_dur = "Время, необходимое для завершения разряда искры, обычно порядка 1 миллисекунды. Это время определяет, как долго поддерживается дуга в свече. Для большинства установок значение по умолчанию подходит. Увеличение этого параметра может потребоваться для систем с очень высокой энергией зажигания или CDI-системами." dwelltime = "Обратное время накопления для режима Time-After-Spark. Используется в специфических конфигурациях зажигания, где управление dwell привязано ко времени после искры. В большинстве стандартных установок этот параметр не используется." dwellduty = "Для режима фиксированной скважности — задаёт процент скважности выходного сигнала зажигания. Полезно при работе с некоторыми модулями зажигания, которые ожидают сигнал определённой скважности, а не длительности. Используйте осциллограф для проверки корректности сигнала." hw_latency = "Если при стробоскопической проверке с фиксированным УОЗ вы замечаете небольшое запаздывание зажигания с ростом оборотов — введите сюда небольшое корректирующее значение. Обычно достаточно значения 0–10 мкс. Эта настройка компенсирует задержку в аппаратной части ЭБУ. Начните с 0 и увеличивайте только при обнаружении проблемы стробоскопом." feature4_0igntrig = "Только для режима Trigger Return: средний светодиод на корпусе ЭБУ может дублировать входной сигнал от датчика распределителя для помощи в настройке базового опережения зажигания. Включите эту функцию при первоначальной настройке, чтобы визуально убедиться, что ЭБУ корректно получает сигнал от трамблёра. После настройки можно отключить." spk_mode3_trim = "Включает индивидуальную коррекцию угла опережения зажигания для каждого цилиндра. Полезно для двигателей, где отдельные цилиндры склонны к детонации или имеют различные условия (например, неравномерное охлаждение, разная длина впускных каналов). Обычно используется на гоночных двигателях с детонационными датчиками на каждом цилиндре." spk_mode3_wasted = "На двухдатчиковых конфигурациях с пропуском зубьев при запуске обычно используется режим wasted-COP до определения фазы по сигналу датчика распредвала. Эта опция отключает такое поведение и требует получения импульса от датчика распредвала до начала запуска. Обратите внимание: в условиях зашумлённого сигнала распредвала это может привести к ненадёжному запуску. Применимо только для конфигурации Dual wheel with missing tooth." feature4_0resyncdel = "Выкл: при потере и восстановлении синхронизации по RPM топливо и искра возвращаются как можно быстрее. Вкл: при потере синхронизации на высоких оборотах ЭБУ выждет несколько оборотов перед возобновлением подачи топлива и искры. Включение этой функции может предотвратить повреждение двигателя от неправильной синхронизации на высоких оборотах, но может вызвать кратковременные провалы." resyncdel_rpm = "Стратегия задержки активируется при потере синхронизации выше этих оборотов. Во время потери синхронизации RPM может показывать заниженное значение, поэтому рекомендуется установить значение чуть выше оборотов холостого хода. Например, если холостой ход 800 RPM — установите 1000–1200 RPM." spk_config_trig2 = "Одиночное колесо с пропуском зубьев = обычно колесо коленвала, например 36-1 или 60-2. Двойное колесо = два колеса без пропущенных зубьев, например NipponDenso 24/1 CAS. Двойное колесо с пропуском зубьев = обычно колесо коленвала 36-1, 60-2 плюс дополнительное колесо на распредвале. Выберите тип, соответствующий вашей конфигурации датчиков. Неправильный выбор приведёт к отсутствию синхронизации." triggerTeeth = "Количество зубьев с учётом пропущенных, как если бы они существовали. То есть для колеса 36-1 физически 35 зубьев, но вводите 36. Для 60-2 введите 60, для 12-1 введите 12. Это одна из ключевых настроек — неправильное значение сделает синхронизацию невозможной." No_Miss_Teeth = "Количество пропущенных зубьев. Типичные значения: 1 для 36-1, 2 для 60-2 или 36-2. Этот параметр сообщает ЭБУ, сколько зубьев отсутствует в колесе. Неправильное значение не позволит определить положение коленвала." Miss_ang = "Подробности смотрите в разделе «Trigger Wheel» руководства. Это важная настройка. Угол пропуска определяет положение пропущенного зуба относительно ВМТ первого цилиндра. Неправильная установка приведёт к неверному углу опережения зажигания и фазам впрыска. Используйте стробоскоп для проверки." spk_config_camcrank = "Определяет, вращается ли основное колесо со скоростью коленвала или распредвала (распределителя). Колесо коленвала вращается в 2 раза быстрее колеса распредвала. Колесо в трамблёре = скорость распредвала. Задающий диск на шкиве коленвала = скорость коленвала." spk_config_trig2l = "Аналогично настройке захвата входного сигнала зажигания — указывает, какой уровень напряжения считается «активным». Для датчиков Холла обычно используется «Falling edge» (спадающий фронт). Для VR-датчиков — зависит от полярности подключения. Проверьте осциллографом." spk_config_campol = "В режиме «Poll level» определяет, какой уровень напряжения соответствует каждой фазе двигателя. Используется для определения, какой из двух оборотов коленвала является рабочим. Неправильная настройка сместит фазу впрыска на 360° — двигатель будет работать, но расход топлива увеличится." spk_config_resetcam = "Как часто поступают импульсы от второго датчика (например, распредвала). Для однозубового колеса на распредвале — 1 раз за оборот распредвала (= 1 раз за 2 оборота коленвала). Для многозубовых колёс распредвала укажите соответствующее значение." poll_level_tooth = "Номер зуба коленвала, на котором считывается уровень сигнала распредвала. По умолчанию — 1. Rover 4.6 — попробуйте 17. Изменение номера зуба может также изменить определяемую фазу. Если фаза определяется неверно — попробуйте другой номер зуба." oddfireangs1 = "Количество градусов коленвала от Spk A до Spk B. Для двигателей с неравномерным чередованием вспышек (V-twin, V6 с нечётным углом и т.д.) Введите точный угол поворота коленвала между зажиганиями." oddfireangs2 = "Количество градусов коленвала от Spk B до следующего цилиндра. Проверьте документацию вашего двигателя для точных углов между вспышками. Сумма всех углов должна составлять 720° для четырёхтактного двигателя." oddfireangs3 = "Количество градусов коленвала от Spk C до следующего цилиндра. Для стандартных рядных двигателей с равномерным чередованием эта настройка не используется." oddfireangs4 = "Количество градусов коленвала от Spk D до следующего цилиндра. Актуально для многоцилиндровых двигателей с нестандартным порядком работы." mapsample_opt2 = "«Use event average» подходит для большинства двигателей. «Use timed min» предназначено для одноцилиндровых двигателей и V-twin с сильно пульсирующим сигналом MAP. Для стандартных многоцилиндровых двигателей всегда используйте усреднение. Режим поиска минимума помогает получить стабильное значение MAP на двигателях с большим объёмом цилиндра и малым количеством цилиндров." map_sample_duration = "Количество градусов для измерения MAP. Начальный угол задаётся кривой выше. Обычно 60–90° для 4-цилиндрового двигателя, 40–60° для 6-цилиндрового. Слишком большое окно может захватить такт выпуска, слишком малое — дать нестабильные показания." mapsample_opt1 = "Количество событий зажигания для усреднения MAP. Обычно 1 для больших двигателей или 2 для 1–2-цилиндровых. Большее количество событий даёт более стабильное значение MAP, но замедляет реакцию на изменение нагрузки." map_phase_thresh = "При использовании датчика MAP для определения фазы двигателя — задаёт порог давления для различения такта впуска и выпуска. Сильно зависит от двигателя, 80 кПа работало на небольшом одноцилиндровом. Этот метод определения фазы менее надёжен, чем датчик распредвала, но может быть полезен на простых двигателях без датчика распредвала." fp_opt_mode = "On/Off — базовое управление, ЭБУ управляет минусовой стороной реле бензонасоса. Open-Loop PWM — табличное управление скважностью для контроллера бензонасоса. Closed-Loop PWM — контроль фактического давления в рампе и автоматическая регулировка скважности для поддержания заданного дифференциального давления. Для большинства установок достаточно режима On/Off. PWM-управление применяется с электронными модулями управления насосом (Ford FPDM, GM и т.д.)." fp_ctl_ms = "Частота выполнения расчётов управления (в миллисекундах). Более частые вычисления дают более точное управление, но увеличивают нагрузку на процессор. Значение по умолчанию подходит для большинства случаев." fp_out1 = "Выход, используемый для управления бензонасосом (реле или контроллер). Рекомендуется оставить стандартный выход FP для управления реле on/off, а для контроллера насоса использовать другой выход. Это позволит иметь аварийное реле как резерв." fp_freq = "Для PWM-выходов задаёт частоту выходного сигнала. Для модулей Ford FPDM обычно требуется определённая частота — проверьте документацию. Неправильная частота может привести к некорректной работе модуля или повышенному шуму насоса." fp_opt_inv = "Установите «Normal» для On/Off. Для PWM-выходов: установите «Invert» при использовании среднетоковых выходов ЭБУ, так как они инвертируют сигнал. Выходы Spark или Digital не инвертируют сигнал — используйте «Normal». Обратите внимание: штатный выход бензонасоса on/off всегда является low-side драйвером и подключается к минусу реле — изменение этой настройки на него не влияет." fp_opt_reg = "Топливные системы по умолчанию используют регулятор давления с вакуумной/наддувной компенсацией, поддерживающий давление в рампе X бар выше давления во впускном коллекторе. Некоторые системы GM используют фиксированное давление относительно атмосферного. Системы с вакуумной компенсацией обеспечивают равномерный расход через форсунки при любом давлении во впуске. Нескомпенсированные системы дают переменный расход и требуют компенсации в ЭБУ. Включение «Fixed» активирует автоматическую компенсацию. Если ваш регулятор давления подключён к впускному коллектору вакуумным шлангом — оставьте выключенным." fp_opt_safety = "Включает систему безопасности по давлению топлива. Если измеренное давление падает слишком низко на время, превышающее заданное — двигатель выключается. Очень рекомендуется для турбированных двигателей, где падение давления топлива под нагрузкой может привести к обеднению смеси и прогару поршней." rail_pressure_psig = "Давление в топливной рампе в PSI относительно давления во впускном коллекторе. Типичное значение — 43.5 PSI для большинства установок. Это давление, которое показывает манометр на неработающем двигателе при вакуумном регуляторе. Для форсунок высокого давления (некоторые OEM-системы) значение может быть выше." rail_pressure_kpag = "Давление в топливной рампе в кПа относительно давления во впускном коллекторе. Типичное значение — 300 кПа для большинства установок. 300 кПа ≈ 3 бар ≈ 43.5 PSI — стандартное значение для большинства систем впрыска." fp_prime_duty = "Скважность PWM, используемая во время заливочного импульса (priming pulse). Заливочный импульс подаётся при включении зажигания для создания давления в рампе перед запуском. Обычно используется максимальная скважность для быстрого набора давления." fp_off_duty = "Скважность PWM, когда насос должен быть выключен. Установите 0 для большинства применений или 75% для модулей Ford FPDM. Ford FPDM интерпретирует 75% duty как команду на выключение насоса. Для других систем используйте 0%." fp_min_duty = "Минимальная скважность PWM при работе двигателя. Установите 0 для большинства применений или 5% для Ford FPDM. Это нижний предел скважности — контроллер не опустится ниже этого значения при работающем двигателе." fp_max_duty = "Максимальная скважность PWM при работе двигателя. Установите 100 для большинства применений или 50% для Ford FPDM. Ford FPDM использует обратную логику, где 50% — максимальная производительность насоса." fp_press_in = "Указывает Generic Sensor, настроенный для измерения давления топлива в кПа. ВАЖНО: в Generic Sensors необходимо использовать ТОЛЬКО кПа, при этом логирование и отображение можно настроить в psi или bar. Пересчёт: из psi умножьте на 6.9 (100 psi = 690 кПа). Из bar умножьте на 100 (3 bar = 300 кПа)." fp_press_type = "«Gauge» — датчик с привязкой к атмосферному давлению. С вакуумным регулятором показания будут падать при разрежении и расти при наддуве. «Differential» — датчик с двумя портами, привязка к давлению во впускном коллекторе. Показания обычно стабильны (например, 43 psi, 3 bar). «Absolute» — датчик с привязкой к абсолютному вакууму. Без давления топлива покажет около 14.7 psi / 1 bar. Дифференциальный датчик наиболее удобен для мониторинга здоровья топливной системы." fueltemp1_corr = "Включает коррекцию топливоподачи по температуре топлива. Горячее топливо имеет меньшую плотность, что приводит к обеднению смеси. Холодное топливо — более плотное. Коррекция компенсирует эти изменения. Особенно важно для установок с обратным топливопроводом, проходящим вблизи горячих элементов двигателя или выпускной системы." fp_Kp = "Пропорциональный коэффициент замкнутого контура управления давлением топлива. Увеличение усиливает реакцию на отклонение давления от целевого. Слишком большое значение вызовет колебания давления." fp_Ki = "Интегральный коэффициент замкнутого контура управления давлением топлива. Устраняет постоянное отклонение от целевого давления. Слишком большое значение приводит к медленным колебаниям." fp_Kd = "Дифференциальный коэффициент замкнутого контура управления давлением топлива. Реагирует на скорость изменения ошибки, помогая демпфировать колебания. Обычно устанавливается небольшим значением или нулём." hpte_opt_on = "Позволяет обогатить смесь после длительной работы на высокой мощности для охлаждения днища поршня. Обогащение рассчитывается путём уменьшения целевого AFR на величину из кривой. Таймер высокой мощности накапливается выше заданных порогов нагрузки/оборотов и убывает ниже них. Обогащение применяется до обнуления счётчика. Эта функция важна для турбомоторов и форсированных двигателей — дополнительное топливо охлаждает камеру сгорания и предотвращает прогар поршней при длительной езде на полном газу." hpte_load = "Включать только при нагрузке (fuel-load) выше этого значения. Установите значение, соответствующее началу зоны высокой нагрузки — обычно 70–80% от максимальной нагрузки." hpte_rpm = "Включать только при оборотах выше этого значения. Обычно устанавливают на 70–80% от максимальных рабочих оборотов." shiftlight_opt_pins = "Позволяет назначить конкретный выход для индикатора переключения передач. Не включайте этот же выход в настройках Generic On/Off outputs. Индикатор переключения передач помогает водителю определить оптимальный момент для переключения на повышенную передачу." shiftlight_opt_gear = "Позволяет задать индивидуальные пороги оборотов для каждой передачи. Полезно для установки более низкого порога на нижних передачах во избежание превышения оборотов. На нижних передачах обороты растут быстрее, поэтому более ранний сигнал даёт водителю больше времени на реакцию." shiftlight_opt2_test = "Индикатор переключения активируется на первые полсекунды после включения питания как тест лампы. Позволяет убедиться, что лампа/светодиод исправны." shiftlight_limit1 = "Индикатор включается выше этих оборотов. Установите на 200–500 RPM ниже желаемых оборотов переключения, чтобы дать водителю время на реакцию." ltt_opt_on = "Включает долгосрочную коррекцию топливоподачи (Long-Term Fuel Trim). Предназначена для автоматического внесения небольших корректировок ПОСЛЕ полной настройки двигателя. Требует включённого и работающего EGO-контроля (лямбда-зонд). LTT постепенно обучается и запоминает корректировки в таблицу. Не используйте как замену полноценной настройке VE-таблицы — сначала настройте VE, потом включайте LTT для финальной автоподстройки." ltt_opt_feedback = "Выводит суммарное процентное изменение в «sensor15» — в основном для тестирования. Позволяет отслеживать общий объём корректировок, внесённых LTT." ltt_samp_time = "Как часто (в секундах) код проверяет текущую коррекцию EGO. Меньшее значение — более частые проверки и более быстрое обучение. Слишком частые проверки могут привести к шуму в данных." ltt_agg = "Насколько мягко применяется коррекция. Большие числа означают более медленные изменения. Рекомендуется начинать с большего значения для плавного обучения. Если LTT слишком агрессивен — увеличьте этот параметр." ltt_opt_mode = "Timed — при необходимости таблица трима автоматически сохраняется во flash. Button — для сохранения таблицы трима во flash используется внешняя кнопка. Автоматический режим удобнее, ручной — безопаснее, так как позволяет проверить корректировки перед сохранением." ltt_but_in = "Кнопка для записи таблицы трима из RAM во flash, чтобы она использовалась при следующем включении. Нажимайте кнопку только когда уверены, что текущие корректировки правильны." ltt_int = "Минимальное время между автоматическими записями во flash. Частая запись во flash сокращает ресурс памяти. Рекомендуется интервал не менее нескольких минут." ltt_led_out = "Светодиодный выход загорается, когда таблица трима в RAM превышает порог изменений. Пользователь может затем выбрать «Burn» для сохранения во flash. Полезно для индикации того, что LTT накопил значительные корректировки и их стоит сохранить." ltt_thresh = "Если сумма всех изменений превышает этот порог — запрашивается запись во flash (автоматически или через индикатор для пользователя). Цель — сохранять только при значительных изменениях во всей таблице. Малый порог вызовет частые записи, большой — редкие. Подберите баланс под ваши условия эксплуатации." pwmidle_closed_duty = "Скважность, ниже которой изменения скважности больше не влияют на обороты. Это нижний предел рабочего диапазона клапана ХХ. Установите значение, при котором клапан полностью закрыт. Определяется экспериментально." pwmidle_closed_steps = "Количество шагов, ниже которого изменение числа шагов больше не влияет на обороты. Это нижний предел хода шагового клапана ХХ." pwmidle_open_duty = "Скважность, выше которой изменения скважности больше не влияют на обороты. Это верхний предел рабочего диапазона — клапан полностью открыт." pwmidle_open_steps = "Количество шагов, выше которого изменение числа шагов больше не влияет на обороты. Это верхний предел хода шагового клапана ХХ." pwmidle_dp_adder = "Величина увеличения скважности клапана ХХ при сбросе газа (dashpot). Установите значение, при котором обороты будут чуть выше целевых. Эта функция предотвращает заглохание двигателя при резком сбросе газа. Начните с небольшого значения (5–10%) и увеличивайте при необходимости." pwmidle_dp_adder_steps = "Величина увеличения шагов клапана ХХ при сбросе газа (dashpot). Установите значение, при котором обороты будут чуть выше целевых. Аналогично настройке скважности, но для шаговых клапанов." pwmidle_close_delay = "Задержка между нажатием на газ и закрытием клапана ХХ при движении. Значение 0 отключает эту функцию. ВАЖНО: таймер не начинает отсчёт, пока фактические обороты не превысят целевые на 200 RPM. Предотвращает преждевременное закрытие клапана при кратковременном нажатии на газ." pwmidle_flags_wot = "Открывает клапан ХХ при полностью открытой дроссельной заслонке (WOT). Если клапан ещё закрывается после предыдущего нажатия на газ, закрытие приостанавливается до окончания WOT. Полезно для двигателей, где дополнительный воздух через клапан ХХ при WOT улучшает наполнение." pwmidle_max_rpm_new = "Регулирует агрессивность регулятора ХХ при достижении целевых оборотов. Увеличивайте ползунок до появления колебаний оборотов, затем уменьшите до их прекращения. Подождите 5–10 секунд между каждой регулировкой. Это основная настройка чувствительности замкнутого контура ХХ. Слишком агрессивная настройка вызовет «раскачку» оборотов, слишком мягкая — медленный отклик на нагрузку (включение кондиционера, руля и т.д.)." pwmidle_cl_opts_initvaluetable = "Определяет, берётся ли начальное значение скважности при входе в замкнутый контур ХХ из последнего сеанса работы или из таблицы начальных значений. Использование таблицы обеспечивает более предсказуемый запуск, особенно если последний сеанс закончился при нестандартных условиях." pwmidle_cl_opts_initval_clt = "Определяет, используется ли CLT (температура охлаждающей жидкости) или MAT (температура воздуха) для поиска по оси Y таблицы начальных значений. Для большинства установок лучше использовать CLT, так как температура двигателя лучше отражает потребность в дополнительном воздухе на ХХ." pwmidle_shift_lower_rpm = "Обороты, выше которых клапан ХХ остаётся закрытым при переключении передач. Предотвращает заглохание при переключении на пониженных передачах, не открывая клапан на высоких оборотах." pwmidle_shift_open_time = "Максимальная длительность переключения передачи. По истечении таймера клапан возвращается к обычному поведению dashpot. Установите значение, соответствующее самому долгому переключению на вашей КПП. Обычно 0.5–2 секунды." pwmidle_cl_opts_display_pid = "Basic — используются P=100, I=100, D=0. Advanced — позволяет индивидуально настраивать PID-коэффициенты для случаев, когда контроллер не может адекватно достичь целевых оборотов в базовом режиме. Начните с Basic. Переходите на Advanced только если не удаётся добиться стабильного ХХ." pwmidle_Kp_new = "Пропорциональный коэффициент PID-регулятора ХХ. Реагирует мгновенно на изменение оборотов. Увеличение даёт более быструю реакцию, но может вызвать колебания. Начните с 100 и настраивайте по поведению." pwmidle_Ki_new = "Интегральный коэффициент PID-регулятора ХХ. Реагирует на длительное расхождение между целевыми и фактическими оборотами. Устраняет статическую ошибку. Слишком большое значение приводит к медленным колебаниям вокруг целевых оборотов." pwmidle_Kd_new = "Дифференциальный коэффициент PID-регулятора ХХ. Реагирует на скорость изменения оборотов. Помогает демпфировать колебания. Обычно устанавливается маленьким или нулевым. Большие значения могут вызвать нервозную работу клапана." pwmidle_pid_wait_timer = "Определяет, как долго все условия входа в замкнутый контур ХХ должны быть выполнены перед его активацией. Предотвращает преждевременное включение замкнутого контура при нестабильных условиях. Обычно 1–3 секунды." pwmidle_targ_ramptime = "Время после входа в замкнутый контур ХХ, за которое фактические обороты должны достичь целевых. Медленный рамп (большое значение) даёт плавный переход, быстрый — более резкий, но может вызвать колебания." pwmidle_ms = "Частота выполнения алгоритма замкнутого контура ХХ (в миллисекундах). Обычно 10–50 мс. Более частое выполнение даёт более точное управление." IdleCtl_vss = "Определяет, активирует ли датчик скорости автомобиля (VSS) замкнутый контур ХХ. Полезно для переключения между открытым контуром на ходу и замкнутым контуром на стоянке." idleminvss = "Замкнутый контур ХХ отключается при скорости выше этого значения. Обычно устанавливают на 3–5 км/ч, чтобы отключить регулятор при начале движения." boost_ctl_settings_on = "Включает или выключает управление наддувом. Включайте только после полной настройки базовых параметров двигателя (зажигание, топливо, ХХ)." boost_ctl_settings_dome = "Выбор между стандартным односоленоидным управлением (OEM) и двухсоленоидным управлением давлением в куполе (CO2 dome). Управление куполом используется преимущественно в гоночных применениях. Односоленоидное управление подходит для большинства уличных и трековых автомобилей." boost_ctl_pwm = "Задаёт диапазон частот на выходе управления наддувом. Slow — 11.1–78 Гц. Для большинства установок используется Slow. Большинство стандартных соленоидов наддува работают в диапазоне 20–40 Гц. Использование слишком высокой частоты может привести к неполному открытию соленоида." boost_ctl_pwm_scale = "Частоты, доступные в диапазоне Mid. Частота общая для других выводов в той же PWM-группе. Группа A: Nitrous1/2, Inj1/2 Группа B: Boost, Idle, FIDLE, VVT Убедитесь, что выбранная частота не конфликтует с другими функциями в той же группе." boost_ctl_pins_pwm = "Выходные пины, доступные при использовании среднего диапазона частот. Выберите свободный пин, не занятый другими функциями." boost_ctl_settings_freq = "Частоты, доступные при использовании медленного диапазона частот. Для стандартных вестгейтных соленоидов обычно 20–33 Гц. Для больших соленоидов может потребоваться более низкая частота." boost_ctl_pins = "Выходные пины, доступные при использовании медленного диапазона частот. Настройка «Off» полезна только при использовании CAN-шины для передачи положения лопаток турбины. Выберите пин с достаточной токовой нагрузкой для вашего соленоида." boost_ctl_settings_invert_new = "Установите так, чтобы бóльшая скважность давала бóльший наддув. Большинство соленоидов наддува работают в нормальном режиме: большая скважность = больше воздуха мимо вестгейта = меньше наддув. В этом случае нужна инверсия. Проверьте логику вашего соленоида." boost_ctl_settings_biasonly = "Для более предсказуемой работы при частичном дросселе можно отключить замкнутый контур и использовать только таблицу bias при неполном дросселе. Не актуально для дрэг-рейсинга. Используется порог WOT из «Engine State Settings». Полезно, чтобы избежать скачков наддува при плавном нажатии на газ в повседневной езде." boost_ctl_closeduty = "(Замкнутый контур) Скважность, ниже которой изменения больше не влияют на давление наддува. Определяет нижнюю границу рабочего диапазона соленоида. Установите экспериментально." boost_ctl_openduty = "(Замкнутый контур) Скважность, выше которой изменения больше не влияют на давление наддува. Определяет верхнюю границу рабочего диапазона соленоида." boost_ctl_clt_threshold = "Температура ОЖ должна быть выше этого значения для работы управления наддувом. Защищает двигатель от наддува на холодном моторе. Обычно 60–70°C." boost_ctl_lowerlimit = "(Замкнутый контур) Давление наддува должно быть в пределах этого числа кПа от целевого для активации замкнутого контура. Вне этого диапазона клапан удерживается полностью открытым (вестгейт закрыт) для максимально быстрого раскрутки турбины. Обычно 20–30 кПа. Слишком большое значение замедлит выход на наддув, слишком маленькое — может вызвать перенаддув при входе в замкнутый контур." boost_ctl_upperlimit = "(Замкнутый контур) Если давление наддува превысит целевое плюс это количество кПа — скважность вестгейта падает до 0 и замкнутый контур деактивируется. Это аварийная защита от перенаддува в замкнутом контуре. Установите на 20–30 кПа выше целевого." boost_ctl_upperlimit2 = "(Замкнутый контур) Если давление наддува превысит целевое плюс это количество кПа — скважность вестгейта падает до 0 и замкнутый контур деактивируется. Аналогично верхнему пределу для первого канала, но для второго канала наддува." boost_ctl_rate_disable = "(Замкнутый контур) Если давление наддува растёт быстрее этой скорости — скважность ограничивается значением из таблицы bias. Защита от резкого скачка наддува. Помогает предотвратить перенаддув при резком нажатии на газ." boost_ctl_rate_disable2 = "(Замкнутый контур) Если давление наддува растёт быстрее этой скорости — скважность ограничивается значением из таблицы bias. Аналогично ограничению скорости роста для второго канала наддува." boost_ctl_range1 = "Только для замкнутого контура с одним соленоидом. Насколько далеко от значения bias может уйти алгоритм замкнутого контура. Предотвращает чрезмерное отклонение от известных хороших значений bias при первом выходе на наддув. Установите 100 для неограниченного диапазона. Начните с 20–30% и увеличивайте по мере уточнения таблицы bias." boost_ctl_settings_cl = "Выбор алгоритма управления — открытый или замкнутый контур. Для односоленоидных систем: * Открытый контур — таблица скважностей соленоида, применяемых напрямую. * Замкнутый контур — таблица целевых давлений MAP в кПа. Система регулирует скважность для достижения целевого MAP. Для dome-систем: * Открытый контур — таблица целевых давлений в куполе, без привязки к фактическому MAP. * Замкнутый контур — таблица целевых MAP. Система регулирует давление в куполе для достижения целевого MAP. Замкнутый контур проще в настройке и компенсирует изменения температуры и высоты. Открытый — более предсказуем для гонок." boost_ctl_Kp = "Пропорциональный коэффициент замкнутого контура наддува. Вызывает немедленные изменения скважности при изменении ошибки наддува. (По умолчанию = 100.) Увеличение ускоряет реакцию, но может вызвать колебания. Начните с 100." boost_ctl_Ki = "Интегральный коэффициент замкнутого контура наддува. Вызывает изменения скважности при длительном отклонении от целевого наддува. Чем дольше наддув не на целевом — тем сильнее реакция. (По умолчанию = 100.) Устраняет статическую ошибку. Слишком большое значение — медленные колебания наддува." boost_ctl_Kd = "Дифференциальный коэффициент замкнутого контура наддува. Чем быстрее меняется ошибка — тем сильнее реакция для противодействия. (По умолчанию = 100.) Помогает предотвратить перерегулирование. Начните с 100 и подстраивайте при необходимости." boost_ctl_flags = "Выберите Setup для настройки таблицы bias замкнутого контура. Basic — настройка только ползунком чувствительности, P=100, I=100, D=100. Advanced — начинает с чувствительности ползунка и позволяет точно настроить PID-коэффициенты. Используйте Basic для начала. Переходите на Advanced только при невозможности добиться стабильного наддува в Basic." boost_ctl_flags2 = "Аналогично первому каналу: Setup — для таблицы bias, Basic — ползунок, Advanced — индивидуальные PID. Настраивайте второй канал после стабилизации первого." boost_ctl_sensitivity = "Регулирует агрессивность контроллера наддува. Увеличивайте ползунок до появления колебаний наддува вокруг целевого, затем уменьшите до их прекращения. Это основной инструмент настройки в режиме Basic. Подождите несколько разгонов между регулировками для оценки результата." OverBoostOption = "Выбор типа защиты от перенаддува: отсечка топлива, отсечка искры или оба варианта. Отсечка топлива безопаснее для катализатора. Отсечка искры быстрее снижает обороты. Оба варианта — максимальная защита. Для турбодвигателей рекомендуется использовать оба." OverBoostKpa = "Максимальное абсолютное давление MAP (в кПа), при превышении которого срабатывает защита от перенаддува. Установите на безопасный предел для вашего двигателя и турбосистемы. Учитывайте прочность шатунов, поршней, прокладки ГБЦ и самой турбины." OverBoostHyst = "После срабатывания защиты от перенаддува — на сколько кПа ниже максимума должен упасть наддув для восстановления подачи топлива/искры. Небольшой гистерезис (10–20 кПа) предотвращает постоянное включение/выключение защиты на границе порога." OverBoostOption_tol = "Срабатывание защиты при превышении целевого наддува на определённое давление. Позволяет порогу перенаддува следовать за таблицей целевого наддува. Полезно, когда целевой наддув меняется по оборотам/передаче — защита автоматически подстраивается." boosttol = "На сколько кПа MAP может превысить целевой наддув до срабатывания защиты. Обычно 20–30 кПа. Учитывайте инерцию турбины — при резком сбросе газа и нажатии снова наддув может кратковременно превысить целевой." tsw_pin_ob = "Позволяет назначить входной пин для переключения максимального наддува на альтернативное значение. Например, кнопка на руле для переключения между «уличным» и «гоночным» режимами наддува." OverBoostKpa2 = "Альтернативное максимальное абсолютное давление MAP (в кПа) для защиты от перенаддува. Используется при активации альтернативного режима через внешний переключатель." ; overboostcutx = "When using spark cut, controls the number of sparks to cut." ; overboostcuty = "When using spark cut, controls the number of potential spark events from which to cut spark." boost_feats_tsw = "Разрешает переключение таблиц наддува при включении/выключении входа. Позволяет иметь два набора настроек наддува — например, для разного топлива (92 и 98) или для уличного/трекового режимов." boost_gear_switch = "Выбирает передачу, на которой происходит переключение таблиц при включённом переключении по передачам. Позволяет использовать пониженный наддув на нижних передачах для контроля тяги." boost_feats_timed = "Включает кривую процентного модификатора наддува (выше барометрического) от старта. Например, если целевое давление 250 кПа (22 psi) при барометрическом 100 кПа, 50% даст цель ((250-100) × 50%) + 100 = 175 кПа (11 psi). Требует включённого Launch Control. Альтернатива — Boost vs speed/gear/time, где целевой наддув задаётся напрямую. Не включайте оба одновременно. Полезно для плавного набора наддува со старта в дрэг-рейсинге." boost_feats_launch = "Позволяет задать конкретный целевой наддув (замкнутый контур) или скважность (открытый контур) при активном Launch Control. Обычно используется пониженный наддув на старте для контроля сцепления колёс." boost_launch_duty = "Скважность соленоида при активном Launch Control. Установите значение, дающее умеренный наддув для предотвращения пробуксовки на старте." boost_launch_target = "Целевое давление наддува при активном Launch Control. Начните с низкого значения и постепенно увеличивайте, контролируя сцепление колёс." boost_vss = "Позволяет управлять целевым наддувом на основе скорости автомобиля, определённой передачи или времени с момента старта. При активации перезаписывает таблицы целевого наддува и напрямую задаёт цель. Передача недоступна для открытого контура. Альтернатива — Boost Timed From Launch. Не включайте оба. Идеально для дрэг-рейсинга: постепенное увеличение наддува по мере роста скорости." boost_vss_tps = "TPS должен быть выше этого значения для использования целевого наддува по VSS. Предотвращает применение гоночных целей наддува при частичном дросселе." boost_vss_biasgear = "Включает таблицу bias наддува для каждой передачи (для односоленоидной системы, не dome). Полезно, если требуемая скважность соленоида различается на разных передачах. Правильная настройка bias по передачам уменьшает работу замкнутого контура и делает контроль наддува более стабильным." boost_geartarg1 = "Целевой наддув для каждой передачи. Для использования необходимо: — Boost = On — Замкнутый контур наддува — Определение передачи — Boost vs speed/gear = Gear. Позволяет ограничить наддув на нижних передачах для контроля тяги. Например: 1-я — 0.5 бар, 2-я — 0.8 бар, 3-я и выше — полный наддув." boost_ctl_settings_on2 = "Включает или выключает второй канал управления наддувом. Используется для twin-turbo систем или когда нужно независимое управление двумя соленоидами." boost_ctl_pins_pwm2 = "Выход для второго соленоида наддува (средний диапазон частот). Выберите свободный пин, не занятый другими функциями." boost_ctl_pins2 = "Выход для второго соленоида наддува (медленный диапазон частот). Убедитесь, что пин может обеспечить достаточный ток для соленоида." boost_ctl_closeduty2 = "Скважность, ниже которой изменения больше не влияют на давление наддува (второй канал). Настройте аналогично первому каналу." boost_ctl_openduty2 = "Скважность, выше которой изменения больше не влияют на давление наддува (второй канал). Настройте аналогично первому каналу." boost_ctl_lowerlimit2 = "(Замкнутый контур) Давление наддува должно быть в пределах этого числа кПа от целевого для активации замкнутого контура (второй канал). Вне этого диапазона клапан полностью открыт для быстрой раскрутки турбины. Настройте аналогично первому каналу. Для twin-turbo может потребоваться другое значение, если турбины разного размера." boost_ctl_settings_cl2 = "Выбор алгоритма управления для второго канала — открытый или замкнутый контур. Обычно оба канала используют одинаковый тип контура." boost_ctl_Kp2 = "Пропорциональный коэффициент замкнутого контура наддува (второй канал). Немедленная реакция на изменение ошибки наддува. Начните с тех же значений, что и для первого канала, и подстройте отдельно при необходимости." boost_ctl_Ki2 = "Интегральный коэффициент замкнутого контура наддува (второй канал). Реакция на длительное отклонение от целевого давления. Чем дольше наддув отклонён от цели — тем сильнее корректировка." boost_ctl_Kd2 = "Дифференциальный коэффициент замкнутого контура наддува (второй канал). Реакция на скорость изменения ошибки. Помогает демпфировать колебания. Начните с того же значения, что и для первого канала." boost_ctl_sensor2 = "Вход датчика MAP для мониторинга второго канала наддува. Для twin-turbo с раздельными коллекторами — используйте отдельный датчик MAP для каждой турбины." alternator_opt_mode = "Режим управления генератором: Off = отключено. On-Off = базовое управление, обычно через клемму лампы «L». Open-loop frequency = частота задаёт целевое напряжение (Ford). Open-loop duty = скважность задаёт целевое напряжение (GM). Closed-loop field control = ЭБУ использует замкнутый контур для управления обмоткой возбуждения. High-speed feedback field switching = мониторинг напряжения на 20 кГц с переключением обмотки (Miata 99-05 и Chrysler). Для большинства установок используйте On-Off или Open-loop duty." alternator_ctl_ms = "Частота выполнения расчётов управления генератором (в миллисекундах). Значение по умолчанию подходит для большинства случаев." alternator_controlout = "Выход для подключения к генератору. Убедитесь, что выбранный пин обеспечивает достаточный ток для управления обмоткой возбуждения." alternator_control_inv = "Определяет, используется ли положительный или отрицательный активный фронт. Зависит от типа генератора и схемы подключения." alternator_freq = "Частота выходного сигнала управления генератором. Для генераторов Ford обычно используется определённая частота — проверьте документацию на ваш генератор." alternator_lampout = "Выход для контрольной лампы заряда. Подключите к лампе на приборной панели для индикации проблем с зарядкой." alternator_freq_currin = "PWM цифровой вход для мониторинга тока аккумулятора (только для отображения). Позволяет отслеживать потребление тока для диагностики." alternator_diff = "Включить предупреждающую лампу, если фактическое напряжение слишком далеко от целевого. Помогает обнаружить неисправность генератора или регулятора напряжения на ранней стадии." alternator_freq_monin = "PWM цифровой вход от генератора как датчик нагрузки — часто клемма «F». Позволяет ЭБУ контролировать нагрузку на генератор." alternator_freq_moninv = "Определяет, используется ли положительный или отрицательный фронт захвата. Зависит от типа сигнала вашего генератора." alternator_maxload = "Включить предупреждающую лампу, если нагрузка на генератор выше этого предела. Помогает предотвратить перегрузку генератора и обрыв ремня." alternator_Kp = "Пропорциональный коэффициент замкнутого контура управления генератором. Увеличение ускоряет реакцию на изменение напряжения." alternator_Ki = "Интегральный коэффициент замкнутого контура управления генератором. Устраняет постоянное отклонение от целевого напряжения." alternator_Kd = "Дифференциальный коэффициент замкнутого контура управления генератором. Демпфирует колебания. Обычно малое значение или ноль." alternator_sensitivity = "Общая чувствительность контроллера генератора. Настройте для стабильного напряжения без колебаний." alternator_freq_currinv = "Определяет, используется ли положительный или отрицательный фронт захвата. Выберите в соответствии с полярностью сигнала датчика тока." alternator_startdelay = "Задержка после запуска перед включением управления генератором. Позволяет двигателю стабилизироваться до подачи нагрузки от генератора. Обычно 2–5 секунд. На двигателях с трудным запуском можно увеличить, чтобы избежать заглохания от нагрузки генератора." alternator_ramptime = "Время плавного набора до целевого напряжения. Постепенный набор снижает ударную нагрузку на двигатель и ремень генератора. Обычно 5–15 секунд." alternator_tempin = "Указывает Generic Sensor, настроенный для измерения температуры аккумулятора. Температура используется для поиска целевого напряжения заряда по верхней кривой. В холодную погоду аккумулятор требует более высокого напряжения заряда, в жаркую — более низкого для предотвращения перезаряда." alternator_targv = "Целевое напряжение в режиме «Charge» (зарядка). Обычно 14.2–14.8 В в зависимости от типа аккумулятора. AGM-аккумуляторы обычно требуют 14.4–14.7 В." alternator_chargetime = "Длительность режима «Charge» после запуска, после чего происходит переход в режим «Run». Режим зарядки обычно использует более высокое напряжение для восполнения энергии, затраченной на запуск." alternator_targvr = "Целевое напряжение в режиме «Run» (работа). Обычно чуть ниже, чем в режиме зарядки — например, 13.8–14.2 В. Поддерживает аккумулятор заряженным без перезаряда." alternator_wot = "Процент TPS для активации режима WOT (полностью открытый дроссель). Обычно 80–90%. При WOT генератор переходит на пониженное напряжение для освобождения мощности двигателя." alternator_wotv = "Целевое напряжение в режиме WOT. Обычно ниже нормального для освобождения части мощности двигателя. Например, 13.0–13.5 В. Снижение нагрузки генератора при WOT может дать прибавку 5–15 л.с. в зависимости от двигателя." alternator_wottimeout = "Тайм-аут до окончания режима WOT и возврата к режиму зарядки или работы. Предотвращает длительную работу при пониженном напряжении." alternator_overrv = "Целевое напряжение при активной отсечке топлива на торможении двигателем. Установка чуть более высокого напряжения даст небольшой эффект «рекуперативного торможения». Например, 14.5–15.0 В. Дополнительная нагрузка генератора слегка усилит торможение двигателем и подзарядит аккумулятор." rpmhigh = "Максимум RPM для отображения на шкалах, таблицах и кривых. Настройте под ваш двигатель. Обычно на 1000–2000 RPM выше максимальных рабочих оборотов для удобства просмотра." rpmwarn = "Обороты для жёлтой зоны предупреждения на шкалах. Установите на 500–1000 RPM ниже красной зоны." rpmdang = "Обороты для красной зоны опасности на шкалах. Установите на значение, выше которого возможно повреждение двигателя." loadhigh = "Максимальное значение «нагрузки» (например, кПа) для шкал, таблиц и кривых. Для атмосферных двигателей — 105–110 кПа. Для турбо — максимальное ожидаемое давление + 20–30 кПа запас." wue_lpg = "Для большинства установок значение обогащения при прогреве (WUE) ниже 100% указывает на ошибку настройки, и код выдаст «Configuration Error». В редких случаях (например, при использовании LPG/пропана) это может быть корректным. Данная настройка отключает предупреждение. Включайте только если вы действительно используете газовое топливо или имеете обоснованную причину для WUE ниже 100%." prefSpeedUnits = "Выбор единиц скорости — мили в час (mph) или километры в час (км/ч). Закройте и откройте страницу после изменения. Для России рекомендуется км/ч." prefLengthUnits = "Выбор единиц размера — метры или дюймы. Закройте и откройте страницу после изменения. Влияет на отображение размерности в интерфейсе." prefFuelPressUnits = "Выбор единиц давления топлива — кПа (дифф.), psi (дифф.), bar (дифф.). Все варианты — дифференциальное давление: давление в рампе минус давление во впускном коллекторе. При выключенном двигателе совпадает с показанием механического манометра. Для удобства в российских условиях рекомендуется bar." clt_exp = "Позволяет шкалам и кривым использовать расширенный диапазон температуры ОЖ для двигателей воздушного охлаждения, где датчик CLT измеряет температуру масла или головки цилиндров. Полезно для мотоциклов, VW с воздушным охлаждением и подобных двигателей, где температура может быть значительно выше стандартного диапазона." maxafr_opt1_on = "Включает систему безопасности по AFR. Очень рекомендуется для турбированных и форсированных двигателей. Защищает от прогара поршней при обеднении смеси из-за неисправности топливной системы." maxafr_opt1_led = "Назначает выход для предупреждающего индикатора (on/off). Подключите к хорошо видимому светодиоду или лампе на приборной панели." maxafr_opt1_load = "Выбирает ось нагрузки для таблицы отклонения AFR. Выберите TPS или кПа в зависимости от типа вашей системы (Alpha-N или Speed Density)." maxafr_en_load = "Проверка включается только при TPS/кПа выше этого значения. Установите выше режима холостого хода и частичных нагрузок, где обеднение не критично. Обычно 50–70% TPS или 70–80 кПа." maxafr_en_rpm = "Проверка включается только при оборотах выше этого значения. Установите выше оборотов ХХ. Обычно 2000–3000 RPM." maxafr_en_time = "Задержка перед принятием действия — предотвращает ложные срабатывания от переходных процессов. Обычно 0.5–2 секунды. Слишком малое значение вызовет ложные срабатывания, слишком большое — не защитит вовремя." maxafr_spkcut_time = "Первая стадия защиты — отсечка искры на указанное время. Отсечка искры быстро снижает нагрузку на двигатель. Обычно 0.5–1 секунда." maxafr_ret_tps = "Топливо и искра остаются отключены, пока дроссель не опустится ниже этого предела. Заставляет водителя убрать ногу с газа перед восстановлением работы двигателя." maxafr_ret_map = "Топливо и искра остаются отключены, пока MAP (наддув) не опустится ниже этого предела. Обеспечивает безопасное снижение давления наддува перед возобновлением работы." maxafr_ret_rpm = "Топливо и искра остаются отключены, пока обороты не опустятся ниже этого предела. Гарантирует снижение оборотов до безопасного уровня." feature3_3 = "Синхронизированный пакетный впрыск (Sequenced batch fire) может обеспечить более повторяемую работу двигателя на системах пакетного впрыска. При каждом запуске пакетный впрыск привязывается к одному и тому же событию зажигания (цилиндру). Без этой функции привязка случайна. Обычно используется с 2 squirts/alternating. Не рекомендуется для новых установок и может некорректно работать с большим числом «squirts»." trig_init = "Определяет «триггер» зажигания. Обычно попробуйте 0 или 1. Этот параметр задаёт начальный номер события зажигания. Если зажигание работает нестабильно — попробуйте другое значение." dlyct = "Устанавливает аппаратный фильтр шумов процессора. Обычно малое значение или ноль. Увеличивайте только при наличии проблем с шумом на входном сигнале. Слишком большое значение может отфильтровать реальные импульсы." NoiseFilterOpts = "Включает фильтрацию шумов. Использует кривую для задания периода фильтра. Фильтр измеряет ширину импульса tach-in для отклонения коротких шумовых пиков и пропуска корректных широких импульсов. Обычно 1000 мкс и более на низких оборотах, 100 мкс и более на высоких. Простые установки с трамблёром могут использовать значительно бóльшие значения. Настройте кривую так, чтобы фильтр отсекал шум, но не блокировал реальные импульсы." NoiseFilterOpts1 = "Включает игнорирование ложных импульсов тахометра. Ложные импульсы будут записаны в композитный логгер. Полезно для диагностики: ложные импульсы видны в логе, но не влияют на работу двигателя." NoiseFilterOpts2 = "Вход тахометра отключается на короткий период после действительного импульса для маскирования ложных импульсов. Полезно для сигналов с «дребезгом» — например, от изношенных VR-датчиков." NoiseFilterOpts3 = "Фильтрует перекрёстные помехи между датчиками. Особенно полезно для колёс NipponDenso 24+2 с проводами Ne, G1, G2, G- (общий минус). Общий провод заземления датчиков может вызывать наводки при срабатывании одного датчика на другой." ICISR_tmask = "Абсолютное время после действительного импульса, в течение которого новые импульсы игнорируются. Значение сильно зависит от типа входного сигнала. Пример: колесо 60-2 на 10000 RPM даёт реальный импульс каждые 0.1 мс. Датчик трамблёра 4-цил. на 600 RPM — каждые 50 мс. Значение ДОЛЖНО быть меньше минимального реального интервала на вашей установке. Установите слишком большое — пропустите реальные зубья." ICISR_pmask = "Работает как процент от времени последнего действительного зуба. Типичные значения — 30–50%. Процентная маска автоматически масштабируется с оборотами, что делает её удобнее абсолютной маски для широкого диапазона оборотов." secondtrigopts = "Включает простой фильтр шумов на входе тахометра распредвала. Активируйте при наличии ложных срабатываний или потерь синхронизации, связанных с шумом на сигнале распредвала." TC5_required_width = "Аналогично кривой по времени для входа коленвала — минимальная ширина импульса для распредвала. Настройте под характеристики вашего датчика распредвала." secondtrigopts1 = "Включает игнорирование ложных импульсов на входе распредвала. Ложные импульсы будут записаны в композитный логгер. Полезно для диагностики проблем с синхронизацией." secondtrigopts2 = "Вход тахометра распредвала отключается на короткий период после действительного импульса для маскирования ложных импульсов. Активируйте при наличии «дребезга» на сигнале распредвала." IC2ISR_tmask = "Абсолютное время после действительного импульса распредвала, в течение которого новые импульсы игнорируются. Значение ДОЛЖНО быть меньше минимального реального интервала импульсов на вашей установке. Для распредвалового датчика интервалы обычно больше, чем для коленвалового." IC2ISR_pmask = "Работает как процент от времени последнего действительного зуба. Типичные значения — 30–50%. Аналогично настройке для коленвала, но применяется к входу распредвала." crankingRPM = "Установите на несколько сотен RPM выше вашей типичной скорости прокрутки стартером. Обычно 300–500 RPM. Слишком низкое значение — двигатель останется в режиме прокрутки после запуска. Слишком высокое — двигатель перейдёт в рабочий режим ещё во время прокрутки." floodClear = "При TPS выше этого значения во время прокрутки стартером топливо не подаётся — для очистки залитых цилиндров. Также отключает заливочный импульс (priming). Типичное значение — 80–90% TPS. Если двигатель залит — полностью нажмите педаль газа и крутите стартером для продувки цилиндров." feature7_batchcrank = "Позволяет подавать топливо на каждый импульс тахометра в режиме пакетного впрыска на последовательной (sequential) установке. Полезно в холодном климате для увеличения подачи топлива при прокрутке. При последовательном впрыске каждая форсунка работает раз в цикл — этого может быть недостаточно для холодного запуска. Пакетный режим при прокрутке удваивает количество впрысков." feature7_cranktaper = "Позволяет использовать кривую изменения ширины импульса при прокрутке — для уменьшения импульса со временем или для начального большого впрыска. Полезно для двигателей, требующих много топлива в первые моменты прокрутки с последующим уменьшением." feature7_crtpunits = "Выбор единиц: события зажигания или 0.1 секунды. События зажигания привязаны к вращению двигателя и более предсказуемы. Секунды полезны, если скорость прокрутки сильно варьируется." alternate_blend = "Включает кривую перехода (blend) между кривыми прокрутки. Позволяет плавно переключаться между разными стратегиями заливки при прокрутке." altcrank = "Двигатели с большим числом цилиндров (например, V12) могут испытывать трудности с горячим запуском из-за слишком малых импульсов при впрыске на каждый такт. Эта опция позволяет впрыскивать через такт с удвоенной шириной импульса. Полезно для достижения минимально стабильного времени открытия форсунок." primedelay = "Задержка заливочных импульсов для ожидания набора давления медленным бензонасосом. Если насос набирает давление медленно — увеличьте задержку, чтобы заливочный импульс подавался уже при рабочем давлении в рампе. Обычно 0.5–2 секунды." feature3_matase = "Может использоваться для помощи при проблемах с «тепловым насыщением» (heat soak). Тепловое насыщение возникает, когда горячий двигатель выключается и температура под капотом растёт из-за отсутствия обдува. Это может затруднить повторный запуск. Коррекция по MAT помогает компенсировать горячий воздух во впуске." feature3_aseunit = "Выбирает единицы таймера обогащения после запуска (ASE): секунды или события зажигания. Секунды обеспечивают предсказуемую длительность обогащения. События зажигания привязаны к оборотам — обогащение закончится быстрее на высоких оборотах." shift_cut_on = "Включает систему отсечки при переключении передач (для последовательных КПП и мотоциклов). Позволяет переключать передачи без сброса газа за счёт кратковременной отсечки зажигания." shift_cut_auto = "Определяет, работает ли система от кнопки или автоматически. Автоматический режим может использовать датчик нагрузки на рычаге КПП для определения момента переключения." shift_cut_fuel = "Нужно ли также отсекать подачу топлива. Отсечка топлива вместе с искрой предотвращает накопление несгоревшего топлива в выпускной системе и хлопки при восстановлении зажигания." shift_cut_in = "Вход для кнопки переключения. Обычно кнопка на рычаге КПП или под ногой водителя (мотоцикл)." shift_cut_out = "Выход для соленоида переключения. Управляет пневматическим или электрическим актуатором переключения передач." shift_cut_rpm = "Минимальные обороты для разрешения переключения. Предотвращает случайное переключение на низких оборотах, где это может повредить трансмиссию." shift_cut_tps = "Минимальное положение дросселя для разрешения переключения. Отсечка при переключении имеет смысл только при значительном открытии дросселя." shift_cut_delay = "Соленоид активируется немедленно, затем ожидание этого времени перед отсечкой искры. Позволяет механизму КПП начать расцепление перед снятием нагрузки с шестерён." shift_cut_time = "Длительность отсечки искры. Обычно 50–150 мс. Слишком короткое время — недостаточно для переключения. Слишком длинное — потеря скорости." shift_cut_gear = "Опция для добавления дополнительного времени отсечки для каждой передачи. На высших передачах может потребоваться больше времени из-за более высоких нагрузок на шестерни." shift_cut_add12 = "Дополнительное время отсечки искры для переключения 1→2. Первое переключение обычно требует меньше времени из-за меньшего момента." shift_cut_add23 = "Дополнительное время отсечки искры для переключения 2→3. Настройте по результатам тестов на треке." shift_cut_add34 = "Дополнительное время отсечки искры для переключения 3→4. Увеличьте, если переключение недостаточно чистое." shift_cut_add45 = "Дополнительное время отсечки искры для переключения 4→5. На высших передачах нагрузки выше, может потребоваться больше времени." shift_cut_add56 = "Дополнительное время отсечки искры для переключения 5→6. Последнее переключение — обычно при максимальных скоростях." shift_cut_soldelay = "Длительность удержания соленоида после восстановления искры. Обеспечивает завершение механического переключения до снятия давления с актуатора." shift_cut_reshift = "Игнорировать кнопку в течение этого времени после переключения — для предотвращения ложного переключения. Предотвращает двойное срабатывание от дребезга кнопки или вибрации. Обычно 200–500 мс." shift_cut_rpm12 = "Автоматическое переключение 1→2 на этих оборотах. Для автоматического режима — установите оптимальные обороты переключения для максимального ускорения." shift_cut_rpm23 = "Автоматическое переключение 2→3 на этих оборотах. Может отличаться от переключения 1→2 в зависимости от характеристики двигателя." shift_cut_rpm34 = "Автоматическое переключение 3→4 на этих оборотах. Настройте по кривой мощности вашего двигателя." shift_cut_rpm45 = "Автоматическое переключение 4→5 на этих оборотах. На высших передачах обороты переключения могут быть ниже." shift_cut_rpm56 = "Автоматическое переключение 5→6 на этих оборотах. Для последнего переключения обороты обычно максимальные." ac_idleup_settings = "Включает функцию повышения оборотов ХХ при работе кондиционера. Предотвращает заглохание при включении компрессора кондиционера за счёт автоматического увеличения оборотов ХХ." ac_idleup_settings_inv = "Определяет активное состояние входа. Обычно переключатель ХХ — замыкание на массу, используйте «Normal». В некоторых установках с особой проводкой может потребоваться «Inverted». Проверьте мультиметром, какой уровень сигнала появляется при включении кондиционера." ac_idleup_io_out = "Выход для включения компрессора кондиционера. ЭБУ управляет реле компрессора через этот выход, позволяя отключать компрессор при определённых условиях." ac_idleup_io_in = "Вход переключателя кондиционера. Подключается к кнопке или переключателю кондиционера в салоне." ac_idleup_set2_tps = "Используется ли TPS для отключения кондиционера. При полном дросселе кондиционер отключается для максимальной мощности двигателя." ac_idleup_set2_vss = "Используется ли VSS для отключения кондиционера. Отключение кондиционера на высокой скорости может быть полезно для некоторых применений." ac_idleup_set2_rpm = "Используется ли ограничение по максимальным оборотам. Отключает компрессор при слишком высоких оборотах для защиты компрессора." ac_idleup_set2_outinv = "Позволяет инвертировать логическое состояние выхода. Не изменяет электрические характеристики выхода. Используйте, если реле кондиционера управляется противоположной логикой." ac_idleup_delay = "Задержка после нажатия кнопки перед включением компрессора. Даёт время регулятору ХХ поднять обороты до включения нагрузки. Обычно 0.5–2 секунды. Предотвращает кратковременное падение оборотов при включении кондиционера." ac_idleup_min_rpm = "Минимальные обороты, при которых компрессор может быть включён. Защита от заглохания на слишком низких оборотах. Установите на 100–200 RPM ниже целевых оборотов ХХ." ac_delay_since_last_on = "Задержка для предотвращения быстрого циклического включения/выключения. Частое переключение компрессора увеличивает его износ и создаёт дискомфорт. Обычно 10–30 секунд." ac_idleup_adder_duty = "Дополнительная скважность PWM-клапана ХХ при включённом кондиционере. Компенсирует нагрузку компрессора увеличением подачи воздуха. Подберите значение, при котором обороты не падают при включении кондиционера." ac_idleup_adder_steps = "Дополнительные шаги клапана ХХ при включённом кондиционере. Аналогично скважности, но для шаговых клапанов. Начните с 10–20 шагов и подстройте." ac_idleup_cl_targetadder = "Увеличение целевых оборотов ХХ при включённом кондиционере. Обычно 100–200 RPM. Более высокие обороты компенсируют нагрузку и обеспечивают стабильную работу." ac_idleup_tps_offpoint = "Отключить кондиционер при TPS выше этого значения. Снимает нагрузку с двигателя, когда водитель требует полную мощность. Обычно 70–90%. На маломощных двигателях можно установить ниже." ac_idleup_tps_hyst = "Мёртвая зона по TPS для предотвращения колебаний включения/выключения. Обычно 3–5%. Предотвращает «дребезг» при нахождении TPS вблизи порога отключения." ac_idleup_vss_offpoint = "Отключить кондиционер при скорости выше этого значения. Может использоваться для защиты компрессора на высоких скоростях или для освобождения мощности." ac_idleup_vss_hyst = "Мёртвая зона по VSS для предотвращения колебаний включения/выключения. Обычно 3–5 км/ч. Предотвращает «дребезг» при нахождении скорости вблизи порога." ac_idleup_max_rpm = "Максимально допустимые обороты для работы компрессора кондиционера. Защищает компрессор от работы на слишком высоких оборотах. Обычно 5000–6000 RPM." idleadvance_on = "Включает функцию управления УОЗ на холостом ходу. Позволяет использовать отдельную кривую опережения зажигания на ХХ для стабилизации оборотов. Увеличение УОЗ повышает обороты, уменьшение — снижает." idle_special_ops_timing_assist = "Включает дополнительную кривую опережения, привязанную к целевым оборотам замкнутого контура ХХ. Позволяет использовать управление УОЗ для помощи в регулировании оборотов ХХ. Работает совместно с клапаном ХХ: при падении оборотов ниже целевых — УОЗ увеличивается, при превышении — уменьшается. Это даёт более быструю реакцию, чем механический клапан." idleveadv_to_pid_idleadv = "Связывает опережение зажигания на холостом ходу с замкнутым контуром управления ХХ, либо позволяет опережению на ХХ работать по собственным условиям активации. На практике: если используется PID-регулятор холостого хода, рекомендуется привязать idle-advance к нему, чтобы обе системы работали согласованно и не конфликтовали." idleadvance_clt = "Активировать только при температуре охлаждающей жидкости выше указанного значения. Опережение зажигания на холостом ходу обычно плохо работает при прогреве двигателя, так как обороты нестабильны. Совет: установите порог на уровне 60–70°C — это температура, при которой двигатель уже достаточно прогрет для стабильного холостого хода." idleadvance_delay = "После выполнения условий активации ждать указанное время, прежде чем включать опережение зажигания на ХХ. Это помогает избежать ложных срабатываний. Совет: задержка 1–3 секунды хорошо работает для большинства двигателей. Слишком короткая задержка может вызвать колебания оборотов при переходных режимах." idleve_on = "Включает функцию Idle-VE — отдельную таблицу VE для холостого хода. Это позволяет точно настроить топливоподачу на малых оборотах и нагрузках без влияния на основную таблицу VE. Особенно полезно для двигателей с агрессивными распредвалами, где холостой ход требует особой настройки." idleveadv_to_pid_idleve = "Связывает Idle-VE с замкнутым контуром управления ХХ, либо позволяет системе работать по собственным условиям активации. Совет: при использовании PID-регулятора ХХ привязка обеспечивает плавный переход между режимами idle-VE и основной таблицей VE." idleve_clt = "Активировать Idle-VE только при температуре охлаждающей жидкости выше указанного значения. На холодном двигателе Idle-VE обычно работает некорректно, так как смесь корректируется прогревочными обогащениями. Совет: установите 60–70°C — после прогрева двигатель переходит на нормальный режим работы." idleve_delay = "После выполнения условий активации ждать указанное время перед включением Idle-VE. Это помогает избежать ложных срабатываний при переходных режимах. Совет: 1–3 секунды — оптимальная задержка для большинства применений." knk_option = "Disabled: не использовать обратную связь по детонации для управления опережением зажигания. Safe Mode: при обнаружении детонации — отвести угол на один шаг назад и оставить его там, пока не изменятся TPS или MAP, или детонация не появится снова. Это самый безопасный режим для самостоятельной настройки. Aggressive Mode: удерживать опережение на пороге детонации. Если детонации нет — угол продвигается (до значения из таблицы), если детонация есть — отводится назад. Отличие от Safe Mode в том, что после детонации угол может вернуться к табличному значению, что может вызвать повторную детонацию. Внимание: для уличных автомобилей рекомендуется Safe Mode. Aggressive Mode — только для гоночных применений с качественным топливом." knk_option_an = "On/Off: простой цифровой вход «детонация есть / нет» от внешнего модуля. Analogue: аналоговый вход (0–5В), пропорциональный уровню сигнала детонации от внешнего модуля. Internal: встроенный модуль детонации MS3X. Совет: встроенный модуль даёт наибольшую гибкость настройки, но требует правильного подбора частоты фильтра под ваш двигатель." knkport = "Вход для цифрового сигнала детонации (есть/нет). Подключите сюда выход внешнего модуля детонации (например, GM knock module). Убедитесь, что сигнал соответствует уровням логики 0–5В." knkDirection = "Уровень логического сигнала, означающий детонацию. При установке 'Low' — сигнал 0В означает наличие детонации. Это соответствует работе модуля GM. Совет: проверьте документацию вашего модуля детонации, чтобы узнать активный уровень сигнала." knkpull = "Нужно ли подключать внутренний подтягивающий резистор. При использовании рекомендованных входов Datalog/Tableswitch/Launch установите 'None'. Совет: если входной сигнал — открытый коллектор, используйте внутренний подтягивающий резистор к питанию." knkport_an = "Вход для аналогового сигнала детонации (0–5В). Подключите сюда аналоговый выход внешнего модуля детонации. Более высокое напряжение соответствует более сильной детонации." knk_option_wind = "Режим чтения аналогового сигнала: считывать одно значение в конце окна детонации или определять пиковое значение. Совет: пиковое детектирование (peak detect) обычно даёт более надёжное обнаружение, так как захватывает максимальный уровень сигнала." knk_pin_out = "Опциональный цифровой выход для сигнала окна детонации. Может использоваться для синхронизации с внешним оборудованием или осциллографом для отладки. Совет: полезно при начальной настройке системы детонации для проверки корректности окна." knk_ndet = "Количество событий детонации, которое необходимо обнаружить, прежде чем начнётся коррекция угла. Это защищает от ложных срабатываний. Совет: 2–3 события — хороший компромисс между скоростью реакции и защитой от помех. Для гоночных применений можно установить 1." knk_maxmap = "Отключить коррекцию по детонации выше указанного давления MAP. Совет: при очень высоком наддуве сигнал детонации может быть искажён шумом. Установите значение выше максимального рабочего давления, если хотите, чтобы система работала всегда." knk_lorpm = "Контроль детонации работает выше указанных оборотов. Совет: на низких оборотах (ниже 1500–2000 RPM) механические шумы двигателя часто вызывают ложные срабатывания. Установите порог, ниже которого шум двигателя не спутается с детонацией." knk_hirpm = "Контроль детонации работает ниже указанных оборотов. Совет: на очень высоких оборотах детонация менее вероятна, а шум может вызвать ложные срабатывания. Обычно устанавливают на уровне зоны отсечки или чуть ниже." knk_maxrtd = "Максимальный суммарный отвод угла зажигания при детонации. Совет: 10–15 градусов — типичный предел. Если требуется больший отвод, значит базовая таблица зажигания слишком агрессивна и её нужно пересмотреть." knk_trtd = "Интервал между шагами отвода угла при обнаружении детонации. Совет: короткий интервал (50–100 мс) обеспечивает быструю реакцию. Слишком короткий может привести к чрезмерному отводу угла." knk_step1 = "Величина отвода угла за каждый шаг при первом обнаружении детонации. Установите достаточно большое значение для быстрого подавления детонации. Совет: 2–3 градуса за шаг — типичное значение. Для высокофорсированных моторов можно увеличить до 5 градусов." knk_step2 = "Величина отвода угла за каждый шаг, если детонация возобновляется после остановки. Обычно можно сделать меньше, чем первый шаг, так как угол уже частично отведён. Совет: 1–2 градуса обычно достаточно для повторной коррекции." knk_tadv = "Интервал между шагами возврата угла к нормальному значению после прекращения детонации. Совет: возврат должен быть медленнее, чем отвод. Типичные значения — 200–500 мс между шагами. Это предотвращает слишком быстрый возврат и повторную детонацию." knk_step_adv = "Величина шага возврата опережения после прекращения детонации. Совет: 0.5–1 градус за шаг обеспечивает плавный возврат без риска повторной детонации." knk_dtble_adv = "Если значение в таблице зажигания изменилось на указанную величину — вернуться к нормальному углу, так как двигатель работает в другой области. Совет: 5–10 градусов — типичное значение. Это означает, что при значительном изменении режима работы накопленный отвод сбрасывается." knock_bpass = "Частота полосового фильтра, которая должна соответствовать резонансной частоте детонации вашего двигателя. Совет: резонансная частота зависит от диаметра цилиндра. Для 4-цилиндровых двигателей с диаметром ~80 мм это обычно 6–7 кГц. Используйте формулу: f = 900 / (π × bore_mm / 2 / 1000). Проверьте документацию на ваш двигатель." knock_int = "Длительность окна захвата сигнала детонации. Определяет, как долго сэмплируется сигнал. Совет: окно должно покрывать период после ВМТ, когда детонация наиболее вероятна (примерно 10–70 градусов после ВМТ)." knock_conf_num = "Количество датчиков детонации (1 или 2). Совет: на рядных 4-цилиндровых двигателях обычно достаточно одного датчика. На V-образных и рядных 6-цилиндровых рекомендуется два — по одному на блок/группу цилиндров." knock_conf_launch = "Отключает обнаружение детонации при активном Launch Control, Flat Shift или Anti-Lag, чтобы предотвратить ложное срабатывание. Совет: при launch/anti-lag пропуски зажигания и резкие изменения давления создают шум, который датчик детонации интерпретирует как детонацию. Рекомендуется включить эту опцию." knock_conf_percyl = "Привязка сигнала детонации к номеру цилиндра. Работает только при coil-on-plug (индивидуальные катушки) или последовательном впрыске. Совет: позволяет определить, в каком именно цилиндре происходит детонация, что значительно упрощает диагностику." knock_conf_percylact = "Включает индивидуальную коррекцию угла зажигания по цилиндрам при детонации. Требуется система обратной связи, которая определяет детонацию по цилиндрам (например, встроенный модуль). Совет: это продвинутая функция для максимальной защиты — корректируется только тот цилиндр, в котором обнаружена детонация." knock_conf_debug = "Отладочный режим: запись данных об отводе угла по цилиндрам в переменные 'sensors'. Это перезапишет стандартные значения generic sensor. Совет: используйте временно для настройки системы детонации, затем отключите для нормальной работы." knock_gain01 = "Компенсация чувствительности датчика и расстояния между цилиндром и датчиком. Позволяет выровнять чувствительность для разных цилиндров. Совет: цилиндры, расположенные дальше от датчика, обычно требуют более высокого коэффициента усиления. Настраивайте экспериментально, наблюдая за уровнем сигнала в логах." knock_sens01 = "Выбор датчика для каждого цилиндра (при использовании двух датчиков). Совет: назначьте каждому цилиндру ближайший к нему датчик для наилучшей чувствительности." AE_options = "Выбор между ускорительным обогащением по времени или обогащением в стиле ускорительного насоса. Совет: режим по времени (time-based) проще в настройке. Режим pump-style имитирует работу механического ускорительного насоса и может лучше подходить для двигателей с карбюраторным прошлым." EAEOption = "Включает систему смачивания стенок (wall-wetting) для переходных режимов. Эта модель учитывает плёнку топлива на стенках впускного коллектора. Совет: EAE (Enhanced Accel Enrichment) даёт более точный расчёт обогащения при переходных режимах, но требует более тщательной настройки. Начните с базового ускорительного обогащения, затем переходите к EAE." feature7_aetpswot = "Включает кривую, моделирующую эффективную 100% TPS для данных оборотов. Это позволяет малым движениям дросселя на низких оборотах вызывать более активный отклик, а движения дросселя выше порога 'полного открытия' игнорируются. Совет: полезно для двигателей с большой дроссельной заслонкой, где полное открытие на низких оборотах не добавляет воздуха." mapThresh = "Порог срабатывания обогащения по скорости изменения MAP (MAPdot). Обогащение включается при превышении этого значения. Совет: начните с 20–30 кПа/сек. Слишком низкий порог вызовет ложные срабатывания, слишком высокий — задержку отклика на резкое открытие дросселя." aeEndPW = "После основного импульса обогащения — убавить обогащение до этого значения. Рекомендуется 0. Ненулевое значение может привести к переобогащению в конце переходного режима." feature7_aeevents = "Длительность импульса обогащения измеряется в событиях зажигания или в секундах. Действует на основное и вторичное топливо. Совет: измерение в событиях лучше масштабируется с оборотами. Измерение в секундах даёт фиксированное время обогащения." tpsasync_events = "Длительность импульса ускорительного обогащения (в событиях или секундах, в зависимости от настройки). Совет: 3–6 событий — типичное начальное значение. Настраивайте по отклику двигателя на резкое нажатие педали газа." tpsasync2_events = "Длительность затухания (taper) ускорительного обогащения. Определяет, как быстро обогащение уменьшается после основного импульса. Совет: 3–10 событий обычно достаточно. Более длительное затухание помогает при провалах в конце ускорения." taeTime = "Длительность основного импульса ускорительного обогащения. Совет: начните с 0.5–1.0 секунды и корректируйте по реакции двигателя. Короткий импульс — для двигателей с хорошим распылением форсунок, более длинный — для портовых форсунок с худшим распылением." aeTaperTime = "Длительность затухания после основного импульса обогащения. Рекомендуется 0. При ненулевом значении обогащение плавно уменьшается после основного импульса, что может быть полезно для предотвращения провалов." tpsThresh = "Порог срабатывания обогащения по скорости изменения TPS (TPSdot). Обогащение включается при превышении этого значения. Совет: начните с 5–10 %/сек. Подберите так, чтобы медленное нажатие на педаль не вызывало обогащения, а резкое — вызывало." tdePct = "Величина отсечки топлива при торможении двигателем, в процентах. 100% = нет отсечки, 0% = полная отсечка топлива. Рекомендуется 100% (без отсечки) для начала. Отсечка при торможении улучшает экономичность и снижает выбросы, но требует аккуратной настройки, чтобы не было рывков при сбросе газа." taeColdA = "При полностью холодном двигателе (-40°C) — добавить указанную величину к ускорительному обогащению. Совет: холодный двигатель требует больше топлива при ускорении из-за худшего испарения. Типичные значения: 1–3 мс дополнительной ширины импульса." taeColdM = "При полностью холодном двигателе (-40°C) — умножить ускорительное обогащение на указанный процент. Совет: используйте 150–200% для холодного пуска. Это компенсирует плохое испарение топлива на холодных стенках коллектора." ae_lorpm2 = "Ниже указанных оборотов — полное ускорительное обогащение для второго топлива. Совет: на низких оборотах двигатель более чувствителен к обеднению при ускорении, поэтому полное обогащение оправдано." ae_hirpm2 = "Выше указанных оборотов — ускорительное обогащение для второго топлива отключается. Между нижним и верхним порогами обогащение плавно уменьшается. Совет: на высоких оборотах топливовоздушная смесь перемешивается лучше и обогащение менее необходимо." tpsProportion = "Баланс между MAPdot и TPSdot для ускорительного обогащения. 0% = полностью MAPdot, 100% = полностью TPSdot. Совет: для двигателей с Alpha-N (TPS-based) используйте 100%. Для Speed Density (MAP-based) — 0–30%. Для смешанного режима — 50–70%. MAPdot лучше отражает реальное наполнение, TPSdot быстрее реагирует." mapThresh2 = "Порог MAPdot для ускорительного обогащения второго топлива. Обогащение включается при превышении этого значения. Совет: настраивайте аналогично основному порогу MAPdot, но учитывайте особенности второго топлива." aeEndPW2 = "После основного импульса обогащения (второе топливо) — убавить обогащение до этого значения. Рекомендуется 0." taeTime_events2 = "Длительность импульса ускорительного обогащения (второе топливо) в событиях. Совет: настраивайте аналогично основному топливу, учитывая характеристики второго топлива." aeTaperTime_events2 = "Длительность затухания ускорительного обогащения (второе топливо) в событиях. Совет: если используете спиртовое топливо, может потребоваться более длительное затухание." taeTime2 = "Длительность основного импульса ускорительного обогащения (второе топливо). Совет: спиртовые топлива (метанол, этанол) могут требовать значительно более длинных импульсов из-за меньшей теплотворной способности." aeTaperTime2 = "Длительность затухания после основного импульса обогащения (второе топливо). Рекомендуется 0." tpsThresh2 = "Порог TPSdot для ускорительного обогащения второго топлива. Совет: настраивайте аналогично основному порогу TPSdot." tdePct2 = "Величина отсечки топлива при торможении двигателем для второго топлива, в процентах. 100% = нет отсечки, 0% = полная отсечка. Рекомендуется 100% для начальной настройки." taeColdA2 = "При полностью холодном двигателе (-40°C) — добавить указанную величину к ускорительному обогащению (второе топливо). Совет: для газового топлива (LPG) эта добавка обычно не нужна, для спиртового — может потребоваться увеличенная." taeColdM2 = "При полностью холодном двигателе (-40°C) — умножить ускорительное обогащение (второе топливо) на указанный процент. Совет: для метанола используйте более высокий множитель (200–300%), так как его теплота испарения значительно выше бензина." ae_lorpm2 = "Ниже указанных оборотов — полное ускорительное обогащение для второго топлива. Совет: на низких оборотах двигатель более чувствителен к обеднению при ускорении, поэтому полное обогащение оправдано." ae_hirpm2 = "Выше указанных оборотов — ускорительное обогащение для второго топлива отключается. Между нижним и верхним порогами обогащение плавно уменьшается. Совет: на высоких оборотах топливовоздушная смесь перемешивается лучше и обогащение менее необходимо." tpsProportion2 = "Баланс между MAPdot и TPSdot для ускорительного обогащения второго топлива. 0% = полностью MAPdot, 100% = полностью TPSdot. Совет: настраивайте аналогично основному топливу." accel_mapdot_threshold = "Порог MAPdot для срабатывания ускорительного обогащения (EAE-режим). Совет: для атмосферных двигателей 15–25 кПа/сек, для турбированных — 30–50 кПа/сек." accel_tpsdot_threshold = "Порог TPSdot для срабатывания ускорительного обогащения (EAE-режим). Совет: 5–15 %/сек — типичный начальный диапазон." accel_CLT_multiplier = "При полностью холодном двигателе (-40°C) — умножить ускорительное обогащение на указанный процент (EAE-режим). Совет: 150–200% для компенсации плохого испарения на холодном двигателе." accel_blend_percent = "Баланс между MAPdot и TPSdot для ускорительного обогащения (EAE-режим). 0% = полностью MAPdot, 100% = полностью TPSdot. Совет: для Speed Density используйте преимущественно MAPdot (0–30%), для Alpha-N — TPSdot (70–100%)." accel_mapdot_threshold2 = "Порог MAPdot для ускорительного обогащения второго топлива (EAE-режим). Совет: настраивайте аналогично основному топливу." accel_tpsdot_threshold2 = "Порог TPSdot для ускорительного обогащения второго топлива (EAE-режим). Совет: настраивайте аналогично основному топливу." accel_CLT_multiplier2 = "При полностью холодном двигателе (-40°C) — умножить ускорительное обогащение (второе топливо) на указанный процент (EAE-режим). Совет: для LPG поправка минимальна, для этанола — увеличенная." accel_blend_percent2 = "Баланс между MAPdot и TPSdot для ускорительного обогащения второго топлива (EAE-режим). 0% = полностью MAPdot, 100% = полностью TPSdot. Совет: настраивайте аналогично основному топливу, с учётом алгоритма нагрузки." als_in_pin = "Включает систему Anti-Lag и выбирает вход активации. Anti-Lag поддерживает давление наддува при закрытом дросселе, подавая топливо и искру с задержкой для воспламенения смеси в выпускном коллекторе. Внимание: система значительно повышает термическую нагрузку на турбину и выпускной коллектор! Используйте только на гоночных автомобилях с соответствующими компонентами." als_maxtps = "Отключить Anti-Lag выше указанного значения TPS. Совет: обычно 5–15%. Anti-Lag не нужен при открытом дросселе, так как турбина раскручивается нормальным потоком выхлопных газов." als_minrpm = "Отключить Anti-Lag ниже указанных оборотов. Совет: установите выше оборотов холостого хода (обычно 3000–4000 RPM). На низких оборотах Anti-Lag бесполезен и может навредить двигателю." als_maxrpm = "Отключить Anti-Lag выше указанных оборотов. Совет: установите на уровне максимальных рабочих оборотов. На высоких оборотах турбина уже раскручена и Anti-Lag не нужен." als_maxmat = "Отключить Anti-Lag при температуре воздуха во впускном коллекторе выше указанного значения. Совет: это защита от перегрева. Типичный предел — 60–80°C. При превышении есть риск повреждения интеркулера и впускного тракта." als_maxtime = "Максимальное время непрерывной работы Anti-Lag для снижения термической нагрузки. Совет: 5–15 секунд — типичный предел. Длительная работа ALS может повредить турбину, выпускной коллектор и катализатор (если есть)." als_pausetime = "Минимальное время между активациями Anti-Lag для снижения термической нагрузки. Совет: 5–10 секунд — минимальная пауза. Это даёт компонентам выпускной системы время остыть." als_minclt = "Отключить Anti-Lag при температуре охлаждающей жидкости ниже указанного значения. Совет: двигатель должен быть полностью прогрет (обычно > 70°C) перед активацией ALS." als_maxclt = "Отключить Anti-Lag при температуре охлаждающей жидкости выше указанного значения. Совет: защита от перегрева двигателя. Типичный предел — 100–105°C." als_opt_fc = "Использовать циклическую отсечку топлива в режиме Anti-Lag. ТОЛЬКО для последовательного впрыска. Совет: отсечка топлива по цилиндрам позволяет несгоревшему топливу попасть в выпускной коллектор, где оно воспламеняется от горячих газов и поддерживает давление наддува." als_opt_sc = "Использовать циклическую отсечку искры в режиме Anti-Lag. Совет: пропуск искры в отдельных цилиндрах создаёт несгоревшую смесь в выпускном коллекторе, которая воспламеняется от соседних цилиндров и поддерживает давление наддува." als_opt_ri = "Использовать плавающую отсечку топлива на холостом ходу в режиме Anti-Lag. Совет: эта функция помогает подать дополнительный воздух к турбине при закрытом дросселе." als_opt_idle = "Активирует клапан холостого хода в режиме Anti-Lag. Совет: открытие клапана ХХ обеспечивает дополнительный поток воздуха через турбину при закрытом дросселе, что помогает поддерживать давление наддува." als_iac_duty = "Скважность клапана ХХ для подачи дополнительного воздуха в режиме Anti-Lag. Совет: 50–80% — типичный диапазон. Подбирайте по уровню поддерживаемого давления наддува." als_iac_steps = "Количество шагов шагового мотора клапана ХХ для подачи дополнительного воздуха в режиме Anti-Lag. Совет: откройте клапан достаточно для обеспечения потока воздуха, но не полностью — избыточный воздух может помешать воспламенению в выпускном коллекторе." als_out_pin = "Дополнительный цифровой выход в режиме Anti-Lag для управления клапаном подачи воздуха. Совет: используется для внешнего электромагнитного клапана, который открывает дополнительный канал воздуха мимо дроссельной заслонки." als_opt_pwmout = "Включает дополнительный PWM-выход в режиме Anti-Lag. Совет: может использоваться для управления пропорциональными клапанами или другими исполнительными механизмами." als_pwm_opt2 = "PWM-выход для Anti-Lag. Выберите выход, который будет управляться сигналом ШИМ в режиме Anti-Lag." als_pwm_duty = "Скважность PWM-выхода при активном Anti-Lag. Совет: подбирайте экспериментально в зависимости от конкретного клапана и требуемого потока воздуха." als_pwm_opt_freq = "Частота PWM-выхода для Anti-Lag. Совет: зависит от типа управляемого клапана. Электромагнитные клапаны обычно работают на 10–30 Гц." vvt_opt1_on = "Включает управление фазовращателями (VVT) и выбирает количество управляемых распредвалов. Совет: убедитесь, что у вас есть датчик(и) положения распредвала и соответствующие соленоиды. VVT позволяет оптимизировать фазы газораспределения для разных режимов работы." vvt_startdelay = "Задержка активации VVT после запуска двигателя для создания масляного давления. Совет: 2–5 секунд — типичная задержка. Фазовращатели работают на масляном давлении, и до его достижения управление будет неэффективным. На двигателях с электрическими VVT задержка не нужна." vvt_opt1_filter = "Включает фильтрацию зубцов VVT для отсечки ложных срабатываний от шума. Совет: включите, если наблюдаются нестабильные показания угла кулачкового вала, особенно на холостом ходу." vvt_opt4_decode = "Включает специальный декодер, если применимо. Декодер BMW S54 также поддерживает S62. Подключите основные выходы VVT к соленоидам открытия (1), а комплементарные выходы — к соленоидам закрытия (2). Используйте частоту 20 Гц. Совет: двойные соленоиды VANOS (открытие/закрытие) обеспечивают точный контроль положения, но требуют правильной проводки." vvt_opt6_freq = "Частота PWM для соленоида VVT. Совет: зависит от конструкции соленоида. Типичные значения: 100–300 Гц для обычных соленоидов, 20 Гц для VANOS BMW. Слишком высокая частота может вызвать перегрев соленоида, слишком низкая — шум и вибрацию." vvt_opt2_pid2 = "Выбор между простым режимом вкл/выкл и пропорциональным управлением положением (PID). Совет: режим вкл/выкл подходит для систем с двумя фиксированными положениями (например, Honda VTEC). PID — для систем с плавной регулировкой (например, Toyota VVT-i, BMW VANOS)." vvt_opt5_add1 = "Корректировать ли угол впрыска на основе положения кулачкового вала и какого именно. Совет: если впускной распредвал смещается на 30°, то и момент впрыска нужно скорректировать на те же 30° для оптимальной подачи топлива." vvt_opt5_add2 = "При корректировке угла впрыска — использовать целевое или фактическое текущее положение кулачкового вала. Совет: фактическое положение точнее, но может вносить шум. Целевое — более стабильно, но при рассогласовании может быть менее точным." vvt_onoff_ang = "Угол опережения впрыска при активном VVT (режим вкл/выкл). Совет: должен соответствовать фактическому смещению кулачкового вала при активации VVT." vvt_opt7_yaxis = "Единица нагрузки для оси Y в таблицах VVT. Совет: используйте ту же единицу нагрузки, что и в основных таблицах (MAP kPa для Speed Density, TPS% для Alpha-N)." vvt_opt1_int = "Интервал расчётов VVT. Синхронизация с кулачковым валом — наиболее типичный вариант, расчёт выполняется при каждом прохождении зуба мимо датчика. Совет: синхронизированный режим обеспечивает максимальную точность и рекомендуется в большинстве случаев." vvt_ctl_ms = "Фиксированный интервал расчёта VVT в миллисекундах. Совет: используйте, если синхронизация с кулачковым валом недоступна. 10–50 мс — типичный диапазон." vvt_opt5_err = "Применять ли проверку ошибок к измеренным углам кулачкового вала. Совет: включите для защиты от аномальных показаний, которые могут быть вызваны помехами или пропущенными зубцами." vvt_opt1_tst = "Выбор выхода VVT для тестирования. Совет: используйте тестовый режим для проверки работоспособности соленоида и правильности подключения перед настройкой PID." vvt_test_duty = "Скважность, подаваемая на соленоид VVT в тестовом режиме. Совет: начните с 0% и постепенно увеличивайте, наблюдая за движением кулачкового вала в логах. Это поможет определить направление движения и диапазон хода." vvt_opt2_use_hold_intake = "Некоторые системы VVT удерживают фиксированное положение при определённой скважности. Включите эту опцию для таких систем. Совет: применяется, например, к некоторым системам Toyota VVT-i. Если у вашей системы нет фиксированной скважности удержания — оставьте выключенным." vvt_hold_duty = "Скважность удержания положения VVT. Совет: определяется экспериментально — это скважность, при которой кулачковый вал не движется. Обычно 30–50% для систем с пружинным возвратом." vvt_ctl_Kp = "Пропорциональный коэффициент PID-регулятора VVT. Управляет мгновенной реакцией скважности на разницу между целевым и фактическим положением. Совет: начните с малого значения (1–5) и увеличивайте, пока кулачковый вал не начнёт следовать за целью. Слишком высокое значение — колебания вокруг цели." vvt_ctl_Ki = "Интегральный коэффициент PID-регулятора VVT. Устраняет постоянную ошибку позиционирования: чем дольше вал отклонён от цели, тем сильнее реакция. Совет: начните с 0.1–0.5. Слишком высокое значение вызовет медленные колебания. Ki устраняет статическую ошибку, которую Kp не может компенсировать." vvt_ctl_Kd = "Дифференциальный коэффициент PID-регулятора VVT. Демпфирует быстрые изменения ошибки, предотвращая перерегулирование. Совет: начните с 0 и добавляйте понемногу (0.1–1.0) только если есть перерегулирование (overshoot). Слишком высокое значение делает систему дёрганой." vvt_opt2_use_hold_exhaust = "Некоторые системы VVT удерживают фиксированное положение выпускного распредвала при определённой скважности. Совет: аналогично впускному — включите, если ваша система VVT поддерживает удержание. Для систем без фиксированной скважности удержания — оставьте выключенным." vvt_hold_duty_exh = "Скважность удержания положения выпускного распредвала. Совет: определяется экспериментально. Может отличаться от впускного из-за разной конструкции фазовращателей." vvt_ctl_Kp_exh = "Пропорциональный коэффициент PID-регулятора для выпускного распредвала. Управляет мгновенной реакцией скважности на ошибку позиционирования. Совет: настройка аналогична впускному. Начните с малого значения и увеличивайте, контролируя стабильность." vvt_ctl_Ki_exh = "Интегральный коэффициент PID-регулятора для выпускного распредвала. Устраняет постоянную ошибку позиционирования. Совет: выпускной распредвал может требовать других значений Ki из-за разного гидравлического сопротивления фазовращателя." vvt_ctl_Kd_exh = "Дифференциальный коэффициент PID-регулятора для выпускного распредвала. Демпфирует быстрые изменения ошибки. Совет: как и для впускного — начните с 0, добавляйте при наличии перерегулирования." vvt_opt1_dir_exhaust = "Таблица выпускного распредвала содержит углы опережения (старый метод) или углы запаздывания (соответствует большинству выпускных VVT). Совет: большинство выпускных VVT работают на запаздывание — выберите 'retard table' для корректной работы." vvt_opt3_cam1 = "Cam1 — всегда основной вход датчика распредвала. Совет: обычно это впускной распредвал. Убедитесь, что сигнал чистый и стабильный на всех оборотах." vvt_opt2_cam1pol = "Полярность захвата Cam1 определяется на странице Ignition Options. Совет: если показания угла нестабильны — проверьте правильность полярности." vvt_tth1 = "Количество эффективных зубцов на задающем колесе Cam1. Совет: для одного выступа на распредвале = 1. Некоторые двигатели имеют несколько зубцов для более точного определения положения." vvt_out1 = "Выход управления соленоидом VVT1. Совет: убедитесь, что выход способен обеспечить достаточный ток для соленоида. Большинство соленоидов VVT потребляют 0.5–2А." vvt_min_ang1 = "Минимальный абсолютный угол от датчика Cam1. Совет: определяется при тестировании VVT с минимальной скважностью. Запишите показания угла из лога." vvt_max_ang1 = "Максимальный абсолютный угол от датчика Cam1. Совет: определяется при тестировании VVT с максимальной скважностью. Диапазон между min и max определяет полный ход фазовращателя." vvt_opt5_vvt1 = "Указывает, является ли данный распредвал впускным или выпускным. Совет: правильная настройка важна для корректной коррекции угла впрыска и интерпретации таблиц." vvt_cam1tth1 = "Специфично для конкретного применения — искать зуб распредвала после этого зуба коленвала. Совет: определяется из документации на двигатель или экспериментально. Неправильное значение приведёт к ошибочным показаниям угла." vvt_cam1tth2 = "Специфично для конкретного применения — искать зуб распредвала после этого зуба коленвала. Совет: второй опорный зуб для более точного определения положения (если применимо)." vvt_out1_dir = "Направление движения распредвала при увеличении скважности выхода. Совет: определите экспериментально в тестовом режиме. Увеличьте скважность и наблюдайте, в какую сторону движется угол." vvt_opt3_cam2 = "Вход для датчика второго распредвала (Cam2). Совет: на двигателях с DOHC обычно второй датчик ставится на выпускной распредвал." vvt_opt2_cam2pol = "Полярность захвата для Cam2. Совет: если угол распредвала неожиданно меняется с оборотами, когда вал стоит на месте — попробуйте сменить полярность." vvt_tth2 = "Количество эффективных зубцов на задающем колесе Cam2. Совет: должно соответствовать фактическому количеству зубцов на задающем колесе второго распредвала." vvt_out2 = "Выход управления соленоидом VVT2. Совет: используйте выход с достаточной токовой нагрузкой для вашего соленоида." vvt_min_ang2 = "Минимальный абсолютный угол от датчика Cam2. Совет: определяется при тестировании аналогично Cam1." vvt_max_ang2 = "Максимальный абсолютный угол от датчика Cam2. Совет: определяется при тестировании аналогично Cam1." vvt_opt5_vvt2 = "Указывает, является ли данный распредвал впускным или выпускным. Совет: выберите корректный тип для правильной работы коррекций." vvt_cam2tth1 = "Специфично для конкретного применения — искать зуб распредвала после этого зуба коленвала. Совет: см. документацию на двигатель или определите экспериментально." vvt_cam2tth2 = "Специфично для конкретного применения — искать зуб распредвала после этого зуба коленвала. Совет: второй опорный зуб (если применимо)." vvt_out2_dir = "Направление движения распредвала при увеличении скважности выхода VVT2. Совет: проверьте в тестовом режиме перед настройкой PID." vvt_opt3_cam3 = "Вход для датчика третьего распредвала (Cam3). Совет: используется на V-образных двигателях с DOHC для управления вторым блоком цилиндров." vvt_opt2_cam3pol = "Полярность захвата для Cam3. Совет: если угол распредвала неожиданно меняется с оборотами, когда вал стоит на месте — попробуйте сменить полярность." vvt_tth3 = "Количество эффективных зубцов на задающем колесе Cam3. Совет: должно соответствовать фактическому количеству зубцов." vvt_out3 = "Выход управления соленоидом VVT3. Совет: на V-образных двигателях это обычно впускной или выпускной распредвал второго блока." vvt_min_ang3 = "Минимальный абсолютный угол от датчика Cam3. Совет: определяется при тестировании аналогично другим каналам." vvt_max_ang3 = "Максимальный абсолютный угол от датчика Cam3. Совет: определяется при тестировании аналогично другим каналам." vvt_opt5_vvt3 = "Указывает, является ли данный распредвал впускным или выпускным. Совет: правильная настройка важна для корректной интерпретации данных." vvt_cam3tth1 = "Специфично для конкретного применения — искать зуб распредвала после этого зуба коленвала. Совет: см. документацию на двигатель." vvt_cam3tth2 = "Специфично для конкретного применения — искать зуб распредвала после этого зуба коленвала. Совет: второй опорный зуб (если применимо)." vvt_out3_dir = "Направление движения распредвала при увеличении скважности выхода VVT3. Совет: определите в тестовом режиме." vvt_opt3_cam4 = "Вход для датчика четвёртого распредвала (Cam4). Совет: используется на V-образных двигателях с DOHC и VVT на всех четырёх распредвалах." vvt_opt2_cam4pol = "Полярность захвата для Cam4. Совет: если угол распредвала неожиданно меняется с оборотами, когда вал стоит на месте — попробуйте сменить полярность." vvt_tth4 = "Количество эффективных зубцов на задающем колесе Cam4. Совет: должно соответствовать фактическому количеству зубцов." vvt_out4 = "Выход управления соленоидом VVT4. Совет: четвёртый канал VVT обычно используется для выпускного распредвала второго блока V-образного двигателя." vvt_min_ang4 = "Минимальный абсолютный угол от датчика Cam4. Совет: определяется при тестировании." vvt_max_ang4 = "Максимальный абсолютный угол от датчика Cam4. Совет: определяется при тестировании." vvt_opt5_vvt4 = "Указывает, является ли данный распредвал впускным или выпускным. Совет: правильная настройка важна для корректной работы системы." vvt_cam4tth1 = "Специфично для конкретного применения — искать зуб распредвала после этого зуба коленвала. Совет: см. документацию на двигатель." vvt_cam4tth2 = "Специфично для конкретного применения — искать зуб распредвала после этого зуба коленвала. Совет: второй опорный зуб (если применимо)." vvt_out4_dir = "Направление движения распредвала при увеличении скважности выхода VVT4. Совет: определите в тестовом режиме." vvt_minclt = "VVT работает только при температуре охлаждающей жидкости выше указанного значения. Совет: установите 40–60°C. Масляное давление и вязкость масла на холодном двигателе не обеспечивают стабильную работу фазовращателей." vvt_minduty1 = "Минимальная скважность для соленоидов VVT. Совет: установите значение, ниже которого соленоид не реагирует. Обычно 5–15%. Это предотвращает подачу слишком малого тока, который не перемещает вал, но нагревает соленоид." vvt_maxduty1 = "Максимальная скважность для соленоидов VVT. Совет: обычно 90–100%. Ограничение максимальной скважности может предотвратить перерегулирование на некоторых системах." vvt_slew = "Ограничение скорости изменения целевого угла VVT для уменьшения перерегулирования, вызванного резкими изменениями цели или низким давлением масла на малых оборотах. По умолчанию 2.0 градуса за событие кулачкового вала. Совет: уменьшите, если наблюдается значительное перерегулирование при быстрых переходах." vvt_softout1 = "Комплементарный (закрывающий) выход соленоида для двухсоленоидных систем VANOS (BMW S54, S62). Совет: в системах с двойным соленоидом один управляет открытием, другой — закрытием фазовращателя. Это обеспечивает точный и быстрый контроль." vvt_softout2 = "Комплементарный (закрывающий) выход соленоида для двухсоленоидных систем VANOS (BMW S54, S62). Совет: подключите к закрывающему соленоиду второго кулачкового вала." vvt_softout3 = "Комплементарный (закрывающий) выход соленоида для двухсоленоидных систем VANOS (BMW S54, S62). Совет: для третьего кулачкового вала (второй блок V-образного двигателя)." vvt_softout4 = "Комплементарный (закрывающий) выход соленоида для двухсоленоидных систем VANOS (BMW S54, S62). Совет: для четвёртого кулачкового вала." f5_0_tsf = "Включает переключение таблиц топлива. Совет: позволяет переключаться между двумя таблицами VE — например, для разного топлива, режимов «эконом/спорт» или для переключения между атмосферным и наддувным режимами." f5_0_tsf_opt = "Hardware = физический переключатель или кривая плавного перехода (blend). RPM, kPa, TPS — автоматическое переключение при превышении порога, заданного ниже. Совет: blend-кривая позволяет плавно переходить между таблицами, что предотвращает рывки при переключении." tsw_pin_f = "Вход переключения таблицы топлива. Совет: подключите тумблер или используйте выход кнопки на руле. Проверьте логику входа (активный высокий/низкий)." tsf_rpm = "Порог по оборотам для автоматического переключения таблицы топлива. Совет: используется при выборе режима RPM. Выше этого значения активируется вторая таблица." tsf_kpa = "Порог по давлению во впускном коллекторе (кПа) для переключения таблицы топлива. Совет: полезно для переключения таблиц при выходе в наддув (например, при 100+ кПа)." tsf_tps = "Порог по TPS для переключения таблицы топлива. Совет: переключение по положению дросселя — простой способ активировать «мощностную» таблицу при полном газе." f5_0_tss = "Включает переключение таблиц зажигания. Совет: полезно для переключения между «безопасной» таблицей с консервативными углами и «агрессивной» для гонок на качественном топливе." f5_0_tss_opt = "Hardware = физический переключатель или кривая плавного перехода. RPM, kPa, TPS — автоматическое переключение по порогу. Совет: для турбо-двигателей часто используют переключение по MAP — более агрессивные углы на атмосферном режиме, консервативные — под наддувом." tsw_pin_s = "Вход переключения таблицы зажигания. Совет: может быть на том же переключателе, что и таблица топлива, если нужно синхронное переключение." tss_rpm = "Порог по оборотам для переключения таблицы зажигания. Совет: выше этого значения активируется вторая таблица зажигания." tss_kpa = "Порог по давлению (кПа) для переключения таблицы зажигания. Совет: на наддувных двигателях — переключение на более консервативную таблицу при высоком буст-давлении." tss_tps = "Порог по TPS для переключения таблицы зажигания. Совет: переключение по положению дросселя для активации другой таблицы при полном газе." tsw_pin_rf = "Включает вход переключения ReqFuel (требуемое топливо). Совет: ReqFuel — базовый параметр расчёта ширины импульса впрыска. Переключение полезно при смене типа форсунок или топлива." ReqFuel_alt = "Альтернативное значение ReqFuel при активном переключении. Совет: рассчитайте правильное значение ReqFuel для альтернативной конфигурации форсунок или топлива." tsw_pin_afr = "Включает вход переключения таблицы AFR. Совет: позволяет переключаться между целевыми таблицами AFR — например, «экономичная» и «мощностная» смесь." tsw_pin_stoich = "Включает вход переключения стехиометрии. Совет: при переходе на другое топливо (бензин → этанол) стехиометрическое соотношение меняется (14.7 → 9.0). Эта функция позволяет переключать значение." stoich_alt = "Альтернативное значение стехиометрии при активном переключении. Совет: бензин = 14.7, E85 = 9.76, этанол = 9.0, метанол = 6.4, LPG = 15.5. Введите значение для вашего альтернативного топлива." dualfuel_sw_on = "Включает поддержку двойного топлива (например, LPG или дополнительное гоночное топливо на отдельной системе). Совет: используется для автомобилей с газобаллонным оборудованием или с системой впрыска метанола/воды под наддувом." dualfuel_opt_mode = "Switching = переключение с топлива 1 на топливо 2. Dual Table = параллельные таблицы топлива для одновременного управления двумя видами топлива (например, впрыск метанола под наддувом). Flex Blend = процент этанола от датчика Flex Fuel используется для плавного перехода между двумя наборами таблиц. Совет: Flex Blend идеален для автомобилей, которые заправляются смесями E0–E85 в любых пропорциях." dualfuel_opt_out = "Shared outputs = два набора форсунок подключены к одним управляющим выходам ECU, переключение питания +12В через реле. Different outputs = каждый набор форсунок подключён к отдельным выходам ECU. Совет: разные выходы дают более гибкое управление, но требуют больше свободных выходов на ECU." dualfuel_pin = "Вход для переключения двойного топлива. Совет: подключите тумблер, кнопку или автоматический переключатель (например, от газового редуктора). Проверьте активный уровень сигнала." dualfuel_sw_fuel = "Переключать ли таблицы топлива при смене режима. Совет: практически всегда нужно включить — разные виды топлива требуют разных таблиц VE." dualfuel_sw_spk = "Переключать ли таблицы зажигания при смене режима. Совет: включите, если разные виды топлива имеют разную скорость горения (например, бензин vs этанол). Этанол позволяет более агрессивные углы зажигания." dualfuel_sw_afr = "Переключать ли таблицы целевого AFR при смене режима. Совет: разные виды топлива имеют разные оптимальные AFR. Бензин: 12.5–13.0 для мощности, этанол: 8.0–8.5." dualfuel_sw_rf = "Переключать ли ReqFuel при смене режима. Совет: включите, если форсунки или давление топлива отличаются для разных видов топлива." dualfuel_sw_stoich = "Переключать ли значение стехиометрии при смене режима. Совет: обязательно включите при переходе между бензином и спиртовым/газовым топливом, так как стехиометрические соотношения сильно отличаются." dualfuel_sw_wue = "Переключать ли кривые прогрева (WUE) при смене режима. Совет: включите, если альтернативное топливо требует другого обогащения при прогреве (например, этанол требует больше топлива на холодную)." dualfuel_sw_ase = "Переключать ли кривые послепусковых обогащений (ASE) при смене режима. Совет: спиртовые топлива обычно требуют более длительных и обильных послепусковых обогащений." dualfuel_sw2_prime = "Переключать ли кривые пускового импульса (prime) при смене режима. Совет: этанол и метанол требуют значительно большего пускового импульса, особенно на холодную." dualfuel_sw2_crank = "Переключать ли кривые ширины импульса при прокрутке стартером (cranking PW) при смене режима. Совет: включите для спиртовых топлив — они требуют в 1.5–2 раза больше топлива при пуске." dualfuel_sw2_injp = "Переключать ли параметры форсунок при смене режима. Совет: если используются разные форсунки для разных топлив — нужно переключать мёртвое время (dead time) и другие параметры." dualfuel_sw2_smpw = "Переключать ли кривые малых импульсов (small pulsewidth) при смене режима. Совет: разные форсунки имеют разные характеристики нелинейности на малых импульсах." dualfuel_sw2_ob = "Переключать ли лимиты превышения наддува (overboost) при смене режима. Совет: на спиртовом топливе можно допустить более высокое давление наддува благодаря лучшему охлаждению заряда." dualfuel_sw2_boosw = "Переключать ли таблицы наддува при смене режима. Совет: включите, если целевое давление наддува отличается для разных видов топлива." dualfuel_sw2_ae = "Переключать ли настройки ускорительного обогащения при смене режима. Совет: разные виды топлива имеют разные характеристики испарения, что влияет на требуемое ускорительное обогащение." dualfuel_opt_temp = "Включить коррекцию по температуре вторичного топлива. Совет: температура газового топлива (LPG, CNG) значительно влияет на его плотность и, следовательно, на требуемую ширину импульса." dualfuel_temp_sens = "Вход Generic Sensor для датчика температуры вторичного топлива. Совет: установите датчик температуры на топливной рампе или рядом с форсунками вторичного топлива." dualfuel_opt_press = "Включить коррекцию по давлению вторичного топлива. Совет: давление газового топлива может значительно варьироваться. Коррекция обеспечивает точную топливоподачу при изменении давления." dualfuel_press_sens = "Вход Generic Sensor для датчика давления вторичного топлива. Совет: установите датчик давления на топливной рампе вторичного топлива." dualfuel_press_type = "Тип датчика давления: Gauge (относительное), Absolute (абсолютное), Differential (дифференциальное). Совет: для газовых форсунок с отдельной рампой обычно используется Gauge. Для систем с обраткой — Differential." slew_opts_tss = "Включить ограничение скорости нарастания угла опережения при увеличении угла сразу после переключения таблицы зажигания. Полезно для предотвращения резких скачков крутящего момента. Совет: включите при использовании переключения таблиц, если разница между ними значительна (более 5–10 градусов)." slew_rate_global = "Максимальная скорость увеличения опережения зажигания в градусах за 0.1 секунды в режиме ограничения скорости. Совет: 2–5 градусов за 0.1 сек — типичное значение. Меньше = более плавное нарастание = меньше рывок, но медленнее отклик." vss_opt0_1 = "Тип подключения датчика скорости (VSS1). Digital = импульсный вход или захват с платы расширения. Analogue = аналоговый вход 0–5В, напрямую отражающий скорость (редко используется). Совет: большинство автомобильных датчиков скорости — цифровые (импульсные). Аналоговые встречаются только в специальных применениях." vss1_an = "Вход для аналогового датчика скорости 0–5В (VSS1). Совет: убедитесь, что аналоговый вход откалиброван для диапазона скоростей вашего автомобиля." vss1_an_max = "Скорость, соответствующая входному сигналу 5В. Совет: определите из документации на датчик. Например, если при 200 км/ч датчик выдаёт 5В — введите 200." vss_opt1 = "Выбор цифрового импульсного входа или входа через CAN от платы расширения. Совет: CAN используется, когда датчик скорости подключён к внешнему модулю (GPIO board). Прямой вход — для подключения непосредственно к ECU." wheeldia1 = "Общий диаметр колеса с шиной (в дюймах или мм, в зависимости от настроек единиц). Совет: измерьте фактический наружный диаметр колеса с накачанной шиной. Или рассчитайте: диаметр диска (дюймы) × 25.4 + 2 × высота профиля шины (мм)." vss1_pos = "Расположение зубцов датчика скорости: - Directly on wheel — на колесе - On driveline/trans — на трансмиссии/приводном валу - Pulses per mile — импульсов на милю - Pulses per km — импульсов на км. Совет: при установке на трансмиссии учитывается передаточное число главной передачи." reluctorteeth1 = "Количество зубцов на задающем колесе датчика скорости. Совет: если датчик на ступице — посчитайте зубцы на роторе ABS (обычно 44–48). На КПП — зависит от конкретной модели (обычно 6–21 зубец)." vss1_pwmseq = "CAN PWM-порт для захвата данных от платы расширения. Совет: используйте соответствующий номер порта, настроенный на плате расширения GPIO." vss1_can_scale = "Масштабный коэффициент для пересчёта единиц. MS3 использует 0.1 м/с² внутренне, для пересчёта из 0.1 mph используйте 45.6%. Совет: правильный масштабный коэффициент обеспечивает точные показания скорости." vss1_can_scale_pulse = "Количество импульсов на милю/км. Совет: зависит от конкретного датчика. Типичное значение для GM VSS — 4000 импульсов на милю." vss1LF = "Коэффициент сглаживания. 100% = без сглаживания, 15% = максимальное сглаживание. Совет: для гладкого сигнала используйте 100%. Для зашумлённых датчиков или неровных дорог — 30–50%. Чрезмерное сглаживание увеличивает задержку показаний." vss_opt0_2 = "Тип подключения датчика скорости (VSS2). Digital = импульсный вход или захват с платы расширения. Analogue = аналоговый вход 0–5В. Совет: второй датчик скорости обычно используется для контроля тяги (traction control) — на другом колесе или оси." vss2_an = "Вход для аналогового датчика скорости 0–5В (VSS2). Совет: настраивается аналогично VSS1." vss2_an_max = "Скорость, соответствующая входному сигналу 5В для VSS2. Совет: определите из документации на датчик." vss_opt2 = "Выбор цифрового импульсного входа или входа через CAN от платы расширения для VSS2. Совет: аналогично VSS1 — выберите способ подключения в зависимости от конфигурации." wheeldia2 = "Общий диаметр второго колеса с шиной. Совет: если передние и задние колёса разного размера (staggered setup) — укажите правильный диаметр для оси, где установлен VSS2." vss2_pos = "Расположение зубцов датчика скорости VSS2: - Directly on wheel — на колесе - On driveline/trans — на трансмиссии - Pulses per mile — импульсов на милю - Pulses per km — импульсов на км. Совет: для контроля тяги используйте датчики на ведущих и ведомых колёсах." reluctorteeth2 = "Количество зубцов на задающем колесе датчика скорости VSS2. Совет: если используете ABS-сенсор — посчитайте зубцы на роторе." vss2_pwmseq = "CAN PWM-порт для VSS2 от платы расширения. Совет: используйте другой порт, чем для VSS1." vss2_can_scale = "Масштабный коэффициент для VSS2. MS3 использует 0.1 м/с² внутренне, для пересчёта из 0.1 mph используйте 45.6%. Совет: настраивается аналогично VSS1." vss1_can_scale_pulse = "Количество импульсов на милю/км. Совет: зависит от конкретного датчика. Типичное значение для GM VSS — 4000 импульсов на милю." vss2LF = "Коэффициент сглаживания VSS2. 100% = без сглаживания, 15% = максимальное сглаживание. Совет: для контроля тяги лучше минимальное сглаживание (50–100%) для быстрой реакции на пробуксовку." vss_opt0_3 = "Тип подключения датчика скорости (VSS3). Digital = импульсный вход или захват с платы расширения. Analogue = аналоговый вход 0–5В. Совет: третий и четвёртый VSS используются для полноценного контроля тяги на всех колёсах." vss3_an = "Вход для аналогового датчика скорости 0–5В (VSS3). Совет: используется редко — только для специальных применений." vss_opt3 = "Выбор цифрового импульсного входа или входа через CAN от платы расширения для VSS3. Совет: аналогично предыдущим каналам VSS." vss3_pwmseq = "CAN PWM-порт для VSS3 от платы расширения. Совет: используйте уникальный порт, не занятый другими каналами." vss_opt0_4 = "Тип подключения датчика скорости (VSS4). Digital = импульсный вход или захват с платы расширения. Analogue = аналоговый вход 0–5В. Совет: четвёртый канал позволяет контролировать скорость каждого колеса индивидуально." vss4_an = "Вход для аналогового датчика скорости 0–5В (VSS4). Совет: используется редко — только для продвинутого контроля тяги." vss_opt4 = "Выбор цифрового импульсного входа или входа через CAN от платы расширения для VSS4. Совет: аналогично предыдущим каналам." vss4_pwmseq = "CAN PWM-порт для VSS4 от платы расширения. Совет: используйте уникальный порт." vssout_opt = "Цифровой импульсный выход для управления спидометром. Совет: используйте, если штатный спидометр работает от импульсного датчика, а вы подключили VSS к ECU вместо приборной панели." vssout_optunits = "Тип пересчёта выходного сигнала спидометра. Совет: выберите формат, совместимый с вашим спидометром (мили/км, количество импульсов)." vssout_scale = "Масштабный коэффициент для выходного сигнала спидометра. Совет: подберите экспериментально, сравнивая показания спидометра с GPS или другим эталоном." vssdot_int = "Интервал расчёта VSSdot (ускорение автомобиля). Совет: 100–200 мс — типичный интервал. Более короткий даёт быструю реакцию, но может быть зашумлённым. Более длинный — стабильнее, но с задержкой." vssdotLF = "Коэффициент сглаживания VSSdot. 100% = без сглаживания, 15% = максимальное сглаживание. Совет: для контроля тяги (traction control) используйте умеренное сглаживание (40–70%), чтобы отфильтровать шум, но сохранить быструю реакцию на изменение ускорения." fdratio1 = "Передаточное число главной передачи (финальный редуктор). Совет: необходимо для правильного расчёта скорости из оборотов двигателя и текущей передачи. Обычно 3.0–4.5 для легковых автомобилей." gear_method = "Метод определения текущей передачи: VSS/RPM — сравнение скорости с оборотами и таблицей передаточных чисел. Analogue — аналоговый датчик положения передачи (0–5В). CAN gear# — номер передачи от платы расширения по CAN. Совет: VSS/RPM — наиболее универсальный метод, работает без дополнительных датчиков при наличии VSS." gear_no = "Количество передач в коробке. Совет: укажите фактическое число передач вашей КПП (обычно 5 или 6 для механической)." gear1ratio = "Передаточное число каждой передачи. Совет: найдите передаточные числа в документации на вашу КПП. Правильные значения необходимы для корректного определения текущей передачи." gear_port_an = "Аналоговый вход для датчика положения передачи. Совет: некоторые мотоциклетные и гоночные КПП имеют встроенный потенциометрический датчик передачи." gear0v = "Номинальное напряжение в каждом положении передачи. Совет: измерьте напряжение на датчике в каждой передаче и на нейтрали. Введите значения для калибровки." vss_samp_int = "Интервал выборки/накопления зубцов VSS. Обычно 50 мс подходит и обеспечивает сглаживание. Совет: для автомобилей с быстрым разгоном уменьшите это значение для улучшения отклика определения нулевой скорости. 10–20 мс для гоночных применений." ss_opt1 = "Выбор цифрового импульсного входа для дополнительного датчика скорости. Совет: используется для входа вала трансмиссии или другого вспомогательного датчика скорости." reluctorteeth3 = "Количество зубцов на задающем колесе дополнительного датчика скорости. Совет: посчитайте зубцы на роторе или посмотрите в документации на датчик. Правильное значение необходимо для корректного расчёта скорости." ss_opt1_spd = "По возможности настраивает этот вход как высокоскоростной. Высокоскоростной режим обеспечивает более точное измерение частоты импульсов, что критично для датчиков скорости и других быстроменяющихся сигналов. Используйте этот режим для VSS и подобных датчиков." ss1LF = "Коэффициент сглаживания сигнала. 100% = без сглаживания (сырой сигнал), 15% = максимальное сглаживание. При зашумлённом сигнале уменьшайте значение для более плавного показания. Однако чрезмерное сглаживание замедляет реакцию на реальные изменения. Для большинства датчиков скорости хорошей отправной точкой является 50-70%." ss_opt2 = "Выбирает цифровой импульсный вход. Используется для подключения датчиков, выдающих прямоугольные импульсы (например, датчик скорости, датчик положения вала). Убедитесь, что уровень сигнала совместим с входом ECU (обычно 0-5В или 0-12В)." reluctorteeth4 = "Количество зубьев на задающем диске (релукторе). Укажите точное количество зубьев, которые датчик считывает за один оборот. Это критично для корректного расчёта скорости вращения. Типичные значения: 4, 8, 16, 36, 60 зубьев в зависимости от конструкции диска." ss_opt2_spd = "По возможности настраивает этот вход как высокоскоростной. Высокоскоростной режим позволяет точнее обрабатывать быстрые импульсные сигналы. Рекомендуется для датчиков, генерирующих большое количество импульсов в секунду." ss2LF = "Коэффициент сглаживания сигнала. 100% = без сглаживания (сырой сигнал), 15% = максимальное сглаживание. Настройте сглаживание в зависимости от качества сигнала. Для датчиков с чистым сигналом используйте 80-100%. При наличии электрических помех снижайте до 30-50%. Слишком сильное сглаживание вносит задержку в показания." accXport = "Аналоговый вход 0-5В для оси X акселерометра. Подключите выход оси X акселерометра к выбранному аналоговому входу. Сигнал должен быть в диапазоне 0-5В. Используется для системы контроля тяги и логирования перегрузок." accYport = "Аналоговый вход 0-5В для оси Y акселерометра. Подключите выход оси Y акселерометра. Ось Y обычно ориентирована вдоль продольной оси автомобиля (ускорение/торможение). Убедитесь в правильной ориентации датчика." accZport = "Аналоговый вход 0-5В для оси Z акселерометра. Подключите выход оси Z акселерометра. Ось Z обычно ориентирована вертикально. Может использоваться для обнаружения неровностей дороги и компенсации их влияния на настройку." accXcal1 = "Калибровочное значение при X = -1g. См. руководство. Для калибровки расположите акселерометр так, чтобы ось X была направлена вертикально вниз. Запишите показание ADC. Это значение используется ECU для пересчёта напряжения в единицы перегрузки." accXcal2 = "Калибровочное значение при X = +1g. См. руководство. Для калибровки переверните акселерометр так, чтобы ось X была направлена вертикально вверх. Запишите показание ADC. Разница между значениями -1g и +1g определяет масштаб измерений." accYcal1 = "Калибровочное значение при Y = -1g. См. руководство. Аналогично калибровке оси X, но для оси Y. Расположите датчик так, чтобы ось Y была направлена вертикально вниз, и запишите показание." accYcal2 = "Калибровочное значение при Y = +1g. См. руководство. Расположите датчик так, чтобы ось Y была направлена вертикально вверх, и запишите показание ADC. Точная калибровка важна для корректной работы системы контроля тяги." accZcal1 = "Калибровочное значение при Z = -1g. См. руководство. Для калибровки расположите датчик нормально (ось Z вверх) — это даст значение +1g. Переверните датчик для получения -1g." accZcal2 = "Калибровочное значение при Z = +1g. См. руководство. В нормальном положении датчика (ось Z направлена вверх) действует +1g от гравитации. Используйте это положение для калибровки." accxyzLF = "Коэффициент сглаживания для всех осей акселерометра. 100% = без сглаживания, 15% = максимальное сглаживание. Для системы контроля тяги рекомендуется умеренное сглаживание (40-60%), чтобы отфильтровать вибрации, но сохранить быструю реакцию на реальные перегрузки." log_style_on2 = "Включает запись дата-лога на SD-карту.\nAlways — постоянная запись при включённом ECU.\nButton — запуск/остановка записи кнопкой.\nTrigger — автоматический запуск при выполнении условия.\nДля диагностики и настройки рекомендуется режим 'Always'. Для дрэг-рейсинга удобнее режим 'Trigger' с привязкой к RPM или TPS." log_style2_but = "Цифровой вход для переключателя управления записью лога.\nПодключите тумблер или кнопку к выбранному цифровому входу. Вход срабатывает при замыкании на массу. Удобно разместить переключатель на приборной панели для быстрого управления записью." log_style4_opt = "Тип условия для автоматического запуска записи лога.\nМожно выбрать запуск по RPM, TPS или MAP. Полезно для автоматической записи только активных заездов, экономя место на SD-карте." log_trig_rpm = "Запуск записи при превышении этого значения RPM.\nУстановите немного выше оборотов холостого хода, чтобы запись начиналась только при движении. Типичное значение: 2000-3000 RPM." log_trig_tps = "Запуск записи при превышении этого значения TPS или MAP (кПа).\nДля записи только при активном ускорении установите TPS порог 30-50%. Это исключит запись данных холостого хода и лёгкого круиза." log_trig_map = "Запуск записи при превышении этого значения MAP (кПа).\nДля турбированных двигателей можно установить порог чуть выше атмосферного давления (например, 105-110 кПа), чтобы записывать данные только при наддуве." sdpulse_out = "Обычно используется для синхронизации видеозаписи — выдаёт низкий импульс в начале каждого лога.\nПодключите к светодиоду в поле зрения камеры или к внешнему входу синхронизации видеорегистратора. Это позволит точно сопоставить видео с данными лога." log_style_led = "Выход для светодиода или индикаторной лампы состояния записи.\nПодключите светодиод через резистор. Индикатор будет гореть во время активной записи на SD-карту, помогая визуально контролировать процесс логирования." log_style_block = "Тип записываемого лога.\n64byte = стандартный лог на SD-карту.\n64byte+stream = лог плюс одновременная запись аудиодорожки.\nСтандартный 64-байтный режим подходит для большинства задач настройки. Режим с аудио полезен для диагностики по звуку (стук, детонация)." log_style2_samp = "Timed = подходит для всех установок, запись через равные промежутки времени.\nCycle/tooth = для разработчиков, запись привязана к циклам двигателя.\nДля обычной настройки всегда используйте 'Timed'." log_int = "Интервал записи данных. Определяет, как часто записываются данные в лог.\nНижний предел для большинства SD-карт — 3 мс. Для общей настройки достаточно 5-10 мс. Для детального анализа переходных процессов (ускорение, детонация) используйте 3-5 мс. Меньший интервал = больший размер файла." log_length = "Длительность каждого файла лога. По истечении этого времени автоматически создаётся новый файл.\nРекомендуется 5-15 минут для удобства работы с логами. Слишком длинные файлы сложнее анализировать. Слишком короткие создают много мелких файлов." log_style3_adc = "Опциональный аналоговый (звуковой) вход для записи потока данных.\nМожно подключить микрофон через предусилитель для записи звука двигателя одновременно с данными. Полезно для диагностики детонации и механических шумов." log_style2_ledspd = "Если не указано иное, используйте 'Normal'.\nЭтот параметр влияет на скорость мигания индикаторного светодиода. Изменяйте только при наличии специальных рекомендаций." log_style2_cont = "Определяет поведение при завершении лога: начать новый файл или остановить запись.\nДля постоянного мониторинга выберите автоматическое создание нового лога. Для разовых заездов можно выбрать остановку." log_style2_alwaysin = "Определяет, считать ли SD-карту всегда установленной.\nЕсли SD-карта установлена постоянно и не извлекается, включение этой опции ускоряет инициализацию. При частой замене карт оставьте выключенным." log_style_gps = "Включает запись чередующихся GPS-данных в лог.\n\nТребуется GPS-модуль, подключённый по шине CAN.\nGPS-данные записываются вместе с основным логом и позволяют сопоставить параметры двигателя с положением на трассе. Очень полезно для кольцевых гонок." egt_num = "Количество активных каналов EGT (температура выхлопных газов).\nВключите столько каналов, сколько датчиков EGT установлено. Для поцилиндрового контроля нужен один датчик на каждый цилиндр. Для общего контроля достаточно 1-2 датчиков (до и после турбины)." egtcal_temp0 = "Температура при 0В на входе.\nУстановите в соответствии с документацией вашего интерфейса термопары. Для большинства модулей EGT при 0В температура составляет 0°C или некоторое минимальное значение." egtcal_tempmax = "Температура при 5В — зависит от конструкции интерфейса.\nУстановите максимальную температуру в соответствии с документацией вашего усилителя/интерфейса термопары. Типичные диапазоны: 0-1100°C или 0-1250°C." egt_conf_action = "Действия при превышении допустимой температуры выхлопных газов (EGT).\nМожно настроить предупреждение, обогащение смеси или аварийную остановку двигателя. Для турбированных двигателей контроль EGT критически важен для защиты турбины и выпускного коллектора." egt_warn = "Включить предупредительный выход при превышении этой температуры.\nДля бензиновых двигателей типичный порог предупреждения: 800-850°C. Для дизельных: 650-700°C. Для турбомоторов критично не превышать 900-950°C на входе в турбину." egt_addfuel = "Увеличение длительности впрыска при перегреве выхлопных газов.\nДополнительное топливо охлаждает камеру сгорания и снижает температуру EGT. Это защитная мера, но она ухудшает экономичность и увеличивает выбросы. Типичное обогащение: 10-20%." egt_conf_bank = "Для большинства установок выбирайте 'Both' (оба банка).\nBank1 и Bank2 применяются только при использовании ступенчатого (Staged) впрыска, где Bank1 = первичные форсунки, Bank2 = вторичные форсунки." egt_conf_shutdown = "Включает аварийную остановку двигателя при превышении максимальной температуры или длительном нахождении выше порога предупреждения.\nРекомендуется включить для защиты дорогих компонентов (турбины, клапаны, поршни). Убедитесь, что пороги настроены корректно, чтобы избежать ложных срабатываний." egt_conf_percyl = "Только для последовательного (sequential) впрыска — позволяет добавлять топливо индивидуально на каждый цилиндр.\nТребуется соответствие: EGT1 = цилиндр #1, EGT2 = цилиндр #2 и т.д.\nПозволяет точечно обогащать смесь в перегретом цилиндре, не влияя на остальные. Очень полезно для многоцилиндровых турбомоторов." egt_conf_input = "Manual = каждый канал выбирается вручную, входы настраиваются поочерёдно.\nCANEGT = приём данных по шине CAN от модуля CANEGT через 11-битные сообщения.\n** Модуль CANEGT должен быть настроен для этого режима. **\nCAN-режим удобнее, так как требует всего одного кабеля для нескольких каналов." egt_conf_numbering = "Для V8 с двумя 4-канальными модулями обычно используется один модуль на каждый ряд цилиндров. Выберите нумерацию цилиндров, соответствующую вашему двигателю.\nНапример, для GM LS порядок работы 1-8-7-2-6-5-4-3, для Ford 5.0 — 1-3-7-2-6-5-4-8." canegt_base = "Базовый CAN-идентификатор. По умолчанию 1680, обычно менять не нужно.\nДля модуля CANEGT: EGT1-4 на базовом адресе, EGT5-8 на base+1, EGO1-4 на base+2, EGO5-8 на base+3.\nИзменяйте только при конфликте адресов с другими устройствами на шине CAN." canegt_base2 = "Базовый CAN-идентификатор для каналов 9-12. Необходимо изменить для соответствия настройкам второго модуля CANEGT.\nУбедитесь, что адрес не конфликтует с другими устройствами на шине CAN." canego_base = "Базовый CAN-идентификатор для широкополосных лямбда-зондов. По умолчанию 80. Lambda 1 на базовом адресе, Lambda 2 на base+1 и т.д.\nПри использовании нескольких контроллеров лямбда-зондов убедитесь, что их адреса не пересекаются." egt_time = "Аварийная остановка двигателя, если температура EGT превышает порог предупреждения дольше указанного времени.\nУстановите достаточно длительный период (10-30 сек), чтобы исключить ложные срабатывания при кратковременных пиках температуры, но достаточно короткий для реальной защиты." egt_max = "Аварийная остановка при превышении этой максимальной температуры (даже на долю секунды).\nЭто абсолютный предел, защищающий от катастрофического перегрева. Для бензиновых турбомоторов типичное значение: 950-1000°C. Для атмосферных: 850-900°C." egt1port = "Аналоговый вход 0-5В для термопары EGT. (Требуется интерфейсная схема — усилитель термопары.)\nТермопары типа K выдают очень малое напряжение (милливольты), поэтому необходим специальный усилитель/интерфейс (например, AD595 или модуль MAX31855) для преобразования в диапазон 0-5В." sensor01_source = "Аналоговый вход 0-5В для универсального датчика.\nВыберите свободный аналоговый вход ECU для подключения датчика. Убедитесь, что выбранный вход не используется другими функциями." sensor01Alias = "Пользовательское имя для этого входа датчика. Например: 'температура воздуха до интеркулера', 'давление масла', 'давление топлива'.\nДайте осмысленное название для удобства идентификации в логах и на дашбордах TunerStudio. Максимальная длина ограничена." sensor01_trans = "Тип преобразования из сырого сигнала в физическую величину.\nRaw = сырые показания ADC 0-1023 (для отладки).\nLinear = линейное преобразование, подходит для большинства ратиометрических датчиков (давления, положения).\nSame as XXX = использует ту же калибровку, что и другой датчик на вашем ECU.\nCustom#1 = используется калибровка из таблиц термисторов (Calibrate Thermistor Tables).\nGM calibration = стандартная калибровка термисторов GM для температуры воздуха/охлаждающей жидкости." sensor01_val0 = "Показание датчика в нижней точке калибровки (например, при 0В или 0.5В).\nДля датчика давления 0-5 бар это будет 0 бар при 0.5В. Смотрите документацию вашего конкретного датчика для точных значений." sensor01_max = "Показание датчика в верхней точке калибровки (например, при 5В или 4.5В).\nДля датчика давления 0-5 бар это будет 5 бар при 4.5В. Точные значения зависят от модели датчика. Линейная интерполяция выполняется автоматически." sensor01LF = "Коэффициент сглаживания сигнала. 100% = без сглаживания, 15% = максимальное сглаживание.\nДля медленно меняющихся параметров (температура) подходит сильное сглаживание (20-40%). Для быстрых параметров (давление наддува, давление топлива) используйте минимальное сглаживание (70-100%)." opt142_gs_share = "Обычно каждый вход может использоваться только одной функцией. Эта настройка позволяет разделять входы между универсальными датчиками и другими функциями.\nРазумеется, физически к каждому входу можно подключить только один датчик! Эта опция лишь позволяет нескольким программным функциям считывать данные с одного входа." sensor_temp = "Выбор единиц температуры (°F/°C) при использовании калибровок CLT/MAT. Настраивается на странице Generic Sensors.\nВыбранные единицы влияют на отображение во всех связанных экранах и логах. В России рекомендуется использовать °C." tc_opt_on = "Включает систему контроля тяги (Traction Control).\nСистема контроля тяги снижает мощность при обнаружении пробуксовки ведущих колёс. Критична для мощных автомобилей, особенно на мокром покрытии и при старте." tc_led_out = "Выход для индикатора активности системы контроля тяги.\nПодключите светодиод или лампу на приборной панели. Индикатор загорается при срабатывании системы, информируя водителя о пробуксовке и вмешательстве электроники." tc_opt_method = "Метод контроля тяги:\nPerfect Run = стратегия для дрэг-рейсинга, сравнивает фактическую скорость VSS с идеальной траекторией разгона.\nVSS %slip = сравнивает VSS1 и VSS2 для определения процента проскальзывания. Наиболее универсальный метод.\nPerfect Run RPM = аналог Perfect Run, но без VSS — для классов, где датчики скорости запрещены.\nSwitch input = для внешнего детектора проскальзывания.\nNone = отключает основные методы, но позволяет использовать таблицу разницы скоростей." tc_enin = "Опциональный цифровой вход для переключателя включения/отключения системы контроля тяги.\nУдобно разместить тумблер на руле или приборной панели для быстрого отключения системы (например, при намеренном дрифте или бёрнауте)." tc_mintps = "Контроль тяги активен только при TPS выше этого значения.\nУстановите достаточно низкий порог (10-20%), чтобы система работала при частичном открытии дросселя. Это предотвращает ложные срабатывания при отпущенном газе." tc_minmap = "Контроль тяги активен только при MAP выше этого значения (кПа).\nДля атмосферных двигателей установите 50-70 кПа. Для турбированных можно установить порог на уровне атмосферного давления или чуть ниже." tc_minvss = "Контроль тяги активен только при скорости (VSS) выше этого значения.\nУстановите минимальную скорость, ниже которой система не вмешивается. Это предотвращает срабатывание при трогании с места. Типичное значение: 5-15 км/ч." tc_opt_slipcurve = "Выбор между фиксированным порогом проскальзывания и настраиваемой кривой.\nФиксированный порог проще в настройке. Кривая позволяет задать разный допустимый процент проскальзывания в зависимости от скорости — например, больше проскальзывания допускается на старте и меньше на высокой скорости." tc_slipthresh = "Фиксированный порог проскальзывания (%).\nТипичные значения: 5-15% для уличных автомобилей, 3-8% для кольцевых гонок, 10-20% для дрэг-рейсинга. Начните с 10% и корректируйте по результатам." tc_opt_n2o = "В настоящее время поддерживается только управление закисью азота (N2O) в режиме вкл/выкл.\nПри обнаружении пробуксовки система может отключать подачу N2O для снижения мощности." tc_opt_bank = "Выбор банка форсунок для добавления топлива.\nОбычно выбирайте 'Both' (оба банка). При использовании ступенчатого впрыска (Staging): Bank 1 = первичные форсунки, Bank 2 = вторичные форсунки." tc_opt_driven = "Какие датчики скорости используются как 'ведущие' колёса в расчётах.\nSide2side сравнивает VSS1 с VSS2 и VSS3 с VSS4. Сторона с наибольшим проскальзыванием используется для дальнейших расчётов.\nВыбор зависит от типа привода: для переднеприводного — передние колёса, для заднеприводного — задние." tc_opt_undriven = "Какие датчики скорости используются как 'неведущие' (свободные) колёса в расчётах.\nSide2side сравнивает VSS1 с VSS2 и VSS3 с VSS4. Сторона с наибольшим проскальзыванием используется для дальнейших расчётов.\nНеведущие колёса служат эталоном реальной скорости автомобиля." tc_opt3_vssdiff = "Включает таблицу корректировки угла опережения зажигания (retard) по разнице скоростей VSS1 и VSS2.\nЭто работает поверх любого другого метода контроля тяги, добавляя дополнительный уровень защиты. Полезно для компенсации поперечного проскальзывания." launch_opt_on = "Off — весь лаунч-контроль отключён.\nLaunch — только лаунч-контроль (ограничитель для старта), без Flat Shift.\nLaunch/flatshift — лаунч-контроль и Flat Shift.\nFlat Shift используется на МКПП для переключения передач без сброса газа — при нажатии сцепления активируется ограничитель, позволяя быстро переключить передачу. Очень эффективно на турбомоторах для поддержания наддува." launch_opt2_ignorerpm = "Off: обороты должны достичь нижнего порога лимитера, прежде чем лаунч-контроль считается активным, и таймеры запускаются при отпускании кнопки.\nOn: обороты игнорируются — если кнопка нажата и остальные условия выполнены, таймеры начинают отсчёт при отпускании кнопки. Полезно, если вы неправильно вывели обороты при стейджинге и не довели их до лимитера." launch_opt_vss = "Включает лаунч-контроль на основе скорости колёс вместо кнопки/переключателя. Выберите датчик скорости неведущего колеса.\nЛаунч автоматически активируется при остановке автомобиля. Удобно для кольцевых гонок, где переключатель неудобен." launch_opt_pins = "Вход для переключателя/кнопки лаунч-контроля.\nОбычно подключается к кнопке на руле или педали сцепления. Вход срабатывает при замыкании на массу. Для дрэг-рейсинга часто используется кнопка на руле." launch_sft_zone = "Мягкий лимит на столько оборотов ниже жёсткого лимита. (Иногда называется 'диапазон управления'.) Типичное значение: 200 об/мин.\nВ этой зоне применяется плавное ограничение через отбор угла зажигания. Это позволяет мягко подвести обороты к жёсткому лимиту без резких рывков." launch_sft_deg = "Абсолютный угол опережения зажигания при мягком ограничении. Например, 5 означает 5° до ВМТ.\nМалые значения (0-5°) эффективно ограничивают мощность и помогают раскручивать турбину. Отрицательные значения (зажигание после ВМТ) дают ещё больший эффект, но могут перегреть выпускной коллектор." launch_opt_bank = "Позволяет изменять подачу топлива при активном лаунч-лимитере.\nМожно обогатить смесь для охлаждения камеры сгорания при позднем зажигании, или обеднить для снижения мощности. Для турбомоторов обогащение помогает защитить компоненты." launch_addfuel = "Изменение длительности впрыска в миллисекундах (+/-).\nПоложительное значение добавляет топливо, отрицательное — уменьшает. Для турбомоторов с позднем зажиганием на лаунче рекомендуется небольшое обогащение (+0.5-1.5 мс) для охлаждения камеры сгорания." launch_tps = "Лаунч-контроль активен только при открытии дросселя выше этого процента.\nБольшинство пользователей могут установить очень низкое значение (5-10%). Это предотвращает случайное срабатывание лимитера при закрытом дросселе." launch_hrd_lim = "Жёсткий лимит оборотов — выше этого значения применяются жёсткие методы ограничения (отсечка искры/топлива) при выполнении условий лаунча.\nДля дрэг-рейсинга установите обороты, оптимальные для старта вашего автомобиля. Для турбомоторов это обычно обороты начала зоны эффективного наддува." launchlimopt = "Метод жёсткого ограничения:\n-None — не использовать.\n-Spark cut — отсечка искры. Самый распространённый метод. (Не работает с зажиганием EDIS.)\n-Fuel cut — отсечка топлива.\n-Spark and fuel — отсечка искры и топлива одновременно.\nОтсечка искры предпочтительнее для турбомоторов, так как несгоревшее топливо догорает в выпуске, поддерживая обороты турбины (anti-lag эффект)." launchlimopt_adv = "Basic = тип лимитера выбирается автоматически.\nAdvanced = ручной выбор типа жёсткого лимитера и зоны отсечки искры.\n\nПрименяется и к лаунч-контролю, и к Flat Shift.\nРежим Advanced рекомендуется для опытных тюнеров, позволяющий тонко настроить поведение лимитера." launchlimopt_cut = "Выбор типа отсечки искры.\nRandom Progressive = случайная отсечка, линейно нарастающая в зоне отсечки.\nRandom Ramped = случайная отсечка с нелинейным нарастанием.\nFixed 5/7 = фиксированная ротационная отсечка: 5 пропущенных искр, 2 рабочих.\nFixed 4/5 = фиксированная ротационная отсечка: 4 пропущенных, 1 рабочая.\nRandom Progressive — самый плавный вариант. Fixed режимы дают более агрессивное ограничение и характерный звук." launchlimopt_map = "Включает кривую зависимости оборотов жёсткого лимита от MAP (давления наддува).\nПозволяет автоматически повышать лимит оборотов по мере роста давления наддува. Полезно для оптимизации раскрутки турбины при старте — на низком наддуве обороты ограничены ниже, а по мере набора давления лимит растёт." launchvsstime = "После начала движения лаунч-контроль на основе VSS блокируется через указанное количество секунд до полной остановки.\nУстановите 0 для постоянной активности (без таймаута).\nТипичное значение для дрэг-рейсинга: 10-30 секунд. Для кольцевых гонок: 0 (всегда активен)." launch_fcut_rpm = "При переключении передач (Flat Shift), когда обороты падают, топливо отключается до падения оборотов ниже этой уставки.\nЭто предотвращает взрывы несгоревшего топлива в выпускной системе при сбросе газа. Установите на 200-500 RPM ниже ожидаемых оборотов после переключения." launch_maxvss = "Предотвращает активацию лаунч-контроля, если автомобиль уже движется.\nУстановите максимальную скорость, выше которой лаунч не будет активирован. Для дрэг-рейсинга обычно 5-10 км/ч. Это защита от случайного включения лимитера на ходу." launchvss_minvss = "Ниже этой скорости лаунч-контроль на основе VSS перевзводится (становится готовым к повторной активации).\n\nТипично устанавливается на очень низкое значение (1-3 км/ч), чтобы система перевзводилась практически только при полной остановке." launch_opt_vssgear = "Включает/отключает проверку номера передачи для лаунч-контроля.\n\nТребуется активированная функция определения передачи.\nПозволяет ограничить работу лаунч-контроля только определёнными передачами." launchvss_maxgear = "Лаунч-контроль по скорости колёс работает до этого номера передачи включительно.\n\nНапример, 2 означает, что лаунч может использоваться на 1-й и 2-й передачах.\nДля дрэг-рейсинга обычно 1 или 2. Для кольцевых гонок может быть больше." launchcutzone = "Зона RPM ниже жёсткого лимита, в которой начинается отсечка искры.\nМожно установить 0 для применения отсечки только на жёстком лимите (для фиксированных типов отсечки).\nДля случайных (random) типов отсечки необходима зона не менее 200 RPM для плавной работы. Рекомендуется 200-400 RPM." launchcuttiming = "Угол опережения зажигания в зоне отсечки и на жёстком лимите.\nПрименяется только к лаунч-контролю, не к Flat Shift.\nДля турбомоторов часто устанавливают 0° или даже отрицательные значения для максимального anti-lag эффекта. Для атмосферных — 5-10° BTDC." flats_minvss = "Предотвращает активацию Flat Shift на низких скоростях, например, сразу после старта.\nУстановите выше скорости, при которой лаунч ещё активен. Типичное значение: 30-50 км/ч. Это разделяет зоны работы лаунча и Flat Shift." flats_arm = "Этот порог RPM отличает условие Flat Shift от условия лаунча. Типично устанавливается на несколько сотен оборотов выше холостого хода.\nЕсли обороты ниже этого порога и кнопка нажата — это лаунч. Выше порога — Flat Shift. Рекомендуется 1500-2500 RPM." flats_deg = "Абсолютный угол опережения зажигания при Flat Shift. Например, 5 означает 5° до ВМТ.\nПозднее зажигание при Flat Shift помогает поддержать обороты турбины во время переключения. Значения 0-10° BTDC типичны. Слишком раннее зажигание не даст эффекта, слишком позднее перегреет коллектор." flats_hrd = "Жёсткий лимит оборотов для Flat Shift — выше этого значения применяются жёсткие методы ограничения.\nОбычно устанавливается близко к максимальным рабочим оборотам двигателя или зоне отсечки. Это предотвращает перекрут при переключении." launch_opt_retard = "Включает функцию постепенного восстановления угла опережения зажигания после старта (launch retard feed-in).\nПозволяет плавно перейти от позднего зажигания лаунч-контроля к нормальному, предотвращая резкий скачок мощности при старте. Критично для автомобилей с большой мощностью." launch_var_on = "Вход для потенциометра 0-5В, используемого для регулировки оборотов лаунч-контроля.\nПозволяет водителю быстро менять обороты лимитера с помощью ручки на приборной панели. Очень удобно для адаптации к разным условиям трассы (температура, покрытие)." launch_var_low = "При входном напряжении 0В жёсткий лимит лаунча устанавливается на эти обороты.\nЭто нижняя граница диапазона регулировки потенциометром. Установите минимально допустимые обороты старта." launch_var_up = "При входном напряжении 5В жёсткий лимит лаунча устанавливается на эти обороты.\nЭто верхняя граница диапазона регулировки потенциометром. Установите максимально допустимые обороты старта." launch_3step_in = "Вход для переключателя 3-step (третьего лимитера). Может использоваться как лимитер для бёрнаута.\nТретий лимитер позволяет иметь отдельные обороты для прогрева шин (бёрнаут), отличающиеся от основного лаунч-лимита. Обычно устанавливается выше лаунч-лимита." launch_sft_deg3 = "Угол опережения зажигания при активном 3-step лимитере.\nДля бёрнаута обычно устанавливают позднее зажигание (5-15° BTDC) для контроля мощности. Это позволяет прогревать шины без избыточной мощности." launch_hrd_lim3 = "Обороты жёсткого лимита при активном 3-step.\nДля бёрнаута обычно устанавливают выше основного лаунч-лимита (например, 5000-6000 RPM в зависимости от двигателя), чтобы обеспечить достаточную мощность для прогрева шин." timedout1_in = "Вход для кнопки трансбрейка. Трансбрейк не активируется, если VSS показывает движение автомобиля.\nТрансбрейк блокирует АКПП, позволяя набрать обороты и давление наддува перед стартом в дрэг-рейсинге. Защита по VSS предотвращает случайную активацию на ходу." timedout1_out = "Выход для соленоида трансбрейка.\nПодключите через реле к соленоиду трансбрейка АКПП. Убедитесь, что проводка рассчитана на ток соленоида. Используйте реле с обратным диодом для защиты выхода ECU." timedout1_offdelay = "Задержка между отпусканием кнопки и отпусканием трансбрейка.\nТонкая настройка этой задержки позволяет синхронизировать отпускание трансбрейка с другими событиями (таймер нитро, восстановление зажигания). Типичные значения: 0-0.5 сек. Для бракет-рейсинга точная настройка критична." tcs_in = "Вход для кнопки Turbo Staging (иногда называется 'bump button').\nТурбо-стейджинг позволяет кратковременно отпускать трансбрейк для подкатывания к стартовой линии при наборе наддува. Каждое нажатие — один шаг подкатки." tcs_offtime = "Длительность отпускания трансбрейка на каждом шаге подкатки. Должна быть достаточной для небольшого перемещения без набора скорости.\nНачните с 0.1-0.2 сек и корректируйте. Слишком длинное время приведёт к набору скорости, слишком короткое — автомобиль не сдвинется." tcs_ontime = "Длительность повторной активации трансбрейка между шагами. Должна быть достаточной для полного зацепления.\nУстановите достаточно длительное время (0.5-1.0 сек), чтобы трансбрейк успел полностью заблокировать трансмиссию перед следующим шагом." tcs_moves = "Количество шагов (отпусканий трансбрейка) при первом нажатии кнопки. Каждое последующее нажатие даёт один шаг.\nПервое нажатие может сделать несколько шагов для начального подкатывания. Типичное значение: 2-3 шага." tstop_out = "Выход для соленоида дроссельного стопора (Throttle Stop).\nДроссельный стопор механически ограничивает открытие дросселя для управления ET (elapsed time) в бракет-рейсинге. Подключите через реле к соленоиду стопора." tstop_delay = "Задержка после старта перед активацией соленоида дроссельного стопора.\nНастройте время задержки для получения желаемого ET. После старта автомобиль разгоняется на полном газе указанное время, затем стопор ограничивает дроссель." tstop_hold = "Длительность удержания соленоида дроссельного стопора во включённом состоянии.\nПо истечении этого времени стопор отпускается и дроссель снова открывается полностью. Настройте для достижения целевого ET." tbrake_opt1_creep = "Single step: после первого нажатия каждое дополнительное нажатие вызывает один шаг подкатки.\nCreep mode: удержание кнопки вызывает непрерывную серию шагов подкатки.\nCreep mode удобнее для точного позиционирования на стартовой линии, Single step — для максимального контроля." launch_debounce = "Время антидребезга при отпускании кнопки.\nМеханические кнопки и переключатели страдают от дребезга контактов. Это время фильтрует электромеханический шум для более повторяемого старта или отпускания трансбрейка. Значение по умолчанию: 0.010 сек.\nДля бракет-рейсинга может потребоваться корректировка задержки трансбрейка с учётом антидребезга." N2Oopt_2 = "Включает систему управления закисью азота (нитросом).\nПеред включением убедитесь, что все выходы и входы правильно настроены, давление в баллоне достаточное, и двигатель подготовлен к дополнительной нагрузке (подходящие свечи, обогащённая смесь, позднее зажигание)." N2ORpm = "Минимальные обороты для активации нитроса.\nУстановите обороты, при которых двигатель производит достаточный крутящий момент для безопасного добавления N2O. Обычно 2500-3500 RPM. Слишком низкие обороты могут вызвать детонацию." N2OClt = "Минимальная температура охлаждающей жидкости для активации нитроса.\nДвигатель должен быть полностью прогрет перед использованием N2O. Установите рабочую температуру (80-90°C). Использование нитроса на холодном двигателе опасно из-за обеднённой смеси и риска детонации." N2OTps = "Минимальное положение дросселя (TPS%) для активации нитроса.\nРекомендуется 80-100% — нитрос должен включаться только при полностью открытом дросселе (WOT). Включение при частичном дросселе может вызвать обеднение смеси и детонацию." N2ORpmMax = "Максимальные обороты для работы нитроса.\nУстановите ниже оборотов отсечки двигателя (на 500-1000 RPM). Выше этих оборотов нитрос отключается. Это защищает двигатель от перекрута при дополнительной мощности от N2O." N2Oopt_01 = "Для большинства установок выбирайте 'Both'. При использовании двойных таблиц VE или ступенчатого впрыска (Staging) выбирает, какой банк форсунок получает дополнительное топливо.\nBank 1 = первичные форсунки, Bank 2 = вторичные." N2Oopt2_prog = "Выбор между режимами On/Off и Progressive.\nOn/Off — нитрос полностью включён или выключен. Проще, но резкий скачок мощности.\nProgressive — плавное нарастание подачи N2O через ШИМ-управление соленоидом. Значительно безопаснее и позволяет лучше контролировать тягу на старте." N2Oopt2_prog_time = "Выбор фактора управления прогрессией: время, RPM или VSS.\nTime — подача нарастает по времени после активации. Проще всего.\nRPM — подача зависит от оборотов. Удобно для настройки подачи в зависимости от режима двигателя.\nVSS — подача зависит от скорости. Идеально для контроля тяги на старте." N2Oopt2_prog_freq = "Частота ШИМ соленоида нитроса. Типичное значение около 13 Гц.\nЧастота должна соответствовать характеристикам вашего соленоида. Слишком высокая частота — соленоид не успевает открываться. Слишком низкая — неравномерная подача. 10-15 Гц подходит для большинства соленоидов." N2Oopt2_prog_freqf = "Позволяет задать отдельную частоту ШИМ для топливного соленоида (если используются раздельные выходы для N2O и топлива). Типичное значение около 13 Гц.\nМожет потребоваться другая частота, если топливный соленоид отличается от соленоида N2O по характеристикам." N2Oopt2_fuel = "Определяет, использует ли процент добавки топлива ту же кривую скважности, что и N2O, или собственную.\nДобавка топлива рассчитывается как процент от значения Additional Fuel PW между минимальными и максимальными RPM.\nОтдельная кривая топлива позволяет точнее контролировать AFR при прогрессивной подаче." N2Oopt_4 = "Позволяет системе безопасности AFR использовать альтернативные целевые значения AFR при активном нитросе.\nПри работе N2O требуется более богатая смесь (AFR 11.5-12.0:1 для бензина). Эта опция позволяет автоматически переключаться на безопасные значения AFR." N2Oopt_5 = "Разрешает работу нитроса 1-й ступени во время лаунч-контроля (2-step).\nПозволяет включать нитрос для раскрутки турбины (anti-lag) или набора наддува при удержании на лимитере старта. Используйте с осторожностью — значительно увеличивает нагрузку на двигатель." N2Olaunchmaxmap = "Максимальное давление наддува (MAP) при использовании нитроса во время лаунч-контроля.\nОграничивает давление наддува при использовании N2O на старте. Когда MAP достигает этого значения, нитрос отключается. Это защищает двигатель от избыточного давления." n2o1n_pins = "Выход для соленоида нитроса 1-й ступени.\nПодключите через реле к соленоиду подачи N2O. Убедитесь в надёжности проводки — соленоид потребляет значительный ток. Используйте предохранитель и реле с обратным диодом." n2o1f_pins = "Выход для топливного соленоида 1-й ступени.\nПодключите через реле к соленоиду дополнительной подачи топлива. Дополнительное топливо необходимо для компенсации окислителя (N2O) и предотвращения обеднения смеси." N2Oopt_pins = "Вход для включения системы нитроса. (Большинство входов срабатывают при замыкании на массу, один ожидает сигнал 12В.)\nПодключите к тумблеру или кнопке управления нитросом. Размещайте в доступном месте для быстрого включения/отключения. Рекомендуется использовать защитную крышку." n2o_enable2_pin = "Вход для включения второй ступени нитроса.\nОтдельный переключатель позволяет независимо управлять второй ступенью. Может использоваться для разных режимов: только 1-я ступень (умеренная мощность) или обе ступени (максимальная мощность)." N2OPWLo = "Длительность дополнительного впрыска топлива (мс) при минимальных RPM. Плавно уменьшается между мин. и макс. RPM.\nНастройте так, чтобы AFR при активном нитросе оставался в безопасной зоне (11.5-12.0:1 для бензина). Проверяйте по показаниям широкополосного лямбда-зонда." N2OPWHi = "Длительность дополнительного впрыска топлива (мс) при максимальных RPM. Плавно уменьшается между мин. и макс. RPM.\nОбычно меньше, чем значение при низких RPM, так как основная таблица VE уже обеспечивает больше топлива на высоких оборотах." N2OAngle = "Фиксированное запаздывание зажигания при активном нитросе (retard).\nЗакись азота значительно увеличивает скорость горения, поэтому необходимо убрать угол опережения. Типичные значения: 2-4° на каждые 50 л.с. прибавки от N2O. Начните с 2° и увеличивайте при необходимости." N2Odel_launch = "Минимальная задержка после отпускания лаунч-контроля до активации нитроса.\nДаёт двигателю время стабилизироваться после старта перед подачей N2O. Типичные значения: 0.1-0.5 сек. Для мощных систем увеличьте задержку для безопасности." N2Odel_flat = "Минимальная задержка после отпускания Flat Shift до активации нитроса.\nПредотвращает включение нитроса сразу после переключения передачи, когда сцепление ещё не полностью отпущено. Рекомендуется 0.2-0.5 сек." N2Oopt_3 = "Включает вторую ступень нитроса.\nВторая ступень позволяет добавить мощность сверх первой ступени. Обычно активируется с задержкой после первой ступени или на определённых оборотах. Убедитесь, что двигатель рассчитан на суммарную мощность обеих ступеней." n2o2n_pins = "Выход для соленоида нитроса 2-й ступени.\nПодключите через отдельное реле. Рекомендуется независимая цепь питания с отдельным предохранителем от соленоида 1-й ступени." n2o2f_pins = "Выход для топливного соленоида 2-й ступени.\nПодключите через отдельное реле. Калибровка подачи топлива 2-й ступени должна учитывать суммарную подачу N2O обеих ступеней." N2O2Rpm = "Обороты активации 2-й ступени нитроса.\nУстановите выше порога 1-й ступени. Разнесение порогов позволяет более плавно наращивать мощность. Типично на 500-1500 RPM выше порога 1-й ступени." N2O2RpmMax = "Максимальные обороты для 2-й ступени нитроса.\nУстановите не выше максимальных оборотов 1-й ступени. Обе ступени должны отключаться до оборотов отсечки двигателя." N2O2delay = "Минимальная задержка после активации 1-й ступени перед включением 2-й ступени.\nДаёт двигателю и трансмиссии время адаптироваться к дополнительной мощности 1-й ступени. Типичные значения: 0.5-2.0 сек в зависимости от суммарной мощности." N2O2Angle = "Дополнительное запаздывание зажигания при активной 2-й ступени (суммируется с retard 1-й ступени).\nОбщий retard = retard 1-й ступени + retard 2-й ступени. Убедитесь, что суммарный retard не чрезмерен. Типично 1-3° дополнительно." N2O2PWLo = "Длительность дополнительного впрыска топлива 2-й ступени (мс) при минимальных RPM.\nДобавляется к основному впрыску и впрыску 1-й ступени. Настройте по показаниям широкополосного лямбда-зонда при обеих активных ступенях." N2O2PWHi = "Длительность дополнительного впрыска топлива 2-й ступени (мс) при максимальных RPM.\nАналогично 1-й ступени — обычно меньше значения при низких RPM. Контролируйте AFR при полной нагрузке обеих ступеней." n2o_timing_delay = "Задержка после отключения нитроса перед уменьшением retard зажигания.\nЭто время необходимо для закрытия соленоидов и опустошения трубопроводов перед восстановлением полного угла опережения. В течение этого времени текущий retard поддерживается. Типично 0.2-0.5 сек." n2o_timing_taper = "Время плавного восстановления угла опережения зажигания после периода задержки.\nТо есть время перехода от запоздавшего к нормальному углу зажигания. Плавное восстановление предотвращает резкий скачок мощности. Типично 0.5-1.5 сек." n2o_opt3_pedal = "Действие при сбросе газа (pedal) при активном нитросе:\nRe-start — таймер начинается с нуля при повторном нажатии газа.\nContinue — таймер продолжает с того места, где остановился.\nContinue удобнее для дрэг-рейсинга, где кратковременный сброс газа не должен сбрасывать прогрессию." n2o_opt3_enable2 = "Позволяет использовать переключатель для разрешения/запрета 2-й ступени.\nOff: без переключателя, 2-я ступень активируется по заданным параметрам автоматически.\nOn: 2-я ступень включается только при замкнутом переключателе И выполнении остальных условий.\nПолезно для быстрого переключения между режимами мощности." n2o_pedal_time = "Максимальное время сброса газа, при котором таймер продолжает работу (в режиме Continue).\nЕсли газ сброшен дольше этого времени, таймер сбрасывается. Установите 1-3 сек для защиты от длительных пауз." water_freq_on = "Включает систему впрыска воды/метанола (Water Injection).\nВпрыск воды/метанола снижает температуру впускного заряда, уменьшает детонацию и позволяет использовать более агрессивные углы опережения. Особенно эффективно на турбированных двигателях." water_pins_pump = "Выход для реле насоса впрыска воды/метанола.\nПодключите через реле к насосу. Насос включается при выполнении всех условий активации. Убедитесь, что насос создаёт достаточное давление для ваших форсунок." water_freq_type = "'Off' — без выхода на клапан (используется форсунка фиксированного расхода).\n'Slow' — низкоскоростное ШИМ-управление клапаном с заданной скважностью.\n'Fast' — клапан переключается с частотой форсунок с заданной скважностью.\nДля простых систем с форсунками фиксированного расхода используйте 'Off'. Для систем с управляемым клапаном — 'Slow' или 'Fast'." water_freq = "Рабочая частота клапана впрыска воды/метанола.\nВыберите частоту, соответствующую характеристикам вашего клапана. Слишком высокая частота может привести к тому, что клапан не будет успевать срабатывать." water_pins_valve = "Выход для клапана впрыска воды/метанола.\nПодключите через подходящий драйвер или реле к управляемому клапану. При ШИМ-управлении важна скорость срабатывания драйвера." water_tps = "Впрыск воды/метанола активен только при TPS выше этого значения.\nУстановите 50-80% для активации только при значительной нагрузке. Для постоянной защиты от детонации на турбомоторах можно установить ниже (30-40%)." water_rpm = "Впрыск воды/метанола активен только при RPM выше этого значения.\nУстановите 2000-3000 RPM, чтобы система не работала на холостых оборотах. Для турбомоторов — обороты начала зоны наддува." water_map = "Впрыск воды/метанола активен только при MAP выше этого значения (кПа).\nДля турбированных двигателей установите порог на уровне начала наддува (100-110 кПа). Для атмосферных — 70-80 кПа." water_mat = "Впрыск воды/метанола активен только при температуре впускного воздуха (MAT) выше этого значения.\nУстановите температуру, при которой детонация становится вероятной. Типично 30-50°C. Это позволяет системе включаться только когда охлаждение действительно необходимо." water_pins_in_shut = "Позволяет подключить датчик уровня жидкости (low level switch).\n\nДатчик должен быть подключён так, чтобы вход был замкнут на массу при нормальном уровне и разомкнут при низком уровне или неисправности.\n\nЕсли при необходимости впрыска воды уровень жидкости низкий, для безопасности двигатель будет остановлен через параметры AFR Safety System. Это критически важно — работа без впрыска при настройке, рассчитанной на него, может привести к детонации." oilpress_in = "Канал универсального датчика (Generic Sensor), используемый для ввода давления масла.\nСначала настройте датчик давления масла на странице Generic Sensors с правильной калибровкой, затем выберите этот канал здесь. Мониторинг давления масла критичен для защиты двигателя." oilpress_out = "Выход для предупредительной лампы низкого давления масла.\nПодключите к лампе на приборной панели. Загорается при падении давления масла ниже допустимого уровня. Рекомендуется использовать яркий, хорошо заметный индикатор." oilpress_in_safety = "Включает аварийную остановку двигателя при критически низком давлении масла.\nРекомендуется включить для защиты двигателя. Работа без давления масла приводит к катастрофическому износу подшипников и задиру вкладышей в течение секунд." oilpress_time = "Если давление масла остаётся слишком низким дольше указанного времени, двигатель останавливается через настройки AFR Safety.\nУстановите 2-5 секунд. Слишком короткое время может вызвать ложные срабатывания при агрессивном вождении (высокие боковые перегрузки). Слишком длинное не защитит двигатель." fp_drop_load = "Проверка давления масла только при нагрузке двигателя выше этого значения (MAP, TPS или MAFload).\nНа холостых оборотах давление масла естественно ниже. Установите порог, чтобы контроль был активен только при значимой нагрузке." fp_drop_rpm = "Проверка давления масла только при RPM выше этого значения.\nНа низких оборотах давление масла может быть ниже нормы. Типичное значение: 1000-1500 RPM, чтобы исключить ложные срабатывания на холостых." fp_drop_psig = "Допустимое падение давления ниже целевого значения (psi).\nЕсли фактическое давление падает ниже целевого на указанную величину или более, активируется предупреждение/защита. Установите с запасом для учёта пульсаций." fp_drop_kpag = "Допустимое падение давления ниже целевого значения (кПа).\nАналогично параметру в psi, но в метрических единицах. Используйте значение, соответствующее вашей системе единиц." fp_drop_time = "Если давление топлива остаётся слишком низким дольше указанного времени, двигатель останавливается через настройки AFR Safety.\nУстановите 2-5 секунд. Низкое давление топлива при высокой нагрузке приводит к обеднению смеси и детонации, что может разрушить поршни." pwm_opt_on_a = "Включает универсальную функцию ШИМ (Generic PWM) канала A.\n\nТаблица или кривая определяет желаемый выходной сигнал на основе входных переменных.\nМожно использовать для управления различными устройствами: вентиляторы, клапаны, доп. насосы, электромагниты и т.д." ; #define substitution doesn't work for tooltips ;#define PWM_OPT2_TEXT = "Output for relay/solenoid.\nFor each output,'100%' means the following:\nPM3 - Injection LED D14 = Ground at D14\nPM4 - Accel LED D16 = Ground at D16\nPM5 - Warmup LED D15 = Ground at D15\nPJ0 - IAC2 = 12V on IAC2A\nPJ1 - IAC1 = 12V on IAC1A\nPJ7 - JS11 = 5V\nPP2 - Idle = Ground\nPP3 - Boost = Ground\nPP4 - Nitrous 1 = Ground\nPP5 - Nitrous 2 = Ground\nPP6 - VVT = Ground\nPP7 - Fidle = Ground\nPT1 - V3 Inj 1 = Ground\nPT3 - V3 Inj 2 = Ground\nPT5 - JS10 = 5v\nPK0 - Tacho = Ground\nPA0 - Inj A = Ground\nPA1 - Inj B = Ground\nPA2 - Inj C = Ground\nPA3 - Inj D = Ground\nPA4 - Inj E = Ground\nPA5 - Inj F = Ground\nPA6 - Inj G = Ground\nPA7 - Inj H = Ground\nPB0 - Spk A = 5v\nPB1 - Spk B = 5v\nPB2 - Spk C = 5v\nPB3 - Spk D = 5v\nPB4 - Spk E = 5v\nPB5 - Spk F = 5v\nPB6 - Spk G = 5v\nPB7 - Spk H = 5v\nPK7 = 5v\nPM2 = 5v\nPK3 = 5v\nPK1 = 5v" pwm_opt2_a = "Выход для реле/соленоида канала A.\nДля каждого выхода '100%' означает следующее:\nPM3 - LED впрыска D14 = масса на D14\nPM4 - LED ускорения D16 = масса на D16\nPM5 - LED прогрева D15 = масса на D15\nPJ0 - IAC2 = 12В на IAC2A\nPJ1 - IAC1 = 12В на IAC1A\nPJ7 - JS11 = 5В\nPP2 - Idle = масса\nPP3 - Boost = масса\nPP4 - Nitrous 1 = масса\nPP5 - Nitrous 2 = масса\nPP6 - VVT = масса\nPP7 - Fidle = масса\nPT1 - V3 Inj 1 = масса\nPT3 - V3 Inj 2 = масса\nPT5 - JS10 = 5В\nPK0 - Tacho = масса\nPA0 - Inj A = масса\nPA1 - Inj B = масса\nPA2 - Inj C = масса\nPA3 - Inj D = масса\nPA4 - Inj E = масса\nPA5 - Inj F = масса\nPA6 - Inj G = масса\nPA7 - Inj H = масса\nPB0 - Spk A = 5В\nPB1 - Spk B = 5В\nPB2 - Spk C = 5В\nPB3 - Spk D = 5В\nPB4 - Spk E = 5В\nPB5 - Spk F = 5В\nPB6 - Spk G = 5В\nPB7 - Spk H = 5В\nPK7 = 5В\nPM2 = 5В\nPK3 = 5В\nPK1 = 5В\nВыбирайте выход, который не используется другими функциями. Проверьте допустимый ток выхода перед подключением мощных нагрузок." pwm_opt_freq_a = "Выбор режима работы выхода A:\nOn-Off — выход включается или выключается по таблице/кривой.\nVariable frequency — выход работает на частоте, заданной таблицей/кривой, со скважностью 50%.\nxxHz — выход работает на фиксированной частоте, скважность задаётся таблицей/кривой.\nДля управления вентиляторами обычно подходит фиксированная частота 100-500 Гц. Для соленоидов — On-Off или низкая частота." pwm_onabove_a = "Выход A включается, когда значение таблицы/кривой выше этого числа.\nЭто верхний порог гистерезиса. Используется совместно с нижним порогом для предотвращения частого переключения вблизи пограничного значения." pwm_offbelow_a = "Выход A выключается, когда значение таблицы/кривой ниже этого числа.\nЭто нижний порог гистерезиса. Разница между верхним и нижним порогами создаёт зону нечувствительности, предотвращая дребезг выхода." pwm_opt_load_a = "Переменная, используемая для оси нагрузки в таблице/кривой канала A.\nВыберите параметр, наиболее подходящий для управления вашим устройством. Например, MAP для буст-зависимого управления, CLT для температурно-зависимого." pwm_opt_curve_a = "Выбор между 3D-таблицей и 2D-кривой для канала A.\n3D-таблица позволяет задать выход в зависимости от двух переменных (RPM и нагрузка). 2D-кривая — от одной переменной. Для простых применений достаточно 2D-кривой." pwm_opt_on_b = "Включает универсальную функцию ШИМ (Generic PWM) канала B.\n\nТаблица или кривая определяет желаемый выходной сигнал на основе входных переменных.\nКанал B работает независимо от канала A, позволяя управлять вторым устройством." pwm_opt2_b = "Выход для реле/соленоида канала B.\nДля каждого выхода '100%' означает следующее:\nPM3 - LED впрыска D14 = масса на D14\nPM4 - LED ускорения D16 = масса на D16\nPM5 - LED прогрева D15 = масса на D15\nPJ0 - IAC2 = 12В на IAC2A\nPJ1 - IAC1 = 12В на IAC1A\nPJ7 - JS11 = 5В\nPP2 - Idle = масса\nPP3 - Boost = масса\nPP4 - Nitrous 1 = масса\nPP5 - Nitrous 2 = масса\nPP6 - VVT = масса\nPP7 - Fidle = масса\nPT1 - V3 Inj 1 = масса\nPT3 - V3 Inj 2 = масса\nPT5 - JS10 = 5В\nPK0 - Tacho = масса\nPA0-PA7 - Inj A-H = масса\nPB0-PB7 - Spk A-H = 5В\nPK7 = 5В\nPM2 = 5В\nPK3 = 5В\nPK1 = 5В\nНе используйте выход, уже занятый каналом A или другой функцией." pwm_opt_freq_b = "Выбор режима работы выхода B:\nOn-Off — выход включается или выключается по таблице/кривой.\nVariable frequency — выход работает на частоте из таблицы/кривой со скважностью 50%.\nxxHz — фиксированная частота, скважность из таблицы/кривой.\nРежим зависит от управляемого устройства." pwm_onabove_b = "Выход B включается, когда значение таблицы/кривой выше этого числа.\nНастройте вместе с нижним порогом для создания гистерезиса и стабильной работы выхода." pwm_offbelow_b = "Выход B выключается, когда значение таблицы/кривой ниже этого числа.\nНижний порог гистерезиса канала B. Разница между порогами включения и выключения определяет зону нечувствительности." pwm_opt_load_b = "Переменная для оси нагрузки в таблице/кривой канала B.\nВыберите параметр, соответствующий задаче управления. Каждый канал может использовать свою переменную." pwm_opt_curve_b = "Выбор между 3D-таблицей и 2D-кривой для канала B.\n3D-таблица обеспечивает более точное управление при зависимости от двух факторов. 2D-кривая проще в настройке." pwm_opt_on_c = "Включает универсальную функцию ШИМ (Generic PWM) канала C.\n\nТаблица или кривая определяет желаемый выходной сигнал на основе входных переменных.\nТретий независимый канал для управления дополнительным оборудованием." pwm_opt2_c = "Выход для реле/соленоида канала C.\nДля каждого выхода '100%' означает следующее:\nPM3 - LED впрыска D14 = масса на D14\nPM4 - LED ускорения D16 = масса на D16\nPM5 - LED прогрева D15 = масса на D15\nPJ0 - IAC2 = 12В на IAC2A\nPJ1 - IAC1 = 12В на IAC1A\nPJ7 - JS11 = 5В\nPP2 - Idle = масса\nPP3 - Boost = масса\nPP4 - Nitrous 1 = масса\nPP5 - Nitrous 2 = масса\nPP6 - VVT = масса\nPP7 - Fidle = масса\nPT1 - V3 Inj 1 = масса\nPT3 - V3 Inj 2 = масса\nPT5 - JS10 = 5В\nPK0 - Tacho = масса\nPA0-PA7 - Inj A-H = масса\nPB0-PB7 - Spk A-H = 5В\nPK7 = 5В\nPM2 = 5В\nPK3 = 5В\nPK1 = 5В\nУбедитесь, что выход не конфликтует с каналами A и B." pwm_opt_freq_c = "Выбор режима работы выхода C:\nOn-Off — включение/выключение по таблице/кривой.\nVariable frequency — частота из таблицы/кривой, скважность 50%.\nxxHz — фиксированная частота, скважность из таблицы/кривой." pwm_onabove_c = "Выход C включается, когда значение таблицы/кривой выше этого числа.\nВерхний порог гистерезиса для канала C." pwm_offbelow_c = "Выход C выключается, когда значение таблицы/кривой ниже этого числа.\nНижний порог гистерезиса для канала C." pwm_opt_load_c = "Переменная для оси нагрузки в таблице/кривой канала C.\nВыберите подходящий параметр для управления вашим устройством." pwm_opt_curve_c = "Выбор между 3D-таблицей и 2D-кривой для канала C.\nВыберите в зависимости от сложности требуемого управления." pwm_opt_on_d = "Включает универсальную функцию ШИМ (Generic PWM) канала D.\n\nТаблица или кривая определяет желаемый выходной сигнал на основе входных переменных.\nЧетвёртый независимый канал для управления дополнительным оборудованием." pwm_opt2_d = "Выход для реле/соленоида канала D.\nДля каждого выхода '100%' означает следующее:\nPM3 - LED впрыска D14 = масса на D14\nPM4 - LED ускорения D16 = масса на D16\nPM5 - LED прогрева D15 = масса на D15\nPJ0 - IAC2 = 12В на IAC2A\nPJ1 - IAC1 = 12В на IAC1A\nPJ7 - JS11 = 5В\nPP2 - Idle = масса\nPP3 - Boost = масса\nPP4 - Nitrous 1 = масса\nPP5 - Nitrous 2 = масса\nPP6 - VVT = масса\nPP7 - Fidle = масса\nPT1 - V3 Inj 1 = масса\nPT3 - V3 Inj 2 = масса\nPT5 - JS10 = 5В\nPK0 - Tacho = масса\nPA0-PA7 - Inj A-H = масса\nPB0-PB7 - Spk A-H = 5В\nPK7 = 5В\nPM2 = 5В\nPK3 = 5В\nPK1 = 5В\nПроверьте, что выход свободен и допустимая нагрузка не превышена." pwm_opt_freq_d = "Выбор режима работы выхода D:\nOn-Off — включение/выключение по таблице/кривой.\nVariable frequency — частота из таблицы/кривой, скважность 50%.\nxxHz — фиксированная частота, скважность из таблицы/кривой." pwm_onabove_d = "Выход D включается, когда значение таблицы/кривой выше этого числа.\nВерхний порог гистерезиса для канала D." pwm_offbelow_d = "Выход D выключается, когда значение таблицы/кривой ниже этого числа.\nНижний порог гистерезиса для канала D." pwm_opt_load_d = "Переменная для оси нагрузки в таблице/кривой канала D.\nКаждый канал может использовать собственную переменную нагрузки." pwm_opt_curve_d = "Выбор между 3D-таблицей и 2D-кривой для канала D.\nИспользуйте 3D-таблицу для зависимости от двух переменных, 2D-кривую для простого управления." pwm_opt_on_e = "Включает универсальную функцию ШИМ (Generic PWM) канала E.\n\nТаблица или кривая определяет желаемый выходной сигнал на основе входных переменных.\nПятый независимый канал ШИМ для дополнительного оборудования." pwm_opt2_e = "Выход для реле/соленоида канала E.\nДля каждого выхода '100%' означает следующее:\nPM3 - LED впрыска D14 = масса на D14\nPM4 - LED ускорения D16 = масса на D16\nPM5 - LED прогрева D15 = масса на D15\nPJ0 - IAC2 = 12В на IAC2A\nPJ1 - IAC1 = 12В на IAC1A\nPJ7 - JS11 = 5В\nPP2 - Idle = масса\nPP3 - Boost = масса\nPP4 - Nitrous 1 = масса\nPP5 - Nitrous 2 = масса\nPP6 - VVT = масса\nPP7 - Fidle = масса\nPT1 - V3 Inj 1 = масса\nPT3 - V3 Inj 2 = масса\nPT5 - JS10 = 5В\nPK0 - Tacho = масса\nPA0-PA7 - Inj A-H = масса\nPB0-PB7 - Spk A-H = 5В\nPK7 = 5В\nPM2 = 5В\nPK3 = 5В\nPK1 = 5В\nУбедитесь в отсутствии конфликтов с другими каналами." pwm_opt_freq_e = "Выбор режима работы выхода E:\nOn-Off — включение/выключение по таблице/кривой.\nVariable frequency — частота из таблицы/кривой, скважность 50%.\nxxHz — фиксированная частота, скважность из таблицы/кривой." pwm_onabove_e = "Выход E включается, когда значение таблицы/кривой выше этого числа.\nВерхний порог гистерезиса для канала E." pwm_offbelow_e = "Выход E выключается, когда значение таблицы/кривой ниже этого числа.\nНижний порог гистерезиса для канала E." pwm_opt_load_e = "Переменная для оси нагрузки в таблице/кривой канала E.\nВыберите параметр, наиболее подходящий для управления подключённым устройством." pwm_opt_curve_e = "Выбор между 3D-таблицей и 2D-кривой для канала E.\nВыберите тип в зависимости от сложности алгоритма управления." pwm_opt_on_f = "Включает универсальную функцию ШИМ (Generic PWM) канала F.\n\nТаблица или кривая определяет желаемый выходной сигнал на основе входных переменных.\nШестой независимый канал ШИМ — для максимальной гибкости управления периферией." pwm_opt2_f = "Выход для реле/соленоида канала F.\nДля каждого выхода '100%' означает следующее:\nPM3 - LED впрыска D14 = масса на D14\nPM4 - LED ускорения D16 = масса на D16\nPM5 - LED прогрева D15 = масса на D15\nPJ0 - IAC2 = 12В на IAC2A\nPJ1 - IAC1 = 12В на IAC1A\nPJ7 - JS11 = 5В\nPP2 - Idle = масса\nPP3 - Boost = масса\nPP4 - Nitrous 1 = масса\nPP5 - Nitrous 2 = масса\nPP6 - VVT = масса\nPP7 - Fidle = масса\nPT1 - V3 Inj 1 = масса\nPT3 - V3 Inj 2 = масса\nPT5 - JS10 = 5В\nPK0 - Tacho = масса\nPA0-PA7 - Inj A-H = масса\nPB0-PB7 - Spk A-H = 5В\nPK7 = 5В\nPM2 = 5В\nPK3 = 5В\nPK1 = 5В\nПоследний доступный канал — используйте его для наименее приоритетных устройств." pwm_opt_freq_f = "Выбор режима работы выхода F:\nOn-Off — включение/выключение по таблице/кривой.\nVariable frequency — частота из таблицы/кривой, скважность 50%.\nxxHz — фиксированная частота, скважность из таблицы/кривой." pwm_onabove_f = "Выход F включается, когда значение таблицы/кривой выше этого числа.\nВерхний порог гистерезиса для канала F." pwm_offbelow_f = "Выход F выключается, когда значение таблицы/кривой ниже этого числа.\nНижний порог гистерезиса для канала F." pwm_opt_load_f = "Переменная для оси нагрузки в таблице/кривой канала F.\nВыберите параметр управления для подключённого устройства." pwm_opt_curve_f = "Выбор между 3D-таблицей и 2D-кривой для канала F.\nДля большинства задач достаточно 2D-кривой. 3D-таблица нужна при зависимости от RPM и нагрузки одновременно." mycan_id = "Установите 0, если не настраиваете это устройство как вторичный ECU для сбора данных.\nИзменяйте только в многоконтроллерных конфигурациях, где несколько ECU общаются по шине CAN. Каждый ECU в сети должен иметь уникальный идентификатор." enable_pollPWM = "Включает захват ШИМ-сигнала (импульсы/частота) с платы расширения.\nПлата расширения позволяет добавить дополнительные входы/выходы через шину CAN. Эта опция активирует приём данных ШИМ от внешней платы." can_poll_id = "CAN-идентификатор платы расширения.\nУкажите CANid, настроенный на вашей плате расширения. По умолчанию обычно 0 или 1. Должен совпадать с настройкой на плате." poll_tablePWM = "Номер таблицы на плате расширения для данных ШИМ.\nСм. документацию вашей платы расширения для определения правильного номера таблицы." poll_offsetPWM = "Смещение данных на плате расширения.\nОпределяет позицию данных в сообщении CAN. См. документацию платы расширения." canpwm_clk = "Тактовая частота на плате расширения. См. документацию.\nНеобходимо для корректного пересчёта захваченных данных ШИМ в физические единицы. Зависит от модели платы расширения." canpwm_pre = "Предделитель (прескалер) на плате расширения. См. документацию.\nВлияет на разрешение и диапазон измерения ШИМ-сигнала. Настройте в соответствии с частотой измеряемого сигнала." canpwm_div = "Делитель на плате расширения. См. документацию.\nИспользуется совместно с тактовой частотой и предделителем для расчёта реальных значений ШИМ. Обратитесь к документации платы." enable_pollADC = "Включает захват аналоговых входов с платы расширения.\nПозволяет использовать дополнительные аналоговые входы 0-5В, расположенные на плате расширения, через шину CAN. Полезно, когда все входы основного ECU заняты." canadc_opt1 = "Включает эту группу аналоговых входов с платы расширения.\nКаждая группа содержит несколько аналоговых каналов. Включайте только используемые группы для оптимизации трафика CAN." canadc_id1 = "CAN-идентификатор платы расширения для этой группы аналоговых входов.\nДолжен совпадать с настройкой на плате расширения. При использовании нескольких плат — каждая должна иметь уникальный CANid." canadc_tab1 = "Номер таблицы на плате расширения для аналоговых данных.\nОпределяет, какую таблицу данных запрашивать с платы расширения. См. документацию." canadc_off1 = "Смещение данных на плате расширения для аналоговых входов.\nОпределяет начальную позицию данных в CAN-сообщении. Зависит от конфигурации платы расширения." can_poll_id_ports = "CAN-идентификатор платы расширения для цифровых входов/выходов.\nУкажите CANid вашей платы расширения. Может отличаться от идентификатора для аналоговых входов, если используются разные платы." poll_tableports = "Номер таблицы на плате расширения для цифровых портов.\nСм. документацию платы расширения для правильного номера." enable_pollports_digin = "Включает использование цифровых входов с платы расширения (CANIN1-8).\nДобавляет до 8 дополнительных цифровых входов через CAN-подключённую плату расширения. Входы могут использоваться для кнопок, переключателей, датчиков положения и т.д." can_poll_digin_offset = "Смещение данных на плате расширения для цифровых входов.\nОпределяет позицию данных цифровых входов в CAN-сообщении. Настройте в соответствии с документацией платы." enable_pollports_digout = "Включает использование цифровых выходов (вкл/выкл) на плате расширения.\nOne = CANOUT1-8 (8 выходов).\nTwo = CANOUT1-8 и CANOUT9-16 (16 выходов).\nПозволяет управлять реле, лампами, соленоидами через внешнюю плату расширения по шине CAN." can_poll_digout_offset = "Смещение данных на плате расширения для цифровых выходов.\nОпределяет позицию команд для цифровых выходов в CAN-сообщении. См. документацию платы расширения." enable_pwmout = "Включает отправку ШИМ/импульсных выходных сигналов на плату расширения.\nПозволяет использовать ШИМ-выходы внешней платы расширения через CAN. Полезно для управления вентиляторами, клапанами и другим оборудованием, когда ШИМ-выходы основного ECU заняты." enable_pwmout255 = "Принудительно устанавливает диапазон скважности ШИМ 0-255 вместо 0-100.\nНапример, универсальные ШИМ-каналы (Generic PWM) работают в диапазоне 0-100, но ваше удалённое устройство может требовать диапазон 0-255. Включите для совместимости с такими устройствами." can_pwmout_id = "CAN-идентификатор платы расширения для ШИМ-выходов.\nУкажите CANid, настроенный на целевой плате расширения. Должен совпадать с настройкой на плате." can_pwmout_tab = "Номер таблицы на плате расширения для ШИМ-выходов.\nОпределяет, в какую таблицу отправлять данные ШИМ. См. документацию платы расширения." can_pwmout_offset = "Смещение данных на плате расширения для ШИМ-выходов.\nОпределяет позицию данных ШИМ в исходящем CAN-сообщении. Настройте в соответствии с документацией." can_bcast1_on = "Включает широковещательную передачу параметров по шине CAN.\nПозволяет отправлять данные двигателя (RPM, температура и т.д.) другим устройствам на шине CAN: приборным панелям, дополнительным дисплеям, системам телеметрии." can_bcast_int = "Интервал широковещательной передачи.\nОпределяет, как часто отправляются данные. Для приборных панелей обычно достаточно 50-100 мс. Более частая передача увеличивает нагрузку на шину CAN." can_bcast1_280x4 = "Включает сообщение 0x280 'Motorsteuergerat 640 — блок управления двигателем, RPM с коэффициентом 4:1'.\nСтандартное CAN-сообщение VW/Audi для передачи оборотов двигателя. Используется для совместимости со штатными приборными панелями VAG. Коэффициент 4:1 означает, что значение RPM делится на 4." can_bcast1_280x1 = "Включает сообщение 0x280 'Motorsteuergerat 640 — блок управления двигателем, RPM с коэффициентом 1:1'.\nАналогично предыдущему, но RPM передаётся без деления. Используйте, если приборная панель ожидает необработанное значение оборотов." can_bcast1_289 = "Включает сообщение 0x289 'Motorsteuergerat 649 — температура двигателя'.\nСтандартное CAN-сообщение VW/Audi для передачи температуры охлаждающей жидкости. Необходимо для корректного показания температуры на штатной приборной панели VAG." can_bcast1_316 = "Включает сообщение 0x316 'BMW E46 — блок управления двигателем, RPM с коэффициентом 6.42:1'. Используйте интервал 50 мс.\nСтандартное CAN-сообщение BMW для передачи оборотов. Необходимо для работы штатного тахометра BMW E46 и аналогичных моделей." can_bcast1_329 = "Включает сообщение 0x329 'BMW — температура охлаждающей жидкости'. Используйте интервал 50 мс.\nСтандартное CAN-сообщение BMW для передачи температуры. Необходимо для корректного показания температуры на штатной приборной панели BMW." can_bcast1_561 = "Включает сообщение 0x561 'Alfa/Fiat/Lancia — температура и RPM для приборной панели'.\nСтандартное CAN-сообщение для итальянских автомобилей группы FCA. Передаёт температуру охлаждающей жидкости и обороты двигателя на штатную приборную панель." can_bcast1_361 = "Включает сообщение 0x361 'Alfa/Fiat/Lancia — крутящий момент, RPM, TPS'.\nДополнительное CAN-сообщение для итальянских автомобилей FCA. Передаёт данные о крутящем моменте, оборотах и положении дросселя. Может быть необходимо для корректной работы АКПП и других систем." can_bcast2_041 = "Включает сообщение 0x041 'Alfa/Fiat/Lancia — инициализация приборной панели'.\nЭто сообщение необходимо для пробуждения и инициализации штатной приборной панели итальянских автомобилей FCA. Без него панель может не включиться или показывать ошибки." can_bcast2_he351 = "Передаёт значение 'boost duty' (скважность управления наддувом) для управления турбиной с изменяемой геометрией (VGT).\nИспользует 29-битное CAN-сообщение 0x0cffc600 и обычно требует скорость шины CAN 250 кбит/с.\nПрименяется для турбин Holset HE351VE и подобных. Убедитесь, что скорость CAN на ECU совпадает с требованиями турбины." can_bcast2_23d = "Включает отправку CAN-сообщения 0x23d 'Nissan 350Z temp/RPM' (температура и обороты). Это сообщение эмулирует штатный блок управления Nissan 350Z для работы с заводской приборной панелью. Если вы используете приборную панель от 350Z, включите эту опцию, чтобы на панели корректно отображались температура двигателя и тахометр." can_bcast2_lotus0407 = "Включает отправку CAN-сообщения 0x400 для 'белой' приборной панели Lotus 2004–2007 годов. Требуется скорость CAN-шины 1 Мбит/с. Убедитесь, что скорость шины выставлена корректно, иначе панель не будет получать данные. Используется для вывода информации о двигателе на штатную приборку Lotus Elise/Exige этих годов выпуска." can_bcast2_lotus0815 = "Включает отправку CAN-сообщения 0x400 для 'чёрной' приборной панели Lotus 2008–2015 годов. Требуется скорость CAN-шины 500 кбит/с. Обратите внимание, что скорость шины отличается от более ранних моделей Lotus (1 Мбит). Не включайте одновременно опции для белой и чёрной панели." can_bcast_lotus_fuel = "Канал универсального входного датчика, используемый для уровня топлива. Настройте датчик так, чтобы он выдавал значение 0 при пустом баке и 100 при полном. Если ваш датчик имеет обратную шкалу (полный бак = низкое сопротивление), инвертируйте сигнал в настройках датчика." can_bcast2_xxx = "Включает отправку пользовательского CAN-пакета. Позволяет настроить произвольное CAN-сообщение для взаимодействия со сторонним оборудованием — дополнительными приборами, дашбордами, внешними контроллерами и т.д. Формат и содержимое пакета настраиваются отдельно." can_enable_on = "Главный выключатель для всех CAN-опросов и трансляций. При установке в 'Off' (Выкл.) по-прежнему работает CAN-passthrough для настройки через TunerStudio, но все остальные CAN-сообщения отключаются. Это полезно при обновлении прошивки на удалённом модуле расширения — отключение CAN-трафика снижает нагрузку на шину и предотвращает конфликты во время прошивки." can_enable_alcan = "Главный выключатель для 29-битного 'Megasquirt CAN' протокола. Обычно должен быть включён для работы passthrough-настройки и обмена данными с другими MS3-совместимыми CAN-устройствами. Если 29-битный протокол не нужен, его можно отключить для предотвращения помех от других устройств, передающих стандартные 29-битные сообщения, или для обеспечения связи с устройствами сторонних производителей, использующих 29-битные трансляции." can_enable_baud = "Устанавливает скорость CAN-шины. 500k — стандартная скорость для Megasquirt. Изменение этого параметра нарушит связь с Megasquirt-совместимыми устройствами. Альтернативные варианты: 250k и 1M — для работы со сторонним оборудованием. Перед изменением убедитесь, что все устройства на шине поддерживают выбранную скорость." can_enable_outpc = "Разрешает запись в данные реального времени (outpc) по CAN. Включайте только при наличии конкретной необходимости. Некорректная или неожиданная запись может нарушить работу двигателя. В большинстве случаев эта опция должна быть выключена — она предназначена для продвинутых применений, например, когда внешний контроллер должен передавать данные в блок MS3." can_enable_tuning = "Разрешает запись настроечных данных по CAN. Включайте только при настройке через удалённый CAN-шлюз (например, второй блок MS3). При прямом подключении к ЭБУ через USB или Serial оставьте выключенным, чтобы исключить случайное изменение данных посторонними CAN-устройствами." vss1_can_id = "CAN-идентификатор (CANid) модуля расширения для VSS1. Укажите адрес платы расширения, с которой считывается сигнал датчика скорости. Должен совпадать с адресом, заданным в настройках модуля расширения." vss1_can_table = "Номер таблицы на модуле расширения для VSS1. Определяет, из какой таблицы данных модуля расширения считывать значение скорости. Обратитесь к документации на конкретный модуль расширения для определения правильного номера." vss1_can_offset = "Смещение данных на модуле расширения для VSS1. Определяет позицию байта в таблице данных модуля расширения, откуда считывается значение скорости. Должно соответствовать документации модуля." vss1_can_size = "Формат хранения данных VSS1 на модуле расширения. Определяет, как именно данные скорости упакованы в таблице модуля расширения (знаковые/беззнаковые, 8/16 бит и т.д.). Обратитесь к документации модуля." vss2_can_offset = "Смещение данных на модуле расширения для VSS2. Аналогично VSS1, но для второго канала датчика скорости. Позиция байта в таблице данных модуля расширения." vss2_can_size = "Формат хранения данных VSS2 на модуле расширения. Определяет формат данных (знаковые/беззнаковые, 8/16 бит). Обратитесь к документации модуля расширения." gear_can_offset = "Смещение данных передачи на модуле расширения. Указывает позицию байта в таблице данных модуля расширения, откуда считывается номер текущей передачи." vss3_can_offset = "Смещение данных VSS3 на модуле расширения. Использует тот же формат данных (размер), что и VSS1. Применяется для третьего канала скорости, например, для контроля скорости отдельного колеса." vss4_can_offset = "Смещение данных VSS4 на модуле расширения. Использует тот же формат данных (размер), что и VSS2. Применяется для четвёртого канала скорости." opt142_rtc = "Включает встроенные часы реального времени (RTC) на плате или выбирает часы на модуле расширения через CAN. Часы реального времени позволяют вести логирование с привязкой к реальному времени, а также управлять функциями, зависящими от времени суток (например, корректировка прогрева по времени стоянки)." rtc_trim = "Применяет коррекцию для компенсации ухода часов реального времени. Если часы спешат или отстают, используйте этот параметр для тонкой подстройки. Положительное значение ускоряет ход часов, отрицательное — замедляет. Проверяйте точность раз в несколько недель и корректируйте при необходимости." can_poll_id_rtc = "CAN-идентификатор (CANid) модуля расширения для часов реального времени. Укажите адрес модуля расширения, на котором установлены часы RTC." poll_table_rtc = "Номер таблицы на модуле расширения для часов реального времени. Определяет, из какой таблицы данных считывается время с модуля расширения." poll_offset_rtc = "Смещение данных на модуле расширения для часов реального времени. Позиция байта в таблице данных, откуда считывается значение времени." can_poll2_ego2 = "Включает приём данных EGO/AFR (лямбда-зонда / широкополосного датчика) с CAN-подключённых устройств на модуле расширения. Disable — по-прежнему принимает сообщения Megaspartan. Innovate — требует IO-extender JBperf с 29-битным Megasquirt-CAN. AEM 4ch UEGO — использует 29-битные сообщения на 500k с ID 0x0000001F, необходимо отключить Megasquirt-CAN. ECOTRONS ALM — использует 250k, необходимо отключить Megasquirt-CAN. Generic — позволяет принимать данные через систему 'CAN Receiving', входное значение должно быть преобразовано в Lambda * 10000. AEM X UEGO — 29-бит, 500k, ID 0x00000180, отключите Megasquirt-CAN. CANEGT broadcast — 11-бит CAN, id 1682/1683, CANEGT должен быть настроен соответственно. 14point7 Spartan3 — слушает id 1024/1025, Spartan3 должен быть настроен. AMPEFI WB — адрес 80 по умолчанию, можно изменить DIP-переключателем. Важно: при использовании сторонних широкополосных контроллеров убедитесь в совместимости скоростей CAN-шины." can_poll2_egolag = "Включает или отключает сглаживание ('lag factor') для данных EGO, полученных по CAN. Обычно устанавливается в Off (Выкл.). Включите, если данные с CAN-подключённого широкополосного датчика слишком «шумные» и вызывают нестабильную работу обратной связи по AFR. Однако чрезмерное сглаживание замедлит реакцию системы." can_ego_id = "CAN-идентификатор (CANid) модуля расширения для EGO/AFR. Должен совпадать с адресом устройства, передающего данные широкополосного датчика." can_ego_table = "Номер таблицы на модуле расширения для EGO/AFR. Определяет, из какой таблицы данных считывается значение AFR." can_ego_offset = "Смещение данных на модуле расширения для EGO/AFR. Позиция байта в таблице данных, откуда считывается значение лямбды." can_poll2_gps = "Включить приём данных GPS по CAN. JBPerf GPS — опрос данных с GPS-модуля JBperf IO-extender через Megasquirt-CAN. Race Technology 11bit — приём 11-битных трансляций от приборной панели/GPS Race Technology. Данные GPS используются для логирования позиции, скорости и могут применяться в системе трекшн-контроля." can_gps_id = "CAN-идентификатор (CANid) модуля расширения для GPS. Укажите адрес устройства GPS на CAN-шине." can_gps_table = "Номер таблицы на модуле расширения для GPS. Определяет, из какой таблицы считываются GPS-данные." can_gps_offset = "Смещение данных на модуле расширения для GPS. Позиция байта в таблице данных для GPS-информации." canrx1_rt_gps_base = "Базовый CAN-идентификатор для GPS-трансляций. Значение по умолчанию: 769 (0x301). Внешняя панель/дашборд должны быть настроены на тот же адрес. Изменяйте только если на шине конфликт адресов." canrx1_rt_accel_base = "Базовый CAN-идентификатор для трансляций акселерометра. Значение по умолчанию: 768 (0x300). Внешняя панель/дашборд должны быть настроены на тот же адрес. Изменяйте только при конфликте адресов на шине." canrx1_opt_accel = "Включение приёма данных акселерометра по CAN. Off — CAN-устройство не используется, данные берутся с аналоговых входов. Race Technology 11bit — приём 11-битных трансляций от приборной панели Race Technology. Kia IMU — приём 11-битных трансляций от инерциального модуля Kia. Данные акселерометра используются для трекшн-контроля и логирования перегрузок." can_accelx_offset = "Поправка для коррекции смещения нуля датчика по оси X (продольной). Датчик должен быть установлен строго горизонтально в автомобиле, так как коррекция углового наклона не поддерживается. Для калибровки установите автомобиль на ровной площадке и подберите значение так, чтобы показания были нулевыми." can_accely_offset = "Поправка для коррекции смещения нуля датчика по оси Y (поперечной). Датчик должен быть установлен строго горизонтально. Для калибровки установите автомобиль на ровной площадке и подберите значение так, чтобы показания были нулевыми." can_accelz_offset = "Поправка для коррекции смещения нуля датчика по оси Z (вертикальной). Датчик должен быть установлен строго горизонтально. При калибровке на ровной площадке вертикальная ось должна показывать 1g (ускорение свободного падения)." can_poll2_vss = "Способ получения данных VSS (датчика скорости): Poll — активный опрос модуля расширения. Listen — пассивный приём, Megasquirt-CAN настраивается на прослушивание сообщений. Этот параметр не применяется при использовании системы 'CAN Receiving'. Выбор режима зависит от того, как настроен модуль расширения — транслирует ли он данные самостоятельно или ожидает опроса." cel_opt_on = "Включает функцию проверки датчиков (CEL — Check Engine Light). При включении система будет отслеживать корректность работы датчиков и зажигать контрольную лампу при обнаружении неисправности. Рекомендуется включить эту функцию для защиты двигателя и диагностики проблем." cel_port = "Выход для контрольной лампы неисправности (CEL). НАСТОЯТЕЛЬНО РЕКОМЕНДУЕТСЯ подключить контрольную лампу при использовании функции CEL. Без лампы вы не увидите предупреждения о неисправности датчиков во время движения. Используйте светодиод или лампу на приборной панели." cel_opt_flash = "Выбирает, горит ли лампа CEL постоянно или мигает кодами для диагностики. Количество вспышек и соответствующая неисправность: 2=MAP, 3=MAT, 4=CLT, 5=TPS, 6=BATT, 7=AFR0, 8=SYNC, 9=EGT, 10=FLEX, 11=MAF, 12=KNOCK, 13=CAM, 14=OIL, 15=FUELPRESS, 16=EGTSHUT, 17=AFRSHUT. Режим мигающих кодов полезен для быстрой диагностики без подключения ноутбука." cel_opt_when = "Должна ли лампа CEL гореть при выключенном двигателе? Обычно лампа зажигается при включении зажигания (до запуска) для проверки работоспособности лампы, а затем гаснет после запуска, если неисправностей нет." cel_runtime = "Время после запуска двигателя, в течение которого датчики не проверяются. Это необходимо, чтобы избежать ложных срабатываний при запуске, когда показания датчиков могут быть нестабильными. Обычно 5–15 секунд достаточно для стабилизации показаний." cel_opt2_map = "Включает проверку датчика MAP (абсолютного давления во впускном коллекторе). При включении система будет отслеживать выход показаний MAP за заданные пределы и сигнализировать о неисправности. Неисправный MAP может привести к серьёзным проблемам — бедной/богатой смеси и потере мощности." map_minadc = "Минимально допустимое значение АЦП (0–1023) для входа MAP. Если показания АЦП упадут ниже этого значения, будет зафиксирована неисправность (обрыв провода, короткое замыкание на массу). Для типичного MAP-датчика на 0–5В минимальное значение обычно составляет 10–20." map_maxadc = "Максимально допустимое значение АЦП (0–1023) для входа MAP. Если показания АЦП превысят это значение, будет зафиксирована неисправность (короткое замыкание на питание). Типичное максимальное значение — 1000–1020." map_var_lower = "Минимально допустимый уровень флуктуаций сигнала MAP. Используется для обнаружения «зависшего» входа (постоянное неизменное значение). Если датчик полностью перестал менять показания, это может указывать на его отказ или обрыв." map_var_upper = "Максимально допустимый уровень флуктуаций сигнала MAP. Используется для обнаружения чрезмерно нестабильного входа. Слишком сильные колебания могут указывать на плохой контакт, наводки или повреждённый датчик." cel_opt2_mat = "Включает проверку датчика MAT (температуры воздуха на впуске). Неисправный MAT приводит к некорректной коррекции топливоподачи по плотности воздуха. Особенно критично на турбированных двигателях, где температура впускного воздуха существенно влияет на расчёт топлива." mat_minadc = "Минимально допустимое значение АЦП (0–1023) для входа MAT. Значение ниже порога указывает на обрыв или КЗ на массу. Для термисторных датчиков NTC при нормальных температурах значение АЦП обычно не падает ниже 5–10." mat_maxadc = "Максимально допустимое значение АЦП (0–1023) для входа MAT. Значение выше порога указывает на КЗ на питание или обрыв датчика (для pull-up схемы). Типичный максимум — 1015–1020." mat_var_upper = "Максимально допустимый уровень флуктуаций сигнала MAT. Чрезмерные колебания температуры воздуха указывают на неисправность датчика или проводки. Температура воздуха не может меняться мгновенно — резкие скачки ненормальны." cel_opt2_clt = "Включает проверку датчика CLT (температуры охлаждающей жидкости). CLT — один из важнейших датчиков: он управляет прогревным обогащением, оборотами ХХ, коррекцией зажигания и многими другими функциями. Неисправность CLT может привести к серьёзным проблемам с запуском и работой двигателя." clt_minadc = "Минимально допустимое значение АЦП (0–1023) для входа CLT. Значение ниже порога обычно означает обрыв или замыкание на массу. Для типичного NTC-термистора GM установите 5–15." clt_maxadc = "Максимально допустимое значение АЦП (0–1023) для входа CLT. Значение выше порога обычно означает КЗ на питание или обрыв (при pull-up). Установите 1010–1020." clt_var_upper = "Максимально допустимый уровень флуктуаций сигнала CLT. Температура ОЖ не может меняться резко — скачки указывают на проблемы с проводкой или датчиком. Установите порог с запасом, но достаточно низкий для обнаружения неисправности." cel_opt2_tps = "Включает проверку датчика TPS (положения дроссельной заслонки). Неисправный TPS влияет на ускорительный насос, переход с ХХ, flood clear и другие функции, зависящие от положения дросселя. При обрыве или КЗ вы можете получить рывки и провалы." tps_minadc = "Минимально допустимое значение АЦП (0–1023) для входа TPS. Значение ниже порога означает обрыв или КЗ на массу. Обычно TPS при полностью закрытом дросселе выдаёт не менее 10–50 единиц АЦП." tps_maxadc = "Максимально допустимое значение АЦП (0–1023) для входа TPS. Значение выше порога означает КЗ на питание. Типичный TPS при полностью открытом дросселе выдаёт не более 950–1010 единиц АЦП." tps_var_upper = "Максимально допустимый уровень флуктуаций сигнала TPS. Слишком большие колебания при неизменном положении дросселя указывают на износ резистивной дорожки или плохой контакт. Изношенный TPS — частая причина нестабильной работы на холостом ходу." cel_opt2_batt = "Включает проверку напряжения бортовой сети. Контроль напряжения важен, так как оно влияет на мёртвое время форсунок и время накопления катушек зажигания. Пониженное напряжение может привести к бедной смеси и пропускам зажигания." batt_minv = "Минимально допустимое напряжение бортовой сети. Типичное значение — 9–10 В. Ниже этого уровня могут быть проблемы с зарядкой генератора, разряженным аккумулятором или плохим контактом." batt_maxv = "Максимально допустимое напряжение бортовой сети. Типичное значение — 16–17 В. Превышение может указывать на неисправность регулятора напряжения генератора. Завышенное напряжение опасно для электроники." batt_var_upper = "Максимально допустимый уровень флуктуаций напряжения. Сильные скачки напряжения указывают на проблемы с генератором, плохие контакты или неисправный аккумулятор." cel_opt2_afr0 = "Включает проверку входа EGO/AFR (широкополосного лямбда-зонда). Неисправный лямбда-зонд приводит к некорректной работе обратной связи по смеси. Система может переобогащать или переобеднять смесь, что опасно для двигателя и катализатора." afr_min = "Минимально допустимое значение AFR. Обычно 9–10 AFR. Показания ниже этого значения нереалистичны и указывают на неисправность датчика или контроллера ШДК. Даже при максимальном обогащении реальный AFR редко опускается ниже 10." afr_max = "Максимально допустимое значение AFR. Обычно 19–20 AFR. Показания выше нереалистичны при работающем двигателе (за исключением торможения двигателем с отключённой подачей топлива)." afr_var_lower = "Минимально допустимый уровень флуктуаций AFR. Обнаруживает «зависший» сигнал — неменяющийся AFR при работающем двигателе ненормален. Если датчик перестал реагировать, это может указывать на его отказ." afr_var_upper = "Максимально допустимый уровень флуктуаций AFR. Слишком сильные колебания могут указывать на неисправность проводки или контроллера ШДК, либо на серьёзную нестабильность работы двигателя." cel_opt2_sync = "Включает проверку потерь синхронизации. Потеря синхронизации означает, что ЭБУ потерял отслеживание положения коленвала. Частые потери синхронизации приводят к пропускам зажигания и некорректному впрыску. Причины: неисправный датчик КВ, повреждённый задающий диск, наводки." cel_synctol = "Порог количества потерь синхронизации для включения лампы CEL. Установите значение, превышение которого будет считаться неисправностью. Единичные потери синхронизации могут быть допустимы, но регулярные — нет. Типичное значение — 5–10 потерь за период контроля." cel_opt2_egt = "Включает проверку входа EGT (температуры выхлопных газов). Контроль EGT критически важен на турбированных двигателях и двигателях с закисью — чрезмерная температура выхлопных газов может разрушить турбину, выпускные клапаны или поршни." egt_minvalid = "Минимально допустимая температура EGT. Показания ниже этого значения при работающем двигателе указывают на неисправность термопары или обрыв провода. Установите значение чуть ниже минимальной ожидаемой рабочей температуры." egt_maxvalid = "Максимально допустимая температура EGT. Показания выше этого значения опасны для двигателя. Типичный безопасный максимум для стальных коллекторов — 900°C, для турбин — 950–1050°C в зависимости от материала. Установите с запасом." egt_var_lower = "Минимально допустимый уровень флуктуаций EGT. Обнаруживает «зависший» вход — неменяющаяся температура при работающем двигателе ненормальна и указывает на отказ термопары." egt_var_upper = "Максимально допустимый уровень флуктуаций EGT. Слишком сильные колебания указывают на плохой контакт или наводки на линию термопары. Используйте экранированные провода для термопар." cel_opt3_flex = "Включает проверку датчика Flex-fuel (содержания этанола в топливе). Неисправный датчик Flex-fuel приведёт к некорректным коррекциям топливоподачи и зажигания при работе на смешанном топливе. Если вы используете Flex-fuel, обязательно включите эту проверку." cel_opt_adc = "Устанавливает, что будет записано в gauge 'status5': число флуктуаций или сырое значение АЦП для выбранного датчика. Эта функция полезна для диагностики — можно в реальном времени наблюдать качество сигнала с каждого датчика и подбирать пороги срабатывания CEL." cel_opt_stat = "Выбирает датчик для отображения в gauge 'status5'. Наблюдайте показания на приборной панели TunerStudio и анализируйте логи для определения разумных пределов флуктуаций и значений АЦП для каждого датчика по очереди. Это поможет правильно настроить пороги срабатывания CEL." cel_action1_map = "Будет ли некорректное показание MAP активировать аварийный режим (limp mode). В аварийном режиме ЭБУ ограничивает обороты, наддув и может использовать резервные таблицы. Рекомендуется включить для защиты двигателя — без корректного MAP двигатель может работать на опасно бедной смеси." cel_action1_map_an = "Будет ли некорректное показание MAP активировать резервную таблицу MAP. Резервная таблица позволяет двигателю продолжать работу, используя расчётные значения MAP вместо неисправного датчика. Это даёт возможность безопасно доехать до сервиса." cel_action1_mat = "Будет ли некорректное показание MAT активировать аварийный режим. При неисправности MAT коррекция плотности воздуха будет некорректной, что может привести к бедной/богатой смеси. Аварийный режим использует фиксированную подстановочную температуру." cel_mat_default = "Подстановочная температура MAT при неисправности датчика. При отказе MAT ЭБУ будет использовать это значение для расчёта плотности воздуха. Рекомендуется установить среднюю ожидаемую температуру впускного воздуха, обычно 25–40°C для атмосферных двигателей, выше для турбо." cel_action1_clt = "Будет ли некорректное показание CLT активировать аварийный режим. CLT влияет на множество параметров — прогревное обогащение, обороты ХХ, коррекции зажигания. Его отказ может привести к серьёзным проблемам. Аварийный режим использует эмуляцию прогрева." cel_clt_cold = "Подстановочная температура CLT для холодного запуска при неисправности датчика. ЭБУ будет использовать это значение при запуске двигателя, если датчик CLT неисправен. Установите типичную температуру холодного запуска (0–20°C в зависимости от климата), чтобы обеспечить достаточное прогревное обогащение." cel_clt_warm = "Подстановочная температура CLT для прогретого двигателя при неисправности датчика. ЭБУ будет использовать это значение после завершения эмулированного прогрева. Обычно 80–90°C — нормальная рабочая температура большинства двигателей." cel_warmtime = "Время эмулированного прогрева при неисправности CLT. Если датчик CLT отказал, ЭБУ будет линейно переходить от «холодной» к «тёплой» подстановочной температуре за указанное время. Установите реалистичное время прогрева вашего двигателя (обычно 3–10 минут)." cel_action1_tps = "Будет ли некорректное показание TPS активировать аварийный режим. Без TPS не работает ускорительный насос и другие функции, зависящие от положения дросселя. Двигатель будет плохо реагировать на газ." cel_action1_batt = "Будет ли некорректное показание напряжения бортовой сети активировать аварийный режим. Некорректное напряжение влияет на коррекцию мёртвого времени форсунок и времени накопления катушек. Без правильной коррекции смесь и искра могут быть далеки от оптимальных." cel_action1_ego = "Будет ли некорректное показание AFR/EGO активировать аварийный режим. При неисправности лямбда-зонда обратная связь по смеси отключается. Если ваша VE-таблица хорошо настроена, двигатель может работать нормально и без обратной связи." cel_action2_flex = "Будет ли некорректное показание Flex-fuel активировать аварийный режим. При отказе датчика Flex-fuel коррекции для этанола будут некорректны. Если вы заправляетесь только бензином, это менее критично." cel_action2_egt = "Будет ли некорректное показание EGT активировать аварийный режим. Особенно важно на турбированных двигателях — без контроля EGT вы не узнаете о перегреве выхлопной системы до тех пор, пока не будет нанесён ущерб." cel_action2_oil = "Будет ли выход давления масла за пределы допустимого диапазона активировать аварийный режим. Пределы давления масла настраиваются на экране limp mode. Низкое давление масла — прямая угроза двигателю. Настоятельно рекомендуется включить для защиты." cel_revlim = "Ограничитель оборотов в аварийном режиме (limp mode). Установите низкое безопасное значение, достаточное для медленного движения до сервиса. Обычно 2500–3500 RPM. Цель — позволить доехать, не повредив двигатель." cel_overboost = "Максимальный наддув в аварийном режиме. Установите 102 кПа (атмосферное давление) для полного отключения наддува в аварийном режиме. На атмосферных двигателях также установите 102 кПа." cel_boost_duty = "Фиксированная скважность клапана управления наддувом в аварийном режиме. Установите значение для минимального наддува, обычно 0%. Это обеспечит сброс давления наддува через байпас при активации аварийного режима." cel_boost_duty2 = "Фиксированная скважность второго клапана управления наддувом в аварийном режиме. Аналогично первому клапану — установите для минимального наддува, обычно 0%." cel_retard = "Уменьшение угла опережения зажигания (ретард) в аварийном режиме. Задайте, на сколько градусов запоздить зажигание в limp mode. Позднее зажигание снижает мощность и нагрузку на двигатель, но повышает температуру выхлопных газов. Обычно 5–15 градусов." testint = "Частота тестовых импульсов на катушку/форсунку. Задаёт интервал между тестовыми срабатываниями. Используется в режиме стендовой проверки компонентов. Убедитесь, что двигатель не запущен при использовании этого режима!" testrpm = "Приблизительный эквивалент RPM при работе одного выхода. Показывает, каким оборотам соответствует заданный интервал тестовых импульсов. Это справочное значение для понимания режима работы при тестировании." testop_coil = "Режим тестирования катушек: одиночный выбранный выход или последовательный перебор выходов до выбранного. В режиме 'sequence' это НЕ симуляция реально работающего двигателя — каждый выход срабатывает индивидуально, без перекрытия времени накопления. Используйте для проверки проводки и работоспособности каждой катушки." testsel_coil = "Выбор выхода катушки зажигания для тестирования. Укажите номер выхода, который хотите проверить. Проверяйте каждую катушку по очереди, наблюдая искру на свече (используйте тестер искры, не держите свечу руками!)." testdwell = "Время накопления (dwell) при тестировании. Коррекция по напряжению НЕ применяется в режиме тестирования. Установите значение из спецификации вашей катушки. Чрезмерный dwell может перегреть и повредить катушку!" testop_inj = "Режим тестирования форсунок: одиночная выбранная или последовательный перебор до выбранной. В режиме 'sequence' — НЕ симуляция реального двигателя, каждая форсунка срабатывает индивидуально без перекрытия. Используйте для проверки проводки и работоспособности форсунок." testsel_inj = "Выбор выхода форсунки для тестирования. Укажите номер форсунки для проверки. При тестировании убедитесь, что в системе есть давление топлива и подготовьте ёмкость для сбора топлива. Искры и открытый огонь недопустимы!" testpw = "Длительность импульса впрыска (pulsewidth) при тестировании. Мёртвое время (dead-time) и коррекция по напряжению НЕ применяются в тестовом режиме. Задайте полное время открытия форсунки включая мёртвое время." testinjcnt = "Количество импульсов впрыска в каждом тесте. Ограничивает число срабатываний форсунки за один тестовый цикл. Полезно для дозированной проверки — например, подать 10 импульсов и проверить объём впрыснутого топлива." pwm_testio = "Частота пульсирующих выходов при тестировании. Задаёт частоту ШИМ-сигнала для тестирования вспомогательных PWM-выходов." duty_testio = "Скважность пульсирующих выходов при тестировании. Задаёт процент заполнения ШИМ-сигнала для тестирования вспомогательных выходов." iachometest = "Количество шагов для процедуры поиска нуля (homing) шагового клапана ХХ. Должно быть установлено больше, чем полное количество шагов от полностью открытого до полностью закрытого положения. Если значение слишком мало, клапан не дойдёт до упора и позиция нуля будет неверной. Типично 200–300 шагов." iacpostest = "Желаемая позиция шагового клапана ХХ при тестировании. Используйте для проверки работы шагового мотора — задайте позицию и убедитесь, что клапан перемещается. Большие значения = более открытый клапан." feature3_n2oin = "Обычно должно быть 'On', чтобы вход реагировал на сигнал +12В. Убедитесь, что джампер JP8 НЕ установлен на плате MS3X. Этот вход используется для активации системы закиси азота (N2O). При установленном JP8 вход будет работать некорректно." u08_debug38_1 = "Экспериментальная функция: запись временных интервалов срабатывания в датчики sensors9-16. Может использоваться для мониторинга вклада каждого цилиндра в общую работу двигателя (диагностика пропусков воспламенения). Внимание: перезаписывает любые значения этих датчиков!" u08_debug38_2 = "Режим скачивания лога с SD-карты: остановка в конце полезных данных (normal) или скачивание всего файла (testing only). Обычный режим значительно быстрее. Полное скачивание полезно только для отладки самой системы логирования." fuelcalctime = "Частота вычисления расхода топлива. Определяет, как часто ЭБУ пересчитывает текущий расход. Более частый пересчёт даёт более точные мгновенные показания, но увеличивает нагрузку на процессор." RotarySplitModeFD = "Режим управления trailing (вспомогательными) катушками роторного двигателя: FC mode — общая trailing-катушка для двух trailing-свечей (как на Mazda RX-7 FC). FD mode — индивидуальные катушки для каждой trailing-свечи (как на Mazda RX-7 FD). Выберите соответствующий вашей конфигурации зажигания." RotarySplitModeNeg = "Обычно trailing-катушки срабатывают после leading-катушек (положительный split). Эта опция позволяет сделать split отрицательным — trailing-катушки будут срабатывать ДО leading-катушек. Используется для специфической настройки горения смеси в роторном двигателе." dwelltime_trl = "Время накопления (dwell) для trailing-катушки(-ек) роторного двигателя. Может отличаться от dwell leading-катушек. Установите согласно спецификации вашей trailing-катушки. Недостаточный dwell — слабая искра, избыточный — перегрев катушки." ;curves help text oil_press_min = "Таблица минимального и максимального давления масла для каждого значения RPM. При выходе за пределы загорится предупреждающая лампа. Рекомендуется установить первую строку на 0 RPM с ненулевыми Min и Max — это обеспечит проверку работоспособности лампы при каждом запуске (когда двигатель не работает, давление = 0, что ниже минимума). Нормальное давление масла: на ХХ 1–2 бар, на высоких оборотах 3–5 бар." hpte_afrs = "Кривая обогащения AFR для HPTE (High Performance Timed Enrichment) по времени. Первая строка обычно 0, 0 (нет изменения AFR в начале). Вторая строка задаёт момент начала обогащения, например 7, 0 — это означает, что с 0 до 7 секунд нет изменения AFR. Последующие строки задают величину обогащения (уменьшение AFR = более богатая смесь). Используется для продлённого обогащения при длительном полном газе, например на трековых автомобилях." fp_temp_adj = "Процентная коррекция топливоподачи в зависимости от температуры топлива. 0% — нет коррекции. Горячее топливо имеет меньшую плотность и требует увеличения длительности впрыска. Применимо при наличии датчика температуры топлива. Особенно актуально для автомобилей с возвратной топливной магистралью в жарком климате." fp_press_adj = "Процентная коррекция топливоподачи в зависимости от давления топлива. 0% — нет коррекции. Давление для расчёта всегда берётся как разница давлений через форсунку (давление в рампе минус давление во впуске). Полезно при нестабильном давлении топлива или использовании безвозвратной системы. Требует датчик давления топлива." dualfuel_temp_adj = "Процентная коррекция топливоподачи второго топлива в зависимости от температуры. 0% — нет коррекции. Аналогично fp_temp_adj, но для второй топливной системы (dual fuel). Применяется при работе двигателя на двух видах топлива (например, бензин + LPG или бензин + E85)." dualfuel_press_adj = "Процентная коррекция топливоподачи второго топлива в зависимости от давления. 0% — нет коррекции. Давление для расчёта — перепад через форсунку (давление в рампе минус давление во впуске). Для системы dual fuel с отдельной рампой и датчиком давления." fpd_duty = "Таблица скважности управляющего выхода для топливного насоса или контроллера. Значения задают процент скважности (duty cycle) в зависимости от RPM и нагрузки. Позволяет снизить давление/расход топливного насоса на низких оборотах и нагрузках для уменьшения нагрева топлива и шума." alt_dutyout = "Таблица компенсации нелинейности управления генератором. Позволяет учесть нелинейную характеристику генератора и ограничить диапазон выходной скважности. Полезно для точной настройки зарядного напряжения." alternator_targvolts = "Целевое напряжение зарядки в зависимости от температуры аккумулятора. Работает только при наличии датчика температуры аккумулятора. Холодный аккумулятор требует более высокого напряжения зарядки (до 14.8В), горячий — более низкого (13.5–14.0В) для предотвращения выкипания электролита." alternator_dutyv = "Скважность управления генератором для достижения целевого напряжения. Определяет зависимость между скважностью управляющего сигнала и выходным напряжением генератора. Настраивается экспериментально для конкретного генератора." alternator_periodv = "Период управляющего сигнала генератора для достижения целевого напряжения. Генераторы Ford описываются через частоту, но представление в виде периода в миллисекундах (1000/частота) даёт линейную зависимость, что упрощает настройку. Например, 100 Гц = 10 мс период." pwm_duties_a = "Таблица A: значения скважности или частоты выхода PWM в зависимости от нагрузки и RPM. Выходное значение определяется по двумерной таблице: по одной оси — обороты двигателя, по другой — входная 'нагрузка'. Используется для управления вспомогательными устройствами: вентиляторы, клапаны, насосы и т.д." pwm_duties_b = "Таблица B: значения скважности или частоты выхода PWM в зависимости от нагрузки и RPM. Аналогично таблице A, но для второго PWM-канала. Каждый канал может быть назначен на свой выход и управлять отдельным устройством." pwm_duties_c = "Таблица C: значения скважности или частоты выхода PWM в зависимости от нагрузки и RPM. Третий PWM-канал для управления дополнительными устройствами." pwm_duties_d = "Таблица D: значения скважности или частоты выхода PWM в зависимости от нагрузки и RPM. Четвёртый PWM-канал для управления дополнительными устройствами." pwm_duties_e = "Таблица E: значения скважности или частоты выхода PWM в зависимости от нагрузки и RPM. Пятый PWM-канал для управления дополнительными устройствами." pwm_duties_f = "Таблица F: значения скважности или частоты выхода PWM в зависимости от нагрузки и RPM. Шестой PWM-канал для управления дополнительными устройствами." pwm_yaxis_a = "Кривая A: скважность или частота выхода PWM в зависимости от входного значения нагрузки. Если используется одномерная кривая вместо двумерной таблицы — значение выхода определяется только по нагрузке, без учёта RPM." pwm_yaxis_b = "Кривая B: скважность или частота выхода PWM в зависимости от нагрузки. Аналогично кривой A, но для второго PWM-канала." pwm_yaxis_c = "Кривая C: скважность или частота выхода PWM в зависимости от нагрузки. Третий PWM-канал." pwm_yaxis_d = "Кривая D: скважность или частота выхода PWM в зависимости от нагрузки. Четвёртый PWM-канал." pwm_yaxis_e = "Кривая E: скважность или частота выхода PWM в зависимости от нагрузки. Пятый PWM-канал." pwm_yaxis_f = "Кривая F: скважность или частота выхода PWM в зависимости от нагрузки. Шестой PWM-канал." tcslipy = "Задаёт порог допустимого проскальзывания (slip%) при различных положениях регулятора (0–100%). Позволяет настроить агрессивность трекшн-контроля. Больший допустимый slip — менее строгий контроль, больше мощности на колёсах, но выше риск потери сцепления." tc_knob = "Включает аналоговый вход для регулировки порога проскальзывания. Вход 0–5В соответствует 0–100%. Обычно подключается поворотный потенциометр на приборной панели, позволяющий водителю регулировать чувствительность трекшн-контроля прямо из кабины, не обращаясь к ноутбуку." blendy1 = "Задаёт процент смешивания таблиц VE1 (0%) и VE2 (100%) на основе входного значения по оси X. Позволяет плавно переходить от одной VE-таблицы к другой. Типичное применение — Flex-fuel (переход между бензиновой и этанольной VE-таблицей) или переключение между атмосферным и наддувным режимами." blendy2 = "Задаёт процент смешивания таблиц зажигания Spk1 (0%) и Spk2 (100%) на основе входного значения. Позволяет плавно переходить между двумя картами зажигания. Используется при Flex-fuel (разные углы для бензина и этанола) или для переключения карт." blendy3 = "Задаёт процент смешивания комбинации VE1+2 (0%) и VE3+4 (100%) на основе входного значения. Используется при сложных конфигурациях с четырьмя VE-таблицами. Позволяет плавно переключаться между двумя парами таблиц." blendy4 = "Задаёт процент смешивания комбинации Spk1+2 (0%) и Spk3+4 (100%) на основе входного значения. Для сложных конфигураций с четырьмя таблицами зажигания." blendy5 = "Задаёт процент смешивания целевых AFR1 (0%) и AFR2 (100%) на основе входного значения. Позволяет иметь разные целевые AFR-таблицы и плавно переходить между ними. Например, для Flex-fuel: бензин требует AFR 14.7, E85 — около 9.8." blendy6 = "Задаёт процент смешивания таблиц наддува Boost1 (0%) и Boost2 (100%) на основе входного значения. Например, можно переключать целевой наддув кнопкой или потенциометром: низкий наддув для обычной езды, высокий — для трека." blendy7 = "Задаёт процент смешивания таблиц пусковых импульсов Cranking Pulse1 (0%) и Cranking Pulse2 (100%) на основе входного значения. Используется при Flex-fuel — этанол требует существенно более длинных пусковых импульсов, чем бензин, из-за высокой теплоты испарения." blendy8 = "Задаёт процент смешивания таблиц Tables1 (0%) и Tables2 (100%) на основе процента содержания этанола (Flex-fuel). Например: 0% таблица для 10% этанола и 100% таблица для 85% этанола. Промежуточные значения рассчитываются линейной интерполяцией." blend_opt1 = "Выбирает переменную для оси X кривой смешивания VE. Определяет, какой параметр управляет переходом между таблицами: Flex-fuel%, температура, напряжение и т.д. Обратите внимание: VSS указывается в MPH (милях в час)." blend_opt2 = "Выбирает переменную для оси X кривой смешивания зажигания. Определяет параметр для перехода между таблицами зажигания. VSS в MPH." blend_opt3 = "Выбирает переменную для оси X кривой смешивания VE (расширенная). Для конфигурации с четырьмя VE-таблицами. VSS в MPH." blend_opt4 = "Выбирает переменную для оси X кривой смешивания зажигания (расширенная). Для конфигурации с четырьмя таблицами зажигания. VSS в MPH." blend_opt5 = "Выбирает переменную для оси X кривой смешивания AFR. Определяет, какой параметр управляет переходом между целевыми AFR-таблицами. VSS в MPH." blend_opt6 = "Выбирает переменную для оси X кривой смешивания наддува. Определяет, какой параметр управляет переходом между таблицами наддува. VSS в MPH." blend_opt7 = "Выбирает переменную для оси X кривой смешивания пусковых импульсов. Определяет параметр для перехода между таблицами пусковых импульсов. VSS в MPH." tpswot_tps = "Задаёт порог TPS%, который считается полностью открытым дросселем (WOT), в зависимости от RPM. На низких оборотах частичное открытие дросселя обеспечивает тот же воздушный поток, что и полное открытие. На максимальных оборотах нужен полностью открытый дроссель. Когда TPS достигает или превышает этот порог, он считается 100%. Это делает ускорительный насос (accel enrichment) более чувствительным при малых углах открытия на низких RPM и предотвращает ложное срабатывание ускорительного насоса, если дроссель уже 'полностью открыт'." launch_retard = "Кривая ретарда зажигания при launch control — градусы уменьшения УОЗ от времени после старта. Используется для launch control: позволяет стартовать с высоких оборотов, не срывая колёса в пробуксовку, а затем плавно возвращает нормальное зажигание. Обязательно завершите кривую нулевым значением ретарда, чтобы после завершения программы launch использовалось нормальное зажигание. Типичный ретард на старте — 10–20 градусов в зависимости от мощности и покрытия." cl_idle_timing_advance_deltas = "Коррекция угла зажигания для помощи замкнутому контуру управления холостым ходом. Ось X — отклонение RPM от целевых оборотов ХХ. Например, если цель 800 RPM, то -75 означает 725 RPM. Ось Y — коррекция УОЗ: + = опережение, - = запаздывание. Типично: при оборотах ниже целевых — добавить опережение (увеличивает обороты), при оборотах выше целевых — уменьшить (снижает обороты). Обычно ±5–10 градусов достаточно для стабилизации ХХ." idle_voltage_comp_delta = "Компенсация напряжения для 2-проводных PWM-клапанов холостого хода. Некоторые клапаны ХХ работают по-разному при разном напряжении бортовой сети. При пониженном напряжении клапану нужна чуть большая скважность (положительное значение), при повышенном — меньшая (отрицательное). Настройте, если обороты ХХ 'плавают' при включении/выключении мощных потребителей (фары, кондиционер)." maeBins = "Кривая обогащения при ускорении по MAP (MAPdot) — процент добавки к длительности впрыска. Часть базовой схемы ускорительного насоса по времени. Чем быстрее растёт давление во впуске, тем больше дополнительного топлива нужно. Значение — процент от ReqFuel. Начните с умеренных значений и увеличивайте, если есть провалы при резком нажатии на газ." taeBins = "Кривая обогащения при ускорении по TPS (TPSdot) — процент добавки к длительности впрыска. Часть базовой схемы ускорительного насоса по времени. Чем быстрее открывается дроссель, тем больше топлива нужно добавить. Значение — процент от ReqFuel. На двигателях с длинным впуском (крупный плёнум) обогащение по TPS обычно важнее, чем по MAP." accel_mapdot_amts = "Кривая ускорительного насоса (accel-pump) по MAPdot — процент добавки к длительности впрыска. Режим accel-pump (как механический ускорительный насос карбюратора). Большее изменение MAP = больше топлива. Отрицательная часть кривой используется для обеднения при замедлении (decel enleanment), или установите 0% для отсутствия обеднения. Обязательно включите точку 0,0 в кривую — при неизменном MAP дополнительное топливо не должно подаваться. Значение — процент от ReqFuel." accel_tpsdot_amts = "Кривая ускорительного насоса (accel-pump) по TPSdot — процент добавки к длительности впрыска. Режим accel-pump. Быстрое открытие дросселя = больше топлива. Отрицательная часть — обеднение при замедлении. Обязательна точка 0,0 в кривой. Значение — процент от ReqFuel. Этот режим лучше имитирует работу настоящего ускорительного насоса карбюратора и обычно даёт более гладкий отклик, чем time-based режим." maeBins2 = "Кривая обогащения при ускорении по MAPdot для второго топлива. Аналогично maeBins, но для second fuel (dual fuel система). Процент от ReqFuel. Разные виды топлива могут требовать разной интенсивности ускорительного обогащения — этанол обычно требует больше." taeBins2 = "Кривая обогащения при ускорении по TPSdot для второго топлива. Аналогично taeBins, но для second fuel. Процент от ReqFuel." accel_mapdot_amts2 = "Кривая accel-pump по MAPdot для второго топлива. Аналогично accel_mapdot_amts, но для second fuel. Включите точку 0,0. Отрицательная часть — decel enleanment. Процент от ReqFuel." accel_tpsdot_amts2 = "Кривая accel-pump по TPSdot для второго топлива. Аналогично accel_tpsdot_amts, но для second fuel. Включите точку 0,0. Отрицательная часть — decel enleanment. Процент от ReqFuel." knock_starts = "Угол коленвала для начала прослушивания детонации (для каждого цилиндра). Детонация обычно возникает вскоре после ВМТ (верхней мёртвой точки), когда давление в цилиндре максимально. Типичное начало окна — 5–15 градусов после ВМТ. Для каждого цилиндра можно задать индивидуальные значения." knock_durations = "Длительность окна прослушивания детонации в градусах поворота коленвала. Определяет, как долго система «слушает» детонацию после начального угла. Обычно 30–60 градусов. Слишком узкое окно может пропустить детонацию, слишком широкое — поймать ложные срабатывания от механических шумов." knock_thresholds = "Порог допустимого уровня детонации до начала ретарда зажигания. Значения сильно зависят от конкретного двигателя, типа датчика детонации и его расположения. Начните с низкого порога и увеличивайте, если система даёт ложные срабатывания. Лучше настраивать на прогретом двигателе под нагрузкой." knock_upscale = "Масштабирование порога детонации при холодном двигателе. Позволяет повысить порог на непрогретом двигателе, который часто более шумный и может вызывать ложные срабатывания. Холодный двигатель производит больше механического шума из-за увеличенных зазоров." tc_perfect_vss = "Трекшн-контроль по «идеальному заезду» — кривая скорости (VSS) по времени после старта. Задаёт «лучшую» скорость автомобиля для каждого момента времени после launch. Если фактическая скорость (VSS) превышает кривую — система считает это пробуксовкой и активирует реакции (ретард, cut и т.д.). Эта стратегия обычно применяется только в начале заезда. Обратите внимание: трекшн-контроль по VSS запрещён в некоторых гоночных классах." tc_perfect_rpm = "Трекшн-контроль по «идеальному заезду» — кривая RPM по времени после старта. Если фактические обороты превышают кривую — фиксируется пробуксовка. Эта стратегия работает только на первой передаче. Установите последнюю строку таблицы на момент времени чуть раньше ожидаемого переключения передачи с оборотами выше максимальных RPM двигателя, чтобы деактивировать контроль при переключении." tc_retard = "Величина ретарда зажигания при пробуксовке в зависимости от произведения величины проскальзывания на время. Чем сильнее и дольше пробуксовка, тем больше ретард. Ретард снижает мощность и позволяет колёсам восстановить сцепление. Типичные значения — до 20–30 градусов при сильной пробуксовке." tc_spkcut = "Величина отсечки зажигания при пробуксовке. Задаёт процент пропущенных искр в зависимости от интеграла пробуксовки (величина × время). Отсечка — эффективный способ быстрого снижения мощности, но менее плавный, чем ретард." tc_nitrous = "Величина отключения закиси азота при пробуксовке. Задаёт степень отсечки N2O в зависимости от интеграла пробуксовки. Закись добавляет значительную мощность, и её отключение — один из самых эффективных способов борьбы с пробуксовкой." tc_boost = "Величина снижения целевого наддува при пробуксовке. Уменьшает target boost в зависимости от интеграла пробуксовки (величина × время). На турбированных автомобилях снижение наддува — основной инструмент контроля тяги." tc_boost_duty_delta = "Изменение скважности клапана наддува при пробуксовке. Позволяет напрямую менять duty cycle соленоида wastegate/BOV в зависимости от интеграла пробуксовки. Используется для более быстрой реакции, чем закрытый контур по давлению." tc_addfuel = "Количество дополнительного топлива при пробуксовке. Добавление топлива (обогащение) снижает мощность за счёт ухудшения горения при богатой смеси. Менее распространённый метод контроля тяги, но может использоваться в сочетании с другими." primePWTable = "Таблица пусковых (priming) импульсов впрыска в зависимости от температуры двигателя. Пусковой импульс подаётся однократно при включении зажигания для смачивания стенок впускного коллектора и обеспечения начального топлива для запуска. Холодный двигатель требует более длинных пусковых импульсов. Установка всех значений в 0 также отключит прокачку топливного насоса." primePWTable2 = "Таблица пусковых импульсов для второго топлива (dual fuel). Аналогично primePWTable, но для второй топливной системы. Этанол требует более длинных пусковых импульсов из-за высокой теплоты испарения. Установка всех значений в 0 также отключит прокачку топливного насоса." crankPctTable = "Процентная таблица топливоподачи при прокрутке стартером (cranking). Большинству двигателей нужно 200–400% при холодном пуске и около 100% при горячем. Значение задаётся как процент от ReqFuel, поэтому при замене форсунок эту кривую менять не нужно. Если двигатель плохо заводится на холодную — увеличьте значения в холодной зоне. Если заливает свечи — уменьшите." crankPctTable2 = "Процентная таблица топливоподачи при cranking для второго топлива. Аналогично crankPctTable, но для dual fuel. Этанол (E85) обычно требует 300–500% при холодном пуске. Значение — процент от ReqFuel." asePctTable = "Таблица послепускового обогащения (ASE — After Start Enrichment) в процентах. Сразу после запуска двигатель обычно нуждается в дополнительном топливе (5–50%). Значение — процентная добавка к основной топливоподаче. На холодном двигателе требуется больше, на горячем — меньше или 0%." asePctTable2 = "Таблица послепускового обогащения для второго топлива (ASE). Аналогично asePctTable, но для dual fuel. Этанол может требовать более высоких значений ASE из-за худшего испарения при низких температурах." aseCntTable = "Длительность послепускового обогащения (ASE) в циклах двигателя или секундах. Определяет, как долго применяется послепусковое обогащение. Холодному двигателю нужно более длительное ASE (до 60–120 секунд), горячему — минимальное (5–15 секунд)." aseCntTable2 = "Длительность послепускового обогащения для второго топлива. Аналогично aseCntTable, но для dual fuel." wueBins = "Таблица множителя прогревного обогащения (WUE — Warm-Up Enrichment) в процентах. При холодном двигателе может потребоваться 200–300% от базового топлива. В последней строке таблицы (полностью прогретый двигатель) ОБЯЗАТЕЛЬНО должно быть 100% — это означает отсутствие коррекции. WUE компенсирует плохое испарение топлива на холодных стенках впуска. Пользователи LPG могут отключить предупреждение о прогреве на странице настроек gauge." wueBins2 = "Таблица прогревного обогащения для второго топлива (WUE). Аналогично wueBins. В последней строке ОБЯЗАТЕЛЬНО 100%. Газовое топливо (LPG) не требует прогревного обогащения, так как не конденсируется на стенках." mafflow = "Кривая расхода воздуха через MAF (массовый расходомер) в граммах/сек в зависимости от частоты или напряжения. Начните с заводской характеристики вашего MAF-датчика, затем корректируйте (tweek) под вашу конкретную установку. Расположение MAF, длина и диаметр патрубков влияют на характеристику. Для точной настройки используйте логи AFR." dwellrpm_dwell = "Таблица изменения времени накопления (dwell) по оборотам для зажигания Saab Trionic. На высоких оборотах может потребоваться уменьшить dwell из-за ограниченного времени между искрами. Специфично для системы зажигания Saab Trionic." boostvss_duty = "Скважность соленоида наддува в зависимости от скорости автомобиля (VSS1 или VSS2). Для открытого контура управления наддувом. Позволяет снижать наддув на низких скоростях (низших передачах) для предотвращения пробуксовки. На высоких скоростях (высших передачах) можно дать полный наддув." boostvss_target = "Целевой уровень наддува в зависимости от скорости (VSS1 или VSS2). Для замкнутого контура. Позволяет ограничить наддув на низких передачах для снижения риска пробуксовки или потери управления. На первой передаче — минимальный наддув, на высших — полный." n2o1_duty = "Скважность соленоида закиси (N2O Stage 1) в зависимости от времени активации, RPM или VSS. Для прогрессивного управления — N2O подаётся не сразу на полную мощность, а плавно нарастает. Это снижает шанс пробуксовки и повреждения трансмиссии при включении." n2o2_duty = "Скважность соленоида закиси (N2O Stage 2) в зависимости от времени активации, RPM или VSS. Аналогично Stage 1. Вторая ступень обычно активируется позже или при более высоких оборотах для дополнительной мощности." n2o1_pw = "Дополнительная длительность впрыска топлива для N2O Stage 1 в зависимости от времени, RPM или VSS. Дополнительное топливо критически важно при использовании закиси — без него двигатель будет работать на опасно бедной смеси. Пропорция обычно определяется типом и размером N2O-форсунки." n2o2_pw = "Дополнительная длительность впрыска топлива для N2O Stage 2. Аналогично Stage 1. Убедитесь, что топливная система способна обеспечить суммарный расход основного топлива + добавки для обеих ступеней N2O." n2o1_retard = "Ретард зажигания для N2O Stage 1 в зависимости от времени, RPM или VSS. Закись азота увеличивает скорость горения, поэтому для предотвращения детонации необходимо уменьшить опережение зажигания. Типичный ретард — 2–4 градуса на каждые 50 л.с. добавленной мощности." n2o2_retard = "Ретард зажигания для N2O Stage 2. Аналогично Stage 1. Суммарный ретард для обеих ступеней должен обеспечивать отсутствие детонации." n2o1_fuelpct = "Процент дополнительного топлива для N2O Stage 1 между минимальными и максимальными RPM. Добавленный PW = процент × значение из таблицы PW lookup. Обычно этот процент должен совпадать со скважностью соленоида N2O. Можно подстроить вверх/вниз для коррекции смеси. Следите за AFR!" n2o2_fuelpct = "Процент дополнительного топлива для N2O Stage 2. Аналогично Stage 1. Регулируйте на основании показаний широкополосного лямбда-зонда. При работе N2O целевой AFR обычно 11.5–12.5 для безопасности." matclt_pct = "Кривая процента подмешивания CLT (температуры ОЖ) в показания MAT (температуры воздуха) в зависимости от расхода воздуха. Теоретически: при нулевом расходе воздух в коллекторе нагревается до температуры ОЖ, при бесконечном — остаётся неизменным. Кривая даёт 'лучшую оценку' реальной температуры впускного воздуха для расчёта плотности (speed-density). Ожидается подмешивание CLT на малых расходах, падающее к нулю на больших. При первом включении этой функции необходимо скорректировать VE на низких оборотах, так как они ранее компенсировали изменение плотности воздуха." smallpw0 = "Коррекция нелинейности форсунок при малых длительностях импульса (форсунка 1). Тестирование показывает, что форсунки обычно линейны при PW > 2 мс, но ниже этого значения для достижения нужного расхода требуется большая фактическая длительность. Например: для получения расхода, соответствующего '1.0 мс', может понадобиться фактический PW 1.5 мс. Эта коррекция особенно важна на холостом ходу и при малых нагрузках." smallpw1 = "Коррекция нелинейности форсунок при малых PW (форсунка 2). Аналогично smallpw0. Каждая форсунка может иметь индивидуальную нелинейность. Для точной настройки рекомендуется тестировать каждую форсунку на проливочном стенде." smallpw2 = "Коррекция нелинейности форсунок при малых PW (форсунка 3). Аналогично smallpw0. Различия между форсунками на малых PW могут быть существенными и приводить к неравномерной работе цилиндров на ХХ." smallpw3 = "Коррекция нелинейности форсунок при малых PW (форсунка 4). Аналогично smallpw0. Если используются одинаковые форсунки и индивидуальная калибровка не требуется, можно задать одинаковые значения для всех." ; opentimepct0 = "Specifies the percentage change in injector deadtime vs. system voltage.\n13.2V is typically 100%.\nAt lower voltages the deadtime % will be above 100%; at higher voltages it will be below 100%" ; opentimepct1 = "Specifies the percentage change in injector deadtime vs. system voltage.\n13.2V is typically 100%.\nAt lower voltages the deadtime % will be above 100%; at higher voltages it will be below 100%" ; opentimepct2 = "Specifies the percentage change in injector deadtime vs. system voltage.\n13.2V is typically 100%.\nAt lower voltages the deadtime % will be above 100%; at higher voltages it will be below 100%" ; opentimepct3 = "Specifies the percentage change in injector deadtime vs. system voltage.\n13.2V is typically 100%.\nAt lower voltages the deadtime % will be above 100%; at higher voltages it will be below 100%" inj_deadtime_table1 = "Двумерная таблица мёртвого времени (dead-time) форсунок в микросекундах в зависимости от напряжения бортовой сети и ДИФФЕРЕНЦИАЛЬНОГО давления топлива. Для перевода из миллисекунд умножьте на 1000 (1.234 мс = 1234 мкс). Мёртвое время — это задержка от момента подачи сигнала до фактического открытия форсунки. При низком напряжении мёртвое время увеличивается, при высоком давлении — тоже. Правильная настройка dead-time критична для точной топливоподачи." inj_deadtime_curve1 = "Кривая мёртвого времени (dead-time) форсунок в микросекундах в зависимости от напряжения бортовой сети. Для перевода из миллисекунд умножьте на 1000 (1.234 мс = 1234 мкс). Используйте данные от производителя форсунок или измерьте на проливочном стенде. Типичный dead-time — 0.5–1.5 мс при 14В." boost_timed_pct = "Плавное включение наддува по времени после launch. 100% означает использование нормальных настроек наддува. Значения ниже 100% ограничивают наддув пропорционально. Позволяет плавно наращивать наддув после старта для предотвращения пробуксовки. Например: 0 сек = 30%, 1 сек = 60%, 2 сек = 100%." map_sample_timing = "Угол сэмплирования MAP для каждого цилиндра при включённом режиме timed MAP sampling. Задаёт угол BTDC (до ВМТ), при котором начинается считывание MAP для каждого цилиндра. Требуется экспериментальная настройка с использованием диагностики Diagnostics-MAP logger. Правильный угол сэмплирования обеспечивает считывание MAP в момент, когда давление во впуске наиболее стабильно и отражает реальное наполнение цилиндра." dwellcorr = "Процентная коррекция номинального dwell (времени накопления) в зависимости от напряжения бортовой сети. Индуктивные катушки зажигания требуют большего времени накопления при пониженном напряжении для обеспечения достаточной энергии искры. При 10В может потребоваться 150% от номинала, при 16В — 80%. Недостаточный dwell = слабая искра, избыточный = перегрев катушки." cold_adv_table = "Кривая коррекции опережения зажигания при прогреве двигателя. Позволяет добавить опережение на холодном двигателе для стабилизации холостого хода и улучшения отклика. Некоторые двигатели, наоборот, требуют ретарда (запаздывания) при прогреве для быстрого прогрева каталитического нейтрализатора. Типичные значения: +2–5 градусов при -20°C, плавно убывая до 0 при рабочей температуре." iacstepTable = "Таблица позиции шагового клапана холостого хода (IAC) в зависимости от температуры ОЖ. Большие значения = клапан более открыт. 0 = полностью закрыт. Кривая начинается с высоких значений при низких температурах (больше воздуха для холодного ХХ) и снижается к нулю при высоких температурах. Для типичного двигателя: 150–200 шагов при -20°C, 30–50 при 80°C." ipwmTable = "Таблица скважности PWM-клапана холостого хода в зависимости от температуры ОЖ. Большая скважность = больше воздуха. Обычно 0% = полностью закрыт (некоторые 2-проводные клапаны Bosch имеют закрытое положение около 35%). Кривая: высокие значения при холодном двигателе, снижение к 0% (или минимуму) при рабочей температуре. Начните с 50–70% при -20°C и 10–20% при 80°C." matRetard = "Коррекция (ретард) зажигания в зависимости от температуры впускного воздуха. Прежде всего для турбированных двигателей, где нагрев наддувного воздуха увеличивает риск детонации. Чем горячее воздух, тем больше ретард. Также помогает на атмосферных двигателях в жаркую погоду. Типично: 0° при 30°C, 2–3° при 50°C, 5–8° при 70°C." baroCorrDelta = "Коррекция топливоподачи по барометрическому давлению. Сильно зависит от конкретной установки! Если вы ездите по горам, обязательно следите за AFR и корректируйте эту кривую. Использование '%baro' в качестве основного расчёта топлива обычно предпочтительнее. Два способа использования: 1. Текущий: на странице MAP/Baro значения 'At total vacuum' и 'rate' = 0. Кривая корректируется относительно 100% (100% = нет коррекции). 2. Старый: значения 147 и -47, кривая базируется от 0% (0% = нет коррекции). На высоте воздух менее плотный — нужно меньше топлива." matCorrDelta2 = "Полная коррекция плотности воздуха по температуре. Основана на законе идеального газа: плотность обратно пропорциональна абсолютной температуре. Типичный диапазон: 125% при низких температурах до 75% при высоких. Горячий воздух менее плотный — нужно меньше топлива, холодный — более плотный, нужно больше." matCorrDelta = "Коррекция топливоподачи по MAT при использовании MAF для расчёта топлива. При работе по MAF-расходомеру основная коррекция по температуре уже встроена в показания MAF. Эта кривая позволяет внести дополнительные поправки. По умолчанию 0% — нет коррекции. Изменяйте только при необходимости." EAEAWN2 = "Модификация кривой EAE Adhere-to-walls (прилипание к стенкам) по оборотам (второе топливо). Позволяет увеличить или уменьшить величину коррекции EAE в зависимости от RPM. На высоких оборотах топливо лучше испаряется и меньше прилипает к стенкам." EAEAWN = "Модификация кривой EAE Adhere-to-walls (прилипание к стенкам) по оборотам. На высоких оборотах повышается скорость воздушного потока и температура коллектора, что улучшает испарение топлива и уменьшает плёнку на стенках. Эта кривая позволяет скорректировать коэффициент прилипания." EAEAWW2 = "Модификация кривой EAE Adhere-to-walls по температуре ОЖ (второе топливо). На холодном двигателе топливо хуже испаряется и больше конденсируется на стенках — коэффициент прилипания должен быть выше." EAEAWW = "Модификация кривой EAE Adhere-to-walls по температуре ОЖ. Холодные стенки впускного коллектора конденсируют больше топлива. По мере прогрева испарение улучшается. Эта кривая корректирует коэффициент прилипания в зависимости от CLT." EAEBAWC2 = "Кривая EAE: процент топлива, оседающего на стенках впускного канала при каждом впрыске (второе топливо). Ось Y — процент каждого впрыска, оседающий на стенках. Ось X — нагрузка. При большей нагрузке (больше топлива) больший процент попадает на стенки." EAEBAWC = "Кривая EAE: процент топлива, оседающего на стенках при каждом впрыске. Ось Y — процент, ось X — нагрузка. Определяет, какая доля каждого впрыска формирует топливную плёнку на стенках канала, а не попадает непосредственно в цилиндр. Значения зависят от типа форсунок и конструкции впуска." EAEBSOC2 = "Кривая EAE: процент топлива, всасываемого со стенок при каждом такте впуска (второе топливо). Ось Y — процент от ОБЩЕГО количества топлива на стенках. Ось X — нагрузка. Значения значительно меньше (примерно в 10 раз), чем коэффициенты прилипания, так как за каждый цикл со стенок отрывается лишь малая часть плёнки." EAEBSOC = "Кривая EAE: процент топлива, всасываемого со стенок при каждом такте впуска. Ось Y — процент от общего количества топлива на стенках. Ось X — нагрузка. Процент мал (примерно в 10 раз меньше коэффициента прилипания), так как за один цикл со стенок отрывается немного топлива. Это ключевой параметр для точной переходной топливоподачи." EAESON2 = "Модификация кривой EAE Sucked-from-walls (всасывание со стенок) по RPM (второе топливо). Позволяет увеличить или уменьшить интенсивность отрыва топлива от стенок в зависимости от оборотов. На высоких оборотах более сильный поток воздуха сдувает больше топлива со стенок." EAESON = "Модификация кривой EAE Sucked-from-walls по RPM. Более высокие обороты = более сильный воздушный поток = больше топлива отрывается от стенок за каждый цикл. Эта кривая корректирует коэффициент всасывания." EAESOW2 = "Модификация кривой EAE Sucked-from-walls по температуре ОЖ (второе топливо). При прогретом двигателе топливо испаряется быстрее со стенок — коэффициент всасывания должен расти с температурой." EAESOW = "Модификация кривой EAE Sucked-from-walls по температуре ОЖ. Горячие стенки ускоряют испарение и отрыв топлива от плёнки. По мере прогрева двигателя топливная плёнка на стенках уменьшается быстрее." XAcc = "Процент топлива (0–100%), формирующий плёнку на стенках при ускорении (при увеличении PW). Остальная часть впрыска попадает непосредственно в цилиндр и сгорает. Высокие значения означают, что при разгоне значительная часть топлива «теряется» на стенках и нужна компенсация. Зависит от типа впуска и расположения форсунок." XDec = "Процент топлива (0–100%), формирующий плёнку на стенках при замедлении (при уменьшении PW). При сбросе газа меньше топлива попадает на стенки, но ранее накопленная плёнка продолжает испаряться." TauAcc = "Временной фактор (Tau) по RPM при ускорении. Определяет скорость нарастания/убывания топливной плёнки на стенках при ускорении. Большие значения = более медленная реакция. Зависит от инерционности процессов испарения на впускном тракте." TauDec = "Временной фактор (Tau) по RPM при замедлении. Определяет скорость изменения топливной плёнки при сбросе газа. Может отличаться от TauAcc, так как процессы испарения при снижении потока воздуха идут иначе." XClt = "Коррекция фактора X (доля топлива на стенках) по температуре ОЖ (CLT). Холодный двигатель: больше топлива конденсируется на стенках, X увеличивается. Горячий: X уменьшается, так как стенки горячие и топливо испаряется быстрее. Критически важно для переходных режимов на холодном двигателе." TauClt = "Коррекция временного фактора Tau по температуре ОЖ (CLT). На холодном двигателе испарение со стенок медленнее — Tau больше. По мере прогрева испарение ускоряется — Tau уменьшается." MapThreshXTD = "Порог MAPdot для перехода к таблицам X-Tau Accel. Таблицы ускорения X-Tau используются, когда MAPdot положительный или менее отрицательный, чем этот порог. В промежуточной зоне используется плавное смешивание (blend) между таблицами ускорения и замедления." MapThreshXTD2 = "Порог MAPdot для перехода к таблицам X-Tau Decel. Таблицы замедления X-Tau используются, когда MAPdot более отрицательный, чем этот порог. В промежуточной зоне между этим и первым порогом используется плавное смешивание." NoiseFilterLen = "Длительность фильтра помех для входа тахометра в зависимости от RPM. Цель — отфильтровать кратковременные шумовые импульсы на входе датчика коленвала. Настройки зависят от типа задающего колеса и специфики двигателя. Внимание: слишком большое значение отфильтрует реальные зубья! Примеры: 36-1, 60-2: 500 RPM = 200 мкс, 7500 RPM = 13 мкс. Простой триггер: 500 RPM = 1800 мкс, 7500 RPM = 120 мкс. Если есть потери синхронизации на высоких оборотах — уменьшите фильтр. На низких оборотах при шумном сигнале — увеличьте." idleadvance_curve = "Кривая опережения зажигания при активном Idle-Advance в зависимости от нагрузки двигателя. Типично: малое опережение при низкой нагрузке, увеличение при росте нагрузки для стабилизации ХХ. Когда на двигатель ложится дополнительная нагрузка (включение кондиционера, ГУР на упоре и т.д.), более раннее зажигание помогает поддержать обороты." pwmidle_target_rpms = "Целевые обороты холостого хода (closed-loop) в зависимости от температуры ОЖ. Нормально устанавливать повышенные обороты ХХ на холодном двигателе (900–1200 RPM при -20°C), плавно снижая по мере прогрева до нормальных (700–850 RPM при рабочей температуре). Это улучшает прогрев, снижает выбросы и обеспечивает стабильную работу при загустевшем масле." RevLimRpm1 = "Ограничитель оборотов по температуре ОЖ. При включённом ограничителе на основе температуры охлаждающей жидкости позволяет задать различные жёсткие лимиты оборотов в зависимости от температуры двигателя. Это защищает холодный двигатель от чрезмерных оборотов, когда масло ещё не достигло рабочей вязкости и зазоры в деталях увеличены. Практический совет: установите более низкий лимит (например, 3000-4000 RPM) при холодном двигателе и постепенно повышайте его до рабочего значения по мере прогрева." pwmidle_crank_dutyorsteps_duty = "Положение клапана холостого хода (скважность ШИМ) во время прокрутки стартером. Установите достаточно высокое значение, чтобы двигатель мог запуститься без нажатия на педаль газа в холодную погоду, но не настолько высокое, чтобы обороты взлетали сразу после пуска. Практический совет: начните с 60-70% для холодного пуска. Если двигатель глохнет при запуске — увеличьте, если обороты подскакивают выше 2000 RPM — уменьшите. Проверяйте при разных температурах." pwmidle_crank_dutyorsteps_steps = "Положение шагового клапана холостого хода (количество шагов) во время прокрутки стартером. Установите достаточно высокое значение, чтобы двигатель мог запуститься без нажатия на педаль газа в холодную погоду, но не настолько высокое, чтобы обороты подскакивали сразу после пуска. Практический совет: начните со значения примерно 70-80% от полного хода клапана. Подбирайте опытным путём при холодном и горячем двигателе." ITB_load_loadvals = "Кривая распределения нагрузки для режима ITB (дроссели на каждый цилиндр). Определяет, какая часть таблицы VE использует метод Speed-Density, а какая — Alpha-N. Область таблицы VE ниже значения нагрузки из этой кривой будет работать в режиме Speed-Density, а область выше — в режиме Alpha-N. Если не уверены — оставьте 50% по всему диапазону. ВАЖНО: изменение этой кривой потребует полной перенастройки таблицы VE. Практический совет: при использовании ITB сигнал MAP нестабилен на частичных нагрузках, поэтому Alpha-N лучше работает в верхней части диапазона нагрузок. Подробнее см. руководство по настройке режима ITB." ITB_load_switchpoints = "Кривая точек переключения для режима ITB. Определяет значение TPS, при котором MAP-нагрузка достигает порога переключения (%Baro, например 90% от барометрического давления). На низких RPM значение будет ниже, на высоких — выше. Эта кривая индивидуальна для каждого двигателя и должна настраиваться на основе данных логов (например, с помощью диаграмм рассеяния). ВАЖНО: правильная настройка этой кривой — ключевой элемент режима ITB. Изменение потребует перенастройки таблицы VE. Практический совет: запишите лог на разных режимах, постройте scatter-plot TPS vs MAP при разных RPM и используйте эти данные для заполнения кривой." ITB_load_mappoint = "Порог MAP для переключения с MAP-нагрузки на TPS-нагрузку в режиме ITB. Выше этого значения MAP настройка переключается с MAP-based на TPS-based. По умолчанию 90% — подходит для большинства двигателей. Использует показания датчиков MAP и барометра. Практический совет: значение 90% работает хорошо в большинстве случаев. Уменьшайте, только если наблюдаете проблемы с переходными режимами в зоне переключения." ITB_load_idletpsthresh = "Минимальное значение TPS, необходимое для разрешения переключения на TPS-based настройку в режиме ITB. Иногда полезно при настройке холостого хода, чтобы предотвратить нежелательное переключение режима нагрузки на ХХ. Практический совет: установите чуть выше значения TPS на холостом ходу (обычно 1-3%), чтобы холостой ход всегда работал в режиме Speed-Density, который более стабилен на малых оборотах." ; tables ego_auth_table = "Таблица авторитета (допустимого влияния) лямбда-коррекции по EGO-датчику в зависимости от режима работы двигателя. Значение 0 означает отсутствие коррекции топлива по лямбда-зонду, т.е. работу в режиме открытого контура (open-loop). При использовании раздельных таблиц авторитета эта таблица отвечает за положительное направление (добавление топлива). Практический совет: на холостом ходу и крейсерском режиме можно установить 10-20%. На полной нагрузке (WOT) рекомендуется 0% — настройка на полном газу должна выполняться вручную по таблице VE. В зоне разгона также лучше минимальный авторитет." ego_auth_table2 = "Таблица отрицательного авторитета лямбда-коррекции (уменьшение топлива) по EGO-датчику. Значение 0 — нет коррекции (open-loop). Положительные числа в таблице означают допустимый процент уменьшения топлива: например, 5 означает разрешение убрать до 5% топлива. Практический совет: обычно отрицательный авторитет можно сделать чуть больше положительного на крейсерских режимах, чтобы экономить топливо. На полной нагрузке — всегда 0%, чтобы исключить обеднение смеси." ltt_table1 = "Таблица долгосрочной топливной коррекции (Long-Term Trim, LTT) — только для чтения. Показывает значения долгосрочной коррекции, рассчитанные блоком управления на основе обратной связи от лямбда-зонда. Практический совет: если значения LTT в какой-то зоне стабильно отличаются от 0 более чем на 5-10%, это сигнал, что таблицу VE в этой зоне нужно подкорректировать вручную. Перенесите коррекцию LTT в таблицу VE и сбросьте LTT." alphaMAPtable = "Приблизительная таблица MAP по Alpha-N (TPS vs RPM). Используется как резервное значение MAP при работе в режиме Alpha-N или при отказе датчика MAP. Практический совет: заполните эту таблицу реальными значениями MAP из логов. Это важно для аварийного режима работы — при выходе датчика MAP из строя двигатель сможет продолжить работу по этой таблице." pwmidle_cl_initialvalues_duties = "Начальная (ориентировочная) скважность ШИМ-клапана холостого хода для различных RPM/нагрузок. Позволяет задать стартовое положение клапана для быстрого «запуска» замкнутого контура регулирования ХХ. Практический совет: заполните таблицу значениями, при которых двигатель стабильно держит нужные обороты ХХ. Чем точнее начальные значения — тем быстрее и плавнее PID-регулятор выйдет на целевые обороты. Определите значения экспериментально в режиме открытого контура." pwmidle_cl_initialvalues_steps = "Начальное (ориентировочное) положение шагового клапана холостого хода для различных RPM/нагрузок. Позволяет задать стартовую позицию клапана для быстрого «запуска» замкнутого контура регулирования ХХ. Практический совет: определите правильные позиции шагового мотора для разных температурных режимов в open-loop, затем перенесите их сюда перед включением closed-loop управления." vvt_timing1 = "Целевой угол фазовращателя VVT (относительный) в зависимости от RPM и нагрузки — канал 1. Практический совет: на низких оборотах и малой нагрузке небольшое опережение впуска улучшает стабильность ХХ и экономичность. На средних оборотах увеличение перекрытия фаз повышает наполнение. На высоких оборотах обычно требуется уменьшение перекрытия. Настраивайте на стенде по крутящему моменту." vvt_timing2 = "Целевой угол фазовращателя VVT (относительный) в зависимости от RPM и нагрузки — канал 2. Практический совет: для двухвальных систем VVT (DVVT) этот канал обычно управляет выпускным валом. Настройка аналогична каналу 1, но углы выпускного вала влияют на перекрытие фаз с другой стороны. Оптимизируйте совместно с каналом 1." als_rifuelcut = "Процент отсечки топлива в зависимости от RPM/нагрузки в режиме антилаг при удержании холостого хода (idle anti-lag). ВАЖНО: работает ТОЛЬКО с последовательным (sequential) впрыском, т.к. отключает форсунки поочерёдно (round-robin). Практический совет: антилаг на ХХ используется в ралли для поддержания давления наддува на стоянке. Будьте осторожны — агрессивные настройки сильно нагружают турбину и выпускной коллектор." als_fuelcut = "Процент отсечки топлива в зависимости от RPM/нагрузки в режиме антилаг. ВАЖНО: работает ТОЛЬКО с последовательным (sequential) впрыском, т.к. отключает форсунки поочерёдно (round-robin). Практический совет: отсечка топлива в сочетании с поздним зажиганием и дополнительным топливом создаёт горение в выпускном коллекторе для поддержания вращения турбины. Начинайте с консервативных значений (20-30%) и увеличивайте постепенно." als_sparkcut = "Процент пропуска искры в зависимости от RPM/нагрузки в режиме антилаг. Пропуск искры происходит поочерёдно (round-robin). Практический совет: пропуск искры позволяет несгоревшей смеси попасть в выпуск, где она воспламеняется, поддерживая вращение турбины. Обычно используется вместе с отсечкой топлива и поздним зажиганием. Начните с 20-30%." als_timing = "Угол опережения зажигания в зависимости от RPM/нагрузки в режиме антилаг. Обычно это значения от -20 до -50 градусов (после ВМТ, ATDC). Практический совет: позднее зажигание заставляет горение происходить в выпускном тракте, что поддерживает давление наддува. Типичные значения: от -20° (мягкий антилаг) до -50° (агрессивный). ВНИМАНИЕ: слишком агрессивные значения могут повредить турбину, выпускной коллектор и клапаны!" als_addfuel = "Процент дополнительного топлива в зависимости от RPM/нагрузки в режиме антилаг. Практический совет: дополнительное топливо обогащает смесь для горения в выпуске. Типичные значения 10-30%. Слишком много топлива может потушить пламя, слишком мало — не даст эффекта. Настраивайте совместно с углом зажигания и отсечками." waterinj_duty = "Скважность (duty cycle) выхода впрыска воды/метанола в зависимости от RPM и нагрузки. Практический совет: впрыск воды/метанола эффективен под высокой нагрузкой и в бусте для снижения температуры впускного заряда и предотвращения детонации. На низкой нагрузке обычно 0%. Увеличивайте скважность пропорционально давлению наддува. Метанол дополнительно добавляет топлива — учитывайте это в настройке AFR." maxafr1_diff = "Максимально допустимое отклонение AFR в сторону обеднения. Сравнивает целевую таблицу AFR с показаниями широкополосного лямбда-зонда. На низких нагрузках и оборотах обычно допускается большее отклонение. На высоких нагрузках и в бусте требуется жёсткий контроль для защиты от обеднения. Практический совет: на ХХ и крейсере допустимо 1.0-2.0 AFR отклонения. На полной нагрузке — не более 0.3-0.5 AFR. В бусте — минимально, чтобы защитить двигатель от детонации и прогара поршней." veTable1 = "Основная топливная таблица VE (1). Большие значения VE означают больше топлива, меньшие — меньше. Практический совет: это главная таблица настройки топливоподачи. При использовании Speed-Density значения примерно соответствуют волюметрической эффективности двигателя в процентах. Настраивайте с помощью автотюна или вручную по показаниям широкополосного лямбда-зонда, стремясь к целевым AFR из таблицы afrTable." veTable2 = "Вторичная топливная таблица VE (2). Может использоваться как таблица смешивания (blend) с таблицей 1. Большие значения VE означают больше топлива, меньшие — меньше. Практический совет: в режиме смешивания (blend) итоговое значение VE рассчитывается как комбинация таблиц 1 и 2 по заданной пропорции. Полезно для двухтопливных систем (например, бензин + этанол) или для коррекции по дополнительному параметру." veTable3 = "Альтернативная основная топливная таблица VE (3). Может использоваться как переключаемая таблица от таблицы 1. Большие значения VE означают больше топлива, меньшие — меньше. Практический совет: переключаемые таблицы удобны для разных режимов работы (например, разные виды топлива, разные конфигурации наддува). Переключение может происходить по внешнему входу или условию." veTable4 = "Альтернативная вторичная топливная таблица VE (4). Может использоваться как смешиваемая и переключаемая таблица от комбинации таблиц 1+2. Большие значения VE означают больше топлива, меньшие — меньше. Практический совет: используется в сложных конфигурациях с одновременным применением blend и switch. Например, две пары таблиц для двух видов топлива с плавным переходом." idleve_table1 = "Значения VE, используемые при активном режиме idle-VE (VE для холостого хода) — таблица 1. Практический совет: отдельная таблица VE для ХХ позволяет точно настроить топливоподачу на малых оборотах без влияния на основную таблицу. Используйте, если основная таблица VE не обеспечивает достаточной точности на ХХ. Переход между idle-VE и основной таблицей происходит плавно." idleve_table2 = "Значения VE, используемые при активном режиме idle-VE (VE для холостого хода) — таблица 2. Практический совет: аналогично таблице 1, но для вторичной таблицы VE. Используется, если активен режим blend для таблиц VE на холостом ходу." staged_percents = "Процент стейджинга (включения вторичных форсунок). 0% = стейджинг отключён, работают только первичные форсунки. 100% = полный стейджинг, вторичные форсунки работают на 100%. Практический совет: стейджинг используется, когда первичные форсунки не обеспечивают достаточную производительность на полной нагрузке. Начинайте включение вторичных форсунок плавно (например, с 20%) при 60-70% нагрузки и доводите до 100% на максимальной нагрузке. Резкое включение может вызвать скачок AFR." afrTable1 = "Целевая таблица AFR (1) в зависимости от RPM и нагрузки. Когда 'incorporate AFR' выключен — таблица служит только справочной (для отображения и автотюна). Когда 'incorporate AFR' включён — таблица участвует в расчёте топливоподачи. НАСТРОЙТЕ ЭТУ ТАБЛИЦУ ДО НАЧАЛА ТЮНИНГА. Практический совет: типичные значения: ХХ — 14.0-14.7, крейсер — 14.7 (стехиометрия), полная нагрузка атмо — 12.5-13.0, буст — 11.0-12.0. Для E85 значения будут другими (ХХ ~10.0, WOT ~8.0-9.0)." afrTable2 = "Целевая таблица AFR (2) в зависимости от RPM и нагрузки. Когда 'incorporate AFR' выключен — таблица служит только справочной. Когда 'incorporate AFR' включён — таблица участвует в расчёте топливоподачи. НАСТРОЙТЕ ЭТУ ТАБЛИЦУ ДО НАЧАЛА ТЮНИНГА. Практический совет: вторая таблица AFR обычно используется при blend/switch конфигурации. Например, для альтернативного топлива или другого режима наддува." advanceTable1 = "Основная таблица угла опережения зажигания (1). Значения — фактический угол до ВМТ (BTDC). Обязательно проверьте базовый угол зажигания стробоскопом перед началом настройки! Практический совет: типичные значения для атмосферного двигателя: ХХ 10-18°, крейсер 30-38°, WOT 28-36°. Для турбо: ХХ 12-18°, крейсер 25-35°, буст 15-25° (зависит от давления). Всегда контролируйте детонацию! Лучше слишком поздно, чем слишком рано." advanceTable2 = "Вторичная таблица угла опережения зажигания (2). Может использоваться как таблица смешивания (blend) с таблицей 1. Практический совет: удобна для коррекции зажигания по дополнительному параметру, например, по температуре впуска или качеству топлива." advanceTable3 = "Альтернативная основная таблица угла опережения зажигания (3). Может использоваться как переключаемая таблица от таблицы 1. Практический совет: полезна для переключения карт зажигания между разными видами топлива (например, 95 и 98 бензин, или бензин и E85)." advanceTable4 = "Альтернативная вторичная таблица угла опережения зажигания (4). Может использоваться как смешиваемая и переключаемая таблица от комбинации таблиц 1+2. Практический совет: используется в сложных конфигурациях — например, blend по температуре впуска + switch по виду топлива." RotarySplitTable = "Задаёт разделение (задержку) в градусах между ведущей и ведомой катушками роторного двигателя (Ванкеля). Практический совет: split timing влияет на полноту сгорания в роторном двигателе. Типичные значения 10-20° на ХХ, увеличиваясь на высоких оборотах. Настраивается индивидуально по логам и на стенде." boost_ctl_pwm_targets = "Целевая скважность (duty cycle) управляющего выхода для open-loop буст-контроля в зависимости от TPS и RPM. Практический совет: в режиме open-loop вы напрямую задаёте скважность соленоида вестгейта. Большая скважность = больше давления наддува. Начните с низких значений (20-30%) и увеличивайте постепенно, контролируя давление буста на каждом шаге." boost_ctl_load_targets = "Целевое абсолютное давление наддува (kPa) для closed-loop буст-контроля в зависимости от TPS и RPM. Значения всегда выше 100 kPa (т.к. абсолютное давление). Практический совет: например, для цели 1 бар буста при атмосферном давлении 100 kPa установите 200 kPa. Можно задать разное целевое давление для разных TPS — например, меньше буста при частичном газе для плавности." boost_ctl_pwm_targets2 = "Целевая скважность управляющего выхода для open-loop буст-контроля — канал 2, в зависимости от TPS и RPM. Практический совет: второй канал используется для twin-turbo систем или для второго соленоида. Настройка аналогична первому каналу." boost_ctl_cl_pwm_targs1 = "Начальная (ориентировочная) скважность клапана буста для closed-loop управления — канал 1. Позволяет задать стартовое положение клапана перед включением PID-регулирования. Таблица заполняется с помощью режима 'Setup Mode' как open-loop таблица. Когда значения близки к правильным — переключитесь на 'Basic Mode' или 'Advanced Mode' для включения closed-loop. Практический совет: чем точнее начальные значения, тем быстрее и стабильнее PID выйдет на целевое давление. Потратьте время на тщательную настройку в Setup Mode." boost_ctl_cl_pwm_targs2 = "Начальная (ориентировочная) скважность клапана буста для closed-loop управления — канал 2. Позволяет задать стартовое положение клапана перед включением PID-регулирования. Таблица заполняется с помощью режима 'Setup Mode' как open-loop таблица. Когда значения близки к правильным — переключитесь на 'Basic Mode' или 'Advanced Mode' для включения closed-loop. Практический совет: для twin-turbo — настраивайте каждый канал отдельно, добиваясь одинакового давления от обеих турбин." boost_ctl_load_targets2 = "Целевое абсолютное давление в коллекторе (kPa) для closed-loop буст-контроля — канал 2, в зависимости от TPS и RPM. Для режима Open-loop Dome Control — задаёт целевое давление в купольной камере вестгейта. Практический совет: при dome-контроле целевое давление в куполе напрямую управляет открытием вестгейта. Обычно оно примерно равно целевому давлению наддува или чуть выше." inj_trima = "Индивидуальная коррекция топливоподачи (+/- %) для отдельного цилиндра. Позволяет компенсировать разницу в составе смеси между цилиндрами. Практический совет: используйте данные индивидуальных лямбда-зондов или EGT-датчиков для определения необходимой коррекции. Типичный разброс ±5%. Если коррекция превышает ±10%, проверьте форсунки, наличие подсоса воздуха или проблем с впускным коллектором." inj_trimb = "Индивидуальная коррекция топливоподачи (+/- %) для отдельного цилиндра. Позволяет компенсировать разницу в составе смеси между цилиндрами. Практический совет: используйте данные индивидуальных лямбда-зондов или EGT-датчиков для определения необходимой коррекции. Типичный разброс ±5%." inj_trimc = "Индивидуальная коррекция топливоподачи (+/- %) для отдельного цилиндра. Позволяет компенсировать разницу в составе смеси между цилиндрами. Практический совет: используйте данные индивидуальных лямбда-зондов или EGT-датчиков для определения необходимой коррекции. Типичный разброс ±5%." inj_trimd = "Индивидуальная коррекция топливоподачи (+/- %) для отдельного цилиндра. Позволяет компенсировать разницу в составе смеси между цилиндрами. Практический совет: используйте данные индивидуальных лямбда-зондов или EGT-датчиков для определения необходимой коррекции. Типичный разброс ±5%." inj_trime = "Индивидуальная коррекция топливоподачи (+/- %) для отдельного цилиндра. Позволяет компенсировать разницу в составе смеси между цилиндрами. Практический совет: используйте данные индивидуальных лямбда-зондов или EGT-датчиков для определения необходимой коррекции. Типичный разброс ±5%." inj_trimf = "Индивидуальная коррекция топливоподачи (+/- %) для отдельного цилиндра. Позволяет компенсировать разницу в составе смеси между цилиндрами. Практический совет: используйте данные индивидуальных лямбда-зондов или EGT-датчиков для определения необходимой коррекции. Типичный разброс ±5%." inj_trimg = "Индивидуальная коррекция топливоподачи (+/- %) для отдельного цилиндра. Позволяет компенсировать разницу в составе смеси между цилиндрами. Практический совет: используйте данные индивидуальных лямбда-зондов или EGT-датчиков для определения необходимой коррекции. Типичный разброс ±5%." inj_trimh = "Индивидуальная коррекция топливоподачи (+/- %) для отдельного цилиндра. Позволяет компенсировать разницу в составе смеси между цилиндрами. Практический совет: используйте данные индивидуальных лямбда-зондов или EGT-датчиков для определения необходимой коррекции. Типичный разброс ±5%." inj_trimi = "Индивидуальная коррекция топливоподачи (+/- %) для отдельного цилиндра. Позволяет компенсировать разницу в составе смеси между цилиндрами. Практический совет: используйте данные индивидуальных лямбда-зондов или EGT-датчиков для определения необходимой коррекции. Типичный разброс ±5%." inj_trimj = "Индивидуальная коррекция топливоподачи (+/- %) для отдельного цилиндра. Позволяет компенсировать разницу в составе смеси между цилиндрами. Практический совет: используйте данные индивидуальных лямбда-зондов или EGT-датчиков для определения необходимой коррекции. Типичный разброс ±5%." inj_trimk = "Индивидуальная коррекция топливоподачи (+/- %) для отдельного цилиндра. Позволяет компенсировать разницу в составе смеси между цилиндрами. Практический совет: используйте данные индивидуальных лямбда-зондов или EGT-датчиков для определения необходимой коррекции. Типичный разброс ±5%." inj_triml = "Индивидуальная коррекция топливоподачи (+/- %) для отдельного цилиндра. Позволяет компенсировать разницу в составе смеси между цилиндрами. Практический совет: используйте данные индивидуальных лямбда-зондов или EGT-датчиков для определения необходимой коррекции. Типичный разброс ±5%." inj_trimm = "Индивидуальная коррекция топливоподачи (+/- %) для отдельного цилиндра. Позволяет компенсировать разницу в составе смеси между цилиндрами. Практический совет: используйте данные индивидуальных лямбда-зондов или EGT-датчиков для определения необходимой коррекции. Типичный разброс ±5%." inj_trimn = "Индивидуальная коррекция топливоподачи (+/- %) для отдельного цилиндра. Позволяет компенсировать разницу в составе смеси между цилиндрами. Практический совет: используйте данные индивидуальных лямбда-зондов или EGT-датчиков для определения необходимой коррекции. Типичный разброс ±5%." inj_trimo = "Индивидуальная коррекция топливоподачи (+/- %) для отдельного цилиндра. Позволяет компенсировать разницу в составе смеси между цилиндрами. Практический совет: используйте данные индивидуальных лямбда-зондов или EGT-датчиков для определения необходимой коррекции. Типичный разброс ±5%." inj_trimp = "Индивидуальная коррекция топливоподачи (+/- %) для отдельного цилиндра. Позволяет компенсировать разницу в составе смеси между цилиндрами. Практический совет: используйте данные индивидуальных лямбда-зондов или EGT-датчиков для определения необходимой коррекции. Типичный разброс ±5%." inj_timing = "Угол опережения впрыска (в градусах до ВМТ) в зависимости от нагрузки и RPM. Классический подход: впрыск должен заканчиваться к моменту открытия впускного клапана, что соответствует примерно 360° до ВМТ (угол отсчитывается от момента зажигания). Оптимальный угол определяется на стенде или при дорожных испытаниях. Практический совет: правильный угол впрыска улучшает наполнение и распыление топлива. На низких оборотах раннее начало впрыска (больший угол) даёт время для испарения. На высоких — можно уменьшить угол. Эффект особенно заметен на port-injection." inj_timing_sec = "Угол опережения впрыска вторичных (staged) форсунок в градусах до ВМТ, в зависимости от нагрузки и RPM. Классический подход: впрыск должен заканчиваться к моменту открытия впускного клапана (~360° BTDC). Оптимальный угол определяется экспериментально. Практический совет: вторичные форсунки часто имеют другую производительность и расположение. Их угол впрыска может отличаться от первичных. Настраивайте отдельно для оптимального распыления." spk_trima = "Индивидуальная коррекция угла зажигания (+/- градусы) для отдельного цилиндра. Практический совет: используется для компенсации разницы в склонности к детонации между цилиндрами. Обычно крайние цилиндры (наиболее горячие) требуют небольшого запаздывания (-1...-3°). Определяйте по данным датчика детонации или EGT." spk_trimb = "Индивидуальная коррекция угла зажигания (+/- градусы) для отдельного цилиндра. Практический совет: используется для компенсации разницы между цилиндрами. Определяйте по данным датчика детонации или EGT." spk_trimc = "Индивидуальная коррекция угла зажигания (+/- градусы) для отдельного цилиндра. Практический совет: используется для компенсации разницы между цилиндрами. Определяйте по данным датчика детонации или EGT." spk_trimd = "Индивидуальная коррекция угла зажигания (+/- градусы) для отдельного цилиндра. Практический совет: используется для компенсации разницы между цилиндрами. Определяйте по данным датчика детонации или EGT." spk_trime = "Индивидуальная коррекция угла зажигания (+/- градусы) для отдельного цилиндра. Практический совет: используется для компенсации разницы между цилиндрами. Определяйте по данным датчика детонации или EGT." spk_trimf = "Индивидуальная коррекция угла зажигания (+/- градусы) для отдельного цилиндра. Практический совет: используется для компенсации разницы между цилиндрами. Определяйте по данным датчика детонации или EGT." spk_trimg = "Индивидуальная коррекция угла зажигания (+/- градусы) для отдельного цилиндра. Практический совет: используется для компенсации разницы между цилиндрами. Определяйте по данным датчика детонации или EGT." spk_trimh = "Индивидуальная коррекция угла зажигания (+/- градусы) для отдельного цилиндра. Практический совет: используется для компенсации разницы между цилиндрами. Определяйте по данным датчика детонации или EGT." spk_trimi = "Индивидуальная коррекция угла зажигания (+/- градусы) для отдельного цилиндра. Практический совет: используется для компенсации разницы между цилиндрами. Определяйте по данным датчика детонации или EGT." spk_trimj = "Индивидуальная коррекция угла зажигания (+/- градусы) для отдельного цилиндра. Практический совет: используется для компенсации разницы между цилиндрами. Определяйте по данным датчика детонации или EGT." spk_trimk = "Индивидуальная коррекция угла зажигания (+/- градусы) для отдельного цилиндра. Практический совет: используется для компенсации разницы между цилиндрами. Определяйте по данным датчика детонации или EGT." spk_triml = "Индивидуальная коррекция угла зажигания (+/- градусы) для отдельного цилиндра. Практический совет: используется для компенсации разницы между цилиндрами. Определяйте по данным датчика детонации или EGT." spk_trimm = "Индивидуальная коррекция угла зажигания (+/- градусы) для отдельного цилиндра. Практический совет: используется для компенсации разницы между цилиндрами. Определяйте по данным датчика детонации или EGT." spk_trimn = "Индивидуальная коррекция угла зажигания (+/- градусы) для отдельного цилиндра. Практический совет: используется для компенсации разницы между цилиндрами. Определяйте по данным датчика детонации или EGT." spk_trimo = "Индивидуальная коррекция угла зажигания (+/- градусы) для отдельного цилиндра. Практический совет: используется для компенсации разницы между цилиндрами. Определяйте по данным датчика детонации или EGT." spk_trimp = "Индивидуальная коррекция угла зажигания (+/- градусы) для отдельного цилиндра. Практический совет: используется для компенсации разницы между цилиндрами. Определяйте по данным датчика детонации или EGT." narrowband_tgts = "Целевое напряжение узкополосного (narrowband) лямбда-зонда в зависимости от нагрузки и RPM. Практический совет: узкополосный датчик работает в узком диапазоне вокруг стехиометрии (~0.45В = бедная, ~0.80В = богатая). Для крейсерского режима целевое напряжение 0.45-0.50В (стехиометрия). Для WOT — 0.80-0.90В (богатая смесь). Рекомендуется переход на широкополосный датчик для более точной настройки." vsslaunch_rpm = "Контроль тяги / лонч-контроль по скорости колёс. RPM — задаёт жёсткий лимит оборотов для данной скорости колёс. Retard — угол запаздывания зажигания для данной скорости. Когда скорость колёс превышает максимальное значение на кривой, лонч-контроль отключается до падения скорости ниже порога повторного включения. Практический совет: на старте установите низкий RPM-лимит (для контроля пробуксовки), затем увеличивайте по мере роста скорости. Retard помогает мягче ограничить мощность без жёсткой отсечки." fuelcut_fuelon_upper_rpmdot = "Верхний порог RPMdot для возврата топливоподачи после отсечки при сбросе газа. Когда обороты падают быстрее этого значения RPMdot — используется верхний порог RPM для возврата топлива. Между верхним и нижним значениями RPMdot — порог возврата интерполируется. Это число должно быть больше нижнего порога RPMdot. Типичное значение: 1000. Практический совет: этот параметр определяет, как быстро возвращается топливо при резком сбросе газа (например, при переключении передач). Слишком низкое значение может вызвать рывки." fuelcut_fuelon_lower_rpmdot = "Нижний порог RPMdot для возврата топливоподачи после отсечки. Когда обороты падают медленнее этого значения — используется нижний порог RPM для возврата (характерно для плавного торможения двигателем). Если обороты падают быстрее — переходы возврата отменяются и порог возврата RPM повышается. Установите так, чтобы выжим сцепления во время fuel cut не приводил к остановке двигателя. Типичное значение: 500. (В логах RPMdot отрицательный при падении оборотов, поэтому значение 500 означает медленнее, чем -500) Практический совет: начните с 500 и проверьте — при выжиме сцепления на торможении двигателем мотор не должен глохнуть." egoAlgorithm_delay_table = "Определяет способ задания частоты работы алгоритма EGO-коррекции: по событиям зажигания или по таблице задержек. Практический совет: таблица задержек даёт более гибкий контроль — можно замедлить EGO-коррекцию на переходных режимах и ускорить на установившихся." ego_delay_table = "Таблица задержки между циклами работы алгоритма EGO-коррекции (в миллисекундах). Практический совет: на высоких RPM задержка может быть меньше (50-100 мс), т.к. смена циклов происходит быстрее. На низких RPM — больше (200-500 мс), чтобы дать датчику время отреагировать. Слишком маленькая задержка вызовет осцилляции, слишком большая — медленную реакцию." ego_delay_rpms = "Ось RPM (X) таблицы задержки EGO. Практический совет: разместите точки в зонах наиболее частой работы двигателя — ХХ, крейсер, WOT." ego_delay_loads = "Ось нагрузки (Y) таблицы задержки EGO. Практический совет: разместите точки так, чтобы охватить ХХ, частичные нагрузки и полную нагрузку." ego_sensor_delay = "Статическое значение задержки отклика лямбда-зонда (время реакции датчика O2). Практический совет: для широкополосных датчиков (Bosch LSU 4.9) типичная задержка 50-100 мс. Для узкополосных — 100-300 мс. Если датчик старый — задержка увеличивается. Учитывайте также длину выпускного тракта до датчика." generic_pid_flags_a_on = "Включение/выключение универсального канала замкнутого контура (PID) A. Таблица задаёт целевое значение обратной связи (PV) на основе входных переменных. PID-алгоритм регулирует ШИМ-выход до достижения целевого значения. Практический совет: универсальные PID-каналы можно использовать для управления любыми устройствами: электрические водяные помпы, вентиляторы с ШИМ, соленоиды и т.д." generic_pid_flags_a_type = "Тип PID-алгоритма для канала A: Тип B — изменение ошибки влияет на P-составляющую. Тип C — изменение PV (текущего значения) влияет на P-составляющую. Практический совет: тип C обычно даёт более плавное управление и меньше колебаний при резких изменениях целевого значения." generic_pid_flags_a_direction = "Полярность выхода PID-алгоритма канала A. Практический совет: выберите в зависимости от логики управляемого устройства. Например, нормально-закрытый соленоид требует прямой полярности, нормально-открытый — обратной." generic_pid_flags_a_output_type = "Тип выхода PID канала A: ШИМ-выход (PWM) или шаговый двигатель (stepper). Практический совет: ШИМ подходит для соленоидов и электромоторов. Шаговый — для клапанов, требующих точного позиционирования." generic_pid_flags_a_lookup_type = "Тип таблицы поиска для канала A: двумерная таблица (table) или одномерная кривая (curve). Практический совет: если целевое значение зависит от двух параметров (например, RPM и нагрузка) — используйте таблицу. Если от одного — достаточно кривой." generic_pid_flags_b_on = "Включение/выключение универсального канала замкнутого контура (PID) B. Таблица задаёт целевое значение обратной связи (PV) на основе входных переменных. PID-алгоритм регулирует ШИМ-выход до достижения целевого значения. Практический совет: канал B работает независимо от канала A и может управлять другим устройством." generic_pid_flags_b_type = "Тип PID-алгоритма для канала B: Тип B — изменение ошибки влияет на P-составляющую. Тип C — изменение PV (текущего значения) влияет на P-составляющую. Практический совет: тип C обычно предпочтительнее для плавности управления." generic_pid_flags_b_direction = "Полярность выхода PID-алгоритма канала B. Практический совет: выберите в зависимости от логики управляемого устройства." generic_pid_flags_b_output_type = "Тип выхода PID канала B: ШИМ-выход (PWM) или шаговый двигатель (stepper). Практический совет: ШИМ подходит для соленоидов, stepper — для клапанов с точным позиционированием." generic_pid_flags_b_lookup_type = "Тип таблицы поиска для канала B: двумерная таблица (table) или одномерная кривая (curve). Практический совет: выбирайте в зависимости от количества входных параметров, определяющих целевое значение." generic_pid_pwm_opts_freq_a = "Частота ШИМ-выхода для универсального PID канала A. Практический совет: для соленоидов обычно 20-50 Гц. Для электромоторов — 1-20 кГц. Слишком низкая частота вызовет вибрацию, слишком высокая может перегревать драйвер." generic_pid_pwm_opts_freq_b = "Частота ШИМ-выхода для универсального PID канала B. Практический совет: подбирайте частоту в соответствии с характеристиками управляемого устройства." generic_pid_pwm_outs_a = "Выходной пин для PID канала A. Этот выход управляет исполнительным механизмом (актуатором), который воздействует на процесс (например, открывает или закрывает клапан). Практический совет: убедитесь, что выбранный пин не используется другой функцией и поддерживает ШИМ с нужной частотой." generic_pid_pwm_outs_b = "Выходной пин для PID канала B. Этот выход управляет исполнительным механизмом (актуатором), который воздействует на процесс (например, открывает или закрывает клапан). Практический совет: убедитесь, что выбранный пин свободен и совместим с выбранным типом выхода." generic_pid_upper_inputlim_a = "Максимальное значение входного сигнала обратной связи (PV) для канала A. Практический совет: установите чуть выше максимально ожидаемого значения датчика обратной связи. Это защищает от ложных показаний при неисправности датчика." generic_pid_upper_inputlim_b = "Максимальное значение входного сигнала обратной связи (PV) для канала B. Практический совет: установите чуть выше максимально ожидаемого значения датчика обратной связи." generic_pid_lower_inputlim_a = "Минимальное значение входного сигнала обратной связи (PV) для канала A. Практический совет: установите чуть ниже минимально ожидаемого значения датчика. Помогает отфильтровать ошибочные нулевые показания." generic_pid_lower_inputlim_b = "Минимальное значение входного сигнала обратной связи (PV) для канала B. Практический совет: установите чуть ниже минимально ожидаемого значения датчика." generic_pid_output_upperlim_a = "Максимальная скважность выхода PID канала A. Практический совет: ограничение максимальной скважности защищает актуатор от перегрева и износа. Для большинства соленоидов можно оставить 100%, но для некоторых устройств рекомендуется ограничить 80-90%." generic_pid_output_upperlim_b = "Максимальная скважность выхода PID канала B. Практический совет: установите в соответствии с допустимым максимальным режимом работы управляемого устройства." generic_pid_output_lowerlim_a = "Минимальная скважность выхода PID канала A. Практический совет: установите чуть ниже порога срабатывания актуатора. Это позволяет PID быстрее реагировать, не тратя время на «мёртвую зону» скважности." generic_pid_output_lowerlim_b = "Минимальная скважность выхода PID канала B. Практический совет: установите чуть ниже порога реального начала движения актуатора." generic_pid_rpms_a = "Значения оси RPM для таблицы поиска PID канала A. Практический совет: распределите точки RPM в зонах, где целевое значение PID существенно меняется." generic_pid_rpms_b = "Значения оси RPM для таблицы поиска PID канала B. Практический совет: распределите точки RPM в зонах, где целевое значение PID существенно меняется." generic_pid_loadvals_a = "Значения оси нагрузки для таблицы поиска PID канала A. Практический совет: распределите точки нагрузки для покрытия основных режимов работы двигателя." generic_pid_loadvals_b = "Значения оси нагрузки для таблицы поиска PID канала B. Практический совет: распределите точки нагрузки для покрытия основных режимов работы двигателя." generic_pid_targets_a = "Таблица целевых значений PID канала A. Это целевое значение, которое PID-алгоритм стремится достичь, управляя ШИМ-выходом на основе входного сигнала обратной связи. Практический совет: заполните таблицу желаемыми значениями параметра (например, целевая температура, давление) для каждой комбинации RPM/нагрузки." generic_pid_targets_b = "Таблица целевых значений PID канала B. Это целевое значение, которое PID-алгоритм стремится достичь, управляя ШИМ-выходом на основе входного сигнала обратной связи. Практический совет: заполните таблицу аналогично каналу A для управляемого устройства." generic_pid_control_interval_a = "Интервал работы PID-контура канала A (в миллисекундах). Практический совет: для быстрых процессов (давление, обороты) — 10-50 мс. Для медленных (температура) — 100-1000 мс. Слишком частое обновление при медленном процессе вызовет осцилляции." generic_pid_control_interval_b = "Интервал работы PID-контура канала B (в миллисекундах). Практический совет: подбирайте в соответствии со скоростью управляемого процесса." generic_pid_P_a = "Пропорциональный коэффициент усиления (P) PID канала A. Практический совет: начните с малого значения и увеличивайте, пока система не начнёт быстро реагировать на отклонения. Если появляются колебания — уменьшите. P-составляющая определяет скорость реакции, но не устраняет статическую ошибку." generic_pid_P_b = "Пропорциональный коэффициент усиления (P) PID канала B. Практический совет: настраивайте аналогично каналу A — увеличивайте до появления колебаний, затем уменьшите на 20-30%." generic_pid_I_a = "Интегральный коэффициент усиления (I) PID канала A. Практический совет: I-составляющая устраняет статическую ошибку. Начните с малого значения. Слишком большой I приводит к медленным колебаниям (раскачке). Увеличивайте, пока статическая ошибка не исчезнет без появления раскачки." generic_pid_I_b = "Интегральный коэффициент усиления (I) PID канала B. Практический совет: настраивайте аналогично каналу A. I-составляющая важна для устранения постоянного отклонения от цели." generic_pid_D_a = "Дифференциальный коэффициент усиления (D) PID канала A. Практический совет: D-составляющая реагирует на скорость изменения ошибки, предотвращая перерегулирование. Обычно устанавливается малым или нулевым. Полезна для быстрых процессов, но может усиливать шум датчика." generic_pid_D_b = "Дифференциальный коэффициент усиления (D) PID канала B. Практический совет: в большинстве случаев начните с 0 и добавляйте только при необходимости уменьшить перерегулирование." generic_pid_load_offset_a = "Переменная, используемая как ось Y (нагрузка) в таблице поиска PID канала A. Практический совет: выберите параметр, от которого зависит целевое значение — MAP, TPS, температура ОЖ или другой доступный канал." generic_pid_PV_offset_a = "Переменная, используемая как входной сигнал обратной связи (PV) для PID канала A. Практический совет: это датчик, показания которого PID-алгоритм будет стремиться привести к целевому значению. Например, датчик температуры для управления вентилятором." generic_pid_load_offset_b = "Переменная, используемая как ось Y (нагрузка) в таблице поиска PID канала B. Практический совет: выберите параметр, соответствующий логике управления вашим устройством." generic_pid_PV_offset_b = "Переменная, используемая как входной сигнал обратной связи (PV) для PID канала B. Практический совет: убедитесь, что выбранный датчик корректно откалиброван и имеет достаточное быстродействие для управляемого процесса." outmsg1_offset01 = "Смещение первой переменной в OutputChannels для исходящего CAN-сообщения 1 (outmsg 1). Исходящее сообщение передаёт набор переменных на CAN-устройство. CAN-устройство должно поддерживать эту функцию и инициировать передачу. Списки переменных должны совпадать на обоих устройствах. Практический совет: смещение можно найти в документации MS3 по OutputChannels. Убедитесь, что принимающее устройство настроено на те же смещения и размеры." outmsg1_size01 = "Размер в байтах первой переменной в исходящем CAN-сообщении 1 (outmsg 1). Практический совет: обычно 1 байт для флагов и малых значений, 2 байта для стандартных параметров (RPM, температура), 4 байта для значений высокой точности." outmsg2_offset01 = "Смещение первой переменной в OutputChannels для исходящего CAN-сообщения 2 (outmsg 2). Исходящее сообщение передаёт набор переменных на CAN-устройство. CAN-устройство должно поддерживать эту функцию и инициировать передачу. Списки переменных должны совпадать на обоих устройствах. Практический совет: каждое outmsg может содержать несколько переменных в одном 8-байтном CAN-пакете." outmsg2_size01 = "Размер в байтах первой переменной в исходящем CAN-сообщении 2 (outmsg 2). Практический совет: размер должен точно соответствовать формату данных переменной в OutputChannels." outmsg3_offset01 = "Смещение первой переменной в OutputChannels для исходящего CAN-сообщения 3 (outmsg 3). Исходящее сообщение передаёт набор переменных на CAN-устройство. CAN-устройство должно поддерживать эту функцию и инициировать передачу. Списки переменных должны совпадать на обоих устройствах. Практический совет: используйте несколько outmsg для передачи большого объёма данных." outmsg3_size01 = "Размер в байтах первой переменной в исходящем CAN-сообщении 3 (outmsg 3). Практический совет: проверьте документацию принимающего устройства для правильного размера данных." outmsg4_offset01 = "Смещение первой переменной в OutputChannels для исходящего CAN-сообщения 4 (outmsg 4). Исходящее сообщение передаёт набор переменных на CAN-устройство. CAN-устройство должно поддерживать эту функцию и инициировать передачу. Списки переменных должны совпадать на обоих устройствах. Практический совет: при настройке CAN-обмена всегда проверяйте корректность данных с помощью CAN-сниффера." outmsg4_size01 = "Размер в байтах первой переменной в исходящем CAN-сообщении 4 (outmsg 4). Практический совет: неправильный размер приведёт к некорректной интерпретации данных на принимающей стороне." dwell_table_values = "Таблица базового времени накопления катушки зажигания (dwell) в миллисекундах, в зависимости от RPM и нагрузки. Можно уменьшить dwell в зонах, где это не критично, для увеличения ресурса свечей зажигания. В зонах очень богатой или разбавленной смеси требуется максимальная энергия искры. (Коррекция по напряжению бортсети применяется дополнительно.) Практический совет: типичные значения 2.0-4.0 мс для большинства катушек. Для CNP/COP катушек обычно 2.0-3.0 мс. Превышение рекомендованного dwell перегревает катушку и сокращает её ресурс. На высоких RPM может потребоваться уменьшение dwell из-за ограниченного времени между искрами." spkadj_max = "Максимальная коррекция зажигания, которую внешнее устройство (например, контроллер АКПП) может добавить к углу зажигания через CAN. Положительное число = опережение. Практический совет: ограничивает влияние внешнего устройства для безопасности. Типичное значение 5-10°. Слишком большое значение может привести к детонации, если внешнее устройство некорректно запросит опережение." spkadj_min = "Минимальная (максимально отрицательная) коррекция зажигания, которую внешнее устройство (например, контроллер АКПП) может применить через CAN. Отрицательное число = запаздывание (ретард). Практический совет: типичное значение от -5 до -15°. Контроллер АКПП обычно запрашивает ретард при переключении передач для смягчения удара." cranktaper_pct = "Позволяет постепенно уменьшать обогащение при прокрутке стартером при длительном запуске, чтобы избежать заливания свечей. 100% = нормальная ширина импульса впрыска при прокрутке. Практический совет: если двигатель не заводится сразу и заливает свечи — настройте уменьшение до 50-70% после 3-5 секунд прокрутки. Это особенно полезно для двигателей, склонных к заливанию при горячем пуске." flashlock = "Блокировка/разблокировка таблиц калибровки датчиков. Заблокировано = защита от случайного изменения таблиц калибровки. Разблокировано = разрешена запись новых калибровок. Обязательно заблокируйте обратно после записи калибровочных таблиц! Практический совет: всегда держите таблицы заблокированными во время обычной настройки, чтобы случайно не изменить калибровку датчиков. Разблокируйте только при целенаправленной замене или перекалибровке датчика." scatterRuntimeEnabled = "По умолчанию: Включено. Включено = используется быстрый метод сбора данных реального времени от MS3. Рекомендуется для всех пользователей. Выключено = используется предыдущий, более медленный метод. Практический совет: оставьте включённым, если нет проблем с обменом данными. Отключайте только при возникновении ошибок связи в TunerStudio." can_outpc_msg = "Базовый идентификатор CAN-сообщений (11 бит, десятичный формат) для трансляции данных реального времени (outpc). ЭБУ назначает следующий идентификатор для каждой группы данных, независимо от того, включена она или нет. Например: группа 0 — базовый ID, группа 17 — базовый ID + 17. Использование адреса по умолчанию позволяет использовать готовые шаблоны для приборных панелей и т.д. Полное описание содержимого сообщений см. в руководстве. Практический совет: не меняйте базовый адрес, если используете стандартные CAN-дисплеи (AIM, RaceLogic и т.д.) — они настроены на значения по умолчанию." can_outpc_gp00 = "Включение трансляции данной группы данных с указанной частотой. Выберите подходящую частоту для данных внутри группы — нет смысла передавать медленно меняющиеся данные с высокой частотой. Практический совет: RPM, TPS, MAP — быстро меняющиеся данные, можно передавать с высокой частотой (50-100 Гц). Температуры — достаточно 1-10 Гц. Высокая частота увеличивает загрузку CAN-шины." can_outpc_gp16 = "Включение трансляции данной группы данных с указанной частотой. Выберите подходящую частоту для данных внутри группы — нет смысла передавать медленно меняющиеся данные с высокой частотой. Практический совет: ознакомьтесь с содержимым каждой группы в документации, чтобы подобрать оптимальную частоту." can_outpc_gp32 = "Включение трансляции данной группы данных с указанной частотой. Выберите подходящую частоту для данных внутри группы — нет смысла передавать медленно меняющиеся данные с высокой частотой. Практический совет: при множестве включённых групп с высокой частотой возможно переполнение CAN-буфера. Включайте только необходимые группы." can_outpc_gp48 = "Включение трансляции данной группы данных с указанной частотой. Выберите подходящую частоту для данных внутри группы — нет смысла передавать медленно меняющиеся данные с высокой частотой. Практический совет: если CAN-шина загружена — снизьте частоту второстепенных групп или отключите их." can_outpc_gp00_master = "Глобальное включение/выключение трансляции данных реального времени по CAN. Практический совет: отключите, если CAN-трансляция не используется, чтобы не создавать лишнюю нагрузку на шину. Включите при подключении CAN-дисплея, логгера или другого CAN-устройства." can_rcv_opt_on = "Глобальное включение приёма CAN-сообщений. Практический совет: включите, если вы используете внешние CAN-устройства (датчики, контроллеры), от которых MS3 должна получать данные." can_rcv_opt_share = "Выключено: после обработки пакета он недоступен другим подмодулям. Включено: пакеты данных могут быть использованы несколькими подмодулями одновременно. Например, один и тот же пакет может быть принят системой EGT и общим приёмом CAN. Практический совет: включайте, если один CAN-пакет содержит данные, нужные нескольким подсистемам ECU." #9 engine_state_accel_fast_thresh = "When RPMdot is above this threshold, your engine is considered to be accelerating quickly. This should be set to slightly below what is normal for WOT in a low gear.\nUsed by Closed-loop idle control, idle-VE and idle-advance." #9 engine_state_accel_slow_thresh = "Between this value for RPMdot and the fast accel threshold, your engine is accelerating slowly. It should be set as low as possible to catch all actual acceleration, but not set so low that it catches RPM jitter.\nUsed by Closed-loop idle control, idle-VE and idle-advance." #9 engine_state_decel_fast_thresh = "Below this value for RPMdot, your engine is decelerating fast. This should be set to a value that is slightly above the RPMdot when you rev high and then let the engine fall back to idle. Use an RPMdot value from the middle of the rev range.\nUsed by Closed-loop idle control, idle-VE and idle-advance, idle-VE, idle-advance and overrun fuel-cut." #9 engine_state_decel_slow_thresh = "Between this value for RPMdot and the fast threshold, your engine is decelerating slowly. To set this, cruise in a high gear, then see what RPMdot value you get by lifting off the throttle fully and decelerating. Set this value slightly above that RPMdot value.\nUsed by Closed-loop idle control, idle-VE and idle-advance, idle-VE, idle-advance and overrun fuel-cut." engine_state_accel_slow_thresh = "Порог RPMdot для определения состояния разгона двигателя. Когда RPMdot выше этого значения, двигатель считается разгоняющимся. Установите как можно ниже, чтобы отловить все реальные разгоны, но не настолько низко, чтобы реагировать на дрожание RPM. Используется для: замкнутого контура ХХ, idle-VE и idle-advance. Практический совет: начните с 200 RPM/сек. Если ХХ-контроль мешает разгону — увеличьте. Если запаздывает отключение ХХ-режима при трогании — уменьшите." engine_state_decel_slow_thresh = "Порог RPMdot для определения замедления двигателя. Когда RPMdot более отрицателен, чем это значение, двигатель считается замедляющимся. Для настройки: на высокой передаче отпустите газ полностью и посмотрите значение RPMdot в логе. Установите порог чуть выше этого значения. Используется для: замкнутого контура ХХ, idle-VE, idle-advance и отсечки при торможении двигателем. Практический совет: типичное значение 200-500 RPM/сек. Проверьте на дороге — при обычном сбросе газа двигатель должен корректно определяться как замедляющийся." engine_state_tps_closed_thresh = "Порог TPS для определения закрытого дросселя. Ниже этого значения дроссель считается закрытым. Используется для: замкнутого контура ХХ, idle-VE, idle-advance и отсечки при торможении двигателем. Практический совет: установите на 1-2% выше показания TPS при полностью отпущенной педали газа. Убедитесь, что TPS правильно откалиброван — 0% при закрытом дросселе." engine_state_overrun_map_thresh = "Порог MAP для определения режима торможения двигателем (overrun). Ниже этого значения, при условии что двигатель хотя бы немного замедляется, двигатель считается в режиме overrun. Используется для отсечки топлива при торможении двигателем. Практический совет: типичное значение 40-60 kPa. Должно быть выше вакуума на ХХ, чтобы отсечка включалась только при реальном торможении двигателем на передаче, а не на ХХ." engine_state_flags_use_vss = "Порог скорости автомобиля для определения состояния двигателя. Когда VSS включён для определения состояний двигателя, установите значение чуть выше скорости, при которой желательна работа в режиме ХХ. Используется для замкнутого контура ХХ. Практический совет: обычно 3-5 км/ч. Это помогает отличить реальный ХХ от стояния с выжатым сцеплением на скорости." engine_state_vss_thresh = "Использование VSS (датчика скорости автомобиля) для более точного определения состояния двигателя. Используется для замкнутого контура ХХ. Практический совет: включение VSS позволяет ЭБУ отличить ХХ на стоянке от торможения двигателем на передаче, что улучшает работу ХХ-контроля и fuel cut." engine_state_tps_wot_thresh = "Значение TPS, выше которого двигатель считается работающим на полном газу (WOT — Wide Open Throttle). Используется для функции 'открыть клапан ХХ при WOT' в замкнутом контуре ХХ. Практический совет: обычно 85-95%. Функция открытия клапана ХХ на WOT полезна для увеличения воздушного потока на полной нагрузке — клапан ХХ открывается как дополнительный источник воздуха." can_rcv_id1 = "CAN-идентификатор для прослушивания (приёма). См. также настройку смещения (Offset). Практический совет: узнайте CAN ID передающего устройства из его документации. Для стандартных 11-битных ID диапазон 0-2047." can_rcv_var1 = "Переменная ECU, в которую будут записываться принятые данные. Эта переменная может затем использоваться другими подсистемами ЭБУ. Обязательно включите глобальный приём CAN после настройки всех параметров. Практический совет: выбирайте переменную, соответствующую типу принимаемых данных. Например, для внешнего датчика EGT — переменную EGT." can_rcv_off1 = "Смещение данных внутри 8-байтного CAN-сообщения. Для систем с последовательными сообщениями нужно рассчитать фактический идентификатор и смещение. Пример: смещение = 19. Делим на 8: получаем 2 с остатком 3. Прибавляем 2 к идентификатору, смещение = 3. Практический совет: внимательно считайте смещения — ошибка на 1 байт приведёт к получению неправильных данных." can_rcv_size1 = "Порядок байтов, размер данных и знак. B = Big endian (Motorola, старший байт первый) L = Little endian (Intel, младший байт первый) # = количество байтов U = Unsigned (без знака) S = Signed (со знаком) Практический совет: неправильный выбор порядка байтов — частая ошибка при настройке CAN. Японские и европейские устройства чаще используют Big endian, американские — Little endian." can_rcv_size_ext1 = "Тип заголовка CAN-сообщения: стандартный (11 бит) или расширенный (29 бит). Практический совет: большинство автомобильных CAN-устройств используют стандартный 11-битный формат. Расширенный 29-битный используется реже, в основном в коммерческом транспорте (J1939) и некоторых специализированных системах." can_rcv_mult1 = "Формула преобразования: Результат = ((сырые_данные * mult) / divide) + add. Практический совет: используйте эту формулу для преобразования сырых CAN-данных в физические единицы. Например, если устройство передаёт температуру как (°C + 40) * 10, установите: mult=1, divide=10, add=-40." pwm_opt_load_a_offset = "Выбор переменной для оси нагрузки (load) в таблице или кривой ШИМ-выхода A. Практический совет: обычно используется MAP, TPS или другой параметр, отражающий нагрузку на двигатель. Выбирайте тот, который лучше коррелирует с потребностью управляемого устройства." pwm_opt_load_b_offset = "Выбор переменной для оси нагрузки (load) в таблице или кривой ШИМ-выхода B. Практический совет: может быть тем же параметром, что и для канала A, или другим — зависит от управляемого устройства." pwm_opt_load_c_offset = "Выбор переменной для оси нагрузки (load) в таблице или кривой ШИМ-выхода C. Практический совет: выбирайте параметр в соответствии с логикой управления вашего устройства." pwm_opt_load_d_offset = "Выбор переменной для оси нагрузки (load) в таблице или кривой ШИМ-выхода D. Практический совет: для вентилятора радиатора обычно используется температура ОЖ, для буст-контроля — TPS или MAP." pwm_opt_load_e_offset = "Выбор переменной для оси нагрузки (load) в таблице или кривой ШИМ-выхода E. Практический совет: доступны все стандартные переменные OutputChannels." pwm_opt_load_f_offset = "Выбор переменной для оси нагрузки (load) в таблице или кривой ШИМ-выхода F. Практический совет: доступны все стандартные переменные OutputChannels." iobox_opta1 = "Включение/выключение IO-box 1 для расширения входов и выходов ECU. Практический совет: IO-box подключается по CAN и позволяет добавить дополнительные аналоговые/цифровые входы и выходы, когда штатных не хватает. Полезно для сложных инсталляций с большим количеством датчиков." iobox_id1 = "Базовый CAN-идентификатор IO-box 1. Практический совет: должен совпадать с настройкой в самом IO-box. Убедитесь, что ID не конфликтует с другими устройствами на CAN-шине." iobox_optb1vss = "Выбор входов скорости, используемых на IO-box 1. Практический совет: IO-box может принимать сигналы от датчиков скорости колёс для ABS-подобных функций, контроля тяги или спидометра." iobox_opta1adv = "Выбор между автоматической и ручной расширенной конфигурацией IO-box 1. Практический совет: автоматический режим подходит для стандартных конфигураций. Ручной — если нужно точно задать соответствие каналов CANIN/CANOUT/CANADC." iobox_opta1canin = "Базовый номер CANIN для IO-box 1. Вход 1 = CANIN1, вход 2 = CANIN2 и т.д. Практический совет: убедитесь, что номера CANIN не пересекаются с другими IO-box или CAN-устройствами." iobox_opta1canout = "Базовый номер CANOUT для IO-box 1. Выход 1 = CANOUT1, выход 2 = CANOUT2 и т.д. Практический совет: CANOUT-каналы можно использовать для управления реле, соленоидами и другими исполнительными устройствами через IO-box." iobox_opta1canadc = "Базовый номер CANADC для IO-box 1. ADC1 = CANADC1, ADC2 = CANADC2 и т.д. Практический совет: CANADC-каналы используются для подключения аналоговых датчиков (давления, температуры) к IO-box." iobox_optb1tachrate = "Частота передачи данных о скорости колёс от IO-box 1. Практический совет: для контроля тяги требуется высокая частота (50-100 Гц). Для спидометра достаточно 10-20 Гц." iobox_optb1inrate = "Частота передачи данных входов от IO-box 1. Практический совет: подбирайте в зависимости от скорости изменения входных сигналов. Для кнопок/переключателей достаточно 10 Гц, для быстро меняющихся аналоговых — 50-100 Гц." iobox_optb1outrate = "Частота отправки данных выходов на IO-box 1. Практический совет: для ШИМ-управления и быстрых выходов — выше (50 Гц). Для простых вкл/выкл — достаточно 10-20 Гц." iobox_opta2 = "Включение/выключение IO-box 2 для расширения входов и выходов ECU. Практический совет: второй IO-box позволяет ещё больше расширить возможности — например, для полного мониторинга всех цилиндров датчиками EGT." iobox_id2 = "Базовый CAN-идентификатор IO-box 2. Практический совет: должен отличаться от ID других IO-box и не конфликтовать с другими CAN-устройствами." iobox_optb2vss = "Выбор входов скорости, используемых на IO-box 2. Практический совет: можно использовать для дополнительных датчиков скорости (например, задних колёс при подключении передних к IO-box 1)." iobox_opta2adv = "Выбор между автоматической и ручной расширенной конфигурацией IO-box 2. Практический совет: при ручной настройке убедитесь, что номера каналов не пересекаются с IO-box 1." iobox_opta2canin = "Базовый номер CANIN для IO-box 2. Вход 1 = CANIN1, вход 2 = CANIN2 и т.д. Практический совет: если IO-box 1 использует CANIN1-8, назначьте IO-box 2 начиная с CANIN9." iobox_opta2canout = "Базовый номер CANOUT для IO-box 2. Выход 1 = CANOUT1, выход 2 = CANOUT2 и т.д. Практический совет: аналогично входам — избегайте пересечения номеров с IO-box 1." iobox_opta2canadc = "Базовый номер CANADC для IO-box 2. ADC1 = CANADC1, ADC2 = CANADC2 и т.д. Практический совет: назначайте так, чтобы номера не пересекались с другими IO-box." iobox_optb2tachrate = "Частота передачи данных о скорости колёс от IO-box 2. Практический совет: подбирайте в зависимости от требований к точности контроля тяги." iobox_optb2inrate = "Частота передачи данных входов от IO-box 2. Практический совет: не устанавливайте слишком высокую частоту для всех IO-box одновременно — это может перегрузить CAN-шину." iobox_optb2outrate = "Частота отправки данных выходов на IO-box 2. Практический совет: баланс между скоростью отклика и загрузкой CAN-шины." iobox_opta3 = "Включение/выключение IO-box 3 для расширения входов и выходов ECU. Практический совет: три IO-box — для сложных гоночных инсталляций с множеством датчиков и управляемых устройств." iobox_id3 = "Базовый CAN-идентификатор IO-box 3. Практический совет: обеспечьте уникальность ID среди всех устройств на CAN-шине." iobox_optb3vss = "Выбор входов скорости, используемых на IO-box 3. Практический совет: дополнительные входы скорости для полного контроля всех колёс." iobox_opta3adv = "Выбор между автоматической и ручной расширенной конфигурацией IO-box 3. Практический совет: при большом количестве IO-box ручная настройка даёт полный контроль над распределением каналов." iobox_opta3canin = "Базовый номер CANIN для IO-box 3. Вход 1 = CANIN1, вход 2 = CANIN2 и т.д. Практический совет: продолжайте нумерацию последовательно после IO-box 1 и 2." iobox_opta3canout = "Базовый номер CANOUT для IO-box 3. Выход 1 = CANOUT1, выход 2 = CANOUT2 и т.д. Практический совет: проверьте, что все номера CANOUT уникальны среди всех IO-box." iobox_opta3canadc = "Базовый номер CANADC для IO-box 3. ADC1 = CANADC1, ADC2 = CANADC2 и т.д. Практический совет: при большом количестве аналоговых входов убедитесь, что все CANADC-номера уникальны." iobox_optb3tachrate = "Частота передачи данных о скорости колёс от IO-box 3. Практический совет: для гоночного контроля тяги используйте максимальную частоту." iobox_optb3inrate = "Частота передачи данных входов от IO-box 3. Практический совет: контролируйте общую загрузку CAN-шины при множестве активных IO-box." iobox_optb3outrate = "Частота отправки данных выходов на IO-box 3. Практический совет: при проблемах с задержкой реакции выходов — увеличьте частоту." iobox_opta4 = "Включение/выключение IO-box 4 для расширения входов и выходов ECU. Практический совет: четвёртый IO-box — для максимального расширения системы. Убедитесь, что пропускной способности CAN-шины достаточно для всех четырёх IO-box." iobox_id4 = "Базовый CAN-идентификатор IO-box 4. Практический совет: при четырёх IO-box особенно важно тщательно спланировать адресное пространство CAN." iobox_optb4vss = "Выбор входов скорости, используемых на IO-box 4. Практический совет: используется для дополнительных датчиков скорости в сложных конфигурациях." iobox_opta4adv = "Выбор между автоматической и ручной расширенной конфигурацией IO-box 4. Практический совет: для четырёх IO-box рекомендуется ручная настройка для полного контроля." iobox_opta4canin = "Базовый номер CANIN для IO-box 4. Вход 1 = CANIN1, вход 2 = CANIN2 и т.д. Практический совет: завершите последовательную нумерацию после IO-box 1-3." iobox_opta4canout = "Базовый номер CANOUT для IO-box 4. Выход 1 = CANOUT1, выход 2 = CANOUT2 и т.д. Практический совет: проверьте отсутствие конфликтов с предыдущими IO-box." iobox_opta4canadc = "Базовый номер CANADC для IO-box 4. ADC1 = CANADC1, ADC2 = CANADC2 и т.д. Практический совет: финальная проверка — все CANADC-номера должны быть уникальны." iobox_optb4tachrate = "Частота передачи данных о скорости колёс от IO-box 4. Практический совет: баланс между точностью и загрузкой CAN-шины." iobox_optb4inrate = "Частота передачи данных входов от IO-box 4. Практический совет: мониторьте загрузку CAN-шины при всех четырёх активных IO-box." iobox_optb4outrate = "Частота отправки данных выходов на IO-box 4. Практический совет: при четырёх IO-box общая загрузка CAN-шины может быть значительной. Оптимизируйте частоты для каждого IO-box." pitlim_opt_on = "Включение ограничителя скорости пит-лейна. Практический совет: функция пит-лимитера ограничивает скорость автомобиля на пит-лейне гоночной трассы, предотвращая штрафы за превышение. Убедитесь в надёжности подключения кнопки включения." pitlim_opt_mode = "Режим пит-лимитера: Fixed = одна фиксированная скорость ограничения. Holding = запоминает скорость в момент нажатия кнопки и удерживает её. Практический совет: Fixed проще — задайте скорость пит-лейна конкретной трассы. Holding удобнее, если лимит меняется — нажмите кнопку на нужной скорости." pitlim_opt_retard = "Использование запаздывания зажигания для ограничения скорости. Практический совет: ретард зажигания — мягкий способ снижения мощности. Меньше нагружает трансмиссию по сравнению с отсечкой топлива или искры." pitlim_opt_spkcut = "Использование отсечки искры для ограничения скорости. ВНИМАНИЕ: может вызвать хлопки и повреждение выпускной системы! Практический совет: отсечка искры эффективна, но несгоревшее топливо попадает в выпуск и может повредить катализатор или турбину. Используйте в сочетании с отсечкой топлива для минимизации проблем." pitlim_opt_fuelcut = "Использование отсечки топлива для ограничения скорости. Практический совет: отсечка топлива — безопасный метод ограничения мощности. Не вызывает хлопков в выпуске (при отключённой искре цилиндр просто не получает топливо)." pitlim_opt_fuelprog = "Использование прогрессивной (постепенной) отсечки топлива. Только для последовательного (sequential) впрыска. Практический совет: прогрессивная отсечка работает плавнее — вместо резкого включения/выключения, процент отсекаемых цилиндров увеличивается по мере приближения к лимиту." pitlim_opt_vssrpm = "Выбор параметра для удержания: скорость автомобиля (VSS) или обороты двигателя (RPM). Практический совет: VSS предпочтительнее, т.к. ограничивает реальную скорость автомобиля. RPM — запасной вариант, если нет датчика скорости." pitlim_enin = "Вход для кнопки/переключателя включения пит-лимитера. Практический совет: используйте надёжную кнопку на руле или панели. Проверьте работоспособность перед выездом на трассу!" pitlim_speed = "Фиксированная скорость ограничения пит-лимитера. Практический совет: узнайте ограничение скорости пит-лейна для вашей трассы. Обычно 60 км/ч для большинства трасс, но может отличаться. Установите с небольшим запасом вниз (на 2-3 км/ч ниже лимита)." pitlim_retardmax = "Максимальный допустимый ретард (запаздывание) зажигания при работе пит-лимитера. Практический совет: типичное значение 10-20°. Слишком большой ретард перегревает выпуск и турбину. Начните с 10° и увеличивайте, если ограничение скорости недостаточно эффективно." pitlim_sensitivity = "Чувствительность отслеживания для настройки окна работы лимитера. Изначально 0% отсечки топлива/искры применяется на пороге лимита, а полная отсечка — на пороге + диапазон. Если скорость выше лимита, нижняя точка ограничения постепенно снижается. Практический совет: увеличьте чувствительность, если лимитер реагирует слишком медленно. Уменьшите, если наблюдаются рывки." pitlim_speed_range = "Диапазон скорости, в пределах которого применяются ограничители. Рекомендуемое начальное значение: 5 миль/ч. Слишком маленький диапазон вызовет колебания скорости. Практический совет: начните с 5 миль/ч (8 км/ч). Если скорость колеблется — увеличьте диапазон. Если лимитер недостаточно точен — уменьшите (но не ниже 3 миль/ч)." pitlim_rpm_range = "Диапазон RPM, в пределах которого применяются ограничители. Слишком маленький диапазон вызовет колебания оборотов. Практический совет: начните с 300-500 RPM. Подбирайте экспериментально — при рывках увеличивайте." dashbcast_opta1 = "Включение/выключение трансляции данных для приборной панели (Dash Broadcasting). Это упрощённый набор данных для отображения или записи, передаваемый по CAN. Практический совет: используйте для подключения гоночных дисплеев (AIM, RacePak, MoTeC и т.д.) или CAN-логгеров. Формат упрощён по сравнению с полной трансляцией outpc." dashbcast_id1 = "Базовый CAN-идентификатор для трансляции данных на приборную панель. Практический совет: должен совпадать с настройками принимающего дисплея. Для популярных дисплеев используйте значение по умолчанию или обратитесь к документации дисплея." dashbcast_opta1adv = "Выбор между автоматической и ручной расширенной конфигурацией трансляции на приборную панель. Практический совет: автоматический режим отправляет стандартный набор данных. Ручной позволяет выбрать конкретные параметры для передачи." dashbcast_opta4outrate = "Частота отправки данных на приборную панель. Практический совет: для плавного обновления дисплея обычно достаточно 20-50 Гц. Для записи данных на гоночном логгере — 50-100 Гц. Учитывайте загрузку CAN-шины." boost_dome_Kp1 = "Пропорциональный коэффициент (P) PID-регулятора давления в купольной камере вестгейта — канал 1. Практический совет: P-коэффициент определяет скорость реакции на отклонение давления от цели. Начните с малого значения и увеличивайте, пока система не начнёт быстро реагировать. При появлении колебаний давления — уменьшите на 20-30%." boost_dome_Kp2 = "Пропорциональный коэффициент (P) PID-регулятора давления в купольной камере вестгейта — канал 2. Практический совет: настраивайте аналогично каналу 1. Для twin-turbo системы каналы могут требовать разных значений из-за разницы в характеристиках турбин." boost_dome_Ki1 = "Интегральный коэффициент (I) PID-регулятора давления в купольной камере вестгейта — канал 1. Практический совет: I-составляющая устраняет постоянное отклонение давления от цели. Увеличивайте медленно — слишком большой I вызывает медленные колебания буста." boost_dome_Ki2 = "Интегральный коэффициент (I) PID-регулятора давления в купольной камере вестгейта — канал 2. Практический совет: настраивайте так же осторожно, как канал 1. Слишком агрессивный I-коэффициент может вызвать опасные скачки давления наддува." boost_dome_Kd1 = "Дифференциальный коэффициент (D) PID-регулятора давления в купольной камере вестгейта — канал 1. Практический совет: D-составляющая предотвращает перерегулирование (overshoot) давления. Обычно устанавливается малым или нулевым. Добавляйте только если буст значительно превышает целевое значение перед стабилизацией." boost_dome_Kd2 = "Дифференциальный коэффициент (D) PID-регулятора давления в купольной камере вестгейта — канал 2. Практический совет: начните с 0. Добавляйте только для устранения перерегулирования, которое не удаётся убрать настройкой P и I." boost_dome_outputs_fill1 = "Выход 1 для соленоида, управляющего заполнением купольной камеры вестгейта воздухом. Практический совет: соленоид заполнения подаёт давление в купол вестгейта, прижимая клапан и повышая буст. Убедитесь в правильности подключения пневмолиний." boost_dome_outputs_fill2 = "Выход 2 для соленоида, управляющего заполнением купольной камеры вестгейта воздухом. Практический совет: второй канал для twin-turbo или для резервного соленоида." ; boost_dome_settings1_on = "Turn off/on first channel of dome control." boost_dome_settings1_emptydome_offboost = "Управляет стравливанием давления из купольной камеры вестгейта канала 1, когда двигатель не в бусте. Практический совет: включение этой функции позволяет вестгейту полностью открыться вне буста, уменьшая сопротивление выхлопу на низких нагрузках и ускоряя выход турбины на рабочий режим." boost_dome_settings1_advanced = "Выбор режима настройки PID канала 1: только ползунок чувствительности или ползунок + индивидуальные коэффициенты PID для тонкой настройки. Практический совет: начните с режима ползунка (slider). Если не удаётся добиться стабильного управления — переключитесь на расширенный режим с ручной настройкой P, I, D." boost_dome_testopt = "Для тестирования: выбор канала для ручного управления целевым давлением в купольной камере вестгейта. Практический совет: используйте тестовый режим для проверки работоспособности соленоидов и пневмолиний перед выездом. Проверьте оба канала по отдельности." boost_dome_testtarg = "Установка целевого давления в купольной камере при тестировании. Практический совет: начните с атмосферного давления (100 kPa) и медленно увеличивайте. Контролируйте реальное давление в куполе по логу. ВНИМАНИЕ: при тестировании на работающем двигателе будьте готовы к изменению буста!" ; boost_dome_settings2_on = "Turn off/on second channel of dome control." ; boost_dome_settings2_emptydome_offboost = "This setting controls whether channel 2 will empty the wastegate dome when off boost." ; boost_dome_settings2_advanced = "This settings controls whether channel 2's PID routine is tuned with just the slider or with the slider for sensitivity and the individual PID gains for fine-tuning." boost_dome_sensitivities1 = "Чувствительность PID-контура давления в купольной камере — канал 1. Перемещение вправо делает PID более чувствительным. Практический совет: начните с середины и двигайтесь вправо, пока управление не станет быстрым, но без колебаний. Если буст «гуляет» — сдвиньте влево." boost_dome_sensitivities2 = "Чувствительность PID-контура давления в купольной камере — канал 2. Перемещение вправо делает PID более чувствительным. Практический совет: настраивайте аналогично каналу 1. Для twin-turbo добейтесь одинакового поведения обоих каналов." boost_dome_freqs1 = "Частота ШИМ соленоида буста — канал 1. Практический совет: типичная частота для буст-соленоидов 20-33 Гц. Некоторые соленоиды (например, MAC) лучше работают на определённых частотах. Проверьте рекомендации производителя соленоида." boost_dome_fill_out_mins1 = "Минимальная скважность выхода управления давлением в купольной камере — канал 1 (заполнение). Установите чуть ниже минимальной скважности, при которой давление в куполе начинает реально меняться. Практический совет: определите экспериментально — медленно увеличивайте скважность с 0% и зафиксируйте момент, когда давление начнёт расти. Установите на 2-3% ниже этого значения." boost_dome_fill_out_mins2 = "Минимальная скважность выхода управления давлением в купольной камере — канал 2 (заполнение). Установите чуть ниже минимальной скважности, при которой давление реально начинает меняться. Практический совет: определите экспериментально для каждого канала отдельно — характеристики соленоидов могут различаться." boost_dome_fill_out_maxs1 = "Максимальная скважность выхода управления давлением в купольной камере — канал 1 (заполнение). Установите чуть выше максимальной скважности, при которой давление ещё продолжает расти. Практический совет: обычно 90-100%. Если давление перестаёт расти раньше — нет смысла подавать больше. Ограничение помогает PID работать в рабочем диапазоне." boost_dome_fill_out_maxs2 = "Максимальная скважность выхода управления давлением в купольной камере — канал 2 (заполнение). Установите чуть выше максимальной скважности, при которой давление ещё продолжает расти. Практический совет: определите верхний порог экспериментально для каждого канала." boost_dome_empty_out_mins1 = "Минимальная скважность выхода управления давлением в купольной камере — канал 1 (стравливание). Установите чуть ниже минимальной скважности, при которой давление в куполе начинает реально снижаться. Практический совет: стравливающий соленоид может иметь другие характеристики, чем заполняющий. Определите порог срабатывания отдельно." boost_dome_empty_out_mins2 = "Минимальная скважность выхода управления давлением в купольной камере — канал 2 (стравливание). Установите чуть ниже минимальной скважности, при которой давление начинает реально снижаться. Практический совет: каждый соленоид калибруйте индивидуально." boost_dome_empty_out_maxs1 = "Максимальная скважность выхода управления давлением в купольной камере — канал 1 (стравливание). Установите чуть выше максимальной скважности, при которой давление ещё продолжает снижаться. Практический совет: обычно 90-100%. Ограничение помогает PID работать корректно и защищает соленоид." boost_dome_empty_out_maxs2 = "Максимальная скважность выхода управления давлением в купольной камере — канал 2 (стравливание). Установите чуть выше максимальной скважности, при которой давление ещё продолжает снижаться. Практический совет: при правильной настройке min/max диапазонов PID будет работать стабильнее и точнее." boost_dome_freqs2 = "Частота ШИМ соленоида буста — канал 2. Практический совет: используйте ту же частоту, что и для канала 1, если соленоиды одинаковые. При разных соленоидах — настраивайте индивидуально." boost_dome_inputs1 = "Вход датчика MAP для купольного контроля — канал 1. Использует функцию универсальных датчиков (generic sensors). Датчик должен быть откалиброван для выдачи абсолютного давления в kPa (примерно 100 kPa при отсутствии давления в линии). Практический совет: для dome-контроля нужен отдельный датчик давления, измеряющий давление непосредственно в купольной камере вестгейта. Используйте датчик с подходящим диапазоном (обычно 0-300 kPa или выше для высокого буста)." boost_dome_inputs2 = "Вход датчика MAP для купольного контроля — канал 2. Использует функцию универсальных датчиков (generic sensors). Датчик должен быть откалиброван для выдачи абсолютного давления в kPa (примерно 100 kPa при отсутствии давления в линии). Практический совет: для twin-turbo каждый канал должен иметь свой датчик давления в куполе соответствующего вестгейта." boost_dome_outputs_empty1 = "Выход 1 для соленоида, управляющего стравливанием давления из купольной камеры вестгейта. Практический совет: стравливающий соленоид выпускает воздух из купола вестгейта, позволяя клапану открыться и снизить буст. В системе dome-контроля работает совместно с заполняющим соленоидом для точного управления давлением наддува." boost_dome_outputs_empty2 = "Выход 2 для соленоида, управляющего стравливанием давления из купола вестгейта (wastegate dome).\nЭтот выход активируется, когда контроллер буста определяет необходимость снижения давления в куполе вестгейта. Убедитесь, что соленоид рассчитан на напряжение бортовой сети и правильно подключён через реле или драйвер. Рекомендуется использовать быстродействующий соленоид для точного управления давлением." boost_dome_hyst1 = "Зона нечувствительности (deadband) между заполнением и стравливанием давления в простом (не PID) режиме управления.\nЕсли наблюдается перерегулирование (overshoot) при заполнении купола, попробуйте увеличить зону нечувствительности. Типичные значения — от 5 до 15 кПа. Слишком большая зона нечувствительности приведёт к медленной реакции системы, слишком маленькая — к постоянным колебаниям давления. Начните с 10 кПа и корректируйте по результатам." boost_dome_hyst1 = "Зона нечувствительности (deadband) между заполнением и стравливанием давления в простом (не PID) режиме управления.\nЕсли наблюдается перерегулирование (overshoot) при заполнении купола, попробуйте увеличить зону нечувствительности. Типичные значения — от 5 до 15 кПа. Слишком большая зона нечувствительности приведёт к медленной реакции системы, слишком маленькая — к постоянным колебаниям давления. Начните с 10 кПа и корректируйте по результатам." boost_dome_settings1_mode = "Выбор между простым и PID алгоритмом управления давлением в куполе вестгейта.\n\n'Simple' (простой) — требует минимум настроек, но может потребовать установки рестрикторов (жиклёров) в пневматические линии для предотвращения перерегулирования. Хороший выбор для начинающих.\n\n'PID' — требует больше настроек и времени на калибровку, но обеспечивает оптимальное управление давлением буста. Рекомендуется для соревновательных автомобилей и систем, где важна точность. Начните с простого режима и переходите на PID после освоения системы." boost_dome_settings1_biasen = "Определяет поведение системы, когда двигатель находится в режиме наддува, но ещё не вошёл в зону активного управления.\nВарианты:\n- Bias table — давление купола задаётся из таблицы предварительных значений\n- Max dome target — давление купола устанавливается на максимум\n\nИспользование максимального давления купола расходует больше CO2 (если используется система на CO2), но помогает быстрее достичь целевого буста. Для уличных автомобилей рекомендуется использовать Bias table для экономии CO2. Для дрэг-рейсинга, где важна скорость набора буста, выбирайте Max dome target." boost_dome_settings1_range = "Выбор диапазона ограничения целевого давления купола.\n\n'Range' — целевое давление ограничено значением из Bias table +/- указанное число. Это помогает удерживать цель близко к предварительной таблице и снижает накопление интегральной составляющей (integral windup) в PID-регуляторе.\n\n'Min/Max' — используются глобальные минимальные и максимальные пределы, заданные выше.\n\nРежим Range рекомендуется при использовании PID-управления, так как предотвращает чрезмерные колебания давления." boost_dome_bias_range1 = "Диапазон управления вокруг значения из таблицы Bias.\nМинимум = Bias - Range, Максимум = Bias + Range.\nЗначение по умолчанию — 30 кПа.\n\nУменьшите этот диапазон, если система слишком сильно отклоняется от целевого давления. Увеличьте, если системе не хватает запаса для корректировки. Для большинства уличных турбосистем значение 20–40 кПа является оптимальным." ; boost_dome_settings2_mode = "Selects between simple and PID control algorithms. The 'simple' control requires few settings but may require restrictors in your air lines to prevent overshoot. The PID control requires more settings and more tuning, but can give optimal control." boost_ctl_dome_min = "Минимальное целевое давление купола вестгейта в режиме замкнутого контура (closed-loop).\nЭто ограничение безопасности — система не будет пытаться снизить давление в куполе ниже этого значения. Установите его достаточно низким для работы на минимальном бусте, но не ниже атмосферного давления (обычно ~100 кПа абсолютного). Типичное значение для начала — 100–110 кПа." boost_ctl_dome_max = "Максимальное целевое давление купола вестгейта в режиме замкнутого контура (closed-loop).\nЭто критически важное ограничение безопасности. Установите значение, при котором давление наддува не превысит безопасный предел для вашего двигателя и турбосистемы. Учитывайте прочность блока, головки, прокладки ГБЦ и шатунов. Всегда оставляйте запас прочности — лучше недобрать буст, чем повредить двигатель." boost_dome_targets1 = "Таблица предварительных (bias) значений давления купола, необходимых для достижения целевого давления во впускном коллекторе (ось Y) при заданных оборотах RPM (ось X).\n\nСистема 'boost control' корректирует целевое давление купола. Система 'dome control' управляет соленоидами для достижения этого целевого давления.\n\nЗначения указаны в абсолютных кПа, поэтому всегда больше 100 кПа (атмосферное давление). Заполните таблицу на основе данных логирования — запишите, какое давление в куполе соответствует нужному бусту на разных оборотах." llstg_in = "Вход кнопки активации системы Line-Lock (блокировки колёс) для старта.\n\nЭта функция предназначена в первую очередь для автомобилей с механической коробкой передач, чтобы предотвратить преждевременное срабатывание системы хронометража (rolling the beams) на дрэг-стрипе. Должна использоваться совместно с Launch Control.\n\nLine-Lock удерживает передние тормоза заблокированными, позволяя прогревать задние шины (burnout) перед стартом. Убедитесь в надёжности электрических соединений — отказ системы на старте может быть опасен." llstg_out = "Выход реле для управления соленоидом Line-Lock.\nПодключается к соленоиду тормозной системы, который блокирует давление в передних тормозных контурах. Используйте реле соответствующей мощности и обязательно установите защитный диод на соленоид. Проверьте работоспособность системы на безопасной площадке перед использованием на соревнованиях." can_bcast_user_id = "11-битный CAN-идентификатор пользовательского тестового сообщения (в десятичном формате).\nДопустимый диапазон — от 0 до 2047. Убедитесь, что выбранный ID не конфликтует с другими устройствами на шине CAN. Стандартные устройства Megasquirt используют определённые диапазоны ID — сверьтесь с документацией, чтобы избежать коллизий." can_bcast_user_d0 = "Байт данных 0 CAN-сообщения (десятичное значение, 0–255).\nЭто первый байт в поле данных CAN-фрейма. Используйте для отправки пользовательских данных на внешние устройства (дополнительные контроллеры, дисплеи, логгеры)." can_bcast_user_d1 = "Байт данных 1 CAN-сообщения (десятичное значение, 0–255).\nВторой байт в поле данных CAN-фрейма. Для передачи 16-битных значений обычно используют пару байтов (например, d0 — старший, d1 — младший байт)." can_bcast_user_d2 = "Байт данных 2 CAN-сообщения (десятичное значение, 0–255).\nТретий байт в поле данных CAN-фрейма." can_bcast_user_d3 = "Байт данных 3 CAN-сообщения (десятичное значение, 0–255).\nЧетвёртый байт в поле данных CAN-фрейма." can_bcast_user_d4 = "Байт данных 4 CAN-сообщения (десятичное значение, 0–255).\nПятый байт в поле данных CAN-фрейма." can_bcast_user_d5 = "Байт данных 5 CAN-сообщения (десятичное значение, 0–255).\nШестой байт в поле данных CAN-фрейма." can_bcast_user_d6 = "Байт данных 6 CAN-сообщения (десятичное значение, 0–255).\nСедьмой байт в поле данных CAN-фрейма." can_bcast_user_d7 = "Байт данных 7 CAN-сообщения (десятичное значение, 0–255).\nВосьмой (последний) байт в поле данных CAN-фрейма. Стандартный CAN-фрейм содержит до 8 байт данных (d0–d7)." vvt_onoff_loads = "Кривая управления системой изменения фаз газораспределения (VVT) в режиме вкл/выкл.\n\nПравила работы:\n- Если RPM ниже минимального значения в кривой — VVT выключен\n- Если RPM выше максимального значения в кривой — VVT выключен\n- Если RPM в пределах кривой, но нагрузка ниже кривой — VVT выключен\n- Если RPM в пределах кривой и нагрузка выше кривой — VVT включён\n\nНастройте кривую так, чтобы VVT активировался в зоне оборотов и нагрузок, где требуется улучшенное наполнение цилиндров. Обычно VVT включают на средних и высоких оборотах под нагрузкой. Проверяйте результат по логам — включение VVT должно улучшать VE в заданном диапазоне." etc_opt_on = "Включение электронного управления дроссельной заслонкой (Drive-by-Wire / DBW).\nВ этом режиме целевое положение дроссельной заслонки управляется ЭБУ на основе таблицы педаль/RPM и модификаторов. Режим 'Idle control' использует выход только для управления холостым ходом.\n\nВАЖНО: Требуется внешний сертифицированный контроллер дроссельной заслонки с функциями безопасности. MS3 НЕ является продуктом с гарантированной функциональной безопасностью и не должен использоваться как единственное средство управления дросселем. Отказ электронного дросселя без резервирования может привести к неконтролируемому ускорению. Всегда обеспечивайте механизм аварийного отключения." etc_opt_follow = "Определяет, должны ли целевые положения дросселей 2, 3, 4 повторять целевое положение дросселя 1.\nЕсли включено — все дроссели работают синхронно. Если выключено — для дросселей 2–4 передаётся нулевое значение.\n\nДля многодроссельных систем (ITB) обычно требуется синхронная работа всех заслонок. Включите эту опцию, если все дроссели должны открываться одинаково." etc_canbase = "Базовый CAN-идентификатор для отправки и приёма сообщений электронного дросселя.\nЗначение по умолчанию — 256.\n\nУбедитесь, что выбранный базовый ID и следующие за ним адреса не пересекаются с другими устройствами на шине CAN. Система использует несколько последовательных ID начиная с базового." etc_app_min = "Минимальное значение сигнала датчика положения педали акселератора (APP — Accelerator Pedal Position).\nСоответствует полностью отпущенной педали. Считайте это значение при калибровке — полностью отпустите педаль и запишите показание. Добавьте небольшой запас (1–2%), чтобы система надёжно определяла нулевое положение." etc_app_max = "Максимальное значение сигнала датчика положения педали акселератора (APP).\nСоответствует полностью нажатой педали. Считайте это значение при калибровке — нажмите педаль до упора и запишите показание. Оставьте небольшой запас от механического упора, чтобы 100% положение гарантированно достигалось." etc_tp_min = "Минимальное значение выходного сигнала целевого положения дроссельной заслонки.\nЭто значение соответствует полностью закрытой заслонке в протоколе обмена с внешним контроллером дросселя. Настройте в соответствии с документацией вашего контроллера DBW." etc_tp_max = "Максимальное значение выходного сигнала целевого положения дроссельной заслонки.\nЭто значение соответствует полностью открытой заслонке в протоколе обмена с внешним контроллером дросселя. Настройте в соответствии с документацией вашего контроллера DBW." etc_tp_act_min = "Минимальное значение входного сигнала фактического положения дроссельной заслонки (обратная связь от контроллера).\nИспользуется для масштабирования сигнала обратной связи. Соответствует полностью закрытой заслонке. Калибруйте при полностью закрытом дросселе." etc_tp_act_max = "Максимальное значение входного сигнала фактического положения дроссельной заслонки (обратная связь от контроллера).\nИспользуется для масштабирования сигнала обратной связи. Соответствует полностью открытой заслонке. Калибруйте при полностью открытом дросселе." etc_testpos = "Целевое положение дроссельной заслонки в тестовом режиме.\nИспользуйте для проверки работоспособности электронного дросселя перед эксплуатацией. Начинайте с малых значений (5–10%) и постепенно увеличивайте, убеждаясь в корректной работе. Никогда не тестируйте на полное открытие без подготовки — двигатель может резко набрать обороты." etc_pedal_pos = "Текущее положение педали акселератора.\nОтображает считанное и масштабированное значение с датчика положения педали (APP). Используйте для проверки калибровки — значение должно плавно меняться от 0% (отпущена) до 100% (нажата до упора) без скачков и провалов." etc_rpms = "Обороты двигателя (RPM).\nОсь оборотов в таблице управления электронным дросселем. Определяет, как целевое положение дросселя зависит от текущих оборотов двигателя при заданном положении педали." etc_targ_pos = "Целевое положение дроссельной заслонки, определённое из таблицы по положению педали акселератора и оборотам двигателя (RPM).\nЭто значение отправляется на внешний контроллер дросселя. Таблица позволяет настроить нелинейную зависимость между нажатием педали и открытием дросселя — например, сделать начальный ход педали более плавным для лучшей управляемости на низких скоростях." etc_idlescale = "Добавка к целевому положению дросселя при 100% скважности управления холостым ходом.\nТипичное значение — 5–10%.\n\nЭтот параметр определяет, насколько сильно система холостого хода может приоткрыть дроссель для поддержания оборотов ХХ. Если двигатель глохнет на холостых, увеличьте значение. Если обороты ХХ слишком высокие — уменьшите. Убедитесь, что общая сумма (целевое положение + добавка ХХ) не приводит к нежелательному ускорению." vss_diff_vss1 = "Скорость ведущих колёс (VSS1).\nНапример, задние колёса для заднеприводного автомобиля.\nИспользуется совместно с VSS2 для определения разницы скоростей между ведущими и неведущими колёсами (пробуксовки). Убедитесь, что датчик скорости правильно откалиброван — неверная калибровка приведёт к ошибочному срабатыванию трекшн-контроля." vss_diff_vss2 = "Скорость неведущих колёс (VSS2).\nНапример, передние колёса для заднеприводного автомобиля.\nРазница между VSS1 и VSS2 используется для определения степени пробуксовки ведущих колёс. Если VSS1 значительно больше VSS2 — колёса буксуют, и система может применить коррекцию (отбор угла зажигания, ограничение подачи топлива и т.д.)." vss_diff_table = "Таблица отбора угла опережения зажигания (в градусах) в зависимости от соотношения скоростей VSS1 и VSS2.\nИспользуется для трекшн-контроля: при обнаружении пробуксовки система уменьшает угол опережения зажигания на заданное количество градусов, снижая мощность двигателя.\n\nНастраивайте постепенно — начните с умеренных значений отбора (3–5 градусов) и увеличивайте при необходимости. Слишком агрессивный отбор может привести к рывкам и перегреву выпускной системы." ; tool tips end tooltips [Menu] ;---------------------------------------------------------------------------- ; There are five pre-defined values that may be used to define your menus. ; The first four allow access to the "standard" dialog boxes, the last one ; merely draws a separator (horizontal line) in the menu. ; ; std_constants ; std_enrichments ; std_realtime ; std_warmup ; std_accel ; ; std_separator ; ; Additionally, to support MS2/MS3 firmware, there are two standard ; dialogs to generate its three embedded tables. The first of these acts ; like Roger Enns' EasyTherm, but only works for MS2. The second one ; generates the internal AFR table required for proper closed loop operation ; in MS2. Use these without page numbers, as they will just be ignored ; in any case. ; ; std_ms2gentherm ; std_ms2geno2 ; ; If you use any of the std_constants, std_enrichments or std_warmup ; editors, they may be optionally suffixed with a page number (only ; useful for multi-page code variants), which causes them to edit the ; specified page. If you leave off the page specifier, they edit logical ; page one as specified in the Constants section. ; ; There are four special menu names, which when used append to the standard ; menus of the same name instead of creating a new one. The menu names ; are "File", "Communications", "Tools" and "Help". ; ;---------------------------------------------------------------------------- menuDialog = main menu = "Basic/Load Settings" subMenu = base, "Engine and Sequential Settings" subMenu = generalsettings2, "General Settings" subMenu = revlimiter2, "Rev Limiter" subMenu = shiftlight, "Shift Light" subMenu = engine_state_settings, "Engine State Settings" subMenu = std_separator subMenu = std_tpscal, "Calibrate TPS" subMenu = sensorCal, "Calibrate MAP/Baro" subMenu = battcalib, "Calibrate Battery Voltage" subMenu = flash_unlock, "Un/Lock Calibrations" subMenu = std_ms2gentherm, "Calibrate T&hermistor Sensors", 0, {flashlock} subMenu = std_ms2geno2, "Calibrate Lambda Sensor", 0, {flashlock} subMenu = std_separator ;---------------------------------------------- subMenu = tacho, "Tacho Output" subMenu = fan_control, "Fan Control" subMenu = tcluparams, "Torque Convertor Lockup" subMenu = alternator, "Alternator Control" subMenu = std_separator subMenu = barometerCorr, "Barometric Correction",0, {baroCorr} subMenu = map_sample_dialog, "MAP Sample Settings" subMenu = mapPredictCombined, "MAP/Load Prediction Settings" subMenu = std_separator subMenu = ITBcombined, "ITB Load Settings", 0, { algorithm == 6 || algorithm2 == 6 || IgnAlgorithm == 6 || IgnAlgorithm2 == 6 || afrload == 6 || eaeload == 6 } subMenu = mafdialog, "MAF Settings" subMenu = MAFtable, "MAF Flow Curve", 0, {MAFOption_t < 2 } subMenu = manifoldTempCorr,"MAF/MAT Correction Table", 0, {feature7_mafmat && ((algorithm == 5) || (algorithm2 == 4) || (algorithm2 == 5))} subMenu = std_separator subMenu = manifoldTempCorr2,"MAT Air Density Table", 0, {((algorithm != 4) && (algorithm != 5) && (algorithm2 != 4) && (algorithm2 != 5))} subMenu = matclt_curve, "MAT/CLT Correction", 0, {(algorithm != 4) && (algorithm != 5) && (algorithm2 != 4) && (algorithm2 != 5)} subMenu = std_separator subMenu = std_realtime, "&Realtime Display" subMenu = iopinlist, "Feature List Showing I/O pins" subMenu = pinusage, "I/O pins List Usage and Status" subMenu = pinusagel2, "I/O pins List2 Usage and Status" subMenu = pinusagecanloop, "CAN/loop Usage and Status" subMenu = pinusagecan, "Expansion I/O pins Usage and Status" subMenu = limitsettings, "Gauge and Settings Limits" menu = "F&uel Settings" subMenu = injsettings, "Injector Dead-Time/PWM" subMenu = smallpw, "Injector Small Pulsewidths" subMenu = inj_timing_tbl, "Injector Timing Table", 0, { sequential != 0 } subMenu = inj_timing_sec_tbl, "Secondary Injector Timing Table", 0, { sequential != 0 && (dualfuel_sw_on || staged_first_param) } subMenu = stagedCombined, "Staged Injection" subMenu = flexFuelSettings,"Fuel Sensor Settings (Flex)" subMenu = overrun, "Over-Run Fuel Cut" subMenu = std_separator subMenu = egoControl, "AFR/&EGO Control" subMenu = afrTable1Tbl, "A&FR Table 1", 0 subMenu = afrTable2Tbl, "AF&R Table 2", 0, { (!dualfuel_sw_on && tsw_pin_afr) || (dualfuel_sw_on && dualfuel_sw_afr) || ( N2Oopt_2 && N2Oopt_4) || tsw_pin_afr} subMenu = ego_auth_Tbl, "EGO Authority Table", 0, {egoType && egoAlgorithm_auth } subMenu = ego_auth_Tbl2, "EGO Authority Table Negative", 0, {egoType && egoAlgorithm_auth && egoAlgorithm_auth2 } subMenu = ego_delay_Tbl, "EGO Delay Table", 0, {egoType && (egoAlgorithm < 3) && egoAlgorithm_delay_table} subMenu = narrowband_tgts_tbl, "Narrowband EGO targets", 0, { egoType == 1 } subMenu = maxafr, "AFR safety system" subMenu = std_separator subMenu = veTable1Tbl, "Fuel VE Table &1", 0, { ((algorithm != 5) || ((algorithm == 5) && (feature7_maftrim))) } subMenu = veTable2Tbl, "Fuel VE Table &2", 0, { (algorithm2 != 0) } subMenu = veTable3Tbl, "Fuel VE Table 3", 0, { ((algorithm != 5) || ((algorithm == 5) && (feature7_maftrim))) && (f5_0_tsf || (dualfuel_sw_on && dualfuel_sw_fuel) || (dualfuel_sw_on && dualfuel_opt_mode)) } subMenu = veTable4Tbl, "Fuel VE Table 4", 0, { (algorithm2 != 0) && (f5_0_tsf || (dualfuel_sw_on && dualfuel_sw_fuel) || (dualfuel_sw_on && dualfuel_opt_mode)) } subMenu = std_separator subMenu = inj_trimad, "Cyl 1-4 Trims", 7, { hardware_fuel && sequential_trim_on_off } subMenu = inj_trimeh, "Cyl 5-8 Trims", 7, { hardware_fuel && (nInjectors > 4) && sequential_trim_on_off } subMenu = inj_trimil, "Cyl 9-12 Trims", 7, { hardware_fuel && (nInjectors > 8) && sequential_trim_on_off } subMenu = std_separator subMenu = injseq, "Sequenced Batch Fire", 0, { sequential == 0 } subMenu = std_separator subMenu = fuelpump, "Fuel Pump and Pressure" subMenu = fp_temp_curve, "Temperature Adjustment", 0, {fueltemp1 && fueltemp1_corr} subMenu = fp_press_curve, "Pressure Adjustment", 0, {(fp_opt_mode != 2) && fp_press_in && (fp_opt_reg == 2)} subMenu = fp_safety, "Fuel Pressure Safety", 0, {fp_press_in} subMenu = std_separator subMenu = fuelcalcs, "Fuel Calculations Summary" menu = "&Ignition Settings" subMenu = combinedignition, "Ignition Options/Wheel Decoder" subMenu = std_trigwiz, "Tri&gger Wizard", 0,{ (spk_mode0 != 31) && (spk_mode0 != 4) } subMenu = std_separator subMenu = dwellSettings, "D&well Battery Correction", 0, { spk_mode0 != 31 } subMenu = dwellrpm_curve, "Dwell vs RPM", 0, {spk_mode0 > 1 && dwellmode == 2 && spk_conf2_dwell} subMenu = dwell_tbl, "Dwell Table", 0, {(spk_mode0 > 1) && (dwellmode == 0) && spk_conf2_dwelltbl} subMenu = std_separator subMenu = coldAdvance, "&Cold Advance", 0, { spk_mode0 != 31 } subMenu = matBasedRetard, "MAT-&Based Timing Retard", 0, { spk_mode0 != 31 } subMenu = noisefiltering2, "Noise Filtering", 0 subMenu = std_separator subMenu = knockSettings, "&Knock Sensor Settings" subMenu = knockSettings4, "Knock Sensor Parameters", 0, {knk_option && (knk_option_an == 3)} subMenu = knockSettings2, "Knock Window Settings", 0, {knk_option} subMenu = knockupscale_curve, "Knock Coolant Scaling", 0, {knk_option} subMenu = std_separator subMenu = ignitionTbl1, "&Ignition Table 1", 0, { (spk_mode0 != 31) } subMenu = ignitionTbl2, "Ignition Table 2", 0, { (IgnAlgorithm2 !=0) && (spk_mode0 != 31)} subMenu = ignitionTbl3, "Ignition Table 3", 0, { f5_0_tss || (dualfuel_sw_on && dualfuel_sw_spk) } subMenu = ignitionTbl4, "Ignition Table 4", 0, { (IgnAlgorithm2 !=0) && (f5_0_tss || (dualfuel_sw_on && dualfuel_sw_spk)) } subMenu = std_separator subMenu = RotaryTrailingSettings, "Rotary Settings", 0, { (twoStroke == 3) && (spk_mode0 != 31) } subMenu = RotarySplitTbl, "Rotary Split Table", 0, { (twoStroke == 3) && (spk_mode0 != 31) } subMenu = std_separator subMenu = spk_trimad, "Cyl 1-4 Trims", 8, { spk_mode3_trim } subMenu = spk_trimeh, "Cyl 5-8 Trims", 8, { spk_mode3_trim && (nCylinders > 4)} subMenu = spk_trimil, "Cyl 9-12 Trims", 8, { spk_mode3_trim && (nCylinders > 8)} subMenu = std_separator subMenu = sparkcalcs, "Spark Calculations Summary" menu = "&Startup/Idle" subMenu = crsettings, "Cranking/Startup Settings", 0 subMenu = primingPW, "Pri&ming Pulse", 0 subMenu = crankingPW, "Cra&nking Pulse", 0 subMenu = cranktaper_curvet, "Cranking Taper Curve", 0, {feature7_cranktaper}, {feature7_crtpunits == 0} subMenu = cranktaper_curvee, "Cranking Taper Curve", 0, {feature7_cranktaper}, {feature7_crtpunits == 1} subMenu = nestedasePct, "AfterStart Enrichment (ASE)", 0 subMenu = aseTaper, "AfterStart Enrichment (ASE) Taper", 0 subMenu = nestedwarmup_curve, "&Warmup Enrichment (WUE)", 0 subMenu = std_separator subMenu = primingPW2, "Priming Pulse 2", 0, { (dualfuel_sw_on && dualfuel_sw2_prime) } subMenu = crankingPW2, "Cranking Pulse 2", 0, { (dualfuel_sw_on && dualfuel_sw2_crank) || alternate_blend } subMenu = nestedasePct2, "AfterStart Enrichment (ASE) 2", 0, { (dualfuel_sw_on && dualfuel_sw_ase) } subMenu = aseTaper2, "AfterStart Enrichment (ASE) Taper 2", 0, { (dualfuel_sw_on && dualfuel_sw_ase) } subMenu = nestedwarmup_curve2, "Warmup Enrichment (WUE) 2", 0, { (dualfuel_sw_on && dualfuel_sw_wue) } subMenu = std_separator subMenu = combinedidle, "I&dle Control" subMenu = pwmidle_crank_dutyorsteps_curve, "Idle Cranking Duty/Steps", 0, {IdleCtl > 1} subMenu = idlebins, "Idle Warmup Duty/Steps", 0, {(IdleCtl > 1) && (IdleCtl_alg == 0)} subMenu = combinedCLidle, "Closed-Loop Idle Settings", 0, {IdleCtl && (IdleCtl_alg == 1)} subMenu = pwmidle_target_curve, "Closed-Loop Idle Target Curve", 0, { ((IdleCtl > 1) && (IdleCtl_alg == 1)) || idle_special_ops_timing_assist } subMenu = pwmidle_cl_initialvalues, "Closed-Loop Idle Initial Values", 0, { pwmidle_cl_opts_initvaluetable && (IdleCtl > 1) && (IdleCtl_alg == 1) } subMenu = idle_voltage_comp_curve, "PWM Idle Voltage Compensation", 0, {IdleCtl == 2} subMenu = ac_idleup, "Air Conditioning Idle-up", 0 subMenu = std_separator subMenu = idleAdvance, "Idle Advance Settings" subMenu = cl_idle_timing_curve, "Idle RPM Timing Correction Curve", 0, { idle_special_ops_timing_assist } subMenu = idleVe, "Idle VE Settings" menu = "Accel Enrich" subMenu = accelsettings, "Accel Enrich Settings" subMenu = AEtime_settings, "Time-Based Accel",0, { !(AE_options & 0x1) } subMenu = AEpump_settings, "Accel-Pump Accel Enrichment Settings",0, { AE_options & 0x1 } subMenu = AEtime_settings2, "Time-Based Accel 2",0, { !(AE_options & 0x1) && (dualfuel_sw_on && dualfuel_sw2_ae) } subMenu = AEpump_settings2, "Accel-Pump Accel Enrichment Settings 2",0, { AE_options & 0x1 && (dualfuel_sw_on && dualfuel_sw2_ae) } subMenu = tpswot_curve, "TPS WOT Curve", 0, {feature7_aetpswot} subMenu = std_separator subMenu = EAEBAWCcurve, "EAE Adhere-to-walls Coefficient", 0, { EAEOption == 1 } subMenu = EAEBSOCcurve, "EAE Sucked-from-walls Coefficient", 0, { EAEOption == 1 } subMenu = EAEAWNcurve, "EAE Adhere-to-walls RPM Correction", 0, { EAEOption == 1 } subMenu = EAEcombi1, "EAE Sucked/Adhered Coefficients", 0, { EAEOption == 1 } subMenu = EAESONcurve, "EAE Sucked-from-walls RPM Correction", 0, { EAEOption == 1 } subMenu = EAEAWWcurve, "EAE Adhere-to-walls CLT Correction", 0, { EAEOption == 1 } subMenu = EAESOWcurve, "EAE Sucked-from-walls CLT Correction", 0, { EAEOption == 1 } subMenu = std_separator subMenu = EAEBAWCcurve2, "EAE Adhere-to-walls Coefficient 2", 0, { (EAEOption == 1 ) && (staged_first_param ) } subMenu = EAEBSOCcurve2, "EAE Sucked-from-walls Coefficient 2", 0, { (EAEOption == 1 ) && (staged_first_param ) } subMenu = EAEAWNcurve2, "EAE Adhere-to-walls RPM Correction 2", 0, { (EAEOption == 1 ) && (staged_first_param ) } subMenu = EAESONcurve2, "EAE Sucked-from-walls RPM Correction 2", 0, { (EAEOption == 1 ) && (staged_first_param ) } subMenu = EAEAWWcurve2, "EAE Adhere-to-walls CLT Correction 2", 0, { (EAEOption == 1 ) && (staged_first_param ) } subMenu = EAESOWcurve2, "EAE Sucked-from-walls CLT Correction 2", 0, { (EAEOption == 1 ) && (staged_first_param ) } subMenu = std_separator subMenu = XAccTable, "Puddling Factors (Accel)", 0, { EAEOption == 3 || EAEOption == 4 } subMenu = XDecTable, "Puddling Factors (Decel)", 0, { EAEOption == 3 || EAEOption == 4 } subMenu = TauAccTable, "Time Factors (Accel)", 0, { EAEOption == 3 || EAEOption == 4 } subMenu = TauDecTable, "Time Factors (Decel)", 0, { EAEOption == 3 || EAEOption == 4 } subMenu = XCltTable, "&X (Puddling) Temp. Corrections",0, { EAEOption == 4 } subMenu = TCltTable, "&Tau (Time) Temp. Corrections", 0, { EAEOption == 4 } menu = "Boost/VVT" subMenu = boost, "Boost Control Settings" subMenu = boostctlDutys, "Boost Control Duty Table", 0, { (boost_ctl_settings_on) && (!boost_ctl_settings_cl) && !boost_ctl_settings_dome && (boost_vss == 0)} subMenu = boostctlTargs, "Boost Control Target Table", 0, { (boost_ctl_settings_on == 1) && (boost_vss == 0) && ((boost_ctl_settings_cl == 1) || boost_ctl_settings_dome) } subMenu = boostctlCLPWMtargs1, "Boost Control Bias Duty Table 1", 0, { (boost_ctl_settings_on == 1) && (boost_ctl_settings_cl == 1) && !boost_ctl_settings_dome} subMenu = boostctlCLPWMtargs2, "Boost Control Bias Duty Table 2", 0, { (boost_ctl_settings_on == 1) && (boost_ctl_settings_cl == 1) && !boost_ctl_settings_dome && boost_vss_biasgear && (gear_no >= 2)} subMenu = boostctlCLPWMtargs3, "Boost Control Bias Duty Table 3", 0, { (boost_ctl_settings_on == 1) && (boost_ctl_settings_cl == 1) && !boost_ctl_settings_dome && boost_vss_biasgear && (gear_no >= 3)} subMenu = boostctlCLPWMtargs4, "Boost Control Bias Duty Table 4", 0, { (boost_ctl_settings_on == 1) && (boost_ctl_settings_cl == 1) && !boost_ctl_settings_dome && boost_vss_biasgear && (gear_no >= 4)} subMenu = boostctlCLPWMtargs5, "Boost Control Bias Duty Table 5", 0, { (boost_ctl_settings_on == 1) && (boost_ctl_settings_cl == 1) && !boost_ctl_settings_dome && boost_vss_biasgear && (gear_no >= 5)} subMenu = boostctlCLPWMtargs6, "Boost Control Bias Duty Table 6", 0, { (boost_ctl_settings_on == 1) && (boost_ctl_settings_cl == 1) && !boost_ctl_settings_dome && boost_vss_biasgear && (gear_no >= 6)} subMenu = boost_timed_curve, "Boost Delay (Timed From Launch)",0, { boost_ctl_settings_on && launch_opt_on && boost_feats_timed && (boost_vss != 4)} subMenu = boostvss_curve, "Boost Control vs Speed/Time", 0, { boost_ctl_settings_on && ((boost_vss == 1) || (boost_vss == 2) || (boost_vss == 4))} subMenu = std_separator subMenu = boostctlSettings2, "Boost Control Settings 2", 0 , {boost_ctl_settings_on} subMenu = boostctlDutys2, "Boost Control Duty Table 2", 0, { boost_ctl_settings_on && (((!boost_ctl_settings_cl) && (boost_feats_tsw || dualfuel_sw2_boosw)) || (boost_ctl_settings_on2 && !boost_ctl_settings_cl2)) && !boost_ctl_settings_dome } subMenu = boostctlTargs2, "Boost Control Target Table 2", 0, { boost_ctl_settings_on && (((boost_ctl_settings_cl ||boost_ctl_settings_dome) && (boost_feats_tsw || dualfuel_sw2_boosw)) || (boost_ctl_settings_on2 && boost_ctl_settings_cl2)) } subMenu = boostctlCLPWMtargs2, "Boost Control Bias Duty Table 2", 0, { boost_ctl_settings_on && boost_ctl_settings_on2 && boost_ctl_settings_cl2 } subMenu = std_separator subMenu = boost_dome_settings1, "Wastegate Dome Pressure Control 1", { boost_ctl_settings_on && boost_ctl_settings_dome } subMenu = boost_dome_tbl1, "Dome Bias Table 1", { boost_ctl_settings_on && boost_ctl_settings_dome && boost_ctl_settings_cl } subMenu = std_separator subMenu = antilag, "Turbo Anti-lag (ALS)" subMenu = antilagtables, "Turbo Anti-lag Tables", 0, {als_in_pin} subMenu = als_rifuelcut_tbl, "Turbo Anti-lag Roving Idle", 0, {als_in_pin && als_opt_ri && hardware_fuel && sequential} subMenu = std_separator subMenu = vvtparams, "VVT Settings" subMenu = vvt_timing1_tbl, "VVT Intake Table", 0, {vvt_opt1_on && vvt_opt2_pid2} subMenu = vvt_timing2_tbl, "VVT Exhaust Table", 0, {vvt_opt1_on && vvt_opt2_pid2 && (vvt_opt5_vvt1 || vvt_opt5_vvt2 || vvt_opt1_on > 2)} subMenu = vvt_onoff_curve, "VVT On/Off curve", 0, {vvt_opt1_on && !vvt_opt2_pid2} menu = "Table choices" subMenu = tablesw, "Table Switch/Dual Fuel" subMenu = dualfuel_temp_curve, "Temperature Adjustment", 0, { (dualfuel_sw_on && dualfuel_opt_temp) } subMenu = dualfuel_press_curve, "Pressure Adjustment", 0, { (dualfuel_sw_on && dualfuel_opt_press) } subMenu = injsettings2, "Alt. Injector Dead-time/PWM 2", 0, { (dualfuel_sw_on && dualfuel_sw2_injp) } subMenu = smallpw2, "Alt. Injector Small Pulsewidths 2", 0, { (dualfuel_sw_on && dualfuel_sw2_smpw) } subMenu = std_separator subMenu = blend1menu, "Blend Curve (1) VE1->2", 0, {algorithm2 && (loadCombine == 2)} subMenu = blend2menu, "Blend Curve (2) Spk1->2", 0, {IgnAlgorithm2 && (loadCombineign == 1)} subMenu = blend3menu, "Blend Curve (3) VE1+2->3+4", 0, {f5_0_tsf && (f5_0_tsf_opt == 0) && (tsw_pin_f == 14)} subMenu = blend4menu, "Blend Curve (4) Spk1+2->3+4", 0, {f5_0_tss && (f5_0_tss_opt == 0) && (tsw_pin_s == 14)} subMenu = blend5menu, "Blend Curve (5) AFR1->2", 0, {tsw_pin_afr == 14} subMenu = blend6menu, "Blend Curve (6) Boost1->2", 0, {(boost_feats_tsw == 14) && boost_ctl_settings_on} subMenu = blend7menu, "Blend Curve (7) Crank%1->2", 0, {alternate_blend} subMenu = blend8menu, "Blend Curve (8) Flex Blending", 0, { dualfuel_sw_on && (dualfuel_opt_mode == 2) } menu = "Advanced Engine" subMenu = speedsensors, "Speed and Gear Sensors" subMenu = ss, "Shaft Speed Sensors" subMenu = egt, "EGT/Thermocouple Settings" subMenu = sensors, "Generic Sensor Inputs" subMenu = accelerometer, "Accelerometer Parameters" subMenu = tcsettings, "Traction Control Settings" subMenu = tc_perfect_curve, "Traction Control - Perfect Run VSS", 0, {tc_opt_on && (tc_opt_method == 0)} subMenu = tc_perfectrpm_curve, "Traction Control - Perfect Run RPM", 0, {tc_opt_on && (tc_opt_method == 2)} subMenu = tcslip_menu, "Traction Control - External Slip% Input", 0, {tc_opt_on && (tc_opt_method == 1) && tc_opt_slipcurve} subMenu = tc_curves, "Traction Control Reactions", 0, {tc_opt_on} subMenu = tc_vss_diff_tbl, "Speed difference retard", 0, {tc_opt_on && tc_opt3_vssdiff} subMenu = std_separator subMenu = launch, "Launch / 2-step / 3-step / T-brake" subMenu = launch_retard_time, "Timed Retard After Launch", 0, {launch_opt_on && launch_opt_retard} subMenu = vsslaunch, "Speed-based Launch Control" subMenu = launch_var_curve, "Launch limit vs. MAP" subMenu = ShiftSettings, "Sequential Shift Cut" subMenu = nitrous, "&Nitrous System" subMenu = nitrous_curves_time, "Nitrous - Time-Based Progressive",0, {N2Oopt_2 && N2Oopt2_prog && (N2Oopt2_prog_time == 1) } subMenu = nitrous_curves_rpm, "Nitrous - RPM-Based Progressive", 0, {N2Oopt_2 && N2Oopt2_prog && (N2Oopt2_prog_time == 0)} subMenu = nitrous_curves_vss, "Nitrous - VSS-Based Progressive", 0, {N2Oopt_2 && N2Oopt2_prog && (N2Oopt2_prog_time == 2)} subMenu = waterinj, "Water Injection" subMenu = hpte, "High Power Time Enrichment" subMenu = oilpress, "Oil Pressure" subMenu = pitlimiter, "Pit Lane Limiter" subMenu = std_separator subMenu = ms3_port_edit_wrap1, "Programmable On/Off Outputs 1" subMenu = ms3_port_edit_wrap2, "Programmable On/Off Outputs 2" subMenu = gen_pwm_a, "Generic PWM output A" subMenu = gen_pwm_b, "Generic PWM output B" subMenu = gen_pwm_c, "Generic PWM output C" subMenu = gen_pwm_d, "Generic PWM output D" subMenu = gen_pwm_e, "Generic PWM output E", 0, {!(vvt_opt1_on)} subMenu = gen_pwm_f, "Generic PWM output F" subMenu = std_separator subMenu = generic_pid_a, "Generic Closed-Loop A" subMenu = generic_pid_b, "Generic Closed-Loop B" ; subMenu = userdefined, "User defined menu" ; uncomment this line to enable menuDialog = main menu = "3D &Tuning Maps" subMenu = veTable1Map, "Fuel VE Table &1",0, { ((algorithm != 5) || ((algorithm == 5) && (feature7_maftrim))) } subMenu = veTable2Map, "Fuel VE Table &2", 0, { (algorithm2 != 0) && (algorithm2 != 5) } subMenu = veTable3Map, "Fuel VE Table &3", 0, { (!dualfuel_sw_on && f5_0_tsf) || (dualfuel_sw_on && dualfuel_sw_fuel) || (dualfuel_sw_on && dualfuel_opt_mode) } subMenu = veTable4Map, "Fuel VE Table &4", 0, { ((!dualfuel_sw_on && f5_0_tsf) || (dualfuel_sw_on && dualfuel_sw_fuel) || (dualfuel_sw_on && dualfuel_opt_mode)) && (algorithm2 != 0) } subMenu = afrTable1Map, "A&FR Table 1", 0, { egoType > 1 } subMenu = afrTable2Map, "AF&R Table 2", 0, { (egoType > 1) && ((!dualfuel_sw_on && tsw_pin_afr) || (dualfuel_sw_on && dualfuel_sw_afr)) } subMenu = std_separator ;---------------------------------------------- subMenu = ignitionMap1, "&Ignition Table 1", 0, {(spk_mode0 != 31)} subMenu = ignitionMap2, "Ignition Table 2", 0, { (IgnAlgorithm2 != 0) && (spk_mode0 != 31)} subMenu = ignitionMap3, "Ignition Table 3", 0, { (!dualfuel_sw_on && f5_0_tss) || (dualfuel_sw_on && dualfuel_sw_fuel) } subMenu = ignitionMap4, "Ignition Table 4", 0, { (IgnAlgorithm2 !=0) && ((!dualfuel_sw_on && f5_0_tss) || (dualfuel_sw_on && dualfuel_sw_spk)) } subMenu = RotarySplitMap, "Rotary Split Table", 0, {(twoStroke == 3) && (spk_mode0 != 31)} subMenu = std_separator ;---------------------------------------------- subMenu = boostctlDtyMap, "Boost Control Duty Table", 0, {boost_ctl_settings_on && boost_ctl_settings_cl == 0} subMenu = boostctlTargMap, "Boost Control Target Table", 0, {boost_ctl_settings_on && boost_ctl_settings_cl} subMenu = boostctlDtyMap2, "Boost Control Duty Table 2", 0, {boost_ctl_settings_on && boost_ctl_settings_cl == 0} subMenu = boostctlTargMap2, "Boost Control Target Table 2", 0, {boost_ctl_settings_on && boost_ctl_settings_cl} subMenu = std_separator subMenu = inj_timing_map, "Sequential Injector Timing Table", 0, { sequential != 0 } subMenu = inj_timing_sec_map, "Sequential Injector Secondary Timing Table", 0, { sequential != 0 && (dualfuel_sw_on || staged_first_param) } menu = "CAN-bus/ Testmodes" subMenu = canparams, "CAN Parameters" subMenu = canbroadcast, "CAN Broadcasting",0, {can_enable_on} subMenu = canbcast_userdef, "CAN Broadcast Testing", 0, {can_enable_on && can_bcast1_on && can_bcast2_xxx} subMenu = can_outpc_bcast,"CAN Realtime Data Broadcasting", 0, {can_enable_on} subMenu = can_outpc_bcast_2,"CAN Realtime Data Broadcasting 2", 0, {can_enable_on && can_outpc_gp00_master} subMenu = can_outpc_bcast_3,"CAN Realtime Data Broadcasting 3", 0, {can_enable_on && can_outpc_gp00_master} subMenu = can_outpc_bcast_4,"CAN Realtime Data Broadcasting 4", 0, {can_enable_on && can_outpc_gp00_master} subMenu = can_rcv, "CAN Receiving", 0, {can_enable_on} subMenu = canvss, "CAN VSS, Gear",0, {can_enable_on} subMenu = canego, "CAN EGO, GPS",0, {can_enable_on} subMenu = realtimeclock, "Real Time Clock" subMenu = iobox, "IO-Box Settings" subMenu = dashbcast, "Dash Broadcasting" subMenu = std_separator ;---------------------------------------------- subMenu = checkengine, "Check Engine Light" subMenu = limpmode, "Limp Mode", 0, {cel_opt_on} subMenu = alphaMAPTbl, "Fallback MAP Table", 0, {cel_opt_on && cel_opt2_map && cel_action1_map && cel_action1_map_an} subMenu = std_separator ;---------------------------------------------- subMenu = outputtest, "Output Test Mode - Inj/Spk" subMenu = outputtest_io_1, "Output Test Mode - I/O" subMenu = outputtest_io_2, "Output Test Mode - I/O 2" subMenu = outputtest_io_3, "Output Test Mode - I/O 3" subMenu = outputtest_io_4, "Output Test Mode - CAN I/O" subMenu = iactest, "Output Test Mode - Idle Valve", 0, {IdleCtl && (etc_opt_on == 0)} subMenu = injseqtest, "Injector Sequential Testing" subMenu = injspkonoff, "Inj/Spk Disabling Test Mode" subMenu = std_separator ;---------------------------------------------- subMenu = engine_control, "Engine Control" subMenu = special, "Special Options" subMenu = std_separator subMenu = lttrim, "Long Term Trim Settings" subMenu = ltt_Table1Tbl, "Long Term Trim Table &1", 0 subMenu = std_separator subMenu = etc, "Throttle control (DBW)" subMenu = etctest, "Throttle Test Mode", 0, {etc_opt_on} #if OUTMSG_EDITING subMenu = std_separator subMenu = outmsg1, "Outmsg 1" subMenu = outmsg2, "Outmsg 2" subMenu = outmsg3, "Outmsg 3" subMenu = outmsg4, "Outmsg 4" #endif menuDialog = main menu = "T&ools" subMenu = sensorCal, "Calibrate MAP/Baro" subMenu = battcalib, "Calibrate Battery Voltage" subMenu = std_separator ;---------------------------------------------- subMenu = flash_unlock, "Un/Lock Calibrations" subMenu = std_ms2gentherm, "Calibrate T&hermistor Sensors", 0, {flashlock} subMenu = std_ms2geno2, "Calibrate Lambda Sensor", 0, {flashlock} menu = "Data Logging" subMenu = sdcard_datalog, "SD Card Datalogging" subMenu = std_ms3SdConsole, "Browse / Import SD Card",0, {log_style_on2 && (tsLocalCanId == tsCanId) } menu = "Communications" subMenu = setbaud, "ECU Baud Rate", 0 menu = "Help" subMenu = helpGeneral, "MS3 Info" ;------------------------------------------------------------------------------- [VerbiageOverride] ; text over-rides for internal TS dialogs. "Engine Stroke" = "Engine Stroke/Rotary" "Number of Cylinders" = "No. Cylinders/Rotors" [ControllerCommands] ; commandName = command1, command2, commandn... ; command in standard ini format, a command name can be assigned to 1 to n commands that will be executed in order. ; This does not include any resultant protocol envelope data, only the response data itself. ; WARNING!! These commands bypass TunerStudio's normal memory synchronization. If these commands ; alter mapped settings (Constant) memory in the controller, TunerStudio will have an out of sync condition ; and may create error messages. ; It is expected that these commands would not typically alter any ram mapped to a Constant. ;The offsets here must match the actual offsets in 'datax1' and include the 0x200 offset. cmdStopTestmode = "w\$tsCanId\x07\x02\x87\x00\x05\x30\x39\x00\x00" cmdEnterTestMode = "w\$tsCanId\x07\x02\x87\x00\x05\x30\x39\x00\x01" cmdtestspkon = "w\$tsCanId\x07\x02\x87\x00\x05\x30\x39\x00\x02" cmdtestinjon = "w\$tsCanId\x07\x02\x87\x00\x05\x30\x39\x00\x03" cmdfpon = "w\$tsCanId\x07\x02\x87\x00\x05\x30\x39\x00\x05" cmdfpoff = "w\$tsCanId\x07\x02\x87\x00\x05\x30\x39\x00\x06" cmdtestinjspkoff = "w\$tsCanId\x07\x02\x87\x00\x05\x30\x39\x00\x07" cmdtestiacoff = "w\$tsCanId\x07\x02\x87\x00\x05\x30\x39\x00\x08" cmdtestiachome = "w\$tsCanId\x07\x02\x87\x00\x05\x30\x39\x00\x09" cmdtestiacon = "w\$tsCanId\x07\x02\x87\x00\x05\x30\x39\x00\x0a" cmdskipinjoff= "w\$tsCanId\x07\x02\x87\x00\x05\x30\x39\x00\x0b" cmdskipinjon = "w\$tsCanId\x07\x02\x87\x00\x05\x30\x39\x00\x0c" cmdskipspkon = "w\$tsCanId\x07\x02\x87\x00\x05\x30\x39\x00\x0d" cmdetcoff = "w\$tsCanId\x07\x02\x87\x00\x05\x30\x39\x00\x0e" cmdetcon = "w\$tsCanId\x07\x02\x87\x00\x05\x30\x39\x00\x0f" cmdtestinjnorm = "w\$tsCanId\x07\x02\x87\x00\x05\x30\x39\x00\x10" cmdtestinjbat = "w\$tsCanId\x07\x02\x87\x00\x05\x30\x39\x00\x11" cmdtestinjsem = "w\$tsCanId\x07\x02\x87\x00\x05\x30\x39\x00\x12" cmdtestinjseq = "w\$tsCanId\x07\x02\x87\x00\x05\x30\x39\x00\x13" cmdtestiaccycle = "w\$tsCanId\x07\x02\x87\x00\x05\x30\x39\x00\x18" cmdinjspk1 = "w\$tsCanId\x07\x02\x87\x00\x05\x30\x39\x00\x20" cmdinjspk2 = "w\$tsCanId\x07\x02\x87\x00\x05\x30\x39\x00\x21" cmdinjspk3 = "w\$tsCanId\x07\x02\x87\x00\x05\x30\x39\x00\x22" cmdinjspk4 = "w\$tsCanId\x07\x02\x87\x00\x05\x30\x39\x00\x23" cmdinjspk5 = "w\$tsCanId\x07\x02\x87\x00\x05\x30\x39\x00\x24" cmdinjspk6 = "w\$tsCanId\x07\x02\x87\x00\x05\x30\x39\x00\x25" cmdinjspk7 = "w\$tsCanId\x07\x02\x87\x00\x05\x30\x39\x00\x26" cmdinjspk8 = "w\$tsCanId\x07\x02\x87\x00\x05\x30\x39\x00\x27" cmdinjspk9 = "w\$tsCanId\x07\x02\x87\x00\x05\x30\x39\x00\x28" cmdinjspk10 = "w\$tsCanId\x07\x02\x87\x00\x05\x30\x39\x00\x29" cmdinjspk11 = "w\$tsCanId\x07\x02\x87\x00\x05\x30\x39\x00\x2a" cmdinjspk12 = "w\$tsCanId\x07\x02\x87\x00\x05\x30\x39\x00\x2b" cmdinjspk13 = "w\$tsCanId\x07\x02\x87\x00\x05\x30\x39\x00\x2c" cmdinjspk14 = "w\$tsCanId\x07\x02\x87\x00\x05\x30\x39\x00\x2d" cmdinjspk15 = "w\$tsCanId\x07\x02\x87\x00\x05\x30\x39\x00\x2e" cmdinjspk16 = "w\$tsCanId\x07\x02\x87\x00\x05\x30\x39\x00\x2f" cmdtest_pp3_off = "w\$tsCanId\x07\x02\x87\x00\x05\x30\x39\x00\x80" cmdtest_pp3_pulsed = "w\$tsCanId\x07\x02\x87\x00\x05\x30\x39\x00\x82" cmdtest_pp3_on = "w\$tsCanId\x07\x02\x87\x00\x05\x30\x39\x00\x83" cmdtest_pp4_off = "w\$tsCanId\x07\x02\x87\x00\x05\x30\x39\x00\x84" cmdtest_pp4_pulsed = "w\$tsCanId\x07\x02\x87\x00\x05\x30\x39\x00\x86" cmdtest_pp4_on = "w\$tsCanId\x07\x02\x87\x00\x05\x30\x39\x00\x87" cmdtest_pp5_off = "w\$tsCanId\x07\x02\x87\x00\x05\x30\x39\x00\x88" cmdtest_pp5_pulsed = "w\$tsCanId\x07\x02\x87\x00\x05\x30\x39\x00\x8a" cmdtest_pp5_on = "w\$tsCanId\x07\x02\x87\x00\x05\x30\x39\x00\x8b" cmdtest_pp6_off = "w\$tsCanId\x07\x02\x87\x00\x05\x30\x39\x00\x8c" cmdtest_pp6_pulsed = "w\$tsCanId\x07\x02\x87\x00\x05\x30\x39\x00\x8e" cmdtest_pp6_on = "w\$tsCanId\x07\x02\x87\x00\x05\x30\x39\x00\x8f" cmdtest_pp7_off = "w\$tsCanId\x07\x02\x87\x00\x05\x30\x39\x00\x90" cmdtest_pp7_pulsed = "w\$tsCanId\x07\x02\x87\x00\x05\x30\x39\x00\x92" cmdtest_pp7_on = "w\$tsCanId\x07\x02\x87\x00\x05\x30\x39\x00\x93" cmdtest_pk0_off = "w\$tsCanId\x07\x02\x87\x00\x05\x30\x39\x00\x94" cmdtest_pk0_pulsed = "w\$tsCanId\x07\x02\x87\x00\x05\x30\x39\x00\x96" cmdtest_pk0_on = "w\$tsCanId\x07\x02\x87\x00\x05\x30\x39\x00\x97" cmdtest_pp2_off = "w\$tsCanId\x07\x02\x87\x00\x05\x30\x39\x00\x98" cmdtest_pp2_pulsed = "w\$tsCanId\x07\x02\x87\x00\x05\x30\x39\x00\x9a" cmdtest_pp2_on = "w\$tsCanId\x07\x02\x87\x00\x05\x30\x39\x00\x9b" cmdtest_pe4_off = "w\$tsCanId\x07\x02\x87\x00\x05\x30\x39\x00\x9c" cmdtest_pe4_pulsed = "w\$tsCanId\x07\x02\x87\x00\x05\x30\x39\x00\x9e" cmdtest_pe4_on = "w\$tsCanId\x07\x02\x87\x00\x05\x30\x39\x00\x9f" cmdtest_pa0_off = "w\$tsCanId\x07\x02\x87\x00\x05\x30\x39\x00\xa0" cmdtest_pa0_pulsed = "w\$tsCanId\x07\x02\x87\x00\x05\x30\x39\x00\xa2" cmdtest_pa0_on = "w\$tsCanId\x07\x02\x87\x00\x05\x30\x39\x00\xa3" cmdtest_pa1_off = "w\$tsCanId\x07\x02\x87\x00\x05\x30\x39\x00\xa4" cmdtest_pa1_pulsed = "w\$tsCanId\x07\x02\x87\x00\x05\x30\x39\x00\xa6" cmdtest_pa1_on = "w\$tsCanId\x07\x02\x87\x00\x05\x30\x39\x00\xa7" cmdtest_pa2_off = "w\$tsCanId\x07\x02\x87\x00\x05\x30\x39\x00\xa8" cmdtest_pa2_pulsed = "w\$tsCanId\x07\x02\x87\x00\x05\x30\x39\x00\xaa" cmdtest_pa2_on = "w\$tsCanId\x07\x02\x87\x00\x05\x30\x39\x00\xab" cmdtest_pa3_off = "w\$tsCanId\x07\x02\x87\x00\x05\x30\x39\x00\xac" cmdtest_pa3_pulsed = "w\$tsCanId\x07\x02\x87\x00\x05\x30\x39\x00\xae" cmdtest_pa3_on = "w\$tsCanId\x07\x02\x87\x00\x05\x30\x39\x00\xaf" cmdtest_pa4_off = "w\$tsCanId\x07\x02\x87\x00\x05\x30\x39\x00\xb0" cmdtest_pa4_pulsed = "w\$tsCanId\x07\x02\x87\x00\x05\x30\x39\x00\xb2" cmdtest_pa4_on = "w\$tsCanId\x07\x02\x87\x00\x05\x30\x39\x00\xb3" cmdtest_pa5_off = "w\$tsCanId\x07\x02\x87\x00\x05\x30\x39\x00\xb4" cmdtest_pa5_pulsed = "w\$tsCanId\x07\x02\x87\x00\x05\x30\x39\x00\xb6" cmdtest_pa5_on = "w\$tsCanId\x07\x02\x87\x00\x05\x30\x39\x00\xb7" cmdtest_pa6_off = "w\$tsCanId\x07\x02\x87\x00\x05\x30\x39\x00\xb8" cmdtest_pa6_pulsed = "w\$tsCanId\x07\x02\x87\x00\x05\x30\x39\x00\xba" cmdtest_pa6_on = "w\$tsCanId\x07\x02\x87\x00\x05\x30\x39\x00\xbb" cmdtest_pa7_off = "w\$tsCanId\x07\x02\x87\x00\x05\x30\x39\x00\xbc" cmdtest_pa7_pulsed = "w\$tsCanId\x07\x02\x87\x00\x05\x30\x39\x00\xbe" cmdtest_pa7_on = "w\$tsCanId\x07\x02\x87\x00\x05\x30\x39\x00\xbf" cmdtest_pb0_off = "w\$tsCanId\x07\x02\x87\x00\x05\x30\x39\x00\xc0" cmdtest_pb0_pulsed = "w\$tsCanId\x07\x02\x87\x00\x05\x30\x39\x00\xc2" cmdtest_pb0_on = "w\$tsCanId\x07\x02\x87\x00\x05\x30\x39\x00\xc3" cmdtest_pb1_off = "w\$tsCanId\x07\x02\x87\x00\x05\x30\x39\x00\xc4" cmdtest_pb1_pulsed = "w\$tsCanId\x07\x02\x87\x00\x05\x30\x39\x00\xc6" cmdtest_pb1_on = "w\$tsCanId\x07\x02\x87\x00\x05\x30\x39\x00\xc7" cmdtest_pb2_off = "w\$tsCanId\x07\x02\x87\x00\x05\x30\x39\x00\xc8" cmdtest_pb2_pulsed = "w\$tsCanId\x07\x02\x87\x00\x05\x30\x39\x00\xca" cmdtest_pb2_on = "w\$tsCanId\x07\x02\x87\x00\x05\x30\x39\x00\xcb" cmdtest_pb3_off = "w\$tsCanId\x07\x02\x87\x00\x05\x30\x39\x00\xcc" cmdtest_pb3_pulsed = "w\$tsCanId\x07\x02\x87\x00\x05\x30\x39\x00\xce" cmdtest_pb3_on = "w\$tsCanId\x07\x02\x87\x00\x05\x30\x39\x00\xcf" cmdtest_pb4_off = "w\$tsCanId\x07\x02\x87\x00\x05\x30\x39\x00\xd0" cmdtest_pb4_pulsed = "w\$tsCanId\x07\x02\x87\x00\x05\x30\x39\x00\xd2" cmdtest_pb4_on = "w\$tsCanId\x07\x02\x87\x00\x05\x30\x39\x00\xd3" cmdtest_pb5_off = "w\$tsCanId\x07\x02\x87\x00\x05\x30\x39\x00\xd4" cmdtest_pb5_pulsed = "w\$tsCanId\x07\x02\x87\x00\x05\x30\x39\x00\xd6" cmdtest_pb5_on = "w\$tsCanId\x07\x02\x87\x00\x05\x30\x39\x00\xd7" cmdtest_pb6_off = "w\$tsCanId\x07\x02\x87\x00\x05\x30\x39\x00\xd8" cmdtest_pb6_pulsed = "w\$tsCanId\x07\x02\x87\x00\x05\x30\x39\x00\xda" cmdtest_pb6_on = "w\$tsCanId\x07\x02\x87\x00\x05\x30\x39\x00\xdb" cmdtest_pb7_off = "w\$tsCanId\x07\x02\x87\x00\x05\x30\x39\x00\xdc" cmdtest_pb7_pulsed = "w\$tsCanId\x07\x02\x87\x00\x05\x30\x39\x00\xde" cmdtest_pb7_on = "w\$tsCanId\x07\x02\x87\x00\x05\x30\x39\x00\xdf" cmdtest_pj0_off = "w\$tsCanId\x07\x02\x87\x00\x05\x30\x39\x00\xe0" cmdtest_pj0_pulsed = "w\$tsCanId\x07\x02\x87\x00\x05\x30\x39\x00\xe2" cmdtest_pj0_on = "w\$tsCanId\x07\x02\x87\x00\x05\x30\x39\x00\xe3" cmdtest_pj1_off = "w\$tsCanId\x07\x02\x87\x00\x05\x30\x39\x00\xe4" cmdtest_pj1_pulsed = "w\$tsCanId\x07\x02\x87\x00\x05\x30\x39\x00\xe6" cmdtest_pj1_on = "w\$tsCanId\x07\x02\x87\x00\x05\x30\x39\x00\xe7" cmdtest_pt1_off = "w\$tsCanId\x07\x02\x87\x00\x05\x30\x39\x00\xe8" cmdtest_pt1_pulsed = "w\$tsCanId\x07\x02\x87\x00\x05\x30\x39\x00\xea" cmdtest_pt1_on = "w\$tsCanId\x07\x02\x87\x00\x05\x30\x39\x00\xeb" cmdtest_pt3_off = "w\$tsCanId\x07\x02\x87\x00\x05\x30\x39\x00\xec" cmdtest_pt3_pulsed = "w\$tsCanId\x07\x02\x87\x00\x05\x30\x39\x00\xee" cmdtest_pt3_on = "w\$tsCanId\x07\x02\x87\x00\x05\x30\x39\x00\xef" cmdtest_pm2_off = "w\$tsCanId\x07\x02\x87\x00\x05\x30\x39\x00\xf0" cmdtest_pm2_pulsed = "w\$tsCanId\x07\x02\x87\x00\x05\x30\x39\x00\xf2" cmdtest_pm2_on = "w\$tsCanId\x07\x02\x87\x00\x05\x30\x39\x00\xf3" cmdtest_pk1_off = "w\$tsCanId\x07\x02\x87\x00\x05\x30\x39\x00\xf4" cmdtest_pk1_pulsed = "w\$tsCanId\x07\x02\x87\x00\x05\x30\x39\x00\xf6" cmdtest_pk1_on = "w\$tsCanId\x07\x02\x87\x00\x05\x30\x39\x00\xf7" cmdtest_pk3_off = "w\$tsCanId\x07\x02\x87\x00\x05\x30\x39\x00\xf8" cmdtest_pk3_pulsed = "w\$tsCanId\x07\x02\x87\x00\x05\x30\x39\x00\xfa" cmdtest_pk3_on = "w\$tsCanId\x07\x02\x87\x00\x05\x30\x39\x00\xfb" cmdtest_pk7_off = "w\$tsCanId\x07\x02\x87\x00\x05\x30\x39\x00\xfc" cmdtest_pk7_pulsed = "w\$tsCanId\x07\x02\x87\x00\x05\x30\x39\x00\xfe" cmdtest_pk7_on = "w\$tsCanId\x07\x02\x87\x00\x05\x30\x39\x00\xff" cmdlttr1 = "w\$tsCanId\x07\x02\x9a\x00\x01\x41" cmdlttr2 = "w\$tsCanId\x07\x02\x9a\x00\x01\x42" cmdlttw = "w\$tsCanId\x07\x02\x9a\x00\x01\x51" cmdlttz = "w\$tsCanId\x07\x02\x9a\x00\x01\x61" ; CAN outs cmdtestcano0off = "w\$tsCanId\x07\x02\x87\x00\x05\x30\x39\x01\x80" cmdtestcano0pulsed = "w\$tsCanId\x07\x02\x87\x00\x05\x30\x39\x01\x82" cmdtestcano0on = "w\$tsCanId\x07\x02\x87\x00\x05\x30\x39\x01\x83" cmdtestcano1off = "w\$tsCanId\x07\x02\x87\x00\x05\x30\x39\x01\x84" cmdtestcano1pulsed = "w\$tsCanId\x07\x02\x87\x00\x05\x30\x39\x01\x86" cmdtestcano1on = "w\$tsCanId\x07\x02\x87\x00\x05\x30\x39\x01\x87" cmdtestcano2off = "w\$tsCanId\x07\x02\x87\x00\x05\x30\x39\x01\x88" cmdtestcano2pulsed = "w\$tsCanId\x07\x02\x87\x00\x05\x30\x39\x01\x8a" cmdtestcano2on = "w\$tsCanId\x07\x02\x87\x00\x05\x30\x39\x01\x8b" cmdtestcano3off = "w\$tsCanId\x07\x02\x87\x00\x05\x30\x39\x01\x8c" cmdtestcano3pulsed = "w\$tsCanId\x07\x02\x87\x00\x05\x30\x39\x01\x8e" cmdtestcano3on = "w\$tsCanId\x07\x02\x87\x00\x05\x30\x39\x01\x8f" cmdtestcano4off = "w\$tsCanId\x07\x02\x87\x00\x05\x30\x39\x01\x90" cmdtestcano4pulsed = "w\$tsCanId\x07\x02\x87\x00\x05\x30\x39\x01\x92" cmdtestcano4on = "w\$tsCanId\x07\x02\x87\x00\x05\x30\x39\x01\x93" cmdtestcano5off = "w\$tsCanId\x07\x02\x87\x00\x05\x30\x39\x01\x94" cmdtestcano5pulsed = "w\$tsCanId\x07\x02\x87\x00\x05\x30\x39\x01\x96" cmdtestcano5on = "w\$tsCanId\x07\x02\x87\x00\x05\x30\x39\x01\x97" cmdtestcano6off = "w\$tsCanId\x07\x02\x87\x00\x05\x30\x39\x01\x98" cmdtestcano6pulsed = "w\$tsCanId\x07\x02\x87\x00\x05\x30\x39\x01\x9a" cmdtestcano6on = "w\$tsCanId\x07\x02\x87\x00\x05\x30\x39\x01\x9b" cmdtestcano7off = "w\$tsCanId\x07\x02\x87\x00\x05\x30\x39\x01\x9c" cmdtestcano7pulsed = "w\$tsCanId\x07\x02\x87\x00\x05\x30\x39\x01\x9e" cmdtestcano7on = "w\$tsCanId\x07\x02\x87\x00\x05\x30\x39\x01\x9f" cmdtestcano8off = "w\$tsCanId\x07\x02\x87\x00\x05\x30\x39\x01\xa0" cmdtestcano8pulsed = "w\$tsCanId\x07\x02\x87\x00\x05\x30\x39\x01\xa2" cmdtestcano8on = "w\$tsCanId\x07\x02\x87\x00\x05\x30\x39\x01\xa3" cmdtestcano9off = "w\$tsCanId\x07\x02\x87\x00\x05\x30\x39\x01\xa4" cmdtestcano9pulsed = "w\$tsCanId\x07\x02\x87\x00\x05\x30\x39\x01\xa6" cmdtestcano9on = "w\$tsCanId\x07\x02\x87\x00\x05\x30\x39\x01\xa7" cmdtestcano10off = "w\$tsCanId\x07\x02\x87\x00\x05\x30\x39\x01\xa8" cmdtestcano10pulsed = "w\$tsCanId\x07\x02\x87\x00\x05\x30\x39\x01\xaa" cmdtestcano10on = "w\$tsCanId\x07\x02\x87\x00\x05\x30\x39\x01\xab" cmdtestcano11off = "w\$tsCanId\x07\x02\x87\x00\x05\x30\x39\x01\xac" cmdtestcano11pulsed = "w\$tsCanId\x07\x02\x87\x00\x05\x30\x39\x01\xae" cmdtestcano11on = "w\$tsCanId\x07\x02\x87\x00\x05\x30\x39\x01\xaf" cmdtestcano12off = "w\$tsCanId\x07\x02\x87\x00\x05\x30\x39\x01\xb0" cmdtestcano12pulsed = "w\$tsCanId\x07\x02\x87\x00\x05\x30\x39\x01\xb2" cmdtestcano12on = "w\$tsCanId\x07\x02\x87\x00\x05\x30\x39\x01\xb3" cmdtestcano13off = "w\$tsCanId\x07\x02\x87\x00\x05\x30\x39\x01\xb4" cmdtestcano13pulsed = "w\$tsCanId\x07\x02\x87\x00\x05\x30\x39\x01\xb6" cmdtestcano13on = "w\$tsCanId\x07\x02\x87\x00\x05\x30\x39\x01\xb7" cmdtestcano14off = "w\$tsCanId\x07\x02\x87\x00\x05\x30\x39\x01\xb8" cmdtestcano14pulsed = "w\$tsCanId\x07\x02\x87\x00\x05\x30\x39\x01\xba" cmdtestcano14on = "w\$tsCanId\x07\x02\x87\x00\x05\x30\x39\x01\xbb" cmdtestcano15off = "w\$tsCanId\x07\x02\x87\x00\x05\x30\x39\x01\xbc" cmdtestcano15pulsed = "w\$tsCanId\x07\x02\x87\x00\x05\x30\x39\x01\xbe" cmdtestcano15on = "w\$tsCanId\x07\x02\x87\x00\x05\x30\x39\x01\xbf" cmdtest_pm7_off = "w\$tsCanId\x07\x02\x87\x00\x05\x30\x39\x01\xc0" cmdtest_pm7_pulsed = "w\$tsCanId\x07\x02\x87\x00\x05\x30\x39\x01\xc2" cmdtest_pm7_on = "w\$tsCanId\x07\x02\x87\x00\x05\x30\x39\x01\xc3" cmdtest_pm6_off = "w\$tsCanId\x07\x02\x87\x00\x05\x30\x39\x01\xc4" cmdtest_pm6_pulsed = "w\$tsCanId\x07\x02\x87\x00\x05\x30\x39\x01\xc6" cmdtest_pm6_on = "w\$tsCanId\x07\x02\x87\x00\x05\x30\x39\x01\xc7" cmdtest_ps4_off = "w\$tsCanId\x07\x02\x87\x00\x05\x30\x39\x01\xc8" cmdtest_ps4_pulsed = "w\$tsCanId\x07\x02\x87\x00\x05\x30\x39\x01\xca" cmdtest_ps4_on = "w\$tsCanId\x07\x02\x87\x00\x05\x30\x39\x01\xcb" cmdtest_ps5_off = "w\$tsCanId\x07\x02\x87\x00\x05\x30\x39\x01\xcc" cmdtest_ps5_pulsed = "w\$tsCanId\x07\x02\x87\x00\x05\x30\x39\x01\xce" cmdtest_ps5_on = "w\$tsCanId\x07\x02\x87\x00\x05\x30\x39\x01\xcf" cmdtest_pt7_off = "w\$tsCanId\x07\x02\x87\x00\x05\x30\x39\x01\xd0" cmdtest_pt7_pulsed = "w\$tsCanId\x07\x02\x87\x00\x05\x30\x39\x01\xd2" cmdtest_pt7_on = "w\$tsCanId\x07\x02\x87\x00\x05\x30\x39\x01\xd3" cmdtest_pp0_off = "w\$tsCanId\x07\x02\x87\x00\x05\x30\x39\x01\xd4" cmdtest_pp0_pulsed = "w\$tsCanId\x07\x02\x87\x00\x05\x30\x39\x01\xd6" cmdtest_pp0_on = "w\$tsCanId\x07\x02\x87\x00\x05\x30\x39\x01\xd7" cmdtest_pp1_off = "w\$tsCanId\x07\x02\x87\x00\x05\x30\x39\x01\xd8" cmdtest_pp1_pulsed = "w\$tsCanId\x07\x02\x87\x00\x05\x30\x39\x01\xda" cmdtest_pp1_on = "w\$tsCanId\x07\x02\x87\x00\x05\x30\x39\x01\xdb" cmdtest_ps6_off = "w\$tsCanId\x07\x02\x87\x00\x05\x30\x39\x01\xdc" cmdtest_ps6_pulsed = "w\$tsCanId\x07\x02\x87\x00\x05\x30\x39\x01\xde" cmdtest_ps6_on = "w\$tsCanId\x07\x02\x87\x00\x05\x30\x39\x01\xdf" cmdtest_ps7_off = "w\$tsCanId\x07\x02\x87\x00\x05\x30\x39\x01\xe0" cmdtest_ps7_pulsed = "w\$tsCanId\x07\x02\x87\x00\x05\x30\x39\x01\xe2" cmdtest_ps7_on = "w\$tsCanId\x07\x02\x87\x00\x05\x30\x39\x01\xe3" cmdtest_pt4_off = "w\$tsCanId\x07\x02\x87\x00\x05\x30\x39\x01\xe4" cmdtest_pt4_pulsed = "w\$tsCanId\x07\x02\x87\x00\x05\x30\x39\x01\xe6" cmdtest_pt4_on = "w\$tsCanId\x07\x02\x87\x00\x05\x30\x39\x01\xe7" cmdtest_pt5_off = "w\$tsCanId\x07\x02\x87\x00\x05\x30\x39\x01\xe8" cmdtest_pt5_pulsed = "w\$tsCanId\x07\x02\x87\x00\x05\x30\x39\x01\xea" cmdtest_pt5_on = "w\$tsCanId\x07\x02\x87\x00\x05\x30\x39\x01\xeb" ;SDcard - cancel an active readback cmdsdcard_cancel_readback = "w\$tsCanId\x11\x00\x00\x00\x01\x06" ;Engine shutdown and reset cmdengineshutdown = "w\$tsCanId\x07\x02\xab\x00\x02\x85\x03" cmdenginereset = "w\$tsCanId\x07\x02\xab\x00\x02\xc4\x31" cmdnull = "" [UserDefined] dialog = engine_control, "", yAxis commandButton = "Stop engine", cmdengineshutdown field = "This disables injectors and coils, to stop the engine." commandButton = "Reset ECU", cmdenginereset, {(rpm == 0) || (rpm >= 65000)} field = "This resets the ECU, similar to a 'Power Cycle'." dialog = etctest_l, "", yAxis field = "Throttle testing can be used with the engine running or stationary" field = "but will be limited to 5% max if engine is running." field = "Position% (0-100)", etc_testpos field = "Set the position before enabling testing" dialog = etctest_r, "", yAxis commandButton = "Enable test", cmdetcon, {(status8 & 0x40) == 0} commandButton = "Stop testing", cmdetcoff, {status8 & 0x40}, clickOnCloseIfEnabled dialog = etctest_top, "", xAxis panel = etctest_l panel = etctest_r dialog = etctest_bot, "", xAxis gauge = throttletargGauge gauge = throttleGauge gauge = appGauge dialog = etctest, "Throttle test", yAxis topicHelp = "file://$getProjectsDirPath()/docs/Megasquirt3_TunerStudio_MS_Lite_Reference-1.5.pdf#throttletest" panel = etctest_top panel = etctest_bot dialog = etc_set, "" field = "!See help/manual for critical safety notes." field = "Enable / mode", etc_opt_on field = "Base CAN identifier", etc_canbase, {etc_opt_on} field = "Throttle target:" field = "Minimum value", etc_tp_min, {etc_opt_on} field = "Maximum value", etc_tp_max, {etc_opt_on} field = "Throttle actual position:" field = "Minimum value", etc_tp_act_min, {etc_opt_on} field = "Maximum value", etc_tp_act_max, {etc_opt_on} field = "Pedal position:" field = "Minimum value", etc_app_min, {etc_opt_on} field = "Maximum value", etc_app_max, {etc_opt_on} field = "Idle control:" field = "Max idle addition", etc_idlescale, {etc_opt_on} field = "Additional throttles" field = "Throttle 2,3,4 follow throttle 1", etc_opt_follow dialog = etc, "Electronic Throttle Control", xAxis topicHelp = "file://$getProjectsDirPath()/docs/Megasquirt3_TunerStudio_MS_Lite_Reference-1.5.pdf#throttlecont" panel = etc_set, West panel = etc_Tbl, East, {etc_opt_on == 3} dialog = pitlimiter, "", yAxis topicHelp = "file://$getProjectsDirPath()/docs/Megasquirt3_TunerStudio_MS_Lite_Reference-1.5.pdf#pitlim" field = "Pit Limiter Enable", pitlim_opt_on field = "Input", pitlim_enin, pitlim_opt_on field = "Mode", pitlim_opt_mode, { pitlim_opt_on && pitlim_enin } field = "Use VSS or RPM target", pitlim_opt_vssrpm, { pitlim_opt_on && pitlim_enin && (pitlim_opt_mode == 1) } field = "Speed", pitlim_speed, { pitlim_opt_on && pitlim_enin && (pitlim_opt_mode == 0) } field = "Speed control range", pitlim_speed_range, { pitlim_opt_on && pitlim_enin && ((pitlim_opt_mode == 0) || (pitlim_opt_vssrpm == 0)) } field = "RPM control range", pitlim_rpm_range, { pitlim_opt_on && pitlim_enin && (pitlim_opt_mode == 1) && pitlim_opt_vssrpm } slider = "Tracking Sensitivity", pitlim_sensitivity, horizontal, { pitlim_opt_on && pitlim_enin} field = "SPARK RETARD" field = "Spark Retard Mode", pitlim_opt_retard, { pitlim_opt_on && pitlim_enin} field = "Maximum Retard", pitlim_retardmax, { pitlim_opt_on && pitlim_enin&& (pitlim_opt_retard == 1) } field = "SPARK CUT" field = "Enable Spark Cut Limiting", pitlim_opt_spkcut, { pitlim_opt_on && pitlim_enin} field = "FUEL CUT" field = "Enable Fuel Cut Limiting", pitlim_opt_fuelcut, { pitlim_opt_on && pitlim_enin} field = "Progressive Fuel Cut", pitlim_opt_fuelprog, { pitlim_opt_on && pitlim_enin && pitlim_opt_fuelcut } dialog = iobox1, "IO box 1", yAxis field = "IO-Box #1 Enable", iobox_opta1 field = "VSS setting", iobox_optb1vss, {iobox_opta1} field = "Configuration", iobox_opta1adv, {iobox_opta1} field = "Base CAN identifier", iobox_id1, {iobox_opta1 && iobox_opta1adv } field = "Base CANIN", iobox_opta1canin, {iobox_opta1 && iobox_opta1adv } field = "Base CANOUT", iobox_opta1canout , {iobox_opta1 && iobox_opta1adv } field = "Base CANADC", iobox_opta1canadc, {iobox_opta1 && iobox_opta1adv } field = "Tach transmit rate", iobox_optb1tachrate, {iobox_opta1 && iobox_opta1adv } field = "Inputs transmit rate", iobox_optb1inrate, {iobox_opta1 && iobox_opta1adv } field = "Outputs transmit rate", iobox_optb1outrate, {iobox_opta1 && iobox_opta1adv } dialog = iobox2, "IO box 2", yAxis field = "IO-Box #2 Enable", iobox_opta2 field = "VSS setting", iobox_optb2vss, {iobox_opta2} field = "Configuration", iobox_opta2adv, {iobox_opta2} field = "Base CAN identifier", iobox_id2, {iobox_opta2 && iobox_opta2adv } field = "Base CANIN", iobox_opta2canin, {iobox_opta2 && iobox_opta2adv } field = "Base CANOUT", iobox_opta2canout , {iobox_opta2 && iobox_opta2adv } field = "Base CANADC", iobox_opta2canadc, {iobox_opta2 && iobox_opta2adv } field = "Tach transmit rate", iobox_optb2tachrate, {iobox_opta2 && iobox_opta2adv } field = "Inputs transmit rate", iobox_optb2inrate, {iobox_opta2 && iobox_opta2adv } field = "Outputs transmit rate", iobox_optb2outrate, {iobox_opta2 && iobox_opta2adv } dialog = iobox3, "IO box 3", yAxis field = "IO-Box #3 Enable", iobox_opta3 field = "VSS setting", iobox_optb3vss, {iobox_opta3} field = "Configuration", iobox_opta3adv, {iobox_opta3} field = "Base CAN identifier", iobox_id3, {iobox_opta3 && iobox_opta3adv } field = "Base CANIN", iobox_opta3canin, {iobox_opta3 && iobox_opta3adv } field = "Base CANOUT", iobox_opta3canout , {iobox_opta3 && iobox_opta3adv } field = "Base CANADC", iobox_opta3canadc, {iobox_opta3 && iobox_opta3adv } field = "Tach transmit rate", iobox_optb3tachrate, {iobox_opta3 && iobox_opta3adv } field = "Inputs transmit rate", iobox_optb3inrate, {iobox_opta3 && iobox_opta3adv } field = "Outputs transmit rate", iobox_optb3outrate, {iobox_opta3 && iobox_opta3adv } dialog = iobox4, "IO box 4", yAxis field = "IO-Box #4 Enable", iobox_opta4 field = "VSS setting", iobox_optb4vss, {iobox_opta4} field = "Configuration", iobox_opta4adv, {iobox_opta4} field = "Base CAN identifier", iobox_id4, {iobox_opta4 && iobox_opta4adv } field = "Base CANIN", iobox_opta4canin, {iobox_opta4 && iobox_opta4adv } field = "Base CANOUT", iobox_opta4canout , {iobox_opta4 && iobox_opta4adv } field = "Base CANADC", iobox_opta4canadc, {iobox_opta4 && iobox_opta4adv } field = "Tach transmit rate", iobox_optb4tachrate, {iobox_opta4 && iobox_opta4adv } field = "Inputs transmit rate", iobox_optb4inrate, {iobox_opta4 && iobox_opta4adv } field = "Outputs transmit rate", iobox_optb4outrate, {iobox_opta4 && iobox_opta4adv } dialog = ioboxtop, "", xAxis panel = iobox1, West panel = iobox2, East dialog = ioboxbot, "", xAxis panel = iobox3, West panel = iobox4, East, {0} dialog = iobox, "", yAxis topicHelp = "file://$getProjectsDirPath()/docs/Megasquirt3_TunerStudio_MS_Lite_Reference-1.5.pdf#iobox" panel = ioboxtop, North panel = ioboxbot, South dialog = dashbcast, "Dash Broadcasting", yAxis topicHelp = "file://$getProjectsDirPath()/docs/Megasquirt3_TunerStudio_MS_Lite_Reference-1.5.pdf#dashbcast" field = "Enable", dashbcast_opta1 field = "Configuration", dashbcast_opta1adv, {dashbcast_opta1} field = "Base CAN identifier", dashbcast_id1, {dashbcast_opta1 && dashbcast_opta1adv } field = "Outputs transmit rate", dashbcast_opta4outrate, {dashbcast_opta1 && dashbcast_opta1adv } dialog = can_rcv2, "", yAxis field = " Local variable / channel" field = "", can_rcv_var1 field = "", can_rcv_var2 field = "", can_rcv_var3 field = "", can_rcv_var4 field = "", can_rcv_var5 field = "", can_rcv_var6 field = "", can_rcv_var7 field = "", can_rcv_var8 dialog = can_rcv2b, "", yAxis field = " Local variable / channel" field = "", can_rcv_var9 field = "", can_rcv_var10 field = "", can_rcv_var11 field = "", can_rcv_var12 field = "", can_rcv_var13 field = "", can_rcv_var14 field = "", can_rcv_var15 field = "", can_rcv_var16 dialog = can_rcv3, "", yAxis field = " Identifier (dec.)" field = "", can_rcv_id1 field = "", can_rcv_id2 field = "", can_rcv_id3 field = "", can_rcv_id4 field = "", can_rcv_id5 field = "", can_rcv_id6 field = "", can_rcv_id7 field = "", can_rcv_id8 dialog = can_rcv3b, "", yAxis field = " Identifier (dec.)" field = "", can_rcv_id9 field = "", can_rcv_id10 field = "", can_rcv_id11 field = "", can_rcv_id12 field = "", can_rcv_id13 field = "", can_rcv_id14 field = "", can_rcv_id15 field = "", can_rcv_id16 dialog = can_rcv4, "", yAxis field = " Offset" field = "", can_rcv_off1 field = "", can_rcv_off2 field = "", can_rcv_off3 field = "", can_rcv_off4 field = "", can_rcv_off5 field = "", can_rcv_off6 field = "", can_rcv_off7 field = "", can_rcv_off8 dialog = can_rcv4b, "", yAxis field = " Offset" field = "", can_rcv_off9 field = "", can_rcv_off10 field = "", can_rcv_off11 field = "", can_rcv_off12 field = "", can_rcv_off13 field = "", can_rcv_off14 field = "", can_rcv_off15 field = "", can_rcv_off16 dialog = can_rcv5, "", yAxis field = " Size" field = "", can_rcv_size1 field = "", can_rcv_size2 field = "", can_rcv_size3 field = "", can_rcv_size4 field = "", can_rcv_size5 field = "", can_rcv_size6 field = "", can_rcv_size7 field = "", can_rcv_size8 dialog = can_rcv5b, "", yAxis field = " Size" field = "", can_rcv_size9 field = "", can_rcv_size10 field = "", can_rcv_size11 field = "", can_rcv_size12 field = "", can_rcv_size13 field = "", can_rcv_size14 field = "", can_rcv_size15 field = "", can_rcv_size16 dialog = can_rcv6, "", yAxis field = " Multiply" field = "", can_rcv_mult1 field = "", can_rcv_mult2 field = "", can_rcv_mult3 field = "", can_rcv_mult4 field = "", can_rcv_mult5 field = "", can_rcv_mult6 field = "", can_rcv_mult7 field = "", can_rcv_mult8 dialog = can_rcv6b, "", yAxis field = " Multiply" field = "", can_rcv_mult9 field = "", can_rcv_mult10 field = "", can_rcv_mult11 field = "", can_rcv_mult12 field = "", can_rcv_mult13 field = "", can_rcv_mult14 field = "", can_rcv_mult15 field = "", can_rcv_mult16 dialog = can_rcv7, "", yAxis field = " Divide" field = "", can_rcv_div1 field = "", can_rcv_div2 field = "", can_rcv_div3 field = "", can_rcv_div4 field = "", can_rcv_div5 field = "", can_rcv_div6 field = "", can_rcv_div7 field = "", can_rcv_div8 dialog = can_rcv7b, "", yAxis field = " Divide" field = "", can_rcv_div9 field = "", can_rcv_div10 field = "", can_rcv_div11 field = "", can_rcv_div12 field = "", can_rcv_div13 field = "", can_rcv_div14 field = "", can_rcv_div15 field = "", can_rcv_div16 dialog = can_rcv8, "", yAxis field = " Add" field = "", can_rcv_add1 field = "", can_rcv_add2 field = "", can_rcv_add3 field = "", can_rcv_add4 field = "", can_rcv_add5 field = "", can_rcv_add6 field = "", can_rcv_add7 field = "", can_rcv_add8 dialog = can_rcv8b, "", yAxis field = " Add" field = "", can_rcv_add9 field = "", can_rcv_add10 field = "", can_rcv_add11 field = "", can_rcv_add12 field = "", can_rcv_add13 field = "", can_rcv_add14 field = "", can_rcv_add15 field = "", can_rcv_add16 dialog = can_rcv9, "", yAxis field = "Std/Ext" field = "", can_rcv_size_ext1 field = "", can_rcv_size_ext2 field = "", can_rcv_size_ext3 field = "", can_rcv_size_ext4 field = "", can_rcv_size_ext5 field = "", can_rcv_size_ext6 field = "", can_rcv_size_ext7 field = "", can_rcv_size_ext8 dialog = can_rcv9b, "", yAxis field = "Std/Ext" field = "", can_rcv_size_ext9 field = "", can_rcv_size_ext10 field = "", can_rcv_size_ext11 field = "", can_rcv_size_ext12 field = "", can_rcv_size_ext13 field = "", can_rcv_size_ext14 field = "", can_rcv_size_ext15 field = "", can_rcv_size_ext16 dialog = can_rcv1, "", xAxis panel = can_rcv2 panel = can_rcv9 panel = can_rcv3 panel = can_rcv4 panel = can_rcv5 panel = can_rcv6 panel = can_rcv7 panel = can_rcv8 dialog = can_rcv1b, "", xAxis panel = can_rcv2b panel = can_rcv9b panel = can_rcv3b panel = can_rcv4b panel = can_rcv5b panel = can_rcv6b panel = can_rcv7b panel = can_rcv8b dialog = can_rcv0, "", xAxis field = "Enable receiving CAN data", can_rcv_opt_on field = "Enable sharing CAN data", can_rcv_opt_share field = "" dialog = can_rcv, "CAN receiving", yAxis topicHelp = "file://$getProjectsDirPath()/docs/Megasquirt3_TunerStudio_MS_Lite_Reference-1.5.pdf#canrcv" panel = can_rcv0, North panel = can_rcv1, Center;, {can_rcv_opt_on} ; ungreying does not work panel = can_rcv1b, South;, {can_rcv_opt_on} dialog = can_outpc_bcast_setting, "", yAxis field = "Enable realtime data broadcasting over CAN", can_outpc_gp00_master field = "Base message identifier (decimal)", can_outpc_msg dialog = can_outpc_bcast_1, "", yAxis topicHelp = "file://$getProjectsDirPath()/docs/Megasquirt3_TunerStudio_MS_Lite_Reference-1.5.pdf#canrtbcast" field = "00: Seconds,PW1,PW2,RPM", can_outpc_gp00, { can_outpc_gp00_master } field = "01: Advance,Squirt,Engine,AFRtgt1,2,WBen1,2", can_outpc_gp01, { can_outpc_gp00_master } field = "02: Baro,MAP,MAT,CLT", can_outpc_gp02, { can_outpc_gp00_master } field = "03: TPS,Batt,EGO1,2", can_outpc_gp03, { can_outpc_gp00_master } field = "04: Knock,egocor1,2,aircor", can_outpc_gp04, { can_outpc_gp00_master } field = "05: warmcor,tpsaccel,tpsfuelcut,barocor", can_outpc_gp05, { can_outpc_gp00_master } field = "06: totalcor,ve1,ve2,iacstep", can_outpc_gp06, { can_outpc_gp00_master } field = "07: cold_adv,TPSdot,MAPdot,RPMdot", can_outpc_gp07, { can_outpc_gp00_master } field = "08: MAFload,fuelload,fuelcor,MAF", can_outpc_gp08, { can_outpc_gp00_master } field = "09: egoV1,2,dwell,dwell_trl", can_outpc_gp09, { can_outpc_gp00_master } field = "10: status1,2,3,4,5,6,7", can_outpc_gp10, { can_outpc_gp00_master } field = "11: fuelload2,ignload1,2,airtemp", can_outpc_gp11, { can_outpc_gp00_master } field = "12: wallfuel1,2", can_outpc_gp12, { can_outpc_gp00_master } field = "13: sensors1,2,3,4", can_outpc_gp13, { can_outpc_gp00_master } field = "14: sensors5,6,7,8", can_outpc_gp14, { can_outpc_gp00_master } field = "15: sensors9,10,11,12", can_outpc_gp15, { can_outpc_gp00_master } dialog = can_outpc_bcast_2, "CAN Realtime Data Broadcasting 2", yAxis topicHelp = "file://$getProjectsDirPath()/docs/Megasquirt3_TunerStudio_MS_Lite_Reference-1.5.pdf#canrtbcast" field = "16: sensors13,14,15,16", can_outpc_gp16 field = "17: boost_targ1,2,boostduty1,2,MAFv", can_outpc_gp17 field = "18: PWseq1,2,3,4", can_outpc_gp18 field = "19: PWseq5,6,7,8", can_outpc_gp19 field = "20: PWseq9,10,11,12", can_outpc_gp20 field = "21: PWseq13,14,15,16", can_outpc_gp21 field = "22: EGT1,2,3,4", can_outpc_gp22 field = "23: EGT5,6,7,8", can_outpc_gp23 field = "24: EGT9,10,11,12", can_outpc_gp24 field = "25: EGT13,14,15,16", can_outpc_gp25 field = "26: nitrous:duty1,2,timer,addfuel,retard", can_outpc_gp26 field = "27: CANpwinin1,2,3,4", can_outpc_gp27 field = "28: CLidletarg,tpsadc,EAEload,AFRload", can_outpc_gp28 field = "29: EAEfcor1,2,VSS1dot,VSS2dot", can_outpc_gp29 field = "30: AccelX,Y,Z,streamlvl,waterduty", can_outpc_gp30 field = "31: AFR0,1,2,3,4,5,6,7,8", can_outpc_gp31 dialog = can_outpc_bcast_3, "CAN Realtime Data Broadcasting 3", yAxis topicHelp = "file://$getProjectsDirPath()/docs/Megasquirt3_TunerStudio_MS_Lite_Reference-1.5.pdf#canrtbcast" field = "32: AFR9,10,11,12,13,14,15,16", can_outpc_gp32 field = "33: PWMduty1,2,3,4,5,6,gear,timingerr", can_outpc_gp33 field = "34: EGOv1,2,3,4", can_outpc_gp34 field = "35: EGOv5,6,7,8", can_outpc_gp35 field = "36: EGOv9,10,11,12", can_outpc_gp36 field = "37: EGOv13,14,15,16", can_outpc_gp37 field = "38: EGOcor1,2,3,4", can_outpc_gp38 field = "39: EGOcor5,6,7,8", can_outpc_gp39 field = "40: EGOcor9,10,11,12", can_outpc_gp40 field = "41: EGOcor13,14,15,16", can_outpc_gp41 field = "42: VSS1,2,3,4", can_outpc_gp42 field = "43: synccnt,reason,SD:file#,err,phase,stat,timing_err", can_outpc_gp43 field = "44: VVTang1,2,3,4", can_outpc_gp44 field = "45: VVTtarg1,2,3,4", can_outpc_gp45 field = "46: VVTduty1,2,3,4,injtimingpri,sec", can_outpc_gp46 field = "47: eth%,tpsacc,SS1,2", can_outpc_gp47 dialog = can_outpc_bcast_4, "CAN Realtime Data Broadcasting 4", yAxis topicHelp = "file://$getProjectsDirPath()/docs/Megasquirt3_TunerStudio_MS_Lite_Reference-1.5.pdf#canrtbcast" field = "48: knock_cyl1,2,3,4,5,6,7,8", can_outpc_gp48 field = "49: knock_cyl9,10,11,12,13,14,15,16", can_outpc_gp49 field = "50: MAPacc,totalacc,launch:timer,retard", can_outpc_gp50 field = "51: PORTa,b,eh,k,mj,p,t,cel_err", can_outpc_gp51 field = "52: CANin,CANout,knockretard,fuelflow,cons", can_outpc_gp52 field = "53: Fuel:press1,2,temp1,2", can_outpc_gp53 field = "54: battcurr,CELstatus,FPduty,ALTduty,loadduty,ALTtarg", can_outpc_gp54 field = "55: looptime,fueltempcor,fuelprescor,lttcor", can_outpc_gp55 field = "56: Retards:TC,CEL,FCut,ext", can_outpc_gp56 field = "57: Advance:Base,Idle,Flex.MATretard", can_outpc_gp57 field = "58: TableAdv:1,2,3,4", can_outpc_gp58 field = "59: Revlimretard,ALSadv,ext_advance,deadtime", can_outpc_gp59 field = "60: Launchadv,3stepadv,VSSlaunchretard,celstat2", can_outpc_gp60 field = "61: GPS", can_outpc_gp61 field = "62: GPS", can_outpc_gp62 field = "63: Gen CL duty1,2", can_outpc_gp63 dialog = can_outpc_bcast, "CAN Realtime Data Broadcasting", yAxis topicHelp = "file://$getProjectsDirPath()/docs/Megasquirt3_TunerStudio_MS_Lite_Reference-1.5.pdf#canrtbcast" panel = can_outpc_bcast_setting, North panel = can_outpc_bcast_1, South dialog = outmsg1_off, "", yAxis field = "Variable Offset" field = "01", outmsg1_offset01 field = "02", outmsg1_offset02 field = "03", outmsg1_offset03 field = "04", outmsg1_offset04 field = "05", outmsg1_offset05 field = "06", outmsg1_offset06 field = "07", outmsg1_offset07 field = "08", outmsg1_offset08 field = "09", outmsg1_offset09 field = "10", outmsg1_offset10 field = "11", outmsg1_offset11 field = "12", outmsg1_offset12 field = "13", outmsg1_offset13 field = "14", outmsg1_offset14 field = "15", outmsg1_offset15 field = "16", outmsg1_offset16 dialog = outmsg1_size, "", yAxis field = " Size" field = "", outmsg1_size01 field = "", outmsg1_size02 field = "", outmsg1_size03 field = "", outmsg1_size04 field = "", outmsg1_size05 field = "", outmsg1_size06 field = "", outmsg1_size07 field = "", outmsg1_size08 field = "", outmsg1_size09 field = "", outmsg1_size10 field = "", outmsg1_size11 field = "", outmsg1_size12 field = "", outmsg1_size13 field = "", outmsg1_size14 field = "", outmsg1_size15 field = "", outmsg1_size16 dialog = outmsg1, "Outmsg 1", xAxis topicHelp = "file://$getProjectsDirPath()/docs/Megasquirt3_TunerStudio_MS_Lite_Reference-1.5.pdf#outmsg" panel = outmsg1_off panel = outmsg1_size dialog = outmsg2_off, "", yAxis field = "Variable Offset" field = "01", outmsg2_offset01 field = "02", outmsg2_offset02 field = "03", outmsg2_offset03 field = "04", outmsg2_offset04 field = "05", outmsg2_offset05 field = "06", outmsg2_offset06 field = "07", outmsg2_offset07 field = "08", outmsg2_offset08 field = "09", outmsg2_offset09 field = "10", outmsg2_offset10 field = "11", outmsg2_offset11 field = "12", outmsg2_offset12 field = "13", outmsg2_offset13 field = "14", outmsg2_offset14 field = "15", outmsg2_offset15 field = "16", outmsg2_offset16 dialog = outmsg2_size, "", yAxis field = " Size" field = "", outmsg2_size01 field = "", outmsg2_size02 field = "", outmsg2_size03 field = "", outmsg2_size04 field = "", outmsg2_size05 field = "", outmsg2_size06 field = "", outmsg2_size07 field = "", outmsg2_size08 field = "", outmsg2_size09 field = "", outmsg2_size10 field = "", outmsg2_size11 field = "", outmsg2_size12 field = "", outmsg2_size13 field = "", outmsg2_size14 field = "", outmsg2_size15 field = "", outmsg2_size16 dialog = outmsg2, "Outmsg 2", xAxis topicHelp = "file://$getProjectsDirPath()/docs/Megasquirt3_TunerStudio_MS_Lite_Reference-1.5.pdf#outmsg" panel = outmsg2_off panel = outmsg2_size dialog = outmsg3_off, "", yAxis field = "Variable Offset" field = "01", outmsg3_offset01 field = "02", outmsg3_offset02 field = "03", outmsg3_offset03 field = "04", outmsg3_offset04 field = "05", outmsg3_offset05 field = "06", outmsg3_offset06 field = "07", outmsg3_offset07 field = "08", outmsg3_offset08 field = "09", outmsg3_offset09 field = "10", outmsg3_offset10 field = "11", outmsg3_offset11 field = "12", outmsg3_offset12 field = "13", outmsg3_offset13 field = "14", outmsg3_offset14 field = "15", outmsg3_offset15 field = "16", outmsg3_offset16 dialog = outmsg3_size, "", yAxis field = " Size" field = "", outmsg3_size01 field = "", outmsg3_size02 field = "", outmsg3_size03 field = "", outmsg3_size04 field = "", outmsg3_size05 field = "", outmsg3_size06 field = "", outmsg3_size07 field = "", outmsg3_size08 field = "", outmsg3_size09 field = "", outmsg3_size10 field = "", outmsg3_size11 field = "", outmsg3_size12 field = "", outmsg3_size13 field = "", outmsg3_size14 field = "", outmsg3_size15 field = "", outmsg3_size16 dialog = outmsg3, "Outmsg 3", xAxis topicHelp = "file://$getProjectsDirPath()/docs/Megasquirt3_TunerStudio_MS_Lite_Reference-1.5.pdf#outmsg" panel = outmsg3_off panel = outmsg3_size dialog = outmsg4_off, "", yAxis field = "Variable Offset" field = "01", outmsg4_offset01 field = "02", outmsg4_offset02 field = "03", outmsg4_offset03 field = "04", outmsg4_offset04 field = "05", outmsg4_offset05 field = "06", outmsg4_offset06 field = "07", outmsg4_offset07 field = "08", outmsg4_offset08 field = "09", outmsg4_offset09 field = "10", outmsg4_offset10 field = "11", outmsg4_offset11 field = "12", outmsg4_offset12 field = "13", outmsg4_offset13 field = "14", outmsg4_offset14 field = "15", outmsg4_offset15 field = "16", outmsg4_offset16 dialog = outmsg4_size, "", yAxis field = " Size" field = "", outmsg4_size01 field = "", outmsg4_size02 field = "", outmsg4_size03 field = "", outmsg4_size04 field = "", outmsg4_size05 field = "", outmsg4_size06 field = "", outmsg4_size07 field = "", outmsg4_size08 field = "", outmsg4_size09 field = "", outmsg4_size10 field = "", outmsg4_size11 field = "", outmsg4_size12 field = "", outmsg4_size13 field = "", outmsg4_size14 field = "", outmsg4_size15 field = "", outmsg4_size16 dialog = outmsg4, "Outmsg 4", xAxis topicHelp = "file://$getProjectsDirPath()/docs/Megasquirt3_TunerStudio_MS_Lite_Reference-1.5.pdf#outmsg" panel = outmsg4_off panel = outmsg4_size dialog = fuelcalc_gauges1, "", xAxis gauge = veGauge1 gauge = veGauge2 gauge = reqfuelGauge gauge = deadtime1Gauge gauge = stoichGauge dialog = fuelcalc_gauges2, "", xAxis gauge = warmupgauge gauge = barocorgauge gauge = gammaairGauge gauge = fuelcorr gauge = afr1targetGauge dialog = fuelcalc_gauges3, "", xAxis gauge = accelEnrichGauge gauge = accEnrichMSGauge gauge = EAEGauge1 gauge = EAEGauge2 gauge = fuelloadGauge gauge = nitrous_addfuel dialog = fuelcalc_gauges3, "", xAxis gauge = fueltemp_cor gauge = fuelpress_cor gauge = ltt_cor gauge = als_addfuel dialog = fuelcalc_gauges4, "", xAxis gauge = mapGauge gauge = egoCorrGauge1 gauge = pulseWidth1Gauge gauge = pulseWidth2Gauge ; gauge = pulseWidth3Gauge ; gauge = pulseWidth4Gauge dialog = fuelcalc_gauges5, "", xAxis gauge = dutyCycle1Gauge gauge = dutyCycle2Gauge gauge = gammaEnrichGauge dialog = fuelcalc_gauges6, "" field = "For more information on fuel calculations, see the Setting Up Manual." dialog = fuelcalcs, "Fuel Calculations Summary", yAxis topicHelp = "file://$getProjectsDirPath()/docs/Megasquirt3_TunerStudio_MS_Lite_Reference-1.5.pdf#fuelsum" panel = fuelcalc_gauges1 panel = fuelcalc_gauges2 panel = fuelcalc_gauges3 panel = fuelcalc_gauges4 panel = fuelcalc_gauges5 panel = fuelcalc_gauges6 dialog = sparkcalc_gauges1, "", xAxis gauge = adv1Gauge gauge = adv2Gauge gauge = adv3Gauge gauge = adv4Gauge gauge = base_advanceGauge dialog = sparkcalc_gauges2, "", xAxis gauge = idle_cor_advanceGauge gauge = coldAdvGauge gauge = mat_retardGauge gauge = flex_advanceGauge dialog = sparkcalc_gauges3, "", xAxis gauge = nitrous_retard gauge = revlim_retardGauge gauge = ext_advanceGauge gauge = knockGauge dialog = sparkcalc_gauges4, "", xAxis gauge = tc_retardGauge gauge = cel_retardGauge gauge = fc_retardGauge gauge = als_timingGauge dialog = sparkcalc_gauges5, "", xAxis gauge = launch_timingGauge gauge = step3_timingGauge gauge = launchvss_retardGauge gauge = advdegGauge dialog = sparkcalcs, "Spark Calculations Summary", yAxis topicHelp = "file://$getProjectsDirPath()/docs/Megasquirt3_TunerStudio_MS_Lite_Reference-1.5.pdf#sparksum" panel = sparkcalc_gauges1 panel = sparkcalc_gauges2 panel = sparkcalc_gauges3 panel = sparkcalc_gauges4 panel = sparkcalc_gauges5 dialog = buts_injspk_label, "", yAxis field = "Enabled -->>" field = "Disabled ->>" dialog = buts_injspk1, "", yAxis commandButton = "1", cmdinjspk1, {(status8 & 0x03) && ((status5 & 1) == 0)} commandButton = "1", cmdinjspk1, {(status8 & 0x03) && (status5 & 1)} dialog = buts_injspk2, "", yAxis commandButton = "2", cmdinjspk2, {(status8 & 0x03) && ((status5 & 2) == 0)} commandButton = "2", cmdinjspk2, {(status8 & 0x03) && (status5 & 2)} dialog = buts_injspk3, "", yAxis commandButton = "3", cmdinjspk3, {(status8 & 0x03) && ((status5 & 4) == 0)} commandButton = "3", cmdinjspk3, {(status8 & 0x03) && (status5 & 4)} dialog = buts_injspk4, "", yAxis commandButton = "4", cmdinjspk4, {(status8 & 0x03) && ((status5 & 8) == 0)} commandButton = "4", cmdinjspk4, {(status8 & 0x03) && (status5 & 8)} dialog = buts_injspk5, "", yAxis commandButton = "5", cmdinjspk5, {(status8 & 0x03) && ((status5 & 16) == 0)} commandButton = "5", cmdinjspk5, {(status8 & 0x03) && (status5 & 16)} dialog = buts_injspk6, "", yAxis commandButton = "6", cmdinjspk6, {(status8 & 0x03) && ((status5 & 32) == 0)} commandButton = "6", cmdinjspk6, {(status8 & 0x03) && (status5 & 32)} dialog = buts_injspk7, "", yAxis commandButton = "7", cmdinjspk7, {(status8 & 0x03) && ((status5 & 64) == 0)} commandButton = "7", cmdinjspk7, {(status8 & 0x03) && (status5 & 64)} dialog = buts_injspk8, "", yAxis commandButton = "8", cmdinjspk8, {(status8 & 0x03) && ((status5 & 128) == 0)} commandButton = "8", cmdinjspk8, {(status8 & 0x03) && (status5 & 128)} dialog = buts_injspk9, "", yAxis commandButton = "9", cmdinjspk9, {(status8 & 0x03) && ((status5 & 0x100) == 0)} commandButton = "9", cmdinjspk9, {(status8 & 0x03) && (status5 & 0x100)} dialog = buts_injspk10, "", yAxis commandButton = "10", cmdinjspk10, {(status8 & 0x03) && ((status5 & 0x200) == 0)} commandButton = "10", cmdinjspk10, {(status8 & 0x03) && (status5 & 0x200)} dialog = buts_injspk11, "", yAxis commandButton = "11", cmdinjspk11, {(status8 & 0x03) && ((status5 & 0x400) == 0)} commandButton = "11", cmdinjspk11, {(status8 & 0x03) && (status5 & 0x400)} dialog = buts_injspk12, "", yAxis commandButton = "12", cmdinjspk12, {(status8 & 0x03) && ((status5 & 0x800) == 0)} commandButton = "12", cmdinjspk12, {(status8 & 0x03) && (status5 & 0x800)} dialog = buts_injspk13, "", yAxis commandButton = "13", cmdinjspk13, {(status8 & 0x03) && ((status5 & 0x1000) == 0)} commandButton = "13", cmdinjspk13, {(status8 & 0x03) && (status5 & 0x1000)} dialog = buts_injspk14, "", yAxis commandButton = "14", cmdinjspk14, {(status8 & 0x03) && ((status5 & 0x2000) == 0)} commandButton = "14", cmdinjspk14, {(status8 & 0x03) && (status5 & 0x2000)} dialog = buts_injspk15, "", yAxis commandButton = "15", cmdinjspk15, {(status8 & 0x03) && ((status5 & 0x4000) == 0)} commandButton = "15", cmdinjspk15, {(status8 & 0x03) && (status5 & 0x4000)} dialog = buts_injspk16, "", yAxis commandButton = "16", cmdinjspk16, {(status8 & 0x03) && ((status5 & 0x8000) == 0)} commandButton = "16", cmdinjspk16, {(status8 & 0x03) && (status5 & 0x8000)} dialog = injspkonoffmaster, "", xAxis commandButton = "Off", cmdskipinjoff, {status8 & 0x03}, clickOnCloseIfEnabled commandButton = "Injectors", cmdskipinjon, {(status8 & 0x03) == 0} commandButton = "Coils", cmdskipspkon, {(status8 & 0x03) == 0} dialog = injspkonoffchans, "Outputs Per cylinder", xAxis panel = buts_injspk_label panel = buts_injspk1 panel = buts_injspk2 panel = buts_injspk3 panel = buts_injspk4 panel = buts_injspk5 panel = buts_injspk6 panel = buts_injspk7 panel = buts_injspk8 panel = buts_injspk9 panel = buts_injspk10 dialog = injspkonoffchans2, "Outputs Per cylinder", xAxis panel = buts_injspk_label panel = buts_injspk9 panel = buts_injspk10 panel = buts_injspk11 panel = buts_injspk12 dialog = injspkonofftype, "", yAxis displayOnlyField = "Off", dummyfield, {(status8 & 0x03) == 0} displayOnlyField = "Injector disabling test.", dummyfield, {(status8 & 0x03) == 1} displayOnlyField = "Coil disabling test - beware of plug fouling.", dummyfield, {(status8 & 0x03) == 2} field = "Will not run as expected if running:" field = " - semi-sequential fuel" field = " - wasted spark and only a crank wheel" field = " - a simple distributor input." dialog = injspkonoff, "Inj/Spk Disabling Test Mode", yAxis topicHelp = "file://$getProjectsDirPath()/docs/Megasquirt3_TunerStudio_MS_Lite_Reference-1.5.pdf#injspkonoff" panel = injspkonoffmaster, North panel = injspkonofftype, Center panel = injspkonoffchans, South;, {status8 & 0x03} ; <--- this isn't ungreying dialog = fp_safety, "" topicHelp = "file://$getProjectsDirPath()/docs/Megasquirt3_TunerStudio_MS_Lite_Reference-1.5.pdf#fuelsafety" field = "Fuel pressure monitoring must be enabled." field = "Enable Fuel Pressure Safety", fp_opt_safety, {fp_press_in} field = "(Target fuel pressure are set on fuel pressure page.)" displayOnlyField = "Static/Target rail differential pressure", rail_pressure_psig displayOnlyField = "Static/Target rail differential pressure", rail_pressure_kpag field = "Check Above Load", fp_drop_load, {fp_opt_safety && fp_press_in} field = "Check Above RPM", fp_drop_rpm, {fp_opt_safety && fp_press_in} field = "Allowed Pressure Drop", fp_drop_psig, {fp_opt_safety && fp_press_in} field = "Allowed Pressure Drop", fp_drop_kpag, {fp_opt_safety && fp_press_in} field = "Time Allowed At Low Pressure", fp_drop_time, {fp_opt_safety && fp_press_in} field = "See AFR safety for shutdown options" dialog = oilpress_set, "" field = "Oil Pressure Generic Sensor Input", oilpress_in field = "Oil Pressure Warning", oilpress_out, {oilpress_in} displayOnlyField = "Oil pressure Triggers Limp Mode", cel_action2_oil, {cel_opt_on && oilpress_in} field = "Low pressure triggers engine shutdown", oilpress_in_safety, {oilpress_in} field = "Time Allowed At Low Pressure", oilpress_time, {oilpress_in_safety && oilpress_in} field = "Set the zero rpm pressures above zero" field = "to ensure lamp is tested on each start." field = "" field = "" field = "" field = "" dialog = oilpress, "Oil Pressure", xAxis topicHelp = "file://$getProjectsDirPath()/docs/Megasquirt3_TunerStudio_MS_Lite_Reference-1.5.pdf#oil" panel = oilpress_set panel = oil_curve, {oilpress_in} dialog = shiftlight, "Shift Light" topicHelp = "file://$getProjectsDirPath()/docs/Megasquirt3_TunerStudio_MS_Lite_Reference-1.5.pdf#shiftlight" field = "Shift Light Output", shiftlight_opt_pins field = "Bulb test", shiftlight_opt2_test, {shiftlight_opt_pins} field = "Per Gear Limits", shiftlight_opt_gear, {shiftlight_opt_pins} field = "Limit", shiftlight_limit1, {shiftlight_opt_pins && (shiftlight_opt_gear == 0)} field = "1st Gear Limit", shiftlight_limit1, {shiftlight_opt_pins && shiftlight_opt_gear} field = "2nd Gear Limit", shiftlight_limit2, {shiftlight_opt_pins && shiftlight_opt_gear && (gear_no > 1)} field = "3rd Gear Limit", shiftlight_limit3, {shiftlight_opt_pins && shiftlight_opt_gear && (gear_no > 2)} field = "4th Gear Limit", shiftlight_limit4, {shiftlight_opt_pins && shiftlight_opt_gear && (gear_no > 3)} field = "5th Gear Limit", shiftlight_limit5, {shiftlight_opt_pins && shiftlight_opt_gear && (gear_no > 4)} field = "6th Gear Limit", shiftlight_limit6, {shiftlight_opt_pins && shiftlight_opt_gear && (gear_no > 5)} dialog = hpte1, "" field = "This feature requires Incorporate AFR be enabled" field = "High Power Time Enrichment", hpte_opt_on, {loadStoich} field = "Above Load", hpte_load, {hpte_opt_on && loadStoich} field = "Above RPM", hpte_rpm, {hpte_opt_on && loadStoich} dialog = hpte, "High Power Time Enrichment" topicHelp = "file://$getProjectsDirPath()/docs/Megasquirt3_TunerStudio_MS_Lite_Reference-1.5.pdf#hpte" panel = hpte1 panel = hpte_curve, {hpte_opt_on && loadStoich} dialog = MAFtable, "MAF Flow Curve", card panel = MAFtable1, Center, { MAFOption_t == 0 } panel = MAFtable1f, Center, { MAFOption_t == 1 } dialog = alt_load, "" field = "Warn on Voltage Difference >", alternator_diff, {alternator_opt_mode && alternator_lampout} field = "Load Monitor Input", alternator_freq_monin, {alternator_opt_mode && (alternator_opt_mode < 4)} field = "Capture Polarity", alternator_freq_moninv, {alternator_opt_mode && (alternator_opt_mode < 4) && alternator_freq_monin} field = "Warn On Load >", alternator_maxload, {alternator_lampout && ((alternator_opt_mode && alternator_freq_monin) || (alternator_opt_mode == 4) || (alternator_opt_mode == 5))} field = "" field = "" dialog = alt_pids, "" field = "Closed-Loop PID settings" field = "Proportional Gain", alternator_Kp, {alternator_opt_mode == 4} field = "Integral Gain", alternator_Ki, {alternator_opt_mode == 4} field = "Derivative Gain", alternator_Kd, {alternator_opt_mode == 4} slider = "Sensitivity", alternator_sensitivity, horizontal, {alternator_opt_mode == 4} dialog = alt_pidorload, "", card panel = alt_load, Center, {alternator_opt_mode != 4} panel = alt_pids, Center, {alternator_opt_mode == 4} dialog = alt_settings_t, "" field = "Control Mode", alternator_opt_mode field = "Control Interval", alternator_ctl_ms, {alternator_opt_mode} field = "Control Output", alternator_controlout, {alternator_opt_mode} field = "Output Polarity", alternator_control_inv, {alternator_opt_mode} field = "Control Frequency", alternator_freq, {(alternator_opt_mode == 3) || (alternator_opt_mode == 4)} field = "Warning Lamp Output", alternator_lampout, {alternator_opt_mode} dialog = alt_settings_b, "" field = "Current Monitor Input", alternator_freq_currin, {alternator_opt_mode} field = "Capture Polarity", alternator_freq_currinv, {alternator_opt_mode && alternator_freq_currin} field = "Start Delay", alternator_startdelay, {alternator_opt_mode} field = "Ramp Up Time", alternator_ramptime, {alternator_opt_mode > 1} field = "Battery Temperature Input", alternator_tempin, {alternator_opt_mode} field = "Charge Mode Target Voltage", alternator_targv, {(alternator_tempin == 0) && alternator_opt_mode} field = "Charge Time", alternator_chargetime, {alternator_opt_mode > 1} field = "Run Mode Target Voltage", alternator_targvr, {alternator_opt_mode > 1} field = "WOT TPS%", alternator_wot, {alternator_opt_mode > 1} field = "WOT Target Voltage", alternator_wotv, {(alternator_opt_mode > 1) && (alternator_wot < 100)} field = "WOT Timeout", alternator_wottimeout, {(alternator_opt_mode > 1) && (alternator_wot < 100)} field = "Over-Run Target Voltage", alternator_overrv, {alternator_opt_mode > 1} dialog = alt_settings, "" panel = alt_settings_t panel = alt_pidorload panel = alt_settings_b dialog = alt_outcurve, "", card panel = alternator_outperiod, Center, {alternator_opt_mode == 2} panel = alternator_outduty, Center, {alternator_opt_mode == 3} panel = alternator_linearise, Center, {alternator_opt_mode == 4} dialog = alt_curves, "", yAxis panel = alternator_tempcurve, North, {alternator_opt_mode && alternator_tempin} panel = alt_outcurve dialog = alternator, "Alternator Control", border topicHelp = "file://$getProjectsDirPath()/docs/Megasquirt3_TunerStudio_MS_Lite_Reference-1.5.pdf#altctl" panel = alt_settings, West panel = alt_curves, Center dialog = eaecombi1top, "", xAxis panel = EAEBSOCcurve panel = EAEBAWCcurve dialog = eaecombi1bot, "", yAxis liveGraph = eaeGraph, "AE Graph", North graphLine = EAEFuelCorr1 graphLine = afr1 graphLine = TPSdot, "%", -2000, 2000, auto, auto graphLine = MAPdot, "%", -2000, 2000, auto, auto dialog = EAEcombi1, "EAE Sucked/Adhered Coefficients", border panel = eaecombi1top, Center panel = eaecombi1bot, South dialog = ms3_pe_t, "" field = "Do not try to enable an output port that is already in use for another function." dialog = ms3_port_edit_wrap1, "", yAxis panel = ms3_port_edit1, North panel = ms3_pe_t dialog = ms3_port_edit_wrap2, "", yAxis panel = ms3_port_edit2, North panel = ms3_pe_t dialog = fuelpump_set, "" field = "Fuel Pump Mode", fp_opt_mode field = "Control Interval", fp_ctl_ms field = "Fuel Pump Output", fp_out1, {fp_opt_mode} field = "Output Frequency", fp_freq, {fp_opt_mode} field = "Fuel Pump Output Polarity", fp_opt_inv, {fp_opt_mode} field = "Pressure Regulation/Correction", fp_opt_reg, {fp_opt_mode == 0} field = "'Fixed' automatically adjusts fuel PW." field = "Static/Target Rail Differential Pressure", rail_pressure_psig field = "Static/Target Rail Differential Pressure", rail_pressure_kpag field = "Priming Duty", fp_prime_duty, {fp_opt_mode} field = "Off Duty", fp_off_duty, {fp_opt_mode} field = "Minimum Duty", fp_min_duty, {fp_opt_mode} field = "Maximum Duty", fp_max_duty, {fp_opt_mode} field = "Pressure Sensor Input (kPa)", fp_press_in field = "Sensor Type", fp_press_type, {fp_press_in} field = "Temperature Sensor Input", fueltemp1 field = "Temperature Correction", fueltemp1_corr, {fueltemp1} field = "Closed-Loop PID settings" field = "Proportional Gain", fp_Kp, {fp_opt_mode == 2} field = "Integral Gain", fp_Ki, {fp_opt_mode == 2} field = "Derivative Gain", fp_Kd, {fp_opt_mode == 2} dialog = fuelpump, "Fuel Pump and Pressure Control", border topicHelp = "file://$getProjectsDirPath()/docs/Megasquirt3_TunerStudio_MS_Lite_Reference-1.5.pdf#fuelpump" panel = fuelpump_set, West panel = fp_dutyTbl, Center, {fp_opt_mode == 1} dialog = eng_state_l, "Settings" field = "Use VSS?", engine_state_flags_use_vss field = "VSS Threshold", engine_state_vss_thresh, { engine_state_flags_use_vss } ; field = "Fast acceleration threshold", engine_state_accel_fast_thresh field = "Slow acceleration threshold", engine_state_accel_slow_thresh ; field = "Fast deceleration threshold", engine_state_decel_fast_thresh field = "Slow deceleration threshold", engine_state_decel_slow_thresh field = "Throttle closed TPS threshold", engine_state_tps_closed_thresh field = "Wide-open throttle threshold", engine_state_tps_wot_thresh field = "Overrun MAP threshold", engine_state_overrun_map_thresh dialog = eng_state_r1, "", yAxis gauge = throttleGauge, North gauge = RPMdot, South indicatorPanel = eng_state_ind, 4, { 1 } ; 2 cols, enabled indicator = { engine_state_cruise }, "Cruise", "Cruise", white, black, green, black indicator = { engine_state_accel_slow }, "Accel", "Accel", white, black, green, black ; indicator = { engine_state_accel_fast }, "Fast accel", "Fast Accel", white, black, green, black indicator = { engine_state_decel_slow }, "Decel", "Decel", white, black, green, black ; indicator = { engine_state_decel_fast }, "Fast decel", "Fast Decel", white, black, green, black indicator = { engine_state_wot }, "WOT", "WOT", white, black, green, black indicator = { engine_state_idle }, "Idle", "Idle", white, black, green, black indicator = { status2 & 128}, "CL Idle off", "CL idle on", white, black, green, black indicator = { engine_state_overrun }, "Overrun", "Overrun", white, black, green, black indicator = { status9 & 4}, "Overrun fuel cut", "Overrun fuel cut", white, black, red, black indicator = { status6 & 16}, "Idle VE", "Idle VE", white, black, green, black indicator = { status6 & 32}, "Idle Adv", "Idle Adv", white, black, green, black dialog = eng_state_t, "", xAxis panel = eng_state_l, West panel = eng_state_r1, Center dialog = engine_state_settings, "Engine State Settings", border topicHelp = "file://$getProjectsDirPath()/docs/Megasquirt3_TunerStudio_MS_Lite_Reference-1.5.pdf#engstate" panel = eng_state_t, North panel = eng_state_ind, South dialog = boost_dome_general_settings1, "General Settings" field = "Empty Wastegate Off Boost?", boost_dome_settings1_emptydome_offboost field = "Control method", boost_dome_settings1_mode field = "Min dome target", boost_ctl_dome_min, {boost_ctl_settings_cl} field = "Max dome target", boost_ctl_dome_max, {boost_ctl_settings_cl} field = "Target before closed-loop", boost_dome_settings1_biasen, {boost_ctl_settings_cl} field = "Use min/max or bias range", boost_dome_settings1_range, {boost_ctl_settings_cl} field = "Min/max range", boost_dome_bias_range1, {boost_ctl_settings_cl && (boost_dome_settings1_range == 0)} dialog = boost_dome_test_settings1, "Test Settings" field = "Enable test mode", boost_dome_testopt field = "Dome target pressure", boost_dome_testtarg dialog = boost_dome_io_settings1, "I/O settings" field = "Dome fill output", boost_dome_outputs_fill1 field = "Dome fill output min duty", boost_dome_fill_out_mins1, { boost_dome_settings1_mode } field = "Dome fill output max duty", boost_dome_fill_out_maxs1, { boost_dome_settings1_mode} field = "Dome empty output", boost_dome_outputs_empty1 field = "Dome empty output min duty", boost_dome_empty_out_mins1, { boost_dome_settings1_mode} field = "Dome empty output max duty", boost_dome_empty_out_maxs1, { boost_dome_settings1_mode} field = "Dome fill and empty output frequency", boost_dome_freqs1, { boost_dome_settings1_mode} field = "Dome MAP sensor input", boost_dome_inputs1 field = "Dome pressure dead zone", boost_dome_hyst1, {(!boost_dome_settings1_mode) } dialog = boost_dome_pid_settings1, "PID settings" slider = "Sensitivity", boost_dome_sensitivities1, horizontal, { boost_dome_settings1_mode} field = "Basic or Advanced mode?", boost_dome_settings1_advanced, { boost_dome_settings1_mode } field = "Proportional Gain", boost_dome_Kp1, { boost_dome_settings1_advanced && boost_dome_settings1_mode} field = "Integral Gain", boost_dome_Ki1, { boost_dome_settings1_advanced && boost_dome_settings1_mode} field = "Derivative Gain", boost_dome_Kd1, { boost_dome_settings1_advanced && boost_dome_settings1_mode} dialog = boost_dome_settings_left, "" panel = boost_dome_general_settings1 panel = boost_dome_test_settings1 panel = boost_dome_io_settings1 panel = boost_dome_pid_settings1 dialog = boost_dome_settings1, "Wastegate Dome Pressure Control Settings 1", border topicHelp = "file://$getProjectsDirPath()/docs/Megasquirt3_TunerStudio_MS_Lite_Reference-1.5.pdf#dome" panel = boost_dome_settings_left, West dialog = boostvss_curve, "", card panel = boostvss_duty_curve, Center, { (boost_ctl_settings_on) && (!(boost_ctl_settings_cl || boost_ctl_settings_dome)) && ((boost_vss == 1) || (boost_vss == 2))} panel = boostvss_target_curve, Center, { (boost_ctl_settings_on) && (boost_ctl_settings_cl || boost_ctl_settings_dome) && ((boost_vss == 1) || (boost_vss == 2))} panel = boosttime_duty_curve, Center, { (boost_ctl_settings_on) && (!(boost_ctl_settings_cl || boost_ctl_settings_dome)) && ((boost_vss == 4))} panel = boosttime_target_curve, Center, { (boost_ctl_settings_on) && (boost_ctl_settings_cl || boost_ctl_settings_dome) && ((boost_vss == 4))} dialog = pwmidle_crank_dutyorsteps_curve, "", card panel = pwmidle_crank_dutyorsteps_dutycurve, Center, {(IdleCtl == 2) || (IdleCtl == 4)} panel = pwmidle_crank_dutyorsteps_stepscurve, Center, {IdleCtl == 3} dialog = pwmidle_cl_initialvalues, "", card panel = pwmidle_cl_initialvalues_dty, Center, { pwmidle_cl_opts_initvaluetable && ((IdleCtl == 2) || (IdleCtl == 4))} panel = pwmidle_cl_initialvalues_stps, Center, { pwmidle_cl_opts_initvaluetable && (IdleCtl == 3) } dialog = idlebins, "", card panel = iacBins, Center, { IdleCtl == 3 } panel = ipwBins, Center, { (IdleCtl == 2) || (IdleCtl == 4) } dialog = tcslip_set, "", yAxis field = "0-5V knob Input", tc_knob dialog = tcslip_menu, "Traction Control - External Slip% Input", yAxis topicHelp = "file://$getProjectsDirPath()/docs/Megasquirt3_TunerStudio_MS_Lite_Reference-1.5.pdf#tractionslip" panel = tc_slip_curve panel = tcslip_set dialog = blend1_set, "", yAxis field = "X Axis Parameter", blend_opt1 field = "%VE2. 0% = Fully VE1. 100% = Fully VE2." dialog = blend1menu, "Blend Curve (1)", yAxis topicHelp = "file://$getProjectsDirPath()/docs/Megasquirt3_TunerStudio_MS_Lite_Reference-1.5.pdf#blend1" panel = blend1_curve panel = blend1_set dialog = blend2_set field = "X Axis Parameter", blend_opt2 field = "%Spk2. 0% = Fully Spk1. 100% = Fully Spk2." dialog = blend2menu, "Blend Curve (2)", yAxis topicHelp = "file://$getProjectsDirPath()/docs/Megasquirt3_TunerStudio_MS_Lite_Reference-1.5.pdf#blend2" panel = blend2_curve panel = blend2_set dialog = blend3_set field = "X Axis Parameter", blend_opt3 field = "%VE3/4. 0% = Fully VE1/2. 100% = Fully VE3/4." dialog = blend3menu, "Blend Curve (3)", yAxis topicHelp = "file://$getProjectsDirPath()/docs/Megasquirt3_TunerStudio_MS_Lite_Reference-1.5.pdf#blend3" panel = blend3_curve panel = blend3_set dialog = blend4_set field = "X Axis Parameter", blend_opt4 field = "%Spk3/4. 0% = Fully Spk1/2. 100% = Fully Spk3/4." field = "Delay option", slew_opts_blend4 field = "Delay factor", blend4LF, {slew_opts_blend4 > 0 } dialog = blend4menu, "Blend Curve (4)", yAxis topicHelp = "file://$getProjectsDirPath()/docs/Megasquirt3_TunerStudio_MS_Lite_Reference-1.5.pdf#blend4" panel = blend4_curve panel = blend4_set dialog = blend5_set field = "X Axis Parameter", blend_opt5 field = "%AFR2. 0% = Fully AFR1. 100% = Fully AFR2." dialog = blend5menu, "Blend Curve (5)", yAxis topicHelp = "file://$getProjectsDirPath()/docs/Megasquirt3_TunerStudio_MS_Lite_Reference-1.5.pdf#blend5" panel = blend5_curve panel = blend5_set dialog = blend6_set field = "X Axis Parameter", blend_opt6 field = "%Boost2. 0% = Fully Boost1. 100% = Fully Boost2." dialog = blend6menu, "Blend Curve (6)", yAxis topicHelp = "file://$getProjectsDirPath()/docs/Megasquirt3_TunerStudio_MS_Lite_Reference-1.5.pdf#blend6" panel = blend6_curve panel = blend6_set dialog = blend7_set field = "X Axis Parameter", blend_opt7 field = "%Crank%2. 0% = Fully Cranking curve1. 100% = Fully Cranking curve2." dialog = blend7menu, "Blend Curve (7)", yAxis topicHelp = "file://$getProjectsDirPath()/docs/Megasquirt3_TunerStudio_MS_Lite_Reference-1.5.pdf#blend7" panel = blend7_curve panel = blend7_set dialog = blend8_set field = "Flex blend%. 0% = Fully Tables1. 100% = Fully Tables2." dialog = blend8menu, "Blend Curve (8)", yAxis topicHelp = "file://$getProjectsDirPath()/docs/Megasquirt3_TunerStudio_MS_Lite_Reference-1.5.pdf#blend7" panel = blend8_curve panel = blend8_set dialog = airden_words field = "This curve is the whole air density correction exposed in full." field = "It is based on the 'ideal gas law' and typically varies between 125% cold to 75% hot." dialog = manifoldTempCorr2, "MAT Air Density Table" topicHelp = "file://$getProjectsDirPath()/docs/Megasquirt3_TunerStudio_MS_Lite_Reference-1.5.pdf#matairden" panel = airden_words panel = airdenCorr dialog = checkengine_l, "Sensor Validation" field = "Sensor Checking", cel_opt_on field = "Light Output", cel_port, {cel_opt_on} field = "CEL Solid/Flash Codes", cel_opt_flash, {cel_opt_on} field = "Light When Not Running", cel_opt_when, {cel_opt_on && cel_port} field = "Ignore Fluctuations For First", cel_runtime, {cel_opt_on} field = "#MAP Sensor Check", cel_opt2_map, {cel_opt_on} field = "Minimum ADC", map_minadc, {cel_opt_on} field = "Maximum ADC", map_maxadc, {cel_opt_on} field = "Minimum Fluctuation", map_var_lower, {cel_opt_on} field = "Maximum Fluctuation", map_var_upper, {cel_opt_on} field = "#MAT Sensor Check", cel_opt2_mat, {cel_opt_on} field = "Minimum ADC", mat_minadc, {cel_opt_on} field = "Maximum ADC", mat_maxadc, {cel_opt_on} field = "Maximum Fluctuation", mat_var_upper, {cel_opt_on} field = "#CLT Sensor Check", cel_opt2_clt, {cel_opt_on} field = "Minimum ADC", clt_minadc, {cel_opt_on} field = "Maximum ADC", clt_maxadc, {cel_opt_on} field = "Maximum Fluctuation", clt_var_upper, {cel_opt_on} field = "#TPS Check", cel_opt2_tps, {cel_opt_on} field = "Minimum ADC", tps_minadc, {cel_opt_on} field = "Maximum ADC", tps_maxadc, {cel_opt_on} field = "Maximum Fluctuation", tps_var_upper, {cel_opt_on} dialog = checkengine_r, "" field = "#Battery Check", cel_opt2_batt, {cel_opt_on} field = "Minimum Voltage", batt_minv, {cel_opt_on} field = "Maximum Voltage", batt_maxv, {cel_opt_on} field = "Maximum Fluctuation", batt_var_upper, {cel_opt_on} field = "#EGO1 Sensor Check", cel_opt2_afr0, {cel_opt_on} field = "Minimum AFR", afr_min, {cel_opt_on} field = "Maximum AFR", afr_max, {cel_opt_on} field = "Minimum Fluctuation", afr_var_lower, {cel_opt_on} field = "Maximum Fluctuation", afr_var_upper, {cel_opt_on} field = "#Sync-Loss Check", cel_opt2_sync, {cel_opt_on} field = "No. Sync Losses Allowed", cel_synctol, {cel_opt_on} field = "#EGT Sensor Check", cel_opt2_egt, {cel_opt_on} field = "Minimum EGT", egt_minvalid, {cel_opt_on} field = "Maximum EGT", egt_maxvalid, {cel_opt_on} field = "Minimum Fluctuation", egt_var_lower, {cel_opt_on} field = "Maximum Fluctuation", egt_var_upper, {cel_opt_on} field = "#Flex Sensor Check", cel_opt3_flex, {cel_opt_on && flexFuel} field = "AFR safety, oil pressure set CEL." field = "" field = "status5 Input", cel_opt_stat, {cel_opt_on} field = "status5 Shows", cel_opt_adc, {cel_opt_on && cel_opt_stat} dialog = limpmode, "Limp Mode" topicHelp = "file://$getProjectsDirPath()/docs/Megasquirt3_TunerStudio_MS_Lite_Reference-1.5.pdf#limp" field = "MAP Triggers Limp Mode", cel_action1_map, {cel_opt_on && cel_opt2_map} field = "Use Fallback MAP Table", cel_action1_map_an, {cel_opt_on && cel_opt2_map && cel_action1_map} field = "MAT Triggers Limp Mode", cel_action1_mat, {cel_opt_on && cel_opt2_mat} field = "Fallback MAT", cel_mat_default, {cel_opt_on && cel_opt2_mat && cel_action1_mat} field = "CLT Triggers Limp Mode", cel_action1_clt, {cel_opt_on && cel_opt2_clt} field = "Fallback Cold CLT", cel_clt_cold, {cel_opt_on && cel_opt2_clt && cel_action1_clt} field = "Fallback Warmed Up CLT", cel_clt_warm, {cel_opt_on && cel_opt2_clt && cel_action1_clt} field = "Time To Warmup Engine", cel_warmtime, {cel_opt_on && cel_opt2_clt && cel_action1_clt} field = "TPS Triggers Limp Mode", cel_action1_tps, {cel_opt_on && cel_opt2_tps} field = "TPS-accel is disabled in fault conditions" field = "Batt Triggers Limp Mode", cel_action1_batt, {cel_opt_on && cel_opt2_batt} field = "EGO Triggers Limp Mode", cel_action1_ego, {cel_opt_on && cel_opt2_afr0} field = "Flex Triggers Limp Mode", cel_action2_flex, {cel_opt_on && cel_opt3_flex} field = "EGT Triggers Limp Mode", cel_action2_egt, {cel_opt_on && cel_opt2_egt} field = "Oil pressure Triggers Limp Mode", cel_action2_oil, {cel_opt_on && oilpress_in} field = "The following apply in limp mode:" field = "Limp Rev Limit", cel_revlim field = "Limp Boost Limit", cel_overboost field = "Limp Boost Valve Duty", cel_boost_duty field = "Limp Boost Valve2 Duty", cel_boost_duty2 field = "Limp Retard Timing By", cel_retard dialog = checkengine, "Check Engine Light", xAxis topicHelp = "file://$getProjectsDirPath()/docs/Megasquirt3_TunerStudio_MS_Lite_Reference-1.5.pdf#cel" panel = checkengine_l panel = checkengine_r dialog = limitsettings, "Gauge and Settings Limits" topicHelp = "file://$getProjectsDirPath()/docs/Megasquirt3_TunerStudio_MS_Lite_Reference-1.5.pdf#gaugeset" field = "These are the limits for gauges and tuning settings," field = "so that curves and tables are more appropriately scaled." field = "Adjust to suit your engine." field = "They do not directly alter engine behaviour." field = "RPM - Max Display", rpmhigh field = "RPM - Warn level", rpmwarn field = "RPM - Danger level", rpmdang field = "Load/kPa - Max", loadhigh field = "Allow WUE Below 100%", wue_lpg field = "Preferred Speed Units", prefSpeedUnits field = "Preferred Length Units", prefLengthUnits field = "Preferred Fuel Pressure Units", prefFuelPressUnits field = "Air-Cooled Expanded CLT Range", clt_exp ; list of features and what pins they use dialog = iopinlist1, ".", yAxis displayOnlyField = "Main Fuel Outputs", hardware_fuel displayOnlyField = "Injector Out I, Injector Out J", hardware_fuel, {hardware_fuel== 0} displayOnlyField = "Injector Out A, Injector Out B etc.", hardware_fuel, {hardware_fuel} displayOnlyField = "Spark Hardware In Use", hardware_spk displayOnlyField = "Spark Out A, Spark Out B etc.", hardware_spk, {hardware_spk} displayOnlyField = "Cam Input (If Used)", hardware_cam, {!((spk_config_trig2 == 1) && (spk_mode0 == 4))} ; greyed in toothed wheel, single wheel displayOnlyField = "Tertiary Tach Input", spk_mode3_tach3, {spk_mode0 == 47} displayOnlyField = "Programmable On/Off Output: Stepper Out 2", psEnabled[3], {psEnabled[3]} displayOnlyField = "Programmable On/Off Output: Stepper Out 1", psEnabled[4], {psEnabled[4]} displayOnlyField = "Programmable On/Off Output: PWM Out 2", psEnabled[6], {psEnabled[6]} displayOnlyField = "Programmable On/Off Output: High Current Out 3", psEnabled[7], {psEnabled[7]} displayOnlyField = "Programmable On/Off Output: High Current Out 1", psEnabled[8], {psEnabled[8]} displayOnlyField = "Programmable On/Off Output: High Current Out 2", psEnabled[9], {psEnabled[9]} displayOnlyField = "Programmable On/Off Output: PWM Out 3", psEnabled[10], {psEnabled[10]} displayOnlyField = "Programmable On/Off Output: PWM / Idle Out 1", psEnabled[11], {psEnabled[11]} displayOnlyField = "Programmable On/Off Output: Injector Out I", psEnabled[12], {psEnabled[12]} displayOnlyField = "Programmable On/Off Output: Injector Out J", psEnabled[13], {psEnabled[13]} displayOnlyField = "Programmable On/Off Output: Digital Frequency In 2", psEnabled[14], {psEnabled[14]} displayOnlyField = "Programmable On/Off Output: Tach Out", psEnabled[15], {psEnabled[15]} displayOnlyField = "Programmable On/Off Output: Injector Out A", psEnabled[16], {psEnabled[16]} displayOnlyField = "Programmable On/Off Output: Injector Out B", psEnabled[17], {psEnabled[17]} displayOnlyField = "Programmable On/Off Output: Injector Out C", psEnabled[18], {psEnabled[18]} displayOnlyField = "Programmable On/Off Output: Injector Out D", psEnabled[19], {psEnabled[19]} displayOnlyField = "Programmable On/Off Output: Injector Out E", psEnabled[20], {psEnabled[20]} displayOnlyField = "Programmable On/Off Output: Injector Out F", psEnabled[21], {psEnabled[21]} displayOnlyField = "Programmable On/Off Output: Injector Out G", psEnabled[22], {psEnabled[22]} displayOnlyField = "Programmable On/Off Output: Injector Out H", psEnabled[23], {psEnabled[23]} displayOnlyField = "Programmable On/Off Output: Spark Out A", psEnabled[24], {psEnabled[24]} displayOnlyField = "Programmable On/Off Output: Spark Out B", psEnabled[25], {psEnabled[25]} displayOnlyField = "Programmable On/Off Output: Spark Out C", psEnabled[26], {psEnabled[26]} displayOnlyField = "Programmable On/Off Output: Spark Out D", psEnabled[27], {psEnabled[27]} displayOnlyField = "Programmable On/Off Output: Spark Out E", psEnabled[28], {psEnabled[28]} displayOnlyField = "Programmable On/Off Output: Spark Out F", psEnabled[29], {psEnabled[29]} displayOnlyField = "Programmable On/Off Output: Spark Out G", psEnabled[30], {psEnabled[30]} displayOnlyField = "Programmable On/Off Output: Spark Out H", psEnabled[31], {psEnabled[31]} displayOnlyField = "Programmable On/Off Output: Digital In Out 1", psEnabled[32], {psEnabled[32]} displayOnlyField = "Programmable On/Off Output: Digital In Out 2", psEnabled[33], {psEnabled[33]} displayOnlyField = "Programmable On/Off Output: Digital In Out 3", psEnabled[34], {psEnabled[34]} displayOnlyField = "Programmable On/Off Output: Digital In Out 4", psEnabled[35], {psEnabled[35]} displayOnlyField = "Programmable On/Off Output: Digital In Out 5", psEnabled[36], {psEnabled[36]} displayOnlyField = "Programmable On/Off Output: PWM Out 4", psEnabled[37], {psEnabled[37]} displayOnlyField = "Programmable On/Off Output: PWM Out 5", psEnabled[38], {psEnabled[38]} displayOnlyField = "Programmable On/Off Output: Digital Out 1 LED", psEnabled[39], {psEnabled[39]} displayOnlyField = "Programmable On/Off Output: Digital Out 2", psEnabled[40], {psEnabled[40]} displayOnlyField = "Programmable On/Off Output: CANout01", psEnabled_2[0], {psEnabled_2[0]} displayOnlyField = "Programmable On/Off Output: CANout02", psEnabled_2[1], {psEnabled_2[1]} displayOnlyField = "Programmable On/Off Output: CANout03", psEnabled_2[2], {psEnabled_2[2]} displayOnlyField = "Programmable On/Off Output: CANout04", psEnabled_2[3], {psEnabled_2[3]} displayOnlyField = "Programmable On/Off Output: CANout05", psEnabled_2[4], {psEnabled_2[4]} displayOnlyField = "Programmable On/Off Output: CANout06", psEnabled_2[5], {psEnabled_2[5]} displayOnlyField = "Programmable On/Off Output: CANout07", psEnabled_2[6], {psEnabled_2[6]} displayOnlyField = "Programmable On/Off Output: CANout08", psEnabled_2[7], {psEnabled_2[7]} displayOnlyField = "Programmable On/Off Output: CANout09", psEnabled_2[8], {psEnabled_2[8]} displayOnlyField = "Programmable On/Off Output: CANout10", psEnabled_2[9], {psEnabled_2[9]} displayOnlyField = "Programmable On/Off Output: CANout11", psEnabled_2[10], {psEnabled_2[10]} displayOnlyField = "Programmable On/Off Output: CANout12", psEnabled_2[11], {psEnabled_2[11]} displayOnlyField = "Programmable On/Off Output: CANout13", psEnabled_2[12], {psEnabled_2[12]} displayOnlyField = "Programmable On/Off Output: CANout14", psEnabled_2[13], {psEnabled_2[13]} displayOnlyField = "Programmable On/Off Output: CANout15", psEnabled_2[14], {psEnabled_2[14]} displayOnlyField = "Programmable On/Off Output: CANout16", psEnabled_2[15], {psEnabled_2[15]} displayOnlyField = "Programmable On/Off Output: Loop 1", psEnabled_2[16], {psEnabled_2[16]} displayOnlyField = "Programmable On/Off Output: Loop 2", psEnabled_2[17], {psEnabled_2[17]} displayOnlyField = "Programmable On/Off Output: Loop 3", psEnabled_2[18], {psEnabled_2[18]} displayOnlyField = "Programmable On/Off Output: Loop 4", psEnabled_2[19], {psEnabled_2[19]} displayOnlyField = "Programmable On/Off Output: Loop 5", psEnabled_2[20], {psEnabled_2[20]} displayOnlyField = "Programmable On/Off Output: Loop 6", psEnabled_2[21], {psEnabled_2[21]} displayOnlyField = "Programmable On/Off Output: Loop 7", psEnabled_2[22], {psEnabled_2[22]} displayOnlyField = "Programmable On/Off Output: Loop 8", psEnabled_2[23], {psEnabled_2[23]} displayOnlyField = "EGO 1 Port", egoport1 displayOnlyField = "EGO 2 Port", egoport2, {egonum > 1} displayOnlyField = "EGO 3 Port", egoport3, {egonum > 2} displayOnlyField = "EGO 4 Port", egoport4, {egonum > 3} displayOnlyField = "EGO 5 Port", egoport5, {egonum > 4} displayOnlyField = "EGO 6 Port", egoport6, {egonum > 5} displayOnlyField = "EGO 7 Port", egoport7, {egonum > 6} displayOnlyField = "EGO 8 Port", egoport8, {egonum > 7} displayOnlyField = "EGO 9 Port", egoport9, {egonum > 8} displayOnlyField = "EGO 10 Port", egoport10, {egonum > 9} displayOnlyField = "EGO 11 Port", egoport11, {egonum > 10} displayOnlyField = "EGO 12 Port", egoport12, {egonum > 11} displayOnlyField = "Generic Sensor 01 Input", sensor01_source, {sensor01_source} displayOnlyField = "Generic Sensor 02 Input", sensor02_source, {sensor02_source} displayOnlyField = "Generic Sensor 03 Input", sensor03_source, {sensor03_source} displayOnlyField = "Generic Sensor 04 Input", sensor04_source, {sensor04_source} displayOnlyField = "Generic Sensor 05 Input", sensor05_source, {sensor05_source} displayOnlyField = "Generic Sensor 06 Input", sensor06_source, {sensor06_source} displayOnlyField = "Generic Sensor 07 Input", sensor07_source, {sensor07_source} displayOnlyField = "Generic Sensor 08 Input", sensor08_source, {sensor08_source} displayOnlyField = "Generic Sensor 09 Input", sensor09_source, {sensor09_source} displayOnlyField = "Generic Sensor 10 Input", sensor10_source, {sensor10_source} displayOnlyField = "Generic Sensor 11 Input", sensor11_source, {sensor11_source} displayOnlyField = "Generic Sensor 12 Input", sensor12_source, {sensor12_source} displayOnlyField = "Generic Sensor 13 Input", sensor13_source, {sensor13_source} displayOnlyField = "Generic Sensor 14 Input", sensor14_source, {sensor14_source} displayOnlyField = "Generic Sensor 15 Input", sensor15_source, {sensor15_source} displayOnlyField = "Generic Sensor 16 Input", sensor16_source, {sensor16_source} displayOnlyField = "EGT 1 Channel", egt1port, { (egt_num > 0) } displayOnlyField = "EGT 2 Channel", egt2port, { (egt_num > 1) } displayOnlyField = "EGT 3 Channel", egt3port, { (egt_num > 2) } displayOnlyField = "EGT 4 Channel", egt4port, { (egt_num > 3) } displayOnlyField = "EGT 5 Channel", egt5port, { (egt_num > 4) } displayOnlyField = "EGT 6 Channel", egt6port, { (egt_num > 5) } displayOnlyField = "EGT 7 Channel", egt7port, { (egt_num > 6) } displayOnlyField = "EGT 8 Channel", egt8port, { (egt_num > 7) } displayOnlyField = "EGT 9 Channel", egt9port, { (egt_num > 8) } displayOnlyField = "EGT 10 Channel", egt10port, { (egt_num > 9) } displayOnlyField = "EGT 11 Channel", egt11port, { (egt_num > 10) } displayOnlyField = "EGT 12 Channel", egt12port, { (egt_num > 11) } ; displayOnlyField = "EGT 13 Channel", egt13port, { (egt_num > 12) } ; displayOnlyField = "EGT 14 Channel", egt14port, { (egt_num > 13) } ; displayOnlyField = "EGT 15 Channel", egt15port, { (egt_num > 14) } ; displayOnlyField = "EGT 16 Channel", egt16port, { (egt_num > 15) } displayOnlyField = "Knock Input Pin", knkport, { knk_option && !knk_option_an } dialog = iopinlist2, ".", yAxis displayOnlyField = "PWM Idle Output", pwmidle_freq_pin, { (IdleCtl == 1) || (IdleCtl == 2) } displayOnlyField = "PWM Idle 3 Wire Mode", pwmidle_freq_pin3, { (IdleCtl == 2) && pwmidle_freq_pin3 } displayOnlyField = "Fan Control Output", fanctl_settings_pin, { fanctl_settings_on } displayOnlyField = "AC Output", ac_idleup_io_out, { ac_idleup_settings && ac_idleup_io_out } displayOnlyField = "AC Idle-up Input", ac_idleup_io_in, { ac_idleup_settings } displayOnlyField = "Realtime Baro Port", rtbaroport, {baroCorr == 2} displayOnlyField = "MAP Voltage Input", mapport, {mapport_t == 0} displayOnlyField = "MAP Frequency Input", mapport_f, {mapport_t == 1} displayOnlyField = "MAP 2nd Port", map2port, {(mapport_t == 0) && (mapport != 7) && map2port} displayOnlyField = "MAF Voltage Input", MAFOption, {(MAFOption_t == 0)} displayOnlyField = "MAF Frequency Input", MAFOption_f, {(MAFOption_t == 1)} displayOnlyField = "Flex Sensor Port", flexport, { flexFuel > 0 } displayOnlyField = "Flex Temperature Input", fueltemp1, {fueltemp1} displayOnlyField = "Tacho Output", tacho_opt3f, { tacho_opt80 } displayOnlyField = "VVT1 Output", vvt_out1, {vvt_opt1_on} displayOnlyField = "VVT2 Output", vvt_out2, {vvt_opt1_on > 1} displayOnlyField = "VVT3 Output", vvt_out3, {vvt_opt1_on > 2} displayOnlyField = "VVT4 Output", vvt_out4, {vvt_opt1_on > 2} displayOnlyField = "VVT1 Output (complementary)", vvt_softout1, {vvt_opt1_on && (vvt_opt4_decode == 2)} displayOnlyField = "VVT2 Output (complementary)", vvt_softout2, {(vvt_opt1_on > 1) && (vvt_opt4_decode == 2)} displayOnlyField = "VVT3 Output (complementary)", vvt_softout3, {(vvt_opt1_on > 2) && (vvt_opt4_decode == 2)} displayOnlyField = "VVT4 Output (complementary)", vvt_softout4, {(vvt_opt1_on > 2) && (vvt_opt4_decode == 2)} displayOnlyField = "VVT1 Input", vvt_opt3_cam1, {vvt_opt1_on} displayOnlyField = "VVT2 Input", vvt_opt3_cam2, {vvt_opt1_on > 1} displayOnlyField = "VVT3 Input", vvt_opt3_cam3, {vvt_opt1_on > 2} displayOnlyField = "VVT4 Input", vvt_opt3_cam4, {vvt_opt1_on > 2} displayOnlyField = "Fuel Table Switching Input", tsw_pin_f, { f5_0_tsf && (f5_0_tsf_opt == 0) && !(dualfuel_sw_on && dualfuel_sw_fuel)} displayOnlyField = "Spark Table Switching Input", tsw_pin_s, { f5_0_tss && (f5_0_tss_opt == 0) } displayOnlyField = "Req Fuel Switching", tsw_pin_rf, { !(dualfuel_sw_on && dualfuel_sw_rf)} displayOnlyField = "AFR Table Switching", tsw_pin_afr, { !(dualfuel_sw_on && dualfuel_sw_afr)} displayOnlyField = "Stoich Switching", tsw_pin_stoich, { !(dualfuel_sw_on && dualfuel_sw_stoich)} displayOnlyField = "Dual Fuel Input", dualfuel_pin, { dualfuel_sw_on && (dualfuel_opt_mode != 1) } displayOnlyField = "Overboost Switching", tsw_pin_ob, { (OverBoostOption > 0) && (!(dualfuel_sw_on && (dualfuel_opt_mode == 2) && (dualfuel_sw2_ob )))} displayOnlyField = "Boost Table Switching", boost_feats_tsw, {boost_ctl_settings_on} ; displayOnlyField = "Boost Control Output (Mid)", boost_ctl_pins_pwm, {boost_ctl_settings_on && (boost_ctl_pwm < 2)} displayOnlyField = "Boost Control Output (Slow)", boost_ctl_pins, {boost_ctl_settings_on && (boost_ctl_pwm == 2)} ; displayOnlyField = "Boost Control2 Output (Mid)", boost_ctl_pins_pwm2, {boost_ctl_settings_on && boost_ctl_settings_on2 && (boost_ctl_pwm < 2)} displayOnlyField = "Boost Control2 Output (Slow)", boost_ctl_pins2, {boost_ctl_settings_on && boost_ctl_settings_on2 && (boost_ctl_pwm == 2)} displayOnlyField = "Gen PWM A Output", pwm_opt2_a, {pwm_opt_on_a} displayOnlyField = "Gen PWM B Output", pwm_opt2_b, {pwm_opt_on_b} displayOnlyField = "Gen PWM C Output", pwm_opt2_c, {pwm_opt_on_c} displayOnlyField = "Gen PWM D Output", pwm_opt2_d, {pwm_opt_on_d} displayOnlyField = "Gen PWM E Output", pwm_opt2_e, {pwm_opt_on_e} displayOnlyField = "Gen PWM F Output", pwm_opt2_f, {pwm_opt_on_f} displayOnlyField = "Generic Closed-Loop A Output", generic_pid_pwm_outs_a, {generic_pid_flags_a_on} displayOnlyField = "Generic Closed-Loop B Output", generic_pid_pwm_outs_b, {generic_pid_flags_b_on} displayOnlyField = "WI Pump Output", water_pins_pump, {water_freq_on} displayOnlyField = "WI Valve Output", water_pins_valve, {water_freq_on && water_freq_type} displayOnlyField = "VSS1 Analogue sensor", vss1_an, {vss_opt0_1 == 2} displayOnlyField = "VSS1 Digi Input", vss_opt1, {vss_opt0_1 == 1} displayOnlyField = "VSS1 CAN PWM Port", vss1_pwmseq, {vss_opt1 ==15 && (vss_opt0_1 == 1)} displayOnlyField = "VSS2 Analogue Sensor", vss2_an, {vss_opt0_2 == 2} displayOnlyField = "VSS2 Digi Input", vss_opt2, {vss_opt0_2 == 1} displayOnlyField = "VSS2 CAN PWM Port", vss2_pwmseq, {vss_opt2 ==15 && (vss_opt0_1 == 1)} displayOnlyField = "Shaft Sensor 1", ss_opt1, {ss_opt1} displayOnlyField = "Shaft Sensor 2", ss_opt2, {ss_opt2} displayOnlyField = "VSS Output", vssout_opt, {vssout_opt} displayOnlyField = "Gear Pos. Input", gear_port_an, { (gear_method == 2) } displayOnlyField = "Bike Shifter Input", shift_cut_in, { shift_cut_on } displayOnlyField = "Bike Shifter Output", shift_cut_out, { shift_cut_on } displayOnlyField = "Accelerometer X Input", accXport, {accXport && (canrx1_opt_accel == 0)} displayOnlyField = "Accelerometer Y Input", accYport, {accYport && (canrx1_opt_accel == 0)} displayOnlyField = "Accelerometer Z Input", accZport, {accZport && (canrx1_opt_accel == 0)} displayOnlyField = "SDcard Datalog button", log_style2_but, {log_style_on2 == 2} displayOnlyField = "SDcard LED indicator", log_style_led, {log_style_on2} displayOnlyField = "SDcard Stream Input", log_style3_adc, {log_style_block == 1} displayOnlyField = "SDcard trigger output", sdpulse_out, {log_style_on2 >= 2} displayOnlyField = "Nitrous Stage 1 output - nitrous", n2o1n_pins, { N2Oopt_2 } displayOnlyField = "Nitrous Stage 1 output - fuel", n2o1f_pins, { N2Oopt_2 } displayOnlyField = "Nitrous Enable input on:", N2Oopt_pins, { N2Oopt_2 } displayOnlyField = "Nitrous Stage 2 output - nitrous", n2o2n_pins, { N2Oopt_2 && N2Oopt_3 } displayOnlyField = "Nitrous Stage 2 output - fuel", n2o2f_pins, { N2Oopt_2 && N2Oopt_3 } displayOnlyField = "AFR safety Warning Output", maxafr_opt1_led, { maxafr_opt1_on || egt_conf_action } displayOnlyField = "Launch Input", launch_opt_pins, { launch_opt_on >0 } displayOnlyField = "Variable launch Input", launch_var_on, { launch_opt_on >0 } displayOnlyField = "3-step Input", launch_3step_in, {launch_opt_on >0 } displayOnlyField = "Anti-Lag Enable Input", als_in_pin, {als_in_pin} displayOnlyField = "ALS On/off Output", als_out_pin, {als_in_pin} displayOnlyField = "ALS PWM Output", als_opt_pwmout, {als_in_pin} displayOnlyField = "ALS Output", als_pwm_opt2, {als_in_pin && als_opt_pwmout} displayOnlyField = "Traction Control Enable Input", tc_enin, {tc_opt_on} displayOnlyField = "Traction Control Light output", tc_led_out, {tc_opt_on} displayOnlyField = "Torque Convertor Lockup", tclu_outpin, {tclu_outpin} displayOnlyField = "TCLU Enable Input", tclu_enablepin, {tclu_outpin} displayOnlyField = "TCLU Brake switch", tclu_brakepin, {tclu_outpin} displayOnlyField = "Staged Injection Relay Output 1", staged_out1, { staged_first_param } displayOnlyField = "Staged Injection Relay Output 2", staged_out2, { staged_first_param } displayOnlyField = "Alternator Control Output", alternator_controlout, {alternator_opt_mode} displayOnlyField = "Alternator Warning Lamp Output", alternator_lampout, {alternator_opt_mode} displayOnlyField = "Load Monitor Input", alternator_freq_monin, {alternator_opt_mode && (alternator_opt_mode < 4)} displayOnlyField = "Battery Current Monitor Input", alternator_freq_currin, {alternator_opt_mode} displayOnlyField = "Battery Temperature Input", alternator_tempin, {alternator_opt_mode} displayOnlyField = "Fuel Pump Output", fp_out1, {fp_opt_mode} displayOnlyField = "Primary Pressure Input", fp_press_in, {fp_press_in} displayOnlyField = "Primary Fuel Temperature Input", fueltemp1, {fueltemp1} displayOnlyField = "Secondary Fuel Pressure Input", dualfuel_press_sens, { dualfuel_sw_on && dualfuel_opt_press} displayOnlyField = "Secondary Fuel Temperature Input", dualfuel_temp_sens, { dualfuel_sw_on && dualfuel_opt_temp} displayOnlyField = "Check Engine Light Output", cel_port, {cel_opt_on} dialog = iopinlist, "Feature List Showing I/O pins", xAxis topicHelp = "file://$getProjectsDirPath()/docs/Megasquirt3_TunerStudio_MS_Lite_Reference-1.5.pdf#iopins" panel = iopinlist1, West panel = iopinlist2, East ; now list of pins and what features they are assigned to. dialog = pinusage1, ".", yAxis ; 18 rows displayOnlyField = "Injector A", { bitStringValue( portLabels , portusage_a[0] ) } displayOnlyField = "Injector B", { bitStringValue( portLabels , portusage_a[1] ) } displayOnlyField = "Injector C", { bitStringValue( portLabels , portusage_a[2] ) } displayOnlyField = "Injector D", { bitStringValue( portLabels , portusage_a[3] ) } displayOnlyField = "Injector E", { bitStringValue( portLabels , portusage_a[4] ) } displayOnlyField = "Injector F", { bitStringValue( portLabels , portusage_a[5] ) } displayOnlyField = "Injector G", { bitStringValue( portLabels , portusage_a[6] ) } displayOnlyField = "Injector H", { bitStringValue( portLabels , portusage_a[7] ) } displayOnlyField = "Injector I", { bitStringValue( portLabels , portusage_t[1] ) } displayOnlyField = "Injector J", { bitStringValue( portLabels , portusage_t[3] ) } displayOnlyField = "Spark A", { bitStringValue( portLabels , portusage_b[0] ) } displayOnlyField = "Spark B", { bitStringValue( portLabels , portusage_b[1] ) } displayOnlyField = "Spark C", { bitStringValue( portLabels , portusage_b[2] ) } displayOnlyField = "Spark D", { bitStringValue( portLabels , portusage_b[3] ) } displayOnlyField = "Spark E", { bitStringValue( portLabels , portusage_b[4] ) } displayOnlyField = "Spark F", { bitStringValue( portLabels , portusage_b[5] ) } displayOnlyField = "Spark G", { bitStringValue( portLabels , portusage_b[6] ) } displayOnlyField = "Spark H", { bitStringValue( portLabels , portusage_b[7] ) } indicatorPanel = pinusage1i, 1, { 1 } ; 18 rows indicator = { porta & 1 }, "Off", "On", white, black, green, black indicator = { porta & 2 }, "Off", "On", white, black, green, black indicator = { porta & 4 }, "Off", "On", white, black, green, black indicator = { porta & 8 }, "Off", "On", white, black, green, black indicator = { porta & 16 }, "Off", "On", white, black, green, black indicator = { porta & 32 }, "Off", "On", white, black, green, black indicator = { porta & 64 }, "Off", "On", white, black, green, black indicator = { porta & 128 }, "Off", "On", white, black, green, black indicator = { portt & 2 }, "Off", "On", white, black, green, black indicator = { portt & 8 }, "Off", "On", white, black, green, black indicator = { portb & 1 }, "On", "Off", green, black, white, black indicator = { portb & 2 }, "On", "Off", green, black, white, black indicator = { portb & 4 }, "On", "Off", green, black, white, black indicator = { portb & 8 }, "On", "Off", green, black, white, black indicator = { portb & 16 }, "On", "Off", green, black, white, black indicator = { portb & 32 }, "On", "Off", green, black, white, black indicator = { portb & 64 }, "On", "Off", green, black, white, black indicator = { portb & 128 }, "On", "Off", green, black, white, black dialog = pinusage2, ".", yAxis displayOnlyField = "Fuel Pump Relay", { bitStringValue( portLabels , portusage_e[4] ) } displayOnlyField = "Tacho Out", { bitStringValue( portLabels , portusage_k[0] ) } displayOnlyField = "IAC1", { bitStringValue( portLabels , portusage_j[0] ) } displayOnlyField = "IAC2", { bitStringValue( portLabels , portusage_j[1] ) } displayOnlyField = "High Current Out 1", { bitStringValue( portLabels , portusage_p[4] ) } displayOnlyField = "High Current Out 2", { bitStringValue( portLabels , portusage_p[5] ) } displayOnlyField = "High Current Out 3", { bitStringValue( portLabels , portusage_p[3] ) } displayOnlyField = "PWM Idle Out 1", { bitStringValue( portLabels , portusage_p[7] ) } displayOnlyField = "PWM Out 2", { bitStringValue( portLabels , portusage_p[2] ) } displayOnlyField = "PWM Out 3", { bitStringValue( portLabels , portusage_p[6] ) } displayOnlyField = "PWM Out 4", { bitStringValue( portLabels , portusage_p[0] ) } displayOnlyField = "PWM Out 5", { bitStringValue( portLabels , portusage_p[1] ) } displayOnlyField = "Digital Output 1 LED", { bitStringValue( portLabels , portusage_s[6] ) } displayOnlyField = "Digital Output 2", { bitStringValue( portLabels , portusage_s[7] ) } indicatorPanel = pinusage2i, 1, { 1 } indicator = { porteh & 16 }, "Off", "On", white, black, green, black indicator = { portk & 1 }, "Off", "On", white, black, green, black indicator = { portmj & 1 }, "A- B+", "A+ B-", white, black, green, black indicator = { portmj & 2 }, "A- B+", "A+ B-", white, black, green, black indicator = { portp & 8 }, "Off", "On", white, black, green, black indicator = { portp & 16 }, "Off", "On", white, black, green, black indicator = { portp & 32 }, "Off", "On", white, black, green, black indicator = { portp & 128 }, "Off", "On", white, black, green, black indicator = { portp & 4 }, "Off", "On", white, black, green, black indicator = { portp & 64 }, "Off", "On", white, black, green, black indicator = { portp & 1 }, "Off", "On", white, black, green, black indicator = { portp & 2 }, "Off", "On", white, black, green, black indicator = { ports & 64 }, "Off", "On", white, black, green, black indicator = { ports & 128 }, "Off", "On", white, black, green, black dialog = pinusage3, ".", yAxis ; 17 rows displayOnlyField = "Crank input", { bitStringValue( portLabels , portusage_t[0] ) } displayOnlyField = "Cam Input", { bitStringValue( portLabels , portusage_t[2] ) } displayOnlyField = "Digital Switched in 1", { bitStringValue( portLabels , portusage_e[2] ) } displayOnlyField = "Digital Switched In 2", { bitStringValue( portLabels , portusage_k[2] ) } displayOnlyField = "Digital Switched in 3", { bitStringValue( portLabels , portusage_h[6] ) } displayOnlyField = "Digital Switched 12V in", { bitStringValue( portLabels , portusage_h[7] ) } displayOnlyField = "Digital Frequency In 1", { bitStringValue( portLabels , portusage_t[4] ) } displayOnlyField = "Digital Frequency In 2", { bitStringValue( portLabels , portusage_t[5] ) } displayOnlyField = "Digital Frequency In 3", { bitStringValue( portLabels , portusage_t[6] ) } displayOnlyField = "Digital In Out 1", { bitStringValue( portLabels , portusage_m[7] ) } displayOnlyField = "Digital In Out 2", { bitStringValue( portLabels , portusage_m[6] ) } displayOnlyField = "Digital In Out 3", { bitStringValue( portLabels , portusage_s[4] ) } displayOnlyField = "Digital In Out 4", { bitStringValue( portLabels , portusage_s[5] ) } displayOnlyField = "Digital In Out 5", { bitStringValue( portLabels , portusage_t[7] ) } displayOnlyField = "Digital Input 4", { bitStringValue( portLabels , portusage_e[0] ) } displayOnlyField = "Digital Input 5", { bitStringValue( portLabels , portusage_e[1] ) } indicatorPanel = pinusage3i, 1, { 1 } ; 17 rows indicator = { portt & 1 }, "0V", "5V", white, black, green, black indicator = { portt & 4 }, "0V", "5V", white, black, green, black indicator = { porteh & 4 }, "0V", "5V", white, black, green, black indicator = { portk & 4 }, "0V", "5V", white, black, green, black indicator = { porteh & 64 }, "0V", "5V", white, black, green, black indicator = { porteh & 128 }, "0V", "5V", white, black, green, black indicator = { portt & 16 }, "0V", "5V", white, black, green, black indicator = { portt & 32 }, "0V", "5V", white, black, green, black indicator = { portt & 64 }, "0V", "5V", white, black, green, black indicator = { portm & 128 }, "0V", "5V", white, black, green, black indicator = { portm & 64 }, "0V", "5V", white, black, green, black indicator = { ports & 16 }, "0V", "5V", white, black, green, black indicator = { ports & 32 }, "0V", "5V", white, black, green, black indicator = { portt & 128 }, "0V", "5V", white, black, green, black indicator = { porteh & 1 }, "0V", "5V", white, black, green, black indicator = { porteh & 2 }, "0V", "5V", white, black, green, black dialog = pinusage4, ".", yAxis displayOnlyField = "CANIN 1", { bitStringValue( portLabels , portusage_canin[0] ) } displayOnlyField = "CANIN 2", { bitStringValue( portLabels , portusage_canin[1] ) } displayOnlyField = "CANIN 3", { bitStringValue( portLabels , portusage_canin[2] ) } displayOnlyField = "CANIN 4", { bitStringValue( portLabels , portusage_canin[3] ) } displayOnlyField = "CANIN 5", { bitStringValue( portLabels , portusage_canin[4] ) } displayOnlyField = "CANIN 6", { bitStringValue( portLabels , portusage_canin[5] ) } displayOnlyField = "CANIN 7", { bitStringValue( portLabels , portusage_canin[6] ) } displayOnlyField = "CANIN 8", { bitStringValue( portLabels , portusage_canin[7] ) } displayOnlyField = "Loop 1", { bitStringValue( portLabels , portusage_loop[0] ) } displayOnlyField = "Loop 2", { bitStringValue( portLabels , portusage_loop[1] ) } displayOnlyField = "Loop 3", { bitStringValue( portLabels , portusage_loop[2] ) } displayOnlyField = "Loop 4", { bitStringValue( portLabels , portusage_loop[3] ) } displayOnlyField = "Loop 5", { bitStringValue( portLabels , portusage_loop[4] ) } displayOnlyField = "Loop 6", { bitStringValue( portLabels , portusage_loop[5] ) } displayOnlyField = "Loop 7", { bitStringValue( portLabels , portusage_loop[6] ) } displayOnlyField = "Loop 8", { bitStringValue( portLabels , portusage_loop[7] ) } indicatorPanel = pinusage4i, 1, { 1 } ; 16 rows indicator = { canin1_8 & 1 }, "0", "1", white, black, green, black indicator = { canin1_8 & 2 }, "0", "1", white, black, green, black indicator = { canin1_8 & 4 }, "0", "1", white, black, green, black indicator = { canin1_8 & 8 }, "0", "1", white, black, green, black indicator = { canin1_8 & 16 }, "0", "1", white, black, green, black indicator = { canin1_8 & 32 }, "0", "1", white, black, green, black indicator = { canin1_8 & 64 }, "0", "1", white, black, green, black indicator = { canin1_8 & 128 }, "0", "1", white, black, green, black indicator = { loop & 1 }, "0", "1", white, black, green, black indicator = { loop & 2 }, "0", "1", white, black, green, black indicator = { loop & 4 }, "0", "1", white, black, green, black indicator = { loop & 8 }, "0", "1", white, black, green, black indicator = { loop & 16 }, "0", "1", white, black, green, black indicator = { loop & 32 }, "0", "1", white, black, green, black indicator = { loop & 64 }, "0", "1", white, black, green, black indicator = { loop & 128 }, "0", "1", white, black, green, black dialog = pinusage5, ".", yAxis displayOnlyField = "CANOUT 1", { bitStringValue( portLabels , portusage_canout[0] ) } displayOnlyField = "CANOUT 2", { bitStringValue( portLabels , portusage_canout[1] ) } displayOnlyField = "CANOUT 3", { bitStringValue( portLabels , portusage_canout[2] ) } displayOnlyField = "CANOUT 4", { bitStringValue( portLabels , portusage_canout[3] ) } displayOnlyField = "CANOUT 5", { bitStringValue( portLabels , portusage_canout[4] ) } displayOnlyField = "CANOUT 6", { bitStringValue( portLabels , portusage_canout[5] ) } displayOnlyField = "CANOUT 7", { bitStringValue( portLabels , portusage_canout[6] ) } displayOnlyField = "CANOUT 8", { bitStringValue( portLabels , portusage_canout[7] ) } displayOnlyField = "CANOUT 9", { bitStringValue( portLabels , portusage_canout[8] ) } displayOnlyField = "CANOUT 10", { bitStringValue( portLabels , portusage_canout[9] ) } displayOnlyField = "CANOUT 11", { bitStringValue( portLabels , portusage_canout[10] ) } displayOnlyField = "CANOUT 12", { bitStringValue( portLabels , portusage_canout[11] ) } displayOnlyField = "CANOUT 13", { bitStringValue( portLabels , portusage_canout[12] ) } displayOnlyField = "CANOUT 14", { bitStringValue( portLabels , portusage_canout[13] ) } displayOnlyField = "CANOUT 15", { bitStringValue( portLabels , portusage_canout[14] ) } displayOnlyField = "CANOUT 16", { bitStringValue( portLabels , portusage_canout[15] ) } indicatorPanel = pinusage5i, 1, { 1 } ; 16 rows indicator = { canout1_8 & 1 }, "Off", "On", white, black, green, black indicator = { canout1_8 & 2 }, "Off", "On", white, black, green, black indicator = { canout1_8 & 4 }, "Off", "On", white, black, green, black indicator = { canout1_8 & 8 }, "Off", "On", white, black, green, black indicator = { canout1_8 & 16 }, "Off", "On", white, black, green, black indicator = { canout1_8 & 32 }, "Off", "On", white, black, green, black indicator = { canout1_8 & 64 }, "Off", "On", white, black, green, black indicator = { canout1_8 & 128 }, "Off", "On", white, black, green, black indicator = { canout9_16 & 1 }, "Off", "On", white, black, green, black indicator = { canout9_16 & 3 }, "Off", "On", white, black, green, black indicator = { canout9_16 & 4 }, "Off", "On", white, black, green, black indicator = { canout9_16 & 8 }, "Off", "On", white, black, green, black indicator = { canout9_16 & 16 }, "Off", "On", white, black, green, black indicator = { canout9_16 & 32 }, "Off", "On", white, black, green, black indicator = { canout9_16 & 64 }, "Off", "On", white, black, green, black indicator = { canout9_16 & 128 }, "Off", "On", white, black, green, black dialog = pinusage5s, ".", yAxis displayOnlyField = "CANIN1-8 Source", { bitStringValue( portLabels , portusage_canin_src ) } displayOnlyField = "CANOUT1-8 Destination", { bitStringValue( portLabels , portusage_canout1_src ) } displayOnlyField = "CANOUT9-16 Destination", { bitStringValue( portLabels , portusage_canout2_src ) } dialog = pinusage6, ".", yAxis displayOnlyField = "Channel: Feature:" displayOnlyField = "CANADC 1", { bitStringValue( portLabels , portusage_canadc[0] ) } displayOnlyField = "CANADC 2", { bitStringValue( portLabels , portusage_canadc[1] ) } displayOnlyField = "CANADC 3", { bitStringValue( portLabels , portusage_canadc[2] ) } displayOnlyField = "CANADC 4", { bitStringValue( portLabels , portusage_canadc[3] ) } displayOnlyField = "CANADC 5", { bitStringValue( portLabels , portusage_canadc[4] ) } displayOnlyField = "CANADC 6", { bitStringValue( portLabels , portusage_canadc[5] ) } displayOnlyField = "CANADC 7", { bitStringValue( portLabels , portusage_canadc[6] ) } displayOnlyField = "CANADC 8", { bitStringValue( portLabels , portusage_canadc[7] ) } displayOnlyField = "CANADC 9", { bitStringValue( portLabels , portusage_canadc[8] ) } displayOnlyField = "CANADC 10", { bitStringValue( portLabels , portusage_canadc[9] ) } displayOnlyField = "CANADC 11", { bitStringValue( portLabels , portusage_canadc[10] ) } displayOnlyField = "CANADC 12", { bitStringValue( portLabels , portusage_canadc[11] ) } displayOnlyField = "CANADC 13", { bitStringValue( portLabels , portusage_canadc[12] ) } displayOnlyField = "CANADC 14", { bitStringValue( portLabels , portusage_canadc[13] ) } displayOnlyField = "CANADC 15", { bitStringValue( portLabels , portusage_canadc[14] ) } displayOnlyField = "CANADC 16", { bitStringValue( portLabels , portusage_canadc[15] ) } dialog = pinusage6s, ".", yAxis displayOnlyField = " Source:" displayOnlyField = "1-4:", { bitStringValue( portLabels , portusage_canadc_src[0] ) } displayOnlyField = "", { ^ } displayOnlyField = "", { ^ } displayOnlyField = "", { ^ } displayOnlyField = "5-8:", { bitStringValue( portLabels , portusage_canadc_src[1] ) } displayOnlyField = "", { ^ } displayOnlyField = "", { ^ } displayOnlyField = "", { ^ } displayOnlyField = "9-12:", { bitStringValue( portLabels , portusage_canadc_src[2] ) } displayOnlyField = "", { ^ } displayOnlyField = "", { ^ } displayOnlyField = "", { ^ } displayOnlyField = "13-15:", { bitStringValue( portLabels , portusage_canadc_src[3] ) } displayOnlyField = "", { ^ } displayOnlyField = "", { ^ } displayOnlyField = "", { ^ } dialog = pinusage7, ".", yAxis displayOnlyField = "Channel: Feature:" displayOnlyField = "CANADC 17", { bitStringValue( portLabels , portusage_canadc[16] ) } displayOnlyField = "CANADC 18", { bitStringValue( portLabels , portusage_canadc[17] ) } displayOnlyField = "CANADC 19", { bitStringValue( portLabels , portusage_canadc[18] ) } displayOnlyField = "CANADC 20", { bitStringValue( portLabels , portusage_canadc[19] ) } displayOnlyField = "CANADC 21", { bitStringValue( portLabels , portusage_canadc[20] ) } displayOnlyField = "CANADC 22", { bitStringValue( portLabels , portusage_canadc[21] ) } displayOnlyField = "CANADC 23", { bitStringValue( portLabels , portusage_canadc[22] ) } displayOnlyField = "CANADC 24", { bitStringValue( portLabels , portusage_canadc[23] ) } displayOnlyField = "CANPWM 1", { bitStringValue( portLabels , portusage_canpwm[0] ) } displayOnlyField = "CANPWM 2", { bitStringValue( portLabels , portusage_canpwm[1] ) } displayOnlyField = "CANPWM 3", { bitStringValue( portLabels , portusage_canpwm[2] ) } displayOnlyField = "CANPWM 4", { bitStringValue( portLabels , portusage_canpwm[3] ) } displayOnlyField = "CANPWM 5", { bitStringValue( portLabels , portusage_canpwm[4] ) } displayOnlyField = "CANPWM 6", { bitStringValue( portLabels , portusage_canpwm[5] ) } displayOnlyField = "CANPWM 7", { bitStringValue( portLabels , portusage_canpwm[6] ) } displayOnlyField = "CANPWM 8", { bitStringValue( portLabels , portusage_canpwm[7] ) } dialog = pinusage7s, ".", yAxis displayOnlyField = " Source:" displayOnlyField = "17-20:", { bitStringValue( portLabels , portusage_canadc_src[4] ) } displayOnlyField = "", { ^ } displayOnlyField = "", { ^ } displayOnlyField = "", { ^ } displayOnlyField = "21-24:", { bitStringValue( portLabels , portusage_canadc_src[5] ) } displayOnlyField = "", { ^ } displayOnlyField = "", { ^ } displayOnlyField = "", { ^ } displayOnlyField = "", { - } displayOnlyField = "", { - } displayOnlyField = "", { - } displayOnlyField = "", { - } displayOnlyField = "", { - } displayOnlyField = "", { - } displayOnlyField = "", { - } displayOnlyField = "", { - } dialog = pinusage10, ".", yAxis ; 13 rows displayOnlyField = "Analog In 1", { bitStringValue( portLabels , portusage_ad0h[4] ) } displayOnlyField = "Analog In 2", { bitStringValue( portLabels , portusage_ad0h[5] ) } displayOnlyField = "Analog In 3", { bitStringValue( portLabels , portusage_ad0h[3] ) } displayOnlyField = "Analog In 4", { bitStringValue( portLabels , portusage_ad0h[6] ) } displayOnlyField = "Analog In 5", { bitStringValue( portLabels , portusage_ad0h[1] ) } displayOnlyField = "Analog In 6", { bitStringValue( portLabels , portusage_ad0h[0] ) } displayOnlyField = "Analog In 7", { bitStringValue( portLabels , portusage_ad0l[7] ) } displayOnlyField = "Analog In 8", { bitStringValue( portLabels , portusage_ad0h[7] ) } displayOnlyField = "Internal Baro Sensor", { bitStringValue( portLabels , portusage_ad0h[2] ) } displayOnlyField = "Internal MAP Sensor", { bitStringValue( portLabels , portusage_ad0l[0] ) } displayOnlyField = "O2", { bitStringValue( portLabels , portusage_ad0l[5] ) } displayOnlyField = "Hardware PWM A", { bitStringValue( portLabels , portusage_pwmscl[1] ) } displayOnlyField = "Hardware PWM B", { bitStringValue( portLabels , portusage_pwmscl[3] ) } indicatorPanel = pinusage10i, 1, { 1 } ; 13 rows indicator = { deadValue }, "-", "-", white, black, white, black indicator = { deadValue }, "-", "-", white, black, white, black indicator = { deadValue }, "-", "-", white, black, white, black indicator = { deadValue }, "-", "-", white, black, white, black indicator = { deadValue }, "-", "-", white, black, white, black indicator = { deadValue }, "-", "-", white, black, white, black indicator = { deadValue }, "-", "-", white, black, white, black indicator = { deadValue }, "-", "-", white, black, white, black indicator = { deadValue }, "-", "-", white, black, white, black indicator = { deadValue }, "-", "-", white, black, white, black indicator = { deadValue }, "-", "-", white, black, white, black indicator = { deadValue }, "-", "-", white, black, white, black indicator = { deadValue }, "-", "-", white, black, white, black dialog = pinusage, "I/O Pins List Usage and Status - only works when online", xAxis topicHelp = "file://$getProjectsDirPath()/docs/Megasquirt3_TunerStudio_MS_Lite_Reference-1.5.pdf#pinusage" panel = pinusage3, West panel = pinusage3i, West panel = pinusage2, Center panel = pinusage2i, Center dialog = pinucll, "", border panel = pinusage4, West panel = pinusage4i, East dialog = pinuclr, "", border panel = pinusage5, West panel = pinusage5i, Center dialog = pinuclt, "", xAxis panel = pinucll, West panel = pinuclr, East dialog = pinuclfa, "", yAxis field = "" field = "" field = "" dialog = pinuclb, "", xAxis panel = pinusage5s, West panel = pinuclfa, East dialog = pinusagecanloop, "CAN/Loop Usage and Status - only works when online", yAxis panel = pinuclt, North panel = pinuclb, South dialog = pinucsl, "", border panel = pinusage6, West panel = pinusage6s, East dialog = pinucsr, "", border panel = pinusage7, West panel = pinusage7s, East dialog = pinusagecan, "Expansion I/O Pins Usage and Status - only works when online", xAxis topicHelp = "file://$getProjectsDirPath()/docs/Megasquirt3_TunerStudio_MS_Lite_Reference-1.5.pdf#pinusagecan" panel = pinucsl, West panel = pinucsr, East dialog = pinusagel2, "I/O Pins List2 Usage and Status - only works when online", xAxis topicHelp = "file://$getProjectsDirPath()/docs/Megasquirt3_TunerStudio_MS_Lite_Reference-1.5.pdf#pinusage" panel = pinusage1 ;, West panel = pinusage1i ;, West panel = pinusage10 ;, Center dialog = ase_note field = "The typical range for afterstart is 50% (cold) to 5% (warm)" dialog = nestedasePct, "Afterstart Enrichment (ASE) - Percent Adder" panel = asePct panel = ase_note dialog = nestedasePct2, "Afterstart Enrichment (ASE) - Percent Adder 2" panel = asePct2 panel = ase_note dialog = wc_note field = "For 99% of engines, warmup must have 100% in the final row. Typical maximum is 255% (cold)." dialog = nestedwarmup_curve, "Warmup Enrichment (WUE) - Percent Multiplier" panel = warmup_curve panel = wc_note dialog = nestedwarmup_curve2, "Warmup Enrichment (WUE) - Percent Multiplier 2" panel = warmup_curve2 panel = wc_note dialog = tcsettings, "Traction Control Settings" topicHelp = "file://$getProjectsDirPath()/docs/Megasquirt3_TunerStudio_MS_Lite_Reference-1.5.pdf#traction" field = "Traction Control", tc_opt_on field = "Method", tc_opt_method, {tc_opt_on} field = "Enable Input", tc_enin, {tc_opt_on} field = "Light output", tc_led_out, {tc_opt_on} field = "Minimum TPS", tc_mintps, {tc_opt_on} field = "Minimum MAP", tc_minmap, {tc_opt_on && (tc_opt_method == 1)} field = "Minimum VSS", tc_minvss, {tc_opt_on && (tc_opt_method != 2) && (tc_opt_method != 3) } field = "Driven", tc_opt_driven, {tc_opt_on} field = "Undriven", tc_opt_undriven, {tc_opt_on} ; field = "Maximum VSS", tc_maxvss, {tc_opt_on } field = "Slip % Setting", tc_opt_slipcurve, {tc_opt_on && (tc_opt_method == 1)} field = "Slip Threshold", tc_slipthresh, {tc_opt_on && (tc_opt_method == 1) && !tc_opt_slipcurve} field = "Nitrous Control", tc_opt_n2o, {tc_opt_on } field = "Add Fuel To:", tc_opt_bank, {tc_opt_on } field = "When staging bank 1 = primary, bank 2 = secondary" field = "Speed difference retard table", tc_opt3_vssdiff {tc_opt_on} dialog = tc_top, "", xAxis panel = tc_retard_curve, West panel = tc_spkcut_curve, East, {spk_mode0 > 1} dialog = tc_mid, "", xAxis panel = tc_addfuel_curve, West panel = tc_nitrous_curve, East, {N2Oopt_2} dialog = tc_btm, "", xAxis panel = tc_boost_curve, West, {boost_ctl_settings_on && boost_ctl_settings_cl} panel = tc_boost_duty_delta_curve, East, {boost_ctl_settings_on && (boost_ctl_settings_cl != 1)} dialog = tc_curves, "Traction Control Reactions", yAxis topicHelp = "file://$getProjectsDirPath()/docs/Megasquirt3_TunerStudio_MS_Lite_Reference-1.5.pdf#tcreact" panel = tc_top, North panel = tc_mid, Center panel = tc_btm, South dialog = tcluparams, "Torque Convertor Lockup" topicHelp = "file://$getProjectsDirPath()/docs/Megasquirt3_TunerStudio_MS_Lite_Reference-1.5.pdf#tclu" field = "Output Pin", tclu_outpin field = "Enable Input", tclu_enablepin, {tclu_outpin} field = "Brake Switch", tclu_brakepin, {tclu_outpin} field = "Minimum TPS", tclu_tpsmin, {tclu_outpin} field = "Maximum TPS", tclu_tpsmax, {tclu_outpin} field = "Minimum MAP", tclu_mapmin, {tclu_outpin} field = "Maximum MAP", tclu_mapmax, {tclu_outpin} field = "Use VSS", tclu_opt_vss, {tclu_outpin} field = "Minimum Speed", tclu_vssmin, {tclu_outpin && tclu_opt_vss} field = "Use Gear Value", tclu_opt_gear, {tclu_outpin} field = "Minimum Gear", tclu_gearmin, {tclu_outpin && tclu_opt_gear} field = "Activation Delay", tclu_delay, {tclu_outpin} dialog = vvtct, "" field = "." field = "Input" field = "Polarity" field = "No. Teeth" field = "Output" field = "Minimum" field = "Maximum" field = "Int./Exh." field = "Tooth 1" field = "Tooth 2" field = "More Duty Means" field = "Output (2)" dialog = vvtc1, "" field = "#CAM1" field = "", vvt_opt3_cam1, {vvt_opt1_on && vvt_opt2_pid2} field = "", vvt_opt2_cam1pol,{vvt_opt1_on && ((spk_config_trig2l & 0x3) == 0x3) && (spk_mode0 == 4) && (spk_config_trig2 == 3) && (vvt_opt4_decode ==0 )} field = "", vvt_tth1, {(vvt_opt1_on > 0) && (spk_mode0 == 4) && vvt_opt2_pid2} field = "", vvt_out1, {vvt_opt1_on} field = "", vvt_min_ang1, {vvt_opt1_on && vvt_opt2_pid2} field = "", vvt_max_ang1, {vvt_opt1_on && vvt_opt2_pid2} field = "", vvt_opt5_vvt1, {vvt_opt1_on && vvt_opt2_pid2} field = "", vvt_cam1tth1, {vvt_opt1_on && (vvt_opt4_decode == 1)} field = "", vvt_cam1tth2, {vvt_opt1_on && (vvt_opt4_decode == 1)} field = "", vvt_out1_dir, {vvt_opt1_on && vvt_opt2_pid2} field = "", vvt_softout1, {vvt_opt1_on && (vvt_opt4_decode == 2)} dialog = vvtc2, "" field = "#CAM2" field = "", vvt_opt3_cam2, {(vvt_opt1_on > 1) && vvt_opt2_pid2} field = "", vvt_opt2_cam2pol,{(vvt_opt1_on > 1) && vvt_opt2_pid2} field = "", vvt_tth2, {(vvt_opt1_on > 1) && vvt_opt2_pid2 && (spk_mode0 == 4)} field = "", vvt_out2, {(vvt_opt1_on > 1) && vvt_opt2_pid2} field = "", vvt_min_ang2, {(vvt_opt1_on > 1) && vvt_opt2_pid2} field = "", vvt_max_ang2, {(vvt_opt1_on > 1) && vvt_opt2_pid2} field = "", vvt_opt5_vvt2, {(vvt_opt1_on > 1) && vvt_opt2_pid2} field = "", vvt_cam2tth1, {0} field = "", vvt_cam2tth2, {0} field = "", vvt_out2_dir, {(vvt_opt1_on > 1) && vvt_opt2_pid2} field = "", vvt_softout2, {(vvt_opt1_on > 1) && (vvt_opt4_decode == 2)} dialog = vvtc3, "" field = "#CAM3" field = "", vvt_opt3_cam3, {(vvt_opt1_on > 2) && vvt_opt2_pid2} field = "", vvt_opt2_cam3pol,{(vvt_opt1_on > 2) && vvt_opt2_pid2} field = "", vvt_tth3, {(vvt_opt1_on > 2) && vvt_opt2_pid2 && (spk_mode0 == 4)} field = "", vvt_out3, {(vvt_opt1_on > 2) && vvt_opt2_pid2} field = "", vvt_min_ang3, {(vvt_opt1_on > 2) && vvt_opt2_pid2} field = "", vvt_max_ang3, {(vvt_opt1_on > 2) && vvt_opt2_pid2} field = "", vvt_opt5_vvt3, {(vvt_opt1_on > 2) && vvt_opt2_pid2} field = "", vvt_cam3tth1, {(vvt_opt1_on > 2) && vvt_opt2_pid2 && (vvt_opt4_decode == 1)} field = "", vvt_cam3tth2, {(vvt_opt1_on > 2) && vvt_opt2_pid2 && (vvt_opt4_decode == 1)} field = "", vvt_out3_dir, {(vvt_opt1_on > 2) && vvt_opt2_pid2} field = "", vvt_softout3, {(vvt_opt1_on > 2) && (vvt_opt4_decode == 2)} dialog = vvtc4, "" field = "#CAM4" field = "", vvt_opt3_cam4, {(vvt_opt1_on > 2) && vvt_opt2_pid2} field = "", vvt_opt2_cam4pol,{(vvt_opt1_on > 2) && vvt_opt2_pid2} field = "", vvt_tth4, {(vvt_opt1_on > 2) && vvt_opt2_pid2 && (spk_mode0 == 4)} field = "", vvt_out4, {(vvt_opt1_on > 2) && vvt_opt2_pid2} field = "", vvt_min_ang4, {(vvt_opt1_on > 2) && vvt_opt2_pid2} field = "", vvt_max_ang4, {(vvt_opt1_on > 2) && vvt_opt2_pid2} field = "", vvt_opt5_vvt4, {(vvt_opt1_on > 2) && vvt_opt2_pid2} field = "", vvt_cam4tth1, {0} field = "", vvt_cam4tth2, {0} field = "", vvt_out4_dir, {(vvt_opt1_on > 2) && vvt_opt2_pid2} field = "", vvt_softout4, {(vvt_opt1_on > 2) && (vvt_opt4_decode == 2)} dialog = vvtcams, "Cam Settings", xAxis panel = vvtct panel = vvtc1 panel = vvtc2 panel = vvtc3 panel = vvtc4 dialog = vvtinext, "" field = "." field = "Use Hold Duty" field = "Hold/Neutral Duty" field = "Proportional Gain" field = "Integral Gain" field = "Derivative Gain" field = "Table is Advance/Retard" dialog = vvtinexi, "" field = "#Intake" field = "", vvt_opt2_use_hold_intake, {vvt_opt1_on && vvt_opt2_pid2} field = "", vvt_hold_duty, {vvt_opt1_on && vvt_opt2_pid2 && vvt_opt2_use_hold_intake} field = "", vvt_ctl_Kp, {vvt_opt1_on && vvt_opt2_pid2} field = "", vvt_ctl_Ki, {vvt_opt1_on && vvt_opt2_pid2} field = "", vvt_ctl_Kd, {vvt_opt1_on && vvt_opt2_pid2} field = "Advance" dialog = vvtinexe, "" field = "#Exhaust" field = "", vvt_opt2_use_hold_exhaust, { vvt_opt2_pid2 && (vvt_opt5_vvt1 || vvt_opt5_vvt2 || vvt_opt1_on > 2) } field = "", vvt_hold_duty_exh, { vvt_opt2_pid2 && (vvt_opt5_vvt1 || vvt_opt5_vvt2 || vvt_opt1_on > 2) && vvt_opt2_use_hold_exhaust } field = "", vvt_ctl_Kp_exh, { vvt_opt2_pid2 && (vvt_opt5_vvt1 || vvt_opt5_vvt2 || vvt_opt1_on > 2) } field = "", vvt_ctl_Ki_exh, { vvt_opt2_pid2 && (vvt_opt5_vvt1 || vvt_opt5_vvt2 || vvt_opt1_on > 2) } field = "", vvt_ctl_Kd_exh, { vvt_opt2_pid2 && (vvt_opt5_vvt1 || vvt_opt5_vvt2 || vvt_opt1_on > 2) } field = "", vvt_opt1_dir_exhaust, { vvt_opt2_pid2 && (vvt_opt5_vvt1 || vvt_opt5_vvt2 || vvt_opt1_on > 2) } dialog = vvtinex, "PID Parameters", xAxis panel = vvtinext panel = vvtinexi panel = vvtinexe dialog = vvt_test, "Test", xAxis field = "Cam", vvt_opt1_tst, {vvt_opt1_on} field = "Duty", vvt_test_duty, {vvt_opt1_on && vvt_opt1_tst} dialog = vvtl, "" field = "No. VVTs", vvt_opt1_on field = "After-start delay", vvt_startdelay, {vvt_opt1_on} field = "Cam Decoder", vvt_opt4_decode,{vvt_opt1_on && (spk_mode0 == 4)} field = "Frequency", vvt_opt6_freq, {vvt_opt1_on && vvt_out1} field = "On/off or Variable (PID)", vvt_opt2_pid2, {vvt_opt1_on} field = "Adjust Inj. Timing Based On", vvt_opt5_add1, {vvt_opt1_on} field = "Commanded vs. Actual", vvt_opt5_add2, {vvt_opt1_on && vvt_opt5_add1} field = "Inj. Timing Adjustment", vvt_onoff_ang, {vvt_opt1_on && !vvt_opt2_pid2 && vvt_opt5_add1} field = "Load Y Axis In Tables", vvt_opt7_yaxis, {vvt_opt1_on} field = "Minimum CLT", vvt_minclt, {vvt_opt1_on} field = "VVT Maximum Slew", vvt_slew, {vvt_opt1_on && vvt_opt2_pid2} panel = vvt_test dialog = vvtr, "" field = "Control Interval", vvt_opt1_int, {vvt_opt1_on && vvt_opt2_pid2} field = "Control Interval Time", vvt_ctl_ms, {vvt_opt1_on && vvt_opt2_pid2 && vvt_opt1_int} field = "Range Check Measured Angles", vvt_opt5_err, {vvt_opt1_on && vvt_opt2_pid2} field = "Tooth filter", vvt_opt1_filter, {vvt_opt1_on && vvt_opt2_pid2} field = "Minimum VVT Duty", vvt_minduty1, {vvt_opt1_on && vvt_opt2_pid2} field = "Maximum VVT Duty", vvt_maxduty1, {vvt_opt1_on && vvt_opt2_pid2} panel = vvtinex dialog = vvtparams2, "VVT Settings", xAxis panel = vvtl panel = vvtr dialog = vvtparams, "VVT Settings", yAxis topicHelp = "file://$getProjectsDirPath()/docs/Megasquirt3_TunerStudio_MS_Lite_Reference-1.5.pdf#vvt" panel = vvtparams2 panel = vvtcams dialog = spk_trimaTblTitle, "Cyl #1" panel = spk_trimaTbl dialog = spk_trimbTblTitle, "Cyl #2" panel = spk_trimbTbl dialog = spk_trimcTblTitle, "Cyl #3" panel = spk_trimcTbl dialog = spk_trimdTblTitle, "Cyl #4" panel = spk_trimdTbl dialog = spk_trimadt, "", xAxis panel = spk_trimaTblTitle panel = spk_trimbTblTitle dialog = spk_trimadb, "", xAxis panel = spk_trimcTblTitle panel = spk_trimdTblTitle dialog = spk_trimad,"Spark Cyl 1-4 Trims" topicHelp = "file://$getProjectsDirPath()/docs/Megasquirt3_TunerStudio_MS_Lite_Reference-1.5.pdf#spktrim1-4" panel = spk_trimadt panel = spk_trimadb dialog = spk_trimeTblTitle, "Cyl #5" panel = spk_trimeTbl dialog = spk_trimfTblTitle, "Cyl #6" panel = spk_trimfTbl dialog = spk_trimgTblTitle, "Cyl #7" panel = spk_trimgTbl dialog = spk_trimhTblTitle, "Cyl #8" panel = spk_trimhTbl dialog = spk_trimeht, "", xAxis panel = spk_trimeTblTitle panel = spk_trimfTblTitle dialog = spk_trimehb, "", xAxis panel = spk_trimgTblTitle panel = spk_trimhTblTitle dialog = spk_trimeh,"Spark Cyl 5-8 Trims" topicHelp = "file://$getProjectsDirPath()/docs/Megasquirt3_TunerStudio_MS_Lite_Reference-1.5.pdf#spktrim1-4" panel = spk_trimeht panel = spk_trimehb dialog = spk_trimiTblTitle, "Cyl #9" panel = spk_trimiTbl dialog = spk_trimjTblTitle, "Cyl #10" panel = spk_trimjTbl dialog = spk_trimkTblTitle, "Cyl #11" panel = spk_trimkTbl dialog = spk_trimlTblTitle, "Cyl #12" panel = spk_trimlTbl dialog = spk_trimilt, "", xAxis panel = spk_trimiTblTitle panel = spk_trimjTblTitle dialog = spk_trimilb, "", xAxis panel = spk_trimkTblTitle panel = spk_trimlTblTitle dialog = spk_trimil,"Spark Cyl 9-12 Trims" topicHelp = "file://$getProjectsDirPath()/docs/Megasquirt3_TunerStudio_MS_Lite_Reference-1.5.pdf#spktrim1-4" panel = spk_trimilt panel = spk_trimilb dialog = inj_trimaTblTitle, "Cyl #1" panel = inj_trimaTbl, Center dialog = inj_trimbTblTitle, "Cyl #2" panel = inj_trimbTbl dialog = inj_trimcTblTitle, "Cyl #3" panel = inj_trimcTbl dialog = inj_trimdTblTitle, "Cyl #4" panel = inj_trimdTbl dialog = inj_trimadt, "", xAxis panel = inj_trimaTblTitle panel = inj_trimbTblTitle dialog = inj_trimadb, "", xAxis panel = inj_trimcTblTitle panel = inj_trimdTblTitle dialog = inj_trimad,"Injector Cyl 1-4 Trims", yAxis topicHelp = "file://$getProjectsDirPath()/docs/Megasquirt3_TunerStudio_MS_Lite_Reference-1.5.pdf#injtrim1-4" panel = inj_trimadt panel = inj_trimadb dialog = inj_trimeTblTitle, "Cyl #5" panel = inj_trimeTbl, Center dialog = inj_trimfTblTitle, "Cyl #6" panel = inj_trimfTbl dialog = inj_trimgTblTitle, "Cyl #7" panel = inj_trimgTbl dialog = inj_trimhTblTitle, "Cyl #8" panel = inj_trimhTbl dialog = inj_trimeht, "", xAxis panel = inj_trimeTblTitle panel = inj_trimfTblTitle dialog = inj_trimehb, "", xAxis panel = inj_trimgTblTitle panel = inj_trimhTblTitle dialog = inj_trimeh,"Injector Cyl 5-8 Trims", yAxis topicHelp = "file://$getProjectsDirPath()/docs/Megasquirt3_TunerStudio_MS_Lite_Reference-1.5.pdf#injtrim1-4" panel = inj_trimeht panel = inj_trimehb dialog = inj_trimiTblTitle, "Cyl #9" panel = inj_trimiTbl dialog = inj_trimjTblTitle, "Cyl #10" panel = inj_trimjTbl dialog = inj_trimkTblTitle, "Cyl #11" panel = inj_trimkTbl dialog = inj_trimlTblTitle, "Cyl #12" panel = inj_trimlTbl dialog = inj_trimilt, "", xAxis panel = inj_trimiTblTitle panel = inj_trimjTblTitle dialog = inj_trimilb, "", xAxis panel = inj_trimkTblTitle panel = inj_trimlTblTitle dialog = inj_trimil,"Injector Cyl 9-12 Trims" topicHelp = "file://$getProjectsDirPath()/docs/Megasquirt3_TunerStudio_MS_Lite_Reference-1.5.pdf#injtrim1-4" panel = inj_trimilt panel = inj_trimilb dialog = antilag, "Turbo Anti-Lag (ALS)" topicHelp = "file://$getProjectsDirPath()/docs/Megasquirt3_TunerStudio_MS_Lite_Reference-1.5.pdf#als" field = "#Caution! Anti-lag is very hard on your turbo" field = "# and engine. Use at your risk." field = "Anti-lag Enable Input", als_in_pin ; field = "Minimum TPS", als_mintps, {als_in_pin} field = "Maximum TPS", als_maxtps, {als_in_pin} field = "Minimum RPM", als_minrpm, {als_in_pin} field = "Maximum RPM", als_maxrpm, {als_in_pin} field = "Maximum MAT", als_maxmat, {als_in_pin} field = "Maximum ALS time", als_maxtime, {als_in_pin} field = "Time Between Activations", als_pausetime,{als_in_pin} field = "Minimum CLT", als_minclt, {als_in_pin} field = "Maximum CLT", als_maxclt, {als_in_pin} field = "Enable Cyclic Fuel Cut", als_opt_fc, {als_in_pin && hardware_fuel && sequential} field = "Fuel cut likely unsafe with Staging" field = "Enable Cyclic Spark Cut", als_opt_sc, {als_in_pin} field = "-" field = "Enable Roving Idle Fuel Cut", als_opt_ri, {als_in_pin} field = "-" field = "Use Idle Valve", als_opt_idle, {als_in_pin} field = "Idle Valve Duty", als_iac_duty, { als_in_pin && als_opt_idle && ((IdleCtl == 2) || (IdleCtl == 4)) } field = "Idle Valve Steps", als_iac_steps, { als_in_pin && als_opt_idle && (IdleCtl == 3)} field = "-" field = "On/off Output", als_out_pin, {als_in_pin} field = "-" field = "PWM Output", als_opt_pwmout, {als_in_pin} field = "Output Port/Pin", als_pwm_opt2, {als_in_pin && als_opt_pwmout} field = "Output Duty", als_pwm_duty, {als_in_pin && als_opt_pwmout} field = "Frequency", als_pwm_opt_freq, {als_in_pin && als_opt_pwmout} field = "" dialog = als_left1, "Added Fuel %age" panel = als_addfuel_tbl dialog = als_left2, "ALS Timing" panel = als_timing_tbl dialog = als_right1, "Spark Cut %" panel = als_sparkcut_tbl, North, {als_opt_sc} dialog = als_right2, "Fuel Cut %" panel = als_fuelcut_tbl, South, {als_opt_fc && hardware_fuel && sequential}} dialog = antilag_left, "", yAxis panel = als_left1 panel = als_left2 dialog = antilag_right, "", yAxis panel = als_right1 panel = als_right2 dialog = antilagtables, "Turbo Anti-lag Tables", xAxis topicHelp = "file://$getProjectsDirPath()/docs/Megasquirt3_TunerStudio_MS_Lite_Reference-1.5.pdf#alstables" panel = antilag_left panel = antilag_right dialog = flash_unlock, "Un/Lock Calibrations" topicHelp = "file://$getProjectsDirPath()/docs/Megasquirt3_TunerStudio_MS_Lite_Reference-1.5.pdf#calunlock" field = "Sensor Calibrations", flashlock field = "Always re-lock after use" dialog = gen_pwm_left_a, "" field = "Enable Generic PWM A", pwm_opt_on_a field = "Output Port/Pin", pwm_opt2_a, {pwm_opt_on_a} field = "Frequency / On-Off", pwm_opt_freq_a, {pwm_opt_on_a} field = "On Above Duty", pwm_onabove_a, {pwm_opt_on_a && (pwm_opt_freq_a == 0)} field = "Off Below Duty", pwm_offbelow_a, {pwm_opt_on_a && (pwm_opt_freq_a == 0)} channelSelector= "Load Axis", pwm_opt_load_a_offset, pwm_opt_load_a_size, {pwm_opt_on_a} field = "Load is Y axis on table, X axis on curve" field = "Table or Curve", pwm_opt_curve_a, {pwm_opt_on_a} field = "CLT/MAT Units", sensor_temp, {0} field = "" field = "" field = "" field = "" field = "" field = "" dialog = gen_pwm_curve_grapha, "", card panel = pwm_duties_Tbl_a, Center, {pwm_opt_on_a && (pwm_opt_curve_a == 0)} panel = pwm_curve_a, Center, {pwm_opt_on_a && pwm_opt_curve_a} dialog = gen_pwm_a, "Generic PWM A", border topicHelp = "file://$getProjectsDirPath()/docs/Megasquirt3_TunerStudio_MS_Lite_Reference-1.5.pdf#genpwm" panel = gen_pwm_left_a, West panel = gen_pwm_curve_grapha, Center dialog = gen_pwm_left_b, "" field = "Enable Generic PWM B", pwm_opt_on_b field = "Output Port/Pin", pwm_opt2_b, {pwm_opt_on_b} field = "Frequency / On-Off", pwm_opt_freq_b, {pwm_opt_on_b} field = "On Above Duty", pwm_onabove_b, {pwm_opt_on_b && (pwm_opt_freq_b == 0)} field = "Off Below Duty", pwm_offbelow_b, {pwm_opt_on_b && (pwm_opt_freq_b == 0)} channelSelector= "Load Axis", pwm_opt_load_b_offset, pwm_opt_load_b_size, {pwm_opt_on_b} field = "Load is Y axis on table, X axis on curve" field = "Table or Curve", pwm_opt_curve_b, {pwm_opt_on_b} field = "CLT/MAT Units", sensor_temp, {0} field = "" field = "" field = "" field = "" field = "" field = "" dialog = gen_pwm_curve_graphb, "", card panel = pwm_duties_Tbl_b, Center, {pwm_opt_on_b && (pwm_opt_curve_b == 0)} panel = pwm_curve_b, Center, {pwm_opt_on_b && pwm_opt_curve_b} dialog = gen_pwm_b, "Generic PWM B", border topicHelp = "file://$getProjectsDirPath()/docs/Megasquirt3_TunerStudio_MS_Lite_Reference-1.5.pdf#genpwm" panel = gen_pwm_left_b, West panel = gen_pwm_curve_graphb, Center dialog = gen_pwm_left_c, "" field = "Enable Generic PWM C", pwm_opt_on_c field = "Output Port/Pin", pwm_opt2_c, {pwm_opt_on_c} field = "Frequency / On-Off", pwm_opt_freq_c, {pwm_opt_on_c} field = "On Above Duty", pwm_onabove_c, {pwm_opt_on_c && (pwm_opt_freq_c == 0)} field = "Off Below Duty", pwm_offbelow_c, {pwm_opt_on_c && (pwm_opt_freq_c == 0)} channelSelector= "Load Axis", pwm_opt_load_c_offset, pwm_opt_load_c_size, {pwm_opt_on_c} field = "Load is Y axis on table, X axis on curve" field = "Table or Curve", pwm_opt_curve_c, {pwm_opt_on_c} field = "CLT/MAT Units", sensor_temp, {0} field = "" field = "" field = "" field = "" field = "" field = "" dialog = gen_pwm_curve_graphc, "", card panel = pwm_duties_Tbl_c, Center, {pwm_opt_on_c && (pwm_opt_curve_c == 0)} panel = pwm_curve_c, Center, {pwm_opt_on_c && pwm_opt_curve_c} dialog = gen_pwm_c, "Generic PWM C", border topicHelp = "file://$getProjectsDirPath()/docs/Megasquirt3_TunerStudio_MS_Lite_Reference-1.5.pdf#genpwm" panel = gen_pwm_left_c, West panel = gen_pwm_curve_graphc, Center dialog = gen_pwm_left_d, "" field = "Enable Generic PWM D", pwm_opt_on_d field = "Output Port/Pin", pwm_opt2_d, {pwm_opt_on_d} field = "Frequency / On-Off", pwm_opt_freq_d, {pwm_opt_on_d} field = "On Above Duty", pwm_onabove_d, {pwm_opt_on_d && (pwm_opt_freq_d == 0)} field = "Off Below Duty", pwm_offbelow_d, {pwm_opt_on_d && (pwm_opt_freq_d == 0)} channelSelector= "Load Axis", pwm_opt_load_d_offset, pwm_opt_load_d_size, {pwm_opt_on_d} field = "Load is Y axis on table, X axis on curve" field = "Table or Curve", pwm_opt_curve_d, {pwm_opt_on_d} field = "CLT/MAT Units", sensor_temp, {0} field = "" field = "" field = "" field = "" field = "" field = "" dialog = gen_pwm_curve_graphd, "", card panel = pwm_duties_Tbl_d, Center, {pwm_opt_on_d && (pwm_opt_curve_d == 0)} panel = pwm_curve_d, Center, {pwm_opt_on_d && pwm_opt_curve_d} dialog = gen_pwm_d, "Generic PWM D", border topicHelp = "file://$getProjectsDirPath()/docs/Megasquirt3_TunerStudio_MS_Lite_Reference-1.5.pdf#genpwm" panel = gen_pwm_left_d, West panel = gen_pwm_curve_graphd, Center dialog = gen_pwm_left_e, "" field = "Enable Generic PWM E", pwm_opt_on_e field = "Output Port/Pin", pwm_opt2_e, {pwm_opt_on_e} field = "Frequency / On-Off", pwm_opt_freq_e, {pwm_opt_on_e} field = "On Above Duty", pwm_onabove_e, {pwm_opt_on_e && (pwm_opt_freq_e == 0)} field = "Off Below Duty", pwm_offbelow_e, {pwm_opt_on_e && (pwm_opt_freq_e == 0)} channelSelector= "Load Axis", pwm_opt_load_e_offset, pwm_opt_load_e_size, {pwm_opt_on_e} field = "Load is Y axis on table, X axis on curve" field = "Table or Curve", pwm_opt_curve_e, {pwm_opt_on_e} field = "CLT/MAT Units", sensor_temp, {0} field = "" field = "" field = "" field = "" field = "" field = "" dialog = gen_pwm_curve_graphe, "", card panel = pwm_duties_Tbl_e, Center, {pwm_opt_on_e && (pwm_opt_curve_e == 0)} panel = pwm_curve_e, Center, {pwm_opt_on_e && pwm_opt_curve_e} dialog = gen_pwm_e, "Generic PWM E", border topicHelp = "file://$getProjectsDirPath()/docs/Megasquirt3_TunerStudio_MS_Lite_Reference-1.5.pdf#genpwm" panel = gen_pwm_left_e, West panel = gen_pwm_curve_graphe, Center dialog = gen_pwm_left_f, "" field = "Enable Generic PWM F", pwm_opt_on_f field = "Output Port/Pin", pwm_opt2_f, {pwm_opt_on_f} field = "Frequency / On-Off", pwm_opt_freq_f, {pwm_opt_on_f} field = "On Above Duty", pwm_onabove_f, {pwm_opt_on_f && (pwm_opt_freq_f == 0)} field = "Off Below Duty", pwm_offbelow_f, {pwm_opt_on_f && (pwm_opt_freq_f == 0)} channelSelector= "Load Axis", pwm_opt_load_f_offset, pwm_opt_load_f_size, {pwm_opt_on_f} field = "Load is Y axis on table, X axis on curve" field = "Table or Curve", pwm_opt_curve_f, {pwm_opt_on_f} field = "CLT/MAT Units", sensor_temp, {0} field = "" field = "" field = "" field = "" field = "" field = "" dialog = gen_pwm_curve_graphf, "", card panel = pwm_duties_Tbl_f, Center, {pwm_opt_on_f && (pwm_opt_curve_f == 0)} panel = pwm_curve_f, Center, {pwm_opt_on_f && pwm_opt_curve_f} dialog = gen_pwm_f, "Generic PWM F", border topicHelp = "file://$getProjectsDirPath()/docs/Megasquirt3_TunerStudio_MS_Lite_Reference-1.5.pdf#genpwm" panel = gen_pwm_left_f, West panel = gen_pwm_curve_graphf, Center dialog = map_sample_dialog_south, "MAP Sample General Settings" field = "Use fast MAP/TPS sampling", MAP_fastsample field = "MAP Sample Method", mapsample_opt2, { !MAP_fastsample } field = "Map Sample Window", map_sample_duration, { !mapsample_opt2 } field = "No. Sample Events", mapsample_opt1, { !mapsample_opt2 } field = "" field = "Phase Detect Threshold", map_phase_thresh, { (nCylinders < 3) && (hardware_cam == 2) && (spk_mode0 == 4) && (spk_config_trig2 == 3) } dialog = map_sample_dialog, "MAP Sample Settings", border topicHelp = "file://$getProjectsDirPath()/docs/Megasquirt3_TunerStudio_MS_Lite_Reference-1.5.pdf#mapsamp" panel = mapsample_curve, Center, { !mapsample_opt2 } panel = map_sample_dialog_south, South dialog = ShiftSettings, "Sequential Shift Cut" topicHelp = "file://$getProjectsDirPath()/docs/Megasquirt3_TunerStudio_MS_Lite_Reference-1.5.pdf#seqshift" field = "Shifter Spark Cut System", shift_cut_on field = "Mode", shift_cut_auto, { shift_cut_on } field = "Cut fuel", shift_cut_fuel, { shift_cut_on } field = "Button Input", shift_cut_in, { shift_cut_on } field = "Solenoid Output", shift_cut_out, { shift_cut_on } field = "RPM >", shift_cut_rpm, { shift_cut_on } field = "And TPS >", shift_cut_tps, { shift_cut_on } field = "Delay Before Spark Cut", shift_cut_delay, { shift_cut_on } field = "Spark Cut Time (Base)", shift_cut_time, { shift_cut_on } field = "Gear Based Delay", shift_cut_gear, { shift_cut_on } field = "Additional Delay 1-2", shift_cut_add12, { shift_cut_on && shift_cut_gear } field = "Additional Delay 2-3", shift_cut_add23, { shift_cut_on && shift_cut_gear } field = "Additional Delay 3-4", shift_cut_add34, { shift_cut_on && shift_cut_gear } field = "Additional Delay 4-5", shift_cut_add45, { shift_cut_on && shift_cut_gear } field = "Additional Delay 5-6", shift_cut_add56, { shift_cut_on && shift_cut_gear } field = "Solenoid Delay", shift_cut_soldelay, { shift_cut_on && shift_cut_on} field = "Re-Shift Hold-Off Time", shift_cut_reshift field = "Automatic mode shift points" field = "Shift RPM 1-2", shift_cut_rpm12, { shift_cut_on && shift_cut_auto } field = "Shift RPM 2-3", shift_cut_rpm23, { shift_cut_on && shift_cut_auto } field = "Shift RPM 3-4", shift_cut_rpm34, { shift_cut_on && shift_cut_auto } field = "Shift RPM 4-5", shift_cut_rpm45, { shift_cut_on && shift_cut_auto } field = "Shift RPM 5-6", shift_cut_rpm56, { shift_cut_on && shift_cut_auto } dialog = fan_control, "Fan Control" topicHelp = "file://$getProjectsDirPath()/docs/Megasquirt3_TunerStudio_MS_Lite_Reference-1.5.pdf#fanctl" field = "Fan Control On", fanctl_settings_on field = "Mode", fanctl1_mode, { fanctl_settings_on } field = "Frequency", fanctl1_freq, { fanctl_settings_on && fanctl1_mode } field = "Invert output", fanctl1_inv, { fanctl_settings_on && fanctl1_mode } field = "Duty for off", fanctl1_duty_off, { fanctl_settings_on && fanctl1_mode } field = "Duty min speed", fanctl1_duty_min, { fanctl_settings_on && fanctl1_mode } field = "Duty full speed", fanctl1_duty_full, { fanctl_settings_on && fanctl1_mode } field = "Fan Control Idles up?", fanctl_settings_idleup, { fanctl_settings_on } field = "Output Pin", fanctl_settings_pin, { fanctl_settings_on } field = "Idle-up Delay", fanctl_idleup_delay, { fanctl_settings_on && fanctl_settings_idleup } field = "Idle-up Duty", fanctl_idleup_adder_duty, { fanctl_settings_on && fanctl_settings_idleup && ((IdleCtl == 2) || (IdleCtl == 4)) } field = "Idle-up Steps", fanctl_idleup_adder_steps, { fanctl_settings_on && fanctl_settings_idleup && (IdleCtl == 3) } field = "Idle-up Target Increase", fan_idleup_cl_targetadder, { fanctl_settings_on && (IdleCtl > 1) && (IdleCtl_alg == 1) } field = "Fan On Temperature", fanctl_ontemp, { fanctl_settings_on } field = "Fan Off Temperature", fanctl_offtemp, { fanctl_settings_on } field = "Full speed Temperature", fanctl1_temp_full, { fanctl_settings_on && fanctl1_mode } field = "Allow fan When Engine Off", fanctl_opt2_engineoff, { fanctl_settings_on } field = "Fan On With AC On?", fan_ctl_settings_acfan, { fanctl_settings_on && ac_idleup_settings } field = "Fan Shutoff" field = "TPS Shutoff Enable", fanctl_opt2_tps, { fanctl_settings_on } field = "TPS Shutoff", fan_idleup_tps_offpoint, { fanctl_settings_on && fanctl_opt2_tps } field = "TPS Hysteresis", fan_idleup_tps_hyst, { fanctl_settings_on && fanctl_opt2_tps } field = "VSS Shutoff Enable", fanctl_opt2_vss, { fanctl_settings_on } field = "VSS Shutoff", fan_idleup_vss_offpoint, { fanctl_settings_on && (vss_opt0_1) && fanctl_opt2_vss } field = "VSS Hyst", fan_idleup_vss_hyst, { fanctl_settings_on && (vss_opt0_1) && fanctl_opt2_vss } dialog = ac_idleup, "Air Conditioning Idle-Up" topicHelp = "file://$getProjectsDirPath()/docs/Megasquirt3_TunerStudio_MS_Lite_Reference-1.5.pdf#acidle" field = "A/C Idle-Up", ac_idleup_settings field = "Output", ac_idleup_io_out, { ac_idleup_settings } field = "Invert?", ac_idleup_set2_outinv, { ac_idleup_settings && ac_idleup_io_out } field = "Idle-Up Input", ac_idleup_io_in, { ac_idleup_settings } field = "Input Polarity", ac_idleup_settings_inv, { ac_idleup_settings } field = "Idle-Up Delay", ac_idleup_delay, { ac_idleup_settings } field = "Idle-Up Min RPM", ac_idleup_min_rpm, { ac_idleup_settings } field = "Compressor delay since last on", ac_delay_since_last_on, { ac_idleup_settings } field = "Idle-up Duty", ac_idleup_adder_duty, { ((IdleCtl == 2) || (IdleCtl == 4)) && ac_idleup_settings } field = "Idle-up Steps", ac_idleup_adder_steps, { (IdleCtl == 3) && ac_idleup_settings } field = "Idle-up Target RPM Adder", ac_idleup_cl_targetadder, { ac_idleup_settings && (IdleCtl > 1) && (IdleCtl_alg == 1) } field = "A/C compressor Shutoff" field = "TPS Shutoff Enable", ac_idleup_set2_tps, { ac_idleup_settings } field = "TPS Shutoff", ac_idleup_tps_offpoint, { ac_idleup_settings && ac_idleup_set2_tps} field = "TPS Hysteresis", ac_idleup_tps_hyst, { ac_idleup_settings && ac_idleup_set2_tps} field = "VSS Shutoff Enable", ac_idleup_set2_vss, { ac_idleup_settings } field = "VSS Shutoff", ac_idleup_vss_offpoint, { ac_idleup_settings && (vss_opt0_1) && ac_idleup_set2_vss } field = "VSS Hysteresis", ac_idleup_vss_hyst, { ac_idleup_settings && (vss_opt0_1) && ac_idleup_set2_vss } field = "RPM Shutoff Enable", ac_idleup_set2_rpm, { ac_idleup_settings } field = "Maximum RPM", ac_idleup_max_rpm, { ac_idleup_settings && ac_idleup_set2_rpm } dialog = sensor_source, "", yAxis field = "Sensor - Source" field = "01", sensor01_source field = "02", sensor02_source field = "03", sensor03_source field = "04", sensor04_source field = "05", sensor05_source field = "06", sensor06_source field = "07", sensor07_source field = "08", sensor08_source dialog = sensor_sourceb, "", yAxis field = "Sensor - Source" field = "09", sensor09_source field = "10", sensor10_source field = "11", sensor11_source field = "12", sensor12_source field = "13", sensor13_source field = "14", sensor14_source field = "15", sensor15_source field = "16", sensor16_source dialog = sensor_alias, "", yAxis field = "Field Name" field = "", sensor01Alias field = "", sensor02Alias field = "", sensor03Alias field = "", sensor04Alias field = "", sensor05Alias field = "", sensor06Alias field = "", sensor07Alias field = "", sensor08Alias dialog = sensor_aliasb, "", yAxis field = "Field Name" field = "", sensor09Alias field = "", sensor10Alias field = "", sensor11Alias field = "", sensor12Alias field = "", sensor13Alias field = "", sensor14Alias field = "", sensor15Alias field = "", sensor16Alias dialog = sensor_trans, "", yAxis field = "Transformation" field = "", sensor01_trans, {sensor01_source} field = "", sensor02_trans, {sensor02_source} field = "", sensor03_trans, {sensor03_source} field = "", sensor04_trans, {sensor04_source} field = "", sensor05_trans, {sensor05_source} field = "", sensor06_trans, {sensor06_source} field = "", sensor07_trans, {sensor07_source} field = "", sensor08_trans, {sensor08_source} dialog = sensor_transb, "", yAxis field = "Transformation" field = "", sensor09_trans, {sensor09_source} field = "", sensor10_trans, {sensor10_source} field = "", sensor11_trans, {sensor11_source} field = "", sensor12_trans, {sensor12_source} field = "", sensor13_trans, {sensor13_source} field = "", sensor14_trans, {sensor14_source} field = "", sensor15_trans, {sensor15_source} field = "", sensor16_trans, {sensor16_source} dialog = sensor_val0, "", yAxis field = "min value" field = "", sensor01_val0, {sensor01_source && ( (sensor01_trans == 1) || (sensor01_trans == 9) )} field = "", sensor02_val0, {sensor02_source && ( (sensor02_trans == 1) || (sensor02_trans == 9) )} field = "", sensor03_val0, {sensor03_source && ( (sensor03_trans == 1) || (sensor03_trans == 9) )} field = "", sensor04_val0, {sensor04_source && ( (sensor04_trans == 1) || (sensor04_trans == 9) )} field = "", sensor05_val0, {sensor05_source && ( (sensor05_trans == 1) || (sensor05_trans == 9) )} field = "", sensor06_val0, {sensor06_source && ( (sensor06_trans == 1) || (sensor06_trans == 9) )} field = "", sensor07_val0, {sensor07_source && ( (sensor07_trans == 1) || (sensor07_trans == 9) )} field = "", sensor08_val0, {sensor08_source && ( (sensor08_trans == 1) || (sensor08_trans == 9) )} dialog = sensor_val0b, "", yAxis field = "min value" field = "", sensor09_val0, {sensor09_source && ( (sensor09_trans == 1) || (sensor09_trans == 9) )} field = "", sensor10_val0, {sensor10_source && ( (sensor10_trans == 1) || (sensor10_trans == 9) )} field = "", sensor11_val0, {sensor11_source && ( (sensor11_trans == 1) || (sensor11_trans == 9) )} field = "", sensor12_val0, {sensor12_source && ( (sensor12_trans == 1) || (sensor12_trans == 9) )} field = "", sensor13_val0, {sensor13_source && ( (sensor13_trans == 1) || (sensor13_trans == 9) )} field = "", sensor14_val0, {sensor14_source && ( (sensor14_trans == 1) || (sensor14_trans == 9) )} field = "", sensor15_val0, {sensor15_source && ( (sensor15_trans == 1) || (sensor15_trans == 9) )} field = "", sensor16_val0, {sensor16_source && ( (sensor16_trans == 1) || (sensor16_trans == 9) )} dialog = sensor_max, "", yAxis field = "max value" field = "", sensor01_max, {sensor01_source && ( (sensor01_trans == 1) || (sensor01_trans == 9) )} field = "", sensor02_max, {sensor02_source && ( (sensor02_trans == 1) || (sensor02_trans == 9) )} field = "", sensor03_max, {sensor03_source && ( (sensor03_trans == 1) || (sensor03_trans == 9) )} field = "", sensor04_max, {sensor04_source && ( (sensor04_trans == 1) || (sensor04_trans == 9) )} field = "", sensor05_max, {sensor05_source && ( (sensor05_trans == 1) || (sensor05_trans == 9) )} field = "", sensor06_max, {sensor06_source && ( (sensor06_trans == 1) || (sensor06_trans == 9) )} field = "", sensor07_max, {sensor07_source && ( (sensor07_trans == 1) || (sensor07_trans == 9) )} field = "", sensor08_max, {sensor08_source && ( (sensor08_trans == 1) || (sensor08_trans == 9) )} dialog = sensor_maxb, "", yAxis field = "max value" field = "", sensor09_max, {sensor09_source && ( (sensor09_trans == 1) || (sensor09_trans == 9) )} field = "", sensor10_max, {sensor10_source && ( (sensor10_trans == 1) || (sensor10_trans == 9) )} field = "", sensor11_max, {sensor11_source && ( (sensor11_trans == 1) || (sensor11_trans == 9) )} field = "", sensor12_max, {sensor12_source && ( (sensor12_trans == 1) || (sensor12_trans == 9) )} field = "", sensor13_max, {sensor13_source && ( (sensor13_trans == 1) || (sensor13_trans == 9) )} field = "", sensor14_max, {sensor14_source && ( (sensor14_trans == 1) || (sensor14_trans == 9) )} field = "", sensor15_max, {sensor15_source && ( (sensor15_trans == 1) || (sensor15_trans == 9) )} field = "", sensor16_max, {sensor16_source && ( (sensor16_trans == 1) || (sensor16_trans == 9) )} dialog = sensor_lag, "", yAxis field = "Lag Factor" field = "", sensor01LF, {sensor01_source} field = "", sensor02LF, {sensor02_source} field = "", sensor03LF, {sensor03_source} field = "", sensor04LF, {sensor04_source} field = "", sensor05LF, {sensor05_source} field = "", sensor06LF, {sensor06_source} field = "", sensor07LF, {sensor07_source} field = "", sensor08LF, {sensor08_source} dialog = sensor_lagb, "", yAxis field = "Lag Factor" field = "", sensor09LF, {sensor09_source} field = "", sensor10LF, {sensor10_source} field = "", sensor11LF, {sensor11_source} field = "", sensor12LF, {sensor12_source} field = "", sensor13LF, {sensor13_source} field = "", sensor14LF, {sensor14_source} field = "", sensor15LF, {sensor15_source} field = "", sensor16LF, {sensor16_source} dialog = sensors_top, "Sensors 1-8", xAxis panel = sensor_source panel = sensor_alias panel = sensor_trans panel = sensor_val0 panel = sensor_max panel = sensor_lag dialog = sensors_btm, "Sensors 9-16", xAxis panel = sensor_sourceb panel = sensor_aliasb panel = sensor_transb panel = sensor_val0b panel = sensor_maxb panel = sensor_lagb dialog = sensors_data, "", yAxis panel = sensors_top panel = sensors_btm dialog = sensors_temp, "", xAxis field = "Allow Input Sharing", opt142_gs_share field = "CLT/MAT Units", sensor_temp dialog = sensors, "Generic Sensor Inputs", border topicHelp = "file://$getProjectsDirPath()/docs/Megasquirt3_TunerStudio_MS_Lite_Reference-1.5.pdf#gensens" panel = sensors_data, North panel = sensors_temp, South dialog = ITB_settingsw, "ITB settings" field = "Percent Baro Switchpoint", ITB_load_mappoint field = "Idle TPS Threshold", ITB_load_idletpsthresh dialog = ITB_settingsc, "Notes" field = "1. Validate that TPS, MAP and Baro read correctly. 2. Set the %baro switchpoint." field = "3. Configure the left curve from datalogs. 4. Set the right curve according to preference." dialog = ITB_settings, "", xAxis panel = ITB_settingsw, West panel = ITB_settingsc, Center dialog = ITBcombined, "ITB Load Settings", border topicHelp = "file://$getProjectsDirPath()/docs/Megasquirt3_TunerStudio_MS_Lite_Reference-1.5.pdf#itbload" panel = ITB_settings, South panel = ITB_load_switchpoint_curve, West panel = ITB_load_loadvals_curve, East dialog = mafdialog, "MAF Settings", yAxis topicHelp = "file://$getProjectsDirPath()/docs/Megasquirt3_TunerStudio_MS_Lite_Reference-1.5.pdf#mafset" field = "Sensor Type", MAFOption_t field = "Voltage Input Port", MAFOption, {MAFOption_t == 0} field = "Frequency Input Port", MAFOption_f, {MAFOption_t == 1} field = "Low Frequency", maf_freq0, {MAFOption_t == 1} field = "High Frequency", maf_freq1, {MAFOption_t == 1} field = "MAT Correction Curve", feature7_mafmat, {MAFOption_t < 2} field = "Use VE1 As Trim Table", feature7_maftrim, {(algorithm == 5) && (MAFOption_t < 2) } field = "MAF Sensor Range", maf_range, {MAFOption_t < 2} field = "Set the range before loading a flow curve." dialog = battcalib, "Calibrate Battery Voltage" topicHelp = "file://$getProjectsDirPath()/docs/Megasquirt3_TunerStudio_MS_Lite_Reference-1.5.pdf#calbatt" field = "Supply Voltage At Zero ADC Count", batt0 field = "Supply voltage At Max ADC Count", battmax field = "" field = "Typical values are 0.0V and 29.7V" dialog = waterinj_topl, "" field = "Enable Water/Meth Injection", water_freq_on field = "Pump Output", water_pins_pump, {water_freq_on} field = "Valve Style", water_freq_type, {water_freq_on} field = "Frequency", water_freq, {water_freq_on && (water_freq_type ==2)} field = "Valve Output", water_pins_valve, {water_freq_on && water_freq_type} dialog = waterinj_topr, "" field = "Enable When.." field = "TPS >", water_tps, {water_freq_on} field = "RPM >", water_rpm, {water_freq_on} field = "MAP >", water_map, {water_freq_on} field = "MAT >", water_mat, {water_freq_on} field = "" field = "Low Fluid Level Input", water_pins_in_shut, {water_freq_on} dialog = waterinj_top, "", border panel = waterinj_topl, West panel = waterinj_topr, East dialog = waterinj, "Water Injection", border topicHelp = "file://$getProjectsDirPath()/docs/Megasquirt3_TunerStudio_MS_Lite_Reference-1.5.pdf#water" panel = waterinj_top, North panel = waterinjTbl, Center dialog = vss1, "Vehicle Speed Sensor 1" field = "VSS1 Input Type", vss_opt0_1 field = "Analogue Input", vss1_an, {vss_opt0_1 == 2} field = "Full Scale Speed", vss1_an_max, {vss_opt0_1 == 2} field = "Digital Input", vss_opt1, {vss_opt0_1 == 1} field = "Wheel Diameter", wheeldia1, {vss_opt1 && (((vss_opt0_1 == 1) && (vss_opt1 != 14) && (vss1_pos < 2)) || (gear_method == 1) || (ss_opt1 == 14))} field = "VSS Position/Type", vss1_pos, {vss_opt0_1 == 1} field = "Pulses", vss1_can_scale_pulse, {vss_opt1 && (vss_opt0_1 == 1) && (vss_opt1 != 14) && (vss1_pos > 1)} field = "Speed Sensor #Teeth", reluctorteeth1, {vss_opt1 && (vss_opt0_1 == 1) && (vss_opt1 != 14) && (vss1_pos < 2)} field = "PWM Port", vss1_pwmseq, {(vss_opt1 ==15) && (vss_opt0_1 == 1)} field = "Scaler", vss1_can_scale, {(vss_opt1 ==14) && (vss_opt0_1 == 1)} field = "Smoothing lag factor", vss1LF, {vss_opt0_1} dialog = vss2, "Vehicle speed sensor 2" field = "VSS2 Input Type", vss_opt0_2 field = "Analogue Input", vss2_an, {vss_opt0_2 == 2} field = "Full Scale Speed", vss2_an_max, {vss_opt0_2 == 2} field = "Digital Input", vss_opt2, {vss_opt0_2 == 1} field = "Wheel Diameter", wheeldia2, {vss_opt2 && (((vss_opt0_2 == 1) && (vss_opt2 != 14) && (vss2_pos < 2)) || (gear_method == 1))} field = "VSS Position/Type", vss2_pos, {vss_opt0_2 == 1} field = "Pulses", vss2_can_scale_pulse, {vss_opt2 && (vss_opt0_2 == 1) && (vss_opt2 != 14) && (vss2_pos > 1)} field = "Speed Sensor #Teeth", reluctorteeth2, {vss_opt2 && (vss_opt0_2 == 1) && (vss_opt2 != 14) && (vss2_pos < 2)} field = "PWM Port", vss2_pwmseq, {(vss_opt2 ==15) && (vss_opt0_2 == 1)} field = "Scaler", vss2_can_scale, {(vss_opt2 ==14) && (vss_opt0_2 == 1)} field = "Smoothing Lag Factor", vss2LF, {vss_opt0_2} dialog = vss3, "Vehicle Speed Sensor 3 (Matches VSS1)" field = "VSS3 Input Type", vss_opt0_3, {vss_opt0_1} field = "Analogue Input", vss3_an, {vss_opt0_3 && (vss_opt0_1 == 2)} field = "Digital Input", vss_opt3, {vss_opt0_3 && (vss_opt0_1 == 1)} field = "PWM Port", vss3_pwmseq, {(vss_opt3 ==15) && vss_opt0_3 && (vss_opt0_1 == 1)} dialog = vss4, "Vehicle speed sensor 4 (matches VSS2)" field = "VSS4 input type", vss_opt0_4, {vss_opt0_2} field = "Analogue Input", vss4_an, {vss_opt0_4 && (vss_opt0_2 == 2)} field = "Digital Input", vss_opt4, {vss_opt0_4 && (vss_opt0_2 == 1)} field = "PWM Port", vss4_pwmseq, {(vss_opt4 ==15) && vss_opt0_4 && (vss_opt0_4 == 1)} dialog = vssout, "VSS Output" field = "VSS Output", vssout_opt field = "VSSout Units", vssout_optunits, { vssout_opt } field = "Scale", vssout_scale, { vssout_opt } dialog = vssdotlag, "VSSdot Smoothing" field = "Sample Interval", vssdot_int field = "Lag factor", vssdotLF dialog = vsssamp, "VSS Sampling" field = "VSS Sample Interval", vss_samp_int dialog = gears, "Gear detection" field = "Final Drive Ratio", fdratio1 field = "Method", gear_method field = "Number Of Gears", gear_no, {gear_method} field = "1st Ratio", gear1ratio, { (gear_method == 1) } field = "2nd Ratio", gear2ratio, { (gear_method == 1) && (gear_no > 1) } ; would be pretty pointless otherwise! field = "3rd Ratio", gear3ratio, { (gear_method == 1) && (gear_no > 2) } field = "4th Ratio", gear4ratio, { (gear_method == 1) && (gear_no > 3) } field = "5th Ratio", gear5ratio, { (gear_method == 1) && (gear_no > 4) } field = "6th Ratio", gear6ratio, { (gear_method == 1) && (gear_no > 5) } field = "" field = "Input Port", gear_port_an, { (gear_method == 2) } field = "Neutral Voltage", gear0v, { (gear_method == 2) } field = "1st Gear Voltage", gear1v, { (gear_method == 2) } field = "2nd Gear Voltage", gear2v, { (gear_method == 2) && (gear_no > 1) } field = "3rd Gear Voltage", gear3v, { (gear_method == 2) && (gear_no > 2) } field = "4th Gear Voltage", gear4v, { (gear_method == 2) && (gear_no > 3) } field = "5th Gear Voltage", gear5v, { (gear_method == 2) && (gear_no > 4) } field = "6th Gear Voltage", gear6v, { (gear_method == 2) && (gear_no > 5) } dialog = vssunits, "Units" field = "Preferred Speed Units", prefSpeedUnits field = "Preferred Length Units", prefLengthUnits dialog = ssnorth, "", xAxis panel = vss1 panel = vss2 dialog = vss34, "", xAxis panel = vss3 panel = vss4 dialog = gearsunits, "", yAxis panel = gears panel = vssunits dialog = vssoutdotr, "", yAxis panel = vssdotlag panel = vsssamp dialog = vssoutdot, "", xAxis panel = vssout panel = vssoutdotr dialog = sssouth, "", yAxis panel = vss34 panel = vssoutdot dialog = speedsensorsmain, "", yAxis panel = ssnorth panel = sssouth dialog = speedsensors, "Speed and Gear Sensors", xAxis topicHelp = "file://$getProjectsDirPath()/docs/Megasquirt3_TunerStudio_MS_Lite_Reference-1.5.pdf#speedgear" panel = speedsensorsmain panel = gearsunits dialog = ss, "Shaft Speed Sensors" topicHelp = "file://$getProjectsDirPath()/docs/Megasquirt3_TunerStudio_MS_Lite_Reference-1.5.pdf#shaftspeed" field = "Sensor 1", ss_opt1 field = "Speed sensor #teeth", reluctorteeth3, {ss_opt1 && ss_opt1<14} field = "High Speed Input", ss_opt1_spd, {(ss_opt1 == 4) || (ss_opt1 == 10) || (ss_opt1 == 11) || (ss_opt1 == 12)} field = "Smoothing Lag Factor", ss1LF ;, {ss_opt2 && ss_opt2<15} field = "" field = "Sensor 2", ss_opt2 field = "Speed Sensor #Teeth", reluctorteeth4, {ss_opt2 && ss_opt2<15} field = "High Speed Input", ss_opt2_spd, {(ss_opt2 == 4) || (ss_opt2 == 10) || (ss_opt2 == 11) || (ss_opt2 == 12)} field = "Smoothing Lag Factor", ss2LF ;, {ss_opt2 && ss_opt2<15} dialog = accelerometer, "Accelerometer Parameters" topicHelp = "file://$getProjectsDirPath()/docs/Megasquirt3_TunerStudio_MS_Lite_Reference-1.5.pdf#accelerometer" field = "CANbus Accelerometer", canrx1_opt_accel field = "CAN base address", canrx1_rt_accel_base, {canrx1_opt_accel == 1} field = "X zero offset", can_accelx_offset, {canrx1_opt_accel == 2} field = "Y zero offset", can_accely_offset, {canrx1_opt_accel == 2} field = "Z zero offset", can_accelz_offset, {canrx1_opt_accel == 2} field = "Analog X Input", accXport, {canrx1_opt_accel == 0} field = "Analog Y Input", accYport, {canrx1_opt_accel == 0} field = "Analog Z Input", accZport, {canrx1_opt_accel == 0} field = "X -1g Calib.", accXcal1, { accXport && (canrx1_opt_accel == 0) } field = "X +1g Calib.", accXcal2, { accXport && (canrx1_opt_accel == 0) } field = "Y -1g Calib.", accYcal1, { accYport && (canrx1_opt_accel == 0) } field = "Y +1g Calib.", accYcal2, { accYport && (canrx1_opt_accel == 0) } field = "Z -1g Calib.", accZcal1, { accZport && (canrx1_opt_accel == 0) } field = "Z +1g Calib.", accZcal2, { accZport && (canrx1_opt_accel == 0) } field = "Lag factor", accxyzLF dialog = sdcard_top, "" field = "SD Card Logging:", log_style_on2 field = "Datalog Button", log_style2_but, {log_style_on2 == 2} field = "Trigger", log_style4_opt, {log_style_on2 == 3} field = "RPM >", log_trig_rpm, {(log_style_on2 == 3) && (log_style4_opt == 0)} field = "TPS >", log_trig_tps, {(log_style_on2 == 3) && (log_style4_opt == 1)} field = "MAP >", log_trig_map, {(log_style_on2 == 3) && (log_style4_opt == 2)} field = "LED Indicator", log_style_led, {log_style_on2} field = "Log Data Block Size", log_style_block, {log_style_on2} field = "Interleave GPS Data", log_style_gps, {log_style_on2} field = "Sampling", log_style2_samp, {(log_style_block != 1) && log_style_on2 } field = "Sample Interval", log_int, {(log_style_block != 1) && log_style_on2 } displayOnlyField = "Frames/Second", log_rate, {(log_style_block != 1) && log_style_on2 } field = "Log File Max Duration", log_length, {log_style_on2} field = "Action after log completed", log_style2_cont, {log_style_on2} field = "Stream Input", log_style3_adc, {log_style_block == 1} field = "SPI Comms Speed", log_style2_ledspd, {log_style_on2} field = "Trigger pulse output", sdpulse_out, {log_style_on2 >= 2} dialog = sdcard_btm, "" ; Needs to be 119 for 128 byte SD logs or 55 for 64 byte logFieldSelector = dataLogFieldSelector, "Log Field Selection", logFieldOffset, logFieldLength, { sdlog_maxnumbytes } dialog = sdcard_datalog, "SD Card Datalogging", xAxis panel = sdcard_top panel = dataLogFieldSelector dialog = N2OSystem_topl, "" field = "Nitrous Control", N2Oopt_2 field = "Enable N2O When Above", N2ORpm, { N2Oopt_2 } field = "And Coolant Temp Above", N2OClt, { N2Oopt_2 } field = "And TPS >", N2OTps, { N2Oopt_2 } field = "Max RPM", N2ORpmMax, { N2Oopt_2 } field = "Enrich Which Bank", N2Oopt_01, { N2Oopt_2 } dialog = N2OSystem_topr, "" field = "On/Off vs Progressive Mode", N2Oopt2_prog, { N2Oopt_2 } field = "Time, RPM, VSS-Based", N2Oopt2_prog_time, { N2Oopt_2 && N2Oopt2_prog } field = "Action after a pedal", n2o_opt3_pedal, { N2Oopt_2 && N2Oopt2_prog && (N2Oopt2_prog_time == 1) } field = "Timeout for pedal", n2o_pedal_time, { N2Oopt_2 && N2Oopt2_prog && (N2Oopt2_prog_time == 1) && (n2o_opt3_pedal == 1) } field = "Solenoid Frequency", N2Oopt2_prog_freq, { N2Oopt_2 && N2Oopt2_prog } field = "Fuel Solenoid Frequency", N2Oopt2_prog_freqf, { N2Oopt_2 && N2Oopt2_prog && (n2o1f_pins > 0) } field = "AFR Safety Uses AFR2 Targets", N2Oopt_4, { N2Oopt_2 } field = "Fuel adder percent calc", N2Oopt2_fuel, { N2Oopt2_prog && (N2Oopt2_prog_time != 0) } field = "Timing return delay time", n2o_timing_delay, { N2Oopt_2 } field = "Timing return ramp time", n2o_timing_taper, { N2Oopt_2 } field = "" field = "READ THE MANUAL BEFORE USING NITROUS" dialog = N2OSystem1, "Nitrous System Stage 1" field = "Stage 1 Output - Nitrous", n2o1n_pins, { N2Oopt_2 } field = "Stage 1 Output - Fuel", n2o1f_pins, { N2Oopt_2 } field = "Enable Input On:", N2Oopt_pins, { N2Oopt_2 } field = "Additional Fuel PW @ N2O Min RPM", N2OPWLo, { N2Oopt_2 && !(N2Oopt2_prog && (N2Oopt2_prog_time == 0)) } field = "Additional Fuel PW @ N2O Max RPM", N2OPWHi, { N2Oopt_2 && !(N2Oopt2_prog && (N2Oopt2_prog_time == 0)) } field = "Retard Ignition By", N2OAngle, { N2Oopt_2 && !N2Oopt2_prog} field = "Nitrous Delay After Launch", N2Odel_launch, { N2Oopt_2 && launch_opt_on } field = "Nitrous Delay After Flat Shift", N2Odel_flat, { N2Oopt_2 && launch_opt_on } field = "Allow Nitrous During Launch", N2Oopt_5, { N2Oopt_2 && launch_opt_on } field = "Max MAP During Launch", N2Olaunchmaxmap,{ N2Oopt_2 && launch_opt_on && N2Oopt_5} dialog = N2OSystem2, "Nitrous System Stage 2" field = "Nitrous stage 2", N2Oopt_3, { N2Oopt_2 } field = "Enable switch", n2o_opt3_enable2, { N2Oopt_2 } field = "Enable switch input", n2o_enable2_pin, { N2Oopt_2 && n2o_opt3_enable2} field = "Stage 2 Output - Nitrous", n2o2n_pins, { N2Oopt_2 && N2Oopt_3 } field = "Stage 2 Output - Fuel", n2o2f_pins, { N2Oopt_2 && N2Oopt_3 } field = "Enable Stage 2 Above", N2O2Rpm, { N2Oopt_2 && N2Oopt_3 && !N2Oopt2_prog } field = "Max RPM", N2O2RpmMax, { N2Oopt_2 && N2Oopt_3 && !N2Oopt2_prog } field = "Delay After Stage1", N2O2delay, { N2Oopt_2 && N2Oopt_3 && (!N2Oopt2_prog || (N2Oopt2_prog_time==0)) } field = "Retard Ignition By", N2O2Angle, { N2Oopt_2 && N2Oopt_3 && !N2Oopt2_prog } field = "Additional Fuel PW @ N2O Min RPM", N2O2PWLo, { N2Oopt_2 && N2Oopt_3 && !(N2Oopt2_prog && (N2Oopt2_prog_time == 0)) } field = "Additional Fuel PW @ N2O Max RPM", N2O2PWHi, { N2Oopt_2 && N2Oopt_3 && !(N2Oopt2_prog && (N2Oopt2_prog_time == 0)) } dialog = N2OSystem_top, "", border panel = N2OSystem_topl, West panel = N2OSystem_topr, East dialog = N2OSystems, "", border panel = N2OSystem1, West panel = N2OSystem2, East dialog = nitrous, "Nitrous System", border topicHelp = "file://$getProjectsDirPath()/docs/Megasquirt3_TunerStudio_MS_Lite_Reference-1.5.pdf#nitrous" panel = N2OSystem_top, North panel = N2OSystems, South dialog = n2o1_curves_time, "" panel = n2o1_duty_time, North panel = n2o1_fuelpct_time, Center, {N2Oopt2_fuel} panel = n2o1_retard_time, South dialog = n2o2_curves_time, "" panel = n2o2_duty_time, North, {N2Oopt_3} panel = n2o2_fuelpct_time, Center, {N2Oopt_3 && N2Oopt2_fuel} panel = n2o2_retard_time, South, {N2Oopt_3} dialog = nitrous_curves_time, "Nitrous - Time-Based Progressive", xAxis topicHelp = "file://$getProjectsDirPath()/docs/Megasquirt3_TunerStudio_MS_Lite_Reference-1.5.pdf#nitrous" panel = n2o1_curves_time panel = n2o2_curves_time dialog = n2o1_curves_rpm, "" panel = n2o1_duty_rpm panel = n2o1_pw_rpm panel = n2o1_retard_rpm dialog = n2o2_curves_rpm, "" panel = n2o2_duty_rpm, North, {N2Oopt_3} panel = n2o2_pw_rpm, Center, {N2Oopt_3} panel = n2o2_retard_rpm, South, {N2Oopt_3} dialog = nitrous_curves_rpm, "Nitrous - RPM-Based Progressive", xAxis topicHelp = "file://$getProjectsDirPath()/docs/Megasquirt3_TunerStudio_MS_Lite_Reference-1.5.pdf#nitrous" panel = n2o1_curves_rpm panel = n2o2_curves_rpm dialog = n2o1_curves_vss, "" panel = n2o1_duty_vss, North panel = n2o1_fuelpct_vss, Center, {N2Oopt2_fuel} panel = n2o1_retard_vss, South dialog = n2o2_curves_vss, "" panel = n2o2_duty_vss, North, {N2Oopt_3} panel = n2o2_fuelpct_vss, Center, {N2Oopt_3 && N2Oopt2_fuel} panel = n2o2_retard_vss, South, {N2Oopt_3} dialog = nitrous_curves_vss, "Nitrous - VSS-Based Progressive", xAxis topicHelp = "file://$getProjectsDirPath()/docs/Megasquirt3_TunerStudio_MS_Lite_Reference-1.5.pdf#nitrous" panel = n2o1_curves_vss panel = n2o2_curves_vss dialog = overboost, "Overboost Engine Protection" field = "Overboost Protection", OverBoostOption field = "Maximum MAP (Boost)", OverBoostKpa, { OverBoostOption > 0 } field = "Hysteresis", OverBoostHyst, { OverBoostOption > 0 } field = "Boost Tolerance", OverBoostOption_tol, { boost_ctl_settings_on && OverBoostOption && boost_ctl_settings_cl} field = "Tolerance", boosttol, {boost_ctl_settings_on && OverBoostOption && OverBoostOption_tol && boost_ctl_settings_cl} field = "Overboost Switching", tsw_pin_ob, { (OverBoostOption > 0) && (!(dualfuel_sw_on && (dualfuel_opt_mode == 2) && (dualfuel_sw2_ob )))} field = "Alt. Maximum MAP (Boost)", OverBoostKpa2, { (tsw_pin_ob && (OverBoostOption > 0)) || dualfuel_sw2_ob } dialog = boostfeat, "" field = "Boost Table Switching", boost_feats_tsw, {boost_ctl_settings_on} field = "Boost Table Switching Gear", boost_gear_switch, { boost_feats_tsw == 15 } field = "Boost Timed Percent", boost_feats_timed, {boost_ctl_settings_on && launch_opt_on} field = "Specific Launch Duty/Target", boost_feats_launch, {boost_ctl_settings_on && launch_opt_on} field = "Launch Boost Duty", boost_launch_duty, {boost_ctl_settings_on && launch_opt_on && boost_feats_launch && (boost_ctl_settings_cl == 0) && !boost_ctl_settings_dome} field = "Launch Boost Target", boost_launch_target, {boost_ctl_settings_on && launch_opt_on && boost_feats_launch && (boost_ctl_settings_cl || boost_ctl_settings_dome)} field = "Boost vs Speed / Gear / Time", boost_vss, {boost_ctl_settings_on} field = "Above TPS", boost_vss_tps, {boost_ctl_settings_on && boost_vss} field = "Bias table per gear", boost_vss_biasgear, {boost_ctl_settings_on && boost_ctl_settings_cl} field = "Per Gear Targets:" dialog = boostgeartargsl, "", yAxis field = "1", boost_geartarg1, {(boost_vss == 3) && gear_method && (gear_no > 0) && (boost_ctl_settings_cl || boost_ctl_settings_dome) && boost_ctl_settings_on} field = "2", boost_geartarg2, {(boost_vss == 3) && gear_method && (gear_no > 1) && (boost_ctl_settings_cl || boost_ctl_settings_dome) && boost_ctl_settings_on} field = "3", boost_geartarg3, {(boost_vss == 3) && gear_method && (gear_no > 2) && (boost_ctl_settings_cl || boost_ctl_settings_dome) && boost_ctl_settings_on} dialog = boostgeartargsr, "", yAxis field = "4", boost_geartarg4, {(boost_vss == 3) && gear_method && (gear_no > 3) && (boost_ctl_settings_cl || boost_ctl_settings_dome) && boost_ctl_settings_on} field = "5", boost_geartarg5, {(boost_vss == 3) && gear_method && (gear_no > 4) && (boost_ctl_settings_cl || boost_ctl_settings_dome) && boost_ctl_settings_on} field = "6", boost_geartarg6, {(boost_vss == 3) && gear_method && (gear_no > 5) && (boost_ctl_settings_cl || boost_ctl_settings_dome) && boost_ctl_settings_on} dialog = boostgeartargs, "", border panel = boostgeartargsl, West panel = boostgeartargsr, East dialog = boostctlSettings, "Boost Control Settings" topicHelp = "file://$getProjectsDirPath()/docs/Megasquirt3_TunerStudio_MS_Lite_Reference-1.5.pdf#boost" field = "Boost Control Enabled", boost_ctl_settings_on field = "System type", boost_ctl_settings_dome, {boost_ctl_settings_on} field = "Solenoid Freq. Range", boost_ctl_pwm, {boost_ctl_settings_on && !boost_ctl_settings_dome} ; field = "Solenoid Frequency (Mid)", boost_ctl_pwm_scale, { boost_ctl_settings_on && (boost_ctl_pwm == 1) && !boost_ctl_settings_dome} ; field = "Boost Control Pin (Mid)", boost_ctl_pins_pwm, {boost_ctl_settings_on && (boost_ctl_pwm < 2) && !boost_ctl_settings_dome} field = "Solenoid Frequency (Slow)", boost_ctl_settings_freq, {boost_ctl_settings_on && (boost_ctl_pwm == 2) && !boost_ctl_settings_dome} field = "Boost Control Pin (Slow)", boost_ctl_pins, {boost_ctl_settings_on && (boost_ctl_pwm == 2) && !boost_ctl_settings_dome} field = "Output Polarity", boost_ctl_settings_invert_new, {boost_ctl_settings_on && !boost_ctl_settings_dome} field = "Minimum Duty", boost_ctl_closeduty, {boost_ctl_settings_on && !boost_ctl_settings_dome} field = "Maximum Duty", boost_ctl_openduty, {boost_ctl_settings_on && !boost_ctl_settings_dome} field = "Boost Control Lower CLT Threshold",boost_ctl_clt_threshold, {boost_ctl_settings_on} field = "Boost Control Lower Limit Delta", boost_ctl_lowerlimit, {boost_ctl_settings_on && boost_ctl_settings_cl} field = "Boost Control Upper Limit Delta", boost_ctl_upperlimit, {boost_ctl_settings_on && boost_ctl_settings_cl} field = "Boost Control Max Rate", boost_ctl_rate_disable, {boost_ctl_settings_on && boost_ctl_settings_cl} field = "Min/max range", boost_ctl_range1, {boost_ctl_settings_on && boost_ctl_settings_cl && (boost_ctl_settings_dome == 0)} field = "Algorithm", boost_ctl_settings_cl, {boost_ctl_settings_on && boost_ctl_settings_on} field = "Tuning Mode", boost_ctl_flags, {boost_ctl_settings_on && boost_ctl_settings_cl} slider = "Closed-Loop Sensitivity", boost_ctl_sensitivity, horizontal, {boost_ctl_settings_on && boost_ctl_settings_cl && ((boost_ctl_flags == 2) || (boost_ctl_flags == 3)) } field = "Proportional Gain", boost_ctl_Kp, {boost_ctl_settings_on && boost_ctl_settings_cl && (boost_ctl_flags == 3) } field = "Integral Gain", boost_ctl_Ki, {boost_ctl_settings_on && boost_ctl_settings_cl && (boost_ctl_flags == 3) } field = "Derivative Gain", boost_ctl_Kd, {boost_ctl_settings_on && boost_ctl_settings_cl && (boost_ctl_flags == 3) } field = "Use bias table only at part throttle", boost_ctl_settings_biasonly, {boost_ctl_settings_on && boost_ctl_settings_cl} dialog = boosteast, "" panel = overboost, North panel = boostfeat, Center panel = boostgeartargs, South dialog = boost, "Boost Control Settings", border panel = boostctlSettings, West panel = boosteast, East dialog = boostctlSettings2, "Boost Control Settings 2" topicHelp = "file://$getProjectsDirPath()/docs/Megasquirt3_TunerStudio_MS_Lite_Reference-1.5.pdf#boost2" field = "Boost Control Enabled", boost_ctl_settings_on2, {boost_ctl_settings_on} field = "Target duty and boost tables 2 are used." field = "Boost vs VSS or time or tableswitch not supported." field = "Frequencies same as channel 1" field = "Boost Control Pin (Mid)", boost_ctl_pins_pwm2, {boost_ctl_settings_on && boost_ctl_settings_on2 && (boost_ctl_pwm < 2)} field = "Boost Control Pin (Slow)", boost_ctl_pins2, {boost_ctl_settings_on && boost_ctl_settings_on2 && (boost_ctl_pwm == 2)} field = "" field = "Minimum Duty", boost_ctl_closeduty2, {boost_ctl_settings_on && boost_ctl_settings_on2 && boost_ctl_settings_cl2} field = "Maximum Duty", boost_ctl_openduty2, {boost_ctl_settings_on && boost_ctl_settings_on2 && boost_ctl_settings_cl2} field = "Boost Control Lower Limit", boost_ctl_lowerlimit2, {boost_ctl_settings_on && boost_ctl_settings_cl2 } field = "Boost Control Upper Limit", boost_ctl_upperlimit2, {boost_ctl_settings_on && boost_ctl_settings_cl2 } field = "Boost Control Max Rate", boost_ctl_rate_disable2, {boost_ctl_settings_on && boost_ctl_settings_cl2 } field = "" field = "Algorithm", boost_ctl_settings_cl2, {boost_ctl_settings_on && boost_ctl_settings_on2} slider = "Closed-Loop Sensitivity", boost_ctl_sensitivity2, horizontal, {boost_ctl_settings_on2 && boost_ctl_settings_cl2 && ((boost_ctl_flags2 == 2) || (boost_ctl_flags2 == 3)) } field = "Tuning Mode", boost_ctl_flags2, {boost_ctl_settings_on2 && boost_ctl_settings_cl2} field = "Proportional Gain", boost_ctl_Kp2, {boost_ctl_settings_on && boost_ctl_settings_on2 && boost_ctl_settings_cl2 && (boost_ctl_flags2 == 3) } field = "Integral Gain", boost_ctl_Ki2, {boost_ctl_settings_on && boost_ctl_settings_on2 && boost_ctl_settings_cl2 && (boost_ctl_flags2 == 3) } field = "Derivative Gain", boost_ctl_Kd2, {boost_ctl_settings_on && boost_ctl_settings_on2 && boost_ctl_settings_cl2 && (boost_ctl_flags2 == 3) } field = "MAP Sensor To Target", boost_ctl_sensor2, {boost_ctl_settings_on && boost_ctl_settings_on2 && boost_ctl_settings_cl2 && 0} field = "Must be defined in Generic Sensors" dialog = maxafrset, "" field = "Enable AFR Safety", maxafr_opt1_on field = "Warning Output", maxafr_opt1_led, { maxafr_opt1_on || egt_conf_action || fp_opt_safety || (water_pins_in_shut && water_freq_on) } field = "Load Axis", maxafr_opt1_load, { maxafr_opt1_on } field = "Check above Load", maxafr_en_load, { maxafr_opt1_on } field = "Check above RPM", maxafr_en_rpm, { maxafr_opt1_on } field = "Wait for", maxafr_en_time, { maxafr_opt1_on } field = "Kill spark For", maxafr_spkcut_time, { maxafr_opt1_on || egt_conf_action || fp_opt_safety || (water_pins_in_shut && water_freq_on) || oilpress_in_safety } field = "Then kill fuel until..." ;, "", { maxafr_opt1_on || egt_conf_action} field = "TPS Below", maxafr_ret_tps, { maxafr_opt1_on || egt_conf_action || fp_opt_safety || (water_pins_in_shut && water_freq_on) || oilpress_in_safety } field = "MAP Below", maxafr_ret_map, { maxafr_opt1_on || egt_conf_action || fp_opt_safety || (water_pins_in_shut && water_freq_on) || oilpress_in_safety } field = "RPM Below", maxafr_ret_rpm, { maxafr_opt1_on || egt_conf_action || fp_opt_safety || (water_pins_in_shut && water_freq_on) || oilpress_in_safety } dialog = maxafrTbls, "AFR Difference Table" panel = maxafr1Tbl dialog = maxafr, "AFR Safety System", border topicHelp = "file://$getProjectsDirPath()/docs/Megasquirt3_TunerStudio_MS_Lite_Reference-1.5.pdf#afrsafety" panel = maxafrset, West panel = maxafrTbls, Center dialog = egtwestn, "Configuration" field = "No. EGT inputs", egt_num field = "Input configuration", egt_conf_input, {egt_num} field = "Base CAN id", canegt_base, {egt_num && (egt_conf_input == 1)} field = "Base CAN id (8+)", canegt_base2, {(egt_num > 8) && (egt_conf_input == 1)} field = "Input numbering", egt_conf_numbering, {(egt_num > 4) && (egt_conf_input == 1)} field = "Calibration - see documentation" field = "Temp At 0V", egtcal_temp0, {egt_num && (egt_conf_input != 1)} field = "Temp At 5V", egtcal_tempmax, {egt_num && (egt_conf_input != 1)} dialog = egtwests, "Actions" field = "EGT Actions", egt_conf_action field = "Warning LED same as AFR safety" field = "Warn Temperature", egt_warn, {egt_conf_action} field = "Added Fuel", egt_addfuel, {egt_conf_action} field = "Add To", egt_conf_bank, {egt_conf_action} field = "Per cylinder", egt_conf_percyl, {egt_conf_action && (sequential == 2) } field = "Shutdown Engine", egt_conf_shutdown, {egt_conf_action} field = "Time > Warn Temp", egt_time, {egt_conf_action && egt_conf_shutdown} field = "Max Temperature", egt_max, {egt_conf_action && egt_conf_shutdown} field = "See AFR safety for shutdown options" dialog = egtwest, "", yAxis panel = egtwestn, North panel = egtwests, South dialog = egteast, "Data capture" field = "EGT 1 Channel", egt1port, { (egt_num > 0) } field = "EGT 2 Channel", egt2port, { (egt_num > 1) } field = "EGT 3 Channel", egt3port, { (egt_num > 2) } field = "EGT 4 Channel", egt4port, { (egt_num > 3) } field = "EGT 5 Channel", egt5port, { (egt_num > 4) } field = "EGT 6 Channel", egt6port, { (egt_num > 5) } field = "EGT 7 Channel", egt7port, { (egt_num > 6) } field = "EGT 8 Channel", egt8port, { (egt_num > 7) } field = "EGT 9 Channel", egt9port, { (egt_num > 8) } field = "EGT 10 Channel", egt10port, { (egt_num > 9) } field = "EGT 11 Channel", egt11port, { (egt_num > 10) } field = "EGT 12 Channel", egt12port, { (egt_num > 11) } ; field = "EGT 13 Channel", egt13port, { (egt_num > 12) } ; field = "EGT 14 Channel", egt14port, { (egt_num > 13) } ; field = "EGT 15 Channel", egt15port, { (egt_num > 14) } ; field = "EGT 16 Channel", egt16port, { (egt_num > 15) } dialog = egt, "EGT / Thermocouple Inputs", xAxis topicHelp = "file://$getProjectsDirPath()/docs/Megasquirt3_TunerStudio_MS_Lite_Reference-1.5.pdf#egt" panel = egtwest panel = egteast, { (egt_conf_input != 1) } dialog = injseq, "Sequenced Batch Fire" topicHelp = "file://$getProjectsDirPath()/docs/Megasquirt3_TunerStudio_MS_Lite_Reference-1.5.pdf#seqbatch" field = "These settings allow batch firing to be sequenced from a specific" field = "trigger number for repeatable phasing on each start." field = "Enable sequenced batch fire", feature3_3 field = "Injector Sequence Start Trigger No.", trig_init, {feature3_3 } dialog = canwest, "" field = "My CAN ID", mycan_id field = "!Non-standard CAN ID - ECU will lose comms!", {0}, {1}, { mycan_id != 0 } field = "Master Enable", can_enable_on field = "29bit Megasquirt CAN Enable", can_enable_alcan field = "CAN baud rate (caution!)", can_enable_baud ; field = "Allow writes to realtime data", can_enable_outpc, {can_enable_on && can_enable_alcan} ; field = "Allow writes to tuning data", can_enable_tuning, {can_enable_on && can_enable_alcan} field = "Enable PWM Polling", enable_pollPWM, {can_enable_on && can_enable_alcan} field = "Remote CAN Id", can_poll_id, { enable_pollPWM && can_enable_on && can_enable_alcan} field = "Remote Table Number For PWM Data", poll_tablePWM, { enable_pollPWM && can_enable_on && can_enable_alcan} field = "Remote Table Offset For PWM Data", poll_offsetPWM, { enable_pollPWM && can_enable_on && can_enable_alcan} field = "Remote Clock", canpwm_clk, { enable_pollPWM && can_enable_on && can_enable_alcan} field = "Remote Prescale", canpwm_pre, { enable_pollPWM && can_enable_on && can_enable_alcan} field = "Remote Divider", canpwm_div, { enable_pollPWM && can_enable_on && can_enable_alcan} field = "" field = "Enable ADC Polling", enable_pollADC, {can_enable_on && can_enable_alcan} dialog = caneast, "" field = "Digital ports" field = "Remote CAN Id", can_poll_id_ports, { enable_pollports_digin || enable_pollports_digout} field = "Table", poll_tableports, { enable_pollports_digin || enable_pollports_digout} field = "Enable Input Port", enable_pollports_digin field = "Offset", can_poll_digin_offset, { enable_pollports_digin} field = "Enable Output Port", enable_pollports_digout field = "Offset", can_poll_digout_offset, { enable_pollports_digout} field = "" field = "Enable PWM Outputs", enable_pwmout field = "Remote CAN Id", can_pwmout_id, { enable_pwmout } field = "Table", can_pwmout_tab, { enable_pwmout } field = "Offset", can_pwmout_offset, { enable_pwmout } field = "Force Duty To 0-255", enable_pwmout255 ;CAN adcs dialog = canadc_opt, "", yAxis field = "CAN ADC group on/off" field = "CAN ADC 1- 4", canadc_opt1, { enable_pollADC } field = "CAN ADC 5- 8", canadc_opt2, { enable_pollADC } field = "CAN ADC 9-12", canadc_opt3, { enable_pollADC } field = "CAN ADC 13-16", canadc_opt4, { enable_pollADC } field = "CAN ADC 17-20", canadc_opt5, { enable_pollADC } field = "CAN ADC 21-24", canadc_opt6, { enable_pollADC } dialog = canadc_id, "", yAxis field = "CAN Id" field = "", canadc_id1, { canadc_opt1 && enable_pollADC } field = "", canadc_id2, { canadc_opt2 && enable_pollADC } field = "", canadc_id3, { canadc_opt3 && enable_pollADC } field = "", canadc_id4, { canadc_opt4 && enable_pollADC } field = "", canadc_id5, { canadc_opt5 && enable_pollADC } field = "", canadc_id6, { canadc_opt6 && enable_pollADC } dialog = canadc_tab, "", yAxis field = "Table" field = "", canadc_tab1, { canadc_opt1 && enable_pollADC } field = "", canadc_tab2, { canadc_opt2 && enable_pollADC } field = "", canadc_tab3, { canadc_opt3 && enable_pollADC } field = "", canadc_tab4, { canadc_opt4 && enable_pollADC } field = "", canadc_tab5, { canadc_opt5 && enable_pollADC } field = "", canadc_tab6, { canadc_opt6 && enable_pollADC } dialog = canadc_off, "", yAxis field = "Offset" field = "", canadc_off1, { canadc_opt1 && enable_pollADC } field = "", canadc_off2, { canadc_opt2 && enable_pollADC } field = "", canadc_off3, { canadc_opt3 && enable_pollADC } field = "", canadc_off4, { canadc_opt4 && enable_pollADC } field = "", canadc_off5, { canadc_opt5 && enable_pollADC } field = "", canadc_off6, { canadc_opt6 && enable_pollADC } dialog = canadcs, "CAN ADC selection", xAxis panel = canadc_opt panel = canadc_id panel = canadc_tab panel = canadc_off dialog = can_top, "", xAxis panel = canwest, West panel = caneast, East, {can_enable_on && can_enable_alcan} dialog = canparams, "CAN Parameters", border topicHelp = "file://$getProjectsDirPath()/docs/Megasquirt3_TunerStudio_MS_Lite_Reference-1.5.pdf#canparams" panel = can_top, North panel = canadcs, South, {can_enable_on && can_enable_alcan} dialog = canbcast_userdef, "", yAxis topicHelp = "file://$getProjectsDirPath()/docs/Megasquirt3_TunerStudio_MS_Lite_Reference-1.5.pdf#canbcastuser" field = "Identifier", can_bcast_user_id field = "Data 0", can_bcast_user_d0 field = "Data 1", can_bcast_user_d1 field = "Data 2", can_bcast_user_d2 field = "Data 3", can_bcast_user_d3 field = "Data 4", can_bcast_user_d4 field = "Data 5", can_bcast_user_d5 field = "Data 6", can_bcast_user_d6 field = "Data 7", can_bcast_user_d7 dialog = canbroadcast, "CAN Broadcasting" topicHelp = "file://$getProjectsDirPath()/docs/Megasquirt3_TunerStudio_MS_Lite_Reference-1.5.pdf#canbroadcast" field = "Enable Broadcasting", can_bcast1_on field = "Broadcast Interval", can_bcast_int, { can_bcast1_on } field = "0x280 RPM * 4", can_bcast1_280x4, { can_bcast1_on } field = "0x280 RPM * 1", can_bcast1_280x1, { can_bcast1_on } field = "0x289 Coolant", can_bcast1_289, { can_bcast1_on } field = "0x316 RPM", can_bcast1_316, { can_bcast1_on } field = "0x329 Coolant", can_bcast1_329, { can_bcast1_on } field = "0x561 Alfa/Fiat/Lancia dash", can_bcast1_561, { can_bcast1_on } field = "0x361 Alfa/Fiat/Lancia", can_bcast1_361, { can_bcast1_on } field = "0x041 Alfa/Fiat/Lancia", can_bcast2_041, { can_bcast1_on } field = "Holset HE351VE VGT turbo", can_bcast2_he351, { can_bcast1_on } field = "0x23d Nissan 350Z temp/RPM", can_bcast2_23d, { can_bcast1_on } field = "0x400 Lotus white 2004-2007 (1M)", can_bcast2_lotus0407, { can_bcast1_on } field = "0x400 Lotus black 2008-2015 (500k)", can_bcast2_lotus0815, { can_bcast1_on } field = "Generic Sensor input used for fuel", can_bcast_lotus_fuel, { can_bcast1_on && (can_bcast2_lotus0407 || can_bcast2_lotus0815) } field = "User defined testing", can_bcast2_xxx, { can_bcast1_on } dialog = canvss, "CAN VSS and gear selection" topicHelp = "file://$getProjectsDirPath()/docs/Megasquirt3_TunerStudio_MS_Lite_Reference-1.5.pdf#canvss" field = "This is for polling the actual vehicle speed" field = "mph/kph from a remote device." field = "For a pulse input use the CAN PWM instead" field = "Mode", can_poll2_vss field = "Remote CAN Id", vss1_can_id, {can_poll2_vss} field = "Remote CAN Table", vss1_can_table, {can_poll2_vss} field = "" field = "VSS1 Offset", vss1_can_offset, {(vss_opt0_1 == 1) && (vss_opt1 == 0x0e) && can_poll2_vss} field = "Data Size", vss1_can_size, {vss_opt1 == 0x0e} field = "" field = "VSS2 Offset", vss2_can_offset, {(vss_opt0_2 == 1) && (vss_opt2 == 0x0e) && can_poll2_vss} field = "Data Size", vss2_can_size, {vss_opt2 == 0x0e} field = "" field = "VSS3 Offset", vss3_can_offset, {(vss_opt0_1 == 1) && vss_opt0_3 && (vss_opt1 == 0x0e) && can_poll2_vss} field = "VSS4 Offset", vss4_can_offset, {(vss_opt0_2 == 1) && vss_opt0_4 && (vss_opt2 == 0x0e) && can_poll2_vss} field = "" field = "Gear# Offset", gear_can_offset, {((gear_method & 0x03) == 0x03)} dialog = canrtc, "Real Time Clock" field = "Enable Real Time Clock", opt142_rtc field = "Trim +/-", rtc_trim, {opt142_rtc} field = "Remote CAN Id", can_poll_id_rtc, {(opt142_rtc == 2) && can_enable_on && can_enable_alcan} field = "Table", poll_table_rtc, {(opt142_rtc == 2) && can_enable_on && can_enable_alcan} field = "Offset", poll_offset_rtc, {(opt142_rtc == 2) && can_enable_on && can_enable_alcan} dialog = canego1, "EGO Data Via CAN" field = "Fetch EGO Data", can_poll2_ego2 field = "Base CAN id", canegt_base, {can_poll2_ego2 == 6} field = "Base CAN id (2nd box)", canegt_base2, {can_poll2_ego2 == 6} field = "Base CAN id", canego_base, {can_poll2_ego2 == 8} field = "Remote CAN Id", can_ego_id, {can_poll2_ego2 == 1} field = "Table", can_ego_table, {can_poll2_ego2 == 1} field = "Offset", can_ego_offset, {can_poll2_ego2 == 1} field = "Smoothing", can_poll2_egolag dialog = cangps, "GPS Data Via CAN" field = "Fetch GPS Data", can_poll2_gps field = "Remote CAN Id", can_gps_id, {can_poll2_gps == 1} field = "Table", can_gps_table, {can_poll2_gps == 1} field = "Offset", can_gps_offset, {can_poll2_gps == 1} field = "CAN base address", canrx1_rt_gps_base, {can_poll2_gps == 2} dialog = canego, "", yAxis topicHelp = "file://$getProjectsDirPath()/docs/Megasquirt3_TunerStudio_MS_Lite_Reference-1.5.pdf#canegogps" panel = canego1, North, {can_enable_on} panel = cangps, South, {can_enable_on} dialog = realtimeclock, "", yAxis topicHelp = "file://$getProjectsDirPath()/docs/Megasquirt3_TunerStudio_MS_Lite_Reference-1.5.pdf#rtc" panel = canrtc panel = std_ms3Rtc dialog = tablesw1, "Table Switching" field = "Fuel Table Switching", f5_0_tsf, { !(dualfuel_sw_on && dualfuel_sw_fuel) } field = "Switch Source", f5_0_tsf_opt, { f5_0_tsf && !(dualfuel_sw_on && dualfuel_sw_fuel)} field = "Input pin", tsw_pin_f, { f5_0_tsf && (f5_0_tsf_opt == 0) && !(dualfuel_sw_on && dualfuel_sw_fuel)} field = "RPM greater than", tsf_rpm, { f5_0_tsf && (f5_0_tsf_opt == 1) && !(dualfuel_sw_on && dualfuel_sw_fuel)} field = "MAP greater than", tsf_kpa, { f5_0_tsf && (f5_0_tsf_opt == 2) && !(dualfuel_sw_on && dualfuel_sw_fuel)} field = "TPS greater than", tsf_tps, { f5_0_tsf && (f5_0_tsf_opt == 3) && !(dualfuel_sw_on && dualfuel_sw_fuel)} field = "" field = "Spark Table Switching", f5_0_tss, { !(dualfuel_sw_on && dualfuel_sw_spk) } field = "Switch Source", f5_0_tss_opt, { f5_0_tss && !(dualfuel_sw_on && dualfuel_sw_spk)} field = "Input Pin", tsw_pin_s, { f5_0_tss && (f5_0_tss_opt == 0) } field = "RPM Greater Than", tss_rpm, { f5_0_tss && (f5_0_tss_opt == 1) && !(dualfuel_sw_on && dualfuel_sw_spk)} field = "MAP Greater Than", tss_kpa, { f5_0_tss && (f5_0_tss_opt == 2) && !(dualfuel_sw_on && dualfuel_sw_spk)} field = "Slew control", slew_opts_tss, { f5_0_tss && !((f5_0_tss_opt == 0) && (tsw_pin_s == 14)) && !(dualfuel_sw_on && dualfuel_sw_spk)} field = "Max slew rate", slew_rate_global, { f5_0_tss && !((f5_0_tss_opt == 0) && (tsw_pin_s == 14)) && !(dualfuel_sw_on && dualfuel_sw_spk) && slew_opts_tss} field = "TPS Greater Than", tss_tps, { f5_0_tss && (f5_0_tss_opt == 3) && !(dualfuel_sw_on && dualfuel_sw_spk)} field = "" field = "Req Fuel Switching", tsw_pin_rf, { !(dualfuel_sw_on && dualfuel_sw_rf)} field = "Alternate ReqFuel (Lower Number)", ReqFuel_alt, { tsw_pin_rf || (dualfuel_sw_on && dualfuel_sw_rf)} field = "" field = "AFR Table Switching", tsw_pin_afr, { !(dualfuel_sw_on && dualfuel_sw_afr)} field = "" field = "Stoich Switching", tsw_pin_stoich, { !(dualfuel_sw_on && dualfuel_sw_stoich)} field = "Alternate Stoich", stoich_alt, { tsw_pin_stoich || (dualfuel_sw_on && dualfuel_sw_stoich)} field = "" field = "Boost control table switching is on the boost control menu" dialog = dualfuel, "Dual Fuel switching" field = "Dual Fuel Enable", dualfuel_sw_on field = "Mode", dualfuel_opt_mode, { dualfuel_sw_on } field = "Outputs Mode", dualfuel_opt_out, { dualfuel_sw_on && (dualfuel_opt_mode == 0) } field = "Secondary Outputs", staged_extended_opts_use_v3, { dualfuel_sw_on && (dualfuel_opt_mode < 2) && (dualfuel_opt_out || dualfuel_opt_mode) } ;was { ((dualfuel_opt_out || dualfuel_opt_mode) && hardware_fuel && ((nCylinders <= 4)) || ((nCylinders > 4) && (sequential == 1))) } field = "Secondary V3 Alternate", staged_extended_opts_simult, { (dualfuel_opt_mode < 2) && ((dualfuel_opt_out || dualfuel_opt_mode) && staged_extended_opts_use_v3) || ((nCylinders > 4) && (dualfuel_opt_out || dualfuel_opt_mode) && hardware_fuel && !(sequential & 0x1)) } field = "Input Pin", dualfuel_pin, { dualfuel_sw_on && (dualfuel_opt_mode == 0) } field = "Alt. Fuel Tables", dualfuel_sw_fuel, { dualfuel_sw_on && (dualfuel_opt_mode != 1) } field = "Alt. Spark Tables", dualfuel_sw_spk, { dualfuel_sw_on && (dualfuel_opt_mode != 1) } field = "Alt. AFR Tables", dualfuel_sw_afr, { dualfuel_sw_on && (dualfuel_opt_mode != 1) } field = "Alt. ReqFuel", dualfuel_sw_rf, { dualfuel_sw_on && (dualfuel_opt_mode == 0) } field = "Alt. Stoich", dualfuel_sw_stoich, { dualfuel_sw_on && (dualfuel_opt_mode == 0) } field = "Alt. Warmup", dualfuel_sw_wue, { dualfuel_sw_on && (dualfuel_opt_mode != 1) } field = "Alt. AfterStart", dualfuel_sw_ase, { dualfuel_sw_on && (dualfuel_opt_mode != 1) } field = "Alt. Priming", dualfuel_sw2_prime, { dualfuel_sw_on && (dualfuel_opt_mode == 0) } field = "Alt. Cranking Pulse", dualfuel_sw2_crank, { dualfuel_sw_on && (dualfuel_opt_mode != 1) } field = "Alt. Injector Params", dualfuel_sw2_injp, { dualfuel_sw_on && (dualfuel_opt_mode == 0) } field = "Alt. Small Pulsewidths", dualfuel_sw2_smpw, { dualfuel_sw_on && (dualfuel_opt_mode == 0) } field = "Alt. Overboost", dualfuel_sw2_ob, { dualfuel_sw_on && (dualfuel_opt_mode != 1) } field = "Alt. Boost Table", dualfuel_sw2_boosw, { dualfuel_sw_on && (dualfuel_opt_mode != 1) } field = "Alt. Accel Enrich", dualfuel_sw2_ae, { dualfuel_sw_on && (dualfuel_opt_mode != 1) } field = "" field = "Enable Temperature Adjustment", dualfuel_opt_temp, { dualfuel_sw_on && (dualfuel_opt_mode == 0) } field = "Temperature On", dualfuel_temp_sens, { dualfuel_sw_on && dualfuel_opt_temp && (dualfuel_opt_mode == 0)} field = "Enable Pressure Adjustment", dualfuel_opt_press, { dualfuel_sw_on && (dualfuel_opt_mode == 0) } field = "Pressure In kPa On", dualfuel_press_sens, { dualfuel_sw_on && dualfuel_opt_press && (dualfuel_opt_mode == 0)} field = "Sensor Type", dualfuel_press_type, { dualfuel_sw_on && dualfuel_opt_press && dualfuel_press_sens && (dualfuel_opt_mode == 0)} dialog = tablesw, "Table Switch/Dual Fuel", xAxis topicHelp = "file://$getProjectsDirPath()/docs/Megasquirt3_TunerStudio_MS_Lite_Reference-1.5.pdf#tablesw" panel = tablesw1, West panel = dualfuel, East dialog = outputTestbuttons1a, "", xAxis ;commandButton = "Label Text", command, { Enabled Condition }, optionalFlags ; The rem > 0 expression is just for testing.. It works when the MS is on the Stim with rpm. ; a status bit there would be the expected real expression commandButton = "Enable Test Mode", cmdEnterTestMode, { (!(status3 & 8)) && (rpm == 0)} ; if clickOnCloseIfEnabled is set, then the command assigned to this button will be run on the ; dialog close, but only if the enable condition is true ; valid click flags are: ; clickOnCloseIfEnabled - the command will be sent on dialog close if active condition is true ; clickOnCloseIfDisabled - the command will be sent on dialog close if active condition is false ; clickOnClose - the command will be sent on dialog close always commandButton = "Disable Test Mode", cmdStopTestmode, { status3 & 8 }, clickOnCloseIfEnabled dialog = outputTestbuttons1b, "" field = "Ensure engine is stationary or stim RPM is 0 before testing injectors or coils" dialog = outputTestbuttons1, "Test Mode Controls", yAxis panel = outputTestbuttons1a panel = outputTestbuttons1b dialog = outputTestbuttons2, "Fuel pump", xAxis commandButton = "Fuel Pump On", cmdfpon, { status3 & 8 } commandButton = "Fuel Pump Off", cmdfpoff, { status3 & 8 } dialog = outputtest_spk_l, "", yAxis field = "Output Interval", testint displayOnlyField = "RPM (Coil-on-Plug)", testrpm field = "Coil Testing Mode", testop_coil field = "Coil Output To Test", testsel_coil field = "Dwell", testdwell dialog = outputtest_spk_r, "", yAxis commandButton = "Start", cmdtestspkon, { testop_coil && (status3 & 8) && testdwell } commandButton = "Stop", cmdtestinjspkoff, { status3 & 8 } dialog = outputtest_inj_l, "", yAxis field = "Output Interval", testint displayOnlyField = "RPM (Full Sequential)", testrpm field = "Injector Testing Mode", testop_inj field = "Injector Channel To Test", testsel_inj field = "Pulsewidth", testpw field = "Total Number Of Injections", testinjcnt dialog = outputtest_inj_r, "", yAxis commandButton = "Start", cmdtestinjon, { testop_inj && (status3 & 8) && testpw && testinjcnt } commandButton = "Stop", cmdtestinjspkoff, { status3 & 8 } dialog = outputtest_spk, "Coil Testing", xAxis panel = outputtest_spk_l panel = outputtest_spk_r dialog = outputtest_inj, "Injector Testing", xAxis panel = outputtest_inj_l panel = outputtest_inj_r dialog = outputtest_controls, "Output Test Modes", yAxis panel = outputTestbuttons1 panel = outputTestbuttons2 panel = outputtest_spk panel = outputtest_inj dialog = outputtest_r, "Reference Gauges", yAxis gauge = voltMeter, North gauge = injcountGauge, South dialog = outputtest, "", xAxis topicHelp = "file://$getProjectsDirPath()/docs/Megasquirt3_TunerStudio_MS_Lite_Reference-1.5.pdf#testinjspk" panel = outputtest_controls panel = outputtest_r dialog = outputtest9, "Fuel Pump", yAxis commandButton = "Off", cmdtest_pe4_off, { status3 & 8 } commandButton = "Pulsed", cmdtest_pe4_pulsed, { status3 & 8 } commandButton = "On", cmdtest_pe4_on, { status3 & 8 } dialog = outputtesta0, "Inj A", yAxis commandButton = "Off", cmdtest_pa0_off, { status3 & 8 } commandButton = "Pulsed", cmdtest_pa0_pulsed, { status3 & 8 } commandButton = "On", cmdtest_pa0_on, { status3 & 8 } dialog = outputtesta1, "Inj B", yAxis commandButton = "Off", cmdtest_pa1_off, { status3 & 8 } commandButton = "Pulsed", cmdtest_pa1_pulsed, { status3 & 8 } commandButton = "On", cmdtest_pa1_on, { status3 & 8 } dialog = outputtesta2, "Inj C", yAxis commandButton = "Off", cmdtest_pa2_off, { status3 & 8 } commandButton = "Pulsed", cmdtest_pa2_pulsed, { status3 & 8 } commandButton = "On", cmdtest_pa2_on, { status3 & 8 } dialog = outputtesta3, "Inj D", yAxis commandButton = "Off", cmdtest_pa3_off, { status3 & 8 } commandButton = "Pulsed", cmdtest_pa3_pulsed, { status3 & 8 } commandButton = "On", cmdtest_pa3_on, { status3 & 8 } dialog = outputtesta4, "Inj E", yAxis commandButton = "Off", cmdtest_pa4_off, { status3 & 8 } commandButton = "Pulsed", cmdtest_pa4_pulsed, { status3 & 8 } commandButton = "On", cmdtest_pa4_on, { status3 & 8 } dialog = outputtesta5, "Inj F", yAxis commandButton = "Off", cmdtest_pa5_off, { status3 & 8 } commandButton = "Pulsed", cmdtest_pa5_pulsed, { status3 & 8 } commandButton = "On", cmdtest_pa5_on, { status3 & 8 } dialog = outputtesta6, "Inj G", yAxis commandButton = "Off", cmdtest_pa6_off, { status3 & 8 } commandButton = "Pulsed", cmdtest_pa6_pulsed, { status3 & 8 } commandButton = "On", cmdtest_pa6_on, { status3 & 8 } dialog = outputtesta7, "Inj H", yAxis commandButton = "Off", cmdtest_pa7_off, { status3 & 8 } commandButton = "Pulsed", cmdtest_pa7_pulsed, { status3 & 8 } commandButton = "On", cmdtest_pa7_on, { status3 & 8 } dialog = outputtest_io1inj, "Inj Outputs", xAxis panel = outputtesta0 panel = outputtesta1 panel = outputtesta2 panel = outputtesta3 panel = outputtesta4 panel = outputtesta5 panel = outputtesta6 panel = outputtesta7 dialog = outputtestb0, "Spk A", yAxis commandButton = "Off", cmdtest_pb0_off, { status3 & 8 } commandButton = "Pulsed", cmdtest_pb0_pulsed, { status3 & 8 } commandButton = "On", cmdtest_pb0_on, { status3 & 8 } dialog = outputtestb1, "Spk B", yAxis commandButton = "Off", cmdtest_pb1_off, { status3 & 8 } commandButton = "Pulsed", cmdtest_pb1_pulsed, { status3 & 8 } commandButton = "On", cmdtest_pb1_on, { status3 & 8 } dialog = outputtestb2, "Spk C", yAxis commandButton = "Off", cmdtest_pb2_off, { status3 & 8 } commandButton = "Pulsed", cmdtest_pb2_pulsed, { status3 & 8 } commandButton = "On", cmdtest_pb2_on, { status3 & 8 } dialog = outputtestb3, "Spk D", yAxis commandButton = "Off", cmdtest_pb3_off, { status3 & 8 } commandButton = "Pulsed", cmdtest_pb3_pulsed, { status3 & 8 } commandButton = "On", cmdtest_pb3_on, { status3 & 8 } dialog = outputtestb4, "Spk E", yAxis commandButton = "Off", cmdtest_pb4_off, { status3 & 8 } commandButton = "Pulsed", cmdtest_pb4_pulsed, { status3 & 8 } commandButton = "On", cmdtest_pb4_on, { status3 & 8 } dialog = outputtestb5, "Spk F", yAxis commandButton = "Off", cmdtest_pb5_off, { status3 & 8 } commandButton = "Pulsed", cmdtest_pb5_pulsed, { status3 & 8 } commandButton = "On", cmdtest_pb5_on, { status3 & 8 } dialog = outputtestb6, "Spk G", yAxis commandButton = "Off", cmdtest_pb6_off, { status3 & 8 } commandButton = "Pulsed", cmdtest_pb6_pulsed, { status3 & 8 } commandButton = "On", cmdtest_pb6_on, { status3 & 8 } dialog = outputtestb7, "Spk H", yAxis commandButton = "Off", cmdtest_pb7_off, { status3 & 8 } commandButton = "Pulsed", cmdtest_pb7_pulsed, { status3 & 8 } commandButton = "On", cmdtest_pb7_on, { status3 & 8 } dialog = outputtest_io1spk, "Spk Outputs", xAxis panel = outputtestb0 panel = outputtestb1 panel = outputtestb2 panel = outputtestb3 panel = outputtestb4 panel = outputtestb5 panel = outputtestb6 panel = outputtestb7 dialog = outputtestcano0, "OUT1", yAxis commandButton = "Off", cmdtestcano0off, { (status3 & 8) && (canout1_8 & 1) } ; commandButton = "Pulsed", cmdtestcano0pulsed, { status3 & 8 } commandButton = "On", cmdtestcano0on, { (status3 & 8) && ((canout1_8 & 1) == 0) } dialog = outputtestcano1, "OUT2", yAxis commandButton = "Off", cmdtestcano1off, { (status3 & 8) && (canout1_8 & 2) } ; commandButton = "Pulsed", cmdtestcano1pulsed, { status3 & 8 } commandButton = "On", cmdtestcano1on, { (status3 & 8) && ((canout1_8 & 2) == 0) } dialog = outputtestcano2, "OUT3", yAxis commandButton = "Off", cmdtestcano2off, { (status3 & 8) && (canout1_8 & 4) } ; commandButton = "Pulsed", cmdtestcano2pulsed, { status3 & 8 } commandButton = "On", cmdtestcano2on, { (status3 & 8) && ((canout1_8 & 4) == 0) } dialog = outputtestcano3, "OUT4", yAxis commandButton = "Off", cmdtestcano3off, { (status3 & 8) && (canout1_8 & 8) } ; commandButton = "Pulsed", cmdtestcano3pulsed, { status3 & 8 } commandButton = "On", cmdtestcano3on, { (status3 & 8) && ((canout1_8 & 8) == 0) } dialog = outputtestcano4, "OUT5", yAxis commandButton = "Off", cmdtestcano4off, { (status3 & 8) && (canout1_8 & 16) } ; commandButton = "Pulsed", cmdtestcano4pulsed, { status3 & 8 } commandButton = "On", cmdtestcano4on, { (status3 & 8) && ((canout1_8 & 16) == 0) } dialog = outputtestcano5, "OUT6", yAxis commandButton = "Off", cmdtestcano5off, { (status3 & 8) && (canout1_8 & 32) } ; commandButton = "Pulsed", cmdtestcano5pulsed, { status3 & 8 } commandButton = "On", cmdtestcano5on, { (status3 & 8) && ((canout1_8 & 32) == 0) } dialog = outputtestcano6, "OUT7", yAxis commandButton = "Off", cmdtestcano6off, { (status3 & 8) && (canout1_8 & 64) } ; commandButton = "Pulsed", cmdtestcano6pulsed, { status3 & 8 } commandButton = "On", cmdtestcano6on, { (status3 & 8) && ((canout1_8 & 64) == 0) } dialog = outputtestcano7, "OUT8", yAxis commandButton = "Off", cmdtestcano7off, { (status3 & 8) && (canout1_8 & 128) } ; commandButton = "Pulsed", cmdtestcano7pulsed, { status3 & 8 } commandButton = "On", cmdtestcano7on, { (status3 & 8) && ((canout1_8 & 128) == 0) } dialog = outputtest_iocano, "CANOUT1-8", xAxis panel = outputtestcano0 panel = outputtestcano1 panel = outputtestcano2 panel = outputtestcano3 panel = outputtestcano4 panel = outputtestcano5 panel = outputtestcano6 panel = outputtestcano7 dialog = outputtestcano8, "OUT9", yAxis commandButton = "Off", cmdtestcano8off, { (status3 & 8) && (canout9_16 & 1) } ; commandButton = "Pulsed", cmdtestcano8pulsed, { status3 & 8 } commandButton = "On", cmdtestcano8on, { (status3 & 8) && ((canout9_16 & 1) == 0) } dialog = outputtestcano9, "OUT10", yAxis commandButton = "Off", cmdtestcano9off, { (status3 & 8) && (canout9_16 & 2) } ; commandButton = "Pulsed", cmdtestcano9pulsed, { status3 & 8 } commandButton = "On", cmdtestcano9on, { (status3 & 8) && ((canout9_16 & 2) == 0) } dialog = outputtestcano10, "OUT11", yAxis commandButton = "Off", cmdtestcano10off, { (status3 & 8) && (canout9_16 & 4) } ; commandButton = "Pulsed", cmdtestcano10pulsed, { status3 & 8 } commandButton = "On", cmdtestcano10on, { (status3 & 8) && ((canout9_16 & 4) == 0) } dialog = outputtestcano11, "OUT12", yAxis commandButton = "Off", cmdtestcano11off, { (status3 & 8) && (canout9_16 & 8) } ; commandButton = "Pulsed", cmdtestcano11pulsed, { status3 & 8 } commandButton = "On", cmdtestcano11on, { (status3 & 8) && ((canout9_16 & 8) == 0) } dialog = outputtestcano12, "OUT13", yAxis commandButton = "Off", cmdtestcano12off, { (status3 & 8) && (canout9_16 & 16) } ; commandButton = "Pulsed", cmdtestcano12pulsed, { status3 & 8 } commandButton = "On", cmdtestcano12on, { (status3 & 8) && ((canout9_16 & 16) == 0) } dialog = outputtestcano13, "OUT14", yAxis commandButton = "Off", cmdtestcano13off, { (status3 & 8) && (canout9_16 & 32) } ; commandButton = "Pulsed", cmdtestcano13pulsed, { status3 & 8 } commandButton = "On", cmdtestcano13on, { (status3 & 8) && ((canout9_16 & 32) == 0) } dialog = outputtestcano14, "OUT15", yAxis commandButton = "Off", cmdtestcano14off, { (status3 & 8) && (canout9_16 & 64) } ; commandButton = "Pulsed", cmdtestcano14pulsed, { status3 & 8 } commandButton = "On", cmdtestcano14on, { (status3 & 8) && ((canout9_16 & 64) == 0) } dialog = outputtestcano15, "OUT16", yAxis commandButton = "Off", cmdtestcano15off, { (status3 & 8) && (canout9_16 & 128) } ; commandButton = "Pulsed", cmdtestcano15pulsed, { status3 & 8 } commandButton = "On", cmdtestcano15on, { (status3 & 8) && ((canout9_16 & 128) == 0) } dialog = outputtest_iocano2, "CANOUT9-16", xAxis panel = outputtestcano8 panel = outputtestcano9 panel = outputtestcano10 panel = outputtestcano11 panel = outputtestcano12 panel = outputtestcano13 panel = outputtestcano14 panel = outputtestcano15 dialog = outputtestcani0, "IN1", yAxis commandButton = "High", cmdnull, { canin1_8 & 1 } commandButton = "Low", cmdnull, { (canin1_8 & 1) == 0 } dialog = outputtestcani1, "IN2", yAxis commandButton = "High", cmdnull, { canin1_8 & 2 } commandButton = "Low", cmdnull, { (canin1_8 & 2) == 0 } dialog = outputtestcani2, "IN3", yAxis commandButton = "High", cmdnull, { canin1_8 & 4 } commandButton = "Low", cmdnull, { (canin1_8 & 4) == 0 } dialog = outputtestcani3, "IN4", yAxis commandButton = "High", cmdnull, { canin1_8 & 8 } commandButton = "Low", cmdnull, { (canin1_8 & 8) == 0 } dialog = outputtestcani4, "IN5", yAxis commandButton = "High", cmdnull, { canin1_8 & 16 } commandButton = "Low", cmdnull, { (canin1_8 & 16) == 0 } dialog = outputtestcani5, "IN6", yAxis commandButton = "High", cmdnull, { canin1_8 & 32 } commandButton = "Low", cmdnull, { (canin1_8 & 32) == 0 } dialog = outputtestcani6, "IN7", yAxis commandButton = "High", cmdnull, { canin1_8 & 64 } commandButton = "Low", cmdnull, { (canin1_8 & 64) == 0 } dialog = outputtestcani7, "IN8", yAxis commandButton = "High", cmdnull, { canin1_8 & 128 } commandButton = "Low", cmdnull, { (canin1_8 & 128) == 0 } dialog = outputtest_iocani, "CANIN1-8 - read-only", xAxis panel = outputtestcani0 panel = outputtestcani1 panel = outputtestcani2 panel = outputtestcani3 panel = outputtestcani4 panel = outputtestcani5 panel = outputtestcani6 panel = outputtestcani7 dialog = outputtest16, "PWM Out 2", yAxis commandButton = "Off", cmdtest_pp2_off, { status3 & 8 } commandButton = "Pulsed", cmdtest_pp2_pulsed, { status3 & 8 } commandButton = "On", cmdtest_pp2_on, { status3 & 8 } dialog = outputtest10, "High Curr 3", yAxis commandButton = "Off", cmdtest_pp3_off, { status3 & 8 } commandButton = "Pulsed", cmdtest_pp3_pulsed, { status3 & 8 } commandButton = "On", cmdtest_pp3_on, { status3 & 8 } dialog = outputtest11, "High Curr 1", yAxis commandButton = "Off", cmdtest_pp4_off, { status3 & 8 } commandButton = "Pulsed", cmdtest_pp4_pulsed, { status3 & 8 } commandButton = "On", cmdtest_pp4_on, { status3 & 8 } dialog = outputtest12, "High Curr 2", yAxis commandButton = "Off", cmdtest_pp5_off, { status3 & 8 } commandButton = "Pulsed", cmdtest_pp5_pulsed, { status3 & 8 } commandButton = "On", cmdtest_pp5_on, { status3 & 8 } dialog = outputtest13, "PWM Out 3", yAxis commandButton = "Off", cmdtest_pp6_off, { status3 & 8 } commandButton = "Pulsed", cmdtest_pp6_pulsed, { status3 & 8 } commandButton = "On", cmdtest_pp6_on, { status3 & 8 } dialog = outputtest14, "PWM/Idle 1", yAxis commandButton = "Off", cmdtest_pp7_off, { status3 & 8 } commandButton = "Pulsed", cmdtest_pp7_pulsed, { status3 & 8 } commandButton = "On", cmdtest_pp7_on, { status3 & 8 } dialog = outputtest15, "Tach Out", yAxis commandButton = "Off", cmdtest_pk0_off, { status3 & 8 } commandButton = "Pulsed", cmdtest_pk0_pulsed, { status3 & 8 } commandButton = "On", cmdtest_pk0_on, { status3 & 8 } dialog = outputtest_io_level, "" field = "Note! On MS3-Pro ECUs Spk outputs ON=0V OFF=5V" field = "" dialog = outputtest_io_warning, "" field = "Caution! Used incorrectly this can cause hardware damage. USE AT YOUR OWN RISK." field = "The pin/port will be forced into an output overriding any other configuration." field = "The Inj/Spk outputs must be used with additional caution to avoid flooding your engine or melting coils." field = "After testing, turn off/on the ECU to restore normal settings." field = "" field = "Use this test mode when the outputs are controlling relays, solenoids or lights." field = "To test injectors or coils, use 'Output Test Mode - Inj/Spk'" dialog = outputtest_io_warning2, "" field = "#NOT FOR INJECTORS OR COILS! Use 'Output Test Mode - Inj/Spk'" dialog = outputtest_io2_text, "" field = "Caution! Used incorrectly this can cause hardware damage. USE AT YOUR OWN RISK." field = "After testing, turn off/on the ECU to restore normal settings." field = "" dialog = outputtest_io_pwm, "Pulse Settings", xAxis field = "Pulse Frequency", pwm_testio field = "Pulse Duty Cycle", duty_testio dialog = outputtest_io1, "Outputs", xAxis panel = outputtest9 panel = outputtest16 panel = outputtest10 panel = outputtest11 panel = outputtest12 panel = outputtest13 panel = outputtest14 panel = outputtest15 dialog = outputtest_io_new1_off, ".", yAxis commandButton = "Off", cmdtest_pe4_off, { status3 & 8 } commandButton = "Off", cmdtest_pk0_off, { status3 & 8 } commandButton = "Off", cmdtest_pj0_off, { status3 & 8 } commandButton = "Off", cmdtest_pj1_off, { status3 & 8 } commandButton = "Off", cmdtest_pp4_off, { status3 & 8 } commandButton = "Off", cmdtest_pp5_off, { status3 & 8 } commandButton = "Off", cmdtest_pp3_off, { status3 & 8 } commandButton = "Off", cmdtest_pp7_off, { status3 & 8 } commandButton = "Off", cmdtest_pp2_off, { status3 & 8 } commandButton = "Off", cmdtest_pp6_off, { status3 & 8 } commandButton = "Off", cmdtest_pp0_off, { status3 & 8 } commandButton = "Off", cmdtest_pp1_off, { status3 & 8 } commandButton = "Off", cmdtest_ps6_off, { status3 & 8 } commandButton = "Off", cmdtest_ps7_off, { status3 & 8 } dialog = outputtest_io_new1_on, ".", yAxis commandButton = "On", cmdtest_pe4_on, { status3 & 8 } commandButton = "On", cmdtest_pk0_on, { status3 & 8 } commandButton = "On", cmdtest_pj0_on, { status3 & 8 } commandButton = "On", cmdtest_pj1_on, { status3 & 8 } commandButton = "On", cmdtest_pp4_on, { status3 & 8 } commandButton = "On", cmdtest_pp5_on, { status3 & 8 } commandButton = "On", cmdtest_pp3_on, { status3 & 8 } commandButton = "On", cmdtest_pp7_on, { status3 & 8 } commandButton = "On", cmdtest_pp2_on, { status3 & 8 } commandButton = "On", cmdtest_pp6_on, { status3 & 8 } commandButton = "On", cmdtest_pp0_on, { status3 & 8 } commandButton = "On", cmdtest_pp1_on, { status3 & 8 } commandButton = "On", cmdtest_ps6_on, { status3 & 8 } commandButton = "On", cmdtest_ps7_on, { status3 & 8 } dialog = outputtest_io_new1_pulsed, ".", yAxis commandButton = "Pulsed", cmdtest_pe4_pulsed, { status3 & 8 } commandButton = "Pulsed", cmdtest_pk0_pulsed, { status3 & 8 } commandButton = "Pulsed", cmdtest_pj0_pulsed, { status3 & 8 } commandButton = "Pulsed", cmdtest_pj1_pulsed, { status3 & 8 } commandButton = "Pulsed", cmdtest_pp4_pulsed, { status3 & 8 } commandButton = "Pulsed", cmdtest_pp5_pulsed, { status3 & 8 } commandButton = "Pulsed", cmdtest_pp3_pulsed, { status3 & 8 } commandButton = "Pulsed", cmdtest_pp7_pulsed, { status3 & 8 } commandButton = "Pulsed", cmdtest_pp2_pulsed, { status3 & 8 } commandButton = "Pulsed", cmdtest_pp6_pulsed, { status3 & 8 } commandButton = "Pulsed", cmdtest_pp0_pulsed, { status3 & 8 } commandButton = "Pulsed", cmdtest_pp1_pulsed, { status3 & 8 } commandButton = "Pulsed", cmdtest_ps6_pulsed, { status3 & 8 } commandButton = "Pulsed", cmdtest_ps7_pulsed, { status3 & 8 } dialog = outputtest_io1_new, "Outputs", xAxis panel = pinusage2 panel = outputtest_io_new1_off panel = outputtest_io_new1_pulsed panel = outputtest_io_new1_on dialog = outputteste0, "IAC1", yAxis commandButton = "Off", cmdtest_pj0_off, { status3 & 8 } commandButton = "Pulsed", cmdtest_pj0_pulsed, { status3 & 8 } commandButton = "On", cmdtest_pj0_on, { status3 & 8 } dialog = outputteste4, "IAC2", yAxis commandButton = "Off", cmdtest_pj1_off, { status3 & 8 } commandButton = "Pulsed", cmdtest_pj1_pulsed, { status3 & 8 } commandButton = "On", cmdtest_pj1_on, { status3 & 8 } dialog = outputteste8, "InjI", yAxis commandButton = "Off", cmdtest_pt1_off, { status3 & 8 } commandButton = "Pulsed", cmdtest_pt1_pulsed, { status3 & 8 } commandButton = "On", cmdtest_pt1_on, { status3 & 8 } dialog = outputtestec, "InjJ", yAxis commandButton = "Off", cmdtest_pt3_off, { status3 & 8 } commandButton = "Pulsed", cmdtest_pt3_pulsed, { status3 & 8 } commandButton = "On", cmdtest_pt3_on, { status3 & 8 } dialog = outputtest1c0, "DigiInOut1", yAxis commandButton = "Off", cmdtest_pm7_off, { status3 & 8 } commandButton = "Pulsed", cmdtest_pm7_pulsed, { status3 & 8 } commandButton = "On", cmdtest_pm7_on, { status3 & 8 } dialog = outputtest1c4, "DigiInOut2", yAxis commandButton = "Off", cmdtest_pm6_off, { status3 & 8 } commandButton = "Pulsed", cmdtest_pm6_pulsed, { status3 & 8 } commandButton = "On", cmdtest_pm6_on, { status3 & 8 } dialog = outputtest1c8, "DigiInOut3", yAxis commandButton = "Off", cmdtest_ps4_off, { status3 & 8 } commandButton = "Pulsed", cmdtest_ps4_pulsed, { status3 & 8 } commandButton = "On", cmdtest_ps4_on, { status3 & 8 } dialog = outputtest1cc, "DigiInOut4", yAxis commandButton = "Off", cmdtest_ps5_off, { status3 & 8 } commandButton = "Pulsed", cmdtest_ps5_pulsed, { status3 & 8 } commandButton = "On", cmdtest_ps5_on, { status3 & 8 } dialog = outputtest1d0, "DigiInOut5", yAxis commandButton = "Off", cmdtest_pt7_off, { status3 & 8 } commandButton = "Pulsed", cmdtest_pt7_pulsed, { status3 & 8 } commandButton = "On", cmdtest_pt7_on, { status3 & 8 } dialog = outputtest1d4, "PWM Out 4", yAxis commandButton = "Off", cmdtest_pp0_off, { status3 & 8 } commandButton = "Pulsed", cmdtest_pp0_pulsed, { status3 & 8 } commandButton = "On", cmdtest_pp0_on, { status3 & 8 } dialog = outputtest1d8, "PWM Out 5", yAxis commandButton = "Off", cmdtest_pp1_off, { status3 & 8 } commandButton = "Pulsed", cmdtest_pp1_pulsed, { status3 & 8 } commandButton = "On", cmdtest_pp1_on, { status3 & 8 } dialog = outputtest1dc, "Digi Out 1 LED", yAxis commandButton = "Off", cmdtest_ps6_off, { status3 & 8 } commandButton = "Pulsed", cmdtest_ps6_pulsed, { status3 & 8 } commandButton = "On", cmdtest_ps6_on, { status3 & 8 } dialog = outputtest1e0, "Digi Out 2", yAxis commandButton = "Off", cmdtest_ps7_off, { status3 & 8 } commandButton = "Pulsed", cmdtest_ps7_pulsed, { status3 & 8 } commandButton = "On", cmdtest_ps7_on, { status3 & 8 } dialog = outputtest1e4, "DigiFreqIn1", yAxis commandButton = "Off", cmdtest_pt4_off, { status3 & 8 } commandButton = "Pulsed", cmdtest_pt4_pulsed, { status3 & 8 } commandButton = "On", cmdtest_pt4_on, { status3 & 8 } dialog = outputtest1e8, "DigiFreqIn2", yAxis commandButton = "Off", cmdtest_pt5_off, { status3 & 8 } commandButton = "Pulsed", cmdtest_pt5_pulsed, { status3 & 8 } commandButton = "On", cmdtest_pt5_on, { status3 & 8 } dialog = outputtest_io2, "Outputs", xAxis panel = outputteste0 panel = outputteste4 panel = outputteste8 panel = outputtestec dialog = outputtest_io_new2_left, "Outputs", yAxis displayOnlyField = "Injector I", { bitStringValue( portLabels , portusage_t[1] ) } displayOnlyField = "Injector J", { bitStringValue( portLabels , portusage_t[3] ) } displayOnlyField = "Digital In Out 1", { bitStringValue( portLabels , portusage_m[7] ) } displayOnlyField = "Digital In Out 2", { bitStringValue( portLabels , portusage_m[6] ) } displayOnlyField = "Digital In Out 3", { bitStringValue( portLabels , portusage_s[4] ) } displayOnlyField = "Digital In Out 4", { bitStringValue( portLabels , portusage_s[5] ) } displayOnlyField = "Digital In Out 5", { bitStringValue( portLabels , portusage_t[7] ) } dialog = outputtest_io_new2_off, ".", yAxis commandButton = "Off", cmdtest_pt1_off, { status3 & 8 } commandButton = "Off", cmdtest_pt3_off, { status3 & 8 } commandButton = "Off", cmdtest_pm7_off, { status3 & 8 } commandButton = "Off", cmdtest_pm6_off, { status3 & 8 } commandButton = "Off", cmdtest_ps4_off, { status3 & 8 } commandButton = "Off", cmdtest_ps5_off, { status3 & 8 } commandButton = "Off", cmdtest_pt7_off, { status3 & 8 } dialog = outputtest_io_new2_pulsed, ".", yAxis commandButton = "Pulsed", cmdtest_pt1_pulsed, { status3 & 8 } commandButton = "Pulsed", cmdtest_pt3_pulsed, { status3 & 8 } commandButton = "Pulsed", cmdtest_pm7_pulsed, { status3 & 8 } commandButton = "Pulsed", cmdtest_pm6_pulsed, { status3 & 8 } commandButton = "Pulsed", cmdtest_ps4_pulsed, { status3 & 8 } commandButton = "Pulsed", cmdtest_ps5_pulsed, { status3 & 8 } commandButton = "Pulsed", cmdtest_pt7_pulsed, { status3 & 8 } dialog = outputtest_io_new2_on, ".", yAxis commandButton = "On", cmdtest_pt1_on, { status3 & 8 } commandButton = "On", cmdtest_pt3_on, { status3 & 8 } commandButton = "On", cmdtest_pm7_on, { status3 & 8 } commandButton = "On", cmdtest_pm6_on, { status3 & 8 } commandButton = "On", cmdtest_ps4_on, { status3 & 8 } commandButton = "On", cmdtest_ps5_on, { status3 & 8 } commandButton = "On", cmdtest_pt7_on, { status3 & 8 } dialog = outputtest_io2_new, "Outputs", xAxis panel = outputtest_io_new2_left panel = outputtest_io_new2_off panel = outputtest_io_new2_pulsed panel = outputtest_io_new2_on dialog = outputtest_io3, "Outputs", xAxis panel = outputtest1e4 panel = outputtest1e8 panel = outputtest1c0 panel = outputtest1c4 panel = outputtest1c8 panel = outputtest1cc panel = outputtest1d0 dialog = outputtest_io4, "Outputs", xAxis panel = outputtest1d4 panel = outputtest1d8 panel = outputtest1dc panel = outputtest1e0 dialog = outputtest_io_1, "", yAxis topicHelp = "file://$getProjectsDirPath()/docs/Megasquirt3_TunerStudio_MS_Lite_Reference-1.5.pdf#testio" panel = outputTestbuttons1 panel = outputtest_io_pwm panel = outputtest_io1_new panel = outputtest_io_warning dialog = outputtest_io_2, "", yAxis topicHelp = "file://$getProjectsDirPath()/docs/Megasquirt3_TunerStudio_MS_Lite_Reference-1.5.pdf#testio" panel = outputTestbuttons1 panel = outputtest_io_pwm panel = outputtest_io2_new panel = outputtest_io_warning dialog = outputtest_io_new3_left, "", yAxis displayOnlyField = "Injector A", { bitStringValue( portLabels , portusage_a[0] ) } displayOnlyField = "Injector B", { bitStringValue( portLabels , portusage_a[1] ) } displayOnlyField = "Injector C", { bitStringValue( portLabels , portusage_a[2] ) } displayOnlyField = "Injector D", { bitStringValue( portLabels , portusage_a[3] ) } displayOnlyField = "Injector E", { bitStringValue( portLabels , portusage_a[4] ) } displayOnlyField = "Injector F", { bitStringValue( portLabels , portusage_a[5] ) } displayOnlyField = "Injector G", { bitStringValue( portLabels , portusage_a[6] ) } displayOnlyField = "Injector H", { bitStringValue( portLabels , portusage_a[7] ) } displayOnlyField = "Injector I", { bitStringValue( portLabels , portusage_t[1] ) } displayOnlyField = "Injector J", { bitStringValue( portLabels , portusage_t[3] ) } displayOnlyField = "Spark A", { bitStringValue( portLabels , portusage_b[0] ) } displayOnlyField = "Spark B", { bitStringValue( portLabels , portusage_b[1] ) } displayOnlyField = "Spark C", { bitStringValue( portLabels , portusage_b[2] ) } displayOnlyField = "Spark D", { bitStringValue( portLabels , portusage_b[3] ) } displayOnlyField = "Spark E", { bitStringValue( portLabels , portusage_b[4] ) } displayOnlyField = "Spark F", { bitStringValue( portLabels , portusage_b[5] ) } displayOnlyField = "Spark G", { bitStringValue( portLabels , portusage_b[6] ) } displayOnlyField = "Spark H", { bitStringValue( portLabels , portusage_b[7] ) } dialog = outputtest_io_new3_off, ".", yAxis commandButton = "Off", cmdtest_pa0_off, { status3 & 8 } commandButton = "Off", cmdtest_pa1_off, { status3 & 8 } commandButton = "Off", cmdtest_pa2_off, { status3 & 8 } commandButton = "Off", cmdtest_pa3_off, { status3 & 8 } commandButton = "Off", cmdtest_pa4_off, { status3 & 8 } commandButton = "Off", cmdtest_pa5_off, { status3 & 8 } commandButton = "Off", cmdtest_pa6_off, { status3 & 8 } commandButton = "Off", cmdtest_pa7_off, { status3 & 8 } commandButton = "Off", cmdtest_pt1_off, { status3 & 8 } commandButton = "Off", cmdtest_pt3_off, { status3 & 8 } commandButton = "Off", cmdtest_pb0_off, { status3 & 8 } commandButton = "Off", cmdtest_pb1_off, { status3 & 8 } commandButton = "Off", cmdtest_pb2_off, { status3 & 8 } commandButton = "Off", cmdtest_pb3_off, { status3 & 8 } commandButton = "Off", cmdtest_pb4_off, { status3 & 8 } commandButton = "Off", cmdtest_pb5_off, { status3 & 8 } commandButton = "Off", cmdtest_pb6_off, { status3 & 8 } commandButton = "Off", cmdtest_pb7_off, { status3 & 8 } dialog = outputtest_io_new3_pulsed, ".", yAxis commandButton = "Pulsed", cmdtest_pa0_pulsed, { status3 & 8 } commandButton = "Pulsed", cmdtest_pa1_pulsed, { status3 & 8 } commandButton = "Pulsed", cmdtest_pa2_pulsed, { status3 & 8 } commandButton = "Pulsed", cmdtest_pa3_pulsed, { status3 & 8 } commandButton = "Pulsed", cmdtest_pa4_pulsed, { status3 & 8 } commandButton = "Pulsed", cmdtest_pa5_pulsed, { status3 & 8 } commandButton = "Pulsed", cmdtest_pa6_pulsed, { status3 & 8 } commandButton = "Pulsed", cmdtest_pa7_pulsed, { status3 & 8 } commandButton = "Pulsed", cmdtest_pt1_pulsed, { status3 & 8 } commandButton = "Pulsed", cmdtest_pt3_pulsed, { status3 & 8 } commandButton = "Pulsed", cmdtest_pb0_pulsed, { status3 & 8 } commandButton = "Pulsed", cmdtest_pb1_pulsed, { status3 & 8 } commandButton = "Pulsed", cmdtest_pb2_pulsed, { status3 & 8 } commandButton = "Pulsed", cmdtest_pb3_pulsed, { status3 & 8 } commandButton = "Pulsed", cmdtest_pb4_pulsed, { status3 & 8 } commandButton = "Pulsed", cmdtest_pb5_pulsed, { status3 & 8 } commandButton = "Pulsed", cmdtest_pb6_pulsed, { status3 & 8 } commandButton = "Pulsed", cmdtest_pb7_pulsed, { status3 & 8 } dialog = outputtest_io_new3_on, ".", yAxis commandButton = "On", cmdtest_pa0_on, { status3 & 8 } commandButton = "On", cmdtest_pa1_on, { status3 & 8 } commandButton = "On", cmdtest_pa2_on, { status3 & 8 } commandButton = "On", cmdtest_pa3_on, { status3 & 8 } commandButton = "On", cmdtest_pa4_on, { status3 & 8 } commandButton = "On", cmdtest_pa5_on, { status3 & 8 } commandButton = "On", cmdtest_pa6_on, { status3 & 8 } commandButton = "On", cmdtest_pa7_on, { status3 & 8 } commandButton = "On", cmdtest_pt1_on, { status3 & 8 } commandButton = "On", cmdtest_pt3_on, { status3 & 8 } commandButton = "On", cmdtest_pb0_on, { status3 & 8 } commandButton = "On", cmdtest_pb1_on, { status3 & 8 } commandButton = "On", cmdtest_pb2_on, { status3 & 8 } commandButton = "On", cmdtest_pb3_on, { status3 & 8 } commandButton = "On", cmdtest_pb4_on, { status3 & 8 } commandButton = "On", cmdtest_pb5_on, { status3 & 8 } commandButton = "On", cmdtest_pb6_on, { status3 & 8 } commandButton = "On", cmdtest_pb7_on, { status3 & 8 } dialog = outputtest_io3_new, "Outputs", xAxis panel = outputtest_io_new3_left panel = outputtest_io_new3_off panel = outputtest_io_new3_pulsed panel = outputtest_io_new3_on dialog = outputtest_io_3, "", yAxis topicHelp = "file://$getProjectsDirPath()/docs/Megasquirt3_TunerStudio_MS_Lite_Reference-1.5.pdf#testio" panel = outputTestbuttons1 panel = outputtest_io_warning2 panel = outputtest_io_pwm ; panel = outputtest_io1inj ; panel = outputtest_io1spk panel = outputtest_io3_new panel = outputtest_io_level panel = outputtest_io_warning dialog = outputtest_io_4, "", yAxis topicHelp = "file://$getProjectsDirPath()/docs/Megasquirt3_TunerStudio_MS_Lite_Reference-1.5.pdf#testio" panel = outputTestbuttons1 panel = outputtest_iocano panel = outputtest_iocano2 panel = outputtest_io2_text panel = outputtest_iocani dialog = iactest_l, "", yAxis field = "Idle valve testing can be used with the engine running or stationary" field = "" field = "Idle Valve Homing Steps", iachometest, { IdleCtl == 3 } field = "Idle Valve Step (0-255)", iacpostest, { IdleCtl == 3 } field = "PWM Idle Duty% (0-100)", iacpostest, { (IdleCtl == 2) || (IdleCtl == 4) } field = "Set the steps before enabling testing" dialog = iactest_r, "", yAxis commandButton = "Enable Test - Home Position", cmdtestiachome, {( IdleCtl == 3 ) } commandButton = "Enable Test - Run Position", cmdtestiacon commandButton = "Enable Test - In/Out Cycle", cmdtestiaccycle, { IdleCtl == 3 } commandButton = "Stop Testing", cmdtestiacoff, {1}, clickOnCloseIfEnabled dialog = iactest_top, "", xAxis panel = iactest_l panel = iactest_r dialog = iactest_bot, "", xAxis gauge = IACgauge gauge = PWMIdlegauge dialog = iactest, "Output Test Mode - Idle Valve", yAxis topicHelp = "file://$getProjectsDirPath()/docs/Megasquirt3_TunerStudio_MS_Lite_Reference-1.5.pdf#testidle" panel = iactest_top panel = iactest_bot dialog = injseqtest, "Injector Sequential Testing" topicHelp = "file://$getProjectsDirPath()/docs/Megasquirt3_TunerStudio_MS_Lite_Reference-1.5.pdf#injseqtest" commandButton = "Stop Testing", cmdtestinjnorm commandButton = "Batch Fire", cmdtestinjbat commandButton = "Semi Sequential", cmdtestinjsem commandButton = "Full Sequential", cmdtestinjseq dialog = special, "Special Options" topicHelp = "file://$getProjectsDirPath()/docs/Megasquirt3_TunerStudio_MS_Lite_Reference-1.5.pdf#special" field = "Digital Switched 12V In Pulldown", feature3_n2oin ; field = "U08 Debug 134, SPI baud", u08_debug134 ; field = "U16 Debug 640", u16_debug640 ; field = "SDcard Run/Test", u08_debug38_0 field = "Log trigger times to sensors9-16", u08_debug38_1 field = "SDcard log download", u08_debug38_2 field = "SDcard detect", log_style2_alwaysin field = "Fuel flow/consumption calculation interval", fuelcalctime field = "Maximum SpkAdj Value", spkadj_max field = "Minimum SpkAdj Value", spkadj_min ; field = "Testval1", testval1 ; field = "Testval2", testval2 field = "Spare 1018", spare1018 dialog = lttrim, "Long Term Trim Settings" topicHelp = "file://$getProjectsDirPath()/docs/Megasquirt3_TunerStudio_MS_Lite_Reference-1.5.pdf#lttrim" field = "Enable Experi. Long Term Trim", ltt_opt_on field = "Sample Interval", ltt_samp_time, {ltt_opt_on} field = "Correction Softness", ltt_agg, {ltt_opt_on} field = "Write Method", ltt_opt_mode, {ltt_opt_on} field = "Burn Button", ltt_but_in, {ltt_opt_on && (ltt_opt_mode == 1)} field = "Burn Interval", ltt_int, {ltt_opt_on && (ltt_opt_mode == 0)} field = "LED Output", ltt_led_out,{ltt_opt_on} field = "Total Change Before Burning", ltt_thresh, {ltt_opt_on} field = "Display Current %Change In Sensor15", ltt_opt_feedback, {ltt_opt_on} commandButton = "Read Table 1 To RAM", cmdlttr1 commandButton = "Read Table 2 To RAM", cmdlttr2 commandButton = "Burn Table To Flash", cmdlttw commandButton = "Zero Tables", cmdlttz dialog = RotaryTrailingSettings, "Rotary Settings" topicHelp = "file://$getProjectsDirPath()/docs/Megasquirt3_TunerStudio_MS_Lite_Reference-1.5.pdf#rotary" field = "See also Rotary Split Table" field = "Output Mode", RotarySplitModeFD, { (twoStroke == 3) && (nCylinders == 2) && (spk_mode3 == 2) } field = "Allow Negative Split?", RotarySplitModeNeg, { twoStroke == 3 } field = "Trailing Dwell Time", dwelltime_trl, { (twoStroke == 3) && (spk_mode0 >1) && (dwellmode==0) } dialog = noisefiltering, "", yAxis topicHelp = "file://$getProjectsDirPath()/docs/Megasquirt3_TunerStudio_MS_Lite_Reference-1.5.pdf#noise" field = "#GLOBAL TIMER NOISE FILTER DELAY" field = "Noise Filter Period", dlyct field = "#Crosstalk Filter" field = "Nippon Denso Crosstalk filter", NoiseFilterOpts3, { spk_config_trig2 == 2 } field = "#PRIMARY TACH (crank)" field = "Noise Filter Enabled", NoiseFilterOpts field = "Use noise filter curve to tune" field = "Tach Period Rejection", NoiseFilterOpts1 field = "Tach Interrupt Masking", NoiseFilterOpts2, {NoiseFilterOpts == 0 && NoiseFilterOpts3 == 0} field = "Time", ICISR_tmask, {NoiseFilterOpts1 || NoiseFilterOpts2} field = "Percentage", ICISR_pmask, {NoiseFilterOpts1 || NoiseFilterOpts2} field = "#SECONDARY TACH (cam)" field = "Noise Filter Enabled", secondtrigopts; field = "Noise Filter Time Period", TC5_required_width, { secondtrigopts & 0x1 } field = "Tach Period Rejection", secondtrigopts1 field = "Tach Interrupt Masking", secondtrigopts2, { secondtrigopts == 0 && NoiseFilterOpts3 == 0} field = "Time", IC2ISR_tmask, {secondtrigopts1 || secondtrigopts2} field = "Percentage", IC2ISR_pmask, {secondtrigopts1 || secondtrigopts2} dialog = noisefilterpad field = "" field = "" field = "" field = "" dialog = Eastnoisefilter, "", yAxis panel = NoiseFiltercurve panel = noisefilterpad, South dialog = noisefiltering2, "Noise Filtering", xAxis panel = noisefiltering, West panel = Eastnoisefilter, East dialog = launchwest, "" field = "Launch Control Option:", launch_opt_on field = "Launch/transbrake debounce time", launch_debounce, { launch_opt_on || timedout1_in } field = "Ignore RPM for launch activation", launch_opt2_ignorerpm, { launch_opt_on } field = "LAUNCH" field = "Input On:", launch_opt_pins, { launch_opt_on } field = "Hard limit from MAP curve", launchlimopt_map, { launch_opt_on } field = "Launch Hard Limit", launch_hrd_lim, {launch_opt_on && (launchlimopt_map == 0)} field = "Soft Limit Zone", launch_sft_zone, {launch_opt_on} field = "Soft Limit Retard To", launch_sft_deg, {launch_opt_on } field = "Launch Fuel Add/Remove", launch_opt_bank, { launch_opt_on } field = "Fuel Addition", launch_addfuel, {launch_opt_bank && launch_opt_on} field = "Enable Launch When TPS Above", launch_tps, { launch_opt_on >0} field = "Limiter Method", launchlimopt, { launch_opt_on >0} field = "Disable Launch When VSS1 Above", launch_maxvss, { (launch_opt_on ) && (vss_opt0_1) } field = "Limiter Settings",launchlimopt_adv , { launch_opt_on } field = "Spark Limiter Type",launchlimopt_cut , { launch_opt_on && launchlimopt_adv} field = "Spark Cut Zone",launchcutzone , { launch_opt_on && launchlimopt_adv} field = "Cut Zone Timing",launchcuttiming , { launch_opt_on && launchlimopt_adv} field = "FLAT SHIFT" field = "Disable Flat-Shift When VSS1 Below", flats_minvss, { (launch_opt_on > 1) && (vss_opt0_1) } field = "Flat Shift Arming RPM", flats_arm, { launch_opt_on >1 } field = "Flat Shift Hard Rev Limit", flats_hrd, { launch_opt_on >1 } field = "Soft Limit Retard To :", flats_deg, { launch_opt_on >1 } field = "Cut Fuel Above", launch_fcut_rpm, { (launchlimopt & 1) && (launch_opt_on >0) } field = "TIMED RETARD" field = "Timed Retard After Launch", launch_opt_retard, { launch_opt_on } dialog = launchnortheast, "Variable Launch" field = "Variable Launch Input", launch_var_on, { launch_opt_on >0 } field = " -Minimum Setting", launch_var_low, {launch_var_on && launch_opt_on >0 } field = " -Maximum Setting", launch_var_up, {launch_var_on && launch_opt_on >0 } dialog = launchsoutheast, "3-Step / Burnout Limiter" field = "3-step Input", launch_3step_in, {launch_opt_on >0 } field = " -Soft Limit Retard To", launch_sft_deg3, {launch_3step_in && launch_opt_on >0} field = " -Hard Limit", launch_hrd_lim3, {launch_3step_in && launch_opt_on >0} dialog = llstg, "Line-Lock Staging" field = "Button Input", llstg_in, {launch_opt_on >0 } field = "Relay Output", llstg_out, {launch_opt_on && llstg_in } dialog = launchtbtstop, "Transbrake, Throttle Stop" field = "Transbrake Button Input", timedout1_in field = "Transbrake Output", timedout1_out, {timedout1_in} field = "Delay", timedout1_offdelay, {timedout1_in && timedout1_out} field = "Turbo Staging Button", tcs_in, {timedout1_in} field = "Release Time", tcs_offtime, {tcs_in && timedout1_in} field = "On Time", tcs_ontime, {tcs_in && timedout1_in} field = "Main # Moves", tcs_moves, {tcs_in && timedout1_in} field = "Step/Creep", tbrake_opt1_creep, {tcs_in && timedout1_in} field = "Throttle Stop Output", tstop_out, { launch_opt_on } field = "On Delay After Launch", tstop_delay, {tstop_out && launch_opt_on} field = "Keep On For", tstop_hold, {tstop_out && launch_opt_on} dialog = launcheast, "", yAxis panel = launchnortheast panel = launchtbtstop panel = launchsoutheast panel = llstg dialog = launch, "Launch Control/ 2-Step / 3-Step / T-brake", xAxis topicHelp = "file://$getProjectsDirPath()/docs/Megasquirt3_TunerStudio_MS_Lite_Reference-1.5.pdf#launch" panel = launchwest panel = launcheast dialog = vsslaunch1, "" field = "Wheel-Speed Based Launch", launch_opt_vss field = "ACTIVATION" field = "Enable Launch When TPS Above", launch_tps, { launch_opt_vss} field = "Timeout (0 = None)", launchvsstime, { launch_opt_vss} field = "Re-arm Below Speed", launchvss_minvss, { launch_opt_vss} field = "Enable Gear Checking", launch_opt_vssgear, { launch_opt_vss && gear_method } field = "Maximum Gear", launchvss_maxgear, { launch_opt_vss && launch_opt_vssgear && gear_method} field = "LIMITER" field = "Limiter Method", launchlimopt, { launch_opt_vss} field = "Hard limit is taken from the curve" field = "Soft Limit Zone", launch_sft_zone, { launch_opt_vss } field = "Retard To", launch_sft_deg, {launch_opt_vss } field = "Launch Fuel Add/Remove", launch_opt_bank, { launch_opt_vss } field = "Fuel Addition", launch_addfuel, {launch_opt_bank && launch_opt_vss} field = "Limiter settings are shared with the launch control page." dialog = vsslaunch, "Speed-Based Launch Control", xAxis panel = vsslaunch1 panel = vsslaunch_curve dialog = tacho, "Tacho Output" topicHelp = "file://$getProjectsDirPath()/docs/Megasquirt3_TunerStudio_MS_Lite_Reference-1.5.pdf#tachoout" field = "Tacho Output Enabled", tacho_opt80 field = "Output On:", tacho_opt3f, { tacho_opt80 } field = "Fixed or variable", tacho_optvar, { tacho_opt80 } field = "Speed", tacho_opt40, { tacho_opt80 && (tacho_optvar == 0) } field = "Scaling", tacho_scale, { tacho_opt80 && (tacho_optvar == 1) } dialog = overrun, "Over-Run Fuel Cut" topicHelp = "file://$getProjectsDirPath()/docs/Megasquirt3_TunerStudio_MS_Lite_Reference-1.5.pdf#overrun" field = "Over-Run Fuel Cut", OvrRunC field = "Cut fuel when Overrun Engine State active and:" field = "CLT Greater Than:", fc_clt, { OvrRunC } field = "After Delay", fc_delay, { OvrRunC } field = "Engine States must be configured." field = "" field = "Progressive Fuel Cut", OvrRunC_progcut, { OvrRunC } field = "Ignition Timing Transition (Cut)", OvrRunC_progign, {OvrRunC} field = "Ignition Timing During Over-Run", fc_timing, { OvrRunC && (OvrRunC_progign || OvrRunC_retign)} field = "Cut Transition Time", fc_transition_time, { OvrRunC && (OvrRunC_progcut || OvrRunC_progign)} field = "Progressive Fuel Return", OvrRunC_progret, { OvrRunC } field = "Ignition Timing Transition Return", OvrRunC_retign, { OvrRunC } field = "Return Transition Time", fc_trans_time_ret, { OvrRunC && (OvrRunC_progret || OvrRunC_retign) } field = "Highest RPM To Re-Engage Fuel:", fc_rpm_upper, { OvrRunC } field = "Lowest RPM To Re-Engage Fuel:", fc_rpm_lower, { OvrRunC } field = "RPMdot For Upper RPM Re-Engagement", fuelcut_fuelon_upper_rpmdot, { OvrRunC } field = "RPMdot For Lower RPM Re-Engagement", fuelcut_fuelon_lower_rpmdot, { OvrRunC } field = "Duration Of Fuel Adder", fc_ae_time, { OvrRunC } field = "Size Of Fuel Adder", fc_ae_pct, { OvrRunC && fc_ae_time } field = "Delay EGO After Fuel Return:", fc_ego_delay, { OvrRunC } dialog = mapPredictOn, "MAP/Load Prediction Settings", yAxis field = "MAP/Load Prediction On/Off", map_predict_on, { (algorithm == 1) || (algorithm == 2) || (algorithm == 6) } field = "MAP/Load Prediction activation (TPSdot)", map_predict_tpsdot, {map_predict_on} dialog = mapPredictTables, "MAP/Load Prediction Tables", yAxis panel = mapPredTable, Center, { map_predict_on && ((algorithm == 1) || (algorithm == 2) || (algorithm == 6)) } panel = mapPredTable2, Center, { map_predict_on && ((algorithm2 == 1) || (algorithm2 == 2) || (algorithm2 == 6)) } dialog = mapPredictCombined, "MAP/Load Prediction", xAxis panel = mapPredictOn, West panel = mapPredictTables, East dialog = staging, "Staged Injection" field = "Staged Injection First Parameter", staged_first_param field = "Primary Injector Size", staged_pri_size, { staged_first_param } field = "Secondary Injector Size", staged_sec_size, { staged_first_param } field = "Transition Fully To Secondaries", staged_extended_opts_pw1off, { staged_first_param } field = "Secondary Outputs", staged_extended_opts_use_v3, { staged_first_param && (staged_out1 == 0) } field = "Secondary V3 Alternate", staged_extended_opts_simult, { ((staged_extended_opts_use_v3 && staged_first_param) || ((nCylinders > 4) && (staged_first_param) && (hardware_fuel) && !(sequential & 0x1))) && (staged_out1 == 0) } field = "" field = "Gradual Transition", staged_transition_on, { staged_first_param && ((staged_first_param & 0x7) != 5) } field = "Transition Events", staged_transition_events, { (staged_first_param && staged_transition_on) && ((staged_first_param & 0x7) != 5) } field = "Primary Reduction Delay", staged_primary_delay, { (staged_first_param && staged_transition_on) && ((staged_first_param & 0x7) != 5) && (staged_out1 == 0) } field = "Secondary Enrichment", staged_secondary_enrichment, { (staged_first_param && staged_transition_on) && ((staged_first_param & 0x7) != 5) && (staged_out1 == 0) } field = "" field = "Primary Staging Threshold", staged_param_1, { staged_first_param && ((staged_first_param & 0x7) != 5) } field = "Primary Staging Hysteresis", staged_hyst_1, { staged_first_param && ((staged_first_param & 0x7) != 5) } field = "" field = "Second Parameter", staged_second_param, { staged_first_param && ((staged_first_param & 0x7) != 5) } field = "Secondary Staging Threshold", staged_param_2, { staged_second_param && staged_first_param && ((staged_first_param & 0x7) != 5) } field = "Secondary Staging Hysteresis", staged_hyst_2, { staged_second_param && staged_first_param && ((staged_first_param & 0x7) != 5) } field = "Secondary Staging Logic", staged_second_logic, { staged_second_param && staged_first_param && ((staged_first_param & 0x7) != 5) } field = "" field = "Relay Output", staged_out1, { staged_first_param } field = "Relay Output Polarity", staged_out1_inv, { staged_first_param && staged_out1} field = "Pre-Relay Output", staged_out2, { staged_first_param } field = "Pre-Relay Output Polarity", staged_out2_inv, { staged_first_param && staged_out2} field = "Pre-Relay Timer", staged_out2_time, { staged_first_param && staged_out2} dialog = stagedCombined, "Staged Injection", border topicHelp = "file://$getProjectsDirPath()/docs/Megasquirt3_TunerStudio_MS_Lite_Reference-1.5.pdf#stagedinj" panel = staging, West panel = stagedTable, Center, { (staged_first_param & 0x7) == 5 } dialog = crsettings, "Cranking / Startup Settings" topicHelp = "file://$getProjectsDirPath()/docs/Megasquirt3_TunerStudio_MS_Lite_Reference-1.5.pdf#crankstart" field = "Cranking RPM", crankingRPM field = "" field = "Flood Clear TPS", floodClear field = "Above this throttle no fuel is injected" field = "Batch Fire During Crank", feature7_batchcrank, {sequential} field = "Cranking Taper Curve", feature7_cranktaper field = "Cranking Taper Curve Units", feature7_crtpunits, {feature7_cranktaper} field = "Cranking Fuel Pulse Rate", altcrank field = "Blended Cranking Curves", alternate_blend field = "" field = "Priming Pulse Delay", primedelay field = "Ignore MAT Correction During ASE", feature3_matase field = "ASE Count Units", feature3_aseunit dialog = generalSettings, "Baro Sensor Settings" topicHelp = "file://$getProjectsDirPath()/docs/Megasquirt3_TunerStudio_MS_Lite_Reference-1.5.pdf#barocor" field = "Barometric Correction", baroCorr field = "Realtime Baro Port", rtbaroport, {baroCorr == 2} field = "Upper Limit", baro_upper, {baroCorr} field = "Lower Limit", baro_lower, {baroCorr} field = "Default Baro", baro_default, {baroCorr < 2} field = "Old baro calc", loadopts_oldbaro dialog = gsmap, "MAP Sensor Settings" field = "MAP Sensor Type", mapport_t field = "Voltage Input Port", mapport, {mapport_t == 0} field = "Frequency Input Port", mapport_f, {mapport_t == 1} field = "Low Frequency", map_freq0, {mapport_t == 1} field = "High Frequency", map_freq1, {mapport_t == 1} field = "2nd MAP Port", map2port, { (mapport_t == 0) } field = "(See also Tools->Calibrate MAP/Baro)" dialog = gsgen, "General Sensor Settings" field = "MegaView Temp. Units", tempUnits field = "MAP Averaging Lag Factor", mapLF field = "MAF Averaging Lag Factor", mafLF field = "RPM Averaging Lag Factor", rpmLF field = "TPS Averaging Lag Factor", tpsLF field = "Lambda Averaging Lag Factor", egoLF field = "CLT/MAT/Battery/Baro Lag Factor", adcLF field = "Disable additional battery smoothing", feature3_battv field = "Auto-zero TPS", feature3_tps dialog = secondaryLoad, "Load Parameters" field = "Primary Fuel Load", algorithm field = "Secondary Fuel Load", algorithm2 field = "Secondary Fuel", loadCombine, {algorithm2 != 0 } field = "Multiply MAP (VE1/3)", loadMult field = "99% of Speed-Density installs should use Multiply" field = "Multiply MAP (VE2/4)", loadMult2, {algorithm2 && (loadCombine == 2)} field = "Incorporate AFRTarget", loadStoich field = "Stoichiometric AFR", stoich ;, { loadStoich } needed for lambda calc even if not incl AFR field = "Primary Ignition Load", IgnAlgorithm field = "Secondary Ignition Load", IgnAlgorithm2 field = "Secondary Ignition", loadCombineign, {IgnAlgorithm2} field = "AFR table Load", afrload field = "EAE curve Load", eaeload dialog = overrun_note field = "Overrun is on the fuel menu" dialog = eastgeneral, "" panel = secondaryLoad, North panel = overrun_note, South dialog = generalsettings3, "", border panel = generalSettings, North panel = gsmap, Center panel = gsgen, South dialog = generalsettings2, "General Settings", border topicHelp = "file://$getProjectsDirPath()/docs/Megasquirt3_TunerStudio_MS_Lite_Reference-1.5.pdf#genset" panel = generalsettings3, West panel = eastgeneral, East dialog = revlimiter, "" topicHelp = "file://$getProjectsDirPath()/docs/Megasquirt3_TunerStudio_MS_Lite_Reference-1.5.pdf#revlim" field = "HARD REV LIMIT" field = "Hard Rev Limit", RevLimNormal2 field = "Soft Limit Zone / Hysteresis", RevLimNormal2_hyst field = "COOLANT TEMP LIMITER" field = "Rev Limiter CLT Based", RevLimCLTbased field = "Rev Limit TPS Bypass", TpsBypassCLTRevlim, { RevLimCLTbased & 1 } field = "Outside of curve temperatures, normal limit is used." field = "SPARK RETARD" field = "Spark Retard Mode", RevLimOption_retard field = "Maximum Retard", RevLimMaxRtd, { RevLimOption_retard == 1 } field = "Retard To", RevLimRtdAng, { RevLimOption_retard == 2} field = "SPARK CUT" field = "Enable Spark Cut Limiting", RevLimOption_spkcut field = "FUEL CUT" field = "Enable Fuel Cut Limiting", RevLimOption_fuelcut field = "Progressive Fuel Cut", RevLimOption_fuelprog, {RevLimOption_fuelcut} field = "" field = "" field = "" field = "" dialog = revlimiter2, "Rev Limiter", border panel = revlimiter, West panel = revlimiterBins, Center, { RevLimCLTbased & 1 } dialog = flexn, "" field = "#Spark/Fuel" field = "Sensor Frequency" field = "Ethanol Mix" field = "Fuel Multiplier%" field = "Timing Addition" field = "#Temp Sense" field = "Sensor PW" field = "Fuel Temp" dialog = flexl, "" field = "Low" field = "", fuelFreq0, { flexFuel } field = "", flex_pct0, { flexFuel } field = "", fuelCorr0, { flexFuel } field = "", fuelSpkDel0, { flexFuel } field = "Low" field = "", ff_tpw0, { flexFuel && (fueltemp1 == 1)} field = "", ff_temp0, { flexFuel && (fueltemp1 == 1)} dialog = flexh, "" field = "High" field = "", fuelFreq1, { flexFuel } field = "", flex_pct1, { flexFuel } field = "", fuelCorr1, { flexFuel } field = "", fuelSpkDel1, { flexFuel } field = "High" field = "", ff_tpw1, { flexFuel && (fueltemp1 == 1)} field = "", ff_temp1, { flexFuel && (fueltemp1 == 1)} dialog = ff_table1, "Flex Fuel Calibration", xAxis panel = flexn panel = flexl panel = flexh dialog = ff_fallback, "", yAxis field = "Baseline Ethanol%", flex_baseline, { flexFuel } field = "#Fallback For Sensor Failure" field = "Fallback Ethanol %", flexpct_default, { flexFuel > 0 } field = "Fallback Fuel Multiplier%", fuelCorr_default, { flexFuel > 0 } field = "Fallback Timing Addition", fuelSpkDel_default, { flexFuel > 0 } field = "#Flex Blending (enabled on Dual Fuel menu)" field = "Dual Fuel Mode", dualfuel_opt_mode, { 0 } dialog = flexFuelTop, "" field = "Flex Fuel Sensor", flexFuel field = "Sensor Port", flexport, { flexFuel > 0 } field = "Temperature Input", fueltemp1 dialog = flexFuelSettings, "Fuel Sensor Settings", yAxis topicHelp = "file://$getProjectsDirPath()/docs/Megasquirt3_TunerStudio_MS_Lite_Reference-1.5.pdf#flex" panel = flexFuelTop panel = ff_table1 panel = ff_fallback dialog = sequentialOptions, "Sequential Fuel Injection" field = "Main Fuel Outputs", hardware_fuel field = "Sequential On", sequential field = "Angle Specifies:", sequential_angle_spec, { sequential != 0 } field = "Injector Trim", sequential_trim_on_off dialog = firingorder1, "Firing Order" field = "A.", firea field = "B.", fireb, { nCylinders > 1} field = "C.", firec, { nCylinders > 2} field = "D.", fired, { nCylinders > 3} field = "E.", firee, { nCylinders > 4} field = "F.", firef, { nCylinders > 5} field = "G.", fireg, { nCylinders > 6} field = "H.", fireh, { nCylinders > 7} dialog = firingorder2, "Firing Order" field = "I.", firei, { nCylinders > 8} field = "J.", firej, { nCylinders > 9} field = "K.", firek, { nCylinders > 10} field = "L.", firel, { nCylinders > 11} field = "" field = "" field = "" field = "" field = "" dialog = firingorder, "", xAxis panel = firingorder1, West panel = firingorder2, East dialog = seqfo, "", yAxis panel = sequentialOptions panel = firingorder dialog = base3, "", yAxis field = "Engine Size", enginesize field = "Injector Size Each", staged_pri_size dialog = base2, "", yAxis panel = std_injection panel = base3 dialog = base, "Engine and Sequential Settings", border topicHelp = "file://$getProjectsDirPath()/docs/Megasquirt3_TunerStudio_MS_Lite_Reference-1.5.pdf#engseq" panel = base2, West panel = seqfo, Center ;main injector parameters dialog = ot_curve, "", yAxis field = "Injector Drive", opentime_opta_ph field = "Deadtime lookup", opentime_opt1_table field = "Inj Parameters", opentime_opt1_master field = "Inj A", opentime_opt1 field = "Inj B", opentime_opt2, {opentime_opt1_master} field = "Inj C", opentime_opt3, {opentime_opt1_master} field = "Inj D", opentime_opt4, {opentime_opt1_master} field = "Inj E", opentime_opt5, {opentime_opt1_master} field = "Inj F", opentime_opt6, {opentime_opt1_master} field = "Inj G", opentime_opt7, {opentime_opt1_master} field = "Inj H", opentime_opt8, {opentime_opt1_master} field = "Inj I", opentime_opta, {opentime_opt1_master} field = "Inj J", opentime_optb, {opentime_opt1_master} field = "Inj K", opentime_opt11, {opentime_opt1_master} field = "Inj L", opentime_opt12, {opentime_opt1_master} dialog = injchar_ms3x, "Injectors", xAxis panel = ot_curve ; 9-16 ;deadtime curves dialog = injcurveswest, "", yAxis panel = inj_deadtime_cv1, North panel = inj_deadtime_cv3, South dialog = injcurveseast, "", yAxis panel = inj_deadtime_cv2, North panel = inj_deadtime_cv4, South dialog = injcurves, "", xAxis panel = injcurveswest panel = injcurveseast ;deadtime tables dialog = injtableswest, "", yAxis panel = inj_deadtime_tbl1, North panel = inj_deadtime_tbl3, South dialog = injtableseast, "", yAxis panel = inj_deadtime_tbl2, North panel = inj_deadtime_tbl4, South dialog = injtables, "", xAxis panel = injtableswest panel = injtableseast dialog = injCharswest, "", yAxis panel = injchar_ms3x, North dialog = inj_curves_tables, "", card panel = injcurves, Center, { opentime_opt1_table == 0} panel = injtables, Center, { opentime_opt1_table == 1} dialog = injsettings, "", border topicHelp = "file://$getProjectsDirPath()/docs/Megasquirt3_TunerStudio_MS_Lite_Reference-1.5.pdf#injdt" panel = injCharswest, West panel = inj_curves_tables, Center ; table-switched alternate parameters field = "Inj I", inj2Opena, {opentime2_opt1_master} field = "Inj J", inj2Openb, {opentime2_opt1_master} field = "Inj K", inj2Open11, {opentime2_opt1_master} field = "Inj L", inj2Open12, {opentime2_opt1_master} dialog = ot_curve2, "", yAxis field = "Inj Parameters", opentime2_opt1_master field = "Inj A", opentime2_opt1 field = "Inj B", opentime2_opt2, {opentime2_opt1_master} field = "Inj C", opentime2_opt3, {opentime2_opt1_master} field = "Inj D", opentime2_opt4, {opentime2_opt1_master} field = "Inj E", opentime2_opt5, {opentime2_opt1_master} field = "Inj F", opentime2_opt6, {opentime2_opt1_master} field = "Inj G", opentime2_opt7, {opentime2_opt1_master} field = "Inj H", opentime2_opt8, {opentime2_opt1_master} field = "Inj I", opentime2_opta, {opentime2_opt1_master} field = "Inj J", opentime2_optb, {opentime2_opt1_master} field = "Inj K", opentime2_opt11, {opentime2_opt1_master} field = "Inj L", opentime2_opt12, {opentime2_opt1_master} dialog = injchar_ms3x_2, "Injectors", xAxis panel = ot_curve2 dialog = injCharswest2, "", yAxis panel = injchar_ms3x_2, North dialog = injsettings2, "" topicHelp = "file://$getProjectsDirPath()/docs/Megasquirt3_TunerStudio_MS_Lite_Reference-1.5.pdf#injdt2" panel = injCharswest2 dialog = smallpwwest2, "" field = "Enable Non-Linear Small Pulsewidths", smallpw2_opt1_master field = "(This is for the alternate injectors from dual-fuel)" field = "Injector A", smallpw2_opt1, { smallpw2_opt1_master } field = "Injector B", smallpw2_opt2, { smallpw2_opt1_master } field = "Injector C", smallpw2_opt3, { smallpw2_opt1_master } field = "Injector D", smallpw2_opt4, { smallpw2_opt1_master } field = "Injector E", smallpw2_opt5, { smallpw2_opt1_master } field = "Injector F", smallpw2_opt6, { smallpw2_opt1_master } field = "Injector G", smallpw2_opt7, { smallpw2_opt1_master } field = "Injector H", smallpw2_opt8, { smallpw2_opt1_master } field = "Injector I", smallpw2_opta, { smallpw2_opt1_master && ((hardware_fuel) && (nInjectors > 8)) } field = "Injector J", smallpw2_optb, { smallpw2_opt1_master && ((hardware_fuel) && (nInjectors > 9)) } field = "Injector K", smallpw2_opt11, { smallpw2_opt1_master && ((hardware_fuel) && (nInjectors > 10)) } field = "Injector L", smallpw2_opt12, { smallpw2_opt1_master && ((hardware_fuel) && (nInjectors > 11)) } dialog = smallpw2, "Injector Small Pulsewidths 2", border topicHelp = "file://$getProjectsDirPath()/docs/Megasquirt3_TunerStudio_MS_Lite_Reference-1.5.pdf#injsmallpw2" panel = smallpwwest2, West dialog = smallpwwest, "" field = "Enable Non-Linear Small Pulsewidths", smallpw_opt1_master field = "!CAUTION!" field = "Unless you have specific injector data these" field = "'curves' must be a straight line from 0-2" field = "Ensure the start and end points are equal" field = "(e.g. 0.000, 0.000 and 2.000, 2.000)" field = "Select the pulsewidth curve for each injector" field = "Injector A", smallpw_opt1, { smallpw_opt1_master && ((hardware_fuel) ) } field = "Injector B", smallpw_opt2, { smallpw_opt1_master && ((hardware_fuel) && (nInjectors > 1)) } field = "Injector C", smallpw_opt3, { smallpw_opt1_master && ((hardware_fuel) && (nInjectors > 2)) } field = "Injector D", smallpw_opt4, { smallpw_opt1_master && ((hardware_fuel) && (nInjectors > 3)) } field = "Injector E", smallpw_opt5, { smallpw_opt1_master && ((hardware_fuel) && (nInjectors > 4)) } field = "Injector F", smallpw_opt6, { smallpw_opt1_master && ((hardware_fuel) && (nInjectors > 5)) } field = "Injector G", smallpw_opt7, { smallpw_opt1_master && ((hardware_fuel) && (nInjectors > 6)) } field = "Injector H", smallpw_opt8, { smallpw_opt1_master && ((hardware_fuel) && (nInjectors > 7)) } field = "Injector I", smallpw_opta, { smallpw_opt1_master && ((hardware_fuel) && (nInjectors > 8)) } field = "Injector J", smallpw_optb, { smallpw_opt1_master && ((hardware_fuel) && (nInjectors > 9)) } field = "Injector K", smallpw_opt11, { smallpw_opt1_master && ((hardware_fuel) && (nInjectors > 10)) } field = "Injector L", smallpw_opt12, { smallpw_opt1_master && ((hardware_fuel) && (nInjectors > 11)) } dialog = smallcurveswest, "", yAxis panel = smallcurve0 panel = smallcurve2 dialog = smallcurveseast, "", yAxis panel = smallcurve1 panel = smallcurve3 dialog = smallcurves, "", xAxis panel = smallcurveswest panel = smallcurveseast dialog = smallpw, "Injector Small Pulsewidths", border topicHelp = "file://$getProjectsDirPath()/docs/Megasquirt3_TunerStudio_MS_Lite_Reference-1.5.pdf#injsmallpw" panel = smallpwwest, West panel = smallcurves, Center ; dialog = egoControl, "EGO Control" dialog = egoControlright, "" field = "Algorithm", egoAlgorithm, { egoType } field = "Use EGO Delay Table", egoAlgorithm_delay_table, {egoType && (egoAlgorithm < 3)} field = "Ignition Events Per Step", egoCount, { egoType && (egoAlgorithm < 3) && !egoAlgorithm_delay_table} field = "EGO Sensor Response Time", ego_sensor_delay, { egoType && (egoAlgorithm < 3) && egoAlgorithm_delay_table} field = "Controller Step Size", egoDelta, { egoType && (egoAlgorithm == 0) } field = "Use Authority Table", egoAlgorithm_auth, { egoType } field = "Combined or use authority tables", egoAlgorithm_auth2, { egoType && egoAlgorithm_auth} field = "Controller Auth +/-", egoLimit, { egoType && !egoAlgorithm_auth && (egoAlgorithm < 3) } field = "Only Correct Above:", ego_lower_bound, { egoType && (egoAlgorithm < 3) } field = "And Correct Below:", ego_upper_bound, { egoType && (egoAlgorithm < 3) } field = "Active Above Coolant", egoTemp, { egoType && (egoAlgorithm < 3) } field = "Active Above RPM", egoRPM, { egoType && !egoAlgorithm_auth && (egoAlgorithm < 3) } field = "Active Below TPS", TPSOXLimit, { egoType && (egoAlgorithm < 3) } field = "Active Below Load", MAPOXLimit, { egoType && !egoAlgorithm_auth && (egoAlgorithm < 3) } field = "Active Above Load", MAPOXMin, { egoType && !egoAlgorithm_auth && (egoAlgorithm < 3) } field = "EGO Delay After Start", ego_startdelay, { egoType && (egoAlgorithm < 3) } field = "EGO Delay After Fuel/Spark cut", ego_limdelay, { egoType && (egoAlgorithm < 3) } field = "PID Proportional Gain", egoKP, { egoType && (egoAlgorithm == 2) } field = "PID Integral", egoKI, { egoType && (egoAlgorithm == 2) } field = "PID Derivative", egoKD, { egoType && (egoAlgorithm == 2) } dialog = egoports, "",yAxis field = "EGO 1 Port", egoport1 field = "EGO 2 Port", egoport2, {egonum > 1} field = "EGO 3 Port", egoport3, {egonum > 2} field = "EGO 4 Port", egoport4, {egonum > 3} field = "EGO 5 Port", egoport5, {egonum > 4} field = "EGO 6 Port", egoport6, {egonum > 5} field = "EGO 7 Port", egoport7, {egonum > 6} field = "EGO 8 Port", egoport8, {egonum > 7} field = "EGO 9 Port", egoport9, {egonum > 8} field = "EGO 10 Port", egoport10, {egonum > 9} field = "EGO 11 Port", egoport11, {egonum > 10} field = "EGO 12 Port", egoport12, {egonum > 11} ; not implemented ; dialog = egoports_tgt, "", yAxis ; field = "AFR target" ; field = "", egomap1t ; field = "", egomap2t, {egonum > 1} ; field = "", egomap3t, {egonum > 2} ; field = "", egomap4t, {egonum > 3} ; field = "", egomap5t, {egonum > 4} ; field = "", egomap6t, {egonum > 5} ; field = "", egomap7t, {egonum > 6} ; field = "", egomap8t, {egonum > 7} dialog = egoports2, "EGO ports", xAxis panel = egoports ; panel = egoports_tgt dialog = egoControlleft, "", yAxis field = "EGO Sensor Type", egoType field = "Number Of Sensors", egonum, { egoType } field = "#Remember to Calibrate and set Project Properties" panel = egoports2 dialog = egoControlmain, "", xAxis panel = egoControlright, West panel = egoControlleft, East dialog = egomap_inj, "", yAxis field = "Injector" field = "Inj A" field = "Inj B" field = "Inj C" field = "Inj D" field = "Inj E" field = "Inj F" field = "Inj G" field = "Inj H" field = "Inj I" field = "Inj J" field = "Inj K" field = "Inj L" dialog = egomap_ego, "", yAxis field = "- Uses Sensor" field = "", egomap1 field = "", egomap2 field = "", egomap3 field = "", egomap4 field = "", egomap5 field = "", egomap6 field = "", egomap7 field = "", egomap8 field = "", egomap9 field = "", egomap10 field = "", egomap11 field = "", egomap12 dialog = egomap_fo, "",yAxis field = "Cylinder" field = "$stringValue( firea )", field = "$stringValue( fireb )", {0}, {1}, { nCylinders > 1} field = "", {0}, {1}, { !(nCylinders > 1)} field = "$stringValue( firec )", {0}, {1}, { nCylinders > 2} field = "", {0}, {1}, { !(nCylinders > 2)} field = "$stringValue( fired )", {0}, {1}, { nCylinders > 3} field = "", {0}, {1}, { !(nCylinders > 3)} field = "$stringValue( firee )", {0}, {1}, { nCylinders > 4} field = "", {0}, {1}, { !(nCylinders > 4)} field = "$stringValue( firef )", {0}, {1}, { nCylinders > 5} field = "", {0}, {1}, { !(nCylinders > 5)} field = "$stringValue( fireg )", {0}, {1}, { nCylinders > 6} field = "", {0}, {1}, { !(nCylinders > 6)} field = "$stringValue( fireh )", {0}, {1}, { nCylinders > 7} field = "", {0}, {1}, { !(nCylinders > 7)} field = "$stringValue( firei )", {0}, {1}, { nCylinders > 8} field = "", {0}, {1}, { !(nCylinders > 8)} field = "$stringValue( firej )", {0}, {1}, { nCylinders > 9} field = "", {0}, {1}, { !(nCylinders > 9)} field = "$stringValue( firek )", {0}, {1}, { nCylinders > 10} field = "", {0}, {1}, { !(nCylinders > 10)} field = "$stringValue( firel )", {0}, {1}, { nCylinders > 11} field = "", {0}, {1}, { !(nCylinders > 11)} dialog = egomapping, "AFR / EGO Sensor Mapping", xAxis panel = egomap_inj panel = egomap_ego panel = egomap_fo dialog = egoControl, "AFR / EGO Control", border topicHelp = "file://$getProjectsDirPath()/docs/Megasquirt3_TunerStudio_MS_Lite_Reference-1.5.pdf#egocont" panel = egoControlmain, West panel = egomapping, East dialog = ignitionOptions, "" field = "Spark Mode (Dizzy, EDIS, Wheel)", spk_mode0 ; ! field = "Trigger Angle/Offset", triggerOffset, { (spk_mode0 != 31) && (spk_mode0 != 4)} field = "Angle Between Main And Return", trigret_ang, { spk_mode0 ==12} field = "Oddfire First Angle", OddFireang, { (engineType == 1) && (spk_mode0 < 31) && (spk_conf2_oddodd != 3) } field = "HEI/GMDIS, TFI, C3I Options", spk_conf2_gmtfi, {(spk_mode0 == 2) || (spk_mode0 == 4)} field = "Oddfire Phasing", spk_conf2_oddodd, { (engineType == 1) && (spk_mode0==4)} field = "Skip Pulses", no_skip_pulses field = "Ignition Input Capture", ICIgnCapture ; ! field = "Spark Output", spkout_hi_lo2, {spk_mode0 != 31} ; field = "Number Of Coils", spk_mode3 field = "Spark Hardware In Use", hardware_spk field = "Cam Input (See tooltip)", hardware_cam, {!((spk_config_trig2 == 1) && (spk_mode0 == 4))} ; greyed in toothed wheel, single wheel field = "Tertiary Tach Input", spk_mode3_tach3, {spk_mode0 == 47} field = "Flip Polarity On Hi-Res Tach / Cam", spk_mode3_hirespol, { (spk_mode0 != 4) } dialog = moreIgnitionOptions, "" field = "Fixed Advance", timing_flags field = "Use Prediction", use_prediction field = "Timing for Fixed Advance", fixed_timing, { timing_flags == 1 }; field = "Cranking Dwell", crank_dwell field = "Cranking Advance", crank_timing, {!(spk_mode0 == 2 && triggerOffset < 20) } field = "" field = "Toyota Multiplex", spk_conf2_dli, {spk_mode0 > 2} field = "Dwell type", dwellmode field = "Use Dwell vs Rpm Curve", spk_conf2_dwell, {dwellmode ==2} field = "Use Dwell Table", spk_conf2_dwelltbl, {dwellmode ==0} field = "Nominal Dwell", max_coil_dur, {(spk_mode0 >1) && (dwellmode==0) && (spk_conf2_dwelltbl==0)} field = "Spark Duration", max_spk_dur, {(spk_mode0 >1) && (dwellmode==0) } field = "Dwell Time", dwelltime, {(spk_mode0 >1) && (dwellmode==2) && (spk_conf2_dwell==0)} field = "Dwell Duty", dwellduty, {(spk_mode0 >1) && (dwellmode==1) } field = "NOTE: Spark hardware latency should ONLY be used if" field = "you notice spark retard with increasing rpms." field = "Spark Hardware Latency", hw_latency field = "Middle LED indicator", feature4_0igntrig, { (spk_mode0 == 3) } field = "Spark Trim", spk_mode3_trim field = "Kick-start crank delay", spk_mode3_kick, { ((spk_mode0 == 2) && (triggerOffset < 20)) || (spk_mode0 == 3) } field = "Delay", kickdelay, { spk_mode3_kick && (((spk_mode0 == 2) && (triggerOffset < 20)) || (spk_mode0 == 3)) } dialog = triggerWheel, "" field = "Trigger Wheel Arrangement", spk_config_trig2, { spk_mode0 == 4 } field = "Trigger Wheel Teeth", triggerTeeth, { (spk_mode0 == 4) || (spk_mode0 == 47) } field = "Missing Teeth", No_Miss_Teeth, {(spk_config_trig2 != 2) && (spk_mode0 == 4)} field = "Tooth #1 Angle", Miss_ang, { (spk_mode0 == 4) || (spk_mode0 == 47) } field = "Main Wheel Speed", spk_config_camcrank, { (spk_mode0 == 4) || ((spk_mode0 == 14) && (nCylinders == 2))} field = "Second Trigger Active On", spk_config_trig2l, {(spk_config_trig2 & 0x2) && spk_mode0 == 4} field = "Level For Phase 1", spk_config_campol, {(spk_mode0 == 25) || ((spk_config_trig2l & 0x3) == 0x3) && (spk_mode0 == 4) && (spk_config_trig2 == 3)} field = "Check At Tooth#", poll_level_tooth, {((spk_config_trig2l & 0x3) == 0x3) && (spk_mode0 == 4) && (spk_config_trig2 == 3)} field = "And Every Rotation Of..", spk_config_resetcam, {((spk_config_trig2 & 0x3) == 0x2) && spk_mode0 == 4} field = "Start wasted COP", spk_mode3_wasted, { (spk_mode0 == 4) && (spk_config_trig2 == 3) } field = "High RPM fuel/spark delay after sync-loss", feature4_0resyncdel, { (spk_mode0 == 4) } field = "RPM threshold", resyncdel_rpm, { (spk_mode0 == 4) && feature4_0resyncdel } dialog = padignition field = "" dialog = westIgnitionOptions, "", yAxis panel = ignitionOptions panel = triggerWheel dialog = oddfireangles1, "" field = "Custom Oddfire Angles In Sequence From #1" dialog = oddfireangles3, "", xAxis field = "1st", oddfireangs1, {(spk_conf2_oddodd == 3) && (engineType == 1) && (spk_mode0==4)} field = "2nd", oddfireangs2, {(spk_conf2_oddodd == 3) && (engineType == 1) && (spk_mode0==4)} dialog = oddfireangles5, "", xAxis field = "3rd", oddfireangs3, {(spk_conf2_oddodd == 3) && (engineType == 1) && (spk_mode0==4)} field = "4th", oddfireangs4, {(spk_conf2_oddodd == 3) && (engineType == 1) && (spk_mode0==4)} dialog = eastIgnitionOptions, "", yAxis panel = moreIgnitionOptions panel = oddfireangles1 panel = oddfireangles3 panel = oddfireangles5 dialog = IgnitionOptions_join, "", xAxis panel = westIgnitionOptions panel = eastIgnitionOptions dialog = combinedignition, "Ignition Options / Wheel Decoder", border topicHelp = "file://$getProjectsDirPath()/docs/Megasquirt3_TunerStudio_MS_Lite_Reference-1.5.pdf#ignopts" ; panel = westIgnitionOptions, West panel = IgnitionOptions_join, Center dialog = northwestidle, "", yAxis field = "Idle Valve Type", IdleCtl field = "Algorithm", IdleCtl_alg, {IdleCtl > 1} dialog = northeastidle, "", yAxis field = "Fast Idle Temperature", fastIdleT, { IdleCtl == 1 } field = "Hysteresis", IdleHyst, { IdleCtl == 1 } dialog = westidle, "Stepper Idle" field = "Time Step Size", IACtstep, { IdleCtl == 3 } field = "Initial Time Step Size", IAC_tinitial_step, { IdleCtl == 3 } field = "Minimum # Steps To Move", IACminstep, { IdleCtl == 3 } field = "Homing Steps", IACStart, { IdleCtl == 3 } field = "Homing Direction", IdleCtl_home, { IdleCtl == 3 } field = "Wide Open Steps", iacfullopen, { IdleCtl_home && (IdleCtl == 3) } field = "Crank-to-Run Taper Time", IACcrankxt, { (IdleCtl == 3) && (IdleCtl_alg == 0) } field = "Power Between Steps", IACcurlim, { IdleCtl == 3 } dialog = eastidle, "PWM Idle" field = "Crank-to-Run Taper Time", pwmidlecranktaper, { (IdleCtl == 2) || (IdleCtl == 4) } field = "" field = "Valve mode", pwmidleset_inv, { IdleCtl == 2 } field = "Run Valve Before Start", pwmidle_freq_koeo, { IdleCtl == 2 } field = "Output Port", pwmidle_freq_pin, { (IdleCtl == 1) || (IdleCtl == 2) } field = "3 Wire Mode", pwmidle_freq_pin3, { IdleCtl == 2 } field = "Frequency", pwmidle_freq_scale, { IdleCtl == 2 } field = "This frequency may be shared with boost control" dialog = northidle, "", border panel = northwestidle, West panel = northeastidle, East dialog = southidle, "", border panel = westidle, West panel = eastidle, East dialog = combinedidle, "Idle Control", border topicHelp = "file://$getProjectsDirPath()/docs/Megasquirt3_TunerStudio_MS_Lite_Reference-1.5.pdf#idle" panel = northidle, North panel = southidle, South dialog = pwmidle_closedloop_pwm, "Closed-Loop Idle Valve Settings" topicHelp = "file://$getProjectsDirPath()/docs/Megasquirt3_TunerStudio_MS_Lite_Reference-1.5.pdf#clidle" field = "Idle Valve Minimum Duty", pwmidle_closed_duty, { ((IdleCtl == 2) || (IdleCtl == 4)) && (IdleCtl_alg == 1) } field = "Idle Valve Maximum Duty", pwmidle_open_duty, { ((IdleCtl == 2) || (IdleCtl == 4)) && (IdleCtl_alg == 1) } field = "Dashpot Adder", pwmidle_dp_adder, { ((IdleCtl == 2) || (IdleCtl == 4)) && (IdleCtl_alg == 1) } field = "Use Last Value or Table", pwmidle_cl_opts_initvaluetable field = "Use CLT Or MAT In Table Lookup", pwmidle_cl_opts_initval_clt, { pwmidle_cl_opts_initvaluetable } field = "Close Delay (0 Means Do Not Close)", pwmidle_close_delay field = "Open valve on WOT", pwmidle_flags_wot, { ((IdleCtl == 2) || (IdleCtl == 4)) && (IdleCtl_alg == 1) } field = "Shift Settings" field = "Leave Valve Closed Above:", pwmidle_shift_lower_rpm, { pwmidle_close_delay > 0 } field = "For This Number Of Seconds:", pwmidle_shift_open_time, { pwmidle_close_delay > 0 } dialog = pwmidle_closedloop_stepper, "Closed-Loop Idle Valve Settings" field = "Idle Valve Minimum Steps", pwmidle_closed_steps, { (IdleCtl == 3) } field = "Idle Valve Maximum Steps", pwmidle_open_steps, { (IdleCtl == 3) } field = "Dashpot Adder", pwmidle_dp_adder_steps field = "Use Last Value Or Table", pwmidle_cl_opts_initvaluetable field = "Use CLT Or MAT In Table Lookup", pwmidle_cl_opts_initval_clt, { pwmidle_cl_opts_initvaluetable } field = "Close Delay (0 Means Do Not Close)", pwmidle_close_delay field = "Open valve on WOT", pwmidle_flags_wot, { (IdleCtl == 3) } field = "Shift Settings" field = "Leave Valve Closed Above:", pwmidle_shift_lower_rpm, { pwmidle_close_delay > 0 } field = "For This Number Of Seconds:", pwmidle_shift_open_time, { pwmidle_close_delay > 0 } dialog = pwmidle_closedloop, "", card panel = pwmidle_closedloop_pwm, Center, { (IdleCtl == 2) || (IdleCtl == 4) } panel = pwmidle_closedloop_stepper, Center, { IdleCtl == 3 } dialog = pwmidle_PID_gains, "Closed-Loop Idle PID Gains" slider = "Closed-Loop Sensitivity", pwmidle_max_rpm_new, horizontal field = "Tuning Mode", pwmidle_cl_opts_display_pid field = "Proportional Gain", pwmidle_Kp_new, { pwmidle_cl_opts_display_pid } field = "Integral Gain", pwmidle_Ki_new, { pwmidle_cl_opts_display_pid } field = "Derivative Gain", pwmidle_Kd_new, { pwmidle_cl_opts_display_pid } dialog = pwmidle_PID_behavior, "Closed-Loop Idle PID Delays And Behavior" field = "PID Delay", pwmidle_pid_wait_timer field = "Crank To Run Taper", pwmidlecranktaper field = "PID Ramp To Target Time", pwmidle_targ_ramptime field = "PID Control Interval", pwmidle_ms dialog = pwmidle_empty, "" field = "See also Engine State Settings." field = "" field = "" field = "" field = "" field = "" dialog = pwmidle_west_panel, "", yAxis panel = pwmidle_closedloop panel = pwmidle_PID_gains dialog = pwmidle_mid_panel, "", yAxis panel = pwmidle_PID_behavior panel = pwmidle_empty dialog = combinedCLidle, "Closed-Loop Idle Settings", xAxis panel = pwmidle_west_panel panel = pwmidle_mid_panel ; first accel page dialog = accelsettings, "Accel Enrich Settings" topicHelp = "file://$getProjectsDirPath()/docs/Megasquirt3_TunerStudio_MS_Lite_Reference-1.5.pdf#aeset" field = "Use Time-Based or Accel-Pump Accel", AE_options field = "Wall-Wetting AE (EAE, X-tau)", EAEOption field = "TPSdot Uses %WOT", feature7_aetpswot field = "X-Tau MAPdot Thresholds for transition to X, Tau Decel Tables" field = "Start Transition", MapThreshXTD, {EAEOption > 2} field = "Finish Transition", MapThreshXTD2, {EAEOption > 2} ;time based AE dialog = time_ae_south_west, "" field = "Accel MAPdot threshold", mapThresh field = "End Pulsewidth", aeEndPW field = "Time Or Ignition Events", feature7_aeevents field = "Accel Duration", tpsasync_events, { feature7_aeevents } field = "Accel Taper", tpsasync2_events, { feature7_aeevents } field = "Accel Time", taeTime, { !feature7_aeevents } field = "Accel Taper Time", aeTaperTime, { !feature7_aeevents } dialog = time_ae_south_east, "" field = "Accel TPSdot Threshold", tpsThresh field = "Decel Fuel Amount", tdePct field = "Cold Accel Adder", taeColdA field = "Cold Accel Multiplier", taeColdM field = "Accel Enrich Down-Scaling With RPM" field = "Full Accel Below:", ae_lorpm, { !feature7_aeevents } field = "Zero Accel Above:", ae_hirpm, { !feature7_aeevents } dialog = time_ae_south_south, "", xAxis panel = time_ae_south_west panel = time_ae_south_east dialog = time_ae_south, "", yAxis liveGraph = timeaeGraph, "AE Graph", South graphLine = afr1 graphLine = TPSdot, "%", -2000, 2000, auto, auto graphLine = MAPdot, "%", -2000, 2000, auto, auto panel = time_ae_south_south dialog = time_ae_mid, "" slider = "Accel Enrichment MAPdot<->TPSdot Blend.", tpsProportion, horizontal dialog = time_ae_north, "", xAxis panel = time_accel_mapdot_curve, West, {tpsProportion < 100} panel = time_accel_tpsdot_curve, East, {tpsProportion > 0} dialog = AEtime_settings, "Time-Based Accel Enrichment", yAxis topicHelp = "file://$getProjectsDirPath()/docs/Megasquirt3_TunerStudio_MS_Lite_Reference-1.5.pdf#aetime" panel = time_ae_north panel = time_ae_mid panel = time_ae_south ;accel-pump dialog = pump_ae_south_west, "" field = "Accel MAPdot Threshold", accel_mapdot_threshold, { accel_blend_percent < 100 } field = "Accel TPSdot Threshold", accel_tpsdot_threshold, { accel_blend_percent > 0 } field = "Cold Accel Multiplier", accel_CLT_multiplier dialog = pump_ae_south_east, "" field = "Accel Enrich Down-Scaling With RPM" field = "Full Accel Below:", ae_lorpm, { !feature7_aeevents } field = "Zero Accel Above:", ae_hirpm, { !feature7_aeevents } dialog = pump_ae_south_south, "", xAxis panel = pump_ae_south_west panel = pump_ae_south_east dialog = pump_ae_south, "", yAxis liveGraph = pump_ae_Graph, "AE Graph", South graphLine = afr1 graphLine = TPSdot, "%", -2000, 2000, auto, auto graphLine = MAPdot, "%", -2000, 2000, auto, auto panel = pump_ae_south_south dialog = pump_ae_north, "", xAxis panel = pump_accel_mapdot_curve, West, {accel_blend_percent < 100} panel = pump_accel_tpsdot_curve, East, {accel_blend_percent > 0} dialog = pump_ae_mid, "" slider = "Accel Enrichment MAPdot<->TPSdot Blend.", accel_blend_percent, horizontal dialog = AEpump_settings, "Accel-Pump Accel Enrichment", yAxis topicHelp = "file://$getProjectsDirPath()/docs/Megasquirt3_TunerStudio_MS_Lite_Reference-1.5.pdf#accelpump" panel = pump_ae_north panel = pump_ae_mid panel = pump_ae_south ;time based AE (2) dialog = time_ae_south_west2, "" field = "Accel MAPdot threshold", mapThresh2 field = "End Pulsewidth", aeEndPW2 field = "Time Or Ignition Events", feature7_aeevents field = "Accel Duration", taeTime_events2, { feature7_aeevents } field = "Accel Taper", aeTaperTime_events2, { feature7_aeevents } field = "Accel Time", taeTime2, { !feature7_aeevents } field = "Accel Taper Time", aeTaperTime2, { !feature7_aeevents } dialog = time_ae_south_east2, "" field = "Accel TPSdot Threshold", tpsThresh2 field = "Decel Fuel Amount", tdePct2 field = "Cold Accel Adder", taeColdA2 field = "Cold Accel Multiplier", taeColdM2 field = "Accel Enrich Down-Scaling With RPM" field = "Full Accel Below:", ae_lorpm2, { !feature7_aeevents } field = "Zero Accel Above:", ae_hirpm2, { !feature7_aeevents } dialog = time_ae_south_south2, "", xAxis panel = time_ae_south_west2 panel = time_ae_south_east2 dialog = time_ae_south2, "", yAxis liveGraph = timeaeGraph2, "AE Graph", South graphLine = afr1 graphLine = TPSdot, "%", -2000, 2000, auto, auto graphLine = MAPdot, "%", -2000, 2000, auto, auto panel = time_ae_south_south2 dialog = time_ae_mid2, "" slider = "Accel Enrichment MAPdot<->TPSdot Blend.", tpsProportion2, horizontal dialog = time_ae_north2, "", xAxis panel = time_accel_mapdot_curve2, West, {tpsProportion2 < 100} panel = time_accel_tpsdot_curve2, East, {tpsProportion2 > 0} dialog = AEtime_settings2, "Time-Based Accel Enrichment", yAxis topicHelp = "file://$getProjectsDirPath()/docs/Megasquirt3_TunerStudio_MS_Lite_Reference-1.5.pdf#aetime" panel = time_ae_north2 panel = time_ae_mid2 panel = time_ae_south2 ;accel-pump (2) dialog = pump_ae_south_west2, "" field = "Accel MAPdot Threshold", accel_mapdot_threshold2, { accel_blend_percent < 100 } field = "Accel TPSdot Threshold", accel_tpsdot_threshold2, { accel_blend_percent > 0 } field = "Cold Accel Multiplier", accel_CLT_multiplier2 dialog = pump_ae_south_east2, "" field = "Accel Enrich Down-Scaling With RPM" field = "Full Accel Below:", ae_lorpm2, { !feature7_aeevents } field = "Zero Accel Above:", ae_hirpm2, { !feature7_aeevents } dialog = pump_ae_south_south2, "", xAxis panel = pump_ae_south_west2 panel = pump_ae_south_east2 dialog = pump_ae_south2, "", yAxis liveGraph = pump_ae_Graph2, "AE Graph", South graphLine = afr1 graphLine = TPSdot, "%", -2000, 2000, auto, auto graphLine = MAPdot, "%", -2000, 2000, auto, auto panel = pump_ae_south_south2 dialog = pump_ae_north2, "", xAxis panel = pump_accel_mapdot_curve2, West, {accel_blend_percent2 < 100} panel = pump_accel_tpsdot_curve2, East, {accel_blend_percent2 > 0} dialog = pump_ae_mid2, "" slider = "Accel Enrichment MAPdot<->TPSdot Blend.", accel_blend_percent2, horizontal dialog = AEpump_settings2, "Accel-Pump Accel Enrichment 2", yAxis topicHelp = "file://$getProjectsDirPath()/docs/Megasquirt3_TunerStudio_MS_Lite_Reference-1.5.pdf#accelpump" panel = pump_ae_north2 panel = pump_ae_mid2 panel = pump_ae_south2 dialog = sensorCal, "Calibrate MAP/Baro" topicHelp = "file://$getProjectsDirPath()/docs/Megasquirt3_TunerStudio_MS_Lite_Reference-1.5.pdf#calmapbaro" field = "#MAP Sensor" #if INI_VERSION_2 settingSelector = "Common MAP Sensors" settingOption = "MPX4115", map0=10.6, mapmax=121.7 settingOption = "MPX4250", map0=10, mapmax=260 settingOption = "GM 1-BAR", map0=10, mapmax=105 settingOption = "GM 2-BAR", map0=8.8, mapmax=208 settingOption = "GM 3-BAR / MPXH6300", map0=1.1, mapmax=315.5 settingOption = "MPXH6400", map0=3.5, mapmax=416.5 settingOption = "AEM 3.5 BAR", map0=-42.3, mapmax=386.3 settingOption = "AEM 5.0 BAR", map0=-64.6, mapmax=581.7 #endif field = "Value At 0.0 Volts", map0 field = "Value At 5.0 Volts", mapmax field = "#Barometer Sensor (usually identical to MAP)" #if INI_VERSION_2 settingSelector = "Common Baro Sensors" settingOption = "MPX4115", baro0=10.6, baromax=121.7 settingOption = "MPX4250", baro0=10, baromax=260 settingOption = "GM 1-BAR", baro0=10, baromax=105 settingOption = "GM 2-BAR", baro0=8.8, baromax=208 settingOption = "GM 3-BAR / MPXH6300",baro0=1.1, baromax=315.5 settingOption = "MPXH6400", baro0=3.5, baromax=416.5 settingOption = "AEM 3.5 BAR", map0=-42.3, mapmax=386.3 settingOption = "AEM 5.0 BAR", map0=-64.6, mapmax=581.7 #endif field = "Value At 0.0 Volts", baro0 field = "Value At 5.0 Volts", baromax field = "#Barometric Correction" field = "At Total Vacuum", bcor0 field = "Rate", bcormult dialog = knockSettings3, "Knock Sensor Settings" field = "Knock Control", knk_option field = "Input Type", knk_option_an, { knk_option } field = "Knock Input Pin", knkport, { knk_option && !knk_option_an } field = "Knock Indicated By:", knkDirection, { knk_option && !knk_option_an } field = "Pullup/Down On Input", knkpull, { knk_option && !knk_option_an } field = "Input Pin", knkport_an, { knk_option && (knk_option_an == 1) } field = "Window Sample Type", knk_option_wind, { knk_option && (knk_option_an == 1) } field = "Window Output", knk_pin_out, { knk_option && (knk_option_an < 2) } field = "Monitor Per Cylinder", knock_conf_percyl, { knk_option > 0 } field = "Control Per Cylinder", knock_conf_percylact, { knk_option > 0 } field = "DEBUG data", knock_conf_debug, { knk_option > 0 } field = "#Detection" field = "Knock Count", knk_ndet, { knk_option > 0 } field = "Knock Ignored Above MAP", knk_maxmap, { knk_option > 0 } field = "RPM Window Low", knk_lorpm, { knk_option > 0 } field = "RPM Window High", knk_hirpm, { knk_option > 0 } field = "Ignore During Launch/Flatshift", knock_conf_launch, { knk_option > 0 } field = "#Retarding" field = "Maximum Retard", knk_maxrtd, { knk_option > 0 } field = "Retard Check Time", knk_trtd, { knk_option > 0 } field = "Retard Coarse Step Size", knk_step1, { knk_option > 0 } field = "Retard Fine Step Size", knk_step2, { knk_option > 0 } field = "#Recovery" field = "Advance Check Time", knk_tadv, { knk_option > 0 } field = "Advance Step Size", knk_step_adv, { knk_option > 0 } field = "Recovery Advance", knk_dtble_adv, { knk_option == 1 } dialog = ks4a, "", yAxis field = "Cyl#" field = "1" field = "2" field = "3" field = "4" field = "5" field = "6" field = "7" field = "8" field = "9" field = "10" field = "11" field = "12" dialog = ks4b, "", yAxis field = "Gain" field = "", knock_gain01 field = "", knock_gain02, {knock_conf_percyl && (nCylinders >1)} field = "", knock_gain03, {knock_conf_percyl && (nCylinders >2)} field = "", knock_gain04, {knock_conf_percyl && (nCylinders >3)} field = "", knock_gain05, {knock_conf_percyl && (nCylinders >4)} field = "", knock_gain06, {knock_conf_percyl && (nCylinders >5)} field = "", knock_gain07, {knock_conf_percyl && (nCylinders >6)} field = "", knock_gain08, {knock_conf_percyl && (nCylinders >7)} field = "", knock_gain09, {knock_conf_percyl && (nCylinders >8)} field = "", knock_gain10, {knock_conf_percyl && (nCylinders >9)} field = "", knock_gain11, {knock_conf_percyl && (nCylinders >10)} field = "", knock_gain12, {knock_conf_percyl && (nCylinders >11)} dialog = ks4c, "", yAxis field = "Sensor" field = "", knock_sens01 field = "", knock_sens02, {knock_conf_percyl && (nCylinders >1)} field = "", knock_sens03, {knock_conf_percyl && (nCylinders >2)} field = "", knock_sens04, {knock_conf_percyl && (nCylinders >3)} field = "", knock_sens05, {knock_conf_percyl && (nCylinders >4)} field = "", knock_sens06, {knock_conf_percyl && (nCylinders >5)} field = "", knock_sens07, {knock_conf_percyl && (nCylinders >6)} field = "", knock_sens08, {knock_conf_percyl && (nCylinders >7)} field = "", knock_sens09, {knock_conf_percyl && (nCylinders >8)} field = "", knock_sens10, {knock_conf_percyl && (nCylinders >9)} field = "", knock_sens11, {knock_conf_percyl && (nCylinders >10)} field = "", knock_sens12, {knock_conf_percyl && (nCylinders >11)} dialog = ks4bot, "", xAxis panel = ks4a panel = ks4b panel = ks4c dialog = ks4top, "" field = "Bandpass Frequency (kHz)", knock_bpass field = "Integrator Time constant (us)", knock_int field = "Number of Sensors", knock_conf_num field = "Monitor Per Cylinder", knock_conf_percyl field = "Knock gain:" dialog = knockSettings4, "Knock Sensor Parameters", border topicHelp = "file://$getProjectsDirPath()/docs/Megasquirt3_TunerStudio_MS_Lite_Reference-1.5.pdf#knockparam" panel = ks4top, North panel = ks4bot, South dialog = knockSettings, "Knock Sensor Settings", border topicHelp = "file://$getProjectsDirPath()/docs/Megasquirt3_TunerStudio_MS_Lite_Reference-1.5.pdf#knock" panel = knockSettings3, West panel = knockthresh_curve, Center dialog = knockSettings2, "Knock Window Settings", border topicHelp = "file://$getProjectsDirPath()/docs/Megasquirt3_TunerStudio_MS_Lite_Reference-1.5.pdf#knockwindow" panel = knockstart_curve, North panel = knockduration_curve, South dialog = idleAdvancemenu, "Idle Advance Settings" topicHelp = "file://$getProjectsDirPath()/docs/Megasquirt3_TunerStudio_MS_Lite_Reference-1.5.pdf#idleadv" field = "Idle Advance On", idleadvance_on field = "Idle RPM Timing Correction", idle_special_ops_timing_assist field = "Go to idle advance/Idle RPM timing correction when:" field = "PID Idle Activates", idleveadv_to_pid_idleadv, { idleadvance_on || idle_special_ops_timing_assist } field = "Engine idle state and:" field = "And CLT Is Above:", idleadvance_clt, { (idleadvance_on || idle_special_ops_timing_assist) && !idleveadv_to_pid_idleadv } field = "And After Delay:", idleadvance_delay, { (idleadvance_on || idle_special_ops_timing_assist) && !idleveadv_to_pid_idleadv } field = "Engine States must be configured." dialog = idleAdvance, "Idle Advance Settings", border panel = idleAdvancemenu, West panel = idleAdvance_curve, Center dialog = idleVemenu, "Idle VE settings" topicHelp = "file://$getProjectsDirPath()/docs/Megasquirt3_TunerStudio_MS_Lite_Reference-1.5.pdf#idleve" field = "Idle VE On", idleve_on field = "Go to idle VE when:" field = "PID Idle Activates", idleveadv_to_pid_idleve, { idleve_on } field = "Engine idle state and:" field = "And CLT Is Above:", idleve_clt, { idleve_on && !idleveadv_to_pid_idleve } field = "And After Delay:", idleve_delay, { idleve_on && !idleveadv_to_pid_idleve } field = "Engine States must be configured." dialog = idleVeTables_n, "Idle VE Table" panel = idleve1Tbl, North, { idleve_on } dialog = idleVeTables_s, "Idle VE Table - Dual Fuel" panel = idleve2Tbl, South, { idleve_on && dualfuel_sw_on } dialog = idleVeTables, "", yAxis panel = idleVeTables_n panel = idleVeTables_s dialog = idleVe, "Idle VE", border panel = idleVemenu, West panel = idleVeTables, Center dialog = setbaud, "ECU Baud Rate" topicHelp = "file://$getProjectsDirPath()/docs/Megasquirt3_TunerStudio_MS_Lite_Reference-1.5.pdf#baud" field = "#The ECU baud rate should normally be 115200" field = "ECU Baud Rate", baud field = "9600, 19200, 38400, 57600, 115200 only" field = "!Non-standard baud - ECU will lose comms!", {0}, {1}, { baud != 115200 } field = "SDcard Readback Baud Rate", baudhigh field = "115200, 230400 or 460800 only" field = "!Invalid baud", {0}, {1}, { (baudhigh != 115200) && (baudhigh != 230400) && (baudhigh != 460800) } field = "" field = "Set these, then Burn. ECU will lose comms." field = "Then set Baud rate in Communications->Settings the same." field = "" field = "Use High Speed Runtime", scatterRuntimeEnabled dialog = userdefined, "User Defined Menu" field = "Feature Enabled", user_conf0 field = "Mode", user_conf1, { user_conf0 } ; <---- this bit here greys the control out if the bit isn't set field = "Value 1", user_value1, { user_conf0 } field = "Value 2", user_value2, { user_conf0 } dialog = generic_pid_left_a, "" field = "Enable", generic_pid_flags_a_on field = "Closed-loop (PID) type", generic_pid_flags_a_type, { generic_pid_flags_a_on } channelSelector= "Load Axis", generic_pid_load_offset_a, generic_pid_load_size_a, { generic_pid_flags_a_on } channelSelector= "Feedback Input Variable (PV)", generic_pid_PV_offset_a, generic_pid_PV_size_a, { generic_pid_flags_a_on } field = "Max Feedback Input", generic_pid_upper_inputlim_a, { generic_pid_flags_a_on } field = "Min Feedback Input", generic_pid_lower_inputlim_a, { generic_pid_flags_a_on } field = "Control Output Port/Pin", generic_pid_pwm_outs_a, { generic_pid_flags_a_on } field = "Frequency" , generic_pid_pwm_opts_freq_a, { generic_pid_flags_a_on } field = "Max Control Output", generic_pid_output_upperlim_a, { generic_pid_flags_a_on } field = "Min Control Output", generic_pid_output_lowerlim_a, { generic_pid_flags_a_on } field = "Output Polarity", generic_pid_flags_a_direction, { generic_pid_flags_a_on } ; field = "Generic PID direction", generic_pid_flags_a_direction, { generic_pid_flags_a_on } ; field = "Generic PID use stepper", generic_pid_flags_a_output_type, { generic_pid_flags_a_on } ; field = "Generic PID use table or curve", generic_pid_flags_a_lookup_type, { generic_pid_flags_a_on } field = "Control Interval", generic_pid_control_interval_a, { generic_pid_flags_a_on } field = "P Term", generic_pid_P_a, { generic_pid_flags_a_on } field = "I Term", generic_pid_I_a, { generic_pid_flags_a_on } field = "D Term", generic_pid_D_a, { generic_pid_flags_a_on } field = "CLT/MAT Units", sensor_temp, {0} dialog = generic_pid_curve_grapha, "", card panel = generic_pid_Tbl_a, Center, { generic_pid_flags_a_on } dialog = generic_pid_a, "Generic Closed-Loop A", border topicHelp = "file://$getProjectsDirPath()/docs/Megasquirt3_TunerStudio_MS_Lite_Reference-1.5.pdf#gencl" panel = generic_pid_left_a, West panel = generic_pid_curve_grapha, Center dialog = generic_pid_left_b, "" field = "Enable", generic_pid_flags_b_on field = "Closed-Loop (PID) Type", generic_pid_flags_b_type, { generic_pid_flags_b_on } channelSelector= "Load Axis", generic_pid_load_offset_b, generic_pid_load_size_b, { generic_pid_flags_b_on } channelSelector= "Feedback Input Variable (PV)", generic_pid_PV_offset_b, generic_pid_PV_size_b, { generic_pid_flags_b_on } field = "Max Feedback Input", generic_pid_upper_inputlim_b, { generic_pid_flags_b_on } field = "Min Feedback Input", generic_pid_lower_inputlim_b, { generic_pid_flags_b_on } field = "Control Output Port/Pin", generic_pid_pwm_outs_b, { generic_pid_flags_b_on } field = "Frequency" , generic_pid_pwm_opts_freq_b, { generic_pid_flags_b_on } field = "Max Control Output", generic_pid_output_upperlim_b, { generic_pid_flags_b_on } field = "Min Control Output", generic_pid_output_lowerlim_b, { generic_pid_flags_b_on } field = "Output Polarity", generic_pid_flags_b_direction, { generic_pid_flags_b_on } ; field = "Generic PID direction", generic_pid_flags_b_direction, { generic_pid_flags_b_on } ; field = "Generic PID use stepper", generic_pid_flags_b_output_type, { generic_pid_flags_b_on } ; field = "Generic PID use table or curve", generic_pid_flags_b_lookup_type, { generic_pid_flags_b_on } field = "Control Interval", generic_pid_control_interval_b, { generic_pid_flags_b_on } field = "P Term", generic_pid_P_b, { generic_pid_flags_b_on } field = "I Term", generic_pid_I_b, { generic_pid_flags_b_on } field = "D Term", generic_pid_D_b, { generic_pid_flags_b_on } field = "CLT/MAT Units", sensor_temp, {0} dialog = generic_pid_curve_graphb, "", card panel = generic_pid_Tbl_b, Center, { generic_pid_flags_b_on } dialog = generic_pid_b, "Generic Closed-Loop B", border topicHelp = "file://$getProjectsDirPath()/docs/Megasquirt3_TunerStudio_MS_Lite_Reference-1.5.pdf#gencl" panel = generic_pid_left_b, West panel = generic_pid_curve_graphb, Center ;------------------------------------------------------------------------------- ; General help text help = helpGeneral, "MS33 General Help" webHelp = "http://www.msextra.com/" text = "For current documentation, click the Web Help button," text = "or visit http://www.msextra.com/." text = "
" text = "
MS3 firmware is copyright and is only licensed for use on approved hardware." text = "
See the LICENSE text supplied with your firmware." text = "
" text = "
To see legal MS3 ECUs, visit http://www.msextra.com/doc/general/whatmegasquirt.html" ;------------------------------------------------------------------------------- #if INI_VERSION_2 [PortEditor] ; spare ports ; map the arrays and supply the labels. ; all arrays are expected to be the same length in the first dimension ; thus a [ 7] array will be 7 ports in length and expect 7 labels ; The second dimension will drive the number of conditions per array. ; thus a [7x2] array will have 2 conditions joined by the conditionRelationship. ; a [7x3] will have up to 3 conditions. portEditor = ms3_port_edit1, "Programmable On/Off Outputs " ;psEnabled ; 1st the array constant, then the labels in the index order. enabledPorts = psEnabled, "INVALID", "INVALID", "INVALID", "Stepper Out 2", "Stepper Out 1", "INVALID", "PWM Out 2", "High Current Out 3", "High Current Out 1", "High Current Out 2", "PWM Out 3", "PWM / Idle Out 1", "Injector Out I", "Injector Out J", "Digital Frequency In 2", "Tach Out", "Injector Out A", "Injector Out B", "Injector Out C", "Injector Out D", "Injector Out E", "Injector Out F", "Injector Out G", "Injector Out H", "Spark Out A", "Spark Out b", "Spark Out C", "Spark Out D", "Spark Out E", "Spark Out F", "Spark Out G", "Spark Out H", "Digital In Out 1", "Digital In Out 2", "Digital In Out 3", "Digital In Out 4", "Digital In Out 5", "PWM Out 4", "PWM Out 5", "Digital Output 1 LED", "Digital Output 2", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID","INVALID", "INVALID", "INVALID" outputOffset = psOutOffset outputSize = psOutSize operators = psCondition, "<", "=", ">", "&" ; the actual ASCII value of the operator will be sent to the controller threshold = psThreshold hysteresis = psHysteresis powerOnValue = psInitValue triggerValue = psPortValue conditionRelationship = psConnector, " ", "|", "&" activateOption = extendedDataInSize activateOption = filter32BitChannels portEditor = ms3_port_edit2, "Programmable On/Off Outputs 2" ; 1st the array constant, then the labels in the index order. enabledPorts = psEnabled_2, "CANOUT01", "CANOUT02", "CANOUT03", "CANOUT04", "CANOUT05", "CANOUT06", "CANOUT07", "CANOUT08", "CANOUT09", "CANOUT10", "CANOUT11", "CANOUT12", "CANOUT13", "CANOUT14", "CANOUT15", "CANOUT16", "Loop 1", "Loop 2", "Loop 3", "Loop 4", "Loop 5", "Loop 6", "Loop 7", "Loop 8" outputOffset = psOutOffset_2 outputSize = psOutSize_2 operators = psCondition_2, "<", "=", ">", "&" ; the actual ASCII value of the operator will be sent to the controller threshold = psThreshold_2 hysteresis = psHysteresis_2 powerOnValue = psInitValue_2 triggerValue = psPortValue_2 conditionRelationship = psConnector_2, " ", "|", "&" activateOption = extendedDataInSize activateOption = filter32BitChannels #endif ;------------------------------------------------------------------------------- [CurveEditor] curve = launch_var_curve, "Launch Limit vs. MAP" columnLabel = "MAP", "RPM limit" xAxis = 0, 700, 7 yAxis = 0, 9000, 7 xBins = launch_var_maps yBins = launch_var_rpms curve = vsslaunch_curve, "RPM Limit vs. Speed" columnLabel = "Speed", "RPM limit", "Retard" xAxis = 0, { prefSpeedUnits == 0 ? 50 : 80 }, 9 yAxis = 0, {rpmhigh}, 9 ; xAxis = 0, { prefSpeedUnits == 0 ? 50 : 80 }, 9 ; yAxis = 0, 30, 9 xBins = vsslaunch_vss yBins = vsslaunch_rpm yBins = vsslaunch_retard curve = cranktaper_curvee, "Cranking Taper Curve (Events)" topicHelp = "file://$getProjectsDirPath()/docs/Megasquirt3_TunerStudio_MS_Lite_Reference-1.5.pdf#crankingtaper" columnLabel = "Events", "%fuel" xAxis = 0, 1000, 5 yAxis = 0, 500, 5 xBins = cranktaper_timeevents yBins = cranktaper_pct curve = cranktaper_curvet, "Cranking Taper Curve (Time)" topicHelp = "file://$getProjectsDirPath()/docs/Megasquirt3_TunerStudio_MS_Lite_Reference-1.5.pdf#crankingtaper" columnLabel = "Time", "%fuel" xAxis = 0, 25.5, 5 yAxis = 0, 500, 5 xBins = cranktaper_time yBins = cranktaper_pct curve = oil_curve, "Min/Max Oil Pressure vs. RPM" columnLabel = "RPM", "Min", "Max" xAxis = 0, {rpmhigh}, 6 yAxis = 0, 300, 6 xBins = oil_rpm, rpm yBins = oil_press_min, oil_pressure yBins = oil_press_max lineLabel = "Min. pressure" lineLabel = "Max. pressure" curve = hpte_curve, "Enrichment vs. Time" columnLabel = "Time", "AFR decrease" xAxis = 0, 25.5, 6 yAxis = 0, 3, 6 xBins = hpte_times yBins = hpte_afrs curve = fp_temp_curve, "Temperature Adjustment (Primary Fuel)" topicHelp = "file://$getProjectsDirPath()/docs/Megasquirt3_TunerStudio_MS_Lite_Reference-1.5.pdf#fueltemp1" columnLabel = "Temperature", "adj %" xAxis = -40, 220, 9 yAxis = -200, 200, 6 xBins = fp_temps, fuel_temp1 yBins = fp_temp_adj curve = fp_press_curve, "Pressure Adjustment (Primary Fuel)" topicHelp = "file://$getProjectsDirPath()/docs/Megasquirt3_TunerStudio_MS_Lite_Reference-1.5.pdf#fuelpress1" columnLabel = "Differential Pressure", "adj %" xAxis = 200, 600, 9 yAxis = -200, 200, 6 xBins = fp_presss, fuel_press1 yBins = fp_press_adj curve = alternator_linearise, "Duty linearisation" columnLabel = "Calc", "Output" xAxis = 0, 100, 7 yAxis = 0, 100, 7 xBins = alt_dutyin yBins = alt_dutyout curve = alternator_tempcurve, "Target Charge Voltage" columnLabel = "Temperature", "Voltage" xAxis = 0, 100, 6 yAxis = 12, 16, 6 xBins = alternator_temp yBins = alternator_targvolts curve = alternator_outduty, "Alternator Control Duty" columnLabel = "Voltage", "Duty %" xAxis = 12, 16, 6 yAxis = 0, 100, 6 xBins = alternator_dvolts, alt_targv yBins = alternator_dutyv curve = alternator_outperiod, "Alternator Control Period" columnLabel = "Voltage", "Period ms" xAxis = 12, 16, 6 yAxis = 0, 16, 6 xBins = alternator_pvolts, alt_targv yBins = alternator_periodv curve = pwm_curve_a, "PWM curve A" columnLabel = "Load", "" xAxis = 0, 100, 6 yAxis = 0, 100, 7 xBins = pwm_xaxis_a, pwma_load yBins = pwm_yaxis_a size = 300, 240 curve = pwm_curve_b, "PWM curve B" columnLabel = "Load", "" xAxis = 0, 100, 6 yAxis = 0, 100, 7 xBins = pwm_xaxis_b, pwmb_load yBins = pwm_yaxis_b size = 300, 240 curve = pwm_curve_c, "PWM curve C" columnLabel = "Load", "" xAxis = 0, 100, 6 yAxis = 0, 100, 7 xBins = pwm_xaxis_c, pwmc_load yBins = pwm_yaxis_c size = 300, 240 curve = pwm_curve_d, "PWM curve D" columnLabel = "Load", "" xAxis = 0, 100, 6 yAxis = 0, 100, 7 xBins = pwm_xaxis_d, pwmd_load yBins = pwm_yaxis_d size = 300, 240 curve = pwm_curve_e, "PWM curve E" columnLabel = "Load", "" xAxis = 0, 100, 6 yAxis = 0, 100, 7 xBins = pwm_xaxis_e, pwme_load yBins = pwm_yaxis_e size = 300, 240 curve = pwm_curve_f, "PWM curve F" columnLabel = "Load", "" xAxis = 0, 100, 6 yAxis = 0, 100, 7 xBins = pwm_xaxis_f, pwmf_load yBins = pwm_yaxis_f size = 300, 240 curve = tc_slip_curve, "Slip Threshold vs Knob Input" columnLabel = "Knob Input", "%" xAxis = 0, 100, 6 yAxis = 0, 100, 7 xBins = tcslipx yBins = tcslipy curve = blend1_curve, "VE1 -> VE2" columnLabel = "X", "%" xAxis = 0, 100, 6 yAxis = 0, 100, 7 xBins = blendx1 yBins = blendy1 curve = blend2_curve, "Spk1 -> Spk2" columnLabel = "X", "%" xAxis = 0, 100, 6 yAxis = 0, 100, 7 xBins = blendx2 yBins = blendy2 curve = blend3_curve, "VE1+2 -> VE3+4" columnLabel = "X", "%" xAxis = 0, 100, 6 yAxis = 0, 100, 7 xBins = blendx3 yBins = blendy3 curve = blend4_curve, "Spk1+2 -> Spk3+4" columnLabel = "X", "%" xAxis = 0, 100, 6 yAxis = 0, 100, 7 xBins = blendx4 yBins = blendy4 curve = blend5_curve, "AFR1 -> AFR2" columnLabel = "X", "%" xAxis = 0, 100, 6 yAxis = 0, 100, 7 xBins = blendx5 yBins = blendy5 curve = blend6_curve, "Boost1 -> Boost2" columnLabel = "X", "%" xAxis = 0, 100, 6 yAxis = 0, 100, 7 xBins = blendx6 yBins = blendy6 curve = blend7_curve, "Crank % 1 -> Crank % 2" columnLabel = "X", "%" xAxis = 0, 100, 6 yAxis = 0, 100, 7 xBins = blendx7 yBins = blendy7 curve = blend8_curve, "Flex Blending" columnLabel = "Flex%", "Blend%" xAxis = 0, 100, 6 yAxis = 0, 100, 7 xBins = blendx8 yBins = blendy8 curve = tpswot_curve, "TPS for WOT" topicHelp = "file://$getProjectsDirPath()/docs/Megasquirt3_TunerStudio_MS_Lite_Reference-1.5.pdf#tpswot" columnLabel = "RPM", "TPS" xAxis = 0, {rpmhigh}, 6 yAxis = 0, 100, 7 xBins = tpswot_rpm, rpm yBins = tpswot_tps curve = launch_retard_time, "Timed Retard After Launch" topicHelp = "file://$getProjectsDirPath()/docs/Megasquirt3_TunerStudio_MS_Lite_Reference-1.5.pdf#timedretard" columnLabel = "s", "Retard" xAxis = 0, 15, 6 yAxis = 0, 30, 7 xBins = launch_time, launch_timer yBins = launch_retard curve = cl_idle_timing_curve, "Idle RPM Timing Correction Curve" topicHelp = "file://$getProjectsDirPath()/docs/Megasquirt3_TunerStudio_MS_Lite_Reference-1.5.pdf#idleadvrpm" columnLabel = "RPM delta", "Timing Delta" xAxis = -400, 400, 8 yAxis = -20, 20, 8 xBins = cl_idle_timing_target_deltas yBins = cl_idle_timing_advance_deltas curve = idle_voltage_comp_curve, "PWM Idle Voltage Compensation" topicHelp = "file://$getProjectsDirPath()/docs/Megasquirt3_TunerStudio_MS_Lite_Reference-1.5.pdf#idlevolt" columnLabel = "Voltage", "Duty" xAxis = 9, 17, 6 yAxis = -10, 10, 6 xBins = idle_voltage_comp_voltage yBins = idle_voltage_comp_delta ;time-based curve = time_accel_mapdot_curve, "MAP based AE" columnLabel = "MAPdot", "Added" xAxis = 0, 1200, 6 yAxis = 0, 48, 4 xBins = maeRates, MAPdot yBins = maeBins ;time-based curve = time_accel_tpsdot_curve, "TPS based AE" columnLabel = "TPSdot", "Added" xAxis = 0, 1200, 6 yAxis = 0, 48, 4 xBins = taeRates, TPSdot yBins = taeBins ;time-based2 curve = time_accel_mapdot_curve2, "MAP based AE" columnLabel = "MAPdot", "Added" xAxis = 0, 1200, 6 yAxis = 0, 48, 4 xBins = maeRates2, MAPdot yBins = maeBins2 ;time-based2 curve = time_accel_tpsdot_curve2, "TPS based AE" columnLabel = "TPSdot", "Added" xAxis = 0, 1200, 6 yAxis = 0, 48, 4 xBins = taeRates2, TPSdot yBins = taeBins2 ;accel-pump curve = pump_accel_mapdot_curve, "Accel MAPdot Curve" columnLabel = "MAPdot", "Added" xAxis = -2000, 2000, 5 yAxis = -200, 200, 5 xBins = accel_mapdots, MAPdot yBins = accel_mapdot_amts ;accel-pump curve = pump_accel_tpsdot_curve, "Accel TPSdot Curve" columnLabel = "TPSdot", "Added" xAxis = -1000, 1000, 5 yAxis = -200, 200, 5 xBins = accel_tpsdots, TPSdot yBins = accel_tpsdot_amts ;accel-pump2 curve = pump_accel_mapdot_curve2, "Accel MAPdot Curve" columnLabel = "MAPdot", "Added" xAxis = -2000, 2000, 5 yAxis = -200, 200, 5 xBins = accel_mapdots2, MAPdot yBins = accel_mapdot_amts2 ;accel-pump2 curve = pump_accel_tpsdot_curve2, "Accel TPSdot Curve" columnLabel = "TPSdot", "Added" xAxis = -1000, 1000, 5 yAxis = -200, 200, 5 xBins = accel_tpsdots2, TPSdot yBins = accel_tpsdot_amts2 curve = knockstart_curve, "Knock Window Start" columnLabel = "RPM", "deg" xAxis = 0, {rpmhigh}, 6 yAxis = -40, 10, 6 xBins = knock_rpms, rpm yBins = knock_starts curve = knockduration_curve, "Knock Window Duration" columnLabel = "RPM", "deg" xAxis = 0, {rpmhigh}, 6 yAxis = 0, 40, 6 xBins = knock_rpms, rpm yBins = knock_durations curve = knockthresh_curve, "Knock Input Threshold" columnLabel = "RPM", "%" xAxis = 0, {rpmhigh}, 6 yAxis = 0, 100, 6 xBins = knock_rpms, rpm yBins = knock_thresholds gauge = knockinGauge curve = knockupscale_curve, "Knock Coolant Scaling" topicHelp = "file://$getProjectsDirPath()/docs/Megasquirt3_TunerStudio_MS_Lite_Reference-1.5.pdf#knockcoolant" columnLabel = "clt", "%" xAxis = {cltlowlim}, {clthighlim}, 6 yAxis = 100, 500, 6 xBins = knock_clts, coolant yBins = knock_upscale gauge = cltGauge curve = tc_perfect_curve, "Traction Control - Perfect Run VSS" topicHelp = "file://$getProjectsDirPath()/docs/Megasquirt3_TunerStudio_MS_Lite_Reference-1.5.pdf#tractionperfectvss" columnLabel = "Time", "VSS" xAxis = 0, 20, 9 yAxis = 0, { prefSpeedUnits == 0 ? 200 : 300 }, 6 xBins = tc_perfect_time yBins = tc_perfect_vss curve = tc_perfectrpm_curve, "Traction Control - Perfect Run RPM" topicHelp = "file://$getProjectsDirPath()/docs/Megasquirt3_TunerStudio_MS_Lite_Reference-1.5.pdf#tractionperfectrpm" columnLabel = "Time", "RPM" xAxis = 0, 20, 9 yAxis = 0, {rpmhigh}, 6 xBins = tc_perfect_time yBins = tc_perfect_rpm curve = tc_retard_curve, "Spark Retard" columnLabel = "Slip x time", "Retard" xAxis = 0, 100, 5 yAxis = 0, 30, 5 xBins = tc_react_x, tc_slipxtime yBins = tc_retard curve = tc_spkcut_curve, "Spark Cut" columnLabel = "Slip x time", "Spark" xAxis = 0, 100, 5 yAxis = 0, 100, 5 xBins = tc_react_x, tc_slipxtime yBins = tc_spkcut curve = tc_nitrous_curve, "Nitrous%" columnLabel = "Slip x time", "Nitrous" xAxis = 0, 100, 5 yAxis = 0, 100, 5 xBins = tc_react_x, tc_slipxtime yBins = tc_nitrous curve = tc_boost_curve, "Boost Cut" columnLabel = "Slip x Time", "Boost" xAxis = 0, 100, 5 yAxis = 0, 100, 5 xBins = tc_react_x, tc_slipxtime yBins = tc_boost curve = tc_boost_duty_delta_curve, "Boost Duty +/-" columnLabel = "Slip x Time", "Boost Duty +/-" xAxis = 0, 100, 5 yAxis = -100, 100, 5 xBins = tc_react_x, tc_slipxtime yBins = tc_boost_duty_delta curve = tc_addfuel_curve, "Add Fuel" columnLabel = "Slip x time", "Added Fuel" xAxis = 0, 100, 5 yAxis = 0, 100, 5 xBins = tc_react_x, tc_slipxtime yBins = tc_addfuel curve = dualfuel_temp_curve, "Temperature Adjustment (Secondary Fuel)" topicHelp = "file://$getProjectsDirPath()/docs/Megasquirt3_TunerStudio_MS_Lite_Reference-1.5.pdf#fueltemp2" columnLabel = "Temperature", "Adj %" xAxis = -40, 220, 9 yAxis = -200, 200, 6 xBins = dualfuel_temp, fuel_temp2 yBins = dualfuel_temp_adj curve = dualfuel_press_curve, "Pressure Adjustment (Secondary Fuel)" topicHelp = "file://$getProjectsDirPath()/docs/Megasquirt3_TunerStudio_MS_Lite_Reference-1.5.pdf#fuelpress2" columnLabel = "Differential Pressure", "Adj %" xAxis = 200, 600, 9 yAxis = -200, 200, 6 xBins = dualfuel_press, fuel_press2 yBins = dualfuel_press_adj curve = primingPW2, "Priming Pulse 2" topicHelp = "file://$getProjectsDirPath()/docs/Megasquirt3_TunerStudio_MS_Lite_Reference-1.5.pdf#primep2" columnLabel = "Coolant", "Prime PW" xAxis = -40, {clthighlim}, 9 yAxis = 0, 20, 5 xBins = temp_table_p21, coolant, readonly yBins = primePWTable2 gauge = cltGauge curve = crankingPW2, "Cranking Pulse % 2" topicHelp = "file://$getProjectsDirPath()/docs/Megasquirt3_TunerStudio_MS_Lite_Reference-1.5.pdf#crankp2" columnLabel = "Coolant", "Cranking PW%" xAxis = -40, {clthighlim}, 9 yAxis = 0, 500, 6 xBins = temp_table_p21, coolant yBins = crankPctTable2 gauge = cltGauge curve = asePct2, "Afterstart Enrichment (ASE) Percentage 2" topicHelp = "file://$getProjectsDirPath()/docs/Megasquirt3_TunerStudio_MS_Lite_Reference-1.5.pdf#asep2" columnLabel = "Coolant", "Afterstart" xAxis = -40, {clthighlim}, 9 yAxis = 0, 100, 6 xBins = temp_table_p21, coolant, readonly yBins = asePctTable2 gauge = cltGauge curve = aseTaper2, "Afterstart Enrichment (ASE) Taper 2" topicHelp = "file://$getProjectsDirPath()/docs/Megasquirt3_TunerStudio_MS_Lite_Reference-1.5.pdf#aset2" columnLabel = "Coolant", "Taper" xAxis = -40, {clthighlim}, 9 yAxis = 0, 500, 6 xBins = temp_table_p21, coolant, readonly yBins = aseCntTable2 gauge = cltGauge curve = warmup_curve2, "Warmup Enrichment (WUE) Curve 2" topicHelp = "file://$getProjectsDirPath()/docs/Megasquirt3_TunerStudio_MS_Lite_Reference-1.5.pdf#wue2" columnLabel = "Coolant", "WUE %" xAxis = -40, {clthighlim}, 9 yAxis = 0, 500, 6 xBins = temp_table_p21, coolant, readonly yBins = wueBins2 gauge = cltGauge curve = MAFtable1f, "MAF Flow Curve" topicHelp = "file://$getProjectsDirPath()/docs/Megasquirt3_TunerStudio_MS_Lite_Reference-1.5.pdf#mafflow" columnLabel = "MAF Freq", "Flow" xAxis = {maf_freq0}, {maf_freq1}, 11 yAxis = {-81 * (maf_range + 1)}, {573 * (maf_range + 1)}, 11 xBins = maff, maf_freq yBins = mafflow gauge = maf_voltsGauge curve = MAFtable1, "MAF Flow Curve" topicHelp = "file://$getProjectsDirPath()/docs/Megasquirt3_TunerStudio_MS_Lite_Reference-1.5.pdf#mafflow" columnLabel = "MAF Volts", "Flow" xAxis = 0, 5, 11 yAxis = {-81 * (maf_range + 1)}, {573 * (maf_range + 1)}, 11 xBins = mafv, maf_volts yBins = mafflow gauge = maf_voltsGauge curve = dwellrpm_curve, "Dwell vs RPM" topicHelp = "file://$getProjectsDirPath()/docs/Megasquirt3_TunerStudio_MS_Lite_Reference-1.5.pdf#dwellvsrpm" columnLabel = "RPM", "Dwell" xAxis = 0, {rpmhigh}, 6 yAxis = 0, 6, 6 xBins = dwellrpm_rpm, rpm yBins = dwellrpm_dwell curve = boosttime_duty_curve, "Boost Duty vs Time" topicHelp = "file://$getProjectsDirPath()/docs/Megasquirt3_TunerStudio_MS_Lite_Reference-1.5.pdf#boostspeed" columnLabel = "Time", "Duty" xAxis = 0, 10, 6 yAxis = 0, 100, 6 xBins = boostvss_time, launch_timer yBins = boostvss_duty curve = boosttime_target_curve, "Boost Target vs Time" topicHelp = "file://$getProjectsDirPath()/docs/Megasquirt3_TunerStudio_MS_Lite_Reference-1.5.pdf#boostspeed" columnLabel = "Time", "kPa" xAxis = 0, 10, 6 yAxis = 100, 400, 6 xBins = boostvss_time, launch_timer yBins = boostvss_target curve = boostvss_duty_curve, "Boost Duty vs Speed" topicHelp = "file://$getProjectsDirPath()/docs/Megasquirt3_TunerStudio_MS_Lite_Reference-1.5.pdf#boostspeed" columnLabel = "Speed", "Duty" xAxis = 0, { prefSpeedUnits == 0 ? 200 : 300 }, 6 yAxis = 0, 100, 6 xBins = boostvss_speed, vss1 yBins = boostvss_duty curve = boostvss_target_curve, "Boost Target vs Speed" topicHelp = "file://$getProjectsDirPath()/docs/Megasquirt3_TunerStudio_MS_Lite_Reference-1.5.pdf#boostspeed" columnLabel = "Speed", "kPa" xAxis = 0, { prefSpeedUnits == 0 ? 200 : 300 }, 6 yAxis = 0, 400, 6 xBins = boostvss_speed, vss1 yBins = boostvss_target ; nitrous 1 vs time curve = n2o1_duty_time, "Nitrous1 - Duty vs Time" columnLabel = "s", "Duty" xAxis = 0, 15, 6 yAxis = 0, 100, 6 xBins = n2o1_time, nitrous_timer yBins = n2o1_duty curve = n2o1_fuelpct_time, "Nitrous1 - %age Fuel vs Time" columnLabel = "s", "%" xAxis = 0, 15, 6 yAxis = 0, 150, 5 xBins = n2o1_time, nitrous_timer yBins = n2o1_fuelpct curve = n2o1_retard_time, "Nitrous1 - Retard vs Time" columnLabel = "s", "Retard" xAxis = 0, 15, 6 yAxis = 0, 30, 7 xBins = n2o1_time, nitrous_timer yBins = n2o1_retard ; nitrous 2 vs time curve = n2o2_duty_time, "Nitrous2 - Duty vs Time" columnLabel = "s", "Duty" xAxis = 0, 15, 6 yAxis = 0, 100, 6 xBins = n2o2_time, nitrous_timer yBins = n2o2_duty curve = n2o2_fuelpct_time, "Nitrous2 - %age Fuel vs Time" columnLabel = "s", "%" xAxis = 0, 15, 6 yAxis = 0, 150, 6 xBins = n2o2_time, nitrous_timer yBins = n2o2_fuelpct curve = n2o2_retard_time, "Nitrous2 - Retard vs Time" columnLabel = "s", "Retard" xAxis = 0, 15, 6 yAxis = 0, 30, 7 xBins = n2o2_time, nitrous_timer yBins = n2o2_retard ; nitrous 1 vs rpm curve = n2o1_duty_rpm, "Nitrous1 - Duty vs RPM" columnLabel = "RPM", "Duty" xAxis = 0, {rpmhigh}, 6 yAxis = 0, 100, 6 xBins = n2o1_rpm, rpm yBins = n2o1_duty curve = n2o1_pw_rpm, "Nitrous1 - Added fuel vs RPM" columnLabel = "RPM", "pw" xAxis = 0, {rpmhigh}, 6 yAxis = -5, 20, 6 xBins = n2o1_rpm, rpm yBins = n2o1_pw curve = n2o1_retard_rpm, "Nitrous1 - Retard vs RPM" columnLabel = "RPM", "Retard" xAxis = 0, {rpmhigh}, 6 yAxis = 0, 30, 7 xBins = n2o1_rpm, rpm yBins = n2o1_retard ; nitrous 2 vs rpm curve = n2o2_duty_rpm, "Nitrous2 - Duty vs RPM" columnLabel = "RPM", "Duty" xAxis = 0, {rpmhigh}, 6 yAxis = 0, 100, 6 xBins = n2o2_rpm, rpm yBins = n2o2_duty curve = n2o2_pw_rpm, "Nitrous2 - Added Fuel vs RPM" columnLabel = "RPM", "pw" xAxis = 0, {rpmhigh}, 6 yAxis = -5, 20, 6 xBins = n2o2_rpm, rpm yBins = n2o2_pw curve = n2o2_retard_rpm, "Nitrous2 - Retard vs RPM" columnLabel = "RPM", "Retard" xAxis = 0, {rpmhigh}, 6 yAxis = 0, 30, 7 xBins = n2o2_rpm, rpm yBins = n2o2_retard ; nitrous 1 vs VSS curve = n2o1_duty_vss, "Nitrous1 - Duty vs VSS" columnLabel = "VSS", "Duty" xAxis = 0, 200, 6 yAxis = 0, 100, 6 xBins = n2o1_vss, vss1 yBins = n2o1_duty curve = n2o1_fuelpct_vss, "Nitrous1 - %age Fuel vs VSS" columnLabel = "VSS", "%" xAxis = 0, 200, 6 yAxis = 0, 150, 5 xBins = n2o1_vss, vss1 yBins = n2o1_fuelpct curve = n2o1_retard_vss, "Nitrous1 - Retard vs VSS" columnLabel = "VSS", "Retard" xAxis = 0, 200, 6 yAxis = 0, 30, 7 xBins = n2o1_vss, vss1 yBins = n2o1_retard ; nitrous 2 vs vss curve = n2o2_duty_vss, "Nitrous2 - Duty vs VSS" columnLabel = "VSS", "Duty" xAxis = 0, 200, 6 yAxis = 0, 100, 6 xBins = n2o2_vss, vss1 yBins = n2o2_duty curve = n2o2_fuelpct_vss, "Nitrous2 - %age Fuel vs VSS" columnLabel = "VSS", "%" xAxis = 0, 200, 6 yAxis = 0, 100, 5 xBins = n2o2_vss, vss1 yBins = n2o2_fuelpct curve = n2o2_retard_vss, "Nitrous2 - Retard vs VSS" columnLabel = "VSS", "Retard" xAxis = 0, 200, 6 yAxis = 0, 30, 7 xBins = n2o2_vss, vss1 yBins = n2o2_retard ;mat/clt curve = matclt_curve, "MAT/CLT correction" topicHelp = "file://$getProjectsDirPath()/docs/Megasquirt3_TunerStudio_MS_Lite_Reference-1.5.pdf#matcltcor" columnLabel = "flow", "%CLT" xAxis = 0, {rpmhigh * 400}, 5 yAxis = 0, 100, 5 xBins = matclt_flow, calcflow yBins = matclt_pct ;small pulsewidths curve = smallcurve0, "Small Pulsewidth Curve 1" columnLabel = "Original", "New" xAxis = 0, 2, 5 yAxis = 0, 2, 5 xBins = smallpwpw yBins = smallpw0 curve = smallcurve1, "Small Pulsewidth Curve 2" columnLabel = "Original", "New" xAxis = 0, 2, 5 yAxis = 0, 2, 5 xBins = smallpwpw yBins = smallpw1 curve = smallcurve2, "Small Pulsewidth Curve 3" columnLabel = "Original", "New" xAxis = 0, 2, 5 yAxis = 0, 2, 5 xBins = smallpwpw yBins = smallpw2 curve = smallcurve3, "Small Pulsewidth Curve 4" columnLabel = "Original", "New" xAxis = 0, 2, 5 yAxis = 0, 2, 5 xBins = smallpwpw yBins = smallpw3 curve = inj_deadtime_cv1, "Injector Dead Time Curve 1" columnLabel = "Voltage", "Deadtime" xAxis = 7.2, 19.2, 7 yAxis = 0, 2500, 6 xBins = inj_deadtime_volts1, batteryVoltage yBins = inj_deadtime_curve1 curve = inj_deadtime_cv2, "Injector Dead Time Curve 2" columnLabel = "Voltage", "Deadtime" xAxis = 7.2, 19.2, 7 yAxis = 0, 2500, 6 xBins = inj_deadtime_volts2, batteryVoltage yBins = inj_deadtime_curve2 curve = inj_deadtime_cv3, "Injector Dead Time Curve 3" columnLabel = "Voltage", "Deadtime" xAxis = 7.2, 19.2, 7 yAxis = 0, 2500, 6 xBins = inj_deadtime_volts3, batteryVoltage yBins = inj_deadtime_curve3 curve = inj_deadtime_cv4, "Injector Dead Time Curve 4" columnLabel = "Voltage", "Deadtime" xAxis = 7.2, 19.2, 7 yAxis = 0, 2500, 6 xBins = inj_deadtime_volts4, batteryVoltage yBins = inj_deadtime_curve4 curve = boost_timed_curve, "Boost %age After Launch" topicHelp = "file://$getProjectsDirPath()/docs/Megasquirt3_TunerStudio_MS_Lite_Reference-1.5.pdf#boostdelay" columnLabel = "Time", "" xAxis = 0, 15, 6 yAxis = 0, 100, 6 xBins = boost_timed_time yBins = boost_timed_pct curve = mapsample_curve, "MAP Sample Timing" columnLabel = "RPM", "deg" xAxis = 0, {rpmhigh}, 8 yAxis = 0, 180, 8 xBins = map_sample_rpms yBins = map_sample_timing gauge = tachometer curve = dwellSettings, "Dwell Battery Correction" topicHelp = "file://$getProjectsDirPath()/docs/Megasquirt3_TunerStudio_MS_Lite_Reference-1.5.pdf#dwellbat" columnLabel = "Voltage", "%age" xAxis = 6, 16, 6 yAxis = 0, 500, 6 xBins = dwellvolts, batteryVoltage yBins = dwellcorr curve = coldAdvance, "Cold Advance" topicHelp = "file://$getProjectsDirPath()/docs/Megasquirt3_TunerStudio_MS_Lite_Reference-1.5.pdf#coldadv" columnLabel = "Coolant", "Offset" xAxis = -40, {clthighlim}, 9 yAxis = -10, 10, 5 xBins = tempTable, coolant, readonly yBins = cold_adv_table gauge = cltGauge curve = iacBins, "Stepper Idle Warmup Position" topicHelp = "file://$getProjectsDirPath()/docs/Megasquirt3_TunerStudio_MS_Lite_Reference-1.5.pdf#idlewu" columnLabel = "Coolant", "IAC Steps" xAxis = -40, {clthighlim}, 9 yAxis = 0, 300, 7 xBins = tempTable, coolant, readonly yBins = iacstepTable gauge = cltGauge curve = ipwBins, "PWM Idle Warmup Duty Cycle" topicHelp = "file://$getProjectsDirPath()/docs/Megasquirt3_TunerStudio_MS_Lite_Reference-1.5.pdf#idlewu" columnLabel = "Coolant", "Idle PWM duty" xAxis = -40, {clthighlim}, 9 yAxis = 0, 100, 6 xBins = tempTable, coolant, readonly yBins = ipwmTable gauge = cltGauge curve = primingPW, "Priming Pulse" topicHelp = "file://$getProjectsDirPath()/docs/Megasquirt3_TunerStudio_MS_Lite_Reference-1.5.pdf#primep" columnLabel = "Coolant", "Prime PW" xAxis = -40, {clthighlim}, 9 yAxis = 0, 20, 5 xBins = temp_table_p5, coolant, readonly yBins = primePWTable gauge = cltGauge curve = crankingPW, "Cranking Pulse %" topicHelp = "file://$getProjectsDirPath()/docs/Megasquirt3_TunerStudio_MS_Lite_Reference-1.5.pdf#crankp" columnLabel = "Coolant", "Cranking PW%" xAxis = -40, {clthighlim}, 9 yAxis = 0, 500, 6 xBins = temp_table_p5, coolant yBins = crankPctTable gauge = cltGauge curve = asePct, "Afterstart Enrichment (ASE) Percentage" topicHelp = "file://$getProjectsDirPath()/docs/Megasquirt3_TunerStudio_MS_Lite_Reference-1.5.pdf#asep" columnLabel = "Coolant", "Afterstart" xAxis = -40, {clthighlim}, 9 yAxis = 0, 100, 6 xBins = temp_table_p5, coolant, readonly yBins = asePctTable gauge = cltGauge curve = aseTaper, "Afterstart Enrichment (ASE) Taper" topicHelp = "file://$getProjectsDirPath()/docs/Megasquirt3_TunerStudio_MS_Lite_Reference-1.5.pdf#aset" columnLabel = "Coolant", "Taper" xAxis = -40, {clthighlim}, 9 yAxis = 0, 500, 6 xBins = temp_table_p5, coolant, readonly yBins = aseCntTable gauge = cltGauge curve = matBasedRetard, "MAT-Based Timing Retard" topicHelp = "file://$getProjectsDirPath()/docs/Megasquirt3_TunerStudio_MS_Lite_Reference-1.5.pdf#matretard" columnLabel = "MAT", "Retard" xAxis = -40, {mathigh}, 9 yAxis = 0, 15, 7 xBins = matTemps, airtemp yBins = matRetard gauge = matGauge curve = barometerCorr, "Barometric Correction" topicHelp = "file://$getProjectsDirPath()/docs/Megasquirt3_TunerStudio_MS_Lite_Reference-1.5.pdf#barocor" columnLabel = "Barometer", "Correction" xAxis = 60, 120, 7 yAxis = 80, 200, 6 xBins = baroCorrVals, barometer yBins = baroCorrDelta gauge = barometerGauge curve = airdenCorr, "MAT Air density" columnLabel = "Air temp", "Correction" xAxis = -40, 200, 9 yAxis = 70, 130, 7 xBins = matCorrTemps2, airtemp yBins = matCorrDelta2 gauge = airtempGauge curve = manifoldTempCorr, "MAF/MAT Correction" topicHelp = "file://$getProjectsDirPath()/docs/Megasquirt3_TunerStudio_MS_Lite_Reference-1.5.pdf#mafmatcor" columnLabel = "MAT", "Correction" xAxis = -40, 200, 9 yAxis = -30, 30, 7 xBins = matCorrTemps, mat yBins = matCorrDelta gauge = matGauge ; this is just as an example.. not yet finished curve = EAEmanycurves, "Combined EAE Curve Graph - example to test TunerStudio features" columnLabel = "RPM", "Correction" xAxis = 0, {rpmhigh}, 12 yAxis = 0, 200, 12 xBins = EAESOCRPMbins, rpm yBins = EAESON xBins = EAEAWCRPMbins, rpm yBins = EAEAWN xBins = EAEAWCRPMbins2, rpm yBins = EAEAWN2 xBins = EAESOCRPMbins2, rpm ; commented out to show last yAxis tied to previous xAxis yBins = EAESON2 gauge = EAEGauge1 ; As always gauge is optional lineLabel = "Sucked-from-walls const" lineLabel = "Adhere-to-walls coef" lineLabel = "Adhere-to-walls coef 2" lineLabel = "Sucked-from-walls Correction" curve = EAEBAWCcurve, "EAE Adhere-to-walls Coefficient" topicHelp = "file://$getProjectsDirPath()/docs/Megasquirt3_TunerStudio_MS_Lite_Reference-1.5.pdf#eaeawc" columnLabel = "%", "Correction" xAxis = 0, 255, 12 yAxis = 0, 100, 12 xBins = EAEAWCKPAbins, eaeload1 yBins = EAEBAWC gauge = EAEGauge1 curve = EAEBSOCcurve, "EAE Sucked-from-walls Coefficient" topicHelp = "file://$getProjectsDirPath()/docs/Megasquirt3_TunerStudio_MS_Lite_Reference-1.5.pdf#eaeswc" columnLabel = "%", "Correction" xAxis = 0, 255, 12 yAxis = 0, 25.5, 12 xBins = EAESOCKPAbins, eaeload1 yBins = EAEBSOC gauge = EAEGauge1 curve = EAEAWNcurve, "EAE Adhere-to-walls RPM Correction" topicHelp = "file://$getProjectsDirPath()/docs/Megasquirt3_TunerStudio_MS_Lite_Reference-1.5.pdf#eaeawrc" columnLabel = "RPM", "Correction" xAxis = 0, {rpmhigh}, 12 yAxis = 0, 200, 12 xBins = EAEAWCRPMbins, rpm yBins = EAEAWN gauge = EAEGauge1 curve = EAESONcurve, "EAE Sucked-from-walls RPM Correction" topicHelp = "file://$getProjectsDirPath()/docs/Megasquirt3_TunerStudio_MS_Lite_Reference-1.5.pdf#eaeswrc" columnLabel = "RPM", "Correction" xAxis = 0, {rpmhigh}, 12 yAxis = 0, 200, 12 xBins = EAESOCRPMbins, rpm yBins = EAESON gauge = EAEGauge1 curve = EAESOWcurve, "EAE Sucked-from-walls CLT Correction" topicHelp = "file://$getProjectsDirPath()/docs/Megasquirt3_TunerStudio_MS_Lite_Reference-1.5.pdf#eaeswcc" columnLabel = "CLT", "Correction" xAxis = 0, {clthighlim}, 12 yAxis = 0, 200, 12 xBins = EAESOWCLTbins, coolant yBins = EAESOW gauge = EAEGauge1 curve = EAEAWWcurve, "EAE Adhere-to-walls CLT Correction" topicHelp = "file://$getProjectsDirPath()/docs/Megasquirt3_TunerStudio_MS_Lite_Reference-1.5.pdf#eaeawcc" columnLabel = "CLT", "Correction" xAxis = 0, {clthighlim}, 12 yAxis = 0, 200, 12 xBins = EAEAWWCLTbins, coolant yBins = EAEAWW gauge = EAEGauge1 curve = EAEBAWCcurve2, "EAE Adhere-to-walls Coefficient 2" topicHelp = "file://$getProjectsDirPath()/docs/Megasquirt3_TunerStudio_MS_Lite_Reference-1.5.pdf#eaeawc2" columnLabel = "%", "Correction" xAxis = 0, 255, 12 yAxis = 0, 100, 12 xBins = EAEAWCKPAbins2, fuelload yBins = EAEBAWC2 gauge = EAEGauge1 curve = EAEBSOCcurve2, "EAE Sucked-from-walls Coefficient 2" topicHelp = "file://$getProjectsDirPath()/docs/Megasquirt3_TunerStudio_MS_Lite_Reference-1.5.pdf#eaeswc" columnLabel = "%", "Correction" xAxis = 0, 255, 12 yAxis = 0, 25.5, 12 xBins = EAESOCKPAbins2, fuelload yBins = EAEBSOC2 gauge = EAEGauge1 curve = EAEAWNcurve2, "EAE Adhere-to-walls RPM Correction 2" topicHelp = "file://$getProjectsDirPath()/docs/Megasquirt3_TunerStudio_MS_Lite_Reference-1.5.pdf#eaeawrc2" columnLabel = "RPM", "Correction" xAxis = 0, {rpmhigh}, 12 yAxis = 0, 200, 12 xBins = EAEAWCRPMbins2, rpm yBins = EAEAWN2 gauge = EAEGauge1 curve = EAESONcurve2, "EAE Sucked-from-walls RPM Correction 2" topicHelp = "file://$getProjectsDirPath()/docs/Megasquirt3_TunerStudio_MS_Lite_Reference-1.5.pdf#eaeswrc2" columnLabel = "RPM", "Correction" xAxis = 0, {rpmhigh}, 12 yAxis = 0, 200, 12 xBins = EAESOCRPMbins2, rpm yBins = EAESON2 gauge = EAEGauge1 curve = EAESOWcurve2, "EAE Sucked-from-walls CLT Correction 2" topicHelp = "file://$getProjectsDirPath()/docs/Megasquirt3_TunerStudio_MS_Lite_Reference-1.5.pdf#eaeswcc2" columnLabel = "CLT", "Correction" xAxis = 0, {clthighlim}, 12 yAxis = 0, 200, 12 xBins = EAESOWCLTbins2, coolant yBins = EAESOW2 gauge = EAEGauge1 curve = EAEAWWcurve2, "EAE Adhere-to-walls CLT Correction 2" topicHelp = "file://$getProjectsDirPath()/docs/Megasquirt3_TunerStudio_MS_Lite_Reference-1.5.pdf#eaeawcc2" columnLabel = "CLT", "Correction" xAxis = 0, {clthighlim}, 12 yAxis = 0, 200, 12 xBins = EAEAWWCLTbins2, coolant yBins = EAEAWW2 gauge = EAEGauge1 curve = XAccTable, "X Accel Fuel Correction" topicHelp = "file://$getProjectsDirPath()/docs/Megasquirt3_TunerStudio_MS_Lite_Reference-1.5.pdf#xtpuddlea" columnLabel = "RPM", "Correction" xAxis = 0, {rpmhigh}, 4 yAxis = 0, 120, 4 xBins = XTrpms, rpm yBins = XAcc gauge = EAEGauge1 curve = XDecTable, "X Decel Fuel Correction" topicHelp = "file://$getProjectsDirPath()/docs/Megasquirt3_TunerStudio_MS_Lite_Reference-1.5.pdf#xtpuddled" columnLabel = "RPM", "Correction" xAxis = 0, {rpmhigh}, 9 yAxis = 0, 120, 9 xBins = XTrpms, rpm yBins = XDec gauge = EAEGauge1 curve = TauAccTable, "Tau Accel Fuel Correction" topicHelp = "file://$getProjectsDirPath()/docs/Megasquirt3_TunerStudio_MS_Lite_Reference-1.5.pdf#xttimea" columnLabel = "RPM", "time" xAxis = 0, {rpmhigh}, 9 yAxis = 0, 1000, 9 xBins = XTrpms, rpm yBins = TauAcc gauge = EAEGauge1 curve = TauDecTable, "Tau Decel Correction" topicHelp = "file://$getProjectsDirPath()/docs/Megasquirt3_TunerStudio_MS_Lite_Reference-1.5.pdf#xttimed" columnLabel = "RPM", "time" xAxis = 0, {rpmhigh}, 9 yAxis = 0, 1000, 9 xBins = XTrpms, rpm yBins = TauDec gauge = EAEGauge1 curve = XCltTable, "X (Puddling) Temp. Correction Factors" topicHelp = "file://$getProjectsDirPath()/docs/Megasquirt3_TunerStudio_MS_Lite_Reference-1.5.pdf#xtxtemp" columnLabel = "Temperature", "Correction" xAxis = -40, {clthighlim}, 9 yAxis = 0, 600, 9 xBins = XClt_temps yBins = XClt gauge = cltGauge curve = TCltTable, "Tau (Time) Temp. Correction Factors" topicHelp = "file://$getProjectsDirPath()/docs/Megasquirt3_TunerStudio_MS_Lite_Reference-1.5.pdf#xtttemp" columnLabel = "Temperature", "time" xAxis = -40, {clthighlim}, 9 yAxis = 0, 600, 9 xBins = TauClt_temps yBins = TauClt gauge = cltGauge curve = NoiseFiltercurve, "Noise Filter Curve" columnLabel = "RPMS", "usec" xAxis = 0, {rpmhigh}, 4 yAxis = 0, 2000, 4 xBins = NoiseFilterRpm yBins = NoiseFilterLen curve = warmup_curve, "Warmup Enrichment (WUE) Curve" topicHelp = "file://$getProjectsDirPath()/docs/Megasquirt3_TunerStudio_MS_Lite_Reference-1.5.pdf#wue" columnLabel = "Coolant", "WUE %" xAxis = -40, {clthighlim}, 9 yAxis = 0, 500, 6 xBins = tempTable, coolant yBins = wueBins gauge = cltGauge curve = idleAdvance_curve, "Idle Advance Timing" columnLabel = "Load %", "deg" xAxis = 0, 100, 4 yAxis = -10, 90, 4 xBins = idleadvance_loads, fuelload yBins = idleadvance_curve curve = pwmidle_target_curve, "Closed-Loop Idle Target RPMs" topicHelp = "file://$getProjectsDirPath()/docs/Megasquirt3_TunerStudio_MS_Lite_Reference-1.5.pdf#clidletarg" columnLabel = "CLT", "RPM" xAxis = 0, {clthighlim}, 8 yAxis = 0, 2000, 8 xBins = pwmidle_clt_temps, coolant yBins = pwmidle_target_rpms curve = revlimiterBins, "Coolant Based Rev Limit" columnLabel = "Coolant", "Rev limit" xAxis = -40, {clthighlim}, 8 yAxis = 0, 15000, 8 xBins = RevLimLookup, coolant yBins = RevLimRpm1 gauge = cltGauge curve = pwmidle_crank_dutyorsteps_dutycurve, "Coolant-Based Crank Duty" topicHelp = "file://$getProjectsDirPath()/docs/Megasquirt3_TunerStudio_MS_Lite_Reference-1.5.pdf#idlecrank" columnLabel = "Coolant", "Duty %" xAxis = -40, {clthighlim}, 4 yAxis = 0, 100, 4 xBins = pwmidle_crank_clt_temps, coolant yBins = pwmidle_crank_dutyorsteps_duty gauge = cltGauge curve = pwmidle_crank_dutyorsteps_stepscurve, "Coolant-Based Crank Steps" topicHelp = "file://$getProjectsDirPath()/docs/Megasquirt3_TunerStudio_MS_Lite_Reference-1.5.pdf#idlecrank" columnLabel = "Coolant", "Steps" xAxis = -40, {clthighlim}, 4 yAxis = 0, 512, 4 xBins = pwmidle_crank_clt_temps, coolant yBins = pwmidle_crank_dutyorsteps_steps gauge = cltGauge curve = ITB_load_loadvals_curve, "ITB Load at TPS Switchpoint" columnLabel = "RPM", "Load" xAxis = 0, {rpmhigh}, 12 yAxis = 0, 100, 12 xBins = ITB_load_rpms, rpm yBins = ITB_load_loadvals curve = ITB_load_switchpoint_curve, "TPS% at %Baro Switchpoint" columnLabel = "RPM", "TPS %" xAxis = 0, {rpmhigh}, 12 yAxis = 0, 100, 12 xBins = ITB_load_rpms, rpm yBins = ITB_load_switchpoints curve = vvt_onoff_curve, "On/Off VVT curve" columnLabel = "RPM", "Load %" xAxis = 0, {rpmhigh}, 8 yAxis = 0, {loadhigh}, 8 xBins = vvt_onoff_rpms, rpm yBins = vvt_onoff_loads, fuelload [TableEditor] ; table_id, map3d_id, "title", page table = inj_deadtime_tbl1, inj_deadtime_map1, "Injector deadtime 1" gridHeight = 1.0 xBins = inj_deadtime_volts1, batteryVoltage yBins = inj_deadtime_pressure1, fuel_press1_user zBins = inj_deadtime_table1 upDownLabel = "More", "Less" gridOrient = 250, 0, 340 table = inj_deadtime_tbl2, inj_deadtime_map2, "Injector deadtime 2" gridHeight = 1.0 xBins = inj_deadtime_volts2, batteryVoltage yBins = inj_deadtime_pressure2, fuel_press1_user zBins = inj_deadtime_table2 upDownLabel = "More", "Less" gridOrient = 250, 0, 340 table = inj_deadtime_tbl3, inj_deadtime_map3, "Injector deadtime 3" gridHeight = 1.0 xBins = inj_deadtime_volts3, batteryVoltage yBins = inj_deadtime_pressure3, fuel_press1_user zBins = inj_deadtime_table3 upDownLabel = "More", "Less" gridOrient = 250, 0, 340 table = inj_deadtime_tbl4, inj_deadtime_map4, "Injector deadtime 4" gridHeight = 1.0 xBins = inj_deadtime_volts4, batteryVoltage yBins = inj_deadtime_pressure4, fuel_press1_user zBins = inj_deadtime_table4 upDownLabel = "More", "Less" gridOrient = 250, 0, 340 table = tc_vss_diff_tbl, tc_vss_diff_map, "Wheel speed difference retard", 0 gridHeight = 1.0 xBins = vss_diff_vss1, vss1 yBins = vss_diff_vss2, vss2 zBins = vss_diff_table upDownLabel = "More Retard", "Less Retard" gridOrient = 250, 0, 340 table = etc_Tbl, etc_Map, "Throttle control", 0 gridHeight = 1.0 xBins = etc_rpms, rpm yBins = etc_pedal_pos, pedal zBins = etc_targ_pos upDownLabel = "More", "Less" gridOrient = 250, 0, 340 table = boost_dome_tbl1, boost_dome_tbl1Map, "Wastegate Dome Pressure Bias Table 1", 19 topicHelp = "file://$getProjectsDirPath()/docs/Megasquirt3_TunerStudio_MS_Lite_Reference-1.5.pdf#domebias" xBins = boost_dome_target_rpms1, rpm yBins = boost_dome_target_kpas1, boost_targ_1 zBins = boost_dome_targets1 upDownLabel = "UP", "DOWN" gridOrient = 250, 0, 340 table = dwell_tbl, dwell_tblMap, "Dwell Table", 1 topicHelp = "file://$getProjectsDirPath()/docs/Megasquirt3_TunerStudio_MS_Lite_Reference-1.5.pdf#dwelltable" xBins = dwell_table_rpms, rpm yBins = dwell_table_loads, ignload zBins = dwell_table_values upDownLabel = "UP", "DOWN" gridOrient = 250, 0, 340 table = ego_delay_Tbl, ego_delay_Map, "EGO Delay Table", 1 topicHelp = "file://$getProjectsDirPath()/docs/Megasquirt3_TunerStudio_MS_Lite_Reference-1.5.pdf#egodelay" xBins = ego_delay_rpms, rpm yBins = ego_delay_loads, afrload1 zBins = ego_delay_table upDownLabel = "SHORTER", "LONGER" gridOrient = 250, 0, 340 table = ego_auth_Tbl2, ego_auth_Map, "EGO Authority Table (negative)", 1 topicHelp = "file://$getProjectsDirPath()/docs/Megasquirt3_TunerStudio_MS_Lite_Reference-1.5.pdf#egoauth" xBins = ego_auth_rpms, rpm yBins = ego_auth_loads, afrload1 zBins = ego_auth_table2 upDownLabel = "LEANER", "RICHER" gridOrient = 250, 0, 340 table = ego_auth_Tbl, ego_auth_Map, "EGO Authority Table", 1 topicHelp = "file://$getProjectsDirPath()/docs/Megasquirt3_TunerStudio_MS_Lite_Reference-1.5.pdf#egoauth" xBins = ego_auth_rpms, rpm yBins = ego_auth_loads, afrload1 zBins = ego_auth_table upDownLabel = "LEANER", "RICHER" gridOrient = 250, 0, 340 table = ltt_Table1Tbl, ltt_Table1Map, "Long Term Trim Table 1", 15 topicHelp = "file://$getProjectsDirPath()/docs/Megasquirt3_TunerStudio_MS_Lite_Reference-1.5.pdf#ltttable" xBins = ltt_rpms, rpm yBins = ltt_loads, fuelload zBins = ltt_table1 upDownLabel = "RICHER", "LEANER" gridOrient = 250, 0, 340 table = fp_dutyTbl, fp_dutyMap, "Fuel Pump Duty Table", 1 ; constant, variable xBins = fpd_rpm rpm yBins = fpd_load, fuelload zBins = fpd_duty upDownLabel = "MORE", "LESS" gridOrient = 250, 0, 340 ; Space 123 rotation of grid in degrees. table = alphaMAPTbl, alphaMAPMap, "Fallback MAP Table", 1 topicHelp = "file://$getProjectsDirPath()/docs/Megasquirt3_TunerStudio_MS_Lite_Reference-1.5.pdf#fallbackmap" xBins = amap_rpm, rpm yBins = amap_tps, tps zBins = alphaMAPtable upDownLabel = "UP", "DOWN" gridOrient = 250, 0, 340 table = pwmidle_cl_initialvalues_dty, pwmidle_cl_initialvalues_dtymap, "Closed-Loop Idle Initial Values", 19 topicHelp = "file://$getProjectsDirPath()/docs/Megasquirt3_TunerStudio_MS_Lite_Reference-1.5.pdf#clidleinit" xBins = pwmidle_cl_initialvalue_rpms, cl_idle_targ_rpm yBins = pwmidle_cl_initialvalue_matorclt, pwmidle_cl_initialvalue_matorclt_follower zBins = pwmidle_cl_initialvalues_duties upDownLabel = "INCREASE","DECREASE" gridOrient = 250, 0, 340 table = pwmidle_cl_initialvalues_stps, pwmidle_cl_initialvalues_stpmap, "Closed-Loop Idle Initial Values", 19 topicHelp = "file://$getProjectsDirPath()/docs/Megasquirt3_TunerStudio_MS_Lite_Reference-1.5.pdf#clidleinit" xBins = pwmidle_cl_initialvalue_rpms, cl_idle_targ_rpm yBins = pwmidle_cl_initialvalue_matorclt, pwmidle_cl_initialvalue_matorclt_follower zBins = pwmidle_cl_initialvalues_steps upDownLabel = "INCREASE","DECREASE" gridOrient = 250, 0, 340 ;vvt timing table = vvt_timing1_tbl, vvt_timing1_map, "VVT Intake (Relative Timing)", 7 topicHelp = "file://$getProjectsDirPath()/docs/Megasquirt3_TunerStudio_MS_Lite_Reference-1.5.pdf#vvtint" xBins = vvt_timing_rpm, rpm yBins = vvt_timing_load, vvt_load zBins = vvt_timing1 upDownLabel = "ADVANCE", "RETARD" gridOrient = 250, 0, 340 table = vvt_timing2_tbl, vvt_timing2_map, "VVT Exhaust (Relative Timing)", 7 topicHelp = "file://$getProjectsDirPath()/docs/Megasquirt3_TunerStudio_MS_Lite_Reference-1.5.pdf#vvtexh" xBins = vvt_timing_rpm, rpm yBins = vvt_timing_load, vvt_load zBins = vvt_timing2 upDownLabel = "ADVANCE", "RETARD" gridOrient = 250, 0, 340 table = als_rifuelcut_tbl, als_rifuelcut_map, "Turbo Anti-lag Roving Idle", 14 topicHelp = "file://$getProjectsDirPath()/docs/Megasquirt3_TunerStudio_MS_Lite_Reference-1.5.pdf#alsidle" xBins = als_rirpms, rpm yBins = als_ritpss, tps zBins = als_rifuelcut upDownLabel = "HIGHER", "LOWER" gridOrient = 250, 0, 340 table = als_fuelcut_tbl, als_fuelcut_map, "ALS Fuel Cut%", 14 xBins = als_rpms, rpm yBins = als_tpss, tps zBins = als_fuelcut upDownLabel = "HIGHER", "LOWER" gridOrient = 250, 0, 340 table = als_sparkcut_tbl, als_sparkcut_map, "ALS Spark Cut%", 14 xBins = als_rpms, rpm yBins = als_tpss, tps zBins = als_sparkcut upDownLabel = "HIGHER", "LOWER" gridOrient = 250, 0, 340 table = als_timing_tbl, als_timing_map, "ALS Timing", 14 xBins = als_rpms, rpm yBins = als_tpss, tps zBins = als_timing upDownLabel = "ADVANCE", "RETARD" gridOrient = 250, 0, 340 table = als_addfuel_tbl, als_addfuel_map, "ALS Added Fuel %age", 14 xBins = als_rpms, rpm yBins = als_tpss, tps zBins = als_addfuel upDownLabel = "HIGHER", "LOWER" gridOrient = 250, 0, 340 table = pwm_duties_Tbl_a, pwm_duties_map_a, "Generic PWM Output A", 11 xBins = pwm_rpms_a, rpm yBins = pwm_loadvals_a, pwma_load zBins = pwm_duties_a upDownLabel = "HIGHER", "LOWER" gridOrient = 250, 0, 340 table = pwm_duties_Tbl_b, pwm_duties_map_b, "Generic PWM Output B", 2 xBins = pwm_rpms_b, rpm yBins = pwm_loadvals_b, pwmb_load zBins = pwm_duties_b upDownLabel = "HIGHER", "LOWER" gridOrient = 250, 0, 340 table = pwm_duties_Tbl_c, pwm_duties_map_c, "Generic PWM Output C", 2 xBins = pwm_rpms_c, rpm yBins = pwm_loadvals_c, pwmc_load zBins = pwm_duties_c upDownLabel = "HIGHER", "LOWER" gridOrient = 250, 0, 340 table = pwm_duties_Tbl_d, pwm_duties_map_d, "Generic PWM Output D", 2 xBins = pwm_rpms_d, rpm yBins = pwm_loadvals_d, pwmd_load zBins = pwm_duties_d upDownLabel = "HIGHER", "LOWER" gridOrient = 250, 0, 340 table = pwm_duties_Tbl_vvt, pwm_duties_map_vvt, "Generic PWM Output E / VVT", 2 topicHelp = "file://$getProjectsDirPath()/docs/Megasquirt3_TunerStudio_MS_Lite_Reference-1.5.pdf#vvtonoff" xBins = pwm_rpms_e, rpm yBins = pwm_loadvals_e, vvt_load zBins = pwm_duties_e upDownLabel = "HIGHER", "LOWER" gridOrient = 250, 0, 340 table = pwm_duties_Tbl_e, pwm_duties_map_e, "Generic PWM Output E", 2 xBins = pwm_rpms_e, rpm yBins = pwm_loadvals_e, pwme_load zBins = pwm_duties_e upDownLabel = "HIGHER", "LOWER" gridOrient = 250, 0, 340 table = pwm_duties_Tbl_f, pwm_duties_map_f, "Generic PWM Output F", 2 xBins = pwm_rpms_f, rpm yBins = pwm_loadvals_f, pwmf_load zBins = pwm_duties_f upDownLabel = "HIGHER", "LOWER" gridOrient = 250, 0, 340 table = generic_pid_Tbl_a, generic_pid_map_a, "Generic Closed-Loop A", 17 xBins = generic_pid_rpms_a, rpm yBins = generic_pid_loadvals_a, generic_pid_load_a zBins = generic_pid_targets_a upDownLabel = "HIGHER", "LOWER" gridOrient = 250, 0, 340 table = generic_pid_Tbl_b, generic_pid_map_b, "Generic Closed-Loop B", 17 xBins = generic_pid_rpms_b, rpm yBins = generic_pid_loadvals_b, generic_pid_load_b zBins = generic_pid_targets_b upDownLabel = "HIGHER", "LOWER" gridOrient = 250, 0, 340 table = waterinjTbl, waterinjMap, "Water Injection Duty Table", 1 xBins = waterinj_rpm, rpm yBins = waterinj_map, map zBins = waterinj_duty upDownLabel = "MORE", "LESS" gridOrient = 250, 0, 340 ; Space 123 rotation of grid in degrees. #if LAMBDA table = maxafr1Tbl, maxafr1Map, "Max AFR 1 in Lambda", 1 #else table = maxafr1Tbl, maxafr1Map, "Max AFR Difference", 1 #endif xBins = maxafr1_rpm, rpm yBins = maxafr1_load, maxafrload zBins = maxafr1_diff upDownLabel = "LEANER", "RICHER" gridOrient = 250, 0, 340 table = veTable1Tbl, veTable1Map, "Fuel VE Table 1", 4 topicHelp = "file://$getProjectsDirPath()/docs/Megasquirt3_TunerStudio_MS_Lite_Reference-1.5.pdf#ve1" ; constant, variable xBins = frpm_table1, rpm yBins = fmap_table1, fuelload zBins = veTable1 upDownLabel = "RICHER", "LEANER" gridOrient = 250, 0, 340 ; Space 123 rotation of grid in degrees. table = veTable2Tbl, veTable2Map, "Fuel VE Table 2", 4 topicHelp = "file://$getProjectsDirPath()/docs/Megasquirt3_TunerStudio_MS_Lite_Reference-1.5.pdf#ve2" xBins = frpm_table2, rpm yBins = fmap_table2, fuelload2 zBins = veTable2 upDownLabel = "RICHER", "LEANER" gridOrient = 250, 0, 340 table = veTable3Tbl, veTable3Map, "Fuel VE Table 3", 4 topicHelp = "file://$getProjectsDirPath()/docs/Megasquirt3_TunerStudio_MS_Lite_Reference-1.5.pdf#ve3" ; constant, variable xBins = frpm_table3, rpm yBins = fmap_table3, fuelload zBins = veTable3 upDownLabel = "RICHER", "LEANER" gridOrient = 250, 0, 340 ; Space 123 rotation of grid in degrees. table = veTable4Tbl, veTable4Map, "Fuel VE Table 4", 4 topicHelp = "file://$getProjectsDirPath()/docs/Megasquirt3_TunerStudio_MS_Lite_Reference-1.5.pdf#ve4" ; constant, variable xBins = frpm_table4, rpm yBins = fmap_table4, fuelload2 zBins = veTable4 upDownLabel = "RICHER", "LEANER" gridOrient = 250, 0, 340 ; Space 123 rotation of grid in degrees. table = idleve1Tbl, idleve1Map, "Idle VE table", 10 xBins = idleve_rpms1, rpm yBins = idleve_loads1, fuelload zBins = idleve_table1 upDownLabel = "RICHER", "LEANER" gridOrient = 250, 0, 340 table = idleve2Tbl, idleve2Map, "Idle VE Table - Dual Fuel", 10 xBins = idleve_rpms2, rpm yBins = idleve_loads2, fuelload zBins = idleve_table2 upDownLabel = "RICHER", "LEANER" gridOrient = 250, 0, 340 table = stagedTable, stagedMap, "Staged Injection Table", 6 xBins = staged_rpms, rpm yBins = staged_loads, fuelload zBins = staged_percents upDownLabel = "MORE", "LESS" gridOrient = 250, 0, 340 table = mapPredTable, mapPredMap, "MAP/Load Prediction Table", 0 xBins = map_predict_rpm, rpm yBins = map_predict_tps, tps zBins = map_predict_lookup_table upDownLabel = "HIGHER", "LOWER" gridOrient = 250, 0, 340 table = mapPredTable2, mapPredMap2, "MAP/Load Prediction Table 2", 0 xBins = map_predict_rpm2, rpm yBins = map_predict_tps2, tps zBins = map_predict_lookup_table2 upDownLabel = "HIGHER", "LOWER" gridOrient = 250, 0, 340 #if LAMBDA table = afrTable1Tbl, afrTable1Map, "Lambda Table 1", 1 #else table = afrTable1Tbl, afrTable1Map, "AFR Table 1", 1 #endif topicHelp = "file://$getProjectsDirPath()/docs/Megasquirt3_TunerStudio_MS_Lite_Reference-1.5.pdf#afr1" xBins = arpm_table1, rpm yBins = amap_table1, afrload1 zBins = afrTable1 upDownLabel = "LEANER", "RICHER" gridOrient = 250, 0, 340 #if LAMBDA table = afrTable2Tbl, afrTable2Map, "Lambda Table 2", 1 #else table = afrTable2Tbl, afrTable2Map, "AFR Table 2", 1 #endif topicHelp = "file://$getProjectsDirPath()/docs/Megasquirt3_TunerStudio_MS_Lite_Reference-1.5.pdf#afr2" xBins = arpm_table2, rpm yBins = amap_table2, fuelload zBins = afrTable2 upDownLabel = "LEANER", "RICHER" gridOrient = 250, 0, 340 table = ignitionTbl1, ignitionMap1, "Ignition Table 1 (Spark Advance)", 3 topicHelp = "file://$getProjectsDirPath()/docs/Megasquirt3_TunerStudio_MS_Lite_Reference-1.5.pdf#ign1" xBins = srpm_table1, rpm yBins = smap_table1, ignload zBins = advanceTable1 upDownLabel = "ADVANCING", "RETARDING" gridOrient = 250, 0, 340 table = ignitionTbl2, ignitionMap2, "Ignition Table 2 (Spark Advance)", 3 topicHelp = "file://$getProjectsDirPath()/docs/Megasquirt3_TunerStudio_MS_Lite_Reference-1.5.pdf#ign2" xBins = srpm_table2, rpm yBins = smap_table2, ignload2 zBins = advanceTable2 upDownLabel = "ADVANCING", "RETARDING" gridOrient = 250, 0, 340 table = ignitionTbl3, ignitionMap3, "Ignition Table 3 (Spark Advance)", 4 topicHelp = "file://$getProjectsDirPath()/docs/Megasquirt3_TunerStudio_MS_Lite_Reference-1.5.pdf#ign3" xBins = srpm_table3, rpm yBins = smap_table3, ignload zBins = advanceTable3 upDownLabel = "ADVANCING", "RETARDING" gridOrient = 250, 0, 340 table = ignitionTbl4, ignitionMap4, "Ignition Table 4 (Spark Advance)", 4 topicHelp = "file://$getProjectsDirPath()/docs/Megasquirt3_TunerStudio_MS_Lite_Reference-1.5.pdf#ign4" xBins = srpm_table4, rpm yBins = smap_table4, ignload2 zBins = advanceTable4 upDownLabel = "ADVANCING", "RETARDING" gridOrient = 250, 0, 340 table = RotarySplitTbl, RotarySplitMap, "Rotary Split Table", 3 topicHelp = "file://$getProjectsDirPath()/docs/Megasquirt3_TunerStudio_MS_Lite_Reference-1.5.pdf#rotarysplit" xBins = RotarySplitRPM, rpm yBins = RotarySplitLoad, ignload zBins = RotarySplitTable upDownLabel = "ADVANCING", "RETARDING" gridOrient = 250, 0, 340 table = boostctlDutys, boostctlDtyMap, "Boost Control Duty 1", 2 topicHelp = "file://$getProjectsDirPath()/docs/Megasquirt3_TunerStudio_MS_Lite_Reference-1.5.pdf#boostduty" xBins = boost_ctl_pwmtarg_rpm_bins, rpm yBins = boost_ctl_pwmtarg_tps_bins, throttle zBins = boost_ctl_pwm_targets upDownLabel = "HIGHER", "LOWER" gridOrient = 250, 0, 340 table = boostctlTargs, boostctlTargMap, "Boost Control Targets 1", 2 topicHelp = "file://$getProjectsDirPath()/docs/Megasquirt3_TunerStudio_MS_Lite_Reference-1.5.pdf#boosttarg" xBins = boost_ctl_loadtarg_rpm_bins, rpm yBins = boost_ctl_loadtarg_tps_bins, throttle zBins = boost_ctl_load_targets upDownLabel = "HIGHER", "LOWER" gridOrient = 250, 0, 340 table = boostctlDutys2, boostctlDtyMap2, "Boost Control Duty 2", 2 topicHelp = "file://$getProjectsDirPath()/docs/Megasquirt3_TunerStudio_MS_Lite_Reference-1.5.pdf#boostduty2" xBins = boost_ctl_pwmtarg_rpm_bins2, rpm yBins = boost_ctl_pwmtarg_tps_bins2, throttle zBins = boost_ctl_pwm_targets2 upDownLabel = "HIGHER", "LOWER" gridOrient = 250, 0, 340 table = boostctlCLPWMtargs1, boostctlCLPWMtargsMap1, "Boost Control Bias Duty 1", 15 xBins = boost_ctl_cl_pwm_rpms, rpm yBins = boost_ctl_cl_pwm_targboosts, boost_targ_1 zBins = boost_ctl_cl_pwm_targs1 upDownLabel = "HIGHER", "LOWER" gridOrient = 250, 0, 340 table = boostctlCLPWMtargs2, boostctlCLPWMtargsMap2, "Boost Control Bias Duty 2", 15 xBins = boost_ctl_cl_pwm_rpms, rpm yBins = boost_ctl_cl_pwm_targboosts, boost_targ_1 zBins = boost_ctl_cl_pwm_targs2 upDownLabel = "HIGHER", "LOWER" gridOrient = 250, 0, 340 table = boostctlCLPWMtargs3, boostctlCLPWMtargsMap3, "Boost Control Bias Duty 3", 15 xBins = boost_ctl_cl_pwm_rpms, rpm yBins = boost_ctl_cl_pwm_targboosts, boost_targ_1 zBins = boost_ctl_cl_pwm_targs3 upDownLabel = "HIGHER", "LOWER" gridOrient = 250, 0, 340 table = boostctlCLPWMtargs4, boostctlCLPWMtargsMap4, "Boost Control Bias Duty 4", 15 xBins = boost_ctl_cl_pwm_rpms, rpm yBins = boost_ctl_cl_pwm_targboosts, boost_targ_1 zBins = boost_ctl_cl_pwm_targs4 upDownLabel = "HIGHER", "LOWER" gridOrient = 250, 0, 340 table = boostctlCLPWMtargs5, boostctlCLPWMtargsMap5, "Boost Control Bias Duty 5", 15 xBins = boost_ctl_cl_pwm_rpms, rpm yBins = boost_ctl_cl_pwm_targboosts, boost_targ_1 zBins = boost_ctl_cl_pwm_targs5 upDownLabel = "HIGHER", "LOWER" gridOrient = 250, 0, 340 table = boostctlCLPWMtargs6, boostctlCLPWMtargsMap6, "Boost Control Bias Duty 6", 15 xBins = boost_ctl_cl_pwm_rpms, rpm yBins = boost_ctl_cl_pwm_targboosts, boost_targ_1 zBins = boost_ctl_cl_pwm_targs6 upDownLabel = "HIGHER", "LOWER" gridOrient = 250, 0, 340 table = boostctlTargs2, boostctlTargMap2, "Boost Control Targets 2", 2 topicHelp = "file://$getProjectsDirPath()/docs/Megasquirt3_TunerStudio_MS_Lite_Reference-1.5.pdf#boosttarg2" xBins = boost_ctl_loadtarg_rpm_bins2, rpm yBins = boost_ctl_loadtarg_tps_bins2, throttle zBins = boost_ctl_load_targets2 upDownLabel = "HIGHER", "LOWER" gridOrient = 250, 0, 340 ;injector trims table = inj_trimaTbl, inj_trimaMap, "Cyl 1 Fuel Trim", 7 ; constant, variable xBins = inj_trim_rpm, rpm yBins = inj_trim_load, fuelload zBins = inj_trima upDownLabel = "RICHER", "LEANER" gridOrient = 250, 0, 340 ; Space 123 rotation of grid in degrees. table = inj_trimbTbl, inj_trimbMap, "Cyl 2 Fuel Trim", 7 ; constant, variable xBins = inj_trim_rpm, rpm, readonly yBins = inj_trim_load, fuelload, readonly zBins = inj_trimb upDownLabel = "RICHER", "LEANER" gridOrient = 250, 0, 340 ; Space 123 rotation of grid in degrees. table = inj_trimcTbl, inj_trimcMap, "Cyl 3 Fuel Trim", 7 ; constant, variable xBins = inj_trim_rpm, rpm, readonly yBins = inj_trim_load, fuelload, readonly zBins = inj_trimc upDownLabel = "RICHER", "LEANER" gridOrient = 250, 0, 340 ; Space 123 rotation of grid in degrees. table = inj_trimdTbl, inj_trimdMap, "Cyl 4 Fuel Trim", 7 ; constant, variable xBins = inj_trim_rpm, rpm, readonly yBins = inj_trim_load, fuelload, readonly zBins = inj_trimd upDownLabel = "RICHER", "LEANER" gridOrient = 250, 0, 340 ; Space 123 rotation of grid in degrees. table = inj_trimeTbl, inj_trimeMap, "Cyl 5 Fuel Trim", 7 ; constant, variable xBins = inj_trim_rpm, rpm, readonly yBins = inj_trim_load, fuelload, readonly zBins = inj_trime upDownLabel = "RICHER", "LEANER" gridOrient = 250, 0, 340 ; Space 123 rotation of grid in degrees. table = inj_trimfTbl, inj_trimfMap, "Cyl 6 Fuel Trim", 7 ; constant, variable xBins = inj_trim_rpm, rpm, readonly yBins = inj_trim_load, fuelload, readonly zBins = inj_trimf upDownLabel = "RICHER", "LEANER" gridOrient = 250, 0, 340 ; Space 123 rotation of grid in degrees. table = inj_trimgTbl, inj_trimgMap, "Cyl 7 Fuel Trim", 7 ; constant, variable xBins = inj_trim_rpm, rpm, readonly yBins = inj_trim_load, fuelload, readonly zBins = inj_trimg upDownLabel = "RICHER", "LEANER" gridOrient = 250, 0, 340 ; Space 123 rotation of grid in degrees. table = inj_trimhTbl, inj_trimhMap, "Cyl 8 Fuel Trim", 7 ; constant, variable xBins = inj_trim_rpm, rpm, readonly yBins = inj_trim_load, fuelload, readonly zBins = inj_trimh upDownLabel = "RICHER", "LEANER" gridOrient = 250, 0, 340 ; Space 123 rotation of grid in degrees. table = inj_trim1Tbl, inj_trim1Map, "Injector Trim 1", 7 topicHelp = "file://$getProjectsDirPath()/docs/Megasquirt3_TunerStudio_MS_Lite_Reference-1.5.pdf#injtrim1" ; constant, variable xBins = inj_trim_rpm, rpm, readonly yBins = inj_trim_load, fuelload, readonly zBins = inj_trimi upDownLabel = "RICHER", "LEANER" gridOrient = 250, 0, 340 ; Space 123 rotation of grid in degrees. table = inj_trim2Tbl, inj_trim2Map, "Injector Trim 2", 7 topicHelp = "file://$getProjectsDirPath()/docs/Megasquirt3_TunerStudio_MS_Lite_Reference-1.5.pdf#injtrim2" ; constant, variable xBins = inj_trim_rpm, rpm, readonly yBins = inj_trim_load, fuelload, readonly zBins = inj_trimj upDownLabel = "RICHER", "LEANER" gridOrient = 250, 0, 340 ; Space 123 rotation of grid in degrees. table = inj_trimiTbl, inj_trimiMap, "Cyl 9 Fuel Trim", 7 ; constant, variable xBins = inj_trim_rpm, rpm yBins = inj_trim_load, fuelload zBins = inj_trimi upDownLabel = "RICHER", "LEANER" gridOrient = 250, 0, 340 ; Space 123 rotation of grid in degrees. table = inj_trimjTbl, inj_trimjMap, "Cyl 10 Fuel Trim", 7 ; constant, variable xBins = inj_trim_rpm, rpm, readonly yBins = inj_trim_load, fuelload, readonly zBins = inj_trimj upDownLabel = "RICHER", "LEANER" gridOrient = 250, 0, 340 ; Space 123 rotation of grid in degrees. table = inj_trimkTbl, inj_trimkMap, "Cyl 11 Fuel Trim", 7 ; constant, variable xBins = inj_trim_rpm, rpm, readonly yBins = inj_trim_load, fuelload, readonly zBins = inj_trimk upDownLabel = "RICHER", "LEANER" gridOrient = 250, 0, 340 ; Space 123 rotation of grid in degrees. table = inj_trimlTbl, inj_trimlMap, "Cyl 12 Fuel Trim", 7 ; constant, variable xBins = inj_trim_rpm, rpm, readonly yBins = inj_trim_load, fuelload, readonly zBins = inj_triml upDownLabel = "RICHER", "LEANER" gridOrient = 250, 0, 340 ; Space 123 rotation of grid in degrees. table = inj_trimmTbl, inj_trimmMap, "Cyl 13 Fuel Trim", 7 ; constant, variable xBins = inj_trim_rpm, rpm, readonly yBins = inj_trim_load, fuelload, readonly zBins = inj_trimm upDownLabel = "RICHER", "LEANER" gridOrient = 250, 0, 340 ; Space 123 rotation of grid in degrees. table = inj_trimnTbl, inj_trimnMap, "Cyl 14 Fuel Trim", 7 ; constant, variable xBins = inj_trim_rpm, rpm, readonly yBins = inj_trim_load, fuelload, readonly zBins = inj_trimn upDownLabel = "RICHER", "LEANER" gridOrient = 250, 0, 340 ; Space 123 rotation of grid in degrees. table = inj_trimoTbl, inj_trimoMap, "Cyl 15 Fuel Trim", 7 ; constant, variable xBins = inj_trim_rpm, rpm, readonly yBins = inj_trim_load, fuelload, readonly zBins = inj_trimo upDownLabel = "RICHER", "LEANER" gridOrient = 250, 0, 340 ; Space 123 rotation of grid in degrees. table = inj_trimpTbl, inj_trimpMap, "Cyl 16 Fuel Trim", 7 ; constant, variable xBins = inj_trim_rpm, rpm, readonly yBins = inj_trim_load, fuelload, readonly zBins = inj_trimp upDownLabel = "RICHER", "LEANER" gridOrient = 250, 0, 340 ; Space 123 rotation of grid in degrees. ;inj timing table = inj_timing_tbl, inj_timing_map, "Injector Timing", 7 topicHelp = "file://$getProjectsDirPath()/docs/Megasquirt3_TunerStudio_MS_Lite_Reference-1.5.pdf#injt1" xBins = inj_timing_rpm, rpm yBins = inj_timing_load, fuelload zBins = inj_timing upDownLabel = "ADVANCE", "RETARD" gridOrient = 250, 0, 340 table = inj_timing_sec_tbl, inj_timing_sec_map, "Secondary Injector Timing", 7 topicHelp = "file://$getProjectsDirPath()/docs/Megasquirt3_TunerStudio_MS_Lite_Reference-1.5.pdf#injt2" xBins = inj_timing_sec_rpm, rpm yBins = inj_timing_sec_load, fuelload zBins = inj_timing_sec upDownLabel = "ADVANCE", "RETARD" gridOrient = 250, 0, 340 ;spark trims table = spk_trimaTbl, spk_trimaMap, "Spark Trim 1", 8 ; constant, variable xBins = spk_trim_rpm, rpm yBins = spk_trim_load, ignload zBins = spk_trima upDownLabel = "RICHER", "LEANER" gridOrient = 250, 0, 340 ; Space 123 rotation of grid in degrees. table = spk_trimbTbl, spk_trimbMap, "Spark Trim 2", 8 ; constant, variable xBins = spk_trim_rpm, rpm yBins = spk_trim_load, ignload zBins = spk_trimb upDownLabel = "RICHER", "LEANER" gridOrient = 250, 0, 340 ; Space 123 rotation of grid in degrees. table = spk_trimcTbl, spk_trimcMap, "Spark Trim 3", 8 ; constant, variable xBins = spk_trim_rpm, rpm yBins = spk_trim_load, ignload zBins = spk_trimc upDownLabel = "RICHER", "LEANER" gridOrient = 250, 0, 340 ; Space 123 rotation of grid in degrees. table = spk_trimdTbl, spk_trimdMap, "Spark Trim 4", 8 ; constant, variable xBins = spk_trim_rpm, rpm yBins = spk_trim_load, ignload zBins = spk_trimd upDownLabel = "RICHER", "LEANER" gridOrient = 250, 0, 340 ; Space 123 rotation of grid in degrees. table = spk_trimeTbl, spk_trimeMap, "Spark Trim 5", 8 ; constant, variable xBins = spk_trim_rpm, rpm yBins = spk_trim_load, ignload zBins = spk_trime upDownLabel = "RICHER", "LEANER" gridOrient = 250, 0, 340 ; Space 123 rotation of grid in degrees. table = spk_trimfTbl, spk_trimfMap, "Spark Trim 6", 8 ; constant, variable xBins = spk_trim_rpm, rpm yBins = spk_trim_load, ignload zBins = spk_trimf upDownLabel = "RICHER", "LEANER" gridOrient = 250, 0, 340 ; Space 123 rotation of grid in degrees. table = spk_trimgTbl, spk_trimgMap, "Spark Trim 7", 8 ; constant, variable xBins = spk_trim_rpm, rpm yBins = spk_trim_load, ignload zBins = spk_trimg upDownLabel = "RICHER", "LEANER" gridOrient = 250, 0, 340 ; Space 123 rotation of grid in degrees. table = spk_trimhTbl, spk_trimhMap, "Spark Trim 8", 8 ; constant, variable xBins = spk_trim_rpm, rpm yBins = spk_trim_load, ignload zBins = spk_trimh upDownLabel = "RICHER", "LEANER" gridOrient = 250, 0, 340 ; Space 123 rotation of grid in degrees. table = spk_trimiTbl, spk_trimiMap, "Spark Trim 9", 8 ; constant, variable xBins = spk_trim_rpm, rpm yBins = spk_trim_load, ignload zBins = spk_trimi upDownLabel = "RICHER", "LEANER" gridOrient = 250, 0, 340 ; Space 123 rotation of grid in degrees. table = spk_trimjTbl, spk_trimjMap, "Spark Trim 10", 8 ; constant, variable xBins = spk_trim_rpm, rpm yBins = spk_trim_load, ignload zBins = spk_trimj upDownLabel = "RICHER", "LEANER" gridOrient = 250, 0, 340 ; Space 123 rotation of grid in degrees. table = spk_trimkTbl, spk_trimkMap, "Spark Trim 11", 8 ; constant, variable xBins = spk_trim_rpm, rpm yBins = spk_trim_load, ignload zBins = spk_trimk upDownLabel = "RICHER", "LEANER" gridOrient = 250, 0, 340 ; Space 123 rotation of grid in degrees. table = spk_trimlTbl, spk_trimlMap, "Spark Trim 12", 8 ; constant, variable xBins = spk_trim_rpm, rpm yBins = spk_trim_load, ignload zBins = spk_triml upDownLabel = "RICHER", "LEANER" gridOrient = 250, 0, 340 ; Space 123 rotation of grid in degrees. table = spk_trimmTbl, spk_trimmMap, "Spark Trim 13", 8 ; constant, variable xBins = spk_trim_rpm, rpm yBins = spk_trim_load, ignload zBins = spk_trimm upDownLabel = "RICHER", "LEANER" gridOrient = 250, 0, 340 ; Space 123 rotation of grid in degrees. table = spk_trimnTbl, spk_trimnMap, "Spark Trim 14", 8 ; constant, variable xBins = spk_trim_rpm, rpm yBins = spk_trim_load, ignload zBins = spk_trimn upDownLabel = "RICHER", "LEANER" gridOrient = 250, 0, 340 ; Space 123 rotation of grid in degrees. table = spk_trimoTbl, spk_trimoMap, "Spark Trim 15", 8 ; constant, variable xBins = spk_trim_rpm, rpm yBins = spk_trim_load, ignload zBins = spk_trimo upDownLabel = "RICHER", "LEANER" gridOrient = 250, 0, 340 ; Space 123 rotation of grid in degrees. table = spk_trimpTbl, spk_trimpMap, "Spark Trim 16", 8 ; constant, variable xBins = spk_trim_rpm, rpm yBins = spk_trim_load, ignload zBins = spk_trimp upDownLabel = "RICHER", "LEANER" gridOrient = 250, 0, 340 ; Space 123 rotation of grid in degrees. table = narrowband_tgts_tbl, narrowband_tgts_map, "Narrowband EGO targets", 14 topicHelp = "file://$getProjectsDirPath()/docs/Megasquirt3_TunerStudio_MS_Lite_Reference-1.5.pdf#narrowtargs" xBins = narrowband_tgts_rpms, rpm yBins = narrowband_tgts_loads, afrload1 zBins = narrowband_tgts upDownLabel = "RICHER", "LEANER" gridOrient = 250, 0, 340 ; Space 123 rotation of grid in degrees. ;------------------------------------------------------------------------------- [GaugeConfigurations] ;------------------------------------------------------------------------------- ; Define a gauge's characteristics here, then go to a specific layout ; block (Tuning or FrontPage) and use the name you've defined here to ; display that gauge in a particular position. ; ; Name = Case-sensitive, user-defined name for this gauge configuration. ; Var = Case-sensitive name of variable to be displayed, see the ; OutputChannels block in this file for possible values. ; Title = Title displayed at the top of the gauge. ; Units = Units displayed below value on gauge. ; Lo = Lower scale limit of gauge. ; Hi = Upper scale limit of gauge. ; LoD = Lower limit at which danger color is used for gauge background. ; LoW = Lower limit at which warning color is used. ; HiW = Upper limit at which warning color is used. ; HiD = Upper limit at which danger color is used. ; vd = Decimal places in displayed value ; ld = Label decimal places for display of Lo and Hi, above. ;Name Var Title Units Lo Hi LoD LoW HiW HiD vd ld gaugeCategory = "Outputs 1" pulseWidth1Gauge = pulseWidth1, "Pulse Width 1", "ms", 0, 25.5, 1.0, 1.2, 20, 25, 3, 1 pulseWidth2Gauge = pulseWidth2, "Pulse Width 2", "ms", 0, 25.5, 1.0, 1.2, 20, 25, 3, 1 pulseWidthSeq1Gauge = pwseq1, "Pulse Width Seq 1", "ms", 0, 25.5, 1.0, 1.2, 20, 25, 3, 1 pulseWidthSeq2Gauge = pwseq2, "Pulse Width Seq 2", "ms", 0, 25.5, 1.0, 1.2, 20, 25, 3, 1 pulseWidthSeq3Gauge = pwseq3, "Pulse Width Seq 3", "ms", 0, 25.5, 1.0, 1.2, 20, 25, 3, 1 pulseWidthSeq4Gauge = pwseq4, "Pulse Width Seq 4", "ms", 0, 25.5, 1.0, 1.2, 20, 25, 3, 1 pulseWidthSeq5Gauge = pwseq5, "Pulse Width Seq 5", "ms", 0, 25.5, 1.0, 1.2, 20, 25, 3, 1 pulseWidthSeq6Gauge = pwseq6, "Pulse Width Seq 6", "ms", 0, 25.5, 1.0, 1.2, 20, 25, 3, 1 pulseWidthSeq7Gauge = pwseq7, "Pulse Width Seq 7", "ms", 0, 25.5, 1.0, 1.2, 20, 25, 3, 1 pulseWidthSeq8Gauge = pwseq8, "Pulse Width Seq 8", "ms", 0, 25.5, 1.0, 1.2, 20, 25, 3, 1 pulseWidthSeq9Gauge = pwseq9, "Pulse Width Seq 9", "ms", 0, 25.5, 1.0, 1.2, 20, 25, 3, 1 pulseWidthSeq10Gauge = pwseq10, "Pulse Width Seq 10", "ms", 0, 25.5, 1.0, 1.2, 20, 25, 3, 1 pulseWidthSeq11Gauge = pwseq11, "Pulse Width Seq 11", "ms", 0, 25.5, 1.0, 1.2, 20, 25, 3, 1 pulseWidthSeq12Gauge = pwseq12, "Pulse Width Seq 12", "ms", 0, 25.5, 1.0, 1.2, 20, 25, 3, 1 gaugeCategory = "Outputs 2" IACgauge = iacstep, "Idle Stepper position", "steps", 0, 255, -1, -1, 999, 999, 0, 0 dwellGauge = dwell, "Dwell", "ms", 0, 10, 0.5, 1.0, 6.0, 8.0, 1, 1 dwelltrlGauge = dwell_trl, "Dwell (Trailing)", "ms", 0, 10, 0.5, 1.0, 6.0, 8.0, 1, 1 ; IAC step == idle pwm, when using pwm idle control. PWMIdlegauge = idleDC, "Idle PWM%", "%", 0, 100, -1, -1, 999, 90, 1, 1 advdegGauge = advance, "Ignition Advance", "degrees", 0, 50, -1, -1, 999, 999, 1, 1 dutyCycle1Gauge = dutyCycle1, "Duty Cycle 1", "%", 0, 100, -1, -1, 85, 90, 1, 1 dutyCycle2Gauge = dutyCycle2, "Duty Cycle 2", "%", 0, 100, -1, -1, 85, 90, 1, 1 boostdutyGauge = boostduty, "Boost Duty", "%", 0, 100, -1, -1, 100, 100, 1, 1 boostdutyGauge2 = boostduty2, "Boost Duty 2", "%", 0, 100, -1, -1, 100, 100, 1, 1 injtimingpriGauge = inj_timing_pri, "Injector timing (pri)", "degrees", 0, 50, -1, -1, 999, 999, 1, 1 injtimingsecGauge = inj_timing_sec, "Injector timing (sec)", "degrees", 0, 50, -1, -1, 999, 999, 1, 1 domeFillOut1Gauge = dome_fill_duty1, "Dome channel 1 fill duty", "%", 0, 100, -1, -1, 100, 100, 1, 1 ; domeFillOut2Gauge = dome_fill_duty2, "Dome channel 2 fill duty", "%", 0, 100, -1, -1, 100, 100, 1, 1 domeEmptyOut1Gauge= dome_empty_duty1, "Dome channel 1 empty duty", "%", 0, 100, -1, -1, 100, 100, 1, 1 ; domeEmptyOut2Gauge= dome_empty_duty2, "Dome channel 2 empty duty", "%", 0, 100, -1, -1, 100, 100, 1, 1 throttletargGauge = throttle_targ, "Throttle Target", "%", 0, 100, -1, 1, 90, 100, 1, 0 gaugeCategory = "Outputs 3" nitrous1_duty = nitrous1_duty, "Nitrous 1 Duty", "%", 0, 100, 100, 100, 100, 100, 0 ,0 nitrous2_duty = nitrous2_duty, "Nitrous 2 Duty", "%", 0, 100, 100, 100, 100, 100, 0 ,0 water_duty = water_duty, "Water Duty", "%", 0, 100, 100, 100, 100, 100, 0 ,0 duty_pwm_a = duty_pwm_a, "Generic PWM A Duty", "%", 0, 100, 100, 100, 100, 100, 0 ,0 duty_pwm_b = duty_pwm_b, "Generic PWM B Duty", "%", 0, 100, 100, 100, 100, 100, 0 ,0 duty_pwm_c = duty_pwm_c, "Generic PWM C Duty", "%", 0, 100, 100, 100, 100, 100, 0 ,0 duty_pwm_d = duty_pwm_d, "Generic PWM D Duty", "%", 0, 100, 100, 100, 100, 100, 0 ,0 duty_pwm_e = duty_pwm_e, "Generic PWM E Duty", "%", 0, 100, 100, 100, 100, 100, 0 ,0 duty_pwm_f = duty_pwm_f, "Generic PWM F Duty", "%", 0, 100, 100, 100, 100, 100, 0 ,0 vvt_duty1 = vvt_duty1, "VVT 1 duty", "%", 0, 100, 100, 100, 100, 100, 1 ,1 vvt_duty2 = vvt_duty2, "VVT 2 duty", "%", 0, 100, 100, 100, 100, 100, 1 ,1 vvt_duty3 = vvt_duty3, "VVT 3 duty", "%", 0, 100, 100, 100, 100, 100, 1 ,1 vvt_duty4 = vvt_duty4, "VVT 4 duty", "%", 0, 100, 100, 100, 100, 100, 1 ,1 fp_duty = fp_duty, "Fuel pump duty", "%", 0, 100, 100, 100, 100, 100, 1, 1 alt_duty = alt_duty, "Alternator Control Duty", "%", 0, 100, 100, 100, 100, 100, 0, 0 alt_period = alt_period, "Alternator Control Period", "ms", 0, 25, 25, 25, 25, 25, 2, 2 alt_targv = alt_targv, "Alternator Target Volts", "V", 0, 16, 16, 16, 16, 16, 1, 1 generic_pid_duty_a = generic_pid_duty_a, "Generic Closed-Loop A Duty", "%", 0, 100, 100, 100, 100, 100, 1, 1 generic_pid_duty_b = generic_pid_duty_b, "Generic Closed-Loop B Duty", "%", 0, 100, 100, 100, 100, 100, 1, 1 fan1_duty = fan1_duty, "Fan 1 duty", "%", 0, 100, 100, 100, 100, 100, 1, 1 gaugeCategory = "Calculations 1" accelEnrichGauge = accDecEnrich, "Accel Enrich%", "%", 50, 150, -1, -1, 999, 999, 0, 0 accEnrichMSGauge = accEnrichMS, "Accel Enrich PW", "ms", 50, 150, -1, -1, 999, 999, 3, 3 gammaEnrichGauge = gammaEnrich, "Total cor", "%", 50, 150, -1, -1, 151, 151, 1, 1 gammaairGauge = airCorrection, "Air density Correction", "%", 50, 150, -1, -1, 151, 151, 1, 1 warmupgauge = warmupEnrich, "Warmup Enrichment", "%", 50, 150, -1, -1, 151, 151, 1, 1 barocorgauge = baroCorrection, "Barometric Correction", "%", 50, 150, -1, -1, 151, 151, 1, 1 WFGauge1 = wallfuel1, "Fuel on the walls 1", "", 0, 40000000, 0, 0, 40000000, 40000000, 0, 0 WFGauge2 = wallfuel2, "Fuel on the walls 2", "", 0, 40000000, 0, 0, 40000000, 40000000, 0, 0 EAEGauge1 = EAEFuelCorr1, "EAE Fuel Correction 1", "%", 0, 200, 40, 70, 130, 160, 0, 0 EAEGauge2 = EAEFuelCorr2, "EAE Fuel Correction 2", "%", 0, 200, 40, 70, 130, 160, 0, 0 fuelcorr = fuelCorrection,"E85 Fuel Correction", "%", 100, 200, 99, 99, 164, 170, 0, 0 fueltemp_cor = fueltemp_cor, "Fuel Temperature Correction", "%", -100, 100, -100, -100, 100, 100, 1, 1 fuelpress_cor = fuelpress_cor, "Fuel Pressure Correction", "%", -100, 100, -100, -100, 100, 100, 1, 1 ltt_cor = ltt_cor, "Long Term Trim Correction", "%", -12.7, 12.7, -12.7, -12.7, 12.7, 12.7, 1, 1 veGauge1 = veCurr1, "VE1 Current", "%", 0, 120, -1, -1, 999, 999, 1, 1 veGauge2 = veCurr2, "VE2 Current", "%", 0, 120, -1, -1, 999, 999, 1, 1 nitrous_addfuel = n2o_addfuel, "Nitrous added fuel", "ms", -5, 20, 20, 20, 20, 20, 3, 3 tps_accel = tps_accel, "tps_accel", "%/sec", -15000, 15000, 65535, 65535, 65535, 65535, 0, 0 map_accel = map_accel, "map_accel", "kPa/sec", -15000, 15000, 65535, 65535, 65535, 65535, 0, 0 total_accel = total_accel, "total_accel", "%/sec", -15000, 15000, 65535, 65535, 65535, 65535, 0, 0 als_addfuel = als_addfuel, "ALS added fuel", "ms", -5, 20, 20, 20, 20, 20, 3, 3 reqfuelGauge = reqfuel, "Req Fuel (calc)", "ms", 0, 25.5, 1.0, 1.2, 20, 25, 3, 1 deadtime1Gauge = deadtime1, "DeadTime 1", "ms", 0, 25.5, 1.0, 1.2, 20, 25, 3, 1 gaugeCategory = "Calculations 2" knockGauge = knockRetard, "Knock Retard", "deg", 0, 25.0, -1, -1, 5.0, 10.0, 1, 1 coldAdvGauge = coldAdvDeg, "Cold advance", "deg", 0, 25.0, -50, -50, 50.0, 50.0, 1, 1 tc_retardGauge = tc_retard, "Traction Retard", "deg", 0, 25.0, -50, -50, 50.0, 50.0, 1, 1 cel_retardGauge = cel_retard, "CEL Retard", "deg", 0, 25.0, -50, -50, 50.0, 50.0, 1, 1 fc_retardGauge = fc_retard, "Fuel cut Retard", "deg", 0, 25.0, -50, -50, 50.0, 50.0, 1, 1 ext_advanceGauge = ext_advance, "External Advance", "deg", 0, 25.0, -50, -50, 50.0, 50.0, 1, 1 base_advanceGauge = base_advance, "Base Spark Advance", "deg", 0, 25.0, -50, -50, 50.0, 50.0, 1, 1 idle_cor_advanceGauge = idle_cor_advance, "Idle Correction Advance", "deg", 0, 25.0, -50, -50, 50.0, 50.0, 1, 1 mat_retardGauge = mat_retard, "MAT Retard", "deg", 0, 25.0, -50, -50, 50.0, 50.0, 1, 1 flex_advanceGauge = flex_advance, "Flex Advance", "deg", 0, 25.0, -50, -50, 50.0, 50.0, 1, 1 adv1Gauge = adv1, "Spark Table 1", "deg", 0, 25.0, -50, -50, 50.0, 50.0, 1, 1 adv2Gauge = adv2, "Spark Table 2", "deg", 0, 25.0, -50, -50, 50.0, 50.0, 1, 1 adv3Gauge = adv3, "Spark Table 3", "deg", 0, 25.0, -50, -50, 50.0, 50.0, 1, 1 adv4Gauge = adv4, "Spark Table 4", "deg", 0, 25.0, -50, -50, 50.0, 50.0, 1, 1 revlim_retardGauge= revlim_retard, "Revlim Retard", "deg", 0, 25.0, -50, -50, 50.0, 50.0, 1, 1 als_timingGauge = als_timing, "ALS Timing", "deg", 0, 25.0, -50, -50, 50.0, 50.0, 1, 1 launch_timingGauge = launch_timing, "Launch Timing", "deg", 0, 25.0, -50, -50, 50.0, 50.0, 1, 1 step3_timingGauge = step3_timing, "3-step Timing", "deg", 0, 25.0, -50, -50, 50.0, 50.0, 1, 1 launchvss_retardGauge = launchvss_retard, "Launch VSS Retard", "deg", 0, 25.0, -50, -50, 50.0, 50.0, 1, 1 timingerrGauge = timing_err, "Timing pred err", "%", -127, 127, 255,255,255,255,0,0 ; user0Gauge = user0, "User defined", "", 0, 65535, 65535, 65535, 65535, 65535, 0, 0 nitrous_retard = n2o_retard, "Nitrous retard", "deg", -5, 30, 30, 30, 30, 30, 1, 1 launch_timer = launch_timer, "Launch timer", "s", 0, 15, 15, 15, 15, 15, 3 ,3 launch_retard = launch_retard, "Launch timed retard", "deg", -5, 30, 30, 30, 30, 30, 1, 1 nitrous_timer = nitrous_timer, "Nitrous Timer", "s", 0, 15, 15, 15, 15, 15, 3 ,3 gaugeCategory = "Calculations 3" lostsyncGauge = synccnt, "Lost sync counter", "", 0, 255, 255, 255, 255, 255, 0, 0 syncreasonGauge = syncreason, "Lost sync reason", "", 0, 255, 255, 255, 255, 255, 0, 0 clockGauge = seconds, "Clock", "Seconds", 0, 65535, 10, 10, 65535, 65535, 0, 0 vss1dot = vss1dot, "VSS1 Acceleration", "ms-2", -25, 25, 65535, 65535, 65535, 65535, 0, 0 ; adjust to 50 if running top fuel vss2dot = vss2dot, "VSS2 Acceleration", "ms-2", -25, 25, 65535, 65535, 65535, 65535, 0, 0 ; adjust to 50 if running top fuel RPMdot = RPMdot, "RPMdot", "rpm/sec", -15000, 15000, 65535, 65535, 65535, 65535, 0, 0 TPSdot = TPSdot, "TPSdot", "%/sec", -15000, 15000, 65535, 65535, 65535, 65535, 0, 0 MAPdot = MAPdot, "MAPdot", "kPa/sec", -15000, 15000, 65535, 65535, 65535, 65535, 0, 0 vvttargGauge1 = vvt_target1, "VVT 1 target", "degrees", 0, 50, -1, -1, 999, 999, 1, 1 vvttargGauge2 = vvt_target2, "VVT 2 target", "degrees", 0, 50, -1, -1, 999, 999, 1, 1 vvttargGauge3 = vvt_target3, "VVT 3 target", "degrees", 0, 50, -1, -1, 999, 999, 1, 1 vvttargGauge4 = vvt_target4, "VVT 4 target", "degrees", 0, 50, -1, -1, 999, 999, 1, 1 fuelflowGauge = fuelflow, "Fuel flow (avg)", "cc/min", 0, 65535, -1, -1, 99999, 99999, 0, 0 economy_l_100km = economy_l_100km, "Fuel economy", "l/100km", 0, 300, -1, -1, 900, 900, 1, 1 economy_mpg_us = economy_mpg_us, "Fuel economy", "mpg_us", 0, 60, -1, -1, 99, 99, 0, 0 economy_mpg_uk = economy_mpg_uk, "Fuel economy", "mpg_uk", 0, 60, -1, -1, 99, 99, 0, 0 boost_target_1 = boost_targ_1, "Boost Target 1", "kPa", 0, 500, -1, -1, 999, 999, 1, 1 boost_target_2 = boost_targ_2, "Boost Target 2", "kPa", 0, 500, -1, -1, 999, 999, 1, 1 boost_dome_target1 = boost_dome_targ1, "Dome Target 1", "kPa", 0, 500, -1, -1, 999, 999, 1, 1 ; boost_dome_target2 = boost_dome_targ2, "Dome Target 2", "kPa", 0, 500, -1, -1, 999, 999, 1, 1 cl_idle_targ_rpm = cl_idle_targ_rpm, "CL Idle target", "RPM", 0, 20000, 300, 600, {rpmwarn}, {rpmdang}, 0, 0 tc_slipxtime = tc_slipxtime, "T/C Slip * Time", "", 0, 6553.5, 6553.5, 6553.5, 6553.5, 6553.5, 1, 1 ve_rawGauge1 = ve_raw1, "VE1 raw", "%", 0, 120, -1, -1, 999, 999, 1, 1 ve_rawGauge2 = ve_raw2, "VE2 raw", "%", 0, 120, -1, -1, 999, 999, 1, 1 ve_rawGauge3 = ve_raw3, "VE3 raw", "%", 0, 120, -1, -1, 999, 999, 1, 1 ve_rawGauge4 = ve_raw4, "VE4 raw", "%", 0, 120, -1, -1, 999, 999, 1, 1 gaugeCategory = "EGT inputs" #if CELSIUS egtGauge1 = egt1, "EGT 01", "C", 0, 1250, 0, 0, 1250, 1250, 0, 0 egtGauge2 = egt2, "EGT 02", "C", 0, 1250, 0, 0, 1250, 1250, 0, 0 egtGauge3 = egt3, "EGT 03", "C", 0, 1250, 0, 0, 1250, 1250, 0, 0 egtGauge4 = egt4, "EGT 04", "C", 0, 1250, 0, 0, 1250, 1250, 0, 0 egtGauge5 = egt5, "EGT 05", "C", 0, 1250, 0, 0, 1250, 1250, 0, 0 egtGauge6 = egt6, "EGT 06", "C", 0, 1250, 0, 0, 1250, 1250, 0, 0 egtGauge7 = egt7, "EGT 07", "C", 0, 1250, 0, 0, 1250, 1250, 0, 0 egtGauge8 = egt8, "EGT 08", "C", 0, 1250, 0, 0, 1250, 1250, 0, 0 egtGauge9 = egt9, "EGT 09", "C", 0, 1250, 0, 0, 1250, 1250, 0, 0 egtGauge10 = egt10, "EGT 10", "C", 0, 1250, 0, 0, 1250, 1250, 0, 0 egtGauge11 = egt11, "EGT 11", "C", 0, 1250, 0, 0, 1250, 1250, 0, 0 egtGauge12 = egt12, "EGT 12", "C", 0, 1250, 0, 0, 1250, 1250, 0, 0 ; egtGauge13 = egt13, "EGT 13", "C", 0, 1250, 0, 0, 1250, 1250, 0, 0 ; egtGauge14 = egt14, "EGT 14", "C", 0, 1250, 0, 0, 1250, 1250, 0, 0 ; egtGauge15 = egt15, "EGT 15", "C", 0, 1250, 0, 0, 1250, 1250, 0, 0 ; egtGauge16 = egt16, "EGT 16", "C", 0, 1250, 0, 0, 1250, 1250, 0, 0 #else egtGauge1 = egt1, "EGT 01", "F", 0, 2280, 0, 0, 2280, 2280, 0, 0 egtGauge2 = egt2, "EGT 02", "F", 0, 2280, 0, 0, 2280, 2280, 0, 0 egtGauge3 = egt3, "EGT 03", "F", 0, 2280, 0, 0, 2280, 2280, 0, 0 egtGauge4 = egt4, "EGT 04", "F", 0, 2280, 0, 0, 2280, 2280, 0, 0 egtGauge5 = egt5, "EGT 05", "F", 0, 2280, 0, 0, 2280, 2280, 0, 0 egtGauge6 = egt6, "EGT 06", "F", 0, 2280, 0, 0, 2280, 2280, 0, 0 egtGauge7 = egt7, "EGT 07", "F", 0, 2280, 0, 0, 2280, 2280, 0, 0 egtGauge8 = egt8, "EGT 08", "F", 0, 2280, 0, 0, 2280, 2280, 0, 0 egtGauge9 = egt9, "EGT 09", "F", 0, 2280, 0, 0, 2280, 2280, 0, 0 egtGauge10 = egt10, "EGT 10", "F", 0, 2280, 0, 0, 2280, 2280, 0, 0 egtGauge11 = egt11, "EGT 11", "F", 0, 2280, 0, 0, 2280, 2280, 0, 0 egtGauge12 = egt12, "EGT 12", "F", 0, 2280, 0, 0, 2280, 2280, 0, 0 ; egtGauge13 = egt13, "EGT 13", "F", 0, 2280, 0, 0, 2280, 2280, 0, 0 ; egtGauge14 = egt14, "EGT 14", "F", 0, 2280, 0, 0, 2280, 2280, 0, 0 ; egtGauge15 = egt15, "EGT 15", "F", 0, 2280, 0, 0, 2280, 2280, 0, 0 ; egtGauge16 = egt16, "EGT 16", "F", 0, 2280, 0, 0, 2280, 2280, 0, 0 #endif gaugeCategory = "Sensor inputs1" #if CELSIUS cltGauge = coolant, "Coolant Temp", "°C", {cltlowlim}, {clthighlim}, -100, -100, {clthighwarn}, {clthighdang}, 0, 0 matGauge = mat, "Manifold Air Temp", "°C", -40, 110, -15, 0, 95, 100, 0, 0 airtempGauge = airtemp, "Est. Intake Air Temp", "°C", -40, 110, -15, 0, 95, 100, 0, 0 #else cltGauge = coolant, "Coolant Temp", "°F", {cltlowlim}, {clthighlim}, -100, -100, {clthighwarn}, {clthighdang}, 0, 0 matGauge = mat, "Manifold Air Temp", "°F", -40, 215, 0, 30, 200, 210, 0, 0 airtempGauge = airtemp, "Est. Intake Air Temp", "°F", -40, 215, 0, 30, 200, 210, 0, 0 #endif voltMeter = batteryVoltage,"Battery Voltage", "volts", 7, 21, 8, 9, 15, 16, 2, 2 tachometer = rpm, "Engine Speed", "RPM", 0, {rpmhigh}, 300, 600, {rpmwarn}, {rpmdang}, 0, 0 throttleGauge = throttle, "Throttle Position", "%", 0, 100, -1, 1, 90, 100, 1, 0 mapGauge = map, "Engine MAP", "kPa", 0, {loadhigh}, 0, 20, 200, {loadhigh}, 1, 0 barometerGauge = barometer, "Barometer", "kPa", 60, 120, 0, 20, 200, 245, 1, 0 fuelloadGauge = fuelload, "Fuel Load", { bitStringValue( algorithmUnits , algorithm ) }, 0, {loadhigh}, 0, 20, 200, {loadhigh}, 1, 0 fuelload2Gauge = fuelload2, "Secondary Fuel Load", { bitStringValue( algorithmUnits , algorithm2 ) }, 0, {loadhigh}, 0, 20, 200, {loadhigh}, 1, 0 ignloadGauge = ignload, "Ign Load", { bitStringValue( algorithmUnits , IgnAlgorithm ) }, 0, {loadhigh}, 0, 20, 200, {loadhigh}, 1, 0 ignload2Gauge = ignload2, "Secondary Ign Load", { bitStringValue( algorithmUnits , IgnAlgorithm2 ) }, 0, {loadhigh}, 0, 20, 200, {loadhigh}, 1, 0 eaeloadGauge = eaeload1, "EAE Load", { bitStringValue( algorithmUnits , (eaeload ? eaeload : algorithm) ) }, 0, {loadhigh}, 0, 20, 200, {loadhigh}, 1, 0 afrloadGauge = afrload1, "AFR Load", { bitStringValue( algorithmUnits , (afrload ? afrload : algorithm) ) }, 0, {loadhigh}, 0, 20, 200, {loadhigh}, 1, 0 mafGauge = maf, "Mass Air Flow", "g/sec", 0, {650 * (maf_range + 1)}, 0, {200 * (maf_range + 1)}, {480 * (maf_range + 1)}, {550 * (maf_range + 1)}, 2, 0 maf_voltsGauge = maf_volts, "MAF Volts", "V", 0, 5.00, 0, 5.00, 5.00, 5.00, 3, 1 maf_freqGauge = maf_freq, "MAF Frequency", "Hz", 0, 30000, 0, 30000, 30000, 30000, 0, 0 mafloadGauge = mafload, "MAFload", "kPa", 0, 400, -1, -1, 999, 999, 1, 0 boostbarGauge = boostbar, "Boost", "bar", -1, 3, -1, -1, 5, 5, 2, 2 boostpsigGauge = boostpsig, "Boost", "psig", -14.7, 21, -15, -15, 30, 30, 1, 1 boostvacGauge = boostvac, "Vac/Boost", "inHg/psig", -30, 30, -30, -30, 30, 30, 1, 1 knockinGauge = knock, "Knock Input", "%", 0, 100.0, -1, -1, 100.0, 100.0, 1, 1 appGauge = app, "Pedal/Grip Position", "%", 0, 100, -1, 1, 90, 100, 1, 0 gaugeCategory = "Sensor inputs2" stream_levelGauge = stream_level, "Stream Level", "", 0, 128, 128, 128, 128, 128, 0, 0 vehiclespeed1 = vss1, "Vehicle Speed 1", { bitStringValue( prefSpeedUnits , prefSpeedUnits ) }, 0, { prefSpeedUnits == 0 ? 200 : 300 }, 1000, 1000, 1000, 1000, 0, 0 vehiclespeed2 = vss2, "Vehicle Speed 2", { bitStringValue( prefSpeedUnits , prefSpeedUnits ) }, 0, { prefSpeedUnits == 0 ? 200 : 300 }, 1000, 1000, 1000, 1000, 0, 0 vehiclespeed3 = vss3, "Vehicle Speed 3", { bitStringValue( prefSpeedUnits , prefSpeedUnits ) }, 0, { prefSpeedUnits == 0 ? 200 : 300 }, 1000, 1000, 1000, 1000, 0, 0 vehiclespeed4 = vss4, "Vehicle Speed 4", { bitStringValue( prefSpeedUnits , prefSpeedUnits ) }, 0, { prefSpeedUnits == 0 ? 200 : 300 }, 1000, 1000, 1000, 1000, 0, 0 shaftspeed1 = ss1, "Shaft Speed 1", "RPM", 0, 10000, 10000, 10000, 10000, 10000, 0, 0 shaftspeed2 = ss2, "Shaft Speed 2", "RPM", 0, 10000, 10000, 10000, 10000, 10000, 0, 0 gear = gear, "Gear", "", -1, 6, 6, 6, 6, 6, 0 ,0 accelx = accelx, "Accel X", "ms-2", -25, 25, 25, 25, 25, 25, 2, 2 accely = accely, "Accel Y", "ms-2", -25, 25, 25, 25, 25, 25, 2, 2 accelz = accelz, { bitStringValue( accel_vs_yaw_name , accel_vs_yaw ) }, { bitStringValue( accel_vs_yaw_units , accel_vs_yaw ) }, -25, 25, 25, 25, 25, 25, 2, 2 ; TODO compute name and units fuelcompsn= fuel_pct, "Ethanol Percentage","%", 0, 100, -1, -1, 85, 101, 1, 1 #if CELSIUS fueltempGauge1 = fuel_temp1, "Fuel Temp1", "°C", -40, 110, -100, -100, 95, 105, 0, 0 fueltempGauge2 = fuel_temp2, "Fuel Temp2", "°C", -40, 110, -100, -100, 95, 105, 0, 0 #else fueltempGauge1 = fuel_temp1, "Fuel Temp1", "°F", -40, 240, -100, -100, 200, 220, 0, 0 fueltempGauge2 = fuel_temp2, "Fuel Temp2", "°F", -40, 240, -100, -100, 200, 220, 0, 0 #endif fuelpressGauge1kpa = fuel_press1, "Fuel Pressure1", "kPa.d", -40, 240, -100, -100, 200, 220, 0, 0 fuelpressGauge1psi = fuel_press1_psi, "Fuel Pressure1", "psi.d", -40, 240, -100, -100, 200, 220, 0, 0 fuelpressGauge1bar = fuel_press1_bar, "Fuel Pressure1", "bar.d", -40, 240, -100, -100, 200, 220, 0, 0 fuelpressGauge2kpa = fuel_press2, "Fuel Pressure2", "kPa.d", -40, 240, -100, -100, 200, 220, 0, 0 fuelpressGauge2psi = fuel_press2_psi, "Fuel Pressure2", "psi.d", -40, 240, -100, -100, 200, 220, 0, 0 fuelpressGauge2bar = fuel_press2_bar, "Fuel Pressure1", "bar.d", -40, 240, -100, -100, 200, 220, 0, 0 TPSADCGauge = tpsADC, "TPS ADC", "ADC", 0, 1023, -1, 1, 1024, 1024, 0, 0 load_duty = load_duty, "Alternator Load Duty", "%", 0, 100, 100, 100, 100, 100, 0, 0 batt_curr = batt_curr, "Battery Current", "A", -100, 100, 200, 200, 200, 200, 1, 1 gaugeCategory = "Sensor inputs3" vvtGauge1 = vvt_ang1, "VVT 1 angle", "degrees", 0, 50, -1, -1, 999, 999, 1, 1 vvtGauge2 = vvt_ang2, "VVT 2 angle", "degrees", 0, 50, -1, -1, 999, 999, 1, 1 vvtGauge3 = vvt_ang3, "VVT 3 angle", "degrees", 0, 50, -1, -1, 999, 999, 1, 1 vvtGauge4 = vvt_ang4, "VVT 4 angle", "degrees", 0, 50, -1, -1, 999, 999, 1, 1 knock01Gauge = knock_cyl01, "Knock cyl# 1", "", 0, 100, 0, 0, 100, 100, 1, 0 knock02Gauge = knock_cyl02, "Knock cyl# 2", "", 0, 100, 0, 0, 100, 100, 1, 0 knock03Gauge = knock_cyl03, "Knock cyl# 3", "", 0, 100, 0, 0, 100, 100, 1, 0 knock04Gauge = knock_cyl04, "Knock cyl# 4", "", 0, 100, 0, 0, 100, 100, 1, 0 knock05Gauge = knock_cyl05, "Knock cyl# 5", "", 0, 100, 0, 0, 100, 100, 1, 0 knock06Gauge = knock_cyl06, "Knock cyl# 6", "", 0, 100, 0, 0, 100, 100, 1, 0 knock07Gauge = knock_cyl07, "Knock cyl# 7", "", 0, 100, 0, 0, 100, 100, 1, 0 knock08Gauge = knock_cyl08, "Knock cyl# 8", "", 0, 100, 0, 0, 100, 100, 1, 0 knock09Gauge = knock_cyl09, "Knock cyl# 9", "", 0, 100, 0, 0, 100, 100, 1, 0 knock10Gauge = knock_cyl10, "Knock cyl#10", "", 0, 100, 0, 0, 100, 100, 1, 0 knock11Gauge = knock_cyl11, "Knock cyl#11", "", 0, 100, 0, 0, 100, 100, 1, 0 knock12Gauge = knock_cyl12, "Knock cyl#12", "", 0, 100, 0, 0, 100, 100, 1, 0 gaugeCategory = "Sensor inputs4" ; gps_latdeggauge = gps_latdeg, "GPS Latitude deg", "deg", -90, +90, -90, -90, 90, 90, 0, 0 ; gps_latmingauge = gps_latmin, "GPS Latitude min", "min", 0, +60, 0, 0, 60, 60, 0, 0 ; gps_latsecgauge = gps_latsec, "GPS Latitude sec", "sec", 0, +60, 0, 0, 60, 60, 3, 3 ; gps_latmmingauge = gps_latmmin, "GPS Latitude mmin", "mmin", 0, +60, 0, 0, 6000, 6000, 3, 3 ; gps_londeggauge = gps_londeg, "GPS Longitude deg", "deg", 0, +180, 0, 0, 180, 180, 0, 0 ; gps_lonmingauge = gps_lonmin, "GPS Longitude min", "min", 0, +60, 0, 0, 60, 60, 0, 0 ; gps_lonsecgauge = gps_lonsec, "GPS Longitude sec", "sec", 0, +60, 0, 0, 60, 60, 3, 3 ; gps_lonEWgauge = gps_lonEW, "GPS Longitude E/W", "E/W", 0, 255, 0, 0, 255, 255, 0, 0 gps_altgauge = gps_alt, "GPS Altitude", "m", -100, +13000, -100, -100, 13000, 13000, 1, 1 gps_speedgauge = gps_speed, "GPS Speed", { bitStringValue( prefSpeedUnits , prefSpeedUnits ) }, 0, { prefSpeedUnits == 0 ? 200 : 300 }, 1000, 1000, 1000, 1000, 0, 0 gps_coursegauge = gps_course, "GPS Course", "deg", 0, 360, 0, 0, 360, 360, 1, 1 gps_latitudegauge = gps_latitude, "GPS Latitude", "deg", -90, +90, -90, -90, 90, 90, 5, 5 gps_longitudegauge = gps_longitude, "GPS Longitude", "deg", -180, +180, -180, -180, 180, 180, 5, 5 gaugeCategory = "AFR/EGO inputs" #if NARROW_BAND_EGO egoV1Gauge = egov1, "Exhaust Gas Oxygen 1", "volts", 0, 1, 1, 1, 1, 1, 2, 2 egoV2Gauge = egov2, "Exhaust Gas Oxygen 2", "volts", 0, 1, 1, 1, 1, 1, 2, 2 egoV3Gauge = egov3, "Exhaust Gas Oxygen 3", "volts", 0, 1, 1, 1, 1, 1, 2, 2 egoV4Gauge = egov4, "Exhaust Gas Oxygen 4", "volts", 0, 1, 1, 1, 1, 1, 2, 2 egoV5Gauge = egov5, "Exhaust Gas Oxygen 5", "volts", 0, 1, 1, 1, 1, 1, 2, 2 egoV6Gauge = egov6, "Exhaust Gas Oxygen 6", "volts", 0, 1, 1, 1, 1, 1, 2, 2 egoV7Gauge = egov7, "Exhaust Gas Oxygen 7", "volts", 0, 1, 1, 1, 1, 1, 2, 2 egoV8Gauge = egov8, "Exhaust Gas Oxygen 8", "volts", 0, 1, 1, 1, 1, 1, 2, 2 #elif LAMBDA lambda1Gauge = lambda1, "Lambda 1", "", 0.5, 1.5, 0.5, 0.7, 2, 1.1, 2, 2 lambda2Gauge = lambda2, "Lambda 2", "", 0.5, 1.5, 0.5, 0.7, 2, 1.1, 2, 2 lambda3Gauge = lambda3, "Lambda 3", "", 0.5, 1.5, 0.5, 0.7, 2, 1.1, 2, 2 lambda4Gauge = lambda4, "Lambda 4", "", 0.5, 1.5, 0.5, 0.7, 2, 1.1, 2, 2 lambda5Gauge = lambda5, "Lambda 5", "", 0.5, 1.5, 0.5, 0.7, 2, 1.1, 2, 2 lambda6Gauge = lambda6, "Lambda 6", "", 0.5, 1.5, 0.5, 0.7, 2, 1.1, 2, 2 lambda7Gauge = lambda7, "Lambda 7", "", 0.5, 1.5, 0.5, 0.7, 2, 1.1, 2, 2 lambda8Gauge = lambda8, "Lambda 8", "", 0.5, 1.5, 0.5, 0.7, 2, 1.1, 2, 2 egoV1Gauge = egov1, "Exhaust Gas Oxygen 1", "volts", 0, 5, 5, 5, 5, 5, 2, 2 egoV2Gauge = egov2, "Exhaust Gas Oxygen 2", "volts", 0, 5, 5, 5, 5, 5, 2, 2 egoV3Gauge = egov3, "Exhaust Gas Oxygen 3", "volts", 0, 5, 5, 5, 5, 5, 2, 2 egoV4Gauge = egov4, "Exhaust Gas Oxygen 4", "volts", 0, 5, 5, 5, 5, 5, 2, 2 egoV5Gauge = egov5, "Exhaust Gas Oxygen 5", "volts", 0, 5, 5, 5, 5, 5, 2, 2 egoV6Gauge = egov6, "Exhaust Gas Oxygen 6", "volts", 0, 5, 5, 5, 5, 5, 2, 2 egoV7Gauge = egov7, "Exhaust Gas Oxygen 7", "volts", 0, 5, 5, 5, 5, 5, 2, 2 egoV8Gauge = egov8, "Exhaust Gas Oxygen 8", "volts", 0, 5, 5, 5, 5, 5, 2, 2 #else afr1Gauge = afr1, "Air:Fuel Ratio 1", "", 10, 19.4, 12, 13, 15, 16, 2, 2 afr2Gauge = afr2, "Air:Fuel Ratio 2", "", 10, 19.4, 12, 13, 15, 16, 2, 2 afr3Gauge = afr3, "Air:Fuel Ratio 3", "", 10, 19.4, 12, 13, 15, 16, 2, 2 afr4Gauge = afr4, "Air:Fuel Ratio 4", "", 10, 19.4, 12, 13, 15, 16, 2, 2 afr5Gauge = afr5, "Air:Fuel Ratio 5", "", 10, 19.4, 12, 13, 15, 16, 2, 2 afr6Gauge = afr6, "Air:Fuel Ratio 6", "", 10, 19.4, 12, 13, 15, 16, 2, 2 afr7Gauge = afr7, "Air:Fuel Ratio 7", "", 10, 19.4, 12, 13, 15, 16, 2, 2 afr8Gauge = afr8, "Air:Fuel Ratio 8", "", 10, 19.4, 12, 13, 15, 16, 2, 2 egoV1Gauge = egov1, "Exhaust Gas Oxygen 1", "volts", 0, 5, 5, 5, 5, 5, 2, 2 egoV2Gauge = egov2, "Exhaust Gas Oxygen 2", "volts", 0, 5, 5, 5, 5, 5, 2, 2 egoV3Gauge = egov3, "Exhaust Gas Oxygen 3", "volts", 0, 5, 5, 5, 5, 5, 2, 2 egoV4Gauge = egov4, "Exhaust Gas Oxygen 4", "volts", 0, 5, 5, 5, 5, 5, 2, 2 egoV5Gauge = egov5, "Exhaust Gas Oxygen 5", "volts", 0, 5, 5, 5, 5, 5, 2, 2 egoV6Gauge = egov6, "Exhaust Gas Oxygen 6", "volts", 0, 5, 5, 5, 5, 5, 2, 2 egoV7Gauge = egov7, "Exhaust Gas Oxygen 7", "volts", 0, 5, 5, 5, 5, 5, 2, 2 egoV8Gauge = egov8, "Exhaust Gas Oxygen 8", "volts", 0, 5, 5, 5, 5, 5, 2, 2 #endif gaugeCategory = "AFR/EGO calculations" #if NARROW_BAND_EGO afr1targetGauge = afrtgt1, "EgoV 1 Target", "", 0, 1, 20, 20, 20, 20, 3, 3 afr2targetGauge = afrtgt2, "EgoV 2 Target", "", 0, 1, 20, 20, 20, 20, 3, 3 afr1errGauge = afr1err, "EgoV 1 Error", "", -1, +1, 12, 13, 15, 16, 3, 3 afr2errGauge = afr2err, "EgoV 2 Error", "", -1, +1, 12, 13, 15, 16, 3, 3 #elif LAMBDA afr1targetGauge = afrtgt1, "Lambda 1 Target", "", 0.5, 1.5, 20, 20, 20, 20, 2, 2 afr2targetGauge = afrtgt2, "Lambda 2 Target", "", 0.5, 1.5, 20, 20, 20, 20, 2, 2 afr1errGauge = afr1err, "Lambda 1 Error", "", -2, +2, 12, 13, 15, 16, 2, 2 afr2errGauge = afr2err, "Lambda 2 Error", "", -2, +2, 12, 13, 15, 16, 2, 2 #else afr1targetGauge = afrtgt1, "AFR 1 Target", "", 10, 19.4, 20, 20, 20, 20, 2, 2 afr2targetGauge = afrtgt2, "AFR 2 Target", "", 10, 19.4, 20, 20, 20, 20, 2, 2 afr1errGauge = afr1err, "AFR 1 Error", "", -5, +5, 12, 13, 15, 16, 2, 2 afr2errGauge = afr2err, "AFR 2 Error", "", -5, +5, 12, 13, 15, 16, 2, 2 #endif egoCorrGauge1 = egocor1, "EGO Correction 1", "%", 50, 150, 90, 99, 101, 110, 1, 1 egoCorrGauge2 = egocor2, "EGO Correction 2", "%", 50, 150, 90, 99, 101, 110, 1, 1 egoCorrGauge3 = egocor3, "EGO Correction 3", "%", 50, 150, 90, 99, 101, 110, 1, 1 egoCorrGauge4 = egocor4, "EGO Correction 4", "%", 50, 150, 90, 99, 101, 110, 1, 1 egoCorrGauge5 = egocor5, "EGO Correction 5", "%", 50, 150, 90, 99, 101, 110, 1, 1 egoCorrGauge6 = egocor6, "EGO Correction 6", "%", 50, 150, 90, 99, 101, 110, 1, 1 egoCorrGauge7 = egocor7, "EGO Correction 7", "%", 50, 150, 90, 99, 101, 110, 1, 1 egoCorrGauge8 = egocor8, "EGO Correction 8", "%", 50, 150, 90, 99, 101, 110, 1, 1 stoichGauge = Stoich, "Stoich", "", 10, 19.4, 12, 13, 15, 16, 2, 2 gaugeCategory = "AFR/EGO inputs 9-12" #if NARROW_BAND_EGO ; #elif LAMBDA lambda9Gauge = lambda9, "Lambda 9", "", 0.5, 1.5, 0.5, 0.7, 2, 1.1, 2, 2 lambda10Gauge = lambda10, "Lambda 10", "", 0.5, 1.5, 0.5, 0.7, 2, 1.1, 2, 2 lambda11Gauge = lambda11, "Lambda 11", "", 0.5, 1.5, 0.5, 0.7, 2, 1.1, 2, 2 lambda12Gauge = lambda12, "Lambda 12", "", 0.5, 1.5, 0.5, 0.7, 2, 1.1, 2, 2 #else afr9Gauge = afr9, "Air:Fuel Ratio 9", "", 10, 19.4, 12, 13, 15, 16, 2, 2 afr10Gauge = afr10, "Air:Fuel Ratio 10", "", 10, 19.4, 12, 13, 15, 16, 2, 2 afr11Gauge = afr11, "Air:Fuel Ratio 11", "", 10, 19.4, 12, 13, 15, 16, 2, 2 afr12Gauge = afr12, "Air:Fuel Ratio 12", "", 10, 19.4, 12, 13, 15, 16, 2, 2 #endif egoV9Gauge = egov9, "Exhaust Gas Oxygen 9", "volts", 0, 5, 5, 5, 5, 5, 2, 2 egoV10Gauge = egov10, "Exhaust Gas Oxygen 10", "volts", 0, 5, 5, 5, 5, 5, 2, 2 egoV11Gauge = egov11, "Exhaust Gas Oxygen 11", "volts", 0, 5, 5, 5, 5, 5, 2, 2 egoV12Gauge = egov12, "Exhaust Gas Oxygen 12", "volts", 0, 5, 5, 5, 5, 5, 2, 2 gaugeCategory = "AFR/EGO calculations 9-12" egoCorrGauge9 = egocor9, "EGO Correction 9", "%", 50, 150, 90, 99, 101, 110, 1, 1 egoCorrGauge10 = egocor10, "EGO Correction 10", "%", 50, 150, 90, 99, 101, 110, 1, 1 egoCorrGauge11 = egocor11, "EGO Correction 11", "%", 50, 150, 90, 99, 101, 110, 1, 1 egoCorrGauge12 = egocor12, "EGO Correction 12", "%", 50, 150, 90, 99, 101, 110, 1, 1 gaugeCategory = "Generic sensor inputs" sensor01Gauge = sensor01, { stringValue(sensor01Alias) }, "", -3000, 3000, -3277, -3277, 3277, 3277, 1, 1 sensor02Gauge = sensor02, { stringValue(sensor02Alias) }, "", -3000, 3000, -3277, -3277, 3277, 3277, 1, 1 sensor03Gauge = sensor03, { stringValue(sensor03Alias) }, "", -3000, 3000, -3277, -3277, 3277, 3277, 1, 1 sensor04Gauge = sensor04, { stringValue(sensor04Alias) }, "", -3000, 3000, -3277, -3277, 3277, 3277, 1, 1 sensor05Gauge = sensor05, { stringValue(sensor05Alias) }, "", -3000, 3000, -3277, -3277, 3277, 3277, 1, 1 sensor06Gauge = sensor06, { stringValue(sensor06Alias) }, "", -3000, 3000, -3277, -3277, 3277, 3277, 1, 1 sensor07Gauge = sensor07, { stringValue(sensor07Alias) }, "", -3000, 3000, -3277, -3277, 3277, 3277, 1, 1 sensor08Gauge = sensor08, { stringValue(sensor08Alias) }, "", -3000, 3000, -3277, -3277, 3277, 3277, 1, 1 sensor09Gauge = sensor09, { stringValue(sensor09Alias) }, "", -3000, 3000, -3277, -3277, 3277, 3277, 1, 1 sensor10Gauge = sensor10, { stringValue(sensor10Alias) }, "", -3000, 3000, -3277, -3277, 3277, 3277, 1, 1 sensor11Gauge = sensor11, { stringValue(sensor11Alias) }, "", -3000, 3000, -3277, -3277, 3277, 3277, 1, 1 sensor12Gauge = sensor12, { stringValue(sensor12Alias) }, "", -3000, 3000, -3277, -3277, 3277, 3277, 1, 1 sensor13Gauge = sensor13, { stringValue(sensor13Alias) }, "", -3000, 3000, -3277, -3277, 3277, 3277, 1, 1 sensor14Gauge = sensor14, { stringValue(sensor14Alias) }, "", -3000, 3000, -3277, -3277, 3277, 3277, 1, 1 sensor15Gauge = sensor15, { stringValue(sensor15Alias) }, "", -3000, 3000, -3277, -3277, 3277, 3277, 1, 1 sensor16Gauge = sensor16, "ECU temp.", "", -40, 200, -3277, -3277, 3277, 3277, 0, 0 gaugeCategory = "CAN board inputs/outputs" canin1_8Gauge = canin1_8, "CAN inputs 1-8", "", 0, 255, 255, 255, 255, 255,0, 0 canout1_8Gauge = canout1_8, "CAN outputs 1-8", "", 0, 255, 255, 255, 255, 255,0, 0 canout9_16Gauge = canout9_16, "CAN outputs 9-16", "", 0, 255, 255, 255, 255, 255,0, 0 canpwmin0Gauge = canpwmin0, "CAN PWMin 0", "", 0, 65535, 65535, 65535, 65535, 65535,0, 0 canpwmin1Gauge = canpwmin1, "CAN PWMin 1", "", 0, 65535, 65535, 65535, 65535, 65535,0, 0 canpwmin2Gauge = canpwmin2, "CAN PWMin 2", "", 0, 65535, 65535, 65535, 65535, 65535,0, 0 canpwmin3Gauge = canpwmin3, "CAN PWMin 3", "", 0, 65535, 65535, 65535, 65535, 65535,0, 0 gaugeCategory = "X-Code dev" status1Gauge = status1, "Status 1", "", 0, 255, 255, 255, 255, 255, 0, 0 status2Gauge = status2, "Status 2", "", 0, 255, 255, 255, 255, 255, 0, 0 status3Gauge = status3, "Status 3", "", 0, 255, 255, 255, 255, 255, 0, 0 status4Gauge = status4, "Status 4", "", 0, 255, 255, 255, 255, 255, 0, 0 status5Gauge = status5, "Status 5", "", 0, 65535, 65535, 65535, 65535, 65535,0, 0 status5sGauge = status5s, "Status 5 (signed)", "",-32767, 65535, 65535, 65535, 65535, 65535,0, 0 status6Gauge = status6, "Status 6", "", 0, 255, 255, 255, 255, 255, 0, 0 status7Gauge = status7, "Status 7", "", 0, 255, 255, 255, 255, 255, 0, 0 status8Gauge = status8, "Status 8", "", 0, 255, 255, 255, 255, 255, 0, 0 status9Gauge = status9, "Status 9", "", 0, 255, 255, 255, 255, 255, 0, 0 status10Gauge = status10, "Status 10", "", 0, 255, 255, 255, 255, 255, 0, 0 injcountGauge = status5, "Injection Count", "pulses", 0, 1000, 65535, 65535, 65535, 65535,0, 0 looptimeGauge = looptime, "Mainloop time", "us", 0, 10000, -1, -1, 1000, 6000, 0, 0 sd_filenum = sd_filenum, "SDcard file number", "", 0, 9999, 9999, 9999, 9999, 9999, 0 ,0 sd_error = sd_error, "SDcard error", "", 0, 255, 255, 255, 255, 255, 0 ,0 sd_status = sd_status, "SDcard status", "", 0, 255, 255, 255, 255, 255, 0 ,0 sd_phase = sd_phase, "SDcard phase", "", 0, 255, 255, 255, 255, 255, 0 ,0 deadGauge = deadValue, "---", "", 0, 1, -1, -1, 2, 2, 0, 0 advBucketGauge = veTuneValue, "Advance Bucket", "degrees", 0, 55, -1, -1, 999, 999, 1, 1 veBucketGauge = veTuneValue, "VE Value", "%", 0, 120, -1, -1, 999, 999, 0, 0 cel_statusGauge = cel_status, "CEL Status", "", 0, 65535, 65535, 65535, 65535, 65535, 0, 0 cel_status2Gauge = cel_status2, "CEL Status2", "", 0, 65535, 65535, 65535, 65535, 65535, 0, 0 cel_errorcodeGauge = cel_errorcode, "CEL Error code", "", 0, 32, 32, 32, 32, 32, 0, 0 loopGauge = loop, "Loop bits 1-8", "", 0, 255, 255, 255, 255, 255,0, 0 can_errorGauge = can_error, "CAN error bits", "", 0, 255, 255, 255, 255, 255,0, 0 can_error_countGauge = can_error_cnt, "CAN error count", "", 0, 255, 255, 255, 255, 255,0, 0 ;------------------------------------------------------------------------------ [FrontPage] #if NARROW_BAND_EGO egoLEDs = 0.0, 1.0, 0.5 ; Voltage settings. #elif LAMBDA egoLEDs = 1.5, 0.5, 1.0 ; Lambda settings. #else egoLEDs = 19.7, 9.7, 14.7 ; Afr settings. #endif ; Gauges are numbered left to right, top to bottom. ; ; 1 2 3 4 ; 5 6 7 8 gauge1 = tachometer ; gauge2 = EAEGauge1 gauge2 = throttleGauge gauge3 = pulseWidth1Gauge gauge4 = cltGauge gauge5 = advdegGauge gauge6 = fuelloadGauge #if NARROW_BAND_EGO gauge7 = egoV1Gauge #elif LAMBDA gauge7 = lambda1Gauge #else gauge7 = afr1Gauge #endif ; gauge7 = dwellGauge ; gauge8 = matGauge gauge8 = lostsyncGauge ;---------------------------------------------------------------------------- ; Indicators ; expr off-label on-label, off-bg, off-fg, on-bg, on-fg indicator = { ready }, "Not Ready", "Ready", white, black, green, black indicator = { crank }, "Not Cranking", "Cranking", white, black, green, black indicator = { startw }, "ASE OFF", "ASE", white, black, green, black indicator = { warmup }, "WUE OFF", "WUE", white, black, green, black indicator = { tpsaccaen }, "TPS Accel", "TPS Accel", white, black, green, black indicator = { mapaccaen }, "MAP Accel", "MAP Accel", white, black, green, black indicator = { tpsaccden }, "TPS Decel", "TPS Decel", white, black, green, black indicator = { mapaccden }, "MAP Decel", "MAP Decel", white, black, green, black ; indicator = { tps > floodClear && crank }, "", "FLOOD CLEAR", white, black, red, black indicator = { status1 & 1}, "Need Burn", "Need Burn", white, black, red, black indicator = { status1 & 2}, "Data Lost", "Lost Data", white, black, red, black indicator = { status1 & 4}, "Config Error", "Config Error", white, black, red, black indicator = { status1 & 8}, "Not RPM synced", "RPM Synced", red, black, green, black indicator = { status1 & 32}, "VE1/2", "VE3/4", white, black, green, black indicator = { status1 & 64}, "SPK1/2", "SPK3/4", white, black, green, black indicator = { status1 & 128}, "Half-RPM sync", "Full-RPM sync", white, black, green, black indicator = { status2 & 1}, "N2O 1 off", "N2O 1 on", white, black, green, black indicator = { status2 & 2}, "N2O 2 off", "N2O 2 on", white, black, green, black indicator = { status2 & 4}, "No Launch", "Launch in", white, black, green, black indicator = { status2 & 16}, "No Flat shift", "Flat shift", white, black, green, black indicator = { status2 & 32}, "Spark cut", "Spark cut", white, black, red, black indicator = { status2 & 64}, "Over boost", "Over boost", white, black, red, black indicator = { status2 & 128}, "CL Idle off", "CL idle on", white, black, green, black indicator = { status3 & 1}, "No Fuel cut", "Fuel cut", white, black, red, black indicator = { status3 & 2}, "T-log", "T-log", white, black, green, black indicator = { status3 & 4}, "3 step off", "3 step on", white, black, green, black indicator = { status3 & 8}, "Test mode", "Test mode", white, black, yellow, black indicator = { status3 & 16}, "No 3 step", "3 step in", white, black, green, black indicator = { status3 & 32}, "No soft limit", "Soft limiter",white, black, red, black indicator = { status3 & 64}, "No seq. shift", "Seq. Shift", white, black, red, black indicator = { status3 & 128}, "Launch Off", "Launch on", white, black, red, black indicator = { status6 & 1}, "EGT warn", "EGT warn", white, black, red, black indicator = { status6 & 2}, "EGT shutdown", "EGT shutdown", white, black, red, black indicator = { status6 & 4}, "AFR warn", "AFR warn", white, black, red, black indicator = { status6 & 8}, "AFR shutdown", "AFR shutdown", white, black, red, black indicator = { status6 & 16}, "Idle VE", "Idle VE", white, black, green, black indicator = { status6 & 32}, "Idle Adv", "Idle Adv", white, black, green, black indicator = { status6 & 64}, "Fan", "Fan", white, black, green, black indicator = { status6 & 128}, "MAPsample error!", "MAPsample error!", white, black, red, black indicator = { status7 & 1}, "VVT1 err", "VVT1 err", white, black, red, black indicator = { status7 & 2}, "VVT2 err", "VVT2 err", white, black, red, black indicator = { status7 & 4}, "VVT3 err", "VVT3 err", white, black, red, black indicator = { status7 & 8}, "VVT4 err", "VVT4 err", white, black, red, black indicator = { status7 & 16}, "No Knock", "Knock", white, black, red, black indicator = { status7 & 32}, "AC", "AC", white, black, green, black indicator = { status7 & 64}, "Check Engine", "Check Engine", white, black, red, black indicator = { status7 & 128}, "Limp mode", "Limp mode", white, black, red, black indicator = { status8 & 4}, "W.I. low", "W.I. low!", white, black, red, black indicator = { status8 & 16}, "VSS launch L/O", "VSS launch L/O", white, black, red, black indicator = { status8 & 32}, "VSS launch on", "VSS launch on", white, black, red, black indicator = { status8 & 128}, "DBW fault", "DBW fault", white, black, red, black indicator = { status9 & 1}, "Oil shutdown", "Oil shutdown", white, black, red, black indicator = { status9 & 2}, "Fuel press shutdown", "Fuel press shutdown", white, black, red, black indicator = { status9 & 4}, "Overrun fuel cut", "Overrun fuel cut", white, black, red, black indicator = { status9 & 8}, "Stoich switching", "Stoich switching", white, black, red, black indicator = { status9 & 16}, "ReqFuel switching", "ReqFuel switching", white, black, red, black indicator = { status9 & 32}, "SD Warn", "SD Warn", white, black, red, black indicator = { status9 & 64}, "Boost switching", "Boost switching", white, black, red, black indicator = { status9 & 128}, "Safety shutdown", "Safety shutdown", white, black, red, black ; 2 indicator = { status10 & 1}, "CAN RX", "CAN RX", white, black, green, black indicator = { status10 & 2}, "CAN TX", "CAN TX", white, black, green, black indicator = { status10 & 4}, "IObox1", "IObox1", white, black, green, black indicator = { status10 & 8}, "IObox2", "IObox2", white, black, green, black indicator = { status10 & 16}, "IObox3", "IObox3", white, black, green, black ; indicator = { status10 & 32}, "CANEGT1", "CANEGT1", white, black, green, black ; indicator = { status10 & 64}, "CANEGT2", "CANEGT2", white, black, green, black indicator = { status10 & 128}, "L.T.Trim", "L.T.Trim", white, black, green, black indicator = { sd_status & 1}, "No SD", "SD in", white, black, green, black indicator = { sd_status & 4}, "SD ready", "SD ready", white, black, green, black indicator = { sd_status & 8}, "SD Log", "SD Log", white, black, green, black indicator = { sd_status & 16}, "SD Err", "SD Err", white, black, red, black indicator = { (gammaEnrich < 70) }, "-", "Tune error", white, black, red, black indicator = { wbo2_stat1 & 1 }, "Int. WB err", "Int. WB err", white, black, red, black indicator = { wbo2_stat1 & 2 }, "Int. WB Not Ready", "Int. WB Ready", white, black, green, black indicator = { wbo2_stat1 & 4 }, "CAN WB err", "CAN WB err", white, black, red, black indicator = { wbo2_stat1 & 8 }, "CAN WB Not Ready", "CAN WB Ready", white, black, green, black #if PORT_STATUS indicator = { porta0 }, "PORTA0", "PORTA0", white, black, green, black indicator = { porta1 }, "PORTA1", "PORTA1", white, black, green, black indicator = { porta2 }, "PORTA2", "PORTA2", white, black, green, black indicator = { porta3 }, "PORTA3", "PORTA3", white, black, green, black indicator = { porta4 }, "PORTA4", "PORTA4", white, black, green, black indicator = { porta5 }, "PORTA5", "PORTA5", white, black, green, black indicator = { porta6 }, "PORTA6", "PORTA6", white, black, green, black indicator = { porta7 }, "PORTA7", "PORTA7", white, black, green, black indicator = { portb0 }, "PORTB0", "PORTB0", white, black, green, black indicator = { portb1 }, "PORTB1", "PORTB1", white, black, green, black indicator = { portb2 }, "PORTB2", "PORTB2", white, black, green, black indicator = { portb3 }, "PORTB3", "PORTB3", white, black, green, black indicator = { portb4 }, "PORTB4", "PORTB4", white, black, green, black indicator = { portb5 }, "PORTB5", "PORTB5", white, black, green, black indicator = { portb6 }, "PORTB6", "PORTB6", white, black, green, black indicator = { portb7 }, "PORTB7", "PORTB7", white, black, green, black indicator = { porte0 }, "PORTE0", "PORTE0", white, black, green, black indicator = { porte1 }, "PORTE1", "PORTE1", white, black, green, black indicator = { porte2 }, "PORTE2", "PORTE2", white, black, green, black indicator = { porte4 }, "PORTE4", "PORTE4", white, black, green, black indicator = { porth6 }, "PORTH6", "PORTH6", white, black, green, black indicator = { porth7 }, "PORTH7", "PORTH7", white, black, green, black indicator = { portk0 }, "PORTK0", "PORTK0", white, black, green, black indicator = { portk1 }, "PORTK1", "PORTK1", white, black, green, black indicator = { portk2 }, "PORTK2", "PORTK2", white, black, green, black indicator = { portk3 }, "PORTK3", "PORTK3", white, black, green, black indicator = { portk7 }, "PORTK7", "PORTK7", white, black, green, black indicator = { portj0 }, "PORTJ0", "PORTJ0", white, black, green, black indicator = { portj1 }, "PORTJ1", "PORTJ1", white, black, green, black indicator = { portm2 }, "PORTM2", "PORTM2", white, black, green, black indicator = { portm3 }, "PORTM3", "PORTM3", white, black, green, black indicator = { portm4 }, "PORTM4", "PORTM4", white, black, green, black indicator = { portm5 }, "PORTM5", "PORTM5", white, black, green, black indicator = { portj7 }, "PORTJ7", "PORTJ7", white, black, green, black indicator = { portp2 }, "PORTP2", "PORTP2", white, black, green, black indicator = { portp3 }, "PORTP3", "PORTP3", white, black, green, black indicator = { portp4 }, "PORTP4", "PORTP4", white, black, green, black indicator = { portp5 }, "PORTP5", "PORTP5", white, black, green, black indicator = { portp6 }, "PORTP6", "PORTP6", white, black, green, black indicator = { portp7 }, "PORTP7", "PORTP7", white, black, green, black indicator = { portt0 }, "PORTT0", "PORTT0", white, black, green, black indicator = { portt1 }, "PORTT1", "PORTT1", white, black, green, black indicator = { portt2 }, "PORTT2", "PORTT2", white, black, green, black indicator = { portt3 }, "PORTT3", "PORTT3", white, black, green, black indicator = { portt4 }, "PORTT4", "PORTT4", white, black, green, black indicator = { portt5 }, "PORTT5", "PORTT5", white, black, green, black indicator = { portt6 }, "PORTT6", "PORTT6", white, black, green, black indicator = { portm6 }, "PORTM6", "PORTM6", white, black, green, black indicator = { portm7 }, "PORTM7", "PORTM7", white, black, green, black indicator = { portt7 }, "PORTT7", "PORTT7", white, black, green, black indicator = { ports3 }, "PORTS3", "PORTS3", white, black, green, black indicator = { ports4 }, "PORTS4", "PORTS4", white, black, green, black indicator = { ports5 }, "PORTS5", "PORTS5", white, black, green, black indicator = { portk4 }, "PORTK4", "PORTK4", white, black, green, black indicator = { portk5 }, "PORTK5", "PORTK5", white, black, green, black indicator = { canin1_8 & 1 }, "CANIN1", "CANIN1", white, black, green, black indicator = { canin1_8 & 2 }, "CANIN2", "CANIN2", white, black, green, black indicator = { canin1_8 & 4 }, "CANIN3", "CANIN3", white, black, green, black indicator = { canin1_8 & 8 }, "CANIN4", "CANIN4", white, black, green, black indicator = { canin1_8 & 16 }, "CANIN5", "CANIN5", white, black, green, black indicator = { canin1_8 & 32 }, "CANIN6", "CANIN6", white, black, green, black indicator = { canin1_8 & 64 }, "CANIN7", "CANIN7", white, black, green, black indicator = { canin1_8 & 128}, "CANIN8", "CANIN8", white, black, green, black #endif indicator = { cel_status_map }, "MAP fault", "MAP fault", white, black, red, black ; 1 indicator = { cel_status_mat }, "MAT fault", "MAT fault", white, black, red, black ; 2 indicator = { cel_status_clt }, "CLT fault", "CLT fault", white, black, red, black ; 4 indicator = { cel_status_tps }, "TPS fault", "TPS fault", white, black, red, black ; 8 indicator = { cel_status_batt }, "BATT fault", "BATT fault", white, black, red, black ; 16 indicator = { cel_status_afr0 }, "AFR0 fault", "AFR0 fault", white, black, red, black ; 32 indicator = { cel_status_sync }, "SYNC fault", "SYNC fault", white, black, red, black ; 64 indicator = { cel_status_egt }, "EGT fault", "EGT fault", white, black, red, black ; 128 indicator = { cel_status_flex }, "Flex fault", "Flex fault", white, black, red, black ;256 indicator = { cel_status_maf }, "MAF fault", "MAF fault", white, black, red, black ; 512 indicator = { cel_status_knock }, "Knock fault", "Knock fault", white, black, red, black ; 1024 indicator = { cel_status_cam }, "Cam fault", "Cam fault", white, black, red, black ; 2048 indicator = { cel_status_oil}, "Oil fault", "Oil fault", white, black, red, black ; 4096 indicator = { cel_status_fp}, "Fuel press.", "Fuel press.", white, black, red, black ; 4096 indicator = { cel_status_egtshut}, "CEL EGT shutdown", "CEL EGT shutdown", white, black, red, black ; 16384 indicator = { cel_status_afrshut}, "CEL AFR shutdown", "CEL AFR shutdown", white, black, red, black ; 32768 indicator = { cel_status2_winj}, "CEL W.Inj low", "CEL W.Inj low", white, black, red, black ; 1 ; indicator = { cel_status2_shutd}, "CEL Safety shutdown", "CEL Safety shutdown", white, black, red, black ; 2 indicator = { engine_state_cruise }, "Cruise", "Cruise", white, black, green, black indicator = { engine_state_accel_slow }, "Accel", "Accel", white, black, green, black ; indicator = { engine_state_accel_fast }, "Fast accel", "Fast Accel", white, black, green, black indicator = { engine_state_decel_slow }, "Decel", "Decel", white, black, green, black ; indicator = { engine_state_decel_fast }, "Fast decel", "Fast Decel", white, black, green, black indicator = { engine_state_overrun }, "Overrun", "Overrun", white, black, green, black indicator = { engine_state_idle }, "Idle", "Idle", white, black, green, black indicator = { engine_state_wot }, "WOT", "WOT", white, black, green, black ;------------------------------------------------------------------------------- [RunTime] barHysteresis = 2.5 ; Seconds coolantBar = {cltlowlim}, {clthighlim} matBar = -40, {mathigh} batteryBar = 6, 15 dutyCycleBar = 0, 100 #if NARROW_BAND_EGO egoBar = 0.0 , 1.0 #elif LAMBDA egoBar = 0.5, 1.5 #else egoBar = 9.7, 19.7 #endif gammaEBar = 0, 200 mapBar = 0, 255 pulseWidthBar = 0, 25.5 rpmBar = 0, {rpmhigh} throttleBar = 0, 100 egoCorrBar = 0, 200 baroCorrBar = 0, 200 warmupCorrBar = 0, 200 airdenCorrBar = 0, 200 veCorrBar = 0, 200 accCorrBar = 0, 100 ;------------------------------------------------------------------------------- [Tuning] #if NARROW_BAND_EGO egoLEDs = 0.0, 1.0, 0.5 ; Voltage settings. #elif LAMBDA egoLEDs = 1.5, 0.5, 1.0 ; Lambda settings. #else egoLEDs = 19.7, 9.7, 14.7 ; Afr settings. #endif ; font = "Lucida Console", 12 ; font = "Courier", 14 spotDepth = 2 ; 0 = no indicators, 1 = Z only, 2 = XYZ indicators. cursorDepth = 2 ; Same as spot depth. ; The four radio buttons on the tuning screen select a "page" of six ; gauges. The gauge numbering is the same as the front page, across ; then down. ; 1 2 ; 3 4 ; 5 6 ; ; gaugeColumns allows you to hide or show gauges in column 2 (i.e., ; gauges 2, 4 and 6). gaugeColumns = 2 ; Only 1 or 2 are valid. ; Page 1 Page 2 Page 3 Page 4 pageButtons = "&EGO", "&WUE", "PW&1", "PW&2" gauge1 = tachometer, tachometer, tachometer, tachometer gauge2 = mapGauge, mapGauge, mapGauge, mapGauge #if NARROW_BAND_EGO gauge3 = egoV1Gauge, egoV1Gauge, egoV1Gauge, egoV1Gauge #elif LAMBDA gauge3 = lambda1Gauge, lambda1Gauge, lambda1Gauge, lambda1Gauge #else gauge3 = afr1Gauge, afr1Gauge, afr1Gauge, afr1Gauge #endif gauge4 = egoCorrGauge1, warmupEnrichGauge, pulseWidth1Gauge, pulseWidth2Gauge gauge5 = veBucketGauge, veBucketGauge, veBucketGauge, veBucketGauge gauge6 = egoCorrGauge2, accelEnrichGauge, dutyCycle1Gauge, dutyCycle2Gauge ;------------------------------------------------------------------------------- [AccelerationWizard] tpsDotBar = 0, 800 mapDotBar = 0, 700 ;------------------------------------------------------------------------------- [BurstMode] ; getCommand = "a\x00\x06" getCommand = "A" [OutputChannels] deadValue = { 0 } ; Convenient unchanging value. ochBlockSize = 512 ; change this if adding extra data to outpc ;Note! More than 512 bytes requires moving "datax1" offset and TS 2.6.x doesn't support that as RTC is hardcoded. #if CAN_COMMANDS ochGetCommand = "r\$tsCanId\x07%2o%2c" ; leave this alone #else ; fast get via serial ochGetCommand = "A" #endif scatteredOffsetArray = qfrtfielddata scatteredOchGetCommand = "g" scatteredGetEnabled = { scatterRuntimeEnabled && (tsLocalCanId == tsCanId) } seconds = scalar, U16, 0, "s", 1.000, 0.0 secl = { seconds % 256 }, "s" ; For runtime screen. pulseWidth1 = scalar, U16, 2, "ms", 0.001, 0.0 pulseWidth2 = scalar, U16, 4, "ms", 0.001, 0.0 pulseWidth = { pulseWidth1 }, "ms" ; For runtime screen. rpm = scalar, U16, 6, "RPM", 1.000, 0.0 advance = scalar, S16, 8, "deg", 0.100, 0.0 ; unsigned char squirt,engine,afrtgt1,afrtgt2; // afrtgt in afr x 10 squirt = scalar, U08, 10, "bit", 1.000, 0.0 ; Squirt Event Scheduling Variables - bit fields for "squirt" variable above ; inj1: equ 3 ; 0 = no squirt 1 = squirt ; inj2: equ 5 ; 0 = no squirt 1 = squirt ; sched1: equ 2 ; 0 = nothing scheduled 1 = scheduled to squirt ; firing1: equ 0 ; 0 = not squirting 1 = squirting ; sched2: equ 4 ; firing2: equ 1 firing1 = bits, U08, 10, [0:0] firing2 = bits, U08, 10, [1:1] sched1 = bits, U08, 10, [2:2] inj1 = bits, U08, 10, [3:3] sched2 = bits, U08, 10, [4:4] inj2 = bits, U08, 10, [5:5] engine = scalar, U08, 11, "bit", 1.000, 0.0 ; Engine Operating/Status variables - bit fields for "engine" variable above ; ready: equ 0 ; 0 = engine not ready 1 = ready to run ; crank: equ 1 ; 0 = engine not cranking 1 = engine cranking ; startw: equ 2 ; 0 = not in startup warmup 1 = in warmup enrichment ; warmup: equ 3 ; 0 = not in warmup 1 = in warmup ; tpsaen: equ 4 ; 0 = not in TPS acceleration mode 1 = TPS acceleration mode ; tpsden: equ 5 ; 0 = not in deacceleration mode 1 = in deacceleration mode ready = bits, U08, 11, [0:0] crank = bits, U08, 11, [1:1] startw = bits, U08, 11, [2:2] warmup = bits, U08, 11, [3:3] tpsaccaen = bits, U08, 11, [4:4] tpsaccden = bits, U08, 11, [5:5] mapaccaen = bits, U08, 11, [6:6] mapaccden = bits, U08, 11, [7:7] #if NARROW_BAND_EGO afrtgt1 = scalar, U08, 12, "Volts", 0.00489, 0.0 afrtgt2 = scalar, U08, 13, "Volts", 0.00489, 0.0 #elif LAMBDA afrtgt1raw = scalar, U08, 12, "Lambda", 0.1, 0.0 afrtgt2raw = scalar, U08, 13, "Lambda", 0.1, 0.0 #else afrtgt1 = scalar, U08, 12, "AFR", 0.1, 0.0 afrtgt2 = scalar, U08, 13, "AFR", 0.1, 0.0 #endif ; unsigned char wbo2_en1,wbo2_en2; // from wbo2 - indicates whether wb afr has fault wbo2_stat1 = scalar, U08, 14, "", 1.000, 0.0 wbo2_en2 = scalar, U08, 15, "", 1.000, 0.0 ; int baro,map,mat,clt,tps,batt,ego1,ego2,knock, // baro - kpa x 10 ; // map - kpa x 10 ; // mat, clt deg(C/F)x 10 ; // tps - % x 10 ; // batt - vlts x 10 ; // ego1,2 - afr x 10 ; // knock - volts x 10 barometer = scalar, S16, 16, "kPa", 0.100, 0.0 map = scalar, S16, 18, "kPa", 0.100, 0.0 #if CELSIUS mat = scalar, S16, 20, "°C", 0.05555, -320.0 coolant = scalar, S16, 22, "°C", 0.05555, -320.0 #else mat = scalar, S16, 20, "°F", 0.100, 0.0 coolant = scalar, S16, 22, "°F", 0.100, 0.0 #endif tps = scalar, S16, 24, "%", 0.100, 0.0 throttle = { tps }, "%" batteryVoltage = scalar, S16, 26, "v", 0.100, 0.0 afr1_old = scalar, S16, 28, "AFR", 0.100, 0.0 afr2_old = scalar, S16, 30, "AFR", 0.100, 0.0 knock = scalar, S16, 32, "%", 0.100, 0.0 ; egocor1,egocor2,aircor,warmcor, // all in % egoCorrection1 = scalar, S16, 34, "%", 0.1000, 0.0 egoCorrection = { ( egoCorrection1 + egoCorrection2) / 2 }, "%" ; Alias for old gauges. egoCorrection2 = scalar, S16, 36, "%", 0.1000, 0.0 airCorrection = scalar, S16, 38, "%", 0.1000, 0.0 warmupEnrich = scalar, S16, 40, "%", 1.000, 0.0 ; tpsaccel,tpsfuelcut,barocor,gammae, // tpsaccel - acc enrich(.1 ms units) ; // tpsfuelcut - % ; // barcor,gammae - % accelEnrich = scalar, S16, 42, "ms", 0.100, 0.0 tpsfuelcut = scalar, S16, 44, "%", 1.000, 0.0 baroCorrection = scalar, S16, 46, "%", 0.1000, 0.0 gammaEnrich = scalar, S16, 48, "%", 1.000, 0.0 ; vecurr1,vecurr2,iacstep,cold_adv_deg; // vecurr - % ; // iacstep - steps ; // cold_adv_deg - deg x 10 veCurr1 = scalar, S16, 50, "%", 0.1000, 0.0 veCurr2 = scalar, S16, 52, "%", 0.1000, 0.0 veCurr = { veCurr1 }, "%" ; For runtime display. iacstep = scalar, S16, 54, "", 1.000, 0.0 idleDC = scalar, S16, 54, "%", 0.392, 0.0 coldAdvDeg = scalar, S16, 56, "deg", 0.100, 0.0 TPSdot = scalar, S16, 58, "%/s", 0.100, 0.0 MAPdot = scalar, S16, 60, "kPa/s", 1.000, 0.0 dwell = scalar, U16, 62, "ms", 0.1000, 0.0 mafload = scalar, S16, 64, "kPa", 0.1000, 0.0 fuelload = scalar, S16, 66, { bitStringValue( algorithmUnits , algorithm ) }, 0.100, 0.0 ; Blend of MAP and TPS, depends on algorithm fuelCorrection = scalar, S16, 68, "%", 1.000, 0.0 ; Correction based on percent alcohol in fuel. sd_status = scalar, U08, 70, "", 1.0, 0.0 knockRetard = scalar, U08, 71, "deg", 0.1, 0.0 EAEFuelCorr1 = scalar, U16, 72, "%", 1.0, 0.0 egoV = scalar, S16, 74, "V", 0.01, 0.0 ; was omitted egoV2 = scalar, S16, 76, "V", 0.01, 0.0 ; was omitted status1 = scalar, U08, 78, "", 1.0, 0.0 ; status1 status2 = scalar, U08, 79, "", 1.0, 0.0 ; status2 status3 = scalar, U08, 80, "", 1.0, 0.0 ; status3 status4 = scalar, U08, 81, "", 1.0, 0.0 ; status4 status6 = scalar, U08, 82, "", 1.0, 0.0 status7 = scalar, U08, 83, "", 1.0, 0.0 status5 = scalar, U16, 84, "", 1, 0 ; istatus5 status5s = scalar, S16, 84, "", 1, 0 ; istatus5 cel_status = scalar, U16, 86, "bit", 1.000, 0.0 ; engine fault bits cel_status_map = bits, U08, 87, [0:0] ; low byte cel_status_mat = bits, U08, 87, [1:1] cel_status_clt = bits, U08, 87, [2:2] cel_status_tps = bits, U08, 87, [3:3] cel_status_batt = bits, U08, 87, [4:4] cel_status_afr0 = bits, U08, 87, [5:5] cel_status_sync = bits, U08, 87, [6:6] cel_status_egt = bits, U08, 87, [7:7] cel_status_flex = bits, U08, 86, [0:0] ; high byte cel_status_maf = bits, U08, 86, [1:1] ; high byte cel_status_knock = bits, U08, 86, [2:2] ; high byte cel_status_cam = bits, U08, 86, [3:3] ; high byte cel_status_oil = bits, U08, 86, [4:4] ; high byte cel_status_fp = bits, U08, 86, [5:5] ; high byte cel_status_egtshut= bits, U08, 86, [6:6] ; high byte cel_status_afrshut= bits, U08, 86, [7:7] ; high byte fuelload2 = scalar, S16, 88, { bitStringValue( algorithmUnits , algorithm2 ) }, 0.100, 0.0 ignload = scalar, S16, 90, "%", 0.100, 0.0 ignload2 = scalar, S16, 92, "%", 0.100, 0.0 synccnt = scalar, U08, 94, "", 1, 0 syncreason = scalar, U08, 95, "", 1.0, 0.0 wallfuel1 = scalar, U32, 96, "us", 1.000, 0.0 wallfuel2 = scalar, U32, 100, "us", 1.000, 0.0 sensor01 = scalar, S16, 104, "", 0.1000, 0.0 sensor02 = scalar, S16, 106, "", 0.1000, 0.0 sensor03 = scalar, S16, 108, "", 0.1000, 0.0 sensor04 = scalar, S16, 110, "", 0.1000, 0.0 sensor05 = scalar, S16, 112, "", 0.1000, 0.0 sensor06 = scalar, S16, 114, "", 0.1000, 0.0 sensor07 = scalar, S16, 116, "", 0.1000, 0.0 sensor08 = scalar, S16, 118, "", 0.1000, 0.0 sensor09 = scalar, S16, 120, "", 0.1000, 0.0 sensor10 = scalar, S16, 122, "", 0.1000, 0.0 sensor11 = scalar, S16, 124, "", 0.1000, 0.0 sensor12 = scalar, S16, 126, "", 0.1000, 0.0 sensor13 = scalar, S16, 128, "", 0.1000, 0.0 sensor14 = scalar, S16, 130, "", 0.1000, 0.0 sensor15 = scalar, S16, 132, "", 0.1000, 0.0 sensor16 = scalar, S16, 134, "", 0.1000, 0.0 canin1_8 = scalar, U08, 136, "", 1.000, 0.0 canout1_8 = scalar, U08, 137, "", 1.000, 0.0 canout9_16 = scalar, U08, 138, "", 1.000, 0.0 boostduty = scalar, U08, 139 , "%", 1.0, 0.0 n2o_addfuel = scalar, S16, 140, "ms", 0.001, 0 n2o_retard = scalar, S16, 142, "deg", 0.1, 0 pwseq1 = scalar, U16, 144, "ms", 0.001, 0.0 pwseq2 = scalar, U16, 146, "ms", 0.001, 0.0 pwseq3 = scalar, U16, 148, "ms", 0.001, 0.0 pwseq4 = scalar, U16, 150, "ms", 0.001, 0.0 pwseq5 = scalar, U16, 152, "ms", 0.001, 0.0 pwseq6 = scalar, U16, 154, "ms", 0.001, 0.0 pwseq7 = scalar, U16, 156, "ms", 0.001, 0.0 pwseq8 = scalar, U16, 158, "ms", 0.001, 0.0 pwseq9 = scalar, U16, 160, "ms", 0.001, 0.0 pwseq10 = scalar, U16, 162, "ms", 0.001, 0.0 pwseq11 = scalar, U16, 164, "ms", 0.001, 0.0 pwseq12 = scalar, U16, 166, "ms", 0.001, 0.0 ; pwseq13 = scalar, U16, 168, "ms", 0.001, 0.0 ; pwseq14 = scalar, U16, 170, "ms", 0.001, 0.0 ; pwseq15 = scalar, U16, 172, "ms", 0.001, 0.0 ; pwseq16 = scalar, U16, 174, "ms", 0.001, 0.0 nitrous1_duty = scalar, U08, 176, "%", 1, 0 nitrous2_duty = scalar, U08, 177, "%", 1, 0 #if CELSIUS egt1 = scalar, S16, 178, "°C", 0.05555, -320 egt2 = scalar, S16, 180, "°C", 0.05555, -320 egt3 = scalar, S16, 182, "°C", 0.05555, -320 egt4 = scalar, S16, 184, "°C", 0.05555, -320 egt5 = scalar, S16, 186, "°C", 0.05555, -320 egt6 = scalar, S16, 188, "°C", 0.05555, -320 egt7 = scalar, S16, 190, "°C", 0.05555, -320 egt8 = scalar, S16, 192, "°C", 0.05555, -320 egt9 = scalar, S16, 194, "°C", 0.05555, -320 egt10 = scalar, S16, 196, "°C", 0.05555, -320 egt11 = scalar, S16, 198, "°C", 0.05555, -320 egt12 = scalar, S16, 200, "°C", 0.05555, -320 ; egt13 = scalar, S16, 202, "°C", 0.05555, -320 ; egt14 = scalar, S16, 204, "°C", 0.05555, -320 ; egt15 = scalar, S16, 206, "°C", 0.05555, -320 ; egt16 = scalar, S16, 208, "°C", 0.05555, -320 #else egt1 = scalar, S16, 178, "°F", 0.1, 0 egt2 = scalar, S16, 180, "°F", 0.1, 0 egt3 = scalar, S16, 182, "°F", 0.1, 0 egt4 = scalar, S16, 184, "°F", 0.1, 0 egt5 = scalar, S16, 186, "°F", 0.1, 0 egt6 = scalar, S16, 188, "°F", 0.1, 0 egt7 = scalar, S16, 190, "°F", 0.1, 0 egt8 = scalar, S16, 192, "°F", 0.1, 0 egt9 = scalar, S16, 194, "°F", 0.1, 0 egt10 = scalar, S16, 196, "°F", 0.1, 0 egt11 = scalar, S16, 198, "°F", 0.1, 0 egt12 = scalar, S16, 200, "°F", 0.1, 0 ; egt13 = scalar, S16, 202, "°F", 0.1, 0 ; egt14 = scalar, S16, 204, "°F", 0.1, 0 ; egt15 = scalar, S16, 206, "°F", 0.1, 0 ; egt16 = scalar, S16, 208, "°F", 0.1, 0 #endif ; start repurposed zone dome_fill_duty1 = scalar, U08, 202, "%", 1, 0 dome_fill_duty2 = scalar, U08, 203, "%", 1, 0 dome_empty_duty1= scalar, U08, 204, "%", 1, 0 dome_empty_duty2= scalar, U08, 205, "%", 1, 0 app = scalar, S16, 206, "%", 0.0100, 0.0 throttle_targ = scalar, S16, 208, "%", 0.0100, 0.0 ;end repurposed zone maf = scalar, U16, 210, "g/sec", { 0.010 * (maf_range + 1) }, 0.0 canpwmin0 = scalar, U16, 212, "", 1.000, 0.0 canpwmin1 = scalar, U16, 214, "", 1.000, 0.0 canpwmin2 = scalar, U16, 216, "", 1.000, 0.0 canpwmin3 = scalar, U16, 218, "", 1.000, 0.0 fuelflow = scalar, U16, 220, "cc/min", 1, 0.0 fuelcons = scalar, U16, 222, "l/km", 1, 0.0 EAEFuelCorr2 = scalar, U16, 224 , "%", 1.0, 0.0 tpsADC = scalar, U16, 226, "ADC", 1, 0 ; REAL for calibrator eaeload1 = scalar, S16, 228, { bitStringValue( algorithmUnits , (eaeload ? eaeload : algorithm) ) }, 0.1000, 0.0 afrload1 = scalar, S16, 230, { bitStringValue( algorithmUnits , (afrload ? afrload : algorithm) ) }, 0.1000, 0.0 gear = scalar, S08, 232, "", 1, 0 timing_err = scalar, S08, 233, "%", 1, 0 ; accuracy of timing prediction RPMdot = scalar, S16, 234, "rpm/sec", 10, 0 vss1dot = scalar, S16, 236, "ms-2", 0.1, 0 vss2dot = scalar, S16, 238, "ms-2", 0.1, 0 accelx = scalar, S16, 240, "ms-2", 0.001, 0 accely = scalar, S16, 242, "ms-2", 0.001, 0 accelz = scalar, S16, 244, { bitStringValue( accel_vs_yaw_units , accel_vs_yaw ) }, 0.001, 0 duty_pwm_a = scalar, U08, 246, "%", 1, 0 duty_pwm_b = scalar, U08, 247, "%", 1, 0 duty_pwm_c = scalar, U08, 248, "%", 1, 0 duty_pwm_d = scalar, U08, 249, "%", 1, 0 duty_pwm_e = scalar, U08, 250, "%", 1, 0 duty_pwm_f = scalar, U08, 251, "%", 1, 0 afr1 = scalar, U08, 252, "AFR", 0.1, 0.0 afr2 = scalar, U08, 253, "AFR", 0.1, 0.0 afr3 = scalar, U08, 254, "AFR", 0.1, 0.0 afr4 = scalar, U08, 255, "AFR", 0.1, 0.0 afr5 = scalar, U08, 256, "AFR", 0.1, 0.0 afr6 = scalar, U08, 257, "AFR", 0.1, 0.0 afr7 = scalar, U08, 258, "AFR", 0.1, 0.0 afr8 = scalar, U08, 259, "AFR", 0.1, 0.0 afr9 = scalar, U08, 260, "AFR", 0.1, 0.0 afr10 = scalar, U08, 261, "AFR", 0.1, 0.0 afr11 = scalar, U08, 262, "AFR", 0.1, 0.0 afr12 = scalar, U08, 263, "AFR", 0.1, 0.0 ; afr13 = scalar, U08, 264, "AFR", 0.1, 0.0 ; afr14 = scalar, U08, 265, "AFR", 0.1, 0.0 ; afr15 = scalar, U08, 266, "AFR", 0.1, 0.0 ; afr16 = scalar, U08, 267, "AFR", 0.1, 0.0 egov1 = scalar, U16, 268, "V", 0.00489, 0.0 egov2 = scalar, U16, 270, "V", 0.00489, 0.0 egov3 = scalar, U16, 272, "V", 0.00489, 0.0 egov4 = scalar, U16, 274, "V", 0.00489, 0.0 egov5 = scalar, U16, 276, "V", 0.00489, 0.0 egov6 = scalar, U16, 278, "V", 0.00489, 0.0 egov7 = scalar, U16, 280, "V", 0.00489, 0.0 egov8 = scalar, U16, 282, "V", 0.00489, 0.0 egov9 = scalar, U16, 284, "V", 0.00489, 0.0 egov10 = scalar, U16, 286, "V", 0.00489, 0.0 egov11 = scalar, U16, 288, "V", 0.00489, 0.0 egov12 = scalar, U16, 290, "V", 0.00489, 0.0 ; egov13 = scalar, U16, 292, "V", 0.00489, 0.0 ; egov14 = scalar, U16, 294, "V", 0.00489, 0.0 ; egov15 = scalar, U16, 296, "V", 0.00489, 0.0 ; egov16 = scalar, U16, 298, "V", 0.00489, 0.0 ve_raw1 = scalar, S16, 292, "%", 0.1000, 0.0 ve_raw2 = scalar, S16, 294, "%", 0.1000, 0.0 ve_raw3 = scalar, S16, 296, "%", 0.1000, 0.0 ve_raw4 = scalar, S16, 298, "%", 0.1000, 0.0 egocor1 = scalar, S16, 300, "%", 0.1000, 0.0 egocor2 = scalar, S16, 302, "%", 0.1000, 0.0 egocor3 = scalar, S16, 304, "%", 0.1000, 0.0 egocor4 = scalar, S16, 306, "%", 0.1000, 0.0 egocor5 = scalar, S16, 308, "%", 0.1000, 0.0 egocor6 = scalar, S16, 310, "%", 0.1000, 0.0 egocor7 = scalar, S16, 312, "%", 0.1000, 0.0 egocor8 = scalar, S16, 314, "%", 0.1000, 0.0 egocor9 = scalar, S16, 316, "%", 0.1000, 0.0 egocor10 = scalar, S16, 318, "%", 0.1000, 0.0 egocor11 = scalar, S16, 320, "%", 0.1000, 0.0 egocor12 = scalar, S16, 322, "%", 0.1000, 0.0 ; egocor13 = scalar, S16, 324, "%", 0.1000, 0.0 ; egocor14 = scalar, S16, 326, "%", 0.1000, 0.0 ; egocor15 = scalar, S16, 328, "%", 0.1000, 0.0 ; egocor16 = scalar, S16, 330, "%", 0.1000, 0.0 ports = scalar, U08, 324, "bit", 1.000, 0.0 ; raw i/o port status bits ports0 = bits, U08, 324, [0:0] ports1 = bits, U08, 324, [1:1] ports2 = bits, U08, 324, [2:2] ports3 = bits, U08, 324, [3:3] ports4 = bits, U08, 324, [4:4] ports5 = bits, U08, 324, [5:5] ports6 = bits, U08, 324, [6:6] ports7 = bits, U08, 324, [7:7] portm = scalar, U08, 325, "bit", 1.000, 0.0 ; raw i/o port status bits portm0 = bits, U08, 325, [0:0] portm1 = bits, U08, 325, [1:1] ; portm2 = bits, U08, 325, [2:2] ; portm3 = bits, U08, 325, [3:3] ; portm4 = bits, U08, 325, [4:4] ; portm5 = bits, U08, 325, [5:5] portm6 = bits, U08, 325, [6:6] portm7 = bits, U08, 325, [7:7] boost_dome_targ1 = scalar, S16, 326, "kPa", 0.1, 0 boost_dome_targ2 = scalar, S16, 328, "kPa", 0.1, 0 status9 = scalar, U08, 330, "", 1, 0 status10 = scalar, U08, 331, "", 1, 0 stream_level = scalar, U08, 332, "", 1,0 water_duty = scalar, U08, 333, "%", 1, 0 dwell_trl = scalar, U16, 334, "ms", 0.1000, 0.0 vss1 = scalar, U16, 336, { bitStringValue( prefSpeedUnits , prefSpeedUnits ) }, { msToPrefUnitsScale }, 0.0 vss2 = scalar, U16, 338, { bitStringValue( prefSpeedUnits , prefSpeedUnits ) }, { msToPrefUnitsScale }, 0.0 vss1_ms_1 = scalar, U16, 336, "ms-1", 0.1, 0.0 ; see calcs converting this raw number into kph or mph vss2_ms_1 = scalar, U16, 338, "ms-1", 0.1, 0.0 ss1 = scalar, U16, 340, "RPM", 10.000, 0.0 ; now in steps of 10 rpm ss2 = scalar, U16, 342, "RPM", 10.000, 0.0 nitrous_timer = scalar, U16, 344, "s", 0.001, 0 sd_filenum = scalar, U16, 346, "", 1, 0 sd_error = scalar, U08, 348, "", 1, 0 sd_phase = scalar, U08, 349, "", 1, 0 boostduty2 = scalar, U08, 350 , "%", 1.0, 0.0 status8 = scalar, U08, 351, "", 1.0, 0.0 vvt_ang1 = scalar, S16, 352, "deg", 0.100, 0.0 vvt_ang2 = scalar, S16, 354, "deg", 0.100, 0.0 vvt_ang3 = scalar, S16, 356, "deg", 0.100, 0.0 vvt_ang4 = scalar, S16, 358, "deg", 0.100, 0.0 inj_timing_pri = scalar, S16, 360, "deg", 0.100, 0.0 inj_timing_sec = scalar, S16, 362, "deg", 0.100, 0.0 vvt_target1 = scalar, S16, 364, "deg", 0.100, 0.0 vvt_target2 = scalar, S16, 366, "deg", 0.100, 0.0 vvt_target3 = scalar, S16, 368, "deg", 0.100, 0.0 vvt_target4 = scalar, S16, 370, "deg", 0.100, 0.0 vvt_duty1 = scalar, U08, 372 , "%", 0.392, 0.0 vvt_duty2 = scalar, U08, 373 , "%", 0.392, 0.0 vvt_duty3 = scalar, U08, 374 , "%", 0.392, 0.0 vvt_duty4 = scalar, U08, 375 , "%", 0.392, 0.0 fuel_pct = scalar, U16, 376, "%", 0.1000, 0.0 #if CELSIUS fuel_temp1 = scalar, S16, 378, "°C", 0.05555, -320.0 fuel_temp2 = scalar, S16, 380, "°C", 0.05555, -320.0 #else fuel_temp1 = scalar, S16, 378, "°F", 0.100, 0.0 fuel_temp2 = scalar, S16, 380, "°C", 0.05555, -320.0 #endif tps_accel = scalar, S16, 382, "%", 0.1000, 0.0 map_accel = scalar, S16, 384, "%", 0.1000, 0.0 total_accel = scalar, S16, 386, "%", 0.1000, 0.0 knock_cyl01 = scalar, U08, 388, "%", 0.4, 0 knock_cyl02 = scalar, U08, 389, "%", 0.4, 0 knock_cyl03 = scalar, U08, 390, "%", 0.4, 0 knock_cyl04 = scalar, U08, 391, "%", 0.4, 0 knock_cyl05 = scalar, U08, 392, "%", 0.4, 0 knock_cyl06 = scalar, U08, 393, "%", 0.4, 0 knock_cyl07 = scalar, U08, 394, "%", 0.4, 0 knock_cyl08 = scalar, U08, 395, "%", 0.4, 0 knock_cyl09 = scalar, U08, 396, "%", 0.4, 0 knock_cyl10 = scalar, U08, 397, "%", 0.4, 0 knock_cyl11 = scalar, U08, 398, "%", 0.4, 0 knock_cyl12 = scalar, U08, 399, "%", 0.4, 0 fan1_duty = scalar, U08, 400, "%", 1, 0.0 ;gap launch_timer = scalar, U16, 404, "s", 0.001, 0 launch_retard = scalar, S16, 406, "deg", 0.1, 0 maf_volts = scalar, U16, 408, "V", 0.001, 0.0 porta = scalar, U08, 410, "bit", 1.000, 0.0 ; raw i/o port status bits porta0 = bits, U08, 410, [0:0] porta1 = bits, U08, 410, [1:1] porta2 = bits, U08, 410, [2:2] porta3 = bits, U08, 410, [3:3] porta4 = bits, U08, 410, [4:4] porta5 = bits, U08, 410, [5:5] porta6 = bits, U08, 410, [6:6] porta7 = bits, U08, 410, [7:7] portb = scalar, U08, 411, "bit", 1.000, 0.0 ; raw i/o port status bits portb0 = bits, U08, 411, [0:0] portb1 = bits, U08, 411, [1:1] portb2 = bits, U08, 411, [2:2] portb3 = bits, U08, 411, [3:3] portb4 = bits, U08, 411, [4:4] portb5 = bits, U08, 411, [5:5] portb6 = bits, U08, 411, [6:6] portb7 = bits, U08, 411, [7:7] porteh = scalar, U08, 412, "bit", 1.000, 0.0 ; raw i/o port status bits porte0 = bits, U08, 412, [0:0] porte1 = bits, U08, 412, [1:1] porte2 = bits, U08, 412, [2:2] porte4 = bits, U08, 412, [4:4] porth6 = bits, U08, 412, [6:6] porth7 = bits, U08, 412, [7:7] portk = scalar, U08, 413, "bit", 1.000, 0.0 ; raw i/o port status bits portk0 = bits, U08, 413, [0:0] portk1 = bits, U08, 413, [1:1] portk2 = bits, U08, 413, [2:2] portk3 = bits, U08, 413, [3:3] portk4 = bits, U08, 413, [4:4] portk5 = bits, U08, 413, [5:5] portk7 = bits, U08, 413, [7:7] portmj = scalar, U08, 414, "bit", 1.000, 0.0 ; raw i/o port status bits portj0 = bits, U08, 414, [0:0] portj1 = bits, U08, 414, [1:1] portm2 = bits, U08, 414, [2:2] portm3 = bits, U08, 414, [3:3] portm4 = bits, U08, 414, [4:4] portm5 = bits, U08, 414, [5:5] portj7 = bits, U08, 414, [7:7] portp = scalar, U08, 415, "bit", 1.000, 0.0 ; raw i/o port status bits portp2 = bits, U08, 415, [2:2] portp3 = bits, U08, 415, [3:3] portp4 = bits, U08, 415, [4:4] portp5 = bits, U08, 415, [5:5] portp6 = bits, U08, 415, [6:6] portp7 = bits, U08, 415, [7:7] portt = scalar, U08, 416, "bit", 1.000, 0.0 ; raw i/o port status bits portt0 = bits, U08, 416, [0:0] portt1 = bits, U08, 416, [1:1] portt2 = bits, U08, 416, [2:2] portt3 = bits, U08, 416, [3:3] portt4 = bits, U08, 416, [4:4] portt5 = bits, U08, 416, [5:5] portt6 = bits, U08, 416, [6:6] portt7 = bits, U08, 416, [7:7] cel_errorcode = scalar, U08, 417, "bit", 1, 0.0 boost_targ_1 = scalar, S16, 418, "kPa", 0.1, 0 boost_targ_2 = scalar, S16, 420, "kPa", 0.1, 0 #if CELSIUS airtemp = scalar, S16, 422, "°C", 0.05555, -320.0 #else airtemp = scalar, S16, 422, "°F", 0.100, 0.0 #endif looptime = scalar, U16, 424, "us", 1.0, 0.0 vss3 = scalar, U16, 426, { bitStringValue( prefSpeedUnits , prefSpeedUnits ) }, { msToPrefUnitsScale }, 0.0 vss4 = scalar, U16, 428, { bitStringValue( prefSpeedUnits , prefSpeedUnits ) }, { msToPrefUnitsScale }, 0.0 vss3_ms_1 = scalar, U16, 426, "ms-1", 0.1, 0.0 vss4_ms_1 = scalar, U16, 428, "ms-1", 0.1, 0.0 fuel_press1 = scalar, S16, 430, "kPa", 0.100, 0.0 fuel_press2 = scalar, S16, 432, "kPa", 0.100, 0.0 cl_idle_targ_rpm = scalar, U16, 434, "rpm", 1, 0 fp_duty = scalar, U08, 436, "%", 0.392, 0.0 alt_duty = scalar, U08, 437, "%", 1, 0.0 alt_period = scalar, U08, 437, "ms", 0.128, 0.0 load_duty = scalar, U08, 438, "%", 1, 0.0 alt_targv = scalar, U08, 439, "V", 0.100, 0.0 batt_curr = scalar, S16, 440, "A", 0.1, 0.0 fueltemp_cor = scalar, S16, 442, "%", 0.100, 0.0 fuelpress_cor = scalar, S16, 444, "%", 0.100, 0.0 ltt_cor = scalar, S08, 446, "%", 0.100, 0.0 engine_state_cruise = bits, U08, 447, [0:0] engine_state_accel_slow = bits, U08, 447, [1:1] ; engine_state_accel_fast = bits, U08, 447, [2:2] engine_state_decel_slow = bits, U08, 447, [3:3] ; engine_state_decel_fast = bits, U08, 447, [4:4] engine_state_overrun = bits, U08, 447, [5:5] engine_state_idle = bits, U08, 447, [6:6] engine_state_wot = bits, U08, 447, [7:7] tc_retard = scalar, S16, 448, "deg", 0.100, 0.0 cel_retard = scalar, S16, 450, "deg", 0.100, 0.0 fc_retard = scalar, S16, 452, "deg", 0.100, 0.0 ext_advance = scalar, S16, 454, "deg", 0.100, 0.0 base_advance = scalar, S16, 456, "deg", 0.100, 0.0 idle_cor_advance = scalar, S16, 458, "deg", 0.100, 0.0 mat_retard = scalar, S16, 460, "deg", 0.100, 0.0 flex_advance = scalar, S16, 462, "deg", 0.100, 0.0 adv1 = scalar, S16, 464, "deg", 0.100, 0.0 adv2 = scalar, S16, 466, "deg", 0.100, 0.0 adv3 = scalar, S16, 468, "deg", 0.100, 0.0 adv4 = scalar, S16, 470, "deg", 0.100, 0.0 revlim_retard = scalar, S16, 472, "deg", 0.100, 0.0 als_timing = scalar, S16, 474, "deg", 0.100, 0.0 als_addfuel = scalar, S16, 476, "ms", 0.001, 0.0 deadtime1 = scalar, S16, 478, "ms", 0.001, 0.0 launch_timing = scalar, S16, 480, "deg", 0.100, 0.0 step3_timing = scalar, S16, 482, "deg", 0.100, 0.0 launchvss_retard = scalar, S16, 484, "deg", 0.100, 0.0 ; cel_status2_xx = bits, U08, 486, [0:0] ; high byte cel_status2 = scalar, U16, 486, "bit", 1.000, 0.0 ; engine fault bits cel_status2_winj = bits, U08, 487, [0:0] ; low byte cel_status2_shutd = bits, U08, 487, [1:1] gps_latdeg = scalar, S08, 488, "", 1,0 gps_latmin = scalar, S08, 489, "", 1,0 gps_latmmin = scalar, S16, 490, "", 1,0 gps_londeg = scalar, U08, 492, "", 1,0 gps_lonmin = scalar, U08, 493, "", 1,0 gps_lonmmin = scalar, U16, 494, "", 1,0 gps_outstatus = scalar, U08, 496, "", 1,0 gps_altk = scalar, S08, 497, "", 1,0 gps_altm = scalar, S16, 498, "", 0.1,0 gps_speed = scalar, U16, 500, { bitStringValue( prefSpeedUnits , prefSpeedUnits ) }, { msToPrefUnitsScale }, 0.0 gps_speed_ms_1 = scalar, U16, 500, "ms-1", 0.1, 0.0 gps_course = scalar, U16, 502, "", 0.1,0 generic_pid_duty_a = scalar, U08, 504, "%", 0.392, 0.0 generic_pid_duty_b = scalar, U08, 505, "%", 0.392, 0.0 tc_slipxtime = scalar, U16, 506, "", 0.1,0 loop = scalar, U08, 508, "", 1, 0 can_error_cnt = scalar, U08, 509, "", 1,0 can_error = scalar, U16, 510, "", 1,0 ; can_error_rxovr = bits, U08, 510, [0:0] ; can_error_rxwrn = bits, U08, 510, [0:0] ; can_error_rxerr = bits, U08, 510, [0:0] ; can_error_txwrn = bits, U08, 510, [0:0] ; can_error_txerr = bits, U08, 510, [0:0] ; can_error_pass = bits, U08, 510, [0:0] ; can_error_oor = bits, U08, 510, [0:0] ; can_error_pass2 = bits, U08, 510, [0:0] accDecEnrich = { (pulseWidth1 > 0) ? (((accEnrichMS + decEnrichMS)/pulseWidth1*100) + 100) : 100 }, "%" accDecEnrichPcnt = { (pulseWidth1 > 0) ? (accelEnrich/pulseWidth1 + (tpsaccden ? tpsfuelcut : accelEnrich/pulseWidth1*100)) : 100 }, "%" accEnrichPcnt = { (pulseWidth1 > 0) ? (100 + (accelEnrich/pulseWidth1*100)) : 100 }, "%" accEnrichMS = { accelEnrich }, "ms" decEnrichPcnt = { (tpsaccden ? tpsfuelcut : 100) }, "%" decEnrichMS = { (pulseWidth1 > 0) ? ((tpsfuelcut/100*pulseWidth1)-pulseWidth1) : 100 }, "ms" ; approximation because doesn't include deadtime time = { timeNow }, "s" rpm100 = { rpm / 100.0 } cycleTime1 = { rpm ? (60000.0 / rpm * (2.0-(twoStroke&1))) : 0 }, "ms" nSquirts1 = { nCylinders/divider} altDiv1 = { alternate ? 2 : 1 } dcfactor1 = { (sequential == 0) ? nSquirts1/altDiv1 : ( (sequential == 1) ? 2 : 1) } dutyCycle1 = { cycleTime1 ? (100.0*dcfactor1*pulseWidth1/cycleTime1) : 0}, "%" cycleTime2 = { rpm ? (60000.0 / rpm * (2.0-(twoStroke&1))) : 0 }, "ms" nSquirts2 = { nCylinders/divider } altDiv2 = { alternate ? 2 : 1 } ; ought to look at staging parameters too dcfactor2a = { (sequential == 0) ? nSquirts2/altDiv2 : ( (sequential == 1) ? 2 : 1) } ; ought to look at staging parameters too dcfactor2b = { (staged_first_param && staged_extended_opts_use_v3) ? 1 : dcfactor2a } dutyCycle2 = { cycleTime2 ? (100.0*dcfactor2b*pulseWidth2/cycleTime2) : 0}, "%" #if NARROW_BAND_EGO egoVoltage = { egoV }, "V" ; For LED bars... afr1err = { egov1 - afrtgt1 } afr2err = { egov2 - afrtgt2 } #elif LAMBDA lambda1 = { afr1 / stoich }, "Lambda" lambda2 = { afr2 / stoich }, "Lambda2" lambda3 = { afr3 / stoich }, "Lambda3" lambda4 = { afr4 / stoich }, "Lambda4" lambda5 = { afr5 / stoich }, "Lambda5" lambda6 = { afr6 / stoich }, "Lambda6" lambda7 = { afr7 / stoich }, "Lambda7" lambda8 = { afr8 / stoich }, "Lambda8" egoVoltage = { lambda1 }, "Lambda" ; For LED bars... afrtgt1 = { afrtgt1raw / stoich * (egoType == 2) } ; return zero if NB because of mixed units with target in volts afrtgt2 = { afrtgt2raw / stoich * (egoType == 2) } afr1err = { (afr1 - afrtgt1raw) / stoich * (egoType == 2)} afr2err = { (afr2 - afrtgt2raw) / stoich * (egoType == 2)} #else egoVoltage = { afr1 }, "AFR" ; For LED bars... afr1err = { afr1 - afrtgt1 } afr2err = { afr2 - afrtgt2 } #endif pwma_load = { getChannelValueByOffset( pwm_opt_load_a_offset ) } pwmb_load = { getChannelValueByOffset( pwm_opt_load_b_offset ) } pwmc_load = { getChannelValueByOffset( pwm_opt_load_c_offset ) } pwmd_load = { getChannelValueByOffset( pwm_opt_load_d_offset ) } pwme_load = { getChannelValueByOffset( pwm_opt_load_e_offset ) } pwmf_load = { getChannelValueByOffset( pwm_opt_load_f_offset ) } maxafrload = { (maxafr_opt1_load & 1) ? tps : map } vvt_load = { (vvt_opt7_yaxis == 0) ? fuelload : ((vvt_opt7_yaxis == 1) ? map : ( (vvt_opt7_yaxis == 2) ? (map*100/barometer) : ((vvt_opt7_yaxis == 3) ? tps : ((vvt_opt7_yaxis == 4) ? mafload : fuelload ) ) ) ) } reqfuel = { reqFuel } Stoich = { (status9 & 8) ? stoich_alt : stoich } ; Vacuum and Boost Gauges boostbar = { (map - barometer) / 100} boostpsig = { (map - barometer) * 0.14504} vacuum = { (barometer-map)*0.2953007 } ; Calculate vacuum in in-Hg. boostvac = { map < barometer ? -vacuum : boostpsig } ; calculate instantaneous economy from fuel flow (not calculated in firmware at this time) economy_l_km = { vss1_ms_1 ? (fuelflow / (vss1_ms_1 * 60)) : 0 } ; economy_mpg_us = { (1 / economy_l_km) * 3.800 / 1.609344 } economy_mpg_us = { vss1_ms_1 ? (2.361 / economy_l_km) : 0 } economy_mpg_uk = { vss1_ms_1 ? (2.825 / economy_l_km) : 0 } economy_l_100km = { economy_l_km * 100 } pwmidle_cl_initialvalue_matorclt_follower = { pwmidle_cl_opts_initval_clt ? coolant : mat } rpm_target_error_follower = { rpm - cl_idle_targ_rpm }, "rpm" #if CELSIUS cltlowlim = { clt_exp ? -40 : -40 } clthighlim = { clt_exp ? 230 : 120 } cltlowdang = { clt_exp ? 65 : 10 } cltlowwarn = { clt_exp ? 93 : 65 } clthighwarn = { clt_exp ? 162 : 93 } clthighdang = { clt_exp ? 176 : 104 } mathigh = { 110 } #else ; fahrenheit cltlowlim = { clt_exp ? -40 : -40 } clthighlim = { clt_exp ? 450 : 250 } cltlowdang = { clt_exp ? 150 : 50 } cltlowwarn = { clt_exp ? 200 : 150 } clthighwarn = { clt_exp ? 325 : 200 } clthighdang = { clt_exp ? 350 : 220 } mathigh = { 215 } #endif ;synthetic air flow calcflow = { fuelload * rpm * veCurr1/100 } maf_freq = { MAFOption_t ? (maf_freq0 + ((maf_freq1 - maf_freq0) * maf_volts / 5)) : 0 } ;old names tpsDOT = { TPSdot } mapDOT = { MAPdot } ;fuel pressures fuel_press1_psi = {fuel_press1 * 0.14504 }, "psi" fuel_press2_psi = {fuel_press2 * 0.14504 }, "psi" fuel_press1_bar = {fuel_press1 / 100.00 }, "bar" fuel_press2_bar = {fuel_press2 / 100.00 }, "bar" msToPrefUnitsScale = { prefSpeedUnits == 0 ? 0.22369 : 0.36 }, "" kpadToPrefFuelPressUnitsScale = { prefFuelPressUnits == 0 ? 0.1 : (prefFuelPressUnits == 1 ? 0.0145038 : 0.001) }, "" fuel_press1_user = {fuel_press1 * 10 * kpadToPrefFuelPressUnitsScale} gps_latsec = { 60 * gps_latmmin / 10000 } gps_lonsec = { 60 * gps_lonmmin / 10000 } gps_alt = { gps_altk * 1000 + gps_altm } gps_latitude = { gps_latdeg + (gps_latmin / 60) + (gps_latsec / 3600) } gps_long = { gps_londeg + (gps_lonmin / 60) + (gps_lonsec / 3600) } gps_lonEW = { (gps_outstatus & 1) ? 1 : 0 } gps_longitude = { gps_lonEW ? 0-gps_long : gps_long } ; the 0 is redundant, but causes a TS error otherwise generic_pid_load_a = { getChannelValueByOffset( generic_pid_load_offset_a ) } generic_pid_load_b = { getChannelValueByOffset( generic_pid_load_offset_b ) } sdlog_maxnumbytes = { (log_style_block == 2) ? 119 : 55 } pedal = {app} maxspeed = { prefSpeedUnits == 0 ? 300 : 480 }, "" accel_vs_yaw = { canrx1_opt_accel == 2 ? 1 : 0} oil_pressure = { ((oilpress_in == 1) * sensor01) + ((oilpress_in == 2) * sensor02) + ((oilpress_in == 3) * sensor03) + ((oilpress_in == 4) * sensor04) + ((oilpress_in == 5) * sensor05) + ((oilpress_in == 6) * sensor06) + ((oilpress_in == 7) * sensor07) + ((oilpress_in == 8) * sensor08) + ((oilpress_in == 9) * sensor09) + ((oilpress_in == 10) * sensor10) + ((oilpress_in == 11) * sensor11) + ((oilpress_in == 12) * sensor12) + ((oilpress_in == 13) * sensor13) + ((oilpress_in == 14) * sensor14) + ((oilpress_in == 15) * sensor15) } injOpen1 = { deadtime1 } ; TS appears to require injOpen1 for an internal formula. needBurnYesNo = {status1 & 1} dataLostYesNo = {status1 & 2} configErrYesNo = {status1 & 4} rpmSyncedYesNo = {status1 & 8} fueltswYesNo = {status1 & 0x20} spktswYesNo = {status1 & 0x40} fullsyncYesNo = {status1 & 128} n2o1OnOff = {status2 & 1}, "" n2o2OnOff = {status2 & 2}, "" launchYesNo = {status2 & 4}, "" launchActive = {status2 & 8}, "" flatShiftYesNo = {status2 & 16}, "" sparkCutActive = {status2 & 32}, "" overBoostActive = {status2 & 64}, "" clIdleOnOff = {status2 & 128}, "" fuelCutActive = {status3 & 1}, "" tLogOnOff = {status3 & 2}, "" 3stepOnOff = {status3 & 4}, "" testModeActive = {status3 & 8}, "" 3stepActive = {status3 & 16}, "" softLimitActive = {status3 & 32}, "" seqShiftActive = {status3 & 64}, "" launchOnOff = {status3 & 128}, "" egtWarnActive = {status6 & 1}, "" egtShutDwnActive = {status6 & 2}, "" afrWarnActive = {status6 & 4}, "" afrShutDwnActive = {status6 & 8}, "" idleVeActive = {status6 & 16}, "" idleAdvanceActive = {status6 & 32}, "" fanOnOff = {status6 & 64}, "" mapSampleErrorActive = {status6 & 128}, "" vvt1ErrYesNo = {status7 & 1}, "" vvt2ErrYesNo = {status7 & 2}, "" vvt3ErrYesNo = {status7 & 4}, "" vvt4ErrYesNo = {status7 & 8}, "" knockYesNo = {status7 & 16}, "" acOnOff = {status7 & 32}, "" checkEngineOnOff = {status7 & 64}, "" limpModeOnOff = {status7 & 128}, "" injdisActive = {status8 & 1}, "" spkdisActive = {status8 & 2}, "" wiLowActive = {status8 & 4}, "" pw4xOnOff = {status8 & 8}, "" vssLaunchL/oActive = {status8 & 16}, "" vssLaunchOnOff = {status8 & 32}, "" dbwFaultActive = {status8 & 128}, "" oilShutDwnActive = { status9 & 1}, "" fuelPressShutDwnActive = { status9 & 2}, "" overRunFuelCutActive = { status9 & 4}, "" stoichSwitchingActive = { status9 & 8}, "" reqFuelSwitchingActive = { status9 & 16}, "" sdWarnActive = { status9 & 32}, "" boostSwitchingActive = { status9 & 64}, "" safetyShutdownActive = { status9 &128}, "" canRxOnOff = { status10 & 1}, "" canTxOnOff = { status10 & 2}, "" iobox1Active = { status10 & 4}, "" iobox2Active = { status10 & 8}, "" iobox3Active = { status10 & 16}, "" canegt1Active = { status10 & 32}, "" canegt2Active = { status10 & 64}, "" ltTrimActive = { status10 & 128}, "" sdcardLogActive = { sd_status & 8}, "" sdcardYesNo = { sd_status & 1}, "" sdCardErrYesNo = { sd_status & 16}, "" sdcardReadyYesNo = { sd_status & 4}, "" gammTuneErrYesNo = {(gammaEnrich < 70)}, "" canIn1OnOff = { canin1_8 & 1 }, "" canIn2OnOff = { canin1_8 & 2 }, "" canIn3OnOff = { canin1_8 & 4 }, "" canIn4OnOff = { canin1_8 & 8 }, "" canIn5OnOff = { canin1_8 & 16 }, "" canIn6OnOff = { canin1_8 & 32 }, "" canIn7OnOff = { canin1_8 & 64 }, "" canIn8OnOff = { canin1_8 & 128}, "" ;------------------------------------------------------------------------------- ;-- The entries are saved in the datalog file in the order in which they -- ;-- appear in the list below. -- ;-- -- ;-- Channel - Case sensitive name of output channel to be logged. -- ;-- Label - String written to header line of log. -- ;-- Type - Data type of output, converted before writing. -- ;-- Format - C-style output format of data. -- [Datalog] ; Channel Label Type Format ; -------------- ---------- ----- ------ entry = time, "Time", float, "%.3f" entry = seconds, "SecL", int, "%d" entry = rpm, "RPM", int, "%d" entry = map, "MAP", float, "%.1f" entry = boostpsig, "Boost psi", float, "%.1f" entry = throttle, "TPS", float, "%.1f" entry = tpsADC, "TPSADC", int, "%d" ; for debug entry = maf, "MAF", float, "%.2f", { MAFOption || MAFOption_t } entry = mafload, "MAFload", float, "%.1f", { MAFOption || MAFOption_t } entry = maf_volts, "MAF volts", float, "%.3f", { MAFOption } entry = maf_freq, "MAF Freq", int, "%d", { MAFOption_t } #if NARROW_BAND_EGO entry = egov1 , "O2", float, "%.3f", {egonum > 0} entry = egov2 , "O2 #2", float, "%.3f", {egonum > 1} entry = egov3 , "O2 #3", float, "%.3f", {egonum > 2} entry = egov4 , "O2 #4", float, "%.3f", {egonum > 3} entry = egov5 , "O2 #5", float, "%.3f", {egonum > 4} entry = egov6 , "O2 #6", float, "%.3f", {egonum > 5} entry = egov7 , "O2 #7", float, "%.3f", {egonum > 6} entry = egov8 , "O2 #8", float, "%.3f", {egonum > 7} #elif LAMBDA entry = lambda1, "Lambda", float, "%.3f", {egonum > 0} entry = lambda2, "Lambda2", float, "%.3f", {egonum > 1} entry = lambda3, "Lambda3", float, "%.3f", {egonum > 2} entry = lambda4, "Lambda4", float, "%.3f", {egonum > 3} entry = lambda5, "Lambda5", float, "%.3f", {egonum > 4} entry = lambda6, "Lambda6", float, "%.3f", {egonum > 5} entry = lambda7, "Lambda7", float, "%.3f", {egonum > 6} entry = lambda8, "Lambda8", float, "%.3f", {egonum > 7} #else entry = afr1, "AFR", float, "%.2f", {egonum > 0} entry = afr2, "AFR2", float, "%.2f", {egonum > 1} entry = afr3, "AFR3", float, "%.2f", {egonum > 2} entry = afr4, "AFR4", float, "%.2f", {egonum > 3} entry = afr5, "AFR5", float, "%.2f", {egonum > 4} entry = afr6, "AFR6", float, "%.2f", {egonum > 5} entry = afr7, "AFR7", float, "%.2f", {egonum > 6} entry = afr8, "AFR8", float, "%.2f", {egonum > 7} #endif entry = mat, "MAT", float, "%.1f" entry = coolant, "CLT", float, "%.1f" entry = engine, "Engine", int, "%d" entry = batteryVoltage, "Batt V", float, "%.1f" entry = egocor1, "EGO cor1", int, "%.1f" entry = egocor2, "EGO cor2", int, "%.1f", {egonum > 1} entry = egocor3, "EGO cor3", int, "%.1f", {egonum > 2} entry = egocor4, "EGO cor4", int, "%.1f", {egonum > 3} entry = egocor5, "EGO cor5", int, "%.1f", {egonum > 4} entry = egocor6, "EGO cor6", int, "%.1f", {egonum > 5} entry = egocor7, "EGO cor7", int, "%.1f", {egonum > 6} entry = egocor8, "EGO cor8", int, "%.1f", {egonum > 7} entry = airCorrection, "Fuel: Air cor", int, "%.1f" entry = warmupEnrich, "Fuel: Warmup cor", int, "%d" entry = baroCorrection, "Fuel: Baro cor", int, "%.1f" entry = gammaEnrich, "Fuel: Total cor", int, "%d" entry = accDecEnrich, "Fuel: Accel enrich", int, "%d" entry = accEnrichMS, "Fuel: Accel PW", float, "%.3f" entry = veCurr1, "VE1", int, "%.1f" entry = pulseWidth1, "PW", float, "%.3f" entry = dutyCycle1, "Duty Cycle1", float, "%.1f" entry = veCurr2, "VE2", int, "%.1f" entry = pulseWidth2, "PW2", float, "%.3f" entry = dutyCycle2, "Duty Cycle2", float, "%.1f" entry = ve_raw1, "VE1 raw", int, "%.1f" entry = ve_raw2, "VE2 raw", int, "%.1f" entry = ve_raw3, "VE3 raw", int, "%.1f" entry = ve_raw4, "VE4 raw", int, "%.1f" entry = pwseq1, "Seq PW1", float, "%.3f", { sequential } entry = pwseq2, "Seq PW2", float, "%.3f", { sequential } entry = pwseq3, "Seq PW3", float, "%.3f", { sequential } entry = pwseq4, "Seq PW4", float, "%.3f", { sequential } entry = pwseq5, "Seq PW5", float, "%.3f", { sequential } entry = pwseq6, "Seq PW6", float, "%.3f", { sequential } entry = pwseq7, "Seq PW7", float, "%.3f", { sequential } entry = pwseq8, "Seq PW8", float, "%.3f", { sequential } entry = pwseq9, "Seq PW9", float, "%.3f", { sequential } entry = pwseq10, "Seq PW10", float, "%.3f", { sequential } entry = pwseq11, "Seq PW11", float, "%.3f", { sequential } entry = pwseq12, "Seq PW12", float, "%.3f", { sequential } entry = advance, "SPK: Spark Advance", float, "%.1f" entry = knockRetard, "SPK: Knock retard", float, "%.1f" entry = knock, "Knock in", float, "%.1f" entry = coldAdvDeg, "SPK: Cold advance", float, "%.1f" entry = tc_retard, "SPK: Traction retard", float, "%.1f" entry = cel_retard, "SPK: CEL retard", float, "%.1f" entry = fc_retard, "SPK: Fuel cut retard", float, "%.1f" entry = ext_advance, "SPK: External advance", float, "%.1f" entry = base_advance, "SPK: Base Spark Advance",float, "%.1f" entry = idle_cor_advance,"SPK: Idle Correction Advance", float, "%.1f" entry = mat_retard, "SPK: MAT Retard", float, "%.1f" entry = flex_advance, "SPK: Flex Advance", float, "%.1f" entry = adv1, "SPK: Spark Table 1", float, "%.1f" entry = adv2, "SPK: Spark Table 2", float, "%.1f" entry = adv3, "SPK: Spark Table 3", float, "%.1f" entry = adv4, "SPK: Spark Table 4", float, "%.1f" entry = revlim_retard, "SPK: Revlim Retard", float, "%.1f" entry = als_timing, "SPK: ALS Timing", float, "%.1f" entry = launch_timing, "SPK: Launch Timing", float, "%.1f" entry = step3_timing, "SPK: 3-step Timing", float, "%.1f" entry = launchvss_retard,"SPK: Launch VSS Retard",float, "%.1f" entry = n2o_retard, "SPK: Nitrous Retard", float, "%.1f", { N2Oopt_2 } entry = dwell, "Dwell", float, "%.2f" entry = barometer, "Barometer", float, "%.1f" entry = iacstep, "Stepper Idle position", int, "%d", {IdleCtl == 3} entry = idleDC, "PWM Idle duty", float, "%.1f", {(IdleCtl == 2) || (IdleCtl == 4)} entry = cl_idle_targ_rpm, "Closed-loop idle target RPM", int, "%d", { ((IdleCtl > 1) && (IdleCtl_alg == 1)) || idle_special_ops_timing_assist } entry = rpm_target_error_follower, "Closed-loop idle RPM error", int, "%d", { ((IdleCtl > 1) && (IdleCtl_alg == 1)) || idle_special_ops_timing_assist } entry = boostduty, "Boost duty", int, "%d", { boost_ctl_settings_on } entry = boost_targ_1, "Boost target 1", int, "%d", { boost_ctl_settings_on && (boost_ctl_settings_cl || boost_ctl_settings_dome) } entry = boostduty2, "Boost duty 2", int, "%d", { boost_ctl_settings_on && boost_ctl_settings_on2 } entry = boost_targ_2, "Boost target 2", int, "%d", { boost_ctl_settings_on && (boost_ctl_settings_cl || boost_ctl_settings_dome) && boost_ctl_settings_on2 } entry = boost_dome_targ1, "Dome target 1", int, "%d", { boost_ctl_settings_on && boost_ctl_settings_dome } ; entry = boost_dome_targ2, "Dome target 2", int, "%d", { boost_ctl_settings_on && boost_ctl_settings_dome } #if NARROW_BAND_EGO entry = afrtgt1, "EgoV 1 Target", float, "%.3f" entry = afrtgt2, "EgoV 2 Target", float, "%.3f" entry = afr1err, "EgoV 1 Error", float, "%.3f" entry = afr2err, "EgoV 2 Error", float, "%.3f" #elif LAMBDA entry = afrtgt1, "Lambda 1 Target", float, "%.3f" entry = afrtgt2, "Lambda 2 Target", float, "%.3f" entry = afr1err, "Lambda 1 Error", float, "%.3f" entry = afr2err, "Lambda 2 Error", float, "%.3f" #else entry = afrtgt1, "AFR 1 Target", float, "%.1f" entry = afrtgt2, "AFR 2 Target", float, "%.1f" entry = afr1err, "AFR 1 Error", float, "%.1f" entry = afr2err, "AFR 2 Error", float, "%.1f" #endif entry = TPSdot, "TPSdot", float, "%.1f" entry = MAPdot, "MAPdot", float, "%.1f" entry = RPMdot, "RPMdot", int, "%d" entry = wallfuel1, "Wall fuel1", int, "%d", {EAEOption} entry = wallfuel2, "Wall fuel2", int, "%d", {EAEOption} entry = EAEFuelCorr1, "EAE1", int, "%d", {EAEOption} entry = EAEFuelCorr2, "EAE2", int, "%d", {EAEOption} entry = fuelload, "Load", float, "%.1f" entry = fuelload2, "Secondary load", float, "%.1f" entry = ignload, "Ign load", float, "%.1f" entry = ignload2, "Secondary ign load", float, "%.1f" entry = eaeload1, "EAE load", float, "%.1f", {EAEOption} entry = afrload1, "AFR load", float, "%.1f" entry = inj_timing_pri, "Injector timing pri", float, "%.1f" entry = inj_timing_sec, "Injector timing sec", float, "%.1f" entry = egt1, "EGT1", int, "%d", {egt_num > 0} entry = egt2, "EGT2", int, "%d", {egt_num > 1} entry = egt3, "EGT3", int, "%d", {egt_num > 2} entry = egt4, "EGT4", int, "%d", {egt_num > 3} entry = egt5, "EGT5", int, "%d", {egt_num > 4} entry = egt6, "EGT6", int, "%d", {egt_num > 5} entry = egt7, "EGT7", int, "%d", {egt_num > 6} entry = egt8, "EGT8", int, "%d", {egt_num > 7} entry = egt9, "EGT9", int, "%d", {egt_num > 8} entry = egt10, "EGT10", int, "%d", {egt_num > 9} entry = egt11, "EGT11", int, "%d", {egt_num > 10} entry = egt12, "EGT12", int, "%d", {egt_num > 11} ; entry = egt13, "EGT13", int, "%d", {egt_num > 12} ; entry = egt14, "EGT14", int, "%d", {egt_num > 13} ; entry = egt15, "EGT15", int, "%d", {egt_num > 14} ; entry = egt16, "EGT16", int, "%d", {egt_num > 15} ; for debug, enable these always entry = sensor01, { stringValue(sensor01Alias) }, float, "%.1f", { sensor01_source } entry = sensor02, { stringValue(sensor02Alias) }, float, "%.1f", { sensor02_source } entry = sensor03, { stringValue(sensor03Alias) }, float, "%.1f", { sensor03_source } entry = sensor04, { stringValue(sensor04Alias) }, float, "%.1f", { sensor04_source } entry = sensor05, { stringValue(sensor05Alias) }, float, "%.1f", { sensor05_source } entry = sensor06, { stringValue(sensor06Alias) }, float, "%.1f", { sensor06_source } entry = sensor07, { stringValue(sensor07Alias) }, float, "%.1f", { sensor07_source } entry = sensor08, { stringValue(sensor08Alias) }, float, "%.1f", { sensor08_source } entry = sensor09, { stringValue(sensor09Alias) }, float, "%.1f", { sensor09_source } entry = sensor10, { stringValue(sensor10Alias) }, float, "%.1f", { sensor10_source } entry = sensor11, { stringValue(sensor11Alias) }, float, "%.1f", { sensor11_source } entry = sensor12, { stringValue(sensor12Alias) }, float, "%.1f", { sensor12_source } entry = sensor13, { stringValue(sensor13Alias) }, float, "%.1f", { sensor13_source } entry = sensor14, { stringValue(sensor14Alias) }, float, "%.1f", { sensor14_source } entry = sensor15, { stringValue(sensor15Alias) }, float, "%.1f", { sensor15_source } entry = sensor16, "ECU Temperature", float, "%.1f" entry = canpwmin0, "CANpwmin0", int, "%d", { enable_pollPWM } entry = canpwmin1, "CANpwmin1", int, "%d", { enable_pollPWM } entry = canpwmin2, "CANpwmin2", int, "%d", { enable_pollPWM } entry = canpwmin3, "CANpwmin3", int, "%d", { enable_pollPWM } entry = canin1_8, "canin1_8", int, "%d" entry = canout1_8, "canout1_8", int, "%d" entry = canout9_16, "canout9_16", int, "%d" entry = timing_err, "Timing err", float, "%.1f" entry = synccnt, "Lost sync count", int, "%d" entry = syncreason, "Lost sync reason", int, "%d" entry = fuelflow, "Fuel flow cc/min", int, "%d" entry = vss1, "VSS1", int, "%.1f", {vss_opt0_1} entry = vss2, "VSS2", int, "%.1f", {vss_opt0_2} entry = vss3, "VSS3", int, "%.1f", {vss_opt0_3} entry = vss4, "VSS4", int, "%.1f", {vss_opt0_4} entry = vss1_ms_1, "VSS1 ms-1", int, "%.1f", {vss_opt0_1} entry = vss2_ms_1, "VSS2 ms-1", int, "%.1f", {vss_opt0_2} entry = vss3_ms_1, "VSS3 ms-1", int, "%.1f", {vss_opt0_3} entry = vss4_ms_1, "VSS4 ms-1", int, "%.1f", {vss_opt0_4} entry = economy_mpg_us, "MPG(USA)", int, "%.1f", {vss_opt0_1 && (prefSpeedUnits == 0)} entry = economy_mpg_uk, "MPG(UK)", int, "%.1f", {vss_opt0_1 && (prefSpeedUnits == 0)} entry = economy_l_100km, "l/100km", int, "%d", {vss_opt0_1 && (prefSpeedUnits == 1)} entry = ss1, "Shaft rpm 1", int, "%d", { ss_opt1 } entry = ss2, "Shaft rpm 2", int, "%d", { ss_opt2 } entry = n2o_addfuel, "Nitrous added fuel", float, "%.3f", { N2Oopt_2 } entry = nitrous1_duty, "Nitrous 1 duty", int, "%d", { N2Oopt_2 } entry = nitrous2_duty, "Nitrous 2 duty", int, "%d", { N2Oopt_2 } entry = nitrous_timer, "Nitrous Timer", float, "%.3f", { N2Oopt_2 } entry = water_duty, "Water inj duty", int, "%d", { water_freq_on } entry = als_addfuel, "ALS added fuel", float, "%.3f", { als_in_pin } entry = als_timing, "ALS timing", float, "%.1f", { als_in_pin } entry = sd_filenum, "SDcard file number", int, "%d", { log_style_on2 } entry = sd_status, "SDcard status", int, "%d", { log_style_on2 } entry = sd_phase, "SDcard phase", int, "%d", { log_style_on2 } entry = sd_error, "SDcard error", int, "%d", { log_style_on2 } entry = gear, "Gear", int, "%d", { gear_method } entry = vss1dot, "VSS1dot", float, "%.1f", {vss_opt0_1} entry = vss2dot, "VSS2dot", float, "%.1f", {vss_opt0_2} entry = accelx, "Accel X", float, "%.2f", { accXport || (canrx1_opt_accel >= 1) } entry = accely, "Accel Y", float, "%.2f", { accYport || (canrx1_opt_accel >= 1) } entry = accelz, { bitStringValue( accel_vs_yaw_name , accel_vs_yaw ) }, float, "%.2f", { accZport || (canrx1_opt_accel >= 1) } entry = duty_pwm_a, "PWM A duty", int, "%d", { pwm_opt_on_a } entry = duty_pwm_b, "PWM B duty", int, "%d", { pwm_opt_on_b } entry = duty_pwm_c, "PWM C duty", int, "%d", { pwm_opt_on_c } entry = duty_pwm_d, "PWM D duty", int, "%d", { pwm_opt_on_d } entry = duty_pwm_e, "PWM E duty", int, "%d", { pwm_opt_on_e } entry = duty_pwm_f, "PWM F duty", int, "%d", { pwm_opt_on_f } entry = generic_pid_duty_a, "Generic Closed-Loop A duty", float, "%.1f", { generic_pid_flags_a_on } entry = generic_pid_duty_b, "Generic Closed-Loop B duty", float, "%.1f", { generic_pid_flags_b_on } entry = status1, "Status1", int, "%d" entry = status2, "Status2", int, "%d" entry = status3, "Status3", int, "%d" entry = status4, "Status4", int, "%d" entry = status5, "Status5", int, "%d" entry = status5s, "Status5s", int, "%d" entry = status6, "Status6", int, "%d" entry = status7, "Status7", int, "%d" entry = status8, "Status8", int, "%d" entry = status9, "Status9", int, "%d" entry = status10, "Status10", int, "%d" entry = vvt_ang1, "VVT angle 1", int, "%.1f", { vvt_opt1_on } entry = vvt_ang2, "VVT angle 2", int, "%.1f", { vvt_opt1_on > 1} entry = vvt_ang3, "VVT angle 3", int, "%.1f", { vvt_opt1_on > 2} entry = vvt_ang4, "VVT angle 4", int, "%.1f", { vvt_opt1_on > 2} entry = vvt_target1, "VVT target 1", int, "%.1f", { vvt_opt1_on } entry = vvt_target2, "VVT target 2", int, "%.1f", { vvt_opt1_on > 1} entry = vvt_target3, "VVT target 3", int, "%.1f", { vvt_opt1_on > 2} entry = vvt_target4, "VVT target 4", int, "%.1f", { vvt_opt1_on > 2} entry = vvt_duty1, "VVT duty 1", int, "%.1f", { vvt_opt1_on } entry = vvt_duty2, "VVT duty 2", int, "%.1f", { vvt_opt1_on > 1} entry = vvt_duty3, "VVT duty 3", int, "%.1f", { (vvt_opt1_on > 2) || (vvt_opt4_decode == 2) } entry = vvt_duty4, "VVT duty 4", int, "%.1f", { (vvt_opt1_on > 2) || (vvt_opt4_decode == 2) } entry = tps_accel, "TPS accel", int, "%.1f", { AE_options & 0x1 } entry = map_accel, "MAP accel", int, "%.1f", { AE_options & 0x1 } entry = total_accel, "Total accel", int, "%.1f", { AE_options & 0x1 } entry = launch_timer, "Launch timer", float, "%.3f", { launch_opt_on } entry = launch_retard, "Launch timed retard", float, "%.1f", { launch_opt_on && launch_opt_retard } entry = knock_cyl01, "Knock cyl# 1", float, "%.1f", {(knk_option_an == 3) && knock_conf_percyl && (nCylinders > 0)} entry = knock_cyl02, "Knock cyl# 2", float, "%.1f", {(knk_option_an == 3) && knock_conf_percyl && (nCylinders > 1)} entry = knock_cyl03, "Knock cyl# 3", float, "%.1f", {(knk_option_an == 3) && knock_conf_percyl && (nCylinders > 2)} entry = knock_cyl04, "Knock cyl# 4", float, "%.1f", {(knk_option_an == 3) && knock_conf_percyl && (nCylinders > 3)} entry = knock_cyl05, "Knock cyl# 5", float, "%.1f", {(knk_option_an == 3) && knock_conf_percyl && (nCylinders > 4)} entry = knock_cyl06, "Knock cyl# 6", float, "%.1f", {(knk_option_an == 3) && knock_conf_percyl && (nCylinders > 5)} entry = knock_cyl07, "Knock cyl# 7", float, "%.1f", {(knk_option_an == 3) && knock_conf_percyl && (nCylinders > 6)} entry = knock_cyl08, "Knock cyl# 8", float, "%.1f", {(knk_option_an == 3) && knock_conf_percyl && (nCylinders > 7)} entry = knock_cyl09, "Knock cyl#09", float, "%.1f", {(knk_option_an == 3) && knock_conf_percyl && (nCylinders > 8)} entry = knock_cyl10, "Knock cyl#10", float, "%.1f", {(knk_option_an == 3) && knock_conf_percyl && (nCylinders > 9)} entry = knock_cyl11, "Knock cyl#11", float, "%.1f", {(knk_option_an == 3) && knock_conf_percyl && (nCylinders > 10)} entry = knock_cyl12, "Knock cyl#12", float, "%.1f", {(knk_option_an == 3) && knock_conf_percyl && (nCylinders > 11)} entry = porta, "porta", int, "%d" entry = portb, "portb", int, "%d" entry = porteh, "porteh", int, "%d" entry = portk, "portk", int, "%d" entry = portmj, "portmj", int, "%d" entry = portp, "portp", int, "%d" entry = portt, "portt", int, "%d" entry = portm, "portm", int, "%d" entry = ports, "ports", int, "%d" entry = cel_status, "CEL status", int, "%d" entry = cel_status2, "CEL status2", int, "%d" entry = cel_errorcode, "CEL error code", int, "%d" entry = fuel_pct, "Ethanol Percentage", float, "%.1f", { flexFuel > 0 } entry = fuelCorrection, "E85 Fuel Correction", int, "%d", { flexFuel > 0 } entry = fuel_temp1, "Fuel Temp1", float, "%.1f", { (flexFuel && (fueltemp1 == 1)) || (fueltemp1 > 15)} entry = fuel_temp2, "Fuel Temp2", float, "%.1f", { dualfuel_temp_sens } entry = fuel_press1, "Fuel Pressure1_kPa", float, "%.1f", { fp_press_in } entry = fuel_press1_psi, "Fuel Pressure1_psi", float, "%.1f", { fp_press_in } entry = fuel_press1_bar, "Fuel Pressure1_bar", float, "%.1f", { fp_press_in } entry = fuel_press2, "Fuel Pressure2_kPa", float, "%.1f", { dualfuel_press_sens } entry = fuel_press2_psi, "Fuel Pressure2_psi", float, "%.1f", { dualfuel_press_sens } entry = fuel_press2_bar, "Fuel Pressure2_bar", float, "%.1f", { dualfuel_press_sens } entry = fp_duty, "Fuel pump control duty", int, "%d", { fp_opt_mode } entry = fan1_duty, "Fan 1 control duty", int, "%d", { fanctl1_mode } entry = alt_targv, "Alternator target voltage", float, "%.1f", {alternator_opt_mode > 1} entry = alt_period, "Alternator control period", float, "%.1f", {alternator_opt_mode == 2} entry = alt_duty, "Alternator control duty", int, "%d", {alternator_opt_mode > 2} entry = load_duty, "Alternator load", int, "%d", {alternator_opt_mode && alternator_freq_monin} entry = batt_curr, "Battery current", float, "%.1f", {alternator_opt_mode && alternator_freq_currin} entry = fueltemp_cor, "Fuel temperature cor", float, "%.1f" entry = fuelpress_cor, "Fuel pressure cor", float, "%.1f" entry = ltt_cor, "Long term fuel trim cor", float, "%.1f", {ltt_opt_on} ; entry = gps_latdeg, "GPS Lat. deg", int, "%d", { can_poll2_gps } ; entry = gps_latmin, "GPS Lat. min", int, "%d", { can_poll2_gps } ; entry = gps_latsec, "GPS Lat. sec", float, "%.3f", { can_poll2_gps } ; entry = gps_londeg, "GPS Lon. deg", int, "%d", { can_poll2_gps } ; entry = gps_lonmin, "GPS Lon. min", int, "%d", { can_poll2_gps } ; entry = gps_lonsec, "GPS Lon. sec", float, "%.3f", { can_poll2_gps } ; entry = gps_lonEW, "GPS Lon. E/W", int, "%d", { can_poll2_gps } entry = gps_alt, "GPS Altitude", float, "%.1f", { can_poll2_gps } entry = gps_speed, "GPS Speed", float, "%.1f", { can_poll2_gps } entry = gps_speed_ms_1, "GPS Speed ms-1",float, "%.1f", { can_poll2_gps } entry = gps_course, "GPS Course (deg)", float, "%.1f", { can_poll2_gps } entry = gps_latitude, "GPS Latitude", float, "%.5f", { can_poll2_gps } entry = gps_longitude, "GPS Longitude", float, "%.5f", { can_poll2_gps } entry = engine_state_cruise, "Engine in cruise state", int, "%d" entry = engine_state_accel_slow, "Engine accelerating slowly", int, "%d" ; entry = engine_state_accel_fast, "Engine accelerating quickly", int, "%d" entry = engine_state_decel_slow, "Engine decelerating slowly", int, "%d" ; entry = engine_state_decel_fast, "Engine decelerating quickly", int, "%d" entry = engine_state_overrun, "Engine in overrun", int, "%d" entry = engine_state_idle, "Engine idling", int, "%d" entry = engine_state_wot, "Engine WOT", int, "%d" entry = tc_slipxtime, "TC slip * time", float, "%.1f" entry = loop, "Loop", int, "%d" entry = can_error, "CAN error bits", int, "%d" entry = can_error_cnt, "CAN error count", int, "%d" entry = dome_fill_duty1, "Dome channel 1 fill duty", int, "%d", { boost_ctl_settings_on && boost_ctl_settings_dome } ; entry = dome_fill_duty2, "Dome channel 2 fill duty", int, "%d", { boost_dome_settings2_on } entry = dome_empty_duty1, "Dome channel 1 empty duty", int, "%d", { boost_ctl_settings_on && boost_ctl_settings_dome } ; entry = dome_empty_duty2, "Dome channel 2 empty duty", int, "%d", { boost_dome_settings2_on } entry = app, "Accelerator Pedal/Grip Position", float, "%.2f", { etc_opt_on } entry = throttle_targ, "Throttle Target", float, "%.2f", { etc_opt_on } entry = looptime, "Mainloop time", int, "%d" ;status flag bits ; entry = needBurnYesNo, "status: Need Burn", int, "yesNo" ; entry = dataLostYesNo, "status: Data Lost", int, "yesNo" ; entry = configErrYesNo, "status: Config Error", int, "yesNo" entry = rpmSyncedYesNo, "status: RPM Sync", int, "yesNo" entry = fueltswYesNo "status: Fuel tableswitch", int, "yesNo" entry = spktswYesNo "status: Spark tableswitch", int, "yesNo" entry = fullsyncYesNo, "status: Full RPM Sync", int, "yesNo" entry = n2o1OnOff, "status: N2O 1", int, "onOff", {N2Oopt_2} entry = n2o2OnOff, "status: N2O 2", int, "onOff", {N2Oopt_3} entry = launchYesNo, "status: Launch Armed", int, "onOff", {launch_opt_on > 0} entry = launchActive, "status: Launch Active", int, "activeInactive", {launch_opt_on > 0} entry = flatShiftYesNo, "status: Flat Shift", int, "yesNo", {launch_opt_on = 3} entry = sparkCutActive, "status: Spark Cut", int, "activeInactive" entry = overBoostActive, "status: Over Boost", int, "activeInactive", {OverBoostOption} entry = clIdleOnOff, "status: CL Idle", int, "onOff", {IdleCtl_alg} entry = fuelCutActive, "status: Fuel Cut", int, "activeInactive" ; entry = tLogOnOff, "status: T-Log", int, "onOff" entry = 3stepOnOff, "status: 3 Step", int, "onOff", {launch_3step_in} entry = testModeActive, "status: Test Mode", int, "activeInactive" entry = 3stepActive, "status: 3 Step", int, "activeInactive", {launch_3step_in} entry = softLimitActive, "status: Soft Limit", int, "activeInactive" entry = seqShiftActive, "status: Seq. Shift", int, "activeInactive", {shift_cut_on} entry = launchOnOff, "status: Launch On", int, "onOff", {launch_opt_on > 0} entry = egtWarnActive, "status: EGT Warn", int, "activeInactive", {egt_conf_action} entry = egtShutDwnActive, "status: EGT Shutdown", int, "activeInactive", {egt_conf_shutdown} entry = afrWarnActive, "status: AFR Warn", int, "activeInactive", {maxafr_opt1_on} entry = afrShutDwnActive, "status: AFR Shutdown", int, "activeInactive", {maxafr_opt1_on} entry = idleVeActive, "status: Idle VE", int, "activeInactive", {idleve_on} entry = idleAdvanceActive, "status: Idle Adv", int, "activeInactive", {idleadvance_on} entry = fanOnOff, "status: Fan", int, "onOff", {fanctl_settings_on} entry = mapSampleErrorActive, "status: MAP Sample Error", int, "activeInactive" entry = vvt1ErrYesNo, "status: VVT 1 Error", int, "yesNo", {vvt_out1} entry = vvt2ErrYesNo, "status: VVT 2 Error", int, "yesNo", {vvt_out2} entry = vvt3ErrYesNo, "status: VVT 3 Error", int, "yesNo", {vvt_out3} entry = vvt4ErrYesNo, "status: VVT 4 Error", int, "yesNo", {vvt_out4} entry = knockYesNo, "status: Knock", int, "yesNo", {knk_option} entry = acOnOff, "status: A/C", int, "onOff", {ac_idleup_settings} entry = checkEngineOnOff, "status: Check Engine", int, "onOff", {cel_port} entry = limpModeOnOff, "status: Limp Mode", int, "onOff", {cel_action1_map || cel_action1_mat || cel_action1_clt || cel_action1_tps || cel_action1_batt || cel_action1_ego || cel_action2_flex || cel_action2_egt || cel_action2_oil} entry = wiLowActive, "status: Water Inj Low", int, "activeInactive" entry = vssLaunchL/oActive, "status: VSS Launch L/O", int, "activeInactive" entry = vssLaunchOnOff, "status: VSS Launch", int, "onOff" entry = dbwFaultActive, "status: DBW Fault", int, "activeInactive" entry = oilShutDwnActive, "status: Oil Shutdown", int, "activeInactive" entry = fuelPressShutDwnActive, "status: Fuel Press. Shutdown", int, "activeInactive", {fp_opt_safety} entry = overRunFuelCutActive, "status: Overrun Fuel Cut", int, "activeInactive" entry = stoichSwitchingActive, "status: Stoich Switching", int, "activeInactive", {tsw_pin_stoich} entry = reqFuelSwitchingActive, "status: ReqFuel Switching", int, "activeInactive", {tsw_pin_rf} entry = boostSwitchingActive, "status: Boost Switching", int, "activeInactive", {boost_feats_tsw} entry = safetyShutdownActive, "status: Safety Shutdown", int, "activeInactive" entry = canRxOnOff, "status: CAN RX", int, "onOff", entry = canTxOnOff, "status: CAN TX", int, "onOff", entry = iobox1Active, "status: I/O Box 1", int, "activeInactive", {iobox_opta1} entry = iobox2Active, "status: I/O Box 2", int, "activeInactive", {iobox_opta2} entry = iobox3Active, "status: I/O Box 3", int, "activeInactive", {iobox_opta3} entry = canegt1Active, "status: CANEGT1", int, "activeInactive", {(egt_num > 0) && (egt_conf_input ==1)} entry = canegt2Active, "status: CANEGT2", int, "activeInactive", {(egt_num > 0) && (egt_conf_input ==1)} entry = ltTrimActive, "status: L.T Trim", int, "activeInactive", entry = sdWarnActive, "status: SD Warn", int, "activeInactive", { log_style_on2 > 0 } entry = sdcardYesNo, "status: SD Card", int, "yesNo", { log_style_on2 > 0 } entry = sdcardReadyYesNo, "status: SD Ready", int, "yesNo", { log_style_on2 > 0 } entry = sdcardLogActive, "status: SD Log", int, "activeInactive", { log_style_on2 > 0 } entry = sdCardErrYesNo, "status: SD Error", int, "yesNo", { log_style_on2 > 0 } entry = gammTuneErrYesNo, "status: Tune Error", int, "yesNo" entry = porta0, "port:A0 Injector A", int, "highLow" entry = porta1, "port:A1 Injector B", int, "highLow" entry = porta2, "port:A2 Injector C", int, "highLow" entry = porta3, "port:A3 Injector D", int, "highLow" entry = porta4, "port:A4 Injector E", int, "highLow" entry = porta5, "port:A5 Injector F", int, "highLow" entry = porta6, "port:A6 Injector G", int, "highLow" entry = porta7, "port:A7 Injector H", int, "highLow" entry = portb0, "port:B0 Spark A", int, "highLow" entry = portb1, "port:B1 Spark B", int, "highLow" entry = portb2, "port:B2 Spark C", int, "highLow" entry = portb3, "port:B3 Spark D", int, "highLow" entry = portb4, "port:B4 Spark E", int, "highLow" entry = portb5, "port:B5 Spark F", int, "highLow" entry = portb6, "port:B6 Spark G", int, "highLow" entry = portb7, "port:B7 Spark H", int, "highLow" entry = porte0, "port:E0 Digital Switched In 4", int, "highLow" entry = porte1, "port:E1 Digital Switched In 5", int, "highLow" entry = porte1, "port:E1 PE1", int, "highLow" entry = porte2, "port:E2 Digital Switched In 1", int, "highLow" entry = porte4, "port:E4 Fuel Pump", int, "highLow" entry = porth6, "port:H6 Digital Switched In 3", int, "highLow" entry = porth7, "port:H7 Digital Switched 12v In", int, "highLow" entry = portk0, "port:K0 Tach Out", int, "highLow" entry = portk2, "port:K2 Digital Switched In 2",int, "highLow" entry = portj0, "port:J0 Stepper Out 1", int, "highLow" entry = portj1, "port:J1 Stepper Out 2", int, "highLow" entry = portm2, "port:M2 Knock Interface", int, "highLow" entry = portm3, "port:M3 knock Interface", int, "highLow" entry = portm4, "port:M4 Knock Interface", int, "highLow" entry = portm5, "port:M5 Knock Interface", int, "highLow" entry = portm6, "port:M6 IAC EN", int, "highLow" entry = portj7, "port:J7 Knock Interface", int, "highLow" entry = portp2, "port:P2 PWM Out 2", int, "highLow" entry = portp3, "port:P3 High Current Out 3", int, "highLow" entry = portp4, "port:P4 High Current Out 1", int, "highLow" entry = portp5, "port:P5 High Current Out 2", int, "highLow" entry = portp6, "port:P6 PWM Out3", int, "highLow" entry = portp7, "port:P7 PWM / Idle Out 1", int, "highLow" entry = portt0, "port:T0 CKP", int, "highLow" entry = portt1, "port:T1 Injector I", int, "highLow" entry = portt2, "port:T2 CMP", int, "highLow" entry = portt3, "port:T3 Injector J", int, "highLow" entry = portt4, "port:T4 Digital Frequency In 1", int, "highLow" entry = portt5, "port:T5 Digital Frequency In 2", int, "highLow" entry = portt6, "port:T6 Digital Frequency In 3", int, "highLow" entry = portt7, "port:T7 Digital I/O 5", int, "highLow" entry = canIn1OnOff, "port:CAN IN 1", int, "highLow", {enable_pollports_digin } entry = canIn2OnOff, "port:CAN IN 2", int, "highLow", {enable_pollports_digin } entry = canIn3OnOff, "port:CAN IN 3", int, "highLow", {enable_pollports_digin } entry = canIn4OnOff, "port:CAN IN 4", int, "highLow", {enable_pollports_digin } entry = canIn5OnOff, "port:CAN IN 5", int, "highLow", {enable_pollports_digin } entry = canIn6OnOff, "port:CAN IN 6", int, "highLow", {enable_pollports_digin } entry = canIn7OnOff, "port:CAN IN 7", int, "highLow", {enable_pollports_digin } entry = canIn8OnOff, "port:CAN IN 8", int, "highLow", {enable_pollports_digin } entry = cel_status_map, "cel:MAP Fualt", int, "activeInactive", {cel_opt2_map} entry = cel_status_mat, "cel:MAT Fault", int, "activeInactive", {cel_opt2_mat} entry = cel_status_clt, "cel:CLT Fault", int, "activeInactive", {cel_opt2_clt} entry = cel_status_tps, "cel:TPS Fault", int, "activeInactive", {cel_opt2_tps} entry = cel_status_batt, "cel:Batt Fault", int, "activeInactive", {cel_opt2_batt} entry = cel_status_afr0, "cel:AFR0 Fault", int, "activeInactive", {cel_opt2_afr0} entry = cel_status_sync, "cel:SYNC Fault", int, "activeInactive", {cel_opt2_sync} entry = cel_status_egt, "cel:EGT Fault", int, "activeInactive", {cel_opt2_egt} entry = cel_status_flex, "cel:Flex Fault", int, "activeInactive", {cel_opt3_flex} entry = cel_status_maf, "cel:MAF Fault", int, "activeInactive", entry = cel_status_knock, "cel:Knock Fault", int, "activeInactive", {knk_option} entry = cel_status_cam, "cel:CAM Fault", int, "activeInactive", entry = cel_status_oil, "cel:Oil Fault", int, "activeInactive", entry = cel_status_fp, "cel:Fuel Press Fault", int, "activeInactive", {fp_opt_safety} entry = cel_status_egtshut, "cel:CEL EGT Shutdown", int, "activeInactive", entry = cel_status_afrshut, "cel:CEL AFR Shutdown", int, "activeInactive", entry = cel_status2_winj, "cel:CEL W. Inj Low", int, "activeInactive", entry = engine_state_cruise, "state:Cruise", int, "activeInactive" entry = engine_state_accel_slow, "state:Accel", int, "activeInactive" entry = engine_state_decel_slow, "state:Decel", int, "activeInactive" entry = engine_state_overrun, "state:Overrun", int, "activeInactive" entry = engine_state_idle, "state:Idle", int, "activeInactive" entry = engine_state_wot, "state:Wot", int, "activeInactive" #if INTERNAL_LOG_FIELDS ;internalLogField = fieldName, class, type, offset, units, scale, translate, digits internalLogField = "Tooth number",scalar, U08, 1024, "#", 1,0,0 internalLogField = "Synch",scalar, U08, 1025, "", 1,0,0 internalLogField = "Cumulative cycles",scalar, U16, 1026, "#", 1,0,0 internalLogField = "Cumulative teeth",scalar, U16, 1028, "#", 1,0,0 internalLogField = "coilsel",scalar, U16, 1030, "", 1,0,0 internalLogField = "dwellsel",scalar, U16, 1032, "", 1,0,0 internalLogField = "PTM",scalar, U08, 1034, "", 1,0,0 internalLogField = "PTJ",scalar, U08, 1035, "", 1,0,0 internalLogField = "PTT",scalar, U08, 1036, "", 1,0,0 internalLogField = "PORTA",scalar, U08, 1037, "", 1,0,0 internalLogField = "PORTB",scalar, U08, 1038, "", 1,0,0 internalLogField = "next_dwell.tooth",scalar, U08, 1039, "", 1,0,0 internalLogField = "next_spark.tooth",scalar, U08, 1040, "", 1,0,0 internalLogField = "next_inj0.tooth",scalar, U08, 1041, "", 1,0,0 internalLogField = "next_inj1.tooth",scalar, U08, 1042, "", 1,0,0 internalLogField = "next_inj2.tooth",scalar, U08, 1043, "", 1,0,0 internalLogField = "next_inj3.tooth",scalar, U08, 1044, "", 1,0,0 internalLogField = "next_inj4.tooth",scalar, U08, 1045, "", 1,0,0 internalLogField = "next_inj5.tooth",scalar, U08, 1046, "", 1,0,0 internalLogField = "next_inj6.tooth",scalar, U08, 1047, "", 1,0,0 internalLogField = "next_inj7.tooth",scalar, U08, 1048, "", 1,0,0 ; internalLogField = "fuel_ovflo",scalar, U08, 1049, "", 1,0,0 internalLogField = "wheeldec_ovflo",scalar, U08, 1050, "", 1,0,0 internalLogField = "next_dwell.time32",scalar, U32, 1051, "", 1,0,0 internalLogField = "next_spark.time32",scalar, U32, 1055, "", 1,0,0 internalLogField = "TIE",scalar, U08, 1059, "", 1,0,0 internalLogField = "TFLG1",scalar, U08, 1060, "", 1,0,0 internalLogField = "TIMTIE",scalar, U08, 1061, "", 1,0,0 internalLogField = "TIMTFLG1",scalar, U08, 1062, "", 1,0,0 internalLogField = "next_inj[0].time",scalar, U16, 1063, "", 1,0,0 internalLogField = "next_inj[1].time",scalar, U16, 1065, "", 1,0,0 internalLogField = "next_inj[2].time",scalar, U16, 1067, "", 1,0,0 internalLogField = "next_inj[3].time",scalar, U16, 1069, "", 1,0,0 internalLogField = "next_inj[4].time",scalar, U16, 1071, "", 1,0,0 internalLogField = "next_inj[5].time",scalar, U16, 1073, "", 1,0,0 internalLogField = "next_inj[6].time",scalar, U16, 1075, "", 1,0,0 internalLogField = "next_inj[7].time",scalar, U16, 1077, "", 1,0,0 internalLogField = "XGSEM",scalar, U08, 1079, "", 1,0,0 internalLogField = "pwcalc1",scalar, U16, 1080, "", 1,0,0 internalLogField = "pwcalc2",scalar, U16, 1082, "", 1,0,0 internalLogField = "next_map_start_event.tooth",scalar, U08, 1084, "", 1,0,0 internalLogField = "XGCHID",scalar, U08, 1085, "", 1,0,0 internalLogField = "XGSWT",scalar, U08, 1086, "", 1,0,0 internalLogField = "xgate_deadman",scalar, U08, 1087, "", 1,0,0 internalLogField = "XGMCTL",scalar, U08, 1088, "", 1,0,0 internalLogField = "xgpc",scalar, U16, 1089, "", 1,0,0 internalLogField = "xgswe_count",scalar, U08, 1091, "", 1,0,0 internalLogField = "next_fuel",scalar, U08, 1092, "", 1,0,0 internalLogField = "inj1_cnt",scalar, U16, 1093, "", 1,0,0 internalLogField = "inj2_cnt",scalar, U16, 1095, "", 1,0,0 internalLogField = "inj3_cnt",scalar, U16, 1097, "", 1,0,0 internalLogField = "inj4_cnt",scalar, U16, 1099, "", 1,0,0 internalLogField = "inj5_cnt",scalar, U16, 1101, "", 1,0,0 internalLogField = "inj6_cnt",scalar, U16, 1103, "", 1,0,0 internalLogField = "inj7_cnt",scalar, U16, 1105, "", 1,0,0 internalLogField = "inj8_cnt",scalar, U16, 1107, "", 1,0,0 internalLogField = "pid_log_idle_p",scalar, S32, 1109, "", 0.00001,0,5 internalLogField = "pid_log_idle_i",scalar, S32, 1113, "", 0.00001,0,5 internalLogField = "pid_log_idle_d",scalar, S32, 1117, "", 0.00001,0,5 internalLogField = "pid_log_idle_count",scalar, U08, 1121, "", 1,0,0 internalLogField = "pid_log_boost1_p",scalar, S32, 1122, "", 0.00001,0,5 internalLogField = "pid_log_boost1_i",scalar, S32, 1126, "", 0.00001,0,5 internalLogField = "pid_log_boost1_d",scalar, S32, 1130, "", 0.00001,0,5 internalLogField = "pid_log_boost1_count",scalar, U08, 1134, "", 1,0,0 internalLogField = "pid_log_afr1_p",scalar, S32, 1135, "", 0.00001,0,5 internalLogField = "pid_log_afr1_i",scalar, S32, 1139, "", 0.00001,0,5 internalLogField = "pid_log_afr1_d",scalar, S32, 1143, "", 0.00001,0,5 internalLogField = "pid_log_afr1_count",scalar, U08, 1147, "", 1,0,0 internalLogField = "pid_log_vvt1_p",scalar, S32, 1148, "", 0.00001,0,5 internalLogField = "pid_log_vvt1_i",scalar, S32, 1152, "", 0.00001,0,5 internalLogField = "pid_log_vvt1_d",scalar, S32, 1156, "", 0.00001,0,5 internalLogField = "pid_log_vvt1_count",scalar, U08, 1160, "", 1,0,0 internalLogField = "pid_log_vvt2_p",scalar, S32, 1161, "", 0.00001,0,5 internalLogField = "pid_log_vvt2_i",scalar, S32, 1165, "", 0.00001,0,5 internalLogField = "pid_log_vvt2_d",scalar, S32, 1169, "", 0.00001,0,5 internalLogField = "pid_log_vvt2_count",scalar, U08, 1173, "", 1,0,0 internalLogField = "pid_log_vvt3_p",scalar, S32, 1174, "", 0.00001,0,5 internalLogField = "pid_log_vvt3_i",scalar, S32, 1178, "", 0.00001,0,5 internalLogField = "pid_log_vvt3_d",scalar, S32, 1182, "", 0.00001,0,5 internalLogField = "pid_log_vvt3_count",scalar, U08, 1186, "", 1,0,0 internalLogField = "pid_log_vvt4_p",scalar, S32, 1187, "", 0.00001,0,5 internalLogField = "pid_log_vvt4_i",scalar, S32, 1191, "", 0.00001,0,5 internalLogField = "pid_log_vvt4_d",scalar, S32, 1195, "", 0.00001,0,5 internalLogField = "pid_log_vvt4_count",scalar, U08, 1199, "", 1,0,0 #endif ;-------------------------------------------------------------------------------