# Transmit and receive in PDO for CANopen - Why use transmit channel?

According to CiA 301, there is something called TPDO Mapping and TPDO Communication.

TPDO communication is used for describing how the message is going to be sent for example in every 100ms or for every 10th sync message.

TPDO mapping is used to describe what data the software is going to pick from the object dictionary to create the message that are going to be sent out.

PDO is a producer & consumer

So my question is: If PDO is a producer and consumer, why use TPDO channel when you are going to send?

Because when you send a PDO message, you are sending to the receive channel.

Normally, a producer sends to the consumer. That means TX -> RX. In that case, I only need to send to eg 0x200 + Node ID if I want to send to PDO RX channel 1 or 0x280 + Node ID if I want to send to PDO RX channel 2.

But when should RX send to TX? Will that happen too in CANopen? Because PDO is a transmit to receive service, not transmit to receive and receive to transmit. Right?

• I don't understand the question. Why is it a problem that CANopen keeps TPDO and RPDO separate? Suppose I want to send something every 10ms but I want to receive something else at any time it appears on the bus. Using the same PDO for that would be cumbersome. Nov 12 '21 at 9:29
• As for the COBID they are just default values so that you know what each node expects before you start customizing things. Imagine for example a control system with one ECU and n "dumb" CANopen I/O modules. It would be easiest to give the I/O modules node id 1 to n and configure COBID accordingly in the ECU only, so that you can easily replace them. Would you instead do the other way around and configure each I/O module to suit the default COBID in the ECU, you will have to do that in each and every I/O module, which isn't practical. Nov 12 '21 at 9:31
• @Lundin I got confused because all data sheets that I have don't show any RX -> TX. So I assume that ALL PDO's acts the same, even if they are labeled as TX and RX? Right? Nov 12 '21 at 19:44
• @Lundin TPDO sends to RPDO right? Ok. But does RPDO sends to TPDO? Nov 12 '21 at 21:58
• @Lundin For example: If I want to produce a PDO1 message to node 2, then I use RPDO COB ID = 0x200 + Node ID = 0x202. If the consumer want to reply with a PDO1 message, it will send out TPDO COB ID = 0x180 + Node ID = 0x182 because Node ID = 2. Is that correct? If yes: What type of request can be sended with PDO? I thought that PDO was only producer and consumer, and not server and client or master and slave. Nov 13 '21 at 1:01