ChargeLink

MCS (ISO 15118-20 over 10BASE-T1S) Runbook

The Megawatt Charging System (MCS) carries ISO 15118-20 high-level communication over a 10BASE-T1S data link instead of powerline communication. ChargeLink runs an MCS session as an ISO 15118-20 DC session that selects the MCS energy service (ServiceID 8), with external identification (EIM), in the Scheduled control mode, over TLS only, in the charger (SECC) and the vehicle (EVCC) role. The connector signals (CE and ID) come from ChargeLink's simulated coupler model and travel over the coupler link, a ChargeLink interface on TCP port 50119 of the same 10BASE-T1S cable. Because the coupler link is ChargeLink's own interface, both roles in this release run against the other ChargeLink role, not against a third-party device (see Limits).

The MCS session uses the DC messages of ISO 15118-20. What MCS adds in ChargeLink:

  • The data link first. The charger answers SDP discovery only once the data link is ready (the EV is present on the coupler link and the connector reads as mated).
  • Connector checks. The charger answers the cable check only with the CE state C measured, and welding detection and the session stop only with CE state B. The EV closes its switch before the cable check and opens it after the stop.
  • Side-B voltage check. On a plant-coupled charger, the schedule exchange is finished only when the plant's side-B voltage allows it; until then the charger answers Ongoing and the EV repeats its request.
  • MCS limits. The charger's start check accepts the MCS voltage and current range (see Limits).

The kit has a charger\ and a vehicle\ folder.

Before you start

ItemRequirement
Windows PCsOne ChargeLink PC per role: the charger runs on the NI VeriStand bench, the EV on a second PC. Each PC needs its own ChargeLink licence; a licensed command is refused on an unlicensed host.
A USB 10BASE-T1S adapter on each PCWindows must show it as an Ethernet interface with an IPv6 link-local (fe80::) address in the Preferred state. Install the adapter's driver as its supplier describes.
A 10BASE-T1S cablePoint to point between the two adapters. Termination and the physical layer are the bench's responsibility (see Limits).
PLCA settingsPLCA on, node ID 0 on the charger side, node ID 1 on the EV side, node count 8. Set them where the adapter's driver exposes them (on Windows, usually the adapter's advanced properties) and check that they survive a re-plug.
One ChargeLink version for both rolesThe coupler link and the TLS session require both ends from the same release.
TLS materialMCS runs over TLS only. Use the V2G root CA, the SECC chain and key for the charger and the vehicle chain and key for the EV, from the same PKI (see TLS and PKI). The engineering PKI delivered with the bench kit is for test benches only.
EV case filesThe EV case and the full-wire session manifest, as for the ISO 15118-20 vehicle role. The EV case must fit the charger's operating point (see ChargeLink as vehicle).

Complete the preflight for the 10BASE-T1S interface on each PC. Then note, on each PC:

Get-NetAdapter | Format-Table Name, ifIndex, Status, InterfaceDescription
Get-NetIPAddress -AddressFamily IPv6 -InterfaceIndex <T1S_IFINDEX> | Where-Object { $_.IPAddress -like 'fe80*' }

You need the charger's 10BASE-T1S link-local address and the 10BASE-T1S interface index of each PC. Windows can renumber interfaces after a restart or a re-plug, so read the index again before each bench day.

Set up the network

  1. Connect the two adapters with the 10BASE-T1S cable and apply the PLCA settings above on both PCs.
  2. Check the link: both interfaces show Up, and each PC reaches the other's link-local address on the 10BASE-T1S interface (for example ping fe80::<CHARGER_ADDRESS>%<LOCAL_T1S_IFINDEX> from the EV side; the zone index is always the local PC's interface index).
  3. On the charger side, an administrator adds three inbound Allow rules for the charger's chargelink.exe, limited to the 10BASE-T1S interface and to link-local remote addresses (fe80::/10): UDP 15118 (SDP), TCP 50118 (the TLS session) and TCP 50119 (the coupler link). The EV side opens outbound connections only.
