feat: S12 — vcucmd 3-state command from VCU (replaces binary vcustop)
Promote 0x212 byte 3 from S11's binary vcustop to the full Dilong-style
OBC_ControlCMD vocabulary:
0 = Charging — walk to / hold at EVSEACTIVATE, produce current
1 = Stopped — sit idle in OFF/WAITSTART/ENABLE, no current
2 = Complete — drop to STOP (cycle terminated by VCU)
VCU is now authoritative for the charge-cycle lifecycle. The charger
keeps hardware-level wisdom (EVSE pilot via CheckStartCondition,
plug-out safety via CheckUnplugged, module-fault detection via
CheckChargerFaults) but obeys vcucmd for "should I be charging?".
FSM changes:
- ENABLE→ACTIVATE now gated on vcucmd==Charging (was unconditional).
ENABLE on vcucmd==Complete drops to STOP; vcucmd==Stopped holds
HV-armed waiting for next Charging command.
- EVSEACTIVATE self-decided exits (CheckVoltage, CheckTimeout) are
gone. Those were band-aids for the absence of an authoritative VCU
stop signal. vcucmd==Stopped now parks back in ENABLE (HV held);
vcucmd==Complete drops to STOP. CheckUnplugged + CheckChargerFaults
still own hardware-safety exits.
- STOP→OFF now also triggers on vcucmd != Complete (was unplug-only).
This is the fix for the "raise ChargeLimit mid-COMPLETE doesn't
restart charging" wedge — the VCU's vcucmd flip from Complete to
Stopped on a limit-raise lets the natural OFF→WAITSTART→ENABLE→
ACTIVATE→EVSEACTIVATE flow resume charging without an unplug cycle.
Param rename vcustop→vcucmd. External tooling that reads/writes the
S11 vcustop param via the openinverter web UI will see the new vcucmd
param with 3-state semantics — single-user bench, acceptable.
VERSTR bumped to S12.
Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
This commit is contained in:
+31
-2
@@ -109,7 +109,7 @@
|
||||
VALUE_ENTRY(c3udc, "V", 2035 ) \
|
||||
VALUE_ENTRY(c3idc, "A", 2036 ) \
|
||||
VALUE_ENTRY(tmpobcmax, "°C", 2051 ) \
|
||||
VALUE_ENTRY(vcustop, OFFON, 2052 ) \
|
||||
VALUE_ENTRY(vcucmd, VCUCMDS, 2052 ) \
|
||||
VALUE_ENTRY(test_time, "s", 3000 ) \
|
||||
VALUE_ENTRY(test_timer_flag, "X", 3001 ) \
|
||||
VALUE_ENTRY(test_timer_icvalue, "X", 3002 ) \
|
||||
@@ -119,6 +119,12 @@
|
||||
#define OPMODES "0=Off, 1=Run"
|
||||
#define CHARGERS "1=Charger1, 2=Charger2, 4=Charger3"
|
||||
#define OFFON "0=Off, 1=On"
|
||||
// SKUDAK-S12: VCU→charger control command on 0x212 byte 3. Mirrors the Dilong
|
||||
// path's OBC_ControlCMD vocabulary exactly so VCU code paths can be reused.
|
||||
// 0 = Charging — VCU wants current to flow; walk to / hold at EVSEACTIVATE
|
||||
// 1 = Stopped — VCU is not driving a cycle; sit in OFF/WAITSTART/ENABLE
|
||||
// 2 = Complete — VCU has terminated the cycle; drop to STOP
|
||||
#define VCUCMDS "0=Charging, 1=Stopped, 2=Complete"
|
||||
#define CHFLAGS "0=None, 1=Enabled, 2=Fault, 4=CheckAlive"
|
||||
#define STATES "0=Off, 1=WaitStart, 2=Enable, 3=Activate, 4=Run, 5=Stop"
|
||||
#define INPUTS "0=Type2, 1=Type2-3P, 2=Type1, 3=Manual, 4=Manual-3P, 5=Type2-Auto"
|
||||
@@ -151,7 +157,18 @@
|
||||
// it sets vcustop=1; ChargerStateMachine's EVSEACTIVATE case transitions to
|
||||
// STOP immediately, the J1772 CP signal drops, EVSE stops delivering AC,
|
||||
// VCU_IsCharging() returns 0, water pumps power down naturally.
|
||||
#define VERSTR STRINGIFY(4=VER-S11)
|
||||
// -S12 promotes byte 3 from a binary vcustop flag to the full 3-state
|
||||
// VCUCMDS vocabulary (0=Charging, 1=Stopped, 2=Complete), matching the
|
||||
// Dilong OBC_ControlCMD exactly. The internal FSM now obeys vcucmd for
|
||||
// lifecycle transitions: ENABLE only advances to ACTIVATE on Charging, STOP
|
||||
// returns to OFF when vcucmd flips back to Charging/Stopped (fixes the
|
||||
// "raise ChargeLimit mid-COMPLETE doesn't resume" wedge — teslacharger was
|
||||
// stuck in STOP because STOP only exited on CheckUnplugged). The self-
|
||||
// decided EVSEACTIVATE exits (CheckVoltage, CheckTimeout) are stripped; the
|
||||
// VCU is now authoritative for when charging starts and stops. The charger
|
||||
// retains hardware-level wisdom: CheckUnplugged() still forces OFF from any
|
||||
// state, and CheckStartCondition() still gates OFF→WAITSTART on EVSE pilot.
|
||||
#define VERSTR STRINGIFY(4=VER-S12)
|
||||
|
||||
/***** enums ******/
|
||||
|
||||
@@ -175,6 +192,18 @@ enum states
|
||||
STOP
|
||||
};
|
||||
|
||||
// SKUDAK-S12: VCU→charger command vocabulary on 0x212 byte 3. Must match
|
||||
// the values exposed via VCUCMDS enum string AND the VCU's
|
||||
// VCU_OIOBCCommand_t enum (stm32-hal-vcu Core/Inc/applications/charger/
|
||||
// charger_types.h). Updating one without the others silently breaks the
|
||||
// charge state machine, so keep them in lock-step.
|
||||
enum vcucmds
|
||||
{
|
||||
VCUCMD_CHARGING = 0,
|
||||
VCUCMD_STOPPED = 1,
|
||||
VCUCMD_COMPLETE = 2
|
||||
};
|
||||
|
||||
enum _canspeeds
|
||||
{
|
||||
CAN_PERIOD_100MS = 0,
|
||||
|
||||
Reference in New Issue
Block a user