History of MembersPage/GasEngine/AutoDerivativeSmallGasEngine/ModbusSlave
Older Newer
2018-02-12 07:33:38 . . . . catv-86-101-250-44.catv.broadband.hu [note: modbus command without CR/LF]
2018-02-09 07:59:56 . . . . catv-86-101-250-44.catv.broadband.hu [split page ; old config]
2018-02-09 07:50:12 . . . . catv-86-101-250-44.catv.broadband.hu [split page; + CRC example]
2018-02-09 07:32:57 . . . . catv-86-101-250-44.catv.broadband.hu [more modbus query examples]
2018-02-09 07:13:49 . . . . catv-86-101-250-44.catv.broadband.hu [split page; added CRC example]


Changes by last author:

Added:
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 stuffing must be disabled in SD card logging

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)}

- EGT1, EGT2

- 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

<CODE>

# 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?)

</CODE>

* 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:

* [old vemscfg]

* [newer vemscfg, v3/8792]