Quick Recipes
Starting points for the most common tasks, grouped by the role ChargeLink plays against your device under test (DUT). Every recipe assumes the path block below and uses only commands that exist in the documented binary. Replace angle-bracket values. The protocol pages explain each command: Select a Protocol.
$CL = 'C:\ChargeLink\<VERSION>\charger\bin\chargelink.exe'
$Data = 'C:\ChargeLinkData'
$IfIndex = <INTERFACE_INDEX>
$Advertise = 'fe80::<ADDRESS>%' + $IfIndex
$Pki = "$Data\pki"
The kit has a charger\ and a vehicle\ folder; chargelink.exe is the same binary in both.
Installation health in 30 seconds
chargelink --version
chargelink --runtime-root "$Data\runtime" --artifact-root "$Data\artifacts" --json doctor
chargelink --runtime-root "$Data\runtime" --artifact-root "$Data\artifacts" --json license status
chargelink --runtime-root "$Data\runtime" --artifact-root "$Data\artifacts" --json evcc local-loopback-smoke --protocol iso15118-20 --profile-id iso15118_20_dc --peer-ipv6 '::1' --tcp-port 50118 --max-steps 6
The last command runs both roles on the local loopback and needs no DUT; see Self-test without a device under test.
ChargeLink as charger
Your DUT is a vehicle or EVCC. Start ChargeLink, then your vehicle.
ISO 15118-20 DC charger, dry-run
chargelink --runtime-root "$Data\runtime" --artifact-root "$Data\artifacts" --json evse start --dry-run --protocol iso15118-20 --profile-id iso15118_20_dc
chargelink --runtime-root "$Data\runtime" --artifact-root "$Data\artifacts" --json evse stop
ISO 15118-20 charger for your vehicle (TLS 1.3 mutual)
chargelink --runtime-root "$Data\runtime" --artifact-root "$Data\artifacts" --json evse start --external-evcc-session --run-id iso20-<DATE> `
--protocol iso15118-20 --profile-id iso15118_20_dc `
--host '::' --udp-port 15118 --tcp-port 50118 --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 `
--max-runtime-ms 1800000 --heartbeat-interval-ms 1000
ISO 15118-2 DC charger for your vehicle (plain)
chargelink --runtime-root "$Data\runtime" --artifact-root "$Data\artifacts" --json evse start --external-evcc-session --run-id iso2-<DATE> `
--protocol iso15118-2 --profile-id iso15118_2_dc_evse_reference `
--host '::' --udp-port 15118 --tcp-port 50118 --advertise-ipv6 $Advertise --interface-index $IfIndex `
--max-runtime-ms 1800000 --heartbeat-interval-ms 1000
ISO 15118-2 DC charger with Windows SChannel TLS 1.2
$env:CHARGELINK_PFX_PASSWORD = Read-Host 'PFX password'
chargelink --runtime-root "$Data\runtime" --artifact-root "$Data\artifacts" --json evse start --external-evcc-session --run-id iso2tls-<DATE> `
--protocol iso15118-2 --profile-id iso2-dc-eim-tls-schannel `
--host '::' --udp-port 15118 --tcp-port 50118 --advertise-ipv6 $Advertise --interface-index $IfIndex `
--tls --external-evcc-windows-tls --tls-pfx "$Pki\secc-identity.pfx" --tls-pfx-password-env CHARGELINK_PFX_PASSWORD `
--max-runtime-ms 1800000
DIN 70121 DC charger for your vehicle
chargelink --runtime-root "$Data\runtime" --artifact-root "$Data\artifacts" --json evse start --external-evcc-session --run-id din-<DATE> `
--protocol din70121 --profile-id din70121_dc_evse_reference `
--host '::' --udp-port 15118 --tcp-port 50118 --advertise-ipv6 $Advertise --interface-index $IfIndex `
--max-runtime-ms 1800000 --heartbeat-interval-ms 1000
Watch, stop and evaluate any charger run
chargelink --runtime-root "$Data\runtime" --artifact-root "$Data\artifacts" --json evse status --run-id <RUN_ID>
chargelink --runtime-root "$Data\runtime" --artifact-root "$Data\artifacts" --json evse stop --run-id <RUN_ID>
chargelink --runtime-root "$Data\runtime" --artifact-root "$Data\artifacts" --json artifacts integrity --run-id <RUN_ID>
chargelink --runtime-root "$Data\runtime" --artifact-root "$Data\artifacts" --json evse live-closure-gate --run-id <RUN_ID> --source external-evcc --require-sdp --require-tcp-peer --require-v2gtp --require-exi
ChargeLink as vehicle
Your DUT is a charger or SECC. Start the charger first.
Probe your charger's transport and TLS (ISO 15118-20)
chargelink --runtime-root "$Data\runtime" --artifact-root "$Data\artifacts" --json evcc tls-handshake-probe --protocol iso15118-20 --profile-id iso15118_20_dc_evcc_reference `
--peer-ipv6 ('fe80::<SECC>%' + $IfIndex) --tcp-port 50118 `
--tls --tls-cert "$Pki\vehicle-chain.pem" --tls-key "$Pki\vehicle-key.pem" --tls-cafile "$Pki\v2g-root-ca.pem" --require-ca
ISO 15118-20 DC EIM session against your charger (EV case files required)
$env:CHARGELINK_ISO20_LIVE_SEMANTIC_CASE = 'C:\ChargeLink\<VERSION>\vehicle\cases\nominal.json'
$env:CHARGELINK_ISO20_FULL_WIRE_SESSION_MANIFEST = 'C:\ChargeLink\<VERSION>\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 --exi-mode chargelink-exi `
--tls --tls-cert "$Pki\vehicle-chain.pem" --tls-key "$Pki\vehicle-key.pem" --tls-cafile "$Pki\v2g-root-ca.pem" --require-ca `
--max-steps 14 --requested-power-kw 80
In this release, the ISO 15118-2 (iso2-evcc) and DIN 70121 (din-evcc) vehicle roles connect to a ChargeLink charger; see ISO 15118-2 and DIN 70121.
Without a DUT
Scripted DC-CAN runs
Fixed, pre-scripted CAN frames on a virtual bus for test development; not a protocol implementation (scripted DC-CAN runs).
chargelink --runtime-root "$Data\runtime" --artifact-root "$Data\artifacts" --json dc-can virtual-run --protocol chademo --profile dc_can_virtual_evse --frame-count 50 --sample-period-ms 50
chargelink --runtime-root "$Data\runtime" --artifact-root "$Data\artifacts" --json dc-can chademo-live-run --run-id dc-can-live-<DATE>
chargelink --runtime-root "$Data\runtime" --artifact-root "$Data\artifacts" --json dc-can chademo-can-adapter-loop --run-id dc-can-loop-<DATE> --adapter-kind peak-pcan --adapter-mode loopback --channel PCAN_USBBUS1 --bitrate-kbps 500
Deterministic simulation and replay
chargelink --runtime-root "$Data\runtime" --artifact-root "$Data\artifacts" --json sim paired --protocol iso15118-20 --scenario dc-bpt-nominal --seed 42 --run-id sim-<DATE> --write-artifacts --output "$Data\tests\sim-<DATE>.json"
chargelink --runtime-root "$Data\runtime" --artifact-root "$Data\artifacts" --json sim replay --trace "$Data\tests\sim-<DATE>.json"
chargelink --runtime-root "$Data\runtime" --artifact-root "$Data\artifacts" --json sim tls-campaign --campaign iso20-pnc-expired-contract --seed 1 --run-id tls-<DATE> --write-artifacts
Simulation scenarios run inside ChargeLink only. A scenario name that mentions BPT or Plug & Charge does not mean a live session offers it; see the Limits of each protocol page.
Protocol-first campaign plan
chargelink --runtime-root "$Data\runtime" --artifact-root "$Data\artifacts" --json test protocols list
chargelink --runtime-root "$Data\runtime" --artifact-root "$Data\artifacts" --json test areas list --protocol iso15118-20 --sut-role evse --charging-mode dc
chargelink --runtime-root "$Data\runtime" --artifact-root "$Data\artifacts" --json test plan --protocol iso15118-20 --sut-role evse --charging-mode dc --test-area SessionSetup --evidence dry-run --output "$Data\tests\plan-<DATE>"
Licensed conformance package, dry-run
chargelink --runtime-root "$Data\runtime" --artifact-root "$Data\artifacts" --json conformance package execute --package iso15118-2-evse --role evse `
--pics "$Data\tests\pics.json" --pixit "$Data\tests\pixit.json" --out "$Data\tests\iso2-evse-<DATE>" `
--evidence-mode dry-run --executable-only --max-cases 10
gRPC server and smoke
# window 1
chargelink --runtime-root "$Data\runtime" --artifact-root "$Data\artifacts" integration serve --listen 127.0.0.1:50051 --state-root "$Data\runtime\integration"
# window 2
chargelink --runtime-root "$Data\runtime" --artifact-root "$Data\artifacts" --json integration health --endpoint http://127.0.0.1:50051
chargelink --runtime-root "$Data\runtime" --artifact-root "$Data\artifacts" --json integration session-smoke --endpoint http://127.0.0.1:50051 --protocol iso15118-20 --role evse
chargelink --runtime-root "$Data\runtime" --artifact-root "$Data\artifacts" --json signals read --endpoint http://127.0.0.1:50051 --signal Vehicle.SocPct --signal Charger.PresentVoltageV
chargelink --runtime-root "$Data\runtime" --artifact-root "$Data\artifacts" --json signals write --endpoint http://127.0.0.1:50051 --signal Vehicle.SocPct=35
Stop everything and recover locks
chargelink --runtime-root "$Data\runtime" --artifact-root "$Data\artifacts" --json evse stop
chargelink --runtime-root "$Data\runtime" --artifact-root "$Data\artifacts" --json evcc stop
chargelink --runtime-root "$Data\runtime" --artifact-root "$Data\artifacts" --json runtime list
chargelink --runtime-root "$Data\runtime" --artifact-root "$Data\artifacts" --json runtime recover --stale-only