$Exe = '<KIT>\charger\bin\chargelink.exe'
$T1s = '<CHARGER_T1S_ADAPTER_NAME>'
New-NetFirewallRule -DisplayName 'ChargeLink MCS SDP'          -Direction Inbound -Action Allow -Program $Exe -Protocol UDP -LocalPort 15118 -InterfaceAlias $T1s -RemoteAddress 'fe80::/10'
New-NetFirewallRule -DisplayName 'ChargeLink MCS session'      -Direction Inbound -Action Allow -Program $Exe -Protocol TCP -LocalPort 50118 -InterfaceAlias $T1s -RemoteAddress 'fe80::/10'
New-NetFirewallRule -DisplayName 'ChargeLink MCS coupler link' -Direction Inbound -Action Allow -Program $Exe -Protocol TCP -LocalPort 50119 -InterfaceAlias $T1s -RemoteAddress 'fe80::/10'

Add the rules before the charger runs for the first time. If Windows shows a Windows Security Alert for chargelink.exe, see Troubleshooting.

Protocol and profile per role

RoleWhere it runsProtocol and profileMCS selection
Charger (SECC)Plant-coupled, on the NI VeriStand bench--protocol mcs, profile mcs_reference_benchThe runtime profile's "energy_service": "mcs"; TLS required
EV (EVCC)A ChargeLink PC--protocol iso15118-20, profile iso15118_20_dc_evcc_reference--energy-service mcs with --mcs-coupler-link; TLS required

The protocol and the profile must agree: an mcs charger runs only with a runtime profile whose energy service is mcs, and such a runtime profile runs only under --protocol mcs. Without the MCS settings, the EV runs a plain ISO 15118-20 DC session, unchanged.

ChargeLink as charger

The MCS charger is plant-coupled: it computes every response from the session and the plant model, reads the plug-in state from the plant and shows the connector signals on the operator screen. It answers SDP only after an EV has connected to its coupler link, so in this release its peer is the ChargeLink EV (see Limits). On the NI VeriStand bench the bench software starts it for you. Install and activate the bench first (Set Up the VeriStand Bench), with the 10BASE-T1S adapter as the bench interface.

  1. Open PowerShell as administrator in the kit's charger folder (charger\) and start the operator with the MCS stack:
    .\Start-ChargeLinkVeriStand.ps1 -Stack Mcs
    VeriStand opens with the ChargeLink screen. The run folder records which plant model, EV case and operating point the charger was started with (demo-plant.json).
  2. On the screen press, in this order: Apply safe startup, Start session, Start external EVCC. Wait until the screen shows that the external EVCC session runs.
  3. Start the EV (see ChargeLink as vehicle).
  4. On the screen's MCS page press Plug inserted. The page shows the CE state, the ID state and D-LINK_READY from ChargeLink's coupler model. The charger answers discovery only after the EV has connected to the coupler link and D-LINK_READY is shown.
  5. Finish and stop the session as on the NI VeriStand Bench page.

For reference, the bench software starts the charger with settings equivalent to the following; operators do not type this command.

$Data      = 'C:\ChargeLinkData'
$Run       = "mcs-$(Get-Date -Format yyyyMMdd-HHmmss)"
$IfIndex   = <CHARGER_T1S_IFINDEX>
$Advertise = 'fe80::<CHARGER_T1S_ADDRESS>%' + $IfIndex
$Pki       = "$Data\pki"
$env:CHARGELINK_ISO20_RUNTIME_PROFILE = '<KIT>\charger\config\mcs_runtime_profile.json'

