ChargeLink Native
Developed byDEVlink

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

  1. Identity — exact ChargeLink version, license and profile.
  2. Environment — doctor, OS, permissions, NIC/CAN adapter.
  3. Local service — runtime state, port ownership, gRPC health.
  4. Transport — IPv6/SDP/TCP/TLS or CAN/CAN-FD.
  5. Protocol — V2GTP/EXI/session sequence.
  6. Integration — VeriStand mapping, automation client, external orchestration.
  7. Evidence — run ID, trace, report and first error timestamp.

Failure matrix

SymptomUsually meansCheck firstCorrective action
chargelink not foundPATH or installation path problemTest-Path installed executableUse installed path; reopen shell after installation. Do not copy binaries manually.
License denied / feature unavailableLicense missing, inactive or entitlement not includedlicense status, license entitlementsActivate/verify the supplied license; confirm purchased edition.
doctor --strict failsLocal environment prerequisite failedDoctor JSON first fatal itemFix that prerequisite before protocol testing.
EVSE cannot start / address in useAnother process or stale runtime owns the port/stateruntime list, netstat -anoStop intended prior session or resolve the conflicting process.
EVCC never discovers EVSESDP/network-interface problemIPv6 address/zone, UDP 15118, interface indexCorrect NIC selection, firewall, link-local advertisement.
SDP succeeds but TCP failswrong advertised endpoint/port or network pathadvertised IPv6, TCP port, peer reachabilityCorrect endpoint/zone, port rule and peer routing/link.
TCP succeeds but TLS failscertificate/trust/policy/clock issueTLS doctor, certificate validity, system timeCorrect chain/key/trust/time; isolate with EIM/non-TLS only when the selected protocol/profile permits.
TLS succeeds then session stopsV2GTP/EXI/protocol sequence mismatchtrace first protocol errorPreserve trace; compare selected protocol/profile with DUT capability.
gRPC health failsagent not running, wrong endpoint or port conflictprocess + port 50051start agent; fix endpoint/port ownership.
gRPC healthy but automation failsclient request/contract issuecapabilities and session-smokeprove built-in smoke, then debug the external client.
VeriStand gateway not connectedNI project/dependency/config path problemdeploy project manually, check ClientAPI/Gateway filesfix NI/project layer before ChargeLink.
VeriStand connected but no values movesignal ID/channel mapping mismatchsignals list, mapping file, exact channel pathcorrect canonical ID, channel path and direction.
Values move one way onlychannel not writable or wrong direction/overwritemapping direction and VeriStand mappingsmake intended channel writable and remove competing overwrite.
CHAdeMO virtual pass, hardware loop failCAN driver/channel/wiring/termination issueDevice Manager/vendor utility/channel/bitratecorrect adapter selection and bench wiring; keep protocol model unchanged.
Test case shows BLOCKEDprerequisite/applicability missingPICS/PIXIT, package entitlement, hardware requirementsatisfy prerequisite or document blocker; do not relabel as FAIL.
No artifactswrong artifact root, permission or run did not reach write pathglobal --artifact-root, directory ACLuse 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

  1. Deploy the VeriStand project manually without ChargeLink.
  2. Confirm the exact .nivssdf path.
  3. Confirm ClientAPI and Gateway Server assemblies belong to the same validated NI release.
  4. Confirm NativeClientBroker and OperatorLauncher are from the installed ChargeLink package.
  5. Prove gRPC health separately.
  6. 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:

  1. role and profile;
  2. PICS/PIXIT applicability;
  3. package entitlement;
  4. certificate/security prerequisites;
  5. physical adapter/bench requirement;
  6. 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.