http://www.gkong.com 2025-12-19 14:09 深圳市正运动技术有限公司
今天,正运动小助手给大家分享一下强实时运动控制内核MotionRT750下PC上位机的EtherCAT总线初始化。
PC上位机EtherCAT总线的初始化方式主要分为两种:纯上位机初始化和下载BASIC脚本初始化。本文将详细讲解如何通过纯上位机的方法来实现PC上位机EtherCAT总线初始化。
全国产强实时运动控制内核MotionRT750
MotionRT750是正运动技术首家自主自研的x86架构Windows系统或Linux系统下独占确定CPU的强实时运动控制内核。

该方案采用独占确定CPU内核技术实现超强性能的强实时运动控制。它将核心的运动控制、机器人算法、数控(CNC)及机器视觉等强实时的任务,集中运行在1-2个专用CPU核上。与此同时,其余CPU核则专注于处理Windows/Linux相关的非实时任务。
此外集成MotionRT750 Runtime实时层与操作系统非实时层,并利用高速共享内存进行数据交互,显著提升了运动控制与上层应用间的通信效率及函数执行速度,最终实现更稳定、更高效的智能装备控制,确保了运动控制任务的绝对实时性与系统稳定性,特别适用于半导体、电子装备等高速高精的应用场合。

MotionRT750应用优势:
1.跨平台兼容性:支持Windows/Linux系统,适配不同等级CPU。
2.开发灵活性:提供多语言编程接口,便于二次开发与功能定制。
3.实时性提升:通过CPU内核独占机制与高效LOCAL接口,实现2-3us指令交互周期,较传统PCI/PCIe方案提速近20倍。
4.扩展能力强化:多卡多EtherCAT通道架构支持254轴运动控制及500usEtherCAT周期。
5.系统稳定性:32轴125us EtherCAT冗余架构消除单点故障风险,保障连续生产。
6.安全可靠性:不惧Windows系统崩溃影响,蓝屏时仍可维持急停与安全停机功能有效,确保产线安全运行。
7.功能扩展性:实时内核支持C语言程序开发,方便功能拓展与实时代码提升效率。
MotionRT750视频介绍可点击→正运动强实时运动控制内核MotionRT750。
更多关于MotionRT750的详情介绍与使用点击→强实时运动控制内核MotionRT750(一):驱动安装、内核配置与使用。
1.在VS2019菜单“文件”→“新建”→“项目”,启动创建项目向导。

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

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

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

5.使用纯上位机总线初始化时需要找厂商提供ZMotionECAT.cs文件。

6.将厂商提供的C#的库文件以及相关文件复制到新建的项目中。
(1)将zmcaux.cs和ZMotionECAT.cs文件复制到新建的项目里面中。

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

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

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

至此,项目新建完成,可进行C#项目开发。
PC函数手册可在光盘资料获取,具体路径如下:“00光盘资料\03编程手册\03ZMotion PC函数库编程手册”。

1.上位机连接MotionRT750的接口。

2.控制器回零模式。

3.驱动器回零模式。


总线初始化代码:
一、选择连接方式为LOCAL连接,点击【连接】。弹出连接成功提示框后,配置总线轴地址参数和本地脉冲轴地址参数后,点击【总线初始化】,会在界面表格中显示总线相关信息。

1.若无法成功总线初始化,命令与输出窗口会打印相关错误信息。如:Unknown device man XXX Slot return error:3205.
报错信息如下图,则需要先询问对应驱动器厂家提供XML文件。

解决方法:将驱动器厂家提供的XML文件,添加到RTSys项目的配置文件中。
(1)打开RTSys软件,点击【文件】,选择【新建工程】。

(2)选择文件路径,输入文件名,然后点击【保存】。

(3)右键点击【配置文件】,选择【添加到配置文件】,选中要添加的XML文件后点击【打开】。

(4)点击菜单栏中的【控制器】,接着点击【生成ZAR文件】,随后点击【浏览】来选择生成ZAR文件的路径。

(5)将生成的ZAR文件放在项目的ZAR文件夹中,随后进行总线初始化。

