Subpage of MembersPage/GasEngine/AutoDerivativeSmallGasEngine
Special fw built with modbus slave on 2nd RS232
- RS232 to RS485 adapter used, for power plant integration. eg.
- slave address = 02 in examples below.
- Modbus address configurable (2 in the examples: ALS_deactivation time=0.2 sec means modbus address=2)
- Modbus RTU 9600-38400(115200?),8n1 19200,8n1 recommended, configurable up to 115200,8n1 (8e1 also possible, but rarely used)
- important: byte stuffed format must be disabled in SD card logging
- AIM (Outputs/Display Settings) : AIM Disabled
ibutton_code2
- H=8
- L=1 (javasolt=8n1 ; vagy esetleg ha feltétlen muszáj, akkor 8E1-hez 225 ami pont E1)
Example communication, ECU = modbus slave
- modbus write IAC target RPM
- to help 1500 RPM sync to grid
- modbus write to iac forced PWM target => PWM => woodward valve
- control mixture/power after grid sync
- modbus read RPM, CLT, MAT, MAP, lambda and other variables
2nd RS232 hardware for CRC protected special commands, voltage measured from pin5 (GND) base
- PC side (male DSUB9) pin3=-6.4V
- ECU side (female DSUB9) pin2=-8V
1st RS232 (standard):
- 1st RS232TX (EC18/14) (female DSUB9/3)
- 1st RS232RX (EC18/15) (female DSUB9/2)
- GND
2nd RS232: (as requested for assembled VEMS ECU )
- 2nd RS232TX (EC18/6) (female DSUB9/2)
- 2nd RS232RX (EC18/12) (female DSUB9/3)
- GND EC18/17 (DSUB9/5)
Modbus Write:
- forced ignadv
- note: base timing ("TDC after trigger" value not changing during operation, set from VemsTune, primary trigger dialog).
- lambda SP (SP ?)
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
Modbus 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
- command with CRC: [02 03 00 07 00 01 35 F8] make sure NOT to send +CR/LF (eg. uncheck in brayterm)
- => ECU responds with the RPM value (byteoffset=14) in big endian format 0..25500 RPM
- example to query a bit more bytes (modbus address 02, 03 respectively)
- 02 03 00 02 00 06 64 3B
- 03 03 00 02 00 06 65 EA
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)
Firmware version and old config\n
# Version: 1.2.24 # SerialNumber: v3.3_u008792 # SerialNumber Raw: 76 33 2E 33 5F 75 30 30 38 37 39 32 # CompilationTime: 2014-03-13 09:23 # Signature: VEMS v1.2.24 16x14 kpa=2,2 # CompileOptions: 000000DE (woodgas option?)
- The vemscfg seems to be from 2014-03-13 fw (perhaps a bit old, and the config was tuned later ?)
- however, 2014-04-08 fw suspected to be the final (firmware info shows 2014-04-07 23:xx)
- the PWM output was changed from high-freq softpwm (sigma-delta-like) to constant freq
- perhaps some 2nd serial modbus commands were added or refined ?
- note: the released 2014-04-20 is NOT built with modbus slave functionality on 2nd serial
- Note: with 1.2.24 fw: 12..15V ignition system assumed (not 28V coils!)
- The bogus shutdown (trigger sensor connector disconnected or trigger lost during running) was improved after >1.2.24 (no significance for 15V igncoils, but can be useful for (btw. unsupported) 28V igncoils.
Files: