深圳市正运动技术有限公司

智能制造网免费会员

收藏

超高速实时运动控制卡XPCIE1032H上位机C#开发(二):EtherCAT总线初始化

时间:2023-11-17      阅读:217


XPCIE1032H功能简介

XPCIE1032H是一款基于PCI Express的EtherCAT总线运动控制卡,可选6-64轴运动控制,支持多路高速数字输入输出,可轻松实现多轴同步控制和高速数据传输。
XPCIE1032H集成了强大的运动控制功能,结合MotionRT7运动控制实时软核,解决了高速高精应用中,PC Windows开发的非实时痛点,指令交互速度比传统的PCI/PCIe快10倍。

企业微信截图_20231116091426.png

XPCIE1032H支持PWM,PSO功能,板载16进16出通用IO口,其中输出口全部为高速输出口,可配置为4路PWM输出口或者16路高速PSO硬件比较输出口。输入口含有8路高速输入口,可配置为4路高速色标锁存或两路编码器输入。

XPCIE1032H搭配MotionRT7实时内核,使用本地LOCAL接口连接,通过高速的核内交互,可以做到更快速的指令交互,单条指令与多条指令一次性交互时间可以达到3-5us左右。

企业微信截图_20231116091450.png



➜XPCIE1032H与MotionRT7实时内核的配合具有以下优势:

企业微信截图_20231116091505.png

1.支持多种上位机语言开发,所有系列产品均可调用同一套API函数库;

2.借助核内交互,可以快速调用 运动指令,响应时间快至微秒级,比传统PCI/PCIe快10倍;

3.解决传统PCI/PCIe运动控制卡在Windows环境下控制系统的非实时性问题;

4.支持一维/二维/三维PSO(高速硬件位置比较输出),适用于视觉飞拍、精密点胶和激光能量控制等应用;

5.提供高速输入接口,便于实现位置锁存;

6.支持EtherCAT总线和脉冲输出混合联动、混合插补。

企业微信截图_20231116091527.png

➜使用XPCIE1032H和MotionRT7进行项目开发时,通常需要进行以下步骤:

1.安装驱动程序,识别XPCIE1032H;

2.打开并执行文件“MotionRT710.exe”,配置参数和运行运动控制实时内核;

3.使用ZDevelop软件连接到控制器,进行参数监控。连接时请使用PCI/LOCAL方式,并确保ZDevelop软件版本在3.10以上;

4.完成控制程序开发,通过LOCAL链接方式连接到运动控制卡,实现实时运动控制。

企业微信截图_20231116091603.png

➜与传统PCI/PCIe卡和PLC的测试数据结果对比:

企业微信截图_20231116091622.png

我们可以从测试对比结果看出,XPCIE1032H运动控制卡配合实时运动控制内核MotionRT7,在LOCAL链接(核内交互)的方式下,指令交互的效率是非常稳定,当测试数量从1w增加到10w时,单条指令交互时间与多条指令交互时间波动不大,非常适用于高速高精的应用。
XPCIE1032H卡安装
  • 关闭计算机电源。

  • 打开计算机机箱,选择一条空闲的XPCIE卡槽,用螺丝刀卸下相应的挡板条。

  • 将运动控制卡插入该槽,拧紧挡板条上的固定螺丝。

XPCIE1032H驱动安装与建立连接参考往期文章EtherCAT超高速实时运动控制卡XPCIE1032H上位机C#开发(一):驱动安装与建立连接



一、新建C#项目(VS2022)
企业微信截图_20231116091638.png

到正运动技术的下载中心选择需要的平台库文件。

企业微信截图_20231116091739.png

解压下载的安装包找到 “Zmcaux.cs”, “zauxdll.dll”, “zmotion.dll” 放入到项目文件中。

1、“Zmcaux.cs”放在项目根目录文件中,与bin目录同级。

企业微信截图_20231116091752.png
2、“zauxdll.dll”,“zmotion.dll”放在bin -> Debug。

企业微信截图_20231116091803.png

用vs打开新建的项目文件,在右边的解决方案资源管理器中点击显示所有,选中项目,右键“添加”->“现有项”,选中zmcaux.cs文件添加进在项目中。

