简介
- 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
5typedef 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
5typedef 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
7typedef 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
5typedef 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
5typedef 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
5typedef 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
5typedef 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
10typedef 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 主站的应用程序时间
原型:
1
2
3
int ecrt_master_application_time(uint64_t cycletime);参数:
- 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)中的一个函数,用于接收从站设备发送的数据
原型:
1
2
3
int ecrt_master_receive(ec_master_t *master);参数:
- master:指向 EtherCAT 主站的指针,表示要接收数据的主站
返回值:
- 如果接收数据成功,返回 0。
- 如果接收数据失败,返回一个负数,表示错误的原因
详解:
- ecrt_master_receive() 函数用于从 EtherCAT 主站接收从站设备发送的数据。
- 要使用 ecrt_master_receive() 函数,需要包含头文件 <ethercat.h>。
- 通过调用 ecrt_master_receive() 函数,可以从主站接收数据,并将其存储在主站的内部数据结构中,以供后续处理和访问。
- 接收的数据通常是从站设备发送的输入数据或状态信息。
- ecrt_master_receive() 函数会阻塞当前线程,直到接收到数据或发生错误。
- 返回值为 0 表示接收数据成功,否则表示接收数据失败,可以根据返回值进行错误处理
注:
- 需要注意的是,使用 ecrt_master_receive() 函数接收从站设备发送的数据时,需要确保 EtherCAT 主站驱动库已经成功初始化,并且在调用该函数之前已经进行了相关的配置和启动操作。具体的使用方法和注意事项,应该根据您所使用的 EtherCAT 主站驱动库的文档和示例进行适当的调整和使用。
ecrt_domain_process
简介:
- ecrt_domain_process() 是 EtherCAT 主站驱动库(EtherCAT Master Library)中的一个函数,用于处理 EtherCAT 领域(Domain)的数据
原型:
1
2
3
int ecrt_domain_process(ec_domain_t *domain);参数:
- 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 主站的状态信息
原型:
1
2
3
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() 函数,需要包含头文件 <ethercat.h>。
- 通过调用 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 从站配置对象的状态信息
原型:
1
2
3
ec_slave_config_state_t ecrt_slave_config_state(ec_slave_config_t *slave_config);参数:
- 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 主站的参考时钟。
原型:
1
2
3
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.h>。
- 在 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 从站的时钟
原型:
1
2
3
void ecrt_master_sync_slave_clocks(ec_master_t *master);参数:
- 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)
原型:
1
2
3
void ecrt_domain_queue(ec_domain_t *domain);参数:
- domain:指向 EtherCAT 数据域(Domain)的指针,表示要将数据写入的数据域
详解:
- ecrt_domain_queue() 函数用于将数据写入 EtherCAT 数据域,以进行数据传输和同步。
- 要使用 ecrt_domain_queue() 函数,需要包含头文件 <ethercat.h>。
- 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 从站设备。
原型:
1
2
3
int ecrt_master_send(ec_master_t *master);参数:
- master:指向 EtherCAT 主站的指针,表示要发送数据的主站
返回值:
- ecrt_master_send() 函数返回一个整数值,表示发送操作的结果。通常情况下,0 表示成功,负数表示失败
详解:
- ecrt_master_send() 函数用于向 EtherCAT 从站设备发送数据,以进行数据传输和通信。
- 要使用 ecrt_master_send() 函数,需要包含头文件 <ethercat.h>。
- 在 EtherCAT 网络中,主站负责向从站设备发送数据,并处理从站设备的应答。
- 通过调用 ecrt_master_send() 函数,可以触发主站向从站设备发送先前通过 ecrt_domain_queue() 函数放置在数据域中的数据。
- 当调用 ecrt_master_send() 函数时,主站将按照预定的通信周期发送数据到从站设备。
- ecrt_master_send() 函数会阻塞主线程,直到发送操作完成或发生错误。
- 发送操作完成后,可以通过调用 ecrt_master_state() 函数来检查发送的结果状态
注:
- 需要注意的是,使用 ecrt_master_send() 函数发送数据时,需要确保 EtherCAT 主站驱动库已经成功初始化,并且相关的数据域已经正确配置和启动。具体的使用方法和注意事项,应根据您所使用的 EtherCAT 主站驱动库的文档和示例进行适当的调整和使用