『7x24小时有问必答』
点击上方正运动小助手,随时关注新动态!
1.png
XPCIE1032H功能简介
XPCIE1032H是一款基于PCI Express的EtherCAT总线运动控制卡,可选6-64轴运动控制,支持多路高速数字输入输出,可轻松实现多轴同步控制和高速数据传输。
XPCIE1032H集成了强大的运动控制功能,结合MotionRT7运动控制实时软核,解决了高速高精应用中,PC Windows开发的非实时痛点,指令交互速度比传统的PCI/PCIe快10倍。
2.png
XPCIE1032H支持PWM,PSO功能,板载16进16出通用IO口,其中输出口全部为高速输出口,可配置为4路PWM输出口或者16路高速PSO硬件比较输出口。输入口含有8路高速输入口,可配置为4路高速色标锁存或两路编码器输入。
XPCIE1032H搭配MotionRT7实时内核,使用本地LOCAL接口连接,通过高速的核内交互,可以做到更快速的指令交互,单条指令与多条指令一次性交互时间可以达到3-5us左右。
3.png

XPCIE1032H与MotionRT7实时内核的配合具有以下优势:
4.png
1.支持多种上位机语言开发,所有系列产品均可调用同一套API函数库;
2.借助核内交互,可以快速调用运动指令,响应时间快至微秒级,比传统PCI/PCIe快10倍;
3.解决传统PCI/PCIe运动控制卡在Windows环境下控制系统的非实时性问题;
4.支持一维/二维/三维PSO(高速硬件位置比较输出),适用于视觉飞拍、精密点胶和激光能量控制等应用;
5.提供高速输入接口,便于实现位置锁存;
6.支持EtherCAT总线和脉冲输出混合联动、混合插补。
5.png
使用XPCIE1032H和MotionRT7进行项目开发时,通常需要进行以下步骤:
1.安装驱动程序,识别XPCIE1032H;
2.打开并执行文件“MotionRT710.exe”,配置参数和运行运动控制实时内核;
3.使用ZDevelop软件连接到控制器,进行参数监控。连接时请使用PCI/LOCAL方式,并确保ZDevelop软件版本在3.10以上;
4.完成控制程序开发,通过LOCAL链接方式连接到运动控制卡,实现实时运动控制。
6.png
与传统PCI/PCIe卡和PLC的测试数据结果对比:
平均值
C++ LOCAL
C# LOCAL
传统PCI/PCIe卡接口交互
PLC网口通讯交互
1w次单条读取交互周期
4.70us
5.3us
64us
500us-10ms
10w次单条读取交互周期
3.90us
5.7us
65us
500us-10ms
1w次多条读取交互周期
6.20us
8.85us
472us
500us-10ms
10w次多条读取交互周期
5.50us
8.37us
471us
500us-10ms
我们可以从测试对比结果看出,XPCIE1032H运动控制卡配合实时运动控制内核MotionRT7,在LOCAL链接(核内交互)的方式下,指令交互的效率是非常稳定,当测试数量从1w增加到10w时,单条指令交互时间与多条指令交互时间波动不大,非常适用于高速高精的应用。
XPCIE1032H控制卡安装
关闭计算机电源。
打开计算机机箱,选择一条空闲的XPCIE卡槽,用螺丝刀卸下相应的挡板条。
将运动控制卡插入该槽,拧紧挡板条上的固定螺丝。

7.png
一、C#语言进行运动控制项目开发
8.png
1.到正运动技术官网的下载中心选择需要的平台库文件。
库文件下载地址:http://www.zmotion.com.cn/download_list_21.html
9.png
2.解压下载的安装包找到“ Zmcaux.cs ”,“ zauxdll.dll ”,“ zmotion.dll ”放入到项目文件中。
(1)“Zmcaux.cs”放在项目根目录文件中,与bin目录同级。
10.png
(2)“zauxdll.dll”,“zmotion.dll”放在bin → Debug。
11.png
3.用vs打开新建的项目文件,在右边的解决方案资源管理器中点击显示所有,然后鼠标右键点击zmcaux.cs文件,点击包括在项目中。
12.png
4.双击Form1.cs里面的Form1,出现代码编辑界面,在文件开头写入using cszmcaux,并声明控制器句柄g_handle。
13.png

