[etherlab-users] Problems with Pdo entry with index 0x0000
Thomas Bitsky Jr
tbj at automateddesign.com
Mon Nov 4 18:40:52 CET 2013
Here is an example of a working PDO definition that accounts for gaps for an EL3356 Strain Gauge Card. Note that index and sub-index are 0, but the length still has to be the correct value. Does this answer your question or am I missing a deeper issue you're experiencing?
To get the right layout for complicated cards, I typically cheat and fire up TwinCAT in a virtual machine, insert the card into an offline project, then use the PDOs tab to determine the layout. I also use the Startup tab to see what I need to send the card on startup so that it's using the PDO layout I'm expecting.
For example, for this card:
//
// Register startup configuration for the hardware
//
ecrt_slave_config_sdo8( sg->sc, 0x1C12, 0, 0 ); /* clear sm pdo 0x1c12 */
ecrt_slave_config_sdo8( sg->sc, 0x1C13, 0, 0 ); /* clear sm pdo 0x1c12 */
ecrt_slave_config_sdo16( sg->sc, 0x1C12, 1, 0x1600 ); /* download pdo 1C12 index */
ecrt_slave_config_sdo8( sg->sc, 0x1C12, 0, 1 ); /* set number of RxPDO */
ecrt_slave_config_sdo16( sg->sc, 0x1C13, 1, 0x1A00 ); /* download pdo 1C13 index */
#if 0
ecrt_slave_config_sdo16( sg->sc, 0x1C13, 2, 0x1A01 ); /* download pdo 1C13 index */
#endif
ecrt_slave_config_sdo16( sg->sc, 0x1C13, 2, 0x1A02 ); /* download pdo 1C13 index */
ecrt_slave_config_sdo8( sg->sc, 0x1C13, 0, 2 ); /* set number of TxPDO */
Which yields the following PDO layout:
/* Master 0, Slave 3, "EL3356-0010"
* Vendor ID: 0x00000002
* Product code: 0x0d1c3052
* Revision number: 0x0014000a
*/
static ec_pdo_entry_info_t kl3356_pdo_entries[] = {
{0x7000, 0x01, 1}, /* Start calibration */
{0x7000, 0x02, 1}, /* Disable calibration */
{0x7000, 0x03, 1}, /* Input freeze */
{0x7000, 0x04, 1}, /* Sample mode */
{0x7000, 0x05, 1}, /* Tara */
{0x0000, 0x00, 11}, /* Gap */
{0x0000, 0x00, 1}, /* Gap */
{0x6000, 0x02, 1}, /* Overrange */
{0x0000, 0x00, 1}, /* Gap */
{0x6000, 0x04, 1}, /* Data invalid */
{0x0000, 0x00, 2}, /* Gap */
{0x6000, 0x07, 1}, /* Error */
{0x6000, 0x08, 1}, /* Calibration in progress */
{0x6000, 0x09, 1}, /* Steady state */
{0x0000, 0x00, 4}, /* Gap */
{0x1c32, 0x20, 1}, /* Sync error */
{0x0000, 0x00, 1}, /* Gap */
{0x1800, 0x09, 1},
#if 0
{0x6000, 0x11, 32}, /* Value */
#endif
{0x6000, 0x12, 32}, /* Real32 Value */
};
static ec_pdo_info_t kl3356_pdos[] = {
{0x1600, 6, kl3356_pdo_entries + 0}, /* RMB RxPDO-Map Control */
{0x1a00, 12, kl3356_pdo_entries + 6}, /* RMB TxPDO-Map Status */
#if 0
{0x1a01, 1, kl3356_pdo_entries + 18}, /* RMB TxPDO-Map Value (INT32) */
#endif
{0x1a02, 1, kl3356_pdo_entries + 18}, /* RMB TxPDO-Map Value (REAL32) */
};
static ec_sync_info_t kl3356_syncs[] = {
{0, EC_DIR_OUTPUT, 0, NULL, EC_WD_DISABLE},
{1, EC_DIR_INPUT, 0, NULL, EC_WD_DISABLE},
{2, EC_DIR_OUTPUT, 1, kl3356_pdos + 0, EC_WD_DISABLE},
{3, EC_DIR_INPUT, 2, kl3356_pdos + 1, EC_WD_DISABLE},
{0xff}
};
Thanks!
-----Original Message-----
From: etherlab-users-bounces at etherlab.org [mailto:etherlab-users-bounces at etherlab.org] On Behalf Of Jordi Blanch
Sent: Wednesday, October 30, 2013 9:37 AM
To: etherlab-users at etherlab.org
Subject: [etherlab-users] Problems with Pdo entry with index 0x0000
Hello,
I was trying to configure a Beckhoff module (EL3356-0010) for load cell, and part of the configuration XML I get is this:
<RxPdo Sm="2" Fixed="1" Mandatory="1">
<Index>#x1600</Index>
<Name>RMB RxPDO-Map Control</Name> ....
<Entry>
<Index>#x7000</Index>
<SubIndex>5</SubIndex>
<BitLen>1</BitLen>
<Name></Name>
<DataType>BOOL</DataType>
</Entry>
<Entry>
<Index>#x0000</Index>
<BitLen>11</BitLen>
</Entry>
</RxPdo>
<TxPdo Sm="3" Fixed="1" Mandatory="1">
<Index>#x1a00</Index>
<Name>RMB TxPDO-Map Status</Name>
<Entry>
<Index>#x0000</Index>
<BitLen>1</BitLen>
</Entry>
<Entry>
<Index>#x6000</Index>
<SubIndex>2</SubIndex>
<BitLen>1</BitLen>
<Name></Name>
<DataType>BOOL</DataType>
</Entry>
<Entry>
<Index>#x0000</Index>
<BitLen>1</BitLen>
</Entry>
<Entry>
<Index>#x6000</Index>
<SubIndex>4</SubIndex>
<BitLen>1</BitLen>
<Name></Name>
<DataType>BOOL</DataType>
</Entry>
<Entry>
<Index>#x0000</Index>
<BitLen>2</BitLen>
</Entry>
<Entry>
<Index>#x6000</Index>
<SubIndex>7</SubIndex>
<BitLen>1</BitLen>
<Name></Name>
<DataType>BOOL</DataType>
</Entry>
...
As you can see there are several PDO-Entry with 0x0 index, they are simply GAPs in the data array.
The problem comes when I try to set the PDO's, master does not correctly calculate offsets because in the function ecrt_domain_reg_pdo_entry_list, the loop exit condition while going through the ec_pdo_entry_reg_t list is "reg-> index", so it stops the loop when it finds the first one of these GAPs, so NOT having gone through all the records.
int ecrt_domain_reg_pdo_entry_list(ec_domain_t *domain,
const ec_pdo_entry_reg_t *regs) { ...
EC_MASTER_DBG(domain->master, 1,
"ecrt_domain_reg_pdo_entry_list("
"domain = 0x%p, regs = 0x%p)\n", domain, regs);
for (reg = regs; reg->index; reg++) {
sc = ecrt_master_slave_config_err(domain->master, reg->alias,
reg->position, reg->vendor_id, reg->product_code); ...
return 0;
}
In my case, changing the GAP index to 0x1 works, but is this finish condition correct? How do you deal with these GAPs in the list?
Thank you very much.
--
Jordi Blanch Carles
Unidad de Ensayo y Control
ENCOPIM S.L.
Carretera de Ripollet a Santiga, 104.
P.I. Els Pinetons
E-08291 RIPOLLET (Barcelona)
Tel: (+34) 935 94 23 47
Fax: (+34) 935 94 64 15
==========================================================
La información contenida en la presente transmisión es confidencial y su uso únicamente está permitido a su(s) destinatario(s). Si Ud. no es la persona destinataria de la presente transmisión, rogamos nos lo comunique de manera inmediata por teléfono (+34 935 942 347) y destruya cualquier copia de la misma (tanto digitales como en papel).
The information contained in this transmission is confidential and is intended only for the use of the addressee(s). If you are not the designated recipient of this transmission, please advise us immediately by telephone (+34 935 942 347) and destroy any copies (digital and paper).
======================================================
_______________________________________________
etherlab-users mailing list
etherlab-users at etherlab.org
http://lists.etherlab.org/mailman/listinfo/etherlab-users
More information about the Etherlab-users
mailing list