2014-09-23 10 views
0

Если я позвоню ecrt_slave_config_reg_pdo_entry создать домен смещения, я получаю сообщение:Могу ли я настроить макет PDO по умолчанию?

Не удалось не зарегистрировать запись PDO: Нет такого файла или каталога

Я считаю, что я должен назвать ecrt_slave_config_pdos, который Я не сейчас. Однако я не понимаю, почему я должен это назвать. В моем случае раб, с которым мне нравится разговаривать, уже подключен к автобусу. Если я вхожу ec cstruct -p [SLAVE_POS] в терминал, я получаю макет PDO.

[email protected]:~$ ec cstruct -p 1 
/* Master 0, Slave 1, "..." 
* Vendor ID:  0x... 
* Product code: 0x... 
* Revision number: 0x... 
*/ 

ec_pdo_entry_info_t slave_1_pdo_entries[] = { 
    {0x6040, 0x00, 16}, 
    ... 
}; 

ec_pdo_info_t slave_1_pdos[] = { 
    {0x1600, 2, slave_1_pdo_entries + 0}, 
    ... 
}; 

ec_sync_info_t slave_1_syncs[] = { 
    {0, EC_DIR_OUTPUT, 0, NULL, EC_WD_DISABLE}, 
    ... 
    {0xff} 
}; 

Почему я могу получить все входные аргументы для ecrt_slave_config_pdos из команды терминала, но EtherCat не может (или не хочет) настроить саму рабыню? Может ли конфигурация подчиненного устройства быть автоматизирована?

ответ

0

Вы можете использовать функции ecrt_master_get_slave(), ecrt_master_get_sync_manager(), ecrt_master_get_pdo() и (конечно) ecrt_master_get_pdo_entry(), чтобы получить всю необходимую информацию. ecrt_master_get_sync_manager(), например, не будет устанавливать информацию PDO, но будет возвращать количество позиций PDO для диспетчера синхронизации.

Так что-то подобное, что работает для меня (код ошибки проверки не учтены для ясности):

ecrt_master_get_slave(..., &slaveInformation); 

// For every synchronization manager... 
for (size_t syncIndex = 0; syncIndex < slaveInformation.sync_count; ++syncIndex) { 
    ecrt_master_get_sync_manager(..., &syncInformation); 
    ecrt_slave_config_sync_manager(...); 

    // For every PDO field... 
    for (size_t pdoIndex = 0; pdoIndex < syncInformation.n_pdos; ++pdoIndex) { 
     ecrt_master_get_pdo(..., &pdoInformation); 
     ecrt_slave_config_pdo_assign_add(...); 

     // For every entry in the pdo field... 
     for (size_t entryIndex = 0; entryIndex < pdoInformation.n_entries; ++entryIndex) { 
      ecrt_master_get_pdo_entry(..., &entryInformation); 
      ecrt_slave_config_pdo_mapping_add(...); 
     } 
    } 
} 

Это, однако, на самом деле не ответить на вопрос, почему (или если) все это нужно , Конкретно на уборщица: Было бы хорошо, если бы можно было избежать пирамиды . Тем более, что я говорю рабу, что он сказал мне одну строчку раньше.