简介

  • ethercat常用函数

ethercat

1.1 启动,设置

  • ethercat都是在root用户下执行命令

  • 设置从站
    • ethercat alias -p 2 0:2
  • 启动ethercat
    • /etc/init.d/ethercat start
  • 查看状态
    • ethercat slv

1.2 调试命令

  • 查看从站状态码
    • ethercat upload -t int16 -p 0 0x603f 00
  • 查看从站位置:
    • ethercat upload -t int32 -p 0 0x6064 00

1.2 demo_webserver.c 分析

数据结构

ec_pdo_entry_info_t

  • 简介:PDO条目配置信息。这是ec_pdo_info_t中的entries字段的数据类型
  • 声明:
    1
    2
    3
    4
    5
    
      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;
    

ec_pdo_info_t

  • 简介:PDO配置信息。这是ec_sync_info_t中的pdos字段的数据类型
  • 声明:
    1
    2
    3
    4
    5
    
      typedef struct {
        uint16_t index;              /**< PDO index. */
        unsigned int n_entries;      /**< 要映射的entries PDO条目数 (0表示使用默认映射,这只能在从服务器处于总线配置时完成)*/
        ec_pdo_entry_info_t *entries;/**< 要映射的PDO项数组。可以是NULL,或者必须包含至少n_entries个值*/
      } ec_pdo_info_t;
    

ec_sync_info_t

  • 简介:同步管理器配置信息。这可以用于配置多个同步管理器,包括PDO分配和PDO映射。它被作为ecrt_slave_config_pdos()函数的输入参数使用
  • 声明:
    1
    2
    3
    4
    5
    6
    7
    
      typedef struct {
        uint8_t index;  /**< 同步管理器索引。Sync manager index.Must be less than #EC_MAX_SYNC_MANAGERS for a valid sync manager,but can also be \a 0xff to mark the end of the list. */
        ec_direction_t dir;  /**<同步管理器方向 */
        unsigned int   n_pdos;  /**< PDOs在pdos结构体数组中的数量 */
        ec_pdo_info_t  *pdos;  /**<带有要分配的pdo的数组。所包含的PDOs必须不少于n_pdos
        ec_watchdog_mode_t watchdog_mode;  /**< 看门狗模式 */
      } ec_sync_info_t;
    

ec_master_t

  • 简介:主站

ecrt_master_state_t

  • 简介:主站状态,这个是用于函数ecrt_master_state()函数的输出参数
  • 声明:
    1
    2
    3
    4
    5
    
      typedef struct {
        unsigned int slaves_responding;  // 所有Ethernet设备响应从站的总和
        unsigned int al_states : 4;      // 所有从站的应用层状态。状态被编码在较低的4位。如果设置了一个比特位,就意味着至少有一个从站在主线上响应:Bit 0: \a INIT;Bit 1: \a PREOP;Bit 2: \a SAFEOP;Bit 3: \a OP */
        unsigned int link_up : 1;        // true,如果至少有一个 Ethernet link是在线的,则为true
      } ec_master_state_t;
    

ec_slave_config_t

  • 简介:从站配置

ec_slave_config_state_t

  • 简介:从站配置状态。它用于函数ecrt_slave_config_state()的输出参数
  • 声明:
    1
    2
    3
    4
    5
    
      typedef struct {
        unsigned int online : 1;      // 这个从站是在线的
        unsigned int operational : 1; // 这个从站通过指定配置进入OP状态
        unsigned int al_state : 4;    // 应用层的从站状态:1: \a INIT;2: \a PREOP;4: \a SAFEOP;8: \a OP
      } ec_slave_config_state_t;
    

ec_domain_t

  • 简介:域

ec_wc_state_t

  • 简介:域工作计数器状态说明。这个是在ec_domain_state_t中使用
  • 声明:
    1
    2
    3
    4
    5
    
      typedef enum {
        EC_WC_ZERO = 0,   // 没有交换注册的过程数据
        EC_WC_INCOMPLETE, // 交换了一些已注册的过程数据(部分过程数据)
        EC_WC_COMPLETE    // 交换了所有已注册的过程数据
      } ec_wc_state_t;
    

ec_domain_state_t

  • 简介:域状态。它被作为函数ecrt_domain_state()的输出参数使用
  • 声明:
    1
    2
    3
    4
    5
    
      typedef struct {
        unsigned int working_counter;   // 最后一个工作计数器的值
        ec_wc_state_t ws_state;         // 工作计数器状态说明
        unsigned int redundancy_active; // 冗余链路正在使用
      } ec_domain_state_t;
    

ec_pdo_entry_reg_t

  • 简介:列出PDO条目批量注册的记录类型。此类型用于ecrt_domain_reg_pdo_entry_list()的数组参数。
  • 声明:
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    
      typedef struct {
        uint16_t alias;             // 从站别名地址
        uint16_t position;          // 从站位置
        uint32_t vendor_id;         // 从站供销商ID
        uint32_t product_code;      // 从站产品码
        uint16_t index;             // PDO条目索引
        uint8_t  subindex;          // PDO条目子索引
        unsigned int *offset;       // 指向在进程数据中存储PDO条目(字节-)偏移量的变量的指针。
        unsigned int *bit_position; // 指向一个变量的指针,用于在\a偏移量内存储位位置(0-7)。可以为NULL,在这种情况下,如果PDO条目不字节对齐会引发错误
      } ec_pdo_entry_reg_t;
    

API

ecrt_master_create_domain

  • 简介:创建一个新的过程数据域。对于流程数据交换,至少需要一个流程数据域。这个方法创建一个新的过程数据域,并返回一个指向新域对象的指针。这个对象能够在循环操作中用于注册PDOs和交换PDOs
  • 声明:
    1
    
    ec_domain_t *ecrt_master_create_domain( ec_master_t *master);
    

