0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
会员中心
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

PC强实时运动控制(一):C#的EtherCAT总线初始化(下)

正运动技术 来源:正运动技术 作者:正运动技术 2026-02-05 10:00 次阅读
加入交流群
微信小助手二维码

扫码添加小助手

加入工程师交流群


今天,正运动小助手给大家分享一下强实时运动控制内核MotionRT750下PC上位机的EtherCAT总线初始化。

PC上位机EtherCAT总线的初始化方式主要分为两种:纯上位机初始化和下载BASIC脚本初始化。上节课程给大家讲解了如何通过纯上位机的方法来实现PC上位机EtherCAT总线初始化【详情点击→PC强实时运动控制(一):C#的EtherCAT总线初始化(上)】。

本文将详细讲解如何通过使用ZMotionTools工具配置得到的ZAR文件来进行EtherCAT总线初始化。

这里所说的EtherCAT总线初始化,是指正运动的控制器作为主站和EtherCAT的驱动器等从站建立正常通讯,并把各个驱动器映射到控制器的对应轴上的过程。(默认第一个驱动器是0轴,第二个驱动器是1轴,以此类推)

1.脉冲步进驱动器
脉冲步进驱动器一般上电即可使能,把控制器对应轴的轴类型设置成1或者7,然后就可以发送运动指令去控制了。

2.脉冲伺服驱动器
脉冲伺服驱动器的使能操作,通常是将控制器的输出口连接至驱动器对应的使能口,再由控制器通过控制对应输出口的开关状态来实现脉冲伺服驱动器的使能;使能后把控制器对应轴的轴类型设置成4,然后就可以发送运动指令去控制了。

3.总线驱动器
总线驱动器相对复杂一点,需先由控制器执行总线初始化程序后控制器和驱动器通讯上,总线驱动器的使能可以通过ZAux_Direct_SetAxisEnable接口去控制,总线驱动器跑位置模式时,轴类型设置成65,就可以发送运动指令去控制了。

一.全国产强实时运动控制内核MotionRT750

MotionRT750是正运动技术首家自主自研的

x86架构Windows系统或Linux系统下独占确定CPU的强实时运动控制内核。

wKgZPGmD-bmABmoaAAIoOvONu1463.webp

该方案采用独占确定CPU内核技术实现超强性能的强实时运动控制。它将核心的运动控制、机器人算法数控(CNC)及机器视觉等强实时的任务,集中运行在1-2个专用CPU核上。与此同时,其余CPU核则专注于处理Windows/Linux相关的非实时任务。

此外集成MotionRT750 Runtime实时层与操作系统非实时层,并利用高速共享内存进行数据交互,显著提升了运动控制与上层应用间的通信效率及函数执行速度,最终实现更稳定、更高效的智能装备控制,确保了运动控制任务的绝对实时性与系统稳定性,特别适用于半导体、电子装备等高速高精的应用场合。

wKgZO2mD-bqABLgDAAdGHNmSg3I806.png

MotionRT750应用优势:

1.跨平台兼容性:支持Windows/Linux系统,适配不同等级CPU。

2.开发灵活性:提供多语言编程接口,便于二次开发与功能定制。

3.实时性提升:通过CPU内核独占机制与高效LOCAL接口,实现2-3us指令交互周期,较传统PCI/PCIe方案提速近20倍。

4.扩展能力强化:多卡多EtherCAT通道架构支持254轴运动控制及500us EtherCAT周期。

5.系统稳定性:32轴125us EtherCAT冗余架构消除单点故障风险,保障连续生产。

6.安全可靠性:不惧Windows系统崩溃影响,蓝屏时仍可维持急停与安全停机功能有效,确保产线安全运行。

7.功能扩展性:实时内核支持C语言程序开发,方便功能拓展与实时代码提升效率。

MotionRT750视频介绍可点击→正运动强实时运动控制内核MotionRT750。

更多关于MotionRT750的详情介绍与使用点击→强实时运动控制内核MotionRT750(一):驱动安装、内核配置与使用。

二.C#语言进行项目开发

1.在VS2019菜单“文件”→“新建”→“项目”,启动创建项目向导。

wKgZPGmD-buABikLAAC2hitei2c86.webp

2.选择开发语言为“C#”和Windows窗体应用程序,点击下一步。

wKgZO2mD-buAKr0HAADMugObZB871.webp

3.配置好项目名称和位置,以及相应框架,点击创建。

wKgZPGmD-buADkZoAABuJM0zHmA75.webp

4.找到厂家提供的光盘资料里面的C#函数库,路径如下(64位库为例)。

