I’m testing a M40 Powerlink brick module (AB6711-C). In my host application I have added some ADI’s to populate the manufacturer specific objects of the dictionary.
I’m testing everything with a B&R PLC. Something is wrong during PDO mapping. The PLC is trying to map object 0x5051:01 as follow (Wireshark log):
Ethernet POWERLINK
.000 0110 = MessageType: Asynchronous Send (ASnd) (6)
Destination: 1 (0x01) (Controlled Node)
Source: 240 (0xf0) (Managing Node)
Requested Service ID: SDO (0x05)
Sequence Layer
Command Layer
SDO Transaction ID: 0
0… … = SDO Response: Request (0)
.0… … = SDO Abort: Transfer OK (0)
…00 … = SDO Segmentation: Expedited Transfer (0)
SDO Command ID: Write by Index (1)
SDO Segment size: 12
OD Index: 0x1a00 (PDO_TxMappParam_00h_AU64)
OD SubIndex: 0x01 (ObjectMapping)
Mapping
Index: 0x5051
SubIndex: 0x01
Offset: 0x0000
Length: 32 bits
The module is rejecting the configuration request:
Ethernet POWERLINK
.000 0110 = MessageType: Asynchronous Send (ASnd) (6)
Destination: 240 (0xf0) (Managing Node)
Source: 1 (0x01) (Controlled Node)
Requested Service ID: SDO (0x05)
Sequence Layer
Command Layer
SDO Transaction ID: 0
1… … = SDO Response: Response (1)
.1… … = SDO Abort: Abort Transfer (1)
…00 … = SDO Segmentation: Expedited Transfer (0)
SDO Command ID: Write by Index (1)
SDO Segment size: 4
SDO Transfer Abort: Object cannot be mapped to the PDO. (0x6040041)
here’s the way I have defined ADI 0x5051 (ADI instance 12369)
typedef struct APPL_Adi_LibPDO
{
UINT8 numEntries;
UINT32 Lib_PDO_1;
UINT32 Lib_PDO_2;
UINT32 Lib_PDO_3;
UINT32 Lib_PDO_4;
UINT32 Lib_PDO_5;
UINT32 Lib_PDO_6;
UINT32 Lib_PDO_7;
UINT32 Lib_PDO_8;
UINT32 Lib_PDO_9;
}
APPL_Adi_LibPDOType;
APPL_Adi_LibPDOType APPL_LibPDO_rx = {9,0,0,0,0,0,0,0,0,0};
APPL_Adi_LibPDOType APPL_LibPDO_tx = {9,0,0,0,0,0,0,0,0,0};
static const AD_StructDataType appl_AdiLibPdoRxStruct[] =
{
/* Index: 0 / { “numEntries”, ABP_UINT8, 1, APPL_NOT_MAP_READ_ACCESS_DESC, 0, { { &APPL_LibPDO_rx.numEntries, NULL } } },
/ Index: 1 / { “Lib pdo rx 1”, ABP_UINT32, 1, APPL_READ_MAP_WRITE_ACCESS_DESC, 0, { { &APPL_LibPDO_rx.Lib_PDO_1, NULL } } },
/ Index: 2 / { “Lib pdo rx 2”, ABP_UINT32, 1, APPL_READ_MAP_WRITE_ACCESS_DESC, 0, { { &APPL_LibPDO_rx.Lib_PDO_2, NULL } } },
/ Index: 3 / { “Lib pdo rx 3”, ABP_UINT32, 1, APPL_READ_MAP_WRITE_ACCESS_DESC, 0, { { &APPL_LibPDO_rx.Lib_PDO_3, NULL } } },
/ Index: 4 / { “Lib pdo rx 4”, ABP_UINT32, 1, APPL_READ_MAP_WRITE_ACCESS_DESC, 0, { { &APPL_LibPDO_rx.Lib_PDO_4, NULL } } },
/ Index: 5 / { “Lib pdo rx 5”, ABP_UINT32, 1, APPL_READ_MAP_WRITE_ACCESS_DESC, 0, { { &APPL_LibPDO_rx.Lib_PDO_5, NULL } } },
/ Index: 6 / { “Lib pdo rx 6”, ABP_UINT32, 1, APPL_READ_MAP_WRITE_ACCESS_DESC, 0, { { &APPL_LibPDO_rx.Lib_PDO_6, NULL } } },
/ Index: 7 / { “Lib pdo rx 7”, ABP_UINT32, 1, APPL_READ_MAP_WRITE_ACCESS_DESC, 0, { { &APPL_LibPDO_rx.Lib_PDO_7, NULL } } },
/ Index: 8 / { “Lib pdo rx 8”, ABP_UINT32, 1, APPL_READ_MAP_WRITE_ACCESS_DESC, 0, { { &APPL_LibPDO_rx.Lib_PDO_8, NULL } } },
/ Index: 9 */ { “Lib pdo rx 9”, ABP_UINT32, 1, APPL_READ_MAP_WRITE_ACCESS_DESC, 0, { { &APPL_LibPDO_rx.Lib_PDO_9, NULL } } }
};
static const AD_StructDataType appl_AdiLibPdoTxStruct[] =
{
/* Index: 0 / { “numEntries”, ABP_UINT8, 1, APPL_NOT_MAP_READ_ACCESS_DESC, 0, { { &APPL_LibPDO_tx.numEntries, NULL } } },
/ Index: 1 / { “Lib pdo tx 1”, ABP_UINT32, 1, APPL_WRITE_MAP_WRITE_ACCESS_DESC, 0, { { &APPL_LibPDO_tx.Lib_PDO_1, NULL } } },
/ Index: 2 / { “Lib pdo tx 2”, ABP_UINT32, 1, APPL_WRITE_MAP_WRITE_ACCESS_DESC, 0, { { &APPL_LibPDO_tx.Lib_PDO_2, NULL } } },
/ Index: 3 / { “Lib pdo tx 3”, ABP_UINT32, 1, APPL_WRITE_MAP_WRITE_ACCESS_DESC, 0, { { &APPL_LibPDO_tx.Lib_PDO_3, NULL } } },
/ Index: 4 / { “Lib pdo tx 4”, ABP_UINT32, 1, APPL_WRITE_MAP_WRITE_ACCESS_DESC, 0, { { &APPL_LibPDO_tx.Lib_PDO_4, NULL } } },
/ Index: 5 / { “Lib pdo tx 5”, ABP_UINT32, 1, APPL_WRITE_MAP_WRITE_ACCESS_DESC, 0, { { &APPL_LibPDO_tx.Lib_PDO_5, NULL } } },
/ Index: 6 / { “Lib pdo tx 6”, ABP_UINT32, 1, APPL_WRITE_MAP_WRITE_ACCESS_DESC, 0, { { &APPL_LibPDO_tx.Lib_PDO_6, NULL } } },
/ Index: 7 / { “Lib pdo tx 7”, ABP_UINT32, 1, APPL_WRITE_MAP_WRITE_ACCESS_DESC, 0, { { &APPL_LibPDO_tx.Lib_PDO_7, NULL } } },
/ Index: 8 / { “Lib pdo tx 8”, ABP_UINT32, 1, APPL_WRITE_MAP_WRITE_ACCESS_DESC, 0, { { &APPL_LibPDO_tx.Lib_PDO_8, NULL } } },
/ Index: 9 */ { “Lib pdo tx 9”, ABP_UINT32, 1, APPL_WRITE_MAP_WRITE_ACCESS_DESC, 0, { { &APPL_LibPDO_tx.Lib_PDO_9, NULL } } }
};
const AD_AdiEntryType APPL_asAdiEntryList[] =
{
{ 3, “DC link voltage”, ABP_SINT16, 1, APPL_WRITE_MAP_READ_ACCESS_DESC, { { &appl_iDClinkVolt, NULL } }, NULL, NULL, NULL },
{ 97, “Guide value option code”, ABP_UINT16, 1, APPL_NOT_MAP_WRITE_ACCESS_DESC, { { &appl_iGuideValOpCode, NULL } }, NULL, NULL, SetAdi97Value },
{ 12352, “PDO RX ID”, ABP_UINT8, 1, APPL_READ_MAP_WRITE_ACCESS_DESC, { { &appl_iPdoRxID, NULL } }, NULL, NULL, NULL },
{ 12353, “PDO TX ID”, ABP_UINT8, 1, APPL_WRITE_MAP_READ_ACCESS_DESC, { { &appl_iPdoRxID, NULL } }, NULL, NULL, NULL },
{ 12368, “Lib pdo rx”, ABP_UINT8, 10, APPL_READ_MAP_WRITE_ACCESS_DESC, { { NULL, NULL } }, appl_AdiLibPdoRxStruct, NULL, NULL },
{ 12369, “Lib pdo tx”, ABP_UINT8, 10, APPL_WRITE_MAP_WRITE_ACCESS_DESC,{ { NULL, NULL } }, appl_AdiLibPdoTxStruct, NULL, NULL }
};
const AD_DefaultMapType APPL_asAdObjDefaultMap[] =
{
{ AD_DEFAULT_MAP_END_ENTRY }
};
I left default map empty since the PLC will remap PDO’s.
Please, can you help me to understand why “Object cannot be mapped to the PDO” is returned?
Thanks in advance
Carlo