简单易用的运动控制卡(一):硬件接线和上位机开发

今天,正运动小助手给大家分享一下运动控制卡之ECI3808的硬件接线和如何进行MFC的上位机开发。

一 、ECI3808硬件介绍

1.功能介绍

ECI3808系列控制卡支持最多达 12 轴直线插补、任意圆弧插补、空间圆弧、螺旋插补、电子凸轮、电子齿轮、同步跟随、虚拟轴、机械手指令等;采用优化的网络通讯协议可以实现实时的运动控制。

ECI3808系列运动控制卡支持以太网,RS232 通讯接口和电脑相连,接收电脑的指令运行,可以通过CAN总线去连接各个扩展模块,从而扩展输入输出点数或运动轴。

ECI3808系列运动控制卡的应用程序可以使用 VC,VB,VS,C++,C#等软件来开发,程序运行时需要动态库 zmotion.dll。调试时可以把ZDevelop软件同时连接到控制器,从而方便调试、方便观察。

1.jpg

2.硬件接口

2.jpg

3.jpg

3.控制器基本信息

4.jpg

二 、C++进行运动控制开发

1.新建MFC项目并添加函数库

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

5.jpg

(2)选择开发语言为“Visual C++”和程序类型“MFC应用程序”。

6.jpg

(3)点击下一步即可。

7.jpg

(4)选择类型为“基于对话框”,下一步或者完成。

8.jpg

(5)找到厂家提供的光盘资料,路径如下(64位库为例)。

A.进入厂商提供的光盘资料找到“8.PC函数”文件夹,并点击进入。

9.jpg

B.选择“函数库2.1”文件夹。

10.jpg

C.选择“Windows平台”文件夹。

11.jpg

D.根据需要选择对应的函数库这里选择64位库。

12.jpg

E.解压C++的压缩包,里面有C++对应的函数库。

15.jpg

F.函数库具体路径如下。

16.jpg

(6)将厂商提供的C++的库文件和相关头文件复制到新建的项目里面。

17.jpg

(7)在项目中添加静态库和相关头文件。

A.先右击项目文件,接着依次选择:“添加”→“现有项”。

18.jpg

B.在弹出的窗口中依次添加静态库和相关头文件。

(8)声明用到的头文件和定义控制器连接句柄。

19.jpg

至此项目新建完成,可进行MFC项目开发。

2.查看PC函数手册,熟悉相关函数接口。

(1)PC函数手册也在光盘资料里面,具体路径如下:“光盘资料\8.PC函数\函数库2.1\ZMotion函数库编程手册 V2.1.pdf”

20.jpg

(2)链接控制器,获取链接句柄。

21.jpg

(3)使用轴参数设置相关的指令操作链接句柄“g_handle”,对控制器进行轴参数的设置,轴参数设置相关的指令如下。

22.jpg

(4)单轴运动接口。

23.jpg

3.MFC开发单轴运动例程。

(1)例程界面如下。

24.jpg

(2)链接按钮的事件处理函数中调用链接控制器的接口函数ZAux_OpenEth(),与控制器进行链接,链接成功后启动定时器1监控控制器状态。

        //网口链接控制器

        void CSingle_move_Dlg::OnOpen()

        {

             char   buffer[256]; 

             int32 iresult;

             //如果已经链接,则先断开链接

             if(NULL != g_handle)

             {

                ZAux_Close(g_handle);

                g_handle = NULL;

             }

              //从IP下拉框中选择获取IP地址

              GetDlgItemText(IDC_IPLIST,buffer,255);

              buffer[255] = '\0';

              //开始链接控制器

              iresult = ZAux_OpenEth(buffer, &g_handle);

              if(ERR_SUCCESS != iresult)

              {

                 g_handle = NULL;

                 MessageBox(_T("链接失败"));

                 SetWindowText("未链接");

                 return;

              }

              //链接成功开启定时器1

              SetWindowText("已链接");

              SetTimer( 1, 100, NULL );  

        }      

