imtoken钱包下载app
数字资产服务平台

imtoken钱包下载app是全球著名的数字资产交易平台之一,主要面向全球用户提供比特币、莱特币、以太币等数字资产的币币和衍生品交易服务。

比特派官网app下载网址|ethercat 初始化

时间:2024-03-14 16:46:17

【原创】EtherCAT主站IgH解析(一)--主站初始化、状态机与EtherCAT报文 - 沐多 - 博客园

【原创】EtherCAT主站IgH解析(一)--主站初始化、状态机与EtherCAT报文 - 沐多 - 博客园

会员

周边

新闻

博问

AI培训

云市场

所有博客

当前博客

我的博客

我的园子

账号设置

简洁模式 ...

退出登录

注册

登录

沐多

博客园

首页

新随笔

联系

管理

订阅

【原创】EtherCAT主站IgH解析(一)--主站初始化、状态机与EtherCAT报文

目录0 获取源码1 启动脚本1.1 start1.2 stop2 主站实例创建2.1 Master Phases2.2 数据报与状态机数据报状态机2.3 master状态机及数据报初始化2.4 初始化EtherCAT device2.5 设置IDLE 线程的发送间隔:2.6 初始化字符设备3 网卡4 IDLE阶段内核线程4.1 数据报发送4.2 数据报接收

版权声明:本文为本文为博主原创文章,转载请注明出处。如有问题,欢迎指正。博客地址:https://www.cnblogs.com/wsg1100/

0 获取源码

IgH EtherCAT Master现已迁移到gitlab:https://gitlab.com/etherlab.org/ethercat,可以使用以下命令克隆存储库:

git clone https://gitlab.com/etherlab.org/ethercat.git

git checkout stable-1.5

上面的是igh官方的仓库,下面是其他Ethercat主站:

https://github.com/ribalda/ethercat 基于官方,功能更为全面的igh etehrcat主站。

https://github.com/leducp/KickCAT 一个C++写的全新etehrcat主站,目前功能不完善。

https://github.com/ethercrab-rs/ethercrab 一个纯rust语言编写的全新etehrcat主站,目前功能不完善。

本文主要讲igh。

1 启动脚本

igh通过脚本来启动,可以是systemd、init.d或sysconfig。分别位于源码script目录下:

对于systemd方式,编译时由ethercat.service.in文件生成ethercat.service。ethercat.service中指定了执行文件为ethercatctl.ethercatctl文件由``ethercatctl.in`生成。init.d和sysconfig类似,都是生成一个可执行脚本,且脚本完成的工作一致,主要完成加载主站模块、网卡驱动、给主站内核模块传递参数、卸载模块等操作。

ethercat.conf共同的配置文件,配置主站使用的网卡、驱动等信息。下面看脚本start和stop所做的工作。

1.1 start

加载ec_master.ko

模块参数:

main_devices :主网卡MAC地址,多个main_devices 表示创建多个主站,MAC参数个数master_count。

backup_devices :备用网卡MAC地址,多个backup_devices 表示创建多个主站,MAC参数个数backup_count。

debug_level :调试level,调试信息输出级别。

eoe_interfaces eoe接口,eoe_count表示eoe_interfaces 的个数。

eoe_autocreate 是否自动创建eoe handler。

pcap_size Pcap buffer size。

遍历配置文件中/etc/sysconfig/ethercat的环境变量DEVICE_MODULES,位于ethercat.conf中。

在每个DEVICE_MODULES前添加前缀ec_替换,如DEVICE_MODULES为igb的话,添加前缀后为ec_igb。

modinfo检查该模块是否存在。

对于非generic和rtdm的驱动,需要先将网卡与当前驱动unbind,unbind后的网卡才能被新驱动接管。

加载该驱动。

start加载了两个内核模块,ec_master.ko和网卡驱动ec_xxx.ko,ec_master先根据内核参数(网卡MAC)来创建主站实例,此时主站处于Orphaned phase。后续加载网卡驱动ec_xxx.ko,执行网卡驱动probe,根据MAC地址将网卡与主站实例匹配,此时主站得到操作的网卡设备,进入Idle phase。详细过程见后文。

1.2 stop

卸载内核模块ec_master.ko和网卡驱动ec_xxx.ko。

遍历配置文件中的环境变量DEVICE_MODULES。

在每个DEVICE_MODULES前添加前缀‘ec_’替换。

lsmod检查该模块是否被加载。

卸载模块。

后文“主站”和”master“均表示主站或主站实例对象,slave和从站表示从站或从站对象,中英混用,不刻意区分。

2 主站实例创建

一个使用IgH的控制器中可以有多个EtherCAT主站,每个主站可以绑定了一个主网卡和一个备用网卡,一般备用网卡不使用,线缆冗余功能时才使用备用网卡(文中假设只有一个主网卡)。

start过程中执行insmod ec_master.ko,这个时候,先调用的就是 module_init 调用的初始化函数ec_init_module()。先根据参数main_devices 的个数master_count,每个master需要一个设备节点来与应用程序交互,所以master_count决定需要创建多少个matser和多少个字符设备;

这里先分配注册master_count个字符设备的主次设备号device_number和名称,这样每个master对应的设备在文件系统中就是/dev/EtherCAT0、/dev/EtherCAT1...(Linux下)。

if (master_count) {

if (alloc_chrdev_region(&device_number,

0, master_count, "EtherCAT")) {

EC_ERR("Failed to obtain device number(s)!\n");

...

}

}

class = class_create(THIS_MODULE, "EtherCAT");

解析模块参数得到MAC地址,保存到数组macs中。

for (i = 0; i < master_count; i++) {

ret = ec_mac_parse(macs[i][0], main_devices[i], 0);

if (i < backup_count) {

ret = ec_mac_parse(macs[i][1], backup_devices[i], 1);

}

}

分配master_count个主站对象的内存,调用ec_master_init()初始化这些实例。

if (master_count) {

if (!(masters = kmalloc(sizeof(ec_master_t) * master_count,

GFP_KERNEL))) {

...

}

}

for (i = 0; i < master_count; i++) {

ret = ec_master_init(&masters[i], i, macs[i][0], macs[i][1],

device_number, class, debug_level);

...

}

2.1 Master Phases

igh中,状态机是其核心思想,一切操作基于状态机来执行,对创建的每个EtherCAT主站实例都需要经过如下阶段转换(见图2.3),主站各阶段操作如下:

Orphaned phase 此时主站实例已经分配初始化,正在等待以太网设备连接,即还没有与网卡驱动联系起来,此时无法使用总线通讯。

Idle phase 当主站与网卡绑定后,Idle线程ec_master_idle_thread开始运行,主站处于IDLE状态,ec_master_idle_thread主要完成从站拓扑扫描、配置站点地址等工作。该阶段命令行工具能够访问总线,但无法进行过程数据交换,因为还缺少总线配置。

Operation phase 应用程序请求主站提供总线配置并激活主站后,主站处于operation状态,ec_master_idle_thread停止运行,内核线程变为ec_master_operation_thread,之后应用可周期交换过程数据。

具体的后面会说到。

2.2 数据报与状态机

继续看master初始化代码ec_master_init前,我们先了解数据报与状态机的关系,这对后续理解很有帮助。

数据报

EtherCAT是以以太网为基础的现场总线系统,EtherCAT使用标准的IEEE802.3以太网帧,在主站一侧使用标准的以太网控制器,不需要额外的硬件。并在以太网帧头使用以太网类型0x88A4来和其他以太网帧相区别(EtherCAT数据还可以通过UDP/IP 来传输,本文已忽略),标准的IEEE802.3以太网帧中数据部分为EtherCAT的数据,标准的IEEE802.3以太网帧与EtherCAT数据帧关系如下:

EtherCAT数据位于以太网帧数据区,EtherCAT数据由EtherCAT头和若干EtherCAT数据报文组成。其中EtheRCAT头中记录了EtherCAT数据报的长度、和类型,类型为1表示与从站通讯。EtherCAT数据报文内包含多个子报文,每个子报文又由子报文头、数据和WKC域组成。子报文结构含义如下。

整个EtherCAT网络形成一个环状,主站与从站之间是通过EtherCAT数据报来交互,一个EtherCAT报文从网卡TX发出后,从站ESC芯片EtherCAT报文进行交换数据,最后该报文回到主站。网上有个经典的EtherCAT动态图(刷新后动态图重新播放).

认识EtherCAT数据帧结构后,我们看IgH内是如何表示一个EtherCAT数据报文的?EtherCAT数据报文在igh中用对象ec_datagram_t表示。

typedef struct {

struct list_head queue; /**< 发送和接收时插入主站帧队列. */

struct list_head sent; /**< 已发送数据报的主站列表项. */

ec_device_index_t device_index; /**< 发送/接收数据报的设备。 */

ec_datagram_type_t type; /**< 帧类型 (APRD, BWR, etc.). */

uint8_t address[EC_ADDR_LEN]; /**< Recipient address. */

uint8_t *data; /**< 数据. */

ec_origin_t data_origin; /**< 数据保存的地方. */

size_t mem_size; /**< Datagram \a data memory size. */

size_t data_size; /**< Size of the data in \a data. */

uint8_t index; /**< Index (set by master). */

uint16_t working_counter; /**< 工作计数. */

ec_datagram_state_t state; /**数据帧状态 */

#ifdef EC_HAVE_CYCLES

cycles_t cycles_sent; /**< Time, 数据报何时发送. */

#endif

unsigned long jiffies_sent; /**< Jiffies,数据报何时发送. */

#ifdef EC_HAVE_CYCLES

cycles_t cycles_received; /**< Time, 何时被接收. */

#endif

unsigned long jiffies_received; /**< Jiffies,何时被接收. */

unsigned int skip_count; /**< 尚未收到的重新排队数. */

unsigned long stats_output_jiffies; /**< Last statistics output. */

char name[EC_DATAGRAM_NAME_SIZE]; /**< Description of the datagram. */

} ec_datagram_t;

可以看到上面子报文中各字段大都在ec_datagram_t中有表示了,不过多介绍,其它几个成员简单介绍下,

device_index表示这个数据报是属于哪个网卡设备发送接收的,IgH中一个master实例可以使用多个多个网卡设备来发送/接收EtherCAT数据帧,device_index就是表示master下的网络设备的。

data_origin表示每个master管理着多个空闲的ec_datagram_t,这些ec_datagram_t分成了三类,给不同的状态机使用,具体的后文马上会细说,data_origin就是表示这个ec_datagram_t是属于哪类的。

index表示该数据报是EtherCAT数据区的第index个子报文,在master发送一个完整的EtherCAT数据报时,组装以太网数据帧时使用。

data这个指向子报文的数据内存区,由于每个子报文交换数据不同,其大小不同,所以数据区为动态分配,mem_size表示的就是分配的大小。

data_size表示数据报操作的数据大小,比如该数据报用于读从站的某个寄存器,该值就是这个寄存器的大小。

jiffies_sent、jiffies_received、cycles_sent、cycles_received使用不同时钟方式是记录数据帧发送接收时间的,用于统计。

ec_datagram_state_t表示数据报的状态,每个数据报(ec_datagram_t)也是基于状态来处理,有6种状态:

EC_DATAGRAM_INIT :数据报已经初始化

EC_DATAGRAM_QUEUED :插入发送队列准备发送

EC_DATAGRAM_SENT :已经发送(还存在队列中)

EC_DATAGRAM_RECEIVED:该数据报已接收,并从发送队列删除

EC_DATAGRAM_TIMED_OUT :该数据报发送后,接收超时,从发送队列删除

EC_DATAGRAM_ERROR :发送和接收过程中出错(从队列删除),校验错误、不匹配等。

M位在master发送时组装EtherCAT数据帧时确定,接收时也根据该位判断后面还有没有子报文。

数据报对象初始化由函数ec_datagram_init()完成:

void ec_datagram_init(ec_datagram_t *datagram /**< EtherCAT datagram. */)

{

INIT_LIST_HEAD(&datagram->queue); // mark as unqueued

datagram->device_index = EC_DEVICE_MAIN; /*默认主设备使用*/

datagram->type = EC_DATAGRAM_NONE; /*数据报类型*/

memset(datagram->address, 0x00, EC_ADDR_LEN); /*数据报地址清零*/

datagram->data = NULL;

datagram->data_origin = EC_ORIG_INTERNAL; /*默认内部数据*/

datagram->mem_size = 0;

datagram->data_size = 0;

datagram->index = 0x00;

datagram->working_counter = 0x0000;

datagram->state = EC_DATAGRAM_INIT; /*初始状态*/

#ifdef EC_HAVE_CYCLES

datagram->cycles_sent = 0;

#endif

datagram->jiffies_sent = 0;

#ifdef EC_HAVE_CYCLES

datagram->cycles_received = 0;

#endif

datagram->jiffies_received = 0;

datagram->skip_count = 0;

datagram->stats_output_jiffies = 0;

memset(datagram->name, 0x00, EC_DATAGRAM_NAME_SIZE);

}

状态机

说完IgH数据报对象,我们来看有限状态机(fsm),有限状态机(fsm):表示有限个状态以及在这些状态之间的转移和动作等行为的数学模型。说起状态机,相信大家大学时候都有用过吧,不管是单片机、FPGA,用它写按键、菜单、协议处理、控制器什么的爽的一塌糊涂。其实我们使用的计算机就是本就是基于状态机作为计算模型的,它对数字系统的设计具有十分重要的作用。另外Linux TCP协议也是由状态机实现。

同样igh主站内部机制使用有限状态机来实现,IgH内状态机的基本表示如下:

struct ec_fsm_xxx {

ec_datagram_t *datagram; /**< 主站状态机使用的数据报对象 */

void (*state)(ec_fsm_master_t *); /**< 状态函数 */

....

};

IgH EtherCAT协议栈几乎所有功能通过状态机实现,每个状态机管理着某个对象的状态、功能实现的状态装换,而这些状态转换是基于EtherCAT数据报来进行的,如状态机A0状态函数填充datagram,经EtherCAT数据帧发出后,经过slave ESC处理,回到网卡接收端接收后,交给状态机A1状态的下一个状态函数解析处理。所以每个状态机内都包含有指向该状态机操作的数据报对象指针datagram和状态执行的状态函数void (*state)(ec_fsm_master_t *);

总结一句话:状态机是根据数据报的状态来执行,每个状态机都需要操作一个数据报对象。

现在知道了状态机与数据报的关系,下面介绍IgH EtherCAT协议栈中有哪些状态机,及状态机使用的数据报对象是从哪里分配如何管理的。

master状态机

前面说到主站具有的三个阶段,当主站与网卡设备attach后进入Idle phase,处于Idle phase后,开始执行主站状态机。

主站状态机包含1个主状态机和许多子状态机,matser状态机主要目的是:

Bus monitoring 监控EtherCAT总线拓扑结构,如果发生改变,则重新扫描。

Slave con fguration 监视从站的应用程序层状态。如果从站未处于其应有的状态,则从站将被(重新)配置

Request handling 请求处理(源自应用程序或外部来源),主站任务应该处理异步请求,例如:SII访问,SDO访问或类似。

主状态机ec_fsm_master_t结构如下:

struct ec_fsm_master {

ec_master_t *master; /**< master the FSM runs on */

ec_datagram_t *datagram; /**< 主站状态机使用的数据报对象 */

unsigned int retries; /**< retries on datagram timeout. */

void (*state)(ec_fsm_master_t *); /**< master state function */

ec_device_index_t dev_idx; /**< Current device index (for scanning etc.).

*/

int idle; /**< state machine is in idle phase */

unsigned long scan_jiffies; /**< beginning of slave scanning */

uint8_t link_state[EC_MAX_NUM_DEVICES]; /**< Last link state for every

device. */

unsigned int slaves_responding[EC_MAX_NUM_DEVICES]; /**<每个设备的响应从站数。*/

unsigned int rescan_required; /**< A bus rescan is required. */

ec_slave_state_t slave_states[EC_MAX_NUM_DEVICES]; /**< AL states of

responding slaves for

every device. */

ec_slave_t *slave; /**< current slave */

ec_sii_write_request_t *sii_request; /**< SII write request */

off_t sii_index; /**< index to SII write request data */

ec_sdo_request_t *sdo_request; /**< SDO request to process. */

ec_fsm_coe_t fsm_coe; /**< CoE state machine */

ec_fsm_soe_t fsm_soe; /**< SoE state machine */

ec_fsm_pdo_t fsm_pdo; /**< PDO configuration state machine. */

ec_fsm_change_t fsm_change; /**< State change state machine */

ec_fsm_slave_config_t fsm_slave_config; /**< slave state machine */

ec_fsm_slave_scan_t fsm_slave_scan; /**< slave state machine */

ec_fsm_sii_t fsm_sii; /**< SII state machine */

};

可以看到,主站状态机结构下还有很多子状态机,想象一下如果主站的所有功能通过一个状态机来完成,那么这个状态机的状态数量、各状态之间的联系会有多恐怖,复杂性级别将会提高到无法管理的水平。为此,IgH中,将EtherCAT主状态机的某些功能用子状态机完成。这有助于封装相关工作流,并且避免“状态爆炸”现象。这样当主站完成coe功能时,可以由子状态机fsm_coe去完成。具体各功能是如何通过状态机完成的,文章后面会介绍。

slave状态机

slave状态机管理着每个从站的状态,所以位于从站对象(ec_slave_t)内:

struct ec_slave

{

ec_master_t *master; /**< Master owning the slave. */

.....

ec_fsm_slave_t fsm; /**< Slave state machine. */

.....

};

struct ec_fsm_slave {

ec_slave_t *slave; /**< slave the FSM runs on */

struct list_head list; /**< Used for execution list. */

ec_dict_request_t int_dict_request; /**< Internal dictionary request. */

void (*state)(ec_fsm_slave_t *, ec_datagram_t *); /**< State function. */

ec_datagram_t *datagram; /**< Previous state datagram. */

ec_sdo_request_t *sdo_request; /**< SDO request to process. */

ec_reg_request_t *reg_request; /**< Register request to process. */

ec_foe_request_t *foe_request; /**< FoE request to process. */

off_t foe_index; /**< Index to FoE write request data. */

ec_soe_request_t *soe_request; /**< SoE request to process. */

ec_eoe_request_t *eoe_request; /**< EoE request to process. */

ec_mbg_request_t *mbg_request; /**< MBox Gateway request to process. */

ec_dict_request_t *dict_request; /**< Dictionary request to process. */

ec_fsm_coe_t fsm_coe; /**< CoE state machine. */

ec_fsm_foe_t fsm_foe; /**< FoE state machine. */

ec_fsm_soe_t fsm_soe; /**< SoE state machine. */

ec_fsm_eoe_t fsm_eoe; /**< EoE state machine. */

ec_fsm_mbg_t fsm_mbg; /**< MBox Gateway state machine. */

ec_fsm_pdo_t fsm_pdo; /**< PDO configuration state machine. */

ec_fsm_change_t fsm_change; /**< State change state machine */

ec_fsm_slave_scan_t fsm_slave_scan; /**< slave scan state machine */

ec_fsm_slave_config_t fsm_slave_config; /**< slave config state machine. */

};

slave状态机和master状态机类似,slave状态机内还包含许多子状态机。slave状态机主要目的是:

主站管理从站状态

主站与从站应用层(AL)通讯。比如具有EoE功能的从站,主站通过该从站下的子状态机fsm_eoe来管理主站与从站应用层的EOE通讯。

数据报对象的管理

上面简单介绍了IgH内的状态机,状态机输入输出的对象是datagram,fsm对象内只有数据报对象的指针,那fsm工作过程中的数据报对象从哪里分配?

由于每个循环周期都需要操作数据报对象,IgH为减少datagram的动态分配操作,提高主站性能,在master初始化的时候预分配了主站运行需要的所有datagram对象。在master实例我们可以看到下面的数据报对象:

struct ec_master {

...

ec_datagram_t fsm_datagram; /**< Datagram used for state machines. */

...

ec_datagram_t ref_sync_datagram; /**< Datagram used for synchronizing the

reference clock to the master clock.*/

ec_datagram_t sync_datagram; /**< Datagram used for DC drift

compensation. */

ec_datagram_t sync_mon_datagram; /**< Datagram used for DC synchronisation

monitoring. */

...

ec_datagram_t ext_datagram_ring[EC_EXT_RING_SIZE];

}

这些数据报对象都是已经分配内存的,但由于报文不同,报文操作的数据大小不同,所以datagram数据区大小随状态机的具体操作而变化,在具体使用时才分配数据区内存。

以上数据报对象给状态机使用,别忘了还有过程数据也需要数据报对象,所以IgH中数据报类型分为以下四类:

分为三类(非常重要):

数据报对象

用途

Datagram_pairs

过程数据报

fsm_datagram[]

Fsm_master及子状态机专用的数据报对象。

ext_datagram_ring[]

动态分配给fsm_slave及其子fsm。

ref_sync_datagram sync_datagram sync64_datagram sync_mon_datagram

应用专用数据报用于时钟同步。

其中fsm_datagram为master状态机及master下的子状态机执行过程中操作的对象。

ext_datagram_ring[]是一个环形队列,当fsm_slave从站状态机处于ready状态,可以开始处理与slave相关请求,如配置、扫描、SDO、PDO等,这时会从ext_datagram_ring[]中给该fsm_slave分配一个数据报,并运行fsm_slave状态机检查并处理请求。

应用专用数据报用于时钟同步,与时钟强相关,它们比较特殊,它们的数据区大小是恒定的,所以其数据区在主站初始化时就已分配内存,应用调用时直接填数据发送,避免linux的内存分配带来时钟的偏差。

数据报数据区(data)内存通过ec_datagram_prealloc()来分配.

int ec_datagram_prealloc(

ec_datagram_t *datagram, /**< EtherCAT datagram. */

size_t size /**< New payload size in bytes. */

)

{

if (datagram->data_origin == EC_ORIG_EXTERNAL

|| size <= datagram->mem_size)

return 0;

......

if (!(datagram->data = kmalloc(size, GFP_KERNEL))) {

......

}

datagram->mem_size = size;

return 0;

}

数据区的大小为一个以太网帧中单个Ethercat数据报的最大数据大小EC_MAX_DATA_SIZE。

/** Size of an EtherCAT frame header. */

#define EC_FRAME_HEADER_SIZE 2

/** Size of an EtherCAT datagram header. */

#define EC_DATAGRAM_HEADER_SIZE 10

/** Size of an EtherCAT datagram footer. */

#define EC_DATAGRAM_FOOTER_SIZE 2

/** Size of the EtherCAT address field. */

#define EC_ADDR_LEN 4

/** Resulting maximum data size of a single datagram in a frame. */

#define EC_MAX_DATA_SIZE (ETH_DATA_LEN - EC_FRAME_HEADER_SIZE \

- EC_DATAGRAM_HEADER_SIZE - EC_DATAGRAM_FOOTER_SIZE)

由于以太网帧的大小有限,因此数据报的最大大小受到限制,即以太网帧长度 1500 - ethercat头2byte- ethercat子数据报报头10字节-WKC 2字节,如图:

如果过程数据镜像的大小超过该限制,就必须发送多个帧,并且必须对映像进行分区以使用多个数据报。 Domain自动进行管理。

2.3 master状态机及数据报初始化

对状态机及数据报对象有初步认识后,我们回到ec_master.ko模块入口函数ec_init_module()主站实例初始化ec_master_init(),主要完成主站状态机初始化及数据报:

// init state machine datagram

ec_datagram_init(&master->fsm_datagram); /*初始化数据报对象*/

snprintf(master->fsm_datagram.name, EC_DATAGRAM_NAME_SIZE, "master-fsm");

ret = ec_datagram_prealloc(&master->fsm_datagram, EC_MAX_DATA_SIZE);

// create state machine object

ec_fsm_master_init(&master->fsm, master, &master->fsm_datagram); /*初始化master fsm*/

其中ec_fsm_master_init初始化master fsm和子状态机,并指定了master fsm使用的数据报对象fsm_datagram。

void ec_fsm_master_init(

ec_fsm_master_t *fsm, /**< Master state machine. */

ec_master_t *master, /**< EtherCAT master. */

ec_datagram_t *datagram /**< Datagram object to use. */

)

{

fsm->master = master;

fsm->datagram = datagram;

ec_fsm_master_reset(fsm);

// init sub-state-machines

ec_fsm_coe_init(&fsm->fsm_coe);

ec_fsm_soe_init(&fsm->fsm_soe);

ec_fsm_pdo_init(&fsm->fsm_pdo, &fsm->fsm_coe);

ec_fsm_change_init(&fsm->fsm_change, fsm->datagram);

ec_fsm_slave_config_init(&fsm->fsm_slave_config, fsm->datagram,

&fsm->fsm_change, &fsm->fsm_coe, &fsm->fsm_soe, &fsm->fsm_pdo);

ec_fsm_slave_scan_init(&fsm->fsm_slave_scan, fsm->datagram,

&fsm->fsm_slave_config, &fsm->fsm_pdo);

ec_fsm_sii_init(&fsm->fsm_sii, fsm->datagram);

}

初始化外部数据报队列

外部数据报队列用于从站状态机,每个状态机执行期间使用的数据报从该区域分配,下面是初始化ext_datagram_ring中每个结构:

for (i = 0; i < EC_EXT_RING_SIZE; i++) {

ec_datagram_t *datagram = &master->ext_datagram_ring[i];

ec_datagram_init(datagram);

snprintf(datagram->name, EC_DATAGRAM_NAME_SIZE, "ext-%u", i);

}

非应用数据报队列链表,如EOE数据报会插入该队列后发送。

INIT_LIST_HEAD(&master->ext_datagram_queue);

同样初始化几个时钟相关数据报对象,它们功能固定,所以数据区大小固定,就不贴代码了,比如sync_mon_datagram,它的作用是用于同步监控,获取从站系统时间差,所以是一个BRD数据报,在此直接将数据报操作偏移地址初始化,使用时能快速填充发送。

ec_datagram_init(&master->sync_mon_datagram);

......

ret = ec_datagram_brd(&master->sync_mon_datagram, 0x092c, 4);

地址

名称

描述

复位值

0x092c~0x092F

0~30

系统时间差

本地系统时间副本与参考时钟系统时间值之差

0

31

符号

0:本地系统时间≥参考时钟时间1:本地系统时间<参考时钟时间

0

另外比较重要的是将使用的网卡MAC地址放到macs[]中,在网卡驱动probe过程中根据MAC来匹配主站使用哪个网卡。

for (dev_idx = EC_DEVICE_MAIN; dev_idx < EC_MAX_NUM_DEVICES; dev_idx++) {

master->macs[dev_idx] = NULL;

}

master->macs[EC_DEVICE_MAIN] = main_mac;

2.4 初始化EtherCAT device

master协议栈主要完成EtherCAT数据报的解析和组装,然后需要再添加EtherNet报头和FCS组成一个完整的以太网帧,最后通过网卡设备发送出去。为与以太网设备驱动层解耦,igh使用ec_device_t来封装底层以太网设备,一般来说每个master只有一个ec_device_t,这个编译时配置决定,若启用线缆冗余功能,可指定多个网卡设备:

struct ec_device

{

ec_master_t *master; /**< EtherCAT master */

struct net_device *dev; /**< 使用的网络设备 */

ec_pollfunc_t poll; /**< pointer to the device's poll function */

struct module *module; /**< pointer to the device's owning module */

uint8_t open; /**< true, if the net_device has been opened */

uint8_t link_state; /**< device link state */

struct sk_buff *tx_skb[EC_TX_RING_SIZE]; /**< transmit skb ring */

unsigned int tx_ring_index; /**< last ring entry used to transmit */

#ifdef EC_HAVE_CYCLES

cycles_t cycles_poll; /**< cycles of last poll */

#endif

#ifdef EC_DEBUG_RING

struct timeval timeval_poll;

#endif

unsigned long jiffies_poll; /**< jiffies of last poll */

// Frame statistics

u64 tx_count; /**< 发送的帧数 */

u64 last_tx_count; /**<上次统计周期发送的帧数。 */

u64 rx_count; /**< 接收的帧数 */

u64 last_rx_count; /**< 上一个统计周期收到的帧数。 */

u64 tx_bytes; /**< 发送的字节数 */

u64 last_tx_bytes; /**< 上一个统计周期发送的字节数。 */

u64 rx_bytes; /**< Number of bytes received. */

u64 last_rx_bytes; /**< Number of bytes received of last statistics cycle.

*/

u64 tx_errors; /**< Number of transmit errors. */

s32 tx_frame_rates[EC_RATE_COUNT]; /**< Transmit rates in frames/s for

different statistics cycle periods.

*/

s32 rx_frame_rates[EC_RATE_COUNT]; /**< Receive rates in frames/s for

different statistics cycle periods.

*/

s32 tx_byte_rates[EC_RATE_COUNT]; /**< Transmit rates in byte/s for

different statistics cycle periods. */

s32 rx_byte_rates[EC_RATE_COUNT]; /**< Receive rates in byte/s for

different statistics cycle periods. */

......

};

成员*master表示改对象属于哪个master,*dev指向使用的以太网设备net_device,poll该网络设备poll函数,tx_skb[]以太网帧发送缓冲区队列,需要发送的以太网帧会先放到该队里,tx_ring_index管理tx_skb[],以及一些网络统计变量,下面初始化ec_device_t对象:

/*\master\master.c*/

for (dev_idx = EC_DEVICE_MAIN; dev_idx < ec_master_num_devices(master);

dev_idx++) {

ret = ec_device_init(&master->devices[dev_idx], master);

if (ret < 0) {

goto out_clear_devices;

}

}

/*\master\device.c*/

int ec_device_init(

ec_device_t *device, /**< EtherCAT device */

ec_master_t *master /**< master owning the device */

)

{

int ret;

unsigned int i;

struct ethhdr *eth;

....

device->master = master;

device->dev = NULL;

device->poll = NULL;

device->module = NULL;

device->open = 0;

device->link_state = 0;

for (i = 0; i < EC_TX_RING_SIZE; i++) {

device->tx_skb[i] = NULL;

}

......

ec_device_clear_stats(device);

......

for (i = 0; i < EC_TX_RING_SIZE; i++) {

if (!(device->tx_skb[i] = dev_alloc_skb(ETH_FRAME_LEN))) {

......

}

// add Ethernet-II-header

skb_reserve(device->tx_skb[i], ETH_HLEN);

eth = (struct ethhdr *) skb_push(device->tx_skb[i], ETH_HLEN);

eth->h_proto = htons(0x88A4);

memset(eth->h_dest, 0xFF, ETH_ALEN);

}

.....

}

主要关注分配以太网帧发送队列内存tx_skb[],并填充Ethernet报头中的以太网类型字段为0x88A4,目标MAC地址0xFFFFFFFF FFFF,对于源MAC地址、sk_buff所属网络设备、ec_device_t对象使用的网络设备net_device,将在网卡驱动初始化与master建立联系过程中设置。

2.5 设置IDLE 线程的发送间隔:

ec_master_set_send_interval(master, 1000000 / HZ);

根据网卡速率计算:

void ec_master_set_send_interval(

ec_master_t *master, /**< EtherCAT master */

unsigned int send_interval /**< Send interval */

)

{

master->send_interval = send_interval; //发送间隔 us

master->max_queue_size =

(send_interval * 1000) / EC_BYTE_TRANSMISSION_TIME_NS;

master->max_queue_size -= master->max_queue_size / 10;

}

100Mbps网卡发送一字节数据需要的时间EC_BYTE_TRANSMISSION_TIME_NS: 1/(100 MBit/s / 8 bit/byte) = 80 ns/byte.

2.6 初始化字符设备

由于主站位于内核空间,用户空间应用与主站交互通过字符设备来交互;

创建普通字符设备,给普通linux应用和Ethercat tool使用。若使用xenomai或RTAI,则再创建实时字符设备,提供给实时应用使用。

......

master->class_device = device_create(class, NULL,

MKDEV(MAJOR(device_number), master->index), NULL,

"EtherCAT%u", master->index);

......

#ifdef EC_RTDM

// init RTDM device

ret = ec_rtdm_dev_init(&master->rtdm_dev, master);

...

#endif

到这里明白了IgH中的状态机与数据报之间的关系,主站对象也创建好了,但是主站还没有网卡设备与之关联,主站也还没有工作,下面简单看一下ecdev_offer流程。

关于网卡驱动代码详细解析推荐这两篇文章:

Monitoring and Tuning the Linux Networking Stack: Sending Data

Monitoring and Tuning the Linux Networking Stack: Receiving Data

3 网卡

网卡probe

static int igb_probe(struct pci_dev *pdev, const struct pci_device_id *ent)

{

......

adapter->ecdev = ecdev_offer(netdev, ec_poll, THIS_MODULE);

if (adapter->ecdev) { /*注册打开ec_net设备*/

err = ecdev_open(adapter->ecdev);

.....

adapter->ec_watchdog_jiffies = jiffies;

} else { /*注册普通网络设备*/

......

err = register_netdev(netdev);

......

}

......

}

给主站提供网络设备:ecdev_offer

根据MAC地址找到master下的ec_device_t对象

device->dev = net_dev;

device->poll = poll;

device->module = module;

上面我们只设置了ec_device_t->tx_skb[]中sk_buff的以太网类型和目的地址,现在继续填充源MAC地址为网卡的MAC地址、sk_buff所属的net_device:

for (i = 0; i < EC_TX_RING_SIZE; i++) {

device->tx_skb[i]->dev = net_dev;

eth = (struct ethhdr *) (device->tx_skb[i]->data);

memcpy(eth->h_source, net_dev->dev_addr, ETH_ALEN);

}

调用网络设备接口打开网络设备

int ec_device_open(

ec_device_t *device /**< EtherCAT device */

)

{

int ret;

.....

ret = device->dev->open(device->dev);

if (!ret)

device->open = 1;

....

return ret;

}

当master下的所有的网络设备都open后,master从ORPHANED转到IDLE阶段

int ec_master_enter_idle_phase(

ec_master_t *master /**< EtherCAT master */

)

{

int ret;

ec_device_index_t dev_idx;

......

master->send_cb = ec_master_internal_send_cb;

master->receive_cb = ec_master_internal_receive_cb;

master->cb_data = master;

master->phase = EC_IDLE; /*更新master状态*/

// reset number of responding slaves to trigger scanning

for (dev_idx = EC_DEVICE_MAIN; dev_idx < ec_master_num_devices(master);

dev_idx++) {

master->fsm.slaves_responding[dev_idx] = 0;

}

ret = ec_master_nrthread_start(master, ec_master_idle_thread,

"EtherCAT-IDLE");

....

return ret;

}

其中主要设置master发送和接收回调函数,应用通过发送和接收数据时,将通过这两接口直接发送和接收。创建master idle线程ec_master_idle_thread。

4 IDLE阶段内核线程

综上,状态机操作对象是datagram,datagram发送出去后回到主站交给状态机的下一个状态处理,所以主站需要循环地执行状态机、发送EtherCAT数据帧、接收EtherCAT数据帧、执行状态机、发送EtherCAT数据帧、……来驱动状态机运行,这个循环由内核线程来完成。

当主站与网卡绑定后,应用还没有请求主站,主站处于IDLE状态,这时循环由内核线程ec_master_idle_thread来完成,主要完成从站拓扑扫描、配置站点地址等工作。

static int ec_master_idle_thread(void *priv_data)

{

ec_master_t *master = (ec_master_t *) priv_data;

int fsm_exec;

#ifdef EC_USE_HRTIMER

size_t sent_bytes;

#endif

// send interval in IDLE phase

ec_master_set_send_interval(master, 250000 / HZ);

while (!kthread_should_stop()) {

// receive

ecrt_master_receive(master); /*接收上个循环发送的数据帧*/

......

// execute master & slave state machines

......

fsm_exec = ec_fsm_master_exec(&master->fsm); /*执行master状态机*/

ec_master_exec_slave_fsms(master); /*为从站状态机分配datagram,并执行从站状态机*/

......

if (fsm_exec) {

ec_master_queue_datagram(master, &master->fsm_datagram); /*将master状态机处理的datagram插入发送链表*/

}

// send

ecrt_master_send(master); /*组装以太网帧并调用网卡发送*/

sent_bytes = master->devices[EC_DEVICE_MAIN].tx_skb[

master->devices[EC_DEVICE_MAIN].tx_ring_index]->len;

up(&master->io_sem);

if (ec_fsm_master_idle(&master->fsm)) {

ec_master_nanosleep(master->send_interval * 1000);

set_current_state(TASK_INTERRUPTIBLE);

schedule_timeout(1);

} else {

ec_master_nanosleep(sent_bytes * EC_BYTE_TRANSMISSION_TIME_NS);

}

}

EC_MASTER_DBG(master, 1, "Master IDLE thread exiting...\n");

return 0;

}

整个过程简单概述如下。

4.1 数据报发送

下面介绍IgH中状态机处理后数据报的发送流程(ecrt_master_send())。

master使用一个链表datagram_queue来管理要发送的子报文对象datagram,需要发送的子报文对象会先插入该链表中,统一发送时,分配一个sock_buff,从datagram_queue上取出报文对象,设置index(index是发送后接收回来与原报文对应的标识之一),将一个个报文对象按EtherCAT数据帧结构填充到sock_buff中,最后通过网卡设备驱动函数hard_start_xmit,将sock_buff从网卡发送出去。

4.2 数据报接收

接收数据时,通过网卡设备驱动ec_poll函数取出Packet得到以太网数据,然后解析其中的EtherCAT数据帧,解析流程如下:

得到子报文index,遍历发送链表datagram_queue,找到index对应的datagram。

将子报文数据拷贝到datagram数据区。

将以太网帧内子报文中的WKC值复制到datagram中的WKC。

将datagram从链表datagram_queue删除。

根据子报文头M位判断还有没有子报文,有则跳转1继续处理下一个子报文,否则完成接收。

接收完成后,进入下一个循环,内核线程运行状态机或周期应用进行下一个周期,处理接收的Ethercat报文。

先简单介绍到这,敬请关注后续文章。。。。

作者:wsg1100

出处:http://www.cnblogs.com/wsg1100/

本文版权归作者和博客园共有,欢迎转载,但必须给出原文链接,并保留此段声明,否则保留追究法律责任的权利。

posted @

2021-02-22 23:39 

沐多 

阅读(9835) 

评论(6) 

编辑 

收藏 

举报

会员力量,点亮园子希望

刷新页面返回顶部

公告

Copyright © 2024 沐多

Powered by .NET 8.0 on Kubernetes

Ethercat解析(十四)之初始化流程_ethercat启动过程-CSDN博客

>

Ethercat解析(十四)之初始化流程_ethercat启动过程-CSDN博客

Ethercat解析(十四)之初始化流程

最新推荐文章于 2023-12-27 21:39:20 发布

识荒者

最新推荐文章于 2023-12-27 21:39:20 发布

阅读量3.5k

收藏

14

点赞数

分类专栏:

Ethercat解析

文章标签:

Ethercat解析

十四

初始化流程

版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。

本文链接:https://blog.csdn.net/absinjun/article/details/81813750

版权

Ethercat解析

专栏收录该内容

15 篇文章

101 订阅

订阅专栏

一、EtherCAT入口

源代码执行命令sudo /etc/init.d/ethercat start,将会从文件module.c文件中的ec_init_module函数中开始往下执行初始化流程。

二、初始化大致过程

(1) ec_init_module 主要用于生成/dev/EtherCAT设备,并且调用ec_master_init初始化主机相关信息。

ec_master_init()的主要工作内容:

1.设置IDLE模式下数据发送周期; 2.初始化数据包队列; 3.初始化网络设备; 4.初始化master主状态机; 5.初始化参考时钟数据包; 6.初始化时钟数据包; 7.初始化对时监测数据包; 8.初始化字符设备,/dev/EtherCAT0; 9.初始化RTDM设备;

(2) IDLE状态进程 设备打开后,设备调用ec_master_enter_idle_phase,该函数中将启用ec_master_idle_thread进程

ec_master_idle_thread以设定的周期(send_interval)发送数据包并处理,其流程如下:

优惠劵

识荒者

关注

关注

0

点赞

14

收藏

觉得还不错?

一键收藏

知道了

2

评论

Ethercat解析(十四)之初始化流程

一、EtherCAT入口源代码执行命令sudo /etc/init.d/ethercat start,将会从文件module.c文件中的ec_init_module函数中开始往下执行初始化流程。二、初始化大致过程(1) ec_init_module 主要用于生成/dev/EtherCAT设备,并且调用ec_master_init初始化主机相关信息。ec_master_in...

复制链接

扫一扫

专栏目录

四轴伺服驱动器EtherCAT通信协议研究与实现

11-21

四轴伺服驱动器EtherCAT通信协议研究与实现

ethercat以太网报文可用wireshark打开

09-21

ethercat协议以太网报文,可以用wireshark软件打开,适用于学习ethercat报文解析,学习各种工业以太网协议可参考本人其他下载文件

2 条评论

您还未登录,请先

登录

后发表或查看评论

EtherCAT设备协议详解二、EtherCAT状态机及配置流程

EtherCAT

12-16

7898

设备可以拒绝来自主站的状态请求,并通过错误指示(AL 状态寄存器中的错误标志)和相关错误代码(AL 状态代码寄存器)发出错误信号。设置了上述信息后,从站检查无误后,主站可以请求进入safe-op状态,如果不能进入safe-op可以读取相关寄存器,判断错误原因。设置了上述信息后,从站检查无误后,主站可以请求进入pre-op状态,如果不能进入pre-op可以读取相关寄存器,判断错误原因。safe-op状态主要把pdo中的数据设置的从站中,确认从站是否会报错。DC同步稳定,从站也没有报错就可以申请进入op状态。

倍福PLC程序启动初始化例程

05-12

与家喻户晓的西门子相比,倍福(Beckhoff)并不为众人所知,虽然二者都是德国品牌,但风格却截然不同。倍福德国官网经过一波更新之后,很多东西都变得高大上了,但是原来的下载方式(Twincat下载,下载老版本的twincat软件)也同样被更新掉了

虽然和西门子同样属于德国的品牌,但是两者走的路线和风格却截然不同,西门子不管是推广还是市场占有率方面都要高于倍福,但是倍福也有它的优势,它是EtherCAT总线的先驱者,基于通用的Windows系统,很早就提出了软PLC这样的概念,连编程软件也是基于微软的Visual Studio。总的来说倍福的PLC编程更偏向于软

如果想要下载老版本的twincat3怎么办呢?

目前官网的服务器上只有4024.11以后的安装包

因为倍福官网服务器更新了,所以在4024.11之前的版本统统都没了,所以现在仅从4024.11版本开始,可以用这个方法来尝试下载,毕竟过多年之后4024.11也会成为老版本。

这个方法同样应用于twincat2的下载,还有XAR,RM那些安装包的下载

RK3568平台移植EtherCAT Master

最新发布

m0_56121792的博客

12-27

1063

EtherCAT全称EtherNet Control Automation Technology,是由德国倍福(Beckhoff)公司提出的一种实时以太网技术,用于工业自动化的现场总线通信协议。EtherCAT是一种开放但不开源的技术,意味着您可以任意使用这项技术,但若要进行相关设备的开发,则需要向倍福公司获取相关授权。

IGH EtherCAT是一种EtherCAT协议开源实现,是一个完全符合EtherCAT标准的库,能够在实时操作系统上运行。与传统总线相比,EtherCAT的优点在于减

SOEM-Ethercat源代码解析配套windows网卡捕捉软件包

10-14

配套的文章章节:SOEM-Ethercat源代码解析三(通讯运行环境搭建)

iGH EtherCAT初始化流程分析(四)

zhandl的博客

11-13

4687

用户程序通过ecrt_request_master请求主站设备,该函数调用ecrt_request_master_err(),取得master设备,并执行ec_master_enter_operation_phase()函数。

EtherCAT使用与解析-关于ethercat应用层使用

lswdcyy的博客

04-11

9550

下载ethercat源码并且安装好之后,测试ethercat使用可以遵循以下步骤:

1.开启ethercat系统:执行这一步需要确保一点,那就是按照ethercat源码中的README指导将一些需要的文件复制以及创建软连接到/opt/init.d/ehtercat以及/opt/sysconfig/ethercat这两个文件,前者是系统启动文件,后者是系统配置文件,说起这个配置文件,其实就是一份变...

尝试一文说明EtherCAT

weixin_45682319的博客

07-17

823

学习EtherCAT的过程中从参考文章中提取出的内容,认为是比较关键的部分,希望能对你有所帮助,若理解有误也请指正。

ethercat移植至ARM

F_hawk189的博客

06-02

533

1.解压IGH源码进入目录,--with-linux-dir=/opt/linux/xxx/kernel_imx,这个指向的是Linux内核源码目录。1.在官网 http://www.etherlab.org/en/ethercat/ 下载ethercat-1.5.2.tar.bz2。/**************至此板子上的配置结束,下面是启动EtherCAT ***************/3.复制ec_master.ko到/lib/modules/内核版本号/2.进入ethercat目录下。

Ethercat获取解析安装实时-识荒者.zip

04-05

Ethercat解析(一、二、三、四)之获取、编译、安装(debian7)-识荒者

作者详细介绍了igh在Linux系统中的从安装到使用及实时系统配置的步骤,手把手的操作

EtherCAT主站配置过程分析.xlsx

10-15

本文档分析了国内某ehtercat主站的启动过程。对启动过程中的每一个报文的作用进行了标注。部分标注如下:

"DC过程:

1.主站写900,发一帧写的数据;只要是写900,每个口的会锁存接收时间;

2.主站读900 16byte:读区上一次写900数据帧时,锁存器的接受时间;有了锁存时间,就可以计算传导延时;

3.读取918 8byte,ECAT Processing Unit的接受时间,该时间减去主站系统时间,就是system time offset

4.将920 8byte中写入系统时间偏移,将928 4byte中写入传导延时。

5.周期性向910 8byte中写入新的时间。

同步时钟设置过程:

设置起始DC事件时间 990 8byte

启动同步时钟

从站芯片应该没有自己的mac地址;从站会接受所有的网卡数据。返回数据时,都是将主站的mac做了修改并返回。

"

ethercat总结

02-14

ethercat总结,主要是Ethercat基础介绍,运行原理与常用协议说明

Ethercat解析(十)之从站配置

热门推荐

absinjun的博客

08-13

1万+

配置文件根据设定的从站在总线上面的位置、厂商ID和产品码与具体的从站进行绑定。对于从站在总线上的位置,驱动提供了别名和位置编码相结合的方式寻找对应的从站。别名和位置编码都是16位的数字,其存放在从站的EEPROM中,具体的含义是:

别名

位置

描述

0

0-65535

由于别名为0,因此其位置编码就是从站在总线上的绝对位置

1-65535

0-65...

Ethercat解析(十一)之分布时钟

absinjun的博客

08-14

1万+

驱动代码中,同步时钟涉及到如下几个概念:

⑴ 本地时钟:每一个支持DC的从站都有一个纳秒级分辨率的本地时钟寄存器。

每次从机上电,则寄存器从0开始计时,这就意味着不同的从机因为上电开机的时间不同而本地时钟也会有差异,所以需要对从机的本地时钟对比参考时钟进行偏移补偿。再者,从机的时钟一般由时钟单元为参考,所以每个从机的时钟频率也会有极小的误差,但是由于这种极小的误差在长时间的工作中会累积,所...

Ethercat解析(十二)之命令行工具的使用

absinjun的博客

08-15

9605

说明:EtherCAT为了方便用户空间对主站进行调试,因此提供一套用户空间使用的工具来设置从站参数,观察调试信息等等。正常情况下,每个主站的实例都会生成一个字符设备,名字为:/dev/EtherCATx。

欲想深入了解其他命令,可通过执行ethercat –help命令来查看详细使用方法。

下面具体的介绍了一下各参数及命令的使用,其中[ ]中为必选参数,&lt; &gt;为可选参数。

1.1...

Ethercat解析(九)之过程数据

absinjun的博客

08-12

9107

主站通过过程数据对象(ProcessData Objects (PDOs))来获取从站的输入输出。

① 读取:通过SII从eeprom(一般存放的固定的PDOs数据)中读取。

② 写入:使用COE进行配置PDOs。

应用层可以在周期数据交换中注册一个PDOs条目,所有注册的PDOs条目之和通过逻辑寻址定义了过程数据映像(processdata image)。

通过创建域(Domains)可...

Ethercat解析(一)之获取、编译、安装(Ubuntu14.04)

absinjun的博客

08-05

8025

前言:EtherCAT(以太网控制自动化技术)是一个开放架构,以以太网为基础的现场总线系统,其名称的CAT为控制自动化技术(Control Automation Technology)字首的缩写。EtherCAT是确定性的工业以太网,最早是由德国的Beckhoff公司研发。

优势:免费、开源、稳定性能良好、支持实时扩展。

说明:该文档主要是建立在上节中已经对Ubuntu14.04添加完xeno...

ethercat 协议解析软件

06-25

### 回答1:

EtherCAT(Ethernet for Control Automation Technology)是一种实时以太网通信协议,用于在工业自动化领域进行数据通信。与传统的CAN和PROFIBUS等协议相比,EtherCAT具有更高的实时性、更大的传输速度和更高的数据容量,同时也更加灵活和易于扩展。

为了方便使用和调试EtherCAT协议,在实际应用中需要使用EtherCAT协议解析软件。这种软件可以识别和分析EtherCAT消息,以帮助用户确定是否存在通信问题,以及处理这些问题。例如,EtherCAT协议解析软件可以帮助用户捕获和分析数据帧,帮助用户识别数据包是否到达目标设备以及是否具有正确的协议层次结构。

此外,EtherCAT协议解析软件还可以帮助用户跟踪实时性问题,例如延迟和吞吐量,以便确保数据始终得到及时传输。使用EtherCAT协议解析软件,可以轻松地监视和解析EtherCAT网络上的数据流,以实现更快、更精准的控制和通信。

总之,EtherCAT协议解析软件是一个非常实用的工具,可帮助工业自动化领域的工程师和技术人员更快地解决问题,并优化性能和稳定性。

### 回答2:

EtherCAT(Ethernet for Control Automation Technology)协议解析软件是一种用于对EtherCAT网络进行分析、检测和调试的工具。该软件能够实时监测和分析EtherCAT网络中节点间的通讯,帮助用户快速发现和解决网络通讯故障。

EtherCAT协议解析软件具有以下优势:

1. 网络分析功能全面:软件可以监测和分析节点间的通讯,包括周期性和异步性数据通讯,帮助用户深入发现问题,提供全面的网络分析。

2. 实时数据监控功能:通过实时监控网络数据流,软件能够观察网络中每个节点的状态,并且能够捕获和分析网络数据流中出现的错误信息。

3. 功能强大:软件支持多种通讯协议,包括TCP/IP、UDP、Modbus/TCP等协议,同时可支持多种不同的硬件接口。

4. 易于使用:软件界面简洁明了,易于使用,可以快速分析EtherCAT网络中的故障。

总之,EtherCAT协议解析软件是一款强大的网络分析工具,能够帮助用户分析和解决EtherCAT网络中出现的各种通讯故障,提高生产效率和网络可靠性。

### 回答3:

EtherCAT是一种高性能的实时以太网通信协议,它可以将多个从站设备连接在一个主站设备上,并以极高的速度进行大规模数据传输和实时控制。EtherCAT协议解析软件就是一款能够分析并解释EtherCAT协议的工具。

该软件可以实时监控和诊断EtherCAT网络中传输的数据,包括所有数据包的结构、格式和数据内容,以及在网络中发生的错误等信息。该软件提供了丰富的数据分析和统计功能,可以帮助用户更快速地发现和排除网络中的问题。

除了解析EtherCAT协议外,该软件还可用于逆向工程和自定义协议的开发。它提供了丰富的API接口和开发工具,使得用户能够自行编写脚本和程序来实现对协议的控制和分析。

总之,EtherCAT协议解析软件是一款功能强大、易于使用的工具,它能够大大提高用户对EtherCAT网络的了解和掌握,使得用户能够更好地进行网络设计、故障排除和性能优化等工作。

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

非常没帮助

没帮助

一般

有帮助

非常有帮助

提交

识荒者

CSDN认证博客专家

CSDN认证企业博客

码龄7年

暂无认证

79

原创

38万+

周排名

102万+

总排名

47万+

访问

等级

4270

积分

507

粉丝

157

获赞

104

评论

1037

收藏

私信

关注

热门文章

神奇的python(六)之python的串口操作(pyserial)

46353

shell脚本打开一个新终端并运行指定脚本

29536

SD卡、TF卡坏道及容量检测

28035

J-LINK 操作使用指南

24655

SD卡、TF卡读写速率测试

21547

分类专栏

虚拟串口

1篇

通俗易懂Ethercat

5篇

TortoiseSVN

1篇

EtherCAT

1篇

kernel

3篇

linux

25篇

Jlink

1篇

C++

1篇

SD卡、TF卡检测技术

2篇

python

软技能

2篇

神奇的python

6篇

Pygame写游戏

22篇

PyOpenGL写3D界面

5篇

Ethercat解析

15篇

Linuxcnc解析

2篇

每日一题(C语言基础篇)

3篇

Leetcode算法题

18篇

Linux实时系统

1篇

最新评论

Ethercat解析(十五)之程序框架

weixin_57563284:

请问一下博主使用过igh 5001协议控制过io吗

Ethercat解析(十)之从站配置

田海峰:

E没看明白啊。能麻烦解释下吗?

LinuxCNC基础知识

Zlf14:

兄弟你下载了吗,我也不会下载

LinuxCNC基础知识

ttlsss:

隐藏内容怎么下载啊?

神奇的python(六)之python的串口操作(pyserial)

Zeeland:

如果您正在寻找一个轻量级的Serial框架,那么我强烈建议您了解一下cushy-serial。它是一个非常易于使用的Python库,可以使串行编程变得更加简单和快捷。相对于传统的pyserial,cushy-serial提供了许多特性,如自定义消息协议、串口定时任务等等,因此您不必花费太多时间在多线程上。

另外,cushy-serial兼容了Serial中的所有功能,所以您可以在其中使用Serial的所有特性。如果您有任何问题或建议,可以提交pr或issue进行交流。此外,您也可以通过以下链接了解更多关于cushy-serial的信息

https://github.com/Undertone0809/cushy-serial

您愿意向朋友推荐“博客详情页”吗?

强烈不推荐

不推荐

一般般

推荐

强烈推荐

提交

最新文章

虚拟机与主机串口通信(主机与主机)

COE、SOE、EOE、FOE是什么?

LinuxCNC基础知识

2021年7篇

2019年1篇

2018年102篇

目录

目录

分类专栏

虚拟串口

1篇

通俗易懂Ethercat

5篇

TortoiseSVN

1篇

EtherCAT

1篇

kernel

3篇

linux

25篇

Jlink

1篇

C++

1篇

SD卡、TF卡检测技术

2篇

python

软技能

2篇

神奇的python

6篇

Pygame写游戏

22篇

PyOpenGL写3D界面

5篇

Ethercat解析

15篇

Linuxcnc解析

2篇

每日一题(C语言基础篇)

3篇

Leetcode算法题

18篇

Linux实时系统

1篇

目录

评论 2

被折叠的  条评论

为什么被折叠?

到【灌水乐园】发言

查看更多评论

添加红包

祝福语

请填写红包祝福语或标题

红包数量

红包个数最小为10个

红包总金额

红包金额最低5元

余额支付

当前余额3.43元

前往充值 >

需支付:10.00元

取消

确定

下一步

知道了

成就一亿技术人!

领取后你会自动成为博主和红包主的粉丝

规则

hope_wisdom 发出的红包

实付元

使用余额支付

点击重新获取

扫码支付

钱包余额

0

抵扣说明:

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

余额充值

Ethercat解析(五)之初始化流程_ethercat 初始化指令-CSDN博客

>

Ethercat解析(五)之初始化流程_ethercat 初始化指令-CSDN博客

Ethercat解析(五)之初始化流程

最新推荐文章于 2023-12-27 21:39:20 发布

zhangzheng_1986

最新推荐文章于 2023-12-27 21:39:20 发布

阅读量4.3k

收藏

14

点赞数

3

分类专栏:

Etherlab

Etherlab

专栏收录该内容

5 篇文章

9 订阅

订阅专栏

一、EtherCAT入口

源代码执行命令sudo /etc/init.d/ethercat start,将会从文件module.c文件中的ec_init_module函数中开始往下执行初始化流程。

二、初始化大致过程

(1) ec_init_module 主要用于生成/dev/EtherCAT设备,并且调用ec_master_init初始化主机相关信息。

ec_master_init()的主要工作内容:

1.设置IDLE模式下数据发送周期; 2.初始化数据包队列; 3.初始化网络设备; 4.初始化master主状态机; 5.初始化参考时钟数据包; 6.初始化时钟数据包; 7.初始化对时监测数据包; 8.初始化字符设备,/dev/EtherCAT0; 9.初始化RTDM设备;

(2) IDLE状态进程 设备打开后,设备调用ec_master_enter_idle_phase,该函数中将启用ec_master_idle_thread进程

ec_master_idle_thread以设定的周期(send_interval)发送数据包并处理,其流程如下: 其中ec_master_idle_thread()的调用周期与系统滴答时间有关:

//send interval in IDLE phase

ec_master_set_send_interval(master, 1000000/HZ);

三、数据帧收发过程

Etherlab1.5.2 提供了Generic驱动,从而使Etherlab能通过任何网卡收发EtherCAT帧

优惠劵

zhangzheng_1986

关注

关注

3

点赞

14

收藏

觉得还不错?

一键收藏

知道了

0

评论

Ethercat解析(五)之初始化流程

一、EtherCAT入口 源代码执行命令sudo /etc/init.d/ethercat start,将会从文件module.c文件中的ec_init_module函数中开始往下执行初始化流程。二、初始化大致过程(1) ec_init_module 主要用于生成/dev/EtherCAT设备,并且调用ec_master_init初始化主机相关信息。ec_master...

复制链接

扫一扫

专栏目录

EtherCAT主站配置过程分析.xlsx

10-15

本文档分析了国内某ehtercat主站的启动过程。对启动过程中的每一个报文的作用进行了标注。部分标注如下:

"DC过程:

1.主站写900,发一帧写的数据;只要是写900,每个口的会锁存接收时间;

2.主站读900 16byte:读区上一次写900数据帧时,锁存器的接受时间;有了锁存时间,就可以计算传导延时;

3.读取918 8byte,ECAT Processing Unit的接受时间,该时间减去主站系统时间,就是system time offset

4.将920 8byte中写入系统时间偏移,将928 4byte中写入传导延时。

5.周期性向910 8byte中写入新的时间。

同步时钟设置过程:

设置起始DC事件时间 990 8byte

启动同步时钟

从站芯片应该没有自己的mac地址;从站会接受所有的网卡数据。返回数据时,都是将主站的mac做了修改并返回。

"

SOEM-Ethercat源代码解析配套windows网卡捕捉软件包

10-14

配套的文章章节:SOEM-Ethercat源代码解析三(通讯运行环境搭建)

参与评论

您还未登录,请先

登录

后发表或查看评论

RK3568平台移植EtherCAT Master

最新发布

m0_56121792的博客

12-27

1063

EtherCAT全称EtherNet Control Automation Technology,是由德国倍福(Beckhoff)公司提出的一种实时以太网技术,用于工业自动化的现场总线通信协议。EtherCAT是一种开放但不开源的技术,意味着您可以任意使用这项技术,但若要进行相关设备的开发,则需要向倍福公司获取相关授权。

IGH EtherCAT是一种EtherCAT协议开源实现,是一个完全符合EtherCAT标准的库,能够在实时操作系统上运行。与传统总线相比,EtherCAT的优点在于减

倍福PLC程序启动初始化例程

05-12

与家喻户晓的西门子相比,倍福(Beckhoff)并不为众人所知,虽然二者都是德国品牌,但风格却截然不同。倍福德国官网经过一波更新之后,很多东西都变得高大上了,但是原来的下载方式(Twincat下载,下载老版本的twincat软件)也同样被更新掉了

虽然和西门子同样属于德国的品牌,但是两者走的路线和风格却截然不同,西门子不管是推广还是市场占有率方面都要高于倍福,但是倍福也有它的优势,它是EtherCAT总线的先驱者,基于通用的Windows系统,很早就提出了软PLC这样的概念,连编程软件也是基于微软的Visual Studio。总的来说倍福的PLC编程更偏向于软

如果想要下载老版本的twincat3怎么办呢?

目前官网的服务器上只有4024.11以后的安装包

因为倍福官网服务器更新了,所以在4024.11之前的版本统统都没了,所以现在仅从4024.11版本开始,可以用这个方法来尝试下载,毕竟过多年之后4024.11也会成为老版本。

这个方法同样应用于twincat2的下载,还有XAR,RM那些安装包的下载

Ethercat获取解析安装实时-识荒者.zip

04-05

Ethercat解析(一、二、三、四)之获取、编译、安装(debian7)-识荒者

作者详细介绍了igh在Linux系统中的从安装到使用及实时系统配置的步骤,手把手的操作

ethercat以太网报文可用wireshark打开

09-21

ethercat协议以太网报文,可以用wireshark软件打开,适用于学习ethercat报文解析,学习各种工业以太网协议可参考本人其他下载文件

Ethercat解析(十四)之初始化流程

absinjun的博客

08-18

3511

一、EtherCAT入口

源代码执行命令sudo /etc/init.d/ethercat start,将会从文件module.c文件中的ec_init_module函数中开始往下执行初始化流程。

二、初始化大致过程

(1) ec_init_module

主要用于生成/dev/EtherCAT设备,并且调用ec_master_init初始化主机相关信息。

ec_master_in...

Ethercat--基础架构与数据帧格式

qq_41931610的博客

04-20

1862

(过程数据对象):过程数据用来传输周期性的数据,PDO由三个数据缓冲区组成,类似于一个FIFO,从站写入第一个缓冲区,主站从第三个缓冲区读走。(服务数据对象):邮箱通信用来发送非周期性的数据,邮箱通信只有一个数据缓冲区,通信方式采用握手的机制确保主从之间的数据交互不丢失,而PDO由于采用FIFO的机制,可能会出现新值覆盖旧值或旧值被多次读走的情况。EtherCAT协议在应用层支持CANopen协议,因此支持CANopen协议的从站可以被运用在EtherCAT协议上。并且可以通过命令行工具加载或存储文件。

Ethercat状态机转化(ESM)

qq_39854159的博客

10-08

1983

ESM状态机

四种应支持的状态机

●Init.

Pre-Operational.

Safe-Operational.

Operational.

一种可选的状态机

●Bootstrap.

其状态转化关系,如下图所示:

状态转化

本地管理服务

IP

开始邮箱通信

PI

停止邮箱通信

PS

开始输入更新

SP

停止输入更新

SO

开始输出更新

OS

停止输出更新

OP

停止输出更新,停止输入更新

SI

停止输出更新,停止邮箱通信

OI

停止输出更新,停止输入更新,

SOEM代码Slaveinfo Demo分析

04-15

2923

分析Windows版本的Demo,以便之后移植到STM32F746上。

1. slaveinfo.exe入口函数为main,需要一个以太网PHY的网卡名,网卡名在Windows下是\Device\NPF_{XXXXXXX...XXXXXXXXX},在STM32F746下如何表示?

2. 首先需要调用ec_init,初始化网卡,绑定socket

/* initialise SOEM, b...

基于STM32的EtherCAT从站IO讲解

热门推荐

小王的博客

02-10

1万+

EtherCAT IO从站 工业通信

ethercat总结

02-14

ethercat总结,主要是Ethercat基础介绍,运行原理与常用协议说明

Zmotion运控器+Hiwin伺服驱动的Qt上位机开发(一):EtherCAT通讯、基本单轴控制、回零功能的实现

Zaiton的博客

03-01

2809

学习如何基于Qt框架、用Zmotion运动控制器开发库编写上位机以实现一些基础功能。

ethercat状态机

weixin_52720049的博客

11-24

626

在EtherCAT网络中,主站可以通过发送特定的EtherCAT命令将从站设备从预运行模式(PRE-OP)切换到安全运行模式(SAFE-OP),然后再切换到运行模式(OP)。向从站设备发送 "Operational" 命令:一旦主站准备好并安全运行参数配置完成,它可以向从站设备发送 "Operational"(运行)命令,以请求从站设备进入运行模式(OP)。从站进入运行模式:从站设备接收并解析主站发送的 "Operational" 命令后,将切换到运行模式,执行实际的应用操作。在PRE-OP状态下,

ethercat master用户程序初始化

weixin_42186805的博客

09-02

872

(1)定义配置信息

键入命令:ethercat cstruct 得到从机的配置信息,复制下来(我用的从机是简单的io开发板)

信息如下:

chenpeng@chenpeng-M219F-6C:/lib/modules$ ethercat cstruct

/* Master 0, Slave 0, "ServoDrive_FSMC"

* Vendor ID: 0x00000009

* Product code: 0x26483052

* Revision number:...

Ethercat - 初始化过程中主站对从站到底做了什么“”不可描述”的事情

飞翔的猪 的博客

01-13

6690

                                Ethercat - 初始化过程中主站对从站到底做了什么“”不可描述”的事情

       最近有人在群里问一些关于从站配置的问题,趁此机会简单总结下在从站启动过程中主站到底对从站做了哪些事情。要了解这些内容最近单最直接的途径是通过倍福的Twincat去看,不得不说倍福在这方面做得还是比较Open的,无论是主站开发人员还是从站开发人...

通过CK3E进行驱动器CDHD2初始化(EtherCat)

qq_28023999的博客

12-28

504

CK3E通过EtherCat与CDHD2驱动器进行回零运动

EtherCAT使用与解析-ethercat系统内核模块加载与初始化操作

lswdcyy的博客

03-26

3617

linux系统上安装完成ethercat系统,配置好网卡MAC和驱动之后,执行sudo /etc/init.d/ethercat start即可启动ethercat系统,在这个脚本中本质上调用了两个模块,一个是主站模块ec_master.ko,一个是驱动模块ec_generic.ko(关于驱动模块部分视配置文件中的DEVICE_MODULES类型决定,这里为了通用选择generic)。

ec_m...

IgH详解五、从站扫描流程

EtherCAT

09-01

4132

当我们启动主栈后可使用ethercat命令行工具查看从站的的相关信息,比如:ethercat slave

0 0:0 PREOP + CoolDrive RC

1 0:1 PREOP + CoolDrive RC ...

ethercat 协议解析软件

06-25

总之,EtherCAT协议解析软件是一个非常实用的工具,可帮助工业自动化领域的工程师和技术人员更快地解决问题,并优化性能和稳定性。 ### 回答2: EtherCAT(Ethernet for Control Automation Technology)协议解析...

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

非常没帮助

没帮助

一般

有帮助

非常有帮助

提交

zhangzheng_1986

CSDN认证博客专家

CSDN认证企业博客

码龄12年

暂无认证

14

原创

30万+

周排名

85万+

总排名

5万+

访问

等级

753

积分

39

粉丝

27

获赞

5

评论

136

收藏

私信

关注

热门文章

将CPP文件移植成C文件方法和注意的问题

6741

使用QT调试ROS工程

5331

Ethercat解析(三)之命令行工具的使用

5282

android camera2 拍照流程

4795

Ethercat解析(五)之初始化流程

4319

分类专栏

windows窗体应用(.net)

ubuntu

1篇

linux系统编程

5篇

Android

3篇

git及svn使用

2篇

qt开发

4篇

ros系统开发

2篇

编程规范

2篇

C++

3篇

java

1篇

Etherlab

5篇

最新评论

android camera2 拍照流程

IT界的骚小白:

想问一下 为什么一定要一个handler线程啊,这个有什么用吗

Ethercat解析(三)之命令行工具的使用

中华田园巨龙:

请教大佬,指令里面有切换状态,有写SDO。那么配置PDO以及读写PDO怎么操作呢?

Ethercat解析(三)之命令行工具的使用

中华田园巨龙:

感谢,写的很清楚

Ethercat解析(三)之命令行工具的使用

思泽之思:

谢谢大佬的文章,

您愿意向朋友推荐“博客详情页”吗?

强烈不推荐

不推荐

一般般

推荐

强烈推荐

提交

最新文章

qt kde gtk gnome xlib x11之间的关系

Ethercat解析(四)主站运行阶段

Ethercat解析(三)之命令行工具的使用

2018年15篇

2017年13篇

目录

目录

分类专栏

windows窗体应用(.net)

ubuntu

1篇

linux系统编程

5篇

Android

3篇

git及svn使用

2篇

qt开发

4篇

ros系统开发

2篇

编程规范

2篇

C++

3篇

java

1篇

Etherlab

5篇

目录

评论

被折叠的  条评论

为什么被折叠?

到【灌水乐园】发言

查看更多评论

添加红包

祝福语

请填写红包祝福语或标题

红包数量

红包个数最小为10个

红包总金额

红包金额最低5元

余额支付

当前余额3.43元

前往充值 >

需支付:10.00元

取消

确定

下一步

知道了

成就一亿技术人!

领取后你会自动成为博主和红包主的粉丝

规则

hope_wisdom 发出的红包

实付元

使用余额支付

点击重新获取

扫码支付

钱包余额

0

抵扣说明:

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

余额充值

快速入门 | 篇十六:正运动控制器EtherCAT总线快速入门-正运动技术

快速入门 | 篇十六:正运动控制器EtherCAT总线快速入门-正运动技术

  

首页

关于我们

公司简介

发展历程

董事长致辞

企业荣誉

企业文化

产品中心

运动控制器

总线型运动控制器

ZMC0系列运动控制器

ZMC1系列运动控制器

ZMC2系列运动控制器

ZMC3系列运动控制器

ZMC4系列 EtherCAT/RTEX/振镜 运动控制器

XPLC系列运动控制器

Linux运动控制一体机

运动控制卡

ECI IO控制卡

ECI1000系列控制卡

ECI2000系列控制卡

ECI3000系列控制卡

EC系列运动控制卡

PCI EtherCAT总线控制卡

PCIE EtherCAT总线控制卡

XPCIe/XPCI系列控制卡

机器视觉运动控制一体机

视觉运动控制VPLC516E

视觉运动控制VPLC532E

激光振镜视觉运动控制器

视觉运动控制VPLC710

视觉运动控制VPLC711

机器视觉运动控制开发软件

扩展模块

EtherCAT扩展模块

ZCAN总线扩展模块

S2D-4CH

人机界面

ZHD300X

ZHD400

ZHD400X

ZHD500X

软件平台

ZDevelop编程软件

ZmotionCadV2.0导图工具

ZRobotView机械手仿真工具

参考与学习资料

RTSys开发软件

Zmotion Tools 轴配置与调试软件

MotionRT7 实时内核

行业应用

3C电子

激光加工

印刷包装

自动化流水线

电子半导体

纺织服装

机器人

特种机床设备

光学筛选机

医疗器械

舞台娱乐

新闻中心

公司新闻

产品资讯

市场活动

视频教程

学习分享

支持与服务

销售网络

技术分享

下载中心

售后服务

常见问题

意见反馈

加入我们

人才招聘

人才战略

员工风采

联系我们

EN

协助伙伴成功,是我们的价值所在

The value of Zmotion is to bring customers more success!

首页 /

支持与服务 /

技术分享

Technical support

技术分享

快速入门 | 篇十六:正运动控制器EtherCAT总线快速入门

  之前正运动技术与大家分享了,运动控制器的固件升级、ZBasic 程序开发、ZPLC 程序开发、与触摸屏通讯和输入/输出IO 的应用、运动控制器数据与存储的应用、运动控制器ZCAN、EtherCAT 总线的使用、示波器的应用、多任务运行的特点、运动控制器中断的应用、U盘接口的使用、ZDevelop 编程软件的使用、运动控制器的基础轴参数与基础运动控制指令以及运动缓冲等。  今天,我们来讲解一下正运动技术运动控制器EtherCAT 总线快速入门。  视频教程:《视频教程:正运动控制器EtherCAT总线快速入门》  以下是图文详解  一准备工作    (一)材料准备  1.硬件        2.软件        1)ZDevelop V3.10版本控制器编程软件。从正运动技术官网(www.zmotion.com.cn)下载压缩包,解压后直接运行应用程序,无需安装。  2)松下伺服驱动器上位机调试软件。从松下官网下载后安装。  (二)硬件接线  1.控制器接线  控制器接口的用途参见下图。        1)主电源:将控制器主电源接线端子上的E+24V端子接入24V直流电源正极,将EGND端子接入24V直流电源负极。  2)以太网EtherNET端口接线:使用一根网线将控制器的EtherNET端口与电脑的以太网口相连。  3)伺服驱动器与控制器接线:使用一根网线将控制器的EtherCAT总线端口与伺服驱动器的X2A或X2B口相连。        注意伺服驱动器的EtherCAT接口有两个,有些驱动器这两个口可以随意接,有些分为EtherCAT IN和EtherCAT OUT,IN口接上一级设备,OUT口接下一级设备,二者不能混用,要注意连接顺序。  多轴控制时伺服驱动器的EtherCAT OUT口再连接下一级驱动设备的EtherCAT IN口,依此类推。  2.驱动器接线  伺服驱动器与电机和编码器的接线参见驱动器手册,将驱动器接入220V市电。  二 控制器与电脑连接    控制器与电脑可以通过串口或网口连接,下面以网口连接例展开说明。  (一)网口通讯操作方法  先将控制器与电脑用网线连接好,接通控制器的电源,再打开ZDevelop编程软件,点击菜单栏“控制器”→“连接”,打开“连接到控制器”窗口。        通过“连接到控制器”窗口,可以快速查看本机IP,对比控制器与电脑是否处于同一网段。  IP地址列表下拉选择时,会自动查找当前局域网可用的控制器IP地址(控制器上电POWER灯和RUN灯亮的时候就能查找到该控制器的IP地址)。  同一个网络有多个控制器的时候,IP的下拉列表若没有显示目标控制器的IP地址,可以采取IP扫描来查看当前所有可用的控制器IP地址,扫描完成之后确定关闭此窗口,重新在IP下拉列表选择。        选择正确的IP地址,点击连接之后,编程软件与控制器连接成功,在线命令与输出窗口打印信息提示。        控制器出厂的缺省IP地址为192.168.0.11,“连接到控制器”窗口能显示出本机IP地址,请注意设置有线网卡与无线网卡各自的IP。电脑需要设置IP地址与控制器IP处于同一网段才能连接,即四段的前三段要相同,最后一段不同才能通讯。  若控制器与电脑不处于同一网段,则需要修改控制器或电脑其中之一的IP地址,使二者处于同一网段。  修改控制器IP地址需要先使用串口连接控制器,获取控制器IP地址,然后修改本机IP或控制器IP使二者处于同一网段。  (二)修改控制器IP地址  先使用串口连接控制器,获取控制器IP地址,再修改控制器IP地址。  方法一:可以通过菜单栏“控制器”→“修改IP地址”窗口直接修改控制器IP地址。        方法二:通过IP_ADDRESS指令发送在线命令修改。        指令发送修改成功之后自动断开连接,在线命令打印控制器连接错误信息,通过网口连接选择新IP地址192.168.0.23再次连接控制器,IP地址修改成功后永久有效。  (三)修改本机IP地址  以WIN10为例,在开始菜单里打开控制面板,打开“网络和Internet”。        再打开“网络与共享中心”。        点击“以太网”。        在“以太网状态”窗口点击“属性”,打开“以太网属性”窗口,找到Internet协议版本4(TCP/IPv4)打开,就能看到本机IP地址修改窗口,勾选“使用下面的IP地址”,在IP地址输入栏里修改IP,将本机IP改为和控制器IP处于同一网段,修改完成点击“确认”即可成功修改IP。  再次打开“连接到控制器”窗口尝试连接到控制器。        三 EtherCAT伺服驱动器参数设置    (一)通讯周期  使用EtherCAT伺服驱动器时需要保证控制器与伺服周期一致才可正常通讯使用。  EtherCAT伺服驱动器一般支持不同周期,通讯周期主要有250us,500us,1ms,2ms,4ms,连接时自动匹配控制器周期,不需要设置,当通讯周期无法自动匹配时,通讯失败,通过升级控制器固件修改控制器周期解决。  控制器一般默认为1ms,使用SERVO_PERIOD指令读取控制器周期。  伺服周期越小,位置控制越精细,响应速度也更快。  (二)驱动器PDO设置  PDO全名为Process Data Object,指在EtherCAT总线网络中周期的进行主站与从站的数据交互的功能,可以看作一个数组空间,每个数组元素存放了不同的功能码,PDO在一个周期中执行这些功能码对应的操作,这些功能码就叫做数据字典,数据字典用4位16进制数来表示。        RxPDO:主站传送数据给从站。  TxPDO:从站传送数据给主站。  EtherCAT总线上控制器为主站,伺服驱动器为从站。  如6040h控制字(用于控制伺服轴的使能、启动、停止、报警、复位等运行状态),每个数据字典Index包含32个子字典Sub-Index。数据字典的功能和初始值查看驱动器手册的描述。  数据字典的编号及功能是协议本身就确定好的,用户只需按照数据字典的描述设置数据字典的bit位,所有的标准EtherCAT设备都使用一套数据字典。  松下A6B伺服驱动器的EtherCAT相关说明内容可查看松下文档《技术资料-EtherCAT通讯规格篇》。        EtherCAT初始化过程中必须进行驱动器PDO配置,DRIVE_PROFILE指令配置驱动器的PDO列表,目前提供20几种配置选择,每种配置包含哪些数据字典查看该指令说明确认,如下图,具体内容可以在《ZBasic编程手册V3.2.4》中查看。          DRIVE_PROFILE=-1表示驱动器的内置缺省PDO列表,驱动器内置PDO列表包含哪些数据字典需要查看驱动器手册。  DRIVE_PROFILE已有的配置不能满足需求就自定义PDO,采用SDO相关指令操作数据字典配置驱动器需要的PDO。  驱动器的相关参数修改,同样使用SDO指令读写对应的数据字典进行配置或通过驱动器软件修改。SDO指令包含数据字典读取SDO_READ、SDO_READ_AXIS和数据字典写入SDO_WRITE、SDO_WRITE_AXIS。  数据字典读取语法:  SDO_READ (槽位号, 设备编号, 数据字典编号, 数据字典子编号, 数据类型, 读取数据存储TABLE位置)  SDO_READ_AXIS (轴号, 数据字典编号, 数据字典子编号, 数据类型, 读取数据存储TABLE位置)  数据字典写入语法:  SDO_WRITE (槽位号, 设备编号, 数据字典编号, 数据字典子编号, 数据类型, 写入数据值)  SDO_WRITE_AXIS (轴号, 数据字典编号, 数据字典子编号, 数据类型, 写入数据值)  自定义PDO的配置方法请咨询正运动的销售工程师或者技术工程师。  (三)驱动器参数设置  修改驱动器参数先连接驱动器,可选USB线或WLAN连接驱动器,使用USB线连接电脑与驱动器端的X1端口,给驱动器上电,打开松下驱动器软件PANATERM,弹出“选择与驱动器通信”窗口,选择与驱动器通过USB连接后,自动获取到驱动器信息显示在窗口内,点击OK连接成功,就能对驱动器进行设置。        点击菜单栏“显示”→“对象编辑器”,打开如下窗口,找到需要设置的数据字典,在“Setting Value”一栏直接修改数据字典的内容。  修改完成将参数传送给驱动器,并写入驱动器的EEPROM,驱动器再次上电后参数生效。        例:设置UNITS脉冲当量,即设置电机转一圈需要发送多少个脉冲。  SPEED速度、ACCEL加速度、DECEL减速度和运动指令等都是以UNITS为基本单位。  如图,通过数字字典6091h设置电子齿轮比,6091h-01h设置电子齿轮比分子,6091h-02h设置电子齿轮比分母,此时,电子齿轮比=1/1,6092h-01h设为10000表示给电机发10000个脉冲能使电机旋转一圈,对应的脉冲当量UNITS=10000,MOVE(2)表示给电机发送20000个脉冲,此时电机转两圈。        或者使用SDO指令读写数据字典修改参数。修改完成使用驱动器软件读取6092h-01h的值为10000。  示例:          SDO_WRITE(Bus_Slot,iNode,$6091,1,7,1)             '电子齿轮比分子          SDO_WRITE(Bus_Slot,iNode,$6091,2,7,1)             '电子齿轮比分母          SDO_WRITE(Bus_Slot,iNode,$6092,1,7,10000)     '电机一圈脉冲数  (四)驱动器IO信号  驱动器自身有输入信号,作用为保护信号,默认使能状态,若不接入外部信号,驱动器就会保护报错,调试阶段可以关闭这些信号方便调试,将输入值设置为0即可,需要使用驱动器IO时要对驱动器的IO编号映射后才能使用,后续根据实际需求接入实际信号。  点击驱动器软件PANATERM主界面的“参数”按钮打开下方窗口,选中要修改的IO信号后,在“设定值”一栏修改。        驱动器IO映射需要PDO包含数据字典60FDh,然后使用DRIVE_IO指令设置驱动器IO地址,映射的编号范围不要与总线上的其他设备的IO编号重复。  DRIVE_IO (轴号)=输入输出IO起始编号。  示例:          DRIVE_PROFILE(iAxis) = 5         '设定对应的带IO映射的PDO模式          DRIVE_IO(iAxis) = i_IoNum        '设定驱动器输入/输出IO起始编号  (五)参数写入驱动器  驱动器的数据字典参数或其他的参数设置完成后,先点击“传送”将修改的全部参数传入驱动器,再点击EEP,将参数写入驱动器的EEPROM,给驱动器重新上电后修改的参数生效,图片上值修改了输入参数,在下图查看不同类别参数变更后的值并修改。        (六)驱动器轴号映射  EtherCAT总线上连接的设备的设备号按照连接顺序从0开始自动编号,驱动器编号也是按连接顺序给驱动器设备自动从0开始编号的,只算总线上的驱动器设备,其他设备是没有驱动器编号的。  EtherCAT总线上连接的驱动器需要使用指令映射驱动器的轴号,使用AXIS_ADDRESS 指令映射,映射完成之后才能使用BASE指令选择驱动器轴号,发送脉冲,控制驱动器所连的电机运行。  轴映射写在总线初始化程序中,总线扫描之后,开启总线之前。  语法:AXIS_ADDRESS(轴号)=(槽位号<<16)+驱动器编号+1  EtherCAT总线的槽位号是0。轴号为驱动器映射的目标轴号,映射时每个驱动器的轴号不重复,指向空闲轴号即可。  示例:          AXIS_ADDRESS (6)=(0<<16)+0+1         '第一个ECAT驱动器,驱动器编号0,绑定为轴6          AXIS_ADDRESS (7)=(0<<16)+1+1         '第二个ECAT驱动器,驱动器编号1,绑定为轴7          AXIS_ADDRESS (8)=(0<<16)+2+1         '第三个ECAT驱动器,驱动器编号2,绑定为轴8          ATYPE(6)=65                             '设置为ECAT轴类型,65-位置 66-速度 67-转矩          ATYPE(7)=65          ATYPE(8)=65  (七)驱动器控制模式  EtherCAT驱动器一般有三种控制模式,分别为CSP周期位置模式,CSV周期速度模式,CST周期力矩模式。提供ATYPE指令设置控制模式。        CSP,CSV,CST模式的设置需要预先设置PDO,PDO同时包含下方数据字典时,即可直接修改ATYPE数值进行模式切换。驱动器默认PDO列表内置有哪些数据字典需要查看驱动器手册确定。  1.当PDO包含607Ah时,ATYPE可设置为65,周期位置模式,此时使用运动指令控制电机运动。  2.当PDO包含60FFh时,ATYPE可设置为66,周期速度模式,此时使用DAC指令控制电机以设置值的速度运行,速度单位有两个,脉冲数/S和R/MIN,由驱动器确定,使用时先给较小的数值,观察电机速度情况,再加大。  3.当PDO包含6071h时,ATYPE可设置为67,周期力矩模式,此时使用DAC指令控制电机以设置值的力矩运行,DAC值范围0-1000,对应0-100%的6071设置值,比如DAC=10,此时电机力矩=1%的6071h值。  注意速度模式和力矩模式切换时,先将DAC=0后,再修改ATYPE,防止出现事故。  位置模式:ATYPE=65  将DRIVE_PROFILE配置为带速度的模式1,ATYPE=65,执行总线初始化程序后,设置轴的UNITS、SPEED等运行参数,使用运动指令给电机发脉冲控制轴的运行,注意试运行时SPEED的值不要设置过大。  位置模式也是实际过程中用的较多的一种模式,运行效果参见在文章后半部分。        速度模式:ATYPE=66  将DRIVE_PROFILE配置为带速度的模式22,ATYPE=66,执行总线初始化程序后,在线命令栏发送DAC指令即可控制电机运行,如下图,DAC=5000表示电机以每秒5000个脉冲的速度持续运行,DAC命令发送后电机一直运行,要提高运行速度将DAC的值加大,DAC的值太小电机会克服不了摩擦力无法转动。  出于安全因素考虑,注意DAC不要设置过大,先设置一个较小值,观察电机运行情况后慢慢往上增加。  此模式下停止电机在线命令发送DAC=0即可,或按下软件的紧急停止按钮。        力矩模式:ATYPE=67  将DRIVE_PROFILE配置为带力矩的模式30,ATYPE=67,执行总线初始化程序后,在线命令栏发送DAC指令即可控制电机运行,如下图,DAC=30,当前驱动器为3%的力矩,DAC等于1000时表示100%力矩。要提高运行速度将DAC的值加大,DAC的值太小电机会克服不了摩擦力无法转动。  出于安全因素考虑,注意DAC不要设置过大,先设置一个较小值,观察电机运行情况后慢慢往上增加。  此模式下停止电机在线命令发送DAC=0即可,或按下软件的紧急停止按钮。        (八)驱动器报警  观察驱动器上LED面板上是否有报错信息,报错会显示错误码,根据驱动器手册排查错误,修正后将报警清零。        打开驱动器软件的报警窗口,也能看当前驱动器是否有警报,或查询历史警报。          初始化过程中按轴号清除驱动器的错误,重复调用DRIVE_CLEAR指令清除多个驱动器错误。  语法:DRIVE_CLEAR(模式值)  模式值0——清除当前告警;模式值1——清除历史告警;模式值2——清除外部输入告警。  示例:          BASE(i)          DRIVE_CLEAR(0)         '清除驱动器错误          DELAY 50          DATUM(0)                 '清除控制器轴状态错误"          DELAY 100  (九)驱动器回零  EtherCAT总线可使用控制器提供的回零方式DATUM(mode),mode模式值选择查看ZBasic编程手册的DATUM指令。EtherCAT总线也可以使用驱动器本身的回零模式。  驱动器本身回零使用DATUM(21,mode2)指令,mode2模式值要查驱动器手册数据字典6098h回零模式,如下图所示,mode2填入对应Value值,mode2缺省值为0,也是驱动器回零模式,注意此时的原点限位等信号要接在驱动器上,所以要使用驱动器回零时需要对驱动器的IO进行映射。        示例:初始化完成后再运行驱动器回零程序。          BASE(iAxis)         '按驱动器轴号逐个回零          AXIS_STOPREASON = 0          SPEED = 100         '回零速度          CREEP = 10         '反找速度          ACCEL = 1000          DATUM(21,2)         '驱动器回零模式value=2          WAIT IDLE          IF AXIS_STOPREASON = 0 THEN              ?"回零成功"          ELSE              ?"回零失败" ,"停止原因:",AXIS_STOPREASON,"状态字0X",HEX(DRIVE_STATUS)          ENDIF  四 EtherCAT总线初始化    (一)初始化基本流程  按照前面的步骤接好线,给EtherCAT伺服驱动器和控制器上电,使用ZDevelop软件连接控制器,EtherCAT总线使用一段程序来初始化,将初始化程序下载到控制器运行之后,才能设置轴参数和执行运动指令控制伺服电机的运动。        初始化程序中包含WDOG=1开总使能,和AXIS_ENABLE(轴号) = 1开单轴使能,使能前用手可以转动点击,使能完成后便旋转不动,需要给电机发送脉冲才能使其转动。  (二)初始化程序  1.主要初始化程序  用户使用的时候只需要设置程序头的四个常量的值即可。程序其他地方不用改动。分别设置起始的脉冲轴号,和使用的脉冲轴个数,总线轴的起始映射轴号,和总线轴的个数。     '****************ECAT总线初始化     global CONST PUL_AxisStart = 0         '本地脉冲轴起始轴号     global CONST PUL_AxisNum = 0         '本地脉冲轴轴数量     global CONST Bus_AxisStart = 0            '总线轴起始轴号     global CONST Bus_NodeNum = 1          '总线配置节点数量,用于判断实际检测到的从站数量是否一致   global CONST BUS_TYPE = 0                 '总线类型。可用于上位机区分当前总线类型     global CONST Bus_Slot = 0                     '槽位号0(单总线控制器缺省0)   global MAX_AXISNUM                 '最大轴数   MAX_AXISNUM = SYS_ZFEATURE(0)   global Bus_InitStatus         '总线初始化完成状态   Bus_InitStatus = -1   global Bus_TotalAxisnum         '检查扫描的总轴数   delay(3000)         '延时3S等待驱动器上电,不同驱动器自身上电时间不同,具体根据驱动器调整延时   ?"总线通讯周期:",SERVO_PERIOD,"us"     Ecat_Init()             '初始化ECAT总线       while (Bus_InitStatus = 0)         Ecat_Init()     wend     END       '*********************ECAT总线初始************************     '初始流程: slot_scan(扫描总线) -> 从站节点映射轴/io -> SLOT_START(启动总线) -> 初始化成功  '**********************  global sub Ecat_Init()      local Node_Num,Temp_Axis,Drive_Vender,Drive_Device,Drive_Alias      RAPIDSTOP(2)      for i=0 to MAX_AXISNUM - 1             '初始化还原轴类型          AXIS_ENABLE(i) = 0          atype(i)=0          AXIS_ADDRESS(i) =0          DELAY(10)                         '防止所有驱动器全部同时切换使能导致瞬间电流过大  next  Bus_InitStatus = -1      ' Bus_TotalAxisnum = 0  SLOT_STOP(Bus_Slot)  delay(200)  slot_scan(Bus_Slot)                     '扫描总线  if return then      ?"总线扫描成功","连接从站设备数:"NODE_COUNT(Bus_Slot)      if NODE_COUNT(Bus_Slot) <> Bus_NodeNum then '判断总线检测数量是否为实际接线数量          ?""          ?"扫描节点数量与程序配置数量不一致!" ,"配置数量:"Bus_NodeNum,"检测数量:"NODE_COUNT(Bus_Slot)          Bus_InitStatus = 0 '初始化失败。报警提示          'return      endif  '"开始映射轴号"  for Node_Num=0 to NODE_COUNT(Bus_Slot)-1         '遍历扫描到的所有从站节点      Drive_Vender = NODE_INFO(Bus_Slot,Node_Num,0)         '读取驱动器厂商      Drive_Device = NODE_INFO(Bus_Slot,Node_Num,1)         '读取设备编号      Drive_Alias = NODE_INFO(Bus_Slot,Node_Num,3)         '读取设备拨码ID  if NODE_AXIS_COUNT(Bus_Slot,Node_Num) <> 0 then         '判断当前节点是否有电机      for j=0 to NODE_AXIS_COUNT(Bus_Slot,Node_Num)-1         '根据节点带的电机数量循环配置轴参数(针对一拖多驱动器)          Temp_Axis = Bus_AxisStart + Bus_TotalAxisnum         '轴号按NODE顺序分配          'Temp_Axis = Drive_Alias                         '轴号按驱动器设定的拨码分配(一拖多需要特殊处理)          base(Temp_Axis)          AXIS_ADDRESS(Temp_Axis)= (Bus_Slot<<16)+ Bus_TotalAxisnum + 1        '映射轴号          ATYPE=65                 '设置控制模式 65-位置 66-速度 67-转矩              DRIVE_PROFILE=-1             '配置为驱动器内置PDO列表              ' Sub_SetDriverIo(Drive_Vender,Temp_Axis,128 + 32*Temp_Axis)     '映射驱动器IO,IO映射到控制器IO32-以后每个驱动器间隔32点              ' Sub_SetNodePara(Node_Num,Drive_Vender,Drive_Device,j)     '设置特殊总线参数          disable_group(Temp_Axis)     '每轴单独分组          Bus_TotalAxisnum=Bus_TotalAxisnum+1     '总轴数+1      next  else                                                 'IO扩展模块      Sub_SetNodeIo(Node_Num,Drive_Vender,Drive_Device,1024 + 32*Node_Num) '映射扩展模块IO  endif next ?"轴号映射完成","连接总轴数:"Bus_TotalAxisnum  wa 200  SLOT_START(Bus_Slot)             '启动总线  if return then      wdog=1     '使能总开关      '?"开始清除驱动器错误"      for i= Bus_AxisStart to Bus_AxisStart + Bus_TotalAxisnum - 1          BASE(i)          DRIVE_CLEAR(0)          DELAY 50          '?"驱动器错误清除完成"          datum(0)     '清除控制器轴状态错误"          wa 100          '"轴使能"          AXIS_ENABLE=1      next      Bus_InitStatus = 1      ?"轴使能完成"      '本地脉冲轴配置      for i = 0 to PUL_AxisNum - 1          base(PUL_AxisStart + i)          AXIS_ADDRESS = (-1<<16) + i          ATYPE = 4      next      ?"总线开启成功"  else      ?"总线开启失败"      Bus_InitStatus = 0  endif else  ?"总线扫描失败"  Bus_InitStatus = 0 endifend sub  2.驱动器IO映射(需要使用驱动器IO时才映射,否则不用映射)。  '************************总线驱动IO映射**************************************  '通过DRIVE_IO指令映射驱动器对象字典中60FD,60FE输入输出状态,要设置正确的DRIVE_PROFILEE或者POD后才可以正常映射  'DRIVE_PROFILE模式包含60FD/60FE  'iAxis - 轴号 iVender - 驱动器类型 i_IoNum - 输入输出起始编号  '**************************************************************************  global sub Sub_SetDriverIo(iVender,Iaxis,i_IoNum)      if iVender = $66f then '松下驱动器          DRIVE_PROFILE(iAxis) = 5 '设定对应的带IO映射的PDO模式          DRIVE_IO(iAxis) = i_IoNum          REV_IN(iAxis) = i_IoNum '负限位应60FD BIT0          FWD_IN(iAxis) = i_IoNum + 1 '正限位先对应60FD BIT1          DATUM_IN(iAxis) = i_IoNum + 2 '原点先对应60FD BIT2          INVERT_IN(i_IoNum,ON) '特殊信号有效电平反转          INVERT_IN(i_IoNum + 1,ON)          INVERT_IN(i_IoNum + 2,ON)      endif  end sub  3.扩展模块IO映射(连接了扩展模块才设置)。  '***********************总线IO扩展模块映射**************************************  '通过NODE_IO(Bus_Slot,Node_Num)分配模块IO起始地址  '*******************************************************************************  global sub Sub_SetNodeIo(iNode,iVender,iDevice,i_IoNum)      if iVender = $41B and iDevice = $130 then '正运动EIO1616          NODE_IO(Bus_Slot,iNode) = i_IoNum      endif  end sub  4.特殊参数配置。  '********************************从站节点特殊参数配置********************************  '通过SDO方式修改对应对象字典的值修改从站参数(具体对象字典查看驱动器手册)  '******************************************************************************************************  global sub Sub_SetNodePara(iNode,iVender,iDevice,Iaxis)      if iVender = $41B and iDevice = $1ab0 then                              '正运动24088脉冲扩展轴          SDO_WRITE(Bus_Slot,iNode,$6011+Iaxis*$800,0,5,4)             '设置扩展脉冲轴ATYPE类型          SDO_WRITE(Bus_Slot,iNode,$6012+Iaxis*$800,0,6,0) '            设置扩展脉冲轴INVERT_STEP脉冲输出模式          NODE_IO(Bus_Slot,iNode) = 32 + 32*iNode                           '设置240808上IO的起始映射地址      elseif iVender = $66f then                                                           '松下驱动器          SDO_WRITE(Bus_Slot,iNode,$3741,0,3,0)                                '以拨码为ID          SDO_WRITE(Bus_Slot,iNode,$3401,0,4,$10101)                      '正限位电平 $818181          SDO_WRITE(Bus_Slot,iNode,$3402,0,4,$20202)                      '负限位电平 $828282          SDO_WRITE(Bus_Slot,iNode,$6091,1,7,1)                                '电子齿轮比分子          SDO_WRITE(Bus_Slot,iNode,$6091,2,7,1)                                '电子齿轮比分母          SDO_WRITE(Bus_Slot,iNode,$6092,1,7,10000)                        '电机一圈脉冲数          SDO_WRITE(Bus_Slot,iNode,$607E,0,5,0)                                 '电机正转0 反转224          SDO_WRITE(Bus_Slot,iNode,$6085,0,7,4290000000)               '异常减速度          'SDO_WRITE(Bus_Slot,iNode,$1010,1,7,$65766173)                '写EPPROM(写EPPROM后驱动器需要重新上电)          '?"写EPPR0M OK 请断电重启"      endif  end sub  EtherCAT初始化成功后会打印信息提示,如下。若初始化失败也会打印信息提示。        (三)总线节点状态查看  EtherCAT总线上连接的设备信息有如下三种查看方法。查看总线状态的前提是初始化操作成功,否则无法查看。  1.在菜单栏“控制器”→“控制器状态”窗口查看“槽位0节点”。        2.在菜单栏“调试”→“总线状态诊断”打开如下窗口查看控制器总线槽位接口的设备信息。        3.还可以通过在线命令发送?*EtherCAT打印EtherCAT总线上的全部设备信息。        (四)运行效果  初始化成功后,将各个总线轴依此回零,配置好轴参数之后,就可以使用指令让总线轴按需求动作。  在程序中写入运动指令、在线命令发送运动指令或使用“手动运动”窗口控制电机运行。        示波器采集总线轴参数波形:        使用“手动运动”功能快速手动操作电机运动:        正运动技术运动控制器EtherCAT总线快速入门就讲到这里。更多学习视频及图文请关注我们的公众号“正运动小助手”。  本文由正运动小助手原创,欢迎大家转载,共同学习,一起提高中国智能制造水平。文章版权归正运动技术所有,如有转载请注明文章来源。      

关于我们

公司简介

发展历程

董事长致辞

企业荣誉

企业文化

产品中心

运动控制器

运动控制卡

机器视觉运动控制一体机

扩展模块

人机界面

软件平台

新闻中心

公司新闻

产品资讯

市场活动

视频教程

学习分享

支持与服务

销售网络

技术分享

下载中心

售后服务

常见问题

意见反馈

视频教程

用户注册

用户登录

加入我们

人才招聘

人才战略

员工风采

联系我们

邮箱留言

提交

Copyright © 2013 正运动技术有限公司

Design by Zmotion 版权所有   粤ICP备13037187号    Powered by www.zmotion.com.cn

运动控制器-运动控制卡

在线咨询

技术支持1

技术支持1

技术支持2

技术支持2

销售咨询

销售咨询

【EtherCAT】4.实现一个成熟的从站 - 知乎

【EtherCAT】4.实现一个成熟的从站 - 知乎首发于EtherCAT切换模式写文章登录/注册【EtherCAT】4.实现一个成熟的从站小皎皎一只可爱的小皎皎学习EtherCAT最好从从站开始,因为从站包含了EtherCAT大量原理,例如状态机,PDO映射等。学习从站代码有利于理解过程数据如何传输,XML有什么作用。本文介绍一些从站的基础知识,以及如何设计一个功能完善的从站。从站硬件无论是以ASIC还是FPGA的形式,ESC都是从站的核心,主站通过读写ESC的DPRAM空间实现数据传输。ESC通过PDI接口将数据发送到MCU,在MCU中执行实际的应用层操作。ESC根据倍福公司的IP core设计,目前主流的ESC芯片包括: ASIX公司的AX58100芯片;BeckHoff自己的ET1100芯片;Microchip的LAN9252芯片;FPGA:ET1810(altera)和ET181(xilinx);由于都是基于BeckHoff的IP core设计的,因此这几个芯片在实际功能上差距并不大,区别在于DPRAM的大小,SM的数量,FMMU的数量,PDI的方式等。芯片网口FMMUSMRAM(kBYTE)数字IOSPI slaveLocal BUSAX581002内部PHY,1MII88932Y8/16 asyncLan92522内部PHY,1MII34432Y8/16 sync/asyncET11004EBUS/MII88816Y8/16 sync/async关于芯片的详细参数,可以访问ESC具有各类AL寄存器供主站访问,但实际不执行具体的应用层操作,从站应用层的管理由专门的MCU进行。stm32有强大的性能和完善的生态,因而是应用层使用最为广泛的芯片,也可以采用其他的硬件例如Arduino或者ESP32实现应用层逻辑,但是要支持对应ESC的相关PDI接口。一般来说,从站硬件系统如下图所示:从站最小系统从站软件从站帧的链路层功能都是由ESC完成的。从站软件运行在MCU中,主要执行的是应用层的操作。MCU通过PDI接口读取ESC中的PDO和SDO数据,然后执行应用层的处理,例如状态机,COE,EOE等相关逻辑。MCU需要一套协议栈执行相关的逻辑,目前使用最多的从站协议栈是EtherCAT技术组(EtherCAT Technology Group,ETG)为会员提供的Slave Stack Code(SSC),SSC支持几乎所有应用层协议栈(EOE,COE,FOE)等,同时还提供了对专有协议Cia402等的支持。除此之外,SSC还提供了专门的工具来配置协议栈和PDO。SSC的缺点是,它是针对BeckHoff自己的PIC和ET1100芯片写的,如果使用stm32或者其他通用处理器,需要手工移植代码。ssc的代码框架除了SSC之外,另一个比较有名的EtherCAT开源协议栈是SOES(GitHub - OpenEtherCATsociety/SOES: Simple Open Source EtherCAT Slave),SOES支持EOE和COE这两种较为常用的应用层协议,同时支持静态和动态的PDO映射。SOES的代码相较于SSC精简很多,代码可移植性较好。商用从站协议栈中,比较具有代表性的是KPA协议栈(https://koenig-pa.de/products/ethercat/kpa-ethercat-slave-stack)。作为商用协议栈,KPA协议栈几乎支持所有的EtherCAT特性,包括: 邮箱协议:COE,EOE,FOE,SOE,VOE 分布时钟DC;不同的扫描速率;从可移植性的角度,KPA协议栈实现了一个硬件抽象层,支持不同ESC和主控芯片的数据交互。下图是KPA协议栈的程序结构,从图中可以看出,数据从DPI传输到MCU后,首先通过的是硬件抽象层,主循环轮询AL事件来获取过程数据和邮箱数据的更新,然后基于对象字典更新PDO和SDO。从站功能操作系统层对于实时性和同步要求极高的场合,一般一个系统运行一个从站任务就好了,例如电机驱动从站,此时不建议使用操作系统,直接进行SSC协议栈移植即可。但是实时要求不强的场合,每个任务/接口使用一个从站是很浪费的,毕竟ESC还是有点小贵的,对于任务很多的从站,还是有必要上嵌入式实时系统。下面介绍一下嵌入式操作系统的作用。操作系统层的主要作用是合理对从站任务进行调度。作为现场总线的一部分,一个EtherCAT从站一般至少包含两个任务,一个从主站获取EtherCAT数据,另一个与控制设备(比如电机或CAN总线)交互。在多任务环境下,为了确保EtherCAT通信的实时性、增强任务调度的合理性、有效利用系统资源,从站应当基于实时操作系统进行开发。相较于Linux等操作系统,嵌入式操作系统具有如下特点:小型系统:由于嵌入式设备功能明确,操作系统往往与应用程序编译在一起运行。实时性:嵌入式操作系统往往是实时操作系统。很多嵌入式设备对处理的实时性有严格要求,这种实时性是通过操作系统层面的任务调度机制、任务优先级的设定和应用程序的快速处理来达到的。可移植性:由于嵌入式设备的应用场景多样,复杂程度千差万别,应用程序的大小各不相同,移植的需求是频繁发生的。ucos,vxworks,FreeRTOS和RT-thread是较具代表性的实时操作系统。这里以RT-thread为例介绍嵌入式实时系统的组成,RT-thread不仅是一个实时操作系统,也是一个完善的嵌入式软件生态。它的底层是RT-thread内核,基于内核还提供了网络框架,设备框架,以及各类API。最后在应用层还提供了各类具体应用。RT-thread架构线程管理 RT-thread内核是一个RT-thread程序的核心,RT-thread内核是一个基于优先级的全抢占式多线程调度系统,在该实时系统中,线程是最小的调度单位,系统中除了中断处理函数、调度器上锁部分的代码和禁止中断的代码是不可抢占的之外,系统的其他部分都是可以抢占的,包括线程调度器自身。RT-thread的线程调度关系如下。在RT-thread 中,实际上线程并不存在运行状态,就绪状态和运行状态是等同的。RT-thread线程RT-thread最多支持256个线程优先级,0优先级代表最高优先级,最低优先级留给空闲线程使用。同时它也支持创建多个具有相同优先级的线程,相同优先级的线程间采用时间片轮转调度算法进行调度,使每个线程运行相应时间。线程间通信 RT-thread支持线程间的同步和通信。采用信号量、互斥量与事件集实现线程间同步,线程通过对信号量、互斥量的获取与释放进行同步。支持邮箱和消息队列等通信机制。邮箱和消息队列的发送动作可安全用于中断服务例程中。通信机制支持线程按优先级等待或按先进先出方式获取。时钟管理 任何操作系统都需要提供一个时钟节拍,以供系统处理所有和时间有关的事件,如线程的延时、线程的时间片轮转调度以及定时器超时等。时钟节拍是特定的周期性中断,中断之间的时间间隔取决于不同的应用,时钟节拍率越快,系统的额外开销就越大,从系统启动开始计数的时钟节拍数称为系统时间。RT-Thread 的时钟管理以时钟节拍为基础,时钟节拍是 RT-Thread 操作系统中最小的时钟单位。RT-Thread 的定时器提供两类定时器机制: 单次触发定时器:这类定时器在启动后只会触发一次定时器事件,然后定时器自动停止。 周期触发定时器:这类定时器会周期性的触发定时器事件,直到用户手动的停止定时器否则将永远持续执行下去。通常使用定时器定时 回调函数(即超时函数),完成定时服务。用户根据自己对定时处理的实时性要求选择合适类型的定时器。内存管理 内存是系统的重要资源,特别是对于资源紧张的嵌入式设备来说。RT-Thread将内存分为动态内存堆和静态内存池,对于动态内存的申请,RT-Thread提供小内存分配算法,slab算法和memheap算法。为了避免内存碎片,提高分配效率,RT-Thread还在.data段提供一个静态的内存池。设备管理 和Linux驱动框架类似,RT-Thread也通过I/O设备模型框架对外设进行管理。I/O 设备管理层实现了对设备驱动程序的封装。应用程序通过 I/O 设备管理接口获得正确的设备驱动,然后通过这个设备驱动与底层 I/O 硬件设备进行数据交互。设备驱动程序的升级、更替不会对上层应用产生影响。这种方式使得设备的硬件操作相关的代码能够独立于应用程序而存在,双方只需关注各自的功能实现,从而降低了代码的耦合性、复杂性,提高了系统的可靠性。硬件抽象层硬件抽象层的主要作用是提升程序的可移植性。与ESC的数据交互,是EtherCAT从站MCU最为重要的功能。MCU通过PDI访问ESC的内存空间,读取寄存器和过程数据,因此,有必要对ESC的数据访问进行封装,封装的目的是保证在MCU应用层能够通过通用的接口实现对不同类型从站ESC,不同接口PDI的访问。关于硬件抽象层的封装,SOES实现了所有硬件访问相关函数:应用层协议EtherCAT从站的目标是能够支持各类应用层协议,这其中最主要的是COE协议和基于COE的各类行规。此外还需要支持FOE,EOE,SOE等协议。COE:CANopen over EtherCAT,EtherCAT协议在应用层支持CANopen协议,并作了相应的扩充,CoE协议完全遵从CANopen协议。COE协议十分核心且复杂,在此不作过多介绍。EOE:EtherNet over EtherCAT,该协议支持EtherCAT能分段传递标准的以太网数据报文,使得EtherCAT协议同样能支持TCP/IP、UDP/IP协议。SOE:Servo Drive over EtherCAT。SERCOS是世界首个应用于伺服控制的协议。EtherCAT协议在应用层接口上兼容了这个协议,简称为SOE。SERCOS应用层协议为主站设计了信息接口,可以通过配置EtherCAT过程数据报文,实现周期性传递伺服驱动器的数据。FOE:File Access over EtherCAT。该协议可以使用EtherCAT总线上传、下载固件,刷新从站的固件。并且可以通过命令行工具加载或存储文件。结合实际需求,COE和基于COE的行规协议CiA402等是必须实现的,FOE、EOE作为程序的扩展功能有必要实现,而SOE不是常用需求。动态PDO映射静态PDO映射是将PDO变量“写死”在从站中,对于实际应用场景是十分不友好的,例如某个机型的电机需要实时传输电机温度,但在另一个机型中不需要温度信息,如果使用静态PDO映射,为了提升传输效率,删除温度PDO,则需要修改代码,烧写固件,更新XML文件。这样会带来巨大的工作量。特别是基于CiA402的驱动器来说,经常要根据上位机软件的需求修改传输变量。动态PDO映射允许定制PDO以满足客户需求,TwinCAT和KPA studio等上位机软件都支持以勾选的形式动态配置PDO。为了使得上位机能够修改PDO assign,需要在xml中配置mandatory为false(SSC在EXCEL)中可以配置。动态PDO映射的基本原理是操作对象字典的0x1C12和0x1C13对象,这两个对象分别管理输出和输入的PDO映射。过程如下:将Ethercat状态机切换到PreOP状态,此状态可以用SDO来配置PDO映射;清除PDO指定对象的PDO映射对象,即设置0x1C12-00,与0x1C13-00为0;PDO映射对象无效,即对0x1600-0x1603/0x1A00-0x1A01的子索引设置为0;重新配置PDO映射内容;0x1600-01开始的是RxPDO内容,0x1A00-01开始的是TxPDO;设置PDO映射对象总数;写有效的PDO映射对象索引到PDO指定对象设置PDO指定对象的总个数,即将映射对象个数写入到1C12-00h和1C13-00h转换Ethercat状态机到安全操作以上,配置的PDO映射将有效。分布时钟EtherCAT各个从站得到帧后会进行处理或者转发,这需要一定的微小时间。但当需要经手的从站多,或者数据量大的时候,积少成多会导致较大的延迟,并且电缆线内信号传输也占有一定的延时时间。分步时钟可以使所有的EtherCAT设备使用相同的系统时间,从而控制各设备的任务的同步执行,支持分布式时钟的从站称为DC从站。为使各个从站的参考时钟达到绝对同步,主站会计算各个从站的偏移时间,这个值会写入对应从站的系统时间偏移寄存器。在从站端,分布时钟由ESC芯片实现,ESC为从站控制微处理器提供同步的中断信号和时钟信息,分布时钟单元可以产生两个同步信号SYNC0和SYNC1,用于给应用层提供中断或直接触发的输出数据更新。MCU可以通过ESC的中断信息和时间漂移寄存器的值更新本地系统时钟。分布时钟是从站的重要功能,SSC和SOES都实现了分布时钟,可以参考这两者的设计实现该功能。SDK目前从站代码开发主要有两种方式: 基于现有的代码进行移植:目前对于成熟的ESC(ET1100、LAN9252、AX58100)都有比较成熟的解决方案。但移植仍然要求对代码较为熟悉,如果添加新功能较为困难,综合来看较为麻烦;基于从站软件生成:SSC,SOES和KPA都提供了对应的从站代码生成器,但是SSC是针对自己的的PIC32芯片的,仍然需要手动移植代码;SOES和KPA的从站软件都属于商用软件需要较高的授权费;因此通过一个SDK简化从站开发流程是有必要的,参考SOES的slave editor,SDK所需的功能如下:从站基本信息:允许通过界面添加XML的必要信息,例如vendor ID,product ID等;数据链路层配置,允许通过界面配置FMMU,SM同步管理器和邮箱;PDI的配置:允许通过界面配置PDI相关寄存器;PDO的配置:这是从站软件的核心,允许通过界面直接添加和管理PDO,由于PDO是从站最重要的功能,此功能将极大简化从站开发过程;代码生成和XML的生成。SOES的上位机软件从站性能从站响应时间从站响应时间是从站的性能指标,指从发送一帧数据,经过每个从站ESC的处理,到主站接收到这帧数据的时间。从站响应时间主要由硬件和网络结构,数据传输量决定,具体地:带宽:传输延时和带宽有关系,对于单个bit,从发送到确认,不考虑线路损耗的时间是(1/BandWidth)。假设EtherCAT网络的带宽是100Mbit/s,则每字节的传输延时是(1/100M)*8 = 80us;主站硬件延时:主站硬件同样存在延时,一般在几us左右;主站软件延时:主站软件一般会带来几微秒的延时,取决于主站的性能;从设备数量:每个MII/PHY接口的ESC会带来1us的延时,而EBUS接口的则只有0.3us;KPA studio的数据界面,在运行状态下可以查看从站响应时间。编辑于 2023-08-29 15:47・IP 属地浙江EtherCAT 总线驱动器​赞同 20​​11 条评论​分享​喜欢​收藏​申请转载​文章被以下专栏收录EtherCAT介绍工业以太网总线EtherCAT技

Ethercat解析(五)之初始化流程_ethercat 初始化指令-CSDN博客

>

Ethercat解析(五)之初始化流程_ethercat 初始化指令-CSDN博客

Ethercat解析(五)之初始化流程

最新推荐文章于 2023-12-27 21:39:20 发布

zhangzheng_1986

最新推荐文章于 2023-12-27 21:39:20 发布

阅读量4.3k

收藏

14

点赞数

3

分类专栏:

Etherlab

Etherlab

专栏收录该内容

5 篇文章

9 订阅

订阅专栏

一、EtherCAT入口

源代码执行命令sudo /etc/init.d/ethercat start,将会从文件module.c文件中的ec_init_module函数中开始往下执行初始化流程。

二、初始化大致过程

(1) ec_init_module 主要用于生成/dev/EtherCAT设备,并且调用ec_master_init初始化主机相关信息。

ec_master_init()的主要工作内容:

1.设置IDLE模式下数据发送周期; 2.初始化数据包队列; 3.初始化网络设备; 4.初始化master主状态机; 5.初始化参考时钟数据包; 6.初始化时钟数据包; 7.初始化对时监测数据包; 8.初始化字符设备,/dev/EtherCAT0; 9.初始化RTDM设备;

(2) IDLE状态进程 设备打开后,设备调用ec_master_enter_idle_phase,该函数中将启用ec_master_idle_thread进程

ec_master_idle_thread以设定的周期(send_interval)发送数据包并处理,其流程如下: 其中ec_master_idle_thread()的调用周期与系统滴答时间有关:

//send interval in IDLE phase

ec_master_set_send_interval(master, 1000000/HZ);

三、数据帧收发过程

Etherlab1.5.2 提供了Generic驱动,从而使Etherlab能通过任何网卡收发EtherCAT帧

优惠劵

zhangzheng_1986

关注

关注

3

点赞

14

收藏

觉得还不错?

一键收藏

知道了

0

评论

Ethercat解析(五)之初始化流程

一、EtherCAT入口 源代码执行命令sudo /etc/init.d/ethercat start,将会从文件module.c文件中的ec_init_module函数中开始往下执行初始化流程。二、初始化大致过程(1) ec_init_module 主要用于生成/dev/EtherCAT设备,并且调用ec_master_init初始化主机相关信息。ec_master...

复制链接

扫一扫

专栏目录

Ethercat - 初始化过程中主站对从站到底做了什么“”不可描述”的事情

飞翔的猪 的博客

01-13

6690

                                Ethercat - 初始化过程中主站对从站到底做了什么“”不可描述”的事情

       最近有人在群里问一些关于从站配置的问题,趁此机会简单总结下在从站启动过程中主站到底对从站做了哪些事情。要了解这些内容最近单最直接的途径是通过倍福的Twincat去看,不得不说倍福在这方面做得还是比较Open的,无论是主站开发人员还是从站开发人...

通过CK3E进行驱动器CDHD2初始化(EtherCat)

qq_28023999的博客

12-28

504

CK3E通过EtherCat与CDHD2驱动器进行回零运动

参与评论

您还未登录,请先

登录

后发表或查看评论

EtherCAT主站配置过程分析.xlsx

10-15

本文档分析了国内某ehtercat主站的启动过程。对启动过程中的每一个报文的作用进行了标注。部分标注如下:

"DC过程:

1.主站写900,发一帧写的数据;只要是写900,每个口的会锁存接收时间;

2.主站读900 16byte:读区上一次写900数据帧时,锁存器的接受时间;有了锁存时间,就可以计算传导延时;

3.读取918 8byte,ECAT Processing Unit的接受时间,该时间减去主站系统时间,就是system time offset

4.将920 8byte中写入系统时间偏移,将928 4byte中写入传导延时。

5.周期性向910 8byte中写入新的时间。

同步时钟设置过程:

设置起始DC事件时间 990 8byte

启动同步时钟

从站芯片应该没有自己的mac地址;从站会接受所有的网卡数据。返回数据时,都是将主站的mac做了修改并返回。

"

SOEM-Ethercat源代码解析配套windows网卡捕捉软件包

10-14

配套的文章章节:SOEM-Ethercat源代码解析三(通讯运行环境搭建)

RK3568平台移植EtherCAT Master

最新发布

m0_56121792的博客

12-27

1063

EtherCAT全称EtherNet Control Automation Technology,是由德国倍福(Beckhoff)公司提出的一种实时以太网技术,用于工业自动化的现场总线通信协议。EtherCAT是一种开放但不开源的技术,意味着您可以任意使用这项技术,但若要进行相关设备的开发,则需要向倍福公司获取相关授权。

IGH EtherCAT是一种EtherCAT协议开源实现,是一个完全符合EtherCAT标准的库,能够在实时操作系统上运行。与传统总线相比,EtherCAT的优点在于减

倍福PLC程序启动初始化例程

05-12

与家喻户晓的西门子相比,倍福(Beckhoff)并不为众人所知,虽然二者都是德国品牌,但风格却截然不同。倍福德国官网经过一波更新之后,很多东西都变得高大上了,但是原来的下载方式(Twincat下载,下载老版本的twincat软件)也同样被更新掉了

虽然和西门子同样属于德国的品牌,但是两者走的路线和风格却截然不同,西门子不管是推广还是市场占有率方面都要高于倍福,但是倍福也有它的优势,它是EtherCAT总线的先驱者,基于通用的Windows系统,很早就提出了软PLC这样的概念,连编程软件也是基于微软的Visual Studio。总的来说倍福的PLC编程更偏向于软

如果想要下载老版本的twincat3怎么办呢?

目前官网的服务器上只有4024.11以后的安装包

因为倍福官网服务器更新了,所以在4024.11之前的版本统统都没了,所以现在仅从4024.11版本开始,可以用这个方法来尝试下载,毕竟过多年之后4024.11也会成为老版本。

这个方法同样应用于twincat2的下载,还有XAR,RM那些安装包的下载

Ethercat获取解析安装实时-识荒者.zip

04-05

Ethercat解析(一、二、三、四)之获取、编译、安装(debian7)-识荒者

作者详细介绍了igh在Linux系统中的从安装到使用及实时系统配置的步骤,手把手的操作

ethercat以太网报文可用wireshark打开

09-21

ethercat协议以太网报文,可以用wireshark软件打开,适用于学习ethercat报文解析,学习各种工业以太网协议可参考本人其他下载文件

Ethercat解析(十四)之初始化流程

absinjun的博客

08-18

3512

一、EtherCAT入口

源代码执行命令sudo /etc/init.d/ethercat start,将会从文件module.c文件中的ec_init_module函数中开始往下执行初始化流程。

二、初始化大致过程

(1) ec_init_module

主要用于生成/dev/EtherCAT设备,并且调用ec_master_init初始化主机相关信息。

ec_master_in...

Ethercat--基础架构与数据帧格式

qq_41931610的博客

04-20

1862

(过程数据对象):过程数据用来传输周期性的数据,PDO由三个数据缓冲区组成,类似于一个FIFO,从站写入第一个缓冲区,主站从第三个缓冲区读走。(服务数据对象):邮箱通信用来发送非周期性的数据,邮箱通信只有一个数据缓冲区,通信方式采用握手的机制确保主从之间的数据交互不丢失,而PDO由于采用FIFO的机制,可能会出现新值覆盖旧值或旧值被多次读走的情况。EtherCAT协议在应用层支持CANopen协议,因此支持CANopen协议的从站可以被运用在EtherCAT协议上。并且可以通过命令行工具加载或存储文件。

Ethercat状态机转化(ESM)

qq_39854159的博客

10-08

1983

ESM状态机

四种应支持的状态机

●Init.

Pre-Operational.

Safe-Operational.

Operational.

一种可选的状态机

●Bootstrap.

其状态转化关系,如下图所示:

状态转化

本地管理服务

IP

开始邮箱通信

PI

停止邮箱通信

PS

开始输入更新

SP

停止输入更新

SO

开始输出更新

OS

停止输出更新

OP

停止输出更新,停止输入更新

SI

停止输出更新,停止邮箱通信

OI

停止输出更新,停止输入更新,

SOEM代码Slaveinfo Demo分析

04-15

2923

分析Windows版本的Demo,以便之后移植到STM32F746上。

1. slaveinfo.exe入口函数为main,需要一个以太网PHY的网卡名,网卡名在Windows下是\Device\NPF_{XXXXXXX...XXXXXXXXX},在STM32F746下如何表示?

2. 首先需要调用ec_init,初始化网卡,绑定socket

/* initialise SOEM, b...

基于STM32的EtherCAT从站IO讲解

热门推荐

小王的博客

02-10

1万+

EtherCAT IO从站 工业通信

ethercat总结

02-14

ethercat总结,主要是Ethercat基础介绍,运行原理与常用协议说明

Zmotion运控器+Hiwin伺服驱动的Qt上位机开发(一):EtherCAT通讯、基本单轴控制、回零功能的实现

Zaiton的博客

03-01

2809

学习如何基于Qt框架、用Zmotion运动控制器开发库编写上位机以实现一些基础功能。

ethercat状态机

weixin_52720049的博客

11-24

626

在EtherCAT网络中,主站可以通过发送特定的EtherCAT命令将从站设备从预运行模式(PRE-OP)切换到安全运行模式(SAFE-OP),然后再切换到运行模式(OP)。向从站设备发送 "Operational" 命令:一旦主站准备好并安全运行参数配置完成,它可以向从站设备发送 "Operational"(运行)命令,以请求从站设备进入运行模式(OP)。从站进入运行模式:从站设备接收并解析主站发送的 "Operational" 命令后,将切换到运行模式,执行实际的应用操作。在PRE-OP状态下,

ethercat master用户程序初始化

weixin_42186805的博客

09-02

872

(1)定义配置信息

键入命令:ethercat cstruct 得到从机的配置信息,复制下来(我用的从机是简单的io开发板)

信息如下:

chenpeng@chenpeng-M219F-6C:/lib/modules$ ethercat cstruct

/* Master 0, Slave 0, "ServoDrive_FSMC"

* Vendor ID: 0x00000009

* Product code: 0x26483052

* Revision number:...

EtherCAT使用与解析-ethercat系统内核模块加载与初始化操作

lswdcyy的博客

03-26

3617

linux系统上安装完成ethercat系统,配置好网卡MAC和驱动之后,执行sudo /etc/init.d/ethercat start即可启动ethercat系统,在这个脚本中本质上调用了两个模块,一个是主站模块ec_master.ko,一个是驱动模块ec_generic.ko(关于驱动模块部分视配置文件中的DEVICE_MODULES类型决定,这里为了通用选择generic)。

ec_m...

IgH详解五、从站扫描流程

EtherCAT

09-01

4132

当我们启动主栈后可使用ethercat命令行工具查看从站的的相关信息,比如:ethercat slave

0 0:0 PREOP + CoolDrive RC

1 0:1 PREOP + CoolDrive RC ...

ethercat 协议解析软件

06-25

总之,EtherCAT协议解析软件是一个非常实用的工具,可帮助工业自动化领域的工程师和技术人员更快地解决问题,并优化性能和稳定性。 ### 回答2: EtherCAT(Ethernet for Control Automation Technology)协议解析...

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

非常没帮助

没帮助

一般

有帮助

非常有帮助

提交

zhangzheng_1986

CSDN认证博客专家

CSDN认证企业博客

码龄12年

暂无认证

14

原创

30万+

周排名

85万+

总排名

5万+

访问

等级

753

积分

39

粉丝

27

获赞

5

评论

136

收藏

私信

关注

热门文章

将CPP文件移植成C文件方法和注意的问题

6741

使用QT调试ROS工程

5331

Ethercat解析(三)之命令行工具的使用

5282

android camera2 拍照流程

4795

Ethercat解析(五)之初始化流程

4319

分类专栏

windows窗体应用(.net)

ubuntu

1篇

linux系统编程

5篇

Android

3篇

git及svn使用

2篇

qt开发

4篇

ros系统开发

2篇

编程规范

2篇

C++

3篇

java

1篇

Etherlab

5篇

最新评论

android camera2 拍照流程

IT界的骚小白:

想问一下 为什么一定要一个handler线程啊,这个有什么用吗

Ethercat解析(三)之命令行工具的使用

中华田园巨龙:

请教大佬,指令里面有切换状态,有写SDO。那么配置PDO以及读写PDO怎么操作呢?

Ethercat解析(三)之命令行工具的使用

中华田园巨龙:

感谢,写的很清楚

Ethercat解析(三)之命令行工具的使用

思泽之思:

谢谢大佬的文章,

您愿意向朋友推荐“博客详情页”吗?

强烈不推荐

不推荐

一般般

推荐

强烈推荐

提交

最新文章

qt kde gtk gnome xlib x11之间的关系

Ethercat解析(四)主站运行阶段

Ethercat解析(三)之命令行工具的使用

2018年15篇

2017年13篇

目录

目录

分类专栏

windows窗体应用(.net)

ubuntu

1篇

linux系统编程

5篇

Android

3篇

git及svn使用

2篇

qt开发

4篇

ros系统开发

2篇

编程规范

2篇

C++

3篇

java

1篇

Etherlab

5篇

目录

评论

被折叠的  条评论

为什么被折叠?

到【灌水乐园】发言

查看更多评论

添加红包

祝福语

请填写红包祝福语或标题

红包数量

红包个数最小为10个

红包总金额

红包金额最低5元

余额支付

当前余额3.43元

前往充值 >

需支付:10.00元

取消

确定

下一步

知道了

成就一亿技术人!

领取后你会自动成为博主和红包主的粉丝

规则

hope_wisdom 发出的红包

实付元

使用余额支付

点击重新获取

扫码支付

钱包余额

0

抵扣说明:

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

余额充值

经济型EtherCAT运动控制器(十):EtherCAT总线快速入门 - 知乎

经济型EtherCAT运动控制器(十):EtherCAT总线快速入门 - 知乎切换模式写文章登录/注册经济型EtherCAT运动控制器(十):EtherCAT总线快速入门正运动技术做最好用的运动控制 — www.zmotion.com.cn本节主要介绍XPLC006E多轴经济型EtherCAT总线运动控制器控制EtherCAT总线驱动器的方法,分别介绍硬件接线方法,控制器与EtherCAT总线驱动器如何通讯,EtherCAT总线驱动器相关参数的配置,EtherCAT总线初始化操作,以及初始化成功以后的运动控制。一、XPLC006E功能简介XPLC006E是正运动运动控制器推出的一款多轴经济型EtherCAT总线运动控制器,XPLC系列运动控制器可应用于各种需要脱机或联机运行的场合。XPLC006E自带6个电机轴,最多12轴运动控制(含虚拟轴数),支持12轴直线插补、电子凸轮、电子齿轮、同步跟随、虚拟轴设置等功能。XPLC006E支持多任务同时运行,同时可以在PC上直接仿真运行,编程方式多种可选,支持ZDevelop软件的Basic/PLC梯形图/HMI组态和常用上位机软件编程。XPLC006E只支持EtherCAT总线轴,不支持脉冲轴和编码器轴。采用EtherCAT总线与驱动器通讯,1ms的刷新周期。XPLC006E支持PLC、Basic、HMI组态三种编程方式。PC上位机API编程支持C#、C++、LabVIEW、VB、matlab、Qt、Linux、.Net、iMAC、Python、 ROS等接口。→此款产品有XPLC004E、XPLC006E、XPLC008E三个不同轴数的型号可选。二、XPLC864E功能简介XPLC864E在XPLC006E的功能基础上做了升级(即上节介绍的XPLC006E的功能都支持),部分资源空间优于XPLC006E,使用方法基本一致,不同之处在于XPLC864E,硬件支持32点输入、32点输出、2个ADC、2个DAC,支持脉冲轴和总线轴混合使用,总实轴轴数为8,除了带EtherCAT接口之外,输出口硬件上可配置为8个轴的脉冲方向信号输出,另带两路编码器输入,可由输入口配置XPLC864E支持PLC、Basic、HMI组态三种编程方式。PC上位机API编程支持C#、C++、LabVIEW、VB、matlab、Qt、Linux、.Net、iMAC、Python、 ROS等接口。三、通讯接线1.EtherCAT总线接线使用一根网线将XPLC006E控制器的“EtherCAT总线端口”与“伺服驱动器的EtherCAT总线端口”相连即可。注意:伺服驱动器的EtherCAT接口有两个,有些驱动器这两个口可以随意接,有些分为“EtherCAT IN”和“EtherCAT OUT”,IN口接上一级设备,OUT口接下一级设备,二者不能混用,要注意连接顺序。多轴控制时伺服驱动器的EtherCAT OUT口再连接下一级驱动设备的EtherCAT IN口,依此类推。slot槽位编号、node节点编号和驱动器编号规则如上图所示,EtherCAT总线接口的槽位号默认是0,节点编号按照与控制器的连接先后顺序从0开始依次编号,驱动器编号则是只给带电机设备编号,其他类型设备忽略,也是按连接顺序从0开始编号,这些编号在总线指令中将会用到。硬件接线完成还需运行总线初始化程序才能与驱动器通讯,初始化模板程序参见下文。注意:使用EtherCAT总线扩展模块时,也要执行总线初始化操作,再映射IO的编号后才可操作扩展IO。2.控制器与电脑连接控制器与电脑可以通过串口或网口连接,下面以网口连接例展开说明。先将控制器与电脑用一根网线连接好,接通控制器的电源,再打开ZDevelop编程软件,点击菜单栏“控制器”→“连接”,打开“连接到控制器”窗口。通过“连接到控制器”窗口,可以快速查看本机IP,对比控制器与电脑是否处于同一网段。IP地址列表下拉选择时,会自动查找当前局域网可用的控制器IP地址(控制器上电POWER灯和RUN灯亮的时候就能查找到该控制器的IP地址)。同一个网络有多个控制器的时候,IP的下拉列表若没有显示目标控制器的IP地址,可以采取IP扫描来查看当前所有可用的控制器IP地址,扫描完成之后确定关闭此窗口,重新在IP下拉列表选择。选择正确的IP地址,点击连接之后,连接成功或失败均有信息提示。控制器出厂的缺省IP地址为192.168.0.11,“连接到控制器”窗口能显示出本机IP地址,请注意设置有线网卡与无线网卡各自的IP。电脑需要设置IP地址与控制器IP处于同一网段才能连接,即四段的前三段要相同,最后一段不同才能通讯。若控制器与电脑不处于同一网段,则需要修改控制器或电脑其中之一的IP地址,使二者处于同一网段。若控制器IP地址遗忘,可通过网口连接控制器,再获取控制器IP。四、EtherCAT总线驱动器通讯说明1.通讯周期使用EtherCAT伺服驱动器时需要保证控制器与伺服周期一致才可正常通讯使用。EtherCAT伺服驱动器一般支持不同周期,通讯周期主要有250us,500us,1ms,2ms,4ms,连接时自动匹配控制器周期,不需要设置,当通讯周期无法自动匹配时,通讯失败,通过修改控制器周期解决(SERVO_PERIOD指令或升级固件修改)。控制器一般默认为1ms,使用SERVO_PERIOD指令读取控制器周期。伺服周期越小,位置控制越精细,响应速度也更快。2.驱动器PDO设置驱动器的PDO是必要的配置,代表着当前驱动器包含的功能。PDO全名为(Process Data Object),指在EtherCAT总线网络中周期的进行主站与从站的数据交互的功能,可以看作一个数组空间,每个数组元素存放了不同的功能码,PDO在一个周期中执行这些功能码对应的操作,这些功能码就叫做数据字典,数据字典用4位16进制数来表示。RxPDO:主站传送数据给从站。TxPDO:从站传送数据给主站。EtherCAT总线上控制器为主站,伺服驱动器为从站。如6040h控制字(用于控制伺服轴的使能、启动、停止、报警、复位等运行状态),每个数据字典Index可包含32个子字典Sub-Index。数据字典的功能和初始值查看驱动器手册的描述。数据字典的编号及功能是协议本身就确定好的,用户只需按照数据字典的描述设置数据字典的bit位,所有的标准EtherCAT设备都使用一套数据字典。松下A6B伺服驱动器的EtherCAT相关说明内容可查看松下文档《技术资料-EtherCAT通讯规格篇》。EtherCAT初始化过程中必须进行驱动器PDO配置,“DRIVE_PROFILE”指令配置驱动器的PDO列表,目前提供约20几种配置选择,每种配置包含哪些数据字典查看该指令说明确认,如下图,具体内容可以在《ZBasic编程手册》中查看。DRIVE_PROFILE=-1表示驱动器的内置缺省PDO列表,驱动器内置PDO列表包含哪些数据字典需要查看驱动器手册。DRIVE_PROFILE已有的配置不能满足需求就自定义PDO,采用SDO相关指令操作数据字典配置驱动器需要的PDO。驱动器的相关参数修改,同样使用SDO指令读写对应的数据字典进行配置或通过驱动器软件修改。SDO指令包含数据字典读取“SDO_READ”、“SDO_READ_AXIS”和数据字典写入“SDO_WRITE”、“SDO_WRITE_AXIS”。(1)数据字典读取语法SDO_READ (槽位号, 设备编号, 数据字典编号, 数据字典子编号, 数据类型, 读取数据存储TABLE位置)SDO_READ_AXIS (轴号, 数据字典编号, 数据字典子编号, 数据类型, 读取数据存储TABLE位置)(2)数据字典写入语法SDO_WRITE (槽位号, 设备编号, 数据字典编号, 数据字典子编号, 数据类型, 写入数据值)SDO_WRITE_AXIS (轴号, 数据字典编号, 数据字典子编号, 数据类型, 写入数据值)自定义PDO的配置方法请咨询正运动的销售工程师或者技术工程师。3.驱动器参数设置可使用驱动器软件修改,或控制器端操作SDO指令修改。修改驱动器参数先连接驱动器,可选USB线或WLAN连接驱动器,使用USB线连接电脑与驱动器端的X1端口,给驱动器上电。打开松下驱动器软件PANATERM,弹出“选择与驱动器通信”窗口,选择与驱动器通过USB连接后,自动获取到驱动器信息显示在窗口内,点击OK连接成功,就能对驱动器进行设置。点击菜单栏“显示”→“对象编辑器”,打开如下窗口,找到需要设置的数据字典,在“Setting Value”一栏直接修改数据字典的内容。修改完成将参数传送给驱动器,并写入驱动器的EEPROM,驱动器再次上电后参数生效。例:设置UNITS脉冲当量,即设置电机转一圈需要发送多少个脉冲。SPEED速度、ACCEL加速度、DECEL减速度和运动指令等都是以UNITS为基本单位。如上图,通过数字字典6091h设置电子齿轮比,6091h-01h设置电子齿轮比分子,6091h-02h设置电子齿轮比分母,此时,电子齿轮比=1/1,6092h-01h设为10000表示给电机发10000个脉冲能使电机旋转一圈,对应的脉冲当量UNITS=10000,MOVE(2)表示给电机发送20000个脉冲,此时电机转两圈。或者使用SDO指令读写数据字典修改参数。修改完成使用驱动器软件读取6092h-01h的值为10000。示例:SDO_WRITE(Bus_Slot,iNode,$6091,1,7,1) '电子齿轮比分子

SDO_WRITE(Bus_Slot,iNode,$6091,2,7,1) '电子齿轮比分母

SDO_WRITE(Bus_Slot,iNode,$6092,1,7,10000) '电机一圈脉冲数4.驱动器IO信号若要使用驱动器的IO口,才会涉及到驱动器的IO映射操作,否则忽略。当驱动器产生IO报警时,可根据驱动器手册的提示,修改IO的设定值。驱动器自身有输入信号,作用为保护信号,默认使能状态,若不接入外部信号,驱动器就会保护报错,调试阶段可以关闭这些信号方便调试,将输入值设置为0即可,需要使用驱动器IO时要对驱动器的IO编号映射后才能使用,后续根据实际需求接入实际信号。点击驱动器软件PANATERM主界面的“参数”按钮打开下方窗口,选中要修改的IO信号后,在“设定值”一栏修改。驱动器IO映射需要PDO包含数据字典60FDh,然后使用DRIVE_IO指令设置驱动器IO地址,映射的编号范围不要与总线上的其他设备的IO编号重复。DRIVE_IO (轴号)=输入输出IO起始编号。示例:DRIVE_PROFILE(iAxis) = 5 '设定对应的带IO映射的PDO模式

DRIVE_IO(iAxis) = i_IoNum '设定驱动器输入/输出IO起始编号5.参数写入驱动器可使用驱动器软件修改,或控制器端操作SDO指令修改。驱动器的数据字典参数或其他的参数设置完成后,先点击“传送”将修改的全部参数传入驱动器,再点击EEP,将参数写入驱动器的EEPROM,给驱动器重新上电后修改的参数生效,图片上值修改了输入参数,在上图参数一览中可参看多中类别的参数并修改。6.驱动器轴号映射EtherCAT总线驱动电机设备连上控制器之后,驱动器轴号需要使用指令映射绑定。EtherCAT总线上连接的设备的设备号按照连接顺序从0开始自动编号,驱动器编号也是按连接顺序给驱动器设备自动从0开始编号的,只算总线上的驱动器设备,其他设备是没有驱动器编号的。EtherCAT总线上连接的驱动器需要使用指令映射驱动器的轴号,使用AXIS_ADDRESS 指令映射,映射完成之后才能使用BASE指令选择驱动器轴号,发送脉冲,控制驱动器所连的电机运行。轴映射写在总线初始化程序中,总线扫描之后,开启总线之前。语法:AXIS_ADDRESS(轴号)=(槽位号<<16)+驱动器编号+1EtherCAT总线的槽位号是0。轴号为驱动器映射的目标轴号,映射时每个驱动器的轴号不重复,指向空闲轴号即可。示例:AXIS_ADDRESS (6)=(0<<16)+0+1 '第一个ECAT驱动器,驱动器编号0,绑定为轴6

AXIS_ADDRESS (7)=(0<<16)+1+1 '第二个ECAT驱动器,驱动器编号1,绑定为轴7

AXIS_ADDRESS (8)=(0<<16)+2+1 '第三个ECAT驱动器,驱动器编号2,绑定为轴8

ATYPE(6)=65 '设置为ECAT轴类型,65-位置 66-速度 67-转矩

ATYPE(7)=65

ATYPE(8)=657.驱动器控制模式EtherCAT驱动器一般有三种控制模式,分别为CSP周期位置模式,CSV周期速度模式,CST周期力矩模式。提供ATYPE指令设置控制模式。CSP,CSV,CST模式的设置需要预先设置PDO,PDO同时包含下方数据字典时,即可直接修改ATYPE数值进行模式切换。驱动器默认PDO列表内置有哪些数据字典需要查看驱动器手册确定。(1)当PDO包含607Ah时,ATYPE可设置为65,周期位置模式,此时使用运动指令控制电机运动。(2)当PDO包含60FFh时,ATYPE可设置为66,周期速度模式,此时使用DAC指令控制电机以设置值的速度运行,速度单位有两个,脉冲数/S和R/MIN,有驱动器确定,使用时先给较小的数值,观察电机速度情况,再加大。(3)当PDO包含6071h时,ATYPE可设置为67,周期力矩模式,此时使用DAC指令控制电机以设置值的力矩运行,DAC值范围0-1000,对应0-100%的6071设置值,比如DAC=10,此时电机力矩=1%的6071h值。注意:速度模式和力矩模式切换时,先将DAC=0后,再修改ATYPE,防止出现事故。A.位置模式:ATYPE=65将DRIVE_PROFILE配置为带位置的模式1,ATYPE=66,执行总线初始化程序后,设置轴的UNITS、SPEED等运行参数,使用运动指令给电机发脉冲控制轴的运行,注意试运行时SPEED的值不要设置过大。位置模式也是实际过程中用的较多的一种模式,运行效果参见后续章节。B.速度模式:ATYPE=66将DRIVE_PROFILE配置为带速度的模式22,ATYPE=66,执行总线初始化程序后,在线命令栏发送DAC指令即可控制电机运行,如下图,DAC=5000表示电机以每秒5000个脉冲的速度持续运行,DAC命令发送后电机一直运行,要提高运行速度将DAC的值加大,DAC的值太小电机会克服不了摩擦力无法转动。注意:出于安全因素考虑,DAC不要设置过大,先设置一个较小值,观察电机运行情况后慢慢往上增加。此模式下停止电机在线命令发送DAC=0即可,或按下软件的紧急停止按钮。C.力矩模式:ATYPE=67将DRIVE_PROFILE配置为带力矩的模式30,ATYPE=67,执行总线初始化程序后,在线命令栏发送DAC指令即可控制电机运行。如下图,DAC=30,当前驱动器为0.03的力矩,DAC等于1000时表示100%力矩。要提高运行速度将DAC的值加大,DAC的值太小电机会克服不了摩擦力无法转动。注意:出于安全因素考虑,DAC不要设置过大,先设置一个较小值,观察电机运行情况后慢慢往上增加。此模式下停止电机在线命令发送DAC=0即可,或按下软件的紧急停止按钮。8.驱动器报警观察驱动器上LED面板上是否有报错信息,报错会显示错误码,根据驱动器手册排查错误,修正后将报警清零。打开驱动器软件的警报窗口,也能看当前驱动器是否有警报,或查询历史警报。警报窗口历史警报信息初始化过程中按轴号清除驱动器的错误,重复调用DRIVE_CLEAR指令清除多个驱动器错误。语法:DRIVE_CLEAR(模式值)模式值0-清除当前告警,1-清除历史告警,2-清除外部输入告警。示例:BASE(i)

DRIVE_CLEAR(0) '清除驱动器错误

DELAY 50

DATUM(0) '清除控制器轴状态错误"

DELAY 1009.驱动器回零EtherCAT总线可使用控制器提供的回零方式DATUM(mode),mode模式值选择查看ZBasic编程手册的DATUM指令。EtherCAT总线也可以使用驱动器本身的回零模式。驱动器本身回零使用DATUM(21,mode2)指令,mode2模式值要查驱动器手册数据字典6098h回零模式,如下图所示,mode2填入对应Value值,mode2缺省值为0,也是驱动器回零模式,注意此时的原点限位等信号要接在驱动器上,所以要使用驱动器回零时需要对驱动器的IO进行映射。示例:初始化完成后再运行驱动器回零程序。BASE(iAxis) '按驱动器轴号逐个回零

AXIS_STOPREASON = 0

SPEED = 100 '回零速度

CREEP = 10 '反找速度

ACCEL = 1000

DATUM(21,2) '驱动器回零模式value=2

WAIT IDLE

IF AXIS_STOPREASON = 0 THEN

?"回零成功"

ELSE

?"回零失败" ,"停止原因:",AXIS_STOPREASON,"状态字0X",HEX(DRIVE_STATUS)

ENDIF10.EtherCAT总线驱动器参数设置说明https://www.zhihu.com/video/1541019581703720960五、EtherCAT总线初始化EtherCAT总线初始化操作是控制器与EtherCAT总线驱动器通讯的重要步骤,也是第一步,初始化成功表示着二者成功建立了通讯连接,之后才可顺利进行运动控制和读写驱动的参数。1.初始化基本流程按照前面的步骤接好线,给EtherCAT伺服驱动器和控制器上电,使用ZDevelop软件连接控制器,EtherCAT总线使用一段程序来初始化,将初始化程序下载到控制器运行之后,才能设置轴参数和执行运动指令控制伺服电机的运动。初始化程序中包含WDOG=1开总使能,和AXIS_ENABLE(轴号) = 1开单轴使能,使能前用手可以转动点击,使能完成后便旋转不动,需要给电机发送脉冲才能使其转动。2.初始化模板程序(1)主要初始化程序'用户使用的时候只需要设置程序头的四个常量的值即可。程序其他地方不用改动。分别设置起始的脉冲轴号,和使用的脉冲轴个数,总线轴的起始映射轴号,和总线轴的个数。

'****************ECAT总线初始化

global CONST PUL_AxisStart = 0 '本地脉冲轴起始轴号

global CONST PUL_AxisNum = 0 '本地脉冲轴轴数量

global CONST Bus_AxisStart = 0 '总线轴起始轴号

global CONST Bus_NodeNum = 1 '总线配置节点数量,用于判断实际检测到的从站数量是否一致

global CONST BUS_TYPE = 0 '总线类型。可用于上位机区分当前总线类型

global CONST Bus_Slot = 0 '槽位号0(单总线控制器缺省0)

global MAX_AXISNUM '最大轴数

MAX_AXISNUM = SYS_ZFEATURE(0)

global Bus_InitStatus '总线初始化完成状态

Bus_InitStatus = -1

global Bus_TotalAxisnum '检查扫描的总轴数

delay(3000) '延时3S等待驱动器上电,不同驱动器自身上电时间不同,具体根据驱动器调整延时

?"总线通讯周期:",SERVO_PERIOD,"us"

Ecat_Init() '初始化ECAT总线

while (Bus_InitStatus = 0)

Ecat_Init()

wend

END

'************************ECAT总线初始****************************************

'初始流程: slot_scan(扫描总线) -> 从站节点映射轴/io -> SLOT_START(启动总线) -> 初始化成功

'****************************************************************************

global sub Ecat_Init()

local Node_Num,Temp_Axis,Drive_Vender,Drive_Device,Drive_Alias

RAPIDSTOP(2)

WAIT IDLE(0)

for i=0 to MAX_AXISNUM - 1 '初始化还原轴类型

AXIS_ENABLE(i) = 0

atype(i)=0

AXIS_ADDRESS(i) =0

DELAY(10) '防止所有驱动器全部同时切换使能导致瞬间电流过大

next

Bus_InitStatus = -1

SLOT_STOP(Bus_Slot)

delay(200) '延时时间可以按需调整,确保驱动器已上电可以等待EtherCAT到位

slot_scan(Bus_Slot) '扫描总线

if return then

?"总线扫描成功","连接从站设备数:"NODE_COUNT(Bus_Slot)

if NODE_COUNT(Bus_Slot) <> Bus_NodeNum then '判断总线检测数量是否为实际接线数量

?""

?"扫描节点数量与程序配置数量不一致!" ,"配置数量:"Bus_NodeNum,"检测数量:"NODE_COUNT(Bus_Slot)

Bus_InitStatus = 0 '初始化失败。报警提示

'return

endif

'"开始映射轴号"

for Node_Num=0 to NODE_COUNT(Bus_Slot)-1 '遍历扫描到的所有从站节点

Drive_Vender = NODE_INFO(Bus_Slot,Node_Num,0) '读取驱动器厂商

Drive_Device = NODE_INFO(Bus_Slot,Node_Num,1) '读取设备编号

Drive_Alias = NODE_INFO(Bus_Slot,Node_Num,3) '读取设备拨码ID

if NODE_AXIS_COUNT(Bus_Slot,Node_Num) <> 0 then '判断当前节点是否有电机

for j=0 to NODE_AXIS_COUNT(Bus_Slot,Node_Num)-1 '根据节点带的电机数量循环配置轴参数(针对一拖多驱动器)

Temp_Axis = Bus_AxisStart + Bus_TotalAxisnum '轴号按NODE顺序分配

'Temp_Axis = Drive_Alias '轴号按驱动器设定的拨码分配(一拖多需要特殊处理)

base(Temp_Axis)

AXIS_ADDRESS(Temp_Axis)= (Bus_Slot<<16)+ Bus_TotalAxisnum + 1 '映射轴号

ATYPE=65 '设置控制模式 65-位置 66-速度 67-转矩

DRIVE_PROFILE=-1 '配置为驱动器内置PDO列表,可改为1,-1,等参数 '配置为驱动器内置PDO列表

' Sub_SetDriverIo(Drive_Vender,Temp_Axis,128 + 32*Temp_Axis) '映射驱动器IO IO映射到控制器IO32-以后每个驱动器间隔32点

' Sub_SetNodePara(Node_Num,Drive_Vender,Drive_Device,j) '设置特殊总线参数

disable_group(Temp_Axis) '每轴单独分组

Bus_TotalAxisnum=Bus_TotalAxisnum+1 '总轴数+1

next

else 'IO扩展模块

Sub_SetNodeIo(Node_Num,Drive_Vender,Drive_Device,1024 + 32*Node_Num) '映射扩展模块IO

endif

next

?"轴号映射完成","连接总轴数:"Bus_TotalAxisnum

delay(200)

SLOT_START(Bus_Slot) '启动总线

if return then

'?"开始清除驱动器错误"

for i= Bus_AxisStart to Bus_AxisStart + Bus_TotalAxisnum - 1

BASE(i)

DRIVE_CLEAR(0)

DELAY 50

'?"驱动器错误清除完成"

datum(0) '清除控制器轴状态错误"

wa 100

wdog=1 '使能总开关

'"轴使能"

AXIS_ENABLE=1

next

Bus_InitStatus = 1

?"轴使能完成"

'本地脉冲轴配置

for i = 0 to PUL_AxisNum - 1

base(PUL_AxisStart + i)

AXIS_ADDRESS = (-1<<16) + i

ATYPE = 4

next

?"总线开启成功"

else

?"总线开启失败"

Bus_InitStatus = 0

endif

else

?"总线扫描失败"

Bus_InitStatus = 0

endif

end sub(2)驱动器IO映射(需要使用驱动器IO时才映射,否则不用映射)‍' ************************总线驱动IO映射**************************************

'通过DRIVE_IO指令映射驱动器对象字典中60FD,60FE输入输出状态,要设置正确的DRIVE_PROFILEE或者POD后才可以正常映射

'DRIVE_PROFILE模式包含60FD/60FE

'iAxis - 轴号 iVender - 驱动器类型 i_IoNum - 输入输出起始编号

' **************************************************************************

global sub Sub_SetDriverIo(iVender,Iaxis,i_IoNum)

if iVender = $66f then '松下驱动器

DRIVE_PROFILE(iAxis) = 5 '设定对应的带IO映射的PDO模式

DRIVE_IO(iAxis) = i_IoNum

REV_IN(iAxis) = i_IoNum '负限位应60FD BIT0

FWD_IN(iAxis) = i_IoNum + 1 '正限位先对应60FD BIT1

DATUM_IN(iAxis) = i_IoNum + 2 '原点先对应60FD BIT2

INVERT_IN(i_IoNum,ON) '特殊信号有效电平反转

INVERT_IN(i_IoNum + 1,ON)

INVERT_IN(i_IoNum + 2,ON)

endif

end sub(3)扩展模块IO映射(连接了扩展模块才设置)' ***********************总线IO扩展模块映射**************************************

'通过NODE_IO(Bus_Slot,Node_Num)分配模块IO起始地址

' *******************************************************************************

global sub Sub_SetNodeIo(iNode,iVender,iDevice,i_IoNum)

if iVender = $41B and iDevice = $130 then '正运动EIO1616MT

NODE_IO(Bus_Slot,iNode) = i_IoNum

endif

end sub(4)特殊参数配置' ********************************从站节点特殊参数配置********************************

'通过SDO方式修改对应对象字典的值修改从站参数(具体对象字典查看驱动器手册)

' ******************************************************************************************************

global sub Sub_SetNodePara(iNode,iVender,iDevice,Iaxis)

if iVender = $41B and iDevice = $1ab0 then '正运动24088脉冲扩展轴

SDO_WRITE(Bus_Slot,iNode,$6011+Iaxis*$800,0,5,4) '设置扩展脉冲轴ATYPE类型

SDO_WRITE(Bus_Slot,iNode,$6012+Iaxis*$800,0,6,0) '设置扩展脉冲轴INVERT_STEP脉冲输出模式

NODE_IO(Bus_Slot,iNode) = 32 + 32*iNode '设置240808上IO的起始映射地址

elseif iVender = $66f then '松下驱动器

SDO_WRITE(Bus_Slot,iNode,$3741,0,3,0) '以拨码为ID

SDO_WRITE(Bus_Slot,iNode,$3401,0,4,$10101) '正限位电平 $818181

SDO_WRITE(Bus_Slot,iNode,$3402,0,4,$20202) '负限位电平 $828282

SDO_WRITE(Bus_Slot,iNode,$6091,1,7,1) '电子齿轮比分子

SDO_WRITE(Bus_Slot,iNode,$6091,2,7,1) '电子齿轮比分母

SDO_WRITE(Bus_Slot,iNode,$6092,1,7,10000) '电机一圈脉冲数

SDO_WRITE(Bus_Slot,iNode,$607E,0,5,0) '电机正转0 反转224

SDO_WRITE(Bus_Slot,iNode,$6085,0,7,4290000000) '异常减速度

'SDO_WRITE(Bus_Slot,iNode,$1010,1,7,$65766173) '写EPPROM(写EPPROM后驱动器需要重新上电)

'?"写EPPR0M OK 请断电重启"

endif

end subEtherCAT初始化成功后会打印信息提示,如下。若初始化失败也会打印信息提示。3.总线节点状态查看EtherCAT总线上连接的设备信息有如下三种查看方法。查看总线状态的前提是初始化操作成功,否则无法查看。(1)在菜单栏“控制器”→“控制器状态”窗口查看“槽位0节点”。(2)在菜单栏“调试”→“总线状态诊断”打开如下窗口查看控制器总线槽位接口的设备信息。(3)还可以通过在线命令发送“?*EtherCAT”打印EtherCAT总线上的全部设备信息。4. EtherCAT总线驱动器控制效果初始化成功后,将各个总线轴依此回零,配置好轴参数之后,就可以使用指令让总线轴按需求动作。在程序中写入运动指令、在线命令发送运动指令或使用“手动运动”窗口控制电机运行。示波器采集轴参数波形:使用“手动运动”功能快速手动操作电机运动,运动前先设置左侧轴参数。5.EtherCAT总线初始化演示https://www.zhihu.com/video/1541021208305180672本次,正运动技术经济型EtherCAT运动控制器(十):EtherCAT总线快速入门,就分享到这里。本文由正运动技术原创,欢迎大家转载,共同学习,一起提高中国智能制造水平。文章版权归正运动技术所有,如有转载请注明文章来源。编辑于 2022-08-11 11:23CAN总线​赞同 6​​添加评论​分享​喜欢​收藏​申请

EtherCAT (学习笔记)-CSDN博客

>

EtherCAT (学习笔记)-CSDN博客

EtherCAT (学习笔记)

最新推荐文章于 2024-01-16 16:03:36 发布

pwl999

最新推荐文章于 2024-01-16 16:03:36 发布

阅读量6.7w

收藏

1.3k

点赞数

209

分类专栏:

Motion Control

文章标签:

ethercat

版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。

本文链接:https://blog.csdn.net/pwl999/article/details/109397700

版权

Motion Control

专栏收录该内容

3 篇文章

75 订阅

订阅专栏

文章目录

1. 简介1.1 运动控制1.2 实时以太网1.3 EtherCAT

2. EtherCAT原理介绍2.1 实时性2.2 端口管理2.3 EtherCAT网络拓扑2.4 EtherCAT网络协议栈2.5 EtherCAT数据帧格式2.6 EtherCAT设备寻址方式2.7 分布式时钟(Distribute Clock)2.8 应用层(Application Layer)2.9 设备配置(Device Profile)2.10 主站设计2.11 从站设计

3. 应用层(Application Layer)3.13.2 EtherCAT Slave Implementation (从站实现)

4. 应用实例4.1 主站操作系统(RTAI)4.2 主站EtherCAT程序(IGH)4.3 主站应用开发(LinuxCNC)4.4 ET12004.5 从站程序设计4.6 实验测试

5. 工具5.1 TwinCAT5.2 LinuxCNC5.3 开源的EtherCAT Master

参考资料

1. 简介

1.1 运动控制

运动控制系统处理机械系统中一个或多个坐标上的运动以及运动之间的协调,实现精确的位置控制、速度和加速度控制、转矩和力的控制等。

单轴的运动控制系统可分为开环、半闭环和闭环伺服系统。

多轴运动控制系统可以分成点位控制、连续轨迹控制和同步控制。

典型的运动控制系统,从结构上看,包括上位机控制窗口、运动控制器、驱动器、电机以及测量反馈系统等几个部分组成:

1.2 实时以太网

实时以太网(RTE, Real Time Ethernet)是常规以太网技术的延伸,以便满足工业控制领域的实时性数据通信要求。目前,国际上有多种实时工业以太网协议,根据不同的实时性和成本的要求使用不同的原理,大致可以分为以下三类:

(1)基于TCP/IP实现的工业以太网仍使用TCP/IP协议栈,通过上层合理的控制来解决通信过程中的不确定因素。这种方式具有较高的传输速率,适应于大量数据通信,更适合作为网关和交换设备的应用,不能实现很好的实时性。常用的通信控制方法有:合理调度,减少冲突的概率;定义帧数据的优先级,为实时数据分配最高优先级;使用交换式以太网等。使用这种方式的典型协议有Modbus/TCP和Ethernet/IP等。(2)基于以太网实现的工业以太网仍然使用标准的、未修改的以太网通信硬件,但是不适用TCP/IP来传输数据。它使用特定的报文进行传输。TCP/IP协议栈能使用时间控制层分发一定的时间片来利用网络资源。该类协议主要有Ethernet Powerlink, EPA C Ethernet for Plant Automation ), PROFINET IRT等。通过这种方式可以实现较好的实时性。(3)通过修改以太网协议实现的工业以太网,实现应答时间小于lms的硬实时,从站使用特定的硬件实现。由实时MAC控制实时通道内的通信,从根本上避免报文间的冲突。非实时数据依然能在通道中按原协议通信。典型协议有德国倍福的EtherCAT、西门子的PROFINET IRT等。

1.3 EtherCAT

德国BECKHOFF自动化公司于2003年开发出的EtherCAT实时以太网技术突破了其他以太网解决方案的系统限制:通过该项技术,无需接受以太网数据包,将之解码,然后再将过程数据复制到各个设备。

2. EtherCAT原理介绍

EtherCAT从站设备在报文经过其节点时读取相应的数据报文,同样输入数据也是在报文经过时插入到报文中。整个过程报文只有几纳秒的时间延迟,实时性获得极大提高

EtherCAT作为一种工业以太网总线,充分利用了以太网的全双工特性。使用主从通信模式,主站发送报文给从站,从站从中读取数据或将数据插入至从站。

主站可使用标准网卡实现,从站选用特定的EtherCAT从站控制器ESC(EtherCAT Slave Controller)或者FPGA实现,

主要完成通信和控制应用两部分功能,EtherCAT物理层选用标准以太网物理层器件。

从站能将收到的报文直接处理,并读取或插入有关的数据,再将报文发送给下一个EtherCAT从站。最末尾的EtherCAT从站返回处理完全的报文,然后由第一个从站发送给主站。整个通信过程充运行于全双工模式下,TX线发出的报文又通过RX线返回给主站:

2.1 实时性

数据包刷新时间的计算

数据包中所有从站的 Process Datarocess Datarocess Data rocess Data rocess Data rocess Datarocess Data数据 决定了数据包的长度。

一个Ethernet thernet数据包最小84 字节,不足 84 字节会补齐84 字节。由于EtherCAT Frame中有一些公共开销, 84 字节的数据包最多含18字节的过程数据。考虑到数据包必须经过每个从站两次才能回到主站,所数据包以固定的波特率100 Mbps在网络上传输两次的时间 这就是它的总线刷新时间 。

1.基于这个原则,以包含 1000路开关量信号的数据包为例,计算过程如下:

过程数据长度:1000/8=125Bytes

数据包长度:84-18+125=191Bytes=191*8 Bit= 1528 Bit

总线刷新时间:(1528Bit/100,000,000 Bps)*2=15.28us * 2 = 30.56us

注意,通常的数字量模块, 都是单纯的输出或者输入模块,而不是混合模块。所以 1000 个数字 量信号, Frame 中就会分配 125 字节。

2.再以包含100个EtherCAT伺服驱动器过程数据的EtherCAT数据包为例,假如每个伺服的过程数据只包括控制字(2字节)、状态字(2字节)、目标位置(4字节)、实际位置(4字节),其总线刷新时间的计算过程如下:

过程数据长度:100*(2+4)=600 Byte。

数据包长度:84-18+600=1266 Byte =671*8 Bit =5328 Bit

总线刷新时间:(5328 Bit/100,000,000 Bps) *2=100.656µs

注意,Frame中只为一个伺服分配了6个字节,这是因为根据Beckhoff公司的控制软件TwinCAT中关于EtherCAT的默认设置是从站的Input和Output使用同一数据段,所以数据包进入伺服驱动器时该数据段存放的是控制字和目标位置,而出来时则存放伺服的状态字和实际位置。

以上两个数据30.56µs和101.28 µs就是EtherCAT官方宣传资料中,刷新1000个数字量需要30µs,刷新100个伺服轴只需要100µs的数据由来。实际上,根据从站的类型、是否包含分布时钟、是否启用时钟同步、时钟同步的参数设置不同,在数据包中有可能还会增加8-12字节用于传输同步时钟值,以及相应的为每个从站增加一个Bit的标记等等,会增加几个微秒的刷新时间,暂且忽略不计。

以上计算只是数据包传输需要的理论时间,实际上,数据包经过每个从站会产生短暂的硬件延时。100M超五类网线接口的从站延时约1µs,而EBus的IO模块类从站延时约0.3µs,在毫秒级以下的控制任务中如果从站数量较多,这个时间也相当可观,计算刷新周期时应该考虑进去。

2.2 端口管理

一个从站控制器最多可以有4个端口,如果一个端口关闭了,控制器主动连接下一个端口。端口可以随着EtherCAT命令主动的打开或者关闭。逻辑端口设置决定了EtherCAT帧的处理和发送顺序。

2.3 EtherCAT网络拓扑

所有数据帧在网络中以一种“逻辑闭环”的方式传播,与网络的硬件拓朴无关,无论它是链式、菊花链、星形还是树形拓朴。

所有数据帧都由Master发出,以事前严格定义的顺序,依次经过网络上的所有从站,走过一个完整的闭环后回到Master 。 所有数据帧通过从站中的 EtherCAT Processing Unit (EtherCAT处理单元)只有 1 次。

线型拓扑:

任意数目的设备成线型连接 最多65535个设备

数据处理链型拓扑 带有分支线的数据处理链型拓扑 树型拓扑: 实时星型拓扑: 冗余线缆

选择冗余电缆可以满足快速增长的系统可靠性需求,以保证设备更换时不会导致网络瘫痪。您可以很经济地增加冗余特性,仅需在主站设备端增加使用一个标准的以太网端口(无需专用网卡或接口),并将单一的电缆从总线型拓扑结构转变为环型拓扑结构即可(见图7)。当设备或电缆发生故障时,也仅需一个周期即可完成切换。因此,即使是针对运动控制要求的应用,电缆出现故障时也不会有任何问题。

EtherCAT也支持热备份的主站冗余。由于在环路中断时EtherCAT从站控制器芯片将立刻自动返回数据帧,一个设备的失败不会导致整个网络的瘫痪。例如,拖链设备可以配置为分支拓扑以防线缆断开。

2.4 EtherCAT网络协议栈

CoE(Can over EtherCAT)

PDO(Process Data Object 过程数据对象)

SDO(Service Data Object 服务数据对象)

PDI(Process Data Interface 过程数据接口)(uC, SSI, I/O)

ESM(EtherCAT State Machine)

ESI(EtherCAT Slave Information) (XML device description)

ENI(EtherCAT Network Information)

CTT(Conformance Test Tool 一致性测试工具)

SM(SyncManagers 同步管理器)

MDP(modular device description 模块化设备描述 )

2.5 EtherCAT数据帧格式

EtherCAT数据直接嵌入在以太网数据帧中进行传输,只是采用了一种特殊的帧类型,该类型为Ox88A4, EtherCAT数据帧结构如图所示:

EtherCAT数据包由数据头和数据实体两部分组成,EtherCAT数据头包含2个字节,每个数据包里面可以只包含一个EtherCAT子报文,也可以包含多个子报文;一个EtherCAT子报文对应着一个从站,因此一个EtherCAT数据包可以操作 多个EtherCAT从站,相应的数据长度在44-1498字节之间,EtherCAT数据帧结构定义: 类型 字段:

EtherCAT子报文结构定义:

地址区 字段

EtherCAT 寻址:

EtherCAT 通信的实现是通过由主站发送至从站的 EtherCAT 数据帧来完成对从站设备内部存储区的读写操作, EtherCAT 报文对 ESC 内部存储区有多种寻址操作方式,从而可以实现多种通信服务。EtherCAT 段内寻址有设备寻址和逻辑寻址两种方式。

设备寻址是面对一个从站进行读写操作。

逻辑寻址是面向过程的数据操作, 实现同一报文读写多个从站设备的多播功能。

具备全部寻址方式的从站称为完整性从站,只具备部分寻址方式的从站则称为基本从站。

命令 字段

不同命令通过信息传输系统最优化对所有存取方法的读写

WKC 字段

Working Counter。如果成功寻址了EtherCAT设备,并且成功执行了读操作,写操作或读/写操作,则工作计数器将递增。 可以为每个数据报分配一个工作计数器值,该值是根据预期报文通过所有设备数来设置的。 通过将工作计数器的预期值与所有设备通过后的实际值进行比较,主站可以检查EtherCAT数据报是否已成功处理。

同步管理器

2.6 EtherCAT设备寻址方式

在EtherCAT的每个子报文中,有32位空间用于对EtherCAT设备进行寻址。寻址方式有四种,分别为:

位置寻址

位置寻址方式是根据从站的连接顺序,即物理位置实现的。在报文头的32bit地址中,前16bit的Position用于存放地址值,Offset用于存放ESC逻辑寄存器或者内存地址。报文每经过一个从站设备,其Position中的地址值加1。当一个从站接收到EtherCAT报文后,如果报文中的地址值为0,则该报文就是这个从站要要接收的报文。

在上图中,如果需要总线上第8个设备响应报文,则主站需要将报文的地址设为0xFFF9,当报文经过第1个从站时,地址为0xFFF9,不等于0,第1个从站不会响应报文,报文地址加1,变为0xFFFA。当报文经过第2个从站时,地址为0XFFFA,不等于0,第2个从站不会响应该报文,报文地址加1,变为0xFFFB。以此类推,当报文到达第8个从站时,此时地址值为0x0000,当前从站将接收报文。

位置寻址(Position Address / Auto Increment Address)只应在启动EtherCAT系统时用于扫描现场总线,以后只能偶尔使用以检测新连接的从站。 如果由热连接或链接问题导致循环暂时关闭,使用位置寻址可能会出现问题。 在这种情况下位置地址被移位,并且,如错误寄存器的值到设备的映射变得不可能,因此不能定位故障链路。

节点寻址

在启动阶段,主站通常采用位置寻址方式对总线上的从站进行寻址,之后采用节点寻址方式。

在报文中,报文头的32bit地址,前16bit的Address用于存放站点地址值,Offset用于存放ESC逻辑寄存器或者内存地址。

在每个从站中站点地址保存在寄存器(0x0010) 中。

顺序寻址时,主站可以对每个从站的站点地址进行设置,也可以直接读取每个从站的的站点地址。

节点寻址方式的优点是,每个从站的地址与其在总线中的位置无关。在添加/删除从站,甚至是改变总线拓扑结构的时候都能对从站进行正确的访问。

上图是节点寻址方式的示意图。8个从站的地址与其在总线中的位置并没有关系。出于直观的目的,4台伺服驱动器的地址被设置为连续的,4个I/O模块的地址被设置为连续的,在实际中并没有这样的要求。

EtherCAT从设备可以有两个配置的站点地址,一个由主站分配(Configured Station Address),另一个存储在SII EEPROM,并且可以由从站应用程序更改(Configured Station Alias address)。

配置站点地址由主站在启动期间分配,并且不能由EtherCAT从站更改。 配置站别名地址存储在SIIEEPROM中,可由EtherCAT从站更改。 配置的站别名必须由主站启用。 如果节点地址(NodeAddress)与配置的站地址或配置的站点别名匹配,将执行相应的命令操作。

逻辑寻址

EtherCAT的第三种寻址方式是逻辑寻址,首先需要了解的是FMMU。

FMMU(Fieldbus Memory Management Units)

FMMU称为总线内存管理单元,它存在与从站芯片ESC中,负责对从站物理地址与主站逻辑地址进行翻译并建立映射关系。主站在总线启动过程中对FMMU进行配置,内容包括:

• 逻辑地址的起始地址

• 数据长度(按跨字节数计算)

• 逻辑地址的起始位

• 逻辑地址的终止位

• 从站物理地址的起始地址

• 从站物理地址的起始位

• 操作类型(只读、只写、读写)

• 使能

在报文中,使用报文头的32bit地址的全部,用来表示大小为4GB的逻辑地址空间。 以上图为例,FMMU将逻辑地址中0x00012345第2位开始的,到0x00012346以第2位终止的区域,与从站物理地址中0x0010第0位开始的区域进行映射。

当从站收到来自主站的报文时,会检查报文中的地址是否与FMMU中的地址相符,如果有,将根据操作类型进行读写操作。

这种寻址方式的优点是,在主站想对每个从站进行访问的时候,只需要对逻辑空间中的地址进行操作,而无须关心该地址对应的从站物理地址,减轻了主站的负担。

所有器件读取和写入相同的逻辑4 GB地址空间(EtherCAT数据报中的32位地址字段)。 从器件使用映射单元(FMMU,现场总线存储器管理单元)将数据从逻辑过程数据映像映射到其本地地址空间。 在启动期间,主器件配置每个从器件的FMMU。 从站使用FMMU的配置信息知道逻辑过程数据映像的哪些部分必须映射到哪个本地地址空间。

逻辑寻址支持逐位映射。 逻辑寻址是一种强大的机制,可以减少过程数据通信的开销,因此通常用于访问过程数据。

当从站设备收到的EtherCAT报文带有逻辑寻址标志位时,从站设备将检查自身是否有相应的FMMU单位地址与之匹配。

总结:EtherCAT使用三种方式对设备进行寻址,在启动过程中,使用顺序寻址方式为从站分配节点地址,然后通过节点寻址方式配置从站寄存器,将逻辑地址与从站物理地址进行映射,之后就可以使用逻辑寻址方式进行过程数据交换了。

Broadcast寻址

每个EtherCAT从站都被寻址。

使用广播寻址。 如果从站的预期是相同的,用于所有从站的初始化和检查所有从站的状态。每个从器件具有一个16位Local地址空间:

地址范围0x0000:0x0FFF专用于EtherCAT寄存器,

地址范围0x1000:0xFFFF用作过程数据RAM

通过EtherCAT数据报的偏移字段寻址,过程数据。

2.7 分布式时钟(Distribute Clock)

通过分布式时钟精确的调整,系统可达到精确的同步。

外部时钟同步IEEE1588 EtherCAT设备同步 定义系统时间

定义一个参考时钟:

一个EtherCAT从站被当做参考时钟使用

参考时钟循环的发布它的时钟

参考时钟根据一个全局参考时钟 IEEE1588

2.8 应用层(Application Layer)

应用层AL(Application Layer) 为用户与网络之间提供接口,应用层在EtherCAT 通信协议层次结构中是与用户联系最紧密最直接的一层,它可以直接与用户进行交互,实现面对具体的应用程序和控制任务等功能, EtherCAT 应用层为各种服务协议与应用程序之间定义了接口, 使其能够满足应用层所要求的各种协议共同工作的需求。

EtherCAT 作为网络通信技术,支持CAN open 协议中的CiA402,以及 SERCOS 协议的应用层( 即 CoE 和SoE)等多种符合行规的设备和协议。

EtherCAT状态机 设备和网络的启动

邮箱接口和协议 设备的存取变量 异步传输

协议:

EOE: Ethernet over EtherCAT

COE: CANopen over EtherCAT

FOE: Filetransfer over EtherCAT

SOE: Servo Drive over EtherCAT

从站信息接口 设备特征和配置信息

EtherCAT状态机

状态机构建于数据链路层 定义EtherCAT从站设备一般信息状态 指定对EtherCAT从站设备启用网络时初始化和错误处理 状态和主从站之间通信关系相一致 从站设备的请求状态和当前状态反应于应用层和应用层注册中

定义了五种状态:

Init // 应用层没有数据交互,主站对数据传输信息注册有同路

Pre-Operational // 应用层上的邮箱通信。没有过程数据交互

Safe-Operational // 应用层上的邮箱通信。过程数据通信,但是仅仅是输入被评估,输出置于Safe状态

Operational // 输入和输出都是有效的

Bootstrap // 定义了固件更新。是可选的,但是在固件必须要更新时推荐选择

// 只能和init进行状态间转换,没有过程数据通信,通过应用层的邮箱进行通信,根据需要的情况对邮箱进行配置,只能使用FoE协议。

从站设备的请求状态和当前状态反应于应用层控制和应用层注册中:

应用层控制(0x0120) 初始化设备状态机的状态转换

应用层状态(0x0130) 设备状态机的实际状态

应用层状态代码(0x0134) 错误原因或者其他状态代码

邮箱传输

交换变量数据的标准方式 邮箱接口是可选择的,但是推荐使用 如果过程数据是可设置的,或者有其他的非周期性服务,必须邮箱通信 全双工能力 从站可以发起一个数据交互 预留两个同步管理器通道: Sync Manager 0(主站到从站),Sync Manager 1(从站到主站) 数据交互的早期阶段,邮箱方式是可利用的(State Pre-Operational) 支持多种协议的能力

邮箱通信协议的类型:

EOE: Ethernet over EtherCAT // 通过EtherCAT传输的标准以太网帧

COE: CANopen over EtherCAT // 访问CANopen对象字典和它的对象,CANopen紧急事件和事件驱动的PDO消息

FOE: Filetransfer over EtherCAT // 下载上传固件和其他的一些文件

SOE: Servo Drive over EtherCAT // 存取伺服轮廓检验(IDN)

从站信息接口

强制从站信息接口SII(Slave Information Interface)由所有能被持久保持的对象组成 信息被存储于一个EEPROM,EtherCAT从站控制器和EEPROM之间有一个SPI接口。

SII包括:

boot设置数据

设备一致性

vender id,产品序列号,修正号,serial no

和CoE对象0x1018里,相同的信息

应用程序信息数据

额外的一些数据

AL Status Code(Application Layer Status Code)

Application Layer: Describes the highest layer of the EtherCAT slave stack which includes the EtherCAT State Machine, error handling, Mailbox protocol handling, slave application.

此可选属性由应用程序控制,并报告由AL的状态控制事例检测到的最后错误或ID值。AL(应用层)状态代码给出从机进入错误状态的原因。 如果错误标志(寄存器0x0130:04)为TRUE,则应提供AL状态代码.

2.9 设备配置(Device Profile)

设备行规描述了设备的应用参数和功能特性,如设备类别相关的机器状态等。现场总线技术已经为I/O设备、驱动、阀等许多设备类别提供了可利用的设备行规。用户非常熟悉这些行规以及相关的参数和工具,因此,EtherCAT无需为这些设备类别重新开发设备行规,而是为现有的设备行规提供了简单的接口。该特性使得用户和设备制造商可以轻松完成从现有的现场总线到EtherCAT技术的转换过程。

EtherCAT实现CANopen (CoE)

CANopen©设备和应用行规广泛用于多种设备类别和应用,如I/O组件、驱动、编码器、比例阀、液压控制器,以及用于塑料或纺织行业的应用行规等。

EtherCAT可以提供与CANopen机制[7]相同的通讯机制,包括对象字典、PDO(过程数据对象)、SDO(服务数据对象),甚至于网络管理。

因此,在已经安装了CANopen的设备中,仅需稍加变动即可轻松实现EtherCAT,绝大部分的CANopen©固件都得以重复利用。并且,可以选择性地扩展对象,以便利用EtherCAT所提供的巨大带宽。

EtherCAT实施伺服驱动 设备行规IEC 61491 (SoE)

SERCOS interface™ 是全球公认的、用于高性能实时运行系统的通讯接口,尤其适用于运动控制的应用场合。

用于伺服驱动和通讯技术的SERCOS™框架属于IEC 61491标准[8] 的范畴。该伺服驱动框架可以轻松地映射到EtherCAT中,嵌入于驱动中的服务通道、全部参数存取以及功能都基于EtherCAT邮箱(参见图12)。在此,关注焦点还是EtherCAT与现有协议的兼容性(IDN的存取值、属性、名称、单位等),以及与数据长度限制相关的扩展性。过程数据,即形式为AT和MDT的SERCOS™数据,都使用EtherCAT从站控制器机制进行传送,其映射与SERCOS映射相似。并且,EtherCAT从站的设备状态也可以非常容易地映射为SERCOS™协议状态。EtherCAT从站状态机可以很容易地映射到SERCOS™协议的通信阶段。

EtherCAT为这种在CNC行业中广泛使用的设备行规提供了先进的实时以太网技术。这种设备行规的优点与EtherCAT分布时钟提供的优点相结合,保证了网络范围内精确时钟同步。可以任意传输位置命令,速度命令或扭矩命令。取决于实现方式,甚至可能继续使用相同的设备配置工具。

EtherCAT实现以太网(EoE)

EtherCAT技术不仅完全兼容以太网,而且在“设计”之初就具备良好的开放性特征——该协议可以在相同的物理层网络中包容其它基于以太网的服务和协议,通常可将其性能损失降到最小。对以太网的设备类型没有限制,设备可通过交换机端口在EtherCAT段内进行连接。以太网帧通过EtherCAT协议开通隧道,这也正是VPN、 PPPoE (DSL) 等因特网应用所普遍采取的方法。EtherCAT网络对以太网设备而言是完全透明的,其实时特性也不会发生畸变(参见图13)。 EtherCAT设备可以包容其它的以太网协议,因此具备标准以太网设备的一切特性。主站的作用与第2层交换机所起的作用一样,可按照编址信息将以太网帧重新定向到相应的设备。因此,集成万维网服务器、电子邮件和FTP 传送等所有的因特网技术都可以在EtherCAT的环境中得以应用。

EtherCAT实现文件读取(FoE)

这种简单的协议与TFTP类似,允许存取设备中的任何数据结构。因此,无论设备是否支持TCP/IP,都有可能将标准化固件上载到设备上。

ADS over EtherCAT (AoE)

ADS over EtherCAT (AoE)是由EtherCAT规范定义的客户端-服务器邮箱协议。尽管CoE协议提供了详尽的描述,但AoE则更适合路由与并行服务的应用:通过网关设备访问子网络,如EtherCAT至CANopen® 或EtherCAT至IO-Link™ 网关设备。AoE使EtherCAT主站应用(如PLC程序)可以访问所属CANopen® 或 IOLink™从站的各个参数。AoE路由机制开销远低于因特网协议(IP)所定义的开销,并且发送方和接收方寻址参数始终包含在AoE报文中。因此,EtherCAT主站和从站端的实施更为精简。AoE也通过EtherCAT自动化协议(EAP)进行非周期通信的标准化,从而为上位机MES系统或主计算机、EtherCAT主站及其从属的现有设备之间提供无缝通信。同时,AoE也提供了从远程诊断工具获取EtherCAT网络诊断信息的标准化方法。

2.10 主站设计

EtherCAT可以在单个以太网帧中最多实现1486字节的分布式过程数据通讯。其它解决方案一般是,主站设备需要在每个网络周期中为各个节点处理、发送和接收帧。

而EtherCAT系统与此不同之处在于,在通常情况下,每周期仅需要一个或两个帧即可完成所有节点的全部通讯,因此,EtherCAT主站不需要专用的通讯处理器。主站功能几乎不会给主机CPU带来任何负担,轻松处理这些任务的同时,还可以处理应用程序,因此EtherCAT无需使用昂贵的专用有源插接卡,只需使用无源的NIC卡或主板集成的以太网MAC设备即可。EtherCAT主站很容易实现,尤其适用于中小规模的控制系统和有明确规定的应用场合。

例如,如果某个单个过程映像的PLC没有超过1486 字节,那么在其周期时间内循环发送这个以太网帧就足够了。因为报文头运行时不会发生变化,所以只需将常数报文头插入到过程映像中,并将结果传送到以太网控制器即可。

EtherCAT映射不是在主站产生,而是在从站产生(外围设备将数据插入所经以太网帧的相应位置),因此,此时过程映像已经完成排序。该特性进一步减轻了主机CPU的负担。可以看到,EtherCAT主站完全在主机CPU中采用软件方式实现,相比之下,传统的慢速现场总线系统通过有源插接卡方可实现主站的方式则要占用更多的资源,甚至服务于DPRAM的有源卡本身也将占用可观的主机资源。

系统配置工具(通过生产商获取)可提供包括相应的标准 XML 格式启动顺序在内的网络和设备参数。

已经在各种实时操作系统上实现了EtherCAT主站,包括但并不限于:eCos, INtime, MICROWARE OS-9,MQX, On Time RTOS-32, Proconos OS, Real-Time Java, RT Kernel, RT-Linux, RTX, RTXC, RTAI Linux,PikeOS, Linux with RT-Preempt, QNX, VxWin + CeWin, VxWorks, Windows CE, Windows XP/XPE with CoDeSys SP RTE, Windows NT/NTE/2000/XP/XPE/Vista with TwinCAT RTE, Windows 7 and XENOMAI Linux. 可以获得开源主站协议栈,作为示例代码或商业软件。也有各种公司提供各种硬件平台上的实施服务。可以在EtherCAT网站上的产品区找到快速增长的供应商信息[1]。

另一种EtherCAT主站的实现方式是使用样本代码,花费不高。软件以源代码形式提供,包括所有的EtherCAT主站功能,甚至还包括EoE(EtherCAT实现以太网)功能(见图15)。开发人员只要把这些应用于Windows环境的代码与目标硬件及所使用的RTOS加以匹配就可以了。该软件代码已经成功应用于多个系统。

2.11 从站设计

从站EtherCAT Processing Unit 总是位于 Port 0 之后其它端口之前,并在数据帧传输的过程中提取和插入数据:

DPRAM: 双端口存储器 Dual-Ported RAM,可以分别从主站及本地微处理器uC访问。访问 ESC 的 Dual-Ported RAM 读出 并/或 写入数据。

从器件具有一个16位Local地址空间:

地址范围0x0000:0x0FFF专用于EtherCAT寄存器,

地址范围0x1000:0xFFFF用作过程数据RAM

SyncManagers 阻止主站和从站微处理器(uC)同时访问 ESC存储区,确保数据的一致性

→ 含周期性数据 (Process Data) 和非周期性数据 (Mailbox)

FMMUs 为Lxx数据报文完成逻辑地址到物理地址的转换

→ 仅对于周期性数据 (Process Data)

从站的SyncManagers 和 FMMU 是由主站在初始化阶段自动配置的,该配置基于每个从站的XML文件和整个网络的设置。

EtherCAT从站设备使用一个价格低廉的从站控制器芯片ESC。从站不需要微处理器就可以实现EtherCAT通信。可以通过I/O接口实现的简单设备可以只由ESC和其下的PHY,变压器和RJ45接头。给从站的过程数据接口是32位的I/O接口。这种从站没有可配置的参数,所以不需要软件或邮箱协议。EtherCAT状态机由ESC处理。ESC的启动信息从EEPROM中读取,它也支持从站的身份识别。

更复杂的可配置从站有使用一个CPU。这个CPU和ESC之间使用8位或16位并行接口或串行SPI接口。要求的CPU性能取决于从站的应用,EtherCAT协议软件在其上运行。EtherCAT协议栈管理EtherCAT状态机和应用层协议,可以实现CoE协议和支持固件下载的FoE协议。EoE协议也可以实施。

从站控制器通常都有一个内部的DPRAM(DUAL PORT RAM),并提供存取这些应用内存的接口范围:

串行SPI(串行外围接口)主要用于数量较小的过程数据设备,如模拟量I/O模块、传感器、编码器和简单驱动等。该接口通常使用8位微控制器,如微型芯片PIC、DSP、Intel 80C51等(见图16)。

8/16位微控制器并行接口与带有DPRAM接口的传统现场总线控制器接口相对应,尤其适用于数据量较大的复杂设备。通常情况下,微控制器使用的接口包括Infineon 80C16x、Intel 80x86、Hitachi SH1、ST10、ARM和TI TMS320等系列(见图16)。

32位并行I/O接口不仅可以连接多达32位数字输入/输出,而且也适用于简单的传感器或执行器的32位数据操作。这类设备无需主机CPU(见图17)。

PDO(过程数据对象)、SDO(服务数据对象)

报文通过从站控制器时,从站读取出相关命令并进行对应处理,数据处理通过硬件完成,延间约为100-_500ns,通信性能独立于MCU的响应时间。每个ESC最大有容量为64KB的可用的内存编址,能进行连续或同步的读写。多个EtherCAT命令数据可以被嵌入到一个以太网报文中,每个数据对应独立的设备或内存区。

EtherCAT极大提高了以太网的性能,比如操作1000个I/O信号的时间约为30微秒。单个报文至多容纳1486字节的过程数据,和12000位I/O信号相当,更新所需时间约为300微秒。控制100个伺服单元的时间约为100微秒。

在基于PC的主站中,一般使用网络接口卡NIC(Network Interface Card)其中的网卡芯片集成了以太网通信控制器和物理层数据收发器。但是在嵌入式主站中,通信控制器通常集成在微处理器中。

EtherCAT从站设备同时实现应用控制和数据通信两部分功能,其组成如图所示,由四部分组成:从站控制微处理器、EtherCAT从站控制器ESC芯片、物理层器件和其他应用层器件。

EtherCAT报文由从站控制器来处理,使用双端口存储区完成主从站间的数据交换。每个从站ESC在环路上按各自的顺序移位读写数据。当数据帧经过从站时,ESC从中读取发送给自己的命令数据并放到内部存储区,插入的数据又被从内部 存储区写到子报文中。

从站控制微处理器主要负责处理EtherCAT通信和完成控制任务。微处理器从ESC获取控制数据实现设备控制功能,并采样设备的反馈数据写入ESC。从站控制微处理器的选型根据设备控制任务,可以使用ARM或DSP; 8位、16位或32位的处理器。EtherCAT从站采用MII接口模式时,需要使用标准以太网物理层器件:物理层芯片PHY,隔离变压器等。采用EBUS接口时不需要任何其他芯片。

3. 应用层(Application Layer)

3.1

3.2 EtherCAT Slave Implementation (从站实现)

DPRAM (双端口存储器)size and number of SyncManagers(同步管理 )

The DPRAM is used for exchange of cyclic and acyclic data(循环和非循环的数据交换) via the EtherCAT network. SyncManagers ensure data consistency(保证数据的一致性) within the DPRAM.

Each ESC has 4kByte of registers (addresses 0x0000 to 0x0FFF) which are reserved for (EtherCAT and PDI communication) configuration settings(配置设置 ).

Mailbox(邮箱) and process data is exchanged via additional DPRAM (also called user memory用户存储器 ). EtherCAT allows addressing(编址) of user memory of up to 60kBytes. ASICs provide between 1kByte and 8kByte of DPRAM, IP Cores can be configured to provide the full 60kByte of user memory.

Application Note: The standard SyncManager configuration is(标准的同步管理配置)

- 1 SyncManager per acyclic data output (mailbox out, master to slave)

- 1 SM for acyclic data input (mailbox in, slave to master)

- 1 SM for cyclic data output (process data out, master to slave)

- 1 SM for cyclic data input (process data in, slave to master)

For process data, SM running in 3-buffer-mode(3缓存模式) need three times the length (3倍长度) of actual process data for physical memory(物理内存) . The following table shows a schema(体系结构,模式) of how to allocate(分配) the length for the 4 SM.

Table 5: DPRAM Size Calculation Example( DPRAM大小计算示例)

SyncManagerBuffer CountLength [Byte]Total length [Byte]SM0Output Mailbox1L_MbxOut1*L_MbxOutSM1Input Mailbox1L_MbxIn+ 1*L_MbxInSM2Outputs3L_Out (TxPDO)+ 3*L_OutSM3Inputs3L_In (RxPDO)+3*L_In----∑ DPRAM size

SyncManagers are enabled(开启) by the following settings of the master during network initialization(网络初始化) .

-Physical address of ESC(ESC物理地址)

-Data length (数据长度)

-SyncManager control input(同步管理控制输入) :

i. Operation mode【操作模式】 (mailbox-mode/3-buffer-mode)

ii. Access direction【访问方向:读或者写】 (Read direction/Write direction)

iii. Interrupt settings 【中断设置】 (Valid/Invalid 有效/无效 )

iv. SyncManager watchdog setting【同步管理看门狗定时器设置】 (Valid/Invalid)

v. SyncManager setting (Valid/Invalid)

The default values are set in the ESI (chapter 2.4.1); the master initializes the SyncManager using the values from the ESI.(默认值在 ESI中设置,主站初始化时调用 ESI中的值)

Syncmanagers(同步管理器)

同步管理器简称SM用来协调应用程序和主机的数据交互,同步管理器同步的是数据而非时间,同步管理器确保了应用程序和主机能够正确的写入或读取数据。同时同步管理器可以以中断的形式通知主机和应用程序发生的数据更新事件。

从站的ESC中包含多个同步管理器,每一个同步管理器都可以单独的配置:

同步管理器的配置中包括告知同步管理器其需要管理的内存地址的范围,管理内存的属性(属于读或写,属于邮箱数据或过程数据)。

所以每一种数据交互方式都会有一个同步管理器来管理,应用程序进行数据交互时,只需要更具不同的同步管理器就可以方便的区分数据的类型(PDO 或SDO、读或写)。从站在初始化时会读取SM管理器中的配置来确定数据的存放地址。

数据的交互主要有缓冲模式和邮箱模式。缓冲模式主要应用于周期性过程数据的传送。

Number of Fieldbus Memory Management Units (FMMUs)(现场总线储存管理单元)

In an EtherCAT network, the memory of all slaves can be compiled in the master(所有从站的储存都可以在主站中编辑) to a logical memory(逻辑内存) . This logical memory is managed by FMMUs to map(映射) logical addresses to physical addresses in the slavesFMMUs(逻辑内存通过 的管理和从站中的物理内存相对应) .

For the FMMU configuration in a device, each consistent output and each consistent input block needs one FMMU and an additional FMMU for mailbox status response is necessary. // 对于设备中的FMMU配置,每个一致的输出和每个一致的输入块都需要一个FMMU,并且还需要一个用于邮箱状态响应的附加FMMU。

Application Note: The standard configuration is one FMMU per each, cyclic output and cyclic input data block , optionally an additional one for mapping the mailbox response availability flag into process data (thus, no polling of mailboxes is necessary). If the outputs and inputs are groupede.g. like in Table 5, 3 FMMUs are configured, see Table 6. // 应用说明:标准配置是每个循环输出和循环输入数据块一个FMMU,还可以选择另外一个用于将邮箱响应可用性标志映射到过程数据中(因此,不需要轮询邮箱)。 如果输出和输入被分组,例如 如表5所示,配置了3个FMMU,请参阅表6。

Table 6: FMMU Configuration

FMMUAssigned SyncManagerNameLength [Byte]1SM2OutputsL_Out (TxPDO)2SM3InputsL_In (RxPDO)3SM0 & SM1Mbx-SM Status FlagsMbx In/Out Length

Distributed Clocks (DCs(同步) with other slave devices,分布式时钟 ) for synchronization

Evaluate if the device should support high precise(支持高精度) synchronization with other slave devices. If so, DCs should be supported by the selected ESC. Distributed Clocks refer to the DC function for EtherCAT slaves (chapter 1.3.5). The times held by slaves are adjusted with this mechanism(途径) and thus enable precise synchronization of the nodes(节点) in the EtherCAT network. // 评估设备是否应支持与其他从设备的高精度同步。 如果是这样,所选的ESC应该支持DC。 分布式时钟指的是EtherCAT从站的DC功能(第1.3.5章)。 通过这种机制可以调整从站保持的时间,从而实现EtherCAT网络中节点的精确同步。

EEPROM(电可擦只读存储器)

The EEPROM is mounted(安装) outside the ESC and connected via I2C with point-to-point link(点对点连接) . According to the size of the EEPROM the EEPROM_SIZE signal should be set. For more details, refer to the Knowledge Base, chapter 11.3 d electrical Interface EEPROM an(I 2C)". For EEPROM (SII) Enhanced Link Detection setting (加强连接检测设置) , refer to documentation of the ESC vendor. // EEPROM安装在ESC外部,并通过I2C与点对点链接连接。 根据EEPROM的大小,应设置EEPROM_SIZE信号。 有关更多详细信息,请参见知识库第11.3章“电气接口EEPROM和(I 2C)”。有关EEPROM(SII)增强链接检测设置,请参阅ESC供应商的文档。

Application Controller【应用控制】 (Host Controller, μ C)

If a local software application provides the device functionality, any 8 or 16 bit synchronous or asynchronous microcontroller(任何一个 8位或者 16位同步或者异步微控制器) can be connected to the ESC. The application controller communicates with the ESC via the Process Data Interfaces (PDI).

To adapt the application software on the host(为了和主站的应用程序相适应 ) controller to the ESC, sample software stacks(样本软件栈) are available for communication implementation(通讯的实现), e.g. the Slave Sample Code(从站样本代码) (SCC). If the device is a 32 bit digital I/O interface, no application controller or additional communication software is necessary. // 为了使主机控制器上的应用软件适应ESC,可以使用示例软件堆栈进行通信实现,例如从机样本代码(SCC)。 如果设备是32位数字I/O接口,则无需应用程序控制器或其他通讯软件。

In most cases, manufacturers(制造商) can use a familiar microcontroller type as application controller in the EtherCAT device(使用相似型号的微控制器作为应用控制使用在 EtherCAT设备中) . If application software already exists, e.g. for a different fieldbus, it can be used for the EtherCAT device as well. // 在大多数情况下,制造商可以在EtherCAT设备中使用熟悉的微控制器类型作为应用程序控制器。 如果应用软件已经存在,例如 对于不同的现场总线,它也可以用于EtherCAT设备。

The source code(源代码) for communications software on the host controller allocates(分配) about 70kByte. The following features are a typical configuration (referring to the Slave Sample Code):

EtherCAT State Machine (ESM), including error handling(错误处理)

Device diagnosis(设备诊断)

Master-Slave data synchronization (主从站之间的数据同步) with SyncManager event (no DCs)

Mailbox CoE

Object Dictionary (对象字典) (20 objects) for process data objects (过程数据对象)

CoE services, including CoE Info services(信息服务) , no segmented transfer (无分割转换)

A list of other available sample stacks can be obtained on the product section of the ETG website.

Application Layer Communication Protocols (应用层通讯协议)

In EtherCAT, several protocols are available (see chapter 1.3.6) for the application layer to implement (实施) the required specification of the product development(产品开发时所需的规格) . When to apply them is described here.

CAN application protocol (总线应用协议 )over EtherCAT(CoE) To provide acyclic data exchange as well as mechanisms to configure PDOs for cyclic data exchange in a structured way, CoE (with SDO-Info support) should be implemented.

Servo drive profile(伺服驱动配置文件) over EtherCAT(SoE) SoE is an alternative drive profile to the CiA402 drive profile. It is often used by drive manufacturers which are familiar with the SERCOS interface.

Ethernet(以太网) over EtherCAT(EoE) EoE is usually used to provide webserver interfaces(网络接口) via EtherCAT. It is also used for devices providing decentral standard Ethernet ports(分散生产方式的标准以太网端口) . ? File Access(文件存取组件) over EtherCAT(FoE) If the device should support firmware(固件)download via EtherCAT, FoE should be supported. FoE is based on TFTP. It provides fast file transfer and small protocol implementation.

ADS over EtherCAT(AoE)小协议实施 When planning to control the device via a .Net interface, AoE is an option to apply.

Application Note:An exemplary(典范) CoE implementation is shown below.

The user application runs the device specific software(设备专用软件) on the μ C to implement device features(实现设备功能特性 ). Sample source code(protocol stacks) offered by EtherCAT stack vendors can be used to develop this application or to adapt existing software to EtherCAT.

Application Note:EtherCAT Slave Stack Code (SSC,从站堆栈代码 ).

The SSC is a free sample codefrom Beckhoff(德国倍福自动化有限公司)(免费样本代码) which provides an interface to the ESC. For hardware independent software development(独立于硬件的软件开发) , the SSC runs on several evaluation kits(评估板) and can be customized(自定义) for implementation in accordance with the product specification. Figure 14 shows the SSC structure with the interfaces to the user specific device application(用户特定的设备应用) and the ESC.

Application Note:EtherCAT Slave Protocol Stack.(从站协议栈)

Hilscher(德国赫优讯公司) offers a Slave Control Stack based on its netX hardware withDual Port Memoryinterface (DPM,双端口记忆器 ) and it is available for the user application with an API. Figure 15 shows the protocol stack architecture(协议栈构架) with interfaces to the ESC and the user application.

Device Profiles(设备配置文件)

During network initialization(网络初始化期间) , parameter setup(参数设定) is necessary, where data does not need to be transmitted cyclically(周期性传输) but only during network initialization. Acyclic data exchange is done via mailbox protocols(非循环的数据传输通过邮箱协议) , usually via theCoEprotocol (see chapter 2.3.5). For devices with variable process data structure, the definition of a modular device description(MDP,模块化设备描述 ) is available. The MDP is described in the ETG.5001 Modular Device Profile Specification(说明书) . // 在网络初始化期间,必须进行参数设置,这些数据不需要循环传输,而仅在网络初始化期间需要传输。 非循环数据交换是通过邮箱协议(通常通过CoE协议)完成的(请参阅第2.3.5章)。 对于具有可变过程数据结构的设备,可以使用模块化设备描述(MDP)的定义。 EDP.5001模块化设备配置文件规范中描述了MDP。

The MDP is based on the object dictionary defined byCoE(CAN application protocol over EtherCAT). The object dictionary can be described as a two dimensional list(二维表) . Each list entry (每个表的入口) is identified(识别) by an index(指针,索引) (0x0000–0xFFFF) which represents an object. Each object can contain up to 255 subindices(分目录) , also called object entries. The object list is structured in different areas, see Table 7. // MDP基于CoE(基于EtherCAT的CAN应用协议)定义的对象字典。 对象字典可以描述为二维列表。 每个列表条目均由代表对象的索引(0x0000-0xFFFF)标识。 每个对象最多可以包含255个子索引,也称为对象条目。 对象列表的结构在不同区域中,请参见表7。

The idea of the MDP is to provide a basic structure for masters(为主站提供一个基本构架) and configuration tools(配置工具) to handle(处理) slaves with complex (modular) structure easily. The user has the advantage, that if the slave variables’(变量)s are sorted in an MDP style, he can find the different data types by identical patterns(相同的模式) . // MDP的思想是为主机和配置工具提供基本结构,以轻松处理具有复杂(模块化)结构的从机。 用户的优势在于,如果以MDP样式对从属变量进行排序,则他可以通过相同的模式找到不同的数据类型。

The MDP can be applied to various types of devices. It is applicable to multiple axis(多轴) servo drive system(伺服驱动系统) of various functionality groups(各种功能组) , such as positioning(位置控制) , torque(扭矩控制) and velocity control(转速控制) . It is further applicable to gateway(网关) between different fieldbuses, i.e., Profibus, DeviceNet. Modular devices are driven by two aspects: // MDP可以应用于各种类型的设备。 适用于各种功能组的多轴伺服驱动系统,例如定位,转矩和速度控制。 它进一步适用于不同现场总线之间的网关,即Profibus,DeviceNet。 模块化设备由两个方面驱动:

Comprise(包含) physically connectable modules and plurality of functionalities(多数功能) .

//包括物理上可连接的模块和多种功能。

Comprise plurality of channels(多数通道) directly being connected to the EtherCAT network.

//包括多个直接连接到EtherCAT网络的通道。

The MDP imagines slaves which consist of one or several modules. A module can be hardware which is connected/disconnected to a slave. Examples are gateways between EtherCAT and e.g. CANopen or a bus coupler(总线耦合器) between EtherCAT and a proprietary backbone bus(专用主干总线) . // MDP设想从站由一个或几个模块组成。模块可以是已连接/断开连接到从站的硬件。示例是EtherCAT与例如CANopen或EtherCAT与专有骨干总线之间的总线耦合器。

A module can also be a logical module which describes data sets, e.g. a drive which supports a velocity controlled mode and a position controlled mode –the MDP would describe the data as two modules, one for each mode.(把数据描述成 2种模式,每个对应相应的模式) // 模块也可以是描述数据集的逻辑模块,例如。一个支持速度控制模式和位置​​控制模式的驱动器-MDP将数据描述为两个模块,每个模式一个。

No matter what kind of module is described it needs more or less the same information categories(需要相对应的信息分类) , which are organized in the profile specific index range (Table 7). // 无论描述哪种模块,它都或多或少需要相同的信息类别,这些信息类别在配置文件特定的索引范围内进行组织(表7)。

Application Note:Modular Device Profile Structure(模块化设备配置文件结构) . // 应用说明:模块化设备配置文件结构。

Consider an MDP for a line of slave device modules which are connected together on a backbone layer(主干网层面) via LVDS and via a coupler(耦合器) with MII. Figure 16 shows a schema how to define device profiles(如何定义设备配置文件) such that a modular profile dictionary is set up for the slave device line. // 考虑一排从设备模块的MDP,这些设备通过LVDS和带有MII的耦合器在主干层上连接在一起。图16显示了一种模式,该模式如何定义设备配置文件,以便为从属设备线设置模块化配置文件字典。

For implementation of the profile (CiA402 Drive Profile) for servo drive, build the program with reference to the corresponding specifications(技术规格,说明书) . In this example, this would be the

ETG.6010 Implementation Directive(指令) for the CiA402 Drive Profile, and

IEC 61800-7 Drive Profiles and Mapping to EtherCAT.

4. 应用实例

由于EtherCAT实时工业以太网技术具有适用范围广、拓扑结构灵活、数据通信效率高、实时性强和同步性能好等多种优点,所以特别适用于实时性要求高、通信数据量大的运动控制系统。

控制系统设计采用“PC+运动控制器”的方案,构建多轴运动控制系统,采用PC机为主站、ARM+MCX314为从站处理器的架构。其核心插补与控制算法都放在工业PC中完成,运动控制器要求大为降低,其主要完成数字给定量到实际脉冲信号的转变。该控制系统方案的优势在于简化硬件设计工作,主要以标准化的硬件为主:上位机可以采用工业PC机、下位机使用开发的通用运动控制器,方便日后升级维护。工业PC机与运动控制器直接采用EtherCAT实时工业以太网进行通信连接。

4.1 主站操作系统(RTAI)

PC机部分软件以LinuxCNC为基础,往下LinuxCNC通过HAL(硬件抽象层)与EtherCAT主站驱动之间进行通信连接,然后EtherCAT主站通过以太网线给从站运动控制器发控制命令;往上利用LinuxCNC提供的Python调用接口和人机界面通信,数控系统人机界面采用PyQt开发;由于LinuxCNC需要运行实时任务,需要将普通操作系统进行改造。因此,目前的主要工作是对Linux系统进行实时性改造、安装EtherCAT主站、编写HAL模块、编写人机界面。

虽然EtherCAT主站程序能够安装在非实时操作系统上,但一般情况下会对主站进行实时性改造,而且LinuxCNC中有运行实时任务的需要,所以对Linux系统进行实时性改造迫在眉睫。众所周知,Linux系统本质上是一个分时操作系统,不是一个实时操作系统。Linux系统实时性不强使其在嵌入式应用中有一定的局限性,受内核可抢占性、进程调度方式、中断处理机制、时钟粒度、虚拟内存管理等几个方面的制约。

根据实时性系统要求以及Linux的特点和性能分析,对标准Linux实时性的改造存在多种方法,较为合理的两大类方法为:直接修改Linux内核源代码和双内核法。

1.直接修改Linux内核源代码:对Linux内核代码进行细微修改并不对内核作大规模的变动,在遵循GPL协议的情况下,直接修改内核源代码将Linux改造成一个完全可抢占的实时系统。核心修改面向局部,不会从根本上改变Linux内核,并且一些改动还可以通过Linux的模块加载来完成,即系统需要处理实时任务时加载该功能模块,不需要时动态卸载该模块。这种方法存在的问题是:很难百分之百保证,在任何情况下,GPOS(通用操作系统)程序代码绝不会阻碍RTOS的实时行为。也就是说,通过修改Linux内核,难以保证实时进程的执行不会遭到非实时进程所进行的不可预测活动的干扰。2.双内核法:双内核法是在同一硬件平台上采用两个相互配合,共同工作的系统核心,通过在Linux系统的最底层增加一层实时核心来实现。其中的一个核心提供精确的实时多任务处理,另一个核心提供复杂的非实时通用功能。其优点是可以做到硬实时,并且能很方便地实现一种新的调度策略。目前采用这种方案的主要有RTAT,RT-Linux和Xenomai。本课题采用RTAI实时包的方式完成对Linux系统的实时性改造,如图所示。

RTAI(实时应用接口)是Linux内核的一个实时扩展,RTAI是基于ADEOSC Adaptive Domain Environment for Operating System)实现,ADEOS位于Linux系统和硬件之间管理硬件中断,并控制实时内核和Linux内核的优先级,其中实时内核优先级高于Linux内核优先级。

RTAI安装:

1.下载RTAI压缩包并解压到urs/src目录下,输入命令:

cd /usr/src

sudo tar -bzip2 -xvf rtai一3.8.tar.bz2

2.下载Linux内核压缩包并解压到urs/src目录下,输入命令:

sudo cp suoxd/linux-2.6.37.1.tar.bz2 /usr/src

sudo tar -bzip2 -xvf linux一2.6.32.2.tar.bz2

3.利用RTAI源码中的文件给内核打补丁,未安装p atch需安装patch后,输入命令:

sudo patch -pl

4.配置内核,Linux2.6.32引入新的方式用于简化kernel的配置,使用命令拷贝当前配置,省去很多繁琐的内核配置选项。

5.安装内核模块,输入命令:

sudo make clean

sudo make

sudo make modules

sudo make modules install

sudo make install

6.配置RTAI,下载安装MESA库文件和EFLTK包,然后进入RTAI文件夹,执行配置,输入命令:

cd /usr/src/rtai

sudo make config

7.编译并安装RTAI,命令行窗口的RTAI安装结果如图4-2所示,输入命令:

sudo make

sudo make install

8.RTAI内核延时测试,利用RTAI源码包中的测试案例进行测试,测试结果如下:

cd /usr/realtime/testsuite/user/latency

sudo ./run

9.RTAI内核抢占实现测试,测试结果如图4-4所示,输入命令行:

cd /usr/realtime/testsuite/user/preempt

sudo ./run

4.2 主站EtherCAT程序(IGH)

本控制系统EtherCAT主站以实时Linux操作系统为基础,在Linux环境下开发主站有两方面优势,一方面Linux为开源系统,方便对底层进行修改;另一方面便于进行嵌入式移植。Linux下的EtherCAT主站架构如图所示:

Linux操作系统可分为内核态和用户态。内核态是操作系统的核心,负责进程管理、内存管理、进程间通信和设备管理和驱动等,实时性要求高。用户态主要运行人机交互、数据监控等实时性要求不高的程序。

EtherCAT主站模块运行在内核态,可支持一个或多个EtherCAT主站,且同时提供应用接口和设备接口。用户通过应用接口访问主站,通过设备接口连接设备到指定主站。EtherCAT的以太网设备驱动模块通过主站设备接口与主站连接,EtherCAT设备协议可直接由以太网帧传送,因而主站能同时并行处理EtherCAT数据帧和通用以太网通信。

在Linux上安装EtherCAT主站程序,这里选择EtherLab开发的IgH EtherCAT Master,首先下载主站安装文件gHEtherLab.tar.bz2,下载文件后解压缩进入含有Makefile文件的目录安装主站,输入命令:

make ethercatMaster

make ethercatMasterinstall

sudo /etc/init.d/ethercat start

ethercat master

若最后两条指令运行正常则说明主站安装成功。

4.3 主站应用开发(LinuxCNC)

LinuxCNC是一款运行在Linux平台下的实时开源数控软件。起源于美国国家标准与技术研究院的增强型运动控制器EMC (Enhanced Machine Controller)研究项目,用于机床的数控系统。经过十几年的发展,LinuxCNC系统广泛用于冲床、车床、3D打印机、激光切割机、等离子切割机、机器人手臂等领域。其主要优点有:提供多个标准化的用户界面、用户也可以采用自主开发的GUI、自带G代码解析器、支持伺服电机控制步进电机开环控制、运动控制器功能强大、支持非笛卡尔坐标运动系统、采用2.4或2.6的Linux内核支持RT-Linux或RTAI实时补丁。LinuxCNC源代码可以免费下载,安装在Linux系统上。LinuxCNC软件架构如图所示。

LinuxCNC是一个模块化设计的软件,大致可以分为以下四个主要模块:运动控制器(EmcMot)、数字I/O控制器(EmcIO )、任务控制器(EmcTask )、图形用户界面(GUI)。

用户操作界面负责接收用户命令并反馈最新状态;

任务控制器是整个系统的决策层,主要负责对各种命令进行决策分类、解析发送给不同的模块;

运动控制器是实时刷新的,主要完成路径规划、插值运算等;

数字I/O控制器负责处理I/O信号,通过NML消息与运动控制器通信,因为不同设备I/O各不相同,这时需要硬件抽象层HAL文件建立软逻辑电路来控制实际I/O ;

HAL

HAL硬件抽象层是LinuxCNC系统的关键技术之一,通过引入HAL机制,为用户提供了统一的驱动开发接口,方便编写驱动,还能利用配置文件将相应的HAL模块连成一个复杂系统,方便数据传递。HAL模块结构图如图所示。

EtherCAT主站驱动与LinuxCNC之间采用HAL机制进行通信,硬件抽象层将各个底层的硬件驱动、实时算法抽象出来,构成一个组件,组件是由函数、参数、输入输出引脚所组成,输入信号包括来自LinuxCNC的控制信号、用户配置信息,输出信号包括提供给LinuxCNC的反馈量等。将编写好的HAL模块命令为ec.comp,编译生成ec.ko,利用insmod命令将其安装后就可以加载到线程中。

当HAL模块启动的时候,需要对变量进行初始化,但完成EtherCAT主站的初始化是更重要的,只有初始化了主站,设置好参数,建立起完整的通信网络,才能进行接下来的周期数据传输,其中PDO为进程数据对象、SDO为服务数据对象。如图为EtherCAT主站的初始化流程图。

主站初始化完成后,LinuxCNC开始正常运行。LinuxCNC在每个控制周期通过硬件抽象层下发控制命令,并获取从站设备反馈的信息。

HAL周期任务流程图如图所示。

对于采用位置控制的伺服单元,HAL模块每次都要计算出本控制周期的位移或目标点,然后通过EtherCAT总线发送到从站运动控制器;

然后从站运动控制器在每个控制周期上报编码器位置增量和I/O状态,HAL模块计算出轴的实际位置后发送给LinuxCNC。

UI界面

在Linux环境下开发用户界面的语言有Python, C++等,图形库有QT, GTK等。由于控制界面运行于用户态,实时性要求不高,同时兼顾开发难度和周期,本课题采用Python语言,结合PyQT图形库开发冲床控制界面。Python是一种面向对象的脚本语言,与其他语言相比,Python具有如下优点:面向对象、公开免费、跨平台可移植、功能强大、使用简单、模块丰富。QT是一个功能丰富广泛使用的GUI图形库,可用于Windows, Linux等平台,具有很好的可移植性。PyQt是Python语言与Qt图形库相结合的产物,从而可以通过Python来使用Qt图形库,具有模块丰富、跨平台和使用信号与槽机制的优点。数控界面调用LinuxCNC抽象出的Python接口与任务控制器通信,并监视LinuxCNC状态信息和错误信息。

本课题冲床数控系统设计加工状态、参数设置、警告与诊断和软件设置四个状态界面,四个状态界面下一共分设13个子界面,各个界面之间可以通过按钮进行切换,数控系统界面结构图如图所示。 系统的主界面由菜单栏、工作窗口、快捷工具栏和消息提示栏这四部分构成。菜单栏可以根据不同的操作需求切换不同的工作窗口,快捷工具栏是一些常用的快捷按钮,消息提示栏是提示快捷按钮内容和显示系统运行状况、错误信息汇报的区域,如图所示。 2.参数设置界面:参数设置界面用于设置控制系统及机械的参数,分设了系统参数设置、运动轴参数设置及模具库参数设置这3个子界面。下面主要讲解运动轴参数,运动轴参数设置界面如图所示。

3.警告与诊断界面:息记录界面这2个子界面。警告与诊断界面下设有警告信息诊断界面、历史警告信,如图所示。

4.软件设置界面:软件设置界面用于设置软件与外部设备的通讯参数和显示软件的版本等信息,设有软件信息、外部设备通讯设置及高级设置这3个子界面。下面讲解外部设备通讯设置界面,如图所示。

4.4 ET1200

EtherCAT从站控制器ESC(EtherCAT Slave Controller)是由德国BECKHOFF自动化有限公司提供的,包括ASIC芯片和IP-Core,实现EtherCAT数据链路层协议。目前ASIC从站控制专用芯片有ET1100和ET1200,也可以使用IP-Core将EtherCAT通信功能集成到设备控制FPGA当中,并根据需要配置功能和规模。图为ET1200从站控制器结构图: ET1200最多支持3个EtherCAT物理通信端口:

其中一个可以作为MII接口,用于与物理层PHY芯片交换数据。因为EtherCAT并不定义该接口的物理层,MII接口也是和传输介质无关接口,因此这种接口方式下的数据链路层与物理层彻底隔开,从而以太网能够选用任意的传输介质,包括无线电和光纤。ET1200其余两个接口均为EBUS接口,EBUS是德国倍福公司使用的LVDS(Low Voltage Differental Signaling)标准定义的数据传输标准,通信速率高达100Mbit/s,能与ESC芯片直接相连,减小PCB板体积和降低成本。EBUS的传输距离最大为10m。ET1200提供的物理设备接口有数字I/O和SPI两种,选用ARM作为从站微处理器是一般通过SPI接口访问ET1200。ET1200采用3.3 V供电,最大工作电流约为70mA,芯片发热量很小。

ET1200的主要技术指标:

ET1200从站控制器使用外部EEPROM来存储从站设备信息,下表是EEPROM存储数据分布示意图,其中0~63为基本信息,每次ESC启动时都会从EEPROM中读取其中的配置信息。

4.5 从站程序设计

运动控制器软件设计包括ARM主控制程序及外围电路驱动程序,外围驱动程序包括ET 1200驱动程序、AD采样芯片驱动程序、RS232驱动程序、SPI串行总线、FSMC并行总线驱动程序以及MCX314加减速控制程序设计等。运动控制器程序在STM32F427这款MCU上使用C语言开发,开发环境为Windows 7下的Keil uVision_5集成开发环境。

ARM主控制程序是运动控制器的核心,需要完成各个函数初始化、参数配置、数据处理、逻辑流程控制及控制算法运算等,图为支持查询模式(自由运行模式)的流程图。

ARM芯片在上电后不久进入main()函数,在main()函数中最先完成一系列系统正常运行相关函数的初始化,如延时初始化函数、LED初始化函数、串口初始化函数、中断向量表配置初始化函数,然后完成SPI初始化函数、定时器初始化函数、EtherCAT初始化函数以及FSMC总线初始化函数等。

接着完成通信初始化工作,查询主站的状态控制寄存器,读取事件请求寄存器0x220、相关配置寄存器,启动或关断相关通讯服务。

在完成以上工作后就进入主循环while(1),进行应用层任务处理和周期性数据处理,周期性数据处理和应用层任务处理有查询模式(自由运行模式)或同步模式(中断模式)这两种,本程序采用同步运行模式,所以在主循环中主要处理非周期性的任务。同步运行模式下周期性数据在中断服务程序中处理。

void main(void)

{

//--一执行一系列初始化函数--一

Delay_Init(168); //初始化延时函数

Led_Init(); //初始化LED端口

Uart_Init(9600); //初始化串口

AD7606_Init(); //初始化AD采样芯片

NVIC_Config(); //初始化STM32时钟及外设

SPI_Config(); //ET 1200用SPI总线初始化配置

Timer2_Init_ Config(); //Timer2初始化配置

ET 1200_GPIO_Config(); //ET 1200 GPIO初始化配置

ECAT_Init(); //初始化通信变量和ESC寄存器

FSMC_Init(); //FSMC并行总线初始化

//--一初始化完成,进入主循环--一

while(1)

{

ET1200_AlEvent=pEsc->AlEvent; //读应用层事件请求寄存器,

// ET1200_AlEvent为全局变量,在头文件中定义

if(!ET1200_IntEnabled) //处于自由运行模式(ET 1200_ IntEnabled -=0

//处于同步模式(ET1200 IntEnabled==1)

free_ run(); //处于自由运行模式时,进行周期性数据查询

el_event(); //应用层任务处理,包括状态机和非周期性数据等

}

}

从站设备可以运行于同步模式或自由运行模式,在自由运行模式中使用查询方式处理周期性过程数据,在同步模式使用中断服务程序处理性数据。

变量ET1200 IntEnabled来控制运行模式。ET1200 IntEnabled为1时,使用同步模式,ET1200 IntEnabled为0时,使用自由运行模式。

根据主站对SM的配置,在函数、参数初始化阶段来初始化变量ET1200_ IntEnabled,确定当前的运行模式。

本程序选择同步模式,以下将按照该模式讲解一个中断服务数据处理的工作流程,如图所示。

4.6 实验测试

实验测试平台由一台PC机、一套自主研发的冲床数控系统软件、一台自主研发的五轴高速运动控制器、一套单轴丝杠滑台、一套二维伺服平台、一套四轴同步测试架组成。

实验过程中需要注意,因为目前运动控制器专为数控冲床设计,仅保留1个M II接口连接主站,且设计最多连接轴数为五轴,故连接四轴同步测试架时不能接单轴丝杠滑台和二维伺服平台;测试过程中工业PC机和显示器使用笔记本代替。在平台上测试通过后将控制系统接入到LX230B型数控转塔冲床上进行测试和参数调试,最终成功开发出30T数控转塔冲床用高速运动控制系统。

基本通信功能测试

EtherCAT主从站基本通信功能测试时首先按图所示,使用网线将PC机与从站运动控制器连接起来后,在数控软件通信设置的外部设备通信设置中找到运动控制器连接状态,点击重新连接。使用Wireshark抓包工具抓取连接过程中主站广播的数据包,最终连接成功时运动控制器连接状态指示灯变为ON,从站状态变为操作状态(OP),从站状态机启动正常,如图所示。

由图可知该实验中EtherCAT报文的格式。报文总长度60个字节,前14个字节是以太网数据帧头,包括6字节的目的地址(ff:ff:ff:ff:ff:ff ) } 6字节的源地址(78:a5:04:c0:be:6f)} 2字节的帧类型(Ox88a4);接着是2字节的EtherCAT头,包括11位数据长度(Ox02a)}1位保留位(Ox0)}4位类型位(0x1);然后是EtherCAT数据,数据为2个子报文,每个子报文包含10字节子报文头,16字节数据,2字节WKC(工作计数器)。Wireshark抓取的报文与2.1节中的EtherCAT帧格式一 致,从而主从站之间实现了基本通信。

控制系统基本功能测试

控制系统基本功能测试是验证系统软硬件功能正常的重要实验,该项测试在单轴丝杠滑台完成,连接好PC机、运动控制器和单轴丝杠滑台,如图所示。在数控软件的手动加工中对输出I/O如伺服使能、紧急停止,回零点如X轴回零、Y轴回零,单轴位移控制如X+, X-, Y+, Y-进行测试,并观察滑台的运动情况和伺服驱动器面板显示来判断各项功能是否正常。经测试,软件上的相关按钮都工作正常,五个轴的接口、I/O接口工作正常,产生的脉冲精度误差为0。故数控系统软硬件基本功能测试通过。

G代码解释、圆弧插补测试

通过二维伺服运动平台圆弧插补实验测试运动控制系统G代码解释、圆弧插补等功能。该项测试主要在二维伺服平台上完成,连接PC机、运动控制器和二维伺服平台,如图所示,通过数控系统控制二维伺服运动平台的X轴和Y轴电机做圆弧插补,利用上方横梁固定的笔杆记录二维平台上白纸相对运动下的轨迹。二维平台中的两组伺服机丝杠的参数完全一致,丝杠螺距为20mm,设定伺服驱动器驱动电机旋转一圈为2000个脉冲,可知丝杠走1 mm需要100个脉冲,由此设置数控软件中的X, Y轴脉冲当量都为1000。

使用AutoCAD设计一个直径D为80mm的圆周,如图所示,绘制完成后保存为.dxf格式,然后使用一体化饭金CAD/CAM编程软件cncKad将.dxf格式的图纸转化为冲床数控软件所需的.PNC文件,即G代码。然后将G代码文件导入到数控软件中,预加工仿真运行无误后启动伺服,进行实际加工,最终得到实际绘制效果图如图_5 -6所示。绘制出的圆周尺寸精确,控制系统通过圆弧插补测试。

多轴运动的同步性能测试

多轴同步测试实验用来测试运动控制系统多轴运动的同步性能。该项测试主要利用四轴同步测试架完成,如图所示,测试架上固定安装有A, B, C, D共4组电机和驱动器。将电机驱动器与运动控制连接,控制器通过EtherCAT总线与PC机连接,打开数控软件,在加工状态中选择手动加工,控制伺服电机A, B,C, D同时做顺时针运动旋转,通过长时间运行测试观察轴上4个光盘指向分析电机运动的同步性。经过长时间测试观察后,电机按钮停止伺服轴转动,可以看到4个电机指向同一方向,驱动器面板显示脉冲数也一致。

实际产品应用

在上一节的一系列实验后,控制系统的各项功能都顺利通过测试,接下来把开发好的控制系统制作成便于使用的操作台和控制柜接入到LX230B型30T的数控转塔冲床上,取代原有的控制系统,操作台和控制柜如图所示。该冲床选用安川 -7系列AC伺服电机、 -V系列AC伺服驱动器。首先调试好伺服电机与伺服驱动器之间构成电流环、速度环的PID参数,让闭环的性能达到较好水平,再接入控制系统,其中编码器分频脉冲输出C相信号在轴回原点时使用。

为观测控制系统在数控转塔冲床上的应用效果,需要采用非接触测量仪测量板材运动过程中的振动曲线。根据实验室现有的条件,采用由日本Keyence公司生产的LK-G400型激光位移传感器和LK-GD_500型控制器作为非接触式测量工具。 LK-G400的主要技术参数为:使用距离为400mm,测量范围为士100mm,取样率20us,钡量精度为gum o LK-GD_500型控制器主要参数为:最小显示单位为O.Olum,显示周期10次/秒。

在冲床大板材(1200mm X 2_SOOmm)上选取测试点W点,如图所示。采用S型曲线加减速规划,加速度g为6,控制板材在X轴上高速移动lOmm,运动控制器输出的PULS(脉冲)信号局部波形如图所示。

使用软件LK-Navigator读取传感器测量的数据,如图所示。由图分析可知调节时间为130ms(按士0._5%误差带)、稳态误差士0.0_Smm,各项指标良好,达到工业应用要求。

5. 工具

5.1 TwinCAT

EtherCAT主站方案实现一般都采用倍福公司的TwinCAT, TwinCAT实现了强大的EtherCAT主站功能,从站XML表配置、EEPROM配置文件操作、扫描EtherCAT从站等,下图为使用TwinCAT开发冲床数控系统的过程。因为TwinCAT是基于Windows风格,拥有较好的人机交互界面,功能强大,非常适合上位机控制窗口的开发,但TwinCAT运行于Windows环境下,实时性很差,而且TwinCAT和Windows系统需要付费才能商业化应用,价格较高。

在学习EtherCAT的时候,TwinCAT是必须要学习的。TwinCAT软件其功能强大,可以写plc程序,可以写图形化界面,可以观察波形等等。初次学习时我就参考TwinCAT 3运动控制教程和TwinCAT NC PTP实用教程,把TwinCAT 3中界面的一些功能都试了一遍。另外用功能块学着写了凸轮、齿轮的程序,并用Visualization图形化界面来控制。(在学习TwinCAT时,要充分利用好帮助文档)。

因为我的任务是做一致性测试,所以关注点大部分放在了对协议的了解上,涉及到一致性测试的文档有ETF7000.2、ETG7010。具体可以去ETG官网上查找相关资料。做一致性测试时需要用到ET9400,这款软件不是免费的。目前还没开始测这部分。

对于带有EtherCAT伺服驱动器的性能的测试,用TwinCAT带着简单测过csp、csv、cst这三种模式。如果想要系统的测试驱动器所支持的操作模式,必须对驱动器的相关知识有一定的了解。另外就是对对象字典中对象充分了解。TwinCAT中的Process Data和CoE-Online界面是很重要的。这点我也没有完全掌握。没有以太网基础,对协议没有了解,直接接触EtherCAT这条学习之路感觉很艰难!

5.2 LinuxCNC

PC机部分软件以LinuxCNC为基础,往下LinuxCNC通过HAL(硬件抽象层)与EtherCAT主站驱动之间进行通信连接,然后EtherCAT主站通过以太网线给从站运动控制器发控制命令;往上利用LinuxCNC提供的Python调用接口和人机界面通信,数控系统人机界面采用PyQt开发;由于LinuxCNC需要运行实时任务,需要将普通操作系统进行改造。因此,目前的主要工作是对Linux系统进行实时性改造、安装EtherCAT主站、编写HAL模块、编写人机界面。

5.3 开源的EtherCAT Master

EtherCAT的主站开发是基于EtherCAT机器人控制系统的开发中非常重要的环节。目前常见开源的主站代码为的RT-LAB开发的SOEM (Simple OpenSource EtherCAT Master)和EtherLab的the IgH EtherCAT® Master。使用起来SOEM的简单一些,而the IgH EtherCAT® Master更复杂一些,但对EtherCAT的实现更为完整。

具体比较如下表:

参考资料

EtherCAT协议介绍.pdfEtherCAT Technology Group _ 技术概览记录STM32开发一个完整的EtherCAT的过程

优惠劵

pwl999

关注

关注

209

点赞

1343

收藏

觉得还不错?

一键收藏

知道了

23

评论

EtherCAT (学习笔记)

文章目录1. 简介1.1 运动控制1.2 实时以太网1.3 EtherCAT2. EtherCAT原理介绍2.1 实时性2.2 端口管理2.3 EtherCAT网络拓扑2.4 EtherCAT网络协议栈2.5 EtherCAT数据帧格式2.6 EtherCAT设备寻址方式2.7 分布式时钟(Distribute Clock)2.8 应用层(Application Layer)2.9 设备配置(Device Profile)2.10 主站设计2.11 从站设计3. 应用层(Application Layer)

复制链接

扫一扫

专栏目录

ethercat总结

02-14

ethercat总结,主要是Ethercat基础介绍,运行原理与常用协议说明

EtherCAT中文介绍

10-22

实时以太网EtherCAT中文介绍资料,英文不好的可以参考一下。EtherCAT(以太网控制自动化技术)是一个开放架构,以以太网为基础的现场总线系统,其名称的CAT为控制自动化技术(Control Automation Technology)字首的缩写。EtherCAT是确定性的工业以太网,最早是由德国的Beckhoff公司研发。

23 条评论

您还未登录,请先

登录

后发表或查看评论

EtherCAT Slave Stack Code (SSC)

05-28

BECKHOFF(倍福)官方提供EtherCAT从站协议栈代码生成工具

版本:SSC V5.12(Tool 1.4.2)

EtherCAT EoE

最新发布

weilan0818的博客

01-16

452

EoE:将以太网帧插入到 EtherCAT 协议中。EtherCAT协议中的以太网帧通过非循环邮箱通信进行传输。

Ethercat概念学习

weixin_43914278的博客

04-10

1580

最近我们要基于Ethercat技术进行开发,首先需要了解其基本原理,github上看到了有相关实现,一起来看看吧。

EtherCAT.rar

08-12

搜集的EtherCAT官方相关资料,学习EtherCAT参考资料, 协议说明等等

ethercat学习笔记1

08-08

代码的笔记放到第二章。1.8 松下的从站 PDO映射。6040h控制字这个控制字是用来控制伺服电机上使能的。6041状态字这个状态字读取伺服电机的状态。控制模式

EtherCAT介绍

热门推荐

人人都懂物联网

03-11

1万+

EtherCAT(以太网控制自动化技术)是一个以以太网为基础的开放架构的现场总线系统,EtherCAT名称中的CAT为Control Automation Technology(控制自动化技术)首字母的缩写。最初由德国倍福自动化有限公司(Beckhoff Automation GmbH) 研发。EtherCAT为系统的实时性能和拓扑的灵活性树立了新的标准,同时,它还符合甚至降低了现场总线的使用成本。

EtherCAT简介

weixin_41883890的博客

06-30

2394

EtherCAT(用于控制自动化技术的以太网)是Beckhoff(倍福)在2003年开发的实时以太网网络。它基于CANOPEN协议和以太网,但是与Internet通信或网络通信不同之处在于,它专门针对工业自动化控制进行了优化。这些标准由EtherCAT技术小组(简称ETG)定义和维护。使用OSI网络模型,以太网和EtherCAT依赖于相同的物理和数据链路层。除此之外,由于针对不同任务进行了优化,因此这两个网络在设计上有所不同。例如,以太网被设计为通过许多不同的节点发送大量数据。它能够与数十亿个单独的地址之间

【EtherCAT】一、入门基础

06-09

5257

EtherCAT(Ethernet Control Automation Technology)是一种高性能实时以太网通信协议,用于在工业自动化领域中进行实时控制和通信。它是由德国Beckhoff自动化公司在2003年开发的,并被国际电工委员会(IEC)标准化为IEC 61158标准。EtherCAT的设计目标是实现极低的通信延迟和高带宽的数据传输,以满足高速控制和数据采集的需求。它通过一种特殊的主从架构实现,其中一个主站(Master)负责协调整个网络,而从站(Slave)则负责提供输入输出功能。

工控协议解读之EtherCAT协议硬核分析(转自知乎“智能制造之家“)

qq_43599327的博客

09-07

7033

EtherCAT协议

ethercat_slave_stack_code_tool_SSC_V5i12.rar

08-13

EtherCAT Slave Stack Code Tool 倍福官方从站开发工具5.12版本。

Ethercat xml规范

05-12

Ethercat xml规范

EtherCAT示例文档

03-30

EtherCAT示例文档

EtherCAT主站配置过程分析

01-15

固高主站+一个固高GTHD伺服驱动Ethercat通讯建立全过程分析

ethercat技术

11-04

ethercat技术

EtherCAT SSC V5.12

03-29

Ethercat从机协议栈代码工具5.12版,工具tool版本:1.4.2。

ETHERCAT总线控制文件

08-10

ETHERCAT总线控制文件,让你快速学习总线!

Ethercat学习资料

04-02

以下是关于EtherCAT学习资料的一些推荐:

1. EtherCAT官方网站:https://www.ethercat.org/

官方网站提供了EtherCAT协议的详细介绍、技术规范、应用案例等内容,是学习EtherCAT的重要参考资料。

2. EtherCAT技术手册

EtherCAT技术手册是一本详细介绍EtherCAT协议的书籍,包括EtherCAT协议的基本原理、应用案例、网络拓扑结构等内容,对于学习EtherCAT协议非常有帮助。

3. EtherCAT开发者论坛:https://forum.ethercat.org/

EtherCAT开发者论坛是一个交流和分享EtherCAT开发经验的平台,里面有很多有关EtherCAT协议的讨论和问题解答,对于学习和开发EtherCAT应用非常有帮助。

4. EtherCAT开发工具

EtherCAT开发工具包括EtherCAT协议分析器、EtherCAT节点开发工具等,可以帮助开发者更好地理解和开发EtherCAT应用。

5. EtherCAT培训课程

EtherCAT培训课程可以帮助初学者快速入门EtherCAT协议,掌握EtherCAT网络的设计和应用,提高开发效率。

总之,学习EtherCAT需要系统的学习和实践,建议初学者从官方网站入手,逐步深入学习,同时结合实际应用场景进行实践。

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

非常没帮助

没帮助

一般

有帮助

非常有帮助

提交

pwl999

CSDN认证博客专家

CSDN认证企业博客

码龄16年

暂无认证

142

原创

1万+

周排名

3万+

总排名

68万+

访问

等级

6905

积分

1510

粉丝

898

获赞

150

评论

4869

收藏

私信

关注

热门文章

EtherCAT (学习笔记)

67258

Xenomai (学习笔记)

21769

Device Tree 详解

19630

Unwind 栈回溯详解

18367

Linux bpf 1.1、BPF内核实现

18328

分类专栏

Linux Kernel解析

51篇

Riscv

2篇

Trace

29篇

Arm Linux

11篇

Android

1篇

Linux 驱动三板斧

21篇

Linux Monitor

9篇

Security

12篇

Misc

6篇

VxWorks

6篇

Stability

2篇

Performance

1篇

Power

Virtualization

2篇

RealTime OS

3篇

Motion Control

3篇

AI

最新评论

RISCV 入门 (学习笔记)

中南甘帅问贴贴:

开芯院和日报的网址都寄掉了,不看好riscv的未来

Linux usb 4. Device 详解

努力学习LINUX的嵌入式开发工程师:

我怎么没早点看到你

Linux usb 7. Linux 配置 ADBD

-Promise810:

其实不用执行命令 我记得/etc/ 目录下有个启动脚本专门 执行命令的 你可以看看那个脚本怎么写的

Linux usb 7. Linux 配置 ADBD

一名不会算法的在职算法工程师:

老兄,你还记得执行什么命令吗?

Linux usb 7. Linux 配置 ADBD

-Promise810:

检查一下设备树配置 对应的 usb 接口是否支持从机模式 支持的话 这个usb控制器就能出现

您愿意向朋友推荐“博客详情页”吗?

强烈不推荐

不推荐

一般般

推荐

强烈推荐

提交

最新文章

Linux 驱动模块内存精简

Linux Phy 驱动解析

Linux mem 2.8 Kfence 详解

2023年1篇

2022年5篇

2021年29篇

2020年43篇

2018年26篇

2017年45篇

目录

目录

分类专栏

Linux Kernel解析

51篇

Riscv

2篇

Trace

29篇

Arm Linux

11篇

Android

1篇

Linux 驱动三板斧

21篇

Linux Monitor

9篇

Security

12篇

Misc

6篇

VxWorks

6篇

Stability

2篇

Performance

1篇

Power

Virtualization

2篇

RealTime OS

3篇

Motion Control

3篇

AI

目录

评论 23

被折叠的  条评论

为什么被折叠?

到【灌水乐园】发言

查看更多评论

添加红包

祝福语

请填写红包祝福语或标题

红包数量

红包个数最小为10个

红包总金额

红包金额最低5元

余额支付

当前余额3.43元

前往充值 >

需支付:10.00元

取消

确定

下一步

知道了

成就一亿技术人!

领取后你会自动成为博主和红包主的粉丝

规则

hope_wisdom 发出的红包

实付元

使用余额支付

点击重新获取

扫码支付

钱包余额

0

抵扣说明:

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

余额充值

经济型EtherCAT运动控制器(十):EtherCAT总线快速入门 - 知乎

经济型EtherCAT运动控制器(十):EtherCAT总线快速入门 - 知乎切换模式写文章登录/注册经济型EtherCAT运动控制器(十):EtherCAT总线快速入门正运动技术做最好用的运动控制 — www.zmotion.com.cn本节主要介绍XPLC006E多轴经济型EtherCAT总线运动控制器控制EtherCAT总线驱动器的方法,分别介绍硬件接线方法,控制器与EtherCAT总线驱动器如何通讯,EtherCAT总线驱动器相关参数的配置,EtherCAT总线初始化操作,以及初始化成功以后的运动控制。一、XPLC006E功能简介XPLC006E是正运动运动控制器推出的一款多轴经济型EtherCAT总线运动控制器,XPLC系列运动控制器可应用于各种需要脱机或联机运行的场合。XPLC006E自带6个电机轴,最多12轴运动控制(含虚拟轴数),支持12轴直线插补、电子凸轮、电子齿轮、同步跟随、虚拟轴设置等功能。XPLC006E支持多任务同时运行,同时可以在PC上直接仿真运行,编程方式多种可选,支持ZDevelop软件的Basic/PLC梯形图/HMI组态和常用上位机软件编程。XPLC006E只支持EtherCAT总线轴,不支持脉冲轴和编码器轴。采用EtherCAT总线与驱动器通讯,1ms的刷新周期。XPLC006E支持PLC、Basic、HMI组态三种编程方式。PC上位机API编程支持C#、C++、LabVIEW、VB、matlab、Qt、Linux、.Net、iMAC、Python、 ROS等接口。→此款产品有XPLC004E、XPLC006E、XPLC008E三个不同轴数的型号可选。二、XPLC864E功能简介XPLC864E在XPLC006E的功能基础上做了升级(即上节介绍的XPLC006E的功能都支持),部分资源空间优于XPLC006E,使用方法基本一致,不同之处在于XPLC864E,硬件支持32点输入、32点输出、2个ADC、2个DAC,支持脉冲轴和总线轴混合使用,总实轴轴数为8,除了带EtherCAT接口之外,输出口硬件上可配置为8个轴的脉冲方向信号输出,另带两路编码器输入,可由输入口配置XPLC864E支持PLC、Basic、HMI组态三种编程方式。PC上位机API编程支持C#、C++、LabVIEW、VB、matlab、Qt、Linux、.Net、iMAC、Python、 ROS等接口。三、通讯接线1.EtherCAT总线接线使用一根网线将XPLC006E控制器的“EtherCAT总线端口”与“伺服驱动器的EtherCAT总线端口”相连即可。注意:伺服驱动器的EtherCAT接口有两个,有些驱动器这两个口可以随意接,有些分为“EtherCAT IN”和“EtherCAT OUT”,IN口接上一级设备,OUT口接下一级设备,二者不能混用,要注意连接顺序。多轴控制时伺服驱动器的EtherCAT OUT口再连接下一级驱动设备的EtherCAT IN口,依此类推。slot槽位编号、node节点编号和驱动器编号规则如上图所示,EtherCAT总线接口的槽位号默认是0,节点编号按照与控制器的连接先后顺序从0开始依次编号,驱动器编号则是只给带电机设备编号,其他类型设备忽略,也是按连接顺序从0开始编号,这些编号在总线指令中将会用到。硬件接线完成还需运行总线初始化程序才能与驱动器通讯,初始化模板程序参见下文。注意:使用EtherCAT总线扩展模块时,也要执行总线初始化操作,再映射IO的编号后才可操作扩展IO。2.控制器与电脑连接控制器与电脑可以通过串口或网口连接,下面以网口连接例展开说明。先将控制器与电脑用一根网线连接好,接通控制器的电源,再打开ZDevelop编程软件,点击菜单栏“控制器”→“连接”,打开“连接到控制器”窗口。通过“连接到控制器”窗口,可以快速查看本机IP,对比控制器与电脑是否处于同一网段。IP地址列表下拉选择时,会自动查找当前局域网可用的控制器IP地址(控制器上电POWER灯和RUN灯亮的时候就能查找到该控制器的IP地址)。同一个网络有多个控制器的时候,IP的下拉列表若没有显示目标控制器的IP地址,可以采取IP扫描来查看当前所有可用的控制器IP地址,扫描完成之后确定关闭此窗口,重新在IP下拉列表选择。选择正确的IP地址,点击连接之后,连接成功或失败均有信息提示。控制器出厂的缺省IP地址为192.168.0.11,“连接到控制器”窗口能显示出本机IP地址,请注意设置有线网卡与无线网卡各自的IP。电脑需要设置IP地址与控制器IP处于同一网段才能连接,即四段的前三段要相同,最后一段不同才能通讯。若控制器与电脑不处于同一网段,则需要修改控制器或电脑其中之一的IP地址,使二者处于同一网段。若控制器IP地址遗忘,可通过网口连接控制器,再获取控制器IP。四、EtherCAT总线驱动器通讯说明1.通讯周期使用EtherCAT伺服驱动器时需要保证控制器与伺服周期一致才可正常通讯使用。EtherCAT伺服驱动器一般支持不同周期,通讯周期主要有250us,500us,1ms,2ms,4ms,连接时自动匹配控制器周期,不需要设置,当通讯周期无法自动匹配时,通讯失败,通过修改控制器周期解决(SERVO_PERIOD指令或升级固件修改)。控制器一般默认为1ms,使用SERVO_PERIOD指令读取控制器周期。伺服周期越小,位置控制越精细,响应速度也更快。2.驱动器PDO设置驱动器的PDO是必要的配置,代表着当前驱动器包含的功能。PDO全名为(Process Data Object),指在EtherCAT总线网络中周期的进行主站与从站的数据交互的功能,可以看作一个数组空间,每个数组元素存放了不同的功能码,PDO在一个周期中执行这些功能码对应的操作,这些功能码就叫做数据字典,数据字典用4位16进制数来表示。RxPDO:主站传送数据给从站。TxPDO:从站传送数据给主站。EtherCAT总线上控制器为主站,伺服驱动器为从站。如6040h控制字(用于控制伺服轴的使能、启动、停止、报警、复位等运行状态),每个数据字典Index可包含32个子字典Sub-Index。数据字典的功能和初始值查看驱动器手册的描述。数据字典的编号及功能是协议本身就确定好的,用户只需按照数据字典的描述设置数据字典的bit位,所有的标准EtherCAT设备都使用一套数据字典。松下A6B伺服驱动器的EtherCAT相关说明内容可查看松下文档《技术资料-EtherCAT通讯规格篇》。EtherCAT初始化过程中必须进行驱动器PDO配置,“DRIVE_PROFILE”指令配置驱动器的PDO列表,目前提供约20几种配置选择,每种配置包含哪些数据字典查看该指令说明确认,如下图,具体内容可以在《ZBasic编程手册》中查看。DRIVE_PROFILE=-1表示驱动器的内置缺省PDO列表,驱动器内置PDO列表包含哪些数据字典需要查看驱动器手册。DRIVE_PROFILE已有的配置不能满足需求就自定义PDO,采用SDO相关指令操作数据字典配置驱动器需要的PDO。驱动器的相关参数修改,同样使用SDO指令读写对应的数据字典进行配置或通过驱动器软件修改。SDO指令包含数据字典读取“SDO_READ”、“SDO_READ_AXIS”和数据字典写入“SDO_WRITE”、“SDO_WRITE_AXIS”。(1)数据字典读取语法SDO_READ (槽位号, 设备编号, 数据字典编号, 数据字典子编号, 数据类型, 读取数据存储TABLE位置)SDO_READ_AXIS (轴号, 数据字典编号, 数据字典子编号, 数据类型, 读取数据存储TABLE位置)(2)数据字典写入语法SDO_WRITE (槽位号, 设备编号, 数据字典编号, 数据字典子编号, 数据类型, 写入数据值)SDO_WRITE_AXIS (轴号, 数据字典编号, 数据字典子编号, 数据类型, 写入数据值)自定义PDO的配置方法请咨询正运动的销售工程师或者技术工程师。3.驱动器参数设置可使用驱动器软件修改,或控制器端操作SDO指令修改。修改驱动器参数先连接驱动器,可选USB线或WLAN连接驱动器,使用USB线连接电脑与驱动器端的X1端口,给驱动器上电。打开松下驱动器软件PANATERM,弹出“选择与驱动器通信”窗口,选择与驱动器通过USB连接后,自动获取到驱动器信息显示在窗口内,点击OK连接成功,就能对驱动器进行设置。点击菜单栏“显示”→“对象编辑器”,打开如下窗口,找到需要设置的数据字典,在“Setting Value”一栏直接修改数据字典的内容。修改完成将参数传送给驱动器,并写入驱动器的EEPROM,驱动器再次上电后参数生效。例:设置UNITS脉冲当量,即设置电机转一圈需要发送多少个脉冲。SPEED速度、ACCEL加速度、DECEL减速度和运动指令等都是以UNITS为基本单位。如上图,通过数字字典6091h设置电子齿轮比,6091h-01h设置电子齿轮比分子,6091h-02h设置电子齿轮比分母,此时,电子齿轮比=1/1,6092h-01h设为10000表示给电机发10000个脉冲能使电机旋转一圈,对应的脉冲当量UNITS=10000,MOVE(2)表示给电机发送20000个脉冲,此时电机转两圈。或者使用SDO指令读写数据字典修改参数。修改完成使用驱动器软件读取6092h-01h的值为10000。示例:SDO_WRITE(Bus_Slot,iNode,$6091,1,7,1) '电子齿轮比分子

SDO_WRITE(Bus_Slot,iNode,$6091,2,7,1) '电子齿轮比分母

SDO_WRITE(Bus_Slot,iNode,$6092,1,7,10000) '电机一圈脉冲数4.驱动器IO信号若要使用驱动器的IO口,才会涉及到驱动器的IO映射操作,否则忽略。当驱动器产生IO报警时,可根据驱动器手册的提示,修改IO的设定值。驱动器自身有输入信号,作用为保护信号,默认使能状态,若不接入外部信号,驱动器就会保护报错,调试阶段可以关闭这些信号方便调试,将输入值设置为0即可,需要使用驱动器IO时要对驱动器的IO编号映射后才能使用,后续根据实际需求接入实际信号。点击驱动器软件PANATERM主界面的“参数”按钮打开下方窗口,选中要修改的IO信号后,在“设定值”一栏修改。驱动器IO映射需要PDO包含数据字典60FDh,然后使用DRIVE_IO指令设置驱动器IO地址,映射的编号范围不要与总线上的其他设备的IO编号重复。DRIVE_IO (轴号)=输入输出IO起始编号。示例:DRIVE_PROFILE(iAxis) = 5 '设定对应的带IO映射的PDO模式

DRIVE_IO(iAxis) = i_IoNum '设定驱动器输入/输出IO起始编号5.参数写入驱动器可使用驱动器软件修改,或控制器端操作SDO指令修改。驱动器的数据字典参数或其他的参数设置完成后,先点击“传送”将修改的全部参数传入驱动器,再点击EEP,将参数写入驱动器的EEPROM,给驱动器重新上电后修改的参数生效,图片上值修改了输入参数,在上图参数一览中可参看多中类别的参数并修改。6.驱动器轴号映射EtherCAT总线驱动电机设备连上控制器之后,驱动器轴号需要使用指令映射绑定。EtherCAT总线上连接的设备的设备号按照连接顺序从0开始自动编号,驱动器编号也是按连接顺序给驱动器设备自动从0开始编号的,只算总线上的驱动器设备,其他设备是没有驱动器编号的。EtherCAT总线上连接的驱动器需要使用指令映射驱动器的轴号,使用AXIS_ADDRESS 指令映射,映射完成之后才能使用BASE指令选择驱动器轴号,发送脉冲,控制驱动器所连的电机运行。轴映射写在总线初始化程序中,总线扫描之后,开启总线之前。语法:AXIS_ADDRESS(轴号)=(槽位号<<16)+驱动器编号+1EtherCAT总线的槽位号是0。轴号为驱动器映射的目标轴号,映射时每个驱动器的轴号不重复,指向空闲轴号即可。示例:AXIS_ADDRESS (6)=(0<<16)+0+1 '第一个ECAT驱动器,驱动器编号0,绑定为轴6

AXIS_ADDRESS (7)=(0<<16)+1+1 '第二个ECAT驱动器,驱动器编号1,绑定为轴7

AXIS_ADDRESS (8)=(0<<16)+2+1 '第三个ECAT驱动器,驱动器编号2,绑定为轴8

ATYPE(6)=65 '设置为ECAT轴类型,65-位置 66-速度 67-转矩

ATYPE(7)=65

ATYPE(8)=657.驱动器控制模式EtherCAT驱动器一般有三种控制模式,分别为CSP周期位置模式,CSV周期速度模式,CST周期力矩模式。提供ATYPE指令设置控制模式。CSP,CSV,CST模式的设置需要预先设置PDO,PDO同时包含下方数据字典时,即可直接修改ATYPE数值进行模式切换。驱动器默认PDO列表内置有哪些数据字典需要查看驱动器手册确定。(1)当PDO包含607Ah时,ATYPE可设置为65,周期位置模式,此时使用运动指令控制电机运动。(2)当PDO包含60FFh时,ATYPE可设置为66,周期速度模式,此时使用DAC指令控制电机以设置值的速度运行,速度单位有两个,脉冲数/S和R/MIN,有驱动器确定,使用时先给较小的数值,观察电机速度情况,再加大。(3)当PDO包含6071h时,ATYPE可设置为67,周期力矩模式,此时使用DAC指令控制电机以设置值的力矩运行,DAC值范围0-1000,对应0-100%的6071设置值,比如DAC=10,此时电机力矩=1%的6071h值。注意:速度模式和力矩模式切换时,先将DAC=0后,再修改ATYPE,防止出现事故。A.位置模式:ATYPE=65将DRIVE_PROFILE配置为带位置的模式1,ATYPE=66,执行总线初始化程序后,设置轴的UNITS、SPEED等运行参数,使用运动指令给电机发脉冲控制轴的运行,注意试运行时SPEED的值不要设置过大。位置模式也是实际过程中用的较多的一种模式,运行效果参见后续章节。B.速度模式:ATYPE=66将DRIVE_PROFILE配置为带速度的模式22,ATYPE=66,执行总线初始化程序后,在线命令栏发送DAC指令即可控制电机运行,如下图,DAC=5000表示电机以每秒5000个脉冲的速度持续运行,DAC命令发送后电机一直运行,要提高运行速度将DAC的值加大,DAC的值太小电机会克服不了摩擦力无法转动。注意:出于安全因素考虑,DAC不要设置过大,先设置一个较小值,观察电机运行情况后慢慢往上增加。此模式下停止电机在线命令发送DAC=0即可,或按下软件的紧急停止按钮。C.力矩模式:ATYPE=67将DRIVE_PROFILE配置为带力矩的模式30,ATYPE=67,执行总线初始化程序后,在线命令栏发送DAC指令即可控制电机运行。如下图,DAC=30,当前驱动器为0.03的力矩,DAC等于1000时表示100%力矩。要提高运行速度将DAC的值加大,DAC的值太小电机会克服不了摩擦力无法转动。注意:出于安全因素考虑,DAC不要设置过大,先设置一个较小值,观察电机运行情况后慢慢往上增加。此模式下停止电机在线命令发送DAC=0即可,或按下软件的紧急停止按钮。8.驱动器报警观察驱动器上LED面板上是否有报错信息,报错会显示错误码,根据驱动器手册排查错误,修正后将报警清零。打开驱动器软件的警报窗口,也能看当前驱动器是否有警报,或查询历史警报。警报窗口历史警报信息初始化过程中按轴号清除驱动器的错误,重复调用DRIVE_CLEAR指令清除多个驱动器错误。语法:DRIVE_CLEAR(模式值)模式值0-清除当前告警,1-清除历史告警,2-清除外部输入告警。示例:BASE(i)

DRIVE_CLEAR(0) '清除驱动器错误

DELAY 50

DATUM(0) '清除控制器轴状态错误"

DELAY 1009.驱动器回零EtherCAT总线可使用控制器提供的回零方式DATUM(mode),mode模式值选择查看ZBasic编程手册的DATUM指令。EtherCAT总线也可以使用驱动器本身的回零模式。驱动器本身回零使用DATUM(21,mode2)指令,mode2模式值要查驱动器手册数据字典6098h回零模式,如下图所示,mode2填入对应Value值,mode2缺省值为0,也是驱动器回零模式,注意此时的原点限位等信号要接在驱动器上,所以要使用驱动器回零时需要对驱动器的IO进行映射。示例:初始化完成后再运行驱动器回零程序。BASE(iAxis) '按驱动器轴号逐个回零

AXIS_STOPREASON = 0

SPEED = 100 '回零速度

CREEP = 10 '反找速度

ACCEL = 1000

DATUM(21,2) '驱动器回零模式value=2

WAIT IDLE

IF AXIS_STOPREASON = 0 THEN

?"回零成功"

ELSE

?"回零失败" ,"停止原因:",AXIS_STOPREASON,"状态字0X",HEX(DRIVE_STATUS)

ENDIF10.EtherCAT总线驱动器参数设置说明https://www.zhihu.com/video/1541019581703720960五、EtherCAT总线初始化EtherCAT总线初始化操作是控制器与EtherCAT总线驱动器通讯的重要步骤,也是第一步,初始化成功表示着二者成功建立了通讯连接,之后才可顺利进行运动控制和读写驱动的参数。1.初始化基本流程按照前面的步骤接好线,给EtherCAT伺服驱动器和控制器上电,使用ZDevelop软件连接控制器,EtherCAT总线使用一段程序来初始化,将初始化程序下载到控制器运行之后,才能设置轴参数和执行运动指令控制伺服电机的运动。初始化程序中包含WDOG=1开总使能,和AXIS_ENABLE(轴号) = 1开单轴使能,使能前用手可以转动点击,使能完成后便旋转不动,需要给电机发送脉冲才能使其转动。2.初始化模板程序(1)主要初始化程序'用户使用的时候只需要设置程序头的四个常量的值即可。程序其他地方不用改动。分别设置起始的脉冲轴号,和使用的脉冲轴个数,总线轴的起始映射轴号,和总线轴的个数。

'****************ECAT总线初始化

global CONST PUL_AxisStart = 0 '本地脉冲轴起始轴号

global CONST PUL_AxisNum = 0 '本地脉冲轴轴数量

global CONST Bus_AxisStart = 0 '总线轴起始轴号

global CONST Bus_NodeNum = 1 '总线配置节点数量,用于判断实际检测到的从站数量是否一致

global CONST BUS_TYPE = 0 '总线类型。可用于上位机区分当前总线类型

global CONST Bus_Slot = 0 '槽位号0(单总线控制器缺省0)

global MAX_AXISNUM '最大轴数

MAX_AXISNUM = SYS_ZFEATURE(0)

global Bus_InitStatus '总线初始化完成状态

Bus_InitStatus = -1

global Bus_TotalAxisnum '检查扫描的总轴数

delay(3000) '延时3S等待驱动器上电,不同驱动器自身上电时间不同,具体根据驱动器调整延时

?"总线通讯周期:",SERVO_PERIOD,"us"

Ecat_Init() '初始化ECAT总线

while (Bus_InitStatus = 0)

Ecat_Init()

wend

END

'************************ECAT总线初始****************************************

'初始流程: slot_scan(扫描总线) -> 从站节点映射轴/io -> SLOT_START(启动总线) -> 初始化成功

'****************************************************************************

global sub Ecat_Init()

local Node_Num,Temp_Axis,Drive_Vender,Drive_Device,Drive_Alias

RAPIDSTOP(2)

WAIT IDLE(0)

for i=0 to MAX_AXISNUM - 1 '初始化还原轴类型

AXIS_ENABLE(i) = 0

atype(i)=0

AXIS_ADDRESS(i) =0

DELAY(10) '防止所有驱动器全部同时切换使能导致瞬间电流过大

next

Bus_InitStatus = -1

SLOT_STOP(Bus_Slot)

delay(200) '延时时间可以按需调整,确保驱动器已上电可以等待EtherCAT到位

slot_scan(Bus_Slot) '扫描总线

if return then

?"总线扫描成功","连接从站设备数:"NODE_COUNT(Bus_Slot)

if NODE_COUNT(Bus_Slot) <> Bus_NodeNum then '判断总线检测数量是否为实际接线数量

?""

?"扫描节点数量与程序配置数量不一致!" ,"配置数量:"Bus_NodeNum,"检测数量:"NODE_COUNT(Bus_Slot)

Bus_InitStatus = 0 '初始化失败。报警提示

'return

endif

'"开始映射轴号"

for Node_Num=0 to NODE_COUNT(Bus_Slot)-1 '遍历扫描到的所有从站节点

Drive_Vender = NODE_INFO(Bus_Slot,Node_Num,0) '读取驱动器厂商

Drive_Device = NODE_INFO(Bus_Slot,Node_Num,1) '读取设备编号

Drive_Alias = NODE_INFO(Bus_Slot,Node_Num,3) '读取设备拨码ID

if NODE_AXIS_COUNT(Bus_Slot,Node_Num) <> 0 then '判断当前节点是否有电机

for j=0 to NODE_AXIS_COUNT(Bus_Slot,Node_Num)-1 '根据节点带的电机数量循环配置轴参数(针对一拖多驱动器)

Temp_Axis = Bus_AxisStart + Bus_TotalAxisnum '轴号按NODE顺序分配

'Temp_Axis = Drive_Alias '轴号按驱动器设定的拨码分配(一拖多需要特殊处理)

base(Temp_Axis)

AXIS_ADDRESS(Temp_Axis)= (Bus_Slot<<16)+ Bus_TotalAxisnum + 1 '映射轴号

ATYPE=65 '设置控制模式 65-位置 66-速度 67-转矩

DRIVE_PROFILE=-1 '配置为驱动器内置PDO列表,可改为1,-1,等参数 '配置为驱动器内置PDO列表

' Sub_SetDriverIo(Drive_Vender,Temp_Axis,128 + 32*Temp_Axis) '映射驱动器IO IO映射到控制器IO32-以后每个驱动器间隔32点

' Sub_SetNodePara(Node_Num,Drive_Vender,Drive_Device,j) '设置特殊总线参数

disable_group(Temp_Axis) '每轴单独分组

Bus_TotalAxisnum=Bus_TotalAxisnum+1 '总轴数+1

next

else 'IO扩展模块

Sub_SetNodeIo(Node_Num,Drive_Vender,Drive_Device,1024 + 32*Node_Num) '映射扩展模块IO

endif

next

?"轴号映射完成","连接总轴数:"Bus_TotalAxisnum

delay(200)

SLOT_START(Bus_Slot) '启动总线

if return then

'?"开始清除驱动器错误"

for i= Bus_AxisStart to Bus_AxisStart + Bus_TotalAxisnum - 1

BASE(i)

DRIVE_CLEAR(0)

DELAY 50

'?"驱动器错误清除完成"

datum(0) '清除控制器轴状态错误"

wa 100

wdog=1 '使能总开关

'"轴使能"

AXIS_ENABLE=1

next

Bus_InitStatus = 1

?"轴使能完成"

'本地脉冲轴配置

for i = 0 to PUL_AxisNum - 1

base(PUL_AxisStart + i)

AXIS_ADDRESS = (-1<<16) + i

ATYPE = 4

next

?"总线开启成功"

else

?"总线开启失败"

Bus_InitStatus = 0

endif

else

?"总线扫描失败"

Bus_InitStatus = 0

endif

end sub(2)驱动器IO映射(需要使用驱动器IO时才映射,否则不用映射)‍' ************************总线驱动IO映射**************************************

'通过DRIVE_IO指令映射驱动器对象字典中60FD,60FE输入输出状态,要设置正确的DRIVE_PROFILEE或者POD后才可以正常映射

'DRIVE_PROFILE模式包含60FD/60FE

'iAxis - 轴号 iVender - 驱动器类型 i_IoNum - 输入输出起始编号

' **************************************************************************

global sub Sub_SetDriverIo(iVender,Iaxis,i_IoNum)

if iVender = $66f then '松下驱动器

DRIVE_PROFILE(iAxis) = 5 '设定对应的带IO映射的PDO模式

DRIVE_IO(iAxis) = i_IoNum

REV_IN(iAxis) = i_IoNum '负限位应60FD BIT0

FWD_IN(iAxis) = i_IoNum + 1 '正限位先对应60FD BIT1

DATUM_IN(iAxis) = i_IoNum + 2 '原点先对应60FD BIT2

INVERT_IN(i_IoNum,ON) '特殊信号有效电平反转

INVERT_IN(i_IoNum + 1,ON)

INVERT_IN(i_IoNum + 2,ON)

endif

end sub(3)扩展模块IO映射(连接了扩展模块才设置)' ***********************总线IO扩展模块映射**************************************

'通过NODE_IO(Bus_Slot,Node_Num)分配模块IO起始地址

' *******************************************************************************

global sub Sub_SetNodeIo(iNode,iVender,iDevice,i_IoNum)

if iVender = $41B and iDevice = $130 then '正运动EIO1616MT

NODE_IO(Bus_Slot,iNode) = i_IoNum

endif

end sub(4)特殊参数配置' ********************************从站节点特殊参数配置********************************

'通过SDO方式修改对应对象字典的值修改从站参数(具体对象字典查看驱动器手册)

' ******************************************************************************************************

global sub Sub_SetNodePara(iNode,iVender,iDevice,Iaxis)

if iVender = $41B and iDevice = $1ab0 then '正运动24088脉冲扩展轴

SDO_WRITE(Bus_Slot,iNode,$6011+Iaxis*$800,0,5,4) '设置扩展脉冲轴ATYPE类型

SDO_WRITE(Bus_Slot,iNode,$6012+Iaxis*$800,0,6,0) '设置扩展脉冲轴INVERT_STEP脉冲输出模式

NODE_IO(Bus_Slot,iNode) = 32 + 32*iNode '设置240808上IO的起始映射地址

elseif iVender = $66f then '松下驱动器

SDO_WRITE(Bus_Slot,iNode,$3741,0,3,0) '以拨码为ID

SDO_WRITE(Bus_Slot,iNode,$3401,0,4,$10101) '正限位电平 $818181

SDO_WRITE(Bus_Slot,iNode,$3402,0,4,$20202) '负限位电平 $828282

SDO_WRITE(Bus_Slot,iNode,$6091,1,7,1) '电子齿轮比分子

SDO_WRITE(Bus_Slot,iNode,$6091,2,7,1) '电子齿轮比分母

SDO_WRITE(Bus_Slot,iNode,$6092,1,7,10000) '电机一圈脉冲数

SDO_WRITE(Bus_Slot,iNode,$607E,0,5,0) '电机正转0 反转224

SDO_WRITE(Bus_Slot,iNode,$6085,0,7,4290000000) '异常减速度

'SDO_WRITE(Bus_Slot,iNode,$1010,1,7,$65766173) '写EPPROM(写EPPROM后驱动器需要重新上电)

'?"写EPPR0M OK 请断电重启"

endif

end subEtherCAT初始化成功后会打印信息提示,如下。若初始化失败也会打印信息提示。3.总线节点状态查看EtherCAT总线上连接的设备信息有如下三种查看方法。查看总线状态的前提是初始化操作成功,否则无法查看。(1)在菜单栏“控制器”→“控制器状态”窗口查看“槽位0节点”。(2)在菜单栏“调试”→“总线状态诊断”打开如下窗口查看控制器总线槽位接口的设备信息。(3)还可以通过在线命令发送“?*EtherCAT”打印EtherCAT总线上的全部设备信息。4. EtherCAT总线驱动器控制效果初始化成功后,将各个总线轴依此回零,配置好轴参数之后,就可以使用指令让总线轴按需求动作。在程序中写入运动指令、在线命令发送运动指令或使用“手动运动”窗口控制电机运行。示波器采集轴参数波形:使用“手动运动”功能快速手动操作电机运动,运动前先设置左侧轴参数。5.EtherCAT总线初始化演示https://www.zhihu.com/video/1541021208305180672本次,正运动技术经济型EtherCAT运动控制器(十):EtherCAT总线快速入门,就分享到这里。本文由正运动技术原创,欢迎大家转载,共同学习,一起提高中国智能制造水平。文章版权归正运动技术所有,如有转载请注明文章来源。编辑于 2022-08-11 11:23CAN总线​赞同 6​​添加评论​分享​喜欢​收藏​申请

EtherCAT (学习笔记)-CSDN博客

>

EtherCAT (学习笔记)-CSDN博客

EtherCAT (学习笔记)

最新推荐文章于 2024-01-16 16:03:36 发布

pwl999

最新推荐文章于 2024-01-16 16:03:36 发布

阅读量6.7w

收藏

1.3k

点赞数

209

分类专栏:

Motion Control

文章标签:

ethercat

版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。

本文链接:https://blog.csdn.net/pwl999/article/details/109397700

版权

Motion Control

专栏收录该内容

3 篇文章

75 订阅

订阅专栏

文章目录

1. 简介1.1 运动控制1.2 实时以太网1.3 EtherCAT

2. EtherCAT原理介绍2.1 实时性2.2 端口管理2.3 EtherCAT网络拓扑2.4 EtherCAT网络协议栈2.5 EtherCAT数据帧格式2.6 EtherCAT设备寻址方式2.7 分布式时钟(Distribute Clock)2.8 应用层(Application Layer)2.9 设备配置(Device Profile)2.10 主站设计2.11 从站设计

3. 应用层(Application Layer)3.13.2 EtherCAT Slave Implementation (从站实现)

4. 应用实例4.1 主站操作系统(RTAI)4.2 主站EtherCAT程序(IGH)4.3 主站应用开发(LinuxCNC)4.4 ET12004.5 从站程序设计4.6 实验测试

5. 工具5.1 TwinCAT5.2 LinuxCNC5.3 开源的EtherCAT Master

参考资料

1. 简介

1.1 运动控制

运动控制系统处理机械系统中一个或多个坐标上的运动以及运动之间的协调,实现精确的位置控制、速度和加速度控制、转矩和力的控制等。

单轴的运动控制系统可分为开环、半闭环和闭环伺服系统。

多轴运动控制系统可以分成点位控制、连续轨迹控制和同步控制。

典型的运动控制系统,从结构上看,包括上位机控制窗口、运动控制器、驱动器、电机以及测量反馈系统等几个部分组成:

1.2 实时以太网

实时以太网(RTE, Real Time Ethernet)是常规以太网技术的延伸,以便满足工业控制领域的实时性数据通信要求。目前,国际上有多种实时工业以太网协议,根据不同的实时性和成本的要求使用不同的原理,大致可以分为以下三类:

(1)基于TCP/IP实现的工业以太网仍使用TCP/IP协议栈,通过上层合理的控制来解决通信过程中的不确定因素。这种方式具有较高的传输速率,适应于大量数据通信,更适合作为网关和交换设备的应用,不能实现很好的实时性。常用的通信控制方法有:合理调度,减少冲突的概率;定义帧数据的优先级,为实时数据分配最高优先级;使用交换式以太网等。使用这种方式的典型协议有Modbus/TCP和Ethernet/IP等。(2)基于以太网实现的工业以太网仍然使用标准的、未修改的以太网通信硬件,但是不适用TCP/IP来传输数据。它使用特定的报文进行传输。TCP/IP协议栈能使用时间控制层分发一定的时间片来利用网络资源。该类协议主要有Ethernet Powerlink, EPA C Ethernet for Plant Automation ), PROFINET IRT等。通过这种方式可以实现较好的实时性。(3)通过修改以太网协议实现的工业以太网,实现应答时间小于lms的硬实时,从站使用特定的硬件实现。由实时MAC控制实时通道内的通信,从根本上避免报文间的冲突。非实时数据依然能在通道中按原协议通信。典型协议有德国倍福的EtherCAT、西门子的PROFINET IRT等。

1.3 EtherCAT

德国BECKHOFF自动化公司于2003年开发出的EtherCAT实时以太网技术突破了其他以太网解决方案的系统限制:通过该项技术,无需接受以太网数据包,将之解码,然后再将过程数据复制到各个设备。

2. EtherCAT原理介绍

EtherCAT从站设备在报文经过其节点时读取相应的数据报文,同样输入数据也是在报文经过时插入到报文中。整个过程报文只有几纳秒的时间延迟,实时性获得极大提高

EtherCAT作为一种工业以太网总线,充分利用了以太网的全双工特性。使用主从通信模式,主站发送报文给从站,从站从中读取数据或将数据插入至从站。

主站可使用标准网卡实现,从站选用特定的EtherCAT从站控制器ESC(EtherCAT Slave Controller)或者FPGA实现,

主要完成通信和控制应用两部分功能,EtherCAT物理层选用标准以太网物理层器件。

从站能将收到的报文直接处理,并读取或插入有关的数据,再将报文发送给下一个EtherCAT从站。最末尾的EtherCAT从站返回处理完全的报文,然后由第一个从站发送给主站。整个通信过程充运行于全双工模式下,TX线发出的报文又通过RX线返回给主站:

2.1 实时性

数据包刷新时间的计算

数据包中所有从站的 Process Datarocess Datarocess Data rocess Data rocess Data rocess Datarocess Data数据 决定了数据包的长度。

一个Ethernet thernet数据包最小84 字节,不足 84 字节会补齐84 字节。由于EtherCAT Frame中有一些公共开销, 84 字节的数据包最多含18字节的过程数据。考虑到数据包必须经过每个从站两次才能回到主站,所数据包以固定的波特率100 Mbps在网络上传输两次的时间 这就是它的总线刷新时间 。

1.基于这个原则,以包含 1000路开关量信号的数据包为例,计算过程如下:

过程数据长度:1000/8=125Bytes

数据包长度:84-18+125=191Bytes=191*8 Bit= 1528 Bit

总线刷新时间:(1528Bit/100,000,000 Bps)*2=15.28us * 2 = 30.56us

注意,通常的数字量模块, 都是单纯的输出或者输入模块,而不是混合模块。所以 1000 个数字 量信号, Frame 中就会分配 125 字节。

2.再以包含100个EtherCAT伺服驱动器过程数据的EtherCAT数据包为例,假如每个伺服的过程数据只包括控制字(2字节)、状态字(2字节)、目标位置(4字节)、实际位置(4字节),其总线刷新时间的计算过程如下:

过程数据长度:100*(2+4)=600 Byte。

数据包长度:84-18+600=1266 Byte =671*8 Bit =5328 Bit

总线刷新时间:(5328 Bit/100,000,000 Bps) *2=100.656µs

注意,Frame中只为一个伺服分配了6个字节,这是因为根据Beckhoff公司的控制软件TwinCAT中关于EtherCAT的默认设置是从站的Input和Output使用同一数据段,所以数据包进入伺服驱动器时该数据段存放的是控制字和目标位置,而出来时则存放伺服的状态字和实际位置。

以上两个数据30.56µs和101.28 µs就是EtherCAT官方宣传资料中,刷新1000个数字量需要30µs,刷新100个伺服轴只需要100µs的数据由来。实际上,根据从站的类型、是否包含分布时钟、是否启用时钟同步、时钟同步的参数设置不同,在数据包中有可能还会增加8-12字节用于传输同步时钟值,以及相应的为每个从站增加一个Bit的标记等等,会增加几个微秒的刷新时间,暂且忽略不计。

以上计算只是数据包传输需要的理论时间,实际上,数据包经过每个从站会产生短暂的硬件延时。100M超五类网线接口的从站延时约1µs,而EBus的IO模块类从站延时约0.3µs,在毫秒级以下的控制任务中如果从站数量较多,这个时间也相当可观,计算刷新周期时应该考虑进去。

2.2 端口管理

一个从站控制器最多可以有4个端口,如果一个端口关闭了,控制器主动连接下一个端口。端口可以随着EtherCAT命令主动的打开或者关闭。逻辑端口设置决定了EtherCAT帧的处理和发送顺序。

2.3 EtherCAT网络拓扑

所有数据帧在网络中以一种“逻辑闭环”的方式传播,与网络的硬件拓朴无关,无论它是链式、菊花链、星形还是树形拓朴。

所有数据帧都由Master发出,以事前严格定义的顺序,依次经过网络上的所有从站,走过一个完整的闭环后回到Master 。 所有数据帧通过从站中的 EtherCAT Processing Unit (EtherCAT处理单元)只有 1 次。

线型拓扑:

任意数目的设备成线型连接 最多65535个设备

数据处理链型拓扑 带有分支线的数据处理链型拓扑 树型拓扑: 实时星型拓扑: 冗余线缆

选择冗余电缆可以满足快速增长的系统可靠性需求,以保证设备更换时不会导致网络瘫痪。您可以很经济地增加冗余特性,仅需在主站设备端增加使用一个标准的以太网端口(无需专用网卡或接口),并将单一的电缆从总线型拓扑结构转变为环型拓扑结构即可(见图7)。当设备或电缆发生故障时,也仅需一个周期即可完成切换。因此,即使是针对运动控制要求的应用,电缆出现故障时也不会有任何问题。

EtherCAT也支持热备份的主站冗余。由于在环路中断时EtherCAT从站控制器芯片将立刻自动返回数据帧,一个设备的失败不会导致整个网络的瘫痪。例如,拖链设备可以配置为分支拓扑以防线缆断开。

2.4 EtherCAT网络协议栈

CoE(Can over EtherCAT)

PDO(Process Data Object 过程数据对象)

SDO(Service Data Object 服务数据对象)

PDI(Process Data Interface 过程数据接口)(uC, SSI, I/O)

ESM(EtherCAT State Machine)

ESI(EtherCAT Slave Information) (XML device description)

ENI(EtherCAT Network Information)

CTT(Conformance Test Tool 一致性测试工具)

SM(SyncManagers 同步管理器)

MDP(modular device description 模块化设备描述 )

2.5 EtherCAT数据帧格式

EtherCAT数据直接嵌入在以太网数据帧中进行传输,只是采用了一种特殊的帧类型,该类型为Ox88A4, EtherCAT数据帧结构如图所示:

EtherCAT数据包由数据头和数据实体两部分组成,EtherCAT数据头包含2个字节,每个数据包里面可以只包含一个EtherCAT子报文,也可以包含多个子报文;一个EtherCAT子报文对应着一个从站,因此一个EtherCAT数据包可以操作 多个EtherCAT从站,相应的数据长度在44-1498字节之间,EtherCAT数据帧结构定义: 类型 字段:

EtherCAT子报文结构定义:

地址区 字段

EtherCAT 寻址:

EtherCAT 通信的实现是通过由主站发送至从站的 EtherCAT 数据帧来完成对从站设备内部存储区的读写操作, EtherCAT 报文对 ESC 内部存储区有多种寻址操作方式,从而可以实现多种通信服务。EtherCAT 段内寻址有设备寻址和逻辑寻址两种方式。

设备寻址是面对一个从站进行读写操作。

逻辑寻址是面向过程的数据操作, 实现同一报文读写多个从站设备的多播功能。

具备全部寻址方式的从站称为完整性从站,只具备部分寻址方式的从站则称为基本从站。

命令 字段

不同命令通过信息传输系统最优化对所有存取方法的读写

WKC 字段

Working Counter。如果成功寻址了EtherCAT设备,并且成功执行了读操作,写操作或读/写操作,则工作计数器将递增。 可以为每个数据报分配一个工作计数器值,该值是根据预期报文通过所有设备数来设置的。 通过将工作计数器的预期值与所有设备通过后的实际值进行比较,主站可以检查EtherCAT数据报是否已成功处理。

同步管理器

2.6 EtherCAT设备寻址方式

在EtherCAT的每个子报文中,有32位空间用于对EtherCAT设备进行寻址。寻址方式有四种,分别为:

位置寻址

位置寻址方式是根据从站的连接顺序,即物理位置实现的。在报文头的32bit地址中,前16bit的Position用于存放地址值,Offset用于存放ESC逻辑寄存器或者内存地址。报文每经过一个从站设备,其Position中的地址值加1。当一个从站接收到EtherCAT报文后,如果报文中的地址值为0,则该报文就是这个从站要要接收的报文。

在上图中,如果需要总线上第8个设备响应报文,则主站需要将报文的地址设为0xFFF9,当报文经过第1个从站时,地址为0xFFF9,不等于0,第1个从站不会响应报文,报文地址加1,变为0xFFFA。当报文经过第2个从站时,地址为0XFFFA,不等于0,第2个从站不会响应该报文,报文地址加1,变为0xFFFB。以此类推,当报文到达第8个从站时,此时地址值为0x0000,当前从站将接收报文。

位置寻址(Position Address / Auto Increment Address)只应在启动EtherCAT系统时用于扫描现场总线,以后只能偶尔使用以检测新连接的从站。 如果由热连接或链接问题导致循环暂时关闭,使用位置寻址可能会出现问题。 在这种情况下位置地址被移位,并且,如错误寄存器的值到设备的映射变得不可能,因此不能定位故障链路。

节点寻址

在启动阶段,主站通常采用位置寻址方式对总线上的从站进行寻址,之后采用节点寻址方式。

在报文中,报文头的32bit地址,前16bit的Address用于存放站点地址值,Offset用于存放ESC逻辑寄存器或者内存地址。

在每个从站中站点地址保存在寄存器(0x0010) 中。

顺序寻址时,主站可以对每个从站的站点地址进行设置,也可以直接读取每个从站的的站点地址。

节点寻址方式的优点是,每个从站的地址与其在总线中的位置无关。在添加/删除从站,甚至是改变总线拓扑结构的时候都能对从站进行正确的访问。

上图是节点寻址方式的示意图。8个从站的地址与其在总线中的位置并没有关系。出于直观的目的,4台伺服驱动器的地址被设置为连续的,4个I/O模块的地址被设置为连续的,在实际中并没有这样的要求。

EtherCAT从设备可以有两个配置的站点地址,一个由主站分配(Configured Station Address),另一个存储在SII EEPROM,并且可以由从站应用程序更改(Configured Station Alias address)。

配置站点地址由主站在启动期间分配,并且不能由EtherCAT从站更改。 配置站别名地址存储在SIIEEPROM中,可由EtherCAT从站更改。 配置的站别名必须由主站启用。 如果节点地址(NodeAddress)与配置的站地址或配置的站点别名匹配,将执行相应的命令操作。

逻辑寻址

EtherCAT的第三种寻址方式是逻辑寻址,首先需要了解的是FMMU。

FMMU(Fieldbus Memory Management Units)

FMMU称为总线内存管理单元,它存在与从站芯片ESC中,负责对从站物理地址与主站逻辑地址进行翻译并建立映射关系。主站在总线启动过程中对FMMU进行配置,内容包括:

• 逻辑地址的起始地址

• 数据长度(按跨字节数计算)

• 逻辑地址的起始位

• 逻辑地址的终止位

• 从站物理地址的起始地址

• 从站物理地址的起始位

• 操作类型(只读、只写、读写)

• 使能

在报文中,使用报文头的32bit地址的全部,用来表示大小为4GB的逻辑地址空间。 以上图为例,FMMU将逻辑地址中0x00012345第2位开始的,到0x00012346以第2位终止的区域,与从站物理地址中0x0010第0位开始的区域进行映射。

当从站收到来自主站的报文时,会检查报文中的地址是否与FMMU中的地址相符,如果有,将根据操作类型进行读写操作。

这种寻址方式的优点是,在主站想对每个从站进行访问的时候,只需要对逻辑空间中的地址进行操作,而无须关心该地址对应的从站物理地址,减轻了主站的负担。

所有器件读取和写入相同的逻辑4 GB地址空间(EtherCAT数据报中的32位地址字段)。 从器件使用映射单元(FMMU,现场总线存储器管理单元)将数据从逻辑过程数据映像映射到其本地地址空间。 在启动期间,主器件配置每个从器件的FMMU。 从站使用FMMU的配置信息知道逻辑过程数据映像的哪些部分必须映射到哪个本地地址空间。

逻辑寻址支持逐位映射。 逻辑寻址是一种强大的机制,可以减少过程数据通信的开销,因此通常用于访问过程数据。

当从站设备收到的EtherCAT报文带有逻辑寻址标志位时,从站设备将检查自身是否有相应的FMMU单位地址与之匹配。

总结:EtherCAT使用三种方式对设备进行寻址,在启动过程中,使用顺序寻址方式为从站分配节点地址,然后通过节点寻址方式配置从站寄存器,将逻辑地址与从站物理地址进行映射,之后就可以使用逻辑寻址方式进行过程数据交换了。

Broadcast寻址

每个EtherCAT从站都被寻址。

使用广播寻址。 如果从站的预期是相同的,用于所有从站的初始化和检查所有从站的状态。每个从器件具有一个16位Local地址空间:

地址范围0x0000:0x0FFF专用于EtherCAT寄存器,

地址范围0x1000:0xFFFF用作过程数据RAM

通过EtherCAT数据报的偏移字段寻址,过程数据。

2.7 分布式时钟(Distribute Clock)

通过分布式时钟精确的调整,系统可达到精确的同步。

外部时钟同步IEEE1588 EtherCAT设备同步 定义系统时间

定义一个参考时钟:

一个EtherCAT从站被当做参考时钟使用

参考时钟循环的发布它的时钟

参考时钟根据一个全局参考时钟 IEEE1588

2.8 应用层(Application Layer)

应用层AL(Application Layer) 为用户与网络之间提供接口,应用层在EtherCAT 通信协议层次结构中是与用户联系最紧密最直接的一层,它可以直接与用户进行交互,实现面对具体的应用程序和控制任务等功能, EtherCAT 应用层为各种服务协议与应用程序之间定义了接口, 使其能够满足应用层所要求的各种协议共同工作的需求。

EtherCAT 作为网络通信技术,支持CAN open 协议中的CiA402,以及 SERCOS 协议的应用层( 即 CoE 和SoE)等多种符合行规的设备和协议。

EtherCAT状态机 设备和网络的启动

邮箱接口和协议 设备的存取变量 异步传输

协议:

EOE: Ethernet over EtherCAT

COE: CANopen over EtherCAT

FOE: Filetransfer over EtherCAT

SOE: Servo Drive over EtherCAT

从站信息接口 设备特征和配置信息

EtherCAT状态机

状态机构建于数据链路层 定义EtherCAT从站设备一般信息状态 指定对EtherCAT从站设备启用网络时初始化和错误处理 状态和主从站之间通信关系相一致 从站设备的请求状态和当前状态反应于应用层和应用层注册中

定义了五种状态:

Init // 应用层没有数据交互,主站对数据传输信息注册有同路

Pre-Operational // 应用层上的邮箱通信。没有过程数据交互

Safe-Operational // 应用层上的邮箱通信。过程数据通信,但是仅仅是输入被评估,输出置于Safe状态

Operational // 输入和输出都是有效的

Bootstrap // 定义了固件更新。是可选的,但是在固件必须要更新时推荐选择

// 只能和init进行状态间转换,没有过程数据通信,通过应用层的邮箱进行通信,根据需要的情况对邮箱进行配置,只能使用FoE协议。

从站设备的请求状态和当前状态反应于应用层控制和应用层注册中:

应用层控制(0x0120) 初始化设备状态机的状态转换

应用层状态(0x0130) 设备状态机的实际状态

应用层状态代码(0x0134) 错误原因或者其他状态代码

邮箱传输

交换变量数据的标准方式 邮箱接口是可选择的,但是推荐使用 如果过程数据是可设置的,或者有其他的非周期性服务,必须邮箱通信 全双工能力 从站可以发起一个数据交互 预留两个同步管理器通道: Sync Manager 0(主站到从站),Sync Manager 1(从站到主站) 数据交互的早期阶段,邮箱方式是可利用的(State Pre-Operational) 支持多种协议的能力

邮箱通信协议的类型:

EOE: Ethernet over EtherCAT // 通过EtherCAT传输的标准以太网帧

COE: CANopen over EtherCAT // 访问CANopen对象字典和它的对象,CANopen紧急事件和事件驱动的PDO消息

FOE: Filetransfer over EtherCAT // 下载上传固件和其他的一些文件

SOE: Servo Drive over EtherCAT // 存取伺服轮廓检验(IDN)

从站信息接口

强制从站信息接口SII(Slave Information Interface)由所有能被持久保持的对象组成 信息被存储于一个EEPROM,EtherCAT从站控制器和EEPROM之间有一个SPI接口。

SII包括:

boot设置数据

设备一致性

vender id,产品序列号,修正号,serial no

和CoE对象0x1018里,相同的信息

应用程序信息数据

额外的一些数据

AL Status Code(Application Layer Status Code)

Application Layer: Describes the highest layer of the EtherCAT slave stack which includes the EtherCAT State Machine, error handling, Mailbox protocol handling, slave application.

此可选属性由应用程序控制,并报告由AL的状态控制事例检测到的最后错误或ID值。AL(应用层)状态代码给出从机进入错误状态的原因。 如果错误标志(寄存器0x0130:04)为TRUE,则应提供AL状态代码.

2.9 设备配置(Device Profile)

设备行规描述了设备的应用参数和功能特性,如设备类别相关的机器状态等。现场总线技术已经为I/O设备、驱动、阀等许多设备类别提供了可利用的设备行规。用户非常熟悉这些行规以及相关的参数和工具,因此,EtherCAT无需为这些设备类别重新开发设备行规,而是为现有的设备行规提供了简单的接口。该特性使得用户和设备制造商可以轻松完成从现有的现场总线到EtherCAT技术的转换过程。

EtherCAT实现CANopen (CoE)

CANopen©设备和应用行规广泛用于多种设备类别和应用,如I/O组件、驱动、编码器、比例阀、液压控制器,以及用于塑料或纺织行业的应用行规等。

EtherCAT可以提供与CANopen机制[7]相同的通讯机制,包括对象字典、PDO(过程数据对象)、SDO(服务数据对象),甚至于网络管理。

因此,在已经安装了CANopen的设备中,仅需稍加变动即可轻松实现EtherCAT,绝大部分的CANopen©固件都得以重复利用。并且,可以选择性地扩展对象,以便利用EtherCAT所提供的巨大带宽。

EtherCAT实施伺服驱动 设备行规IEC 61491 (SoE)

SERCOS interface™ 是全球公认的、用于高性能实时运行系统的通讯接口,尤其适用于运动控制的应用场合。

用于伺服驱动和通讯技术的SERCOS™框架属于IEC 61491标准[8] 的范畴。该伺服驱动框架可以轻松地映射到EtherCAT中,嵌入于驱动中的服务通道、全部参数存取以及功能都基于EtherCAT邮箱(参见图12)。在此,关注焦点还是EtherCAT与现有协议的兼容性(IDN的存取值、属性、名称、单位等),以及与数据长度限制相关的扩展性。过程数据,即形式为AT和MDT的SERCOS™数据,都使用EtherCAT从站控制器机制进行传送,其映射与SERCOS映射相似。并且,EtherCAT从站的设备状态也可以非常容易地映射为SERCOS™协议状态。EtherCAT从站状态机可以很容易地映射到SERCOS™协议的通信阶段。

EtherCAT为这种在CNC行业中广泛使用的设备行规提供了先进的实时以太网技术。这种设备行规的优点与EtherCAT分布时钟提供的优点相结合,保证了网络范围内精确时钟同步。可以任意传输位置命令,速度命令或扭矩命令。取决于实现方式,甚至可能继续使用相同的设备配置工具。

EtherCAT实现以太网(EoE)

EtherCAT技术不仅完全兼容以太网,而且在“设计”之初就具备良好的开放性特征——该协议可以在相同的物理层网络中包容其它基于以太网的服务和协议,通常可将其性能损失降到最小。对以太网的设备类型没有限制,设备可通过交换机端口在EtherCAT段内进行连接。以太网帧通过EtherCAT协议开通隧道,这也正是VPN、 PPPoE (DSL) 等因特网应用所普遍采取的方法。EtherCAT网络对以太网设备而言是完全透明的,其实时特性也不会发生畸变(参见图13)。 EtherCAT设备可以包容其它的以太网协议,因此具备标准以太网设备的一切特性。主站的作用与第2层交换机所起的作用一样,可按照编址信息将以太网帧重新定向到相应的设备。因此,集成万维网服务器、电子邮件和FTP 传送等所有的因特网技术都可以在EtherCAT的环境中得以应用。

EtherCAT实现文件读取(FoE)

这种简单的协议与TFTP类似,允许存取设备中的任何数据结构。因此,无论设备是否支持TCP/IP,都有可能将标准化固件上载到设备上。

ADS over EtherCAT (AoE)

ADS over EtherCAT (AoE)是由EtherCAT规范定义的客户端-服务器邮箱协议。尽管CoE协议提供了详尽的描述,但AoE则更适合路由与并行服务的应用:通过网关设备访问子网络,如EtherCAT至CANopen® 或EtherCAT至IO-Link™ 网关设备。AoE使EtherCAT主站应用(如PLC程序)可以访问所属CANopen® 或 IOLink™从站的各个参数。AoE路由机制开销远低于因特网协议(IP)所定义的开销,并且发送方和接收方寻址参数始终包含在AoE报文中。因此,EtherCAT主站和从站端的实施更为精简。AoE也通过EtherCAT自动化协议(EAP)进行非周期通信的标准化,从而为上位机MES系统或主计算机、EtherCAT主站及其从属的现有设备之间提供无缝通信。同时,AoE也提供了从远程诊断工具获取EtherCAT网络诊断信息的标准化方法。

2.10 主站设计

EtherCAT可以在单个以太网帧中最多实现1486字节的分布式过程数据通讯。其它解决方案一般是,主站设备需要在每个网络周期中为各个节点处理、发送和接收帧。

而EtherCAT系统与此不同之处在于,在通常情况下,每周期仅需要一个或两个帧即可完成所有节点的全部通讯,因此,EtherCAT主站不需要专用的通讯处理器。主站功能几乎不会给主机CPU带来任何负担,轻松处理这些任务的同时,还可以处理应用程序,因此EtherCAT无需使用昂贵的专用有源插接卡,只需使用无源的NIC卡或主板集成的以太网MAC设备即可。EtherCAT主站很容易实现,尤其适用于中小规模的控制系统和有明确规定的应用场合。

例如,如果某个单个过程映像的PLC没有超过1486 字节,那么在其周期时间内循环发送这个以太网帧就足够了。因为报文头运行时不会发生变化,所以只需将常数报文头插入到过程映像中,并将结果传送到以太网控制器即可。

EtherCAT映射不是在主站产生,而是在从站产生(外围设备将数据插入所经以太网帧的相应位置),因此,此时过程映像已经完成排序。该特性进一步减轻了主机CPU的负担。可以看到,EtherCAT主站完全在主机CPU中采用软件方式实现,相比之下,传统的慢速现场总线系统通过有源插接卡方可实现主站的方式则要占用更多的资源,甚至服务于DPRAM的有源卡本身也将占用可观的主机资源。

系统配置工具(通过生产商获取)可提供包括相应的标准 XML 格式启动顺序在内的网络和设备参数。

已经在各种实时操作系统上实现了EtherCAT主站,包括但并不限于:eCos, INtime, MICROWARE OS-9,MQX, On Time RTOS-32, Proconos OS, Real-Time Java, RT Kernel, RT-Linux, RTX, RTXC, RTAI Linux,PikeOS, Linux with RT-Preempt, QNX, VxWin + CeWin, VxWorks, Windows CE, Windows XP/XPE with CoDeSys SP RTE, Windows NT/NTE/2000/XP/XPE/Vista with TwinCAT RTE, Windows 7 and XENOMAI Linux. 可以获得开源主站协议栈,作为示例代码或商业软件。也有各种公司提供各种硬件平台上的实施服务。可以在EtherCAT网站上的产品区找到快速增长的供应商信息[1]。

另一种EtherCAT主站的实现方式是使用样本代码,花费不高。软件以源代码形式提供,包括所有的EtherCAT主站功能,甚至还包括EoE(EtherCAT实现以太网)功能(见图15)。开发人员只要把这些应用于Windows环境的代码与目标硬件及所使用的RTOS加以匹配就可以了。该软件代码已经成功应用于多个系统。

2.11 从站设计

从站EtherCAT Processing Unit 总是位于 Port 0 之后其它端口之前,并在数据帧传输的过程中提取和插入数据:

DPRAM: 双端口存储器 Dual-Ported RAM,可以分别从主站及本地微处理器uC访问。访问 ESC 的 Dual-Ported RAM 读出 并/或 写入数据。

从器件具有一个16位Local地址空间:

地址范围0x0000:0x0FFF专用于EtherCAT寄存器,

地址范围0x1000:0xFFFF用作过程数据RAM

SyncManagers 阻止主站和从站微处理器(uC)同时访问 ESC存储区,确保数据的一致性

→ 含周期性数据 (Process Data) 和非周期性数据 (Mailbox)

FMMUs 为Lxx数据报文完成逻辑地址到物理地址的转换

→ 仅对于周期性数据 (Process Data)

从站的SyncManagers 和 FMMU 是由主站在初始化阶段自动配置的,该配置基于每个从站的XML文件和整个网络的设置。

EtherCAT从站设备使用一个价格低廉的从站控制器芯片ESC。从站不需要微处理器就可以实现EtherCAT通信。可以通过I/O接口实现的简单设备可以只由ESC和其下的PHY,变压器和RJ45接头。给从站的过程数据接口是32位的I/O接口。这种从站没有可配置的参数,所以不需要软件或邮箱协议。EtherCAT状态机由ESC处理。ESC的启动信息从EEPROM中读取,它也支持从站的身份识别。

更复杂的可配置从站有使用一个CPU。这个CPU和ESC之间使用8位或16位并行接口或串行SPI接口。要求的CPU性能取决于从站的应用,EtherCAT协议软件在其上运行。EtherCAT协议栈管理EtherCAT状态机和应用层协议,可以实现CoE协议和支持固件下载的FoE协议。EoE协议也可以实施。

从站控制器通常都有一个内部的DPRAM(DUAL PORT RAM),并提供存取这些应用内存的接口范围:

串行SPI(串行外围接口)主要用于数量较小的过程数据设备,如模拟量I/O模块、传感器、编码器和简单驱动等。该接口通常使用8位微控制器,如微型芯片PIC、DSP、Intel 80C51等(见图16)。

8/16位微控制器并行接口与带有DPRAM接口的传统现场总线控制器接口相对应,尤其适用于数据量较大的复杂设备。通常情况下,微控制器使用的接口包括Infineon 80C16x、Intel 80x86、Hitachi SH1、ST10、ARM和TI TMS320等系列(见图16)。

32位并行I/O接口不仅可以连接多达32位数字输入/输出,而且也适用于简单的传感器或执行器的32位数据操作。这类设备无需主机CPU(见图17)。

PDO(过程数据对象)、SDO(服务数据对象)

报文通过从站控制器时,从站读取出相关命令并进行对应处理,数据处理通过硬件完成,延间约为100-_500ns,通信性能独立于MCU的响应时间。每个ESC最大有容量为64KB的可用的内存编址,能进行连续或同步的读写。多个EtherCAT命令数据可以被嵌入到一个以太网报文中,每个数据对应独立的设备或内存区。

EtherCAT极大提高了以太网的性能,比如操作1000个I/O信号的时间约为30微秒。单个报文至多容纳1486字节的过程数据,和12000位I/O信号相当,更新所需时间约为300微秒。控制100个伺服单元的时间约为100微秒。

在基于PC的主站中,一般使用网络接口卡NIC(Network Interface Card)其中的网卡芯片集成了以太网通信控制器和物理层数据收发器。但是在嵌入式主站中,通信控制器通常集成在微处理器中。

EtherCAT从站设备同时实现应用控制和数据通信两部分功能,其组成如图所示,由四部分组成:从站控制微处理器、EtherCAT从站控制器ESC芯片、物理层器件和其他应用层器件。

EtherCAT报文由从站控制器来处理,使用双端口存储区完成主从站间的数据交换。每个从站ESC在环路上按各自的顺序移位读写数据。当数据帧经过从站时,ESC从中读取发送给自己的命令数据并放到内部存储区,插入的数据又被从内部 存储区写到子报文中。

从站控制微处理器主要负责处理EtherCAT通信和完成控制任务。微处理器从ESC获取控制数据实现设备控制功能,并采样设备的反馈数据写入ESC。从站控制微处理器的选型根据设备控制任务,可以使用ARM或DSP; 8位、16位或32位的处理器。EtherCAT从站采用MII接口模式时,需要使用标准以太网物理层器件:物理层芯片PHY,隔离变压器等。采用EBUS接口时不需要任何其他芯片。

3. 应用层(Application Layer)

3.1

3.2 EtherCAT Slave Implementation (从站实现)

DPRAM (双端口存储器)size and number of SyncManagers(同步管理 )

The DPRAM is used for exchange of cyclic and acyclic data(循环和非循环的数据交换) via the EtherCAT network. SyncManagers ensure data consistency(保证数据的一致性) within the DPRAM.

Each ESC has 4kByte of registers (addresses 0x0000 to 0x0FFF) which are reserved for (EtherCAT and PDI communication) configuration settings(配置设置 ).

Mailbox(邮箱) and process data is exchanged via additional DPRAM (also called user memory用户存储器 ). EtherCAT allows addressing(编址) of user memory of up to 60kBytes. ASICs provide between 1kByte and 8kByte of DPRAM, IP Cores can be configured to provide the full 60kByte of user memory.

Application Note: The standard SyncManager configuration is(标准的同步管理配置)

- 1 SyncManager per acyclic data output (mailbox out, master to slave)

- 1 SM for acyclic data input (mailbox in, slave to master)

- 1 SM for cyclic data output (process data out, master to slave)

- 1 SM for cyclic data input (process data in, slave to master)

For process data, SM running in 3-buffer-mode(3缓存模式) need three times the length (3倍长度) of actual process data for physical memory(物理内存) . The following table shows a schema(体系结构,模式) of how to allocate(分配) the length for the 4 SM.

Table 5: DPRAM Size Calculation Example( DPRAM大小计算示例)

SyncManagerBuffer CountLength [Byte]Total length [Byte]SM0Output Mailbox1L_MbxOut1*L_MbxOutSM1Input Mailbox1L_MbxIn+ 1*L_MbxInSM2Outputs3L_Out (TxPDO)+ 3*L_OutSM3Inputs3L_In (RxPDO)+3*L_In----∑ DPRAM size

SyncManagers are enabled(开启) by the following settings of the master during network initialization(网络初始化) .

-Physical address of ESC(ESC物理地址)

-Data length (数据长度)

-SyncManager control input(同步管理控制输入) :

i. Operation mode【操作模式】 (mailbox-mode/3-buffer-mode)

ii. Access direction【访问方向:读或者写】 (Read direction/Write direction)

iii. Interrupt settings 【中断设置】 (Valid/Invalid 有效/无效 )

iv. SyncManager watchdog setting【同步管理看门狗定时器设置】 (Valid/Invalid)

v. SyncManager setting (Valid/Invalid)

The default values are set in the ESI (chapter 2.4.1); the master initializes the SyncManager using the values from the ESI.(默认值在 ESI中设置,主站初始化时调用 ESI中的值)

Syncmanagers(同步管理器)

同步管理器简称SM用来协调应用程序和主机的数据交互,同步管理器同步的是数据而非时间,同步管理器确保了应用程序和主机能够正确的写入或读取数据。同时同步管理器可以以中断的形式通知主机和应用程序发生的数据更新事件。

从站的ESC中包含多个同步管理器,每一个同步管理器都可以单独的配置:

同步管理器的配置中包括告知同步管理器其需要管理的内存地址的范围,管理内存的属性(属于读或写,属于邮箱数据或过程数据)。

所以每一种数据交互方式都会有一个同步管理器来管理,应用程序进行数据交互时,只需要更具不同的同步管理器就可以方便的区分数据的类型(PDO 或SDO、读或写)。从站在初始化时会读取SM管理器中的配置来确定数据的存放地址。

数据的交互主要有缓冲模式和邮箱模式。缓冲模式主要应用于周期性过程数据的传送。

Number of Fieldbus Memory Management Units (FMMUs)(现场总线储存管理单元)

In an EtherCAT network, the memory of all slaves can be compiled in the master(所有从站的储存都可以在主站中编辑) to a logical memory(逻辑内存) . This logical memory is managed by FMMUs to map(映射) logical addresses to physical addresses in the slavesFMMUs(逻辑内存通过 的管理和从站中的物理内存相对应) .

For the FMMU configuration in a device, each consistent output and each consistent input block needs one FMMU and an additional FMMU for mailbox status response is necessary. // 对于设备中的FMMU配置,每个一致的输出和每个一致的输入块都需要一个FMMU,并且还需要一个用于邮箱状态响应的附加FMMU。

Application Note: The standard configuration is one FMMU per each, cyclic output and cyclic input data block , optionally an additional one for mapping the mailbox response availability flag into process data (thus, no polling of mailboxes is necessary). If the outputs and inputs are groupede.g. like in Table 5, 3 FMMUs are configured, see Table 6. // 应用说明:标准配置是每个循环输出和循环输入数据块一个FMMU,还可以选择另外一个用于将邮箱响应可用性标志映射到过程数据中(因此,不需要轮询邮箱)。 如果输出和输入被分组,例如 如表5所示,配置了3个FMMU,请参阅表6。

Table 6: FMMU Configuration

FMMUAssigned SyncManagerNameLength [Byte]1SM2OutputsL_Out (TxPDO)2SM3InputsL_In (RxPDO)3SM0 & SM1Mbx-SM Status FlagsMbx In/Out Length

Distributed Clocks (DCs(同步) with other slave devices,分布式时钟 ) for synchronization

Evaluate if the device should support high precise(支持高精度) synchronization with other slave devices. If so, DCs should be supported by the selected ESC. Distributed Clocks refer to the DC function for EtherCAT slaves (chapter 1.3.5). The times held by slaves are adjusted with this mechanism(途径) and thus enable precise synchronization of the nodes(节点) in the EtherCAT network. // 评估设备是否应支持与其他从设备的高精度同步。 如果是这样,所选的ESC应该支持DC。 分布式时钟指的是EtherCAT从站的DC功能(第1.3.5章)。 通过这种机制可以调整从站保持的时间,从而实现EtherCAT网络中节点的精确同步。

EEPROM(电可擦只读存储器)

The EEPROM is mounted(安装) outside the ESC and connected via I2C with point-to-point link(点对点连接) . According to the size of the EEPROM the EEPROM_SIZE signal should be set. For more details, refer to the Knowledge Base, chapter 11.3 d electrical Interface EEPROM an(I 2C)". For EEPROM (SII) Enhanced Link Detection setting (加强连接检测设置) , refer to documentation of the ESC vendor. // EEPROM安装在ESC外部,并通过I2C与点对点链接连接。 根据EEPROM的大小,应设置EEPROM_SIZE信号。 有关更多详细信息,请参见知识库第11.3章“电气接口EEPROM和(I 2C)”。有关EEPROM(SII)增强链接检测设置,请参阅ESC供应商的文档。

Application Controller【应用控制】 (Host Controller, μ C)

If a local software application provides the device functionality, any 8 or 16 bit synchronous or asynchronous microcontroller(任何一个 8位或者 16位同步或者异步微控制器) can be connected to the ESC. The application controller communicates with the ESC via the Process Data Interfaces (PDI).

To adapt the application software on the host(为了和主站的应用程序相适应 ) controller to the ESC, sample software stacks(样本软件栈) are available for communication implementation(通讯的实现), e.g. the Slave Sample Code(从站样本代码) (SCC). If the device is a 32 bit digital I/O interface, no application controller or additional communication software is necessary. // 为了使主机控制器上的应用软件适应ESC,可以使用示例软件堆栈进行通信实现,例如从机样本代码(SCC)。 如果设备是32位数字I/O接口,则无需应用程序控制器或其他通讯软件。

In most cases, manufacturers(制造商) can use a familiar microcontroller type as application controller in the EtherCAT device(使用相似型号的微控制器作为应用控制使用在 EtherCAT设备中) . If application software already exists, e.g. for a different fieldbus, it can be used for the EtherCAT device as well. // 在大多数情况下,制造商可以在EtherCAT设备中使用熟悉的微控制器类型作为应用程序控制器。 如果应用软件已经存在,例如 对于不同的现场总线,它也可以用于EtherCAT设备。

The source code(源代码) for communications software on the host controller allocates(分配) about 70kByte. The following features are a typical configuration (referring to the Slave Sample Code):

EtherCAT State Machine (ESM), including error handling(错误处理)

Device diagnosis(设备诊断)

Master-Slave data synchronization (主从站之间的数据同步) with SyncManager event (no DCs)

Mailbox CoE

Object Dictionary (对象字典) (20 objects) for process data objects (过程数据对象)

CoE services, including CoE Info services(信息服务) , no segmented transfer (无分割转换)

A list of other available sample stacks can be obtained on the product section of the ETG website.

Application Layer Communication Protocols (应用层通讯协议)

In EtherCAT, several protocols are available (see chapter 1.3.6) for the application layer to implement (实施) the required specification of the product development(产品开发时所需的规格) . When to apply them is described here.

CAN application protocol (总线应用协议 )over EtherCAT(CoE) To provide acyclic data exchange as well as mechanisms to configure PDOs for cyclic data exchange in a structured way, CoE (with SDO-Info support) should be implemented.

Servo drive profile(伺服驱动配置文件) over EtherCAT(SoE) SoE is an alternative drive profile to the CiA402 drive profile. It is often used by drive manufacturers which are familiar with the SERCOS interface.

Ethernet(以太网) over EtherCAT(EoE) EoE is usually used to provide webserver interfaces(网络接口) via EtherCAT. It is also used for devices providing decentral standard Ethernet ports(分散生产方式的标准以太网端口) . ? File Access(文件存取组件) over EtherCAT(FoE) If the device should support firmware(固件)download via EtherCAT, FoE should be supported. FoE is based on TFTP. It provides fast file transfer and small protocol implementation.

ADS over EtherCAT(AoE)小协议实施 When planning to control the device via a .Net interface, AoE is an option to apply.

Application Note:An exemplary(典范) CoE implementation is shown below.

The user application runs the device specific software(设备专用软件) on the μ C to implement device features(实现设备功能特性 ). Sample source code(protocol stacks) offered by EtherCAT stack vendors can be used to develop this application or to adapt existing software to EtherCAT.

Application Note:EtherCAT Slave Stack Code (SSC,从站堆栈代码 ).

The SSC is a free sample codefrom Beckhoff(德国倍福自动化有限公司)(免费样本代码) which provides an interface to the ESC. For hardware independent software development(独立于硬件的软件开发) , the SSC runs on several evaluation kits(评估板) and can be customized(自定义) for implementation in accordance with the product specification. Figure 14 shows the SSC structure with the interfaces to the user specific device application(用户特定的设备应用) and the ESC.

Application Note:EtherCAT Slave Protocol Stack.(从站协议栈)

Hilscher(德国赫优讯公司) offers a Slave Control Stack based on its netX hardware withDual Port Memoryinterface (DPM,双端口记忆器 ) and it is available for the user application with an API. Figure 15 shows the protocol stack architecture(协议栈构架) with interfaces to the ESC and the user application.

Device Profiles(设备配置文件)

During network initialization(网络初始化期间) , parameter setup(参数设定) is necessary, where data does not need to be transmitted cyclically(周期性传输) but only during network initialization. Acyclic data exchange is done via mailbox protocols(非循环的数据传输通过邮箱协议) , usually via theCoEprotocol (see chapter 2.3.5). For devices with variable process data structure, the definition of a modular device description(MDP,模块化设备描述 ) is available. The MDP is described in the ETG.5001 Modular Device Profile Specification(说明书) . // 在网络初始化期间,必须进行参数设置,这些数据不需要循环传输,而仅在网络初始化期间需要传输。 非循环数据交换是通过邮箱协议(通常通过CoE协议)完成的(请参阅第2.3.5章)。 对于具有可变过程数据结构的设备,可以使用模块化设备描述(MDP)的定义。 EDP.5001模块化设备配置文件规范中描述了MDP。

The MDP is based on the object dictionary defined byCoE(CAN application protocol over EtherCAT). The object dictionary can be described as a two dimensional list(二维表) . Each list entry (每个表的入口) is identified(识别) by an index(指针,索引) (0x0000–0xFFFF) which represents an object. Each object can contain up to 255 subindices(分目录) , also called object entries. The object list is structured in different areas, see Table 7. // MDP基于CoE(基于EtherCAT的CAN应用协议)定义的对象字典。 对象字典可以描述为二维列表。 每个列表条目均由代表对象的索引(0x0000-0xFFFF)标识。 每个对象最多可以包含255个子索引,也称为对象条目。 对象列表的结构在不同区域中,请参见表7。

The idea of the MDP is to provide a basic structure for masters(为主站提供一个基本构架) and configuration tools(配置工具) to handle(处理) slaves with complex (modular) structure easily. The user has the advantage, that if the slave variables’(变量)s are sorted in an MDP style, he can find the different data types by identical patterns(相同的模式) . // MDP的思想是为主机和配置工具提供基本结构,以轻松处理具有复杂(模块化)结构的从机。 用户的优势在于,如果以MDP样式对从属变量进行排序,则他可以通过相同的模式找到不同的数据类型。

The MDP can be applied to various types of devices. It is applicable to multiple axis(多轴) servo drive system(伺服驱动系统) of various functionality groups(各种功能组) , such as positioning(位置控制) , torque(扭矩控制) and velocity control(转速控制) . It is further applicable to gateway(网关) between different fieldbuses, i.e., Profibus, DeviceNet. Modular devices are driven by two aspects: // MDP可以应用于各种类型的设备。 适用于各种功能组的多轴伺服驱动系统,例如定位,转矩和速度控制。 它进一步适用于不同现场总线之间的网关,即Profibus,DeviceNet。 模块化设备由两个方面驱动:

Comprise(包含) physically connectable modules and plurality of functionalities(多数功能) .

//包括物理上可连接的模块和多种功能。

Comprise plurality of channels(多数通道) directly being connected to the EtherCAT network.

//包括多个直接连接到EtherCAT网络的通道。

The MDP imagines slaves which consist of one or several modules. A module can be hardware which is connected/disconnected to a slave. Examples are gateways between EtherCAT and e.g. CANopen or a bus coupler(总线耦合器) between EtherCAT and a proprietary backbone bus(专用主干总线) . // MDP设想从站由一个或几个模块组成。模块可以是已连接/断开连接到从站的硬件。示例是EtherCAT与例如CANopen或EtherCAT与专有骨干总线之间的总线耦合器。

A module can also be a logical module which describes data sets, e.g. a drive which supports a velocity controlled mode and a position controlled mode –the MDP would describe the data as two modules, one for each mode.(把数据描述成 2种模式,每个对应相应的模式) // 模块也可以是描述数据集的逻辑模块,例如。一个支持速度控制模式和位置​​控制模式的驱动器-MDP将数据描述为两个模块,每个模式一个。

No matter what kind of module is described it needs more or less the same information categories(需要相对应的信息分类) , which are organized in the profile specific index range (Table 7). // 无论描述哪种模块,它都或多或少需要相同的信息类别,这些信息类别在配置文件特定的索引范围内进行组织(表7)。

Application Note:Modular Device Profile Structure(模块化设备配置文件结构) . // 应用说明:模块化设备配置文件结构。

Consider an MDP for a line of slave device modules which are connected together on a backbone layer(主干网层面) via LVDS and via a coupler(耦合器) with MII. Figure 16 shows a schema how to define device profiles(如何定义设备配置文件) such that a modular profile dictionary is set up for the slave device line. // 考虑一排从设备模块的MDP,这些设备通过LVDS和带有MII的耦合器在主干层上连接在一起。图16显示了一种模式,该模式如何定义设备配置文件,以便为从属设备线设置模块化配置文件字典。

For implementation of the profile (CiA402 Drive Profile) for servo drive, build the program with reference to the corresponding specifications(技术规格,说明书) . In this example, this would be the

ETG.6010 Implementation Directive(指令) for the CiA402 Drive Profile, and

IEC 61800-7 Drive Profiles and Mapping to EtherCAT.

4. 应用实例

由于EtherCAT实时工业以太网技术具有适用范围广、拓扑结构灵活、数据通信效率高、实时性强和同步性能好等多种优点,所以特别适用于实时性要求高、通信数据量大的运动控制系统。

控制系统设计采用“PC+运动控制器”的方案,构建多轴运动控制系统,采用PC机为主站、ARM+MCX314为从站处理器的架构。其核心插补与控制算法都放在工业PC中完成,运动控制器要求大为降低,其主要完成数字给定量到实际脉冲信号的转变。该控制系统方案的优势在于简化硬件设计工作,主要以标准化的硬件为主:上位机可以采用工业PC机、下位机使用开发的通用运动控制器,方便日后升级维护。工业PC机与运动控制器直接采用EtherCAT实时工业以太网进行通信连接。

4.1 主站操作系统(RTAI)

PC机部分软件以LinuxCNC为基础,往下LinuxCNC通过HAL(硬件抽象层)与EtherCAT主站驱动之间进行通信连接,然后EtherCAT主站通过以太网线给从站运动控制器发控制命令;往上利用LinuxCNC提供的Python调用接口和人机界面通信,数控系统人机界面采用PyQt开发;由于LinuxCNC需要运行实时任务,需要将普通操作系统进行改造。因此,目前的主要工作是对Linux系统进行实时性改造、安装EtherCAT主站、编写HAL模块、编写人机界面。

虽然EtherCAT主站程序能够安装在非实时操作系统上,但一般情况下会对主站进行实时性改造,而且LinuxCNC中有运行实时任务的需要,所以对Linux系统进行实时性改造迫在眉睫。众所周知,Linux系统本质上是一个分时操作系统,不是一个实时操作系统。Linux系统实时性不强使其在嵌入式应用中有一定的局限性,受内核可抢占性、进程调度方式、中断处理机制、时钟粒度、虚拟内存管理等几个方面的制约。

根据实时性系统要求以及Linux的特点和性能分析,对标准Linux实时性的改造存在多种方法,较为合理的两大类方法为:直接修改Linux内核源代码和双内核法。

1.直接修改Linux内核源代码:对Linux内核代码进行细微修改并不对内核作大规模的变动,在遵循GPL协议的情况下,直接修改内核源代码将Linux改造成一个完全可抢占的实时系统。核心修改面向局部,不会从根本上改变Linux内核,并且一些改动还可以通过Linux的模块加载来完成,即系统需要处理实时任务时加载该功能模块,不需要时动态卸载该模块。这种方法存在的问题是:很难百分之百保证,在任何情况下,GPOS(通用操作系统)程序代码绝不会阻碍RTOS的实时行为。也就是说,通过修改Linux内核,难以保证实时进程的执行不会遭到非实时进程所进行的不可预测活动的干扰。2.双内核法:双内核法是在同一硬件平台上采用两个相互配合,共同工作的系统核心,通过在Linux系统的最底层增加一层实时核心来实现。其中的一个核心提供精确的实时多任务处理,另一个核心提供复杂的非实时通用功能。其优点是可以做到硬实时,并且能很方便地实现一种新的调度策略。目前采用这种方案的主要有RTAT,RT-Linux和Xenomai。本课题采用RTAI实时包的方式完成对Linux系统的实时性改造,如图所示。

RTAI(实时应用接口)是Linux内核的一个实时扩展,RTAI是基于ADEOSC Adaptive Domain Environment for Operating System)实现,ADEOS位于Linux系统和硬件之间管理硬件中断,并控制实时内核和Linux内核的优先级,其中实时内核优先级高于Linux内核优先级。

RTAI安装:

1.下载RTAI压缩包并解压到urs/src目录下,输入命令:

cd /usr/src

sudo tar -bzip2 -xvf rtai一3.8.tar.bz2

2.下载Linux内核压缩包并解压到urs/src目录下,输入命令:

sudo cp suoxd/linux-2.6.37.1.tar.bz2 /usr/src

sudo tar -bzip2 -xvf linux一2.6.32.2.tar.bz2

3.利用RTAI源码中的文件给内核打补丁,未安装p atch需安装patch后,输入命令:

sudo patch -pl

4.配置内核,Linux2.6.32引入新的方式用于简化kernel的配置,使用命令拷贝当前配置,省去很多繁琐的内核配置选项。

5.安装内核模块,输入命令:

sudo make clean

sudo make

sudo make modules

sudo make modules install

sudo make install

6.配置RTAI,下载安装MESA库文件和EFLTK包,然后进入RTAI文件夹,执行配置,输入命令:

cd /usr/src/rtai

sudo make config

7.编译并安装RTAI,命令行窗口的RTAI安装结果如图4-2所示,输入命令:

sudo make

sudo make install

8.RTAI内核延时测试,利用RTAI源码包中的测试案例进行测试,测试结果如下:

cd /usr/realtime/testsuite/user/latency

sudo ./run

9.RTAI内核抢占实现测试,测试结果如图4-4所示,输入命令行:

cd /usr/realtime/testsuite/user/preempt

sudo ./run

4.2 主站EtherCAT程序(IGH)

本控制系统EtherCAT主站以实时Linux操作系统为基础,在Linux环境下开发主站有两方面优势,一方面Linux为开源系统,方便对底层进行修改;另一方面便于进行嵌入式移植。Linux下的EtherCAT主站架构如图所示:

Linux操作系统可分为内核态和用户态。内核态是操作系统的核心,负责进程管理、内存管理、进程间通信和设备管理和驱动等,实时性要求高。用户态主要运行人机交互、数据监控等实时性要求不高的程序。

EtherCAT主站模块运行在内核态,可支持一个或多个EtherCAT主站,且同时提供应用接口和设备接口。用户通过应用接口访问主站,通过设备接口连接设备到指定主站。EtherCAT的以太网设备驱动模块通过主站设备接口与主站连接,EtherCAT设备协议可直接由以太网帧传送,因而主站能同时并行处理EtherCAT数据帧和通用以太网通信。

在Linux上安装EtherCAT主站程序,这里选择EtherLab开发的IgH EtherCAT Master,首先下载主站安装文件gHEtherLab.tar.bz2,下载文件后解压缩进入含有Makefile文件的目录安装主站,输入命令:

make ethercatMaster

make ethercatMasterinstall

sudo /etc/init.d/ethercat start

ethercat master

若最后两条指令运行正常则说明主站安装成功。

4.3 主站应用开发(LinuxCNC)

LinuxCNC是一款运行在Linux平台下的实时开源数控软件。起源于美国国家标准与技术研究院的增强型运动控制器EMC (Enhanced Machine Controller)研究项目,用于机床的数控系统。经过十几年的发展,LinuxCNC系统广泛用于冲床、车床、3D打印机、激光切割机、等离子切割机、机器人手臂等领域。其主要优点有:提供多个标准化的用户界面、用户也可以采用自主开发的GUI、自带G代码解析器、支持伺服电机控制步进电机开环控制、运动控制器功能强大、支持非笛卡尔坐标运动系统、采用2.4或2.6的Linux内核支持RT-Linux或RTAI实时补丁。LinuxCNC源代码可以免费下载,安装在Linux系统上。LinuxCNC软件架构如图所示。

LinuxCNC是一个模块化设计的软件,大致可以分为以下四个主要模块:运动控制器(EmcMot)、数字I/O控制器(EmcIO )、任务控制器(EmcTask )、图形用户界面(GUI)。

用户操作界面负责接收用户命令并反馈最新状态;

任务控制器是整个系统的决策层,主要负责对各种命令进行决策分类、解析发送给不同的模块;

运动控制器是实时刷新的,主要完成路径规划、插值运算等;

数字I/O控制器负责处理I/O信号,通过NML消息与运动控制器通信,因为不同设备I/O各不相同,这时需要硬件抽象层HAL文件建立软逻辑电路来控制实际I/O ;

HAL

HAL硬件抽象层是LinuxCNC系统的关键技术之一,通过引入HAL机制,为用户提供了统一的驱动开发接口,方便编写驱动,还能利用配置文件将相应的HAL模块连成一个复杂系统,方便数据传递。HAL模块结构图如图所示。

EtherCAT主站驱动与LinuxCNC之间采用HAL机制进行通信,硬件抽象层将各个底层的硬件驱动、实时算法抽象出来,构成一个组件,组件是由函数、参数、输入输出引脚所组成,输入信号包括来自LinuxCNC的控制信号、用户配置信息,输出信号包括提供给LinuxCNC的反馈量等。将编写好的HAL模块命令为ec.comp,编译生成ec.ko,利用insmod命令将其安装后就可以加载到线程中。

当HAL模块启动的时候,需要对变量进行初始化,但完成EtherCAT主站的初始化是更重要的,只有初始化了主站,设置好参数,建立起完整的通信网络,才能进行接下来的周期数据传输,其中PDO为进程数据对象、SDO为服务数据对象。如图为EtherCAT主站的初始化流程图。

主站初始化完成后,LinuxCNC开始正常运行。LinuxCNC在每个控制周期通过硬件抽象层下发控制命令,并获取从站设备反馈的信息。

HAL周期任务流程图如图所示。

对于采用位置控制的伺服单元,HAL模块每次都要计算出本控制周期的位移或目标点,然后通过EtherCAT总线发送到从站运动控制器;

然后从站运动控制器在每个控制周期上报编码器位置增量和I/O状态,HAL模块计算出轴的实际位置后发送给LinuxCNC。

UI界面

在Linux环境下开发用户界面的语言有Python, C++等,图形库有QT, GTK等。由于控制界面运行于用户态,实时性要求不高,同时兼顾开发难度和周期,本课题采用Python语言,结合PyQT图形库开发冲床控制界面。Python是一种面向对象的脚本语言,与其他语言相比,Python具有如下优点:面向对象、公开免费、跨平台可移植、功能强大、使用简单、模块丰富。QT是一个功能丰富广泛使用的GUI图形库,可用于Windows, Linux等平台,具有很好的可移植性。PyQt是Python语言与Qt图形库相结合的产物,从而可以通过Python来使用Qt图形库,具有模块丰富、跨平台和使用信号与槽机制的优点。数控界面调用LinuxCNC抽象出的Python接口与任务控制器通信,并监视LinuxCNC状态信息和错误信息。

本课题冲床数控系统设计加工状态、参数设置、警告与诊断和软件设置四个状态界面,四个状态界面下一共分设13个子界面,各个界面之间可以通过按钮进行切换,数控系统界面结构图如图所示。 系统的主界面由菜单栏、工作窗口、快捷工具栏和消息提示栏这四部分构成。菜单栏可以根据不同的操作需求切换不同的工作窗口,快捷工具栏是一些常用的快捷按钮,消息提示栏是提示快捷按钮内容和显示系统运行状况、错误信息汇报的区域,如图所示。 2.参数设置界面:参数设置界面用于设置控制系统及机械的参数,分设了系统参数设置、运动轴参数设置及模具库参数设置这3个子界面。下面主要讲解运动轴参数,运动轴参数设置界面如图所示。

3.警告与诊断界面:息记录界面这2个子界面。警告与诊断界面下设有警告信息诊断界面、历史警告信,如图所示。

4.软件设置界面:软件设置界面用于设置软件与外部设备的通讯参数和显示软件的版本等信息,设有软件信息、外部设备通讯设置及高级设置这3个子界面。下面讲解外部设备通讯设置界面,如图所示。

4.4 ET1200

EtherCAT从站控制器ESC(EtherCAT Slave Controller)是由德国BECKHOFF自动化有限公司提供的,包括ASIC芯片和IP-Core,实现EtherCAT数据链路层协议。目前ASIC从站控制专用芯片有ET1100和ET1200,也可以使用IP-Core将EtherCAT通信功能集成到设备控制FPGA当中,并根据需要配置功能和规模。图为ET1200从站控制器结构图: ET1200最多支持3个EtherCAT物理通信端口:

其中一个可以作为MII接口,用于与物理层PHY芯片交换数据。因为EtherCAT并不定义该接口的物理层,MII接口也是和传输介质无关接口,因此这种接口方式下的数据链路层与物理层彻底隔开,从而以太网能够选用任意的传输介质,包括无线电和光纤。ET1200其余两个接口均为EBUS接口,EBUS是德国倍福公司使用的LVDS(Low Voltage Differental Signaling)标准定义的数据传输标准,通信速率高达100Mbit/s,能与ESC芯片直接相连,减小PCB板体积和降低成本。EBUS的传输距离最大为10m。ET1200提供的物理设备接口有数字I/O和SPI两种,选用ARM作为从站微处理器是一般通过SPI接口访问ET1200。ET1200采用3.3 V供电,最大工作电流约为70mA,芯片发热量很小。

ET1200的主要技术指标:

ET1200从站控制器使用外部EEPROM来存储从站设备信息,下表是EEPROM存储数据分布示意图,其中0~63为基本信息,每次ESC启动时都会从EEPROM中读取其中的配置信息。

4.5 从站程序设计

运动控制器软件设计包括ARM主控制程序及外围电路驱动程序,外围驱动程序包括ET 1200驱动程序、AD采样芯片驱动程序、RS232驱动程序、SPI串行总线、FSMC并行总线驱动程序以及MCX314加减速控制程序设计等。运动控制器程序在STM32F427这款MCU上使用C语言开发,开发环境为Windows 7下的Keil uVision_5集成开发环境。

ARM主控制程序是运动控制器的核心,需要完成各个函数初始化、参数配置、数据处理、逻辑流程控制及控制算法运算等,图为支持查询模式(自由运行模式)的流程图。

ARM芯片在上电后不久进入main()函数,在main()函数中最先完成一系列系统正常运行相关函数的初始化,如延时初始化函数、LED初始化函数、串口初始化函数、中断向量表配置初始化函数,然后完成SPI初始化函数、定时器初始化函数、EtherCAT初始化函数以及FSMC总线初始化函数等。

接着完成通信初始化工作,查询主站的状态控制寄存器,读取事件请求寄存器0x220、相关配置寄存器,启动或关断相关通讯服务。

在完成以上工作后就进入主循环while(1),进行应用层任务处理和周期性数据处理,周期性数据处理和应用层任务处理有查询模式(自由运行模式)或同步模式(中断模式)这两种,本程序采用同步运行模式,所以在主循环中主要处理非周期性的任务。同步运行模式下周期性数据在中断服务程序中处理。

void main(void)

{

//--一执行一系列初始化函数--一

Delay_Init(168); //初始化延时函数

Led_Init(); //初始化LED端口

Uart_Init(9600); //初始化串口

AD7606_Init(); //初始化AD采样芯片

NVIC_Config(); //初始化STM32时钟及外设

SPI_Config(); //ET 1200用SPI总线初始化配置

Timer2_Init_ Config(); //Timer2初始化配置

ET 1200_GPIO_Config(); //ET 1200 GPIO初始化配置

ECAT_Init(); //初始化通信变量和ESC寄存器

FSMC_Init(); //FSMC并行总线初始化

//--一初始化完成,进入主循环--一

while(1)

{

ET1200_AlEvent=pEsc->AlEvent; //读应用层事件请求寄存器,

// ET1200_AlEvent为全局变量,在头文件中定义

if(!ET1200_IntEnabled) //处于自由运行模式(ET 1200_ IntEnabled -=0

//处于同步模式(ET1200 IntEnabled==1)

free_ run(); //处于自由运行模式时,进行周期性数据查询

el_event(); //应用层任务处理,包括状态机和非周期性数据等

}

}

从站设备可以运行于同步模式或自由运行模式,在自由运行模式中使用查询方式处理周期性过程数据,在同步模式使用中断服务程序处理性数据。

变量ET1200 IntEnabled来控制运行模式。ET1200 IntEnabled为1时,使用同步模式,ET1200 IntEnabled为0时,使用自由运行模式。

根据主站对SM的配置,在函数、参数初始化阶段来初始化变量ET1200_ IntEnabled,确定当前的运行模式。

本程序选择同步模式,以下将按照该模式讲解一个中断服务数据处理的工作流程,如图所示。

4.6 实验测试

实验测试平台由一台PC机、一套自主研发的冲床数控系统软件、一台自主研发的五轴高速运动控制器、一套单轴丝杠滑台、一套二维伺服平台、一套四轴同步测试架组成。

实验过程中需要注意,因为目前运动控制器专为数控冲床设计,仅保留1个M II接口连接主站,且设计最多连接轴数为五轴,故连接四轴同步测试架时不能接单轴丝杠滑台和二维伺服平台;测试过程中工业PC机和显示器使用笔记本代替。在平台上测试通过后将控制系统接入到LX230B型数控转塔冲床上进行测试和参数调试,最终成功开发出30T数控转塔冲床用高速运动控制系统。

基本通信功能测试

EtherCAT主从站基本通信功能测试时首先按图所示,使用网线将PC机与从站运动控制器连接起来后,在数控软件通信设置的外部设备通信设置中找到运动控制器连接状态,点击重新连接。使用Wireshark抓包工具抓取连接过程中主站广播的数据包,最终连接成功时运动控制器连接状态指示灯变为ON,从站状态变为操作状态(OP),从站状态机启动正常,如图所示。

由图可知该实验中EtherCAT报文的格式。报文总长度60个字节,前14个字节是以太网数据帧头,包括6字节的目的地址(ff:ff:ff:ff:ff:ff ) } 6字节的源地址(78:a5:04:c0:be:6f)} 2字节的帧类型(Ox88a4);接着是2字节的EtherCAT头,包括11位数据长度(Ox02a)}1位保留位(Ox0)}4位类型位(0x1);然后是EtherCAT数据,数据为2个子报文,每个子报文包含10字节子报文头,16字节数据,2字节WKC(工作计数器)。Wireshark抓取的报文与2.1节中的EtherCAT帧格式一 致,从而主从站之间实现了基本通信。

控制系统基本功能测试

控制系统基本功能测试是验证系统软硬件功能正常的重要实验,该项测试在单轴丝杠滑台完成,连接好PC机、运动控制器和单轴丝杠滑台,如图所示。在数控软件的手动加工中对输出I/O如伺服使能、紧急停止,回零点如X轴回零、Y轴回零,单轴位移控制如X+, X-, Y+, Y-进行测试,并观察滑台的运动情况和伺服驱动器面板显示来判断各项功能是否正常。经测试,软件上的相关按钮都工作正常,五个轴的接口、I/O接口工作正常,产生的脉冲精度误差为0。故数控系统软硬件基本功能测试通过。

G代码解释、圆弧插补测试

通过二维伺服运动平台圆弧插补实验测试运动控制系统G代码解释、圆弧插补等功能。该项测试主要在二维伺服平台上完成,连接PC机、运动控制器和二维伺服平台,如图所示,通过数控系统控制二维伺服运动平台的X轴和Y轴电机做圆弧插补,利用上方横梁固定的笔杆记录二维平台上白纸相对运动下的轨迹。二维平台中的两组伺服机丝杠的参数完全一致,丝杠螺距为20mm,设定伺服驱动器驱动电机旋转一圈为2000个脉冲,可知丝杠走1 mm需要100个脉冲,由此设置数控软件中的X, Y轴脉冲当量都为1000。

使用AutoCAD设计一个直径D为80mm的圆周,如图所示,绘制完成后保存为.dxf格式,然后使用一体化饭金CAD/CAM编程软件cncKad将.dxf格式的图纸转化为冲床数控软件所需的.PNC文件,即G代码。然后将G代码文件导入到数控软件中,预加工仿真运行无误后启动伺服,进行实际加工,最终得到实际绘制效果图如图_5 -6所示。绘制出的圆周尺寸精确,控制系统通过圆弧插补测试。

多轴运动的同步性能测试

多轴同步测试实验用来测试运动控制系统多轴运动的同步性能。该项测试主要利用四轴同步测试架完成,如图所示,测试架上固定安装有A, B, C, D共4组电机和驱动器。将电机驱动器与运动控制连接,控制器通过EtherCAT总线与PC机连接,打开数控软件,在加工状态中选择手动加工,控制伺服电机A, B,C, D同时做顺时针运动旋转,通过长时间运行测试观察轴上4个光盘指向分析电机运动的同步性。经过长时间测试观察后,电机按钮停止伺服轴转动,可以看到4个电机指向同一方向,驱动器面板显示脉冲数也一致。

实际产品应用

在上一节的一系列实验后,控制系统的各项功能都顺利通过测试,接下来把开发好的控制系统制作成便于使用的操作台和控制柜接入到LX230B型30T的数控转塔冲床上,取代原有的控制系统,操作台和控制柜如图所示。该冲床选用安川 -7系列AC伺服电机、 -V系列AC伺服驱动器。首先调试好伺服电机与伺服驱动器之间构成电流环、速度环的PID参数,让闭环的性能达到较好水平,再接入控制系统,其中编码器分频脉冲输出C相信号在轴回原点时使用。

为观测控制系统在数控转塔冲床上的应用效果,需要采用非接触测量仪测量板材运动过程中的振动曲线。根据实验室现有的条件,采用由日本Keyence公司生产的LK-G400型激光位移传感器和LK-GD_500型控制器作为非接触式测量工具。 LK-G400的主要技术参数为:使用距离为400mm,测量范围为士100mm,取样率20us,钡量精度为gum o LK-GD_500型控制器主要参数为:最小显示单位为O.Olum,显示周期10次/秒。

在冲床大板材(1200mm X 2_SOOmm)上选取测试点W点,如图所示。采用S型曲线加减速规划,加速度g为6,控制板材在X轴上高速移动lOmm,运动控制器输出的PULS(脉冲)信号局部波形如图所示。

使用软件LK-Navigator读取传感器测量的数据,如图所示。由图分析可知调节时间为130ms(按士0._5%误差带)、稳态误差士0.0_Smm,各项指标良好,达到工业应用要求。

5. 工具

5.1 TwinCAT

EtherCAT主站方案实现一般都采用倍福公司的TwinCAT, TwinCAT实现了强大的EtherCAT主站功能,从站XML表配置、EEPROM配置文件操作、扫描EtherCAT从站等,下图为使用TwinCAT开发冲床数控系统的过程。因为TwinCAT是基于Windows风格,拥有较好的人机交互界面,功能强大,非常适合上位机控制窗口的开发,但TwinCAT运行于Windows环境下,实时性很差,而且TwinCAT和Windows系统需要付费才能商业化应用,价格较高。

在学习EtherCAT的时候,TwinCAT是必须要学习的。TwinCAT软件其功能强大,可以写plc程序,可以写图形化界面,可以观察波形等等。初次学习时我就参考TwinCAT 3运动控制教程和TwinCAT NC PTP实用教程,把TwinCAT 3中界面的一些功能都试了一遍。另外用功能块学着写了凸轮、齿轮的程序,并用Visualization图形化界面来控制。(在学习TwinCAT时,要充分利用好帮助文档)。

因为我的任务是做一致性测试,所以关注点大部分放在了对协议的了解上,涉及到一致性测试的文档有ETF7000.2、ETG7010。具体可以去ETG官网上查找相关资料。做一致性测试时需要用到ET9400,这款软件不是免费的。目前还没开始测这部分。

对于带有EtherCAT伺服驱动器的性能的测试,用TwinCAT带着简单测过csp、csv、cst这三种模式。如果想要系统的测试驱动器所支持的操作模式,必须对驱动器的相关知识有一定的了解。另外就是对对象字典中对象充分了解。TwinCAT中的Process Data和CoE-Online界面是很重要的。这点我也没有完全掌握。没有以太网基础,对协议没有了解,直接接触EtherCAT这条学习之路感觉很艰难!

5.2 LinuxCNC

PC机部分软件以LinuxCNC为基础,往下LinuxCNC通过HAL(硬件抽象层)与EtherCAT主站驱动之间进行通信连接,然后EtherCAT主站通过以太网线给从站运动控制器发控制命令;往上利用LinuxCNC提供的Python调用接口和人机界面通信,数控系统人机界面采用PyQt开发;由于LinuxCNC需要运行实时任务,需要将普通操作系统进行改造。因此,目前的主要工作是对Linux系统进行实时性改造、安装EtherCAT主站、编写HAL模块、编写人机界面。

5.3 开源的EtherCAT Master

EtherCAT的主站开发是基于EtherCAT机器人控制系统的开发中非常重要的环节。目前常见开源的主站代码为的RT-LAB开发的SOEM (Simple OpenSource EtherCAT Master)和EtherLab的the IgH EtherCAT® Master。使用起来SOEM的简单一些,而the IgH EtherCAT® Master更复杂一些,但对EtherCAT的实现更为完整。

具体比较如下表:

参考资料

EtherCAT协议介绍.pdfEtherCAT Technology Group _ 技术概览记录STM32开发一个完整的EtherCAT的过程

优惠劵

pwl999

关注

关注

209

点赞

1343

收藏

觉得还不错?

一键收藏

知道了

23

评论

EtherCAT (学习笔记)

文章目录1. 简介1.1 运动控制1.2 实时以太网1.3 EtherCAT2. EtherCAT原理介绍2.1 实时性2.2 端口管理2.3 EtherCAT网络拓扑2.4 EtherCAT网络协议栈2.5 EtherCAT数据帧格式2.6 EtherCAT设备寻址方式2.7 分布式时钟(Distribute Clock)2.8 应用层(Application Layer)2.9 设备配置(Device Profile)2.10 主站设计2.11 从站设计3. 应用层(Application Layer)

复制链接

扫一扫

专栏目录

ethercat总结

02-14

ethercat总结,主要是Ethercat基础介绍,运行原理与常用协议说明

EtherCAT中文介绍

10-22

实时以太网EtherCAT中文介绍资料,英文不好的可以参考一下。EtherCAT(以太网控制自动化技术)是一个开放架构,以以太网为基础的现场总线系统,其名称的CAT为控制自动化技术(Control Automation Technology)字首的缩写。EtherCAT是确定性的工业以太网,最早是由德国的Beckhoff公司研发。

23 条评论

您还未登录,请先

登录

后发表或查看评论

EtherCAT Slave Stack Code (SSC)

05-28

BECKHOFF(倍福)官方提供EtherCAT从站协议栈代码生成工具

版本:SSC V5.12(Tool 1.4.2)

EtherCAT EoE

最新发布

weilan0818的博客

01-16

452

EoE:将以太网帧插入到 EtherCAT 协议中。EtherCAT协议中的以太网帧通过非循环邮箱通信进行传输。

Ethercat概念学习

weixin_43914278的博客

04-10

1580

最近我们要基于Ethercat技术进行开发,首先需要了解其基本原理,github上看到了有相关实现,一起来看看吧。

EtherCAT.rar

08-12

搜集的EtherCAT官方相关资料,学习EtherCAT参考资料, 协议说明等等

ethercat学习笔记1

08-08

代码的笔记放到第二章。1.8 松下的从站 PDO映射。6040h控制字这个控制字是用来控制伺服电机上使能的。6041状态字这个状态字读取伺服电机的状态。控制模式

EtherCAT介绍

人人都懂物联网

03-11

1万+

EtherCAT(以太网控制自动化技术)是一个以以太网为基础的开放架构的现场总线系统,EtherCAT名称中的CAT为Control Automation Technology(控制自动化技术)首字母的缩写。最初由德国倍福自动化有限公司(Beckhoff Automation GmbH) 研发。EtherCAT为系统的实时性能和拓扑的灵活性树立了新的标准,同时,它还符合甚至降低了现场总线的使用成本。

EtherCAT简介

weixin_41883890的博客

06-30

2394

EtherCAT(用于控制自动化技术的以太网)是Beckhoff(倍福)在2003年开发的实时以太网网络。它基于CANOPEN协议和以太网,但是与Internet通信或网络通信不同之处在于,它专门针对工业自动化控制进行了优化。这些标准由EtherCAT技术小组(简称ETG)定义和维护。使用OSI网络模型,以太网和EtherCAT依赖于相同的物理和数据链路层。除此之外,由于针对不同任务进行了优化,因此这两个网络在设计上有所不同。例如,以太网被设计为通过许多不同的节点发送大量数据。它能够与数十亿个单独的地址之间

【EtherCAT】一、入门基础

06-09

5257

EtherCAT(Ethernet Control Automation Technology)是一种高性能实时以太网通信协议,用于在工业自动化领域中进行实时控制和通信。它是由德国Beckhoff自动化公司在2003年开发的,并被国际电工委员会(IEC)标准化为IEC 61158标准。EtherCAT的设计目标是实现极低的通信延迟和高带宽的数据传输,以满足高速控制和数据采集的需求。它通过一种特殊的主从架构实现,其中一个主站(Master)负责协调整个网络,而从站(Slave)则负责提供输入输出功能。

工控协议解读之EtherCAT协议硬核分析(转自知乎“智能制造之家“)

qq_43599327的博客

09-07

7033

EtherCAT协议

ethercat_slave_stack_code_tool_SSC_V5i12.rar

08-13

EtherCAT Slave Stack Code Tool 倍福官方从站开发工具5.12版本。

Ethercat xml规范

05-12

Ethercat xml规范

EtherCAT学习之路——概述

chenweizhen1991的博客

03-13

1万+

首发于知乎

最近在做基于EtherCAT的项目,看了一些网上的博客,感觉写的都比较松散。虽然,自己也是才开始学习,希望能把这段时间学到的东西总结一下。

1.EtherCAT简介

EtherCAT是由德国BECKHOFF自动化公司于2003年提出的实时工业以太网技术。它具有高速和高数据有效率的特点,支持多种设备连接拓扑结构。其从站节点使用专用的控制芯片,主站使用标准的以太网控制器。

Et...

[工业互联-9]:EtherCAT(以太网控制自动化技术)+TwinCAT 在生产自动化控制中的应用 、

文火冰糖(王文兵)的博客

06-09

4199

EtherCAT以太网控制自动化技术)是一个开放架构,以以太网为基础的现场总线系统,其名称的CAT为控制自动化技术ControlAutomationTechnology)字首的缩写。EtherCAT是确定性的工业以太网最早是由德国的Beckhoff公司研发。自动化对通讯一般会要求较短的信息更新时间(或称为周期时间)、信息同步时的通讯抖动量低,而且硬件的成本要低EtherCAT开发的目的就是让以太网可以运用在自动化应用中。

EtherCAT 应用层协议的部分理解(一)

热门推荐

王三三

06-22

2万+

不对EtherCAT进行介绍,只谈谈对EtherCAT应用层协议的简单理解1、COE (CANopen over EtherCAT)  一种基于且完全遵循CANopen协议的通信协议  用途:

     1、用于驱动PDO对象,实现PDO对象间数据通信

      2、用于驱动SDO对象,实现SDO对象间的数据传输  分类:

    1、周期性过程数据通信 – 驱动PDO

[工业互联-23]:EtherCat从站 - EtherCAT协议栈与工作原理, 软硬件解决方案

文火冰糖(王文兵)的博客

07-10

2158

在EtherCAT(以太CAT)网络中,从站(Slave)是指通过EtherCAT总线连接到主站(Master)的外部设备或模块。从站通常是实时控制系统中的执行器(写)、传感器(读)、驱动器(写)等外部设备。从站在EtherCAT网络中起到了连接外部设备和主站之间的桥梁作用。它们接收主站发送的命令和控制信息,根据指令执行相应的操作,并将执行结果和实时数据通过EtherCAT总线返回给主站。每个从站在EtherCAT网络中都有一个唯一的站地址。

1.ethercat基本概念

weilan0818的博客

05-24

607

EtherCAT(以太网控制自动化技术)是一个开放框架,以以太网为基础的现场总线系统。是实时以太网的一种。实时以太网是常规以太网技术的延伸,以便满足工业控制领域的实时性数据通信要求。实时以太网有powerlink,profinet,sercosⅢ,ethercat等等。基于TCP/IP的实现:Modbus/TCP, Ethernet/IP基于以太网的实现:powerlink, profinet RT修改以太网的实现:EtherCAT, Sercos3, profinet IRT。

Ethercat学习资料

04-02

以下是关于EtherCAT学习资料的一些推荐:

1. EtherCAT官方网站:https://www.ethercat.org/

官方网站提供了EtherCAT协议的详细介绍、技术规范、应用案例等内容,是学习EtherCAT的重要参考资料。

2. EtherCAT技术手册

EtherCAT技术手册是一本详细介绍EtherCAT协议的书籍,包括EtherCAT协议的基本原理、应用案例、网络拓扑结构等内容,对于学习EtherCAT协议非常有帮助。

3. EtherCAT开发者论坛:https://forum.ethercat.org/

EtherCAT开发者论坛是一个交流和分享EtherCAT开发经验的平台,里面有很多有关EtherCAT协议的讨论和问题解答,对于学习和开发EtherCAT应用非常有帮助。

4. EtherCAT开发工具

EtherCAT开发工具包括EtherCAT协议分析器、EtherCAT节点开发工具等,可以帮助开发者更好地理解和开发EtherCAT应用。

5. EtherCAT培训课程

EtherCAT培训课程可以帮助初学者快速入门EtherCAT协议,掌握EtherCAT网络的设计和应用,提高开发效率。

总之,学习EtherCAT需要系统的学习和实践,建议初学者从官方网站入手,逐步深入学习,同时结合实际应用场景进行实践。

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

非常没帮助

没帮助

一般

有帮助

非常有帮助

提交

pwl999

CSDN认证博客专家

CSDN认证企业博客

码龄16年

暂无认证

142

原创

1万+

周排名

3万+

总排名

68万+

访问

等级

6905

积分

1510

粉丝

898

获赞

150

评论

4869

收藏

私信

关注

热门文章

EtherCAT (学习笔记)

67258

Xenomai (学习笔记)

21769

Device Tree 详解

19630

Unwind 栈回溯详解

18367

Linux bpf 1.1、BPF内核实现

18328

分类专栏

Linux Kernel解析

51篇

Riscv

2篇

Trace

29篇

Arm Linux

11篇

Android

1篇

Linux 驱动三板斧

21篇

Linux Monitor

9篇

Security

12篇

Misc

6篇

VxWorks

6篇

Stability

2篇

Performance

1篇

Power

Virtualization

2篇

RealTime OS

3篇

Motion Control

3篇

AI

最新评论

RISCV 入门 (学习笔记)

中南甘帅问贴贴:

开芯院和日报的网址都寄掉了,不看好riscv的未来

Linux usb 4. Device 详解

努力学习LINUX的嵌入式开发工程师:

我怎么没早点看到你

Linux usb 7. Linux 配置 ADBD

-Promise810:

其实不用执行命令 我记得/etc/ 目录下有个启动脚本专门 执行命令的 你可以看看那个脚本怎么写的

Linux usb 7. Linux 配置 ADBD

一名不会算法的在职算法工程师:

老兄,你还记得执行什么命令吗?

Linux usb 7. Linux 配置 ADBD

-Promise810:

检查一下设备树配置 对应的 usb 接口是否支持从机模式 支持的话 这个usb控制器就能出现

您愿意向朋友推荐“博客详情页”吗?

强烈不推荐

不推荐

一般般

推荐

强烈推荐

提交

最新文章

Linux 驱动模块内存精简

Linux Phy 驱动解析

Linux mem 2.8 Kfence 详解

2023年1篇

2022年5篇

2021年29篇

2020年43篇

2018年26篇

2017年45篇

目录

目录

分类专栏

Linux Kernel解析

51篇

Riscv

2篇

Trace

29篇

Arm Linux

11篇

Android

1篇

Linux 驱动三板斧

21篇

Linux Monitor

9篇

Security

12篇

Misc

6篇

VxWorks

6篇

Stability

2篇

Performance

1篇

Power

Virtualization

2篇

RealTime OS

3篇

Motion Control

3篇

AI

目录

评论 23

被折叠的  条评论

为什么被折叠?

到【灌水乐园】发言

查看更多评论

添加红包

祝福语

请填写红包祝福语或标题

红包数量

红包个数最小为10个

红包总金额

红包金额最低5元

余额支付

当前余额3.43元

前往充值 >

需支付:10.00元

取消

确定

下一步

知道了

成就一亿技术人!

领取后你会自动成为博主和红包主的粉丝

规则

hope_wisdom 发出的红包

实付元

使用余额支付

点击重新获取

扫码支付

钱包余额

0

抵扣说明:

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

余额充值

经济型EtherCAT运动控制器(十):EtherCAT总线快速入门 - 知乎

经济型EtherCAT运动控制器(十):EtherCAT总线快速入门 - 知乎切换模式写文章登录/注册经济型EtherCAT运动控制器(十):EtherCAT总线快速入门正运动技术做最好用的运动控制 — www.zmotion.com.cn本节主要介绍XPLC006E多轴经济型EtherCAT总线运动控制器控制EtherCAT总线驱动器的方法,分别介绍硬件接线方法,控制器与EtherCAT总线驱动器如何通讯,EtherCAT总线驱动器相关参数的配置,EtherCAT总线初始化操作,以及初始化成功以后的运动控制。一、XPLC006E功能简介XPLC006E是正运动运动控制器推出的一款多轴经济型EtherCAT总线运动控制器,XPLC系列运动控制器可应用于各种需要脱机或联机运行的场合。XPLC006E自带6个电机轴,最多12轴运动控制(含虚拟轴数),支持12轴直线插补、电子凸轮、电子齿轮、同步跟随、虚拟轴设置等功能。XPLC006E支持多任务同时运行,同时可以在PC上直接仿真运行,编程方式多种可选,支持ZDevelop软件的Basic/PLC梯形图/HMI组态和常用上位机软件编程。XPLC006E只支持EtherCAT总线轴,不支持脉冲轴和编码器轴。采用EtherCAT总线与驱动器通讯,1ms的刷新周期。XPLC006E支持PLC、Basic、HMI组态三种编程方式。PC上位机API编程支持C#、C++、LabVIEW、VB、matlab、Qt、Linux、.Net、iMAC、Python、 ROS等接口。→此款产品有XPLC004E、XPLC006E、XPLC008E三个不同轴数的型号可选。二、XPLC864E功能简介XPLC864E在XPLC006E的功能基础上做了升级(即上节介绍的XPLC006E的功能都支持),部分资源空间优于XPLC006E,使用方法基本一致,不同之处在于XPLC864E,硬件支持32点输入、32点输出、2个ADC、2个DAC,支持脉冲轴和总线轴混合使用,总实轴轴数为8,除了带EtherCAT接口之外,输出口硬件上可配置为8个轴的脉冲方向信号输出,另带两路编码器输入,可由输入口配置XPLC864E支持PLC、Basic、HMI组态三种编程方式。PC上位机API编程支持C#、C++、LabVIEW、VB、matlab、Qt、Linux、.Net、iMAC、Python、 ROS等接口。三、通讯接线1.EtherCAT总线接线使用一根网线将XPLC006E控制器的“EtherCAT总线端口”与“伺服驱动器的EtherCAT总线端口”相连即可。注意:伺服驱动器的EtherCAT接口有两个,有些驱动器这两个口可以随意接,有些分为“EtherCAT IN”和“EtherCAT OUT”,IN口接上一级设备,OUT口接下一级设备,二者不能混用,要注意连接顺序。多轴控制时伺服驱动器的EtherCAT OUT口再连接下一级驱动设备的EtherCAT IN口,依此类推。slot槽位编号、node节点编号和驱动器编号规则如上图所示,EtherCAT总线接口的槽位号默认是0,节点编号按照与控制器的连接先后顺序从0开始依次编号,驱动器编号则是只给带电机设备编号,其他类型设备忽略,也是按连接顺序从0开始编号,这些编号在总线指令中将会用到。硬件接线完成还需运行总线初始化程序才能与驱动器通讯,初始化模板程序参见下文。注意:使用EtherCAT总线扩展模块时,也要执行总线初始化操作,再映射IO的编号后才可操作扩展IO。2.控制器与电脑连接控制器与电脑可以通过串口或网口连接,下面以网口连接例展开说明。先将控制器与电脑用一根网线连接好,接通控制器的电源,再打开ZDevelop编程软件,点击菜单栏“控制器”→“连接”,打开“连接到控制器”窗口。通过“连接到控制器”窗口,可以快速查看本机IP,对比控制器与电脑是否处于同一网段。IP地址列表下拉选择时,会自动查找当前局域网可用的控制器IP地址(控制器上电POWER灯和RUN灯亮的时候就能查找到该控制器的IP地址)。同一个网络有多个控制器的时候,IP的下拉列表若没有显示目标控制器的IP地址,可以采取IP扫描来查看当前所有可用的控制器IP地址,扫描完成之后确定关闭此窗口,重新在IP下拉列表选择。选择正确的IP地址,点击连接之后,连接成功或失败均有信息提示。控制器出厂的缺省IP地址为192.168.0.11,“连接到控制器”窗口能显示出本机IP地址,请注意设置有线网卡与无线网卡各自的IP。电脑需要设置IP地址与控制器IP处于同一网段才能连接,即四段的前三段要相同,最后一段不同才能通讯。若控制器与电脑不处于同一网段,则需要修改控制器或电脑其中之一的IP地址,使二者处于同一网段。若控制器IP地址遗忘,可通过网口连接控制器,再获取控制器IP。四、EtherCAT总线驱动器通讯说明1.通讯周期使用EtherCAT伺服驱动器时需要保证控制器与伺服周期一致才可正常通讯使用。EtherCAT伺服驱动器一般支持不同周期,通讯周期主要有250us,500us,1ms,2ms,4ms,连接时自动匹配控制器周期,不需要设置,当通讯周期无法自动匹配时,通讯失败,通过修改控制器周期解决(SERVO_PERIOD指令或升级固件修改)。控制器一般默认为1ms,使用SERVO_PERIOD指令读取控制器周期。伺服周期越小,位置控制越精细,响应速度也更快。2.驱动器PDO设置驱动器的PDO是必要的配置,代表着当前驱动器包含的功能。PDO全名为(Process Data Object),指在EtherCAT总线网络中周期的进行主站与从站的数据交互的功能,可以看作一个数组空间,每个数组元素存放了不同的功能码,PDO在一个周期中执行这些功能码对应的操作,这些功能码就叫做数据字典,数据字典用4位16进制数来表示。RxPDO:主站传送数据给从站。TxPDO:从站传送数据给主站。EtherCAT总线上控制器为主站,伺服驱动器为从站。如6040h控制字(用于控制伺服轴的使能、启动、停止、报警、复位等运行状态),每个数据字典Index可包含32个子字典Sub-Index。数据字典的功能和初始值查看驱动器手册的描述。数据字典的编号及功能是协议本身就确定好的,用户只需按照数据字典的描述设置数据字典的bit位,所有的标准EtherCAT设备都使用一套数据字典。松下A6B伺服驱动器的EtherCAT相关说明内容可查看松下文档《技术资料-EtherCAT通讯规格篇》。EtherCAT初始化过程中必须进行驱动器PDO配置,“DRIVE_PROFILE”指令配置驱动器的PDO列表,目前提供约20几种配置选择,每种配置包含哪些数据字典查看该指令说明确认,如下图,具体内容可以在《ZBasic编程手册》中查看。DRIVE_PROFILE=-1表示驱动器的内置缺省PDO列表,驱动器内置PDO列表包含哪些数据字典需要查看驱动器手册。DRIVE_PROFILE已有的配置不能满足需求就自定义PDO,采用SDO相关指令操作数据字典配置驱动器需要的PDO。驱动器的相关参数修改,同样使用SDO指令读写对应的数据字典进行配置或通过驱动器软件修改。SDO指令包含数据字典读取“SDO_READ”、“SDO_READ_AXIS”和数据字典写入“SDO_WRITE”、“SDO_WRITE_AXIS”。(1)数据字典读取语法SDO_READ (槽位号, 设备编号, 数据字典编号, 数据字典子编号, 数据类型, 读取数据存储TABLE位置)SDO_READ_AXIS (轴号, 数据字典编号, 数据字典子编号, 数据类型, 读取数据存储TABLE位置)(2)数据字典写入语法SDO_WRITE (槽位号, 设备编号, 数据字典编号, 数据字典子编号, 数据类型, 写入数据值)SDO_WRITE_AXIS (轴号, 数据字典编号, 数据字典子编号, 数据类型, 写入数据值)自定义PDO的配置方法请咨询正运动的销售工程师或者技术工程师。3.驱动器参数设置可使用驱动器软件修改,或控制器端操作SDO指令修改。修改驱动器参数先连接驱动器,可选USB线或WLAN连接驱动器,使用USB线连接电脑与驱动器端的X1端口,给驱动器上电。打开松下驱动器软件PANATERM,弹出“选择与驱动器通信”窗口,选择与驱动器通过USB连接后,自动获取到驱动器信息显示在窗口内,点击OK连接成功,就能对驱动器进行设置。点击菜单栏“显示”→“对象编辑器”,打开如下窗口,找到需要设置的数据字典,在“Setting Value”一栏直接修改数据字典的内容。修改完成将参数传送给驱动器,并写入驱动器的EEPROM,驱动器再次上电后参数生效。例:设置UNITS脉冲当量,即设置电机转一圈需要发送多少个脉冲。SPEED速度、ACCEL加速度、DECEL减速度和运动指令等都是以UNITS为基本单位。如上图,通过数字字典6091h设置电子齿轮比,6091h-01h设置电子齿轮比分子,6091h-02h设置电子齿轮比分母,此时,电子齿轮比=1/1,6092h-01h设为10000表示给电机发10000个脉冲能使电机旋转一圈,对应的脉冲当量UNITS=10000,MOVE(2)表示给电机发送20000个脉冲,此时电机转两圈。或者使用SDO指令读写数据字典修改参数。修改完成使用驱动器软件读取6092h-01h的值为10000。示例:SDO_WRITE(Bus_Slot,iNode,$6091,1,7,1) '电子齿轮比分子

SDO_WRITE(Bus_Slot,iNode,$6091,2,7,1) '电子齿轮比分母

SDO_WRITE(Bus_Slot,iNode,$6092,1,7,10000) '电机一圈脉冲数4.驱动器IO信号若要使用驱动器的IO口,才会涉及到驱动器的IO映射操作,否则忽略。当驱动器产生IO报警时,可根据驱动器手册的提示,修改IO的设定值。驱动器自身有输入信号,作用为保护信号,默认使能状态,若不接入外部信号,驱动器就会保护报错,调试阶段可以关闭这些信号方便调试,将输入值设置为0即可,需要使用驱动器IO时要对驱动器的IO编号映射后才能使用,后续根据实际需求接入实际信号。点击驱动器软件PANATERM主界面的“参数”按钮打开下方窗口,选中要修改的IO信号后,在“设定值”一栏修改。驱动器IO映射需要PDO包含数据字典60FDh,然后使用DRIVE_IO指令设置驱动器IO地址,映射的编号范围不要与总线上的其他设备的IO编号重复。DRIVE_IO (轴号)=输入输出IO起始编号。示例:DRIVE_PROFILE(iAxis) = 5 '设定对应的带IO映射的PDO模式

DRIVE_IO(iAxis) = i_IoNum '设定驱动器输入/输出IO起始编号5.参数写入驱动器可使用驱动器软件修改,或控制器端操作SDO指令修改。驱动器的数据字典参数或其他的参数设置完成后,先点击“传送”将修改的全部参数传入驱动器,再点击EEP,将参数写入驱动器的EEPROM,给驱动器重新上电后修改的参数生效,图片上值修改了输入参数,在上图参数一览中可参看多中类别的参数并修改。6.驱动器轴号映射EtherCAT总线驱动电机设备连上控制器之后,驱动器轴号需要使用指令映射绑定。EtherCAT总线上连接的设备的设备号按照连接顺序从0开始自动编号,驱动器编号也是按连接顺序给驱动器设备自动从0开始编号的,只算总线上的驱动器设备,其他设备是没有驱动器编号的。EtherCAT总线上连接的驱动器需要使用指令映射驱动器的轴号,使用AXIS_ADDRESS 指令映射,映射完成之后才能使用BASE指令选择驱动器轴号,发送脉冲,控制驱动器所连的电机运行。轴映射写在总线初始化程序中,总线扫描之后,开启总线之前。语法:AXIS_ADDRESS(轴号)=(槽位号<<16)+驱动器编号+1EtherCAT总线的槽位号是0。轴号为驱动器映射的目标轴号,映射时每个驱动器的轴号不重复,指向空闲轴号即可。示例:AXIS_ADDRESS (6)=(0<<16)+0+1 '第一个ECAT驱动器,驱动器编号0,绑定为轴6

AXIS_ADDRESS (7)=(0<<16)+1+1 '第二个ECAT驱动器,驱动器编号1,绑定为轴7

AXIS_ADDRESS (8)=(0<<16)+2+1 '第三个ECAT驱动器,驱动器编号2,绑定为轴8

ATYPE(6)=65 '设置为ECAT轴类型,65-位置 66-速度 67-转矩

ATYPE(7)=65

ATYPE(8)=657.驱动器控制模式EtherCAT驱动器一般有三种控制模式,分别为CSP周期位置模式,CSV周期速度模式,CST周期力矩模式。提供ATYPE指令设置控制模式。CSP,CSV,CST模式的设置需要预先设置PDO,PDO同时包含下方数据字典时,即可直接修改ATYPE数值进行模式切换。驱动器默认PDO列表内置有哪些数据字典需要查看驱动器手册确定。(1)当PDO包含607Ah时,ATYPE可设置为65,周期位置模式,此时使用运动指令控制电机运动。(2)当PDO包含60FFh时,ATYPE可设置为66,周期速度模式,此时使用DAC指令控制电机以设置值的速度运行,速度单位有两个,脉冲数/S和R/MIN,有驱动器确定,使用时先给较小的数值,观察电机速度情况,再加大。(3)当PDO包含6071h时,ATYPE可设置为67,周期力矩模式,此时使用DAC指令控制电机以设置值的力矩运行,DAC值范围0-1000,对应0-100%的6071设置值,比如DAC=10,此时电机力矩=1%的6071h值。注意:速度模式和力矩模式切换时,先将DAC=0后,再修改ATYPE,防止出现事故。A.位置模式:ATYPE=65将DRIVE_PROFILE配置为带位置的模式1,ATYPE=66,执行总线初始化程序后,设置轴的UNITS、SPEED等运行参数,使用运动指令给电机发脉冲控制轴的运行,注意试运行时SPEED的值不要设置过大。位置模式也是实际过程中用的较多的一种模式,运行效果参见后续章节。B.速度模式:ATYPE=66将DRIVE_PROFILE配置为带速度的模式22,ATYPE=66,执行总线初始化程序后,在线命令栏发送DAC指令即可控制电机运行,如下图,DAC=5000表示电机以每秒5000个脉冲的速度持续运行,DAC命令发送后电机一直运行,要提高运行速度将DAC的值加大,DAC的值太小电机会克服不了摩擦力无法转动。注意:出于安全因素考虑,DAC不要设置过大,先设置一个较小值,观察电机运行情况后慢慢往上增加。此模式下停止电机在线命令发送DAC=0即可,或按下软件的紧急停止按钮。C.力矩模式:ATYPE=67将DRIVE_PROFILE配置为带力矩的模式30,ATYPE=67,执行总线初始化程序后,在线命令栏发送DAC指令即可控制电机运行。如下图,DAC=30,当前驱动器为0.03的力矩,DAC等于1000时表示100%力矩。要提高运行速度将DAC的值加大,DAC的值太小电机会克服不了摩擦力无法转动。注意:出于安全因素考虑,DAC不要设置过大,先设置一个较小值,观察电机运行情况后慢慢往上增加。此模式下停止电机在线命令发送DAC=0即可,或按下软件的紧急停止按钮。8.驱动器报警观察驱动器上LED面板上是否有报错信息,报错会显示错误码,根据驱动器手册排查错误,修正后将报警清零。打开驱动器软件的警报窗口,也能看当前驱动器是否有警报,或查询历史警报。警报窗口历史警报信息初始化过程中按轴号清除驱动器的错误,重复调用DRIVE_CLEAR指令清除多个驱动器错误。语法:DRIVE_CLEAR(模式值)模式值0-清除当前告警,1-清除历史告警,2-清除外部输入告警。示例:BASE(i)

DRIVE_CLEAR(0) '清除驱动器错误

DELAY 50

DATUM(0) '清除控制器轴状态错误"

DELAY 1009.驱动器回零EtherCAT总线可使用控制器提供的回零方式DATUM(mode),mode模式值选择查看ZBasic编程手册的DATUM指令。EtherCAT总线也可以使用驱动器本身的回零模式。驱动器本身回零使用DATUM(21,mode2)指令,mode2模式值要查驱动器手册数据字典6098h回零模式,如下图所示,mode2填入对应Value值,mode2缺省值为0,也是驱动器回零模式,注意此时的原点限位等信号要接在驱动器上,所以要使用驱动器回零时需要对驱动器的IO进行映射。示例:初始化完成后再运行驱动器回零程序。BASE(iAxis) '按驱动器轴号逐个回零

AXIS_STOPREASON = 0

SPEED = 100 '回零速度

CREEP = 10 '反找速度

ACCEL = 1000

DATUM(21,2) '驱动器回零模式value=2

WAIT IDLE

IF AXIS_STOPREASON = 0 THEN

?"回零成功"

ELSE

?"回零失败" ,"停止原因:",AXIS_STOPREASON,"状态字0X",HEX(DRIVE_STATUS)

ENDIF10.EtherCAT总线驱动器参数设置说明https://www.zhihu.com/video/1541019581703720960五、EtherCAT总线初始化EtherCAT总线初始化操作是控制器与EtherCAT总线驱动器通讯的重要步骤,也是第一步,初始化成功表示着二者成功建立了通讯连接,之后才可顺利进行运动控制和读写驱动的参数。1.初始化基本流程按照前面的步骤接好线,给EtherCAT伺服驱动器和控制器上电,使用ZDevelop软件连接控制器,EtherCAT总线使用一段程序来初始化,将初始化程序下载到控制器运行之后,才能设置轴参数和执行运动指令控制伺服电机的运动。初始化程序中包含WDOG=1开总使能,和AXIS_ENABLE(轴号) = 1开单轴使能,使能前用手可以转动点击,使能完成后便旋转不动,需要给电机发送脉冲才能使其转动。2.初始化模板程序(1)主要初始化程序'用户使用的时候只需要设置程序头的四个常量的值即可。程序其他地方不用改动。分别设置起始的脉冲轴号,和使用的脉冲轴个数,总线轴的起始映射轴号,和总线轴的个数。

'****************ECAT总线初始化

global CONST PUL_AxisStart = 0 '本地脉冲轴起始轴号

global CONST PUL_AxisNum = 0 '本地脉冲轴轴数量

global CONST Bus_AxisStart = 0 '总线轴起始轴号

global CONST Bus_NodeNum = 1 '总线配置节点数量,用于判断实际检测到的从站数量是否一致

global CONST BUS_TYPE = 0 '总线类型。可用于上位机区分当前总线类型

global CONST Bus_Slot = 0 '槽位号0(单总线控制器缺省0)

global MAX_AXISNUM '最大轴数

MAX_AXISNUM = SYS_ZFEATURE(0)

global Bus_InitStatus '总线初始化完成状态

Bus_InitStatus = -1

global Bus_TotalAxisnum '检查扫描的总轴数

delay(3000) '延时3S等待驱动器上电,不同驱动器自身上电时间不同,具体根据驱动器调整延时

?"总线通讯周期:",SERVO_PERIOD,"us"

Ecat_Init() '初始化ECAT总线

while (Bus_InitStatus = 0)

Ecat_Init()

wend

END

'************************ECAT总线初始****************************************

'初始流程: slot_scan(扫描总线) -> 从站节点映射轴/io -> SLOT_START(启动总线) -> 初始化成功

'****************************************************************************

global sub Ecat_Init()

local Node_Num,Temp_Axis,Drive_Vender,Drive_Device,Drive_Alias

RAPIDSTOP(2)

WAIT IDLE(0)

for i=0 to MAX_AXISNUM - 1 '初始化还原轴类型

AXIS_ENABLE(i) = 0

atype(i)=0

AXIS_ADDRESS(i) =0

DELAY(10) '防止所有驱动器全部同时切换使能导致瞬间电流过大

next

Bus_InitStatus = -1

SLOT_STOP(Bus_Slot)

delay(200) '延时时间可以按需调整,确保驱动器已上电可以等待EtherCAT到位

slot_scan(Bus_Slot) '扫描总线

if return then

?"总线扫描成功","连接从站设备数:"NODE_COUNT(Bus_Slot)

if NODE_COUNT(Bus_Slot) <> Bus_NodeNum then '判断总线检测数量是否为实际接线数量

?""

?"扫描节点数量与程序配置数量不一致!" ,"配置数量:"Bus_NodeNum,"检测数量:"NODE_COUNT(Bus_Slot)

Bus_InitStatus = 0 '初始化失败。报警提示

'return

endif

'"开始映射轴号"

for Node_Num=0 to NODE_COUNT(Bus_Slot)-1 '遍历扫描到的所有从站节点

Drive_Vender = NODE_INFO(Bus_Slot,Node_Num,0) '读取驱动器厂商

Drive_Device = NODE_INFO(Bus_Slot,Node_Num,1) '读取设备编号

Drive_Alias = NODE_INFO(Bus_Slot,Node_Num,3) '读取设备拨码ID

if NODE_AXIS_COUNT(Bus_Slot,Node_Num) <> 0 then '判断当前节点是否有电机

for j=0 to NODE_AXIS_COUNT(Bus_Slot,Node_Num)-1 '根据节点带的电机数量循环配置轴参数(针对一拖多驱动器)

Temp_Axis = Bus_AxisStart + Bus_TotalAxisnum '轴号按NODE顺序分配

'Temp_Axis = Drive_Alias '轴号按驱动器设定的拨码分配(一拖多需要特殊处理)

base(Temp_Axis)

AXIS_ADDRESS(Temp_Axis)= (Bus_Slot<<16)+ Bus_TotalAxisnum + 1 '映射轴号

ATYPE=65 '设置控制模式 65-位置 66-速度 67-转矩

DRIVE_PROFILE=-1 '配置为驱动器内置PDO列表,可改为1,-1,等参数 '配置为驱动器内置PDO列表

' Sub_SetDriverIo(Drive_Vender,Temp_Axis,128 + 32*Temp_Axis) '映射驱动器IO IO映射到控制器IO32-以后每个驱动器间隔32点

' Sub_SetNodePara(Node_Num,Drive_Vender,Drive_Device,j) '设置特殊总线参数

disable_group(Temp_Axis) '每轴单独分组

Bus_TotalAxisnum=Bus_TotalAxisnum+1 '总轴数+1

next

else 'IO扩展模块

Sub_SetNodeIo(Node_Num,Drive_Vender,Drive_Device,1024 + 32*Node_Num) '映射扩展模块IO

endif

next

?"轴号映射完成","连接总轴数:"Bus_TotalAxisnum

delay(200)

SLOT_START(Bus_Slot) '启动总线

if return then

'?"开始清除驱动器错误"

for i= Bus_AxisStart to Bus_AxisStart + Bus_TotalAxisnum - 1

BASE(i)

DRIVE_CLEAR(0)

DELAY 50

'?"驱动器错误清除完成"

datum(0) '清除控制器轴状态错误"

wa 100

wdog=1 '使能总开关

'"轴使能"

AXIS_ENABLE=1

next

Bus_InitStatus = 1

?"轴使能完成"

'本地脉冲轴配置

for i = 0 to PUL_AxisNum - 1

base(PUL_AxisStart + i)

AXIS_ADDRESS = (-1<<16) + i

ATYPE = 4

next

?"总线开启成功"

else

?"总线开启失败"

Bus_InitStatus = 0

endif

else

?"总线扫描失败"

Bus_InitStatus = 0

endif

end sub(2)驱动器IO映射(需要使用驱动器IO时才映射,否则不用映射)‍' ************************总线驱动IO映射**************************************

'通过DRIVE_IO指令映射驱动器对象字典中60FD,60FE输入输出状态,要设置正确的DRIVE_PROFILEE或者POD后才可以正常映射

'DRIVE_PROFILE模式包含60FD/60FE

'iAxis - 轴号 iVender - 驱动器类型 i_IoNum - 输入输出起始编号

' **************************************************************************

global sub Sub_SetDriverIo(iVender,Iaxis,i_IoNum)

if iVender = $66f then '松下驱动器

DRIVE_PROFILE(iAxis) = 5 '设定对应的带IO映射的PDO模式

DRIVE_IO(iAxis) = i_IoNum

REV_IN(iAxis) = i_IoNum '负限位应60FD BIT0

FWD_IN(iAxis) = i_IoNum + 1 '正限位先对应60FD BIT1

DATUM_IN(iAxis) = i_IoNum + 2 '原点先对应60FD BIT2

INVERT_IN(i_IoNum,ON) '特殊信号有效电平反转

INVERT_IN(i_IoNum + 1,ON)

INVERT_IN(i_IoNum + 2,ON)

endif

end sub(3)扩展模块IO映射(连接了扩展模块才设置)' ***********************总线IO扩展模块映射**************************************

'通过NODE_IO(Bus_Slot,Node_Num)分配模块IO起始地址

' *******************************************************************************

global sub Sub_SetNodeIo(iNode,iVender,iDevice,i_IoNum)

if iVender = $41B and iDevice = $130 then '正运动EIO1616MT

NODE_IO(Bus_Slot,iNode) = i_IoNum

endif

end sub(4)特殊参数配置' ********************************从站节点特殊参数配置********************************

'通过SDO方式修改对应对象字典的值修改从站参数(具体对象字典查看驱动器手册)

' ******************************************************************************************************

global sub Sub_SetNodePara(iNode,iVender,iDevice,Iaxis)

if iVender = $41B and iDevice = $1ab0 then '正运动24088脉冲扩展轴

SDO_WRITE(Bus_Slot,iNode,$6011+Iaxis*$800,0,5,4) '设置扩展脉冲轴ATYPE类型

SDO_WRITE(Bus_Slot,iNode,$6012+Iaxis*$800,0,6,0) '设置扩展脉冲轴INVERT_STEP脉冲输出模式

NODE_IO(Bus_Slot,iNode) = 32 + 32*iNode '设置240808上IO的起始映射地址

elseif iVender = $66f then '松下驱动器

SDO_WRITE(Bus_Slot,iNode,$3741,0,3,0) '以拨码为ID

SDO_WRITE(Bus_Slot,iNode,$3401,0,4,$10101) '正限位电平 $818181

SDO_WRITE(Bus_Slot,iNode,$3402,0,4,$20202) '负限位电平 $828282

SDO_WRITE(Bus_Slot,iNode,$6091,1,7,1) '电子齿轮比分子

SDO_WRITE(Bus_Slot,iNode,$6091,2,7,1) '电子齿轮比分母

SDO_WRITE(Bus_Slot,iNode,$6092,1,7,10000) '电机一圈脉冲数

SDO_WRITE(Bus_Slot,iNode,$607E,0,5,0) '电机正转0 反转224

SDO_WRITE(Bus_Slot,iNode,$6085,0,7,4290000000) '异常减速度

'SDO_WRITE(Bus_Slot,iNode,$1010,1,7,$65766173) '写EPPROM(写EPPROM后驱动器需要重新上电)

'?"写EPPR0M OK 请断电重启"

endif

end subEtherCAT初始化成功后会打印信息提示,如下。若初始化失败也会打印信息提示。3.总线节点状态查看EtherCAT总线上连接的设备信息有如下三种查看方法。查看总线状态的前提是初始化操作成功,否则无法查看。(1)在菜单栏“控制器”→“控制器状态”窗口查看“槽位0节点”。(2)在菜单栏“调试”→“总线状态诊断”打开如下窗口查看控制器总线槽位接口的设备信息。(3)还可以通过在线命令发送“?*EtherCAT”打印EtherCAT总线上的全部设备信息。4. EtherCAT总线驱动器控制效果初始化成功后,将各个总线轴依此回零,配置好轴参数之后,就可以使用指令让总线轴按需求动作。在程序中写入运动指令、在线命令发送运动指令或使用“手动运动”窗口控制电机运行。示波器采集轴参数波形:使用“手动运动”功能快速手动操作电机运动,运动前先设置左侧轴参数。5.EtherCAT总线初始化演示https://www.zhihu.com/video/1541021208305180672本次,正运动技术经济型EtherCAT运动控制器(十):EtherCAT总线快速入门,就分享到这里。本文由正运动技术原创,欢迎大家转载,共同学习,一起提高中国智能制造水平。文章版权归正运动技术所有,如有转载请注明文章来源。编辑于 2022-08-11 11:23CAN总线​赞同 6​​添加评论​分享​喜欢​收藏​申请

EtherCAT从站学习笔记——4.1从站软件初始化 - 知乎

EtherCAT从站学习笔记——4.1从站软件初始化 - 知乎首发于EtherCAT从站学习切换模式写文章登录/注册EtherCAT从站学习笔记——4.1从站软件初始化鹏飞亿里探索宇宙规律,施加适当激励。4.1.1 定时器中断4.1.2 FSMC初始化4.1.3 LAN9252复位及校验4.1.4 MCU寄存器和ESC初始化4.1.5 ECAT协议相关变量初始化发布于 2021-12-23 17:28总线工业控制伺服系统​赞同 4​​1 条评论​分享​喜欢​收藏​申请转载​文章被以下专栏收录EtherCAT从站学习EtherCAT工业现场总线,伺服系统

EtherCAT (学习笔记)-CSDN博客

>

EtherCAT (学习笔记)-CSDN博客

EtherCAT (学习笔记)

最新推荐文章于 2024-01-16 16:03:36 发布

pwl999

最新推荐文章于 2024-01-16 16:03:36 发布

阅读量6.7w

收藏

1.3k

点赞数

209

分类专栏:

Motion Control

文章标签:

ethercat

版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。

本文链接:https://blog.csdn.net/pwl999/article/details/109397700

版权

Motion Control

专栏收录该内容

3 篇文章

75 订阅

订阅专栏

文章目录

1. 简介1.1 运动控制1.2 实时以太网1.3 EtherCAT

2. EtherCAT原理介绍2.1 实时性2.2 端口管理2.3 EtherCAT网络拓扑2.4 EtherCAT网络协议栈2.5 EtherCAT数据帧格式2.6 EtherCAT设备寻址方式2.7 分布式时钟(Distribute Clock)2.8 应用层(Application Layer)2.9 设备配置(Device Profile)2.10 主站设计2.11 从站设计

3. 应用层(Application Layer)3.13.2 EtherCAT Slave Implementation (从站实现)

4. 应用实例4.1 主站操作系统(RTAI)4.2 主站EtherCAT程序(IGH)4.3 主站应用开发(LinuxCNC)4.4 ET12004.5 从站程序设计4.6 实验测试

5. 工具5.1 TwinCAT5.2 LinuxCNC5.3 开源的EtherCAT Master

参考资料

1. 简介

1.1 运动控制

运动控制系统处理机械系统中一个或多个坐标上的运动以及运动之间的协调,实现精确的位置控制、速度和加速度控制、转矩和力的控制等。

单轴的运动控制系统可分为开环、半闭环和闭环伺服系统。

多轴运动控制系统可以分成点位控制、连续轨迹控制和同步控制。

典型的运动控制系统,从结构上看,包括上位机控制窗口、运动控制器、驱动器、电机以及测量反馈系统等几个部分组成:

1.2 实时以太网

实时以太网(RTE, Real Time Ethernet)是常规以太网技术的延伸,以便满足工业控制领域的实时性数据通信要求。目前,国际上有多种实时工业以太网协议,根据不同的实时性和成本的要求使用不同的原理,大致可以分为以下三类:

(1)基于TCP/IP实现的工业以太网仍使用TCP/IP协议栈,通过上层合理的控制来解决通信过程中的不确定因素。这种方式具有较高的传输速率,适应于大量数据通信,更适合作为网关和交换设备的应用,不能实现很好的实时性。常用的通信控制方法有:合理调度,减少冲突的概率;定义帧数据的优先级,为实时数据分配最高优先级;使用交换式以太网等。使用这种方式的典型协议有Modbus/TCP和Ethernet/IP等。(2)基于以太网实现的工业以太网仍然使用标准的、未修改的以太网通信硬件,但是不适用TCP/IP来传输数据。它使用特定的报文进行传输。TCP/IP协议栈能使用时间控制层分发一定的时间片来利用网络资源。该类协议主要有Ethernet Powerlink, EPA C Ethernet for Plant Automation ), PROFINET IRT等。通过这种方式可以实现较好的实时性。(3)通过修改以太网协议实现的工业以太网,实现应答时间小于lms的硬实时,从站使用特定的硬件实现。由实时MAC控制实时通道内的通信,从根本上避免报文间的冲突。非实时数据依然能在通道中按原协议通信。典型协议有德国倍福的EtherCAT、西门子的PROFINET IRT等。

1.3 EtherCAT

德国BECKHOFF自动化公司于2003年开发出的EtherCAT实时以太网技术突破了其他以太网解决方案的系统限制:通过该项技术,无需接受以太网数据包,将之解码,然后再将过程数据复制到各个设备。

2. EtherCAT原理介绍

EtherCAT从站设备在报文经过其节点时读取相应的数据报文,同样输入数据也是在报文经过时插入到报文中。整个过程报文只有几纳秒的时间延迟,实时性获得极大提高

EtherCAT作为一种工业以太网总线,充分利用了以太网的全双工特性。使用主从通信模式,主站发送报文给从站,从站从中读取数据或将数据插入至从站。

主站可使用标准网卡实现,从站选用特定的EtherCAT从站控制器ESC(EtherCAT Slave Controller)或者FPGA实现,

主要完成通信和控制应用两部分功能,EtherCAT物理层选用标准以太网物理层器件。

从站能将收到的报文直接处理,并读取或插入有关的数据,再将报文发送给下一个EtherCAT从站。最末尾的EtherCAT从站返回处理完全的报文,然后由第一个从站发送给主站。整个通信过程充运行于全双工模式下,TX线发出的报文又通过RX线返回给主站:

2.1 实时性

数据包刷新时间的计算

数据包中所有从站的 Process Datarocess Datarocess Data rocess Data rocess Data rocess Datarocess Data数据 决定了数据包的长度。

一个Ethernet thernet数据包最小84 字节,不足 84 字节会补齐84 字节。由于EtherCAT Frame中有一些公共开销, 84 字节的数据包最多含18字节的过程数据。考虑到数据包必须经过每个从站两次才能回到主站,所数据包以固定的波特率100 Mbps在网络上传输两次的时间 这就是它的总线刷新时间 。

1.基于这个原则,以包含 1000路开关量信号的数据包为例,计算过程如下:

过程数据长度:1000/8=125Bytes

数据包长度:84-18+125=191Bytes=191*8 Bit= 1528 Bit

总线刷新时间:(1528Bit/100,000,000 Bps)*2=15.28us * 2 = 30.56us

注意,通常的数字量模块, 都是单纯的输出或者输入模块,而不是混合模块。所以 1000 个数字 量信号, Frame 中就会分配 125 字节。

2.再以包含100个EtherCAT伺服驱动器过程数据的EtherCAT数据包为例,假如每个伺服的过程数据只包括控制字(2字节)、状态字(2字节)、目标位置(4字节)、实际位置(4字节),其总线刷新时间的计算过程如下:

过程数据长度:100*(2+4)=600 Byte。

数据包长度:84-18+600=1266 Byte =671*8 Bit =5328 Bit

总线刷新时间:(5328 Bit/100,000,000 Bps) *2=100.656µs

注意,Frame中只为一个伺服分配了6个字节,这是因为根据Beckhoff公司的控制软件TwinCAT中关于EtherCAT的默认设置是从站的Input和Output使用同一数据段,所以数据包进入伺服驱动器时该数据段存放的是控制字和目标位置,而出来时则存放伺服的状态字和实际位置。

以上两个数据30.56µs和101.28 µs就是EtherCAT官方宣传资料中,刷新1000个数字量需要30µs,刷新100个伺服轴只需要100µs的数据由来。实际上,根据从站的类型、是否包含分布时钟、是否启用时钟同步、时钟同步的参数设置不同,在数据包中有可能还会增加8-12字节用于传输同步时钟值,以及相应的为每个从站增加一个Bit的标记等等,会增加几个微秒的刷新时间,暂且忽略不计。

以上计算只是数据包传输需要的理论时间,实际上,数据包经过每个从站会产生短暂的硬件延时。100M超五类网线接口的从站延时约1µs,而EBus的IO模块类从站延时约0.3µs,在毫秒级以下的控制任务中如果从站数量较多,这个时间也相当可观,计算刷新周期时应该考虑进去。

2.2 端口管理

一个从站控制器最多可以有4个端口,如果一个端口关闭了,控制器主动连接下一个端口。端口可以随着EtherCAT命令主动的打开或者关闭。逻辑端口设置决定了EtherCAT帧的处理和发送顺序。

2.3 EtherCAT网络拓扑

所有数据帧在网络中以一种“逻辑闭环”的方式传播,与网络的硬件拓朴无关,无论它是链式、菊花链、星形还是树形拓朴。

所有数据帧都由Master发出,以事前严格定义的顺序,依次经过网络上的所有从站,走过一个完整的闭环后回到Master 。 所有数据帧通过从站中的 EtherCAT Processing Unit (EtherCAT处理单元)只有 1 次。

线型拓扑:

任意数目的设备成线型连接 最多65535个设备

数据处理链型拓扑 带有分支线的数据处理链型拓扑 树型拓扑: 实时星型拓扑: 冗余线缆

选择冗余电缆可以满足快速增长的系统可靠性需求,以保证设备更换时不会导致网络瘫痪。您可以很经济地增加冗余特性,仅需在主站设备端增加使用一个标准的以太网端口(无需专用网卡或接口),并将单一的电缆从总线型拓扑结构转变为环型拓扑结构即可(见图7)。当设备或电缆发生故障时,也仅需一个周期即可完成切换。因此,即使是针对运动控制要求的应用,电缆出现故障时也不会有任何问题。

EtherCAT也支持热备份的主站冗余。由于在环路中断时EtherCAT从站控制器芯片将立刻自动返回数据帧,一个设备的失败不会导致整个网络的瘫痪。例如,拖链设备可以配置为分支拓扑以防线缆断开。

2.4 EtherCAT网络协议栈

CoE(Can over EtherCAT)

PDO(Process Data Object 过程数据对象)

SDO(Service Data Object 服务数据对象)

PDI(Process Data Interface 过程数据接口)(uC, SSI, I/O)

ESM(EtherCAT State Machine)

ESI(EtherCAT Slave Information) (XML device description)

ENI(EtherCAT Network Information)

CTT(Conformance Test Tool 一致性测试工具)

SM(SyncManagers 同步管理器)

MDP(modular device description 模块化设备描述 )

2.5 EtherCAT数据帧格式

EtherCAT数据直接嵌入在以太网数据帧中进行传输,只是采用了一种特殊的帧类型,该类型为Ox88A4, EtherCAT数据帧结构如图所示:

EtherCAT数据包由数据头和数据实体两部分组成,EtherCAT数据头包含2个字节,每个数据包里面可以只包含一个EtherCAT子报文,也可以包含多个子报文;一个EtherCAT子报文对应着一个从站,因此一个EtherCAT数据包可以操作 多个EtherCAT从站,相应的数据长度在44-1498字节之间,EtherCAT数据帧结构定义: 类型 字段:

EtherCAT子报文结构定义:

地址区 字段

EtherCAT 寻址:

EtherCAT 通信的实现是通过由主站发送至从站的 EtherCAT 数据帧来完成对从站设备内部存储区的读写操作, EtherCAT 报文对 ESC 内部存储区有多种寻址操作方式,从而可以实现多种通信服务。EtherCAT 段内寻址有设备寻址和逻辑寻址两种方式。

设备寻址是面对一个从站进行读写操作。

逻辑寻址是面向过程的数据操作, 实现同一报文读写多个从站设备的多播功能。

具备全部寻址方式的从站称为完整性从站,只具备部分寻址方式的从站则称为基本从站。

命令 字段

不同命令通过信息传输系统最优化对所有存取方法的读写

WKC 字段

Working Counter。如果成功寻址了EtherCAT设备,并且成功执行了读操作,写操作或读/写操作,则工作计数器将递增。 可以为每个数据报分配一个工作计数器值,该值是根据预期报文通过所有设备数来设置的。 通过将工作计数器的预期值与所有设备通过后的实际值进行比较,主站可以检查EtherCAT数据报是否已成功处理。

同步管理器

2.6 EtherCAT设备寻址方式

在EtherCAT的每个子报文中,有32位空间用于对EtherCAT设备进行寻址。寻址方式有四种,分别为:

位置寻址

位置寻址方式是根据从站的连接顺序,即物理位置实现的。在报文头的32bit地址中,前16bit的Position用于存放地址值,Offset用于存放ESC逻辑寄存器或者内存地址。报文每经过一个从站设备,其Position中的地址值加1。当一个从站接收到EtherCAT报文后,如果报文中的地址值为0,则该报文就是这个从站要要接收的报文。

在上图中,如果需要总线上第8个设备响应报文,则主站需要将报文的地址设为0xFFF9,当报文经过第1个从站时,地址为0xFFF9,不等于0,第1个从站不会响应报文,报文地址加1,变为0xFFFA。当报文经过第2个从站时,地址为0XFFFA,不等于0,第2个从站不会响应该报文,报文地址加1,变为0xFFFB。以此类推,当报文到达第8个从站时,此时地址值为0x0000,当前从站将接收报文。

位置寻址(Position Address / Auto Increment Address)只应在启动EtherCAT系统时用于扫描现场总线,以后只能偶尔使用以检测新连接的从站。 如果由热连接或链接问题导致循环暂时关闭,使用位置寻址可能会出现问题。 在这种情况下位置地址被移位,并且,如错误寄存器的值到设备的映射变得不可能,因此不能定位故障链路。

节点寻址

在启动阶段,主站通常采用位置寻址方式对总线上的从站进行寻址,之后采用节点寻址方式。

在报文中,报文头的32bit地址,前16bit的Address用于存放站点地址值,Offset用于存放ESC逻辑寄存器或者内存地址。

在每个从站中站点地址保存在寄存器(0x0010) 中。

顺序寻址时,主站可以对每个从站的站点地址进行设置,也可以直接读取每个从站的的站点地址。

节点寻址方式的优点是,每个从站的地址与其在总线中的位置无关。在添加/删除从站,甚至是改变总线拓扑结构的时候都能对从站进行正确的访问。

上图是节点寻址方式的示意图。8个从站的地址与其在总线中的位置并没有关系。出于直观的目的,4台伺服驱动器的地址被设置为连续的,4个I/O模块的地址被设置为连续的,在实际中并没有这样的要求。

EtherCAT从设备可以有两个配置的站点地址,一个由主站分配(Configured Station Address),另一个存储在SII EEPROM,并且可以由从站应用程序更改(Configured Station Alias address)。

配置站点地址由主站在启动期间分配,并且不能由EtherCAT从站更改。 配置站别名地址存储在SIIEEPROM中,可由EtherCAT从站更改。 配置的站别名必须由主站启用。 如果节点地址(NodeAddress)与配置的站地址或配置的站点别名匹配,将执行相应的命令操作。

逻辑寻址

EtherCAT的第三种寻址方式是逻辑寻址,首先需要了解的是FMMU。

FMMU(Fieldbus Memory Management Units)

FMMU称为总线内存管理单元,它存在与从站芯片ESC中,负责对从站物理地址与主站逻辑地址进行翻译并建立映射关系。主站在总线启动过程中对FMMU进行配置,内容包括:

• 逻辑地址的起始地址

• 数据长度(按跨字节数计算)

• 逻辑地址的起始位

• 逻辑地址的终止位

• 从站物理地址的起始地址

• 从站物理地址的起始位

• 操作类型(只读、只写、读写)

• 使能

在报文中,使用报文头的32bit地址的全部,用来表示大小为4GB的逻辑地址空间。 以上图为例,FMMU将逻辑地址中0x00012345第2位开始的,到0x00012346以第2位终止的区域,与从站物理地址中0x0010第0位开始的区域进行映射。

当从站收到来自主站的报文时,会检查报文中的地址是否与FMMU中的地址相符,如果有,将根据操作类型进行读写操作。

这种寻址方式的优点是,在主站想对每个从站进行访问的时候,只需要对逻辑空间中的地址进行操作,而无须关心该地址对应的从站物理地址,减轻了主站的负担。

所有器件读取和写入相同的逻辑4 GB地址空间(EtherCAT数据报中的32位地址字段)。 从器件使用映射单元(FMMU,现场总线存储器管理单元)将数据从逻辑过程数据映像映射到其本地地址空间。 在启动期间,主器件配置每个从器件的FMMU。 从站使用FMMU的配置信息知道逻辑过程数据映像的哪些部分必须映射到哪个本地地址空间。

逻辑寻址支持逐位映射。 逻辑寻址是一种强大的机制,可以减少过程数据通信的开销,因此通常用于访问过程数据。

当从站设备收到的EtherCAT报文带有逻辑寻址标志位时,从站设备将检查自身是否有相应的FMMU单位地址与之匹配。

总结:EtherCAT使用三种方式对设备进行寻址,在启动过程中,使用顺序寻址方式为从站分配节点地址,然后通过节点寻址方式配置从站寄存器,将逻辑地址与从站物理地址进行映射,之后就可以使用逻辑寻址方式进行过程数据交换了。

Broadcast寻址

每个EtherCAT从站都被寻址。

使用广播寻址。 如果从站的预期是相同的,用于所有从站的初始化和检查所有从站的状态。每个从器件具有一个16位Local地址空间:

地址范围0x0000:0x0FFF专用于EtherCAT寄存器,

地址范围0x1000:0xFFFF用作过程数据RAM

通过EtherCAT数据报的偏移字段寻址,过程数据。

2.7 分布式时钟(Distribute Clock)

通过分布式时钟精确的调整,系统可达到精确的同步。

外部时钟同步IEEE1588 EtherCAT设备同步 定义系统时间

定义一个参考时钟:

一个EtherCAT从站被当做参考时钟使用

参考时钟循环的发布它的时钟

参考时钟根据一个全局参考时钟 IEEE1588

2.8 应用层(Application Layer)

应用层AL(Application Layer) 为用户与网络之间提供接口,应用层在EtherCAT 通信协议层次结构中是与用户联系最紧密最直接的一层,它可以直接与用户进行交互,实现面对具体的应用程序和控制任务等功能, EtherCAT 应用层为各种服务协议与应用程序之间定义了接口, 使其能够满足应用层所要求的各种协议共同工作的需求。

EtherCAT 作为网络通信技术,支持CAN open 协议中的CiA402,以及 SERCOS 协议的应用层( 即 CoE 和SoE)等多种符合行规的设备和协议。

EtherCAT状态机 设备和网络的启动

邮箱接口和协议 设备的存取变量 异步传输

协议:

EOE: Ethernet over EtherCAT

COE: CANopen over EtherCAT

FOE: Filetransfer over EtherCAT

SOE: Servo Drive over EtherCAT

从站信息接口 设备特征和配置信息

EtherCAT状态机

状态机构建于数据链路层 定义EtherCAT从站设备一般信息状态 指定对EtherCAT从站设备启用网络时初始化和错误处理 状态和主从站之间通信关系相一致 从站设备的请求状态和当前状态反应于应用层和应用层注册中

定义了五种状态:

Init // 应用层没有数据交互,主站对数据传输信息注册有同路

Pre-Operational // 应用层上的邮箱通信。没有过程数据交互

Safe-Operational // 应用层上的邮箱通信。过程数据通信,但是仅仅是输入被评估,输出置于Safe状态

Operational // 输入和输出都是有效的

Bootstrap // 定义了固件更新。是可选的,但是在固件必须要更新时推荐选择

// 只能和init进行状态间转换,没有过程数据通信,通过应用层的邮箱进行通信,根据需要的情况对邮箱进行配置,只能使用FoE协议。

从站设备的请求状态和当前状态反应于应用层控制和应用层注册中:

应用层控制(0x0120) 初始化设备状态机的状态转换

应用层状态(0x0130) 设备状态机的实际状态

应用层状态代码(0x0134) 错误原因或者其他状态代码

邮箱传输

交换变量数据的标准方式 邮箱接口是可选择的,但是推荐使用 如果过程数据是可设置的,或者有其他的非周期性服务,必须邮箱通信 全双工能力 从站可以发起一个数据交互 预留两个同步管理器通道: Sync Manager 0(主站到从站),Sync Manager 1(从站到主站) 数据交互的早期阶段,邮箱方式是可利用的(State Pre-Operational) 支持多种协议的能力

邮箱通信协议的类型:

EOE: Ethernet over EtherCAT // 通过EtherCAT传输的标准以太网帧

COE: CANopen over EtherCAT // 访问CANopen对象字典和它的对象,CANopen紧急事件和事件驱动的PDO消息

FOE: Filetransfer over EtherCAT // 下载上传固件和其他的一些文件

SOE: Servo Drive over EtherCAT // 存取伺服轮廓检验(IDN)

从站信息接口

强制从站信息接口SII(Slave Information Interface)由所有能被持久保持的对象组成 信息被存储于一个EEPROM,EtherCAT从站控制器和EEPROM之间有一个SPI接口。

SII包括:

boot设置数据

设备一致性

vender id,产品序列号,修正号,serial no

和CoE对象0x1018里,相同的信息

应用程序信息数据

额外的一些数据

AL Status Code(Application Layer Status Code)

Application Layer: Describes the highest layer of the EtherCAT slave stack which includes the EtherCAT State Machine, error handling, Mailbox protocol handling, slave application.

此可选属性由应用程序控制,并报告由AL的状态控制事例检测到的最后错误或ID值。AL(应用层)状态代码给出从机进入错误状态的原因。 如果错误标志(寄存器0x0130:04)为TRUE,则应提供AL状态代码.

2.9 设备配置(Device Profile)

设备行规描述了设备的应用参数和功能特性,如设备类别相关的机器状态等。现场总线技术已经为I/O设备、驱动、阀等许多设备类别提供了可利用的设备行规。用户非常熟悉这些行规以及相关的参数和工具,因此,EtherCAT无需为这些设备类别重新开发设备行规,而是为现有的设备行规提供了简单的接口。该特性使得用户和设备制造商可以轻松完成从现有的现场总线到EtherCAT技术的转换过程。

EtherCAT实现CANopen (CoE)

CANopen©设备和应用行规广泛用于多种设备类别和应用,如I/O组件、驱动、编码器、比例阀、液压控制器,以及用于塑料或纺织行业的应用行规等。

EtherCAT可以提供与CANopen机制[7]相同的通讯机制,包括对象字典、PDO(过程数据对象)、SDO(服务数据对象),甚至于网络管理。

因此,在已经安装了CANopen的设备中,仅需稍加变动即可轻松实现EtherCAT,绝大部分的CANopen©固件都得以重复利用。并且,可以选择性地扩展对象,以便利用EtherCAT所提供的巨大带宽。

EtherCAT实施伺服驱动 设备行规IEC 61491 (SoE)

SERCOS interface™ 是全球公认的、用于高性能实时运行系统的通讯接口,尤其适用于运动控制的应用场合。

用于伺服驱动和通讯技术的SERCOS™框架属于IEC 61491标准[8] 的范畴。该伺服驱动框架可以轻松地映射到EtherCAT中,嵌入于驱动中的服务通道、全部参数存取以及功能都基于EtherCAT邮箱(参见图12)。在此,关注焦点还是EtherCAT与现有协议的兼容性(IDN的存取值、属性、名称、单位等),以及与数据长度限制相关的扩展性。过程数据,即形式为AT和MDT的SERCOS™数据,都使用EtherCAT从站控制器机制进行传送,其映射与SERCOS映射相似。并且,EtherCAT从站的设备状态也可以非常容易地映射为SERCOS™协议状态。EtherCAT从站状态机可以很容易地映射到SERCOS™协议的通信阶段。

EtherCAT为这种在CNC行业中广泛使用的设备行规提供了先进的实时以太网技术。这种设备行规的优点与EtherCAT分布时钟提供的优点相结合,保证了网络范围内精确时钟同步。可以任意传输位置命令,速度命令或扭矩命令。取决于实现方式,甚至可能继续使用相同的设备配置工具。

EtherCAT实现以太网(EoE)

EtherCAT技术不仅完全兼容以太网,而且在“设计”之初就具备良好的开放性特征——该协议可以在相同的物理层网络中包容其它基于以太网的服务和协议,通常可将其性能损失降到最小。对以太网的设备类型没有限制,设备可通过交换机端口在EtherCAT段内进行连接。以太网帧通过EtherCAT协议开通隧道,这也正是VPN、 PPPoE (DSL) 等因特网应用所普遍采取的方法。EtherCAT网络对以太网设备而言是完全透明的,其实时特性也不会发生畸变(参见图13)。 EtherCAT设备可以包容其它的以太网协议,因此具备标准以太网设备的一切特性。主站的作用与第2层交换机所起的作用一样,可按照编址信息将以太网帧重新定向到相应的设备。因此,集成万维网服务器、电子邮件和FTP 传送等所有的因特网技术都可以在EtherCAT的环境中得以应用。

EtherCAT实现文件读取(FoE)

这种简单的协议与TFTP类似,允许存取设备中的任何数据结构。因此,无论设备是否支持TCP/IP,都有可能将标准化固件上载到设备上。

ADS over EtherCAT (AoE)

ADS over EtherCAT (AoE)是由EtherCAT规范定义的客户端-服务器邮箱协议。尽管CoE协议提供了详尽的描述,但AoE则更适合路由与并行服务的应用:通过网关设备访问子网络,如EtherCAT至CANopen® 或EtherCAT至IO-Link™ 网关设备。AoE使EtherCAT主站应用(如PLC程序)可以访问所属CANopen® 或 IOLink™从站的各个参数。AoE路由机制开销远低于因特网协议(IP)所定义的开销,并且发送方和接收方寻址参数始终包含在AoE报文中。因此,EtherCAT主站和从站端的实施更为精简。AoE也通过EtherCAT自动化协议(EAP)进行非周期通信的标准化,从而为上位机MES系统或主计算机、EtherCAT主站及其从属的现有设备之间提供无缝通信。同时,AoE也提供了从远程诊断工具获取EtherCAT网络诊断信息的标准化方法。

2.10 主站设计

EtherCAT可以在单个以太网帧中最多实现1486字节的分布式过程数据通讯。其它解决方案一般是,主站设备需要在每个网络周期中为各个节点处理、发送和接收帧。

而EtherCAT系统与此不同之处在于,在通常情况下,每周期仅需要一个或两个帧即可完成所有节点的全部通讯,因此,EtherCAT主站不需要专用的通讯处理器。主站功能几乎不会给主机CPU带来任何负担,轻松处理这些任务的同时,还可以处理应用程序,因此EtherCAT无需使用昂贵的专用有源插接卡,只需使用无源的NIC卡或主板集成的以太网MAC设备即可。EtherCAT主站很容易实现,尤其适用于中小规模的控制系统和有明确规定的应用场合。

例如,如果某个单个过程映像的PLC没有超过1486 字节,那么在其周期时间内循环发送这个以太网帧就足够了。因为报文头运行时不会发生变化,所以只需将常数报文头插入到过程映像中,并将结果传送到以太网控制器即可。

EtherCAT映射不是在主站产生,而是在从站产生(外围设备将数据插入所经以太网帧的相应位置),因此,此时过程映像已经完成排序。该特性进一步减轻了主机CPU的负担。可以看到,EtherCAT主站完全在主机CPU中采用软件方式实现,相比之下,传统的慢速现场总线系统通过有源插接卡方可实现主站的方式则要占用更多的资源,甚至服务于DPRAM的有源卡本身也将占用可观的主机资源。

系统配置工具(通过生产商获取)可提供包括相应的标准 XML 格式启动顺序在内的网络和设备参数。

已经在各种实时操作系统上实现了EtherCAT主站,包括但并不限于:eCos, INtime, MICROWARE OS-9,MQX, On Time RTOS-32, Proconos OS, Real-Time Java, RT Kernel, RT-Linux, RTX, RTXC, RTAI Linux,PikeOS, Linux with RT-Preempt, QNX, VxWin + CeWin, VxWorks, Windows CE, Windows XP/XPE with CoDeSys SP RTE, Windows NT/NTE/2000/XP/XPE/Vista with TwinCAT RTE, Windows 7 and XENOMAI Linux. 可以获得开源主站协议栈,作为示例代码或商业软件。也有各种公司提供各种硬件平台上的实施服务。可以在EtherCAT网站上的产品区找到快速增长的供应商信息[1]。

另一种EtherCAT主站的实现方式是使用样本代码,花费不高。软件以源代码形式提供,包括所有的EtherCAT主站功能,甚至还包括EoE(EtherCAT实现以太网)功能(见图15)。开发人员只要把这些应用于Windows环境的代码与目标硬件及所使用的RTOS加以匹配就可以了。该软件代码已经成功应用于多个系统。

2.11 从站设计

从站EtherCAT Processing Unit 总是位于 Port 0 之后其它端口之前,并在数据帧传输的过程中提取和插入数据:

DPRAM: 双端口存储器 Dual-Ported RAM,可以分别从主站及本地微处理器uC访问。访问 ESC 的 Dual-Ported RAM 读出 并/或 写入数据。

从器件具有一个16位Local地址空间:

地址范围0x0000:0x0FFF专用于EtherCAT寄存器,

地址范围0x1000:0xFFFF用作过程数据RAM

SyncManagers 阻止主站和从站微处理器(uC)同时访问 ESC存储区,确保数据的一致性

→ 含周期性数据 (Process Data) 和非周期性数据 (Mailbox)

FMMUs 为Lxx数据报文完成逻辑地址到物理地址的转换

→ 仅对于周期性数据 (Process Data)

从站的SyncManagers 和 FMMU 是由主站在初始化阶段自动配置的,该配置基于每个从站的XML文件和整个网络的设置。

EtherCAT从站设备使用一个价格低廉的从站控制器芯片ESC。从站不需要微处理器就可以实现EtherCAT通信。可以通过I/O接口实现的简单设备可以只由ESC和其下的PHY,变压器和RJ45接头。给从站的过程数据接口是32位的I/O接口。这种从站没有可配置的参数,所以不需要软件或邮箱协议。EtherCAT状态机由ESC处理。ESC的启动信息从EEPROM中读取,它也支持从站的身份识别。

更复杂的可配置从站有使用一个CPU。这个CPU和ESC之间使用8位或16位并行接口或串行SPI接口。要求的CPU性能取决于从站的应用,EtherCAT协议软件在其上运行。EtherCAT协议栈管理EtherCAT状态机和应用层协议,可以实现CoE协议和支持固件下载的FoE协议。EoE协议也可以实施。

从站控制器通常都有一个内部的DPRAM(DUAL PORT RAM),并提供存取这些应用内存的接口范围:

串行SPI(串行外围接口)主要用于数量较小的过程数据设备,如模拟量I/O模块、传感器、编码器和简单驱动等。该接口通常使用8位微控制器,如微型芯片PIC、DSP、Intel 80C51等(见图16)。

8/16位微控制器并行接口与带有DPRAM接口的传统现场总线控制器接口相对应,尤其适用于数据量较大的复杂设备。通常情况下,微控制器使用的接口包括Infineon 80C16x、Intel 80x86、Hitachi SH1、ST10、ARM和TI TMS320等系列(见图16)。

32位并行I/O接口不仅可以连接多达32位数字输入/输出,而且也适用于简单的传感器或执行器的32位数据操作。这类设备无需主机CPU(见图17)。

PDO(过程数据对象)、SDO(服务数据对象)

报文通过从站控制器时,从站读取出相关命令并进行对应处理,数据处理通过硬件完成,延间约为100-_500ns,通信性能独立于MCU的响应时间。每个ESC最大有容量为64KB的可用的内存编址,能进行连续或同步的读写。多个EtherCAT命令数据可以被嵌入到一个以太网报文中,每个数据对应独立的设备或内存区。

EtherCAT极大提高了以太网的性能,比如操作1000个I/O信号的时间约为30微秒。单个报文至多容纳1486字节的过程数据,和12000位I/O信号相当,更新所需时间约为300微秒。控制100个伺服单元的时间约为100微秒。

在基于PC的主站中,一般使用网络接口卡NIC(Network Interface Card)其中的网卡芯片集成了以太网通信控制器和物理层数据收发器。但是在嵌入式主站中,通信控制器通常集成在微处理器中。

EtherCAT从站设备同时实现应用控制和数据通信两部分功能,其组成如图所示,由四部分组成:从站控制微处理器、EtherCAT从站控制器ESC芯片、物理层器件和其他应用层器件。

EtherCAT报文由从站控制器来处理,使用双端口存储区完成主从站间的数据交换。每个从站ESC在环路上按各自的顺序移位读写数据。当数据帧经过从站时,ESC从中读取发送给自己的命令数据并放到内部存储区,插入的数据又被从内部 存储区写到子报文中。

从站控制微处理器主要负责处理EtherCAT通信和完成控制任务。微处理器从ESC获取控制数据实现设备控制功能,并采样设备的反馈数据写入ESC。从站控制微处理器的选型根据设备控制任务,可以使用ARM或DSP; 8位、16位或32位的处理器。EtherCAT从站采用MII接口模式时,需要使用标准以太网物理层器件:物理层芯片PHY,隔离变压器等。采用EBUS接口时不需要任何其他芯片。

3. 应用层(Application Layer)

3.1

3.2 EtherCAT Slave Implementation (从站实现)

DPRAM (双端口存储器)size and number of SyncManagers(同步管理 )

The DPRAM is used for exchange of cyclic and acyclic data(循环和非循环的数据交换) via the EtherCAT network. SyncManagers ensure data consistency(保证数据的一致性) within the DPRAM.

Each ESC has 4kByte of registers (addresses 0x0000 to 0x0FFF) which are reserved for (EtherCAT and PDI communication) configuration settings(配置设置 ).

Mailbox(邮箱) and process data is exchanged via additional DPRAM (also called user memory用户存储器 ). EtherCAT allows addressing(编址) of user memory of up to 60kBytes. ASICs provide between 1kByte and 8kByte of DPRAM, IP Cores can be configured to provide the full 60kByte of user memory.

Application Note: The standard SyncManager configuration is(标准的同步管理配置)

- 1 SyncManager per acyclic data output (mailbox out, master to slave)

- 1 SM for acyclic data input (mailbox in, slave to master)

- 1 SM for cyclic data output (process data out, master to slave)

- 1 SM for cyclic data input (process data in, slave to master)

For process data, SM running in 3-buffer-mode(3缓存模式) need three times the length (3倍长度) of actual process data for physical memory(物理内存) . The following table shows a schema(体系结构,模式) of how to allocate(分配) the length for the 4 SM.

Table 5: DPRAM Size Calculation Example( DPRAM大小计算示例)

SyncManagerBuffer CountLength [Byte]Total length [Byte]SM0Output Mailbox1L_MbxOut1*L_MbxOutSM1Input Mailbox1L_MbxIn+ 1*L_MbxInSM2Outputs3L_Out (TxPDO)+ 3*L_OutSM3Inputs3L_In (RxPDO)+3*L_In----∑ DPRAM size

SyncManagers are enabled(开启) by the following settings of the master during network initialization(网络初始化) .

-Physical address of ESC(ESC物理地址)

-Data length (数据长度)

-SyncManager control input(同步管理控制输入) :

i. Operation mode【操作模式】 (mailbox-mode/3-buffer-mode)

ii. Access direction【访问方向:读或者写】 (Read direction/Write direction)

iii. Interrupt settings 【中断设置】 (Valid/Invalid 有效/无效 )

iv. SyncManager watchdog setting【同步管理看门狗定时器设置】 (Valid/Invalid)

v. SyncManager setting (Valid/Invalid)

The default values are set in the ESI (chapter 2.4.1); the master initializes the SyncManager using the values from the ESI.(默认值在 ESI中设置,主站初始化时调用 ESI中的值)

Syncmanagers(同步管理器)

同步管理器简称SM用来协调应用程序和主机的数据交互,同步管理器同步的是数据而非时间,同步管理器确保了应用程序和主机能够正确的写入或读取数据。同时同步管理器可以以中断的形式通知主机和应用程序发生的数据更新事件。

从站的ESC中包含多个同步管理器,每一个同步管理器都可以单独的配置:

同步管理器的配置中包括告知同步管理器其需要管理的内存地址的范围,管理内存的属性(属于读或写,属于邮箱数据或过程数据)。

所以每一种数据交互方式都会有一个同步管理器来管理,应用程序进行数据交互时,只需要更具不同的同步管理器就可以方便的区分数据的类型(PDO 或SDO、读或写)。从站在初始化时会读取SM管理器中的配置来确定数据的存放地址。

数据的交互主要有缓冲模式和邮箱模式。缓冲模式主要应用于周期性过程数据的传送。

Number of Fieldbus Memory Management Units (FMMUs)(现场总线储存管理单元)

In an EtherCAT network, the memory of all slaves can be compiled in the master(所有从站的储存都可以在主站中编辑) to a logical memory(逻辑内存) . This logical memory is managed by FMMUs to map(映射) logical addresses to physical addresses in the slavesFMMUs(逻辑内存通过 的管理和从站中的物理内存相对应) .

For the FMMU configuration in a device, each consistent output and each consistent input block needs one FMMU and an additional FMMU for mailbox status response is necessary. // 对于设备中的FMMU配置,每个一致的输出和每个一致的输入块都需要一个FMMU,并且还需要一个用于邮箱状态响应的附加FMMU。

Application Note: The standard configuration is one FMMU per each, cyclic output and cyclic input data block , optionally an additional one for mapping the mailbox response availability flag into process data (thus, no polling of mailboxes is necessary). If the outputs and inputs are groupede.g. like in Table 5, 3 FMMUs are configured, see Table 6. // 应用说明:标准配置是每个循环输出和循环输入数据块一个FMMU,还可以选择另外一个用于将邮箱响应可用性标志映射到过程数据中(因此,不需要轮询邮箱)。 如果输出和输入被分组,例如 如表5所示,配置了3个FMMU,请参阅表6。

Table 6: FMMU Configuration

FMMUAssigned SyncManagerNameLength [Byte]1SM2OutputsL_Out (TxPDO)2SM3InputsL_In (RxPDO)3SM0 & SM1Mbx-SM Status FlagsMbx In/Out Length

Distributed Clocks (DCs(同步) with other slave devices,分布式时钟 ) for synchronization

Evaluate if the device should support high precise(支持高精度) synchronization with other slave devices. If so, DCs should be supported by the selected ESC. Distributed Clocks refer to the DC function for EtherCAT slaves (chapter 1.3.5). The times held by slaves are adjusted with this mechanism(途径) and thus enable precise synchronization of the nodes(节点) in the EtherCAT network. // 评估设备是否应支持与其他从设备的高精度同步。 如果是这样,所选的ESC应该支持DC。 分布式时钟指的是EtherCAT从站的DC功能(第1.3.5章)。 通过这种机制可以调整从站保持的时间,从而实现EtherCAT网络中节点的精确同步。

EEPROM(电可擦只读存储器)

The EEPROM is mounted(安装) outside the ESC and connected via I2C with point-to-point link(点对点连接) . According to the size of the EEPROM the EEPROM_SIZE signal should be set. For more details, refer to the Knowledge Base, chapter 11.3 d electrical Interface EEPROM an(I 2C)". For EEPROM (SII) Enhanced Link Detection setting (加强连接检测设置) , refer to documentation of the ESC vendor. // EEPROM安装在ESC外部,并通过I2C与点对点链接连接。 根据EEPROM的大小,应设置EEPROM_SIZE信号。 有关更多详细信息,请参见知识库第11.3章“电气接口EEPROM和(I 2C)”。有关EEPROM(SII)增强链接检测设置,请参阅ESC供应商的文档。

Application Controller【应用控制】 (Host Controller, μ C)

If a local software application provides the device functionality, any 8 or 16 bit synchronous or asynchronous microcontroller(任何一个 8位或者 16位同步或者异步微控制器) can be connected to the ESC. The application controller communicates with the ESC via the Process Data Interfaces (PDI).

To adapt the application software on the host(为了和主站的应用程序相适应 ) controller to the ESC, sample software stacks(样本软件栈) are available for communication implementation(通讯的实现), e.g. the Slave Sample Code(从站样本代码) (SCC). If the device is a 32 bit digital I/O interface, no application controller or additional communication software is necessary. // 为了使主机控制器上的应用软件适应ESC,可以使用示例软件堆栈进行通信实现,例如从机样本代码(SCC)。 如果设备是32位数字I/O接口,则无需应用程序控制器或其他通讯软件。

In most cases, manufacturers(制造商) can use a familiar microcontroller type as application controller in the EtherCAT device(使用相似型号的微控制器作为应用控制使用在 EtherCAT设备中) . If application software already exists, e.g. for a different fieldbus, it can be used for the EtherCAT device as well. // 在大多数情况下,制造商可以在EtherCAT设备中使用熟悉的微控制器类型作为应用程序控制器。 如果应用软件已经存在,例如 对于不同的现场总线,它也可以用于EtherCAT设备。

The source code(源代码) for communications software on the host controller allocates(分配) about 70kByte. The following features are a typical configuration (referring to the Slave Sample Code):

EtherCAT State Machine (ESM), including error handling(错误处理)

Device diagnosis(设备诊断)

Master-Slave data synchronization (主从站之间的数据同步) with SyncManager event (no DCs)

Mailbox CoE

Object Dictionary (对象字典) (20 objects) for process data objects (过程数据对象)

CoE services, including CoE Info services(信息服务) , no segmented transfer (无分割转换)

A list of other available sample stacks can be obtained on the product section of the ETG website.

Application Layer Communication Protocols (应用层通讯协议)

In EtherCAT, several protocols are available (see chapter 1.3.6) for the application layer to implement (实施) the required specification of the product development(产品开发时所需的规格) . When to apply them is described here.

CAN application protocol (总线应用协议 )over EtherCAT(CoE) To provide acyclic data exchange as well as mechanisms to configure PDOs for cyclic data exchange in a structured way, CoE (with SDO-Info support) should be implemented.

Servo drive profile(伺服驱动配置文件) over EtherCAT(SoE) SoE is an alternative drive profile to the CiA402 drive profile. It is often used by drive manufacturers which are familiar with the SERCOS interface.

Ethernet(以太网) over EtherCAT(EoE) EoE is usually used to provide webserver interfaces(网络接口) via EtherCAT. It is also used for devices providing decentral standard Ethernet ports(分散生产方式的标准以太网端口) . ? File Access(文件存取组件) over EtherCAT(FoE) If the device should support firmware(固件)download via EtherCAT, FoE should be supported. FoE is based on TFTP. It provides fast file transfer and small protocol implementation.

ADS over EtherCAT(AoE)小协议实施 When planning to control the device via a .Net interface, AoE is an option to apply.

Application Note:An exemplary(典范) CoE implementation is shown below.

The user application runs the device specific software(设备专用软件) on the μ C to implement device features(实现设备功能特性 ). Sample source code(protocol stacks) offered by EtherCAT stack vendors can be used to develop this application or to adapt existing software to EtherCAT.

Application Note:EtherCAT Slave Stack Code (SSC,从站堆栈代码 ).

The SSC is a free sample codefrom Beckhoff(德国倍福自动化有限公司)(免费样本代码) which provides an interface to the ESC. For hardware independent software development(独立于硬件的软件开发) , the SSC runs on several evaluation kits(评估板) and can be customized(自定义) for implementation in accordance with the product specification. Figure 14 shows the SSC structure with the interfaces to the user specific device application(用户特定的设备应用) and the ESC.

Application Note:EtherCAT Slave Protocol Stack.(从站协议栈)

Hilscher(德国赫优讯公司) offers a Slave Control Stack based on its netX hardware withDual Port Memoryinterface (DPM,双端口记忆器 ) and it is available for the user application with an API. Figure 15 shows the protocol stack architecture(协议栈构架) with interfaces to the ESC and the user application.

Device Profiles(设备配置文件)

During network initialization(网络初始化期间) , parameter setup(参数设定) is necessary, where data does not need to be transmitted cyclically(周期性传输) but only during network initialization. Acyclic data exchange is done via mailbox protocols(非循环的数据传输通过邮箱协议) , usually via theCoEprotocol (see chapter 2.3.5). For devices with variable process data structure, the definition of a modular device description(MDP,模块化设备描述 ) is available. The MDP is described in the ETG.5001 Modular Device Profile Specification(说明书) . // 在网络初始化期间,必须进行参数设置,这些数据不需要循环传输,而仅在网络初始化期间需要传输。 非循环数据交换是通过邮箱协议(通常通过CoE协议)完成的(请参阅第2.3.5章)。 对于具有可变过程数据结构的设备,可以使用模块化设备描述(MDP)的定义。 EDP.5001模块化设备配置文件规范中描述了MDP。

The MDP is based on the object dictionary defined byCoE(CAN application protocol over EtherCAT). The object dictionary can be described as a two dimensional list(二维表) . Each list entry (每个表的入口) is identified(识别) by an index(指针,索引) (0x0000–0xFFFF) which represents an object. Each object can contain up to 255 subindices(分目录) , also called object entries. The object list is structured in different areas, see Table 7. // MDP基于CoE(基于EtherCAT的CAN应用协议)定义的对象字典。 对象字典可以描述为二维列表。 每个列表条目均由代表对象的索引(0x0000-0xFFFF)标识。 每个对象最多可以包含255个子索引,也称为对象条目。 对象列表的结构在不同区域中,请参见表7。

The idea of the MDP is to provide a basic structure for masters(为主站提供一个基本构架) and configuration tools(配置工具) to handle(处理) slaves with complex (modular) structure easily. The user has the advantage, that if the slave variables’(变量)s are sorted in an MDP style, he can find the different data types by identical patterns(相同的模式) . // MDP的思想是为主机和配置工具提供基本结构,以轻松处理具有复杂(模块化)结构的从机。 用户的优势在于,如果以MDP样式对从属变量进行排序,则他可以通过相同的模式找到不同的数据类型。

The MDP can be applied to various types of devices. It is applicable to multiple axis(多轴) servo drive system(伺服驱动系统) of various functionality groups(各种功能组) , such as positioning(位置控制) , torque(扭矩控制) and velocity control(转速控制) . It is further applicable to gateway(网关) between different fieldbuses, i.e., Profibus, DeviceNet. Modular devices are driven by two aspects: // MDP可以应用于各种类型的设备。 适用于各种功能组的多轴伺服驱动系统,例如定位,转矩和速度控制。 它进一步适用于不同现场总线之间的网关,即Profibus,DeviceNet。 模块化设备由两个方面驱动:

Comprise(包含) physically connectable modules and plurality of functionalities(多数功能) .

//包括物理上可连接的模块和多种功能。

Comprise plurality of channels(多数通道) directly being connected to the EtherCAT network.

//包括多个直接连接到EtherCAT网络的通道。

The MDP imagines slaves which consist of one or several modules. A module can be hardware which is connected/disconnected to a slave. Examples are gateways between EtherCAT and e.g. CANopen or a bus coupler(总线耦合器) between EtherCAT and a proprietary backbone bus(专用主干总线) . // MDP设想从站由一个或几个模块组成。模块可以是已连接/断开连接到从站的硬件。示例是EtherCAT与例如CANopen或EtherCAT与专有骨干总线之间的总线耦合器。

A module can also be a logical module which describes data sets, e.g. a drive which supports a velocity controlled mode and a position controlled mode –the MDP would describe the data as two modules, one for each mode.(把数据描述成 2种模式,每个对应相应的模式) // 模块也可以是描述数据集的逻辑模块,例如。一个支持速度控制模式和位置​​控制模式的驱动器-MDP将数据描述为两个模块,每个模式一个。

No matter what kind of module is described it needs more or less the same information categories(需要相对应的信息分类) , which are organized in the profile specific index range (Table 7). // 无论描述哪种模块,它都或多或少需要相同的信息类别,这些信息类别在配置文件特定的索引范围内进行组织(表7)。

Application Note:Modular Device Profile Structure(模块化设备配置文件结构) . // 应用说明:模块化设备配置文件结构。

Consider an MDP for a line of slave device modules which are connected together on a backbone layer(主干网层面) via LVDS and via a coupler(耦合器) with MII. Figure 16 shows a schema how to define device profiles(如何定义设备配置文件) such that a modular profile dictionary is set up for the slave device line. // 考虑一排从设备模块的MDP,这些设备通过LVDS和带有MII的耦合器在主干层上连接在一起。图16显示了一种模式,该模式如何定义设备配置文件,以便为从属设备线设置模块化配置文件字典。

For implementation of the profile (CiA402 Drive Profile) for servo drive, build the program with reference to the corresponding specifications(技术规格,说明书) . In this example, this would be the

ETG.6010 Implementation Directive(指令) for the CiA402 Drive Profile, and

IEC 61800-7 Drive Profiles and Mapping to EtherCAT.

4. 应用实例

由于EtherCAT实时工业以太网技术具有适用范围广、拓扑结构灵活、数据通信效率高、实时性强和同步性能好等多种优点,所以特别适用于实时性要求高、通信数据量大的运动控制系统。

控制系统设计采用“PC+运动控制器”的方案,构建多轴运动控制系统,采用PC机为主站、ARM+MCX314为从站处理器的架构。其核心插补与控制算法都放在工业PC中完成,运动控制器要求大为降低,其主要完成数字给定量到实际脉冲信号的转变。该控制系统方案的优势在于简化硬件设计工作,主要以标准化的硬件为主:上位机可以采用工业PC机、下位机使用开发的通用运动控制器,方便日后升级维护。工业PC机与运动控制器直接采用EtherCAT实时工业以太网进行通信连接。

4.1 主站操作系统(RTAI)

PC机部分软件以LinuxCNC为基础,往下LinuxCNC通过HAL(硬件抽象层)与EtherCAT主站驱动之间进行通信连接,然后EtherCAT主站通过以太网线给从站运动控制器发控制命令;往上利用LinuxCNC提供的Python调用接口和人机界面通信,数控系统人机界面采用PyQt开发;由于LinuxCNC需要运行实时任务,需要将普通操作系统进行改造。因此,目前的主要工作是对Linux系统进行实时性改造、安装EtherCAT主站、编写HAL模块、编写人机界面。

虽然EtherCAT主站程序能够安装在非实时操作系统上,但一般情况下会对主站进行实时性改造,而且LinuxCNC中有运行实时任务的需要,所以对Linux系统进行实时性改造迫在眉睫。众所周知,Linux系统本质上是一个分时操作系统,不是一个实时操作系统。Linux系统实时性不强使其在嵌入式应用中有一定的局限性,受内核可抢占性、进程调度方式、中断处理机制、时钟粒度、虚拟内存管理等几个方面的制约。

根据实时性系统要求以及Linux的特点和性能分析,对标准Linux实时性的改造存在多种方法,较为合理的两大类方法为:直接修改Linux内核源代码和双内核法。

1.直接修改Linux内核源代码:对Linux内核代码进行细微修改并不对内核作大规模的变动,在遵循GPL协议的情况下,直接修改内核源代码将Linux改造成一个完全可抢占的实时系统。核心修改面向局部,不会从根本上改变Linux内核,并且一些改动还可以通过Linux的模块加载来完成,即系统需要处理实时任务时加载该功能模块,不需要时动态卸载该模块。这种方法存在的问题是:很难百分之百保证,在任何情况下,GPOS(通用操作系统)程序代码绝不会阻碍RTOS的实时行为。也就是说,通过修改Linux内核,难以保证实时进程的执行不会遭到非实时进程所进行的不可预测活动的干扰。2.双内核法:双内核法是在同一硬件平台上采用两个相互配合,共同工作的系统核心,通过在Linux系统的最底层增加一层实时核心来实现。其中的一个核心提供精确的实时多任务处理,另一个核心提供复杂的非实时通用功能。其优点是可以做到硬实时,并且能很方便地实现一种新的调度策略。目前采用这种方案的主要有RTAT,RT-Linux和Xenomai。本课题采用RTAI实时包的方式完成对Linux系统的实时性改造,如图所示。

RTAI(实时应用接口)是Linux内核的一个实时扩展,RTAI是基于ADEOSC Adaptive Domain Environment for Operating System)实现,ADEOS位于Linux系统和硬件之间管理硬件中断,并控制实时内核和Linux内核的优先级,其中实时内核优先级高于Linux内核优先级。

RTAI安装:

1.下载RTAI压缩包并解压到urs/src目录下,输入命令:

cd /usr/src

sudo tar -bzip2 -xvf rtai一3.8.tar.bz2

2.下载Linux内核压缩包并解压到urs/src目录下,输入命令:

sudo cp suoxd/linux-2.6.37.1.tar.bz2 /usr/src

sudo tar -bzip2 -xvf linux一2.6.32.2.tar.bz2

3.利用RTAI源码中的文件给内核打补丁,未安装p atch需安装patch后,输入命令:

sudo patch -pl

4.配置内核,Linux2.6.32引入新的方式用于简化kernel的配置,使用命令拷贝当前配置,省去很多繁琐的内核配置选项。

5.安装内核模块,输入命令:

sudo make clean

sudo make

sudo make modules

sudo make modules install

sudo make install

6.配置RTAI,下载安装MESA库文件和EFLTK包,然后进入RTAI文件夹,执行配置,输入命令:

cd /usr/src/rtai

sudo make config

7.编译并安装RTAI,命令行窗口的RTAI安装结果如图4-2所示,输入命令:

sudo make

sudo make install

8.RTAI内核延时测试,利用RTAI源码包中的测试案例进行测试,测试结果如下:

cd /usr/realtime/testsuite/user/latency

sudo ./run

9.RTAI内核抢占实现测试,测试结果如图4-4所示,输入命令行:

cd /usr/realtime/testsuite/user/preempt

sudo ./run

4.2 主站EtherCAT程序(IGH)

本控制系统EtherCAT主站以实时Linux操作系统为基础,在Linux环境下开发主站有两方面优势,一方面Linux为开源系统,方便对底层进行修改;另一方面便于进行嵌入式移植。Linux下的EtherCAT主站架构如图所示:

Linux操作系统可分为内核态和用户态。内核态是操作系统的核心,负责进程管理、内存管理、进程间通信和设备管理和驱动等,实时性要求高。用户态主要运行人机交互、数据监控等实时性要求不高的程序。

EtherCAT主站模块运行在内核态,可支持一个或多个EtherCAT主站,且同时提供应用接口和设备接口。用户通过应用接口访问主站,通过设备接口连接设备到指定主站。EtherCAT的以太网设备驱动模块通过主站设备接口与主站连接,EtherCAT设备协议可直接由以太网帧传送,因而主站能同时并行处理EtherCAT数据帧和通用以太网通信。

在Linux上安装EtherCAT主站程序,这里选择EtherLab开发的IgH EtherCAT Master,首先下载主站安装文件gHEtherLab.tar.bz2,下载文件后解压缩进入含有Makefile文件的目录安装主站,输入命令:

make ethercatMaster

make ethercatMasterinstall

sudo /etc/init.d/ethercat start

ethercat master

若最后两条指令运行正常则说明主站安装成功。

4.3 主站应用开发(LinuxCNC)

LinuxCNC是一款运行在Linux平台下的实时开源数控软件。起源于美国国家标准与技术研究院的增强型运动控制器EMC (Enhanced Machine Controller)研究项目,用于机床的数控系统。经过十几年的发展,LinuxCNC系统广泛用于冲床、车床、3D打印机、激光切割机、等离子切割机、机器人手臂等领域。其主要优点有:提供多个标准化的用户界面、用户也可以采用自主开发的GUI、自带G代码解析器、支持伺服电机控制步进电机开环控制、运动控制器功能强大、支持非笛卡尔坐标运动系统、采用2.4或2.6的Linux内核支持RT-Linux或RTAI实时补丁。LinuxCNC源代码可以免费下载,安装在Linux系统上。LinuxCNC软件架构如图所示。

LinuxCNC是一个模块化设计的软件,大致可以分为以下四个主要模块:运动控制器(EmcMot)、数字I/O控制器(EmcIO )、任务控制器(EmcTask )、图形用户界面(GUI)。

用户操作界面负责接收用户命令并反馈最新状态;

任务控制器是整个系统的决策层,主要负责对各种命令进行决策分类、解析发送给不同的模块;

运动控制器是实时刷新的,主要完成路径规划、插值运算等;

数字I/O控制器负责处理I/O信号,通过NML消息与运动控制器通信,因为不同设备I/O各不相同,这时需要硬件抽象层HAL文件建立软逻辑电路来控制实际I/O ;

HAL

HAL硬件抽象层是LinuxCNC系统的关键技术之一,通过引入HAL机制,为用户提供了统一的驱动开发接口,方便编写驱动,还能利用配置文件将相应的HAL模块连成一个复杂系统,方便数据传递。HAL模块结构图如图所示。

EtherCAT主站驱动与LinuxCNC之间采用HAL机制进行通信,硬件抽象层将各个底层的硬件驱动、实时算法抽象出来,构成一个组件,组件是由函数、参数、输入输出引脚所组成,输入信号包括来自LinuxCNC的控制信号、用户配置信息,输出信号包括提供给LinuxCNC的反馈量等。将编写好的HAL模块命令为ec.comp,编译生成ec.ko,利用insmod命令将其安装后就可以加载到线程中。

当HAL模块启动的时候,需要对变量进行初始化,但完成EtherCAT主站的初始化是更重要的,只有初始化了主站,设置好参数,建立起完整的通信网络,才能进行接下来的周期数据传输,其中PDO为进程数据对象、SDO为服务数据对象。如图为EtherCAT主站的初始化流程图。

主站初始化完成后,LinuxCNC开始正常运行。LinuxCNC在每个控制周期通过硬件抽象层下发控制命令,并获取从站设备反馈的信息。

HAL周期任务流程图如图所示。

对于采用位置控制的伺服单元,HAL模块每次都要计算出本控制周期的位移或目标点,然后通过EtherCAT总线发送到从站运动控制器;

然后从站运动控制器在每个控制周期上报编码器位置增量和I/O状态,HAL模块计算出轴的实际位置后发送给LinuxCNC。

UI界面

在Linux环境下开发用户界面的语言有Python, C++等,图形库有QT, GTK等。由于控制界面运行于用户态,实时性要求不高,同时兼顾开发难度和周期,本课题采用Python语言,结合PyQT图形库开发冲床控制界面。Python是一种面向对象的脚本语言,与其他语言相比,Python具有如下优点:面向对象、公开免费、跨平台可移植、功能强大、使用简单、模块丰富。QT是一个功能丰富广泛使用的GUI图形库,可用于Windows, Linux等平台,具有很好的可移植性。PyQt是Python语言与Qt图形库相结合的产物,从而可以通过Python来使用Qt图形库,具有模块丰富、跨平台和使用信号与槽机制的优点。数控界面调用LinuxCNC抽象出的Python接口与任务控制器通信,并监视LinuxCNC状态信息和错误信息。

本课题冲床数控系统设计加工状态、参数设置、警告与诊断和软件设置四个状态界面,四个状态界面下一共分设13个子界面,各个界面之间可以通过按钮进行切换,数控系统界面结构图如图所示。 系统的主界面由菜单栏、工作窗口、快捷工具栏和消息提示栏这四部分构成。菜单栏可以根据不同的操作需求切换不同的工作窗口,快捷工具栏是一些常用的快捷按钮,消息提示栏是提示快捷按钮内容和显示系统运行状况、错误信息汇报的区域,如图所示。 2.参数设置界面:参数设置界面用于设置控制系统及机械的参数,分设了系统参数设置、运动轴参数设置及模具库参数设置这3个子界面。下面主要讲解运动轴参数,运动轴参数设置界面如图所示。

3.警告与诊断界面:息记录界面这2个子界面。警告与诊断界面下设有警告信息诊断界面、历史警告信,如图所示。

4.软件设置界面:软件设置界面用于设置软件与外部设备的通讯参数和显示软件的版本等信息,设有软件信息、外部设备通讯设置及高级设置这3个子界面。下面讲解外部设备通讯设置界面,如图所示。

4.4 ET1200

EtherCAT从站控制器ESC(EtherCAT Slave Controller)是由德国BECKHOFF自动化有限公司提供的,包括ASIC芯片和IP-Core,实现EtherCAT数据链路层协议。目前ASIC从站控制专用芯片有ET1100和ET1200,也可以使用IP-Core将EtherCAT通信功能集成到设备控制FPGA当中,并根据需要配置功能和规模。图为ET1200从站控制器结构图: ET1200最多支持3个EtherCAT物理通信端口:

其中一个可以作为MII接口,用于与物理层PHY芯片交换数据。因为EtherCAT并不定义该接口的物理层,MII接口也是和传输介质无关接口,因此这种接口方式下的数据链路层与物理层彻底隔开,从而以太网能够选用任意的传输介质,包括无线电和光纤。ET1200其余两个接口均为EBUS接口,EBUS是德国倍福公司使用的LVDS(Low Voltage Differental Signaling)标准定义的数据传输标准,通信速率高达100Mbit/s,能与ESC芯片直接相连,减小PCB板体积和降低成本。EBUS的传输距离最大为10m。ET1200提供的物理设备接口有数字I/O和SPI两种,选用ARM作为从站微处理器是一般通过SPI接口访问ET1200。ET1200采用3.3 V供电,最大工作电流约为70mA,芯片发热量很小。

ET1200的主要技术指标:

ET1200从站控制器使用外部EEPROM来存储从站设备信息,下表是EEPROM存储数据分布示意图,其中0~63为基本信息,每次ESC启动时都会从EEPROM中读取其中的配置信息。

4.5 从站程序设计

运动控制器软件设计包括ARM主控制程序及外围电路驱动程序,外围驱动程序包括ET 1200驱动程序、AD采样芯片驱动程序、RS232驱动程序、SPI串行总线、FSMC并行总线驱动程序以及MCX314加减速控制程序设计等。运动控制器程序在STM32F427这款MCU上使用C语言开发,开发环境为Windows 7下的Keil uVision_5集成开发环境。

ARM主控制程序是运动控制器的核心,需要完成各个函数初始化、参数配置、数据处理、逻辑流程控制及控制算法运算等,图为支持查询模式(自由运行模式)的流程图。

ARM芯片在上电后不久进入main()函数,在main()函数中最先完成一系列系统正常运行相关函数的初始化,如延时初始化函数、LED初始化函数、串口初始化函数、中断向量表配置初始化函数,然后完成SPI初始化函数、定时器初始化函数、EtherCAT初始化函数以及FSMC总线初始化函数等。

接着完成通信初始化工作,查询主站的状态控制寄存器,读取事件请求寄存器0x220、相关配置寄存器,启动或关断相关通讯服务。

在完成以上工作后就进入主循环while(1),进行应用层任务处理和周期性数据处理,周期性数据处理和应用层任务处理有查询模式(自由运行模式)或同步模式(中断模式)这两种,本程序采用同步运行模式,所以在主循环中主要处理非周期性的任务。同步运行模式下周期性数据在中断服务程序中处理。

void main(void)

{

//--一执行一系列初始化函数--一

Delay_Init(168); //初始化延时函数

Led_Init(); //初始化LED端口

Uart_Init(9600); //初始化串口

AD7606_Init(); //初始化AD采样芯片

NVIC_Config(); //初始化STM32时钟及外设

SPI_Config(); //ET 1200用SPI总线初始化配置

Timer2_Init_ Config(); //Timer2初始化配置

ET 1200_GPIO_Config(); //ET 1200 GPIO初始化配置

ECAT_Init(); //初始化通信变量和ESC寄存器

FSMC_Init(); //FSMC并行总线初始化

//--一初始化完成,进入主循环--一

while(1)

{

ET1200_AlEvent=pEsc->AlEvent; //读应用层事件请求寄存器,

// ET1200_AlEvent为全局变量,在头文件中定义

if(!ET1200_IntEnabled) //处于自由运行模式(ET 1200_ IntEnabled -=0

//处于同步模式(ET1200 IntEnabled==1)

free_ run(); //处于自由运行模式时,进行周期性数据查询

el_event(); //应用层任务处理,包括状态机和非周期性数据等

}

}

从站设备可以运行于同步模式或自由运行模式,在自由运行模式中使用查询方式处理周期性过程数据,在同步模式使用中断服务程序处理性数据。

变量ET1200 IntEnabled来控制运行模式。ET1200 IntEnabled为1时,使用同步模式,ET1200 IntEnabled为0时,使用自由运行模式。

根据主站对SM的配置,在函数、参数初始化阶段来初始化变量ET1200_ IntEnabled,确定当前的运行模式。

本程序选择同步模式,以下将按照该模式讲解一个中断服务数据处理的工作流程,如图所示。

4.6 实验测试

实验测试平台由一台PC机、一套自主研发的冲床数控系统软件、一台自主研发的五轴高速运动控制器、一套单轴丝杠滑台、一套二维伺服平台、一套四轴同步测试架组成。

实验过程中需要注意,因为目前运动控制器专为数控冲床设计,仅保留1个M II接口连接主站,且设计最多连接轴数为五轴,故连接四轴同步测试架时不能接单轴丝杠滑台和二维伺服平台;测试过程中工业PC机和显示器使用笔记本代替。在平台上测试通过后将控制系统接入到LX230B型数控转塔冲床上进行测试和参数调试,最终成功开发出30T数控转塔冲床用高速运动控制系统。

基本通信功能测试

EtherCAT主从站基本通信功能测试时首先按图所示,使用网线将PC机与从站运动控制器连接起来后,在数控软件通信设置的外部设备通信设置中找到运动控制器连接状态,点击重新连接。使用Wireshark抓包工具抓取连接过程中主站广播的数据包,最终连接成功时运动控制器连接状态指示灯变为ON,从站状态变为操作状态(OP),从站状态机启动正常,如图所示。

由图可知该实验中EtherCAT报文的格式。报文总长度60个字节,前14个字节是以太网数据帧头,包括6字节的目的地址(ff:ff:ff:ff:ff:ff ) } 6字节的源地址(78:a5:04:c0:be:6f)} 2字节的帧类型(Ox88a4);接着是2字节的EtherCAT头,包括11位数据长度(Ox02a)}1位保留位(Ox0)}4位类型位(0x1);然后是EtherCAT数据,数据为2个子报文,每个子报文包含10字节子报文头,16字节数据,2字节WKC(工作计数器)。Wireshark抓取的报文与2.1节中的EtherCAT帧格式一 致,从而主从站之间实现了基本通信。

控制系统基本功能测试

控制系统基本功能测试是验证系统软硬件功能正常的重要实验,该项测试在单轴丝杠滑台完成,连接好PC机、运动控制器和单轴丝杠滑台,如图所示。在数控软件的手动加工中对输出I/O如伺服使能、紧急停止,回零点如X轴回零、Y轴回零,单轴位移控制如X+, X-, Y+, Y-进行测试,并观察滑台的运动情况和伺服驱动器面板显示来判断各项功能是否正常。经测试,软件上的相关按钮都工作正常,五个轴的接口、I/O接口工作正常,产生的脉冲精度误差为0。故数控系统软硬件基本功能测试通过。

G代码解释、圆弧插补测试

通过二维伺服运动平台圆弧插补实验测试运动控制系统G代码解释、圆弧插补等功能。该项测试主要在二维伺服平台上完成,连接PC机、运动控制器和二维伺服平台,如图所示,通过数控系统控制二维伺服运动平台的X轴和Y轴电机做圆弧插补,利用上方横梁固定的笔杆记录二维平台上白纸相对运动下的轨迹。二维平台中的两组伺服机丝杠的参数完全一致,丝杠螺距为20mm,设定伺服驱动器驱动电机旋转一圈为2000个脉冲,可知丝杠走1 mm需要100个脉冲,由此设置数控软件中的X, Y轴脉冲当量都为1000。

使用AutoCAD设计一个直径D为80mm的圆周,如图所示,绘制完成后保存为.dxf格式,然后使用一体化饭金CAD/CAM编程软件cncKad将.dxf格式的图纸转化为冲床数控软件所需的.PNC文件,即G代码。然后将G代码文件导入到数控软件中,预加工仿真运行无误后启动伺服,进行实际加工,最终得到实际绘制效果图如图_5 -6所示。绘制出的圆周尺寸精确,控制系统通过圆弧插补测试。

多轴运动的同步性能测试

多轴同步测试实验用来测试运动控制系统多轴运动的同步性能。该项测试主要利用四轴同步测试架完成,如图所示,测试架上固定安装有A, B, C, D共4组电机和驱动器。将电机驱动器与运动控制连接,控制器通过EtherCAT总线与PC机连接,打开数控软件,在加工状态中选择手动加工,控制伺服电机A, B,C, D同时做顺时针运动旋转,通过长时间运行测试观察轴上4个光盘指向分析电机运动的同步性。经过长时间测试观察后,电机按钮停止伺服轴转动,可以看到4个电机指向同一方向,驱动器面板显示脉冲数也一致。

实际产品应用

在上一节的一系列实验后,控制系统的各项功能都顺利通过测试,接下来把开发好的控制系统制作成便于使用的操作台和控制柜接入到LX230B型30T的数控转塔冲床上,取代原有的控制系统,操作台和控制柜如图所示。该冲床选用安川 -7系列AC伺服电机、 -V系列AC伺服驱动器。首先调试好伺服电机与伺服驱动器之间构成电流环、速度环的PID参数,让闭环的性能达到较好水平,再接入控制系统,其中编码器分频脉冲输出C相信号在轴回原点时使用。

为观测控制系统在数控转塔冲床上的应用效果,需要采用非接触测量仪测量板材运动过程中的振动曲线。根据实验室现有的条件,采用由日本Keyence公司生产的LK-G400型激光位移传感器和LK-GD_500型控制器作为非接触式测量工具。 LK-G400的主要技术参数为:使用距离为400mm,测量范围为士100mm,取样率20us,钡量精度为gum o LK-GD_500型控制器主要参数为:最小显示单位为O.Olum,显示周期10次/秒。

在冲床大板材(1200mm X 2_SOOmm)上选取测试点W点,如图所示。采用S型曲线加减速规划,加速度g为6,控制板材在X轴上高速移动lOmm,运动控制器输出的PULS(脉冲)信号局部波形如图所示。

使用软件LK-Navigator读取传感器测量的数据,如图所示。由图分析可知调节时间为130ms(按士0._5%误差带)、稳态误差士0.0_Smm,各项指标良好,达到工业应用要求。

5. 工具

5.1 TwinCAT

EtherCAT主站方案实现一般都采用倍福公司的TwinCAT, TwinCAT实现了强大的EtherCAT主站功能,从站XML表配置、EEPROM配置文件操作、扫描EtherCAT从站等,下图为使用TwinCAT开发冲床数控系统的过程。因为TwinCAT是基于Windows风格,拥有较好的人机交互界面,功能强大,非常适合上位机控制窗口的开发,但TwinCAT运行于Windows环境下,实时性很差,而且TwinCAT和Windows系统需要付费才能商业化应用,价格较高。

在学习EtherCAT的时候,TwinCAT是必须要学习的。TwinCAT软件其功能强大,可以写plc程序,可以写图形化界面,可以观察波形等等。初次学习时我就参考TwinCAT 3运动控制教程和TwinCAT NC PTP实用教程,把TwinCAT 3中界面的一些功能都试了一遍。另外用功能块学着写了凸轮、齿轮的程序,并用Visualization图形化界面来控制。(在学习TwinCAT时,要充分利用好帮助文档)。

因为我的任务是做一致性测试,所以关注点大部分放在了对协议的了解上,涉及到一致性测试的文档有ETF7000.2、ETG7010。具体可以去ETG官网上查找相关资料。做一致性测试时需要用到ET9400,这款软件不是免费的。目前还没开始测这部分。

对于带有EtherCAT伺服驱动器的性能的测试,用TwinCAT带着简单测过csp、csv、cst这三种模式。如果想要系统的测试驱动器所支持的操作模式,必须对驱动器的相关知识有一定的了解。另外就是对对象字典中对象充分了解。TwinCAT中的Process Data和CoE-Online界面是很重要的。这点我也没有完全掌握。没有以太网基础,对协议没有了解,直接接触EtherCAT这条学习之路感觉很艰难!

5.2 LinuxCNC

PC机部分软件以LinuxCNC为基础,往下LinuxCNC通过HAL(硬件抽象层)与EtherCAT主站驱动之间进行通信连接,然后EtherCAT主站通过以太网线给从站运动控制器发控制命令;往上利用LinuxCNC提供的Python调用接口和人机界面通信,数控系统人机界面采用PyQt开发;由于LinuxCNC需要运行实时任务,需要将普通操作系统进行改造。因此,目前的主要工作是对Linux系统进行实时性改造、安装EtherCAT主站、编写HAL模块、编写人机界面。

5.3 开源的EtherCAT Master

EtherCAT的主站开发是基于EtherCAT机器人控制系统的开发中非常重要的环节。目前常见开源的主站代码为的RT-LAB开发的SOEM (Simple OpenSource EtherCAT Master)和EtherLab的the IgH EtherCAT® Master。使用起来SOEM的简单一些,而the IgH EtherCAT® Master更复杂一些,但对EtherCAT的实现更为完整。

具体比较如下表:

参考资料

EtherCAT协议介绍.pdfEtherCAT Technology Group _ 技术概览记录STM32开发一个完整的EtherCAT的过程

优惠劵

pwl999

关注

关注

209

点赞

1343

收藏

觉得还不错?

一键收藏

知道了

23

评论

EtherCAT (学习笔记)

文章目录1. 简介1.1 运动控制1.2 实时以太网1.3 EtherCAT2. EtherCAT原理介绍2.1 实时性2.2 端口管理2.3 EtherCAT网络拓扑2.4 EtherCAT网络协议栈2.5 EtherCAT数据帧格式2.6 EtherCAT设备寻址方式2.7 分布式时钟(Distribute Clock)2.8 应用层(Application Layer)2.9 设备配置(Device Profile)2.10 主站设计2.11 从站设计3. 应用层(Application Layer)

复制链接

扫一扫

专栏目录

ethercat总结

02-14

ethercat总结,主要是Ethercat基础介绍,运行原理与常用协议说明

EtherCAT中文介绍

10-22

实时以太网EtherCAT中文介绍资料,英文不好的可以参考一下。EtherCAT(以太网控制自动化技术)是一个开放架构,以以太网为基础的现场总线系统,其名称的CAT为控制自动化技术(Control Automation Technology)字首的缩写。EtherCAT是确定性的工业以太网,最早是由德国的Beckhoff公司研发。

23 条评论

您还未登录,请先

登录

后发表或查看评论

EtherCAT Slave Stack Code (SSC)

05-28

BECKHOFF(倍福)官方提供EtherCAT从站协议栈代码生成工具

版本:SSC V5.12(Tool 1.4.2)

EtherCAT EoE

最新发布

weilan0818的博客

01-16

452

EoE:将以太网帧插入到 EtherCAT 协议中。EtherCAT协议中的以太网帧通过非循环邮箱通信进行传输。

Ethercat概念学习

weixin_43914278的博客

04-10

1580

最近我们要基于Ethercat技术进行开发,首先需要了解其基本原理,github上看到了有相关实现,一起来看看吧。

EtherCAT.rar

08-12

搜集的EtherCAT官方相关资料,学习EtherCAT参考资料, 协议说明等等

ethercat学习笔记1

08-08

代码的笔记放到第二章。1.8 松下的从站 PDO映射。6040h控制字这个控制字是用来控制伺服电机上使能的。6041状态字这个状态字读取伺服电机的状态。控制模式

EtherCAT介绍

人人都懂物联网

03-11

1万+

EtherCAT(以太网控制自动化技术)是一个以以太网为基础的开放架构的现场总线系统,EtherCAT名称中的CAT为Control Automation Technology(控制自动化技术)首字母的缩写。最初由德国倍福自动化有限公司(Beckhoff Automation GmbH) 研发。EtherCAT为系统的实时性能和拓扑的灵活性树立了新的标准,同时,它还符合甚至降低了现场总线的使用成本。

EtherCAT简介

weixin_41883890的博客

06-30

2394

EtherCAT(用于控制自动化技术的以太网)是Beckhoff(倍福)在2003年开发的实时以太网网络。它基于CANOPEN协议和以太网,但是与Internet通信或网络通信不同之处在于,它专门针对工业自动化控制进行了优化。这些标准由EtherCAT技术小组(简称ETG)定义和维护。使用OSI网络模型,以太网和EtherCAT依赖于相同的物理和数据链路层。除此之外,由于针对不同任务进行了优化,因此这两个网络在设计上有所不同。例如,以太网被设计为通过许多不同的节点发送大量数据。它能够与数十亿个单独的地址之间

【EtherCAT】一、入门基础

06-09

5257

EtherCAT(Ethernet Control Automation Technology)是一种高性能实时以太网通信协议,用于在工业自动化领域中进行实时控制和通信。它是由德国Beckhoff自动化公司在2003年开发的,并被国际电工委员会(IEC)标准化为IEC 61158标准。EtherCAT的设计目标是实现极低的通信延迟和高带宽的数据传输,以满足高速控制和数据采集的需求。它通过一种特殊的主从架构实现,其中一个主站(Master)负责协调整个网络,而从站(Slave)则负责提供输入输出功能。

工控协议解读之EtherCAT协议硬核分析(转自知乎“智能制造之家“)

qq_43599327的博客

09-07

7033

EtherCAT协议

ethercat_slave_stack_code_tool_SSC_V5i12.rar

08-13

EtherCAT Slave Stack Code Tool 倍福官方从站开发工具5.12版本。

Ethercat xml规范

05-12

Ethercat xml规范

EtherCAT学习之路——概述

chenweizhen1991的博客

03-13

1万+

首发于知乎

最近在做基于EtherCAT的项目,看了一些网上的博客,感觉写的都比较松散。虽然,自己也是才开始学习,希望能把这段时间学到的东西总结一下。

1.EtherCAT简介

EtherCAT是由德国BECKHOFF自动化公司于2003年提出的实时工业以太网技术。它具有高速和高数据有效率的特点,支持多种设备连接拓扑结构。其从站节点使用专用的控制芯片,主站使用标准的以太网控制器。

Et...

[工业互联-9]:EtherCAT(以太网控制自动化技术)+TwinCAT 在生产自动化控制中的应用 、

文火冰糖(王文兵)的博客

06-09

4199

EtherCAT以太网控制自动化技术)是一个开放架构,以以太网为基础的现场总线系统,其名称的CAT为控制自动化技术ControlAutomationTechnology)字首的缩写。EtherCAT是确定性的工业以太网最早是由德国的Beckhoff公司研发。自动化对通讯一般会要求较短的信息更新时间(或称为周期时间)、信息同步时的通讯抖动量低,而且硬件的成本要低EtherCAT开发的目的就是让以太网可以运用在自动化应用中。

EtherCAT 应用层协议的部分理解(一)

热门推荐

王三三

06-22

2万+

不对EtherCAT进行介绍,只谈谈对EtherCAT应用层协议的简单理解1、COE (CANopen over EtherCAT)  一种基于且完全遵循CANopen协议的通信协议  用途:

     1、用于驱动PDO对象,实现PDO对象间数据通信

      2、用于驱动SDO对象,实现SDO对象间的数据传输  分类:

    1、周期性过程数据通信 – 驱动PDO

[工业互联-23]:EtherCat从站 - EtherCAT协议栈与工作原理, 软硬件解决方案

文火冰糖(王文兵)的博客

07-10

2158

在EtherCAT(以太CAT)网络中,从站(Slave)是指通过EtherCAT总线连接到主站(Master)的外部设备或模块。从站通常是实时控制系统中的执行器(写)、传感器(读)、驱动器(写)等外部设备。从站在EtherCAT网络中起到了连接外部设备和主站之间的桥梁作用。它们接收主站发送的命令和控制信息,根据指令执行相应的操作,并将执行结果和实时数据通过EtherCAT总线返回给主站。每个从站在EtherCAT网络中都有一个唯一的站地址。

1.ethercat基本概念

weilan0818的博客

05-24

607

EtherCAT(以太网控制自动化技术)是一个开放框架,以以太网为基础的现场总线系统。是实时以太网的一种。实时以太网是常规以太网技术的延伸,以便满足工业控制领域的实时性数据通信要求。实时以太网有powerlink,profinet,sercosⅢ,ethercat等等。基于TCP/IP的实现:Modbus/TCP, Ethernet/IP基于以太网的实现:powerlink, profinet RT修改以太网的实现:EtherCAT, Sercos3, profinet IRT。

Ethercat学习资料

04-02

以下是关于EtherCAT学习资料的一些推荐:

1. EtherCAT官方网站:https://www.ethercat.org/

官方网站提供了EtherCAT协议的详细介绍、技术规范、应用案例等内容,是学习EtherCAT的重要参考资料。

2. EtherCAT技术手册

EtherCAT技术手册是一本详细介绍EtherCAT协议的书籍,包括EtherCAT协议的基本原理、应用案例、网络拓扑结构等内容,对于学习EtherCAT协议非常有帮助。

3. EtherCAT开发者论坛:https://forum.ethercat.org/

EtherCAT开发者论坛是一个交流和分享EtherCAT开发经验的平台,里面有很多有关EtherCAT协议的讨论和问题解答,对于学习和开发EtherCAT应用非常有帮助。

4. EtherCAT开发工具

EtherCAT开发工具包括EtherCAT协议分析器、EtherCAT节点开发工具等,可以帮助开发者更好地理解和开发EtherCAT应用。

5. EtherCAT培训课程

EtherCAT培训课程可以帮助初学者快速入门EtherCAT协议,掌握EtherCAT网络的设计和应用,提高开发效率。

总之,学习EtherCAT需要系统的学习和实践,建议初学者从官方网站入手,逐步深入学习,同时结合实际应用场景进行实践。

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

非常没帮助

没帮助

一般

有帮助

非常有帮助

提交

pwl999

CSDN认证博客专家

CSDN认证企业博客

码龄16年

暂无认证

142

原创

1万+

周排名

3万+

总排名

68万+

访问

等级

6905

积分

1510

粉丝

898

获赞

150

评论

4869

收藏

私信

关注

热门文章

EtherCAT (学习笔记)

67258

Xenomai (学习笔记)

21769

Device Tree 详解

19630

Unwind 栈回溯详解

18367

Linux bpf 1.1、BPF内核实现

18328

分类专栏

Linux Kernel解析

51篇

Riscv

2篇

Trace

29篇

Arm Linux

11篇

Android

1篇

Linux 驱动三板斧

21篇

Linux Monitor

9篇

Security

12篇

Misc

6篇

VxWorks

6篇

Stability

2篇

Performance

1篇

Power

Virtualization

2篇

RealTime OS

3篇

Motion Control

3篇

AI

最新评论

RISCV 入门 (学习笔记)

中南甘帅问贴贴:

开芯院和日报的网址都寄掉了,不看好riscv的未来

Linux usb 4. Device 详解

努力学习LINUX的嵌入式开发工程师:

我怎么没早点看到你

Linux usb 7. Linux 配置 ADBD

-Promise810:

其实不用执行命令 我记得/etc/ 目录下有个启动脚本专门 执行命令的 你可以看看那个脚本怎么写的

Linux usb 7. Linux 配置 ADBD

一名不会算法的在职算法工程师:

老兄,你还记得执行什么命令吗?

Linux usb 7. Linux 配置 ADBD

-Promise810:

检查一下设备树配置 对应的 usb 接口是否支持从机模式 支持的话 这个usb控制器就能出现

最新文章

Linux 驱动模块内存精简

Linux Phy 驱动解析

Linux mem 2.8 Kfence 详解

2023年1篇

2022年5篇

2021年29篇

2020年43篇

2018年26篇

2017年45篇

目录

目录

分类专栏

Linux Kernel解析

51篇

Riscv

2篇

Trace

29篇

Arm Linux

11篇

Android

1篇

Linux 驱动三板斧

21篇

Linux Monitor

9篇

Security

12篇

Misc

6篇

VxWorks

6篇

Stability

2篇

Performance

1篇

Power

Virtualization

2篇

RealTime OS

3篇

Motion Control

3篇

AI

目录

评论 23

被折叠的  条评论

为什么被折叠?

到【灌水乐园】发言

查看更多评论

添加红包

祝福语

请填写红包祝福语或标题

红包数量

红包个数最小为10个

红包总金额

红包金额最低5元

余额支付

当前余额3.43元

前往充值 >

需支付:10.00元

取消

确定

下一步

知道了

成就一亿技术人!

领取后你会自动成为博主和红包主的粉丝

规则

hope_wisdom 发出的红包

实付元

使用余额支付

点击重新获取

扫码支付

钱包余额

0

抵扣说明:

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

余额充值

Ethercat解析(一)之获取、编译、安装(Ubuntu14.04)_libethercat.so-CSDN博客

>

Ethercat解析(一)之获取、编译、安装(Ubuntu14.04)_libethercat.so-CSDN博客

Ethercat解析(一)之获取、编译、安装(Ubuntu14.04)

最新推荐文章于 2023-12-27 21:39:20 发布

识荒者

最新推荐文章于 2023-12-27 21:39:20 发布

阅读量8k

收藏

51

点赞数

2

分类专栏:

Ethercat解析

文章标签:

Ethercat

获取

编译

安装

版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。

本文链接:https://blog.csdn.net/absinjun/article/details/81428659

版权

Ethercat解析

专栏收录该内容

15 篇文章

101 订阅

订阅专栏

前言:EtherCAT(以太网控制自动化技术)是一个开放架构,以以太网为基础的现场总线系统,其名称的CAT为控制自动化技术(Control Automation Technology)字首的缩写。EtherCAT是确定性的工业以太网,最早是由德国的Beckhoff公司研发。

优势:免费、开源、稳定性能良好、支持实时扩展。

说明:该文档主要是建立在上节中已经对Ubuntu14.04添加完xenomai实时补丁之后的扩展,按照此文档的操作步骤即可让EtherCAT正常工作。

环境:Ubuntu14.04 实时补丁内核:3.14.44-xenomai-2.6.5

####一、获取

(1) 从EtherCAT官方网站获取 网址:http://etherlab.org/download/ethercat/ethercat-1.5.2.tar.bz2

(2) 从开源代码托管平台github上获取 进入github搜索"igh ethercat"即可下载所需要的源码包

####二、编译 (1) 安装编译该程序的依赖文件

# apt-get install autoconf autogen libtool

(2) 解压EtherCAT源码安装包并进入该源码包根文件下

$ tar -vxf ethercat-1.5.2.tar.bz2

$ cd ethercat-1.5.2

(3) 配置编译参数

$ ./configure --with-linux-dir=/usr/src/linux-headers-3.14.44-xenomai-2.6.5 --with-module-dir=/lib/modules/3.14.44-xenomai-2.6.5 --enable-generic --enable-rtdm --with-xenomai-dir=/usr/xenomai --enable-cycles --enable-hrtimer --enable-8139too=no

官方文档中所有的配置如下: (3) 编译所有文件及模块

$ make

$ make modules

三、安装

(1) 安装源码包及模块

# make install

# make modules_install

(2) 将模块插入内核

# depmod

(3) 创建软链接和相关脚本

# ln -s ${PREFIX}/etc/init.d/ethercat /etc/init.d/ethercat

# cp ${PREFIX}/etc/sysconfig/ethercat /etc/sysconfig/ethercat

# vi /etc/sysconfig/ethercat

(4) 编辑EtherCAT网卡硬件地址

DEVICE_MODULES="":双引号中是网卡设备 MASTER0_DEVICE="" :双引号中是网卡设备对应的硬件地址

运行命令sudo /etc/init.d/ethercat start即可开启EtherCAT主站!!

配置用户库和依赖

(1) 修改Ethercat权限

# echo KERNEL==\"EtherCAT[0-9]*\", MODE=\"0664\" > /etc/udev/rules.d/99-EtherCAT.rules

# udevadm control --reload-rules

(2) 配置库

① 将/opt/etherlab/include下的2个头文件放入/usr/local/include

# cp /opt/etherlab/include/* /usr/local/include

② 将/opt/etherlab/lib下的libethercat.so.1.0.0放入/usr/local/lib

# cp /opt/etherlab/lib/libethercat.so.1.0.0 /usr/local/lib

③ 将/usr/local/etherlab/bin下的ethercat放入/usr/local/bin

# cp /usr/local/etherlab/bin/ethercat /usr/local/bin

④ 执行ldconfig 确保/usr/local/lib在系统的动态链接库路径里面

# ldconfig

(3) 配置cmake

# apt-get install cmake

配置实时权限

# vim /etc/security/limits.conf 然后在该文件中添加

hard rtprio 99 username 为所使用的用户名

例如:我添加的内容为absin hard rtprio 99

其中99为实时调度的优先级最大为139(139为调度程序本身的优先级)。保存后退出,然后重启电脑。 在terminal查看ulimit -Hr是不是为99。

提示为99,设置成功。

参考文章:https://github.com/ART-robot/ethercat_install 参考文章:https://blog.csdn.net/allforyouz/article/details/78721760

优惠劵

识荒者

关注

关注

2

点赞

51

收藏

觉得还不错?

一键收藏

知道了

5

评论

Ethercat解析(一)之获取、编译、安装(Ubuntu14.04)

前言:EtherCAT(以太网控制自动化技术)是一个开放架构,以以太网为基础的现场总线系统,其名称的CAT为控制自动化技术(Control Automation Technology)字首的缩写。EtherCAT是确定性的工业以太网,最早是由德国的Beckhoff公司研发。优势:免费、开源、稳定性能良好、支持实时扩展。说明:该文档主要是建立在上节中已经对Ubuntu14.04添加完xeno...

复制链接

扫一扫

专栏目录

Ethercat获取解析安装实时-识荒者.zip

04-05

Ethercat解析(一、二、三、四)之获取、编译、安装(debian7)-识荒者

作者详细介绍了igh在Linux系统中的从安装到使用及实时系统配置的步骤,手把手的操作

基于LinuxCNC下的EtherCAT的下载,安装,编译 《一》

思泽之思

06-21

4500

在VMware上安装debian7 再打补丁,最后成功安装ethercat master 1.5.2

一直在更新,直到这个项目完成,图文并茂,呕心沥血的

5 条评论

您还未登录,请先

登录

后发表或查看评论

RK3568平台移植EtherCAT Master

最新发布

m0_56121792的博客

12-27

1063

EtherCAT全称EtherNet Control Automation Technology,是由德国倍福(Beckhoff)公司提出的一种实时以太网技术,用于工业自动化的现场总线通信协议。EtherCAT是一种开放但不开源的技术,意味着您可以任意使用这项技术,但若要进行相关设备的开发,则需要向倍福公司获取相关授权。

IGH EtherCAT是一种EtherCAT协议开源实现,是一个完全符合EtherCAT标准的库,能够在实时操作系统上运行。与传统总线相比,EtherCAT的优点在于减

python 调试IGH库

关注工业机器人应用

12-10

1044

通过python来编辑IGH库的函数

EtherCAT1.5.2官方文档翻译-第七章

absinjun的博客

04-19

3477

EtherCAT1.5.2翻译

7.2 用户空间库

本地应用程序接口(参见第3章)驻留在内核空间中,因此只能从内核访问。 为了使应用程序接口在用户空间程序中可用,已经创建了一个用户空间库,该用户空间库可以根据LGPL版本2 [5]的条款和条件链接到程序。

这个库被命名为libethercat。 它的源代码驻留在lib /子目录中,并且在使用make时默认生成。 它被安装在安装前的lib ...

[工业互联-17]:常见EtherCAT主站与实现方法

文火冰糖(王文兵)的博客

07-08

4540

EtherCAT(Ethernet for Control Automation Technology)是一种实时以太网通信协议,用于工业自动化和控制系统中实现高性能、实时数据传输和控制。它是由EtherCAT技术组织(ETG)开发和标准化的。EtherCAT基于以太网物理层和数据链路层,但使用了一种特殊的通信方法,称为"Processing on the Fly"。这种方法使得数据帧能够在通过从站设备时进行实时处理,而不需要完全接收整个数据帧。这样,数据传输和控制可以实现高效率和低延迟。

快速开发ETHERCAT从站(使用ArduCAT)

05-25

ArduCAT是Arduino Compatible 开发板。通过Arduino技术,大大简化EtherCAT从站的开发。ArduCAT开发板包含两路可用于EtherCAT实时以太网的100BASE-TX网口,所以它特别适合基于PC的自动化方案。ArduCAT使用ATMega1280 处理器,兼容Arduino Mega开发板,并具有完全相同的引脚定义。板上采用开关稳压器提供5V 或3.3V的2A直流输出,且发热甚微。除配套的开源Arduino库外,还配有从站应用层代码自动生成工具,用户只需编辑EXCEL表格便生成完整的协议栈,大大简化了通信协议的代码的开发,使用户能够将注意力集中在开发具体的应用上。

LinuxCNC 2.8.4下编译IGH ethercat-1.6.0和EtherCatDriver驱动

ldkcumt的专栏

02-15

1875

LinuxCNC 2.8.4下编译IGH ethercat-1.6.0和EtherCatDriver驱动

EtherCAT IGH 的下载和编译

u014077947的博客

10-19

2191

EtherCAT 的下载和编译

Ubuntu18.04/20.04编译Linux5.10.76+Xenomai-3.2.1+IgH

热门推荐

qq_28882933的博客

03-21

1万+

叙述了Linux-5.10.76+Xenomai-v3.2.1+IgH的安装过程,根据参考资料,编译的源码可以在ubuntu20.04上使用。

Wireshark官方EtherCAT协议包示例

04-23

2432

不想抓包时,可以通过这个示例来学习EtherCAT协议

Description:Example traffic ofEthercat. Capture shows the boot up of an network with Beckhoff 1100, 1014, 2004, 3102 and 4132 modules.

网址https://wiki.wireshark.org/Sam...

在Debian系统安装Ethercat

01-20

官网上提供的ethercat到1.5.2版本截止,此版本内核最高支持3.x系列linux内核,首先我在Debian10实验编译打实时补丁的内核3.6.xx,结果启动不了,我又试了3.8.11的内核也不行,应该是Debian10不支持较低版本内核,...

安装EtherCAT驱动的方法V1.1.docx

04-21

安装EtherCAT驱动的方法

Ubuntu+RT-Preempt+IGH安装整合包

06-01

Ubuntu系统18.04 原内核4.15.2-20geneic 目标内核5.4.193-rt 安装IGH版本1.5.2 包含缺少的firmware固件库包 igh版本决定rt版本,rt只要能装进Ubuntu就行,Ubuntu版本不重要。 我用的一套下载包,结合我的博文安装

SOEM-Ethercat源代码解析配套windows网卡捕捉软件包

10-14

配套的文章章节:SOEM-Ethercat源代码解析三(通讯运行环境搭建)

Ethercat解析(十)之从站配置

absinjun的博客

08-13

1万+

配置文件根据设定的从站在总线上面的位置、厂商ID和产品码与具体的从站进行绑定。对于从站在总线上的位置,驱动提供了别名和位置编码相结合的方式寻找对应的从站。别名和位置编码都是16位的数字,其存放在从站的EEPROM中,具体的含义是:

别名

位置

描述

0

0-65535

由于别名为0,因此其位置编码就是从站在总线上的绝对位置

1-65535

0-65...

Ethercat解析(十一)之分布时钟

absinjun的博客

08-14

1万+

驱动代码中,同步时钟涉及到如下几个概念:

⑴ 本地时钟:每一个支持DC的从站都有一个纳秒级分辨率的本地时钟寄存器。

每次从机上电,则寄存器从0开始计时,这就意味着不同的从机因为上电开机的时间不同而本地时钟也会有差异,所以需要对从机的本地时钟对比参考时钟进行偏移补偿。再者,从机的时钟一般由时钟单元为参考,所以每个从机的时钟频率也会有极小的误差,但是由于这种极小的误差在长时间的工作中会累积,所...

Ethercat解析(十二)之命令行工具的使用

absinjun的博客

08-15

9605

说明:EtherCAT为了方便用户空间对主站进行调试,因此提供一套用户空间使用的工具来设置从站参数,观察调试信息等等。正常情况下,每个主站的实例都会生成一个字符设备,名字为:/dev/EtherCATx。

欲想深入了解其他命令,可通过执行ethercat –help命令来查看详细使用方法。

下面具体的介绍了一下各参数及命令的使用,其中[ ]中为必选参数,&lt; &gt;为可选参数。

1.1...

Ethercat解析(九)之过程数据

absinjun的博客

08-12

9107

主站通过过程数据对象(ProcessData Objects (PDOs))来获取从站的输入输出。

① 读取:通过SII从eeprom(一般存放的固定的PDOs数据)中读取。

② 写入:使用COE进行配置PDOs。

应用层可以在周期数据交换中注册一个PDOs条目,所有注册的PDOs条目之和通过逻辑寻址定义了过程数据映像(processdata image)。

通过创建域(Domains)可...

ubuntu安装preempt_rt igh1.5.2 ethercat

08-21

要在Ubuntu上安装preempt_rt, igh1.5.2 ethercat,你可以按照以下步骤进行操作:

1. 首先,确保你的Ubuntu系统已经安装了实时内核(preempt_rt)以及必要的依赖项。你可以通过以下命令安装实时内核:

```

sudo apt-get install linux-headers-$(uname -r)

sudo apt-get install linux-image-$(uname -r)-rt

```

这将安装与当前内核版本相对应的实时内核。

2. 安装EtherCAT Master(igh1.5.2),你可以从Etherlab的官方网站下载最新版本的源代码包。使用以下命令:

```

wget https://github.com/OpenEtherCATsociety/SOEM/archive/igh-1.5.2.tar.gz

tar -xvf igh-1.5.2.tar.gz

cd SOEM-igh-1.5.2

```

3. 编译和安装EtherCAT Master。执行以下命令:

```

make

sudo make install

```

4. 安装EtherCAT工具库。执行以下命令:

```

sudo apt-get install libethercat-dev

```

5. 现在,你应该已经成功安装了preempt_rt和igh1.5.2 ethercat。你可以使用所需的EtherCAT应用程序进行开发和测试。

需要注意的是,这些步骤可能因操作系统版本和特定的配置而有所不同。确保按照你的系统要求进行操作,并参考相关文档以获取更详细的安装说明。

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

非常没帮助

没帮助

一般

有帮助

非常有帮助

提交

识荒者

CSDN认证博客专家

CSDN认证企业博客

码龄7年

暂无认证

79

原创

38万+

周排名

102万+

总排名

47万+

访问

等级

4270

积分

507

粉丝

157

获赞

104

评论

1037

收藏

私信

关注

热门文章

神奇的python(六)之python的串口操作(pyserial)

46353

shell脚本打开一个新终端并运行指定脚本

29536

SD卡、TF卡坏道及容量检测

28035

J-LINK 操作使用指南

24655

SD卡、TF卡读写速率测试

21547

分类专栏

虚拟串口

1篇

通俗易懂Ethercat

5篇

TortoiseSVN

1篇

EtherCAT

1篇

kernel

3篇

linux

25篇

Jlink

1篇

C++

1篇

SD卡、TF卡检测技术

2篇

python

软技能

2篇

神奇的python

6篇

Pygame写游戏

22篇

PyOpenGL写3D界面

5篇

Ethercat解析

15篇

Linuxcnc解析

2篇

每日一题(C语言基础篇)

3篇

Leetcode算法题

18篇

Linux实时系统

1篇

最新评论

Ethercat解析(十五)之程序框架

weixin_57563284:

请问一下博主使用过igh 5001协议控制过io吗

Ethercat解析(十)之从站配置

田海峰:

E没看明白啊。能麻烦解释下吗?

LinuxCNC基础知识

Zlf14:

兄弟你下载了吗,我也不会下载

LinuxCNC基础知识

ttlsss:

隐藏内容怎么下载啊?

神奇的python(六)之python的串口操作(pyserial)

Zeeland:

如果您正在寻找一个轻量级的Serial框架,那么我强烈建议您了解一下cushy-serial。它是一个非常易于使用的Python库,可以使串行编程变得更加简单和快捷。相对于传统的pyserial,cushy-serial提供了许多特性,如自定义消息协议、串口定时任务等等,因此您不必花费太多时间在多线程上。

另外,cushy-serial兼容了Serial中的所有功能,所以您可以在其中使用Serial的所有特性。如果您有任何问题或建议,可以提交pr或issue进行交流。此外,您也可以通过以下链接了解更多关于cushy-serial的信息

https://github.com/Undertone0809/cushy-serial

您愿意向朋友推荐“博客详情页”吗?

强烈不推荐

不推荐

一般般

推荐

强烈推荐

提交

最新文章

虚拟机与主机串口通信(主机与主机)

COE、SOE、EOE、FOE是什么?

LinuxCNC基础知识

2021年7篇

2019年1篇

2018年102篇

目录

目录

分类专栏

虚拟串口

1篇

通俗易懂Ethercat

5篇

TortoiseSVN

1篇

EtherCAT

1篇

kernel

3篇

linux

25篇

Jlink

1篇

C++

1篇

SD卡、TF卡检测技术

2篇

python

软技能

2篇

神奇的python

6篇

Pygame写游戏

22篇

PyOpenGL写3D界面

5篇

Ethercat解析

15篇

Linuxcnc解析

2篇

每日一题(C语言基础篇)

3篇

Leetcode算法题

18篇

Linux实时系统

1篇

目录

评论 5

被折叠的  条评论

为什么被折叠?

到【灌水乐园】发言

查看更多评论

添加红包

祝福语

请填写红包祝福语或标题

红包数量

红包个数最小为10个

红包总金额

红包金额最低5元

余额支付

当前余额3.43元

前往充值 >

需支付:10.00元

取消

确定

下一步

知道了

成就一亿技术人!

领取后你会自动成为博主和红包主的粉丝

规则

hope_wisdom 发出的红包

实付元

使用余额支付

点击重新获取

扫码支付

钱包余额

0

抵扣说明:

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

余额充值

EtherCAT从站开发入门-CSDN博客

>

EtherCAT从站开发入门-CSDN博客

EtherCAT从站开发入门

最新推荐文章于 2024-01-05 16:53:58 发布

ethercat_i7

最新推荐文章于 2024-01-05 16:53:58 发布

阅读量2.5w

收藏

113

点赞数

8

分类专栏:

EtherCAT

文章标签:

EtherCAT

xmc4800

从站开发

版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。

本文链接:https://blog.csdn.net/ethercat_i7/article/details/80430709

版权

EtherCAT

专栏收录该内容

16 篇文章

83 订阅

订阅专栏

EtherCAT从站开发中,除了常见的ESC(FPGA IP)+DSP方案外,TI、瑞萨、英飞凌等芯片厂家也纷纷推出了集成ESC功能的芯片,本文介绍英飞凌XMC4800芯片的入门使用,并在后续文章中,基于英飞凌提供的从站例程,介绍EtherCAT基本原理和具体的代码实现过程。

一、软硬件环境

(1) XMC4800 Relax EtherCAT Kit开发板 (2)编程软件DAVE4.3.2 (3)测试主站Twincat v3.1

二、 获取例程

从英飞凌官网下载开发板的例程: http://www.infineonic.org/document/detail/index/id-216122 解压后如下图所示: 其中SSC目录下已经包含SSC5.1相关的源码。

三、导入工程

打开DAVE,File->Import导入之前下载的工程:

四、编译并下载

右键点击XMC4800_ECAT_Relax_EEP工程并选择Build Project,编译完后如下: 点击工具栏上的Run或Debug按钮将工程下载到开发板。

五、使用Twincat3进行测试

将例程中的从站设备描述文件XMC4800_Relax.xml拷贝到Twincat3对应目录: C:\TwinCAT\3.1\Config\Io\EtherCAT

打开Twincat3并新建工程,扫描设备:

扫描到从站后,就可以控制LED灯的亮灭,并检测到开发板上的按钮状态。

点亮LED1和LED3:

检测按钮状态:

六、一致性测试

使用ETG官方提供的一致性测试软件CTT对从站进行测试,结果如下: 可见,从站可通过一致性测试。

优惠劵

ethercat_i7

关注

关注

8

点赞

113

收藏

觉得还不错?

一键收藏

知道了

17

评论

EtherCAT从站开发入门

EtherCAT从站开发中,除了常见的ESC(FPGA IP)+DSP方案外,TI、瑞萨、英飞凌等芯片厂家也纷纷推出了集成ESC功能的芯片,本文介绍英飞凌xmc4800芯片的入门使用过程,并在后续文章中,基于英飞凌提供的从站例程,介绍EtherCAT基本原理和具体的代码实现过程。一、软硬件环境...

复制链接

扫一扫

专栏目录

EtherCAT从站快速开发

02-14

简化XML生成,简化编程,快速入门

提供 XML快速生成器

简化编程Keil程序示例:

2个函数即可完成ESC的初始化及调用

EtherCAT从站控制芯片TMC8462、8461、8460

02-26

EtherCAT salve从站控制芯片 TMC8462、8461、8460EtherCAT的研发目标是将以太网应用于需要短暂数据更新时间(也称周期时间,≤100 µs)的自动化应用,且通信抖动小(为了实现精确同步,≤1 µs)、硬件成本更低。

17 条评论

您还未登录,请先

登录

后发表或查看评论

EtherCAT从站开发

caixf的博客

01-02

489

开发一个EtherCAT从站,并将从站连接到EtherCAT主站

贝福 EtherCAT 开发板 应用手册

11-28

贝福 EtherCAT 开发板 EL9800 应用手册,解释说明了 EL9800如何使用的步骤

EtherCat 从站控制芯片

最新发布

weixin_46024116的博客

01-05

973

EtherCat 从站控制芯片简称ESC,是实现EtherCat数据链路层协议的专用芯片,用作处理EtherCat数据帧,并为从站控制装置提供数据接口,简单说就是一般我们的MCU不支持EtherCat(当然也有支持的,支持的就不需要ESC),ESC就是个转换器,一般和MCU选择串行(SPI)的方式来通信。ESC存储空间:前面讲到ESC具有64K字节的DPRAM,前4K(0x0000–0x0FFF)字节的寄存器空间。

Ethercat学习-从站源码生成

西澳峰的博客

03-29

4785

移植平台GD32F450,从站芯片AX58100,EtherCAT Slave Stack Code Tool (SSC) V5.12 注意:如果安装了SSC5.11,还可以正常安装SSC5.12,如果安装了SSC5.12的话,想再装SSC5.11,需要先将5.12卸载干净,暂时还没找到卸载SSC的方式。

EtherCAT从站开发要点

专注嵌入式软硬件开发。

07-18

3056

本文主要简述EtherCAT从站开发关键知识点:COE对象字典、PDO、SDO、状态机、同步模式、关键API接口等。

EtherCAT从站开发设计指南,总线远程IO篇

2301_79171935的博客

08-15

1079

EtherCAT是全球响应能力最高的工业以太网技术,广泛应用于工业自动化,本文从工程实践出发讲解设计EtherCAT从站

【EtherCAT从站开发入门笔记】

MDJSJ_的博客

03-20

971

EtherCAT从站开发入门笔记

EtherCAT的实现和应用 - 从站软硬件设计

weiDev的博客

03-21

3577

EtherCAT的实现和应用 - 从站软硬件设计

尝试一文说明EtherCAT

weixin_45682319的博客

07-17

823

学习EtherCAT的过程中从参考文章中提取出的内容,认为是比较关键的部分,希望能对你有所帮助,若理解有误也请指正。

英飞凌可视化软件DAvE使用中文指南.pdf

07-10

DAvE是英飞凌公司为了方便用户开发的免费得的可视化工具,本文是其中文使用指南!帮助你减少问题

快速开发ETHERCAT从站(使用ArduCAT)

05-25

ArduCAT是Arduino Compatible 开发板。通过Arduino技术,大大简化EtherCAT从站的开发。ArduCAT开发板包含两路可用于EtherCAT实时以太网的100BASE-TX网口,所以它特别适合基于PC的自动化方案。ArduCAT使用ATMega1280 处理器,兼容Arduino Mega开发板,并具有完全相同的引脚定义。板上采用开关稳压器提供5V 或3.3V的2A直流输出,且发热甚微。除配套的开源Arduino库外,还配有从站应用层代码自动生成工具,用户只需编辑EXCEL表格便生成完整的协议栈,大大简化了通信协议的代码的开发,使用户能够将注意力集中在开发具体的应用上。

EtherCat从站开发使用说明

04-12

1-EtherCAT从站开发板使用说明; 2-EtherCAT SPI通信程序流程分析; 3-EherCAT从站代码架构解析; 4-EtherCAT_ET1100_Datasheet_all_v1i8-解锁; 5-Twincat支持EtherCAT的intel 网卡列表(芯片型号); 6-从Beckhoff...

EtherCAT从站开发指南.zip_ETHERCAT_EtherCAT Master_EtherCAT 站_EtherCAT中

07-14

EtherCAT从站开发指南中文文档,含软件和硬件选型介绍

BECKHOFF TwinCAT连接 NI EtherCAT从站.pdf

03-22

BECKHOFF TwinCAT连接 NI EtherCAT从站

EtherCAT ET1100从站信息接口介绍

热门推荐

ethercat_i7的博客

10-10

2万+

ESC使用EEPROM来存储所需要的设备相关信息,称为从站信息接口SII(Slave Information Interface)。

以Beckhoff 两通道模拟量输入模块EL3102为例,简单介绍 EEPROM中存储的各种信息的位置和含义。

一、EEPROM内容一览

根据ET1100的datasheet,EEPROM中的存储结构如下:

以EL3102为例,从T

EtherCAT主站实时性分析

ethercat_i7的博客

01-04

1万+

一、实时性的意义

   在主从DC同步模式下,主站需要以非常精准的时间发送过程数据,如下图所示:

二、实时性的关键

    如下图所示,影响实时性的关键因素是操作系统和网卡驱动,前者需要将过程数据准时送出,后者需要优化网卡驱动,即"准时出发,路上不能耽误"。

操作系统的实时性体现在需要非常准时地调用EtherCAT主站协议栈的发送函数,例如SOEM的发送函数是e

ethercat从站开发流程

05-14

EtherCAT是一种实时工业以太网通信协议,由德国Beckhoff公司开发。在EtherCAT网络中,从站设备扮演着从属角色,接受主站的指令进行控制操作。下面是EtherCAT从站开发的一般流程:

1. 硬件设计:选择合适的EtherCAT芯片,并与MCU进行连接,然后进行硬件设计。确保从站硬件符合EtherCAT标准。

2. 软件开发:编写从站设备的驱动程序、控制逻辑和EtherCAT协议栈。

3. EtherCAT从站实时栈:使用EtherCAT从站实时栈开发包,搭建起整个EtherCAT从站框架。

4. EtherCAT从站配置:使用EtherCAT Master工具对从站进行配置,将其添加到EtherCAT网络中,并完成地址分配等设置。

5. EtherCAT从站测试:使用EtherCAT分析工具对从站进行性能测试和分析。对EtherCAT设备进行全面的性能测试,确保EtherCAT网络的高性能和可靠性。

6. EtherCAT应用程序的开发。EtherCAT从站应用程序是整个系统的核心。根据要求完成EtherCAT控制器的开发。

EtherCAT从站的开发流程非常重要,确保了EtherCAT应用程序和硬件设备的连接,使其在工业控制领域可靠的被应用。

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

非常没帮助

没帮助

一般

有帮助

非常有帮助

提交

ethercat_i7

CSDN认证博客专家

CSDN认证企业博客

码龄7年

暂无认证

38

原创

8万+

周排名

190万+

总排名

35万+

访问

等级

3445

积分

659

粉丝

229

获赞

217

评论

1380

收藏

私信

关注

热门文章

EtherCAT主站SOEM在Ubuntu上的移植

25614

EtherCAT从站开发入门

25184

EtherCAT ET1100从站信息接口介绍

23340

CANopen原理--心跳

19894

CANopen原理--SDO(upload)

16840

分类专栏

freeRTOS

1篇

sqlite3

1篇

EtherCAT

16篇

Etherlab

7篇

电机控制

2篇

CANopen

5篇

linux

5篇

最新评论

EtherCAT主站SOEM在Ubuntu上的移植

m0_53295178:

您会控制了吗?能发一下样例代码吗?1323992328@qq.com

伺服驱动器-速度环设计

m0_52379570:

您好,中频宽度的定义具体出自哪里呢,有些资料定义中频宽度为h=lg(Tw/Tl)

CANopen原理--心跳

Way-Jay:

可以针对从站自己写一个掉线的判断

CANopen原理--SDO(download)

m0_56338463:

你好,楼主 可以分享一下您的工程文件吗如果可以 真的谢谢啦 2278517559@qq.com

EtherCAT主站SOEM源码解析----EEPROM访问

ljymoonlight:

请教一下: xml中有modules 和 slots 怎么 在EEPROM中存储?

从站用怎么对应PDO解析?

您愿意向朋友推荐“博客详情页”吗?

强烈不推荐

不推荐

一般般

推荐

强烈推荐

提交

最新文章

freeRTOS在28388 CM核上的移植

sqlite3源码理解-sqlite3_open

linux设置进程CPU亲和力函数sched_setaffinity()简介

2023年1篇

2020年3篇

2019年1篇

2018年14篇

2017年9篇

2016年10篇

目录

目录

分类专栏

freeRTOS

1篇

sqlite3

1篇

EtherCAT

16篇

Etherlab

7篇

电机控制

2篇

CANopen

5篇

linux

5篇

目录

评论 17

被折叠的  条评论

为什么被折叠?

到【灌水乐园】发言

查看更多评论

添加红包

祝福语

请填写红包祝福语或标题

红包数量

红包个数最小为10个

红包总金额

红包金额最低5元

余额支付

当前余额3.43元

前往充值 >

需支付:10.00元

取消

确定

下一步

知道了

成就一亿技术人!

领取后你会自动成为博主和红包主的粉丝

规则

hope_wisdom 发出的红包

实付元

使用余额支付

点击重新获取

扫码支付

钱包余额

0

抵扣说明:

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

余额充值