ecrt_request_master

  • 简介:请求EtherCAT主机进行实时操作。
    • 在应用程序可以访问EtherCAT主机之前,它必须预留一个专用的主机。
    • 在用户空间,这是ecrt_open_master()ecrt_master_reserve()的方便函数。
    • 这个函数必须是应用程序使用EtherCAT时必须调用的第一个函数
    • 该函数以master的索引作为参数。第一个主节点的索引为0,第n个主节点的索引为n- 1。
    • 在加载master时,必须指定master的数量。
  • 声明:
    1
    
    ec_master_t *ecrt_request_master(unsigned int master_index);
    

ecrt_master_sdo_upload

  • 简介:执行SDO上传请求从从站读取数据。
    • 此请求由主状态机处理。
    • 他的方法会阻塞,直到请求被处理,并且不能在实时上下文中调用。
  • 声明:
    1
    
    int ecrt_master_sdo_upload(ec_master_t *master, uint16_t slave_position, uint16_t index, uint8_t subindex, uint8_t *target, size_t target_size, size_t *result_size, uint32_t *abort_code);
    
  • 参数:
    • master – EtherCAT主站
    • slave_position – 从站位置
    • index – SDO索引
    • subindex – SDO的子索引
    • target – 上传的目标缓冲区。
    • target_size – 目标缓冲区的大小
    • result_size – 已经上传的数据大小
    • abort_code – SDO上传的中止代码。
  • 返回值:
    • 成功 – 0
    • 失败 – < 0

ecrt_master_sdo_download

  • 简介:执行SDO下载请求,将数据写入从站。
    • 此请求由主状态机处理。
    • 他的方法会阻塞,直到请求被处理,并且不能在实时上下文中调用。
  • 声明:
    1
    
    int ecrt_master_sdo_download(ec_master_t *master, uint16_t slave_position, uint16_t index, uint8_t subindex, uint8_t *data, size_t data_size, uint32_t *abort_code);
    
  • 参数:
    • master – EtherCAT主站
    • slave_position – 从站位置
    • index – SDO索引
    • subindex – SDO的子索引
    • data – 要下载的数据缓冲区
    • data_size – 数据缓冲区大小
    • abort_code – SDO上传的中止代码。
  • 返回值:
    • 成功 – 0
    • 失败 – < 0

ecrt_domain_reg_pdo_entry_list

  • 简介:为一个域注册一堆PDO条目。此方法必须在ecrt_master_activate()之前在非实时上下文中调用。
  • 声明:
    1
    
    int ecrt_domain_reg_pdo_entry_list(ec_domain_t *domain, const ec_pdo_entry_reg_t *pdo_entry_regs);
    
  • 参数:
    • domain – 域
    • pdo_entry_regs – PDO注册数组。注册数组必须以一个空结构体结束,或者将\a索引字段设置为0 !
  • 返回值:
    • 成功 – 0
    • 失败 – 其他

ecrt_master_activate

  • 简介:完成配置阶段并为循环操作做准备。
    • 这个函数告诉主机配置阶段已经完成,将开始实时操作。
    • 该函数为域分配内部内存,并为域成员计算逻辑FMMU地址。
    • 它告诉主状态机现在要应用总线配置。
    • 调用此函数后,实时应用程序负责循环调用ecrt_master_send()ecrt_master_receive()以确保总线通信。
    • 在调用这个函数之前,由主线程负责,所以这些函数可能不会被调用!
    • 该方法本身分配内存,不应该在实时上下文中调用。
  • 声明:
    1
    
    int ecrt_master_activate(ec_master_t *master);
    
  • 参数:
    • master – EtherCAT 主站
  • 返回值:
    • 成功 – 0
    • 失败 – < 0

ecrt_domain_data

  • 简介:返回域的过程数据。
    • 在内核上下文中:
      • 如果使用ecrt_domain_external_memory()提供外部内存,则返回的指针将包含该内存的地址。
      • 否则它将指向内部分配的内存。
      • 在后一种情况下,在ecrt_master_activate()之前不能调用此方法。
    • 在用户空间上下文中:
      • 必须在ecrt_master_activate()之后调用此方法以获取映射的域进程数据内存。
  • 声明:uint8_t *ecrt_domain_data(ec_domain_t *domain);
  • 参数:
    • domain – 域
  • 返回值:
    • 返回指向过程数据内存区域的指针

ecrt_master_select_reference_clock

  • 简介:为分布式时钟选择参考时钟。如果这个方法没有被某个主时钟调用,或者从时钟配置指针为NULL,那么第一个具有DC功能的从时钟将提供参考时钟。
  • 声明:
    1
    
    int ecrt_master_select_reference_clock(ec_master_t *master, ec_slave_config_t *sc);
    
  • 参数:
    • master – EtherCAT 主站
    • sc – Slave的Slave配置要引用的Slave(或NULL)。
  • 返回值:
    • 成功 – 0
    • 失败 – 负数,错误码

ecrt_master_application_time

  • 简介:设置应用时间。在使用分布式时钟操作从服务器时,主服务器必须知道应用程序的时间。主程序本身不会增加时间,因此必须循环调用此方法。
    • 传递给该方法的时间用于计算从服务器的SYNC0/1中断的阶段。它应该经常在实时周期的同一点被调用。因此,建议在计算开始时调用它,以避免由于执行时间的变化而导致的偏差。
    • 该时间用于设置从机的系统时间偏移和循环操作开始时间寄存器,以及通过ecrt_master_sync_reference_clock()将DC参考时钟同步到应用程序时间。
    • 时间定义为从2000-01-01 00:00开始的纳秒。可以使用EC_TIMEVAL2NANO()宏来转换epoch时间,但这不是必需的,因为绝对值无关紧要
  • 声明:
    1
    
    void ecrt_master_application_time(ec_master_t *master, uint64_t app_time);
    
  • 参数:
    • master – EtherCAT 主站
    • app_time – 应用时间

