正运动技术
正运动技术
EN

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

The value of Zmotion is to bring customers more success!

首页 / 支持与服务 / 技术分享

Technical support

技术分享

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



强实时运动控制内核MotionRT750

MotionRT750是正运动技术首家自主自研的x86架构Windows系统或Linux系统下独占确定CPU的强实时运动控制内核。

强实时运动控制内核MotionRT750.png

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

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

VPLC系列、XPCIE系列产品接线图.png





MotionRT750应用优势:

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

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

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

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

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

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

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




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



超实时EtherCAT运动控制卡XPCIE6032H

XPCIE6032H运动控制卡集成6路独立EtherCAT主站接口。整卡最高可支持254轴运动控制;125usEtherCAT通讯周期时,两个端口配置冗余最高可支持32轴运动控制。6个EtherCAT主站各通道独立工作,多EtherCAT主站互不影响。

超实时EtherCAT运动控制卡XPCIE6032H接线图.png

此外,对于EtherCAT接口数量需求不高的客户,我们也有衍生型号XPCIE2032H可选。同系列产品XPCIE2032H集成2路独立EtherCAT接口。整卡最高可支持至254轴运动控制;125usEtherCAT通讯周期时,单接口最高可支持32轴运动控制。2个EtherCAT主站各通道独立工作,多EtherCAT主站互不影响。

超实时EtherCAT运动控制卡XPCIE2032H.png

XPCIE6032H运动控制卡面向半导体设备、精密3C电子、生物医疗仪器、新能源装备、人形机器人及激光加工等高速高精场景,为固晶机、贴片机、分选机、锂电切叠一体机、高速异形插件设备等自动化装备提供核心运动控制支持。







XPCIE6032H硬件特性:

1.EtherCAT通讯周期可到125us(需要主机性能与实时性足够)。

2.板卡集成6路独立的EtherCAT主站接口,最多可支持254轴运动控制。

3.搭载运动控制实时内核MotionRT750。

4.相较于传统的PCI/PCIe、网口等通讯方式,速度可提升了10-100倍以上。

5.板载16路高速输入,16路高速输出。

6.板载4路高速锁存、4路硬件位置比较输出、4路通用PWM输出。



更多关于XPCIE6032H的详情介绍与使用点击→全球首创!PCIe超实时6通道EtherCAT运动控制卡上市!



PCIe EtherCAT实时运动控制卡XPCIE1032H

XPCIE1032H是一款基于PCI Express的EtherCAT总线运动控制卡,可选6-64轴运动控制,支持多路高速数字输入输出,可轻松实现多轴同步控制和高速数据传输。

PCIe EtherCAT实时运动控制卡XPCIE1032H.png

XPCIE1032H运动控制卡集成了强大的运动控制功能,结合MotionRT7运动控制实时软核,解决了高速高精应用中,PC Windows开发的非实时痛点,指令交互速度比传统的PCI/PCIe快10倍。

强实时运动控制内核MotionRT750核内交互.png






XPCIE1032H硬件特性:

1.6-64轴EtherCAT总线+脉冲可选,其中4路单端500KHz脉冲输出。

2.16轴EtherCAT同步周期500us,支持多卡联动。

3.板载16点通用输入,16点通用输出,其中8路高速输入和16路高速输出。

4.通过EtherCAT总线,可扩展到512个隔离输入或输出口。

5.支持PWM输出、精准输出、PSO硬件位置比较输出、视觉飞拍等。

6.支持直线插补、圆弧插补、连续轨迹加工(速度前瞻)。

7.支持电子凸轮、电子齿轮、位置锁存、同步跟随、虚拟轴、螺距补偿等功能。

8.支持30+机械手模型正逆解模型算法,比如SCARA、Delta、UVW、4轴/5轴 RTCP...



更多关于XPCIE1032H详情点击“不止10倍提速!PCIe EtherCAT实时运动控制卡XPCIE1032H 等您评测!”查看。



PCI Express实时运动控制卡XPCIE1028

