Supported platforms: CODESYS 2.3, CODESYS 3.5

DT_AddDataConnection (FUN)

Description

This function creates a connection between producer and consumer. The receive and transmit COB-IDs can be same or different.

The connection is point-to-point and it consists of a producer and a consumer.

The connection is two-way, and both producer and consumer can start transmitting messages at any time they want.

 

When the connection is created as a consumer, the receive buffer size is set to 254 bytes and the transmit buffer size is set to 15 bytes.

When the connection is created as a producer, the buffer sizes are set vice versa. The buffer sizes are unbalanced to optimize RAM reservation.

That is the only difference between the producer and the consumer.

 

Limitations

Since only TPDO COB-IDs is usually used for PDO communication, both COB-IDs can use RPDO space of the CANopen device.

 

 

Inputs, Outputs and Code Examples

CODESYS 2.3CODESYS 2.3

Inputs

Input variable name

Data type

Description

i_Producer

BOOL

TRUE = Producer (e.g. control unit) or FALSE = Consumer (e.g. display)

i_CAN_Drv

BYTE

 

i_RxCobID

WORD

Receive COB-ID

i_TxCobID

WORD

Transmit COB-ID

Return value

Data type

Description

BYTE

Connection ID

 

Example code

Example for event producer (control unit):

Definitions:

 

G_DataConnection: BYTE;

 

Init:

 

 

EL_Init(0,0);

(*Add data connection for this control unit*)

G_DataConnection:=DT_AddDataConnection(

  i_Producer:=TRUE,

  i_CAN_Drv:=G_CANVXD_CAN1,

  i_RxCobID:=16#302,

  i_TxCobID:=16#202);

ELT_AddProducerToEventLog(i_ConnectionID:=G_DataConnection);

 

 

 

Example for event consumer (logging display):

Definitions:

 

G_Device1DataConnection: BYTE;

 

G_Device1EventData:ARRAY[0..1] OF EL_EventData:=

(Configuration:=14, EventType:=0) (* Event 'Event0': Log=TRUE,Popup=TRUE*),

(Configuration:=14, EventType:=0) (* Event 'Event1': Log=TRUE,Popup=TRUE*);

 

 

Init:

 

 

IF 92160 > G_NVRAM_EVENT_LOG_SIZE THEN

  EL_Init(i_pEventLog:=ADR(G_NVRAMEventLogPointer),i_SizeOfEventLog:=G_NVRAM_EVENT_LOG_SIZE);

ELSE

  EL_Init(i_pEventLog:=ADR(G_NVRAMEventLogPointer),i_SizeOfEventLog:=92160);

END_IF

 

(*Add data connection for control unit 'EPEC_CU2020'*)

G_Device1DataConnection:=DT_AddDataConnection(

  i_Producer:=FALSE,

  i_CAN_Drv:=G_CANVXD_CAN1,

  i_RxCobID:=16#202,

  i_TxCobID:=16#302);

 

(*Add other devices's event data... *)

(*Control unit 'EPEC_CU2020' event data*)

ELT_AddConsumerToEventLog(i_ConnectionID:=G_Device1DataConnection,i_source:=2);

EL_AddEventData(i_Source:=2, i_pEventData:=ADR(G_Device1EventData), 2, 0);

 

 

 

 

CODESYS 3.5CODESYS 3.5

Inputs

Input variable name

Data type

Description

i_Producer

BOOL

TRUE = Producer (e.g. control unit) or FALSE = Consumer (e.g. display)

i_itfCANChannel

CANVXD_API.ICANVXD

CAN channel

i_RxCobID

WORD

Receive COB-ID

i_TxCobID

WORD

Transmit COB-ID

Return value

Data type

Description

BYTE

Connection ID

 

Example code

Example for event producer (control unit):

Definitions:

 

G_DataConnection: BYTE;

 

Init:

 

 

EL_Init(0,0);

(*Add data connection for this control unit*)

G_DataConnection:=DT_AddDataConnection(

  i_Producer:=TRUE,

  i_itfCANChannel:=G_CAN1_Channel,

  i_RxCobID:=16#301,

  i_TxCobID:=16#201);

ELT_AddProducerToEventLog(i_ConnectionID:=G_DataConnection);

 

 

 

Example for event consumer (logging display):

Definitions:

 

G_Device1DataConnection: BYTE;

 

G_Device1EventData: ARRAY[0..1] OF EL_EventData := [(Configuration := 14, EventType := 0), (Configuration := 14, EventType := 0)];

 

Init:

 

 

IF 65529 > G_NVRAM_6107_EVENT_LOG_SIZE THEN

  EL_Init(i_pEventLog:=ADR(G_NVRAM_6107_EventLogPointer),i_SizeOfEventLog:=G_NVRAM_6107_EVENT_LOG_SIZE);

ELSE

  EL_Init(i_pEventLog:=ADR(G_NVRAM_6107_EventLogPointer),i_SizeOfEventLog:=65529);

END_IF

 

(*Add data connection for control unit 'EPEC_CU2'*)

G_Device1DataConnection:=DT_AddDataConnection(

  i_Producer:=FALSE,

  i_itfCANChannel:=G_CAN1_Channel,

  i_RxCobID:=16#201,

  i_TxCobID:=16#301);

 

 

(*Add other devices's event data... *)

(*Control unit 'EPEC_CU2' event data*)

ELT_AddConsumerToEventLog(i_ConnectionID:=G_Device1DataConnection,i_source:=2);

EL_AddEventData(i_Source:=2, i_pEventData:=ADR(G_Device1EventData), 2, 0);

 

 

 

 

See also

-

 

Source file Topic000712.htm

Last updated 4-Sep-2025