进入厂商提供的光盘资料,找到zauxdll.dll,zmotion.dll和Zmcaux.cs这三个库文件。库文件路径:【00光盘资料】→【04PC函数】→【01PC函数库V2.1】→【Windows平台】→【C#】→【64位】→【库文件】。

wKgZO2mD-byAQKfOAACy5pg6m9k78.webp

5.将厂商提供的C#的库文件以及相关文件复制到新建的项目中。

(1)将zmcaux.cs文件复制到新建的项目里面中。

wKgZPGmD-byAVGMpAAELnFlUuq084.webp

(2)将zauxdll.dll和zmotion.dll文件放入bindebug文件夹中。

wKgZO2mD-byAHwvpAADP5IkOyoM24.webp

(3)将Zmcaux.cs文件添加进项目中。右键项目名称,选择添加,再选择现有项,选择Zmcaux.cs文件。

wKgZPGmD-b2AC6sGAAFtOmgTHjQ70.webp

6.双击Form1.cs里面的Form1,出现代码编辑界面,在文件开头写入using cszmcaux,并声明控制器句柄g_handle。

wKgZO2mD-b2AZ9YaAADJoh4rex441.webp

7.至此,项目新建完成,可进行C#项目开发。

三.PC函数介绍

PC函数手册可在光盘资料获取,具体路径如下:“00光盘资料3编程手册3ZMotion PC函数库编程手册”。

wKgZPGmD-b2AWEE0AACrOBoc8ZY02.webpwKgZO2mD-b6AFtpjAABfcnW9_Zs67.webpwKgZPGmD-b-Af8wOAACaaHNaVFI43.webpwKgZO2mD-b-Ac7ngAAB2aCVy2wY40.webp

wKgZPGmD-b-AT6MSAAB-doF24j455.webpwKgZO2mD-b-AFR14AABmZKfXEt839.webp

四.使用ZMotionTools工具配置并生成ZAR文件

在ZMotionToolsQT文件中找到使用手册,参考《ZMotionTools使用手册.pdf》进行调试工作,当总线初始化正常且无差错,手动调试和回零动作均正常后,便可导出ZAR文件给上位机软件工程师使用。

wKgZPGmD-cCARDd7AACASGBwQ8g21.webp

五.总线初始化的ZAR文件导出步骤

点击【4_配置导入与保存】进入保存界面,再点击【配置更新到控制器】后,先浏览导出文件路径(存储文件路径不要有中文),再点击【导出】,等待提示文件导出成功。

wKgZO2mD-cCARokzAABN1LQgUK890.webp

在导出的文件夹内,还存在一个名为【ZmcEcatConfig】的子文件夹,其中的【ZmcEcatConfig.zar】文件即为我们工具导出的配置文件,上位机软件工程师直接拷贝该ZAR文件使用即可。

wKgZPGmD-cCAXl95AABztsA4BQU84.webp

六.C#项目如何使用配置工具导出ZAR文件进行EtherCAT总线初始化

1.将ZmotionTools工具导出的ZAR文件放置在C#项目的ZAR文件目录下,实际开发项目时可根据需求自定义路径。

wKgZO2mD-cGAAbkIAACJJO4WtIs33.webp

2.上位机如何下载ZAR脚本进行总线初始化,并等待总线初始化完成。

wKgZPGmD-cGAXtA2AAJLONc3PXU57.webp

打包好的ZAR文件里面中有定义一个全局变量【EcatInitStatus】,这个变量对总线初始化的完成情况有如下如下定义:

▶-1 — 未进行

▶0—初始化失败

▶1—初始化完成,初始化OK

▶2—从站个数对不上(配置软件设置【总线节点数】大于0后才生效)

▶3—总线轴个数对不上(配置软件设置【总线驱动器轴数】大于0后才生效)

wKgZO2mD-cGAZHsTAAHjXKnIXn022.webp

所以上位机可以通过【ZAux_Direct_GetVariableInt】去获取ZAR文件里面定义的全局变量的数值来判断总线初始化是否成功,当然总线初始化是需要时间的。

我们一般把ZAR程序下载后,上位机通过While循环(可以设置一个超时时间比如30秒)在超时时间内每隔50ms就去获取一次变量【EcatInitStatus】的值。

如果返回值不等于-1就说明总线初始化脚本执行结束了,然后根据返回值去判断是否成功。如果返回值等于-1就需要一直获取变量【EcatInitStatus】的值直到超过自己设置的超时时间就报警。

上位机具体代码如下:

//选择RAM模式下载ZAR文件到控制器进行总线初始化
intret=zmcaux.ZAux_ZarDown(g_handle,filePaths[0],0);
//如果ZAR文件下载成功
if(0==ret)
{
//等待2秒后再去获取总线初始化情况
Thread.Sleep(2000);
//设置while循环的超时时间是30s
intTime0ut=30000;
while(Time0ut>0)
{
//获取总线初始化状态的标志位
ret=zmcaux.ZAux_Direct_GetVariableInt(g_handle,"EcatInitStatus",refEcatInitStatus);
if((ret==0)&&(-1!=EcatInitStatus))
{
if(0==EcatInitStatus)
{
MessageBox.Show("总线初始化失败");
}
elseif(1==EcatInitStatus)
{
MessageBox.Show("总线初始化成功");
}
elseif(2==EcatInitStatus)
{
MessageBox.Show("总线扫描,发现节点个数和设置的不对应");
}
elseif(3==EcatInitStatus)
{
MessageBox.Show("总线扫描,发现总线轴个数和设置的不对应");
}
break;
}
//超时时间减100ms
Thread.Sleep(100);
Time0ut=Time0ut-100;
}
}


3.上位机如何实现总线通讯的软复位。

wKgZPGmD-cKAPP2uAABeylJjvLs30.webp

在ZAR脚本中存在一个死循环,当检测到总线初始化的状态标志位不为1时,会重新执行总线初始化程序。因此,若驱动器中途断电导致总线通讯中断,需重新进行总线初始化时,上位机通过【ZAux_Direct_SetUserVar】指令将总线初始化脚本变量【EcatInitStatus】设置为-1即可。

上位机具体代码如下:

//重新进行总线初始化
intErr=zmcaux.ZAux_Direct_SetUserVar(g_handle,"EcatInitStatus",-1);
//如果重新总线初始化的指令下发成功
if(0==Err)
{
Thread.Sleep(2000);
//等待2秒后再去获取总线初始化情况
intTimeOut=30000;
//设置while循环的超时时间是30s
intEcatInitStatus=-1;
//总线初始化状态
while(TimeOut>0)
{
//获取总线初始化状态的标志位
Err=zmcaux.ZAux_Direct_GetVariableInt(g_handle,"EcatInitStatus",refEcatInitStatus);
if((Err==0)&&(-1!=EcatInitStatus))
{
if(0==EcatInitStatus)
{
MessageBox.Show("总线初始化失败");
}
elseif(1==EcatInitStatus)
{
MessageBox.Show("总线初始化成功");
}
elseif(2==EcatInitStatus)
{
MessageBox.Show("总线扫描,发现节点个数和设置的不对应");
}
elseif(3==EcatInitStatus)
{
MessageBox.Show("总线扫描,发现总线轴个数和设置的不对应");
}
break;
}
//超时时间减100ms
Thread.Sleep(100);
TimeOut=TimeOut-100;
}
}

4.上位机驱动器报警如何清除报警。

如果总线轴的轴状态AxisStatus的bit3为1并且bit2为0的话,就是总线驱动器有报警并且总线通讯是没有断开的,比如AxisStatus是8h这个情况。这个时候我们上位机可以发送驱动器报警清除进行报警清除。

上位机具体代码如下:

//报警的轴号
uintAlmAxisId=0;
//清除轴AlmAxisId驱动器的当前报警
intErr=zmcaux.ZAux_BusCmd_DriveClear(g_handle,AlmAxisId,0);
//等待比较清除完成
Thread.Sleep(500);
Err=zmcaux.ZAux_Direct_Single_Datum(g_handle,(int)AlmAxisId,0);//清除控制器报警
Err=zmcaux.ZAux_Direct_SetAxisEnable(g_handle,(int)AlmAxisId,1);//对报警的轴重新上使能

5.例程使用。

选择LOCAL连接方式并点击【连接】。待弹出连接成功提示框后,点击【总线扫描】;若初始化成功,相关节点信息将显示在表格中,命令与输出窗口也会同步呈现相应提示。

wKgZO2mD-cKAH3miAADGbD0MXjE70.webp

教学视频请点击→PC强实时运动控制(二):C#的EtherCAT总线初始化(下)

完整代码获取地址

wKgZPGmD-cOAGxgWAABV7ZUgzy0990.png

本次,正运动技术PC强实时运动控制(二):C#的EtherCAT总线初始化(下),就分享到这里。

审核编辑 黄宇

声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • 运动控制
    +关注

    关注

    5

    文章

    832

    浏览量

    34661
  • ethercat
    +关注

    关注

    20

    文章

    1573

    浏览量

    46043