chargelink --runtime-root "$Data\runtime" --artifact-root "$Data\artifacts" --json evse start --external-evcc-session --run-id $Run `
  --protocol mcs --profile-id mcs_reference_bench --exi-mode chargelink-exi `
  --host '::' --tcp-port 50118 --udp-port 15118 `
  --advertise-ipv6 $Advertise --interface-index $IfIndex `
  --tls --tls-cert "$Pki\secc-chain.pem" --tls-key "$Pki\secc-key.pem" --tls-cafile "$Pki\v2g-root-ca.pem" --require-ca `
  --plant-grpc-endpoint <PLANT_ENDPOINT> --requested-power-kw 1250 --target-voltage-v 900
  • The coupler link listens on TCP 50119 on the charger's listen address. --advertise-ipv6 and --interface-index name the charger's 10BASE-T1S interface; without them a non-loopback charger refuses to start.
  • The kit's MCS runtime profile offers the Scheduled control mode with one 300 s charging schedule. On a bench with the DC plant model instead of the MCS plant model, the kit falls back to the DC operating point and a 60 s schedule, and labels the run as a DC-power fallback.
  • The charger's stated maxima default to the operating point (--requested-power-kw, --target-voltage-v). --evse-rated-current-a and --evse-rated-voltage-v state a higher rating for a plant-coupled charger; the start check refuses a rating below the operating point, a voltage above 1250 V and a current above 3000 A.
  • A charger started without a plant endpoint does not run the MCS runtime: it offers the DC service only, and its evidence says so (see Results and evidence).

A good session: the coupler record shows the EV on the coupler link, D-LINK_READY and the first SDP request answered, and the charger's evidence ends with evidence_status: passed and offered_service_id 8.

ChargeLink as vehicle

The EV is the ISO 15118-20 DC EVCC with the MCS energy service. It connects to the charger's coupler link, waits for D-LINK_READY, then runs SDP on the 10BASE-T1S interface, TLS and the MCS session. The coupler link is required, so in this release its peer is the ChargeLink MCS charger (see Limits). Choose the EV case that fits the charger's operating point, as named in the charger's demo-plant.json:

Plant model of the chargerCharger operating pointEV case
MCS plant model1250 kW at 900 V, 300 s schedulemcs_demo_ev.json (the MCS demo EV case, from the kit's charger\evcc-cases)
DC plant model (fallback)80 kW at 800 V, 60 s schedulenominal.json

In a normal (not elevated) PowerShell window on the ChargeLink PC, in the kit's vehicle folder (vehicle\):

$Data       = 'C:\ChargeLinkData'
$IfIndex    = <LOCAL_T1S_IFINDEX>
$ChargerT1s = 'fe80::<CHARGER_T1S_ADDRESS>'
$Coupler    = '[' + $ChargerT1s + '%' + $IfIndex + ']:50119'
$Tls        = '<KIT>\vehicle\tls'
$env:CHARGELINK_ISO20_LIVE_SEMANTIC_CASE        = '<KIT>\vehicle\cases\<EV_CASE>.json'
$env:CHARGELINK_ISO20_FULL_WIRE_SESSION_MANIFEST = '<KIT>\vehicle\cases\full-wire-session-manifest.json'

chargelink --runtime-root "$Data\runtime" --artifact-root "$Data\artifacts" --json evcc activate-profile `
  --protocol iso15118-20 --profile-id iso15118_20_dc_evcc_reference `
  --use-sdp --interface-index $IfIndex --tcp-port 50118 --connect-timeout-ms 5000 --exi-mode chargelink-exi `
  --tls --tls-cert "$Tls\vehicle-cert-chain.pem" --tls-key "$Tls\vehicle-key.pem" --tls-cafile "$Tls\v2g-root-ca.pem" --require-ca `
  --max-steps 14 --requested-power-kw 80 `
  --energy-service mcs --mcs-coupler-link $Coupler
OptionMeaning
--energy-service mcsSelect the MCS energy service (ServiceID 8). The default is dc. mcs requires --tls and --mcs-coupler-link.
--mcs-coupler-link <ADDR>The charger's coupler link: [fe80::…%<ifindex>]:<port>, or an address alone for port 50119. The zone index is the local PC's own 10BASE-T1S interface index. The option is refused without --energy-service mcs.

Start order: either side may start first. The EV retries the coupler link and waits up to 30 s for it and for D-LINK_READY; after that it ends with mcs_d_link_not_ready, and you start it again. Press Plug inserted on the charger's screen within that time.

