Zmotion快速入门之EtherCAT通信
新阁教育-喜科堂付工原创文章
本案例采用Zmotion运动控制卡与伺服驱动器进行EtherCAT通信,从而实现对伺服电机的相关控制。
硬件连接 公众号:【dotNet工控上位机:thinger_swj】
因为采用总线的原因,所以基本上不用接线,硬件原理图如下所示:
将PC通过Ethernet连接至运动控制卡,然后运动控制卡的EtherCAT接至伺服驱动器,伺服驱动器与伺服电机之间通过配套电缆进行连接【文章末尾有视频介绍】。
快速上手
第一次使用时,最好的方式就是看编程手册,并结合官方提供的案例来学习使用。
Zmotion厂家提供的配套资料,我会传到公众号里,需要的小伙伴,可以后台回复 Zmotion 获取
在保证硬件没有问题的前提下(这里主要是指伺服驱动器,至少能够手动转起来),打开 ZMC光盘资料\8.PC编程相关\函数库2.1\windows平台\64位库\C#\例程\例程8-总线控制运动 中的源程序,运行起来如下所示:
这里有两个地方要注意,不然是运行不起来的。
案例中提供的ECAT初始化.bas文件,最大轴数是32,需要根据实际情况修改,否则会报错,我这里改成16。如果伺服没有接限位开关,轴状态应该是30H,表示正负限位报警,需要将正负限位禁用掉,具体操作是通过ZDevelop将FWD_IN和REV_IN设置为-1,当然后续可以通过代码实现。
这两点注意,伺服电机就应该可以动起来了。
软件开发
后续的软件开发主要就是封装应用,Zmotion的使用会涉及到两个dll库(zauxdll.dll和zmotion.dll)和一个Zmcaux.cs类文件,提前将这两个dll库复制到根目录下,然后手动将Zmcaux.cs类添加到你的项目中。
创建一个新的Zmotion.cs类,对Zmcaux.cs中的一些方法进行二次封装,便于后续项目的应用。
二次封装的方式每个人都会根据自己的编码习惯,进行不同程度的封装,下面我仅列举部分我的封装方法,仅供参考:
建立连接:EtherCAT连接之前需要执行一个bas文件,根据案例中的代码封装如下:
/// <summary> /// 初始化卡 /// </summary> /// <param name="ipAddress">IP地址</param> /// <param name="file">BAS文件</param> /// <param name="tempstatus">总线初始化完成状态</param> /// <param name="m_BusNodeNum">节点数</param> /// <returns>操作结果</returns> public OperationResult InitCard(string ipAddress, string file, ref float tempstatus, ref int m_BusNodeNum) { int error = 0; error = zmcaux.ZAux_OpenEth(ipAddress, out zhandle); if (error == 0) { error = zmcaux.ZAux_BasDown(zhandle, file, 1); if (error == 0) { //执行初始化 StringBuilder buffer = new StringBuilder(10240); //任务1重新运行BAS中的初始化函数 error = zmcaux.ZAux_Execute(zhandle, "RUNTASK 1,Ecat_Init", buffer, 0); if (error != 0) { return new OperationResult() { IsSuccess = true, ErrorMsg = "初始化失败" }; } IEC_Timer_TON ton = new IEC_Timer_TON(5000); ton.Input = true; while (true) { int ret = 0; float Bus_type = 0.0f; float m_BusAxisNum = 0.0f; //读取BAS文件中的变量判断总线类型 ret += zmcaux.ZAux_Direct_GetUserVar(zhandle, "BUS_TYPE", ref Bus_type); // 读取BAS文件中的变量判断总线初始化完成状态 ret += zmcaux.ZAux_Direct_GetUserVar(zhandle, "Bus_InitStatus", ref tempstatus); ret += zmcaux.ZAux_BusCmd_GetNodeNum(zhandle, 0, ref m_BusNodeNum); ret += zmcaux.ZAux_Direct_GetUserVar(zhandle, "Bus_TotalAxisnum", ref m_BusAxisNum); bool completed = ret == 0; completed &= tempstatus == 1; completed &= m_BusNodeNum > 0; bool output = ton.Output; if (completed) { break; } else if (!output) { continue; } else { if (tempstatus == -1) { return new OperationResult() { IsSuccess = false, ErrorMsg = "正在初始化" }; } else { return new OperationResult() { IsSuccess = false, ErrorMsg = "初始化失败" }; } } } initedOK = true; return OperationResult.CreateSuccessResult(); } return new OperationResult() { IsSuccess = true, ErrorMsg = "文件下载失败" }; } return new OperationResult() { IsSuccess = true, ErrorMsg = "以太网连接失败" }; }
点位运动:点位运动主要就是根据轴号、速度、加速度、脉冲当量进行正转或反转,代码如下:公众号:【dotNet工控上位机:thinger_swj】
public OperationResult Move(int axisNo, float scale, float vel, float acc, bool dir) { int error = 0; error += zmcaux.ZAux_Direct_SetUnits(zhandle, axisNo, scale); error += zmcaux.ZAux_Direct_SetSpeed(zhandle, axisNo, vel); error += zmcaux.ZAux_Direct_SetAccel(zhandle, axisNo, acc); error += zmcaux.ZAux_Direct_Single_Vmove(zhandle, axisNo, dir ? 1 : -1); if (error > 0) { return OperationResult.CreateFailResult(); } else { return OperationResult.CreateSuccessResult(); } }停止运动:停止运动比较简单,调用ZAux_Direct_Single_Cancel指令即可。
public OperationResult Stop(int axisNo) { int error = 0; error = zmcaux.ZAux_Direct_Single_Cancel(zhandle, axisNo, 2); if (error > 0) { return OperationResult.CreateFailResult(); } else { return OperationResult.CreateSuccessResult(); } }
开发界面
这里做了一个简单的控制界面,实现了基本的板卡连接、点动、连续运动、伺服使能等基本控制功能。
如何将 EtherNetIP、EtherCAT 和 PROFINET添加到自动化工厂
还记得科幻电影中曾有一个场景显示由人工智能管理的全自动工厂吗?现在就有这样的工厂!
自主工厂依赖于各个组件(如运动控制器和机器人)之间的实时通信,而且这种通信必须实时进行。例如,100 英尺外的可编程逻辑控制器 (PLC) 向机器人发送的运动命令如果出现延迟,则可能会导致最终产品出现缺陷。
基于以太网的实时通信协议的进步已经解决了这个问题。这些协议使工厂内连接大型设备的网络能够实时相互通信,同时还提供足够的带宽将诊断和控制数据发送到云端。
但有一个问题;尽管有很多实时以太网协议为这种通信提供便利,但不同的协议不能互相兼容。因此,即使两台设备都使用以太网连接,其中设置为通过一种实时以太网协议进行通信的设备也无法轻易接受另一台使用不同协议的设备。这里有两个问题:您的设备应该支持哪种协议?您是否可以启用多种协议?
支持多协议系统的挑战
工业市场大多数采用三种主要的工业以太网协议:Profinet、EtherNet/IP 和 EtherCAT。选择这三个中的一个通常比较安全,但在传统的 ASIC 设置中,单协议和多协议支持各有优缺点,如表 1 所列。
表1:采用多个 ASIC 时单协议与多协议注意事项
通过 Sitara™ 处理器减少您的硬件投资
很明显,从商业角度而言,支持多协议是正确的选择,但对于每个人来说,在从工程到采购的整个周期内实施多协议解决方案可能变得成本高昂且容易出现问题。图 1 显示了一家公司使用各种 ASIC 支持多种协议的流程。您可以看到,每个以太网解决方案都需要多个器件来制作通信模块,从而导致在创建各种库存单位 (SKU) 时更加复杂。
图1:多协议支持的传统流程
此流程可能让许多工厂设备制造商难以在其产品上启用多种协议。而如今,可以使用支持多协议的器件(例如 Sitara 处理器)连接到多个协议。 Sitara 处理器(如 AMIC110)在单个设计中支持多种协议,克服了设计多协议环境的潜在挑战,提供了另一种方法来设计支持各种工业以太网协议的工厂设备。Sitara 器件凭借其优势,可简化创建各种 SKU 的流程,如图 2 所示。
图2:通过 Sitara 处理器实现多协议流程
借助集成在每个处理器的工业通信子系统,您能够为多种 SKU 创建单一的硬件设计。您只需将新图像加载到处理器上,以便将电路板连接到新网络。这种方法不仅可以降低您的系统设计成本,还可以提供以下优势:
• 在几分钟内将库存从一种协议重新分配到另一种协议,以满足突然的需求变化。
• 硬件采购减少到一家供应商。
• 大幅降低仓库管理的复杂性。
• 单一硬件设计可满足多个市场的需求。
在本视频中,我们创建了一组演示,展示如何使用单个 Sitara AMIC110 工业通信引擎连接到 Profinet、EtherNet/IP 或 EtherCAT 网络。
结语
Sitara AMIC110 处理器是一款入门级器件,能够以低成本实现高度集成并简化开发和仓库管理流程,单件价格仅为 4 美元。借助一种通过了各种协议的符合性测试的工业级解决方案,Sitara 处理器实现了对 Profinet 等时实时 (IRT)、Profinet RT、EtherNet/IP 和 EtherCAT 的支持。
其他资源
• 通过以下白皮书,了解有关每种协议的更多信息:
o TI Sitara 处理器上的 Profinet。
o TI Sitara 处理器上的 EtherNet/IP。
o Sitara 处理器上的 EtherCAT。
• 阅读应用报告“Sitara 处理器支持的工业通信协议”,了解如何授权每个协议栈用于生产。
相关问答
plc控制伺服电机最简单的方法和接线方式是什么,如何实现?
plc控制伺服电机最简单的方法和接线方式是什么如何实现,这个主要看你要想要伺服电机怎么样运行,如果你仅仅是让伺服电机转起来,看看它的实际工作方式,可以采...p...
西门子plc都有哪些通讯协议?
西门子PLC常用的通讯协议有:1.PROFIBUSDP通讯协议;2.PROFINET通信协议;3.MODBUS通讯协议;4.ETHERCAT通讯协议。以上协议,尤其是前面三个,在实际应用....
ethercat通信的主流plc有哪些?
EtherCAT通信的主流PLC包括西门子(Siemens)、AB(RockwellAutomation)、Beckhoff、OMRON等。这些PLC都采用了EtherCAT通信协议,能够实现快速、...
EtherCAT怎样控制伺服?
EtherCAT可以通过实时通信控制伺服。首先,使用EtherCAT总线连接伺服驱动器和控制器,实现高速数据传输和实时通信。然后,控制器通过发送指令和接收反馈信息,...
如何通过ethercat控制伺服电机?
要通过EtherCAT控制伺服电机,首先需要确保伺服电机和EtherCAT主控器连接正常,并配置正确的通信协议。然后,在主控器上编写相应的控制程序,通过EtherCAT总线...
Ethercat与IO区别?
Ethercat和IO都是常见的工业自动化通信和控制协议,但它们之间存在一些重要的区别。1.网络拓扑结构:Ethercat是一种分布式网络拓扑结构,其中一个主节点与多个...
ethercat回原点的方式?
近点狗(DOG块)信号原点回归方式:这个方式与FX3UPLC的原点回归方式不一样,这里加了零点信号在里面。DOG块的长度要超过减速区间,OFF点最好调整在两个零点信号...
ethercat通讯节点原理?
EtherCAT(以太网控制自动化技术)通讯节点的工作原理基于以下几个关键方面:1.数据帧处理:EtherCAT采用标准的以太网帧,但对其进行了独特的利用。主站...Eth...
库卡机器人profisafe怎么配置?
注意下机器人控制柜下侧是否有标号为X11的插座,若无的话,说明该机器人的外部安全配置需通过网络来配置。2.按序选择菜单项:配置>安全配置。在【当前...2...
信捷ethercat总线控制伺服地址怎么设置?
在信捷EtherCAT总线控制伺服中,设置伺服地址需要进行以下步骤:首先,通过EtherCAT总线连接伺服和控制器。然后,在控制器的配置软件中,选择相应的伺服驱动器...