收藏 人收藏
加入交流群
微信小助手二维码

扫码添加小助手

加入工程师交流群

    评论

    相关推荐
    热点推荐

    EtherCAT总线初始化步骤

    EtherCAT(Ethernet for Control Automation Technology)是种高性能的工业以太网通信协议,广泛应用于工业自动领域。其初始化过程是确保系
    的头像 发表于 12-22 10:10 914次阅读
    <b class='flag-5'>EtherCAT</b><b class='flag-5'>总线</b><b class='flag-5'>初始化</b>步骤

    深度解析 | 低抖动高精度EtherCAT多轴控制的实现与实践案例

    ,清晰地展示了状态管理、数据交换与同步调用的完整框架。 三、核心流程解析:EtherCAT多轴控制系统如何运行以下是基于典型实现流程的代码框架解析: 1. 系统初始化与配置EtherCAT
    发表于 12-09 17:17

    实时运动控制内核MotionRT750(十):运动控制中的微调轨迹动态补偿

    运动控制
    正运动技术
    发布于 :2025年11月06日 09:27:11

    实时运动控制内核MotionRT750(六):us级高速交互之C++,为智能装备提速

    Windows运动控制实时内核MotionRT750的高速交互之C++
    的头像 发表于 09-04 14:50 902次阅读
    <b class='flag-5'>强</b><b class='flag-5'>实时运动</b><b class='flag-5'>控制</b>内核MotionRT750(六):us级高速交互之<b class='flag-5'>C</b>++,为智能装备提速

    GraniStudio:初始化例程

    说明 通过初始化运控板卡算子连接格拉尼总线型运控卡,导入工程自动进行连接,此算子为使用运控控制板卡的第项操作,后续运控算子需引用其输出板卡对象才可使用。 3.异常处理 当手动执行
    的头像 发表于 08-22 16:45 1015次阅读
    GraniStudio:<b class='flag-5'>初始化</b>例程

    实时运动控制内核MotionRT750(五):EtherCAT总线冗余让生产制造更可靠

    EtherCAT总线冗余赋能生产更可靠保障!
    的头像 发表于 08-21 11:14 932次阅读
    <b class='flag-5'>强</b><b class='flag-5'>实时运动</b><b class='flag-5'>控制</b>内核MotionRT750(五):<b class='flag-5'>EtherCAT</b><b class='flag-5'>总线</b>冗余让生产制造更可靠

    实时运动控制内核MotionRT750(四):高速贴装应用中的拱形运动

    C#编程实现高速贴装应用中的拱形运动
    的头像 发表于 08-15 11:32 2866次阅读
    <b class='flag-5'>强</b><b class='flag-5'>实时运动</b><b class='flag-5'>控制</b>内核MotionRT750(四):高速贴装应用中的拱形<b class='flag-5'>运动</b>

    定义IO初始化结构体

    由上述IOPORT相关功能的枚举类型我们可以知道,在对IOPORT模块进行初始化时需要根据情况配置它们。因此我们定义个IOPORT初始化的结构体类型IOPORT_Init_t,它的成员包括了由上述所有枚举类型所声明的变量,因此
    的头像 发表于 07-16 16:26 1547次阅读

    实时运动控制内核MotionRT750(二):精密点胶的PSO应用#正运动技术 #运动控制 #

    运动控制
    正运动技术
    发布于 :2025年07月16日 10:05:49

    实时运动控制内核MotionRT750():驱动安装、内核配置与使用

    实时运动控制内核MotionRT750的驱动安装与内核配置
    的头像 发表于 07-03 15:48 3885次阅读
    <b class='flag-5'>强</b><b class='flag-5'>实时运动</b><b class='flag-5'>控制</b>内核MotionRT750(<b class='flag-5'>一</b>):驱动安装、内核配置与使用

    实时运动控制内核MotionRT750():驱动安装 #正运动技术 #正运动 #运动控制 #

    运动控制
    正运动技术
    发布于 :2025年07月03日 14:16:07

    实时运动控制内核MotionRT750():CPU配置 #正运动技术 #运动控制 #正运动 #

    运动控制
    正运动技术
    发布于 :2025年07月03日 14:15:14

    C#上位机与运动控制卡网络通讯的周期上报

    使用C#上位机编程实现运动控制卡网络通讯的周期上报功能
    的头像 发表于 06-26 13:59 983次阅读
    <b class='flag-5'>C#</b>上位机与<b class='flag-5'>运动</b><b class='flag-5'>控制</b>卡网络通讯的周期上报