ecrt_master_sync_reference_clock

  • 简介:将DC参考时钟漂移补偿数据报排队发送。参考时钟将被同步到由最后一次调用取消ecrt_master_application_time()提供的应用程序时间。
  • 声明:
    1
    
    void ecrt_master_sync_reference_clock(ec_master_t *master);
    
  • 参数:
    • master – EtherCAT 主站

ecrt_master_sync_slave_clocks

  • 简介:将DC时钟漂移补偿数据报排队发送。所有从时钟同步到参考时钟。
  • 声明:
    1
    
    void ecrt_master_sync_slave_clocks(ec_master_t *master);
    
  • 参数:
    • master – EtherCAT 主站

ecrt_release_master

  • 简介:释放一个请求的EtherCAT主机。
    • 在使用后,必须释放master,以便其他应用程序可以使用它。
    • 此方法释放所有已创建的数据结构。它不应该在实时上下文中调用。
    • 如果主站被激活,则内部调用ecrt_master_deactivate()
  • 声明:
    1
    
    void ecrt_release_master(ec_master_t *master);
    
  • 参数:
    • master – EtherCAT 主站

ecrt_master_receive

  • 简介:从硬件中获取接收到的帧并处理数据报。
    • 通过调用中断服务例程查询网络设备接收的帧。
    • 提取接收到的数据报,并将结果分派到队列中的数据报对象。
    • 接收到的数据报和超时的数据报将被标记,并退出队列
    • 必须在ecrt_master_activate()返回后由实时应用程序循环调用。
  • 声明:
    1
    
    void ecrt_master_receive(ec_master_t *master);
    

ecrt_domain_process

  • 简介:确定域的数据报的状态。
    • 计算接收到的数据报的工作计数器,并在必要时输出统计信息。
    • 这必须在ecrt_master_receive()接收域数据报之后调用,以便使ecrt_domain_state()返回最后一次进程数据交换的结果。
  • 声明:
    1
    
    void ecrt_domain_process(ec_domain_t *domain);
    

ecrt_domain_queue

  • 简介:(Re-)将所有域数据报放在主数据报队列中。调用此函数来标记域的数据报,以便在下一次调用ecrt_master_send()时进行交换
  • 声明:
    1
    
    void ecrt_domain_queue(ec_domain_t *domain);
    

ecrt_master_send

  • 简介:发送队列中的所有数据报。
    • 该方法获取所有已排队等待传输的数据报,将它们放入帧中,并将它们传递给以太网设备进行发送。
    • 必须在ecrt_master_activate()返回后由应用程序循环调用。
  • 声明:
    1
    
    void ecrt_master_send(ec_master_t *master);
    

ecrt_domain_state

  • 简介:读取域的状态。
    • 在给定的\a状态结构中存储域状态。
    • 利用该方法,可以实时监控过程数据交换情况。
  • 声明:
    1
    
    void ecrt_domain_state(const ec_domain_t *domain, ec_domain_state_t *state);
    
  • 参数:
    • domain – 域
    • state – 指向用于存储信息的状态对象的指针。

ecrt_master_state

  • 简介:读取当前主站的状态。
    • 在给定的\a状态结构中存储主站状态。
    • 此方法返回一个全局状态。对于冗余总线拓扑中特定于链路的状态,请使用ecrt_master_link_state()方法。
  • 声明:
    1
    
    void ecrt_master_state(const ec_master_t *master, ec_master_state_t *state);
    
  • 参数:
    • master – 主站
    • state – 指向用于存储信息的状态对象的指针

ecrt_slave_config_state

  • 简介:输出从站配置的状态。
    • 在给定的\a状态结构中存储状态信息。状态信息由主状态机更新,因此可能需要几个周期,直到它发生变化。
    • 如果需要实时监控进程数据交换的状态,则应该使用ecrt_domain_state()
  • 声明:
    1
    
    void ecrt_slave_config_state(const ec_slave_config_t *sc, ec_slave_config_state_t *state);
    
  • 参数:
    • sc – 从站配置
    • state – 需要写入的状态对象

ecrt_request_master

  • 简介:
    • ecrt_request_master() 是 EtherCAT 主站驱动库(EtherCAT Master Library)中的一个函数,用于请求 EtherCAT 主站的实例
  • 原型:
    1
    
    ec_master_t* ecrt_request_master(uint32_t master_id);
    
  • 参数:
    • master_id:一个无符号 32 位整数,表示所请求的 EtherCAT 主站的 ID
  • 返回值:
    • 成功时,返回 ec_master_t* 类型的指针,指向请求的 EtherCAT 主站实例。
    • 失败时,返回 NULL
  • 详解:
    • ecrt_request_master() 函数用于请求 EtherCAT 主站的实例,以便后续使用 EtherCAT Master Library 的其他函数进行 EtherCAT 网络的配置和操作。
    • 在调用 ecrt_request_master() 函数之前,需要确保 EtherCAT Master Library 已被正确初始化。
    • master_id 参数指定所请求的 EtherCAT 主站的 ID。在系统中存在多个 EtherCAT 主站时,可以使用不同的 ID 来区分它们。
    • 请求成功后,将返回指向请求的 EtherCAT 主站实例的指针。通过该指针,可以对 EtherCAT 主站进行配置、管理和操作。
    • 返回的 EtherCAT 主站实例指针将用作其他 EtherCAT Master Library 函数的参数,以标识要操作的 EtherCAT 主站。
  • 注:
    • 需要注意的是,ecrt_request_master() 函数只是请求 EtherCAT 主站实例的第一步。在使用 EtherCAT Master Library 进行 EtherCAT 网络的配置和操作之前,还需要使用其他函数进行更详细的初始化和配置,如 ecrt_master_open()、ecrt_master_activate() 等函数

