Subpage of MembersPage/GasEngine/AutoDerivativeSmallGasEngine
Special fw built with modbus slave on 2nd RS232
- slave address = 02 in examples below.
- RS232 to RS485 adapter used, for power plant integration. eg.
- modbus write to iac (or boost ?) target => PWM => woodward valve
- to help 1500 RPM sync to grid, and control mixture/power after
- modbus read RPM, CLT, MAT, MAP and other variables
2nd RS232 for CRC protected special commands, voltage measured from pin5 (GND) base
- PC side (male DSUB9) pin3=-6.4V
- ECU side (female DSUB9) pin2=-8V
- important: byte stuffing must be disabled in SD card logging
1st RS232TX (EC18/14) (female DSUB9/3)
1st RS232RX (EC18/15) (female DSUB9/2)
GND
2nd RS232TX (EC18/6) (female DSUB9/2)
2nd RS232RX (EC18/12) (female DSUB9/3)
GND EC18/17 (DSUB9/5)
- Modbus RTU 9600-38400(115200?),8n1 recommended, configurable up to 115200,8n1 (8e1 also possible, but rarely used)
- Modbus address configurable (2 in the examples: ALS_deactivation time=0.2 sec means modbus address=2)
Examples:
(02) 06 00 XX VV 00 (CRC CRC)
XX table:
- 0x31 iac forced pw = VV (IAC PWM output)
- example: (02) 06 00 31 40 00 (E9 F6) (0x31 register 0x40 00 = 25%) so VT shows IAC duty = appr 25% if all good (new, special fw needed)
- 0x32 debug.enable_flags = VV
- "mde02" equivalent covers wbo2 sensor heatup before engine start: 02 06 00 32 02 00 29 56
- 02 06 00 32 00 00 28 36 (mde00 equivalent, normal state, switches off the pre-running wbo2 control)
- 0x33 debug.disable_flags = VV
- 0x34 debug.forced_boost_tgt = VV; boost target (2kPa)
- 0x35 lambda target = VV
- 0x36 engine.prohibit_status = VV (00: reenables everything ... 0x42 for IGN_PROHIBIT, 0x41 for INJ_PROHIBIT, 0x50 for FUELPUMP_PROHIBIT)
- other functions that should be available (if not covered by above):
- engine.prohibit_status ... _BV(IGN_PROHIBIT) preferable also: _BV(INJ_PROHIBIT) _BV(STEPPER_PROHIBIT)
- Disable Fuel pump ... see prohibit above
- 0x37 debug.forced ign advance ( * 0.25 deg advance), 0 to disable forced advance
- example set a forced advance of 10 degrees: (02) 06 00 37 28 00 26 37
- 0x38 debug.forced dwell (* 0.064msec unit), 0 to disable forced dwell
- example set a forced dwell of 3.008 msec: (02) 06 00 38 2F 00 14 04
Read (subset or all) runtime vars command
Standard modbus command 03 (Read holding registers) example:
(02) 03 00 XX 00 LL (CRC) XX = index, LL = length in words (max 38)
- response is 2*LL bytes (as in modbus standard), from 2*XX byteoffset. The full set of runtime variables can be read in 1 or multiple queries.
- Nonstandard command example: (02) 44 (00 e3)
- where 02 is modbus addr, and last 2 bytes is CRC. ('D'=0x44 is actual command). This MIGHT CHANGE in future
Register/Address for reading
Eg XX=07 and LL=01 gives the RPM value (byteoffset=14) in big endian format 0..25500 RPM: command with CRC: [02 03 00 07 00 01 35 F8]
Byte offsets (for some important values):
- 4 MAP_hi
- 5 MAP_lo
- 6 MAT in Celsius +100C (MAT manifold temp)
- 7 CLT in Celsius +100C (CLT=coolant preferrably measured at warmest point)
- 8 TPS
- 9 vbatt
- 10 egoADC0
- lambda0 = { (egoADC > 211) ? ((8 * egoADC - 1171) /32 /14.7) : (egoADC + 306) / 470 }
- so linear, but different slope from 1.1 lambda. Formula is (egoADC + 306) / 470 for 0..210 and (8 * egoADC - 1171) /32 for 211..254; while 255 is error state
- 11 ego0
- 12 egoADC2
- lambda2= ... see lambda0 above (but 2nd WBO2 not used in this engine anyway)
- 13 corr_warmup
- 14 rpm_hi (RPM=fordulatszám)
- 15 rpm_low
See <VT installdir> /config/vemsTune-v3-1.2.23.ini
- Eg RPM U16 (16 bit) varible at byteoffset 16 (wordaddress=7):
- rpmVHR = scalar, U16, 14, "rpm", 1.000, 0.000
Other:
- 40 latgtADC where 56 is stoich 1.0 lambdatarget according to formula: lambdatarget = { 256/(latgtADC + 200) }
- 23 iac_duty (0-255 means 0-100%) (fojtó parancsolt)
- 22 INTspark sparkadv, spark = { ((INTspark / 2) - 64)}
- worst knock value
- relative knock values 0..7
- errors, trigger error (hibák)
- individual power (gyújtás kihagyás)