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 package | Defines |
|---|---|
pc1\veristand\ChargeLink_Blank_Windows.nivssdf | The 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.json | Ten plant channels and the ChargeLink canonical signal each one corresponds to (schema chargelink.veristand.grpc_signal_mapping.v2) |
pc1\config\operator_channel_contract.json | The 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
- 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 pathChargeLink\Models\…. - User Channels under
Targets/Controller/User Channels/: 50 plant channels inChargeLink ISO15118-20 DC EIM Plantand 14 operator channels inChargeLink 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:
| Group | Inputs (written by the owner host, mapped to model inputs) | Outputs (from the model) | Parameters (not mapped) |
|---|---|---|---|
| Session state | EVSE.SessionActive, EVSE.ProtocolReady, EVSE.AuthorizationAccepted, EVSE.ChargeLoopActive, EVSE.StopRequested | ||
| Vehicle | EV.TargetVoltage_V, EV.TargetCurrent_A | EV.BatteryVoltage_V, EV.BatteryCurrent_A, EV.BatterySOC_pct | EV.MaximumVoltage_V, EV.MaximumCurrent_A, EV.MaximumPower_W |
| Charger | EVSE.VoltageCommand_V, EVSE.CurrentCommand_A, EVSE.PowerEnable, EVSE.ContactorCommand, EVSE.PrechargeCommand | EVSE.PresentVoltage_V, EVSE.PresentCurrent_A, EVSE.PresentPower_W, EVSE.ContactorClosed, EVSE.PrechargeComplete, EVSE.OutputReady | EVSE.MaximumVoltage_V, EVSE.MaximumCurrent_A, EVSE.MaximumPower_W |
| Safety | Safety.InterlockClosed, Safety.EmergencyStop, Safety.IsolationValid | Safety.FaultActive | |
| Fault injection | Test.InjectIsolationFault, Test.InjectContactorFault, Test.InjectVoltageDeviation_V, Test.InjectCurrentDeviation_A, Test.ForceCommunicationLoss, Test.ResetFaults | ||
| Command and sample identity | Runtime.CommandAge_ms, Runtime.CommandSequence, Runtime.CommandEpoch, Runtime.CommandCrc32C, Runtime.CommandCrc32 | Runtime.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/):
| Direction | Plant channel | Canonical signal |
|---|---|---|
| ChargeLink → plant (input round trip) | EV.TargetVoltage_V | Vehicle.TargetVoltageV |
EV.TargetCurrent_A | Vehicle.TargetCurrentA | |
EVSE.VoltageCommand_V | Charger.MaxVoltageV | |
EVSE.CurrentCommand_A | Charger.MaxCurrentA | |
| Plant → ChargeLink (telemetry) | EV.BatterySOC_pct | Vehicle.SocPct |
EV.BatteryVoltage_V | Vehicle.BatteryVoltageV | |
EV.BatteryCurrent_A | Vehicle.BatteryCurrentA | |
EVSE.PresentVoltage_V | Charger.PresentVoltageV | |
EVSE.PresentCurrent_A | Charger.PresentCurrentA | |
EVSE.PresentPower_W | Power.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.
| Channel | Kind | Meaning |
|---|---|---|
Operator.ApplySafeStartup | command, rising edge | Applies the safe start-up profile and pulses Test.ResetFaults |
Operator.StartSession, Operator.StopSession | command, latched | Starts or stops the ISO 15118-20 DC EIM session |
Operator.StartExternalEvccLane, Operator.StopExternalEvccLane | command, latched | Starts or stops the SECC listener for the EVCC on PC2 |
Operator.ResetPlant | command, rising edge | Restores the safe start-up profile and clears latched faults |
Operator.ShutdownWorkflow | command, rising edge | Disconnects ChargeLink safely and ends the owner host |
Operator.EngineRunning, Operator.NativeGatewayConnected, Operator.GrpcHealthy, Operator.SessionRunning, Operator.ExternalEvccLaneRunning | status | 1 while the VeriStand engine runs, the broker is connected, the gRPC service is healthy, the session runs, or the listener runs |
Operator.LastErrorCode | status | 0 when there is no error; otherwise the code of the last error |
Operator.Heartbeat | status | Alternates 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
| Symptom | Cause | Action |
|---|---|---|
| Validation or host start fails on the channel contract or the signal mapping | The system definition, a contract file or the model folder was changed or moved | Check the package against manifest\SHA256SUMS (setup step 2); restore the files from the verified ZIP. |
| Deployment fails because the model is missing | ChargeLink\Models is not next to the .nivssdf | Keep the pc1\veristand folder as delivered. |
| Plant values stay at zero during the charge loop | The safe start-up state is held, or a safety input or fault injection is active | Read GetStatus and the failure file; in a manual session send ApplySafeStartup before StartSession. |
Operator.LastErrorCode is not 0 | The owner host rejected a command or hit an error | Read 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 ID | Unit | Direction | Signal ID | Unit | Direction |
|---|---|---|---|---|---|
Battery.CapacityWh | Wh | bidirectional | PhysicalControl.ContactorCommand | — | bidirectional |
Battery.MaxChargePowerW | W | bidirectional | PhysicalControl.EnergyTransferEnable | — | bidirectional |
Battery.MaxDischargePowerW | W | bidirectional | PhysicalControl.IntentGeneration | — | bidirectional |
Battery.TemperatureC | °C | bidirectional | PhysicalControl.PowerEnable | — | bidirectional |
Charger.ContactorClosed | 1 | bidirectional | PhysicalControl.PrechargeEnable | — | bidirectional |
Charger.ContactorState | — | bidirectional | PhysicalControl.StopRequested | — | bidirectional |
Charger.MaxCurrentA | A | bidirectional | PhysicalControl.TargetCurrentA | A | bidirectional |
Charger.MaxPowerW | W | bidirectional | PhysicalControl.TargetVoltageV | V | bidirectional |
Charger.MaxVoltageV | V | bidirectional | Power.ActivePowerW | W | bidirectional |
Charger.Notification | — | bidirectional | Power.EnergyExportedWh | Wh | output |
Charger.PresentCurrentA | A | bidirectional | Power.EnergyImportedWh | Wh | output |
Charger.PresentVoltageV | V | bidirectional | Power.ReactivePowerVar | var | bidirectional |
Connection.CpState | — | bidirectional | Protocol.LastMessage | — | output |
Connection.EthernetLinkState | — | bidirectional | Protocol.LastResponseCode | — | output |
Connection.PlcLinkState | — | bidirectional | Protocol.MessageCounter | count | output |
Connection.PlugLocked | — | bidirectional | Protocol.SecurityState | — | output |
Connection.PlugPresent | — | bidirectional | Protocol.SelectedProtocol | — | output |
Connection.PpState | — | bidirectional | Protocol.SelectedSchema | — | output |
Contactor.NegativeState | — | bidirectional | Protocol.SessionState | — | output |
Contactor.PositiveState | — | bidirectional | Security.AuthorizationMode | — | bidirectional |
Fault.ActiveCount | count | output | Security.PeerCertificateValid | — | output |
Fault.LastFault | — | output | Security.TlsState | — | output |
Isolation.ResistanceOhmPerV | Ω/V | bidirectional | Session.ElapsedMs | ms | output |
Metering.MeterReadingWh | Wh | output | Session.Id | — | output |
Metering.ReceiptRequired | — | bidirectional | System.CpuUsagePct | % | output |
Test.ActiveCampaign | — | output | System.DroppedEvents | count | output |
Test.ActiveCase | — | output | System.HealthState | — | output |
Test.CaseVerdict | — | output | System.MemoryBytes | bytes | output |
Test.ExecutionProgress | % | output | Thermal.CoolantTemperatureC | °C | bidirectional |
Vehicle.BatteryCurrentA | A | bidirectional | Thermal.DeratingPct | % | bidirectional |
Vehicle.BatteryVoltageV | V | bidirectional | Vehicle.RequestedPowerW | W | bidirectional |
Vehicle.ContactorState | — | bidirectional | Vehicle.SocPct | % | bidirectional |
Vehicle.IsolationStatus | — | bidirectional | Vehicle.TargetCurrentA | A | bidirectional |
Vehicle.TargetVoltageV | V | bidirectional | |||
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.