PCI Express®总线运动控制卡XPCIE1028,具备位置锁存、多维高速硬件位置比较输出PSO、同步跟随、精准触发的运动控制和I/O控制功能。配合正运动技术MotionRT7实时内核使用,可高度满足高速视觉筛选机应用所需的运动控制需求。

PCI Express实时运动控制卡XPCIE1028.png

XPCIE1028运动控制卡是正运动技术专为高速视觉筛选设备设计的一款PCI Express®总线运动控制卡,内置丰富的I/O、通讯接口,可以轻松地实现与视觉筛选机通信,非常匹配使用于1-12个相机+多个高速吹气口的全自动CCD光学筛选机等设备上使用。

高速视觉筛选设备示意图.png
高速视觉筛选设备示意图
XPCIE1028自带8路高速输入和多达16路高速硬件位置比较输出,能够轻松实现视觉飞拍和高速、精准触发控制等视觉筛选机所需的多种实时性运动控制,以及高稳定性。脉冲输出+编码器反馈,可实现转盘的旋转,并实时记录编码器的实时反馈位置,帮您更加精准地控制设备。
XPCIE1028在光学筛选机上硬件方案1.png
XPCIE1028在光学筛选机上硬件方案1
8相机+8排料)
XPCIE1028在光学筛选机上硬件方案2.png

XPCIE1028在光学筛选机上硬件方案2

12相机+4排料)







XPCIE1028硬件特性:

1.支持电子凸轮、直线插补等运动控制功能。

2.板载28+2点通用输入,32+2点通用输出,其中8路高速输入和16路高速输出。

3.板载4路脉冲输出,其中一路专用脉冲轴接口(差分脉冲输出+编码器反馈)。

4.支持8路高速锁存输入口,可记录转盘来料位置。

5.多达16路精准输出、硬件位置比较输出,机器视觉飞拍检测和筛选吹气高速输出,可根据需求分配。




更多关于高速视觉筛选机方案详情点击“高速视觉筛选机PCI Express实时运动控制卡XPCIE1028”查看。



01
C#进行MotionRT750项目的创建与开发

本案例开发环境Visual Studio 2022。

1.打开Visual Studio 2022软件选择创建新项目。

1.png

2.选择开发语言为“C#”和Windows窗体应用(.NET Framework)。

2.png

3.选择项目名称、文件目录位置及框架。

3.png

4.将厂商提供的C#的库文件复制到新建的项目中。

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

4.png

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

5.png

5.打开新建的项目文件,在右边的解决方案资源管理器中点击显示所有,然后鼠标右键点击Zmcaux.cs文件,点击包括在项目中。

6.png

6.进入Form1.cs代码编辑界面,写入using cszmcaux,并声明控制器句柄g_handle。

7.png

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



02
相关PC函数介绍

注:使用网口方式连接MotionRT750时,要将MotionRT750的Config配置Eth num值设置为一个大于0的数(0-12),输入的ip地址为本机ip地址,可以在RTSys连接中直接查看。

8.png
9.png
10.png



03
相关测试代码介绍

本次指令交互速度测试使用三种型号的控制器对比测试,以下测试为正运动实验室测试数据,与配置的电脑与程序代码等有关系,以下测试数据仅供客户参考。客户具体项目以客户实际测试环境为准。

以下正运动实验室测试为:XPCIE1032H(需搭配MotionRT750使用)、PCIE464、ZMC432-V2,MotionRT750可以通过LOCAL和网口方式连接,故本次MotionRT750测试使用LOCAL和网口两种方式进行测试。

1.XPCIE1032H型号控制卡使用MotionRT750的LOCAL、网口连接方式测试。

11.png

2.ZMC432-V2型号控制器使用网口连接方式测试。

12.png

3.PCIE464型号控制卡使用PCI的连接方式测试。

13.png

①MotionRT750通过LOCAL连接按钮的事件处理函数,调用函数ZAux_FastOpen(),选择连接类型5去连接控制卡LOCAL连接方式)。