14.png
二、相关PC函数指令介绍
相关PC函数介绍详情可参考“ZMotion PC函数库编程手册 V2.1.1”。
1、硬件位置比较输出函数介绍

参数名
指令19
ZAux_Direct_HwPswitch2
指令原型
int32   __stdcall   ZAux_Direct_HwPswitch2(ZMC_HANDLE handle,int   Axisnum,int   Mode, int   Opnum, int   Opstate, float ModeParal, float ModePara2, float   Mode   Para3 , float   ModePara4)
指令说明
硬件位置比较输出2,4系列产品20170513以上版本支持。
ZMC306E/306N支持。
输入参数
输出参数
/
返回值
成功返回值为0,非0详见错误码说明。
指令示例
/
详细说明
(1)4系列产品有4个比较输出口,可以选择不同的比较输出口,一般为OUT0/1/2/3口。
(2)比较主轴带编码器输入时,自动使用编码器位置来触发,可以使用MOVEOP_DELAY参数来调整输出准确时刻。
(3)不同的总线驱动器效果可能有差异,也可以通过MOVEOP_DELAY参数来调整。
(4)HW_PSWITCH2与MOVE_OP精准使用同样的硬件资源,不建议在同一个通道同时使用,可以在不同的通道同时使用。
(5)每个系统周期内只能比较一次,系统周期通过SERVO_PERIOD查询。
(6)TABLE位置数据在所有比较点完成前不要修改。
(7)脉冲轴和总线轴均支持此指令。
(8)使用脉冲型电机只有ATYPE为4时才是比较反馈位置(MPOS),默认出厂的ATYPE为1或7比较的是命令位置(DPOS)
描述
handle
连接标识。
Axisnum
比较输出的轴号。
Mode
模式1-启动比较器
ModePara1 = 第一个比较点坐标所在TABLE编号
ModePara2 = 最后一个比较点坐标所在TABLE编号
ModePara3= 第一个点判断方向 0-坐标负向   1- 坐标正向   -1- 不使用方向
ModePara4 = 预留
模式2-停止并删除没完成的比较点
ModePara1 = 预留
ModePara2 = 预留
ModePara3= 预留
ModePara4 = 预留
模式3-矢量比较方式
ModePara1 = 第一个比较点坐标所在TABLE编号
ModePara2 = 最后一个比较点坐标所在TABLE编号
ModePara3= 预留
ModePara4 = 预留
模式4-矢量比较方式 单个比较点
ModePara1 = 比较点坐标
ModePara2 = 预留
ModePara3= 预留
ModePara4 = 预留
模式5-矢量比较方式 周期脉冲模式
ModePara1= 比较点坐标
ModePara2= 重复周期,一个周期内比较两次,先输出有效状态,在输出无效状态
ModePara3= 周期距离,每个这个距离输出Opstate,输出有效状态的距离(ModePara4)后还原为无效状态
ModePara4=输出有效状态的距离,(ModePara1-ModePara4)位无效状态距离
模式6-矢量比较方式 周期模式,这种模式一把与HW_TIMER一起使用
ModePara1 = 比较点坐标
ModePara2 = 重复周期,一个坐标只比较一次
ModePara3= 周期距离,每隔这个距离输出一次
ModePara4 = 预留
Opnum
输出口编号。4系列   out 0-为硬件位置比较输出。
Opstate
第一个比较点的输出状态。0-关闭   1-打开
ModeParal
多功能参数
ModePara2
多功能参数。
ModePara3
多功能参数
ModePara4
多功能参数

