Search code examples
canopen

Mapping a CANopen object to a TPDO and an RPDO


I have a (read-write) dictionary object that I want to map to both a TPDO and an RPDO at the same time. Whilst I can't find anything in the CANopen specifications that explicitly states this is not allowed, I get a warning from the CiA CANopen Conformance Test Tool (V3.0.3.8) when it analyses the EDS file:

error 8: Access type in section [3004sub1] contradicts direction of PDO section [1A00sub2].

The description of Error 8 states:

Access type contradicts direction of the PDO section. An object mapped to a transmitting PDO could have access type ro, const or rwr. An object mapped to a receiving PDO could have access type wo or rww.

I understand why this error is generated, but I can't find any work-around that allows me to map the object to a TPDO and an RPDO, so I can only conclude that this is prohibited in the specification.


Solution

  • I agree with you, the SDO r/w access has no direct equivalent in the PDO world. But I can not proof that, it is just my personal conclusion from doing some CANopen work.

    Proposal for a workaround: You can do what cia 402 standort is doing with the Object 'Mode of operation': It has two objects:

    • 0x6060 : modes_of_operation (SDO read/write and PDO receive)
    • 0x6061 : modes_of_operation_display (SDO read only and PDO transmit)

    This allows you to map each PDO to the corresponding object, one PDO per direction. Internally you can in the most basic version just copy the value from the receive to the transmit object whenever a value is received.