;-------------------------------------------------------------------------------
; $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 CYL_12_16_SUPPORT
#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 0592.12 "
; 123456789.123456789.
[TunerStudio]
iniSpecVersion = 3.51
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 = "GM", 2490, -40, 100700, 30, 2238, 99, 177
thermOption = "Chrysler 85 up", 2490, 5.5,24500, 30.5, 8100, 88.3, 850
thermOption = "Ford", 2490, 0, 94000, 50, 11000, 98, 2370
thermOption = "Saab (Bosch)", 2490, 0, 5800, 80, 320, 100, 180
thermOption = "Mazda", 50000, -40, 2022088, 21, 68273, 99, 3715
thermOption = "Mitsu", 2490, -40, 100490, 30, 1875, 99, 125
thermOption = "Toyota", 2490, -40, 101890, 30, 2268, 99, 156
thermOption = "RX-7_CLT(S4 & S5)", 2490, -20, 16200, 20, 2500, 80, 300
thermOption = "RX-7_MAT", 42200, 20, 41500, 50, 11850, 85, 3500
thermOption = "VW L-Jet Cylinder Head Temp Sensor II", 1100, -13.888, 11600, 53.888, 703, 95.555, 207
thermOption = "RX-7_AFM(S5 in AFM)", 2490, -20, 16200, 20, 2500, 80, 300
thermOption = "BMW E30 325i", 2490, -10, 9300, 20, 2500, 80, 335
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"
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 = "JS5 (ADC6)", "JS4 (ADC7)", "EXT_MAP (ADC11)", "EGO2 (ADC12)", "Spare ADC (ADC13)", "MAP", "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", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "EGO", "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 = "EGO", $PIN_ADCS1
;Digital inputs. [0:5]
;options1 onwards
#define PIN_DIGIN1 = "Tableswitch", "PE0/JS7", "PE1", "JS10", "JS11", "JS5 (ADC6)", "JS4 (ADC7)", "Nitrous In", "Launch in", "Datalog In", "PT4 Spare in", "PT2 Cam in", "PE2 Flex", "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", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "EXT_MAP (ADC11)", "EGO2 (ADC12)", "Spare ADC (ADC13)", "INVALID", "INVALID", "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 = "PT4", "MS3X cam PT2", "JS10 PT5", "Datalog PT6"
;Digital outputs [0:6]
;options 1-39
#define PIN_DIGOUT1 = "IAC1", "IAC2", "FIDLE", "D15", "Nitrous 1", "Nitrous 2", "Tacho", "Idle", "Boost", "VVT", "Inj Bank 1", "Inj Bank 2", "D14", "D16", "JS11", "Inj A", "Inj B", "Inj C", "Inj D", "Inj E", "Inj F", "Inj G", "Inj H", "PT4", "IGN (JS10)", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "Spk A", "Spk B", "Spk C", "Spk D", "Spk E", "Spk F", "Spk G", "Spk 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 = "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "PK7", "PM2", "PK3", "PK1", "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_CANPWM = "INVALID", $PIN_DIGOUT1, $PIN_DIGOUT_CANPWM, $PIN_DIGOUT_CANOUT, $PIN_DIGOUT2
#define PIN_HWPWMOUT = "Boost", "Idle", "VVT", "Nitrous1", "Nitrous2", "Fidle", "Inj Bank 1", "Inj Bank 2"
#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 = "Tableswitch", "PE0/JS7", "PE1", "JS10", "JS11", "JS5 (ADC6)", "JS4 (ADC7)", "Nitrous In", "Launch in", "Datalog In", "PT4 Spare in", "PT2 Cam in", "PE2 Flex"
#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], "JS10 spark", "LEDs spark", "MS3X spark", "INVALID", "Tacho", "INVALID", "INVALID", "INVALID"
hardware_fuel = bits, U08, 77, [4:4], "Std fuel", "MS3X fuel"
hardware_injij = bits, U08, 77, [5:5], "Mainboard", "H3+H4"
hardware_cam = bits, U08, 77, [6:7], "JS10", "MS3X Cam in", "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:2], "Disable", "Innovate format", "AEM 4ch UEGO", "ECOTRONS ALM", "Generic", "AEM X UEGO", "CANEGT broadcast", "14point7 Spartan3"
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], "PE0/JS7", "JS11", "Flex input", "PT4"; (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], "MS3X Cam", "JS10"
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="Mainboard"
ego2port = bits, U08, 241, [0:5], $PIN_ADCS
mapport = bits, U08, 242, [0:5], $PIN_ADCS, 0="Mainboard"
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"
;gap 285
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"
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
; 1 Unused char
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", "Mid","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", "JS5 (ADC6)", "JS4 (ADC7)", "EXT_MAP (ADC11)", "EGO2 (ADC12)", "Spare ADC (ADC13)", "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
;504
;174 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)"
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_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 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_OFF
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"
#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 MS3x (if possible)", "Use V3"
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
ac_idleup_cl_lockout_mapadder = scalar, U08, 1023, "%", 0.10000, 0.00000, 0, 25.5, 0
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", "Inj1/I", "Inj2/J", "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", "CoilM", "CoilN", "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.100, 3
tcs_ontime = scalar, U16, 438, "s", 0.001, 0, 0.001, 0.200, 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], $PIN_ADCS_OFF
#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], $GEN_SENSOR_OPTS
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 = hardware_injij
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
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Влияет на общее сглаживание аналоговых входов."
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."
hardware_injij = "Настройка выходов для 9-й и 10-й форсунок (I/J).\nMainboard = использовать два канала batch fire на основной плате.\nH3+H4 = использовать запасные выводы на плате MS3X.\n\nВ обоих случаях убедитесь, что ВСЕ драйверы форсунок одинаковой конструкции для равномерной работы."
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% при максимальной мощности."
hardware_fuel = "Выбирает, подключены ли форсунки к секвенциальным выходам MS3X или к двум каналам batch fire на нижнем разъёме основной платы.\nДля секвенциального впрыска выберите MS3X. Для batch fire можно использовать основную плату."
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 критичен для точности дозирования на малых открытиях — неправильное значение вызовет бедную смесь на ХХ и при малых нагрузках."
; injOpena = "Injector dead time.\nTypically 0.7ms for low-z (~2.5ohm) and 0.9ms for high-z (~14ohm)"
; injOpen1 = "Injector dead time.\nTypically 0.9ms for high-z (~14ohm)"
opentime_opta_pwm = "Включает ШИМ-управление током (peak and hold) для низкоомных форсунок.\nНизкоомные форсунки (1–4 Ом) требуют ограничения тока для предотвращения перегрева. Высокоомные форсунки (12–16 Ом) не нуждаются в этом."
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_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_cl_lockout_mapadder = "When A/C is active the engine load will increase. Set this number so that the additional load doesn't kick you out of closed-loop idle."
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."
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-режим удобнее, так как требует всего одного кабеля для нескольких каналов."
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."
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 импульсов и проверить объём впрыснутого топлива."
testop_pwm = "Позволяет тестировать различные параметры токоограничения PWM.
PWM-управление используется для снижения тока удержания форсунок с высоким импедансом, управляемых через peak-and-hold драйвер. Неправильная настройка PWM может привести к перегреву форсунок или недостаточному открытию."
testinjPwmP = "Скважность ШИМ (PWM duty cycle) при тестировании.
Процент времени, в течение которого форсунка получает питание в режиме удержания. Типичные значения — 25–50% для peak-and-hold форсунок."
testinjPwmT = "Время полного тока в начале каждого импульса.
Период, в течение которого на форсунку подаётся полный ток для гарантированного открытия. После этого переключается на PWM для удержания с меньшим током. Обычно 1–3 мс."
testinjPwmPd = "Период ШИМ (PWM period), он же частота.
Определяет частоту переключения в режиме удержания. Слишком низкая частота может вызвать вибрацию иглы форсунки, слишком высокая — нагрев драйвера."
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 = 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"
#if CYL_12_16_SUPPORT
subMenu = injsettingsb, "Injector Dead-Time/PWM (9-16)"
#endif
subMenu = smallpw, "Injector Small Pulsewidths"
#if CYL_12_16_SUPPORT
subMenu = smallpwb, "Injector Small Pulsewidths (9-16)"
#endif
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"
#if CYL_12_16_SUPPORT
subMenu = egocont9_16, "AFR/EGO (9-16)"
#endif
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_trim1Tbl, "Injector 1 Trim", 7, { (hardware_fuel==0) && sequential_trim_on_off }
subMenu = inj_trim2Tbl, "Injector 2 Trim", 7, { (hardware_fuel==0) && sequential_trim_on_off }
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 }
#if CYL_12_16_SUPPORT
subMenu = inj_trimil, "Cyl 9-12 Trims", 7, { hardware_fuel && (nInjectors > 8) && sequential_trim_on_off }
subMenu = inj_trimmp, "Cyl 13-16 Trims", 7, { hardware_fuel && (nInjectors > 12) && sequential_trim_on_off }
#endif
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)}
#if CYL_12_16_SUPPORT
subMenu = spk_trimil, "Cyl 9-12 Trims", 8, { spk_mode3_trim && (nCylinders > 8)}
subMenu = spk_trimmp, "Cyl 13-16 Trims", 8, { spk_mode3_trim && (nCylinders > 12)}
#endif
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) }
#if CYL_12_16_SUPPORT
subMenu = injsettingsb2, "Alt. Injector Dead-time/PWM 2 (9-16)", 0, { (dualfuel_sw_on && dualfuel_sw2_injp) }
#endif
subMenu = smallpw2, "Alt. Injector Small Pulsewidths 2", 0, { (dualfuel_sw_on && dualfuel_sw2_smpw) }
#if CYL_12_16_SUPPORT
subMenu = smallpw2b, "Alt. Injector Small Pulsewidths 2 (9-16)", 0, { (dualfuel_sw_on && dualfuel_sw2_smpw) }
#endif
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 Tables", 0, {flashlock}
subMenu = std_ms2geno2, "Calibrate &AFR Table", 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_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"
cmdtest_pm3_off = "w\$tsCanId\x07\x02\x87\x00\x05\x30\x39\x01\xec"
cmdtest_pm3_pulsed = "w\$tsCanId\x07\x02\x87\x00\x05\x30\x39\x01\xee"
cmdtest_pm3_on = "w\$tsCanId\x07\x02\x87\x00\x05\x30\x39\x01\xef"
cmdtest_pm5_off = "w\$tsCanId\x07\x02\x87\x00\x05\x30\x39\x01\xf0"
cmdtest_pm5_pulsed = "w\$tsCanId\x07\x02\x87\x00\x05\x30\x39\x01\xf2"
cmdtest_pm5_on = "w\$tsCanId\x07\x02\x87\x00\x05\x30\x39\x01\xf3"
cmdtest_pm4_off = "w\$tsCanId\x07\x02\x87\x00\x05\x30\x39\x01\xf4"
cmdtest_pm4_pulsed = "w\$tsCanId\x07\x02\x87\x00\x05\x30\x39\x01\xf6"
cmdtest_pm4_on = "w\$tsCanId\x07\x02\x87\x00\x05\x30\x39\x01\xf7"
cmdtest_pj7_off = "w\$tsCanId\x07\x02\x87\x00\x05\x30\x39\x01\xf8"
cmdtest_pj7_pulsed = "w\$tsCanId\x07\x02\x87\x00\x05\x30\x39\x01\xfa"
cmdtest_pj7_on = "w\$tsCanId\x07\x02\x87\x00\x05\x30\x39\x01\xfb"
;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
#ifdef CYL_12_16_SUPPORT
dialog = injspkonoffchans2, "Outputs Per cylinder", xAxis
panel = buts_injspk_label
panel = buts_injspk9
panel = buts_injspk10
panel = buts_injspk11
panel = buts_injspk12
panel = buts_injspk13
panel = buts_injspk14
panel = buts_injspk15
panel = buts_injspk16
#endif
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
#ifdef CYL_12_16_SUPPORT
panel = injspkonoffchans2, South;, {status8 & 0x03} ; <--- this isn't ungreying
#endif
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."
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 = "Inj1, Inj2", hardware_fuel, {hardware_fuel== 0}
displayOnlyField = "MS3X InjA, InjB etc.", hardware_fuel, {hardware_fuel}
displayOnlyField = "Spark Hardware In Use", hardware_spk
displayOnlyField = "LED D14, D16, D15, JS11 etc.", hardware_spk, {hardware_spk== 0}
displayOnlyField = "MS3X SpkA, SpkB 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: PM3 - Injection LED D14", psEnabled[0], {psEnabled[0]}
displayOnlyField = "Programmable On/Off Output: PM4 - Accel LED D16", psEnabled[1], {psEnabled[1]}
displayOnlyField = "Programmable On/Off Output: PM5 - Warmup LED D15", psEnabled[2], {psEnabled[2]}
displayOnlyField = "Programmable On/Off Output: PJ0 - IAC2", psEnabled[3], {psEnabled[3]}
displayOnlyField = "Programmable On/Off Output: PJ1 - IAC1", psEnabled[4], {psEnabled[4]}
displayOnlyField = "Programmable On/Off Output: PJ7 - JS11", psEnabled[5], {psEnabled[5]}
displayOnlyField = "Programmable On/Off Output: PP2 - Idle", psEnabled[6], {psEnabled[6]}
displayOnlyField = "Programmable On/Off Output: PP3 - Boost", psEnabled[7], {psEnabled[7]}
displayOnlyField = "Programmable On/Off Output: PP4 - Nitrous 1", psEnabled[8], {psEnabled[8]}
displayOnlyField = "Programmable On/Off Output: PP5 - Nitrous 2", psEnabled[9], {psEnabled[9]}
displayOnlyField = "Programmable On/Off Output: PP6 - VVT", psEnabled[10], {psEnabled[10]}
displayOnlyField = "Programmable On/Off Output: PP7 - Fidle", psEnabled[11], {psEnabled[11]}
displayOnlyField = "Programmable On/Off Output: PT1 - V3 Inj 1", psEnabled[12], {psEnabled[12]}
displayOnlyField = "Programmable On/Off Output: PT3 - V3 Inj 2", psEnabled[13], {psEnabled[13]}
displayOnlyField = "Programmable On/Off Output: PT5 - JS10", psEnabled[14], {psEnabled[14]}
displayOnlyField = "Programmable On/Off Output: PK0 - Tacho", psEnabled[15], {psEnabled[15]}
displayOnlyField = "Programmable On/Off Output: PA0 - Inj A", psEnabled[16], {psEnabled[16]}
displayOnlyField = "Programmable On/Off Output: PA1 - Inj B", psEnabled[17], {psEnabled[17]}
displayOnlyField = "Programmable On/Off Output: PA2 - Inj C", psEnabled[18], {psEnabled[18]}
displayOnlyField = "Programmable On/Off Output: PA3 - Inj D", psEnabled[19], {psEnabled[19]}
displayOnlyField = "Programmable On/Off Output: PA4 - Inj E", psEnabled[20], {psEnabled[20]}
displayOnlyField = "Programmable On/Off Output: PA5 - Inj F", psEnabled[21], {psEnabled[21]}
displayOnlyField = "Programmable On/Off Output: PA6 - Inj G", psEnabled[22], {psEnabled[22]}
displayOnlyField = "Programmable On/Off Output: PA7 - Inj H", psEnabled[23], {psEnabled[23]}
displayOnlyField = "Programmable On/Off Output: PB0 - Spk A", psEnabled[24], {psEnabled[24]}
displayOnlyField = "Programmable On/Off Output: PB1 - Spk B", psEnabled[25], {psEnabled[25]}
displayOnlyField = "Programmable On/Off Output: PB2 - Spk C", psEnabled[26], {psEnabled[26]}
displayOnlyField = "Programmable On/Off Output: PB3 - Spk D", psEnabled[27], {psEnabled[27]}
displayOnlyField = "Programmable On/Off Output: PB4 - Spk E", psEnabled[28], {psEnabled[28]}
displayOnlyField = "Programmable On/Off Output: PB5 - Spk F", psEnabled[29], {psEnabled[29]}
displayOnlyField = "Programmable On/Off Output: PB6 - Spk G", psEnabled[30], {psEnabled[30]}
displayOnlyField = "Programmable On/Off Output: PB7 - Spk H", psEnabled[31], {psEnabled[31]}
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}
#ifdef CYL_12_16_SUPPORT
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 = "EGO 13 Port", egoport13, {egonum > 12}
; displayOnlyField = "EGO 14 Port", egoport14, {egonum > 13}
; displayOnlyField = "EGO 15 Port", egoport15, {egonum > 14}
; displayOnlyField = "EGO 16 Port", egoport16, {egonum > 15}
#endif
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 }
displayOnlyField = "Internal Knock Module Uses D14,D15,D16,JS11,PM2", knk_option_an, {(knk_option_an == 2)}
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 = "Internal RTC uses PM1 and PM3", opt142_rtc, {opt142_rtc == 1}
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 = "Inj Bank 1", { bitStringValue( portLabels , portusage_t[1] ) }
displayOnlyField = "Inj Bank 2", { 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 = "FP", { 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 = "Idle", { bitStringValue( portLabels , portusage_p[2] ) }
displayOnlyField = "Boost", { bitStringValue( portLabels , portusage_p[3] ) }
displayOnlyField = "Nitrous 1", { bitStringValue( portLabels , portusage_p[4] ) }
displayOnlyField = "Nitrous 2", { bitStringValue( portLabels , portusage_p[5] ) }
displayOnlyField = "VVT", { bitStringValue( portLabels , portusage_p[6] ) }
displayOnlyField = "FIDLE", { bitStringValue( portLabels , portusage_p[7] ) }
displayOnlyField = "JS11", { bitStringValue( portLabels , portusage_j[7] ) }
displayOnlyField = "Inject LED (D14)", { bitStringValue( portLabels , portusage_m[3] ) }
displayOnlyField = "Accel LED (D16)", { bitStringValue( portLabels , portusage_m[4] ) }
displayOnlyField = "Warmup LED (D15)", { bitStringValue( portLabels , portusage_m[5] ) }
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 & 4 }, "Off", "On", 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 & 64 }, "Off", "On", white, black, green, black
indicator = { portp & 128 }, "Off", "On", white, black, green, black
indicator = { portmj & 128 }, "Off", "On", white, black, green, black
indicator = { portmj & 8 }, "Off", "On", white, black, green, black
indicator = { portmj & 16 }, "Off", "On", white, black, green, black
indicator = { portmj & 32 }, "Off", "On", white, black, green, black
dialog = pinusage3, ".", yAxis ; 17 rows
displayOnlyField = "Primary tach", { bitStringValue( portLabels , portusage_t[0] ) }
displayOnlyField = "MS3X Cam", { bitStringValue( portLabels , portusage_t[2] ) }
displayOnlyField = "Flex", { bitStringValue( portLabels , portusage_e[2] ) }
displayOnlyField = "Tableswitch in", { bitStringValue( portLabels , portusage_h[6] ) }
displayOnlyField = "Nitrous in", { bitStringValue( portLabels , portusage_h[7] ) }
displayOnlyField = "Datalog In", { bitStringValue( portLabels , portusage_t[6] ) }
displayOnlyField = "Launch In", { bitStringValue( portLabels , portusage_k[2] ) }
displayOnlyField = "PT4", { bitStringValue( portLabels , portusage_t[4] ) }
displayOnlyField = "PT5/JS10", { bitStringValue( portLabels , portusage_t[5] ) }
displayOnlyField = "PE0", { bitStringValue( portLabels , portusage_e[0] ) }
displayOnlyField = "PE1", { 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 = { porteh & 64 }, "0V", "5V", white, black, green, black
indicator = { porteh & 128 }, "0V", "5V", white, black, green, black
indicator = { portt & 64 }, "0V", "5V", white, black, green, black
indicator = { portk & 4 }, "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 = { 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 = "EXT_MAP (ADC11)", { bitStringValue( portLabels , portusage_ad0h[3] ) }
displayOnlyField = "EGO2 (ADC12)", { bitStringValue( portLabels , portusage_ad0h[4] ) }
displayOnlyField = "SPAREADC (ADC13)", { bitStringValue( portLabels , portusage_ad0h[5] ) }
displayOnlyField = "MAP (ADC0)", { bitStringValue( portLabels , portusage_ad0l[0] ) }
displayOnlyField = "EGO (ADC5)", { bitStringValue( portLabels , portusage_ad0l[5] ) }
displayOnlyField = "JS5 (ADC6)", { bitStringValue( portLabels , portusage_ad0l[6] ) }
displayOnlyField = "JS4 (ADC7)", { bitStringValue( portLabels , portusage_ad0l[7] ) }
displayOnlyField = "(PK1)", { bitStringValue( portLabels , portusage_k[1] ) }
displayOnlyField = "(PK3)", { bitStringValue( portLabels , portusage_k[3] ) }
displayOnlyField = "(PK7)", { bitStringValue( portLabels , portusage_k[7] ) }
displayOnlyField = "(PM2)", { bitStringValue( portLabels , portusage_m[2] ) }
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 ; portad0l[6]
indicator = { deadValue }, "-", "-", white, black, white, black ; portad0l[7]
indicator = { portk1 }, "Off", "On", white, black, green, black
indicator = { portk3 }, "Off", "On", white, black, green, black
indicator = { portk7 }, "Off", "On", white, black, green, black
indicator = { portm2 }, "Off", "On", white, black, green, 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
panel = pinusage10i ;, East
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
#if CYL_12_16_SUPPORT
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 = spk_trimmTblTitle, "Cyl #13"
panel = spk_trimmTbl
dialog = spk_trimnTblTitle, "Cyl #14"
panel = spk_trimnTbl
dialog = spk_trimoTblTitle, "Cyl #15"
panel = spk_trimoTbl
dialog = spk_trimpTblTitle, "Cyl #16"
panel = spk_trimpTbl
dialog = spk_trimmpt, "", xAxis
panel = spk_trimmTblTitle
panel = spk_trimnTblTitle
dialog = spk_trimmpb, "", xAxis
panel = spk_trimoTblTitle
panel = spk_trimpTblTitle
dialog = spk_trimmp,"Spark Cyl 13-16 Trims"
topicHelp = "file://$getProjectsDirPath()/docs/Megasquirt3_TunerStudio_MS_Lite_Reference-1.5.pdf#spktrim1-4"
panel = spk_trimmpt
panel = spk_trimmpb
#endif
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
#if CYL_12_16_SUPPORT
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 = inj_trimmTblTitle, "Cyl #13"
panel = inj_trimmTbl
dialog = inj_trimnTblTitle, "Cyl #14"
panel = inj_trimnTbl
dialog = inj_trimoTblTitle, "Cyl #15"
panel = inj_trimoTbl
dialog = inj_trimpTblTitle, "Cyl #16"
panel = inj_trimpTbl
dialog = inj_trimmpt, "", xAxis
panel = inj_trimmTblTitle
panel = inj_trimnTblTitle
dialog = inj_trimmpb, "", xAxis
panel = inj_trimoTblTitle
panel = inj_trimpTblTitle
dialog = inj_trimmp,"Injector Cyl 13-16 Trims"
topicHelp = "file://$getProjectsDirPath()/docs/Megasquirt3_TunerStudio_MS_Lite_Reference-1.5.pdf#injtrim1-4"
panel = inj_trimmpt
panel = inj_trimmpb
#endif
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 = "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 = "Idle-up CL load Allowance", ac_idleup_cl_lockout_mapadder, { 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, { OverBoostOption && boost_ctl_settings_cl}
field = "Tolerance", boosttol, {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 (2nd box)", canegt_base2, {(egt_num > 8) && (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 = "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 = "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 = "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
field = "-"
field = "Note: The following only applies to Inj1 and Inj2"
field = "Injector PWM parameters", testop_pwm
field = "PWM Current Limit", testinjPwmP, { testop_pwm }
field = "PWM Time Threshold", testinjPwmT, { testop_pwm }
field = "Injector PWM Period", testinjPwmPd , { testop_pwm }
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
; "PM3 - Injection LED D14", "PM4 - Accel LED D16", "PM5 - Warmup LED D15", "PJ0 - IAC2", "PJ1 - IAC1", "PJ7 - JS11", "PP2 - Idle", "PP3 - Boost", "PP4 - Nitrous 1", "PP5 - Nitrous 2", "PP6 - VVT", "PP7 - Fidle", "PT1 - V3 Inj 1", "PT3 - V3 Inj 2", "PT5 - JS10", "PK0 - Tacho", "PA0 - Inj A", "PA1 - Inj B", "PA2 - Inj C", "PA3 - Inj D", "PA4 - Inj E", "PA5 - Inj F", "PA6 - Inj G", "PA7 - Inj H",
dialog = outputtest16, "PP2-Idle", yAxis
commandButton = "Off", cmdtest_pp2_off, { status3 & 8 }
commandButton = "Pulsed", cmdtest_pp2_pulsed, { status3 & 8 }
commandButton = "On", cmdtest_pp2_on, { status3 & 8 }
dialog = outputtest10, "PP3-Boost", yAxis
commandButton = "Off", cmdtest_pp3_off, { status3 & 8 }
commandButton = "Pulsed", cmdtest_pp3_pulsed, { status3 & 8 }
commandButton = "On", cmdtest_pp3_on, { status3 & 8 }
dialog = outputtest11, "PP4-Nitrous1", yAxis
commandButton = "Off", cmdtest_pp4_off, { status3 & 8 }
commandButton = "Pulsed", cmdtest_pp4_pulsed, { status3 & 8 }
commandButton = "On", cmdtest_pp4_on, { status3 & 8 }
dialog = outputtest12, "PP5-Nitrous2", yAxis
commandButton = "Off", cmdtest_pp5_off, { status3 & 8 }
commandButton = "Pulsed", cmdtest_pp5_pulsed, { status3 & 8 }
commandButton = "On", cmdtest_pp5_on, { status3 & 8 }
dialog = outputtest13, "PP6-VVT", yAxis
commandButton = "Off", cmdtest_pp6_off, { status3 & 8 }
commandButton = "Pulsed", cmdtest_pp6_pulsed, { status3 & 8 }
commandButton = "On", cmdtest_pp6_on, { status3 & 8 }
dialog = outputtest14, "PP7-Fidle", yAxis
commandButton = "Off", cmdtest_pp7_off, { status3 & 8 }
commandButton = "Pulsed", cmdtest_pp7_pulsed, { status3 & 8 }
commandButton = "On", cmdtest_pp7_on, { status3 & 8 }
dialog = outputtest15, "PK0-Tacho", 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_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_pp2_off, { status3 & 8 }
commandButton = "Off", cmdtest_pp3_off, { status3 & 8 }
commandButton = "Off", cmdtest_pp4_off, { status3 & 8 }
commandButton = "Off", cmdtest_pp5_off, { status3 & 8 }
commandButton = "Off", cmdtest_pp6_off, { status3 & 8 }
commandButton = "Off", cmdtest_pp7_off, { status3 & 8 }
commandButton = "Off", cmdtest_pj7_off, { status3 & 8 }
commandButton = "Off", cmdtest_pm3_off, { status3 & 8 }
commandButton = "Off", cmdtest_pm4_off, { status3 & 8 }
commandButton = "Off", cmdtest_pm5_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_pp2_on, { status3 & 8 }
commandButton = "On", cmdtest_pp3_on, { status3 & 8 }
commandButton = "On", cmdtest_pp4_on, { status3 & 8 }
commandButton = "On", cmdtest_pp5_on, { status3 & 8 }
commandButton = "On", cmdtest_pp6_on, { status3 & 8 }
commandButton = "On", cmdtest_pp7_on, { status3 & 8 }
commandButton = "On", cmdtest_pj7_on, { status3 & 8 }
commandButton = "On", cmdtest_pm3_on, { status3 & 8 }
commandButton = "On", cmdtest_pm4_on, { status3 & 8 }
commandButton = "On", cmdtest_pm5_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_pp2_pulsed, { status3 & 8 }
commandButton = "Pulsed", cmdtest_pp3_pulsed, { status3 & 8 }
commandButton = "Pulsed", cmdtest_pp4_pulsed, { status3 & 8 }
commandButton = "Pulsed", cmdtest_pp5_pulsed, { status3 & 8 }
commandButton = "Pulsed", cmdtest_pp6_pulsed, { status3 & 8 }
commandButton = "Pulsed", cmdtest_pp7_pulsed, { status3 & 8 }
commandButton = "Pulsed", cmdtest_pj7_pulsed, { status3 & 8 }
commandButton = "Pulsed", cmdtest_pm3_pulsed, { status3 & 8 }
commandButton = "Pulsed", cmdtest_pm4_pulsed, { status3 & 8 }
commandButton = "Pulsed", cmdtest_pm5_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, "Inj1", yAxis
commandButton = "Off", cmdtest_pt1_off, { status3 & 8 }
commandButton = "Pulsed", cmdtest_pt1_pulsed, { status3 & 8 }
commandButton = "On", cmdtest_pt1_on, { status3 & 8 }
dialog = outputtestec, "Inj2", yAxis
commandButton = "Off", cmdtest_pt3_off, { status3 & 8 }
commandButton = "Pulsed", cmdtest_pt3_pulsed, { status3 & 8 }
commandButton = "On", cmdtest_pt3_on, { status3 & 8 }
dialog = outputtestf0, "PM2", yAxis
commandButton = "Off", cmdtest_pm2_off, { status3 & 8 }
commandButton = "Pulsed", cmdtest_pm2_pulsed, { status3 & 8 }
commandButton = "On", cmdtest_pm2_on, { status3 & 8 }
dialog = outputtestf4, "PK1", yAxis
commandButton = "Off", cmdtest_pk1_off, { status3 & 8 }
commandButton = "Pulsed", cmdtest_pk1_pulsed, { status3 & 8 }
commandButton = "On", cmdtest_pk1_on, { status3 & 8 }
dialog = outputtestf8, "PK3", yAxis
commandButton = "Off", cmdtest_pk3_off, { status3 & 8 }
commandButton = "Pulsed", cmdtest_pk3_pulsed, { status3 & 8 }
commandButton = "On", cmdtest_pk3_on, { status3 & 8 }
dialog = outputtestfc, "PK7", yAxis
commandButton = "Off", cmdtest_pk7_off, { status3 & 8 }
commandButton = "Pulsed", cmdtest_pk7_pulsed, { status3 & 8 }
commandButton = "On", cmdtest_pk7_on, { status3 & 8 }
dialog = outputtest1e4, "PT4", yAxis
commandButton = "Off", cmdtest_pt4_off, { status3 & 8 }
commandButton = "Pulsed", cmdtest_pt4_pulsed, { status3 & 8 }
commandButton = "On", cmdtest_pt4_on, { status3 & 8 }
dialog = outputtest1e8, "PT5/JS10", yAxis
commandButton = "Off", cmdtest_pt5_off, { status3 & 8 }
commandButton = "Pulsed", cmdtest_pt5_pulsed, { status3 & 8 }
commandButton = "On", cmdtest_pt5_on, { status3 & 8 }
dialog = outputtest1ec, "D14", yAxis
commandButton = "Off", cmdtest_pm3_off, { status3 & 8 }
commandButton = "Pulsed", cmdtest_pm3_pulsed, { status3 & 8 }
commandButton = "On", cmdtest_pm3_on, { status3 & 8 }
dialog = outputtest1f0, "D15", yAxis
commandButton = "Off", cmdtest_pm5_off, { status3 & 8 }
commandButton = "Pulsed", cmdtest_pm5_pulsed, { status3 & 8 }
commandButton = "On", cmdtest_pm5_on, { status3 & 8 }
dialog = outputtest1f4, "D16", yAxis
commandButton = "Off", cmdtest_pm4_off, { status3 & 8 }
commandButton = "Pulsed", cmdtest_pm4_pulsed, { status3 & 8 }
commandButton = "On", cmdtest_pm4_on, { status3 & 8 }
dialog = outputtest1f8, "JS11", yAxis
commandButton = "Off", cmdtest_pj7_off, { status3 & 8 }
commandButton = "Pulsed", cmdtest_pj7_pulsed, { status3 & 8 }
commandButton = "On", cmdtest_pj7_on, { status3 & 8 }
dialog = outputtest_io2, "Outputs", xAxis
panel = outputteste0
panel = outputteste4
panel = outputteste8
panel = outputtestec
panel = outputtestf0
panel = outputtestf4
panel = outputtestf8
panel = outputtestfc
dialog = outputtest_io_new2_left, "Outputs", yAxis
displayOnlyField = "Inj Bank 1", { bitStringValue( portLabels , portusage_t[1] ) }
displayOnlyField = "Inj Bank 2", { bitStringValue( portLabels , portusage_t[3] ) }
displayOnlyField = "(PK1)", { bitStringValue( portLabels , portusage_k[1] ) }
displayOnlyField = "(PK3)", { bitStringValue( portLabels , portusage_k[3] ) }
displayOnlyField = "(PK7)", { bitStringValue( portLabels , portusage_k[7] ) }
displayOnlyField = "(PM2)", { bitStringValue( portLabels , portusage_m[2] ) }
displayOnlyField = "PT4", { bitStringValue( portLabels , portusage_t[4] ) }
displayOnlyField = "PT5/JS10", { bitStringValue( portLabels , portusage_t[5] ) }
dialog = outputtest_io_new2_off, ".", yAxis
commandButton = "Off", cmdtest_pt1_off, { status3 & 8 }
commandButton = "Off", cmdtest_pt3_off, { status3 & 8 }
commandButton = "Off", cmdtest_pk1_off, { status3 & 8 }
commandButton = "Off", cmdtest_pt3_off, { status3 & 8 }
commandButton = "Off", cmdtest_pk7_off, { status3 & 8 }
commandButton = "Off", cmdtest_pm2_off, { status3 & 8 }
commandButton = "Off", cmdtest_pt4_off, { status3 & 8 }
commandButton = "Off", cmdtest_pt5_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_pk1_pulsed, { status3 & 8 }
commandButton = "Pulsed", cmdtest_pt3_pulsed, { status3 & 8 }
commandButton = "Pulsed", cmdtest_pk7_pulsed, { status3 & 8 }
commandButton = "Pulsed", cmdtest_pm2_pulsed, { status3 & 8 }
commandButton = "Pulsed", cmdtest_pt4_pulsed, { status3 & 8 }
commandButton = "Pulsed", cmdtest_pt5_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_pk1_on, { status3 & 8 }
commandButton = "On", cmdtest_pt3_on, { status3 & 8 }
commandButton = "On", cmdtest_pk7_on, { status3 & 8 }
commandButton = "On", cmdtest_pm2_on, { status3 & 8 }
commandButton = "On", cmdtest_pt4_on, { status3 & 8 }
commandButton = "On", cmdtest_pt5_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 = outputtest1ec
panel = outputtest1f0
panel = outputtest1f4
panel = outputtest1f8
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 = "Inj Bank 1", { bitStringValue( portLabels , portusage_t[1] ) }
displayOnlyField = "Inj Bank 2", { 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_pwm
; panel = outputtest_io1inj
; panel = outputtest_io1spk
panel = outputtest_io3_new
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 = "Nitrous-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 = "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
#if CYL_12_16_SUPPORT
field = "Injector I/J Outputs", hardware_injij, { nCylinders > 8}
#endif
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}
#if CYL_12_16_SUPPORT
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 = "M.", firem, { nCylinders > 12}
field = "N.", firen, { nCylinders > 13}
field = "O.", fireo, { nCylinders > 14}
field = "P.", firep, { nCylinders > 15}
#endif
field = ""
dialog = firingorder, "", xAxis
panel = firingorder1, West
#if CYL_12_16_SUPPORT
panel = firingorder2, East
#endif
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 = "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}
dialog = injchar_ms3x, "MS3X Injectors", xAxis
panel = ot_curve
dialog = injchar_v3, "Mainboard Injectors", yAxis
field = "Deadtime", opentime_opta, { (nCylinders < 8) || (opentime_opt1_master == 1) }
field = "PWM Current Limiting", opentime_opta_pwm
field = "PWM Current Limit", injPwmP, {opentime_opta_pwm}
field = "PWM Time Threshold", injPwmT, {opentime_opta_pwm}
field = "Injector PWM Period", injPwmPd, {opentime_opta_pwm}
field = ""
field = "BANK 2 Different Settings", opentime_optb_own, { (nCylinders < 8) || (opentime_opt1_master == 0) }
field = "Deadtime", opentime_optb, {opentime_optb_own && ((nCylinders < 8) || (opentime_opt1_master == 0))}
field = "PWM Current Limiting", opentime_optb_pwm, {opentime_optb_own}
field = "PWM Current Limit", injPwmP2, {opentime_optb_own && opentime_optb_pwm}
field = "PWM Time Threshold", injPwmT2, {opentime_optb_own && opentime_optb_pwm}
field = "Injector PWM Period", injPwmPd2, {opentime_optb_own && opentime_optb_pwm}
; 9-16
dialog = ot_curveb, "", yAxis
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}
field = "Inj M", opentime_opt13, {opentime_opt1_master}
field = "Inj N", opentime_opt14, {opentime_opt1_master}
field = "Inj O", opentime_opt15, {opentime_opt1_master}
field = "Inj P", opentime_opt16, {opentime_opt1_master}
;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 = injsettingsb, "Injector Dead-Time/PWM (9-16)", xAxis
topicHelp = "file://$getProjectsDirPath()/docs/Megasquirt3_TunerStudio_MS_Lite_Reference-1.5.pdf#injdt"
panel = ot_curveb
dialog = injCharswest, "", yAxis
panel = injchar_ms3x, North
panel = injchar_v3, South
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
dialog = ot_curve2b, "", yAxis
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}
field = "Inj M", opentime2_opt13, {opentime2_opt1_master}
field = "Inj N", opentime2_opt14, {opentime2_opt1_master}
field = "Inj O", opentime2_opt15, {opentime2_opt1_master}
field = "Inj P", opentime2_opt16, {opentime2_opt1_master}
dialog = injsettingsb2, "Injector Dead-Time/PWM 2 (9-16)", xAxis
topicHelp = "file://$getProjectsDirPath()/docs/Megasquirt3_TunerStudio_MS_Lite_Reference-1.5.pdf#injdt2"
panel = ot_curve2b
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}
dialog = injchar_ms3x_2, "MS3X Injectors", xAxis
panel = ot_curve2
dialog = injchar_v3_2, "Mainboard Injectors", yAxis
field = "Deadtime", opentime2_opta, { (nCylinders < 8) || (opentime2_opt1_master == 1) }
field = "PWM Current Limiting", opentime2_opta_pwm
field = "PWM Current Limit", inj2PwmP, {opentime2_opta_pwm}
field = "PWM Time Threshold", inj2PwmT, {opentime2_opta_pwm}
field = "Injector PWM Period", inj2PwmPd, {opentime2_opta_pwm}
field = ""
field = "BANK 2 Different Settings", opentime2_optb_own
field = "Deadtime", opentime2_optb, {opentime2_optb_own}
field = "PWM Current Limiting", opentime2_optb_pwm, {opentime2_optb_own}
field = "PWM Current Limit", inj2PwmP2, {opentime2_optb_own && opentime2_optb_pwm}
field = "PWM Time Threshold", inj2PwmT2, {opentime2_optb_own && opentime2_optb_pwm}
field = "Injector PWM Period", inj2PwmPd2, {opentime2_optb_own && opentime2_optb_pwm}
dialog = injCharswest2, "", yAxis
panel = injchar_ms3x_2, North
panel = injchar_v3_2, South
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 = "MS3X Injector A", smallpw2_opt1, { smallpw2_opt1_master }
field = "MS3X Injector B", smallpw2_opt2, { smallpw2_opt1_master }
field = "MS3X Injector C", smallpw2_opt3, { smallpw2_opt1_master }
field = "MS3X Injector D", smallpw2_opt4, { smallpw2_opt1_master }
field = "MS3X Injector E", smallpw2_opt5, { smallpw2_opt1_master }
field = "MS3X Injector F", smallpw2_opt6, { smallpw2_opt1_master }
field = "MS3X Injector G", smallpw2_opt7, { smallpw2_opt1_master }
field = "MS3X Injector H", smallpw2_opt8, { smallpw2_opt1_master }
field = ""
field = "Mainboard Bank 1", smallpw2_opta, { smallpw2_opt1_master }
field = ""
field = "Mainboard Bank 2", smallpw2_optb, { smallpw2_opt1_master }
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 = "MS3X Injector A", smallpw_opt1, { smallpw_opt1_master && ((hardware_fuel) ) }
field = "MS3X Injector B", smallpw_opt2, { smallpw_opt1_master && ((hardware_fuel) && (nInjectors > 1)) }
field = "MS3X Injector C", smallpw_opt3, { smallpw_opt1_master && ((hardware_fuel) && (nInjectors > 2)) }
field = "MS3X Injector D", smallpw_opt4, { smallpw_opt1_master && ((hardware_fuel) && (nInjectors > 3)) }
field = "MS3X Injector E", smallpw_opt5, { smallpw_opt1_master && ((hardware_fuel) && (nInjectors > 4)) }
field = "MS3X Injector F", smallpw_opt6, { smallpw_opt1_master && ((hardware_fuel) && (nInjectors > 5)) }
field = "MS3X Injector G", smallpw_opt7, { smallpw_opt1_master && ((hardware_fuel) && (nInjectors > 6)) }
field = "MS3X Injector H", smallpw_opt8, { smallpw_opt1_master && ((hardware_fuel) && (nInjectors > 7)) }
field = ""
field = "Mainboard Bank 1", smallpw_opta, { smallpw_opt1_master }
field = ""
field = "Mainboard Bank 2", smallpw_optb, { smallpw_opt1_master }
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 = smallpwb, ""
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)) }
field = "Injector M", smallpw_opt13, { smallpw_opt1_master && ((hardware_fuel) && (nInjectors > 12)) }
field = "Injector N", smallpw_opt14, { smallpw_opt1_master && ((hardware_fuel) && (nInjectors > 13)) }
field = "Injector O", smallpw_opt15, { smallpw_opt1_master && ((hardware_fuel) && (nInjectors > 14)) }
field = "Injector P", smallpw_opt16, { smallpw_opt1_master && ((hardware_fuel) && (nInjectors > 15)) }
dialog = smallpw2b, ""
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)) }
field = "Injector M", smallpw2_opt13, { smallpw2_opt1_master && ((hardware_fuel) && (nInjectors > 12)) }
field = "Injector N", smallpw2_opt14, { smallpw2_opt1_master && ((hardware_fuel) && (nInjectors > 13)) }
field = "Injector O", smallpw2_opt15, { smallpw2_opt1_master && ((hardware_fuel) && (nInjectors > 14)) }
field = "Injector P", smallpw2_opt16, { smallpw2_opt1_master && ((hardware_fuel) && (nInjectors > 15)) }
; 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 separate +/- 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}
; 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 = "MS3X Inj A"
field = "MS3X Inj B"
field = "MS3X Inj C"
field = "MS3X Inj D"
field = "MS3X Inj E"
field = "MS3X Inj F"
field = "MS3X Inj G"
field = "MS3X Inj H"
field = "V3 Inj 1"
field = "V3 Inj 2"
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
dialog = egomapping, "AFR / EGO Sensor Mapping", xAxis
panel = egomap_inj
panel = egomap_ego
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 = egomap_inj2, "", yAxis
field = "Injector"
field = "InjI"
field = "InjJ"
field = "InjK"
field = "InjL"
field = "InjM"
field = "InjN"
field = "InjO"
field = "InjP"
dialog = egomap_ego2, "", yAxis
field = "Sensor"
field = "", egomap9
field = "", egomap10
field = "", egomap11
field = "", egomap12
; field = "", egomap13
; field = "", egomap14
; field = "", egomap15
; field = "", egomap16
dialog = egomapping2, "AFR / EGO Sensor Mapping", xAxis
panel = egomap_inj2
panel = egomap_ego2
dialog = egoports2a, "",yAxis
field = "EGO Channel"
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}
; field = "EGO 13 Port", egoport13, {egonum > 12}
; field = "EGO 14 Port", egoport14, {egonum > 13}
; field = "EGO 15 Port", egoport15, {egonum > 14}
; field = "EGO 16 Port", egoport16, {egonum > 15}
dialog = egocont9_16, "AFR / EGO(9-12)", border
panel = egoports2a, West
panel = egomapping2, 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"
#if CYL_12_16_SUPPORT
field = "9"
field = "10"
field = "11"
field = "12"
field = "13"
field = "14"
field = "15"
field = "16"
#endif
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)}
#if CYL_12_16_SUPPORT
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)}
field = "", knock_gain13, {knock_conf_percyl && (nCylinders >12)}
field = "", knock_gain14, {knock_conf_percyl && (nCylinders >13)}
field = "", knock_gain15, {knock_conf_percyl && (nCylinders >14)}
field = "", knock_gain16, {knock_conf_percyl && (nCylinders >15)}
#endif
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)}
#if CYL_12_16_SUPPORT
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)}
field = "", knock_sens13, {knock_conf_percyl && (nCylinders >12)}
field = "", knock_sens14, {knock_conf_percyl && (nCylinders >13)}
field = "", knock_sens15, {knock_conf_percyl && (nCylinders >14)}
field = "", knock_sens16, {knock_conf_percyl && (nCylinders >15)}
#endif
dialog = ks4bot, "", xAxis
panel = ks4a
panel = ks4b
panel = ks4c
dialog = ks4top, ""
field = "NOTE! This feature is only licensed for use"
field = "with JSM add-on board"
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 main baud rate should normally be 115200"
field = "ECU Baud Rate", baud
field = "9600, 19200, 38400, 57600, 115200 only"
field = "SDcard Readback Baud Rate", baudhigh
field = "115200, 230400 or 460800 only"
field = "Set these, Burn"
field = "Then adjust tuning software comms baud rate to match"
field = "Then powercycle the ECU"
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, "PM3 - Injection LED D14", "PM4 - Accel LED D16", "PM5 - Warmup LED D15", "PJ0 - IAC2", "PJ1 - IAC1", "PJ7 - JS11", "PP2 - Idle", "PP3 - Boost", "PP4 - Nitrous 1", "PP5 - Nitrous 2", "PP6 - VVT", "PP7 - Fidle", "PT1 - V3 Inj 1", "PT3 - V3 Inj 2", "PT5 - JS10", "PK0 - Tacho", "PA0 - Inj A", "PA1 - Inj B", "PA2 - Inj C", "PA3 - Inj D", "PA4 - Inj E", "PA5 - Inj F", "PA6 - Inj G", "PA7 - Inj H", "PB0 - Spk A", "PB1 - Spk B", "PB2 - Spk C", "PB3 - Spk D", "PB4 - Spk E", "PB5 - Spk F", "PB6 - Spk G", "PB7 - Spk H", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "PK7", "PM2", "PK3", "PK1", "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
#if CYL_12_16_SUPPORT
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
; pulseWidthSeq13Gauge = pwseq13, "Pulse Width Seq 13", "ms", 0, 25.5, 1.0, 1.2, 20, 25, 3, 1
; pulseWidthSeq14Gauge = pwseq14, "Pulse Width Seq 14", "ms", 0, 25.5, 1.0, 1.2, 20, 25, 3, 1
; pulseWidthSeq15Gauge = pwseq15, "Pulse Width Seq 15", "ms", 0, 25.5, 1.0, 1.2, 20, 25, 3, 1
; pulseWidthSeq16Gauge = pwseq16, "Pulse Width Seq 16", "ms", 0, 25.5, 1.0, 1.2, 20, 25, 3, 1
#else
pulseWidthSeq9Gauge = pwseq9, "Pulse Width V3 inj1", "ms", 0, 25.5, 1.0, 1.2, 20, 25, 3, 1
pulseWidthSeq10Gauge = pwseq10, "Pulse Width V3 inj2", "ms", 0, 25.5, 1.0, 1.2, 20, 25, 3, 1
#endif
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
#if CYL_12_16_SUPPORT
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
knock13Gauge = knock_cyl13, "Knock cyl#13", "", 0, 100, 0, 0, 100, 100, 1, 0
knock14Gauge = knock_cyl14, "Knock cyl#14", "", 0, 100, 0, 0, 100, 100, 1, 0
knock15Gauge = knock_cyl15, "Knock cyl#15", "", 0, 100, 0, 0, 100, 100, 1, 0
knock16Gauge = knock_cyl16, "Knock cyl#16", "", 0, 100, 0, 0, 100, 100, 1, 0
#endif
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
#if CYL_12_16_SUPPORT
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
; lambda13Gauge = lambda13, "Lambda 13", "", 0.5, 1.5, 0.5, 0.7, 2, 1.1, 2, 2
; lambda14Gauge = lambda14, "Lambda 14", "", 0.5, 1.5, 0.5, 0.7, 2, 1.1, 2, 2
; lambda15Gauge = lambda15, "Lambda 15", "", 0.5, 1.5, 0.5, 0.7, 2, 1.1, 2, 2
; lambda16Gauge = lambda16, "Lambda 16", "", 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
; afr13Gauge = afr13, "Air:Fuel Ratio 13", "", 10, 19.4, 12, 13, 15, 16, 2, 2
; afr14Gauge = afr14, "Air:Fuel Ratio 14", "", 10, 19.4, 12, 13, 15, 16, 2, 2
; afr15Gauge = afr15, "Air:Fuel Ratio 15", "", 10, 19.4, 12, 13, 15, 16, 2, 2
; afr16Gauge = afr16, "Air:Fuel Ratio 16", "", 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
; egoV13Gauge = egov13, "Exhaust Gas Oxygen 13", "volts", 0, 5, 5, 5, 5, 5, 2, 2
; egoV14Gauge = egov14, "Exhaust Gas Oxygen 14", "volts", 0, 5, 5, 5, 5, 5, 2, 2
; egoV15Gauge = egov15, "Exhaust Gas Oxygen 15", "volts", 0, 5, 5, 5, 5, 5, 2, 2
; egoV16Gauge = egov16, "Exhaust Gas Oxygen 16", "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
; egoCorrGauge13 = egocor13, "EGO Correction 13", "%", 50, 150, 90, 99, 101, 110, 1, 1
; egoCorrGauge14 = egocor14, "EGO Correction 14", "%", 50, 150, 90, 99, 101, 110, 1, 1
; egoCorrGauge15 = egocor15, "EGO Correction 15", "%", 50, 150, 90, 99, 101, 110, 1, 1
; egoCorrGauge16 = egocor16, "EGO Correction 16", "%", 50, 150, 90, 99, 101, 110, 1, 1
#endif
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, { stringValue(sensor16Alias) }, "", -3000, 3000, -3277, -3277, 3277, 3277, 1, 1
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
#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 = { 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 valid
wbo2_en1 = 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 }
#if CYL_12_16_SUPPORT
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 = pwseq13, "Seq PW13", float, "%.3f", { sequential }
; entry = pwseq14, "Seq PW14", float, "%.3f", { sequential }
; entry = pwseq15, "Seq PW15", float, "%.3f", { sequential }
; entry = pwseq16, "Seq PW16", float, "%.3f", { sequential }
#endif
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, { stringValue(sensor16Alias) }, float, "%.1f", { sensor16_source }
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)}
#if CYL_12_16_SUPPORT
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 = knock_cyl13, "Knock cyl#13", float, "%.1f", {(knk_option_an == 3) && knock_conf_percyl && (nCylinders > 12)}
entry = knock_cyl14, "Knock cyl#14", float, "%.1f", {(knk_option_an == 3) && knock_conf_percyl && (nCylinders > 13)}
entry = knock_cyl15, "Knock cyl#15", float, "%.1f", {(knk_option_an == 3) && knock_conf_percyl && (nCylinders > 14)}
entry = knock_cyl16, "Knock cyl#16", float, "%.1f", {(knk_option_an == 3) && knock_conf_percyl && (nCylinders > 15)}
#endif
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 = 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 PE0/JS7", int, "highLow"
entry = porte2, "port:E2 FLEX", int, "highLow"
entry = porte4, "port:E4 Fuel Pump", int, "highLow"
entry = porth6, "port:H6 Tableswitch in", int, "highLow"
entry = porth7, "port:H7 Nitrous in", int, "highLow"
entry = portk0, "port:K0 Tacho Out", int, "highLow"
entry = portk1, "port:K1 PK1 (H4)", int, "highLow"
entry = portk2, "port:K2 Launch in", int, "highLow"
entry = portk3, "port:K3 PK3 (H3)", int, "highLow"
entry = portk7, "port:K7 PK7 (H1)", int, "highLow"
entry = portj0, "port:J0 IAC1", int, "highLow"
entry = portj1, "port:J1 IAC2", int, "highLow"
entry = portm2, "port:M2 PM2 (H2)", int, "highLow"
entry = portm3, "port:M3 LED D14", int, "highLow"
entry = portm4, "port:M4 LED D16", int, "highLow"
entry = portm5, "port:M5 LED D15", int, "highLow"
entry = portm6, "port:M6 IAC EN", int, "highLow"
entry = portj7, "port:J7 JS11", int, "highLow"
entry = portp2, "port:P2 Idle", int, "highLow"
entry = portp3, "port:P3 Boost", int, "highLow"
entry = portp4, "port:P4 Nitrous1", int, "highLow"
entry = portp5, "port:P5 Nitrous2", int, "highLow"
entry = portp6, "port:P6 VVT", int, "highLow"
entry = portp7, "port:P7 FIDLE", int, "highLow"
entry = portt0, "port:T0 Crank in", int, "highLow"
entry = portt1, "port:T1 INJ1", int, "highLow"
entry = portt2, "port:T2 Cam in", int, "highLow"
entry = portt3, "port:T3 INJ2", int, "highLow"
entry = portt4, "port:T4 PT4", int, "highLow"
entry = portt5, "port:T5 JS10", int, "highLow"
entry = portt6, "port:T6 Datalog in", 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
;-------------------------------------------------------------------------------