参数名
指令21
ZAux_Direct_HwTimer
指令原型
int32 __stdcall ZAux_Direct_HwTimer(ZMC_HANDLE handle,int mode, int cyclonetime, int   optime, int   reptimes, int   opstate, int   opnum)
指令说明
硬件定时器用于硬件比较输出后一段时见还原电平-4系列产品支持
输入参数
输出参数
/
返回值
成功返回值为0,非0详见错误码说明。
指令示例
//周期调整为2,输出两次
ZAux_Trigger(g_handle);
ZAux_Direct_SetOp(g_handle, 0, 0);
ZAux_Direct_HwTimer(g_handle, 2, 1000000, 500000, 2, 0, 0);//输出口0变为on后,硬件定时器触发开始计时,500ms后切换为off
ZAux_Direct_SetOp(g_handle, 0, 1);
详细说明
(1)HW_TIMER只有1个,每次调用会强制停止之前的调用。
(2)ZMC420SCAN每个输出口的HW_TIMER功能独立。
(3)ZMC3系列部分、4系列及以上产品支持此功能。
(4)OP和MOVE_OP操作会关闭正在进行的HW_TIMER脉冲,这样可以使用HW_TIMER来实现类似PWM的功能,OP输出打开脉冲输出,下一个OP输出关闭脉冲输出,当使用MOVE_OP精准输出时,可以实现精准的PWM输出无限脉冲功能。
描述
handle
连接标识。
mode
0停止,2-启动
cyclonetime
周期时间us单位
optime
有效时间us单位
reptime
重复次数
opstate
输出口变为非此状态后开始计时
opnum
必须能意见比较输出的口
2、锁存相关指令介绍
参数名
指令7
ZAux_Direct_Regist
指令原型
int32   __stdcall   ZAux_Direct_Regist(ZMC_HANDLE   handle,int iaxis, int   imode)
指令说明
单次位置锁存指令。
输入参数
输出参数
/
返回值
成功返回值为0,非0详见错误码说明。
指令示例
位置锁存
详细说明
(1)上升下降沿是以控制器内部状态而言。如果设置成上升沿触发,则锁存会在外部输入口由导通状态进入截止状态的一瞬间触发;如果设置成下降沿触发,则锁存会在外部输入口由截止状态进入导通状态的一瞬间触发;具体要设置成上升沿还是下降沿触发,要根据外部输入口信号跳变的实际需求。
脉冲轴类型一般采用R0,R1,Z脉冲这三种锁存;总线轴类型采用R2,R3锁存。
(2)支持编码器轴锁存,4系列及以上控制器最新固件支持虚拟轴、脉冲轴锁存。
(3)EtherCAT支持驱动器锁存,此时使用驱动器IO点实现锁存,具体模式查看指令语法。
(4)Rtex只支持控制器锁存。
(5)4系列及以上控制器支持4锁存通道。
(6)锁存输入口432:2个,432N:4个,412:8个。
(7)支持EtherCAT驱动器锁存与控制器锁存同时使用,需要有4锁存通道功能。
(8)4个通道指MARK、MARKB、MARKC,MARKD,通过REG_INPUTS 指定锁存输入口对应的锁存通道。
(9)当锁存产生时,轴状态MARK会被设置为ON,同时锁存到的位置会被存储在参数REG_POS内。
(10)每个轴有输入信号R0,R1,EZ信号可以使用锁存功能。当使用两个信号锁存时,第二个信号锁存使用MARKB和REG_POSB。
(11)R0,R1输入一般对应到输入口0和1,详细请查看控制器的硬件手册中通用输入章节。
描述
handle
连接标识。
iaxis
轴号。
imode
锁存方式
<table cellspacing="0"><tbody><tr><td valign="center" width="65">
描述
1
当Z脉冲上升沿时的绝对位置送到RegPos
2
当Z脉冲下降沿时的绝对位置送到RegPos
3
当输入信号R0上升沿的绝对位置送到RegPos
4
当输入信号R0下降沿的绝对位置送到RegPos
6
输入信号R0上升沿时的绝对位置送到RegPos,Z信号上升沿时的绝对位置送到RegPosB
7
输入信号R0上升沿时的绝对位置送到RegPos,Z信号下降沿时的绝对位置送到RegPosB  
8
输入信号R0下降沿时的绝对位置送到RegPos,Z信号上升沿时的绝对位置送到RegPosB
9
输入信号R0下降沿时的绝对位置送到RegPos,Z信号下降沿时的绝对位置送到RegPosB
10
输入信号R0上升沿时的绝对位置送到RegPos,输入信号R1上升沿时的绝对位置送到RegPosB
11
输入信号R0上升沿时的绝对位置送到RegPos,输入信号R1下降沿时的绝对位置送到RegPosB
12
输入信号R0下降沿时的绝对位置送到RegPos,输入信号R1上升沿时的绝对位置送到RegPosB
13
输入信号R0下降沿时的绝对位置送到RegPos,输入信号R1下降沿时的绝对位置送到RegPosB
14
输入信号R1上升沿时的绝对位置送到RegPosB  (14以后150804以后版本支持,每个锁存通道独立,支持4通道锁存)
15
输入信号R1下降沿时的绝对位置送到RegPosB
16
Z信号上升沿时的绝对位置送到RegPosB
17
Z信号下降沿时的绝对位置送到RegPosB
18
输入信号R2上升沿时的绝对位置送到RegPosC
19
输入信号R2下降沿时的绝对位置送到RegPosC
20
输入信号R3上升沿时的绝对位置送到RegPosD
21
输入信号R3下降沿时的绝对位置送到RegPosD
</td></tr></tbody></table>

