;-------------------------------------------------------------------------------
; $Id: ms2extra.ini,v 1.198 2019/11/26 15:32:48 jsmcortina Exp $
; configuration defines
;Normally these next lines should be UNset
;Use TunerStudio to fetch and view tooth/trigger logs
; This ini file is copyright 2006,2007,2008,2009,2010,2011,2012,2013 James Murray and Kenneth Culver.
; It is only to be used with a genuine B&G Megasquirt-2, Microsquirt or Microsquirt-module based devices.
;This enables the "full" CAN/serial commands so this INI can be used anywhere on the CAN network except a direct serial connection.
#set CAN_COMMANDS
#unset EGTFULL ; Defaults to 0-1000 degC change to set to use 0-1250 if you made the alternate circuit
#unset INI_VERSION_2 ; this is set by TunerStudio, but needs to be unset for Megatune to work
#unset PORT_STATUS
#unset OUTMSG_EDITING ; Allow editing of the outmsg data
#unset EXPANDED_CLT_TEMP
#if INI_VERSION_2
; ok
#else
#error Megatune cannot be used with this version of MS2/Extra - please upgrade to TunerStudio.
#endif
[MegaTune]
MTversion = 2.25 ; MegaTune itself; needs to match exec version.
#if CAN_COMMANDS
versionInfo = "r\$tsCanId\x0e\x00\x00\x00\x3c" ; Title bar, this is the code version.
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
; leave last letter alone
signature = "MS2Extra comms342hP" ; MSPNP2
; 123456789.123456789.
[TunerStudio]
iniSpecVersion = 3.24
helpManualDownloadRoot = "http://www.msextra.com/doc/pdf/"
;----------------------------------------------------------------------------
; 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 II.
;
; 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" ; might work now :)
tableBlockingFactor = 256 ;
referenceTable = mafTableBurner, "Calibrate MAF Table..."
tableIdentifier = 003, "MAF Table"
adcCount = 1024 ; length of the table
bytesPerAdc = 2 ; using words
scale = 1 ; scale before sending to controller
tableGenerator = fileBrowseGenerator, "Browse for Inc File"
solutionsLabel = "MAF Sensor"
solution = "Default", { table(adcValue, "maffactor.inc") }
solution = "Ford V8", { table(adcValue, "maffactor.inc") }
solution = "Ford Lightning MAF", { table(adcValue, "maffactor_1L3F_Lightning.inc") }
solution = "Infiniti Q45 MAF", { table(adcValue, "maffactor_Q45.inc") }
solution = "GM LT1/LS1/LS2 MAF", { table(adcValue, "maffactor_lsx.inc") }
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"
settingOption = LAMBDA, "Lambda"
settingOption = DEFAULT, "WideBand" ; 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
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" ; *
[LoggerDefinition]
; Add Standard Loggers. Supported types: stdMS2Composite, stdMS3Composite, stdMS2SyncComposite, stdMS3SyncComposite, stdMS2Tooth, stdMS3Tooth, stdMS2Trigger, stdMS3Trigger
stdLogger = stdMS2Composite
stdLogger = stdMS2SyncComposite
stdLogger = stdMS2Tooth
stdLogger = stdMS2Trigger
;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 = toothno, "Tooth No", 0, 13, 1, "tooth", { 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 = mapAdc, "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 }
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, 2; in bytes, the recordLen is for each record, currently limited to 4 bytes
;recordField = Name, HeaderName, startBit, bitCount, scale, units, updateCondition
recordField = PT7, "PTT7", 15, 1, 1, ""
recordField = PT6, "PTT6", 14, 1, 1, ""
recordField = PT5, "PTT5", 13, 1, 1, ""
recordField = PT4, "PTT4", 12, 1, 1, ""
recordField = PT3, "PTT3", 11, 1, 1, ""
recordField = PT2, "PTT2", 10, 1, 1, ""
recordField = PT1, "PTT1", 9, 1, 1, ""
recordField = PT0, "PTT0", 8, 1, 1, ""
recordField = PTAD7, "PTAD7", 7, 1, 1, ""
recordField = PTAD6, "PTAD6", 6, 1, 1, ""
recordField = PM5, "PTM5", 5, 1, 1, ""
recordField = PM4, "PTM4", 4, 1, 1, ""
recordField = PM3, "PTM3", 3, 1, 1, ""
recordField = PA0, "PTA0", 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, 3; 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", 16, 8, 4.0, "ADC" ; scaled to 8 bits
recordField = PT7, "PTT7", 15, 1, 1, ""
recordField = PT6, "PTT6", 14, 1, 1, ""
recordField = PT5, "PTT5", 13, 1, 1, ""
recordField = PT4, "PTT4", 12, 1, 1, ""
recordField = PT3, "PTT3", 11, 1, 1, ""
recordField = PT2, "PTT2", 10, 1, 1, ""
recordField = PT1, "PTT1", 9, 1, 1, ""
recordField = PT0, "PTT0", 8, 1, 1, ""
recordField = PTAD7, "PTAD7", 7, 1, 1, ""
recordField = PTAD6, "PTAD6", 6, 1, 1, ""
recordField = PM5, "PTM5", 5, 1, 1, ""
recordField = PM4, "PTM4", 4, 1, 1, ""
recordField = PM3, "PTM3", 3, 1, 1, ""
recordField = PA0, "PTA0", 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, 3; 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", 16, 8, 4.0, "ADC" ; scaled to 8 bits
recordField = PT7, "PTT7", 15, 1, 1, ""
recordField = PT6, "PTT6", 14, 1, 1, ""
recordField = PT5, "PTT5", 13, 1, 1, ""
recordField = PT4, "PTT4", 12, 1, 1, ""
recordField = PT3, "PTT3", 11, 1, 1, ""
recordField = PT2, "PTT2", 10, 1, 1, ""
recordField = PT1, "PTT1", 9, 1, 1, ""
recordField = PT0, "PTT0", 8, 1, 1, ""
recordField = PTAD7, "PTAD7", 7, 1, 1, ""
recordField = PTAD6, "PTAD6", 6, 1, 1, ""
recordField = PM5, "PTM5", 5, 1, 1, ""
recordField = PM4, "PTM4", 4, 1, 1, ""
recordField = PM3, "PTM3", 3, 1, 1, ""
recordField = PA0, "PTA0", 0, 1, 1, ""
[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).
;
;----------------------------------------------------------------------------
pageActivationDelay = 10 ; Milliseconds delay after burn command.
blockReadTimeout = 400 ; Milliseconds total timeout for reading page.
; writeBlocks = on
tsWriteBlocks = on
interWriteDelay = 1
; note page 6, 0xf0 = tooth logger
; page 7, 0xf1 = trigger logger
endianness = big
nPages = 7
pageSize = 1024, 1024, 1024, 1024, 1024, 1024, 1024
pageIdentifier = "\$tsCanId\x04", "\$tsCanId\x05", "\$tsCanId\x0a", "\$tsCanId\x08", "\$tsCanId\x09", "\$tsCanId\x0b", "\$tsCanId\x0c"
burnCommand = "b\$tsCanId\x04", "b\$tsCanId\x05", "b\$tsCanId\x0a", "b\$tsCanId\x08", "b\$tsCanId\x09", "b\$tsCanId\x0b", "b\$tsCanId\x0c"
pageReadCommand = "r\$tsCanId\x04%2o%2c", "r\$tsCanId\x05%2o%2c", "r\$tsCanId\x0a%2o%2c", "r\$tsCanId\x08%2o%2c", "r\$tsCanId\x09%2o%2c", "r\$tsCanId\x0b%2o%2c", "r\$tsCanId\x0c%2o%2c"
pageValueWrite = "w\$tsCanId\x04%2o%2c%v", "w\$tsCanId\x05%2o%2c%v", "w\$tsCanId\x0a%2o%2c%v", "w\$tsCanId\x08%2o%2c%v", "w\$tsCanId\x09%2o%2c%v", "w\$tsCanId\x0b%2o%2c%v", "w\$tsCanId\x0c%2o%2c%v"
pageChunkWrite = "w\$tsCanId\x04%2o%2c%v", "w\$tsCanId\x05%2o%2c%v", "w\$tsCanId\x0a%2o%2c%v", "w\$tsCanId\x08%2o%2c%v", "w\$tsCanId\x09%2o%2c%v", "w\$tsCanId\x0b%2o%2c%v", "w\$tsCanId\x0c%2o%2c%v"
crc32CheckCommand = "k\$tsCanId\x04\x00\x00\x00\x04", "k\$tsCanId\x05\x00\x00\x00\x04", "k\$tsCanId\x0a\x00\x00\x00\x04", "k\$tsCanId\x08\x00\x00\x00\x04", "k\$tsCanId\x09\x00\x00\x00\x04", "k\$tsCanId\x0b\x00\x00\x00\x04", "k\$tsCanId\x0c\x00\x00\x00\x04"
tableCrcCommand = "k\$tsCanId%2i%2o%2c"
retrieveConfigError = "r\$tsCanId\x07\x04\x00\x00\xff"
;trigger, tooth, composite loggers by special fetches on pages 0xf0, 0xf1, 0xf2, 0xf3
; new serial
messageEnvelopeFormat = msEnvelope_1.0
blockingFactor = 256 ; 256 is max read/write data size for MS2/Extra
;Relationship between TS pages and MS2 pages
; See also ms2_extra_main_decls.h
;TS MS2 internal
;MS2 internal pages 0-3 are sensor lookup tables
;1 4
;2 5
;MS2 internal pages 6,7 are outpc,txbuf
;3 10
;4 8
;5 9
;6 11
;7 12
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, 255.00, 0 ; * ( 1 byte)
ICIgnCapture = bits, U08, 2, [0:0], "Falling Edge", "Rising Edge" ; *
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" ; *
injctl = bits, U08, 2, [5:5], "Off","On"
injctl2_1 = bits, U08, 3, [0:0], "Off", "On"
injctl2_2 = bits, U08, 3, [1:1], "Off", "On"
max_coil_dur = scalar, U08, 4, "ms", 0.0666, 0.00000, 1.00, 8.00, 1 ; * ( 1 byte)
max_spk_dur = scalar, U08, 5, "ms", 0.0666, 0.00000, 0.00, 25.50, 1 ; * ( 1 byte)
dwellAcc = scalar, U08, 6, "ms", 0.0666, 0.00000, 0.00, 25.50, 0 ; * DurAcc
dwellvolts = array , U08, 7, [ 6], "V", 0.10000, 0.00000,6, 18, 1 ; * ( 6 bytes)
dwellcorr = array , U08, 13, [ 6], "%", 2, 0.00000,20, 512, 0 ; * ( 6 bytes)
PredOpt = bits , U08, 19, [0:1], "Last Interval", "1st Derivative", "1st High RPM, 2nd Low", "2nd Derivative" ; *
crankingRPM = scalar, S16, 20, "RPM", 1.00000, 0.00000, 200, 3000.0, 0 ; * ( 2 bytes)
cold_adv_table = array , S16, 22, [ 10], "deg", 0.10000, 0.00000,-10.00, 10.00, 1 ; * ( 20 bytes)
triggerOffset = scalar, S16, 42, "deg", 0.10000, 0.00000, -90.0, 180.00, 2 ; * ( 2 bytes)
TpsBypassCLTRevlim = scalar, S16, 44, "TPS %", 0.10000, 0.00000, 0, 120, 1 ; * ( 2 bytes)
RevLimNormal2_hyst= scalar,U16, 46, "RPM", 1.00000, 0.00000, 100, 1000, 0
;algorithms. Moved earlier in file so TS resolves them first when loading MSQ
algorithm = bits, U08, 630, [0:2], "INVALID", "Speed Density", "Percent Baro", "Alpha-N", "INVALID", "MAF", "ITB", "INVALID" ; *
algorithm2 = bits, U08, 630, [4:6], "Disabled", "Speed Density", "Percent Baro", "Alpha-N", "MAF", "INVALID", "ITB", "INVALID"
IgnAlgorithm = bits, U08, 631, [0:2], "INVALID", "Speed Density", "Percent Baro", "Alpha-N", "MAF", "INVALID", "ITB", "INVALID"
IgnAlgorithm2 = bits, U08, 631, [4:6], "Disabled", "Speed Density", "Percent Baro", "Alpha-N", "MAF", "INVALID", "ITB", "INVALID"
afrload = bits, U08, 985, [0:2], "Use primary load (Algorithm)", "MAP", "% baro", "TPS", "MAF", "INVALID", "ITB", "INVALID"
eaeload = bits, U08, 985, [4:6], "Use primary load (Algorithm)", "MAP", "% baro", "TPS", "MAF", "INVALID", "ITB", "INVALID"
;back to normal
#if LAMBDA
afrTable1 = array , U08, 48, [12x12], "Lambda", 0.006803, 0.00000, 0.00, 2.00, 3 ; * (144 bytes)
afrTable2 = array , U08, 192, [12x12], "Lambda", 0.006803, 0.00000, 0.00, 2.00, 3 ; * (144 bytes)
#else
afrTable1 = array , U08, 48, [12x12], "AFR", 0.10000, 0.00000, 1.00, 25.00, 1
afrTable2 = array , U08, 192, [12x12], "AFR", 0.10000, 0.00000, 1.00, 25.00, 1
#endif
wueBins = array , U08, 336, [ 10], "%", 1.00000, 0.00000, 0.00, 255.00, 0 ; * ( 10 bytes)
taeBins = array , U08, 346, [ 4], "ms", 0.10000, 0.00000, 0.00, 25.50, 1 ; * ( 4 bytes)
maeBins = array , U08, 350, [ 4], "ms", 0.10000, 0.00000, 0.00, 25.50, 1 ; * ( 4 bytes)
iacstepTable = array , S16, 354, [ 10], "steps", 1.00000, 0.00000, 0.00, 500.00, 0 ; * ( 20 bytes)
arpm_table1 = array , U16, 374, [ 12], "RPM", 1.00000, 0.00000, 0.00,15000, 0 ; * ( 24 bytes)
arpm_table2 = array , U16, 398, [ 12], "RPM", 1.00000, 0.00000, 0.00,15000, 0 ; * ( 24 bytes)
amap_table1 = array , S16, 422, [ 12], { bitStringValue( algorithmUnits , (afrload ? afrload : algorithm) ) }, 0.10000, 0.00000, 0.00, 700, 1
amap_table2 = array , S16, 446, [ 12], { bitStringValue( algorithmUnits , (afrload ? afrload : algorithm) ) }, 0.10000, 0.00000, 0.00, 700, 1
#if CELSIUS
tempTable = array , S16, 470, [ 10], "°C", 0.05555, -320.000,{cltlowlim}, {clthighlim}, 1 ; * ( 20 bytes) Temperature bins for cranking, cold AE and WUE
#else
tempTable = array , S16, 470, [ 10], "°F", 0.10000, 0.00000,{cltlowlim}, {clthighlim}, 1
#endif
taeRates = array , S16, 490, [ 4], "%/s", 0.10000, 0.00000, 0.00, 2000.00, 1 ; * ( 8 bytes) tpsDot bins used for AE: x for TAE interpolation
maeRates = array , S16, 498, [ 4], "kPa/s", 1.00000, 0.00000, 0.00, 32767.0, 0 ; * ( 8 bytes) mapDot bins used for AE: x for MAE
map0 = scalar, S16, 506, "%", 0.10000, 0.00000, -100.0, 3276.7, 1 ; * ( 2 bytes)
mapmax = scalar, S16, 508, "%", 0.10000, 0.00000, -100.0, 3276.7, 1 ; * ( 2 bytes)
#if CELSIUS
clt0 = scalar, S16, 510, "°C", 0.05555, -320.000, -100.0, 500.0, 1 ; * ( 2 bytes)
cltmult = scalar, S16, 512, "%", 1.00000, 0.00000, -200.0, 200.0, 0 ; * ( 2 bytes)
mat0 = scalar, S16, 514, "°C", 0.05555, -320.000, -100.0, 500.0, 1 ; * ( 2 bytes)
#else
clt0 = scalar, S16, 510, "°F", 0.10000, 0.00000, -100.0, 500.0, 1
cltmult = scalar, S16, 512, "%", 1.00000, 0.00000, -200.0, 200.0, 0
mat0 = scalar, S16, 514, "°F", 0.10000, 0.00000, -100.0, 500.0, 1
#endif
matmult = scalar, S16, 516, "%", 1.00000, 0.00000, -200.0, 200.0, 0 ; * ( 2 bytes)
tpsMin = scalar, S16, 518, "ADC", 1.00000, 0.00000, 0.0, 1023.0, 0 ; * ( 2 bytes)
tpsMax = scalar, S16, 520, "ADC", 1.00000, 0.00000, 0.0, 1023.0, 0 ; * ( 2 bytes)
batt0 = scalar, S16, 522, "V", 0.10000, 0.00000, 0.0, 3276.7, 1 ; ( 2 bytes)
battmax = scalar, S16, 524, "V", 0.10000, 0.00000,-3276.8, 3276.7, 1 ; ( 2 bytes)
ego0 = scalar, S16, 526, "afr", 0.10000, 0.00000,-3276.8, 3276.7, 1 ; ( 2 bytes)
egomult = scalar, S16, 528, "%", 1.00000, 0.00000, -200.0, 200.0, 0 ; ( 2 bytes)
baro0 = scalar, S16, 530, "kPa", 0.10000, 0.00000,-3276.8, 3276.7, 1 ; * ( 2 bytes)
baromax = scalar, S16, 532, "kPa", 0.10000, 0.00000,-3276.8, 3276.7, 1 ; * ( 2 bytes)
bcor0 = scalar, S16, 534, "%", 1.00000, 0.00000,-3276.8, 3276.7, 1 ; * ( 2 bytes)
bcormult = scalar, S16, 536, "%", 1.00000, 0.00000, -200.0, 200.0, 0 ; * ( 2 bytes)
; knock0 = scalar, S16, 538, "V", 0.01000, 0.00000, 0.0, 5.0, 1 ; * ( 2 bytes)
; knockmax = scalar, S16, 540, "V", 0.01000, 0.00000, 0.0, 5.0, 1 ; * ( 2 bytes)
Dtpred_Gain = scalar, S16, 542, "%", 1.00000, 0.00000, -200.0, 200.0, 0 ; * ( 2 bytes)
crankTolerance = scalar, U08, 544, "%", 1.00000, 0.00000, 0.00, 255.00, 0 ; * ( 1 byte)
asTolerance = scalar, U08, 545, "%", 1.00000, 0.00000, 0.00, 255.00, 0 ; * ( 1 byte)
pulseTolerance = scalar, U08, 546, "%", 1.00000, 0.00000, 0.00, 255.00, 0 ; * ( 1 byte)
IdleCtl = bits , U08, 547, [0:1], "None", "On/Off valve", "PWM valve (2 or 3 wire)", "Stepper valve (4 or 6 wire)"
IdleCtl_alg = bits , U08, 547, [3:3], "Open-loop (warmup)", "Closed-loop"
IdleCtl_home = bits , U08, 547, [5:5], "Closed", "Open"
IdleCtl_out = bits, U08, 547, [6:7], "Normal", "INVALID", "INVALID", "INVALID"
IACtstep = scalar, U08, 548, "ms", 1, 0.00000, 0.00, 255, 0 ; * ( 1 byte) changed to be 0.128 ticks
IAC_tinitial_step=scalar, U08, 549, "ms", 1, 0.00000, 0.00, 255, 0 ; * ( 1 byte)
IACminstep = scalar, U08, 550, "steps", 1, 0.00000, 0.00, 255, 0 ; * ( 1 byte)
dwellduty = scalar, U08, 551, "%", 0.39, 0.0, 0, 100,0
IACStart = scalar, S16, 552, "", 1.00000, 0.00000, 0.00, 4000.00, 0
#if CELSIUS
IdleHyst = scalar, S16, 554, "°C", 0.05555, 0.00000, 0, 20.0, 1 ; * ( 2 bytes)
#else
IdleHyst = scalar, S16, 554, "°F", 0.10000, 0.00000, 0, 36.0, 1
#endif
IACcrankxt = scalar, S16, 558, "s", 1.00000, 0.00000, 0.00,32767.00, 0 ; * ( 2 bytes)
IACcurlim = bits, U08, 560, [0:1], "Moving only", "Hold current", "Always on", "INVALID"
; IACcurlim = bits, U08, 560, [0:1], "Moving only", "Hold current", "INVALID", "INVALID"
;gaps
injOpen = scalar, U16, 566, "ms", 0.001, 0.00000, 0.00, 25.50, 3 ; * ( 1 byte)
battFac = scalar, U16, 568, "ms/v", 0.000166667, 0.0, 0.0, 1.0, 3 ; * ( 1 byte)
OverBoostOption = bits, U08, 570, [0:1], "None", "Fuel Cut", "Spark Cut", "Both"
OverBoostOption_tol = bits, U08, 570, [2:2], "Off", "On"
OverBoostOption_flexboost = bits, U08, 570, [3:3], "Off", "On"
OverBoostKpa = scalar, S16, 571, "kPa", 0.10000, 0.00000, 0.00, 700, 1
OverBoostHyst = scalar, S16, 573, "kPa", 0.10000, 0.00000, 0.00, 100, 1
;spare
secondtrigopts = bits, U08, 577, [0:0], "Off", "On"
secondtrigopts1 = bits, U08, 577, [1:1], "Off", "On"
secondtrigopts2 = bits, U08, 577, [2:2], "Off", "On"
secondtrigopts3 = bits, U08, 577, [3:3], "Off", "On"
tpsThresh = scalar, S16, 578, "%/s", 0.10000, 0.00000, 0.00, 1000.0, 1 ; * ( 2 byte)
mapThresh = scalar, S16, 580, "kPa/s", 1.00000, 0.00000, 0.00, 1000.0, 0 ; * ( 2 byte) threshold for MAE
taeColdA = scalar, U08, 582, "ms", 0.10000, 0.00000, 0.00, 25.500, 1 ; * ( 1 byte)
taeColdM = scalar, U08, 583, "%", 1.00000, 0.00000, 0.00, 255.00, 0 ; * ( 1 byte)
mapsample_angle = scalar, S16, 584, "deg", 0.10000, 0.00000, -360, 360, 1
taeTime = scalar, U08, 586, "s", 0.10000, 0.00000, 0.00, 25.50, 1 ; * ( 1 byte)
tdePct = scalar, U08, 587, "", 1.00000, 0.00000, 0.00, 255.00, 0 ; * ( 1 byte)
floodClear = scalar, S16, 588, "%", 0.10000, 0.00000, 0.00, 100.00, 1 ; * ( 2 bytes)
TPSOXLimit = scalar, S16, 590, "%", 0.10000, 0.00000, 0.00, 300.00, 1 ; * ( 2 bytes)
tpsProportion = scalar, U08, 592, "%", 1.00000, 0.00000, 0.00, 100.00, 0 ; * ( 1 byte)
baroCorr = bits , U08, 593, [0:1], "None", "Initial MAP Reading", "Two Independent Sensors", "INVALID" ; *
egoType = bits , U08, 594, [0:2], "Disabled", "Narrow Band", "Dual Narrow Band", "Single Wide Band", "Dual Wide Band", "INVALID", "INVALID", "INVALID" ; * EgoOption
EgoOption_dual = bits, U08, 594, [7:7], "Off", "On"
egoCount = scalar, U08, 595, "", 1.00000, 0.00000, 0.00, 255.00, 0 ; * ( 1 byte)
egoDelta = scalar, U08, 596, "%", 0.10000, 0.00000, 0.00, 25.5, 1 ; * ( 1 byte)
oldegoLimit = scalar, U08, 597, "%", 1.00000, 0.00000, 0.00, 255.00, 0 ; * ( 1 byte)
#if LAMBDA
AFRTarget = scalar, U08, 598, "Lambda", 0.006803, 0.00000, 0.00, 2.00, 3
#else
AFRTarget = scalar, U08, 598, "AFR", 0.10000, 0.00000, 0.00, 25.50, 1
#endif
tempUnits = bits , U08, 599, [0:0], "Coolant/MAT Tables in °F", "Coolant/MAT Tables in °C" ; * ( 1 byte)
MAFOption = bits , U08, 600, [4:5], "Off", "Knock", "Baro", "MAP" ; ( 1 byte)
mapsample_opt1 = bits, U08, 601, [0:1], "1", "2", "4", "INVALID"
mapsample_opt2 = bits, U08, 601, [2:2], "Use timed min", "Use event average"
#if CELSIUS
fastIdleT = scalar, S16, 602, "°C", 0.05555, -320.000,{cltlowlim}, {clthighlim}, 1 ; * ( 2 bytes)
egoTemp = scalar, S16, 604, "°C", 0.05555, -320.000,{cltlowlim}, {clthighlim}, 1 ; * ( 2 bytes)
#else
fastIdleT = scalar, S16, 602, "°F", 0.10000, 0.00000,{cltlowlim}, {clthighlim}, 1
egoTemp = scalar, S16, 604, "°F", 0.10000, 0.00000,{cltlowlim}, {clthighlim}, 1
#endif
egoRPM = scalar, S16, 606, "RPM", 1.00000, 0.00000, 0.00, 15000, 0 ; RPMOXLimit
reqFuel = scalar, U16, 608, "ms", 0.00100, 0.00000, 0.00, 65.536, 2 ; * ( 2 bytes)
divider = scalar, U08, 610, "", 1.00000, 0.00000, 0.00, 255, 0 ; * ( 1 byte)
alternate = bits, U08, 611, [0:0], "Simultaneous", "Alternating" ; * ( 1 byte)
altcrank = bits, U08, 611, [1:1], "Every event", "Alternate events"
injPwmT = scalar, U08, 613, "ms", 0.12800, 0.128, 0.00, 32.64, 1 ; * ( 1 byte)
injPwmPd = scalar, U08, 614, "us", 1.00000, 0.00000, 40.00, 100.00, 0 ; * ( 1 byte)
injPwmP = scalar, U08, 615, "%", 1.00000, 0.00000, 0.00, 100.00, 0 ; * ( 1 byte)
twoStroke = bits, U08, 617, [0:1], "Four-stroke", "Two-stroke", "INVALID", "Rotary"
; injType = bits, U08, 618, [0:0], "Port Injection", "Throttle Body" ; *
nInjectors = bits, U08, 619, [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, 620, "", 0.10000, 0.00000, 0.00, 720.00, 1 ; * ( 2 byte)
rpmLF = scalar, U08, 622, "", 1.00000, 0.00000, 10.00, 100.00, 0 ; * ( 1 byte)
mapLF = scalar, U08, 623, "", 1.00000, 0.00000, 10.00, 100.00, 0 ; * ( 1 byte)
tpsLF = scalar, U08, 624, "", 1.00000, 0.00000, 10.00, 100.00, 0 ; * ( 1 byte)
egoLF = scalar, U08, 625, "", 1.00000, 0.00000, 10.00, 100.00, 0 ; * ( 1 byte)
adcLF = scalar, U08, 626, "", 1.00000, 0.00000, 10.00, 100.00, 0 ; * ( 1 byte)
; knkLF = scalar, U08, 627, "", 1.00000, 0.00000, 0.00, 255.00, 0 ; * ( 1 byte)
mafLF = scalar, U08, 628, "", 1.00000, 0.00000, 10.00, 100.00, 0 ; * ( 1 byte)
dualTable = bits, U08, 629, [0:0], "Single Table", "Dual Table" ; dual_tble_optn
;630, 631 used by algorithms. Moved earlier in file so TS resolves them first when loading MSQ
; algorithm = bits, U08, 630, [0:2], "INVALID", "Speed Density", "Percent Baro", "Alpha-N", "INVALID", "MAF", "ITB", "INVALID" ; *
; algorithm2 = bits, U08, 630, [4:6], "Disabled", "Speed Density", "Percent Baro", "Alpha-N", "MAF", "INVALID", "ITB", "INVALID"
; IgnAlgorithm = bits, U08, 631, [0:2], "INVALID", "Speed Density", "Percent Baro", "Alpha-N", "MAF", "INVALID", "ITB", "INVALID"
; IgnAlgorithm2 = bits, U08, 631, [4:6], "Disabled", "Speed Density", "Percent Baro", "Alpha-N", "MAF", "INVALID", "ITB", "INVALID"
xAfrAlgorithm = scalar, U08, 632, "", 1.00000, 0.00000, 0.00, 255.00, 0 ; U ( 1 byte) UNUSED
dwelltime = scalar, U08, 633, "ms", 0.0666, 0, 0.1, 25.5, 1
trigret_ang = scalar, U16, 634, "deg", 0.1, 0, 5, 180,1
; RevLimOption = bits , U08, 636, [0:2], "None", "Spark Retard", "Fuel Cut", "Spk retard, fuel cut", "INVALID", "Spark retard/cut","INVALID","Fuel&spark cut" ; * ( 1 byte)
RevLimOption_retard = bits,U08, 636, [0:1], "Off", "Progressive retard", "Fixed angle", "INVALID"
RevLimOption_spkcut = bits,U08, 636, [2:2], "Off", "On"
RevLimCLTbased = bits, U08, 636, [3:3], "Normal", "CLT based"
RevLimOption_fuelprog=bits,U08, 636, [4:4], "Off", "On"
RevLimOption_fuelcut =bits,U08, 636, [5:5], "Off", "On"
RevLimMaxRtd = scalar, U08, 637, "deg", 0.10000, 0.00000, 0, 25.50, 1 ; * ( 1 byte)
injPwmT2 = scalar, U08, 638, "ms", 0.12800, 0.12800, 0.00, 32.64, 1 ; * ( 1 byte)
injPwmPd2 = scalar, U08, 639, "us", 1.00000, 0.00000, 40.00, 100.00, 0 ; * ( 1 byte)
injPwmP2 = scalar, U08, 640, "%", 1.00000, 0.00000, 0.00, 100.00, 0 ; * ( 1 byte)
injOpen2 = scalar, U16, 641, "ms", 0.001, 0.00000, 0.00, 25.50, 3 ; * ( 1 byte)
battFac2 = scalar, U16, 643, "ms/v", 0.000166667, 0.0, 0.0, 1.0, 3 ; * ( 1 byte)
mapport = bits, U08, 645, [0:0], "Off", "MAP"
baro_upper = scalar, S16, 646, "kPa", 0.10000, 0.00000, 50.00, 120.00, 1 ;
baro_lower = scalar, S16, 648, "kPa", 0.10000, 0.00000, 50.00, 120.00, 1 ;
baro_default = scalar, S16, 650, "kPa", 0.10000, 0.00000, 50.00, 120.00, 1 ;
; RevLimTPSbypassRPM = scalar, S16, 652, "RPM", 1.00000, 0.00000, 0.00, 15000, 0 ;
RevLimRtdAng = scalar, S16, 654, "deg", 0.10000, 0.00000,-10, 25.5, 1
RevLimNormal2 = scalar, S16, 656, "RPM", 1.00000, 0.00000, 0.00, 15000, 0 ;
TC5_required_width = scalar, U16, 658, "uSec", 0.66667, 0.00000, 0.00, 5000, 0 ;
egoLimit = scalar, S16, 660, "%", 0.10000, 0.00000, 0.00, 100, 0 ;
stoich = scalar, S16, 662, "AFR", 0.10000, 0.00000, 0.00, 25.5, 1 ;
enable_pollADC03 = bits, U08, 664, [0:0], "Disable", "Enable"
enable_pollADC47 = bits, U08, 664, [1:1], "Disable", "Enable"
enable_pollPWM = bits, U08, 664, [2:2], "Disable", "Enable"
enable_pollports = bits, U08, 664, [3:3], "Disable", "Enable"
poll_tableADC03 = scalar, U08, 665, "", 1.00000, 0.00000, 0, 15, 0 ; * ( 1 byte)
poll_tableADC47 = scalar, U08, 666, "", 1.00000, 0.00000, 0, 15, 0 ; * ( 1 byte)
poll_tablePWM = scalar, U08, 667, "", 1.00000, 0.00000, 0, 15, 0 ; * ( 1 byte)
poll_tableports = scalar, U08, 668, "", 1.00000, 0.00000, 0, 15, 0 ; * ( 1 byte)
poll_offsetADC03 = scalar, S16, 669, "bytes", 1.00000, 0.00000, 0, 4095, 0 ;
poll_offsetADC47 = scalar, S16, 671, "bytes", 1.00000, 0.00000, 0, 4095, 0 ;
poll_offsetPWM = scalar, S16, 673, "bytes", 1.00000, 0.00000, 0, 4095, 0 ;
poll_offsetports = scalar, S16, 675, "bytes", 1.00000, 0.00000, 0, 4095, 0 ;
ports_dir = bits, U08, 677, [0:2], "3 Inputs", "2 Inputs, 1 Output", "INVALID", "1 Input, 2 Outputs", "INVALID", "INVALID", "INVALID", "3 Outputs"
port1_type = bits, U08, 677, [4:4], "Digital (8 signals)", "Single value (one signal)"
port2_type = bits, U08, 677, [5:5], "Digital (8 signals)", "Single value (one signal)"
port3_type = bits, U08, 677, [6:6], "Digital (8 signals)", "Single value (one signal)"
port_generic = bits, U08, 678, [0:1], "Disabled", "Remote Port 1", "Remote Port 2", "Remote Port 3"
enginesize = scalar, U16, 679, "cc", 1.00000, 0.00000, 0, 65536, 0
remotePWMfreq = scalar, U08, 681, "MHz", 1.00000, 0.00000, 1, 50, 0
remotePWMprescale = scalar, U08, 682, "", 1.00000, 0.00000, 1, 255, 0
can_bcast1_on = bits, U08, 683, [0:0], "Off", "On"
can_bcast1_280x4 = bits, U08, 683, [1:1], "Off", "On"
can_bcast1_280x1 = bits, U08, 683, [2:2], "Off", "On"
can_bcast1_289 = bits, U08, 683, [3:3], "Off", "On"
can_bcast1_316 = bits, U08, 683, [4:4], "Off", "On"
can_bcast1_329 = bits, U08, 683, [5:5], "Off", "On"
can_bcast1_561 = bits, U08, 683, [6:6], "Off", "On"
can_bcast1_361 = bits, U08, 683, [7:7], "Off", "On"
can_bcast2_041 = bits, U08, 684, [0:0], "Off", "On"
can_bcast2_xxx = bits, U08, 684, [7:7], "Off", "On"
can_bcast_int = scalar, U16, 685, "ms", 0.128, 0.00000, 10, 1000,1
feature7_mafmat = bits, U08, 687, [0:0], "Off", "On"
feature7_maftrim = bits, U08, 687, [1:1], "Off", "On"
feature7_mafcalib= bits, U08, 687, [2:2], "Off", "On"
; feature7_aeevents= bits, U08, 687, [3:3], "Time", "Events"
feature7_aetpswot= bits, U08, 687, [4:4], "Off", "On"
maf_range = bits, U08, 688, [0:1], "650g/s", "1300g/s", "1950g/s", "2600g/s"
map_phase_thresh = scalar, S16, 689, "kPa", 0.10000, 0.00000, 0.00, 400, 1
flex_pct0 = scalar, U16, 691, "%", 0.1, 0.00000, 0, 100,1
flex_pct1 = scalar, U16, 693, "%", 0.1, 0.00000, 0, 100,1
flex_baseline = scalar, U16, 695, "%", 0.1, 0.00000, 0, 100,1
fuelSpkDel_default = scalar, S16, 697, "deg", 0.10000, 0.00000,-45.00, 45.00, 1
fuelCorr_default = scalar, U08, 699, "%", 1.00000, 0.00000, 50, 255, 0
;pad 697
boosttol = scalar, S16, 701, "kPa", 0.10000, 0.00000, 0.00, 50, 1
flexboosttps = scalar, S16, 703, "%", 0.10000, 0.00000, 0.00, 100.00, 1;
oddfireangs1 = scalar, U16, 705, "", 0.10000, 0.00000, 0.00, 720.00, 1 ; * ( 2 byte)
oddfireangs2 = scalar, U16, 707, "", 0.10000, 0.00000, 0.00, 720.00, 1 ; * ( 2 byte)
oddfireangs3 = scalar, U16, 709, "", 0.10000, 0.00000, 0.00, 720.00, 1 ; * ( 2 byte)
oddfireangs4 = scalar, U16, 711, "", 0.10000, 0.00000, 0.00, 720.00, 1 ; * ( 2 byte)
oddfireangs5 = scalar, U16, 713, "", 0.10000, 0.00000, 0.00, 720.00, 1 ; * ( 2 byte)
oddfireangs6 = scalar, U16, 715, "", 0.10000, 0.00000, 0.00, 720.00, 1 ; * ( 2 byte)
can_poll_id0 = scalar, U08, 717, "", 1.00000, 0.00000, 0.00, 14, 0 ;
can_poll_id1 = scalar, U08, 718, "", 1.00000, 0.00000, 0.00, 14, 0 ;
can_poll_id2 = scalar, U08, 719, "", 1.00000, 0.00000, 0.00, 14, 0 ;
can_poll_id3 = scalar, U08, 720, "", 1.00000, 0.00000, 0.00, 14, 0 ;
; spare 9 bytes
hw_latency = scalar, U16, 730, "usec", 0.66667, 0.00000, 0.00, 500, 0
ego_startdelay = scalar, U08, 732, "s", 1, 0, 0, 120, 0
;these are loadopts in firmware
loadCombine = bits, U08, 733, [0:0], "additive", "multiplicitive"
loadMult = bits, U08, 733, [2:2], "don't multiply", "multiply"
loadStoich = bits, U08, 733, [3:3], "don't include AFRtarget", "include AFRtarget"
loadopts_oldbaro= bits, U08, 733, [6:6], "Off", "On"
baud = scalar, U32, 734, "", 1.00000, 0.00000,9600.0,115200.0, 0 ; x ( 4 bytes)
MAPOXLimit = scalar, S16, 738, "kPa", 0.10000, 0.00000, 0.00, 300.00, 2 ; * ( 2 bytes)
board_type = bits , U08, 740, [0:7], "INVALID", "MS2", "Router", "GPIO"
mycan_id = scalar , U08, 741, "", 1.00000, 0.00000, 0.00, 255, 0
; 4 words in here that _DO_NOT_ align correctly with where GPIO wants to clobber
mapsample_window = scalar, U08, 750, "deg", 1.00000, 0.00000, 0.00, 180, 0
can_poll = bits, U08, 751, [0:0], "Disable", "Enable"
; xcan_poll_id0 = scalar, U08, 752, "", 1.00000, 0.00000, 0.00, 14, 0 ;
MAPOXMin = scalar, S16, 753, "kPa", 0.10000, 0.00000, 0.00, 300.00, 2 ; * ( 2 bytes)
; Port Settings constants
psEnabled = array , U08, 756, [ 7], "on/off", 1.00000, 0.00000, 0, 1, 0
psCondition = array , U08, 763, [ 7x2], "", 1.00000, 0.00000, 0, 255, 0
psConnector = array , U08, 777, [ 7], "", 1.00000, 0.00000, 0, 255, 0
psInitValue = array , U08, 784, [ 7], "", 1.00000, 0.00000, 0, 255, 0
psPortValue = array , U08, 791, [ 7], "", 1.00000, 0.00000, 0, 255, 0
psOutSize = array , U08, 798, [ 7x2], "", 1.00000, 0.00000, 0, 255, 0
psOutOffset = array , U16, 812, [ 7x2], "", 1.00000, 0.00000, 0, 1024, 0
psThreshold = array , S16, 840, [ 7x2], "", 1.00000, 0.00000,-32768.0,32767.0, 0
psHysteresis = array , S16, 868, [ 7x2], "", 1.00000, 0.00000,-32768.0,32767.0, 0
aeTaperTime = scalar, U08, 896, "s", 0.10000, 0.00000, 0.00, 25.50, 1 ; * ( 1 byte)
primedelay = scalar, U08, 897, "s", 0.1, 0.0, 0.0, 3, 1
aeEndPW = scalar, S16, 898, "ms", 0.10000, 0.00000, 0.00, 1000.00, 1 ; *
egoAlgorithm = bits , U08, 900, [0:1], "Simple", "INVALID", "PID", "No correction" ; * ( 1 byte)
egoKP = scalar, U08, 901, "%", 1.00000, 0.00000, 0.00, 200.00, 0 ; * ( 1 byte)
egoKI = scalar, U08, 902, "%", 1.00000, 0.00000, 0.00, 200.00, 0 ; * ( 1 byte)
egoKD = scalar, U08, 903, "%", 1.00000, 0.00000, 0.00, 200.00, 0 ; * ( 1 byte)
egoKdelay1 = scalar, U16, 904, "ms", 1.00000, 0.00000, 0.00, 65535, 0 ; * ( 2 bytes)
egoKdelay2 = scalar, U16, 906, "revs", 1.00000, 0.00000, 0.00, 65535, 0 ; * ( 2 bytes)
flexFuel = bits , U08, 908, [0:0], "Disabled", "Enabled" ; * ( 1 byte)
flexport = bits, U08, 908, [1:3], "LAUNCH", "INVALID", "INVALID", "INVALID", "CANPWMIN1", "CANPWMIN2", "CANPWMIN3", "CANPWMIN4"
fuelFreq = array , U08, 909, [ 2], "Hz", 1.00000, 0.00000, 0.00, 255, 0 ; * ( 2 bytes)
fuelFreq0 = scalar, U08, 909, "Hz", 1.00000, 0.00000, 0.00, 255, 0
fuelFreq1 = scalar, U08, 910, "Hz", 1.00000, 0.00000, 0.00, 255, 0
fuelCorr = array , U08, 911, [ 2], "%", 1.00000, 0.00000, 0.00, 255, 0 ; * ( 2 bytes)
fuelCorr0 = scalar, U08, 911, "%", 1.00000, 0.00000, 0.00, 255, 0
fuelCorr1 = scalar, U08, 912, "%", 1.00000, 0.00000, 0.00, 255, 0
dwellmode = bits , U08, 913, [0:1], "Standard Dwell", "Fixed Duty", "Time after Spark", "Charge at Trigger"
iacfullopen = scalar, U16, 914, "steps", 1.00000, 0.00000, 0.0, 4000.0, 0
;gap
knk_option = bits , U08, 927, [0:1], "Disabled", "Safe Mode", "Aggressive Mode", "INVALID" ; * ( 1 byte )
knkDirection = bits , U08, 927, [4:4], "Low Input", "High Input" ; *
knkpull = bits , U08, 927, [5:6], "Same as knock", "None", "Pull up", "Pull down" ; *
knk_option_an = bits , U08, 927, [7:7], "On/Off", "Analogue"
knk_maxrtd = scalar, U08, 928, "deg", 0.1, 0.0, 0.0, 25.5, 1 ; * ( 1 byte )
knk_step1 = scalar, U08, 929, "deg", 0.1, 0.0, 0.0, 25.5, 1 ; * ( 1 byte )
knk_step2 = scalar, U08, 930, "deg", 0.1, 0.0, 0.0, 25.5, 1 ; * ( 1 byte )
knk_trtd = scalar, U08, 931, "s", 0.1, 0.0, 0.0, 25.5, 1 ; * ( 1 byte )
knk_tadv = scalar, U08, 932, "s", 0.1, 0.0, 0.0, 25.5, 1 ; * ( 1 byte )
knk_dtble_adv = scalar, U08, 933, "deg", 0.1, 0.0, 0.0, 25.5, 1 ; * ( 1 byte )
knk_ndet = scalar, U08, 934, "knocks", 1.0, 0.0, 0.0, 255, 0 ; * ( 1 byte )
EAEOption = bits , U08, 935, [0:1], "Off", "On", "INVALID", "On with lag compensation" ; * ( 1 byte )
knk_maxmap = scalar, U16, 936, "kPa", 0.1, 0.0, 0.0, 300.0, 1 ; * ( 2 bytes)
knk_lorpm = scalar, U16, 938, "rpm", 1.0, 0.0, 0.0, 15000, 0 ; * ( 2 bytes)
knk_hirpm = scalar, U16, 940, "rpm", 1.0, 0.0, 0.0, 15000, 0 ; * ( 2 bytes)
; knk_rpm = array , U16, 942, [ 6], "rpm", 1.0, 0.0, 0.0, 6000, 0 ; * ( 2 bytes)
; knk_thresh = array , U16, 954, [ 6], "v", 0.01, 0.0, 0.0, 5.00, 2 ; * ( 2 bytes)
triggerTeeth = scalar, U16, 966, "teeth", 1.0, 0.0, 2, 255, 0 ; * ( 2 bytes)
No_Miss_Teeth = scalar, U08, 968, "teeth", 1.0, 0.0, 0.0, 4, 0 ; * ( 1 byte )
Miss_ang = scalar, U16, 969, "deg BTDC", 0.1, 0.0, 0.0, 720, 1 ; * ( 2 bytes )
ICISR_tmask = scalar, U08, 971, "ms", 0.1, 0.0, 0.0, 25.5, 1 ; * ( 1 byte )
ICISR_pmask = scalar, U08, 972, "%", 1.0, 0.0, 0.0, 90, 0 ; * ( 1 byte )
knkport = bits, U08, 973, [0:3], "Knock", "Baro", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "Remote Port3 Bit 0", "Remote Port3 Bit 1", "Remote Port3 Bit 2", "Remote Port3 Bit 3", "Remote Port3 Bit 4", "Remote Port3 Bit 5", "Remote Port3 Bit 6", "Remote Port3 Bit 7"
ae_lorpm = scalar, U16, 974, "rpm", 1.0, 0.0, 0.0, 15000, 0 ; * ( 2 bytes)
ae_hirpm = scalar, U16, 976, "rpm", 1.0, 0.0, 0.0, 15000, 0 ; * ( 2 bytes)
fuelSpkDel = array , S16, 978, [ 2], "deg", 0.10000, 0.00000,-45.00, 45.00, 1 ; * ( 4 bytes)
fuelSpkDel0 = scalar, S16, 978, "deg", 0.10000, 0.00000,-45.00, 45.00, 1
fuelSpkDel1 = scalar, S16, 980, "deg", 0.10000, 0.00000,-45.00, 45.00, 1
IC2ISR_tmask = scalar, U08, 982, "ms", 0.1, 0.0, 0.0, 25.5, 1 ; * ( 1 byte )
IC2ISR_pmask = scalar, U08, 983, "%", 1.0, 0.0, 0.0, 90, 0 ; * ( 1 byte )
NoiseFilterOpts = bits, U08, 984, [0:0], "Off", "On"
NoiseFilterOpts1 = bits, U08, 984, [1:1], "Off", "On"
NoiseFilterOpts2 = bits, U08, 984, [2:2], "Off", "On"
NoiseFilterOpts3 = bits, U08, 984, [3:3], "Off", "On"
;985 is used by afrload and eaeload. Moved earlier in file so TS resolves them first when loading MSQ
; afrload = bits, U08, 985, [0:2], "Use primary load (Algorithm)", "MAP", "% baro", "TPS", "MAF", "INVALID", "ITB", "INVALID"
; eaeload = bits, U08, 985, [4:6], "Use primary load (Algorithm)", "MAP", "% baro", "TPS", "MAF", "INVALID", "ITB", "INVALID"
;spk_config_spka
; WLED was incorrectly Tachout
spk_config_spka = bits , U08, 986, [0:0], "IGN1", "WLED" ; ( 1 byte )
spk_conf2_gm = bits , U08, 987, [0:0], "Off", "GM Bypass on SpkB"
spk_conf2_tfi = bits , U08, 987, [1:2], "Off", "TFI Non-signature", "INVALID", "TFI Signature PIP"
spk_conf2_cam = bits , U08, 987, [3:3], "Off", "On"
spk_conf2_oddodd= bits , U08, 987, [4:5], "Alternate", "INVALID", "Paired", "Custom" ; note, different bits to MS3
spk_conf2_kick = bits , U08, 987, [6:6], "Off", "On"
spk_conf2_dli = bits , U08, 987, [7:7], "Off", "Toyota DLI"
spk_config_campol =bits, U08, 988, [0:0], "Low", "High"
spk_config_camcrank = bits, U08, 988, [1:1], "Crank wheel", "Cam wheel"
spk_config_trig2 =bits, U08, 988, [2:3], "INVALID", "Single wheel with missing tooth", "Dual wheel", "Dual wheel with missing tooth"
spk_config_trig2l =bits, U08, 988, [4:5], "INVALID", "Rising edge", "Falling edge", "Poll level"
spk_config_resetcam = bits, U08, 988, [6:7], "Cam", "Crank", "Every cylinder", "INVALID"
; invalids in next line are spare and should be used
spk_mode0 = bits , U08, 989, [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-00", "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", "INVALID", "Fuel Only", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID","LS1", "YZF1000", "INVALID", "INVALID","INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID","INVALID", "INVALID", "HD 32-2", "Miata 36-2","INVALID", "INVALID", "Ski doo PTEC", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID"
spk_mode3a = bits, U08, 990, [0:0], "Cam input", "MAP sensor"
spk_mode3_hirespol= bits, U08, 990, [2:2], "Normal", "Inverted"
spk_mode3 = bits, U08, 990, [5:7], "Single coil", "INVALID", "Wasted spark", "Wasted COP", "Coil on plug", "INVALID", "Dual dizzy", "INVALID"
rtbaroport = bits, U08, 991, [0:3], "MAP", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "Baro", "Knock", "Remote ADC0", "Remote ADC1", "Remote ADC2", "Remote ADC3", "Remote ADC4", "Remote ADC5", "Remote ADC6", "Remote ADC7" ; (1 byte )
ego2port = bits, U08, 992, [0:3], "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "Baro", "Knock", "Remote ADC0", "Remote ADC1", "Remote ADC2", "Remote ADC3", "Remote ADC4", "Remote ADC5", "Remote ADC6", "Remote ADC7" ; (1 byte )
egoport = bits, U08, 993, [0:3], "Local", "Remote ADC0", "Remote ADC1", "Remote ADC2", "Remote ADC3", "Remote ADC4", "Remote ADC5", "Remote ADC6", "Remote ADC7", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID" ; (1 byte )
kickdelay = scalar, U16, 994, "ms", 0.000666,0.00000,0.1,35.00,3
;996 free
feature4_0igntrig= bits, U08, 997, [1:1], "Off", "Ignition trigger indicator"
feature4_0VEtblsize=bits, U08, 997, [2:2], "16x16","12x12"
feature4_0ftrig = bits, U08, 997, [4:5], "Off", "INVALID", "Simple", "Advanced"
ipwmTable = array , S16, 998, [ 10], "%", 0.392, 0.00000, 0.00, 100.00, 1
timing_flags = bits, U08, 1018, [0:0], "Use Table", "Fixed timing";
use_prediction = bits, U08, 1018, [1:1], "No Prediction", "1st Deriv Prediction";
crank_dwell = scalar, U08, 1019, "ms", 0.0666,0.00000,1.00,8.00,1 ; * ( 1 byte);
crank_timing = scalar, S16, 1020, "degrees", 0.10000,0.00000,-10.00,90.00,1;
fixed_timing = scalar, S16, 1022, "degrees", 0.10000,0.00000,-10.00,90.00,1;
page = 2
pwmidle_target_rpms = array, U16, 0, [ 8 ], "rpms", 1, 0.00000, 0.00, 2000, 0;
#if CELSIUS
pwmidle_clt_temps = array, S16, 16, [8], "°C", 0.05555, -320.000,{cltlowlim}, {clthighlim}, 1 ;
#else
pwmidle_clt_temps = array, S16, 16, [8], "°F", 0.10000, 0.00000,{cltlowlim}, {clthighlim}, 1
#endif
pwmidle_ms = scalar, U16, 32, "ms", 1, 0.00000, 50, 500, 0
pwmidle_close_delay = scalar, U08, 34, "s", 1, 0.00000, 0, 10, 0
pwmidle_open_duty = scalar, U08, 35, "%", 0.392, 0.00000, 0, 100, 1
pwmidle_open_steps = scalar, U08, 35, "steps", 1.00000, 0.00000, 0, 255, 0
pwmidle_closed_duty = scalar, U08, 36, "%", 0.392, 0.00000, 0, 100, 1
pwmidle_closed_steps = scalar, U08, 36, "steps", 1.00000, 0.00000, 0, 255, 0
pwmidle_pid_wait_timer = scalar, U08, 37, "s", 0.1, 0.00000, 2, 10, 1
pwmidle_min_duty = scalar, U08, 38, "%", 0.392, 0.00000, 0, 255, 1
pwmidle_min_steps = scalar, U08, 38, "steps", 1.00000, 0.00000, 0, 255, 0
; pwmidle_engage_rpm_adder = scalar, U16, 39, "rpm", 1, 0.00000, 0, 15000, 0
pwmidle_tps_threshold = scalar, U16, 41, "%", 0.1, 0.00000, 0, 1000, 1
pwmidle_dp_adder = scalar, U08, 43, "%", 0.392, 0.00000, 0, 20, 1
pwmidle_dp_adder_steps = scalar, U08, 43, "steps", 1.00000, 0.00000, 0, 20, 0
pwmidle_rpmdot_threshold = scalar, S16, 44, "rpm/sec", 10.0, 0.00000, 0, 1000, 0
pwmidle_decelload_threshold = scalar, S16, 46, "%", 0.1, 0.00000, 0, 100, 1
pwmidle_Kp_new = scalar, U16, 48, "%", 0.10000, 0.00000, 0, 200, 1
pwmidle_Ki_new = scalar, U16, 50, "%", 0.10000, 0.00000, 0, 200, 1
pwmidle_Kd_new = scalar, U16, 52, "%", 0.10000, 0.00000, 0, 200, 1
pwmidle_freq = bits, U08, 54, [0:3], "31Hz", "62Hz", "92Hz", "124Hz", "153Hz", "186Hz", "217Hz", "252Hz", "279Hz", "313Hz", "340Hz", "372Hz", "412Hz", "440Hz", "480Hz", "INVALID"
pwmidle_freq_cl_opts_display_pid = bits, U08, 54, [7:7], "Basic", "Advanced"
; gap
pwmidle_max_rpm_new = scalar, U16, 57, "", 1, 0.00000, 0, 4000, 0
pwmidle_targ_ramptime = scalar, U08, 59, "s", 0.1, 0.00000, 2, 10, 1
pwmidle_rpmdot_disablepid = scalar, S16, 60, "", 10, 0, 100, 1000, 0
pwmidle_port = bits, U08, 62, [0:1], "Local", "Remote Port 1", "Remote Port 2", "Remote Port 3" ; for compatability
pwmidle_port2 = bits, U08, 62, [0:1], "FIDLE", "Remote Port 1", "Remote Port 2", "Remote Port 3"
pwmidle_dp_decay_factor = scalar, U08, 63, "", 1, 0, 0, 100, 0
boost_ctl_sensitivity = scalar, S16, 64, "", 0.1, 0, 0, 500, 1
boost_ctl_settings_freq = bits, U08, 67, [0:2], "INVALID", "78Hz", "39Hz", "26Hz", "19.5Hz", "15.6Hz", "13Hz", "11.1Hz"
boost_ctl_settings_on = bits, U08, 67, [3:3], "Off","On"
boost_ctl_settings_cl = bits, U08, 67, [4:4], "Open-loop", "Closed-loop"
; boost_ctl_settings_invert = bits, U08, 67, [5:5], "Normal", "Inverted"
boost_ctl_settings_invert_new= bits, U08, 67, [5:5], "Normal", "Inverted"
boost_ctl_settings_remote = bits, U08, 67, [6:6], "Local", "Remote"
boost_ctl_settings_tunemode= bits,U08, 67, [7:7], "Basic", "Advanced"
boost_ctl_pins = bits, U08, 68, [0:3], "Off", "InjectorD", "InjectorC", "INVALID", "BOOST", "INVALID", "INVALID", "INVALID", "Fidle", "TACHOUT", "Output1", "Output2", "INVALID", "INVALID", "INVALID","INVALID"
boost_ctl_remote = bits, U08, 68, [4:5], "INVALID", "Port 1", "Port 2", "Port 3"
boost_ctl_settings_initialvals=bits,U08,68, [6:6], "Off", "Use Initial Value Table" ; Note that this bit is in a different var
boost_ctl_Kp = scalar, U08, 69, "%", 1, 0.00000, 0, 200, 0
boost_ctl_Ki = scalar, U08, 70, "%", 1, 0.00000, 0, 200, 0
boost_ctl_Kd = scalar, U08, 71, "%", 1, 0.00000, 0, 200, 0
boost_ctl_closeduty = scalar, U08, 72, "%", 1, 0.00000, 0, 100, 0
boost_ctl_openduty = scalar, U08, 73, "%", 1, 0.00000, 0, 100, 0
boost_ctl_ms = scalar, U16, 74, "ms", 1, 0.00000, 10, 500, 0
boost_ctl_load_targets = array, S16, 76, [8x8], "kPa", 0.1, 0, 0, 400, 1
boost_ctl_loadtarg_tps_bins = array, S16, 204, [8], "%", 0.1, 0, 0, 100, 1
boost_ctl_loadtarg_rpm_bins = array, U16, 220, [8], "rpm", 1, 0, 0, 15000, 0
boost_ctl_pwm_targets = array, U08, 236, [8x8], "%", 1, 0, 0, 100, 0
boost_ctl_pwmtarg_tps_bins = array, S16, 300, [8], "%", 0.1, 0, 0, 100, 1
boost_ctl_pwmtarg_rpm_bins = array, U16, 316, [8], "rpm", 1, 0, 0, 15000, 0
pwmidle_crank_dutyorsteps_duty = array, U16, 332, [4], "%", 0.392, 0.00000, 0, 100, 1
pwmidle_crank_dutyorsteps_steps = array, U16, 332, [4], "steps", 1, 0, 0, 512, 0
#if CELSIUS
pwmidle_crank_clt_temps = array, S16, 340, [4], "°C", 0.05555, -320.000,{cltlowlim}, {clthighlim}, 1
#else
pwmidle_crank_clt_temps = array, S16, 340, [4], "°F", 0.10000, 0.00000,{cltlowlim}, {clthighlim}, 1
#endif
injadvTable3 = array , S16, 348, [ 6x6], "deg", 0.10000, 0.00000, -360.00, 720.00, 1 ; * ( 72 bytes)
srpm_injadv3 = array , U16, 420, [ 6], "RPM", 1.00000, 0.00000, 0.00,15000, 0 ; * ( 12 bytes)
smap_injadv3 = array , S16, 432, [ 6], { bitStringValue( algorithmUnits , algorithm ) }, 0.10000, 0.00000, 0.00, 700, 1 ; * ( 12 bytes)
primePWTable = array , S16, 444, [ 10], "ms", 0.10000, 0.00000, 0.00, 65.00, 1 ; * ( 20 bytes)
crankPctTable = array , U16, 464, [ 10], "%", 1, 1, 1, 10000, 0 ; * ( 20 bytes)
asePctTable = array , S16, 484, [ 10], "%", 1.00000, 0.00000, 0.00, 400.00, 0 ; * ( 2 bytes)
aseCntTable = array , S16, 504, [ 10], "cycles", 1.00000, 0.00000, 0.00, 2500.00, 0 ; * ( 2 bytes)
#if CELSIUS
matTemps = array , S16, 524, [ 6], "°C", 0.05555, -320.000,-40.00, 150.00, 1 ; * ( 12 bytes)
#else
matTemps = array , S16, 524, [ 6], "°F", 0.10000, 0.00000,-40.00, 300.00, 1
#endif
matRetard = array , U08, 536, [ 6], "deg", 0.10000, 0.00000, 0.00, 25.5, 1 ; * ( 6 bytes)
EAEAWCRPMbins = array, U16, 542, [ 12], "rpm", 1.00000, 0.00000,0, 15000, 0 ; * (24 bytes)
EAESOCRPMbins = array, U16, 566, [ 12], "rpm", 1.00000, 0.00000,0, 15000, 0 ; * (24 bytes)
EAEAWCKPAbins = array, U16, 590, [ 12], { bitStringValue( algorithmUnits , (eaeload ? eaeload : algorithm) ) }, 0.10000, 0.00000,0, 700, 0
EAESOCKPAbins = array, U16, 614, [ 12], { bitStringValue( algorithmUnits , (eaeload ? eaeload : algorithm) ) }, 0.10000, 0.00000,0, 700, 0
EAEBAWC = array, U08, 638, [ 12], "%", 1.00000, 0.00000,0, 100, 0 ; * (12 bytes)
EAEBSOC = array, U08, 650, [ 12], "%", 0.10000, 0.00000,0, 25.5, 1 ; * (12 bytes)
EAEAWN = array, U08, 662, [ 12], "%", 1.00000, 0.00000,0, 200, 0 ; * (12 bytes)
EAESON = array, U08, 674, [ 12], "%", 1.00000, 0.00000,0, 200, 0 ; * (12 bytes)
EAEAWW = array, U08, 686, [ 12], "%", 1.00000, 0.00000,0, 200, 0
EAESOW = array, U08, 698, [ 12], "%", 1.00000, 0.00000,0, 200, 0
; Supplemental corrections for MAT. (old version)
#if CELSIUS
matCorrTemps = array , S16, 710, [ 6], "°C", 0.05555, -320.000,-40.00, 150.00, 1 ; * ( 12 bytes)
#else
matCorrTemps = array , S16, 710, [ 6], "°F", 0.10000, 0.00000,-40.00, 300.00, 1
#endif
matCorrDelta = array , S16, 722, [ 6], "%", 0.10000, 0.00000,-120.0, 120.0, 1 ; * ( 6 bytes)
boost_ctl_lowerlimit = scalar, S16, 734, "kPa", 0.1, 0, 5, 700, 1
injpw_pins = bits, U08, 736, [0:3], "Off", "InjectorD", "InjectorC", "INVALID", "BOOST", "INVALID", "INVALID", "INVALID", "Fidle", "TACHOUT", "Output1", "Output2", "INVALID", "INVALID", "INVALID","INVALID"
; pad 1 bytes
injpw_scale = scalar, U16, 738, "%", 0.1, 0, 0, 6553.5, 1
; pad 6 bytes
#if CELSIUS
temp_table_p5 = array, S16, 746, [ 10], "°C", 0.05555, -320.000, {cltlowlim}, {clthighlim}, 0
#else
temp_table_p5 = array, S16, 746, [ 10], "°F", 0.10000, 0.000,{cltlowlim}, {clthighlim}, 1
#endif
tsf_rpm = scalar, U16, 766, "rpm", 1, 0, 0, 15000, 0
tsf_kpa = scalar, S16, 768, "kPa", 0.1, 0, 0, 700, 1
tsf_tps = scalar, S16, 770, "%", 0.10000, 0.00000, 0.00, 100.00, 1;
tss_rpm = scalar, U16, 772, "rpm", 1, 0, 0, 15000, 0
tss_kpa = scalar, S16, 774, "kPa", 0.1, 0, 0, 700, 1
tss_tps = scalar, S16, 776, "%", 0.10000, 0.00000, 0.00, 100.00, 1;
#if CELSIUS
EAEAWWCLTbins = array, S16, 778, [ 12], "deg", 0.05555, -320.000, {cltlowlim}, {clthighlim}, 0
EAESOWCLTbins = array, S16, 802, [ 12], "deg", 0.05555, -320.000, {cltlowlim}, {clthighlim}, 0
#else
EAEAWWCLTbins = array, S16, 778, [ 12], "deg", 0.10000, 0.000,{cltlowlim}, {clthighlim}, 1
EAESOWCLTbins = array, S16, 802, [ 12], "deg", 0.10000, 0.000,{cltlowlim}, {clthighlim}, 1
#endif
; airden_scaling = scalar, U08, 826, "%", 1, 0.00000, 50, 150.00, 0
ts_port_f = bits , U08, 827, [0:3], "PE1", "FLEX", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "Remote Port3 Bit 0", "Remote Port3 Bit 1", "Remote Port3 Bit 2", "Remote Port3 Bit 3", "Remote Port3 Bit 4", "Remote Port3 Bit 5", "Remote Port3 Bit 6", "Remote Port3 Bit 7"
ts_port_s = bits , U08, 827, [4:7], "PE1", "FLEX", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "Remote Port3 Bit 0", "Remote Port3 Bit 1", "Remote Port3 Bit 2", "Remote Port3 Bit 3", "Remote Port3 Bit 4", "Remote Port3 Bit 5", "Remote Port3 Bit 6", "Remote Port3 Bit 7"
; feature5_0 828 was 1000
OvrRunC = bits , U08, 828, [0:0], "Off", "On"
; OvrRunAndSpkC = bits , U08, 828, [7:7], "Off", "On"
f5_0_tsf = bits , U08, 828, [1:1], "Off", "On"
f5_0_tsf_opt = bits , U08, 828, [2:3], "Hardware", "rpm", "kPa", "TPS"
f5_0_tss_opt = bits , U08, 828, [5:6], "Hardware", "rpm", "kPa", "TPS"
f5_0_tss = bits , U08, 828, [4:4], "Off", "On"
pwmidlecranktaper= scalar, U08, 831, "s", 0.1, 0, 0, 10, 1
pwmidleset_inv = bits, U08, 832, [1:1], "Normal, 0%=off", "Inverted, 100%=off"
pwmidleset_koeo = bits, U08, 832, [7:7], "Off", "On"
fc_rpm = scalar, U16, 833, "rpm", 1, 0, 0, 15000, 0
fc_kpa = scalar, S16, 835, "kPa", 0.1, 0, 0, 700, 1
fc_tps = scalar, S16, 837, "%", 0.10000, 0.00000, 0.00, 100.00, 1;
#if CELSIUS
fc_clt = scalar, S16, 839, "°C", 0.05555, -320.000, {cltlowlim}, {clthighlim}, 1 ; * ( 2 bytes)
#else
fc_clt = scalar, S16, 839, "°F", 0.10000, 0.00000, {cltlowlim}, {clthighlim}, 1
#endif
fc_delay = scalar, U08, 841, "s", 0.1, 0, 0, 25.5, 1
tacho_opt80 = bits, U08, 842, [7:7], "Off", "On"
tacho_opt40 = bits, U08, 842, [6:6], "Normal", "Half speed"
tacho_opt3f = bits, U08, 842, [0:3], "IGN", "InjectorD", "InjectorC", "Boost", "FIDLE", "TACHOUT", "Output1", "Output2", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID"
EAElagsource = bits, U08, 843, [0:0], "TPSdot", "MAPdot"
EAElagthresh = scalar, S16, 844, "unit/sec", 1, 0, 0.00, 1000, 0
EAElagRPMmax = scalar, U16, 846, "rpm", 1, 0, 0.00, 15000, 0
fc_ego_delay = scalar, U08, 848, "s", 1, 0, 0.00, 10, 0
fc_rpm_lower = scalar, U16, 849, "rpm", 1, 0, 0, 15000, 0
pwmidle_shift_lower_rpm = scalar, U16, 851, "rpm", 1, 0, 0, 15000, 0
pwmidle_shift_open_time = scalar, U08, 853, "s", 0.1, 0, 0, 10, 1
;morepage5[15]
; Port Settings constants
rmt_psEnabled = array , U08, 864, [ 8], "on/off", 1.00000, 0.00000, 0, 1, 0 ; * ( 2 bytes)
rmt_psCondition = array , U08, 872, [ 8x2], "", 1.00000, 0.00000, 0, 255, 0 ; * ( 2 bytes)
rmt_psConnector = array , U08, 888, [ 8], "", 1.00000, 0.00000, 0, 255, 0 ; * ( 2 bytes)
rmt_psInitValue = array , U08, 896, [ 8], "", 1.00000, 0.00000, 0, 255, 0 ; * ( 2 bytes)
rmt_psPortValue = array , U08, 904, [ 8], "", 1.00000, 0.00000, 0, 255, 0 ; * ( 2 bytes)
rmt_psOutSize = array , U08, 912, [ 8x2], "", 1.00000, 0.00000, 0, 255, 0 ; * ( 2 bytes)
rmt_psOutOffset = array , U16, 928, [ 8x2], "", 1.00000, 0.00000, 0, 1024, 0 ; * ( 2 bytes)
rmt_psThreshold = array , S16, 960, [ 8x2], "", 1.00000, 0.00000,-32768.0,32767.0, 0 ; * ( 4 bytes)
rmt_psHysteresis = array , S16, 992, [ 8x2], "", 1.00000, 0.00000,-32768.0,32767.0, 0 ; * ( 4 bytes)
page = 3
advanceTable1 = array , S16, 000, [12x12], "deg", 0.10000, 0.00000,-10.00, 90.00, 1 ; * (288 bytes)
advanceTable2 = array , S16, 288, [12x12], "deg", 0.10000, 0.00000,-10.00, 90.00, 1 ; * (288 bytes)
srpm_table1 = array , U16, 576, [ 12], "RPM", 1.00000, 0.00000, 0.00,15000, 0 ; * ( 24 bytes)
srpm_table2 = array , U16, 600, [ 12], "RPM", 1.00000, 0.00000, 0.00,15000, 0 ; * ( 24 bytes)
smap_table1 = array , S16, 624, [ 12], { bitStringValue( algorithmUnits , IgnAlgorithm ) }, 0.10000, 0.00000, 0.00, 700, 1
smap_table2 = array , S16, 648, [ 12], { bitStringValue( algorithmUnits , IgnAlgorithm2 ) }, 0.10000, 0.00000, 0.00, 700, 1
feature3_1 = bits, U08, 672, [1:1], "Off", "On"
feature3_3 = bits, U08, 672, [3:3], "Off", "On"
feature3_matase = bits, U08, 672, [6:6], "Off", "On"
launch_opt_on = bits, U08, 673, [6:7], "Off", "Launch","INVALID","Launch/Flatshift"
launch_opt_pins = bits, U08, 673, [0:3], "Launch", "Tableswitch", "INVALID", "INVALID", "Baro", "Knock", "Remote Port3 Bit 0", "Remote Port3 Bit 1", "Remote Port3 Bit 2", "Remote Port3 Bit 3", "Remote Port3 Bit 4", "Remote Port3 Bit 5", "Remote Port3 Bit 6", "Remote Port3 Bit 7", "INVALID" "INVALID"
launch_sft_zone = scalar, S16, 674, "RPM", 1.00000, 0.00000, 100, 2000, 0 ; * ( 2 bytes)
launch_sft_deg = scalar, S16, 676, "deg", 0.10000, 0.00000, -90.0, 180.00, 2 ; * ( 2 bytes)
launch_hrd_lim = scalar, U16, 678, "RPM", 1.00000, 0.00000, 0.00, 15000, 0 ; * ( 2 bytes)
launch_tps = scalar, S16, 680, "%", 0.10000, 0.00000, 0.0, 100.00, 0 ;
launchlimopt = bits , U08, 682, [0:1], "None", "Spark Cut", "Fuel Cut", "Spark and fuel" ; * ( 1 byte)
; spare
flats_arm = scalar, U16, 685, "RPM", 1.00000, 0.00000, 0.00, 15000, 0
; spare
flats_deg = scalar, S16, 689, "deg", 0.10000, 0.00000, -90.0, 180.00, 2 ; * ( 2 bytes)
flats_hrd = scalar, U16, 691, "RPM", 1.00000, 0.00000, 0.00, 15000, 0 ; * ( 2 bytes)
staged_pri_size = scalar, U16, 693, "cc", 1.00000, 0.00000, 0.0000, 15000, 0 ; * ( 2 bytes)
staged_sec_size = scalar, U16, 695, "cc", 1.00000, 0.00000, 0.0000, 15000, 0 ; * ( 2 bytes)
staged_first_param = bits, U08, 697, [0:2], "Off", "RPM", "MAP", "TPS", "Duty", "Table", "INVALID", "INVALID"
staged_second_param = bits, U08, 697, [3:5], "Off", "RPM", "MAP", "TPS", "Duty", "INVALID", "INVALID", "INVALID"
staged_transition_on = bits, U08, 697, [6:6], "Off", "On"
staged_second_logic = bits, U08, 697, [7:7], "OR", "AND"
staged_transition_events = scalar, U08, 698, "ign events", 1.00000, 0.00000, 0.00, 255.0, 0
staged_param_1 = scalar, U16, 699, "units", 1.00000, 0.00000, 0.00, 25500.0, 0
staged_param_2 = scalar, U16, 701, "units", 1.00000, 0.00000, 0.00, 25500.0, 0
staged_hyst_1 = scalar, U16, 703, "units", 1.00000, 0.00000, 0.00, 25500.0, 0
staged_hyst_2 = scalar, U16, 705, "units", 1.00000, 0.00000, 0.00, 25500.0, 0
; Nitrous System
N2Oopt_01 = bits, U08, 707,[0:1],"INVALID","Bank1", "Bank2", "Both"
N2Oopt_2 = bits, U08, 707,[2:2], "Off", "On"
N2Oopt_3 = bits, U08, 707,[3:3], "Off", "On"
N2ORpm = scalar, U16, 708, "RPM", 1, 0, 1000, 15000, 0
N2ORpmMax = scalar, U16, 710, "RPM", 1, 0, 1000, 15000, 0
N2OTps = scalar, S16, 712, "%", 0.10000, 0.00000, 0.00, 100.00, 1;
#if CELSIUS
N2OClt = scalar, S16, 714, "°C", 0.05555, -320.000, {cltlowlim}, {clthighlim}, 1 ; * ( 2 bytes)
#else
N2OClt = scalar, S16, 714, "°F", 0.10000, 0.00000, {cltlowlim}, {clthighlim}, 1
#endif
N2OAngle = scalar, S16, 716, "deg", 0.10000, 0.00000, 0, 50, 2 ; * ( 2 bytes)
N2OPWLo = scalar, U16, 718, "ms", 0.001, 0, 0, 25, 3
N2OPWHi = scalar, U16, 720, "ms", 0.001, 0, 0, 25, 3
;nitrous/launch
N2Odel_launch = scalar, U08, 722, "s", 0.01, 0, 0, 2.55, 2
N2Odel_flat = scalar, U08, 723, "s", 0.01, 0, 0, 2.55, 2
N2Oholdon = scalar, U08, 724, "s", 0.01, 0, 0, 2.55, 2
;nitrous stage 2
; Nitrous System
N2O2Rpm = scalar, U16, 725, "RPM", 1, 0, 1000, 15000, 0
N2O2RpmMax = scalar, U16, 727, "RPM", 1, 0, 1000, 15000, 0
N2O2delay = scalar, U08, 729, "s", 0.01, 0, 0, 2.55,2
N2O2Angle = scalar, S16, 730, "deg", 0.10000, 0.00000, 0, 50, 2 ; * ( 2 bytes)
N2O2PWLo = scalar, U16, 732, "ms", 0.000666, 0, 0, 25, 3
N2O2PWHi = scalar, U16, 734, "ms", 0.000666, 0, 0, 25, 3
;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, 736, "", 1, 0, 0, 65535, 0
user_value2 = scalar, U16, 738, "", 1, 0, 0, 65535, 0
user_conf0 = bits, U08, 740, [0:0], "Off", "On"
user_conf1 = bits, U08, 740, [1:2], "Mode 0", "Mode 1", "Mode 2", "Mode 3"
;end user defined
staged_secondary_enrichment = scalar, U16, 741, "ms", 0.001, 0, 0, 10, 3
staged_percents = array, U08, 743, [6x6], "%", 1, 0, 0, 100, 0
staged_rpms = array, U16, 779, [6], "rpm", 1, 0, 0, 15000, 0
staged_loads = array, S16, 791, [6], "%", 0.1000, 0, 0, 250, 0
N2Oopt_pins = bits, U08, 803,[0:3], "Launch", "Tableswitch", "INVALID", "INVALID", "Baro", "Knock", "INVALID" "INVALID", "Remote Port3 Bit 0", "Remote Port3 Bit 1", "Remote Port3 Bit 2", "Remote Port3 Bit 3", "Remote Port3 Bit 4", "Remote Port3 Bit 5", "Remote Port3 Bit 6", "Remote Port3 Bit 7"
N2Oopt_pins2 = bits, U08, 803,[4:7], "InjectorD+C", "FIDLE+Output2", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "Remote Port1 Bits 0+1", "Remote Port1 Bits 1+2", "Remote Port1 Bits 2+3", "Remote Port1 Bits 3+4", "Remote Port1 Bits 4+5", "Remote Port1 Bits 5+6", "Remote Port1 Bits 6+7", "INVALID"
;2 gaps
dwelltime_trl = scalar, U08, 806, "ms", 0.10000, 0, 0.1, 25.5, 1
RotarySplitTable = array, S16, 807, [8x8], "deg", 0.10000, 0.00000, -20, 20, 1
RotarySplitLoad = array, U16, 935, [ 8 ], { bitStringValue( algorithmUnits , IgnAlgorithm ) }, 0.10000, 0.00000, 0, 65535, 0
RotarySplitRPM = array, U16, 951, [ 8 ], "RPM", 1, 0.00000, 0, 15000, 0
RotarySplitModeFD = bits, U08, 967, [0:0], "FC mode", "FD mode"
RotarySplitModeNeg = bits, U08, 967, [1:1], "Not Allowed", "Allowed"
NoiseFilterRpm = array, U16, 968, [ 4], "RPM", 1, 0.00000, 0.00, 15000, 0
NoiseFilterLen = array, U16, 976, [ 4], "usec", 0.66667, 0.00000, 0.00, 43000, 1
staged_primary_delay = scalar, U08, 985, "ign events", 1, 0, 0, 30, 0
VariableLagTPSBins = array, U08, 986, [4], "%/sec", 1, 0.000000, 0.00, 255.00, 0
VariableLagMapLags = array, U08, 990, [4], "Lag", 1, 0.000000, 0.00, 255.00, 0
trig_init = scalar, U08, 1003, "", 1,0,0,255,0
inj_time_mask = scalar, U08, 1004, "", 1,0,0,100,0
page = 4
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_coil = bits, U08, 2, [0:1], "Off", "One", "INVALID", "INVALID"
testop_fp = bits, U08, 2, [4:4], "Off", "On"
; testop_inj = bits, U08, 2, [5:6], "Off", "One", "Sequence", "All"
testop_inj = bits, U08, 2, [5:6], "Off", "One", "INVALID", "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,0,8388,1
testrpm = scalar, U16, 4, "RPM", 1.0, { (120000/testint) - (testint/ 0.128) },0,937500,0
testpw = scalar, U16, 6, "ms", 0.0006660, 0.00000, 0, 43, 3 ; * ( 1 byte)
testinjcnt = scalar, U16, 8, "", 1,0,0,65535,0, noLocalUpdate
testsel_inj = bits, U08, 10, [0:1], "Inj1", "Inj2", "Inj3/C", "Inj4/D"
testsel_coil = bits, U08, 10, [4:6], "CoilA", "CoilB", "CoilC", "CoilD", "INVALID", "INVALID", "INVALID", "INVALID"
advanceTable3 = array , S16, 011, [12x12], "deg", 0.10000, 0.00000,-10.00, 90.00, 1 ; * (288 bytes)
srpm_table3 = array , U16, 299, [ 12], "RPM", 1.00000, 0.00000, 0.00,15000, 0 ; * ( 24 bytes)
smap_table3 = array , S16, 323, [ 12], { bitStringValue( algorithmUnits , IgnAlgorithm ) }, 0.10000, 0.00000, 0.00, 700, 1 ; * ( 24 bytes)
testinjPwmT = scalar, U08, 347, "ms", 0.12800, 0.12800, 0.00, 32.64, 1 ; * ( 1 byte)
testinjPwmPd = scalar, U08, 348, "us", 1.00000, 0.00000, 40.00, 100.00, 0 ; * ( 1 byte)
testinjPwmP = scalar, U08, 349, "%", 1.00000, 0.00000, 0.00, 100.00, 0 ; * ( 1 byte)
#if CELSIUS
RevLimLookup = array , S16, 350, [ 8], "°C", 0.05555, -320.000,{cltlowlim}, {clthighlim}, 1 ; * ( 16 bytes)
#else
RevLimLookup = array , S16, 350, [ 8], "°F", 0.10000, 0.00000,{cltlowlim}, {clthighlim}, 1 ; * ( 16 bytes)
#endif
RevLimRpm1 = array , U16, 366, [ 8], "RPM", 1.00000, 0.00000, 0.00,15000, 0 ; * ( 16 bytes)
iacpostest = scalar, U16, 382, "steps", 1,0,0,512,0
iachometest = scalar, U16, 384, "steps", 1,0,0,65535,0
flashlock = bits, U08, 386, [0:0], "Locked", "Unlocked" ; tables 0-3
idleadvance_on = bits, U08, 387, [0:2], "Off", "Load", "RPMs", "INVALID", "Adaptive", "INVALID", "INVALID", "INVALID"
idleadvance_adder = bits, U08, 387, [3:3], "Set Value", "Adder"
idleadvance_cl_cond = bits, U08, 387, [4:4], "Manual", "CL PID"
idleadvance_tps = scalar, S16, 388, "%", 0.1, 0, 0, 100, 1
idleadvance_rpm = scalar, U16, 390, "rpm", 1, 0, 0, 3000, 0
idleadvance_load = scalar, S16, 392, "%", 0.1, 0, 0, 100, 0
#if CELSIUS
idleadvance_clt = scalar, S16, 394, "°C", 0.05555, -320, {cltlowlim}, {clthighlim}, 1
#else
idleadvance_clt = scalar, S16, 394, "°F", 0.10000, 0.00000, {cltlowlim}, {clthighlim}, 1
#endif
idleadvance_delay = scalar, U08, 396, "s", 1, 0, 0, 5, 0
; feature413_dbg = bits, U08, 413, [0:0], "Off", "On"
; feature413_missdbg = bits, U08, 413, [1:1], "Off", "On"
seq_inj = bits, U08, 415, [0:1], "Untimed injection", "Sequential/Semi-sequential", "Semi-sequential Siamese", "Sequential Siamese" ;
extrainj = bits, U08, 415, [2:2], "Standard drivers", "Additional drivers" ;
injdualvalue = bits, U08, 415, [3:3], "Single value", "Dual values" ;
usevetrim = bits, U08, 415, [4:4], "Don't use VE Trim Tables", "Use VE Trim Tables" ;
injusetable = bits, U08, 415, [5:5], "Fixed Timing", "Use table" ;
injtimingmode = bits, U08, 415, [6:7], "Start-of-pulse", "Mid-pulse", "End-of-pulse", "INVALID" ;
injadv1 = scalar, S16, 416, "deg", 0.10000, 0.00000, -360.00, 720.00, 1 ; * ( 2 bytes)
injadv2 = scalar, S16, 418, "deg", 0.10000, 0.00000, -360.00, 720.00, 1 ; * ( 2 bytes)
injadv3 = scalar, S16, 420, "deg", 0.10000, 0.00000, -360.00, 720.00, 1 ; * ( 2 bytes)
injstagedadv1 = scalar, S16, 422, "deg", 0.10000, 0.00000, -360.00, 720.00, 1 ; * ( 2 bytes)
injstagedadv2 = scalar, S16, 424, "deg", 0.10000, 0.00000, -360.00, 720.00, 1 ; * ( 2 bytes)
injstagedadv3 = scalar, S16, 426, "deg", 0.10000, 0.00000, -360.00, 720.00, 1 ; * ( 2 bytes)
injadvTable1 = array , S16, 428, [ 6x6], "deg", 0.10000, 0.00000, -360.00, 720.00, 1 ; * ( 72 bytes)
injadvTable2 = array , S16, 500, [ 6x6], "deg", 0.10000, 0.00000, -360.00, 720.00, 1 ; * ( 72 bytes)
srpm_injadv1 = array , U16, 572, [ 6], "RPM", 1.00000, 0.00000, 0.00,15000, 0 ; * ( 12 bytes)
srpm_injadv2 = array , U16, 584, [ 6], "RPM", 1.00000, 0.00000, 0.00,15000, 0 ; * ( 12 bytes)
smap_injadv1 = array , S16, 596, [ 6], { bitStringValue( algorithmUnits , algorithm ) }, 0.10000, 0.00000, 0.00, 700, 1 ; * ( 12 bytes)
smap_injadv2 = array , S16, 608, [ 6], { bitStringValue( algorithmUnits , algorithm ) }, 0.10000, 0.00000, 0.00, 700, 1 ; * ( 12 bytes)
injcrankadv1 = scalar, S16, 620, "deg", 0.10000, 0.00000, -360.00, 720.00, 1 ; * ( 2 bytes)
injcrankadv2 = scalar, S16, 622, "deg", 0.10000, 0.00000, -360.00, 720.00, 1 ; * ( 2 bytes)
hybrid_rpm = scalar, U16, 624, "RPM", 1.00000, 0.00000, 0.00,15000, 0 ; * ( 2 bytes)
hybrid_hyst = scalar, U16, 626, "RPM", 1.00000, 0.00000, 0.00,15000, 0 ; * ( 2 bytes)
injOpen3 = scalar, U16, 628, "ms", 0.001, 0.00000, 0.00, 25.50, 3 ; * ( 1 byte)
battFac3 = scalar, U16, 630, "ms/v", 0.000166667, 0.0, 0.0, 1.0, 3 ; * ( 1 byte)
injOpen4 = scalar, U16, 632, "ms", 0.001, 0.00000, 0.00, 25.50, 3 ; * ( 1 byte)
battFac4 = scalar, U16, 634, "ms/v", 0.000166667, 0.0, 0.0, 1.0, 3 ; * ( 1 byte)
veTrim1 = array , S08, 636, [16x16], "%", 0.0976562500, 1024.0000, 87.60, 112.40, 1 ; * (256 bytes)
frpm_trim1 = array , U16, 892, [ 16], "RPM", 1.00000, 0.00000, 0.00,15000, 0 ; * ( 32 bytes)
fmap_trim1 = array , S16, 924, [ 16], { bitStringValue( algorithmUnits , algorithm ) }, 0.10000, 0.00000, 0.00, 700, 1 ; * ( 32 bytes)
veTrim1dozen = array , S08, 636, [12x12], "%", 0.0976562500, 1024.0000, 87.60, 112.40, 1 ; * (144 bytes)
frpm_trim1doz = array , U16, 892, [ 12], "RPM", 1.00000, 0.00000, 0.00,15000, 0 ; * ( 24 bytes)
fmap_trim1doz = array , S16, 924, [ 12], { bitStringValue( algorithmUnits , algorithm ) }, 0.10000, 0.00000, 0.00, 700, 1 ; * ( 24 bytes)
;956
; ; The following is available for use by TunerStudio but isn't presently.
;
; ; Used to store sensor calibration settings last written to the controller
; sen_calib_table_id = array, U08, 968, [ 2], "id", 1.0, 0.0, 0, 255, 0 ; (2 bytes)
; sen_calib_units = array, U08, 970, [ 2], "id", 1.0, 0.0, 0, 255, 0 ; (2 bytes)
;
; sen_calib_bias = array, U32, 972, [ 2], "ohms", 1, 0, 0, 100000, 0 ; (8 bytes)
; sen_calib_temp = array, S16, 980, [ 2x3], "deg", 0.1, 0, -40, 400, 1 ; (12 bytes)
; sen_calib_res1 = array, U32, 992, [ 2x3], "ohms", 1, 0, 0, 100000, 0 ; (24 bytes )
;
; ; The index of the selected EGO sensor as defined in the solutions section of the
; ; ReferenceTable section of the ini, this may also be found in the ms2ReferenceTables.ini
; ; file found in the inc dir of your TunerStudio installation.
; ego_calib_selection= scalar, U08, 1016, "index", 1.0, 0.0, 0.0, 255, 0 ; * ( 1 byte)
; ego_calib_volts = array, U08, 1017, [ 3], "Volts", 0.1, 0.0, 0.0, 5.0, 1 ; (3 bytes)
; ego_calib_afrs = array, U08, 1020, [ 3], "AFR", 0.1, 0.0, 0.0, 25.5, 1 ; (3 bytes)
can_outpc_msg = scalar, U16, 956, "", 1, 0.00000, 1, 2047, 0
can_outpc_gp00_master = bits, U08, 958, [7:7], "Off", "On"
can_outpc_gp00_int = bits, U08, 958, [1:3], "INVALID", "1Hz", "2Hz", "5Hz", "10Hz", "20Hz", "50Hz", "INVALID"
can_outpc_gp00 = bits, U08, 958, [0:0], "Off", "On"
can_outpc_gp01 = bits, U08, 959, [0:0], "Off", "On"
can_outpc_gp02 = bits, U08, 960, [0:0], "Off", "On"
can_outpc_gp03 = bits, U08, 961, [0:0], "Off", "On"
can_outpc_gp04 = bits, U08, 962, [0:0], "Off", "On"
can_outpc_gp05 = bits, U08, 963, [0:0], "Off", "On"
can_outpc_gp06 = bits, U08, 964, [0:0], "Off", "On"
can_outpc_gp07 = bits, U08, 965, [0:0], "Off", "On"
can_outpc_gp08 = bits, U08, 966, [0:0], "Off", "On"
can_outpc_gp09 = bits, U08, 967, [0:0], "Off", "On"
can_outpc_gp10 = bits, U08, 968, [0:0], "Off", "On"
can_outpc_gp11 = bits, U08, 969, [0:0], "Off", "On"
can_outpc_gp12 = bits, U08, 970, [0:0], "Off", "On"
can_outpc_gp13 = bits, U08, 971, [0:0], "Off", "On"
can_outpc_gp14 = bits, U08, 972, [0:0], "Off", "On"
can_outpc_gp15 = bits, U08, 973, [0:0], "Off", "On"
can_outpc_gp17 = bits, U08, 974, [0:0], "Off", "On"
can_outpc_gp18 = bits, U08, 975, [0:0], "Off", "On"
can_outpc_gp26 = bits, U08, 976, [0:0], "Off", "On"
can_outpc_gp27 = bits, U08, 977, [0:0], "Off", "On"
can_outpc_gp28 = bits, U08, 978, [0:0], "Off", "On"
can_outpc_gp29 = bits, U08, 979, [0:0], "Off", "On"
can_outpc_gp43 = bits, U08, 980, [0:0], "Off", "On"
can_outpc_gp46 = bits, U08, 981, [0:0], "Off", "On"
can_outpc_gp47 = bits, U08, 982, [0:0], "Off", "On"
can_outpc_gp51 = bits, U08, 983, [0:0], "Off", "On"
can_outpc_gp52 = bits, U08, 984, [0:0], "Off", "On"
can_outpc_gp55 = bits, U08, 985, [0:0], "Off", "On"
can_outpc_gp57 = bits, U08, 986, [0:0], "Off", "On"
can_outpc_gp58 = bits, U08, 987, [0:0], "Off", "On"
can_outpc_gp59 = bits, U08, 988, [0:0], "Off", "On"
;spare1
;990
page = 5
veTable1 = array , U08, 0, [16x16], "%", 1.00000, 0.00000, 0.00, 255.00, 0 ; * (144 bytes)
veTable2 = array , U08, 256, [16x16], "%", 1.00000, 0.00000, 0.00, 255.00, 0 ;
veTable3 = array , U08, 512, [16x16], "%", 1.00000, 0.00000, 0.00, 255.00, 0 ;
frpm_table1 = array , U16, 768, [ 16], "RPM", 1.00000, 0.00000, 0.00,15000, 0
frpm_table2 = array , U16, 800, [ 16], "RPM", 1.00000, 0.00000, 0.00,15000, 0
frpm_table3 = array , U16, 832, [ 16], "RPM", 1.00000, 0.00000, 0.00,15000, 0
fmap_table1 = array , S16, 864, [ 16], { bitStringValue( algorithmUnits , algorithm ) }, 0.10000, 0.00000, 0.00, 700, 1
fmap_table2 = array , S16, 896, [ 16], { bitStringValue( algorithmUnits , algorithm2 ) }, 0.10000, 0.00000, 0.00, 700, 1
fmap_table3 = array , S16, 928, [ 16], { bitStringValue( algorithmUnits , algorithm ) }, 0.10000, 0.00000, 0.00, 700, 1
;same tables again but smaller - start in different places to 16x16
veTable1dozen = array , U08, 0, [12x12], "%", 1.00000, 0.00000, 0.00, 255.00, 0 ; * (144 bytes)
veTable2dozen = array , U08, 144, [12x12], "%", 1.00000, 0.00000, 0.00, 255.00, 0 ;
veTable3dozen = array , U08, 288, [12x12], "%", 1.00000, 0.00000, 0.00, 255.00, 0 ;
frpm_table1doz = array , U16, 768, [ 12], "RPM", 1.00000, 0.00000, 0.00,15000, 0 ; * ( 24 bytes)
frpm_table2doz = array , U16, 792, [ 12], "RPM", 1.00000, 0.00000, 0.00,15000, 0 ; * ( 24 bytes)
frpm_table3doz = array , U16, 816, [ 12], "RPM", 1.00000, 0.00000, 0.00,15000, 0 ; * ( 24 bytes)
fmap_table1doz = array , S16, 864, [ 12], { bitStringValue( algorithmUnits , algorithm ) }, 0.10000, 0.00000, 0.00, 700, 1
fmap_table2doz = array , S16, 888, [ 12], { bitStringValue( algorithmUnits , algorithm2 ) }, 0.10000, 0.00000, 0.00, 700, 1
fmap_table3doz = array , S16, 912, [ 12], { bitStringValue( algorithmUnits , algorithm ) }, 0.10000, 0.00000, 0.00, 700, 1
MAFFlow = array, U16, 960, [12], "g/sec", 0.01000, 0.00000, 0.00, 650.0, 1
MAFCor = array, U08, 984, [12], "%", 1.00000, 0.00000, 0.00, 255.0, 0
matclt_pct = array, U16, 996, [6], "%", 0.010, 0, 0, 100, 1
matclt_flow = array, U16, 1008, [6], "load*rpm", 100, 0, 0, 6553500, 0
page = 6
veTrim2 = array , S08, 0, [16x16], "%", 0.0976562500, 1024.0000, 87.60, 112.40, 1 ; * (256 bytes)
veTrim3 = array , S08, 256, [16x16], "%", 0.0976562500, 1024.0000, 87.60, 112.40, 1 ;
veTrim4 = array , S08, 512, [16x16], "%", 0.0976562500, 1024.0000, 87.60, 112.40, 1 ;
frpm_trim2 = array , U16, 768, [ 16], "RPM", 1.00000, 0.00000, 0.00,15000, 0 ; * ( 32 bytes)
frpm_trim3 = array , U16, 800, [ 16], "RPM", 1.00000, 0.00000, 0.00,15000, 0 ; * ( 32 bytes)
frpm_trim4 = array , U16, 832, [ 16], "RPM", 1.00000, 0.00000, 0.00,15000, 0 ; * ( 32 bytes)
fmap_trim2 = array , S16, 864, [ 16], { bitStringValue( algorithmUnits , algorithm ) }, 0.10000, 0.00000, 0.00, 700, 1 ; * ( 32 bytes)
fmap_trim3 = array , S16, 896, [ 16], { bitStringValue( algorithmUnits , algorithm ) }, 0.10000, 0.00000, 0.00, 700, 1 ; * ( 32 bytes)
fmap_trim4 = array , S16, 928, [ 16], { bitStringValue( algorithmUnits , algorithm ) }, 0.10000, 0.00000, 0.00, 700, 1 ; * ( 32 bytes)
;same tables again but smaller - start in different places to 16x16
veTrim2dozen = array , S08, 0, [12x12], "%", 0.0976562500, 1024.0000, 87.60, 112.40, 1 ; * (144 bytes)
veTrim3dozen = array , S08, 144, [12x12], "%", 0.0976562500, 1024.0000, 87.60, 112.40, 1 ;
veTrim4dozen = array , S08, 288, [12x12], "%", 0.0976562500, 1024.0000, 87.60, 112.40, 1 ;
frpm_trim2doz = array , U16, 768, [ 12], "RPM", 1.00000, 0.00000, 0.00,15000, 0 ; * ( 24 bytes)
frpm_trim3doz = array , U16, 792, [ 12], "RPM", 1.00000, 0.00000, 0.00,15000, 0 ; * ( 24 bytes)
frpm_trim4doz = array , U16, 816, [ 12], "RPM", 1.00000, 0.00000, 0.00,15000, 0 ; * ( 24 bytes)
fmap_trim2doz = array , S16, 864, [ 12], { bitStringValue( algorithmUnits , algorithm ) }, 0.10000, 0.00000, 0.00, 700, 1 ; * ( 24 bytes)
fmap_trim3doz = array , S16, 888, [ 12], { bitStringValue( algorithmUnits , algorithm ) }, 0.10000, 0.00000, 0.00, 700, 1 ; * ( 24 bytes)
fmap_trim4doz = array , S16, 912, [ 12], { bitStringValue( algorithmUnits , algorithm ) }, 0.10000, 0.00000, 0.00, 700, 1 ; * ( 24 bytes)
ITB_load_loadvals= array, S16, 960, [ 10], "%", 0.10000, 0.000, 0, 100.00, 1
ITB_load_switchpoints = array,S16, 980, [ 10], "%", 0.10000, 0.000, 0, 100.00, 1
ITB_load_rpms = array, U16, 1000, [ 10], "rpm", 1.0000, 0.000, 0, 15000, 0
page = 7
idle_up_options_input = bits, U08, 0,[0:3], "Launch", "Tableswitch", "INVALID", "INVALID", "Baro", "Knock", "INVALID" "INVALID", "Remote Port3 Bit 0", "Remote Port3 Bit 1", "Remote Port3 Bit 2", "Remote Port3 Bit 3", "Remote Port3 Bit 4", "Remote Port3 Bit 5", "Remote Port3 Bit 6", "Remote Port3 Bit 7"
idle_up_options = bits, U08, 0, [6:6], "Off","On" ; old name
ac_idleup_settings = bits, U08, 0, [6:6], "Off","On"
idle_up_options_inv = bits, U08, 0, [7:7], "Low","High"
idle_up_duty = scalar, U08, 1, "%", 0.392, 0.00000, 0, 100, 1 ; old name
idle_up_steps = scalar, U08, 1, "steps", 1.00000, 0.00000, 0, 255, 0 ; old name
ac_idleup_adder_duty = scalar, U08, 1, "%", 0.392, 0.00000, 0, 100, 1
ac_idleup_adder_steps = scalar, U08, 1, "steps", 1, 0, 0, 255, 0
idle_up_targ_rpm = scalar, U16, 2, "rpm", 1, 0, 0, 1000, 0 ; old name
ac_idleup_cl_targetadder = scalar, U16, 2, "rpm", 1, 0, 0, 1000, 0
ac_idleup_delay = scalar, U16, 4, "ms", 1.0000, 0.00000, 0.00, 1000, 0
ClutchPIDEntry = bits, U08, 6, [0:0], "Off","On"
pidrpm_window = scalar, U08, 7, "", 1, 0, 1, 120, 0
ac_idleup_io_out = bits, U08, 8, [0:4], "IGN", "InjectorD", "InjectorC", "Boost", "FIDLE", "TACHOUT", "Output1", "Output2", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "Remote Port1 Bit 0", "Remote Port1 Bit 1", "Remote Port1 Bit 2", "Remote Port1 Bit 3", "Remote Port1 Bit 4", "Remote Port1 Bit 5", "Remote Port1 Bit 6", "Remote Port1 Bit 7", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "Off"
pwmidle_cl_opts_initvaluetable = bits, U08, 9, [0:0], "Use last value", "Use initial value table"
pwmidle_cl_opts_initval_clt = bits, U08, 9, [1:1], "Use MAT", "Use CLT"
idleadvance_curve = array, S16, 10, [ 5 ], "deg", 0.10000, 0.00000, -20.00, 90.00, 1
idleadvance_loads = array, S16, 20, [ 5 ], "%", 0.10000, 0.00000, 0, 100, 1
idleadvance_rpms = array, S16, 30, [ 5 ], "rpms", 1, 0, -16000, 16000, 0
idleadvance_rpmsdelta = array, S16, 30, [ 5 ], "rpms", 1, 0, -16000, 16000, 0
idle_voltage_comp_voltage = array, S16, 40, [6], "V", 0.1000, 0, 9, 17, 1
idle_voltage_comp_voltagedelta = array, S16, 40, [6], "V", 0.1000, 0, -9, 9, 1
idle_voltage_comp_delta = array, S16, 52, [6], "%", 0.392, 0.00000, -20, 20, 1
pwmidle_cl_initialvalue_rpms = array, U16, 64, [5], "rpm", 1, 0, 0, 15000, 0
#if CELSIUS
pwmidle_cl_initialvalue_matorclt = array, S16, 74, [5], "°C", 0.05555, -320, -40, 230, 1
#else
pwmidle_cl_initialvalue_matorclt = array, S16, 74, [5], "°F", 0.10000, 0.000, -40, 450, 1
#endif
pwmidle_cl_initialvalues_duties = array, U08, 84, [5 x 5], "%", 0.392, 0.00000, 0, 100, 1
pwmidle_cl_initialvalues_steps = array, U08, 84, [5 x 5], "steps", 1, 0, 0, 255, 0
mafv = array, U16, 110, [64], "V", 0.001, 0.00000, 0.00, 5, 3
mafflow = array, U16, 238, [64], "g/sec", {0.01 * (maf_range + 1)}, 0.00000, 0.00, {655 * (maf_range + 1)}, 2
; Supplemental corrections for barometer and MAT (new curves)
baroCorrVals = array , S16, 366, [ 9], "kPa", 0.10000, 0.00000, 0.00, 110.00, 1 ; * ( 24 bytes)
#if CELSIUS
matCorrTemps2 = array , S16, 384, [ 9], "°C", 0.05555, -320.000,-40.00, 150.00, 1 ; * ( 12 bytes)
#else
matCorrTemps2 = array , S16, 384, [ 9], "°F", 0.10000, 0.00000,-40.00, 300.00, 1
#endif
baroCorrDelta = array , S16, 402, [ 9], "%", 0.10000, 0.00000,-120.0, 120.0, 1 ; * ( 6 bytes)
matCorrDelta2 = array , S16, 420, [ 9], "%", 0.10000, 0.00000,-120.0, 150.0, 1 ; * ( 6 bytes)
tpswot_tps = array , S16, 438, [ 6], "%", 0.10000, 0.00000, 0.0, 100.00, 1 ; * ( 12 bytes)
tpswot_rpm = array , U16, 450, [ 6], "RPM", 1.00000, 0.00000, 0.00,15000.00, 0 ; * ( 12 bytes)
knock_rpms = array, U16, 462, [10], "rpm", 1, 0, 0, 15000, 0
knock_thresholds = array, U16, 482, [10], "%", 0.1, 0, 0, 100, 1
shift_cut_on = bits, U08, 502, [0:0], "Off", "On"
shift_cut_in = bits, U08, 503,[0:3], "Launch", "Tableswitch", "INVALID", "INVALID", "Baro", "Knock", "INVALID" "INVALID", "Remote Port3 Bit 0", "Remote Port3 Bit 1", "Remote Port3 Bit 2", "Remote Port3 Bit 3", "Remote Port3 Bit 4", "Remote Port3 Bit 5", "Remote Port3 Bit 6", "Remote Port3 Bit 7"
shift_cut_out = bits, U08, 504, [0:3], "IGN", "InjectorD", "InjectorC", "Boost", "FIDLE", "TACHOUT", "Output1", "Output2", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "Off"
;spare
shift_cut_rpm = scalar, U16, 506, "RPM", 1, 0, 0, 15000, 0
shift_cut_tps = scalar, U16, 508, "%", 0.1, 0, 0, 100, 0
shift_cut_delay = scalar, U08, 510, "s", 0.01024, 0, 0, 2.55, 2
shift_cut_time = scalar, U08, 511, "s", 0.01024, 0, 0, 2.55, 2
shift_cut_soldelay=scalar, U08, 512, "s", 0.01024, 0, 0, 2.55, 2
shift_cut_reshift= scalar, U08, 513, "s", 0.01024, 0, 0, 2.55, 2
ac_idleup_min_rpm = scalar, U16, 514, "rpm", 1, 0, 0, 15000, 0
ac_delay_since_last_on = scalar, U08, 516, "s", 1.00000, 0.00000, 0, 30, 0
;spare at 517
boost_ctl_cl_pwm_targs1 = array, U08, 518, [8x8], "%", 1.000, 0.00000, 0.00, 100, 0
boost_ctl_cl_pwm_rpms1 = array, U16, 582, [8], "rpm", 1, 0, 0, 25000, 0
boost_ctl_cl_pwm_targboosts1 = array, S16, 598, [8], "kPa", 0.10000, 0, 0, 600, 0
can_bcast_user_id = scalar, U16, 614, "", 1, 0, 1, 2047, 0
can_bcast_user_d0 = scalar, U08, 616, "", 1, 0, 0, 255, 0
can_bcast_user_d1 = scalar, U08, 617, "", 1, 0, 0, 255, 0
can_bcast_user_d2 = scalar, U08, 618, "", 1, 0, 0, 255, 0
can_bcast_user_d3 = scalar, U08, 619, "", 1, 0, 0, 255, 0
can_bcast_user_d4 = scalar, U08, 620, "", 1, 0, 0, 255, 0
can_bcast_user_d5 = scalar, U08, 621, "", 1, 0, 0, 255, 0
can_bcast_user_d6 = scalar, U08, 622, "", 1, 0, 0, 255, 0
can_bcast_user_d7 = scalar, U08, 623, "", 1, 0, 0, 255, 0
dashbcast_id1 = scalar, U16, 624, "", 1, 0.00000, 0, 2047, 0
dashbcast_opta1 = bits, U08, 626, [0:0], "Off", "On"
dashbcast_opta1adv = bits, U08, 626, [1:1], "Automatic", "Advanced"
dashbcast_opta4outrate=bits, U08, 626, [4:5], "10Hz", "20Hz", "50Hz", "100Hz"
;next is 627
; 8 outmsg
outmsg1_offset01 = scalar, U16, 640, "", 1, 0, 0, 512, 0
outmsg1_offset02 = scalar, U16, 642, "", 1, 0, 0, 512, 0
outmsg1_offset03 = scalar, U16, 644, "", 1, 0, 0, 512, 0
outmsg1_offset04 = scalar, U16, 646, "", 1, 0, 0, 512, 0
outmsg1_offset05 = scalar, U16, 648, "", 1, 0, 0, 512, 0
outmsg1_offset06 = scalar, U16, 650, "", 1, 0, 0, 512, 0
outmsg1_offset07 = scalar, U16, 652, "", 1, 0, 0, 512, 0
outmsg1_offset08 = scalar, U16, 654, "", 1, 0, 0, 512, 0
outmsg1_offset09 = scalar, U16, 656, "", 1, 0, 0, 512, 0
outmsg1_offset10 = scalar, U16, 658, "", 1, 0, 0, 512, 0
outmsg1_offset11 = scalar, U16, 660, "", 1, 0, 0, 512, 0
outmsg1_offset12 = scalar, U16, 662, "", 1, 0, 0, 512, 0
outmsg1_offset13 = scalar, U16, 664, "", 1, 0, 0, 512, 0
outmsg1_offset14 = scalar, U16, 666, "", 1, 0, 0, 512, 0
outmsg1_offset15 = scalar, U16, 668, "", 1, 0, 0, 512, 0
outmsg1_offset16 = scalar, U16, 670, "", 1, 0, 0, 512, 0
outmsg1_size01 = scalar, U08, 672, "", 1, 0, 0, 8, 0
outmsg1_size02 = scalar, U08, 673, "", 1, 0, 0, 8, 0
outmsg1_size03 = scalar, U08, 674, "", 1, 0, 0, 8, 0
outmsg1_size04 = scalar, U08, 675, "", 1, 0, 0, 8, 0
outmsg1_size05 = scalar, U08, 676, "", 1, 0, 0, 8, 0
outmsg1_size06 = scalar, U08, 677, "", 1, 0, 0, 8, 0
outmsg1_size07 = scalar, U08, 678, "", 1, 0, 0, 8, 0
outmsg1_size08 = scalar, U08, 679, "", 1, 0, 0, 8, 0
outmsg1_size09 = scalar, U08, 680, "", 1, 0, 0, 8, 0
outmsg1_size10 = scalar, U08, 681, "", 1, 0, 0, 8, 0
outmsg1_size11 = scalar, U08, 682, "", 1, 0, 0, 8, 0
outmsg1_size12 = scalar, U08, 683, "", 1, 0, 0, 8, 0
outmsg1_size13 = scalar, U08, 684, "", 1, 0, 0, 8, 0
outmsg1_size14 = scalar, U08, 685, "", 1, 0, 0, 8, 0
outmsg1_size15 = scalar, U08, 686, "", 1, 0, 0, 8, 0
outmsg1_size16 = scalar, U08, 687, "", 1, 0, 0, 8, 0
outmsg2_offset01 = scalar, U16, 688, "", 1, 0, 0, 512, 0
outmsg2_offset02 = scalar, U16, 690, "", 1, 0, 0, 512, 0
outmsg2_offset03 = scalar, U16, 692, "", 1, 0, 0, 512, 0
outmsg2_offset04 = scalar, U16, 694, "", 1, 0, 0, 512, 0
outmsg2_offset05 = scalar, U16, 696, "", 1, 0, 0, 512, 0
outmsg2_offset06 = scalar, U16, 698, "", 1, 0, 0, 512, 0
outmsg2_offset07 = scalar, U16, 700, "", 1, 0, 0, 512, 0
outmsg2_offset08 = scalar, U16, 702, "", 1, 0, 0, 512, 0
outmsg2_offset09 = scalar, U16, 704, "", 1, 0, 0, 512, 0
outmsg2_offset10 = scalar, U16, 706, "", 1, 0, 0, 512, 0
outmsg2_offset11 = scalar, U16, 708, "", 1, 0, 0, 512, 0
outmsg2_offset12 = scalar, U16, 710, "", 1, 0, 0, 512, 0
outmsg2_offset13 = scalar, U16, 712, "", 1, 0, 0, 512, 0
outmsg2_offset14 = scalar, U16, 714, "", 1, 0, 0, 512, 0
outmsg2_offset15 = scalar, U16, 716, "", 1, 0, 0, 512, 0
outmsg2_offset16 = scalar, U16, 718, "", 1, 0, 0, 512, 0
outmsg2_size01 = scalar, U08, 720, "", 1, 0, 0, 8, 0
outmsg2_size02 = scalar, U08, 721, "", 1, 0, 0, 8, 0
outmsg2_size03 = scalar, U08, 722, "", 1, 0, 0, 8, 0
outmsg2_size04 = scalar, U08, 723, "", 1, 0, 0, 8, 0
outmsg2_size05 = scalar, U08, 724, "", 1, 0, 0, 8, 0
outmsg2_size06 = scalar, U08, 725, "", 1, 0, 0, 8, 0
outmsg2_size07 = scalar, U08, 726, "", 1, 0, 0, 8, 0
outmsg2_size08 = scalar, U08, 727, "", 1, 0, 0, 8, 0
outmsg2_size09 = scalar, U08, 728, "", 1, 0, 0, 8, 0
outmsg2_size10 = scalar, U08, 729, "", 1, 0, 0, 8, 0
outmsg2_size11 = scalar, U08, 730, "", 1, 0, 0, 8, 0
outmsg2_size12 = scalar, U08, 731, "", 1, 0, 0, 8, 0
outmsg2_size13 = scalar, U08, 732, "", 1, 0, 0, 8, 0
outmsg2_size14 = scalar, U08, 733, "", 1, 0, 0, 8, 0
outmsg2_size15 = scalar, U08, 734, "", 1, 0, 0, 8, 0
outmsg2_size16 = scalar, U08, 735, "", 1, 0, 0, 8, 0
outmsg3_offset01 = scalar, U16, 736, "", 1, 0, 0, 512, 0
outmsg3_offset02 = scalar, U16, 738, "", 1, 0, 0, 512, 0
outmsg3_offset03 = scalar, U16, 740, "", 1, 0, 0, 512, 0
outmsg3_offset04 = scalar, U16, 742, "", 1, 0, 0, 512, 0
outmsg3_offset05 = scalar, U16, 744, "", 1, 0, 0, 512, 0
outmsg3_offset06 = scalar, U16, 746, "", 1, 0, 0, 512, 0
outmsg3_offset07 = scalar, U16, 748, "", 1, 0, 0, 512, 0
outmsg3_offset08 = scalar, U16, 750, "", 1, 0, 0, 512, 0
outmsg3_offset09 = scalar, U16, 752, "", 1, 0, 0, 512, 0
outmsg3_offset10 = scalar, U16, 754, "", 1, 0, 0, 512, 0
outmsg3_offset11 = scalar, U16, 756, "", 1, 0, 0, 512, 0
outmsg3_offset12 = scalar, U16, 758, "", 1, 0, 0, 512, 0
outmsg3_offset13 = scalar, U16, 760, "", 1, 0, 0, 512, 0
outmsg3_offset14 = scalar, U16, 762, "", 1, 0, 0, 512, 0
outmsg3_offset15 = scalar, U16, 764, "", 1, 0, 0, 512, 0
outmsg3_offset16 = scalar, U16, 766, "", 1, 0, 0, 512, 0
outmsg3_size01 = scalar, U08, 768, "", 1, 0, 0, 8, 0
outmsg3_size02 = scalar, U08, 769, "", 1, 0, 0, 8, 0
outmsg3_size03 = scalar, U08, 770, "", 1, 0, 0, 8, 0
outmsg3_size04 = scalar, U08, 771, "", 1, 0, 0, 8, 0
outmsg3_size05 = scalar, U08, 772, "", 1, 0, 0, 8, 0
outmsg3_size06 = scalar, U08, 773, "", 1, 0, 0, 8, 0
outmsg3_size07 = scalar, U08, 774, "", 1, 0, 0, 8, 0
outmsg3_size08 = scalar, U08, 775, "", 1, 0, 0, 8, 0
outmsg3_size09 = scalar, U08, 776, "", 1, 0, 0, 8, 0
outmsg3_size10 = scalar, U08, 777, "", 1, 0, 0, 8, 0
outmsg3_size11 = scalar, U08, 778, "", 1, 0, 0, 8, 0
outmsg3_size12 = scalar, U08, 779, "", 1, 0, 0, 8, 0
outmsg3_size13 = scalar, U08, 780, "", 1, 0, 0, 8, 0
outmsg3_size14 = scalar, U08, 781, "", 1, 0, 0, 8, 0
outmsg3_size15 = scalar, U08, 782, "", 1, 0, 0, 8, 0
outmsg3_size16 = scalar, U08, 783, "", 1, 0, 0, 8, 0
outmsg4_offset01 = scalar, U16, 784, "", 1, 0, 0, 512, 0
outmsg4_offset02 = scalar, U16, 786, "", 1, 0, 0, 512, 0
outmsg4_offset03 = scalar, U16, 788, "", 1, 0, 0, 512, 0
outmsg4_offset04 = scalar, U16, 790, "", 1, 0, 0, 512, 0
outmsg4_offset05 = scalar, U16, 792, "", 1, 0, 0, 512, 0
outmsg4_offset06 = scalar, U16, 794, "", 1, 0, 0, 512, 0
outmsg4_offset07 = scalar, U16, 796, "", 1, 0, 0, 512, 0
outmsg4_offset08 = scalar, U16, 798, "", 1, 0, 0, 512, 0
outmsg4_offset09 = scalar, U16, 800, "", 1, 0, 0, 512, 0
outmsg4_offset10 = scalar, U16, 802, "", 1, 0, 0, 512, 0
outmsg4_offset11 = scalar, U16, 804, "", 1, 0, 0, 512, 0
outmsg4_offset12 = scalar, U16, 806, "", 1, 0, 0, 512, 0
outmsg4_offset13 = scalar, U16, 808, "", 1, 0, 0, 512, 0
outmsg4_offset14 = scalar, U16, 810, "", 1, 0, 0, 512, 0
outmsg4_offset15 = scalar, U16, 812, "", 1, 0, 0, 512, 0
outmsg4_offset16 = scalar, U16, 814, "", 1, 0, 0, 512, 0
outmsg4_size01 = scalar, U08, 816, "", 1, 0, 0, 8, 0
outmsg4_size02 = scalar, U08, 817, "", 1, 0, 0, 8, 0
outmsg4_size03 = scalar, U08, 818, "", 1, 0, 0, 8, 0
outmsg4_size04 = scalar, U08, 819, "", 1, 0, 0, 8, 0
outmsg4_size05 = scalar, U08, 820, "", 1, 0, 0, 8, 0
outmsg4_size06 = scalar, U08, 821, "", 1, 0, 0, 8, 0
outmsg4_size07 = scalar, U08, 822, "", 1, 0, 0, 8, 0
outmsg4_size08 = scalar, U08, 823, "", 1, 0, 0, 8, 0
outmsg4_size09 = scalar, U08, 824, "", 1, 0, 0, 8, 0
outmsg4_size10 = scalar, U08, 825, "", 1, 0, 0, 8, 0
outmsg4_size11 = scalar, U08, 826, "", 1, 0, 0, 8, 0
outmsg4_size12 = scalar, U08, 827, "", 1, 0, 0, 8, 0
outmsg4_size13 = scalar, U08, 828, "", 1, 0, 0, 8, 0
outmsg4_size14 = scalar, U08, 829, "", 1, 0, 0, 8, 0
outmsg4_size15 = scalar, U08, 830, "", 1, 0, 0, 8, 0
outmsg4_size16 = scalar, U08, 831, "", 1, 0, 0, 8, 0
outmsg5_offset01 = scalar, U16, 832, "", 1, 0, 0, 512, 0
outmsg5_offset02 = scalar, U16, 834, "", 1, 0, 0, 512, 0
outmsg5_offset03 = scalar, U16, 836, "", 1, 0, 0, 512, 0
outmsg5_offset04 = scalar, U16, 838, "", 1, 0, 0, 512, 0
outmsg5_offset05 = scalar, U16, 840, "", 1, 0, 0, 512, 0
outmsg5_offset06 = scalar, U16, 842, "", 1, 0, 0, 512, 0
outmsg5_offset07 = scalar, U16, 844, "", 1, 0, 0, 512, 0
outmsg5_offset08 = scalar, U16, 846, "", 1, 0, 0, 512, 0
outmsg5_offset09 = scalar, U16, 848, "", 1, 0, 0, 512, 0
outmsg5_offset10 = scalar, U16, 850, "", 1, 0, 0, 512, 0
outmsg5_offset11 = scalar, U16, 852, "", 1, 0, 0, 512, 0
outmsg5_offset12 = scalar, U16, 854, "", 1, 0, 0, 512, 0
outmsg5_offset13 = scalar, U16, 856, "", 1, 0, 0, 512, 0
outmsg5_offset14 = scalar, U16, 858, "", 1, 0, 0, 512, 0
outmsg5_offset15 = scalar, U16, 860, "", 1, 0, 0, 512, 0
outmsg5_offset16 = scalar, U16, 862, "", 1, 0, 0, 512, 0
outmsg5_size01 = scalar, U08, 864, "", 1, 0, 0, 8, 0
outmsg5_size02 = scalar, U08, 865, "", 1, 0, 0, 8, 0
outmsg5_size03 = scalar, U08, 866, "", 1, 0, 0, 8, 0
outmsg5_size04 = scalar, U08, 867, "", 1, 0, 0, 8, 0
outmsg5_size05 = scalar, U08, 868, "", 1, 0, 0, 8, 0
outmsg5_size06 = scalar, U08, 869, "", 1, 0, 0, 8, 0
outmsg5_size07 = scalar, U08, 870, "", 1, 0, 0, 8, 0
outmsg5_size08 = scalar, U08, 871, "", 1, 0, 0, 8, 0
outmsg5_size09 = scalar, U08, 872, "", 1, 0, 0, 8, 0
outmsg5_size10 = scalar, U08, 873, "", 1, 0, 0, 8, 0
outmsg5_size11 = scalar, U08, 874, "", 1, 0, 0, 8, 0
outmsg5_size12 = scalar, U08, 875, "", 1, 0, 0, 8, 0
outmsg5_size13 = scalar, U08, 876, "", 1, 0, 0, 8, 0
outmsg5_size14 = scalar, U08, 877, "", 1, 0, 0, 8, 0
outmsg5_size15 = scalar, U08, 878, "", 1, 0, 0, 8, 0
outmsg5_size16 = scalar, U08, 879, "", 1, 0, 0, 8, 0
outmsg6_offset01 = scalar, U16, 880, "", 1, 0, 0, 512, 0
outmsg6_offset02 = scalar, U16, 882, "", 1, 0, 0, 512, 0
outmsg6_offset03 = scalar, U16, 884, "", 1, 0, 0, 512, 0
outmsg6_offset04 = scalar, U16, 886, "", 1, 0, 0, 512, 0
outmsg6_offset05 = scalar, U16, 888, "", 1, 0, 0, 512, 0
outmsg6_offset06 = scalar, U16, 890, "", 1, 0, 0, 512, 0
outmsg6_offset07 = scalar, U16, 892, "", 1, 0, 0, 512, 0
outmsg6_offset08 = scalar, U16, 894, "", 1, 0, 0, 512, 0
outmsg6_offset09 = scalar, U16, 896, "", 1, 0, 0, 512, 0
outmsg6_offset10 = scalar, U16, 898, "", 1, 0, 0, 512, 0
outmsg6_offset11 = scalar, U16, 900, "", 1, 0, 0, 512, 0
outmsg6_offset12 = scalar, U16, 902, "", 1, 0, 0, 512, 0
outmsg6_offset13 = scalar, U16, 904, "", 1, 0, 0, 512, 0
outmsg6_offset14 = scalar, U16, 906, "", 1, 0, 0, 512, 0
outmsg6_offset15 = scalar, U16, 908, "", 1, 0, 0, 512, 0
outmsg6_offset16 = scalar, U16, 910, "", 1, 0, 0, 512, 0
outmsg6_size01 = scalar, U08, 912, "", 1, 0, 0, 8, 0
outmsg6_size02 = scalar, U08, 913, "", 1, 0, 0, 8, 0
outmsg6_size03 = scalar, U08, 914, "", 1, 0, 0, 8, 0
outmsg6_size04 = scalar, U08, 915, "", 1, 0, 0, 8, 0
outmsg6_size05 = scalar, U08, 916, "", 1, 0, 0, 8, 0
outmsg6_size06 = scalar, U08, 917, "", 1, 0, 0, 8, 0
outmsg6_size07 = scalar, U08, 918, "", 1, 0, 0, 8, 0
outmsg6_size08 = scalar, U08, 919, "", 1, 0, 0, 8, 0
outmsg6_size09 = scalar, U08, 920, "", 1, 0, 0, 8, 0
outmsg6_size10 = scalar, U08, 921, "", 1, 0, 0, 8, 0
outmsg6_size11 = scalar, U08, 922, "", 1, 0, 0, 8, 0
outmsg6_size12 = scalar, U08, 923, "", 1, 0, 0, 8, 0
outmsg6_size13 = scalar, U08, 924, "", 1, 0, 0, 8, 0
outmsg6_size14 = scalar, U08, 925, "", 1, 0, 0, 8, 0
outmsg6_size15 = scalar, U08, 926, "", 1, 0, 0, 8, 0
outmsg6_size16 = scalar, U08, 927, "", 1, 0, 0, 8, 0
outmsg7_offset01 = scalar, U16, 928, "", 1, 0, 0, 512, 0
outmsg7_offset02 = scalar, U16, 930, "", 1, 0, 0, 512, 0
outmsg7_offset03 = scalar, U16, 932, "", 1, 0, 0, 512, 0
outmsg7_offset04 = scalar, U16, 934, "", 1, 0, 0, 512, 0
outmsg7_offset05 = scalar, U16, 936, "", 1, 0, 0, 512, 0
outmsg7_offset06 = scalar, U16, 938, "", 1, 0, 0, 512, 0
outmsg7_offset07 = scalar, U16, 940, "", 1, 0, 0, 512, 0
outmsg7_offset08 = scalar, U16, 942, "", 1, 0, 0, 512, 0
outmsg7_offset09 = scalar, U16, 944, "", 1, 0, 0, 512, 0
outmsg7_offset10 = scalar, U16, 946, "", 1, 0, 0, 512, 0
outmsg7_offset11 = scalar, U16, 948, "", 1, 0, 0, 512, 0
outmsg7_offset12 = scalar, U16, 950, "", 1, 0, 0, 512, 0
outmsg7_offset13 = scalar, U16, 952, "", 1, 0, 0, 512, 0
outmsg7_offset14 = scalar, U16, 954, "", 1, 0, 0, 512, 0
outmsg7_offset15 = scalar, U16, 956, "", 1, 0, 0, 512, 0
outmsg7_offset16 = scalar, U16, 958, "", 1, 0, 0, 512, 0
outmsg7_size01 = scalar, U08, 960, "", 1, 0, 0, 8, 0
outmsg7_size02 = scalar, U08, 961, "", 1, 0, 0, 8, 0
outmsg7_size03 = scalar, U08, 962, "", 1, 0, 0, 8, 0
outmsg7_size04 = scalar, U08, 963, "", 1, 0, 0, 8, 0
outmsg7_size05 = scalar, U08, 964, "", 1, 0, 0, 8, 0
outmsg7_size06 = scalar, U08, 965, "", 1, 0, 0, 8, 0
outmsg7_size07 = scalar, U08, 966, "", 1, 0, 0, 8, 0
outmsg7_size08 = scalar, U08, 967, "", 1, 0, 0, 8, 0
outmsg7_size09 = scalar, U08, 968, "", 1, 0, 0, 8, 0
outmsg7_size10 = scalar, U08, 969, "", 1, 0, 0, 8, 0
outmsg7_size11 = scalar, U08, 970, "", 1, 0, 0, 8, 0
outmsg7_size12 = scalar, U08, 971, "", 1, 0, 0, 8, 0
outmsg7_size13 = scalar, U08, 972, "", 1, 0, 0, 8, 0
outmsg7_size14 = scalar, U08, 973, "", 1, 0, 0, 8, 0
outmsg7_size15 = scalar, U08, 974, "", 1, 0, 0, 8, 0
outmsg7_size16 = scalar, U08, 975, "", 1, 0, 0, 8, 0
outmsg8_offset01 = scalar, U16, 976, "", 1, 0, 0, 512, 0
outmsg8_offset02 = scalar, U16, 978, "", 1, 0, 0, 512, 0
outmsg8_offset03 = scalar, U16, 980, "", 1, 0, 0, 512, 0
outmsg8_offset04 = scalar, U16, 982, "", 1, 0, 0, 512, 0
outmsg8_offset05 = scalar, U16, 984, "", 1, 0, 0, 512, 0
outmsg8_offset06 = scalar, U16, 986, "", 1, 0, 0, 512, 0
outmsg8_offset07 = scalar, U16, 988, "", 1, 0, 0, 512, 0
outmsg8_offset08 = scalar, U16, 990, "", 1, 0, 0, 512, 0
outmsg8_offset09 = scalar, U16, 992, "", 1, 0, 0, 512, 0
outmsg8_offset10 = scalar, U16, 994, "", 1, 0, 0, 512, 0
outmsg8_offset11 = scalar, U16, 996, "", 1, 0, 0, 512, 0
outmsg8_offset12 = scalar, U16, 998, "", 1, 0, 0, 512, 0
outmsg8_offset13 = scalar, U16, 1000, "", 1, 0, 0, 512, 0
outmsg8_offset14 = scalar, U16, 1002, "", 1, 0, 0, 512, 0
outmsg8_offset15 = scalar, U16, 1004, "", 1, 0, 0, 512, 0
outmsg8_offset16 = scalar, U16, 1006, "", 1, 0, 0, 512, 0
outmsg8_size01 = scalar, U08, 1008, "", 1, 0, 0, 8, 0
outmsg8_size02 = scalar, U08, 1009, "", 1, 0, 0, 8, 0
outmsg8_size03 = scalar, U08, 1010, "", 1, 0, 0, 8, 0
outmsg8_size04 = scalar, U08, 1011, "", 1, 0, 0, 8, 0
outmsg8_size05 = scalar, U08, 1012, "", 1, 0, 0, 8, 0
outmsg8_size06 = scalar, U08, 1013, "", 1, 0, 0, 8, 0
outmsg8_size07 = scalar, U08, 1014, "", 1, 0, 0, 8, 0
outmsg8_size08 = scalar, U08, 1015, "", 1, 0, 0, 8, 0
outmsg8_size09 = scalar, U08, 1016, "", 1, 0, 0, 8, 0
outmsg8_size10 = scalar, U08, 1017, "", 1, 0, 0, 8, 0
outmsg8_size11 = scalar, U08, 1018, "", 1, 0, 0, 8, 0
outmsg8_size12 = scalar, U08, 1019, "", 1, 0, 0, 8, 0
outmsg8_size13 = scalar, U08, 1020, "", 1, 0, 0, 8, 0
outmsg8_size14 = scalar, U08, 1021, "", 1, 0, 0, 8, 0
outmsg8_size15 = scalar, U08, 1022, "", 1, 0, 0, 8, 0
outmsg8_size16 = scalar, U08, 1023, "", 1, 0, 0, 8, 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 = IACStart
requiresPowerCycle = baroCorr
requiresPowerCycle = egoType
requiresPowerCycle = alternate
requiresPowerCycle = twoStroke
requiresPowerCycle = nInjectors
requiresPowerCycle = OddFireang
requiresPowerCycle = algorithm
requiresPowerCycle = algorithm2
requiresPowerCycle = IgnAlgorithm
requiresPowerCycle = IgnAlgorithm2
requiresPowerCycle = mycan_id
requiresPowerCycle = flexFuel
requiresPowerCycle = flexport
requiresPowerCycle = dwellmode
requiresPowerCycle = knk_option
requiresPowerCycle = knkDirection
requiresPowerCycle = knkpull
requiresPowerCycle = knkport
requiresPowerCycle = spk_conf2_gm
requiresPowerCycle = spk_conf2_tfi
requiresPowerCycle = spk_conf2_oddodd
requiresPowerCycle = spk_conf2_kick
requiresPowerCycle = spk_conf2_dli
requiresPowerCycle = spk_config_camcrank
requiresPowerCycle = spk_config_trig2
requiresPowerCycle = spk_config_trig2l
requiresPowerCycle = spk_config_resetcam
requiresPowerCycle = spk_mode0
requiresPowerCycle = spk_mode3
requiresPowerCycle = spk_mode3a
requiresPowerCycle = spk_mode3_hirespol
requiresPowerCycle = rtbaroport
requiresPowerCycle = mapport
requiresPowerCycle = ego2port
requiresPowerCycle = feature4_0igntrig
requiresPowerCycle = tacho_opt3f
requiresPowerCycle = launch_opt_on
requiresPowerCycle = launch_opt_pins
requiresPowerCycle = N2Oopt_pins
requiresPowerCycle = boost_ctl_pins
requiresPowerCycle = afrload
requiresPowerCycle = eaeload
requiresPowerCycle = seq_inj
requiresPowerCycle = extrainj
requiresPowerCycle = MAFOption
requiresPowerCycle = egoport
requiresPowerCycle = ego2port
requiresPowerCycle = hybrid_rpm
requiresPowerCycle = hybrid_hyst
requiresPowerCycle = staged_first_param
requiresPowerCycle = staged_pri_size
requiresPowerCycle = staged_sec_size
requiresPowerCycle = dualTable
requiresPowerCycle = shift_cut_on
requiresPowerCycle = shift_cut_in
requiresPowerCycle = shift_cut_out
requiresPowerCycle = NoiseFilterOpts
requiresPowerCycle = secondtrigopts
requiresPowerCycle = boost_ctl_settings_on
requiresPowerCycle = ac_idleup_io_out
requiresPowerCycle = ac_idleup_settings
requiresPowerCycle = idle_up_options_input
requiresPowerCycle = N2Oopt_2
requiresPowerCycle = N2Oopt_3
requiresPowerCycle = N2Oopt_pins2
requiresPowerCycle = injpw_pins
defaultValue = tsCanId, "CAN ID 0"
defaultValue = rpmhigh, 9000
defaultValue = rpmwarn, 3000
defaultValue = rpmdang, 5000
defaultValue = loadhigh, 400
defaultValue = clt_exp, 0
[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Это базовое значение, от которого рассчитываются все топливные импульсы. Неправильное значение приведёт к слишком богатой или бедной смеси по всей карте. Обязательно укажите правильный объём двигателя, количество цилиндров и размер форсунок перед расчётом."
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."
feature4_0ftrig = "Selects the type of noise filtering.\nOff = No masking.\nSimple = Fixed 48% time mask\nAdvanced = Configurable mask time and percentage."
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) — если клапан имеет обратную логику."
IdleCtl_out = "Selects between normal stepper motor output connections or optional connections for Microsquirt add-on board.\nFor Microsquirt, the three options listed are the connections for IACEN, IAC1, IAC2"
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Если клапан работает в противоположном направлении от ожидаемого, включите инверсию."
pwmidleset_koeo = "Determines whether the idle valve runs during Key-On-Engine-Off. This can potentially help starting by giving additional air during the first few engine rotations."
pwmidle_port2 = "Output for PWM idle valve. Typically set to 'FIDLE' which is the connection on your ECU. The 'Remote Port' settings are used with an expansion box only."
pwmidle_freq = "Frequency to operate at. This varies with valve type. Ford/Bosch valves typically operate 50-100Hz. Miata valves are closer to 300Hz.\nBe aware that above 78Hz the output becomes less precise."
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Влияет на общее сглаживание аналоговых входов."
baud = "Скорость обмена данными. Должна быть установлена на 115200.\n\nНЕ ИЗМЕНЯЙТЕ БЕЗ ВЕСКОЙ ПРИЧИНЫ.\n\nЕсли вы измените это значение, вы также должны изменить скорость в TunerStudio: Communications -> Settings.\nНеправильная настройка приведёт к потере связи с ЭБУ."
; These tips for on/off outputs do not show up in TS 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."
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% при максимальной мощности."
baroCorr = "Включает/отключает коррекцию топлива по барометрическому давлению (высоте над уровнем моря).\nOff = игнорировать барометр.\nInitial MAP reading = одноразовое считывание MAP при включении зажигания. Не рекомендуется — может дать неверное значение, если быстро включить/выключить зажигание или при работающем двигателе.\nTwo independent sensors = отдельный датчик барометрического давления.\n\nНастоятельно рекомендуется использовать отдельный датчик baro, если автомобиль эксплуатируется в горной местности или на разных высотах."
mapport = "Подключение внешнего или внутреннего MAP датчика (аналоговый вход).\nОбычно используется встроенный MAP датчик на плате Megasquirt, подключённый вакуумной трубкой к впускному коллектору."
rtbaroport = "Подключение внешнего или внутреннего датчика барометрического давления.\nВыберите аналоговый вход, к которому подключён ваш датчик baro."
baro_upper = "Максимально возможное барометрическое давление, которое может наблюдаться. Типично 102 кПа.\nОграничивает ошибочные показания датчика. На уровне моря давление обычно 99–103 кПа."
baro_lower = "Минимально возможное барометрическое давление. Типично 68–80 кПа.\nОграничивает ошибочные показания. На высоте 3000м давление около 70 кПа.\nУстановите нижний предел с запасом для вашего региона эксплуатации."
baro_default = "Фиксированное значение барометрического давления, используемое при отключённой барометрической коррекции.\nУстановите значение, соответствующее вашему обычному месту эксплуатации. На уровне моря — 101 кПа."
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 — он обеспечивает лучшую работу на частичных нагрузках."
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Только для продвинутого использования."
afrload = "Ось нагрузки (Y) для таблицы целевого AFR.\nОбычно должна совпадать с осью нагрузки основной топливной таблицы."
eaeload = "Ось нагрузки (Y) для кривых EAE (Enhanced Accel Enrichment — улучшенное обогащение при ускорении)."
OvrRunC = "Отсечка топлива при торможении двигателем (overrun fuel cut) — полностью прекращает подачу топлива в режиме принудительного холостого хода (например, при спуске с горки на передаче).\nУбедитесь, что параметры настроены так, чтобы отсечка срабатывала только в реальных условиях торможения двигателем, а не при обычном вождении.\nЭкономит топливо и снижает выбросы."
fc_rpm = "Typically a number of hundred RPM above idle."
fc_kpa = "Typically this will be below your idle kPa."
fc_tps = "This should be set close to zero such that over-run only enables when you really are off the throttle."
fc_clt = "Установите порог температуры ОЖ, чтобы предотвратить работу отсечки на холодном двигателе.\nХолодный двигатель может заглохнуть при отсечке. Типичное значение: 60–70°C."
fc_delay = "Задержка предотвращает рывковое включение/выключение отсечки при переходных режимах.\nТипичное значение: 0.5–2 секунды. Слишком малая задержка вызовет дёргание при частых отпусканиях газа."
fc_ego_delay = "При отсечке лямбда-зонд покажет бедную смесь, и замкнутый контур EGO должен быть отключён до получения корректных показаний.\nУстановите достаточно большое значение, чтобы зонд успел вернуться к достоверным показаниям после возобновления подачи топлива.\nТипичное значение: 5–15 секунд."
fc_rpm_lower = "Позволяет отключить отсечку (возобновить подачу топлива) при этих RPM при низкой скорости замедления.\nТипичное значение: 1200–1500 RPM. Должно быть выше оборотов холостого хода."
RevLimOption_retard = "Опции ограничения оборотов с помощью позднего зажигания.\nOff = ограничение зажиганием не используется.\nProgressive Retard = опережение зажигания плавно уменьшается выше заданных RPM.\nFixed angle = выше заданных RPM опережение мгновенно переключается на указанный угол.\n\nProgressive Retard — более плавный метод, рекомендуется для уличных автомобилей."
RevLimOption_spkcut = "Включает ограничение оборотов отключением искры.\nВнимание! Может вызвать повреждение катализатора и создаёт громкие хлопки.\nНе работает с EDIS, TFI или GMDIS.\n\nОтключение искры подаёт несгоревшую смесь в выхлоп — используйте с осторожностью на автомобилях с катализатором."
RevLimOption_fuelcut = "Включение ограничения оборотов отсечкой топлива.\nНаиболее безопасный метод ограничения для катализатора по сравнению с отсечкой искры."
RevLimMaxRtd = "Максимальное значение позднения зажигания при ограничении оборотов.\nТипичное значение: 10–20°. Слишком большое значение может вызвать перегрев выпускного тракта."
RevLimRtdAng = "Значение угла зажигания, используемое в режиме Fixed angle.\nОбычно устанавливается 0° или отрицательное значение (ATDC)."
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-цилиндровом двигателе."
MAFOption = "Выбирает аппаратный вход, к которому подключён аналоговый MAF датчик.\nУбедитесь, что выбранный вход не используется другим датчиком."
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Используйте минимальный подходящий диапазон для лучшей точности на малых расходах."
feature7_mafcalib = "Select this if you want to use MAF in the 'old way' as per 1.1.x and earlier. See the 1.1.x MAF manual page. "
injPwmPd = "Период/частота во время фазы удержания (hold). Безопасно оставить 66 мкс.\nЭтот параметр определяет частоту ШИМ-модуляции тока удержания форсунки."
injPwmT = "Время фазы 'peak' (пик тока). Обычно устанавливается 1–1.5 мс.\nЭто время, в течение которого форсунка получает полный ток для быстрого открытия. После этого ток снижается до удерживающего."
injPwmP = "Процент тока удержания ('hold'). Типичные значения: 30–50%.\nСлишком низкий процент может вызвать нестабильную работу форсунки. Слишком высокий — перегрев форсунки и драйвера."
staged_first_param = "Включает двухступенчатый (staged) впрыск и задаёт основной параметр стейджинга, определяющий момент включения вторичных форсунок.\nДля табличного стейджинга: 0% = стейджинг не используется, 100% = полный стейджинг, промежуточные значения = частичный стейджинг.\n\nStaged впрыск позволяет использовать маленькие форсунки для точности на низких нагрузках и большие для высоких нагрузок."
staged_sec_size = "Размер вторичных форсунок в cc/min.\nОбычно вторичные форсунки больше первичных. Соотношение 1:2 или 1:3 типично."
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 — более агрессивный."
flexFuel = "Включает или отключает систему Flex Fuel (многотопливная система).\nПозволяет автоматически корректировать топливоподачу и зажигание в зависимости от содержания этанола в топливе.\nТребуется датчик содержания этанола (например, GM Flex Fuel sensor)."
flexport = "Выбирает вход, к которому подключён датчик содержания этанола.\nДатчик GM Flex Fuel выдаёт частотный сигнал, пропорциональный содержанию этанола."
fuelFreq0 = "Нижняя и верхняя частоты, генерируемые датчиком содержания этанола.\nДля датчика GM: 50 Гц (нижняя) и 150 Гц (верхняя)."
fuelFreq1 = "The high frequency generated by the sensor (e.g. 150Hz for the GM sensor)"
fuelCorr0 = "Множитель топливоподачи. 100% = без изменений.\nСтандартное значение 163% для E100 означает +63% дополнительного топлива.\nЭтанол имеет меньшую теплотворность, поэтому требуется больше топлива. E85 обычно требует примерно +30–40% (130–140%)."
fuelCorr1 = "The fuel multiplier. 100% means no change. The default of 163% for 100% ethanol gives 63% additional fuel."
fuelSpkDel0 = "Добавка к углу опережения зажигания (в градусах).\nE85 горит медленнее чистого бензина и требует большего опережения.\nТипичное добавление: +3–8° для E85. Точное значение зависит от двигателя и степени сжатия."
fuelSpkDel1 = "The timing addition in degrees at high frequency. E85 burns more slowly than pure gasoline and will require more advance."
flex_pct0 = "Процент этанола, соответствующий нижней и верхней частотам датчика.\nДля датчика GM: 0% и 100%."
flex_pct1 = "The ethanol percentage corresponding to the high frequency."
flex_baseline = "Процент этанола в вашем обычном топливе. Предполагается, что основные таблицы топлива и зажигания настроены для обычного топлива.\nПозволяет включить Flex Fuel без перенастройки базовых таблиц.\nНапример, если таблица настроена на E10, установите baseline=10 — при включении Flex Fuel длительность останется прежней на E10.\nУстановите 0 для обратной совместимости."
fuelCorr_default = "Множитель топлива при выходе частоты датчика за допустимый диапазон (неисправный датчик или ошибка).\nОбычно устанавливается для бензина (100%) как безопасное значение.\nДвигатель продолжит работать, но без коррекции Flex Fuel."
fuelSpkDel_default = "Добавка к опережению зажигания при неисправности датчика.\nОжидается 0 или отрицательное значение (уменьшение опережения для безопасности).\nПри неисправности датчика безопаснее использовать настройки для бензина."
egoAlgorithm = "Алгоритм замкнутого контура EGO (лямбда-коррекция):\nNone — коррекция по лямбда-зонду не выполняется.\nSimple — подходит для узкополосного (narrowband) лямбда-зонда. Простая коррекция шагами.\nPID — использует ПИД-регулятор (пропорционально-интегрально-дифференциальный). При правильной настройке быстро достигает целевого AFR и удерживает его без колебаний.\n\nPID рекомендуется для широкополосных (wideband) зондов. Simple — для узкополосных."
egoCount = "Количество событий зажигания между каждой коррекцией.\nМеньшее значение = более быстрая реакция, но возможны колебания. Большее = более стабильно, но медленнее.\nТипичное значение: 4–16."
egoDelta = "Размер каждого шага коррекции (в процентах).\nТипичное значение: 1–3%. Слишком большие шаги вызовут колебания смеси, слишком малые — медленную реакцию."
egoLimit = "Максимальный процент коррекции, который может выполнить замкнутый контур.\nТипичное значение: 10–25%. Если коррекция постоянно упирается в лимит, таблица VE нуждается в корректировке.\nБольшие лимиты маскируют ошибки настройки."
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 секунд."
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 настоятельно рекомендуется для качественной настройки."
EgoOption_dual = "Off = Single EGO sensor is used for closed-loop control of all injector channels\n\nOn = The second EGO sensor is used for closed-loop control of PW2 and PW4. Single VE and AFR target tables are used."
egoport = "Selects where the sensor is connected."
ego2port = "Selects where the sensor is connected."
kickdelay = "Время ожидания после trigger-return перед началом зарядки катушки в режиме кик-старта (в миллисекундах).\nУвеличьте, если происходит обратный удар при кик-старте."
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_gm = "With HEI7/8 this setting enables the 'bypass' output on spark B."
spk_conf2_tfi = "Allows you to enable Signature PIP mode if you have a Signature PIP distributor, where one vane is shorter than the others. Signature PIP mode is used with 'Basic Trigger' and allows the Megasquirt to use these distributors for sequential fuel."
spk_conf2_cam = "A few wheel modes have an optional cam signal. For most this setting has no effect at all."
spk_conf2_oddodd = "Alternate = большинство двигателей с неравномерным порядком вспышек: Ford V4, Chevy V6, Viper V10.\n\nPaired = Yamaha Vmax.\n\nCustom = установите собственные углы неравномерного зажигания."
spk_conf2_kick = "Primarily for kick-start engines, this enables a delayed spark during cranking. The dwell and spark are both scheduled at the trigger-return point for less chance of kick-back.\n\nCan only be used with \n-'Trigger-Return' or \n-'Basic Trigger' when the Trigger Angle < 20"
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 — два выхода, работают поочерёдно."
spk_mode3a = "Either 'Cam input' or 'MAP Sensor'. Typically set to 'Cam input'.\nDO NOT select 'MAP Sensor' unless you know why.\n\n'MAP Sensor' must ONLY be selected if you are using the MAP sensor for phase detection on a 1cyl engine or V-twin. Used with 'Dual wheel with missing tooth' only.\nSet the MAP sensor phase threshold on the MAP Sample settings page."
spk_mode3_hirespol = "Позволяет инвертировать полярность входа распредвала или высокоразрешающего тахометра.\n\nПользовательские декодеры требуют одинаковую полярность сигналов коленвала и распредвала. Если датчики разных типов (например, Hall + VR) делают это невозможным, используйте эту настройку.\nПрименяется не ко всем декодерам."
spk_config_spka = "D14 = standard 'LED' spark output on MS2.\nJS10 = lesser used alternate spark output.\nIGN1 = main logic spark output on Microsquirt.\nWLED = alternate spark output capable of driving a CDI white wire input or TFI."
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."
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_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 оборота коленвала). Для многозубовых колёс распредвала укажите соответствующее значение."
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 на двигателях с большим объёмом цилиндра и малым количеством цилиндров."
mapsample_opt1 = "Количество событий зажигания для усреднения MAP. Обычно 1 для больших двигателей или 2 для 1–2-цилиндровых.
Большее количество событий даёт более стабильное значение MAP, но замедляет реакцию на изменение нагрузки."
map_phase_thresh = "При использовании датчика MAP для определения фазы двигателя — задаёт порог давления для различения такта впуска и выпуска. Сильно зависит от двигателя, 80 кПа работало на небольшом одноцилиндровом.
Этот метод определения фазы менее надёжен, чем датчик распредвала, но может быть полезен на простых двигателях без датчика распредвала."
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_dp_decay_factor = "This setting determines how quickly the duty added by the dashpot adder decays to 0. The faster RPM falls, the longer the dashpot stays in effect."
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_Kp_new = "Пропорциональный коэффициент PID-регулятора ХХ. Реагирует мгновенно на изменение оборотов.
Увеличение даёт более быструю реакцию, но может вызвать колебания. Начните с 100 и настраивайте по поведению."
pwmidle_Ki_new = "Интегральный коэффициент PID-регулятора ХХ. Реагирует на длительное расхождение между целевыми и фактическими оборотами.
Устраняет статическую ошибку. Слишком большое значение приводит к медленным колебаниям вокруг целевых оборотов."
pwmidle_Kd_new = "Дифференциальный коэффициент PID-регулятора ХХ. Реагирует на скорость изменения оборотов.
Помогает демпфировать колебания. Обычно устанавливается маленьким или нулевым. Большие значения могут вызвать нервозную работу клапана."
pwmidle_min_duty = "The minimum duty that the PID code will use while engaged."
pwmidle_min_steps = "The minimum steps that the PID code will use while engaged."
pwmidle_max_rpm_new = "Регулирует агрессивность регулятора ХХ при достижении целевых оборотов. Увеличивайте ползунок до появления колебаний оборотов, затем уменьшите до их прекращения. Подождите 5–10 секунд между каждой регулировкой.
Это основная настройка чувствительности замкнутого контура ХХ. Слишком агрессивная настройка вызовет «раскачку» оборотов, слишком мягкая — медленный отклик на нагрузку (включение кондиционера, руля и т.д.)."
pwmidle_pid_wait_timer = "Определяет, как долго все условия входа в замкнутый контур ХХ должны быть выполнены перед его активацией.
Предотвращает преждевременное включение замкнутого контура при нестабильных условиях. Обычно 1–3 секунды."
pwmidle_targ_ramptime = "Время после входа в замкнутый контур ХХ, за которое фактические обороты должны достичь целевых.
Медленный рамп (большое значение) даёт плавный переход, быстрый — более резкий, но может вызвать колебания."
pwmidle_ms = "Частота выполнения алгоритма замкнутого контура ХХ (в миллисекундах).
Обычно 10–50 мс. Более частое выполнение даёт более точное управление."
pwmidle_rpmdot_disablepid = "Use so that engaging clutch without throttle when coasting does not leave PID running. Set so that the jump in RPM cancels closed-loop i.e. when RPMdot exceeds this threshold, closed-loop is cancelled.\nAvoids situations where PID stays running while not actually idling causing stalls once PID is entered again."
pwmidle_tps_threshold = "Closed-loop idle can activate below this TPS value."
pwmidle_rpmdot_threshold = "Closed-loop idle can activate below this RPMdot value."
pwmidle_decelload_threshold = "Closed-loop idle can activate above this load value.\nUse to avoid closed-loop idle activating during over-run. Set it to above the maximum load seen while decelerating."
ClutchPIDEntry = "Enables the use of a clutch or neutral switch to help determine when closed-loop idle should be active."
pidrpm_window = "An RPM smoothing feature."
boost_ctl_settings_on = "Включает или выключает управление наддувом.
Включайте только после полной настройки базовых параметров двигателя (зажигание, топливо, ХХ)."
boost_ctl_settings_initialvals = "For use with closed-loop boost control. Controls whether the initial values table is used to set the initial duty before closed-loop is engaged."
boost_ctl_settings_freq = "Частоты, доступные при использовании медленного диапазона частот.
Для стандартных вестгейтных соленоидов обычно 20–33 Гц. Для больших соленоидов может потребоваться более низкая частота."
boost_ctl_pins = "Выходные пины, доступные при использовании медленного диапазона частот.
Настройка «Off» полезна только при использовании CAN-шины для передачи положения лопаток турбины.
Выберите пин с достаточной токовой нагрузкой для вашего соленоида."
boost_ctl_settings_invert_new = "Установите так, чтобы бóльшая скважность давала бóльший наддув.
Большинство соленоидов наддува работают в нормальном режиме: большая скважность = больше воздуха мимо вестгейта = меньше наддув. В этом случае нужна инверсия. Проверьте логику вашего соленоида."
boost_ctl_ms = "Controls how often the boost control algorithm runs."
boost_ctl_settings_remote = "Enables a solenoid connected to an expansion board."
boost_ctl_remote = "Selects where the solenoid is connected."
boost_ctl_closeduty = "(Замкнутый контур) Скважность, ниже которой изменения больше не влияют на давление наддува.
Определяет нижнюю границу рабочего диапазона соленоида. Установите экспериментально."
boost_ctl_openduty = "(Замкнутый контур) Скважность, выше которой изменения больше не влияют на давление наддува.
Определяет верхнюю границу рабочего диапазона соленоида."
boost_ctl_settings_cl = "Выбор алгоритма управления — открытый или замкнутый контур.
Для односоленоидных систем:
* Открытый контур — таблица скважностей соленоида, применяемых напрямую.
* Замкнутый контур — таблица целевых давлений MAP в кПа. Система регулирует скважность для достижения целевого MAP.
Для dome-систем:
* Открытый контур — таблица целевых давлений в куполе, без привязки к фактическому MAP.
* Замкнутый контур — таблица целевых MAP. Система регулирует давление в куполе для достижения целевого MAP.
Замкнутый контур проще в настройке и компенсирует изменения температуры и высоты. Открытый — более предсказуем для гонок."
boost_ctl_lowerlimit = "(Замкнутый контур) Давление наддува должно быть в пределах этого числа кПа от целевого для активации замкнутого контура.
Вне этого диапазона клапан удерживается полностью открытым (вестгейт закрыт) для максимально быстрого раскрутки турбины.
Обычно 20–30 кПа. Слишком большое значение замедлит выход на наддув, слишком маленькое — может вызвать перенаддув при входе в замкнутый контур."
injpw_pins = "Fuel Metering pulse output pin. Aims to generate a pulse for every 80ul of fuel consumed."
injpw_scale = "Scaling factor percentage on internal metering pulse calculation."
flexboosttps = "Minimum TPS to enable boost control. \n\nZero boost will be targetted below this TPS%"
OverBoostOption_flexboost = "Uses Flex% as the Y axis on the boost target table instead of TPS.\n\nAllows you to vary boost by E85 percentage."
boost_ctl_sensitivity = "Регулирует агрессивность контроллера наддува. Увеличивайте ползунок до появления колебаний наддува вокруг целевого, затем уменьшите до их прекращения.
Это основной инструмент настройки в режиме Basic. Подождите несколько разгонов между регулировками для оценки результата."
boost_ctl_settings_tunemode = "Basic: uses fixed PID parameters P=100,I=100,D=100\n\nAdvanced: uses adjustable PID parameters for greater control."
boost_ctl_Kp = "Пропорциональный коэффициент замкнутого контура наддува. Вызывает немедленные изменения скважности при изменении ошибки наддува. (По умолчанию = 100.)
Увеличение ускоряет реакцию, но может вызвать колебания. Начните с 100."
boost_ctl_Ki = "Интегральный коэффициент замкнутого контура наддува. Вызывает изменения скважности при длительном отклонении от целевого наддува. Чем дольше наддув не на целевом — тем сильнее реакция. (По умолчанию = 100.)
Устраняет статическую ошибку. Слишком большое значение — медленные колебания наддува."
boost_ctl_Kd = "Дифференциальный коэффициент замкнутого контура наддува. Чем быстрее меняется ошибка — тем сильнее реакция для противодействия. (По умолчанию = 100.)
Помогает предотвратить перерегулирование. Начните с 100 и подстраивайте при необходимости."
OverBoostOption = "Выбор типа защиты от перенаддува: отсечка топлива, отсечка искры или оба варианта.
Отсечка топлива безопаснее для катализатора. Отсечка искры быстрее снижает обороты. Оба варианта — максимальная защита. Для турбодвигателей рекомендуется использовать оба."
OverBoostOption_tol = "Срабатывание защиты при превышении целевого наддува на определённое давление. Позволяет порогу перенаддува следовать за таблицей целевого наддува.
Полезно, когда целевой наддув меняется по оборотам/передаче — защита автоматически подстраивается."
boosttol = "На сколько кПа MAP может превысить целевой наддув до срабатывания защиты.
Обычно 20–30 кПа. Учитывайте инерцию турбины — при резком сбросе газа и нажатии снова наддув может кратковременно превысить целевой."
OverBoostKpa = "Максимальное абсолютное давление MAP (в кПа), при превышении которого срабатывает защита от перенаддува.
Установите на безопасный предел для вашего двигателя и турбосистемы. Учитывайте прочность шатунов, поршней, прокладки ГБЦ и самой турбины."
OverBoostHyst = "После срабатывания защиты от перенаддува — на сколько кПа ниже максимума должен упасть наддув для восстановления подачи топлива/искры.
Небольшой гистерезис (10–20 кПа) предотвращает постоянное включение/выключение защиты на границе порога."
rpmhigh = "Максимум RPM для отображения на шкалах, таблицах и кривых.
Настройте под ваш двигатель. Обычно на 1000–2000 RPM выше максимальных рабочих оборотов для удобства просмотра."
rpmwarn = "Обороты для жёлтой зоны предупреждения на шкалах.
Установите на 500–1000 RPM ниже красной зоны."
rpmdang = "Обороты для красной зоны опасности на шкалах.
Установите на значение, выше которого возможно повреждение двигателя."
loadhigh = "Максимальное значение «нагрузки» (например, кПа) для шкал, таблиц и кривых.
Для атмосферных двигателей — 105–110 кПа. Для турбо — максимальное ожидаемое давление + 20–30 кПа запас."
feature3_3 = "Синхронизированный пакетный впрыск (Sequenced batch fire) может обеспечить более повторяемую работу двигателя на системах пакетного впрыска. При каждом запуске пакетный впрыск привязывается к одному и тому же событию зажигания (цилиндру). Без этой функции привязка случайна. Обычно используется с 2 squirts/alternating.
Не рекомендуется для новых установок и может некорректно работать с большим числом «squirts»."
trig_init = "Определяет «триггер» зажигания. Обычно попробуйте 0 или 1.
Этот параметр задаёт начальный номер события зажигания. Если зажигание работает нестабильно — попробуйте другое значение."
inj_time_mask = "The percentage of the time between 'triggers' to fire the injectors. A rudimentary version of injector timing."
NoiseFilterOpts = "Включает фильтрацию шумов. Использует кривую для задания периода фильтра. Фильтр измеряет ширину импульса tach-in для отклонения коротких шумовых пиков и пропуска корректных широких импульсов.
Обычно 1000 мкс и более на низких оборотах, 100 мкс и более на высоких. Простые установки с трамблёром могут использовать значительно бóльшие значения.
Настройте кривую так, чтобы фильтр отсекал шум, но не блокировал реальные импульсы."
NoiseFilterOpts1 = "Включает игнорирование ложных импульсов тахометра. Ложные импульсы будут записаны в композитный логгер.
Полезно для диагностики: ложные импульсы видны в логе, но не влияют на работу двигателя."
NoiseFilterOpts2 = "Вход тахометра отключается на короткий период после действительного импульса для маскирования ложных импульсов.
Полезно для сигналов с «дребезгом» — например, от изношенных VR-датчиков."
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%.
Аналогично настройке для коленвала, но применяется к входу распредвала."
NoiseFilterOpts3 = "Фильтрует перекрёстные помехи между датчиками. Особенно полезно для колёс NipponDenso 24+2 с проводами Ne, G1, G2, G- (общий минус).
Общий провод заземления датчиков может вызывать наводки при срабатывании одного датчика на другой."
secondtrigopts3 = "A method to reject very short false noise spikes."
crankingRPM = "Установите на несколько сотен RPM выше вашей типичной скорости прокрутки стартером.
Обычно 300–500 RPM. Слишком низкое значение — двигатель останется в режиме прокрутки после запуска. Слишком высокое — двигатель перейдёт в рабочий режим ещё во время прокрутки."
floodClear = "При TPS выше этого значения во время прокрутки стартером топливо не подаётся — для очистки залитых цилиндров. Также отключает заливочный импульс (priming).
Типичное значение — 80–90% TPS. Если двигатель залит — полностью нажмите педаль газа и крутите стартером для продувки цилиндров."
altcrank = "Двигатели с большим числом цилиндров (например, V12) могут испытывать трудности с горячим запуском из-за слишком малых импульсов при впрыске на каждый такт.
Эта опция позволяет впрыскивать через такт с удвоенной шириной импульса. Полезно для достижения минимально стабильного времени открытия форсунок."
primedelay = "Задержка заливочных импульсов для ожидания набора давления медленным бензонасосом.
Если насос набирает давление медленно — увеличьте задержку, чтобы заливочный импульс подавался уже при рабочем давлении в рампе. Обычно 0.5–2 секунды."
feature3_matase = "Может использоваться для помощи при проблемах с «тепловым насыщением» (heat soak).
Тепловое насыщение возникает, когда горячий двигатель выключается и температура под капотом растёт из-за отсутствия обдува. Это может затруднить повторный запуск. Коррекция по MAT помогает компенсировать горячий воздух во впуске."
idleadvance_on = "Включает функцию управления УОЗ на холостом ходу.
Позволяет использовать отдельную кривую опережения зажигания на ХХ для стабилизации оборотов. Увеличение УОЗ повышает обороты, уменьшение — снижает."
idleadvance_adder = "Set Value = timing is set to the value from the curve\nAdder = value from curve adds to existing timing."
idleadvance_cl_cond = "Use conditions below or link to closed-loop idle."
idleadvance_tps = "Only activate below this TPS."
idleadvance_rpm = "Only activate below this RPM."
idleadvance_load = "Only activate above this load. (Helps code ignore over-run situations.)"
idleadvance_clt = "Активировать только при температуре охлаждающей жидкости выше указанного значения. Опережение зажигания на холостом ходу обычно плохо работает при прогреве двигателя, так как обороты нестабильны.
Совет: установите порог на уровне 60–70°C — это температура, при которой двигатель уже достаточно прогрет для стабильного холостого хода."
idleadvance_delay = "После выполнения условий активации ждать указанное время, прежде чем включать опережение зажигания на ХХ. Это помогает избежать ложных срабатываний.
Совет: задержка 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'.
Совет: если входной сигнал — открытый коллектор, используйте внутренний подтягивающий резистор к питанию."
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_dtble_adv = "Если значение в таблице зажигания изменилось на указанную величину — вернуться к нормальному углу, так как двигатель работает в другой области.
Совет: 5–10 градусов — типичное значение. Это означает, что при значительном изменении режима работы накопленный отвод сбрасывается."
EAEOption = "Включает систему смачивания стенок (wall-wetting) для переходных режимов. Эта модель учитывает плёнку топлива на стенках впускного коллектора.
Совет: EAE (Enhanced Accel Enrichment) даёт более точный расчёт обогащения при переходных режимах, но требует более тщательной настройки. Начните с базового ускорительного обогащения, затем переходите к EAE."
feature7_aetpswot = "Включает кривую, моделирующую эффективную 100% TPS для данных оборотов. Это позволяет малым движениям дросселя на низких оборотах вызывать более активный отклик, а движения дросселя выше порога 'полного открытия' игнорируются.
Совет: полезно для двигателей с большой дроссельной заслонкой, где полное открытие на низких оборотах не добавляет воздуха."
mapThresh = "Порог срабатывания обогащения по скорости изменения MAP (MAPdot). Обогащение включается при превышении этого значения.
Совет: начните с 20–30 кПа/сек. Слишком низкий порог вызовет ложные срабатывания, слишком высокий — задержку отклика на резкое открытие дросселя."
aeEndPW = "После основного импульса обогащения — убавить обогащение до этого значения.
Рекомендуется 0. Ненулевое значение может привести к переобогащению в конце переходного режима."
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_lorpm = "Below this RPM full enrichment is enabled."
ae_hirpm = "Above this RPM, there is no enrichment. In between the enrichment is on a sliding scale."
tpsProportion = "Баланс между MAPdot и TPSdot для ускорительного обогащения. 0% = полностью MAPdot, 100% = полностью TPSdot.
Совет: для двигателей с Alpha-N (TPS-based) используйте 100%. Для Speed Density (MAP-based) — 0–30%. Для смешанного режима — 50–70%. MAPdot лучше отражает реальное наполнение, TPSdot быстрее реагирует."
f5_0_tsf = "Включает переключение таблиц топлива.
Совет: позволяет переключаться между двумя таблицами VE — например, для разного топлива, режимов «эконом/спорт» или для переключения между атмосферным и наддувным режимами."
f5_0_tsf_opt = "Hardware = физический переключатель или кривая плавного перехода (blend).
RPM, kPa, TPS — автоматическое переключение при превышении порога, заданного ниже.
Совет: blend-кривая позволяет плавно переходить между таблицами, что предотвращает рывки при переключении."
ts_port_f = "Selects where the switch is connected. \nExpansion boards will need configuring through 'CAN parameters'."
tsf_rpm = "Порог по оборотам для автоматического переключения таблицы топлива.
Совет: используется при выборе режима RPM. Выше этого значения активируется вторая таблица."
tsf_kpa = "Порог по давлению во впускном коллекторе (кПа) для переключения таблицы топлива.
Совет: полезно для переключения таблиц при выходе в наддув (например, при 100+ кПа)."
tsf_tps = "Порог по TPS для переключения таблицы топлива.
Совет: переключение по положению дросселя — простой способ активировать «мощностную» таблицу при полном газе."
f5_0_tss = "Включает переключение таблиц зажигания.
Совет: полезно для переключения между «безопасной» таблицей с консервативными углами и «агрессивной» для гонок на качественном топливе."
f5_0_tss_opt = "Hardware = физический переключатель или кривая плавного перехода.
RPM, kPa, TPS — автоматическое переключение по порогу.
Совет: для турбо-двигателей часто используют переключение по MAP — более агрессивные углы на атмосферном режиме, консервативные — под наддувом."
ts_port_s = "Selects where the switch is connected. \nExpansion boards will need configuring through 'CAN parameters'."
tss_rpm = "Порог по оборотам для переключения таблицы зажигания.
Совет: выше этого значения активируется вторая таблица зажигания."
tss_kpa = "Порог по давлению (кПа) для переключения таблицы зажигания.
Совет: на наддувных двигателях — переключение на более консервативную таблицу при высоком буст-давлении."
tss_tps = "Порог по TPS для переключения таблицы зажигания.
Совет: переключение по положению дросселя для активации другой таблицы при полном газе."
launch_opt_on = "Off — весь лаунч-контроль отключён.\nLaunch — только лаунч-контроль (ограничитель для старта), без Flat Shift.\nLaunch/flatshift — лаунч-контроль и Flat Shift.\nFlat Shift используется на МКПП для переключения передач без сброса газа — при нажатии сцепления активируется ограничитель, позволяя быстро переключить передачу. Очень эффективно на турбомоторах для поддержания наддува."
launch_opt_pins = "Вход для переключателя/кнопки лаунч-контроля.\nОбычно подключается к кнопке на руле или педали сцепления. Вход срабатывает при замыкании на массу. Для дрэг-рейсинга часто используется кнопка на руле."
launch_sft_zone = "Мягкий лимит на столько оборотов ниже жёсткого лимита. (Иногда называется 'диапазон управления'.) Типичное значение: 200 об/мин.\nВ этой зоне применяется плавное ограничение через отбор угла зажигания. Это позволяет мягко подвести обороты к жёсткому лимиту без резких рывков."
launch_sft_deg = "Абсолютный угол опережения зажигания при мягком ограничении. Например, 5 означает 5° до ВМТ.\nМалые значения (0-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 эффект)."
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Обычно устанавливается близко к максимальным рабочим оборотам двигателя или зоне отсечки. Это предотвращает перекрут при переключении."
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 = вторичные."
N2Oopt_pins = "Вход для включения системы нитроса. (Большинство входов срабатывают при замыкании на массу, один ожидает сигнал 12В.)\nПодключите к тумблеру или кнопке управления нитросом. Размещайте в доступном месте для быстрого включения/отключения. Рекомендуется использовать защитную крышку."
N2Oopt_pins2 = "Selects where the outputs are connected.\nExpansion boards will need configuring through 'CAN parameters'."
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Вторая ступень позволяет добавить мощность сверх первой ступени. Обычно активируется с задержкой после первой ступени или на определённых оборотах. Убедитесь, что двигатель рассчитан на суммарную мощность обеих ступеней."
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 при полной нагрузке обеих ступеней."
mycan_id = "Установите 0, если не настраиваете это устройство как вторичный ECU для сбора данных.\nИзменяйте только в многоконтроллерных конфигурациях, где несколько ECU общаются по шине CAN. Каждый ECU в сети должен иметь уникальный идентификатор."
enable_pollPWM = "Включает захват ШИМ-сигнала (импульсы/частота) с платы расширения.\nПлата расширения позволяет добавить дополнительные входы/выходы через шину CAN. Эта опция активирует приём данных ШИМ от внешней платы."
can_poll = "Enables fetching data from expansion board via CAN."
can_poll_id0 = "CANid of expansion board."
can_poll_id1 = "CANid of expansion board."
can_poll_id2 = "CANid of expansion board."
can_poll_id3 = "CANid of expansion board."
poll_tablePWM = "Номер таблицы на плате расширения для данных ШИМ.\nСм. документацию вашей платы расширения для определения правильного номера таблицы."
poll_offsetPWM = "Смещение данных на плате расширения.\nОпределяет позицию данных в сообщении CAN. См. документацию платы расширения."
enable_pollADC03= "Enables capturing analogue inputs from expansion board."
enable_pollADC47= "Enables capturing analogue inputs from expansion board."
poll_tableports = "Номер таблицы на плате расширения для цифровых портов.\nСм. документацию платы расширения для правильного номера."
poll_tableADC03 = "Table number on expansion board."
poll_tableADC47 = "Table number on expansion board."
poll_offsetADC03 = "Data offset on expansion board."
poll_offsetADC47 = "Data offset on expansion board."
remotePWMfreq = "Clock frequency on expansion board. See documentation."
remotePWMprescale = "Prescaler on expansion board. See documentation."
enable_pollports = "CANid of expansion board for digital inputs/outputs."
poll_offsetports = "Data offset on expansion board."
ports_dir = "Selects combination of inputs or outputs.\n\n3 inputs :\n- port 1, port 2, port 3 = input\n\n2 inputs, 1 output :\n- port 1 = output\n- port 2, port 3 = input\n\n1 input, 2 outputs :\n- port 1, port 2 = output\n- port 3 = input"
port1_type = "Digital = converts into 8 on/off inputs/outputs.\nSingle value = one input or output."
port2_type = "Digital = converts into 8 on/off inputs/outputs.\nSingle value = one input or output."
port3_type = "Digital = converts into 8 on/off inputs/outputs.\nSingle value = one input or output."
port_generic = "Enables use of programmeable on/off outputs on expansion board.\n\nRequires that the port be defined as an output."
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_xxx = "Включает отправку пользовательского CAN-пакета.
Позволяет настроить произвольное CAN-сообщение для взаимодействия со сторонним оборудованием — дополнительными приборами, дашбордами, внешними контроллерами и т.д. Формат и содержимое пакета настраиваются отдельно."
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)."
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 = "Желаемая позиция шагового клапана ХХ при тестировании.
Используйте для проверки работы шагового мотора — задайте позицию и убедитесь, что клапан перемещается. Большие значения = более открытый клапан."
seq_inj = "Untimed injection = batch fire injection non sequential\nSequential/Semi-sequential = Injection is timed to specific crank angle, either once per rev (semi) or once per cycle (sequential)\nSemi-sequential Siamese = For siamese port engines\nSequential Siamese = for siamese port engines."
injtimingmode = "What the injection timing angle refers to. End of pulse is typically used and set so that the injection pulse is completed just before the intake valve opens."
injusetable = "Whether a injection single timing value or a mapped table of timing is used."
injdualvalue = "For siamese allows different timing for each 'half'."
injadv1 = "Fixed angle for first injection."
injadv2 = "Fixed angle for second injection."
injstagedadv1 = "Allows different angles when staging."
injstagedadv2 = "Allows different angles when staging."
injcrankadv1 = "Timing during cranking."
injcrankadv2 = "Timing during cranking."
usevetrim = "Allows each injection to be trimmed to allow for differing fuel requirements per cylinder."
extrainj = "Allows 3rd, 4th injector channels. Note that the MS2 requires modification to enable these."
hybrid_rpm = "Sets the RPM to switch to a single pulse per injector."
hybrid_hyst = "Deadband on that RPM."
injadv3 = "Injector timing in single-pulse mode."
injstagedadv3 = "Allows different angles when staging."
dualTable = "Select between\n- Single Table = a single fuel algorithm (possibly using multiple blended tables)\n-Dual Table = the two injector banks have their own VE (VE1,2) and AFR (AFR1,2) tables running independently."
feature4_0VEtblsize = "Allows the selection of either 12x12 or 16x16 fuel tables. Before changing size, use the 'Export' feature on your VE tables to save them. Change size then use 'Import' to bring them back."
mapsample_opt2 = "«Use event average» подходит для большинства двигателей.
«Use timed min» предназначено для одноцилиндровых двигателей и V-twin с сильно пульсирующим сигналом MAP.
Для стандартных многоцилиндровых двигателей всегда используйте усреднение. Режим поиска минимума помогает получить стабильное значение MAP на двигателях с большим объёмом цилиндра и малым количеством цилиндров."
mapsample_window = "How many degrees to sample over."
mapsample_opt1 = "Количество событий зажигания для усреднения MAP. Обычно 1 для больших двигателей или 2 для 1–2-цилиндровых.
Большее количество событий даёт более стабильное значение MAP, но замедляет реакцию на изменение нагрузки."
mapsample_angle = "The starting angle (BTDC) for MAP sampling."
injOpen = "Injector dead time.\nTypically 0.7ms for low-z (~2.5ohm) and 0.9ms for high-z (~14ohm) or low-z injectors with resistors."
battFac = "Battery voltage correction factor, typically 0.2ms/V."
injctl2_1 = "Enables PWM (peak and hold) current limiting for low-z injectors.\nNote that low-z injectors with resistors do not need PWM current limiting."
injPwmP = "Процент тока удержания ('hold'). Типичные значения: 30–50%.\nСлишком низкий процент может вызвать нестабильную работу форсунки. Слишком высокий — перегрев форсунки и драйвера."
injPwmT = "Время фазы 'peak' (пик тока). Обычно устанавливается 1–1.5 мс.\nЭто время, в течение которого форсунка получает полный ток для быстрого открытия. После этого ток снижается до удерживающего."
injPwmPd = "Период/частота во время фазы удержания (hold). Безопасно оставить 66 мкс.\nЭтот параметр определяет частоту ШИМ-модуляции тока удержания форсунки."
injctl = "Enables different settings for bank 2 of injectors. Set to Off unless you actually have different injectors installed such as using Staged Injection."
injOpen2 = "Injector dead time.\nTypically 0.7ms for low-z (~2.5ohm) and 0.9ms for high-z (~14ohm) or low-z injectors with resistors."
battFac2 = "Battery voltage correction factor, typically 0.2ms/V."
injctl2_2 = "Enables PWM (peak and hold) current limiting for low-z injectors.\nNote that low-z injectors with resistors do not need PWM current limiting."
injPwmP2 = "The PWM duty cycle for the current limiting 'hold' period.\nTypically 30%."
injPwmT2 = "The full-current 'peak' time at the beginning of each pulse.\nTypically 1.0ms or more."
injPwmPd2 = "The PWM period aka. frequency."
injOpen3 = "Injector dead time.\nTypically 0.7ms for low-z (~2.5ohm) and 0.9ms for high-z (~14ohm)"
battFac3 = "Battery voltage correction factor, typically 0.2ms/V."
injOpen4 = "Injector dead time.\nTypically 0.7ms for low-z (~2.5ohm) and 0.9ms for high-z (~14ohm)"
battFac4 = "Battery voltage correction factor, typically 0.2ms/V."
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 — слабая искра, избыточный — перегрев катушки."
ac_idleup_settings = "Включает функцию повышения оборотов ХХ при работе кондиционера.
Предотвращает заглохание при включении компрессора кондиционера за счёт автоматического увеличения оборотов ХХ."
ac_idleup_io_out = "Выход для включения компрессора кондиционера.
ЭБУ управляет реле компрессора через этот выход, позволяя отключать компрессор при определённых условиях."
idle_up_options_input = "Switch input."
idle_up_options_inv = "Sets the active state of the input.\nNormally, the idle-up switch input is a ground-switch and the 'Low' settings should be used. In certain installations with appropriate wiring, an active 'High' input can be required."
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 шагов и подстройте."
idle_up_targ_rpm = "Bump up RPM by this much when A/C is active."
;curves and tables
tpswot_tps = "Задаёт порог TPS%, который считается полностью открытым дросселем (WOT), в зависимости от RPM.
На низких оборотах частичное открытие дросселя обеспечивает тот же воздушный поток, что и полное открытие. На максимальных оборотах нужен полностью открытый дроссель.
Когда TPS достигает или превышает этот порог, он считается 100%. Это делает ускорительный насос (accel enrichment) более чувствительным при малых углах открытия на низких RPM и предотвращает ложное срабатывание ускорительного насоса, если дроссель уже 'полностью открыт'."
idle_voltage_comp_delta = "Компенсация напряжения для 2-проводных PWM-клапанов холостого хода.
Некоторые клапаны ХХ работают по-разному при разном напряжении бортовой сети. При пониженном напряжении клапану нужна чуть большая скважность (положительное значение), при повышенном — меньшая (отрицательное). Настройте, если обороты ХХ 'плавают' при включении/выключении мощных потребителей (фары, кондиционер)."
maeBins = "Кривая обогащения при ускорении по MAP (MAPdot) — процент добавки к длительности впрыска.
Часть базовой схемы ускорительного насоса по времени. Чем быстрее растёт давление во впуске, тем больше дополнительного топлива нужно. Значение — процент от ReqFuel. Начните с умеренных значений и увеличивайте, если есть провалы при резком нажатии на газ."
taeBins = "Кривая обогащения при ускорении по TPS (TPSdot) — процент добавки к длительности впрыска.
Часть базовой схемы ускорительного насоса по времени. Чем быстрее открывается дроссель, тем больше топлива нужно добавить. Значение — процент от ReqFuel. На двигателях с длинным впуском (крупный плёнум) обогащение по TPS обычно важнее, чем по MAP."
knock_thresholds = "Порог допустимого уровня детонации до начала ретарда зажигания.
Значения сильно зависят от конкретного двигателя, типа датчика детонации и его расположения. Начните с низкого порога и увеличивайте, если система даёт ложные срабатывания. Лучше настраивать на прогретом двигателе под нагрузкой."
primePWTable = "Таблица пусковых (priming) импульсов впрыска в зависимости от температуры двигателя.
Пусковой импульс подаётся однократно при включении зажигания для смачивания стенок впускного коллектора и обеспечения начального топлива для запуска. Холодный двигатель требует более длинных пусковых импульсов.
Установка всех значений в 0 также отключит прокачку топливного насоса."
crankPctTable = "Процентная таблица топливоподачи при прокрутке стартером (cranking).
Большинству двигателей нужно 200–400% при холодном пуске и около 100% при горячем. Значение задаётся как процент от ReqFuel, поэтому при замене форсунок эту кривую менять не нужно.
Если двигатель плохо заводится на холодную — увеличьте значения в холодной зоне. Если заливает свечи — уменьшите."
asePctTable = "Таблица послепускового обогащения (ASE — After Start Enrichment) в процентах.
Сразу после запуска двигатель обычно нуждается в дополнительном топливе (5–50%). Значение — процентная добавка к основной топливоподаче. На холодном двигателе требуется больше, на горячем — меньше или 0%."
aseCntTable = "Длительность послепускового обогащения (ASE) в циклах двигателя или секундах.
Определяет, как долго применяется послепусковое обогащение. Холодному двигателю нужно более длительное ASE (до 60–120 секунд), горячему — минимальное (5–15 секунд)."
wueBins = "Таблица множителя прогревного обогащения (WUE — Warm-Up Enrichment) в процентах.
При холодном двигателе может потребоваться 200–300% от базового топлива. В последней строке таблицы (полностью прогретый двигатель) ОБЯЗАТЕЛЬНО должно быть 100% — это означает отсутствие коррекции.
WUE компенсирует плохое испарение топлива на холодных стенках впуска. Пользователи LPG могут отключить предупреждение о прогреве на странице настроек gauge."
mafflow = "Кривая расхода воздуха через MAF (массовый расходомер) в граммах/сек в зависимости от частоты или напряжения.
Начните с заводской характеристики вашего MAF-датчика, затем корректируйте (tweek) под вашу конкретную установку. Расположение MAF, длина и диаметр патрубков влияют на характеристику. Для точной настройки используйте логи AFR."
MAFCor = "Specifies the adjustment on top of the MAF sensor calibration you loaded through Tools-Calibrate MAF table\nStart out with the correction curve at 100% (no correction) and then 'tweak' to tune it to your install."
matclt_pct = "Кривая процента подмешивания CLT (температуры ОЖ) в показания MAT (температуры воздуха) в зависимости от расхода воздуха.
Теоретически: при нулевом расходе воздух в коллекторе нагревается до температуры ОЖ, при бесконечном — остаётся неизменным.
Кривая даёт 'лучшую оценку' реальной температуры впускного воздуха для расчёта плотности (speed-density).
Ожидается подмешивание CLT на малых расходах, падающее к нулю на больших.
При первом включении этой функции необходимо скорректировать VE на низких оборотах, так как они ранее компенсировали изменение плотности воздуха."
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% — нет коррекции. Изменяйте только при необходимости."
EAEAWN = "Модификация кривой EAE Adhere-to-walls (прилипание к стенкам) по оборотам.
На высоких оборотах повышается скорость воздушного потока и температура коллектора, что улучшает испарение топлива и уменьшает плёнку на стенках. Эта кривая позволяет скорректировать коэффициент прилипания."
EAEAWW = "Модификация кривой EAE Adhere-to-walls по температуре ОЖ.
Холодные стенки впускного коллектора конденсируют больше топлива. По мере прогрева испарение улучшается. Эта кривая корректирует коэффициент прилипания в зависимости от CLT."
EAEBAWC = "Кривая EAE: процент топлива, оседающего на стенках при каждом впрыске.
Ось Y — процент, ось X — нагрузка. Определяет, какая доля каждого впрыска формирует топливную плёнку на стенках канала, а не попадает непосредственно в цилиндр. Значения зависят от типа форсунок и конструкции впуска."
EAEBSOC = "Кривая EAE: процент топлива, всасываемого со стенок при каждом такте впуска.
Ось Y — процент от общего количества топлива на стенках. Ось X — нагрузка. Процент мал (примерно в 10 раз меньше коэффициента прилипания), так как за один цикл со стенок отрывается немного топлива. Это ключевой параметр для точной переходной топливоподачи."
EAESON = "Модификация кривой EAE Sucked-from-walls по RPM.
Более высокие обороты = более сильный воздушный поток = больше топлива отрывается от стенок за каждый цикл. Эта кривая корректирует коэффициент всасывания."
EAESOW = "Модификация кривой EAE Sucked-from-walls по температуре ОЖ.
Горячие стенки ускоряют испарение и отрыв топлива от плёнки. По мере прогрева двигателя топливная плёнка на стенках уменьшается быстрее."
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 и используйте эти данные для заполнения кривой."
; tables
pwmidle_cl_initialvalues_duties = "Начальная (ориентировочная) скважность ШИМ-клапана холостого хода для различных RPM/нагрузок.
Позволяет задать стартовое положение клапана для быстрого «запуска» замкнутого контура регулирования ХХ.
Практический совет: заполните таблицу значениями, при которых двигатель стабильно держит нужные обороты ХХ. Чем точнее начальные значения — тем быстрее и плавнее PID-регулятор выйдет на целевые обороты. Определите значения экспериментально в режиме открытого контура."
pwmidle_cl_initialvalues_steps = "Начальное (ориентировочное) положение шагового клапана холостого хода для различных RPM/нагрузок.
Позволяет задать стартовую позицию клапана для быстрого «запуска» замкнутого контура регулирования ХХ.
Практический совет: определите правильные позиции шагового мотора для разных температурных режимов в open-loop, затем перенесите их сюда перед включением closed-loop управления."
veTable1 = "Основная топливная таблица VE (1). Большие значения VE означают больше топлива, меньшие — меньше.
Практический совет: это главная таблица настройки топливоподачи. При использовании Speed-Density значения примерно соответствуют волюметрической эффективности двигателя в процентах. Настраивайте с помощью автотюна или вручную по показаниям широкополосного лямбда-зонда, стремясь к целевым AFR из таблицы afrTable."
veTable2 = "Вторичная топливная таблица VE (2). Может использоваться как таблица смешивания (blend) с таблицей 1.
Большие значения VE означают больше топлива, меньшие — меньше.
Практический совет: в режиме смешивания (blend) итоговое значение VE рассчитывается как комбинация таблиц 1 и 2 по заданной пропорции. Полезно для двухтопливных систем (например, бензин + этанол) или для коррекции по дополнительному параметру."
veTable3 = "Альтернативная основная топливная таблица VE (3). Может использоваться как переключаемая таблица от таблицы 1.
Большие значения VE означают больше топлива, меньшие — меньше.
Практический совет: переключаемые таблицы удобны для разных режимов работы (например, разные виды топлива, разные конфигурации наддува). Переключение может происходить по внешнему входу или условию."
veTable1dozen = "The main fuel table (1). Larger VE values mean more fuel, smaller mean less fuel."
veTable2dozen = "The secondary fuel table (2), can be used as a blend table with table 1. Larger VE values mean more fuel, smaller mean less fuel."
veTable3dozen = "The alternate fuel table (3). Can be used as a switched table from no.1. Larger VE values mean more fuel, smaller mean less fuel. When VE3 is active any secondary fuel table is ignored."
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)."
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 — например, меньше буста при частичном газе для плавности."
veTrim1 = "Specifies a percentage multiplier for adjustment on the basic fuel pulsewidth to allow for difference per cylinder. (100% = no adjustment.)"
veTrim2 = "Specifies a percentage multiplier for adjustment on the basic fuel pulsewidth to allow for difference per cylinder. (100% = no adjustment.)"
veTrim3 = "Specifies a percentage multiplier for adjustment on the basic fuel pulsewidth to allow for difference per cylinder. (100% = no adjustment.)"
veTrim4 = "Specifies a percentage multiplier for adjustment on the basic fuel pulsewidth to allow for difference per cylinder. (100% = no adjustment.)"
veTrim1dozen = "Specifies a percentage multiplier for adjustment on the basic fuel pulsewidth to allow for difference per cylinder. (100% = no adjustment.)"
veTrim2dozen = "Specifies a percentage multiplier for adjustment on the basic fuel pulsewidth to allow for difference per cylinder. (100% = no adjustment.)"
veTrim3dozen = "Specifies a percentage multiplier for adjustment on the basic fuel pulsewidth to allow for difference per cylinder. (100% = no adjustment.)"
veTrim4dozen = "Specifies a percentage multiplier for adjustment on the basic fuel pulsewidth to allow for difference per cylinder. (100% = no adjustment.)"
injadvTable1 = "The injector timing in degrees BTDC vs load/RPM. Typical wisdom says that the injection event should finish just as the inlet valve is opening. This corresponds to around 360 BTDC as the timing is measured with respect to the spark event.\nActual best timing can be determined by dyno or road testing."
injadvTable2 = "The injector timing in degrees BTDC vs load/RPM. Typical wisdom says that the injection event should finish just as the inlet valve is opening. This corresponds to around 360 BTDC as the timing is measured with respect to the spark event.\nActual best timing can be determined by dyno or road testing."
injadvTable3 = "The injector timing in degrees BTDC vs load/RPM. Typical wisdom says that the injection event should finish just as the inlet valve is opening. This corresponds to around 360 BTDC as the timing is measured with respect to the spark event.\nActual best timing can be determined by dyno or road testing."
rpmhigh = "Максимум RPM для отображения на шкалах, таблицах и кривых.
Настройте под ваш двигатель. Обычно на 1000–2000 RPM выше максимальных рабочих оборотов для удобства просмотра."
rpmwarn = "Обороты для жёлтой зоны предупреждения на шкалах.
Установите на 500–1000 RPM ниже красной зоны."
rpmdang = "Обороты для красной зоны опасности на шкалах.
Установите на значение, выше которого возможно повреждение двигателя."
loadhigh = "Максимальное значение «нагрузки» (например, кПа) для шкал, таблиц и кривых.
Для атмосферных двигателей — 105–110 кПа. Для турбо — максимальное ожидаемое давление + 20–30 кПа запас."
clt_exp = "Позволяет шкалам и кривым использовать расширенный диапазон температуры ОЖ для двигателей воздушного охлаждения, где датчик CLT измеряет температуру масла или головки цилиндров.
Полезно для мотоциклов, VW с воздушным охлаждением и подобных двигателей, где температура может быть значительно выше стандартного диапазона."
shift_cut_on = "Включает систему отсечки при переключении передач (для последовательных КПП и мотоциклов).
Позволяет переключать передачи без сброса газа за счёт кратковременной отсечки зажигания."
shift_cut_in = "Вход для кнопки переключения.
Обычно кнопка на рычаге КПП или под ногой водителя (мотоцикл)."
shift_cut_out = "Выход для соленоида переключения.
Управляет пневматическим или электрическим актуатором переключения передач."
shift_cut_rpm = "Минимальные обороты для разрешения переключения.
Предотвращает случайное переключение на низких оборотах, где это может повредить трансмиссию."
shift_cut_tps = "Минимальное положение дросселя для разрешения переключения.
Отсечка при переключении имеет смысл только при значительном открытии дросселя."
shift_cut_delay = "Соленоид активируется немедленно, затем ожидание этого времени перед отсечкой искры.
Позволяет механизму КПП начать расцепление перед снятием нагрузки с шестерён."
shift_cut_time = "Длительность отсечки искры.
Обычно 50–150 мс. Слишком короткое время — недостаточно для переключения. Слишком длинное — потеря скорости."
shift_cut_soldelay = "Длительность удержания соленоида после восстановления искры.
Обеспечивает завершение механического переключения до снятия давления с актуатора."
shift_cut_reshift = "Игнорировать кнопку в течение этого времени после переключения — для предотвращения ложного переключения.
Предотвращает двойное срабатывание от дребезга кнопки или вибрации. Обычно 200–500 мс."
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).
Практический совет: неправильный размер приведёт к некорректной интерпретации данных на принимающей стороне."
outmsg5_offset01 = "Offset in the OutputChannels of the first variable in the outmsg 5. The outmsg is used to transfer a set of variables to a CAN device. The CAN device must support this and initiate the transfer. The list of variables must match on both devices."
outmsg5_size01 = "Size in bytes of the first variable in the outmsg 5"
outmsg6_offset01 = "Offset in the OutputChannels of the first variable in the outmsg 6. The outmsg is used to transfer a set of variables to a CAN device. The CAN device must support this and initiate the transfer. The list of variables must match on both devices."
outmsg6_size01 = "Size in bytes of the first variable in the outmsg 6"
outmsg7_offset01 = "Offset in the OutputChannels of the first variable in the outmsg 7. The outmsg is used to transfer a set of variables to a CAN device. The CAN device must support this and initiate the transfer. The list of variables must match on both devices."
outmsg7_size01 = "Size in bytes of the first variable in the outmsg 7"
outmsg8_offset01 = "Offset in the OutputChannels of the first variable in the outmsg 8. The outmsg is used to transfer a set of variables to a CAN device. The CAN device must support this and initiate the transfer. The list of variables must match on both devices."
outmsg8_size01 = "Size in bytes of the first variable in the outmsg 8"
flashlock = "Блокировка/разблокировка таблиц калибровки датчиков.
Заблокировано = защита от случайного изменения таблиц калибровки.
Разблокировано = разрешена запись новых калибровок.
Обязательно заблокируйте обратно после записи калибровочных таблиц!
Практический совет: всегда держите таблицы заблокированными во время обычной настройки, чтобы случайно не изменить калибровку датчиков. Разблокируйте только при целенаправленной замене или перекалибровке датчика."
pwmidle_freq_cl_opts_display_pid = "Basic mode uses P=100, I=100, D=0\nAdvanced enables the ability to individually set PID gains for cases where the controller cannot be tuned to reach the target adequately in Basic."
boost_ctl_cl_pwm_targs1 = "Начальная (ориентировочная) скважность клапана буста для closed-loop управления — канал 1.
Позволяет задать стартовое положение клапана перед включением PID-регулирования.
Таблица заполняется с помощью режима 'Setup Mode' как open-loop таблица. Когда значения близки к правильным — переключитесь на 'Basic Mode' или 'Advanced Mode' для включения closed-loop.
Практический совет: чем точнее начальные значения, тем быстрее и стабильнее PID выйдет на целевое давление. Потратьте время на тщательную настройку в Setup Mode."
can_outpc_msg = "Базовый идентификатор CAN-сообщений (11 бит, десятичный формат) для трансляции данных реального времени (outpc).
ЭБУ назначает следующий идентификатор для каждой группы данных, независимо от того, включена она или нет.
Например: группа 0 — базовый ID, группа 17 — базовый ID + 17.
Использование адреса по умолчанию позволяет использовать готовые шаблоны для приборных панелей и т.д.
Полное описание содержимого сообщений см. в руководстве.
Практический совет: не меняйте базовый адрес, если используете стандартные CAN-дисплеи (AIM, RaceLogic и т.д.) — они настроены на значения по умолчанию."
can_outpc_gp00_int = "Sets the broadcasting data rate of all groups."
can_outpc_gp00 = "Включение трансляции данной группы данных с указанной частотой.
Выберите подходящую частоту для данных внутри группы — нет смысла передавать медленно меняющиеся данные с высокой частотой.
Практический совет: RPM, TPS, MAP — быстро меняющиеся данные, можно передавать с высокой частотой (50-100 Гц). Температуры — достаточно 1-10 Гц. Высокая частота увеличивает загрузку CAN-шины."
can_outpc_gp17 = "Enables broadcasting of this group of data."
can_outpc_gp00_master = "Глобальное включение/выключение трансляции данных реального времени по CAN.
Практический совет: отключите, если CAN-трансляция не используется, чтобы не создавать лишнюю нагрузку на шину. Включите при подключении CAN-дисплея, логгера или другого CAN-устройства."
dashbcast_opta1 = "Включение/выключение трансляции данных для приборной панели (Dash Broadcasting).
Это упрощённый набор данных для отображения или записи, передаваемый по CAN.
Практический совет: используйте для подключения гоночных дисплеев (AIM, RacePak, MoTeC и т.д.) или CAN-логгеров. Формат упрощён по сравнению с полной трансляцией outpc."
dashbcast_id1 = "Базовый CAN-идентификатор для трансляции данных на приборную панель.
Практический совет: должен совпадать с настройками принимающего дисплея. Для популярных дисплеев используйте значение по умолчанию или обратитесь к документации дисплея."
dashbcast_opta1adv = "Выбор между автоматической и ручной расширенной конфигурацией трансляции на приборную панель.
Практический совет: автоматический режим отправляет стандартный набор данных. Ручной позволяет выбрать конкретные параметры для передачи."
dashbcast_opta4outrate = "Частота отправки данных на приборную панель.
Практический совет: для плавного обновления дисплея обычно достаточно 20-50 Гц. Для записи данных на гоночном логгере — 50-100 Гц. Учитывайте загрузку CAN-шины."
; 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 MegaSquirt-II 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 MS-II. The second one
; generates the internal AFR table required for proper closed loop operation
; in MS-II. 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 = std_separator
subMenu = tacho, "Tacho Output"
subMenu = barometerCorr, "Barometric Correction"
subMenu = map_sample_dialog, "MAP Sample 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 = MAFtable1, "MAF Flow Curve", 0, {MAFOption && !feature7_mafcalib}
subMenu = MAFtable1old, "MAF Correction Table (Old)", 0, {MAFOption && feature7_mafcalib}
subMenu = manifoldTempCorr,"MAF/MAT Correction Table", 0, {MAFOption && (feature7_mafmat || ((algorithm != 4) && (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, "&Real-Time Display"
subMenu = iopinlist, "Feature List Showing I/O Pins"
subMenu = limitsettings, "Gauge and Settings Limits"
menu = "F&uel Settings"
subMenu = injChars, "Injector Dead-Time/PWM"
subMenu = stagedCombined, "Staged Injection"
subMenu = flexFuelSettings,"Fuel Sensor Settings (Flex)"
subMenu = overrun, "Over-Run Fuel Cut"
subMenu = std_separator
subMenu = egoControl, "&EGO Control"
subMenu = afrTable1Tbl, "A&FR Table 1", 0
subMenu = afrTable2Tbl, "AF&R Table 2", 0, { dualTable}
subMenu = std_separator
subMenu = veTable1Tbl, "Fuel VE Table &1", 0,{ ((algorithm != 5) || ((algorithm == 5) && (feature7_maftrim))) && (feature4_0VEtblsize==0) }, { (feature4_0VEtblsize==0) }
subMenu = veTable1Tbldoz, "Fuel VE Table &1",0, { ((algorithm != 5) || ((algorithm == 5) && (feature7_maftrim))) && feature4_0VEtblsize }, { feature4_0VEtblsize }
subMenu = veTable2Tbl, "Fuel VE Table &2", 0,{ (dualTable || algorithm2) && (feature4_0VEtblsize==0) }, { (feature4_0VEtblsize==0) }
subMenu = veTable2Tbldoz, "Fuel VE Table &2",0, { (dualTable || algorithm2) && feature4_0VEtblsize }, { feature4_0VEtblsize }
subMenu = veTable3Tbl, "Fuel VE Table &3", 0,{ ((f5_0_tsf > 0) || (seq_inj == 3)) && (feature4_0VEtblsize==0) }, { (feature4_0VEtblsize==0) }
subMenu = veTable3Tbldoz, "Fuel VE Table &3",0, { ((f5_0_tsf > 0) || (seq_inj == 3)) && feature4_0VEtblsize }, { feature4_0VEtblsize }
subMenu = std_separator ;----------------------------------------------
subMenu = injTiming1Tbl, "Injection Timing Table 1", 0, { (spk_mode0 > 3) && seq_inj && injusetable }
subMenu = injTiming2Tbl, "Injection Timing Table 2", 0, { (spk_mode0 > 3) && (seq_inj == 3) && injusetable && injdualvalue }
subMenu = injTiming3Tbl, "Injection Timing Table 3", 0, { (spk_mode0 > 3) && (seq_inj == 3) && injusetable }
subMenu = veTrim1Tbl, "Fuel VE Trim Table 1", 0,{ seq_inj && usevetrim && (feature4_0VEtblsize==0) }, { (feature4_0VEtblsize==0) }
subMenu = veTrim1Tbldoz, "Fuel VE Trim Table 1",0, { seq_inj && usevetrim && feature4_0VEtblsize }, { feature4_0VEtblsize }
subMenu = veTrim2Tbl, "Fuel VE Trim Table 2", 0,{ seq_inj && usevetrim && (feature4_0VEtblsize==0) }, { (feature4_0VEtblsize==0) }
subMenu = veTrim2Tbldoz, "Fuel VE Trim Table 2",0, { seq_inj && usevetrim && feature4_0VEtblsize }, { feature4_0VEtblsize }
subMenu = veTrim3Tbl, "Fuel VE Trim Table 3", 0,{ seq_inj && usevetrim && extrainj && (feature4_0VEtblsize==0) }, { (feature4_0VEtblsize==0) }
subMenu = veTrim3Tbldoz, "Fuel VE Trim Table 3",0, { seq_inj && usevetrim && extrainj && feature4_0VEtblsize }, { feature4_0VEtblsize }
subMenu = veTrim4Tbl, "Fuel VE Trim Table 4", 0,{ seq_inj && usevetrim && extrainj && (feature4_0VEtblsize==0) }, { (feature4_0VEtblsize==0) }
subMenu = veTrim4Tbldoz, "Fuel VE Trim Table 4",0, { seq_inj && usevetrim && extrainj && feature4_0VEtblsize }, { feature4_0VEtblsize }
subMenu = std_separator
subMenu = injseq, "Sequenced Batch Fire", 0, { seq_inj == 0 }
subMenu = injpw_menu, "Fuel Metering Pulse", 0
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 = std_separator
subMenu = coldAdvance, "&Cold Advance", 0, { spk_mode0 != 31 }
subMenu = matBasedRetard, "MAT-&Based Timing Retard", 0, { spk_mode0 != 31 }
subMenu = std_separator
subMenu = noisefiltering2, "Noise Filtering"
subMenu = knockSettings, "&Knock Sensor Settings"
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>0) && (spk_mode0 != 31)}
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 = 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 = nestedasePct, "AfterStart Enrichment (ASE)", 0
subMenu = aseTaper, "AfterStart Enrichment (ASE) Taper", 0
subMenu = nestedwarmup_curve, "&Warmup Enrichment (WUE)", 0
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 > 1) && (IdleCtl_alg == 1)}
subMenu = pwmidle_target_curve, "Closed-Loop Idle Target RPM Curve", 0, {((IdleCtl > 1) && (IdleCtl_alg == 1)) || (idleadvance_on == 4)}
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"
subMenu = std_separator
subMenu = idleAdvance, "Idle Advance Settings"
subMenu = idleAdvance_load_curve, "Idle Load Advance Timing", 0, { idleadvance_on==1 }
subMenu = idleAdvance_rpm_curve, "Idle RPMs Advance Timing", 0, { idleadvance_on==2 }
subMenu = idleAdvance_adaptive_curve, "Idle Adaptive Advance Timing", 0, { idleadvance_on==4 }
menu = "Accel Enrich"
subMenu = accelsettings, "Accel Enrich Settings"
subMenu = AEtime_settings, "Time-Based Accel Enrichment"
subMenu = tpswot_curve, "TPS WOT curve", 0, {feature7_aetpswot}
subMenu = std_separator
subMenu = EAEBAWCcurve, "EAE Adhere-to-walls Coefficient", 0, { EAEOption > 0 }
subMenu = EAEBSOCcurve, "EAE Sucked-from-walls Coefficient", 0, {EAEOption > 0}
subMenu = EAEAWNcurve, "EAE Adhere-to-walls RPM Correction", 0, {EAEOption > 0}
subMenu = EAESONcurve, "EAE Sucked-from-walls RPM Correction", 0, {EAEOption > 0}
subMenu = EAEAWWcurve, "EAE Adhere-to-walls CLT Correction", 0, {EAEOption > 0}
subMenu = EAESOWcurve, "EAE Sucked-from-walls CLT Correction", 0, {EAEOption > 0}
subMenu = EAElagcomp, "EAE Lag Compensation", 0, {EAEOption == 3}
menu = "Boost/ Advanced"
subMenu = boostctlSettings, "Boost Control Settings"
subMenu = boostctlDutys, "Boost Control Duty Table", 0, { (boost_ctl_settings_on) && (!boost_ctl_settings_cl) }
subMenu = boostctlTargs, "Boost Control Target Table", 0, { (boost_ctl_settings_on == 1) && (boost_ctl_settings_cl == 1) }
subMenu = boostctlCLPWMtargs1, "Boost Control Initial Duty Table", 0, { (boost_ctl_settings_on == 1) && (boost_ctl_settings_cl == 1) && (boost_ctl_settings_initialvals == 1) }
subMenu = std_separator
subMenu = tablesw, "Table Switching Control"
subMenu = std_separator
subMenu = launch, "Launch Control"
subMenu = N2OSystem, "&Nitrous System"
subMenu = N2OSystem2, "&Nitrous Stage 2", 0, { N2Oopt_2 && N2Oopt_3 }
subMenu = ShiftSettings, "Sequential Shift Cut"
subMenu = std_separator
subMenu = std_port_edit, "Programmable On/Off Outputs"
menuDialog = main
menu = "3D &Tuning Maps"
;16x16
subMenu = veTable1Map, "Fuel VE Table &1", 0, { (feature4_0VEtblsize==0) && ( ((algorithm != 5) || ((algorithm == 5) && (feature7_maftrim))))}, { (feature4_0VEtblsize==0) }
subMenu = veTable2Map, "Fuel VE Table &2", 0, { ((dualTable) || (algorithm2 != 0)) && (feature4_0VEtblsize==0) }, { (feature4_0VEtblsize==0) }
subMenu = veTable3Map, "Fuel VE Table &3", 0, { (f5_0_tsf || (seq_inj == 3)) && (feature4_0VEtblsize==0) }, { (feature4_0VEtblsize==0) }
subMenu = veTrim1Map, "Fuel VE Trim Table 1",0 { seq_inj && (feature4_0VEtblsize==0) && usevetrim }, { (feature4_0VEtblsize==0) }
subMenu = veTrim2Map, "Fuel VE Trim Table 2",0 { seq_inj && (feature4_0VEtblsize==0) && usevetrim }, { (feature4_0VEtblsize==0) }
subMenu = veTrim3Map, "Fuel VE Trim Table 3",0 { seq_inj && (feature4_0VEtblsize==0) && usevetrim && extrainj }, { (feature4_0VEtblsize==0) }
subMenu = veTrim4Map, "Fuel VE Trim Table 4",0 { seq_inj && (feature4_0VEtblsize==0) && usevetrim && extrainj }, { (feature4_0VEtblsize==0) }
;12x12
subMenu = veTable1Mapdoz, "Fuel VE Table &1",0, { (feature4_0VEtblsize==1) && ( ((algorithm != 5) || ((algorithm == 5) && (feature7_maftrim))))}, { (feature4_0VEtblsize==1) }
subMenu = veTable2Mapdoz, "Fuel VE Table &2",0, { (dualTable || (algorithm2 != 0)) && (feature4_0VEtblsize==1) }, { (feature4_0VEtblsize==1) }
subMenu = veTable3Mapdoz, "Fuel VE Table &3", 0, { (f5_0_tsf || (seq_inj == 3)) && (feature4_0VEtblsize==1) }, { (feature4_0VEtblsize==1) }
subMenu = veTrim1Mapdoz, "Fuel VE Trim Table 1",0, { seq_inj && (feature4_0VEtblsize==1) && usevetrim }, { (feature4_0VEtblsize==1) }
subMenu = veTrim2Mapdoz, "Fuel VE Trim Table 2",0, { seq_inj && (feature4_0VEtblsize==1) && usevetrim }, { (feature4_0VEtblsize==1) }
subMenu = veTrim3Mapdoz, "Fuel VE Trim Table 3",0, { seq_inj && (feature4_0VEtblsize==1) && usevetrim && extrainj }, { (feature4_0VEtblsize==1) }
subMenu = veTrim4Mapdoz, "Fuel VE Trim Table 4",0, { seq_inj && (feature4_0VEtblsize==1) && usevetrim && extrainj }, { (feature4_0VEtblsize==1) }
subMenu = afrTable1Map, "A&FR Table 1"
subMenu = afrTable2Map, "AF&R Table 2", 0, { dualTable }
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, {(f5_0_tss>0) && (spk_mode0 != 31)}
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 = std_separator ;----------------------------------------------
subMenu = injTiming1Map, "Injection Timing Table 1", 0, { (spk_mode0 > 3) && (seq_inj) && (injusetable) }
subMenu = injTiming2Map, "Injection Timing Table 2", 0, { (spk_mode0 > 3) && (seq_inj == 3) && (injusetable) && (injdualvalue) }
subMenu = injTiming3Map, "Injection Timing Table 3", 0, { (spk_mode0 > 3) && (seq_inj == 3) && (injusetable) }
menu = "C&AN bus/Testmodes"
subMenu = canparams, "CAN Parameters"
subMenu = canbroadcast, "CAN Broadcasting", 0, {can_poll}
subMenu = canbcast_userdef, "CAN Broadcast Testing", 0, {can_poll && can_bcast1_on && can_bcast2_xxx}
subMenu = can_outpc_bcast,"CAN Realtime Data Broadcasting", 0, {can_poll}
subMenu = can_outpc_bcast_2,"CAN Realtime Data Broadcasting 2", 0, {can_poll && can_outpc_gp00_master}
subMenu = dashbcast, "Dash Broadcasting"
subMenu = rmt_port_edit, "Remote On/Off Outputs", 0, { (can_poll) && (enable_pollports) && (ports_dir) && (port_generic) }
subMenu = std_separator ;----------------------------------------------
subMenu = outputtest, "Output Test Mode - Inj/Spk"
subMenu = outputtest_io, "Output Test Mode - I/O"
subMenu = iactest, "Output Test Mode - Idle Valve ", 0, {IdleCtl}
#if OUTMSG_EDITING
subMenu = std_separator
subMenu = outmsg1, "Outmsg 1"
subMenu = outmsg2, "Outmsg 2"
subMenu = outmsg3, "Outmsg 3"
subMenu = outmsg4, "Outmsg 4"
subMenu = outmsg5, "Outmsg 5"
subMenu = outmsg6, "Outmsg 6"
subMenu = outmsg7, "Outmsg 7"
subMenu = outmsg8, "Outmsg 8"
#endif
; subMenu = userdefined, "User defined menu" ; uncomment this line to enable
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}
subMenu = mafTableBurner, "Calibrate &MAF Table", 0, {flashlock && feature7_mafcalib}
menu = "Communications"
subMenu = setbaud, "Megasquirt Baud Rate"
menu = "Help"
subMenu = helpGeneral, "MS2/Extra Info"
;-------------------------------------------------------------------------------
[VerbiageOverride]
; text over-rides for internal TS dialogs.
; Not all dialogs support this yet, let Phil Tobin know if you need a specific one.
; Requires 0.999.9h upwards
"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 dos 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.
cmdStopTestmode = "w\$tsCanId\x07\x02\x08\x00\x03\x30\x39\x00"
cmdEnterTestMode = "w\$tsCanId\x07\x02\x08\x00\x03\x30\x39\x01"
cmdtestspkon = "w\$tsCanId\x07\x02\x08\x00\x03\x30\x39\x02"
cmdtestinjon = "w\$tsCanId\x07\x02\x08\x00\x03\x30\x39\x03"
cmdfpon = "w\$tsCanId\x07\x02\x08\x00\x03\x30\x39\x05"
cmdfpoff = "w\$tsCanId\x07\x02\x08\x00\x03\x30\x39\x06"
cmdtestinjspkoff = "w\$tsCanId\x07\x02\x08\x00\x03\x30\x39\x07"
cmdtestiacoff = "w\$tsCanId\x07\x02\x08\x00\x03\x30\x39\x08"
cmdtestiachome = "w\$tsCanId\x07\x02\x08\x00\x03\x30\x39\x09"
cmdtestiacon = "w\$tsCanId\x07\x02\x08\x00\x03\x30\x39\x0a"
cmdtest10off = "w\$tsCanId\x07\x02\x08\x00\x03\x30\x39\x80"
cmdtest10pulsed = "w\$tsCanId\x07\x02\x08\x00\x03\x30\x39\x82"
cmdtest10on = "w\$tsCanId\x07\x02\x08\x00\x03\x30\x39\x83"
cmdtest11off = "w\$tsCanId\x07\x02\x08\x00\x03\x30\x39\x84"
cmdtest11pulsed = "w\$tsCanId\x07\x02\x08\x00\x03\x30\x39\x86"
cmdtest11on = "w\$tsCanId\x07\x02\x08\x00\x03\x30\x39\x87"
cmdtest12off = "w\$tsCanId\x07\x02\x08\x00\x03\x30\x39\x88"
cmdtest12pulsed = "w\$tsCanId\x07\x02\x08\x00\x03\x30\x39\x8a"
cmdtest12on = "w\$tsCanId\x07\x02\x08\x00\x03\x30\x39\x8b"
cmdtest13off = "w\$tsCanId\x07\x02\x08\x00\x03\x30\x39\x8c"
cmdtest13pulsed = "w\$tsCanId\x07\x02\x08\x00\x03\x30\x39\x8e"
cmdtest13on = "w\$tsCanId\x07\x02\x08\x00\x03\x30\x39\x8f"
cmdtest14off = "w\$tsCanId\x07\x02\x08\x00\x03\x30\x39\x90"
cmdtest14pulsed = "w\$tsCanId\x07\x02\x08\x00\x03\x30\x39\x92"
cmdtest14on = "w\$tsCanId\x07\x02\x08\x00\x03\x30\x39\x93"
cmdtest15off = "w\$tsCanId\x07\x02\x08\x00\x03\x30\x39\x94"
cmdtest15pulsed = "w\$tsCanId\x07\x02\x08\x00\x03\x30\x39\x96"
cmdtest15on = "w\$tsCanId\x07\x02\x08\x00\x03\x30\x39\x97"
cmdtest16off = "w\$tsCanId\x07\x02\x08\x00\x03\x30\x39\x98"
cmdtest16pulsed = "w\$tsCanId\x07\x02\x08\x00\x03\x30\x39\x9a"
cmdtest16on = "w\$tsCanId\x07\x02\x08\x00\x03\x30\x39\x9b"
cmdtest17off = "w\$tsCanId\x07\x02\x08\x00\x03\x30\x39\x9c"
cmdtest17pulsed = "w\$tsCanId\x07\x02\x08\x00\x03\x30\x39\x9e"
cmdtest17on = "w\$tsCanId\x07\x02\x08\x00\x03\x30\x39\x9f"
[UserDefined]
dialog = dashbcast, "Dash Broadcasting", yAxis
topicHelp = "file://$getProjectsDirPath()/docs/Megasquirt2_TunerStudio_MS_Lite_Reference-3.4.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_outpc_bcast_setting, "", yAxis
field = "Enable realtime data broadcasting over CAN", can_outpc_gp00_master
field = "Base message identifier (decimal)", can_outpc_msg
field = "Broadcasting rate", can_outpc_gp00_int
dialog = can_outpc_bcast_1, "", yAxis
topicHelp = "file://$getProjectsDirPath()/docs/Megasquirt2_TunerStudio_MS_Lite_Reference-3.4.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", 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: gpioadc0,1,2,3", can_outpc_gp13, { can_outpc_gp00_master }
field = "14: gpioadc4,5,6,7", can_outpc_gp14, { can_outpc_gp00_master }
field = "15: adc6,7", can_outpc_gp15, { can_outpc_gp00_master }
dialog = can_outpc_bcast_2, "CAN Realtime Data Broadcasting 2", yAxis
topicHelp = "file://$getProjectsDirPath()/docs/Megasquirt2_TunerStudio_MS_Lite_Reference-3.4.pdf#canrtbcast"
field = "17: boost_targ1,boostduty1,MAFv", can_outpc_gp17
field = "18: PWseq1,2,3,4", can_outpc_gp18
field = "26: nitrous: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", can_outpc_gp29
field = "43: synccnt,reason,timing_err", can_outpc_gp43
field = "46: injtimingpri,sec", can_outpc_gp46
field = "47: eth%", can_outpc_gp47
field = "51: PORTa,b,e,m,t", can_outpc_gp51
field = "52: CANport1,2,3,knockretard", can_outpc_gp52
field = "55: looptime", can_outpc_gp55
field = "57: Advance:Base,Idle,Flex.MATretard", can_outpc_gp57
field = "58: TableAdv:1,2,3", can_outpc_gp58
field = "59: Revlimretard,ext_advance,deadtime", can_outpc_gp59
dialog = can_outpc_bcast, "CAN Realtime Data Broadcasting", yAxis
panel = can_outpc_bcast_setting, North
panel = can_outpc_bcast_1, South
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"
topicHelp = "file://$getProjectsDirPath()/docs/Megasquirt2_TunerStudio_MS_Lite_Reference-3.4.pdf#wue"
panel = warmup_curve
panel = wc_note
dialog = ase_note
field = "The typical range for afterstart is 50% (cold) to 5% (warm)"
dialog = nestedasePct, "AfterStart Enrichment (ASE) - Percent Adder"
topicHelp = "file://$getProjectsDirPath()/docs/Megasquirt2_TunerStudio_MS_Lite_Reference-3.4.pdf#ase"
panel = asePct
panel = ase_note
dialog = fuelcalc_gauges1, "", xAxis
gauge = veGauge1
gauge = veGauge2
gauge = reqfuelGauge
gauge = deadtime1Gauge
gauge = stoichGauge
dialog = fuelcalc_gauges2, "", xAxis
gauge = warmupEnrichGauge
gauge = barocorgauge
gauge = gammaairGauge
gauge = flexcorGauge
gauge = afr1tgtGauge
dialog = fuelcalc_gauges3, "", xAxis
gauge = accelEnrichGauge
gauge = accEnrichMSGauge
gauge = EAEGauge1
gauge = EAEGauge2
gauge = fuelloadGauge
gauge = n2o_addfuelGauge
dialog = fuelcalc_gauges3, "", xAxis
gauge = vetrimGauge1
gauge = vetrimGauge2
gauge = vetrimGauge3
gauge = vetrimGauge4
dialog = fuelcalc_gauges4, "", xAxis
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 http://www.msextra.com/doc/ms3/fuelcalc.html"
dialog = fuelcalcs, "Fuel Calculations Summary", yAxis
topicHelp = "file://$getProjectsDirPath()/docs/Megasquirt2_TunerStudio_MS_Lite_Reference-3.4.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 = base_advanceGauge
dialog = sparkcalc_gauges2, "", xAxis
gauge = idle_cor_advanceGauge
gauge = coldAdvGauge
gauge = mat_retardGauge
gauge = flex_advanceGauge
dialog = sparkcalc_gauges3, "", xAxis
gauge = nitrous_retardGauge
gauge = revlim_retardGauge
gauge = ext_advanceGauge
gauge = knockGauge
dialog = sparkcalc_gauges4, "", xAxis
gauge = advdegGauge
dialog = sparkcalcs, "Spark Calculations Summary", yAxis
topicHelp = "file://$getProjectsDirPath()/docs/Megasquirt2_TunerStudio_MS_Lite_Reference-3.4.pdf#sparksum"
panel = sparkcalc_gauges1
panel = sparkcalc_gauges2
panel = sparkcalc_gauges3
panel = sparkcalc_gauges4
dialog = ShiftSettings, "Sequential Shift Cut"
topicHelp = "file://$getProjectsDirPath()/docs/Megasquirt2_TunerStudio_MS_Lite_Reference-3.4.pdf#seqshift"
field = "Shifter Spark Cut System", 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", shift_cut_time, { shift_cut_on }
field = "Solenoid Delay", shift_cut_soldelay, { shift_cut_on && shift_cut_out }
field = "Re-shift Hold-off Time", shift_cut_reshift, { shift_cut_on }
dialog = pwmidle_crank_dutyorsteps_curve, "", card
panel = pwmidle_crank_dutyorsteps_dutycurve, Center, {IdleCtl == 2}
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) }
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 }
dialog = flash_unlock, "Un/Lock calibrations"
topicHelp = "file://$getProjectsDirPath()/docs/Megasquirt2_TunerStudio_MS_Lite_Reference-3.4.pdf#calunlock"
field = "Sensor Calibrations", flashlock
field = "Always re-lock after use"
dialog = airden_words
field = "For firmware 3.3.x this feature has changed."
field = "This curve is the whole air density correction exposed in full."
field = "It is based on the 'ideal gas law'."
dialog = manifoldTempCorr2, "MAT Air Density Table"
topicHelp = "file://$getProjectsDirPath()/docs/Megasquirt2_TunerStudio_MS_Lite_Reference-3.4.pdf#matairden"
panel = airden_words
panel = airdenCorr
dialog = limitsettings, "Gauge and Settings Limits"
topicHelp = "file://$getProjectsDirPath()/docs/Megasquirt2_TunerStudio_MS_Lite_Reference-3.4.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 = "Air-cooled Expanded CLT Range", clt_exp
dialog = iopinlist, "Feature list Showing I/O Pins"
topicHelp = "file://$getProjectsDirPath()/docs/Megasquirt2_TunerStudio_MS_Lite_Reference-3.4.pdf#iopins"
displayOnlyField = "Main Fuel Outputs PT1, PT3"
displayOnlyField = "Extra Fuel Outputs PT6, PT7", extrainj, {extrainj}
displayOnlyField = "Spark A Output Pin", spk_config_spka, { (spk_mode0 > 1) && (spk_mode0 != 31) }
displayOnlyField = "Additional Spark Outputs May Be on WLED, ALED", spk_mode3, {spk_mode3}
displayOnlyField = "Cam Input (If Used) = JS10", spk_mode3a, {!((spk_config_trig2 == 1) && (spk_mode0 == 4))} ; greyed in toothed wheel, single wheel
displayOnlyField = "Programmable On/Off Output: FIDLE", psEnabled[0], {psEnabled[0]}
displayOnlyField = "Programmable On/Off Output: Tach out", psEnabled[1], {psEnabled[1]}
displayOnlyField = "Programmable On/Off Output: Output 1", psEnabled[2], {psEnabled[2]}
displayOnlyField = "Programmable On/Off Output: Output 2", psEnabled[3], {psEnabled[3]}
displayOnlyField = "Programmable On/Off Output: Injector C", psEnabled[4], {psEnabled[4]}
displayOnlyField = "Programmable On/Off Output: Injector D", psEnabled[5], {psEnabled[5]}
displayOnlyField = "Programmable On/Off Output: Boost", psEnabled[6], {psEnabled[6]}
displayOnlyField = "Programmable On/Off Output: Remote Port Channel 1", rmt_psEnabled[0], {rmt_psEnabled[0]}
displayOnlyField = "Programmable On/Off Output: Remote Port Channel 2", rmt_psEnabled[1], {rmt_psEnabled[1]}
displayOnlyField = "Programmable On/Off Output: Remote Port Channel 3", rmt_psEnabled[2], {rmt_psEnabled[2]}
displayOnlyField = "Programmable On/Off Output: Remote Port Channel 4", rmt_psEnabled[3], {rmt_psEnabled[3]}
displayOnlyField = "Programmable On/Off Output: Remote Port Channel 5", rmt_psEnabled[4], {rmt_psEnabled[4]}
displayOnlyField = "Programmable On/Off Output: Remote Port Channel 6", rmt_psEnabled[5], {rmt_psEnabled[5]}
displayOnlyField = "Programmable On/Off Output: Remote Port Channel 7", rmt_psEnabled[6], {rmt_psEnabled[6]}
displayOnlyField = "Programmable On/Off Output: Remote Port Channel 8", rmt_psEnabled[7], {rmt_psEnabled[7]}
displayOnlyField = "EGO 1 port", egoport, {egoType}
displayOnlyField = "EGO 2 port", ego2port, {(egoType == 2) || (egoType == 4)}
displayOnlyField = "PWM Idle Output", pwmidle_port2, { (IdleCtl == 1) || (IdleCtl == 2) }
displayOnlyField = "AC Idle-up Input", idle_up_options_input, { ac_idleup_settings }
displayOnlyField = "AC Idle-up Output", ac_idleup_io_out, { ac_idleup_settings && (ac_idleup_io_out != 0x0f) }
displayOnlyField = "Realtime Baro Port", rtbaroport, {baroCorr == 2}
displayOnlyField = "MAP Voltage Input", mapport, {mapport}
displayOnlyField = "MAF Voltage Input", MAFOption, {MAFOption}
displayOnlyField = "Flex Sensor Port", flexport, { flexFuel > 0 }
displayOnlyField = "Tacho Output", tacho_opt3f, { tacho_opt80 }
displayOnlyField = "Fuel Table Switching Input", ts_port_f, { f5_0_tsf && (f5_0_tsf_opt == 0) }
displayOnlyField = "Spark Table Switching Input", ts_port_s, { f5_0_tss && (f5_0_tss_opt == 0) }
displayOnlyField = "Knock Input Pin", knkport, { knk_option }
displayOnlyField = "Boost Control Output ", boost_ctl_pins, {boost_ctl_settings_on && (boost_ctl_settings_remote == 0)}
displayOnlyField = "Boost Control Output ", boost_ctl_remote, {boost_ctl_settings_on && boost_ctl_settings_remote}
displayOnlyField = "Nitrous Output", N2Oopt_pins2, { N2Oopt_2 }
displayOnlyField = "Nitrous Enable Input", N2Oopt_pins, { N2Oopt_2 }
displayOnlyField = "Launch Input", launch_opt_pins, { launch_opt_on >0 }
displayOnlyField = "Bike Shifter Input", shift_cut_in, { shift_cut_on }
displayOnlyField = "Bike Shifter Output", shift_cut_out, { shift_cut_on }
; idle up section --------------------------------------------------------------------
dialog = ac_idleup, "Air Conditioning Idle-up"
topicHelp = "file://$getProjectsDirPath()/docs/Megasquirt2_TunerStudio_MS_Lite_Reference-3.4.pdf#acidle"
field = "A/C Idle-up", ac_idleup_settings
field = "Idle-up Output", ac_idleup_io_out, { ac_idleup_settings }
field = "Idle-up Input", idle_up_options_input, {ac_idleup_settings}
field = "Idle-up Input Polarity", idle_up_options_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 Adder", ac_idleup_adder_duty, {ac_idleup_settings && (IdleCtl == 2) }
field = "Idle-up Steps Adder", ac_idleup_adder_steps, {ac_idleup_settings && (IdleCtl == 3) }
field = "Idle-up Target RPM Adder", idle_up_targ_rpm ,{ac_idleup_settings && (IdleCtl_alg == 1)}
dialog = battcalib, "Calibrate Battery Voltage"
topicHelp = "file://$getProjectsDirPath()/docs/Megasquirt2_TunerStudio_MS_Lite_Reference-3.4.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 = mafdialog, "MAF Settings", yAxis
topicHelp = "file://$getProjectsDirPath()/docs/Megasquirt2_TunerStudio_MS_Lite_Reference-3.4.pdf#mafset"
field = "Voltage Input Port", MAFOption
field = "MAT Correction Curve", feature7_mafmat
field = "Use VE1 as Trim Table", feature7_maftrim, {algorithm == 5}
field = "MAF Sensor Range", maf_range
field = "Set the range before loading a flow curve."
field = "Use Old-style Calibration Curve (See Tools Menu)", feature7_mafcalib
dialog = N2OSystem, "Nitrous System"
topicHelp = "file://$getProjectsDirPath()/docs/Megasquirt2_TunerStudio_MS_Lite_Reference-3.4.pdf#nitrous"
field = "Nitrous Control", N2Oopt_2
field = "Turn N2O On When Above", N2ORpm, { N2Oopt_2 }
field = "And Coolant Temp Above", N2OClt, { N2Oopt_2 }
field = "And TPS >", N2OTps, { N2Oopt_2 }
field = "Enable Input", N2Oopt_pins, { N2Oopt_2 }
field = "Output Pins For Stage 1+2", N2Oopt_pins2, { N2Oopt_2 }
field = "Additional Fuel PW @ N2O min rpm", N2OPWLo, { N2Oopt_2 }
field = "Max RPM", N2ORpmMax, { N2Oopt_2 }
field = "Additional Fuel PW @ N2O Max RPM", N2OPWHi, { N2Oopt_2 }
field = "Enrich Which Bank In DualTable", N2Oopt_01, { N2Oopt_2 && dualTable }
field = "If ST2 Off Retard Ignition By" N2OAngle, { N2Oopt_2}
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 = ""
field = "Nitrous stage 2", N2Oopt_3, { N2Oopt_2 }
dialog = N2OSystem2, "Nitrous Stage 2"
topicHelp = "file://$getProjectsDirPath()/docs/Megasquirt2_TunerStudio_MS_Lite_Reference-3.4.pdf#nitrous2"
field = "Enable stage 2 above", N2O2Rpm
field = "Max RPM", N2O2RpmMax
field = "Delay After Stage 1", N2O2delay
field = "Retard Ignition By", N2O2Angle
field = "Additional Fuel PW @ N2O Min RPM", N2O2PWLo
field = "Additional Fuel PW @ N2O Max RPM", N2O2PWHi
dialog = overboost, "Overboost Protection"
field = "Overboost Protection", OverBoostOption
field = "Maximum 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 = ""
field = ""
field = ""
dialog = flexboost, "Flex/Boost"
field = "Use Flex On Y Axis Of Target Table", OverBoostOption_flexboost, {boost_ctl_settings_on && boost_ctl_settings_cl && flexFuel}
field = "Above TPS", flexboosttps, {OverBoostOption_flexboost && boost_ctl_settings_on && boost_ctl_settings_cl && flexFuel}
field = ""
field = ""
field = ""
dialog = boostctlSettingsr, ""
panel = overboost, North
panel = flexboost, South
dialog = boostctlSettingsl, ""
field = "Boost Control Enabled", boost_ctl_settings_on
field = "Boost Control Use Initial Value Table", boost_ctl_settings_initialvals, { boost_ctl_settings_on && boost_ctl_settings_cl }
field = "Solenoid Frequency", boost_ctl_settings_freq, { boost_ctl_settings_on && !boost_ctl_settings_remote }
field = "Control Interval", boost_ctl_ms, {boost_ctl_settings_on}
field = ""
field = "Boost Control Location", boost_ctl_settings_remote, { boost_ctl_settings_on && can_poll && enable_pollports && ports_dir }
field = "Boost Control Pin", boost_ctl_pins, { boost_ctl_settings_on && !boost_ctl_settings_remote }
field = "Boost Control Remote Port", boost_ctl_remote, { boost_ctl_settings_on && boost_ctl_settings_remote }
field = "Output Polarity", boost_ctl_settings_invert_new, {boost_ctl_settings_on}
field = "Closed Duty", boost_ctl_closeduty, {boost_ctl_settings_on && boost_ctl_settings_cl}
field = "Open Duty", boost_ctl_openduty, {boost_ctl_settings_on && boost_ctl_settings_cl}
field = ""
field = "Algorithm", boost_ctl_settings_cl, {boost_ctl_settings_on}
field = "Boost Control Lower Limit Delta", boost_ctl_lowerlimit, {boost_ctl_settings_cl}
field = "Closed-Loop Boost Tuning Mode", boost_ctl_settings_tunemode, {boost_ctl_settings_on && boost_ctl_settings_cl}
slider = "Closed-Loop Sensitivity", boost_ctl_sensitivity, horizontal, {boost_ctl_settings_on && boost_ctl_settings_cl}
field = "Proportional Gain", boost_ctl_Kp, {boost_ctl_settings_on && boost_ctl_settings_cl && boost_ctl_settings_tunemode}
field = "Integral Gain", boost_ctl_Ki, {boost_ctl_settings_on && boost_ctl_settings_cl && boost_ctl_settings_tunemode}
field = "Differential Gain", boost_ctl_Kd, {boost_ctl_settings_on && boost_ctl_settings_cl && boost_ctl_settings_tunemode}
dialog = boostctlSettings, "Boost Control Settings", xAxis
topicHelp = "file://$getProjectsDirPath()/docs/Megasquirt2_TunerStudio_MS_Lite_Reference-3.4.pdf#boost"
panel = boostctlSettingsl, West
panel = boostctlSettingsr, East
dialog = canwest, ""
field = "My CAN ID", mycan_id
field = "Master Enable", can_poll
field = "Enable PWM Polling", enable_pollPWM, { can_poll }
field = "Remote CAN ID", can_poll_id2, {can_poll && (enable_pollPWM)}
field = "Remote Table Number For PWM data", poll_tablePWM, { can_poll && (enable_pollPWM) }
field = "Remote Table Offset For PWM data", poll_offsetPWM, { can_poll && (enable_pollPWM) }
field = "Remote PWM Clock Frequency", remotePWMfreq, { can_poll && (enable_pollPWM) }
field = "Remote PWM Clock Prescale", remotePWMprescale, { can_poll && (enable_pollPWM) }
dialog = caneast, ""
field = "Enable Ports Polling", enable_pollports, { can_poll }
field = "Remote CAN ID", can_poll_id3, {can_poll && (enable_pollports)}
field = "Remote Table Number For Ports Data", poll_tableports, { can_poll && (enable_pollports) }
field = "Remote Table Offset For Ports Data", poll_offsetports, { can_poll && (enable_pollports) }
field = "Remote Ports Direction", ports_dir, { can_poll && (enable_pollports) }
field = "Remote Port 1 Type", port1_type, { can_poll && (enable_pollports) }
field = "Remote Port 2 Type", port2_type, { can_poll && (enable_pollports) }
field = "Remote Port 3 Type", port3_type, { can_poll && (enable_pollports) }
field = "Use For Remote On/Off Outputs", port_generic, { can_poll && (enable_pollports) && (ports_dir) }
dialog = canadc_opt, "", yAxis
field = "CAN ADC Group On/Off"
field = "CAN ADC 0-3", enable_pollADC03, { can_poll }
field = "CAN ADC 4-7", enable_pollADC47, { can_poll }
dialog = canadc_id, "", yAxis
field = "CAN Id"
field = "", can_poll_id0, {can_poll && (enable_pollADC03)}
field = "", can_poll_id1, {can_poll && (enable_pollADC47)}
dialog = canadc_tab, "", yAxis
field = "Table"
field = "", poll_tableADC03, { can_poll && (enable_pollADC03) }
field = "", poll_tableADC47, { can_poll && (enable_pollADC47) }
dialog = canadc_off, "", yAxis
field = "Offset"
field = "", poll_offsetADC03, { can_poll && (enable_pollADC03) }
field = "", poll_offsetADC47, { can_poll && (enable_pollADC47) }
dialog = canadcs, "CAN ADC Selection", xAxis
panel = canadc_opt
panel = canadc_id
panel = canadc_tab
panel = canadc_off
dialog = can_top, "", xAxis
panel = canwest
panel = caneast
dialog = canparams, "CAN Parameters", border
topicHelp = "file://$getProjectsDirPath()/docs/Megasquirt2_TunerStudio_MS_Lite_Reference-3.4.pdf#canparam"
panel = can_top, North
panel = canadcs, South
dialog = canbcast_userdef, "", yAxis
topicHelp = "file://$getProjectsDirPath()/docs/Megasquirt2_TunerStudio_MS_Lite_Reference-3.4.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", yAxis
topicHelp = "file://$getProjectsDirPath()/docs/Megasquirt2_TunerStudio_MS_Lite_Reference-3.4.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 = "User defined testing", can_bcast2_xxx, { can_bcast1_on }
dialog = injpw_menu, "Fuel Metering Pulse"
; topicHelp = "file://$getProjectsDirPath()/docs/Megasquirt2_TunerStudio_MS_Lite_Reference-3.4.pdf#seqbatch"
field = "Metering Pulse Output", injpw_pins
field = "Metering Pulse Scaling", injpw_scale, { injpw_pins }
dialog = injseq, "Sequenced Batch Fire"
topicHelp = "file://$getProjectsDirPath()/docs/Megasquirt2_TunerStudio_MS_Lite_Reference-3.4.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 }
field = "Injector Time Mask", inj_time_mask, {feature3_3 }
dialog = seq_injection, "Sequential Injection"
field = "Sequential Injection", seq_inj, { spk_mode0 > 3 }
field = "Timing Trigger", injtimingmode, { (spk_mode0 > 3) && seq_inj }
field = "Fixed Timing Or Table", injusetable, { (spk_mode0 > 3) && seq_inj }
field = "Number Of Timing Values", injdualvalue, { (spk_mode0 > 3) && (seq_inj == 3) }
field = "Fixed Injection Timing 1", injadv1, { (spk_mode0 > 3) && (seq_inj) && (injusetable == 0) }
field = "Fixed Injection Timing 2", injadv2, { (spk_mode0 > 3) && (seq_inj == 3) && (injusetable == 0) && (injdualvalue) }
field = "Fixed Injection Timing 1 When Staging On", injstagedadv1, { (spk_mode0 > 3) && (seq_inj) && (injusetable == 0) && (staged_first_param) }
field = "Fixed Injection Timing 2 When Staging On", injstagedadv2, { (spk_mode0 > 3) && (seq_inj == 3) && (injusetable == 0) && (injdualvalue) && (staged_first_param) }
field = "Cranking Injection Timing 1", injcrankadv1, { (spk_mode0 > 3) && seq_inj }
field = "Cranking Injection Timing 2", injcrankadv2, { (spk_mode0 > 3) && (seq_inj == 3) && (injdualvalue) }
field = "VE Trim Tables", usevetrim, { (spk_mode0 > 3) && seq_inj }
field = "Injector Drivers", extrainj
field = "#Sequential Siamese Hybrid Mode"
field = "Single Pulse Activation RPM", hybrid_rpm, { (spk_mode0 > 3) && (seq_inj == 3) }
field = "Hysteresis On Single Pulse Activation RPM", hybrid_hyst, { (spk_mode0 > 3) && (seq_inj == 3) }
field = "Fixed Injection Timing 3", injadv3, { (spk_mode0 > 3) && (seq_inj == 3) && (injusetable == 0) }
field = "Fixed Injection Timing 3 When Staging On", injstagedadv3, { (spk_mode0 > 3) && (seq_inj == 3) && (injusetable == 0) && (staged_first_param) }
dialog = tablesw, "Table Switching Control"
topicHelp = "file://$getProjectsDirPath()/docs/Megasquirt2_TunerStudio_MS_Lite_Reference-3.4.pdf#tablesw"
field = "Fuel Table Switching", f5_0_tsf
field = "Switch Source", f5_0_tsf_opt, { f5_0_tsf }
field = "Switch Location", ts_port_f, { f5_0_tsf && !f5_0_tsf_opt }
field = "RPM Greater Than", tsf_rpm, { f5_0_tsf && f5_0_tsf_opt == 1 }
field = "MAP Greater Than", tsf_kpa, { f5_0_tsf && f5_0_tsf_opt == 2 }
field = "TPS Greater Than", tsf_tps, { f5_0_tsf && f5_0_tsf_opt == 3 }
field = ""
field = "Spark Table Switching", f5_0_tss
field = "Switch Source", f5_0_tss_opt, { f5_0_tss }
field = "Switch Location", ts_port_s, { f5_0_tss && !f5_0_tss_opt }
field = "RPM Greater Than", tss_rpm, { f5_0_tss && f5_0_tss_opt == 1 }
field = "MAP Greater Than", tss_kpa, { f5_0_tss && f5_0_tss_opt == 2 }
field = "TPS Greater Than", tss_tps, { f5_0_tss && f5_0_tss_opt == 3 }
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_l, "Output Test Modes", yAxis
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 = "batch fire outputs"
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
topicHelp = "file://$getProjectsDirPath()/docs/Megasquirt2_TunerStudio_MS_Lite_Reference-3.4.pdf#testinjspk"
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
panel = outputtest_controls
panel = outputtest_r
dialog = outputtest9, "Fuel Pump", yAxis
commandButton = "Off", cmdfpoff, { status3 & 8 }
commandButton = "On", cmdfpon, { status3 & 8 }
dialog = outputtest10, "LED14/SpkA", yAxis
commandButton = "Off", cmdtest10off, { status3 & 8 }
commandButton = "Pulsed", cmdtest10pulsed, { status3 & 8 }
commandButton = "On", cmdtest10on, { status3 & 8 }
dialog = outputtest11, "LED16/SpkB", yAxis
commandButton = "Off", cmdtest11off, { status3 & 8 }
commandButton = "Pulsed", cmdtest11pulsed, { status3 & 8 }
commandButton = "On", cmdtest11on, { status3 & 8 }
dialog = outputtest12, "LED15/SpkC", yAxis
commandButton = "Off", cmdtest12off, { status3 & 8 }
commandButton = "Pulsed", cmdtest12pulsed, { status3 & 8 }
commandButton = "On", cmdtest12on, { status3 & 8 }
dialog = outputtest13, "IAC1", yAxis
commandButton = "Off", cmdtest13off, { status3 & 8 }
commandButton = "Pulsed", cmdtest13pulsed, { status3 & 8 }
commandButton = "On", cmdtest13on, { status3 & 8 }
dialog = outputtest14, "IAC2", yAxis
commandButton = "Off", cmdtest14off, { status3 & 8 }
commandButton = "Pulsed", cmdtest14pulsed, { status3 & 8 }
commandButton = "On", cmdtest14on, { status3 & 8 }
dialog = outputtest15, "JS10", yAxis
commandButton = "Off", cmdtest15off, { status3 & 8 }
commandButton = "Pulsed", cmdtest15pulsed, { status3 & 8 }
commandButton = "On", cmdtest15on, { status3 & 8 }
dialog = outputtest16, "JS11.PA0.SpD", yAxis
commandButton = "Off", cmdtest16off, { status3 & 8 }
commandButton = "Pulsed", cmdtest16pulsed, { status3 & 8 }
commandButton = "On", cmdtest16on, { status3 & 8 }
dialog = outputtest17, "FIDLE", yAxis
commandButton = "Off", cmdtest17off, { status3 & 8 }
commandButton = "Pulsed", cmdtest17pulsed, { status3 & 8 }
commandButton = "On", cmdtest17on, { status3 & 8 }
dialog = outputtest10b, "TachOut", yAxis
commandButton = "Off", cmdtest10off, { status3 & 8 }
commandButton = "Pulsed", cmdtest10pulsed, { status3 & 8 }
commandButton = "On", cmdtest10on, { status3 & 8 }
dialog = outputtest11b, "ALED", yAxis
commandButton = "Off", cmdtest11off, { status3 & 8 }
commandButton = "Pulsed", cmdtest11pulsed, { status3 & 8 }
commandButton = "On", cmdtest11on, { status3 & 8 }
dialog = outputtest12b, "WLED", yAxis
commandButton = "Off", cmdtest12off, { status3 & 8 }
commandButton = "Pulsed", cmdtest12pulsed, { status3 & 8 }
commandButton = "On", cmdtest12on, { status3 & 8 }
dialog = outputtest13b, "PT6", yAxis
commandButton = "Off", cmdtest13off, { status3 & 8 }
commandButton = "Pulsed", cmdtest13pulsed, { status3 & 8 }
commandButton = "On", cmdtest13on, { status3 & 8 }
dialog = outputtest14b, "PT7", yAxis
commandButton = "Off", cmdtest14off, { status3 & 8 }
commandButton = "Pulsed", cmdtest14pulsed, { status3 & 8 }
commandButton = "On", cmdtest14on, { status3 & 8 }
dialog = outputtest15b, "IGN1", yAxis
commandButton = "Off", cmdtest15off, { status3 & 8 }
commandButton = "Pulsed", cmdtest15pulsed, { status3 & 8 }
commandButton = "On", cmdtest15on, { status3 & 8 }
dialog = outputtest16b, "PA0", yAxis
commandButton = "Off", cmdtest16off, { status3 & 8 }
commandButton = "Pulsed", cmdtest16pulsed, { status3 & 8 }
commandButton = "On", cmdtest16on, { status3 & 8 }
dialog = outputtest11c "Output1", yAxis
commandButton = "Off", cmdtest11off, { status3 & 8 }
commandButton = "Pulsed", cmdtest11pulsed, { status3 & 8 }
commandButton = "On", cmdtest11on, { status3 & 8 }
dialog = outputtest12c, "Output2", yAxis
commandButton = "Off", cmdtest12off, { status3 & 8 }
commandButton = "Pulsed", cmdtest12pulsed, { status3 & 8 }
commandButton = "On", cmdtest12on, { status3 & 8 }
dialog = outputtest13c, "InjectorC", yAxis
commandButton = "Off", cmdtest13off, { status3 & 8 }
commandButton = "Pulsed", cmdtest13pulsed, { status3 & 8 }
commandButton = "On", cmdtest13on, { status3 & 8 }
dialog = outputtest14c, "InjectorD", yAxis
commandButton = "Off", cmdtest14off, { status3 & 8 }
commandButton = "Pulsed", cmdtest14pulsed, { status3 & 8 }
commandButton = "On", cmdtest14on, { status3 & 8 }
dialog = outputtest16c, "Boost", yAxis
commandButton = "Off", cmdtest16off, { status3 & 8 }
commandButton = "Pulsed", cmdtest16pulsed, { status3 & 8 }
commandButton = "On", cmdtest16on, { status3 & 8 }
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 = "If the output is connected to an ignition coil you will damage it!"
field = "After testing, turn off/on the ECU to restore normal settings."
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 = outputtest10b
panel = outputtest11c
panel = outputtest12c
panel = outputtest13c
panel = outputtest14c
panel = outputtest15b
panel = outputtest16c
panel = outputtest17
dialog = outputtest_io, "Output Test Mode - I/O", yAxis
topicHelp = "file://$getProjectsDirPath()/docs/Megasquirt2_TunerStudio_MS_Lite_Reference-3.4.pdf#testio"
panel = outputTestbuttons1
panel = outputtest_io_pwm
panel = outputtest_io1
panel = outputtest_io_warning
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-512)", iacpostest, { IdleCtl == 3 }
field = "PWM Idle Duty% (0-100)", iacpostest, { IdleCtl == 2 }
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 = "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/Megasquirt2_TunerStudio_MS_Lite_Reference-3.4.pdf#testidle"
panel = iactest_top
panel = iactest_bot
dialog = EAElagcomp, "EAE Lag Compensation"
topicHelp = "file://$getProjectsDirPath()/docs/Megasquirt2_TunerStudio_MS_Lite_Reference-3.4.pdf#eaelag"
field = "Source", EAElagsource
field = "Threshold", EAElagthresh
field = "Max RPM", EAElagRPMmax
dialog = RotaryTrailingSettings, "Rotary Settings"
topicHelp = "file://$getProjectsDirPath()/docs/Megasquirt2_TunerStudio_MS_Lite_Reference-3.4.pdf#rotary"
field = "See also Rotary Split Table"
field = "Output Mode", RotarySplitModeFD, { twoStroke == 3 }
field = "Allow Negative Split?", RotarySplitModeNeg, { twoStroke == 3 }
field = "Trailing Dwell time", dwelltime_trl, { (twoStroke == 3) && (spk_mode0 >1) && (dwellmode==0) }
dialog = noisefiltering, ""
topicHelp = "file://$getProjectsDirPath()/docs/Megasquirt2_TunerStudio_MS_Lite_Reference-3.4.pdf#noise"
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}
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 }
field = "Time", IC2ISR_tmask, {secondtrigopts1 || secondtrigopts2}
field = "Percentage", IC2ISR_pmask, {secondtrigopts1 || secondtrigopts2}
dialog = noisefilterpad
field = "Note, a power cycle is required after enabling/disabling"
field = " the noise filters"
field = ""
field = ""
field = ""
field = ""
dialog = Eastnoisefilter, "", yAxis
panel = NoiseFiltercurve
panel = noisefilterpad, South
dialog = noisefiltering2, "Noise Filtering", xAxis
panel = noisefiltering, West
panel = Eastnoisefilter, East
dialog = launch, "Launch Control"
topicHelp = "file://$getProjectsDirPath()/docs/Megasquirt2_TunerStudio_MS_Lite_Reference-3.4.pdf#launch"
field = "Launch Control Option:", launch_opt_on
field = "LAUNCH"
field = "Input Pin", launch_opt_pins, { launch_opt_on >0 }
field = "Launch Hard Limit", launch_hrd_lim, {launch_opt_on}
field = "Soft Limit Zone", launch_sft_zone, {launch_opt_on}
field = "Soft Limit Retard To", launch_sft_deg, {launch_opt_on }
field = "Enable Launch When TPS Above ", launch_tps, { launch_opt_on >0}
field = "Limiter Method", launchlimopt, { launch_opt_on >0}
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 }
dialog = tacho, "Tacho Output"
topicHelp = "file://$getProjectsDirPath()/docs/Megasquirt2_TunerStudio_MS_Lite_Reference-3.4.pdf#tachoout"
field = "Tacho Output Enabled", tacho_opt80
field = ""
field = "Output Pin", tacho_opt3f, { tacho_opt80 }
field = "Speed", tacho_opt40, { tacho_opt80 }
dialog = overrun_note
field = "Overrun is on the fuel menu"
dialog = overrun, "Over-Run Fuel Cut"
topicHelp = "file://$getProjectsDirPath()/docs/Megasquirt2_TunerStudio_MS_Lite_Reference-3.4.pdf#overrun"
field = "Over-Run Fuel Cut", OvrRunC
field = "Cut Fuel When:"
field = "RPM Greater Than", fc_rpm, { OvrRunC }
field = "And MAP Lower Than", fc_kpa, { OvrRunC }
field = "And TPS Lower Than", fc_tps, { OvrRunC }
field = "And CLT Higher Than", fc_clt, { OvrRunC }
field = "After Delay", fc_delay, { OvrRunC }
field = ""
field = "Delay EGO After Fuel Return", fc_ego_delay, { OvrRunC }
field = "Return Fuel When RPM Less Than", fc_rpm_lower, { OvrRunC }
dialog = staging, ""
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 = ""
field = "Staging Gradual Transition", staged_transition_on, { staged_first_param && (staged_first_param & 0x7) != 5 }
field = "Staging Transition Events", staged_transition_events, { staged_first_param && staged_transition_on && ((staged_first_param & 0x7) != 5) }
field = "Staging Primary Reduction Delay", staged_primary_delay, { staged_first_param && staged_transition_on && ((staged_first_param & 0x7) != 5) }
field = "Staging Secondary Enrichment", staged_secondary_enrichment, { staged_first_param && staged_transition_on && ((staged_first_param & 0x7) != 5) }
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 = "Staged Injection 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 & 0x7) != 5) }
field = "Secondary Staging Hysteresis", staged_hyst_2, { staged_second_param && ((staged_first_param & 0x7) != 5) }
field = "Secondary Staging Logic", staged_second_logic, { staged_second_param && ((staged_first_param & 0x7) != 5) }
dialog = secondaryLoad, "Secondary Load Parameters"
field = "Primary Fuel Load", algorithm
field = "Secondary Fuel Load", algorithm2, { dualTable == 0 }
field = "Secondary Fuel", loadCombine, {algorithm2 != 0 }
field = "Multiply MAP (Caution!)", loadMult
field = "99% of installs should use Multiply"
field = ""
field = "Incorporate AFRTarget", loadStoich
field = "Stoichiometric AFR", stoich, { loadStoich }
field = ""
field = "Primary Ignition Load", IgnAlgorithm
field = "Secondary Ignition Load", IgnAlgorithm2
field = "NOTE: secondary ignition table is always additive"
field = ""
field = "AFR Table Load", afrload
field = "EAE Curve Load", eaeload
dialog = crsettings, "Cranking / Startup Settings"
topicHelp = "file://$getProjectsDirPath()/docs/Megasquirt2_TunerStudio_MS_Lite_Reference-3.4.pdf#crankstart"
field = "Cranking RPM", crankingRPM
field = ""
field = "Flood Clear TPS", floodClear
field = "Above this throttle no fuel is injected"
field = "Cranking Fuel Pulse Rate", altcrank
field = "Priming Pulse Delay", primedelay
field = "Ignore MAT Correction During ASE", feature3_matase
dialog = generalSettings, "Baro Sensor Settings"
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, {baroCorr}
dialog = gsmap, "MAP Sensor Settings"
field = "MAP Sensor Input Port", mapport
dialog = gsgen, "General Sensor Settings"
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 = ""
field = "Dual Table Use", dualTable
field = ""
field = "Fuel Table Size", feature4_0VEtblsize
field = "Note: Export your fuel tables before changing, then import"
field = "MegaView Temp. Units", tempUnits
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/Megasquirt2_TunerStudio_MS_Lite_Reference-3.4.pdf#genset"
panel = generalsettings3, West
panel = eastgeneral, East
dialog = map_sample_dialog, "MAP Sample Settings"
topicHelp = "file://$getProjectsDirPath()/docs/Megasquirt2_TunerStudio_MS_Lite_Reference-3.4.pdf#mapsamp"
field = "MAP Sample Method", mapsample_opt2
field = "MAP Sample Window", mapsample_window, { !mapsample_opt2 }
field = "MAP Sample Angle", mapsample_angle, { !mapsample_opt2 }
field = "No. Sample Events", mapsample_opt1, { !mapsample_opt2 }
field = "Phase Detect Threshold", map_phase_thresh, { (nCylinders < 3) && (spk_mode3a == 1) && (spk_mode0 == 4) && (spk_config_trig2 == 3) }
dialog = revlimiter, ""
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
topicHelp = "file://$getProjectsDirPath()/docs/Megasquirt2_TunerStudio_MS_Lite_Reference-3.4.pdf#revlim"
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"
dialog = flexl, ""
field = "Low"
field = "", fuelFreq0, { flexFuel }
field = "", flex_pct0, { flexFuel }
field = "", fuelCorr0, { flexFuel }
field = "", fuelSpkDel0, { flexFuel }
dialog = flexh, ""
field = "High"
field = "", fuelFreq1, { flexFuel }
field = "", flex_pct1, { flexFuel }
field = "", fuelCorr1, { flexFuel }
field = "", fuelSpkDel1, { flexFuel }
dialog = ff_table1, "", xAxis
panel = flexn
panel = flexl
panel = flexh
dialog = ff_fallback, "", yAxis
field = "Baseline Ethanol%", flex_baseline, { flexFuel }
field = "#Fallback for sensor failure"
field = "Fallback Fuel Multiplier%", fuelCorr_default, { flexFuel > 0 }
field = "Fallback Timing Addition", fuelSpkDel_default, { flexFuel > 0 }
dialog = flexFuelSettings, "Fuel Sensor Settings (Flex)", yAxis
topicHelp = "file://$getProjectsDirPath()/docs/Megasquirt2_TunerStudio_MS_Lite_Reference-3.4.pdf#flex"
field = "Flex Fuel Sensor", flexFuel
field = "Sensor Port", flexport, { flexFuel > 0 }
panel = ff_table1
panel = ff_fallback
; first accel page
dialog = accelsettings, "Accel Enrich Settings"
topicHelp = "file://$getProjectsDirPath()/docs/Megasquirt2_TunerStudio_MS_Lite_Reference-3.4.pdf#aeset"
; field = "Use Time-Based or Accel-pump Accel", AE_options
field = "Wall-Wetting AE (EAE)", EAEOption
field = "TPSdot Uses %WOT", feature7_aetpswot
;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/Megasquirt2_TunerStudio_MS_Lite_Reference-3.4.pdf#aetime"
panel = time_ae_north
panel = time_ae_mid
panel = time_ae_south
dialog = injChars, "Injector Dead-Time/PWM"
topicHelp = "file://$getProjectsDirPath()/docs/Megasquirt2_TunerStudio_MS_Lite_Reference-3.4.pdf#injdt"
field = "Bank 1"
field = "Injector Dead Time @13.2V", injOpen
field = "Battery Voltage Correction", battFac
field = "Different Bank Settings", injctl
field = "Bank 2"
field = "Injector2 Dead Time", injOpen2, { injctl }
field = "Battery Voltage Corr.", battFac2, { injctl }
field = "Bank 3"
field = "Injector3 Dead Time", injOpen3, { injctl && extrainj }
field = "Battery Voltage Corr.", battFac3, { injctl && extrainj }
field = "Bank 4"
field = "Injector4 Dead Time", injOpen4, { injctl && extrainj }
field = "Battery Voltage Corr.", battFac4, { injctl && extrainj }
dialog = egoControl, "EGO Control"
topicHelp = "file://$getProjectsDirPath()/docs/Megasquirt2_TunerStudio_MS_Lite_Reference-3.4.pdf#egocont"
field = "EGO Sensor Type", egoType
field = "1st EGO Sensor port", egoport, { egoType > 0 }
field = "2nd EGO Sensor port", ego2port, { egoType == 2 || egoType == 4}
field = "Use 2nd EGO Without Dual-Table", EgoOption_dual, {((egoType == 2) || (egoType == 4)) && (dualTable == 0)}
field = "Ignition Events Per Step", egoCount, { egoType > 0 }
field = "Controller Step Size", egoDelta, { egoAlgorithm == 0 }
field = "Controller Auth +/-", egoLimit, { egoType > 0 }
field = "Active Above CLT", egoTemp, { egoType > 0 }
field = "Active Above RPM", egoRPM, { egoType > 0 }
field = "Active Below TPS", TPSOXLimit, { egoType > 0 }
field = "Active Below MAP", MAPOXLimit, { egoType > 0 }
field = "Active Above MAP", MAPOXMin, { egoType > 0 }
field = "Narrowband EGO target", AFRTarget, { (egoType == 1) || (egoType == 2) }
field = "#WB Controller Settings"
field = "Algorithm", egoAlgorithm, { egoType > 0 }
field = "EGO Delay After Start", ego_startdelay,{ (egoType > 0) && (egoAlgorithm < 3) }
field = "PID Proportional Gain", egoKP, { (egoType > 0) && (egoAlgorithm == 2) }
field = "PID Integral", egoKI, { (egoType > 0) && (egoAlgorithm == 2) }
field = "PID Derivative", egoKD, { (egoType > 0) && (egoAlgorithm == 2) }
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 != 54)};
field = "GM HEI/DIS Options", spk_conf2_gm, {spk_mode0 ==2}
; field = "Ford TFI options", spk_conf2_tfi, {spk_mode0 ==3}
field = "Use Cam Signal If Available", spk_conf2_cam, {(spk_mode0 == 5) || (spk_mode0 == 6) || (spk_mode0 == 8) || (spk_mode0 == 16) ||(spk_mode0 == 23)}
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, { (spk_mode0 > 1) }
field = "Spark A Output Pin (IGN1 Normal)", spk_config_spka, { (spk_mode0 > 1) && (spk_mode0 != 31) }
field = "Cam Input (see tooltip)", spk_mode3a, {!((spk_config_trig2 == 1) && (spk_mode0 == 4))} ; greyed in toothed wheel, single wheel
field = "Flip Polarity On 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 = "Nominal Dwell", max_coil_dur, {(spk_mode0 >1) && (dwellmode==0) }
field = "Spark Duration", max_spk_dur, {(spk_mode0 >1) && (dwellmode==0) }
field = "Dwell Time", dwelltime, {(spk_mode0 >1) && (dwellmode==2) }
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 = "Kick-start crank delay", spk_conf2_kick, { ((spk_mode0 == 2) && (triggerOffset < 20)) || (spk_mode0 == 3) }
field = "Delay", kickdelay, { spk_conf2_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) }
field = "Missing Teeth", No_Miss_Teeth, {(spk_config_trig2 != 2) && (spk_mode0 == 4)}
field = "Tooth #1 Angle", Miss_ang, {(spk_mode0 == 4) }
field = "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_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)}
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 = westIgnitionOptions, "", yAxis
panel = ignitionOptions
panel = triggerWheel
dialog = eastIgnitionOptions, "", yAxis
panel = moreIgnitionOptions
panel = oddfireangles1
panel = oddfireangles3
panel = oddfireangles5
dialog = combinedignition, "Ignition Options / Wheel Decoder", border
topicHelp = "file://$getProjectsDirPath()/docs/Megasquirt2_TunerStudio_MS_Lite_Reference-3.4.pdf#ignopts"
panel = westIgnitionOptions, West
panel = eastIgnitionOptions, East
dialog = pwmidle_closedloop_pwm, "Closed-Loop Idle Valve Settings"
field = "Idle Valve Closed Duty", pwmidle_closed_duty
field = "Idle Valve Open Duty", pwmidle_open_duty
field = "Dashpot Adder", pwmidle_dp_adder
field = "Dashpot Decay Factor", pwmidle_dp_decay_factor
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 = "Shift Settings"
field = "Leave Valve Closed Above:", pwmidle_shift_lower_rpm, { pwmidle_close_delay }
field = "For This Number Of Seconds:" pwmidle_shift_open_time, { pwmidle_close_delay }
dialog = pwmidle_closedloop_stepper, "Closed-Loop Idle Valve Settings"
field = "Idle Valve Closed Steps", pwmidle_closed_steps
field = "Idle Valve Open Steps", pwmidle_open_steps
field = "Dashpot Adder", pwmidle_dp_adder_steps
field = "Dashpot Decay Factor", pwmidle_dp_decay_factor
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 = "Shift Settings"
field = "Leave Valve Closed Above:", pwmidle_shift_lower_rpm, { pwmidle_close_delay }
field = "For This Number Of Seconds:" pwmidle_shift_open_time, { pwmidle_close_delay }
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
field = "PID Disable RPMdot (Max)", pwmidle_rpmdot_disablepid
dialog = pwmidle_PID_gains, "Closed-Loop Idle PID Gains"
field = "Tuning Mode", pwmidle_freq_cl_opts_display_pid
slider = "Closed-Loop Gain", pwmidle_max_rpm_new, horizontal
field = "Proportional Gain", pwmidle_Kp_new, { pwmidle_freq_cl_opts_display_pid }
field = "Integral Gain", pwmidle_Ki_new, { pwmidle_freq_cl_opts_display_pid }
field = "Derivative Gain", pwmidle_Kd_new, { pwmidle_freq_cl_opts_display_pid }
dialog = pwmidle_PID_activation, "Closed-Loop Idle PID Activation Settings"
field = "Idle Activation TPS Threshold (Max)", pwmidle_tps_threshold
field = "RPMdot Threshold (Max)", pwmidle_rpmdot_threshold
field = "Load Threshold (Min)", pwmidle_decelload_threshold
field = "Closed-Loop Idle Entry (For Clutch/Neutral Switch)"
field = "PID Lockout On Switch Active", ClutchPIDEntry
field = "Sliding Window Smoothing"
field = "PID RPM Window Size (1=Off)", pidrpm_window
dialog = pwmidle_closedloop, "", card
panel = pwmidle_closedloop_pwm, Center, { IdleCtl == 2 }
panel = pwmidle_closedloop_stepper, Center, { IdleCtl == 3 }
dialog = pwmidle_west_panel, "", border
panel = pwmidle_closedloop, North
panel = pwmidle_PID_gains, Center
dialog = pwmidle_mid_panel, "", border
panel = pwmidle_PID_behavior, North
panel = pwmidle_PID_activation, South
dialog = combinedCLidle, "Closed-Loop Idle Settings", border
topicHelp = "file://$getProjectsDirPath()/docs/Megasquirt2_TunerStudio_MS_Lite_Reference-3.4.pdf#clidle"
panel = pwmidle_mid_panel, Center
panel = pwmidle_west_panel, West
dialog = sensorCal, "Calibrate MAP/Baro"
topicHelp = "file://$getProjectsDirPath()/docs/Megasquirt2_TunerStudio_MS_Lite_Reference-3.4.pdf#calmapbaro"
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
field = "Value at 0.0 volts", map0
field = "Value at 5.0 volts", mapmax
field = "#Barometer Sensor (usually identical to MAP)"
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
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 = knockSettings2, ""
field = "Knock Control", knk_option
field = "Input Type", knk_option_an, { knk_option }
field = "Knock Input Pin", knkport, { knk_option }
field = "#Detection"
field = "Knock Indicated By:", knkDirection, { (knk_option > 0) && (!knk_option_an)}
field = "Pullup/down On Input", knkpull, { (knk_option > 0) && (!knk_option_an)}
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 = "#Retarding"
field = "Maximum Retard", knk_maxrtd, { knk_option > 0 }
field = "Retard Check Time", knk_trtd, { knk_option > 0 }
field = "Retard Step Size", knk_step1, { knk_option > 0 }
field = "#Recovery"
field = "Advance Check Time", knk_tadv, { knk_option > 0 }
field = "Advance Step Size", knk_step2, { knk_option > 0 }
field = "Recovery Advance", knk_dtble_adv, { knk_option == 1 }
dialog = knockSettings, "Knock Sensor Settings", border
topicHelp = "file://$getProjectsDirPath()/docs/Megasquirt2_TunerStudio_MS_Lite_Reference-3.4.pdf#knock"
panel = knockSettings2, West
panel = knockthresh_curve, East, {knk_option_an}
dialog = idleAdvance, "Idle Advance Settings"
topicHelp = "file://$getProjectsDirPath()/docs/Megasquirt2_TunerStudio_MS_Lite_Reference-3.4.pdf#idleadv"
field = "Idle Advance On", idleadvance_on
field = "Apply As:", idleadvance_adder, { idleadvance_on }
field = "Go To Idle Advance When:"
field = "Condition Is:", idleadvance_cl_cond, { idleadvance_on }
field = "TPS Is Below:", idleadvance_tps, { idleadvance_on && !idleadvance_cl_cond}
field = "And RPM Is Below:", idleadvance_rpm, { idleadvance_on && !idleadvance_cl_cond}
field = "And load Is Above:", idleadvance_load, { idleadvance_on && !idleadvance_cl_cond}
field = "And CLT Is Above:", idleadvance_clt, { idleadvance_on && !idleadvance_cl_cond}
field = "And After Delay:", idleadvance_delay, { idleadvance_on && !idleadvance_cl_cond}
dialog = setbaud, "Megasquirt Baud Rate"
topicHelp = "file://$getProjectsDirPath()/docs/Megasquirt2_TunerStudio_MS_Lite_Reference-3.4.pdf#baud"
field = "#Advanced users only."
field = "Changing this setting is not recommended."
field = "Megasquirt Baud Rate", baud
field = "Communications -> Settings -> Baud Rate must match."
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 = base3, "", yAxis
field = ""
field = ""
field = "Engine Size", enginesize
field = "Injector Size Each", staged_pri_size
dialog = base2, "", yAxis
panel = std_injection, North
panel = base3, South
dialog = base, "Engine and Sequential Settings", border
topicHelp = "file://$getProjectsDirPath()/docs/Megasquirt2_TunerStudio_MS_Lite_Reference-3.4.pdf#engseq"
panel = base2, West
panel = seq_injection, East
dialog = stagedCombined, "Staged Injection", border
topicHelp = "file://$getProjectsDirPath()/docs/Megasquirt2_TunerStudio_MS_Lite_Reference-3.4.pdf#stagedinj"
panel = staging, West
panel = stagedTable, Center, { (staged_first_param & 0x7) == 5 }
dialog = ITBcombined, "ITB Load Settings", border
topicHelp = "file://$getProjectsDirPath()/docs/Megasquirt2_TunerStudio_MS_Lite_Reference-3.4.pdf#itbload"
panel = ITB_load_switchpoint_curve, West
panel = ITB_load_loadvals_curve, 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 = "Hysteresis", IdleHyst, { (IdleCtl == 3) && (IdleCtl_alg == 0) }
field = "Connection", IdleCtl_out, { IdleCtl == 3 }
field = "Power Between Steps", IACcurlim, { IdleCtl == 3 }
dialog = eastidle, "PWM Idle"
field = "Crank-to-Run Taper Time", pwmidlecranktaper, { IdleCtl == 2 }
field = ""
field = "Valve Mode", pwmidleset_inv, { IdleCtl == 2 }
field = "Run Valve Before Start", pwmidleset_koeo, { IdleCtl == 2 }
field = "PWM Idle Port", pwmidle_port2, { IdleCtl == 2 }
field = "Valve Frequency", pwmidle_freq, { (!pwmidle_port2) && (IdleCtl == 2) }
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/Megasquirt2_TunerStudio_MS_Lite_Reference-3.4.pdf#idle"
panel = northidle, North
panel = southidle, 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
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
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
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
panel = outmsg4_off
panel = outmsg4_size
dialog = outmsg5_off, "", yAxis
field = "Variable Offset"
field = "01", outmsg5_offset01
field = "02", outmsg5_offset02
field = "03", outmsg5_offset03
field = "04", outmsg5_offset04
field = "05", outmsg5_offset05
field = "06", outmsg5_offset06
field = "07", outmsg5_offset07
field = "08", outmsg5_offset08
field = "09", outmsg5_offset09
field = "10", outmsg5_offset10
field = "11", outmsg5_offset11
field = "12", outmsg5_offset12
field = "13", outmsg5_offset13
field = "14", outmsg5_offset14
field = "15", outmsg5_offset15
field = "16", outmsg5_offset16
dialog = outmsg5_size, "", yAxis
field = " Size"
field = "", outmsg5_size01
field = "", outmsg5_size02
field = "", outmsg5_size03
field = "", outmsg5_size04
field = "", outmsg5_size05
field = "", outmsg5_size06
field = "", outmsg5_size07
field = "", outmsg5_size08
field = "", outmsg5_size09
field = "", outmsg5_size10
field = "", outmsg5_size11
field = "", outmsg5_size12
field = "", outmsg5_size13
field = "", outmsg5_size14
field = "", outmsg5_size15
field = "", outmsg5_size16
dialog = outmsg5, "Outmsg 5", xAxis
panel = outmsg5_off
panel = outmsg5_size
dialog = outmsg6_off, "", yAxis
field = "Variable Offset"
field = "01", outmsg6_offset01
field = "02", outmsg6_offset02
field = "03", outmsg6_offset03
field = "04", outmsg6_offset04
field = "05", outmsg6_offset05
field = "06", outmsg6_offset06
field = "07", outmsg6_offset07
field = "08", outmsg6_offset08
field = "09", outmsg6_offset09
field = "10", outmsg6_offset10
field = "11", outmsg6_offset11
field = "12", outmsg6_offset12
field = "13", outmsg6_offset13
field = "14", outmsg6_offset14
field = "15", outmsg6_offset15
field = "16", outmsg6_offset16
dialog = outmsg6_size, "", yAxis
field = " Size"
field = "", outmsg6_size01
field = "", outmsg6_size02
field = "", outmsg6_size03
field = "", outmsg6_size04
field = "", outmsg6_size05
field = "", outmsg6_size06
field = "", outmsg6_size07
field = "", outmsg6_size08
field = "", outmsg6_size09
field = "", outmsg6_size10
field = "", outmsg6_size11
field = "", outmsg6_size12
field = "", outmsg6_size13
field = "", outmsg6_size14
field = "", outmsg6_size15
field = "", outmsg6_size16
dialog = outmsg6, "Outmsg 6", xAxis
panel = outmsg6_off
panel = outmsg6_size
dialog = outmsg7_off, "", yAxis
field = "Variable Offset"
field = "01", outmsg7_offset01
field = "02", outmsg7_offset02
field = "03", outmsg7_offset03
field = "04", outmsg7_offset04
field = "05", outmsg7_offset05
field = "06", outmsg7_offset06
field = "07", outmsg7_offset07
field = "08", outmsg7_offset08
field = "09", outmsg7_offset09
field = "10", outmsg7_offset10
field = "11", outmsg7_offset11
field = "12", outmsg7_offset12
field = "13", outmsg7_offset13
field = "14", outmsg7_offset14
field = "15", outmsg7_offset15
field = "16", outmsg7_offset16
dialog = outmsg7_size, "", yAxis
field = " Size"
field = "", outmsg7_size01
field = "", outmsg7_size02
field = "", outmsg7_size03
field = "", outmsg7_size04
field = "", outmsg7_size05
field = "", outmsg7_size06
field = "", outmsg7_size07
field = "", outmsg7_size08
field = "", outmsg7_size09
field = "", outmsg7_size10
field = "", outmsg7_size11
field = "", outmsg7_size12
field = "", outmsg7_size13
field = "", outmsg7_size14
field = "", outmsg7_size15
field = "", outmsg7_size16
dialog = outmsg7, "Outmsg 7", xAxis
panel = outmsg7_off
panel = outmsg7_size
dialog = outmsg8_off, "", yAxis
field = "Variable Offset"
field = "01", outmsg8_offset01
field = "02", outmsg8_offset02
field = "03", outmsg8_offset03
field = "04", outmsg8_offset04
field = "05", outmsg8_offset05
field = "06", outmsg8_offset06
field = "07", outmsg8_offset07
field = "08", outmsg8_offset08
field = "09", outmsg8_offset09
field = "10", outmsg8_offset10
field = "11", outmsg8_offset11
field = "12", outmsg8_offset12
field = "13", outmsg8_offset13
field = "14", outmsg8_offset14
field = "15", outmsg8_offset15
field = "16", outmsg8_offset16
dialog = outmsg8_size, "", yAxis
field = " Size"
field = "", outmsg8_size01
field = "", outmsg8_size02
field = "", outmsg8_size03
field = "", outmsg8_size04
field = "", outmsg8_size05
field = "", outmsg8_size06
field = "", outmsg8_size07
field = "", outmsg8_size08
field = "", outmsg8_size09
field = "", outmsg8_size10
field = "", outmsg8_size11
field = "", outmsg8_size12
field = "", outmsg8_size13
field = "", outmsg8_size14
field = "", outmsg8_size15
field = "", outmsg8_size16
dialog = outmsg8, "Outmsg 8", xAxis
panel = outmsg8_off
panel = outmsg8_size
help = helpGeneral, "MS2/Extra General Help"
webHelp = "http://www.msextra.com"
text = "For current documentation and support questions visit
"
text = "http://www.msextra.com/"
text = "
"
text = "MS2/Extra is licensed for use only on:"
text = "
- offical Megasquirt and Microsquirt products from B&G and resellers."
text = "
- custom ECUs based on the Microsquirt module"
text = "
"
text = "
See the LICENSE.txt that was supplied with this firmware."
text = "
"
text = "To see legal Megasquirts, visit http://www.msextra.com/doc/general/whatmegasquirt.html"
;-------------------------------------------------------------------------------
[PortEditor]
; 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 = rmt_port_edit, "Remote On/Off Outputs"
; 1st the array constant, then the labels in the index order.
enabledPorts = rmt_psEnabled, "Remote Port Channel 1", "Remote Port Channel 2", "Remote Port Channel 3", "Remote Port Channel 4", "Remote Port Channel 5", "Remote Port Channel 6", "Remote Port Channel 7", "Remote Port Channel 8"
outputOffset = rmt_psOutOffset
outputSize = rmt_psOutSize
operators = rmt_psCondition, "<", "=", ">", "&" ; the actual ASCII value of the operator will be sent to the controller
threshold = rmt_psThreshold
hysteresis = rmt_psHysteresis
powerOnValue = rmt_psInitValue
triggerValue = rmt_psPortValue
conditionRelationship = rmt_psConnector, " ", "|", "&"
activateOption = extendedDataInSize
activateOption = filter32BitChannels
;-------------------------------------------------------------------------------
; 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 = std_port_edit, "Programmable On/Off Outputs"
; 1st the array constant, then the labels in the index order.
; enabledPorts = psEnabled, "PM2 - FIdle", "PM3 - Injection LED", "PM4 - Accel LED", "PM5 - Warmup LED", "PT6 - IAC1", "PT7 - IAC2", "PA0 - Knock Enable"
enabledPorts = psEnabled, "FIDLE", "Tach out", "Output1", "Output2", "InjectorC", "InjectorD", "Boost"
; new CAN id, optional if psCanId is set to a valid array equal in size to outputOffset, it will be in the UI.
outputCanId = psCanId
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
;-------------------------------------------------------------------------------
[CurveEditor]
curve = knockthresh_curve, "Knock input threshold"
topicHelp = "file://$getProjectsDirPath()/docs/Megasquirt2_TunerStudio_MS_Lite_Reference-3.4.pdf#knock"
columnLabel = "RPM", "%"
xAxis = 0, {rpmhigh}, 6
yAxis = 0, 100, 6
xBins = knock_rpms, rpm
yBins = knock_thresholds
gauge = knockinGauge
curve = tpswot_curve, "TPS WOT curve"
topicHelp = "file://$getProjectsDirPath()/docs/Megasquirt2_TunerStudio_MS_Lite_Reference-3.4.pdf#tpswot"
columnLabel = "RPM", "TPS"
xAxis = 0, {rpmhigh}, 6
yAxis = 0, 100, 7
xBins = tpswot_rpm, rpm
yBins = tpswot_tps
;mat/clt
curve = matclt_curve, "MAT/CLT Correction"
topicHelp = "file://$getProjectsDirPath()/docs/Megasquirt2_TunerStudio_MS_Lite_Reference-3.4.pdf#matcltcor"
columnLabel = "Flow", "%CLT"
xAxis = 0, {rpmhigh * 400}, 5
yAxis = 0, 100, 5
xBins = matclt_flow, calcflow
yBins = matclt_pct
;time-based
curve = time_accel_mapdot_curve, "MAP based AE"
;no help needed
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"
;no help needed
columnLabel = "TPSdot", "Added"
xAxis = 0, 1200, 6
yAxis = 0, 48, 4
xBins = taeRates, TPSdot
yBins = taeBins
curve = MAFtable1, "MAF Flow Curve"
topicHelp = "file://$getProjectsDirPath()/docs/Megasquirt2_TunerStudio_MS_Lite_Reference-3.4.pdf#mafflow"
columnLabel = "MAF volts", "Flow"
xAxis = 0, 5, 11
yAxis = 0, {650 * (maf_range + 1)}, 11
xBins = mafv, maf_volts
yBins = mafflow
gauge = maf_voltsGauge
curve = MAFtable1old, "MAF Correction Table (Old)"
topicHelp = "file://$getProjectsDirPath()/docs/Megasquirt2_TunerStudio_MS_Lite_Reference-3.4.pdf#mafcor"
columnLabel = "MAF Flow", "Correction"
xAxis = 0, 300, 11
yAxis = 0, 255, 11
xBins = MAFFlow, maf
yBins = MAFCor
gauge = mafGauge
curve = dwellSettings, "Dwell Battery Correction"
topicHelp = "file://$getProjectsDirPath()/docs/Megasquirt2_TunerStudio_MS_Lite_Reference-3.4.pdf#dwellbat"
columnLabel = "Voltage", "%age"
xAxis = 6, 16, 6
yAxis = 0, 500, 6
xBins = dwellvolts
yBins = dwellcorr
curve = coldAdvance, "Cold Advance"
topicHelp = "file://$getProjectsDirPath()/docs/Megasquirt2_TunerStudio_MS_Lite_Reference-3.4.pdf#coldadv"
columnLabel = "Coolant", "Offset"
xAxis = -40, {clthighlim}, 9
yAxis = -10, 10, 5
xBins = tempTable, coolant
yBins = cold_adv_table
gauge = cltGauge
curve = iacBins, "Stepper Idle Warmup Position"
topicHelp = "file://$getProjectsDirPath()/docs/Megasquirt2_TunerStudio_MS_Lite_Reference-3.4.pdf#idlewu"
columnLabel = "Coolant", "IAC Steps"
xAxis = -40, {clthighlim}, 9
yAxis = 0, 300, 7
xBins = tempTable, coolant
yBins = iacstepTable
gauge = cltGauge
curve = ipwBins, "PWM Idle Warmup Duty Cycle"
topicHelp = "file://$getProjectsDirPath()/docs/Megasquirt2_TunerStudio_MS_Lite_Reference-3.4.pdf#idlewu"
columnLabel = "Coolant", "Idle PWM Duty"
xAxis = -40, {clthighlim}, 9
yAxis = 0, 100, 6
xBins = tempTable, coolant
yBins = ipwmTable
gauge = cltGauge
curve = primingPW, "Priming Pulse"
topicHelp = "file://$getProjectsDirPath()/docs/Megasquirt2_TunerStudio_MS_Lite_Reference-3.4.pdf#primep"
columnLabel = "Coolant", "Prime PW"
xAxis = -40, {clthighlim}, 9
yAxis = 0, 20, 5
xBins = temp_table_p5, coolant
yBins = primePWTable
gauge = cltGauge
curve = crankingPW, "Cranking Pulse %"
topicHelp = "file://$getProjectsDirPath()/docs/Megasquirt2_TunerStudio_MS_Lite_Reference-3.4.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 Percentage"
;no help needed
columnLabel = "Coolant", "Afterstart"
xAxis = -40, {clthighlim}, 9
yAxis = 0, 100, 6
xBins = temp_table_p5, coolant
yBins = asePctTable
gauge = cltGauge
curve = aseTaper, "AfterStart Enrichment (ASE) Taper"
topicHelp = "file://$getProjectsDirPath()/docs/Megasquirt2_TunerStudio_MS_Lite_Reference-3.4.pdf#aset"
columnLabel = "Coolant", "Taper"
xAxis = -40, {clthighlim}, 9
yAxis = 0, 500, 6
xBins = temp_table_p5, coolant
yBins = aseCntTable
gauge = cltGauge
curve = matBasedRetard, "MAT-Based Timing Retard"
topicHelp = "file://$getProjectsDirPath()/docs/Megasquirt2_TunerStudio_MS_Lite_Reference-3.4.pdf#matretard"
columnLabel = "MAT", "Retard"
;upper limits too high, but have to leave them there so data is visible in TS.
#if CELSIUS
xAxis = -40, 300, 9
#else
xAxis = -40, 300, 9
#endif
yAxis = 0, 15, 7
xBins = matTemps, airtemp
yBins = matRetard
gauge = airtempGauge
curve = barometerCorr, "Barometric Correction"
topicHelp = "file://$getProjectsDirPath()/docs/Megasquirt2_TunerStudio_MS_Lite_Reference-3.4.pdf#barocor"
columnLabel = "Barometer", "Correction"
xAxis = 60, 120, 7
yAxis = 80, 120, 7
xBins = baroCorrVals, barometer
yBins = baroCorrDelta
gauge = barometerGauge
curve = airdenCorr, "MAT Air Density"
;no help needed
columnLabel = "Air temp", "Correction"
xAxis = -40, 200, 9
yAxis = 70, 130, 7
xBins = matCorrTemps2, airtemp
yBins = matCorrDelta2
gauge = airtempGauge
curve = manifoldTempCorr, "MAF/MAT Correction Table"
topicHelp = "file://$getProjectsDirPath()/docs/Megasquirt2_TunerStudio_MS_Lite_Reference-3.4.pdf#mafmatcor"
columnLabel = "MAT", "Correction"
xAxis = -40, 200, 9
yAxis = -30, 30, 7
xBins = matCorrTemps, mat
yBins = matCorrDelta
gauge = matGauge
curve = EAEBAWCcurve, "EAE Adhere-to-Walls Coefficient"
topicHelp = "file://$getProjectsDirPath()/docs/Megasquirt2_TunerStudio_MS_Lite_Reference-3.4.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/Megasquirt2_TunerStudio_MS_Lite_Reference-3.4.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/Megasquirt2_TunerStudio_MS_Lite_Reference-3.4.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/Megasquirt2_TunerStudio_MS_Lite_Reference-3.4.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/Megasquirt2_TunerStudio_MS_Lite_Reference-3.4.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/Megasquirt2_TunerStudio_MS_Lite_Reference-3.4.pdf#eaeawcc"
columnLabel = "CLT", "Correction"
xAxis = 0, {clthighlim}, 12
yAxis = 0, 200, 12
xBins = EAEAWWCLTbins, coolant
yBins = EAEAWW
gauge = EAEGauge1
curve = NoiseFiltercurve, "Noise Filter Curve"
;no help needed
columnLabel = "RPMS", "usec"
xAxis = 0, {rpmhigh}, 4
yAxis = 0, 2000, 4
xBins = NoiseFilterRpm
yBins = NoiseFilterLen
curve = warmup_curve, "Warmup Enrichment Curve"
;no help needed
columnLabel = "Coolant", "WUE %"
xAxis = -40, {clthighlim}, 9
yAxis = 0, 500, 6
xBins = tempTable, coolant
yBins = wueBins
gauge = cltGauge
curve = idleAdvance_load_curve, "Idle Load Advance Timing"
topicHelp = "file://$getProjectsDirPath()/docs/Megasquirt2_TunerStudio_MS_Lite_Reference-3.4.pdf#idleadvload"
columnLabel = "Load %", "deg"
xAxis = 0, 100, 6
yAxis = -20, 90, 6
xBins = idleadvance_loads, fuelload
yBins = idleadvance_curve
curve = idleAdvance_rpm_curve, "Idle RPM Advance Timing"
topicHelp = "file://$getProjectsDirPath()/docs/Megasquirt2_TunerStudio_MS_Lite_Reference-3.4.pdf#idleadvrpm"
columnLabel = "RPM", "deg"
xAxis = 500, 1500, 6
yAxis = -20, 90, 6
xBins = idleadvance_rpms, rpm
yBins = idleadvance_curve
curve = idleAdvance_adaptive_curve, "Idle Adaptive Advance Timing"
topicHelp = "file://$getProjectsDirPath()/docs/Megasquirt2_TunerStudio_MS_Lite_Reference-3.4.pdf#idleadvadapt"
columnLabel = "RPM delta", "deg"
xAxis = -250, 250, 6
yAxis = -20, 20, 6
xBins = idleadvance_rpmsdelta, rpm_target_error_follower
yBins = idleadvance_curve
curve = pwmidle_target_curve, "Closed-Loop Idle Target RPMs"
topicHelp = "file://$getProjectsDirPath()/docs/Megasquirt2_TunerStudio_MS_Lite_Reference-3.4.pdf#clidletarg"
columnLabel = "CLT", "RPM"
xAxis = 0, 255, 8
yAxis = 0, 2000, 8
xBins = pwmidle_clt_temps, coolant
yBins = pwmidle_target_rpms
curve = revlimiterBins, "Coolant Based Rev Limit"
;no help needed
columnLabel = "Coolant", "Rev limit"
xAxis = -40, {clthighlim}, 8
yAxis = 0, {rpmhigh}, 8
xBins = RevLimLookup, coolant
yBins = RevLimRpm1
gauge = cltGauge
curve = pwmidle_crank_dutyorsteps_dutycurve, "Coolant-Based Crank Duty"
topicHelp = "file://$getProjectsDirPath()/docs/Megasquirt2_TunerStudio_MS_Lite_Reference-3.4.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/Megasquirt2_TunerStudio_MS_Lite_Reference-3.4.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"
; no help needed
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, "ITB Load TPS Switchpoints"
;no help needed
columnLabel = "RPM", "TPS %"
xAxis = 0, {rpmhigh}, 12
yAxis = 0, 100, 12
xBins = ITB_load_rpms, rpm
yBins = ITB_load_switchpoints
curve = idle_voltage_comp_curve, "PWM Idle Voltage Compensation"
topicHelp = "file://$getProjectsDirPath()/docs/Megasquirt2_TunerStudio_MS_Lite_Reference-3.4.pdf#idlevolt"
columnLabel = "Voltage", "Duty"
xAxis = 9, 17, 6
yAxis = -15, 15, 6
xBins = idle_voltage_comp_voltage, batteryVoltage
yBins = idle_voltage_comp_delta
[TableEditor]
; table_id, map3d_id, "title", page
table = boostctlCLPWMtargs1, boostctlCLPWMtargsMap1, "Boost Control Initial Duty Table", 15
topicHelp = "file://$getProjectsDirPath()/docs/Megasquirt2_TunerStudio_MS_Lite_Reference-3.4.pdf#bcinitial"
xBins = boost_ctl_cl_pwm_rpms1, rpm
yBins = boost_ctl_cl_pwm_targboosts1, boost_targ
zBins = boost_ctl_cl_pwm_targs1
upDownLabel = "HIGHER", "LOWER"
gridOrient = 250, 0, 340
;std 16x16
table = veTable1Tbl, veTable1Map, "Fuel VE Table 1", 5
topicHelp = "file://$getProjectsDirPath()/docs/Megasquirt2_TunerStudio_MS_Lite_Reference-3.4.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", 5
topicHelp = "file://$getProjectsDirPath()/docs/Megasquirt2_TunerStudio_MS_Lite_Reference-3.4.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", 5
topicHelp = "file://$getProjectsDirPath()/docs/Megasquirt2_TunerStudio_MS_Lite_Reference-3.4.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 = stagedTable, stagedMap, "Staged Injection table", 3
;no help needed
xBins = staged_rpms, rpm
yBins = staged_loads, fuelload
zBins = staged_percents
upDownLabel = "MORE", "LESS"
gridOrient = 250, 0, 340
;same again but 12x12
table = veTable1Tbldoz, veTable1Mapdoz, "Fuel VE Table 1", 5
topicHelp = "file://$getProjectsDirPath()/docs/Megasquirt2_TunerStudio_MS_Lite_Reference-3.4.pdf#ve1"
; constant, variable
xBins = frpm_table1doz, rpm
yBins = fmap_table1doz, fuelload
zBins = veTable1dozen
upDownLabel = "RICHER", "LEANER"
gridOrient = 250, 0, 340 ; Space 123 rotation of grid in degrees.
table = veTable2Tbldoz, veTable2Mapdoz, "Fuel VE Table 2", 5
topicHelp = "file://$getProjectsDirPath()/docs/Megasquirt2_TunerStudio_MS_Lite_Reference-3.4.pdf#ve2"
xBins = frpm_table2doz, rpm
yBins = fmap_table2doz, fuelload2
zBins = veTable2dozen
upDownLabel = "RICHER", "LEANER"
gridOrient = 250, 0, 340
table = veTable3Tbldoz, veTable3Mapdoz, "Fuel VE Table 3", 5
topicHelp = "file://$getProjectsDirPath()/docs/Megasquirt2_TunerStudio_MS_Lite_Reference-3.4.pdf#ve3"
; constant, variable
xBins = frpm_table3doz, rpm
yBins = fmap_table3doz, fuelload
zBins = veTable3dozen
upDownLabel = "RICHER", "LEANER"
gridOrient = 250, 0, 340 ; Space 123 rotation of grid in degrees.
#if LAMBDA
table = afrTable1Tbl, afrTable1Map, "Lambda Table 1", 1
#else
table = afrTable1Tbl, afrTable1Map, "AFR Table 1", 1
#endif
topicHelp = "file://$getProjectsDirPath()/docs/Megasquirt2_TunerStudio_MS_Lite_Reference-3.4.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/Megasquirt2_TunerStudio_MS_Lite_Reference-3.4.pdf#afr2"
xBins = arpm_table2, rpm
yBins = amap_table2, afrload1
zBins = afrTable2
upDownLabel = "LEANER", "RICHER"
gridOrient = 250, 0, 340
table = ignitionTbl1, ignitionMap1, "Ignition Table 1 (Spark Advance)", 3
topicHelp = "file://$getProjectsDirPath()/docs/Megasquirt2_TunerStudio_MS_Lite_Reference-3.4.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/Megasquirt2_TunerStudio_MS_Lite_Reference-3.4.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/Megasquirt2_TunerStudio_MS_Lite_Reference-3.4.pdf#ign3"
xBins = srpm_table3, rpm
yBins = smap_table3, ignload
zBins = advanceTable3
upDownLabel = "ADVANCING", "RETARDING"
gridOrient = 250, 0, 340
table = RotarySplitTbl, RotarySplitMap, "Rotary Split Table", 3
topicHelp = "file://$getProjectsDirPath()/docs/Megasquirt2_TunerStudio_MS_Lite_Reference-3.4.pdf#rotarysplit"
xBins = RotarySplitRPM, rpm
yBins = RotarySplitLoad, ignload
zBins = RotarySplitTable
upDownLabel = "ADVANCING", "RETARDING"
gridOrient = 250, 0, 340
table = injTiming1Tbl, injTiming1Map, "Injection Timing Table 1", 4
topicHelp = "file://$getProjectsDirPath()/docs/Megasquirt2_TunerStudio_MS_Lite_Reference-3.4.pdf#injt1"
xBins = srpm_injadv1, rpm
yBins = smap_injadv1, fuelload
zBins = injadvTable1
upDownLabel = "ADVANCING", "RETARDING"
gridOrient = 250, 0, 340
table = injTiming2Tbl, injTiming2Map, "Injection Timing Table 2", 4
topicHelp = "file://$getProjectsDirPath()/docs/Megasquirt2_TunerStudio_MS_Lite_Reference-3.4.pdf#injt2"
xBins = srpm_injadv2, rpm
yBins = smap_injadv2, fuelload
zBins = injadvTable2
upDownLabel = "ADVANCING", "RETARDING"
gridOrient = 250, 0, 340
table = injTiming3Tbl, injTiming3Map, "Injection Timing Table 3", 2
topicHelp = "file://$getProjectsDirPath()/docs/Megasquirt2_TunerStudio_MS_Lite_Reference-3.4.pdf#injt3"
xBins = srpm_injadv3, rpm
yBins = smap_injadv3, fuelload
zBins = injadvTable3
upDownLabel = "ADVANCING", "RETARDING"
gridOrient = 250, 0, 340
;std 16x16
table = veTrim1Tbl, veTrim1Map, "Fuel VE Trim Table 1", 4
topicHelp = "file://$getProjectsDirPath()/docs/Megasquirt2_TunerStudio_MS_Lite_Reference-3.4.pdf#vetrim1"
; constant, variable
xBins = frpm_trim1, rpm
yBins = fmap_trim1, fuelload
zBins = veTrim1
upDownLabel = "RICHER", "LEANER"
gridOrient = 250, 0, 340 ; Space 123 rotation of grid in degrees.
table = veTrim2Tbl, veTrim2Map, "Fuel VE Trim Table 2", 6
topicHelp = "file://$getProjectsDirPath()/docs/Megasquirt2_TunerStudio_MS_Lite_Reference-3.4.pdf#vetrim2"
; constant, variable
xBins = frpm_trim2, rpm
yBins = fmap_trim2, fuelload
zBins = veTrim2
upDownLabel = "RICHER", "LEANER"
gridOrient = 250, 0, 340 ; Space 123 rotation of grid in degrees.
table = veTrim3Tbl, veTrim3Map, "Fuel VE Trim Table 3", 6
topicHelp = "file://$getProjectsDirPath()/docs/Megasquirt2_TunerStudio_MS_Lite_Reference-3.4.pdf#vetrim3"
; constant, variable
xBins = frpm_trim3, rpm
yBins = fmap_trim3, fuelload
zBins = veTrim3
upDownLabel = "RICHER", "LEANER"
gridOrient = 250, 0, 340 ; Space 123 rotation of grid in degrees.
table = veTrim4Tbl, veTrim4Map, "Fuel VE Trim Table 4", 6
topicHelp = "file://$getProjectsDirPath()/docs/Megasquirt2_TunerStudio_MS_Lite_Reference-3.4.pdf#vetrim4"
; constant, variable
xBins = frpm_trim4, rpm
yBins = fmap_trim4, fuelload
zBins = veTrim4
upDownLabel = "RICHER", "LEANER"
gridOrient = 250, 0, 340 ; Space 123 rotation of grid in degrees.
;same again but 12x12
table = veTrim1Tbldoz, veTrim1Mapdoz, "Fuel VE Trim Table 1", 4
topicHelp = "file://$getProjectsDirPath()/docs/Megasquirt2_TunerStudio_MS_Lite_Reference-3.4.pdf#vetrim1"
; constant, variable
xBins = frpm_trim1doz, rpm
yBins = fmap_trim1doz, fuelload
zBins = veTrim1dozen
upDownLabel = "RICHER", "LEANER"
gridOrient = 250, 0, 340 ; Space 123 rotation of grid in degrees.
table = veTrim2Tbldoz, veTrim2Mapdoz, "Fuel VE Trim Table 2", 6
topicHelp = "file://$getProjectsDirPath()/docs/Megasquirt2_TunerStudio_MS_Lite_Reference-3.4.pdf#vetrim2"
; constant, variable
xBins = frpm_trim2doz, rpm
yBins = fmap_trim2doz, fuelload
zBins = veTrim2dozen
upDownLabel = "RICHER", "LEANER"
gridOrient = 250, 0, 340 ; Space 123 rotation of grid in degrees.
table = veTrim3Tbldoz, veTrim3Mapdoz, "Fuel VE Trim Table 3", 6
topicHelp = "file://$getProjectsDirPath()/docs/Megasquirt2_TunerStudio_MS_Lite_Reference-3.4.pdf#vetrim3"
; constant, variable
xBins = frpm_trim3doz, rpm
yBins = fmap_trim3doz, fuelload
zBins = veTrim3dozen
upDownLabel = "RICHER", "LEANER"
gridOrient = 250, 0, 340 ; Space 123 rotation of grid in degrees.
table = veTrim4Tbldoz, veTrim4Mapdoz, "Fuel VE Trim Table 4", 6
topicHelp = "file://$getProjectsDirPath()/docs/Megasquirt2_TunerStudio_MS_Lite_Reference-3.4.pdf#vetrim4"
; constant, variable
xBins = frpm_trim4doz, rpm
yBins = fmap_trim4doz, fuelload
zBins = veTrim4dozen
upDownLabel = "RICHER", "LEANER"
gridOrient = 250, 0, 340 ; Space 123 rotation of grid in degrees.
table = boostctlDutys, boostctlDtyMap, "Boost Control Duty Table", 2
topicHelp = "file://$getProjectsDirPath()/docs/Megasquirt2_TunerStudio_MS_Lite_Reference-3.4.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 Target Table", 2
topicHelp = "file://$getProjectsDirPath()/docs/Megasquirt2_TunerStudio_MS_Lite_Reference-3.4.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 = pwmidle_cl_initialvalues_dty, pwmidle_cl_initialvalues_dtymap, "Closed-Loop Idle Initial Values", 19
topicHelp = "file://$getProjectsDirPath()/docs/Megasquirt2_TunerStudio_MS_Lite_Reference-3.4.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/Megasquirt2_TunerStudio_MS_Lite_Reference-3.4.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
;-------------------------------------------------------------------------------
[GaugeConfigurations]
;-------------------------------------------------------------------------------
; Notes on some of the gauges.
;
; The accelEnrichGauge is now a composite of both acceleration enrichment
; and deceleration enleanment numbers. See the definition of the variable
; accDecEnrich in the OutputChannels section.
;
; David Hooke contributed the lambda gauge and associated transfer
; function files.
;
; The lambda gauge is the best way (my opinion) to report data from a
; wide band EGO gauge, it standardizes the output irrespective of fuel
; or mix of fuels, so you needn't do any brainwork to know if your 75%
; gasoline and 25% methanol is rich at 10:1 or not.
;
; Use the file WBlambda100AVR.inc, if using a standard ADC (e.g., AVR cpu).
; Use the file WBlambda100MOT.inc, if using a biased ADC (e.g., MOT cpu).
;-------------------------------------------------------------------------------
; 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"
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
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
pulseWidth3Gauge = pulseWidth3, "Pulse Width 3", "ms", 0, 25.5, 1.0, 1.2, 20, 25, 3, 1
pulseWidth4Gauge = pulseWidth4, "Pulse Width 4", "ms", 0, 25.5, 1.0, 1.2, 20, 25, 3, 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
injadv1Gauge = inj_adv1, "Injection Timing 1", "degrees", -360, 360, -999, -999, 999, 999, 1, 1
injadv2Gauge = inj_adv2, "Injection Timing 2", "degrees", -360, 360, -999, -999, 999, 999, 1, 1
gaugeCategory = "Calculations 1"
advBucketGauge = veTuneValue, "Advance Bucket", "degrees", 0, 55, -1, -1, 999, 999, 1, 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
clockGauge = seconds, "Clock", "Seconds", 0, 65535, 10, 10, 65535, 65535, 0, 0
gammaEnrichGauge = gammaEnrich, "Total Cor", "%", 50, 150, -1, -1, 151, 151, 0, 0
gammaairGauge = airCorrection, "Air Density Correction", "%", 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
vetrimGauge1 = vetrim1curr, "VE Trim 1", "%", 87, 113, -999, -999, 999, 999, 1, 1
vetrimGauge2 = vetrim2curr, "VE Trim 2", "%", 87, 113, -999, -999, 999, 999, 1, 1
vetrimGauge3 = vetrim3curr, "VE Trim 3", "%", 87, 113, -999, -999, 999, 999, 1, 1
vetrimGauge4 = vetrim4curr, "VE Trim 4", "%", 87, 113, -999, -999, 999, 999, 1, 1
flexcorGauge = fuelCorrection, "E85 Fuel Correction", "%", 0, 200, 40, 70, 130, 160, 0, 0
reqfuelGauge = reqfuel, "Req Fuel (calc)", "ms", 0, 25.5, 1.0, 1.2, 20, 25, 3, 1
n2o_addfuelGauge = n2o_addfuel, "Nitrous Added Fuel", "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
warmupEnrichGauge = warmupEnrich, "Warmup Enrichment", "%", 100, 150, -1, -1, 101, 105, 0, 0
gaugeCategory = "Calculations 2"
knockGauge = knockRetard "Knock Retard", "deg", 0, 25.0, -1, -1, 5.0, 10.0, 1, 1
timingerrGauge = timing_err, "Timing Pred Err", "%", -12.7, 12.7, 255,255,255,0,1
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
user0Gauge = user0, "User Defined", "", 0, 65535, 65535, 65535, 65535, 65535, 0, 0
veBucketGauge = veTuneValue, "VE Value", "%", 0, 120, -1, -1, 999, 999, 0, 0
veGauge1 = veCurr1, "VE Current1", "%", 0, 120, -1, -1, 999, 999, 1, 1
veGauge2 = veCurr2, "VE2 Current", "%", 0, 120, -1, -1, 999, 999, 1, 1
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
boost_target = boost_targ, "Boost Target", "kPa", 0, 500, -1, -1, 999, 999, 1, 1
cl_idle_targ_rpm = cl_idle_targ_rpm, "CL Idle Target", "RPM", 0, {rpmhigh}, 300, 600, {rpmwarn}, {rpmdang}, 0, 0
coldAdvGauge = coldAdvDeg, "Cold Advance", "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
revlim_retardGauge= revlim_retard, "Revlim Retard", "deg", 0, 25.0, -50, -50, 50.0, 50.0, 1, 1
nitrous_retardGauge= nitrous_retard,"Nitrous Retard", "deg", 0, 25.0, -50, -50, 50.0, 50.0, 1, 1
;Name Var Title Units Lo Hi LoD LoW HiW HiD vd ld
gaugeCategory = "Sensor inputs 1"
#if CELSIUS
cltGauge = coolant, "Coolant Temp", "°C", -40, {clthighlim}, {cltlowdang}, {cltlowwarn}, {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", -40, {clthighlim}, {cltlowdang}, {cltlowwarn}, {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, 1
mapGauge = map, "Engine MAP", "kPa", 0, {loadhigh}, 0, 20, 200, {loadhigh}, 1, 0
barometerGauge = barometer, "Barometer", "kPa", 60, 120, 0, 20, 120, 120, 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 ? afeload : 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
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
gaugeCategory = "Sensor inputs 2"
gpioadc0Gauge = gpioadc0, "GPIO ADC 0", "", 0, 1023, 1023, 1023, 1023, 1023,0, 0
gpioadc1Gauge = gpioadc1, "GPIO ADC 1", "", 0, 1023, 1023, 1023, 1023, 1023,0, 0
gpioadc2Gauge = gpioadc2, "GPIO ADC 2", "", 0, 1023, 1023, 1023, 1023, 1023,0, 0
gpioadc3Gauge = gpioadc3, "GPIO ADC 3", "", 0, 1023, 1023, 1023, 1023, 1023,0, 0
gpioadc4Gauge = gpioadc4, "GPIO ADC 4", "", 0, 1023, 1023, 1023, 1023, 1023,0, 0
gpioadc5Gauge = gpioadc5, "GPIO ADC 5", "", 0, 1023, 1023, 1023, 1023, 1023,0, 0
gpioadc6Gauge = gpioadc6, "GPIO ADC 6", "", 0, 1023, 1023, 1023, 1023, 1023,0, 0
gpioadc7Gauge = gpioadc7, "GPIO ADC 7", "", 0, 1023, 1023, 1023, 1023, 1023,0, 0
knockinGauge = knock, "Knock Input", "%", 0, 100.0, -1, -1, 100.0, 100.0, 1, 1
adc6Gauge = adc6, "ADC 6", "", 0, 1023, 1023, 1023, 1023, 1023,0, 0
adc7Gauge = adc7, "ADC 7", "", 0, 1023, 1023, 1023, 1023, 1023,0, 0
#if CELSIUS
#if EGTFULL
egtGauge6 = egt6temp, "EGT", "C", 0, 1250, 0, 0, 1250, 1250, 1, 1
egtGauge7 = egt7temp, "EGT" , "C", 0, 1250, 0, 0, 1250, 1250, 1, 1
#else
egtGauge6 = egt6temp, "EGT", "C", 0, 1000, 0, 0, 1000, 1000, 1, 1
egtGauge7 = egt7temp, "EGT" , "C", 0, 1000, 0, 0, 1000, 1000, 1, 1
#endif
#else
#if EGTFULL
egtGauge6 = egt6temp, "EGT", "F", 0, 2280, 0, 0, 2280, 2280, 1, 1
egtGauge7 = egt7temp, "EGT", "F", 0, 2280, 0, 0, 2280, 2280, 1, 1
#else
egtGauge6 = egt6temp, "EGT", "F", 0, 1830, 0, 0, 1830, 1830, 1, 1
egtGauge7 = egt7temp, "EGT", "F", 0, 1830, 0, 0, 1830, 1830, 1, 1
#endif
#endif
fuelcompsn= fuel_pct, "Ethanol Percentage","%", 0, 100, -1, -1, 85, 101, 1, 1
gaugeCategory = "AFR/EGO inputs+calcs"
afr1Gauge = afr1, "Air:Fuel Ratio1", "", 10, 19.4, 12, 13, 15, 16, 2, 2
afr2Gauge = afr2, "Air:Fuel Ratio2", "", 10, 19.4, 12, 13, 15, 16, 2, 2
afr1tgtGauge = afrtgt1, "AFR1 Target", "", 10, 19.4, 12, 13, 15, 16, 2, 2
afr2tgtGauge = afrtgt2, "AFR2 Target", "", 10, 19.4, 12, 13, 15, 16, 2, 2
egoCorrGauge = egoCorrection, "EGO Correction", "%", 50, 150, 90, 99, 101, 110, 1, 1
egoCorrGauge1 = egoCorrection1,"EGO Correction 1", "%", 50, 150, 90, 99, 101, 110, 1, 1
egoCorrGauge2 = egoCorrection2,"EGO Correction 2", "%", 50, 150, 90, 99, 101, 110, 1, 1
egoGauge = egoVoltage, "Exhaust Gas Oxygen", "volts", 0, 1.0, 0.2, 0.3, 0.7, 0.8, 2, 2
egoVGauge = egoV, "Exhaust Gas Oxygen1", "volts", 0, 5, 5, 5, 5, 5, 5, 2
egoV2Gauge = egoV2, "Exhaust Gas Oxygen2", "volts", 0, 5, 5, 5, 5, 5, 5, 2
lambda1Gauge = lambda1, "Lambda1", "", 0.5, 1.5, 0.5, 0.7, 2, 1.1, 2, 2
lambda2Gauge = lambda2, "Lambda2", "", 0.5, 1.5, 0.5, 0.7, 2, 1.1, 2, 2
stoichGauge = Stoich, "Stoich", "", 10, 19.4, 12, 13, 15, 16, 2, 2
gaugeCategory = "X-Code dev"
; for diagnotics
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
injcountGauge = status5, "Injection Count", "pulses", 0, 1000, 65535, 65535, 65535, 65535,0, 0
looptimeGauge = looptime, "Mainloop Time", "us", 0, 65535, 255, 255, 255, 255, 0, 0
deadGauge = deadValue, "---", "", 0, 1, -1, -1, 2, 2, 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 = throttleGauge
gauge3 = pulseWidth1Gauge
; gauge4 = pulseWidth2Gauge
gauge4 = cltGauge
gauge5 = advdegGauge
gauge6 = fuelloadGauge
#if NARROW_BAND_EGO
gauge7 = egoVGauge
#elif LAMBDA
gauge7 = lambda1Gauge
#else
gauge7 = afr1Gauge
#endif
; gauge7 = dwellGauge
; gauge8 = matGauge
; gauge8 = injadv2Gauge
gauge8 = lostsyncGauge
;----------------------------------------------------------------------------
; Indicators
; expr off-label on-label, off-bg, off-fg, on-bg, on-fg
; indicator = { tpsaen }, "Not Accelerating", "AE", cyan, white, red, black
;
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 Enrich", "TPS Accel Enrich", white, black, green, black
indicator = { mapaccaen }, "MAP Accel Enrich", "MAP Accel Enrich", 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 = { port0 }, "Port 0 Off", "Port 0 On", white, black, red, black
indicator = { status1 & 4}, "Config Error", "Config Error", white, black, red, black
indicator = { status1 & 1}, "Need Burn", "Need Burn", white, black, red, black
indicator = { status1 & 2}, "Lost Data", "Lost Data", white, black, red, black
indicator = { status1 & 8}, "Not RPM synced", "RPM Synced", red, black, green, black
indicator = { status1 & 128}, "Half-RPM sync", "Full-RPM sync", white, black, green, black
;optional ones
indicator = { status1 & 32}, "Fuel Tbl sw", "Fuel Tbl sw", white, black, green, black
indicator = { status1 & 64}, "Spk Tbl sw", "Spk Tbl sw", white, black, green, black
indicator = { status2 & 1}, "N2O 1", "N2O 1", white, black, green, black
indicator = { status2 & 2}, "N2O 2", "N2O 2", white, black, green, black
indicator = { status2 & 4}, "Hard limit", "Hard limit", white, black, red, black
indicator = { status2 & 8}, "Launch", "Launch", white, black, green, black
indicator = { status2 & 16}, "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", "CL idle", white, black, green, black
indicator = { knock }, "Knock", "Knock", white, black, red, 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}, "MAPsample error!", "MAPsample error!", white, black, red, black
indicator = { status3 & 8}, "Test mode", "Test mode", white, black, yellow, 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}, "AC", "AC", white, black, green, black
#if PORT_STATUS
indicator = { portbde & 1 }, "PORTE0", "PORTE0", white, black, green, black
indicator = { portbde & 2 }, "PORTE1", "PORTE1", white, black, green, black
indicator = { portbde & 16 }, "PORTE4", "PORTE4", white, black, green, black
indicator = { portbde & 32 }, "PORTB4", "PORTB4", white, black, green, black
indicator = { portbde & 64 }, "PORTAD6", "PORTAD6", white, black, green, black
indicator = { portbde & 128 }, "PORTAD7", "PORTAD7", white, black, green, black
indicator = { portam & 1 }, "PORTA0", "PORTA0", white, black, green, black
indicator = { portam & 4 }, "PORTM2", "PORTM2", white, black, green, black
indicator = { portam & 8 }, "PORTM3", "PORTM3", white, black, green, black
indicator = { portam & 16 }, "PORTM4", "PORTM4", white, black, green, black
indicator = { portam & 32 }, "PORTM5", "PORTM5", white, black, green, black
indicator = { portt & 1 }, "PORTT0", "PORTT0", white, black, green, black
indicator = { portt & 2 }, "PORTT1", "PORTT1", white, black, green, black
indicator = { portt & 4 }, "PORTT2", "PORTT2", white, black, green, black
indicator = { portt & 8 }, "PORTT3", "PORTT3", white, black, green, black
indicator = { portt & 16 }, "PORTT4", "PORTT4", white, black, green, black
indicator = { portt & 32 }, "PORTT5", "PORTT5", white, black, green, black
indicator = { portt & 64 }, "PORTT6", "PORTT6", white, black, green, black
indicator = { portt & 128 }, "PORTT7", "PORTT7", white, black, green, black
#endif
;-------------------------------------------------------------------------------
[RunTime]
barHysteresis = 2.5 ; Seconds
#if CELSIUS
coolantBar = -40, {clthighlim}
matBar = -40, 100
#else
coolantBar = -40, {clthighlim}
matBar = -40, 215
#endif
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, 8000
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 = egoGauge, egoGauge, egoGauge, egoGauge
#elif LAMBDA
gauge3 = lambda1Gauge, lambda1Gauge, lambda1Gauge, lambda1Gauge
#else
gauge3 = afr1Gauge, afr1Gauge, afr1Gauge, afr1Gauge
#endif
gauge4 = egoCorrGauge, warmupEnrichGauge, pulseWidth1Gauge, pulseWidth2Gauge
gauge5 = veBucketGauge, veBucketGauge, veBucketGauge, veBucketGauge
gauge6 = accelEnrichGauge, accelEnrichGauge, dutyCycle1Gauge, dutyCycle2Gauge
;-------------------------------------------------------------------------------
[AccelerationWizard]
tpsDotBar = 0, 800
mapDotBar = 0, 700
;-------------------------------------------------------------------------------
[BurstMode]
; getCommand = "a\x00\x06"
getCommand = "A"
[OutputChannels]
deadValue = { 0 } ; Convenient unchanging value.
ochBlockSize = 212 ; change this if adding extra data to outpc
#if CAN_COMMANDS
;full version that works anywhere
ochGetCommand = "r\$tsCanId\x07%2o%2c"
#else
; fast get via serial
ochGetCommand = "A"
#endif
seconds = scalar, U16, 0, "s", 1.000, 0.0
secl = { seconds % 256 }, "s" ; For runtime screen.
pulseWidth1 = scalar, U16, 2, "ms", 0.000666, 0.0
pulseWidth2 = scalar, U16, 4, "ms", 0.000666, 0.0
pulseWidth = { pulseWidth1 }, "s" ; 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]
afrtgt1 = scalar, U08, 12, "AFR", 0.1, 0.0
afrtgt2 = scalar, U08, 13, "AFR", 0.1, 0.0
; 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 = scalar, S16, 28, "AFR", 0.100, 0.0
afr2 = scalar, S16, 30, "AFR", 0.100, 0.0
lambda1 = { afr1 / 14.7 }, "Lambda"
lambda2 = { afr2 / 14.7 }, "Lambda"
knock = scalar, U16, 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.100, 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.100, 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.0666, 0.0
mafload = scalar, S16, 64, "kPa", 0.100, 0.0
fuelload = scalar, S16, 66, { bitStringValue( algorithmUnits , algorithm ) }, 0.100, 0.0
fuelCorrection = scalar, S16, 68, "%", 1.000, 0.0 ; Percent fuel correction due to alcohol in fuel.
portStatus = scalar, U08, 70, "bit", 1.000, 0.0 ; Spare port status bits
port0 = bits, U08, 70, [0:0]
port1 = bits, U08, 70, [1:1]
port2 = bits, U08, 70, [2:2]
port3 = bits, U08, 70, [3:3]
port4 = bits, U08, 70, [4:4]
port5 = bits, U08, 70, [5:5]
port6 = bits, U08, 70, [6:6]
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
looptime = scalar, U16, 82, "us", 0.6667, 0.0
status5 = scalar, U16, 84, "", 1, 0 ; istatus5
tpsADC = scalar, U16, 86, "ADC", 1, 0 ; REAL for calibrator and file indexing.
fuelload2 = scalar, S16, 88, { bitStringValue( algorithmUnits , algorithm2 ) }, 0.100, 0.0
ignload = scalar, S16, 90, { bitStringValue( algorithmUnits , IgnAlgorithm ) }, 0.100, 0.0
ignload2 = scalar, S16, 92, { bitStringValue( algorithmUnits , IgnAlgorithm2 ) }, 0.100, 0.0
;spare[5] were in here - removed
synccnt = scalar, U08, 94, "", 1, 0
timing_err = scalar, S08, 95, "%", 0.1, 0 ; accuracy of timing prediction
deltaT = scalar, S32, 96, "uS", 1.000, 0.0 ; Normalized time between trigger pulses,
; "fills in" missing teeth (only used with EDIS)
wallfuel1 = scalar, U32, 100, "uS", 1.000, 0.0
gpioadc0 = scalar, U16, 104, "", 1.000, 0.0
gpioadc1 = scalar, U16, 106, "", 1.000, 0.0
gpioadc2 = scalar, U16, 108, "", 1.000, 0.0
gpioadc3 = scalar, U16, 110, "", 1.000, 0.0
gpioadc4 = scalar, U16, 112, "", 1.000, 0.0
gpioadc5 = scalar, U16, 114, "", 1.000, 0.0
gpioadc6 = scalar, U16, 116, "", 1.000, 0.0
gpioadc7 = scalar, U16, 118, "", 1.000, 0.0
gpiopwmin0 = scalar, U16, 120, "", 1.000, 0.0
gpiopwmin1 = scalar, U16, 122, "", 1.000, 0.0
gpiopwmin2 = scalar, U16, 124, "", 1.000, 0.0
gpiopwmin3 = scalar, U16, 126, "", 1.000, 0.0
;the following re-arrange for RC2 to ensure safe alignment for CAN-passthrough
adc6 = scalar, U16, 128, "", 1, 0.0
adc7 = scalar, U16, 130, "", 1, 0.0
wallfuel2 = scalar, U32, 132, "uS", 1.000, 0.0
EAEFuelCorr2 = scalar, U16, 136 , "%", 1.0, 0.0
boostduty = scalar, U08, 138 , "%", 1.0, 0.0
syncreason = scalar, U08, 139, "", 1.0, 0.0
user0 = scalar, U16, 140, "", 1.0, 0.0
inj_adv1 = scalar, S16, 142, "deg", 0.100, 0.0
inj_adv2 = scalar, S16, 144, "deg", 0.100, 0.0
pulseWidth3 = scalar, U16, 146, "ms", 0.000666, 0.0
pulseWidth4 = scalar, U16, 148, "ms", 0.000666, 0.0
vetrim1curr = scalar, S16, 150, "%", 0.00976562500, 10240.0
vetrim2curr = scalar, S16, 152, "%", 0.00976562500, 10240.0
vetrim3curr = scalar, S16, 154, "%", 0.00976562500, 10240.0
vetrim4curr = scalar, S16, 156, "%", 0.00976562500, 10240.0
maf = scalar, U16, 158, "g/sec", { 0.010 * (maf_range + 1) }, 0.0
eaeload1 = scalar, S16, 160, { bitStringValue( algorithmUnits , (eaeload ? eaeload : algorithm) ) }, 0.1, 0.0
afrload1 = scalar, S16, 162, { bitStringValue( algorithmUnits , (afrload ? afrload : algorithm) ) }, 0.1, 0.0
RPMdot = scalar, S16, 164, "rpm/sec", 10, 0.0
gpioport0 = scalar, U08, 166, "", 1.000, 0.0 ;was 142
gpioport1 = scalar, U08, 167, "", 1.000, 0.0 ;was 143
gpioport2 = scalar, U08, 168, "", 1.000, 0.0 ;was 144
; *spare *
cl_idle_targ_rpm = scalar, S16, 170, "rpm", 1, 0 ; cl_idle_targ_rpm
maf_volts = scalar, U16, 172, "V", 0.001, 0.0
#if CELSIUS
airtemp = scalar, S16, 174, "°C", 0.05555, -320.0
#else
airtemp = scalar, S16, 174, "°F", 0.100, 0.0
#endif
dwell_trl = scalar, U16, 176, "ms", 0.0666, 0.0
fuel_pct = scalar, U16, 178, "%", 0.1000, 0.0
boost_targ = scalar, S16, 180, "kPa", 0.1, 0
ext_advance = scalar, S16, 182, "deg", 0.100, 0.0
base_advance = scalar, S16, 184, "deg", 0.100, 0.0
idle_cor_advance = scalar, S16, 186, "deg", 0.100, 0.0
mat_retard = scalar, S16, 188, "deg", 0.100, 0.0
flex_advance = scalar, S16, 190, "deg", 0.100, 0.0
adv1 = scalar, S16, 192, "deg", 0.100, 0.0
adv2 = scalar, S16, 194, "deg", 0.100, 0.0
adv3 = scalar, S16, 196, "deg", 0.100, 0.0
revlim_retard = scalar, S16, 198, "deg", 0.100, 0.0
nitrous_retard = scalar, S16, 200, "deg", 0.100, 0.0
deadtime1 = scalar, U16, 202, "s", 0.001, 0.0
n2o_addfuel = scalar, U16, 204, "ms", 0.000666, 0.0
portbde = scalar, U08, 206, "", 1.0, 0.0
portam = scalar, U08, 207, "", 1.0, 0.0
portt = scalar, U08, 208, "", 1.0, 0.0
can_error_cnt = scalar, U08, 209, "", 1,0
can_error = scalar, U16, 210, "", 1,0
; can_error_rxovr = bits, U08, 210, [0:0]
; can_error_rxwrn = bits, U08, 210, [1:1]
; can_error_rxerr = bits, U08, 210, [2:2]
; can_error_txwrn = bits, U08, 210, [3:3]
; can_error_txerr = bits, U08, 210, [4:4]
; can_error_pass = bits, U08, 210, [5:5]]
; can_error_oor = bits, U08, 210, [6:6]
; can_error_pass2 = bits, U08, 210, [7:7]
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 }
altDiv1 = { alternate ? 2 : 1 }
altDiv2 = { alternate ? 2 : 1 }
cycleTime1 = { 60000.0 / rpm * (2.0-(twoStroke&1)) }, "ms"
nSquirts1 = { nCylinders/divider }
dutyCycle1 = { 100.0*nSquirts1/altDiv1*pulseWidth1/cycleTime1 }, "%"
cycleTime2 = { 60000.0 / rpm * (2.0-(twoStroke&1)) }, "ms"
nSquirts2 = { nCylinders/divider }
dutyCycle2 = { 100.0*nSquirts2/altDiv2*pulseWidth2/cycleTime2 }, "%"
reqfuel = { reqFuel }
Stoich = { stoich }
; Vacuum and Boost Gauges
boostbar = { (map - barometer) / 100.00}
boostpsig = { (map - barometer) * 0.1450}
vacuum = { (barometer-map)*0.2953007 } ; Calculate vacuum in in-Hg.
boostvac = { map < barometer ? -vacuum : boostpsig }
pwmidle_cl_initialvalue_matorclt_follower = { pwmidle_cl_opts_initval_clt ? coolant : mat }, "deg"
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
#if NARROW_BAND_EGO
egoVoltage = { egoV }, "V" ; For LED bars...
#elif LAMBDA
egoVoltage = { lambda1 }, "Lambda" ; For LED bars...
#else
egoVoltage = { afr1 }, "AFR" ; For LED bars...
#endif
; note these conversions are based on the AD595CQ datasheet for ANSI thermocouples.
; European thermocouples may require a different calculation
; The K type thermocouple output is not precisely linear, so these
; calculations are an approximation.
; 0degC is close enough to 0V
; With the 15K/10K circuit. 1250degC would apply 5.01V to the adc and result in '1025ADC counts' if that was possible
; So temp = adc/1025 * 1250 or adc * 1.222
#if EGTFULL
#if CELSIUS
egt6temp = { adc6 * 1.222 } ; Setup for converting 0-5.01V = 0 - 1250C
egt7temp = { adc7 * 1.222 } ; Setup for converting 0-5.01V = 0 - 1250C
#else
egt6temp = { (adc6 * 2.200)+32 } ; Setup for converting 0-5.01V = 32 - 2282F
egt7temp = { (adc7 * 2.200)+32 } ; Setup for converting 0-5.01V = 32 - 2282F
#endif
#else ; normal 0-1000 range
; With the 10K/10K circuit. 1000degC would apply 5.10V to the adc and result in '1044ADC counts' if that was possible
#if CELSIUS
egt6temp = { adc6 * 0.956 } ; Setup for converting 0-5.10V = 0 - 1000C
egt7temp = { adc7 * 0.956 } ; Setup for converting 0-5.10V = 0 - 1000C
#else
egt6temp = { (adc6 * 1.721) + 32 } ; Setup for converting 0-5.10V = 32 - 1832F
egt7temp = { (adc7 * 1.721) + 32 } ; Setup for converting 0-5.10V = 32 - 1832F
#endif
#endif
;synthetic air flow
calcflow = { fuelload * rpm * veCurr1/100 }
;old names
tpsDOT = { TPSdot }
mapDOT = { MAPdot }
;-------------------------------------------------------------------------------
;-- 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. Be careful --
;-- about changing these, as programs like MSLVV and --
;-- MSTweak key off specific column names. --
;-- 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 = maf, "MAF", float, "%.01f", { MAFOption }
entry = mafload, "MAFload", float, "%.1f", { MAFOption }
#if NARROW_BAND_EGO
entry = egoV, "O2", float, "%.3f"
entry = egoV2, "O2-2", float, "%.3f"
#elif LAMBDA
entry = lambda1, "Lambda", float, "%.3f"
entry = lambda2, "Lambda2", float, "%.3f"
#else
entry = afr1, "AFR", float, "%.2f"
entry = afr2, "AFR2", float, "%.2f"
#endif
entry = mat, "MAT", float, "%.1f"
entry = coolant, "CLT", float, "%.1f"
entry = engine, "Engine", int, "%d"
entry = batteryVoltage, "Batt V", float, "%.1f"
entry = egoCorrection1, "EGO cor1", float, "%.1f"
entry = egoCorrection2, "EGO cor2", float, "%.1f"
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, "Accel PW", float, "%.3f"
entry = veCurr1, "VE1", int, "%d"
entry = pulseWidth1, "PW", float, "%.3f"
entry = dutyCycle1, "DutyCycle1", float, "%.1f"
entry = veCurr2, "VE2", int, "%d"
entry = pulseWidth2, "PW2", float, "%.3f"
entry = dutyCycle2, "DutyCycle2", float, "%.1f"
entry = advance, "SPK: Spark Advance", float, "%.1f"
entry = knockRetard, "SPK: Knock retard", float, "%.1f"
entry = coldAdvDeg, "SPK: Cold advance", 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 = revlim_retard, "SPK: Revlim Retard", float, "%.1f"
entry = nitrous_retard,"SPK: Nitrous Retard", float, "%.1f"
entry = dwell, "Dwell", float, "%.2f"
entry = barometer, "Barometer", float, "%.1f"
entry = TPSdot, "TPSdot", float, "%.1f"
entry = MAPdot, "MAPdot", float, "%.1f"
entry = RPMdot, "RPMdot", int, "%d"
entry = iacstep, "Stepper Idle Position", int, "%d", {IdleCtl == 3}
entry = idleDC, "PWM Idle Duty", float, "%.1f", {IdleCtl == 2}
entry = boostduty, "Boost Duty", int, "%d", { boost_ctl_settings_on }
entry = boost_targ, "Boost Target", int, "%d", { boost_ctl_settings_on && boost_ctl_settings_cl }
entry = fuel_pct, "Ethanol Percentage", float, "%.1f", { flexFuel > 0 }
entry = fuelCorrection, "E85 Fuel Correction", int, "%d", { flexFuel > 0 }
entry = wallfuel1, "WallFuel1", int, "%d", {EAEOption}
entry = wallfuel2, "WallFuel2", 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 = egt6temp, "EGT 6 temp", int, "%d"
entry = egt7temp, "EGT 7 temp", int, "%d"
entry = adc6, "ADC6", int, "%d"
entry = adc7, "ADC7", int, "%d"
entry = gpioadc0, "gpioadc0", int, "%d"
entry = gpioadc1, "gpioadc1", int, "%d"
entry = gpioadc2, "gpioadc2", int, "%d"
entry = gpioadc3, "gpioadc3", int, "%d"
entry = gpioadc4, "gpioadc4", int, "%d"
entry = gpioadc5, "gpioadc5", int, "%d"
entry = gpioadc6, "gpioadc6", int, "%d"
entry = gpioadc7, "gpioadc7", int, "%d"
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 = cl_idle_targ_rpm, "Closed-Loop Idle Target RPM", int, "%d", {((IdleCtl > 1) && (IdleCtl_alg == 1)) || (idleadvance_on == 4)}
entry = rpm_target_error_follower, "Closed-Loop Idle RPM Error", int, "%d", {((IdleCtl > 1) && (IdleCtl_alg == 1)) || (idleadvance_on == 4)}
entry = timing_err, "Timing Err%", float, "%.1f"
entry = afrtgt1, "AFR Target 1", float, "%.1f"
entry = synccnt, "Lost Sync Count", int, "%d"
entry = syncreason, "Lost Sync Reason", int, "%d"
entry = inj_adv1, "InjTiming1", float, "%.1f"
entry = inj_adv2, "InjTiming2", float, "%.1f"
entry = pulseWidth3, "PW3", float, "%.3f"
entry = pulseWidth4, "PW4", float, "%.3f"
entry = vetrim1curr, "VE Trim 1", float, "%.1f"
entry = vetrim2curr, "VE Trim 2", float, "%.1f"
entry = vetrim3curr, "VE Trim 3", float, "%.1f"
entry = vetrim4curr, "VE Trim 4", float, "%.1f"
entry = knock, "Knock In", float, "%.1f"
entry = portStatus, "On/Off Outputs Status Bits", int, "%d"
entry = portbde, "PORTs BDE", int, "%d"
entry = portam, "PORTs AM", int, "%d"
entry = portt, "PORT T", int, "%d"
entry = can_error, "CAN error bits", int, "%d"
entry = can_error_cnt, "CAN error count", int, "%d"
;-------------------------------------------------------------------------------