ChargeLink Native

VeriStand Signal Mapping

The package delivers the complete channel layout and mapping; nothing has to be created or mapped in VeriStand. This page explains what the shipped files define, so that you can read a session's status and evidence and recognise the channels in VeriStand. The setup is in Set Up the VeriStand Bench; the prerequisites (NI VeriStand 2024 Q4, .NET 10 runtime x64, .NET Framework 4.8) are listed on the NI VeriStand Bench page.

The files that define the mapping

File in the packageDefines
pc1\veristand\ChargeLink_Blank_Windows.nivssdfThe VeriStand side: target Controller, the plant model, the two User Channel folders and the 44 mappings between User Channels and model ports
pc1\veristand\ChargeLink\Models\The FMI 2.0 plant model with 26 inputs, 18 outputs and 6 parameters
pc1\config\grpc_signal_mapping.jsonTen plant channels and the ChargeLink canonical signal each one corresponds to (schema chargelink.veristand.grpc_signal_mapping.v2)
pc1\config\operator_channel_contract.jsonThe 14 operator channels: 7 commands and 7 status values (schema chargelink.veristand.operator_channel_contract.v2)

The owner host checks the system definition against both contracts when it starts. Use these files as delivered: Start-SeccSession.ps1 always points the session at them, and a changed file no longer matches manifest\SHA256SUMS.

The system definition

The ChargeLink VeriStand project as it appears in System Explorer, with the mapping directions System Explorer: ChargeLink_Blank_Windows.nivssdf Targets └ Controller (Windows target, localhost) ├ Simulation Models │ └ ChargeLink ISO15118-20 DC EIM FMU │ ├ Inports (26) e.g. EV.TargetVoltage_V │ ├ Outports (18) e.g. EVSE.PresentVoltage_V │ └ Parameters (6) e.g. EV.MaximumPower_W ├ User Channels │ ├ ChargeLink ISO15118-20 DC EIM Plant (50) │ │ EV.* EVSE.* Safety.* Test.* Runtime.* │ └ ChargeLink Operator (14) │ Operator.StartSession … Operator.Heartbeat ├ System Channels (Actual Loop Rate, timing) └ System Mappings (44 ChargeLink mappings) Controller: Engine Rate 500 Hz, Data Rate 50 Hz. Model: base rate 1000 µs, decimation 1, 64-bit, watchdog filtering off. Loops on logical processors 10, 11 and 12. Mapping directions Plant User Channels26 inputs FMU Inports26 FMU Outports18 Plant User Channels18 outputs Plant User Channels6 parameters FMU Parametersnot mapped, start values Operator channels14 never mapped to the FMU;used by the owner host Rule: ChargeLink reads and writes only User Channels, never FMU ports directly. Ten plant channels are also mapped to canonical gRPC signals in grpc_signal_mapping.json, for example EV.TargetVoltage_V → Vehicle.TargetVoltageV.
The shipped system definition as System Explorer shows it, and the direction of every mapping group.
  • Target Controller: Windows, localhost, engine rate 500 Hz, data rate 50 Hz, watchdog filtering off; primary control loop on logical processor 10, model on 11, secondary loop on 12.
  • Model Targets/Controller/Simulation Models/Models/ChargeLink ISO15118-20 DC EIM FMU: 64-bit, base rate 1000 µs, decimation 1, referenced by the relative path ChargeLink\Models\….
  • User Channels under Targets/Controller/User Channels/: 50 plant channels in ChargeLink ISO15118-20 DC EIM Plant and 14 operator channels in ChargeLink Operator.
  • Mappings: 44. Each of the 26 model inputs is fed from the plant User Channel of the same name (User Channel → Inport); each of the 18 model outputs feeds the plant User Channel of the same name (Outport → User Channel). The 6 parameters are not mapped and keep the model's start values. Operator channels are never mapped to the model.

ChargeLink reads and writes only User Channels, never model ports. You can open the .nivssdf in VeriStand's System Explorer to inspect it; do not save it from there, because a saved file changes its hash.

Plant channels

Folder Targets/Controller/User Channels/ChargeLink ISO15118-20 DC EIM Plant:

