0

I recently switched my device from ModbusRTU to CANopen by changing out the Anybus Compactcom and making some minor firmware updates. The device now seems to be properly functioning as a CANopen node, but I am having a bit of trouble mapping the PDOs for cyclic data transfer.

The host application consists of 117 Anybus ADI's, each a UINT16. According to the Anybus documentation, the ADIs correspond to objects in the CANopen node's object dictionary from 2001h to 5fffh (ADI 1-3fff).

When I attempt to read an object directly from the CANopen node using my master simulator, I get the expected value every time, but after mapping my PDOs I only ever get the first ADI (then all zeros) when I try a cyclical data read.

In my EDS file, I mapped each ADI like this:

[2001]
ParameterName=ADI1
ObjectType=0x7
DataType=0x0006
LowLimit=0x0000
HighLimit=0xFFFF
DefaultValue=0x0
AccessType=ro
PDOMapping=1

In my master configuration program, I map the ADIs that I need to PDOs and download the configuration to the master. When I start data transfer, all I get is the first ADI-- EVEN IF I didn't map it. As long as ANY object is mapped, I get the data from the first ADI then all zeros after that.

I know this is a complicated setup and this probably isn't enough information to get a good answer, but I am new with CANopen so anyone who has experience with CANopen (especially using an Anybus-CC) please give me some suggestions or let me know what else you need to know about the setup.

Peter Mortensen
  • 30,738
  • 21
  • 105
  • 131
  • Can you post the PDO mapping, at least for the first TPDO. That is the values for everything with Idx 1A00. – LogicG8 Jun 01 '14 at 12:51

1 Answers1

1

I am also about to implement a CANopen-interface over AnyBusCC. The type of data-structure that handles the mapping internally looks like this:

typedef struct ABCC_PdMapType
{
   UINT16            iNbrMaps;      /* Number of ADI Write/Read mappings   */
                                    /* present in asMaps[] array.          */
   ABCC_PdAdiMapType*  psMaps;      /* Pointer to Array of ADI mappings    */

}
ABCC_PdMapType;

Unfortunately AnyBusCC maps each individual entry in psMaps to a single PDO. So it looks to me that you cannot map several ADIs to the same PDO, but that each ADI is mapped to a different PDO. At least that's as far as I got.

I don't know what is possible from the other side, i.e. whether you can map multiple PDOs with the 0x16xx/0x1Axx-type of objects, but from the internal handling I would not expect that to be possible.

Peter Mortensen
  • 30,738
  • 21
  • 105
  • 131
Henning
  • 21
  • 3