指令11
ZAux_Direct_GetRegPosB
指令原型
int32   __stdcall   ZAux_Direct_GetRegPosB (ZMC_HANDLE handle, int iaxis, float *pfValue);
指令说明
返回锁存寄存器2(ZAux_Direct_GetMarkB)的测量反馈位置(ZAux_Direct_GetMpos),单位:脉冲当量。
输入参数
输出参数
参数名
返回值
成功返回值为0,非0详见错误码说明。
指令示例
/
详细说明
默认只有编码器可锁存,四系列以上控制器脉冲与虚拟支持锁存
描述
handle
连接标识。
iaxis
轴号。
参数名
描述
pfValue
锁存的坐标位置。

指令12
ZAux_Direct_GetRegPos
指令原型
int32   __stdcall   ZAux_Direct_GetRegPosB (ZMC_HANDLE handle, int iaxis, float *pfValue);
指令说明
返回锁存寄存器1(ZAux_Direct_GetMark)的测量反馈位置(ZAux_Direct_GetMpos)
输入参数
输出参数
参数名
返回值
成功返回值为0,非0详见错误码说明。
指令示例
位置锁存
详细说明
默认只有编码器可锁存,四系列以上控制器脉冲与虚拟支持锁存
描述
handle
连接标识。
iaxis
轴号。
参数名
描述
pfValue
锁存的坐标位置。

指令15
ZAux_Direct_GetMark
指令原型
iint32   __stdcall   ZAux_Direct_GetMark(ZMC_HANDLE handle,int iaxis, int *piValue);
指令说明
读取锁存事件0返回状态。
输入参数
输出参数
参数名
返回值
成功返回值为0,非0详见错误码说明。
指令示例
位置锁存
详细说明
1.锁存指令执行时,piValue变真,返回-1。当执行完成时,piValue变成假,返回0。
2.对应锁存通道R0。
3.控制器默认IN0对应锁存通道R0,IN1对应锁存通道R1。
描述
handle
连接标识。
iaxis
轴号。
参数名
描述
piValue
模式设置 0 –没发生 -1-发生

指令16
ZAux_Direct_GetMarkB
指令原型
int32   __stdcall   ZAux_Direct_GetMarkB(ZMC_HANDLE handle,int iaxis, int *piValue);
指令说明
读取锁存事件1返回状态。
输入参数
输出参数
参数名
返回值
成功返回值为0,非0详见错误码说明。
指令示例
/
详细说明
1.锁存指令执行时,piValue变真,返回-1。当执行完成时,piValue变成假,返回0。
2.对应锁存通道R1。
3.控制器默认IN0对应锁存通道R0,IN1对应锁存通道R1。
描述
handle
连接标识。
iaxis
轴号。
参数名
描述
piValue
模式设置 0 –没发生 -1-发生
在form设计界面找到需要用到的控件拖拽到窗体中进行UI界面设计,效果如下。
15.png