GroupInputs (written by the owner host, mapped to model inputs)Outputs (from the model)Parameters (not mapped)
Session stateEVSE.SessionActive, EVSE.ProtocolReady, EVSE.AuthorizationAccepted, EVSE.ChargeLoopActive, EVSE.StopRequested
VehicleEV.TargetVoltage_V, EV.TargetCurrent_AEV.BatteryVoltage_V, EV.BatteryCurrent_A, EV.BatterySOC_pctEV.MaximumVoltage_V, EV.MaximumCurrent_A, EV.MaximumPower_W
ChargerEVSE.VoltageCommand_V, EVSE.CurrentCommand_A, EVSE.PowerEnable, EVSE.ContactorCommand, EVSE.PrechargeCommandEVSE.PresentVoltage_V, EVSE.PresentCurrent_A, EVSE.PresentPower_W, EVSE.ContactorClosed, EVSE.PrechargeComplete, EVSE.OutputReadyEVSE.MaximumVoltage_V, EVSE.MaximumCurrent_A, EVSE.MaximumPower_W
SafetySafety.InterlockClosed, Safety.EmergencyStop, Safety.IsolationValidSafety.FaultActive
Fault injectionTest.InjectIsolationFault, Test.InjectContactorFault, Test.InjectVoltageDeviation_V, Test.InjectCurrentDeviation_A, Test.ForceCommunicationLoss, Test.ResetFaults
Command and sample identityRuntime.CommandAge_ms, Runtime.CommandSequence, Runtime.CommandEpoch, Runtime.CommandCrc32C, Runtime.CommandCrc32Runtime.SampleSequence, Runtime.AcceptedCommandSequence, Runtime.CommandAgeActual_ms, Runtime.ContractVersion, Runtime.SourceEpoch, Runtime.SourceTime_ms, Runtime.SourceCrc32C, Runtime.SourceCrc32

The Runtime.* channels let the owner host recognise a stale or corrupted exchange: every command carries a sequence, epoch and checksums, and every sample reports which command it applied. The checksums detect corruption; they do not authenticate a client. The Safety.* inputs are the simulated plant's safety signals; they are not connected to any physical device.

Plant channels and canonical signals

pc1\config\grpc_signal_mapping.json pairs ten plant channels with ChargeLink canonical signals (all paths under Targets/Controller/User Channels/ChargeLink ISO15118-20 DC EIM Plant/):

DirectionPlant channelCanonical signal
ChargeLink → plant (input round trip)EV.TargetVoltage_VVehicle.TargetVoltageV
EV.TargetCurrent_AVehicle.TargetCurrentA
EVSE.VoltageCommand_VCharger.MaxVoltageV
EVSE.CurrentCommand_ACharger.MaxCurrentA
Plant → ChargeLink (telemetry)EV.BatterySOC_pctVehicle.SocPct
EV.BatteryVoltage_VVehicle.BatteryVoltageV
EV.BatteryCurrent_AVehicle.BatteryCurrentA
EVSE.PresentVoltage_VCharger.PresentVoltageV
EVSE.PresentCurrent_ACharger.PresentCurrentA
EVSE.PresentPower_WPower.ActivePowerW

The other plant channels (session state, contactor and precharge, safety, fault injection, command and sample identity) are exchanged by the owner host directly and have no canonical signal.

Operator channels

Folder Targets/Controller/User Channels/ChargeLink Operator, defined by pc1\config\operator_channel_contract.json. The owner host writes the status channels while it runs.

ChannelKindMeaning
Operator.ApplySafeStartupcommand, rising edgeApplies the safe start-up profile and pulses Test.ResetFaults
Operator.StartSession, Operator.StopSessioncommand, latchedStarts or stops the ISO 15118-20 DC EIM session
Operator.StartExternalEvccLane, Operator.StopExternalEvccLanecommand, latchedStarts or stops the SECC listener for the EVCC on PC2
Operator.ResetPlantcommand, rising edgeRestores the safe start-up profile and clears latched faults
Operator.ShutdownWorkflowcommand, rising edgeDisconnects ChargeLink safely and ends the owner host
Operator.EngineRunning, Operator.NativeGatewayConnected, Operator.GrpcHealthy, Operator.SessionRunning, Operator.ExternalEvccLaneRunningstatus1 while the VeriStand engine runs, the broker is connected, the gRPC service is healthy, the session runs, or the listener runs
Operator.LastErrorCodestatus0 when there is no error; otherwise the code of the last error
Operator.HeartbeatstatusAlternates while the owner host is alive

In the package's procedure you do not set the command channels yourself: in an automated session the owner host runs the whole sequence, and in a manual session you send the matching commands with Send-OwnerCommand.ps1 (ApplySafeStartup, StartSession, StartExternalEvccLane, … ShutdownWorkflow; see Manual session).

Watching the channels during a session

In a manual session, GetStatus prints the owner's current snapshot, including plant values such as EVSE.PresentCurrent_A and EVSE.ContactorClosed and the safety state (typed_safety_terminal, typed_safety_phase):

cd C:\ChargeLink\0.5.0-rc2\pc1
.\Send-OwnerCommand.ps1 -RunDirectory '<run folder>' -Command GetStatus