private void localConct(object sender, EventArgs e)
{
    //LOCAL方式连接
    int ret = zmcaux.ZAux_FastOpen(5, comboBox2.Text, 1000, out handle);
    if (ret == 0)
    {
        label5.Text = "已链接" + comboBox2.Text;
        label5.BackColor = Color.Green;
    }
    else
    {
        MessageBox.Show("链接失败,请选择正确的LOCAL!");
    }
}


②MotionRT750和ZMC432-V2型号控制器通过网口连接按钮的事件处理函数,调用函数ZAux_OpenEth()去连接控制器(网口连接方式)。

private void IPConct(object sender, EventArgs e)
{
    //网口方式连接
    int ret = zmcaux.ZAux_OpenEth(textBox1.Text, out handle);
    if (ret == 0)
    {
        label2.Text = "已链接" + textBox1.Text;
        label2.BackColor = Color.Green;
    }
    else
    {
        MessageBox.Show("链接失败,请输入正确的ip!");
    }
}


PCIE464型号控制卡通过PCI连接按钮的事件处理函数,调用函数ZAux_FastOpen(),选择连接类型4去连接控制卡PCI连接方式)。

private void pciConct(object sender, EventArgs e)
{
    //PCI方式连接
    int ret = zmcaux.ZAux_FastOpen(4, comboBox4.Text, 1000, out handle);
    if (ret == 0)
    {
        label13.Text = "已链接" + comboBox4.Text;
        label13.BackColor = Color.Green;
    }
    else
    {
        MessageBox.Show("链接失败,请选择正确的LOCAL!");
    }
}


通过单条指令交互周期的测试按钮的事件处理函数来计算单条指令的交互平均耗时和总耗时。

private void run(object sender, EventArgs e)
{
    //run函数用于测试单条指令交互周期与总耗时
    float dpos = 0;
    int testNum = Convert.ToInt32(comboBox3.Text.ToString());
    //beforeDT记录交互指令前的时刻
    DateTime beforeDT = System.DateTime.Now;
    for (int i = 0; i < testNum; i++)
    {
        //进行n次单指令交互
        zmcaux.ZAux_Direct_GetDpos(handle, 0, ref dpos);
    }
    //afterDT记录交互指令后的时刻
    DateTime afterDT = System.DateTime.Now;
    //计算beforeDT与afterDT的时间差
    TimeSpan ts = afterDT - beforeDT;
    //总耗时 ms
    label11.Text = ts.TotalMilliseconds.ToString();
    //平均耗时 us
    label8.Text = (ts.TotalMilliseconds * 1000 / testNum).ToString();
    label14.Text = dpos.ToString();
}


通过多条指令交互周期的测试按钮的事件处理函数来计算多条指令的交互平均耗时和总耗时。

private void runMuch(object sender, EventArgs e)
{
    //runMuch函数用于测试多条指令交互周期与总耗时
    int testNum = Convert.ToInt32(comboBox3.Text.ToString());
    string cmd;
    int star = 0;
    StringBuilder cmdBuff = new StringBuilder(2048);
    string[] tmp = new string[12];
    cmd = "?dpos(0),dpos(1),dpos(2),dpos(3),axisstatus(0),axisstatus(1),axisstatus(2),axisstatus(3),in(0),in(1),in(2),in(3)";
    //beforeDT记录交互指令前的时刻
    DateTime beforeDT = System.DateTime.Now;
    for (int i = 0; i < testNum; i++)
    {
        zmcaux.ZAux_DirectCommand(handle, cmd, cmdBuff, 2048);
    }
    //afterDT记录交互指令前的时刻
    DateTime afterDT = System.DateTime.Now;
    //计算beforeDT与afterDT的时间差
    TimeSpan ts = afterDT - beforeDT;
    //总耗时 ms
    label23.Text = ts.TotalMilliseconds.ToString();
    //平均耗时 us
    label16.Text = (ts.TotalMilliseconds * 1000 / testNum).ToString();
    string s = cmdBuff.ToString();
    string[] arrS = new string[20];
    for (int i = 0; i < s.Length; i++)
    {
        if (s[i] != 9)
        {
            arrS[star] += s[i];
        }
        else
        {
            star++;
            continue;
        }
    }
}