16.png
三、相关程序及功能介绍
1.位置比较功能
(1)位置同步输出PSO的原理与应用
PSO(position synchronized output)即位置同步输出,本质是通过采集实时的编码器反馈位置(无编码器可使用输出的脉冲位置)与比较模式设定的位置进行比较,控制OP高速同步输出信号,PSO示意图如下。
17.png
PSO一般与激光器(或点胶喷射阀等设备)同步输出信号进行相位同步,在运动轨迹的所有阶段以恒定的空间(或恒定时间)间隔触发输出开关,包括加速、减速和匀速段,从而实现脉冲能量均匀地作用在被加工物体上。
PSO功能的特点是能高速且稳定的输出信号,因为输出精度足够高,所以能够在整个运动轨迹中以固定的距离触发输出信号而不用考虑总体速度,即在直线部分以很快的速度运动,而在圆角部分减速的同时也能保证输出间距恒定。
通常圆角加工部分在整个加工过程中占有比较小的部分,这样在保证加工效果的同时,就可以最大限度地提高产能。
18.png
正运动的PSO功能调用ZAux_Direct_HwPswitch2函数接口实现,该函数采用硬件实现IO的高速比较输出,响应速度达到微秒级别,故名硬件比较输出。
(2)程序流程图
19.png
(3)相关代码示例
private void Button2_Click(object sender, EventArgs e)     //运动按钮{    //更新界面参数    updata_value();    //判断是否连接控制器    if (g_handle == (IntPtr)0)    {        MessageBox.Show("未链接到控制器!", "提示");        return;        }    int iret = 0;    AxisNum = 0;    //获取轴个数    foreach (Control item in this.Controls)        if (item is CheckBox)        {            CheckBox checkBox = (CheckBox)item;            if (checkBox.CheckState == CheckState.Checked)                AxisNum++;        }    //判断是否选择轴    if (AxisNum == 0)    {        MessageBox.Show("没选轴!", "提示");        return;        }    int[] axislist = new int[AxisNum];        float[]  Distancelist  =  new  float[AxisNum];    foreach (int item in axislist)        axislist[iret++] = -1;    //获取运动的轴数组和运动距离    foreach (Control item in this.Controls)        if (item is CheckBox)        {            CheckBox checkBox = (CheckBox)item;            if (checkBox.CheckState == CheckState.Checked)            {                int axis = Convert.ToInt32(checkBox.Name.Substring(checkBox.Name.Length - 1, 1));                int index = Array.IndexOf(axislist, -1);                axislist[index] = axis;                string DistanceName = "Distance" + axis.ToString();                Distancelist[index] = float.Parse(((System.Windows.Forms.TextBox)this.Controls.Find(DistanceName, false)[0]).Text);            }                }    //初始化输出口    for (int i = 0; i < 3; i++)        iret = zmcaux.ZAux_Direct_SetOp(g_handle, i, 0);    //选择运动的轴    iret = zmcaux.ZAux_Direct_Base(g_handle, AxisNum, axislist);    //初始化运动参数    foreach (int item in axislist)    {        iret = zmcaux.ZAux_Direct_SetUnits(g_handle, item, 100);        iret = zmcaux.ZAux_Direct_SetSpeed(g_handle, item, 100);        iret = zmcaux.ZAux_Direct_SetAccel(g_handle, item, 2000);        iret = zmcaux.ZAux_Direct_HwPswitch2(g_handle, item, 2, 0, 0, 0, 0, 0, 0, 0, 0);     //清除前面的比较输出指令    }        iret  =  zmcaux.ZAux_Direct_HwTimer(g_handle,  2,  0,  0,  0,  0,  0);                                            //关闭硬件定时器    //起点输出口状态设置    int tempoutstatus = 0;    if (ModePara2 == 0)        tempoutstatus = 1;    else        tempoutstatus = 0;    //硬件定时器设置    if (m_Timer_IfOpen == false)    {        iret = zmcaux.ZAux_Direct_HwTimer(g_handle, 2, m_Timer_Cycle, m_Timer_Valid, m_Timer_Num, tempoutstatus, ModePara1);        if (iret != 0)        {            string tempstr;            tempstr = "HwTimer失败 返回值:" + iret.ToString();            MessageBox.Show(tempstr, "提示");            return;        }    }    else    {        iret = zmcaux.ZAux_Direct_HwTimer(g_handle, 0, m_Timer_Cycle, m_Timer_Valid, m_Timer_Num, tempoutstatus, ModePara1);        if (iret != 0)        {            string tempstr;            tempstr = "HwTimer失败 返回值:" + iret.ToString();            MessageBox.Show(tempstr, "提示");            return;        }    }    //HwPswitch设置    if (m_POS_IfOpen)              {        //将比较点填入TABLE        switch (PsoMode)        {            case 1:            case 3:                iret = zmcaux.ZAux_Direct_SetTable(g_handle, ModePara3, ModePara4 - ModePara3 + 1, fPointPos);                          break;            case 25:            case 26:                iret = zmcaux.ZAux_Direct_SetTable(g_handle, ModePara5, ModePara4 * 2, fPointPos);                break;            case 35:            case 36:                iret = zmcaux.ZAux_Direct_SetTable(g_handle, ModePara5, ModePara4 * 3, fPointPos);                break;        }        if (iret != 0)        {            string tempstr;            tempstr = "SetTable失败 返回值:" + iret.ToString();            MessageBox.Show(tempstr, "提示");            return;        }        //初始化矢量位置        switch (PsoMode)        {            case 3:            case 4:            case 5:            case 6:            case 7: zmcaux.ZAux_Direct_SetParam(g_handle, "VECTOR_MOVED", 0, 0); break;        }        //PSO指令设置        switch (PsoMode)        {            case 1:            case 2:            case 3:            case 4:            case 5:            case 6:                iret = zmcaux.ZAux_Direct_HwPswitch2(g_handle, axislist[0], PsoMode, ModePara1, ModePara2, ModePara3, ModePara4, ModePara5, ModePara6, ModePara7, ModePara8);                break;            case 7:            case 25:            case 26:            case 35:            case 36:                iret = ZAux_Direct_HwPswitch2_2D();                break;                }        if (iret != 0)        {            string tempstr;            tempstr = "HwPswitch2失败 返回值:" + iret.ToString();            MessageBox.Show(tempstr, "提示");            return;        }    }    else    {        iret = 0;        iret = zmcaux.ZAux_Direct_HwPswitch2(g_handle, axislist[0], 2, 0, 0, 0, 0, 0, 0, 0, 0);         //清除比较输出指令        if (iret != 0)        {            string tempstr;            tempstr = "HwPswitch2失败 返回值:" + iret.ToString();            MessageBox.Show(tempstr, "提示");            return;        }    }    //触发示波器    zmcaux.ZAux_Trigger(g_handle);    //多轴插补运动    iret = zmcaux.ZAux_Direct_Move(g_handle, AxisNum, axislist, Distancelist);}
2.锁存功能
(1)锁存的原理和应用
锁存的原理是通过高速输入口的感应来记录当前编码器的位置。当锁存信号被触发时,当前位置信息立即被捕获到位置锁存器中,并将前一次锁存的位置坐标 清除。读取锁存位置信息时,读取的是最后一次锁存信号触发时锁存的位置信息。
锁存一般应用于包装,印刷,点胶,视觉飞拍等。
20.png
(2)程序流程图

