如果我致电ecrt_slave_config_reg_pdo_entry
来创建域偏移量,我会收到消息:
无法注册PDO条目:没有此类文件或目录
我相信我必须致电ecrt_slave_config_pdos
,我现在不是。但是,我不明白为什么我要打电话给它。就我而言,我喜欢与之交谈的奴隶已经连接到公交车。如果我在终端中输入ec cstruct -p [SLAVE_POS]
,我会得到PDO布局。
me@here:~$ 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 :(得分: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(...);
}
}
}
然而,这并没有真正回答为什么(或者如果)所有这些都是必要的问题。具体到 cleaner :如果可以避免 Doramid金字塔那就太好了。特别是,因为我告诉奴隶以前告诉我一行的事情。