ecrt_master_create_domain

  • 简介:
    • ecrt_master_create_domain() 是 EtherCAT 主站驱动库(EtherCAT Master Library)中的一个函数,用于创建 EtherCAT 主站的数据域(Domain)
  • 原型:
    1
    
    ec_domain_t* ecrt_master_create_domain(ec_master_t* master);
    
  • 参数:
    • master:指向已请求的 EtherCAT 主站实例的 ec_master_t* 类型指针
  • 返回值:
    • 成功时,返回 ec_domain_t* 类型的指针,指向创建的 EtherCAT 数据域(Domain)实例。
    • 失败时,返回 NULL
  • 详解:
    • ecrt_master_create_domain() 函数用于创建 EtherCAT 主站的数据域,用于管理 EtherCAT 从站设备的数据通信。
    • 在调用 ecrt_master_create_domain() 函数之前,需要先通过 ecrt_request_master() 函数请求 EtherCAT 主站的实例。
    • 参数 master 是指向已请求的 EtherCAT 主站实例的指针,用于指定创建数据域的主站。
    • 创建数据域后,可以使用其他 EtherCAT Master Library 函数来配置和管理数据域,如添加从站设备、映射对象字典、读取和写入数据等。
    • 返回的数据域实例指针将用作其他 EtherCAT Master Library 函数的参数,以标识要操作的数据域
  • 注:
    • 需要注意的是,ecrt_master_create_domain() 函数只是创建数据域的第一步。在使用数据域进行数据通信之前,还需要使用其他函数进行更详细的配置和映射,如 ecrt_domain_register()、ecrt_domain_queue() 等函数

ecrt_master_slave_config

  • 简介:
    • ecrt_master_slave_config() 是 EtherCAT 主站驱动库(EtherCAT Master Library)中的一个函数,用于配置 EtherCAT 主站中的从站设备
  • 原型:
    1
    
    ec_slave_config_t* ecrt_master_slave_config(ec_master_t* master, uint16_t alias, uint16_t position, uint32_t vendor_id, uint32_t product_code);
    
  • 参数:
    • master:指向已请求的 EtherCAT 主站实例的 ec_master_t* 类型指针。
    • alias:一个无符号 16 位整数,表示从站设备的别名(Alias)。
    • position:一个无符号 16 位整数,表示从站设备的位置(Position)。
    • vendor_id:一个无符号 32 位整数,表示从站设备的供应商 ID。
    • product_code:一个无符号 32 位整数,表示从站设备的产品码
  • 返回值:
    • 成功时,返回 ec_slave_config_t* 类型的指针,指向配置的从站设备实例。
    • 失败时,返回 NULL
  • 详解:
    • ecrt_master_slave_config() 函数用于配置 EtherCAT 主站中的从站设备。
    • 在调用 ecrt_master_slave_config() 函数之前,需要先通过 ecrt_request_master() 函数请求 EtherCAT 主站的实例。
    • 参数 master 是指向已请求的 EtherCAT 主站实例的指针,用于指定要配置的主站。
    • 参数 alias 和 position 是从站设备的别名和位置,用于唯一标识从站设备在 EtherCAT 网络中的位置。
    • 参数 vendor_id 和 product_code 是从站设备的供应商 ID 和产品码,用于识别特定的从站设备。
    • 配置从站设备后,可以使用其他 EtherCAT Master Library 函数来访问和操作该设备,如读取和写入从站设备的对象字典数据等。
    • 返回的从站设备实例指针将用作其他 EtherCAT Master Library 函数的参数,以标识要操作的从站设备
  • 注:
    • 需要注意的是,ecrt_master_slave_config() 函数只是配置从站设备的一部分。在配置从站设备后,还需要使用其他函数进行更详细的初始化和设置,如 ecrt_slave_config_pdos()、ecrt_slave_config_sdo() 等函数

ecrt_slave_config_pdos

  • 简介:
    • ecrt_slave_config_pdos() 是 EtherCAT 主站驱动库(EtherCAT Master Library)中的一个函数,用于配置从站设备的过程数据对象(Process Data Objects,PDOs)
  • 原型:
    1
    
    int ecrt_slave_config_pdos(ec_slave_config_t* config, int direction, const ec_pdo_entry_reg_t* entries);
    
  • 参数:
    • config:指向已配置的从站设备实例的 ec_slave_config_t* 类型指针。
    • direction:整数,表示 PDO 的方向。可以是以下值之一
      • EC_DIR_OUTPUT:表示输出 PDO。
      • EC_DIR_INPUT:表示输入 PDO
    • entries:指向 ec_pdo_entry_reg_t 结构的指针,定义了要配置的 PDO 条目
  • 返回值:
    • 成功时,返回 0。
    • 失败时,返回一个负数表示错误码。
  • 详解:
    • ecrt_slave_config_pdos() 函数用于配置从站设备的 PDOs,即定义输入和输出数据的结构和格式。
    • 在调用 ecrt_slave_config_pdos() 函数之前,需要先通过 ecrt_master_slave_config() 函数配置从站设备。
    • 参数 config 是指向已配置的从站设备实例的指针,用于指定要配置的从站设备。
    • 参数 direction 指定 PDO 的方向,可以是输出(发送给从站设备)或输入(从从站设备接收)。
    • 参数 entries 是指向 ec_pdo_entry_reg_t 结构的指针,用于定义要配置的 PDO 条目。
    • ec_pdo_entry_reg_t 结构定义了 PDO 条目的索引、子索引、数据类型、长度等信息,用于描述从站设备的数据结构。
    • 通过调用 ecrt_slave_config_pdos() 函数,可以将 PDO 条目注册到指定的方向上,并配置从站设备的数据通信
  • 注:
    • 需要注意的是,PDO 的配置涉及到更详细的数据结构和通信配置,如 PDO 映射、PDO 类型、PDO 数据长度等。具体的操作流程和函数使用方式应根据实际需求和 EtherCAT Master Library 的文档进行进一步的学习和了解

