CANopen Slave Protocol Stack 
Version 7.08.00
Loading...
Searching...
No Matches
CANopen Device Profile CiA 453

The add-on module CANopen Device Profile CiA 453 provides the object dictionary and API for power supplies and power converters as specified in CiA 453.

Module version

The module version is defined by COS_DS453_VERSION_MAJOR and COS_DS453_VERSION_MINOR. Please refer to the history for changes between different versions.

Profile overview

The CiA 453 specification covers programmable and non-programmable power-supply devices with single or multiple outputs. Outputs may be voltage-, current-, or power-controlled. The profile is applicable to AC/AC, DC/DC, AC/DC, and DC/AC converters, including switched-mode and linear-regulated power supplies.

Each device manages its global input circuitry and up to 8 independent outputs. The device and each output are governed by a finite state automaton (FSA) with the states Disabled, Enabled, and Fault:

State Description
Disabled Input/output is switched off; no energy is supplied
Enabled Input/output is active; link voltage is in the nominal range
Fault Internal fault detected; input/output has been switched off automatically

Transitions between states are triggered by local or remote commands (switch-on, switch-off, reset, shutdown). An Emergency message is transmitted whenever the device enters the Fault state.

Operating modes

Programmable devices support two operating modes:

  • Static mode — outputs are driven by the set values stored in the active bank (objects 6205h..6277h).
  • Dynamic mode — the device autonomously steps through a predefined bank sequence (object 6206h..6277h).

Bank concept

A bank is a group of output parameters (set voltage, current, power, frequency limits and threshold timings) that define one specific work-point. Multiple banks allow preprogrammed operating-point transitions without requiring repeated SDO writes from the controller. The active bank is selected via the bank sub-parameter of the output command object (6200h). The bank data type is specified in complex type 0080h (see Cos453_Bank_ts).

Threshold monitoring and hysteresis

Up to two configurable thresholds are available for each monitored quantity (voltage, current, power, frequency, temperature). Each threshold is paired with a return value to implement hysteresis: the condition activates when the monitored value crosses the threshold and deactivates only after it falls back past the return value. An independent delay time per threshold prevents spurious events on transient excursions.

Threshold logic is configurable per signal: ignore, process (equal interpreted logic), invert (interchanged interpreted logic), process-if-higher, or process-if-lower. A Fault-state field decides whether the event signal triggers a fault state transition.

Emergency error codes

Additional profile-specific emergency error codes (FF01h – FF14h) map device-level and per-output status and failure conditions to EMCY messages. The object 1029h controls the resulting NMT state transitions.

Configuration

The module is configured by setting of the following symbols inside the cos_conf.h file:

DefineDescription
COS_DS453Enable device profile CiA 453 (Power supply); value N selects the number of outputs (1 .. 8)

Interface to application

Use the header file cos453.h to get access to the CANopen Device Profile CiA 453 API.

#include "cos453.h"
Object dictionary for CiA 453 (Power supply) .

Providing actual values

The application periodically reads measured values from the hardware and forwards them to the protocol stack using dedicated setter functions:

Function Object(s) Description
Cos453_SetInputValues() 6113h Input actual values (V, I, P, link V, T)
Cos453_SetDeviceTemperature() 6020h Device (ambient) temperature
Cos453_SetOperatingHours() 6030h Operating hours counter
Cos453_SetOutputActualValues() 6204h..6274h Per-output actual values (V, I, P, f, T)
Cos453_SetOutputStatus() 6201h..6271h Per-output status (condition, event, …)
Cos453_SetOutputFailureStatus() 6202h..6272h Per-output failure status
Cos453_SetInputStatus() 6111h Input status
Cos453_SetInputFailureStatus() 6112h Input failure status
Cos453_SetDeviceStatus() 6011h Device status
Cos453_SetDeviceFailureStatus() 6012h Device failure status

Handling output commands

Command objects (6200h..6270h for outputs, 6100h for the input, 6010h for the device) can be written by a controller via SDO or PDO. The application reads the current command state using the corresponding getter functions:

Function Object Description
Cos453_GetOutputCmd() 62N0h Per-output command (operation mode, on/off, …)
Cos453_GetInputCmd() 6100h Input on/off and quit-failure command
Cos453_GetDeviceCmd() 6010h Device control mode, lock, self-starting

The stack notifies the application of command changes via the standard CosMgrProfileUpdate() mechanism. The application then reads the updated command fields and applies the requested hardware action.

Managing output set values (bank concept)

The current set values for each output (object 62N5h) are accessed through Cos453_GetBank() and updated through Cos453_SetBank(). The controller selects the active bank via sub-index 04h of the output command object (field ubBank). On receiving a new bank selection the application is responsible for loading the corresponding parameter set and calling Cos453_SetBank() to make it effective. See Bank activation below.

In dynamic mode the device autonomously advances the bank pointer according to the sequence object (62N6h). The application reads and updates the execution state via Cos453_GetOutputSequence() and Cos453_SetOutputSequence().

Bank activation

The application must implement Cos453_ActivateBank(). The stack calls it whenever the ubBank field of an output command object (6200h..6270h) changes — on an SDO write to sub-index 04h or on a PDO update mapping to the same sub-index. ubOutputV is the affected output (1..COS_DS453) and ubBankV is the newly selected bank index.

The function shall load the parameters for the requested bank and call Cos453_SetBank() to make them effective. It returns eCosSdo_WRITE_OK on success or an appropriate error code from CosSdo_e on failure (e.g. eCosSdo_ERR_VALUE_RANGE when ubBankV exceeds the number of available banks).

The template implementation in cos453_app.c uses a static two-dimensional bank table:

uint8_t Cos453_ActivateBank(uint8_t ubOutputV, uint8_t ubBankV)
{
uint8_t ubResultT = (uint8_t) eCosSdo_ERR_VALUE_RANGE;
if (ubBankV < (uint8_t) MAX_BANKS)
{
Cos453_SetBank(ubOutputV, &atsBankTableS[ubOutputV - 1U][ubBankV]);
ubResultT = (uint8_t) eCosSdo_WRITE_OK;
}
}
void Cos453_SetBank(uint8_t ubOutputV, const Cos453_Bank_ts *ptsBankV)
uint8_t Cos453_ActivateBank(uint8_t ubOutputV, uint8_t ubBankV)
@ eCosSdo_WRITE_OK
Definition cos_defs.h:318
@ eCosSdo_ERR_VALUE_RANGE
Definition cos_defs.h:427

CiA 453 files

FileDescription
cos453.hCiA 453 - Power supply