网口连接周期上报的方式获取输入口状态的总耗时测试函数如下。

private void CycIoTest(object sender, EventArgs e)
{
    int[] InState = new int[1000];
    Int32 singleValue = 0;
    //打开使能周期上报
    zmcaux.ZAux_CycleUpEnable(handle,0,1000,"IN(0,1000)");
    //强制上报一次,0 为通道号
    zmcaux.ZAux_CycleUpForceOnce(handle, 0);
    //beforeDT记录交互指令前的时刻
    DateTime beforeDT = System.DateTime.Now;
    for (uint i = 0; i < 1000; i++)
    {
        //从周期上报内容里面读取输入口状态
        zmcaux.ZAux_CycleUpReadBuffInt(handle, 0, "IN", i, ref singleValue);
        InState[i] = singleValue;
    }
    //afterDT记录交互指令后的时刻
    DateTime afterDT = System.DateTime.Now;
    //计算beforeDT与afterDT的时间差
    TimeSpan ts = afterDT - beforeDT;
    //总耗时 ms
    label57.Text = ts.TotalMilliseconds.ToString();
    //关闭使能周期上报
    zmcaux.ZAux_CycleUpDisable(handle, 0);
}


单条指令读取1个输入口状态的总耗时测试函数如下。

private void oneIo(object sender, EventArgs e)
{
    UInt32 singleValue = 0;
    uint[] InState = new uint[1000];
    //beforeDT记录交互指令前的时刻
    DateTime beforeDT = System.DateTime.Now;
    for (int i = 0; i < 1000; i++)
    {
        //单条指令读取单个输入口状态
        zmcaux.ZAux_Direct_GetIn(handle, i, ref singleValue);
        InState[i] = singleValue;
    }
    //afterDT记录交互指令后的时刻
    DateTime afterDT = System.DateTime.Now;
    //计算beforeDT与afterDT的时间差
    TimeSpan ts = afterDT - beforeDT;
    //总耗时 ms
    label48.Text = ts.TotalMilliseconds.ToString();
}


单条指令读取多个输入口状态的总耗时测试函数如下。

private void muchIo(object sender, EventArgs e)
{
    int[] InState = new int[32];
    //beforeDT记录交互指令前的时刻
    DateTime beforeDT = System.DateTime.Now;
    //单条指令读取多个输入口状态,输入口状态按位进行存储,一个INT型数组可以存储32个输入口状态,可读取32个及以上
    zmcaux.ZAux_Direct_GetInMulti(handle, 0, 999, InState);
    //afterDT记录交互指令前的时刻
    DateTime afterDT = System.DateTime.Now;
    //计算beforeDT与afterDT的时间差
    TimeSpan ts = afterDT - beforeDT;
    //总耗时 ms
    label19.Text = ts.TotalMilliseconds.ToString();
}


04
运行效果

1.MotionRT750通过LOCAL连接方式的单条指令和多条指令交互时间测试结果如下图所示。

14.png

MotionRT750 LOCAL连接方式测试(1k次)

15.png

MotionRT750 LOCAL连接方式测试(1w次)

16.png

MotionRT750 LOCAL连接方式测试(10w次)

2.MotionRT750通过网口连接方式的单条指令和多条指令交互时间测试结果如下图所示。

17.png

MotionRT750 网口连接方式测试(1k)

18.png

MotionRT750 网口连接方式测试(1w)

19.png

MotionRT750 网口连接方式测试(10w)

3.ZMC432-V2控制器通过网口连接方式的单条指令和多条指令交互时间测试结果如下图所示。

20.png

ZMC432-V2 网口连接方式测试(1k)

21.png

ZMC432-V2 网口连接方式测试(1w)

22.png

ZMC432-V2 网口连接方式测试(10w)

4.PCIE464控制卡通过PCI连接方式的单条指令和多条指令交互时间测试结果如下图所示。

23.png

PCIE464 PCI连接方式测试(1k)

24.png

PCIE464 PCI连接方式测试(1w)

25.png

PCIE464 PCI连接方式测试(10w)

5.接下来是对IO状态获取的耗时测试,通过不同的IO状态获取模式(周期上报,单指令获取1个或多个输入口状态),对比各连接方式下的总耗时,旨在为实际应用场景提供性能参考,提升数据获取效率,确保系统能更高效稳定运行。

(1)MotionRT750通过网口连接方式使用周期上报功能获取输入口状态、使用单条指令获取1个输入口状态和使用单条指令获取多个输入口状态,三种方式获取1000个输入口状态的总耗时如下。

26.png

(2)ZMC432-V2控制器通过网口连接方式使用周期上报功能获取输入口状态、使用单条指令获取1个输入口状态和使用单条指令获取多个输入口状态,三种方式获取1000个输入口状态的总耗时如下。

27.png

(3)MotionRT750通过LOCAL连接方式时使用单条指令获取1个输入口状态和单条指令获取多个输入口状态,两种方式获取1000个输入口状态的总耗时如下。

28.png

(4)PCIE464控制卡通过PCI连接方式使用单条指令获取1个输入口状态和单条指令获取多个输入口状态,两种方式获取1000个输入口状态的总耗时如下。

29.png



05
分析与结论


1.对于MotionRT750的LOCAL方式连接、网口方式连接以及PCI方式和控制器网口方式连接时单条或多条指令交互时间测试,从上面的运行效果图的数据显示来看,可以看出:

当进行1k、1w10w次的单指令交互或多条指令交互的时候,MotionRT750的LOCAL接方式进行单条指令交互所需要的时间平均2.2us左右和一次性读取12个状态的多条指令交互所需要的时间平均3.9us左右,都是要比PCI连和控制器网口连接的方式更快PCI单条平均38us左右、多条平均115us左右;网口单条平均169us、多条平均208us左右)。

而MotionRT750的网口连接方式的指令交互时间也是快于控制器网口连接方式的。






2.对于读取输入口状态指令测试,从运行效果图的显示结果来看:

无论是MotionRT750还是控制器,在网口连接下周期上报功能效率最高,避免轮询引发的多包数据传输耗时问题,提升带宽利用率,总耗时大约仅需0.33ms;

而单指令批量读取多个输入口状态因减少通信次数,耗时时间对比读取单个输入口降低约96%;

LOCAL和PCI连接时,虽不支持周期上报功能,但单指令对比下,批量读取多个输入口状态的效率显著高于读取单个输入口。

综合来看,在实际应用中,选择哪种数据获取策略取决于具体的应用场景、数据特性和性能要求。

例如,如果程序需要快速响应单个事件,单条获取可能更为合适。如果目标是最大化数据处理速度,多条获取可能更有益。而对于需要定期维护数据新鲜度的应用,周期性获取是必要的。


总结

综上所述,我们可以从测试结果看出,MotionRT750的LOCAL连接方式展现卓越的实时性能,指令交互的效率也非常的稳定。

当测试次数从1k增加到1w、10w次时,指令交互时间波动不大,在延迟、稳定性上全面优于PCI和控制器网口的连接,更加适合高精度、高实时性、高稳定性的工业运动控制场景应用。

教学视频可点击→“强实时运动控制内核MotionRT750(三):us级高速交互之C#,为智能装备提速”查看。


完整代码获取地址

二维码.png

本次,正运动技术强实时运动控制内核MotionRT750(三):us级高速交互之C#,为智能装备提速,就分享到这里。

更多精彩内容请关注“正运动小助手”公众号,需要相关开发环境与例程代码,请咨询正运动技术销售工程师:400-089-8936。

本文由正运动技术原创,欢迎大家转载,共同学习,一起提高中国智能制造水平。文章版权归正运动技术所有,如有转载请注明文章来源。


二维码.png

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


邮箱留言

Copyright © 2013 正运动技术有限公司 Design by Zmotion 版权所有   粤ICP备13037187号    Powered by www.zmotion.com.cn 运动控制器-运动控制卡

在线咨询