ecrt_domain_reg_pdo_entry_list

  • 简介:
    • ecrt_domain_reg_pdo_entry_list() 是 EtherCAT 主站驱动库(EtherCAT Master Library)中的一个函数,用于在数据域(Domain)中注册 PDO 条目列表
  • 原型:
    1
    
    int ecrt_domain_reg_pdo_entry_list(ec_domain_t* domain, const ec_pdo_entry_reg_t* entries);
    
  • 参数:
    • domain:指向已创建的数据域(Domain)实例的 ec_domain_t* 类型指针。
    • entries:指向 ec_pdo_entry_reg_t 结构的指针,定义了要注册的 PDO 条目列表
  • 返回值:
    • 成功时,返回 0。
    • 失败时,返回一个负数表示错误码
  • 说明:
    • ecrt_domain_reg_pdo_entry_list() 函数用于在数据域中注册 PDO 条目列表,将 PDO 条目与数据域进行关联。
    • 在调用 ecrt_domain_reg_pdo_entry_list() 函数之前,需要先通过 ecrt_master_create_domain() 函数创建数据域。
    • 参数 domain 是指向已创建的数据域实例的指针,用于指定要注册 PDO 条目的数据域。
    • 参数 entries 是指向 ec_pdo_entry_reg_t 结构的指针,定义了要注册的 PDO 条目列表。
    • ec_pdo_entry_reg_t 结构定义了 PDO 条目的索引、子索引、数据类型、长度等信息,用于描述从站设备的数据结构。
    • 通过调用 ecrt_domain_reg_pdo_entry_list() 函数,可以将 PDO 条目列表注册到指定的数据域中,以便进行数据通信
  • 注:
    • 需要注意的是,PDO 条目的注册与数据域的映射和通信相关。在注册 PDO 条目列表后,需要使用其他函数来配置和管理数据域,如 ecrt_domain_queue()、ecrt_domain_state() 等函数

ecrt_slave_config_dc

  • 简介:
    • ecrt_slave_config_dc() 是 EtherCAT 主站驱动库(EtherCAT Master Library)中的一个函数,用于配置从站设备的分布式时钟(Distributed Clock)
  • 原型:
    1
    
    int ecrt_slave_config_dc(ec_slave_config_t* config, uint32_t sync0_shift, uint32_t sync1_shift, uint32_t sync0_cycle_time, uint32_t sync1_cycle_time);
    
  • 参数:
    • config:指向已配置的从站设备实例的 ec_slave_config_t* 类型指针。
    • sync0_shift:一个无符号 32 位整数,表示 Sync 0 时钟的相位偏移。
    • sync1_shift:一个无符号 32 位整数,表示 Sync 1 时钟的相位偏移。
    • sync0_cycle_time:一个无符号 32 位整数,表示 Sync 0 时钟的周期时间。
    • sync1_cycle_time:一个无符号 32 位整数,表示 Sync 1 时钟的周期时间
  • 返回值:
    • 成功时,返回 0。
    • 失败时,返回一个负数表示错误码
  • 详解:
    • ecrt_slave_config_dc() 函数用于配置从站设备的分布式时钟,以便与 EtherCAT 网络的同步机制进行协调。
    • 在调用 ecrt_slave_config_dc() 函数之前,需要先通过 ecrt_master_slave_config() 函数配置从站设备。
    • 参数 config 是指向已配置的从站设备实例的指针,用于指定要配置的从站设备。
    • 参数 sync0_shift 和 sync1_shift 是用于同步时钟的相位偏移值,以微秒为单位。这些值决定了从站设备与主站之间的同步关系。
    • 参数 sync0_cycle_time 和 sync1_cycle_time 是 Sync 0 和 Sync 1 时钟的周期时间,以纳秒为单位。这些值决定了同步时钟的周期性。
    • 通过调用 ecrt_slave_config_dc() 函数,可以配置从站设备的分布式时钟参数,以确保从站设备在 EtherCAT 网络中的同步性能
  • 注:
    • 需要注意的是,分布式时钟的配置涉及到与 EtherCAT 网络的同步机制和时钟同步周期的相关设置

ecrt_master_activate

  • 简介
    • ecrt_master_activate() 是 EtherCAT 主站驱动库(EtherCAT Master Library)中的一个函数,用于激活 EtherCAT 主站。
  • 原型:
    1
    
    int ecrt_master_activate(ec_master_t* master);
    
  • 参数:
    • master:指向已请求的 EtherCAT 主站实例的 ec_master_t* 类型指针
  • 返回值:
    • 成功时,返回 0。
    • 失败时,返回一个负数表示错误码。
  • 详解:
    • ecrt_master_activate() 函数用于激活 EtherCAT 主站,启动 EtherCAT 网络通信。
    • 在调用 ecrt_master_activate() 函数之前,需要先通过 ecrt_request_master() 函数请求 EtherCAT 主站的实例,并完成主站的配置和初始化。
    • 参数 master 是指向已请求的 EtherCAT 主站实例的指针,用于指定要激活的主站。
    • 激活主站后,可以使用其他 EtherCAT Master Library 函数来访问和操作从站设备,如读取和写入从站设备的对象字典数据等。
    • 主站激活后,开始进行 EtherCAT 网络的实时通信,主站与从站设备之间进行数据交换和同步
  • 注:
    • 需要注意的是,激活主站是启动 EtherCAT 网络通信的关键步骤。在激活主站之前,需要确保主站的配置和初始化工作已经完成,并且从站设备已经正确配置和连接到 EtherCAT 网络

ecrt_domain_data

  • 简介:
    • ecrt_domain_data() 是 EtherCAT 主站驱动库(EtherCAT Master Library)中的一个函数,用于获取数据域(Domain)的数据缓冲区指针
  • 原型:
    1
    
    void* ecrt_domain_data(ec_domain_t* domain);
    
  • 参数:
    • domain:指向已创建的数据域(Domain)实例的 ec_domain_t* 类型指针
  • 返回值:
    • 返回 void* 类型的指针,指向数据域的数据缓冲区
  • 详解:
    • ecrt_domain_data() 函数用于获取数据域的数据缓冲区指针,以便读取和写入数据。
    • 在调用 ecrt_domain_data() 函数之前,需要先通过 ecrt_master_create_domain() 函数创建数据域。
    • 参数 domain 是指向已创建的数据域实例的指针,用于指定要获取数据的数据域。
    • 通过调用 ecrt_domain_data() 函数,可以获取数据域的数据缓冲区指针,从而进行数据的读取和写入。
    • 数据缓冲区的类型取决于数据域的配置,可以是一个数组或结构体,用于存储与从站设备进行通信的数据
  • 注:
    • 需要注意的是,数据域的数据缓冲区指针可以用于直接读取和写入数据,但在进行数据操作之前,需要确保 EtherCAT 主站已经激活并与从站设备进行通信