(3)通过定时器1监控控制器状态。

        void CSingle_move_Dlg::OnTimer(UINT_PTR nIDEvent) 

        {

            //如果没有链接控制器

            if(NULL == g_handle)

            {

                MessageBox(_T("链接断开"));

                return ;

            }

            //定时器1

            if(1 == nIDEvent)

            {

                CString string;

                float position = 0;

                //获取当前轴位置

                ZAux_Direct_GetDpos( g_handle,m_nAxis,&position);          

                string.Format("当前位置:%.2f", position );

                GetDlgItem( IDC_CURPOS )->SetWindowText( string );

                //获取当前轴速度

                float NowSp = 0;

                ZAux_Direct_GetVpSpeed( g_handle,m_nAxis,&NowSp);         

                string.Format("当前速度:%.2f", NowSp );

                GetDlgItem( IDC_CURSPEED)->SetWindowText( string );

                //判断当前轴状态

                int status = 0; 

                ZAux_Direct_GetIfIdle(g_handle, m_nAxis,&status);           

                if (status == -1)

                {

                    GetDlgItem( IDC_CURSTATE )->SetWindowText( "当前状态:停  止" );

                }

                else

                {

                    GetDlgItem( IDC_CURSTATE )->SetWindowText( "当前状态:运动中" );

                }

            }

            CDialog::OnTimer(nIDEvent);

        }

(4)通过启动按钮的事件处理函数去设置轴参数并开始轴运动。

          

        //启动按钮事件处理函数

        void CSingle_move_Dlg::OnStart()        

        {

              //如果没有链接控制器

              if(NULL == g_handle)

              {

                 MessageBox(_T("链接断开状态"));

                 return ;

              }

              UpdateData(true);

              //判断当前轴状态

              int status = 0; 

              ZAux_Direct_GetIfIdle(g_handle, m_nAxis,&status);           

              if(status == 0)

              {

                 return;    //如果已经在运动

              }   

              //设定轴类型 1-脉冲轴类型   

              ZAux_Direct_SetAtype(g_handle, m_nAxis, 1);

              //设定脉冲模式及逻辑方向(脉冲+方向)  

              ZAux_Direct_SetInvertStep(g_handle, m_nAxis, 0);

              //设置脉冲当量  1表示以一个脉冲为单位 ,设置为1MM的脉冲个数

              ZAux_Direct_SetUnits(g_handle, m_nAxis, m_units);

              //设定速度,加减速

              ZAux_Direct_SetLspeed(g_handle, m_nAxis, m_lspeed);

              ZAux_Direct_SetSpeed(g_handle, m_nAxis, m_speed);

              ZAux_Direct_SetAccel(g_handle, m_nAxis, m_acc);

              ZAux_Direct_SetDecel(g_handle, m_nAxis, m_dec);

              //设定S曲线时间 设置为0表示梯形加减速 

              ZAux_Direct_SetSramp(g_handle, m_nAxis, m_sramp);

              //判断运动模式

              if(m_mode == 0 )

              {

                 //寸动(位置模式)

                 ZAux_Direct_Single_Vmove(g_handle, m_nAxis, m_bLogic?1:0);  

              }

              else

              {

                 //持续驱动(速度模式)

                 ZAux_Direct_Single_Move(g_handle, m_nAxis, m_step*(m_bLogic?1:-1));

              }

              UpdateData(false);  

        }

三 、调试与监控

编译运行例程,同时通过ZDevelop软件连接控制器对控制器状态进行监控。

1.ZDevelop软件连接控制器监控控制器的基本参数。

25.jpg

2.通过ZDevelop软件的示波器功能对轴运动的波形进行抓取。

A.寸动运动没设置S曲线时间波形如下图所示:

26.jpg

B.寸动运动设置S曲线时间波形如下图所示:

27.jpg

3.ZDevelop软件调试视频。
  

简单易用的运动控制卡(一):硬件接线和上位机开发

本次,正运动技术简单易用的运动控制卡(一):硬件接线和上位机开发,就分享到这里。

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

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

  • 1
    点赞
  • 28
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

正运动技术

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值