企业微信截图_20231116091822.png

企业微信截图_20231116091836.png

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

企业微信截图_20231116091850.png



二、相关PC函数介绍
相关PC函数介绍详情可参考“ZMotion PC函数库编程手册 V2.1.1”。

QQ截图20231116092358.png

企业微信截图_20231116092553.png

企业微信截图_20231116092614.png

企业微信截图_20231116092631.png

企业微信截图_20231116092646.png

企业微信截图_20231116092656.png

企业微信截图_20231116092707.png

企业微信截图_20231116092719.png

企业微信截图_20231116092731.png

企业微信截图_20231116092743.png

企业微信截图_20231116092754.png

企业微信截图_20231116092805.png

企业微信截图_20231116092820.png

其他基本轴参数指令:

企业微信截图_20231116092834.png

在form设计界面找到需要用到的控件拖拽到窗体中进行UI界面设计,设计效果图如下。

企业微信截图_20231116093228.png


三、相关程序以及设计思路

1、通过LOCAL链接方式,按钮控件的的click事件触发链接控制卡。

1.png

2、选择总线初始化的bas脚本文件下载到控制器rom里面掉电保存。

提前在zdevelop软件根据需求修改总线初始化的basic程序,映射轴,节点IO等初始化内容。
这里以节点0(汇川驱动器-0轴)、节点1(EIO16084)的1-4轴映射为总线轴为例,将节点之间通过ETHERCAT口连接起来。如下图:
相关初始化basic程序(其中红色为指令,可以到正运动查阅其使用场景以及方法)。
相关配置如下:

利用按钮的click事件,浏览选择编辑好的bas文件下载掉电保存,并弹出反馈下载是否成功的提示。

1.png

3、通过按钮控件的click事件触发初始化。

调用函数库的ZAux_Execute函数(在线命令),通过在线命令调用basic脚本里面的总线初始化函数-- Ecat_Init()进行总线初始化。

private void EcatInitStart_Btn_Click(object sender, EventArgs e)

{

    if (g_handle == (IntPtr)0)

    {

        MessageBox.Show("未链接到控制器!", "提示");

    }

    else

    {

        int tmpret;

        //-1可能正在执行初始化

        if ((BasFlag == true) && (InitStatus != -1))        

        {

            InitStatus = -1;

            StringBuilder buffer = new StringBuilder(10240);

            tmpret = zmcaux.ZAux_Execute(g_handle, "RUNTASK 1,Ecat_Init", buffer, 0);        //任务1重新运行BAS中的初始化函数

            if (tmpret != 0)

            {

                MessageBox.Show("总线初始化失败!", "提示");

                return;

            }

            else

            {   

                MessageBox.Show("总线初始化成功!", "提示");

            }

        }

        else

        {

            MessageBox.Show("Bas文件未加载");

            return;

        }

    }

}

4、以汇川驱动器为例,驱动器IO映射的起始地址为DI1,也就是正向超程开关(正硬限位),若要设置负向超程开关,将起始地址加1。

可以通过按钮控件的click事件,触发设置轴的软限位,以及原点、正负硬限位。驱动器IO映射的basic指令是DRIVE_IO。在这里调用在线命令的PC函数去实现驱动器IO映射。
Basic指令说明见下图:
企业微信截图_20231116093300.png
DRIVE_IO -- 驱动器IO:

企业微信截图_20231116093313.png

通过按钮控件的click事件,配置轴的正负软限位和驱动器IO起始地址(正负硬限位IO映射)。

private void Configure_OK_Button_Click(object sender, EventArgs e)