具体代码如下:
// 获取解决方案根目录
string solutionDir = Path.GetFullPath(Path.Combine(AppContext.BaseDirectory, @"..\..\..\"));
string zarPath = Path.Combine(solutionDir, "ZAR");
// 获取所有文件的完整路径string[] fileNames = Directory.GetFiles(zarPath).Select(Path.GetFileName).ToArray();
foreach(string fileName in fileNames)
{
//Init.zar为下载的ZAR文件名
if (fileName == "Init.zar")
{
string path = Path.Combine(zarPath, "Init.zar");
zmcaux.ZAux_ZarDown(g_handle, path, 0);
AppendTextOut("ZAR文件下载成功!!!", Color.DarkGoldenrod);
}
}
2.如需将对应总线节点的IO状态信息或模拟量信息映射到控制器上对应起始地址查看,则修改对应节点IO或模拟量的起始地址,修改完成后,点击【保存】,再点击【总线初始化】。

3.通过RTSys软件查看IO或模拟量映射的地址成功与否。
成功连接控制器后,在菜单栏中找到【控制器】→【控制器状态】→【槽位0节点】,可以看到所有节点对应的IO或模拟量起始地址。可以在总线初始化完成后观看此界面确认IO或模拟量起始地址映射正常。

相关代码介绍:
(1)上位机如何链接上MotionRT750。
if (Controler_IP.Text != null && Controler_IP.Text != "")
{
int ret = -1;
switch (Connect_ModeIP.Text)
{
case "IP":
//控制器IP地址连接
ret = zmcaux.ZAux_FastOpen(2, Controler_IP.Text.Trim(), 5000, out g_handle);
break;
case "COM":
//控制器COM串口号连接
ret = zmcaux.ZAux_OpenCom(uint.Parse(Controler_IP.Text), out g_handle);
break;
case "LOCAL":
//LOCAL接口连接RT750
ret = zmcaux.ZAux_FastOpen(5, Controler_IP.Text.Trim(), 5000, out g_handle);
break;
case "PCI":
//插入卡槽卡号连接PCI卡
ret = zmcaux.ZAux_FastOpen(4, Controler_IP.Text.Trim(), 5000, out g_handle);
break;
}
if (ret != 0)
{
MessageBox.Show("IP链接失败,报错码: " + ret.ToString());
}
else
{
if (g_handle != (IntPtr)0)
{
//连接成功后停止所有轴
ret = zmcaux.ZAux_Direct_Rapidstop(g_handle, 2);
MessageBox.Show("链接成功!");
this.Text = "已连接";
timer1.Enabled = true;
}
}
}
(2)总线初始化结构体定义,自定义初始化所需的变量,例如LocalAxisId(本地轴起始ID)和LocalAxisNum(本地轴使用的轴数量)。
具体变量信息可以在解决方案中点击ZMotionEcat.cs文件进行查看。
其中,DrivePdoMode用于设置每个轴的发送PDO和接收PDO的配置选择。不同模式对应的PDO数据各不相同。
例如,若总线轴需切换至EtherCAT周期速度模式或EtherCAT周期力矩模式,则相应的PDO列表必须包含对应数据,如模式17和18支持三种总线模式。
具体列表数据请参考RTBasic手册中的drive_profile说明。
if (textBox1.Text == "" || textBox3.Text == "")
{
Console.WriteLine("总线参数不能为空");
return;
}
//定义总线初始化的信息结构体个数,最多可以支持128个节点MyEcatInit.EcatInitInfoSet ecatInitInfo = new
MyEcatInit.EcatInitInfoSet(int.Parse(textBox3.Text));
?ecatInitInfo.InitStructFlag = 0; //是否自定义初始化参数,设置1的话使用默认的总线初始化参数,设置成0则需要自定义总线初始化相关参数
if (ecatInitInfo.InitStructFlag != 1)
{
// 1. 本地轴参数,用于指定本地轴的起始 ID 和使用的轴数量
ecatInitInfo.LocalAxisId = int.Parse(textBox2.Text); // 本地轴起始 ID
ecatInitInfo.LocalAxisNum = int.Parse(textBox4.Text); // 本地轴使用的轴数量
// 2. 驱动轴相关参数,用于指定驱动轴的起始 ID 和数量
ecatInitInfo.DriveAxisStart = int.Parse(textBox1.Text); // 驱动轴起始 ID,第 1 个驱动轴为 DriveAxisStart,第 2 个为 DriveAxisStart + 1 以此类推
ecatInitInfo.DriveAxisNum = -1; // 驱动轴数量[默认 -1],-1 表示总线初始化的时候不判断驱动的轴数量是否对上,若为 0 表示扫描到的轴数量,会检查扫描到的轴数量是否一致
ecatInitInfo.EcatNodeNum = int.Parse(textBox3.Text); // 总线节点数目[默认 -1],-1 表示总线初始化的时候不判断节点个数是否对上
for (int i = 0; i < ecatInitInfo.EcatNodeNum; i++)
{
ecatInitInfo.DrivePdoMode[i] = 12; // PDO 模式数组,参考 RTBasic 手册 drive_profile 说明,默认值为 12 表示需要配置相关 PDO
}
ecatInitInfo.DriveEnable = 1; // 总线初始化时是否自动使能,1 驱动器自动使能,0 不使能驱动器
ecatInitInfo.DriveIoSpa = 16; // 一个驱动映射多少个 IO 端口数量
// 3.DC 同步时钟和 DC 偏移补偿,用于指定系统时钟模式和 DC 偏移标志及时间
ecatInitInfo.SysClockMode = 1; // 系统时钟模式,1 开启 DC 同步时钟,0 关闭 DC 同步时钟
for (int i = 0; i < ecatInitInfo.EcatNodeNum; i++)
{
ecatInitInfo.DcOffsetFlag[i] = 0; // N 个节点对应的是否需要进行 DC 偏移补偿,0 关闭 DC 偏移,1 开启 DC 偏移,以节点 ID 形式
ecatInitInfo.DcOffsetTime[i] = 0; // N 个节点对应的 DC 偏移时间,单位为微秒,0.5 表示 0.5 微秒,以节点 ID 形式
}
}
二、点击【轴参数初始化】进入轴控制界面,开始总线轴的手动调试运动。
1.轴的使能控制。首先将轴类型切换到总线轴,再观察轴使能状态指示灯的颜色,可以准确判断轴的使能情况:绿色代表已使能,红色则表示未使能。点击图案即可切换轴的使能状态。

2.配置好轴参数、轴号及相关参数后,通过左转右转手动调试轴运动。
建议将【脉冲当量】设置为机台运动1mm所需的脉冲数。若按此推荐设置,【速度】的单位为mm/s,【加速度】和【减速度】的单位则为mm/s²。
通常,【加速度】和【减速度】设置为速度的10倍。
3.若在调试过程中不确定机台运动1mm所需的脉冲数,可将【脉冲当量】设为1。
为安全起见,【速度】可先设为10,此时左右整体速度为1*10=10个脉冲每秒,【加速度】和【减速度】均设为1000。随后手动运动轴,观察轴是否运动及【反馈位置】是否有变化。
若手动运动时【反馈位置】数据变化但实际轴未动,可逐步将【脉冲当量】以10倍递增,每次调整后反复手动运动,检查轴是否运动。
【反馈位置】由编码器反馈,若其数据变化,轴必定在运动;若肉眼难以察觉,可能是机台运动较慢。

手动运动和寸动代码如下:
//参数同步
zmcaux.ZAux_Direct_SetAtype(g_handle, axis[select_axis], int.Parse(atype_s[select_axis])); //设置轴类型
zmcaux.ZAux_Direct_SetUnits(g_handle, axis[select_axis], units[select_axis]); //设置脉冲当量
zmcaux.ZAux_Direct_SetAccel(g_handle, axis[select_axis], accel[select_axis]); //设置加速度
zmcaux.ZAux_Direct_SetDecel(g_handle, axis[select_axis], decel[select_axis]); //设置减速度
zmcaux.ZAux_Direct_SetSpeed(g_handle, axis[select_axis], speed[select_axis]); //设置运行速度
zmcaux.ZAux_Direct_SetFsLimit(g_handle, axis[select_axis], Fslimit[select_axis]); //设置正向软限位
zmcaux.ZAux_Direct_SetRsLimit(g_handle, axis[select_axis],Rslimit[select_axis]); //设置负向软限位
zmcaux.ZAux_Direct_SetFastDec(g_handle, axis[select_axis], speed[select_axis]* accel[select_axis]); //设置快减减速度,达到限位或异常停止时自动采用
Thread.Sleep(1);
if (param < 5)//左转
{
zmcaux.ZAux_Direct_Single_MoveAbs(g_handle, axis[select_axis], Rslimit[select_axis]);
}
else if (5 <= param && param 9)//运动
{
if (mode[select_axis])//绝对运动
{
zmcaux.ZAux_Direct_Single_MoveAbs(g_handle, axis[select_axis], move_dpos[select_axis]);
}
else //相对运动
{
zmcaux.ZAux_Direct_Single_Move(g_handle, axis[select_axis], move_dpos[select_axis]);
}
}
三、在确保手动运动正常且方向无误的前提下,我们可以继续测试轴的回零功能。
若未勾选【启用控制器回零方式】,则默认采用总线驱动器回零(精度更高,推荐使用,驱动器回零参考驱动器手册)。
此时,需参照总线驱动器手册中对回零模式的说明,并将原点传感器连接至驱动器的原点输入口。若勾选【启用控制器回零方式】,则使用控制器回零,具体回零方式可参考下拉框中的介绍。
在实际项目中,仍建议优先选择总线驱动器回零。回零测试步骤如下:
1.选择回零轴号,配置轴的正限位信号、负限位信号及原点信号后,点击【配置轴IO】。若轴状态显示“30h”,则勾选【反转】,并再次点击【配置轴IO】。
2.配置速度、爬行速度及回零模式后,点击【启动回零】。若出现方向错误或速度过快的情况,请立即点击【紧急停止】,并重新进行调试。

3.若轴状态显示“8h”,则表示驱动器出现报错。以下是遇到驱动器报警后的处理方法。

(1)检查驱动器上的LED面板是否显示报错信息,报错时将呈现相应的错误码。

常见的错误,如驱动器过载和转矩饱和异常等,均可通过【清除报警】按钮清除。

具体代码如下:
int position = 3; // 获取第3位
int value = 0;
zmcaux.ZAux_BusCmd_DriveClear(g_handle, (uint)param, 0); //清除总线伺服轴报警
Thread.Sleep(5000); //等待报警清除
zmcaux.ZAux_BusCmd_SDOReadAxis(g_handle, (uint)param, 0x6041, 0, 6, ref value); //读取驱动器状态字对应数据字典6041
if (((value >> position) & 1) == 0)
{
zmcaux.ZAux_Direct_Single_Datum(g_handle, param, 0); //清除控制器报警
Thread.Sleep(100);
zmcaux.ZAux_Direct_SetAxisEnable(g_handle, param, 1); //重新上使能
MessageBox.Show("报警清除成功!!!");
}
else{MessageBox.Show("报警清除失败,重新清除或查找报错原因!!!");}
(2)如果通过代码无法清除报警,绝大多数驱动器报警问题可以通过断电并重启驱动器来解决。若断电重启后报警依然存在,则需参照驱动器手册进行错误排查,并可咨询驱动器技术人员以获取解决方案。
教学视频请点击→PC强实时运动控制(一):C#的EtherCAT总线初始化(上)
完整代码获取地址
▼

本次,正运动技术PC强实时运动控制(一):C#的EtherCAT总线初始化(上),就分享到这里。
更多精彩内容请关注“正运动小助手”公众号,需要相关开发环境与例程代码,请咨询正运动技术销售工程师:400-089-8936。

正运动技术专注于运动控制技术研究和通用运动控制软硬件产品的研发,是国家级高新技术企业。正运动技术汇集了来自华为、中兴等公司的优秀人才,在坚持自主创新的同时,积极联合各大高校协同运动控制基础技术的研究,是国内工控领域发展最快的企业之一,也是国内少有、完整掌握运动控制核心技术和实时工控软件平台技术的企业。主要业务有:运动控制卡_运动控制器_EtherCAT运动控制卡_EtherCAT控制器_运动控制系统_视觉控制器__运动控制PLC_运动控制_机器人控制器_视觉定位_XPCIe/XPCI系列运动控制卡等等。