ecrt_release_master

  • 简介:
    • ecrt_release_master() 是 EtherCAT 主站驱动库(EtherCAT Master Library)中的一个函数,用于释放已分配的主站资源
  • 原型:
    1
    
    void ecrt_release_master(ec_master_t* master);
    
  • 参数:
    • master:指向已分配的 EtherCAT 主站实例的 ec_master_t* 类型指针
  • 详解:
    • ecrt_release_master() 函数用于释放已分配的 EtherCAT 主站资源。
    • 在使用 EtherCAT 主站进行通信时,需要先使用 ecrt_request_master() 函数来请求主站资源,并在使用完毕后调用 ecrt_release_master() 函数来释放这些资源。
    • 参数 master 是指向已分配的 EtherCAT 主站实例的指针,用于指定要释放的主站资源。
    • 调用 ecrt_release_master() 函数后,主站资源将被释放,该资源将可用于其他目的。
    • 在释放主站资源之前,应确保已完成所有与从站设备的通信和操作,并确保不再需要使用主站
  • 注:
    • 需要注意的是,在使用 EtherCAT 主站进行通信时,应始终遵循正确的初始化、配置、通信和释放资源的流程。确保按照 EtherCAT Master Library 的文档和指导进行正确的函数调用和顺序。

ecrt_master_application_time

  • 简介:
    • ecrt_master_application_time() 是 EtherCAT 主站驱动库(EtherCAT Master Library)中的一个函数,用于设置 EtherCAT 主站的应用程序时间
  • 原型: ```cpp #include

int ecrt_master_application_time(uint64_t cycletime);

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32

+ 参数:
  + cycletime:以纳秒为单位表示的 EtherCAT 主站的应用程序周期时间

+ 返回值:
  + 如果设置成功,返回 0。
  + 如果设置失败,返回一个负数,表示错误的原因

+ 详解:
  + ecrt_master_application_time() 函数用于设置 EtherCAT 主站的应用程序时间,即 EtherCAT 通信的周期时间。
  + 要使用 ecrt_master_application_time() 函数,需要包含头文件 <ethercat.h>  + cycletime 参数指定 EtherCAT 主站的应用程序周期时间,以纳秒为单位。它定义了 EtherCAT 网络中的数据交换周期。
  + 在 EtherCAT 网络中,所有从站设备都按照相同的应用程序周期时间进行通信。
  + 通过调用 ecrt_master_application_time() 函数,可以设置主站的应用程序周期时间,以确保从站设备之间的同步性。
  + 设置应用程序周期时间后,主站将按照该周期周期性地发送和接收数据,从而实现同步和通信。
  + 返回值为 0 表示设置成功,否则表示设置失败,可以根据返回值进行错误处理

+ 注:
  + 需要注意的是,使用 ecrt_master_application_time() 函数进行 EtherCAT 主站的应用程序时间设置时,需要确保对应的 EtherCAT 主站驱动库支持该功能,并且遵循相关的使用要求和限制

---

## ecrt_master_receive

+ 简介:
  + ecrt_master_receive() 是 EtherCAT 主站驱动库(EtherCAT Master Library)中的一个函数,用于接收从站设备发送的数据

+ 原型:
```cpp
#include <ethercat.h>

int ecrt_master_receive(ec_master_t *master);
  • 参数:
    • master:指向 EtherCAT 主站的指针,表示要接收数据的主站
  • 返回值:
    • 如果接收数据成功,返回 0。
    • 如果接收数据失败,返回一个负数,表示错误的原因
  • 详解:
    • ecrt_master_receive() 函数用于从 EtherCAT 主站接收从站设备发送的数据。
    • 要使用 ecrt_master_receive() 函数,需要包含头文件
    • 通过调用 ecrt_master_receive() 函数,可以从主站接收数据,并将其存储在主站的内部数据结构中,以供后续处理和访问。
    • 接收的数据通常是从站设备发送的输入数据或状态信息。
    • ecrt_master_receive() 函数会阻塞当前线程,直到接收到数据或发生错误。
    • 返回值为 0 表示接收数据成功,否则表示接收数据失败,可以根据返回值进行错误处理
  • 注:
    • 需要注意的是,使用 ecrt_master_receive() 函数接收从站设备发送的数据时,需要确保 EtherCAT 主站驱动库已经成功初始化,并且在调用该函数之前已经进行了相关的配置和启动操作。具体的使用方法和注意事项,应该根据您所使用的 EtherCAT 主站驱动库的文档和示例进行适当的调整和使用。