The EV's exit code says whether the command ran, not whether the MCS session completed. Read the verdict from the evidence. A good session ends with a last coupler-record line of kind outcome and value mcs_session_completed.

Results and evidence

Each role writes its run directory as for ISO 15118-20 (frame trace, TLS and SDP diagnostics, manifest; see ISO 15118-20 and Trace, Evidence and Reports). MCS adds the files below.

FileRoleWhat to read
protocol\mcs-live-stack-evidence.jsonChargerevidence_status: passed only for a completed exchange of the MCS service; iso20_dc_exchange_only_not_mcs when the exchange completed with the DC service only; attention_required when the exchange did not complete. Also offered_service_id (8 for MCS), mcs_service_offered, mcs_exchange_shown, tls_established, the 10BASE-T1S interface binding and the message names in each direction.
traces\iso20-mcs-ce-secc.jsonlChargerThe coupler record, one JSON object per line with t_mono_ms, unix_ms and kind: ss3_command (the charger's switch, with the coupler-link address), ce_reading (each change of the CE state, the ID state or the link), d_link, plant_mated, sdp_withheld and sdp_answered (one line per SDP request), ce_gate (a response held for its CE state), schedule_exchange_gate (finished or ongoing, with the side-B voltage), coupler_link_lost (cause and silence before it), plant_read and plant_write (failures and recovery).
traces\iso20-mcs-ce.jsonlEVThe same line shape: ce_reading, d_link, sv3_command (the EV's switch, with the request it precedes), service_check and outcome. The last line has kind outcome.

A completed MCS session shows, on the charger, evidence_status: passed with offered_service_id 8, and, on the EV, a last line with kind outcome and value mcs_session_completed. The order of events in the two coupler records is: the EV on the coupler link, D-LINK_READY, the first SDP request answered, the EV's switch closed and CE state C before the cable check, the switch opened and CE state B before welding detection.

EV outcomeMeaning
mcs_session_completedThe MCS session ran to SessionStop.
mcs_d_link_not_readyThe coupler link or D-LINK_READY was not reached within 30 s before SDP.
mcs_not_offeredThe charger's ServiceDiscoveryRes did not offer the MCS service; the EV ended the session.
mcs_no_parameter_setThe charger offered no usable MCS parameter set.
ce_c_not_reachedCE state C was not measured after the EV closed its switch, so the cable check was not requested.
ce_b_not_reachedCE state B was not measured after the EV opened its switch, so welding detection was not requested.
mcs_coupler_lostThe coupler link went silent during the session; a silent link counts as unmated.
mcs_go_to_pause_terminatedThe charger asked for a pause; the EV ended the session (pause is not provided).

Limits

  • The MCS charger connects to the ChargeLink EV. The charger answers SDP only after an EV is present on its coupler link, and the coupler link is a ChargeLink interface. A third-party MCS vehicle or EVCC is not supported as a device under test in this release.
  • The MCS EV connects to the ChargeLink charger. The EV requires --mcs-coupler-link and waits for D-LINK_READY on it before SDP. A third-party MCS charger or SECC is not supported as a device under test in this release.
  • The charger runs on the NI VeriStand bench. The MCS runtime needs the plant-coupled charger; a charger without a plant endpoint offers the DC service only.
  • Scheduled control mode only. MCS sessions over 10BASE-T1S use the Scheduled control mode; the VeriStand bench's MCS charger offers Scheduled only. ChargeLink does not offer MCS Dynamic control over 10BASE-T1S.
  • Simulated connector signals. CE and ID come from ChargeLink's coupler model and travel over the 10BASE-T1S cable on the coupler link, not over a real MCS connector, so losing the data link also drops CE and ID. The coupler link is a ChargeLink interface, not part of the standard; it runs over plain TCP, not TLS, for a closed bench network. Both ends must come from the same release. Each loss of the coupler link is recorded on both sides.
  • Link detection. The 10BASE-T1S link counts as usable while the EV is present on the coupler link; Windows gives ChargeLink no "Ethernet operational" signal from the adapter.
  • 10BASE-T1S physical layer. The link layer between two PCs is used with PLCA node 0 on the charger side and node 1 on the EV side, node count 8. The end termination and the IEEE 802.3 clause 147/148 physical layer are not covered.
  • ISO 15118-10 timers and retries are not implemented: connection resume, the retries, the init retries and the emergency stop on link loss. A link loss inside a session ends it through the coupler-link loss; it is not judged against the ISO 15118-10 timing. The EV waits for D-LINK_READY within a plain 30 s bound.
  • Pause. The ChargeLink charger never asks the EV to pause. The EV ends the session when a charger asks for a pause.
  • The MCS demo EV case charges for about 240 s near 1388 A and needs a Scheduled charger at 1250 kW / 900 V with a schedule of at least 300 s. At 1000 kW / 900 V the charger offers 1111 A, and the EV stops at ChargeParameterDiscovery.
  • A charger without the ISO 15118-20 runtime (the reference-responder listener) offers the DC service only. Its MCS evidence then says iso20_dc_exchange_only_not_mcs, so a DC exchange never reads as an MCS result.
  • No power hardware. The plant is a simulation: no CE/ID circuit, no coupler, no real power, no thermal or cable-temperature model.
  • No conformance claim. A ChargeLink MCS result is engineering evidence, not an MCS conformance or certification statement.
  • Not provided: Plug & Charge, bidirectional power transfer (including MCS BPT), standby, and EV auxiliary power.

See also ISO 15118-20 for the TLS and session rules MCS shares with DC, and Capability Boundaries.

Troubleshooting

SymptomLikely causeAction
The EV ends with mcs_d_link_not_readyPlug inserted was not pressed in time, the coupler link (TCP 50119) is blocked, or the address in --mcs-coupler-link is wrongCheck the charger-side firewall rule for TCP 50119; use the charger's link-local address with the EV PC's own interface index as the zone; press Plug inserted and start the EV again.
The EV gets no SDP answerThe charger withholds SDP until D-LINK_READY (see sdp_withheld lines), UDP 15118 is blocked, or --interface-index is not the EV PC's 10BASE-T1S interfaceRead the charger's coupler record; check the firewall and the interface index on both PCs.
A Windows Security Alert for chargelink.exe appearsThe charger ran before the firewall rules were addedDo not press Cancel: it adds block rules for the program. Close the bench session, have an administrator remove any block rules for chargelink.exe and add the three firewall rules (see Before you start).
The charger refuses to start: the mcs listener runs over TLS only--tls missingStart the charger with TLS; MCS has no plain-TCP session.
The charger refuses to start: the profile offers DC, or an mcs runtime profile under another protocolProtocol and runtime profile disagreeUse --protocol mcs with the MCS runtime profile, or the DC protocol with a DC runtime profile.
The EV refuses the command line: --energy-service mcs needs --mcs-coupler-link, or --mcs-coupler-link is for --energy-service mcs onlyThe two MCS options are not given togetherGive both, with --tls.
Charger evidence says iso20_dc_exchange_only_not_mcsThe charger ran without the MCS runtime (for example, without a plant endpoint) and offered the DC service onlyStart the charger from the VeriStand bench's MCS stack. This result is a DC exchange, not an MCS result.
The EV stops at ChargeParameterDiscoveryThe EV case does not fit the charger's operating pointUse the EV case the charger's demo-plant.json names (see ChargeLink as vehicle).
The EV ends with mcs_coupler_lostThe 10BASE-T1S link dropped, or the charger process endedCheck the cable, the adapters and the PLCA settings; read coupler_link_lost in the charger's record for the cause.
The interface index changedWindows renumbered the adapters after a restart or re-plugRead the indexes again (Get-NetAdapter) and use the new values on both PCs.

For general failures (licence, TLS, ports, VeriStand) see Troubleshooting.