After every session, <run>\host-output\patch598_stagec_external_evcc_evidence.json holds the recorded plant samples, safety and timing, and <run>\external_evcc_artifacts\fix010-pc1-secc\traces\live-v2gtp-frames.jsonl the ISO 15118-20 messages they were exchanged with (Reading the result).

Troubleshooting

SymptomCauseAction
Validation or host start fails on the channel contract or the signal mappingThe system definition, a contract file or the model folder was changed or movedCheck the package against manifest\SHA256SUMS (setup step 2); restore the files from the verified ZIP.
Deployment fails because the model is missingChargeLink\Models is not next to the .nivssdfKeep the pc1\veristand folder as delivered.
Plant values stay at zero during the charge loopThe safe start-up state is held, or a safety input or fault injection is activeRead GetStatus and the failure file; in a manual session send ApplySafeStartup before StartSession.
Operator.LastErrorCode is not 0The owner host rejected a command or hit an errorRead host.log and host-output\patch598_stagec_external_evcc_failure.json in the run folder.

The canonical signal dictionary

chargelink.exe exposes one transport-neutral signal dictionary through the gRPC SignalService (gRPC Integration API). The ten canonical signals above belong to it. The dictionary has 94 signals in 17 namespaces. Bidirectional signals can be written by a client and read back; output signals are produced by ChargeLink and are read-only. Each sample carries a source identity (epoch, sequence, target_time_ms, applied_command_sequence) so that a consumer can detect stale values.

Signal IDUnitDirectionSignal IDUnitDirection
Battery.CapacityWhWhbidirectionalPhysicalControl.ContactorCommand—bidirectional
Battery.MaxChargePowerWWbidirectionalPhysicalControl.EnergyTransferEnable—bidirectional
Battery.MaxDischargePowerWWbidirectionalPhysicalControl.IntentGeneration—bidirectional
Battery.TemperatureC°CbidirectionalPhysicalControl.PowerEnable—bidirectional
Charger.ContactorClosed1bidirectionalPhysicalControl.PrechargeEnable—bidirectional
Charger.ContactorState—bidirectionalPhysicalControl.StopRequested—bidirectional
Charger.MaxCurrentAAbidirectionalPhysicalControl.TargetCurrentAAbidirectional
Charger.MaxPowerWWbidirectionalPhysicalControl.TargetVoltageVVbidirectional
Charger.MaxVoltageVVbidirectionalPower.ActivePowerWWbidirectional
Charger.Notification—bidirectionalPower.EnergyExportedWhWhoutput
Charger.PresentCurrentAAbidirectionalPower.EnergyImportedWhWhoutput
Charger.PresentVoltageVVbidirectionalPower.ReactivePowerVarvarbidirectional
Connection.CpState—bidirectionalProtocol.LastMessage—output
Connection.EthernetLinkState—bidirectionalProtocol.LastResponseCode—output
Connection.PlcLinkState—bidirectionalProtocol.MessageCountercountoutput
Connection.PlugLocked—bidirectionalProtocol.SecurityState—output
Connection.PlugPresent—bidirectionalProtocol.SelectedProtocol—output
Connection.PpState—bidirectionalProtocol.SelectedSchema—output
Contactor.NegativeState—bidirectionalProtocol.SessionState—output
Contactor.PositiveState—bidirectionalSecurity.AuthorizationMode—bidirectional
Fault.ActiveCountcountoutputSecurity.PeerCertificateValid—output
Fault.LastFault—outputSecurity.TlsState—output
Isolation.ResistanceOhmPerVΩ/VbidirectionalSession.ElapsedMsmsoutput
Metering.MeterReadingWhWhoutputSession.Id—output
Metering.ReceiptRequired—bidirectionalSystem.CpuUsagePct%output
Test.ActiveCampaign—outputSystem.DroppedEventscountoutput
Test.ActiveCase—outputSystem.HealthState—output
Test.CaseVerdict—outputSystem.MemoryBytesbytesoutput
Test.ExecutionProgress%outputThermal.CoolantTemperatureC°Cbidirectional
Vehicle.BatteryCurrentAAbidirectionalThermal.DeratingPct%bidirectional
Vehicle.BatteryVoltageVVbidirectionalVehicle.RequestedPowerWWbidirectional
Vehicle.ContactorState—bidirectionalVehicle.SocPct%bidirectional
Vehicle.IsolationStatus—bidirectionalVehicle.TargetCurrentAAbidirectional
Vehicle.TargetVoltageVVbidirectional

Units are SI base units: watts, not kilowatts; watt-hours, not kilowatt-hours. The bench's gRPC service runs only while an owner host runs and is reserved for it; do not write signals into a running bench session.