广告合作
  • 今日头条

    今日头条

  • 百度一下

    百度一下,你就知道

  • 新浪网

    新浪网 - 提供新闻线索,重大新闻爆料

  • 搜狐

    搜狐

  • 豆瓣

    豆瓣

  • 百度贴吧

    百度贴吧——全球领先的中文社区

  • 首页 尚未审核订阅工具 订阅

    超高性价比运动控制卡快速入门

    来源:网络收集  点击:  时间:2024-04-03
    【导读】:
    ECI是正运动技术推出的网络运动控制卡型号简称。ECI1408控制卡支持多达4轴实时的运动控制,可连接轴扩展模块,最多扩展至6轴。没有控制器的场合可以连接仿真器在 PC 上直接仿真运行。控制卡不包含脉冲DB头,脉冲输出采用专用的输出端子,如下图右下角端子。编码器反馈信号接在输入口IN上。安装使用方便,不需要工控机卡槽,功能全面,性能稳定,高性价比,广泛应用在电子半导体、点胶设备、流水线等4轴以内的脉冲应用场合。如您需要购买运动控制器或运动控制卡,欢迎咨询正运动技术销售工程师。接下来依次介绍ECI1408的特点与如何使用。品牌型号:ECI1408控制器ECI1408系统版本:windows,linux,Mac,Android,wince各种操作系统12.0.01软件版本:ZDevelopV3.10.03Alpha2一、产品特点1/1分步阅读

    a.ECI1408控制卡本体支持4轴,通过连扩展模块,最多支持6轴运动控制。

    b.脉冲输出模式:方向/脉冲或双脉冲。

    c.支持手轮输入模式。

    d.每轴最大输出脉冲频率5MHz

    e.通过CAN总线,最多可扩展到512个隔离输入或输出口。

    f.轴正负限位信号口/原点信号口可以随意配置为任何输入口,也可以采用出厂默认配置的信号。

    g.输出口最大输出电流可达300mA,可直接驱动部分电磁阀。

    h.支持最多达6轴直线插补、任意圆弧插补、螺旋插补,电子凸轮、电子齿轮、位置锁存、同步跟随、虚拟轴等功能。

    i.多种程序加密手段,保护客户的知识产权。

    二、通讯接口1/2

    运动控制器上带的通讯接口:232 接口、EtherNET网口、CAN接口。

    板上自带 36个通用输入口IN,12个通用输出口OUT,通过CAN总线可以连接各个扩展模块,在控制器自身IO点数不够用的时候,扩展输入输出点数或脉冲轴。

    2/2

    ECI网络运动控制卡支持以太网、232通讯接口和电脑相连,接收电脑的指令运行。

    通用输入口IN配置为编码器反馈:

    例如:IN18-20配置一个编码器,对应的编码器轴号是1,意味着编码器输入信号将在AXIS1上,如果将轴1的走类型配置为3或6,ATYPE(1)=3/6,此时做编码器输入,ATYPE(1)=0,则为通用输入口。

    原点、正负限位信号已经做好了定义,例如,下图24-26已经配置为轴0-2的原点输入信号,用户也可以使用DATUM_IN映射原点输入信号指令重新定义原点信号。

    三、开发环境1/2

    ECI1408控制卡的应用程序建议使用VC,VB,VS,C++Builder,C#,等软件来开发,控制器支持windows,linux,Mac,Android,wince各种操作系统下的开发,提供vc,c#,vb.net,labview等各种环境的dll库。上位机软件编程参考《ZMotion PC函数库编程手册》。

    2/2

    使用PC上位机软件开发的程序无法下载到控制器,通过dll动态库连接到控制器。调试时可以把ZDevelop软件同时连接到控制器,方便观察程序运行情况。

    ECI1408控制卡也通过ZDevelop开发环境来调试,不过程序空间较小,不能写过多的代码。

    ZDevelop是一个很方便的编程、编译和调试环境。ZDevelop可以通过串口、485、USB或以太网与控制器建立连接。

    四、控制器使用1/20

    控制器使用基础流程:

    第一步:硬件接线

    参考控制器系统架构图,接入主电源(控制器采用24V直流电源供电),驱动设备,IO设备,触摸屏、扩展模块等。

    第二步:系统配置

    设置伺服驱动器的参数,配置PC与控制器连接所需的串口或网口参数等。

    第三步:连接控制器

    采用串口或网口连接PC与控制器,建立通讯连接。

    第四步:编程开发

    选择一种开发方式,本例子采用VS平台的C++开发。

    第五步:程序调试

    调试程序,通过动态库连接到控制器使用,控制器收到命令后执行运动控制,没有控制器的场合连接到仿真器调试。

    第六步:运行程序

    运行程序观察效果能否满足需求。

    2/20

    工具材料准备:

    (1)硬件

    A.ECI1408控制器一台。

    B驱动器+电机一套

    C.电脑一台。

    D.带屏蔽层网线一根。

    E.24V直流电源一个。

    F.接线端子与连接线若干。

    (2)软件

    A.安装下载VS软件

    所需的库文件联系正运动技术获取。

    3/20

    VS下的C++开发

    主要介绍应用C++开发一个多段连续插补的运动控制应用。

    我们主要从新建MFC项目,添加函数库讲起,再了解PC函数用,最后通过项目实战——连续插补运动例程讲解,来让大家熟悉它的项目开发。

    A.新建MFC项目,添加函数库。

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

    4/20

    接上:b.选择开发语言为“Visual C++”和程序类型“MFC应用程序”。

    5/20

    接上:c.点击下一步即可。

    6/20

    接上:d.选择类型为“基于对话框”,下一步或者完成。

    下一步则往后继续配置,完成就直接完成即可。这里就不需要再配置了,无关紧要的,只要这个类型选好就行,其他的可以在项目中编辑。

    7/20

    接上:e.找到厂家提供的光盘资料,路径如下(64位库为例):

    1)进入光盘资料找到PC函数文件夹。

    8/20

    接上:2)选择函数库2.1。

    9/20

    接上:3)Windows平台。

    10/20

    接上:4)根据需要选择对应的函数库这里选择64位库。

    11/20

    接上:5)解压C++的压缩包,里面有C++对应的函数库。

    12/20

    接上:6)函数库具体路径如下。

    13/20

    接上:f.将厂商提供的C++的库文件和相关头文件复制到新建的项目里面。

    14/20

    接上:g.在项目中添加静态库和相关头文件。

    静态库:zauxdll.lib, zmotion.lib

    相关头文件:zauxdll2.h, zmotion.h

    1)先右击头文件,接着依次选择:“添加”→“现有项”。

    15/20

    接上:2)在弹出的窗口中依次添加静态库和相关头文件。

    16/20

    接上:3)声明用到的头文件和定义控制器连接句柄。至此项目新建完成。

    17/20

    B.查看PC函数手册,了解PC函数用法。

    a.PC函数手册也在光盘资料里面,具体路径如下:

    18/20

    接上:b. PC编程,一般先根据控制器连接方式选择对应的连接函数连接控制器,返回控制器句柄。接着用返回的控制器句柄,实现对控制器的控制。

    c.比如通过网口连接控制器,先使用ZAux_OpenEth()链接控制器,获取控制器句柄handle。

    19/20

    接上:d.通过获取到的控制器句柄handle,对控制器进行单轴运动控制。

    20/20

    接上:e.通过获取到的控制器句柄handle,对控制器进行多轴运动控制。

    //多轴运动

    int axislist = { 0,1,2,3 }; //运动BASE轴列表

    float dislist = { 100,100,100,100 }; //运动距离列表

    ZAux_Direct_Move(g_handle, 4, axislist, dislist); //多轴运动

    五、项目实战之连续插补运动例程讲解。1/11

    例程以建立板卡的连接,执行3段连续轨迹的加工为目标。

    2/11

    例程简易流程图。

    //相关函数ZAux_OpenEth(IP_buffer, g_handle);//连接控制器ZAux_Direct_GetAllAxisPara(g_handle, DPOS, 4, showpos);//获取当前轴位

    ZAux_Direct_GetAllAxisPara(g_handle, MSPEED, 4, mspeed);//更新轴速度ZAux_Direct_Single_Cancel(g_handle, 0, 2); //停止主轴运动ZAux_Direct_Move(g_handle, 4, axislist, dislist1);//第1段多轴插补指令

    ZAux_Direct_Move(g_handle, 4, axislist, dislist2);//第2段多轴插补指令

    ZAux_Direct_Move(g_handle, 4, axislist, dislist3);//第3段多轴插补指令ZAux_Close(g_handle);//断开连接

    3/11

    通过网口连接控制器,获取控制器连接句柄。

    //Link按钮事件处理函数

    voidCMergeDlg::OnBnClickedButtonLink()

    {

    charbuffer;

    int32iresult;

    //如果之前有连接控制器着先断开连接

    if(NULL!= g_handle)

    {

    ZAux_Close(g_handle);

    g_handle = NULL;

    }

    //从IP下拉框中获取IP

    GetDlgItemText(IDC_COMBOX_IP, buffer, 255);

    buffer = \0;

    //通过PC函数库提供的连接控制器的函数接口(API),连接控制器

    iresult = ZAux_OpenEth(buffer, g_handle);

    if(ERR_SUCCESS!= iresult)

    {

    g_handle = NULL;

    MessageBox(_T(链接失败));

    SetWindowText(未链接);

    return;

    }

    SetWindowText(已链接);

    //启动定时器

    SetTimer(1, 100, NULL);

    SetTimer(2, 100, NULL);

    //初始化轴参数

    for(inti = 0; i4; i++)

    {

    ZAux_Direct_SetAtype(g_handle, i, 1); //轴类型

    ZAux_Direct_SetUnits(g_handle, i, 1000); //脉冲当量

    ZAux_Direct_SetSpeed(g_handle, i, 100); //速度

    ZAux_Direct_SetAccel(g_handle, i, 1000); //加速度

    ZAux_Direct_SetDecel(g_handle, i, 1000); //减速度

    ZAux_Direct_SetSramp(g_handle, i, 100); //S曲线时间

    }

    }

    4/11

    通过定时器1更新控制器轴0-3的位置信息和速度信息。

    //定时器

    voidCMergeDlg::OnTimer(UINT_PTRnIDEvent)

    {

    if(NULL== g_handle)

    {

    MessageBox(_T(链接断开));

    return;

    }

    switch(nIDEvent)

    {

    case1: //更新控制器轴0-3的位置信息和速度信息

    CStringXpos, Xmspeed;

    CStringYpos, Ymspeed;

    CStringZpos, Zmspeed;

    CStringUpos, Umspeed;

    float showpos = { 0 };

    floatmspeed = { 0 };

    int status = 0;

    //获取当前轴位置

    ZAux_Direct_GetAllAxisPara(g_handle, DPOS, 4, showpos);

    Xpos.Format(X: %.2f, showpos);

    Ypos.Format(Y: %.2f, showpos);

    Zpos.Format(Z: %.2f, showpos);

    Upos.Format(U: %.2f, showpos);

    GetDlgItem(IDC_XPOS)-SetWindowText(Xpos);

    GetDlgItem(IDC_YPOS)-SetWindowText(Ypos);

    GetDlgItem(IDC_ZPOS)-SetWindowText(Zpos);

    GetDlgItem(IDC_UPOS)-SetWindowText(Upos);

    //判断主轴状态(即BASE的第一个轴)

    ZAux_Direct_GetIfIdle(g_handle, 0, status);

    if(status == -1)

    {

    GetDlgItem(IDC_RUNSTATUS)-SetWindowText(运动状态:停止中);

    }

    else

    {

    GetDlgItem(IDC_RUNSTATUS)-SetWindowText(运动状态:运动中);

    }

    //更新轴速度

    ZAux_Direct_GetAllAxisPara(g_handle, MSPEED, 4, mspeed);

    Xmspeed.Format(X轴速度: %.2f, mspeed);

    Ymspeed.Format(Y轴速度: %.2f, mspeed);

    Zmspeed.Format(Z轴速度: %.2f, mspeed);

    Umspeed.Format(U轴速度: %.2f, mspeed);

    GetDlgItem(IDC_SPEED_X)-SetWindowText(Xmspeed);

    GetDlgItem(IDC_SPEED_Y)-SetWindowText(Ymspeed);

    GetDlgItem(IDC_SPEED_Z)-SetWindowText(Zmspeed);

    GetDlgItem(IDC_SPEED_U)-SetWindowText(Umspeed);

    break;

    }

    CDialogEx::OnTimer(nIDEvent);

    }

    5/11

    通过启动按钮的事件处理函数来启动连续插补运动。

    //启动按钮

    voidCMergeDlg::OnBnClickedButtonRun()

    {

    if(NULL== g_handle)

    {

    MessageBox(_T(链接断开));

    return;

    }

    UpdateData(true);//刷新参数

    intcorner_mode = 0;

    intaxislist = { 0,1,2,3 }; //运动BASE轴列表

    floatdislist1 = { 0 }; //运动距离列表

    floatdislist2 = { 0 };

    floatdislist3 = { 0 };

    //选择参与运动的轴,第一个轴为主轴,插补参数全用主轴参数

    ZAux_Direct_SetSpeed(g_handle, axislist, M_Speed); //速度

    ZAux_Direct_SetAccel(g_handle, axislist, M_Accel); //加速度

    ZAux_Direct_SetDecel(g_handle, axislist, M_Decel); //减速度

    ZAux_Direct_SetSramp(g_handle, axislist, M_SRAMP); //S曲线时间

    //设置拐角模式

    if(m_mode1 == 1)

    {

    corner_mode = corner_mode + 2;

    }

    if(m_mode2 == 1)

    {

    corner_mode = corner_mode + 8;

    }

    if(m_mode3 == 1)

    {

    corner_mode = corner_mode + 32;

    }

    ZAux_Direct_SetCornerMode(g_handle, axislist, corner_mode);

    //设置连续插补

    ZAux_Direct_SetMerge(g_handle, axislist, m_mode);

    //设置SP速度

    ZAux_Direct_SetForceSpeed(g_handle, axislist, SP_Speed);

    //设置开始.结束减速角度,转换为弧度

    ZAux_Direct_SetDecelAngle(g_handle, axislist, StartAngle * 3.14 / 180);

    ZAux_Direct_SetStopAngle(g_handle, axislist, StopAngle * 3.14 / 180);

    //设置小圆限速半径

    ZAux_Direct_SetFullSpRadius(g_handle, axislist, SP_Radius);

    //设置拐角半径

    ZAux_Direct_SetZsmooth(g_handle, axislist, CornerRadius);

    //SP指令中自动拐角模式中设置一个较大的startmovespeed与endmovespeed

    ZAux_Direct_SetStartMoveSpeed(g_handle, axislist, 10000);

    ZAux_Direct_SetEndMoveSpeed(g_handle, axislist, 10000);

    //更新运动数据

    dislist1 = DPOS_X_1; dislist1 = DPOS_Y_1;

    dislist1 = DPOS_Z_1; dislist1 = DPOS_U_1;

    dislist2 = DPOS_X_2; dislist2 = DPOS_Y_2;

    dislist2 = DPOS_Z_2; dislist2 = DPOS_U_2;

    dislist3 = DPOS_X_3; dislist3 = DPOS_Y_3;

    dislist3 = DPOS_Z_3; dislist3 = DPOS_U_3;

    //开始运动

    ZAux_Direct_Move(g_handle, 4, axislist, dislist1);

    ZAux_Direct_Move(g_handle, 4, axislist, dislist2);

    ZAux_Direct_Move(g_handle, 4, axislist, dislist3);

    }

    6/11

    通过停止按钮的事件处理函数来停止插补运动。

    //停止按钮

    voidCMergeDlg::OnBnClickedButtonStop()

    {

    if(NULL== g_handle)

    {

    MessageBox(_T(链接断开));

    return;

    }

    ZAux_Direct_Single_Cancel(g_handle, 0, 2); //停止主轴 BASE的一个轴

    }

    7/11

    轴坐标清零。

    //坐标清零

    voidCMergeDlg::OnBnClickedButtonClear()

    {

    if(NULL== g_handle)

    {

    MessageBox(_T(链接断开));

    return;

    }

    for(inti = 0; i4; i++)

    {

    ZAux_Direct_SetDpos(g_handle, i, 0); //DPOS设为零

    }

    }

    8/11

    编译运行演示。

    1)编译运行示教例程。

    9/11

    2)同时通过ZDevelop软件连接同一个控制器,对运动控制的轴参数进行监控。

    A.连续插补加自动倒角的位置波形。

    10/11

    接上:B.不开启连续插补的速度波形。

    11/11

    接上:C.连续插补加合适的拐角减速的速度波形。

    注意事项

    本次,正运动技术的C++开发之VS(MFC)就分享到这里,更多正运动运动控制器和运动控制卡的使用介绍,请关注“正运动小助手”公众号。

    本文关键词:

    版权声明:

    1、本文系转载,版权归原作者所有,旨在传递信息,不代表看本站的观点和立场。

    2、本站仅提供信息发布平台,不承担相关法律责任。

    3、若侵犯您的版权或隐私,请联系本站管理员删除。

    4、文章链接:http://www.1haoku.cn/art_411047.html

    相关资讯

    ©2019-2020 http://www.1haoku.cn/ 国ICP备20009186号05-06 17:37:41  耗时:0.028
    0.0279s