21.png
(3)相关代码示例
private void Button1_Click(object sender, EventArgs e)      //启动锁存 {     if (g_handle == (IntPtr)0)     {         MessageBox.Show("未链接到控制器!", "提示");         return;     }     int iret = 0;     if (m_Regist_IfOpen == false)     {                  m_RegistCount  =  0;                  iret  =  zmcaux.ZAux_Direct_SetAtype(g_handle,  m_RegistAxis,  1);                //必须是编码器轴才可以锁存         int ReglistListSel = ComboBox1.SelectedIndex;         if (ReglistListSel >= 0 && ReglistListSel <= 3)         {             RegistMode = ReglistListSel + 1;         }         else if (ReglistListSel == 4 || ReglistListSel == 5)         {             RegistMode = 10 + ReglistListSel;         }         else if (ReglistListSel > 5 || ReglistListSel < 9)         {             RegistMode = 12 + ReglistListSel;         }         iret = zmcaux.ZAux_Direct_Regist(g_handle, m_RegistAxis, RegistMode);                  timer2.Start();         //m_Regist_IfOpen 标志位变true 表示开启了锁存         //反转按钮的设置         m_Regist_IfOpen = true;         //不允许修改锁存轴轴号         //将启动锁存按钮变成停止锁存         ComboBox1.Enabled = false;                  Button1.Text  =  "停止锁存";     }     else          {         timer2.Stop();         m_Regist_IfOpen = false;         ComboBox1.Enabled = true;         Button1.Text = "启动锁存";                  DataGridView2.Rows.Clear();             } }

22.png
四、XPCIE1032H的IO接口介绍
1.IO规格介绍
23.png
2.IO端子定义
24.png
3.端子定义表
25.png
下文内容中效果演示就是使用高速输出口0实现PSO高速输出,高速输入口0实现锁存输入。
4.IO接线图
26.png