{

    StringBuilder buffer = new StringBuilder(10240);

    //正向软限位设置

    zmcaux.ZAux_Direct_SetFsLimit(g_handle, MoveAxis, Convert.ToSingle(FSLimit_Value.Text));

    //负向软限位设置

    zmcaux.ZAux_Direct_SetRsLimit(g_handle, MoveAxis, Convert.ToSingle(RSLimit_Value.Text));          

    //驱动器IO起始地址           

    zmcaux.ZAux_Execute(g_handle, "DRIVE_IO(" + MoveAxis.ToString() + ") = " +DriveStart_IO_Value.Value.ToString(), buffer, 0);

    //正硬限位设置

    zmcaux.ZAux_Direct_SetFwdIn(g_handle, MoveAxis, DRIVE_Start_IO);

    zmcaux.ZAux_Direct_SetInvertIn(g_handle, DRIVE_Start_IO, 1);

    //负硬限位设置

    zmcaux.ZAux_Direct_SetRevIn(g_handle, MoveAxis, DRIVE_Start_IO + 1);

    zmcaux.ZAux_Direct_SetInvertIn(g_handle, DRIVE_Start_IO + 1, 1);

    MessageBox.Show("当前轴配置成功!", "提示");

}

5、通过按钮控件的MouseDown(鼠标在组件上方并按下时发生)事件来触发单轴持续运动;MouseUp(鼠标在组件上方并松开时发生)事件来触发单轴运动的停止。模拟手动运动的调试过程。

1.png

6、通过textbook控件的 TextChanged(空间上text属性更改时发生)事件来修改运动过程中轴的基本参数,定时器会获取接收。//脉冲当量变化

private void Units_Value_TextChanged(object sender, EventArgs e)

{

    zmcaux.ZAux_Direct_SetUnits(g_handle, MoveAxis, Convert.ToSingle(Units_Value.Text));

}

//轴速度变化

private void Speed_Value_TextChanged(object sender, EventArgs e)

{

    zmcaux.ZAux_Direct_SetSpeed(g_handle, MoveAxis, Convert.ToSingle(Speed_Value.Text));

}

//加速度变化

private void Accel_Value_TextChanged(object sender, EventArgs e)

{

    zmcaux.ZAux_Direct_SetAccel(g_handle, MoveAxis, Convert.ToSingle(Accel_Value.Text));

}

//减速度变化

private void Decel_Value_TextChanged(object sender, EventArgs e)

{

    zmcaux.ZAux_Direct_SetDecel(g_handle, MoveAxis, Convert.ToSingle(Decel_Value.Text));

}

7、通过按钮控件,与文本信息比对,触发总线轴的使能切换功能。

1.png

8、通过复选框的切换、单选框的选择实现寸动运动调试的功能。

//寸动方向选择

private void MoveDirection_CheckedChanged(object sender, EventArgs e)

{

    if (MoveDirection.Checked == false)

    {

        MoveDirection.Text = "运动方向: 正";

        dir = 1;

    }

    else

    {

        MoveDirection.Text = "运动方向: 负";

        dir = -1;

    }

}

//寸动启动

private void InchStart_Button_Click(object sender, EventArgs e)

{

    if (g_handle == (IntPtr)0)

    {

        MessageBox.Show("未链接到控制器!", "提示");

    }

    else

    {


        if (MoveAbs_RadBtn.Checked == true)     

        {

            zmcaux.ZAux_Direct_Single_MoveAbs(g_handle, MoveAxis, dir * Convert.ToSingle(InchDistance_Value.Text));

        }

        //相对运动

        if (MoveOpp_RadBtn.Checked == true)        

        {

            zmcaux.ZAux_Direct_Single_Move(g_handle, MoveAxis, dir * Convert.ToSingle(InchDistance_Value.Text));

        }

    }

}

9、通过定时器的刷新,对轴参数的接收,初始化信息,IO监控等信息进行实时的反馈。

1.png

10、通过按钮控件的的click事件触发断开链接。

1.png




四、运行效果
运行主界面如下:

企业微信截图_20231116093328.png

本次,正运动技术EtherCAT超高速实时运动控制卡XPCIE1032H上位机C#开发(二):EtherCAT总线初始化,就分享到这里。

教学视频以及源代码下载地址,更多精彩内容请关注“ 正运动小助手 ”公众号。

上一篇: RtBasic文件下载与连续轨迹加工的Python+Qt开发 下一篇: 超高速实时运动控制卡XPCIE1032H上位机C#开发(一):驱动安装与建立连接
提示

请选择您要拨打的电话: