DIN 70121
DIN 70121 is the DC-only predecessor of ISO 15118-2, used by many CCS chargers and vehicles in the field. ChargeLink plays both roles over IPv6 SDP, TCP, V2GTP and EXI. As vehicle, the din-evcc command runs one DC session against your charger, with a current-demand loop. As charger, ChargeLink runs plant-coupled on the NI VeriStand bench. DIN 70121 has no TLS, and none is offered.
Before you start
| Requirement | What you need |
|---|---|
| Hardware | A Windows PC for ChargeLink with an Ethernet adapter on the link to the other side. For the charger role: the NI VeriStand bench of the package. A powerline (PLC) link needs the hardware described in Connecting to Real PLC Hardware. |
| Network | IPv6 enabled on that adapter; link-local addresses (fe80::/10), no router. UDP 15118 (SDP) and the TCP port of the session open in Windows Firewall for fe80::/10 (Install and Activate); the DIN 70121 charger listens on TCP 50119 by default. Run the preflight. |
| Licence | An active ChargeLink licence on the ChargeLink PC (chargelink --json license status). A command that needs it stops with exit code 20 (CL-LICENSE-001). |
| TLS material | None. DIN 70121 runs on plain TCP. |
$CL = 'C:\Program Files\DEVlink\ChargeLink\<VERSION>\charger\bin\chargelink.exe'
$Data = "$env:ProgramData\DEVlink\ChargeLink\data"
$IfIndex = <INTERFACE_INDEX>
$Advertise = 'fe80::<ADDRESS>%' + $IfIndex
The kit has a charger\ and a vehicle\ folder; chargelink.exe is the same binary in both.
ChargeLink as charger
In 0.5.0 the DIN 70121 charger runs plant-coupled on the NI VeriStand HIL bench. A standalone DIN charger with a built-in plant model is not part of 0.5.0. The charger is verified on the bench with ChargeLink's own DIN 70121 vehicle.
The charger profile is din70121_dc. evse start --protocol din70121 --profile-id din70121_dc runs only plant-coupled: it needs --plant-grpc-endpoint (the bench's plant endpoint), --requested-power-kw, --target-voltage-v and the safety link to the plant owner of the bench, and does not start without them. The bench set-up is described in NI VeriStand Bench.
| Option | Meaning |
|---|---|
--tcp-port | The charger's TCP port (default 50119 for DIN 70121). |
--udp-port 15118 | The SDP port. |
--interface-index, --advertise-ipv6 | The interface to the vehicle and the link-local address placed in the SDP response. |
--max-runtime-ms | Runtime limit of the listener. |
--json | Machine-readable result. |
There is no TLS: --tls is refused.
What a good session looks like
The charger writes its own run folder under its --artifact-root. On the NI VeriStand bench the session result is read as described in Reading the result.
ChargeLink as vehicle
Your DUT is a charger or SECC. Connect it to the ChargeLink PC's adapter. din-evcc is the standalone DIN 70121 vehicle: one nominal DC session per run, over TCP only (no TLS), with no plant. There are no EV cases or profiles; the options below shape the session.
# with SDP: multicast discovery on the interface to the charger
chargelink --runtime-root "$Data\runtime" --artifact-root "$Data\artifacts" --json din-evcc --sdp-server "[ff02::1%$IfIndex]:15118" --run-id din-ev-<DATE>
# with the charger's own SDP address
chargelink --runtime-root "$Data\runtime" --artifact-root "$Data\artifacts" --json din-evcc --sdp-server "[fe80::<CHARGER_ADDRESS>%$IfIndex]:15118" `
--target-voltage-v 400 --target-current-a 100 --current-demands 20 --run-id din-ev-<DATE>
# without SDP: straight to the charger's TCP port
chargelink --runtime-root "$Data\runtime" --artifact-root "$Data\artifacts" --json din-evcc --peer "[fe80::<CHARGER_ADDRESS>%$IfIndex]:<CHARGER_TCP_PORT>" --run-id din-ev-<DATE>
$IfIndex is the Windows interface number of the Ethernet port to the charger. Give either --sdp-server or --peer, not both.
| Option | Meaning |
|---|---|
--sdp-server / --peer | Discover the charger through SDP ([ff02::1%<ifIndex>]:15118 or the charger's own SDP address), or connect to its TCP port directly. |
--target-voltage-v, --target-current-a | The vehicle's targets (defaults 400 V, 100 A). Set the target voltage to what your charger can deliver: PreCharge waits for it. |
--max-voltage-v, --max-current-a, --max-power-w | The vehicle's limits (defaults 500 V, 200 A; maximum power defaults to maximum voltage times maximum current). |
--current-demands N | CurrentDemandReqs before the vehicle stops (default 20); 0 keeps requesting until the charger stops. |
--period-ms | Time from a CurrentDemandRes to the next CurrentDemandReq (100 to 900 ms, default 150). |
--no-welding-detection | Skip the optional WeldingDetection. |
--expect-stop-tail | Accept an orderly early stop by the charger. |
--connect-timeout-ms | Connection timeout (default 2000 ms). |
--artifact-root, --runtime-root | Where the run folder and the runtime state are written (defaults .chargelink\artifacts and .chargelink\runtime). |
What a good session looks like
- The command exits with code 0. Otherwise it exits non-zero and its last line reads "DIN 70121 EVCC session did not end as asked: …".
- It prints one JSON line, also saved as
<artifact-root>\<run-id>\din_evcc_report.json:passed(SessionStop answered OK with no stop reason, a planned stop),accepted(passed, or with--expect-stop-tailan orderly early stop) andrun(session details and anyerror). traces\live-v2gtp-frames.jsonlhas one line per message with timestamps and payload hashes (no payload contents).- If the charger is lost in mid-session, the run ends at once with a non-zero exit.
The reference vehicle profiles (din70121_dc_evcc_reference, din70121_evcc_reference) send a ChargeLink-specific encoding that a real charger does not decode. Use them for dry-run and deterministic simulation only.
Results and evidence
Each run writes one folder under the artifact root, $Data\artifacts\<run-id>. Judge a vehicle run by din_evcc_report.json, then check that no file changed after the run:
chargelink --runtime-root "$Data\runtime" --artifact-root "$Data\artifacts" --json artifacts integrity --run-id din-ev-<DATE>
See Trace, Evidence and Reports. Deterministic simulation for ISO 15118-2 and DIN 70121 is available on request through DEVlink support.
ChargeLink's DIN 70121 implementation interoperated with an independent open-source DIN implementation in DEVlink's own tests. This is not certification.
Limits
- DIN 70121 is DC-only. AC tests use ISO 15118-2 or ISO 15118-20.
- No TLS; DIN 70121 defines none.
- The charger runs plant-coupled on the NI VeriStand HIL bench only, and is verified there with ChargeLink's own DIN 70121 vehicle. A standalone DIN charger with a built-in plant model is not part of 0.5.0.
- The vehicle (
din-evcc) runs one nominal DC session per run; it has no EV cases or profiles. - No physical charging interface (control pilot, PWM, PLC/SLAC, power stage) is included.
See Capability Boundaries. To check the installation without a DUT, see Self-test without a device under test.
Troubleshooting
| Symptom | Usually means | Action |
|---|---|---|
evse start refuses din70121_dc | The plant-coupled profile needs --plant-grpc-endpoint, --requested-power-kw, --target-voltage-v and the plant owner's safety link | Run the charger on the NI VeriStand bench. |
evse start refuses --tls | DIN 70121 has no TLS | Remove the TLS options. |
din-evcc waits in PreCharge, then fails | The target voltage is outside what the charger delivers | Set --target-voltage-v to a voltage your charger can deliver. |
din-evcc exits non-zero after the charger stopped early | The charger ended the session before the planned stop | Read run in din_evcc_report.json; add --expect-stop-tail if an orderly early stop is expected. |
din-evcc refuses its arguments | Both --sdp-server and --peer were given | Give one of them. |
| Your charger does not decode ChargeLink's vehicle messages | A reference vehicle profile was used | Use din-evcc. |
General failures (licence, ports, firewall, role locks) are in Troubleshooting.

