EtherCAT使用与解析-关于PDO映射

关于PDO映射这部分,最好先参考https://blog.csdn.net/lswdcyy/article/details/105441470先了解一下配置相关的东西;

首先这里已经假设你已经了解完毕配置相关内容且已经初步了解PDO的是以什么样的形式存在于domain和子报文中,那么下面继续:

对于PDO映射,首先他是已经有了一个sync中关联PDO的这样一个链表的前提下才进行的PDO映射,那么这份配置你会发现在应用层例子中他有的时候没有,但有的时候又是存在的,然后使用ecrt_slave_config_pdos()函数进行PDO的在sync中的配置,之所以是可有可无的这样一个步骤,究其原因需要追溯到主站状态机部分,主站状态机在扫描SII信息(https://blog.csdn.net/lswdcyy/article/details/105332841)时会提取TxPDO和RxPDO到从站的同步管理器(SII信息中有PDO和sync相关的信息);然后在使用ecrt_master_slave_config()进行函数配置的时候会将对应从站的sync相关的PDO(master->slaves->sync)复制到从站配置部分。这样,即使不去人为的配置同步管理器和PDO的映射关系,也没什么影响。

当然另外一种就是使用ecrt_slave_config_pdos()函数对从站配置进行设置,该函数会将原本SII复制到的从站配置中的sync进行清除,而后依据新的配置进行设置:需要使用的配置结构如下:

typedef struct 
{
    uint16_t index; /**< PDO entry index. */
    uint8_t subindex; /**< PDO entry subindex. */
    uint8_t bit_length; /**< Size of the PDO entry in bit. */
} ec_pdo_entry_info_t;


typedef struct {
    uint16_t index; /**< PDO index. */
    unsigned int n_entries; /**< Number of PDO entries in \a entries to map.
                              Zero means, that the default mapping shall be
                              used (this can only be done if the slave is
                              present at bus configuration time). */
    ec_pdo_entry_info_t *entries; /**< Array of PDO entries to map. Can either
                                    be \a NULL, or must contain at
                                    least \a n_entries values. */
} ec_pdo_info_t;

typedef struct {
    uint8_t index; /**< Sync manager index. Must be less
                     than #EC_MAX_SYNC_MANAGERS(此处16) for a valid sync manager,
                     but can also be \a 0xff to mark the end of the list. */

    ec_direction_t dir; /**< Sync manager direction. */
    unsigned int n_pdos; /**< Number of PDOs in \a pdos. */
    ec_pdo_info_t *pdos; /**< Array with PDOs to assign. This must contain
                            at least \a n_pdos PDOs. */
    ec_watchdog_mode_t watchdog_mode; /**< Watchdog mode. */
} ec_sync_info_t;

分别是sync、pdo和pdo_entry结构体,三者关系是sync索引PDO,PDO索引PDO_entry,至于从站如何获取PDO配置的话,可以使用

sudo ethercat cstruct

进行该信息提取。

另外需要明确的是,上面两种PDO配置并不冲突,可以理解前者是从站的默认配置,后者是用户为了个性化自定义配置(有无均可,只不过不自定义的话可能会有冗余信息)。

那么继续ecrt_slave_config_pdos()配置函数解析;该函数的目的已经明确,就是为了对从站同步管理器的自定义设置,具体过程如下:

针对每个ec_sync_info_t输入结构数组进行PDO映射处理,分为三个层次:

1.sync层次:sync层次主要配置同步管理器的方向和看门狗设置;

2.PDO层次:处理PDO的时候需要两个过程,一个就是对之前的PDO配置进行清除,第二个过程就是将自定义配置的PDO设置到从站配置的同步管理器链表中,这个过程还会查询之前的默认配置,将之前PDO中的PDO_entry复制到PDO中;

3.PDO entry层次:这个层次将默认配置完全丢弃,从站同步管理器配置方面完全使用用户自定义的同步管理器配置。

通过以上解析,对于从站PDO映射配置大致如上。关于PDO配置如何在从站中生效,就涉及到了主站状态机运行部分,这个放在另外一个单元单独叙述。

  • 2
    点赞
  • 45
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值