ecrt_domain_process

  • 简介:
    • ecrt_domain_process() 是 EtherCAT 主站驱动库(EtherCAT Master Library)中的一个函数,用于处理 EtherCAT 领域(Domain)的数据
  • 原型: ```cpp #include

int ecrt_domain_process(ec_domain_t *domain);

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32

+ 参数:
  + domain:指向要处理的 EtherCAT 领域的指针。

+ 返回值:
  + 如果处理成功,返回 0。
  + 如果处理失败,返回一个负数,表示错误的原因。

+ 详解:
  + ecrt_domain_process() 函数用于处理 EtherCAT 领域中的数据,即实现从站设备的数据交换。
  + 要使用 ecrt_domain_process() 函数,需要包含头文件 <ethercat.h>  + 通过调用 ecrt_domain_process() 函数,可以将 EtherCAT 领域中的数据发送给从站设备,并从从站设备接收数据。
  + 在 EtherCAT 网络中,一个领域包含了一组 PDO(Process Data Object),每个 PDO 包含了从站设备的输入或输出数据。
  + 调用 ecrt_domain_process() 函数时,主站会将领域中的数据发送到各个从站设备,并等待从站设备发送响应数据。
  + ecrt_domain_process() 函数会阻塞当前线程,直到数据交换完成或发生错误。
  + 返回值为 0 表示处理成功,否则表示处理失败,可以根据返回值进行错误处理

+ 注:
  + 需要注意的是,使用 ecrt_domain_process() 函数处理 EtherCAT 领域的数据时,需要确保 EtherCAT 主站驱动库已经成功初始化,并且 EtherCAT 主站和从站设备已经正确配置和启动。具体的使用方法和注意事项,应该根据您所使用的 EtherCAT 主站驱动库的文档和示例进行适当的调整和使用。

---

## ecrt_master_state

+ 简介:
  + ecrt_master_state() 是 EtherCAT 主站驱动库(EtherCAT Master Library)中的一个函数,用于获取 EtherCAT 主站的状态信息

+ 原型:
```cpp
#include <ethercat.h>

ec_master_state_t ecrt_master_state(ec_master_t *master);
  • 参数:
    • master:指向 EtherCAT 主站的指针,表示要获取状态信息的主站
  • 返回值:
    • ec_master_state_t 类型的值,表示 EtherCAT 主站的状态信息
  • 详解:
    • ecrt_master_state() 函数用于获取 EtherCAT 主站的状态信息,如主站是否启动、错误状态等。
    • 要使用 ecrt_master_state() 函数,需要包含头文件
    • 通过调用 ecrt_master_state() 函数,可以获取主站的当前状态信息。
    • 返回的 ec_master_state_t 类型的值包含了主站的各种状态信息,如启动状态、错误状态、从站数量等。
    • ec_master_state_t 是一个结构体,包含了以下成员变量:
      • int slaves_responding:应答的从站数量。
      • int al_states:AL 状态。
      • int link_up:链路是否连接。
      • int linking:链路状态。
      • int operational:主站是否进入操作状态。
      • int error_flag:错误标志。
      • int slave_states:从站状态
    • 您可以通过访问返回的 ec_master_state_t 结构体的成员变量来获取各个状态信息。
    • 使用 ecrt_master_state() 函数可以帮助您监控和了解 EtherCAT 主站的状态,以便进行适当的处理和错误处理
  • 注:
    • 需要注意的是,使用 ecrt_master_state() 函数获取 EtherCAT 主站状态信息时,需要确保 EtherCAT 主站驱动库已经成功初始化,并且主站已经正确配置和启动。具体的使用方法和注意事项,应根据您所使用的 EtherCAT 主站驱动库的文档和示例进行适当的调整和使用

ecrt_slave_config_state

  • 简介:
    • ecrt_slave_config_state() 是 EtherCAT 主站驱动库(EtherCAT Master Library)中的一个函数,用于获取 EtherCAT 从站配置对象的状态信息
  • 原型: ```cpp #include

ec_slave_config_state_t ecrt_slave_config_state(ec_slave_config_t *slave_config);

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37

+ 参数:
  + slave_config:指向 EtherCAT 从站配置对象的指针,表示要获取状态信息的从站配置对象

+ 返回值:
  + ec_slave_config_state_t 类型的值,表示 EtherCAT 从站配置对象的状态信息

+ 详解:
  + ecrt_slave_config_state() 函数用于获取 EtherCAT 从站配置对象的状态信息,如从站是否应答、错误状态等。
  + 要使用 ecrt_slave_config_state() 函数,需要包含头文件 <ethercat.h>  + 通过调用 ecrt_slave_config_state() 函数,可以获取从站配置对象的当前状态信息。
  + 返回的 ec_slave_config_state_t 类型的值包含了从站配置对象的各种状态信息,如从站是否应答、错误状态、应答延迟等。
  + ec_slave_config_state_t 是一个结构体,包含了以下成员变量:
    + int online:从站是否在线。
    + int operational:从站是否进入操作状态。
    + int al_state:从站的 AL 状态。
    + int state:从站的状态。
    + int error_flag:错误标志。
    + int response_delay:应答延迟
  + 您可以通过访问返回的 ec_slave_config_state_t 结构体的成员变量来获取各个状态信息。
  + 使用 ecrt_slave_config_state() 函数可以帮助您监控和了解 EtherCAT 从站配置对象的状态,以便进行适当的处理和错误处理

+ 注:
  + 需要注意的是,使用 ecrt_slave_config_state() 函数获取 EtherCAT 从站配置对象状态信息时,需要确保 EtherCAT 主站驱动库已经成功初始化,并且相关的从站配置对象已经正确配置和启动。具体的使用方法和注意事项,应根据您所使用的 EtherCAT 主站驱动库的文档和示例进行适当的调整和使用

---

## ecrt_master_sync_reference_clock

+ 简介:
  + ecrt_master_sync_reference_clock() 是 EtherCAT 主站驱动库(EtherCAT Master Library)中的一个函数,用于同步 EtherCAT 主站的参考时钟。

+ 原型:
```cpp
#include <ethercat.h>

