Troubleshooting: Symptom to Action
Troubleshooting should follow layers. Do not jump directly to protocol decoding when the installed binary, license, NIC, port, or gRPC service has not been proven.
Fast triage order
- Identity — exact ChargeLink version, license and profile.
- Environment — doctor, OS, permissions, NIC/CAN adapter.
- Local service — runtime state, port ownership, gRPC health.
- Transport — IPv6/SDP/TCP/TLS or CAN/CAN-FD.
- Protocol — V2GTP/EXI/session sequence.
- Integration — VeriStand mapping, automation client, external orchestration.
- Evidence — run ID, trace, report and first error timestamp.
Failure matrix
| Symptom | Usually means | Check first | Corrective action |
|---|---|---|---|
chargelink not found | PATH or installation path problem | Test-Path installed executable | Use installed path; reopen shell after installation. Do not copy binaries manually. |
| License denied / feature unavailable | License missing, inactive or entitlement not included | license status, license entitlements | Activate/verify the supplied license; confirm purchased edition. |
doctor --strict fails | Local environment prerequisite failed | Doctor JSON first fatal item | Fix that prerequisite before protocol testing. |
| EVSE cannot start / address in use | Another process or stale runtime owns the port/state | runtime list, netstat -ano | Stop intended prior session or resolve the conflicting process. |
| EVCC never discovers EVSE | SDP/network-interface problem | IPv6 address/zone, UDP 15118, interface index | Correct NIC selection, firewall, link-local advertisement. |
| SDP succeeds but TCP fails | wrong advertised endpoint/port or network path | advertised IPv6, TCP port, peer reachability | Correct endpoint/zone, port rule and peer routing/link. |
| TCP succeeds but TLS fails | certificate/trust/policy/clock issue | TLS doctor, certificate validity, system time | Correct chain/key/trust/time; isolate with EIM/non-TLS only when the selected protocol/profile permits. |
| TLS succeeds then session stops | V2GTP/EXI/protocol sequence mismatch | trace first protocol error | Preserve trace; compare selected protocol/profile with DUT capability. |
| gRPC health fails | agent not running, wrong endpoint or port conflict | process + port 50051 | start agent; fix endpoint/port ownership. |
| gRPC healthy but automation fails | client request/contract issue | capabilities and session-smoke | prove built-in smoke, then debug the external client. |
| VeriStand gateway not connected | NI project/dependency/config path problem | deploy project manually, check ClientAPI/Gateway files | fix NI/project layer before ChargeLink. |
| VeriStand connected but no values move | signal ID/channel mapping mismatch | signals list, mapping file, exact channel path | correct canonical ID, channel path and direction. |
| Values move one way only | channel not writable or wrong direction/overwrite | mapping direction and VeriStand mappings | make intended channel writable and remove competing overwrite. |
| CHAdeMO virtual pass, hardware loop fail | CAN driver/channel/wiring/termination issue | Device Manager/vendor utility/channel/bitrate | correct adapter selection and bench wiring; keep protocol model unchanged. |
| Test case shows BLOCKED | prerequisite/applicability missing | PICS/PIXIT, package entitlement, hardware requirement | satisfy prerequisite or document blocker; do not relabel as FAIL. |
| No artifacts | wrong artifact root, permission or run did not reach write path | global --artifact-root, directory ACL | use explicit writable root and repeat only after preserving failure evidence. |
CLI is not found
$CL = 'C:\Program Files\ChargeLink Native\bin\chargelink.exe'
Test-Path $CL
Get-Command chargelink -ErrorAction SilentlyContinue
$env:Path -split ';'
& $CL --version
Open a new terminal after installation. Add the bin directory to PATH only through your approved Windows configuration.
License or entitlement failure
& $CL --json license verify --file C:\ChargeLinkData\licenses\customer.cllic
& $CL --json license status
& $CL --json license entitlements
If verification passes but a feature is denied, the likely issue is edition/entitlement rather than file corruption.
gRPC health fails
Get-Process chargelink,chargelinkd -ErrorAction SilentlyContinue
Test-NetConnection 127.0.0.1 -Port 50051
netstat -ano | findstr :50051
Start the agent in a dedicated terminal:
& $CL integration serve --listen 127.0.0.1:50051 --state-root C:\ChargeLinkData\runtime\grpc
Then:
& $CL --json integration health --endpoint http://127.0.0.1:50051
& $CL --json integration session-smoke --endpoint http://127.0.0.1:50051 --protocol iso15118-20 --role evse
If built-in smoke passes but your client fails, collect the client request/error separately.
ISO 15118 / DIN peer cannot discover the EVSE
Inspect the intended NIC:
Get-NetAdapter | Format-Table ifIndex,Name,Status,LinkSpeed -AutoSize
Get-NetIPAddress -AddressFamily IPv6 | Format-Table InterfaceIndex,InterfaceAlias,IPAddress,AddressState -AutoSize
Get-NetUDPEndpoint -LocalPort 15118 -ErrorAction SilentlyContinue
Then run the protocol-specific preflight:
& $CL --json evse live-preflight `
--source external `
--protocol iso15118-20 `
--profile-id iso15118_20_dc `
--host '::' `
--udp-port 15118 `
--tcp-port 50118 `
--advertise-ipv6 '<LINK_LOCAL_IPV6_WITH_ZONE>' `
--interface-index <INTERFACE_INDEX>
For ISO 15118-2 or DIN 70121, replace protocol/profile with the values from the installed catalogue.
TLS handshake fails
Start with time and material validation:
Get-Date
w32tm /query /status
& $CL evse tls-pki-doctor --help
Use the exact TLS-doctor syntax shown by the installed release. Check:
- certificate validity period;
- private-key match;
- trust chain;
- expected server/client identity role;
- CA requirement;
- selected TLS adapter/profile;
- workstation clock;
- whether the DUT is using the same protocol/security mode you selected.
Do not send private keys to support.
Session starts but protocol stops after connection
Capture the run ID and locate the trace. Identify the first protocol-layer error rather than the final shutdown message.
Useful separation:
SDP → TCP → TLS (when used) → V2GTP → EXI/application protocol → charging sequence
A later-layer failure does not invalidate earlier transport success. This distinction is important when escalating to DUT or network teams.
VeriStand Native Gateway cannot connect
- Deploy the VeriStand project manually without ChargeLink.
- Confirm the exact
.nivssdfpath. - Confirm ClientAPI and Gateway Server assemblies belong to the same validated NI release.
- Confirm NativeClientBroker and OperatorLauncher are from the installed ChargeLink package.
- Prove gRPC health separately.
- Confirm exact VeriStand channel paths.
Test-Path 'C:\Program Files\ChargeLink Native\bin\ChargeLink.Veristand.NativeClientBroker.exe'
Test-Path 'C:\Program Files\ChargeLink Native\bin\ChargeLink.Veristand.OperatorLauncher.exe'
& $CL --json integration health --endpoint http://127.0.0.1:50051
& $CL --json signals list --endpoint http://127.0.0.1:50051
& $CL --json signals smoke --endpoint http://127.0.0.1:50051
Do not install/configure ASAM XIL to solve the current Native Gateway workflow.
CHAdeMO physical CAN lane fails
Prove software first:
& $CL --json dc-can virtual-run --protocol chademo --profile dc_can_virtual_evse --frame-count 8
If virtual passes:
- confirm adapter driver installation;
- confirm channel name in the vendor utility;
- confirm bitrate;
- confirm termination and wiring under the bench procedure;
- confirm no other application owns the adapter/channel.
Do not disable hardware-required checks merely to convert a physical failure into a software pass.
Test result is BLOCKED
BLOCKED normally means the test could not legally/technically execute under the selected setup. Check:
- role and profile;
- PICS/PIXIT applicability;
- package entitlement;
- certificate/security prerequisites;
- physical adapter/bench requirement;
- replay/live evidence requirement.
A blocked case is not a protocol FAIL and should not be edited into one.
Stale session or runtime state
& $CL --json runtime list
& $CL --json evse stop
& $CL --json evcc stop
& $CL --json runtime list
Only remove runtime state manually after confirming no physical process remains active and support/release procedures allow it.
Prepare a support bundle
Use the dedicated Support Escalation and Evidence Collection chapter. Preserve the failing run before repeating the test.