27.png
五、效果演示
根据上面的开发流程操作后,编译运行例程。同时连接ZDevelop软件进行调试,对运动控制的轴参数和运动情况进行监控。
如下图设置:LOCAL连接上控制卡后,首先开启PSO硬件位置比较输出功能;
第一步:设置高速比较输出口0,首个比较点的输出状态为1,设置比较轴为0。设置4个比较点,比较点坐标分别为:100,200,300,400。
第二步:开启开启编码器锁存功能:设置锁存轴号为0,锁存模式为3。
第三步:勾选运动轴号0并填上运动距离5000,最后将输入口0和输出口0接上。
即当轴运动到100,200,300,400时,都会触发电平变化,并且会通过锁存将锁存的位置保存下来。
28.png
例程接线示意图
29.png
参数设置示意图
30.png
效果演示示意图
示波器波形如下图所示:
31.png
硬件位置比较输出和编码器锁存例程讲解:
   <video width="640" height="360" controls="" data-v-c66e8e28="" poster="http://mmbiz.qpic.cn/mmbiz_jpg/hLW43Dibia9vUOa2xahIzFNIkia4q5LFzKazKT2eAQPjBAuchyVFlvV5rgQWEZU7wIiaJXU4mK2PSY7snzSxc2y8ew/0?wx_fmt=jpeg&wxfrom=16" webkit-playsinline="isiPhoneShowPlaysinline" playsinline="isiPhoneShowPlaysinline" preload="metadata" crossorigin="anonymous"> 您的浏览器不支持 video 标签 </video>   <!-- S 视频社交-->      
完整代码获取地址
32.png
本次,正运动技术硬件位置比较输出和编码器锁存:EtherCAT超高速实时运动控制卡XPCIE1032H上位机C#开发(六),分享到这里。
更多精彩内容请关注“正运动小助手”公众号,需要相关开发环境与例程代码,请咨询正运动技术销售工程师:400-089-8936。
本文由正运动技术原创,欢迎大家转载,共同学习,一起提高中国智能制造水平。文章版权归正运动技术所有,如有转载请注明文章来源。

回顾往期内容

开奖啦!参与《运动控制系统应用与实践》赠书活动的粉丝们看这里

送书福利!全自主IDE的《运动控制系统应用与实践》

Windows实时运动控制软核七LOCAL高速接口测试之Labview

Windows实时运动控制软核六LOCAL高速接口测试之Matlab

Windows实时运动控制软核五LOCAL高速接口测试之VC60

Windows实时运动控制软核四LOCAL高速接口测试之VBNET

Windows实时运动控制软核三LOCAL高速接口测试之C

Windows实时运动控制软核二LOCAL高速接口测试之Qt

Windows实时运动控制软核一LOCAL高速接口测试之C

关于正运动技术

深圳市正运动技术有限公司成立于2013年,专注于纯国产运动控制技术研究和通用运动控制软硬件平台和产品的研发,是国家级高新技术和专精特新“小巨人”企业。
正运动技术汇集了来自华为、中兴等公司的优秀人才。力求创新,目前公司拥有专利、著作权等知识产权五十余项。在坚持自主创新的同时,积极联合各大高校和科研院所协同运动控制基础技术的研究,是国内工控领域发展最快的企业之一,也是国内少有、完整掌握运动控制核心技术和实时工控软件平台技术的企业。
正运动技术除本部研发中心外,设有中山、武汉、上海三个研发分部。为更好地服务客户,本部之外设有苏州、东莞两个区域性服务中心,设有佛山、厦门、青岛、西安、武汉、成都、天津、郑州等销售和技术服务机构。
经过众多合作伙伴多年的开发应用,正运动技术的产品广泛地应用于3C电子、半导体、新能源、机器人、包装印刷、纺织服装、激光加工、医疗制药、数控机床、传统加工等领域。

免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

上一主题上一主题         下一主题下一主题
QQ手机版小黑屋粤ICP备17165530号

关于我们·投诉举报· 用户帮助· 联系我们 · 本站服务 · 版权声明· 隐私政策 · 投搞指南

法律保护:PLC技术网,plcjs.com,plcjs.net等字样
Copyright 2010-2030. All rights reserved. 


微信公众号二维码 抖音二维码 百家号二维码 今日头条二维码哔哩哔哩二维码