void ecrt_master_sync_reference_clock(ec_master_t *master);
  • 参数:
    • master:指向 EtherCAT 主站的指针,表示要同步参考时钟的主站。
  • 详解:
    • ecrt_master_sync_reference_clock() 函数用于同步 EtherCAT 主站的参考时钟,以确保整个 EtherCAT 网络的同步性。
    • 要使用 ecrt_master_sync_reference_clock() 函数,需要包含头文件
    • 在 EtherCAT 网络中,参考时钟用于同步主站和从站设备的通信,以保证数据的准确性和一致性。
    • 调用 ecrt_master_sync_reference_clock() 函数时,主站会发送同步命令,从而启动参考时钟的同步过程。
    • 在同步过程中,主站会等待从站设备应答并进行相应的时钟调整,以达到整个网络的同步。
    • 一旦参考时钟同步完成,主站和从站设备之间的通信将在同一时基上进行。
    • ecrt_master_sync_reference_clock() 函数通常在 EtherCAT 网络启动之前被调用,以确保网络中的设备在通信开始之前具有一致的时钟。
    • 请注意,EtherCAT 网络中的参考时钟同步是非常重要的,因为它直接影响到数据的传输和同步性能
  • 注:
    • 需要注意的是,使用 ecrt_master_sync_reference_clock() 函数进行参考时钟同步时,需要确保 EtherCAT 主站驱动库已经成功初始化,并且主站和从站设备已经正确配置和启动。具体的使用方法和注意事项,应根据您所使用的 EtherCAT 主站驱动库的文档和示例进行适当的调整和使用

ecrt_master_sync_slave_clocks

  • 简介:
    • ecrt_master_sync_slave_clocks() 是 EtherCAT 主站驱动库(EtherCAT Master Library)中的一个函数,用于同步 EtherCAT 从站的时钟
  • 原型: ```cpp #include

void ecrt_master_sync_slave_clocks(ec_master_t *master);

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29

+ 参数:
  + master:指向 EtherCAT 主站的指针,表示要同步从站时钟的主站

+ 详解:
  + ecrt_master_sync_slave_clocks() 函数用于同步 EtherCAT 主站下所有从站的时钟,以确保整个 EtherCAT 网络中从站设备之间的时钟同步。
  + 要使用 ecrt_master_sync_slave_clocks() 函数,需要包含头文件 <ethercat.h>  + 在 EtherCAT 网络中,从站设备的时钟同步是重要的,以保证数据的传输和同步性能。
  + 调用 ecrt_master_sync_slave_clocks() 函数时,主站会发送同步命令,通知所有从站设备进行时钟调整。
  + 从站设备会根据主站发送的同步命令进行时钟调整,以达到整个网络的同步。
  + 一旦从站时钟同步完成,主站和从站设备之间的通信将在同一时基上进行。
  + ecrt_master_sync_slave_clocks() 函数通常在 EtherCAT 网络启动之前被调用,以确保网络中的所有从站设备在通信开始之前具有一致的时钟。
  + 请注意,EtherCAT 网络中从站的时钟同步对于数据的传输和同步性能非常重要

+ 注:
  + 需要注意的是,使用 ecrt_master_sync_slave_clocks() 函数进行从站时钟同步时,需要确保 EtherCAT 主站驱动库已经成功初始化,并且主站和从站设备已经正确配置和启动。具体的使用方法和注意事项,应根据您所使用的 EtherCAT 主站驱动库的文档和示例进行适当的调整和使用

---

## ecrt_domain_queue

+ 简介:
  + ecrt_domain_queue() 是 EtherCAT 主站驱动库(EtherCAT Master Library)中的一个函数,用于将数据写入 EtherCAT 数据域(Domain)

+ 原型:
```cpp
#include <ethercat.h>

void ecrt_domain_queue(ec_domain_t *domain);
  • 参数:
    • domain:指向 EtherCAT 数据域(Domain)的指针,表示要将数据写入的数据域
  • 详解:
    • ecrt_domain_queue() 函数用于将数据写入 EtherCAT 数据域,以进行数据传输和同步。
    • 要使用 ecrt_domain_queue() 函数,需要包含头文件
    • EtherCAT 数据域是用于存储和传输与从站设备通信的数据的内存区域。
    • 通过调用 ecrt_domain_queue() 函数,可以将待发送的数据放入数据域中,以待发送到从站设备。
    • 调用 ecrt_domain_queue() 函数后,数据将进入数据域的发送队列,等待适当的时间点发送到从站设备。
    • 一旦数据被发送到从站设备,从站设备将读取并处理这些数据,以进行数据交换和通信。
    • 使用 ecrt_domain_queue() 函数可以实现周期性的数据传输和同步,以满足实时控制系统的要求
  • 注:
    • 需要注意的是,使用 ecrt_domain_queue() 函数进行数据域写入时,需要确保 EtherCAT 主站驱动库已经成功初始化,并且相关的数据域已经正确配置和启动。具体的使用方法和注意事项,应根据您所使用的 EtherCAT 主站驱动库的文档和示例进行适当的调整和使用

ecrt_master_send

  • 简介:
    • ecrt_master_send() 是 EtherCAT 主站驱动库(EtherCAT Master Library)中的一个函数,用于发送数据到 EtherCAT 从站设备。
  • 原型: ```cpp #include

int ecrt_master_send(ec_master_t *master); ```

  • 参数:
    • master:指向 EtherCAT 主站的指针,表示要发送数据的主站
  • 返回值:
    • ecrt_master_send() 函数返回一个整数值,表示发送操作的结果。通常情况下,0 表示成功,负数表示失败
  • 详解:
    • ecrt_master_send() 函数用于向 EtherCAT 从站设备发送数据,以进行数据传输和通信。
    • 要使用 ecrt_master_send() 函数,需要包含头文件
    • 在 EtherCAT 网络中,主站负责向从站设备发送数据,并处理从站设备的应答。
    • 通过调用 ecrt_master_send() 函数,可以触发主站向从站设备发送先前通过 ecrt_domain_queue() 函数放置在数据域中的数据。
    • 当调用 ecrt_master_send() 函数时,主站将按照预定的通信周期发送数据到从站设备。
    • ecrt_master_send() 函数会阻塞主线程,直到发送操作完成或发生错误。
    • 发送操作完成后,可以通过调用 ecrt_master_state() 函数来检查发送的结果状态
  • 注:
    • 需要注意的是,使用 ecrt_master_send() 函数发送数据时,需要确保 EtherCAT 主站驱动库已经成功初始化,并且相关的数据域已经正确配置和启动。具体的使用方法和注意事项,应根据您所使用的 EtherCAT 主站驱动库的文档和示例进行适当的调整和使用