点击上方“正运动小助手”,随时关注新动态!
今天,正运动小助手给大家分享一下全国产EtherCAT运动控制边缘控制器ZMC432H的轴参数配置和单轴运动控制。
01
功能简介
全国产EtherCAT运动控制边缘控制器ZMC432H是正运动的一款软硬件全国产自主可控,运动控制接口兼容EtherCAT总线和脉冲型的独立式运动控制器,最多支持32轴运动控制,同时支持正运动远程HMI功能,能提供网络组态显示,可实时监控和调整参数配置。
ZMC432H具备丰富的硬件接口和控制功能模块,能实现高效稳定的运动控制和实时数据采集,以满足工业控制协同工业互联网的应用需求。ZMC432H内置了Linux系统,可以使用本地的LOCAL接口进行连接,可以做到更快速的指令交互,单条指令与多条指令一次性交互时间为40us左右。
ZMC432H视频介绍:
video: https://mp.weixin.qq.com/mp/readtemplate?t=pages/video_player_tmpl&action=mpvideo&auto=0&vid=wxv_3121235548054142983
02
C++进行运动控制开发
1.新建MFC项目并添加函数库
(1)在VS2022菜单“文件”→“新建”→ “项目”,启动创建项目向导。
(2)选择开发语言为“Visual C++”和程序类型“MFC应用程序”。
(3)点击下一步即可。
(4)选择类型为“基于对话框”,下一步或者完成。
(5)找到厂家提供的光盘资料,路径如下(64位库为例)。
A.进入厂商提供的光盘资料找到“8.PC函数”文件夹,并点击进入。
B.选择“函数库2.1.1”文件夹。
C.选择“Windows平台”文件夹。
D.根据需要选择对应的函数库这里选择64位库。
E.解压C++的压缩包,里面有C++对应的函数库。
F.函数库具体路径如下。
(6)将厂商提供的C++的库文件和相关头文件复制到新建的项目里面。
(7)在项目中添加静态库和相关头文件。
A.先右击项目文件,接着依次选择:“添加”→“现有项”。
B.在弹出的窗口中依次添加静态库和相关头文件。
(8)声明用到的头文件和定义控制器连接句柄。
至此项目新建完成,可进行MFC项目开发。
2.查看PC函数手册,熟悉相关函数接口
(1)PC函数手册也在光盘资料里面,具体路径如下:“光盘资料\3.编程手册\ZMotion函数库编程手册 V2.1.1\ZMotion函数库编程手册 V2.1.1.pdf”。
(2)链接控制器,获取链接句柄。
指令
| 说明 |
ZAux_OpenCom
|
串口连接控制器
|
ZAux_OpenEth
|
以太网连接控制器
|
ZAux_OpenPci
|
PCI 卡连接
|
ZAux_FastOpen
|
与控制器建立连接,指定连接的等待时间.
|
(3)轴参数配置相关接口。
指令
| 说明 |
ZAux_Direct_SetAtype
|
设置轴类型
|
ZAux_Direct_SetUnits
|
设置轴脉冲当量
|
ZAux_Direct_SetInvertStep
|
设置脉冲输出模式
|
ZAux_Direct_SetSpeed
|
设置轴速度
|
ZAux_Direct_SetAccel
|
设置轴加速度
|
ZAux_Direct_SetDecel
|
设置轴减速度
|
ZAux_Direct_SetSramp
|
设置轴S曲线
|
ZAux_Direct_GetAtype
|
读取轴类型
|
ZAux_Direct_GetUnits
|
读取轴脉冲当量
|
ZAux_Direct_GetInvertStep
|
读取脉冲输出模式
|
ZAux_Direct_GetSpeed
|
读取轴速度
|
ZAux_Direct_GetAccel
|
读取轴加速度
|
ZAux_Direct_GetDecel
|
读取轴减速度
|
ZAux_Direct_GetSramp
|
读取轴S曲线设置
|
(4)单轴运动接口。
指令
| 说明 |
ZAux_Direct_Single_Vmove
|
单轴连续运动。
|
ZAux_Direct_Single_Move
|
单轴相对距离运动。
|
ZAux_Direct_Single_MoveAbs
|
单轴绝对距离运动。
|
ZAux_Direct_Single_Cancel
|
单轴停止。
|
(5)轴状态监控。
指令113
| ZAux_Direct_GetAxisStatus |
指令原型
|
int32 __stdcall ZAux_Direct_GetAxisStatus(ZMC_HANDLE handle, int iaxis, int *piValue)
|
指令说明
|
读取当前轴的状态。
|
输入参数
|
共有2个输入参数,见下方说明。
|
handle
|
链接标识。
|
iaxis
|
轴号。
|
输出参数
|
共有1个输出参数,见下方说明。
|
piValue
|
返回状态值,对应的位表示不同状态。
|
返回值
|
见错误码详细说明。
| 3.MFC进行轴参数配置和单轴运动控制
(1)例程界面如下。
(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; } 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; } SetWindowText("已链接"); SetTimer( 1, 100, NULL ); }
(3)通过定时器1对控制器信息进行监控。
void CSingle_move_Dlg::OnTimer(UINT_PTR nIDEvent){ if(NULL == g_handle) { MessageBox(_T("链接断开")); return ; } 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::OnBnClickedSetpara(){ UpdateData(true);//刷新参数 //m_nAxis表示当前程序选定的轴,x为轴0,以此类推 //设置脉冲当量 1表示以一个脉冲为单位 ,设置为1MM的脉冲个数,这度量单位为MM 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);}
(5)通过启动按钮的事件处理函数来进行单轴运动。
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); 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); }
(6)通过停止按钮的事件处理函数来停止轴的运动。
void CSingle_move_Dlg::OnStop() //停止运动{ if(NULL == g_handle) { MessageBox(_T("链接断开状态")); return ; } ZAux_Direct_Single_Cancel(g_handle,m_nAxis,2); // }
03
调试与监控
编译运行例程,同时通过ZDevelop软件连接控制器对控制器状态进行监控。
1.RtSys软件连接控制器监控控制器的基本参数
2.通过RtSys软件的示波器功能对轴运动的波形进行抓取。
(1)轴0寸动运动模式,加速度=100,S曲线时间=0。
(2)轴1寸动运动模式,加速度=100,S曲线时间=250。
(3)轴2寸动运动模式,加速度=1000,S曲线时间=0。
(4)轴2寸动运动模式,加速度=1000,S曲线时间=500。
3.单轴运动例程讲解。
video: https://mp.weixin.qq.com/mp/readtemplate?t=pages/video_player_tmpl&action=mpvideo&auto=0&vid=wxv_3122702290794233856
完整代码获取地址
▼
本次,正运动技术全国产EtherCAT运动控制边缘控制器(四):轴参数配置与单轴运动PC上位机C++控制,就分享到这里。
更多精彩内容请关注“正运动小助手”公众号,需要相关开发环境与例程代码,请咨询正运动技术销售工程师:400-089-8936。
本文由正运动技术原创,欢迎大家转载,共同学习,一起提高中国智能制造水平。文章版权归正运动技术所有,如有转载请注明文章来源。
回顾往期内容
开奖啦!参与《运动控制系统应用与实践》赠书活动的粉丝们看这里
送书福利!全自主IDE的《运动控制系统应用与实践》
全国产EtherCAT运动控制边缘控制器(三):外设读写与RTSys开发诊断
全国产EtherCAT运动控制边缘控制器(二):统一的上位机API接口
全国产EtherCAT运动控制边缘控制器(一):ZMC432H硬件接口
高柔SS加减速曲线在锂电池焊接中的应用
EtherCAT和Ethernet的不同点有哪些, 通信周期又是什么意思?
工业以太网时代,该如何选择总线运动控制器?
EtherCAT运动控制器在数控加工手轮随动中的应用
EtherCAT运动控制器在数控加工手轮随动中的应用之C++
正运动技术运动控制器如何快速实现单轴/多轴同步跟随功能?
运动控制器PSO视觉飞拍与精准输出的C++开发(三):二维/三维/多轴PSO输出
运动控制器PSO视觉飞拍与精准输出的C++开发(二):多轴PSO等距/周期输出
运动控制器PSO视觉飞拍与精准输出的C++开发(一):单轴PSO
运动控制器八通道PSO的视觉飞拍与精准输出
Windows实时运动控制软核(七):LOCAL高速接口测试之Labview
Windows实时运动控制软核(六):LOCAL高速接口测试之Matlab
Windows实时运动控制软核(五):LOCAL高速接口测试之VC6.0
Windows实时运动控制软核(四):LOCAL高速接口测试之VB.NET
Windows实时运动控制软核(三):LOCAL高速接口测试之C++
Windows实时运动控制软核(二):LOCAL高速接口测试之Qt
Windows实时运动控制软核(一):LOCAL高速接口测试之C#
开放式激光振镜运动控制器:C++ 快速调用图形库应用
开放式激光振镜运动控制器:C++振镜矫正方法与实现
开放式激光振镜运动控制器:C++快速开发
开放式激光振镜运动控制器(五):ZMC408SCAN 光纤激光器的能量控制
开放式激光振镜运动控制器(四):ZMC408SCAN振镜控制光纤激光器加工
开放式激光振镜运动控制器(三):ZMC408SCAN轴控光纤激光器加工
开放式激光振镜运动控制器(二):ZMC408SCAN激光接口与控制
开放式激光振镜运动控制器(一):ZMC408SCAN接口与功能
运动控制器PSO位置同步输出(三):高精度等间距二维三维PSO输出
运动控制器PSO位置同步输出(二):PSO模式详解
运动控制器PSO位置同步输出(一):硬件平台与PSO指令简介
经济型EtherCAT运动控制器(十):EtherCAT总线快速入门
经济型EtherCAT运动控制器(九):示波器使用
经济型EtherCAT运动控制器(八):轴参数与运动指令
经济型EtherCAT运动控制器(七):运动缓冲
经济型EtherCAT运动控制器(六):数据储存
经济型EtherCAT运动控制器(五):多任务运行
经济型EtherCAT运动控制器(四):ModbusRTU或ModbusTcp与触摸屏通讯
经济型EtherCAT运动控制器(三):PLC实现多轴直线插补与电子凸轮
经济型EtherCAT运动控制器(二):ZBasic实现多轴直线插补运动
经济型EtherCAT运动控制器(一):功能简介与应用场景
运动控制+机器视觉Demo软件框架(三):视觉纠偏+连续插补的配方编辑
运动控制+机器视觉Demo软件框架(二):移动标定和形状匹配
运动控制+机器视觉Demo软件框架(一):机械参数和配方文件的管理
运动控制+机器视觉Demo软件框架系统概述
开放式激光振镜+运动控制器(六):双振镜运动
开放式激光振镜+运动控制器(五):ZMC408SCAN控制器硬件介绍
开放式激光振镜+运动控制器(四):PSO位置同步输出在激光振镜加工中的应用
开放式激光振镜+运动控制器(三):振镜矫正
开放式激光振镜+运动控制器(二):振镜填充
开放式激光振镜+运动控制器(一):硬件接口
EtherCAT轴扩展模块EIO16084在运动控制系统中的应用EtherCAT运动控制器中脉冲接口的快速调试与诊断EtherCAT运动控制器之ZMIO300模块的使用EtherCAT运动控制器的PLC编程(四) 电子凸轮
EtherCAT运动控制器的PLC编程(三) 电子齿轮
EtherCAT运动控制器的PLC编程(二) 圆弧插补
EtherCAT运动控制器的PLC编程(一) 直线插补
快速入门 | 篇二十一:运动控制器ZHMI组态编程简介一
快速入门 | 篇二十一:正运动技术运动控制器自定义通讯
快速入门 | 篇二十:正运动技术运动控制器MODBUS通讯
快速入门 | 篇十九:正运动技术运动控制器多轴同步与电子凸轮指令简介
快速入门 | 篇十八:正运动技术脉冲型运动控制器的使用
快速入门 | 篇十七:运动控制器多轴插补运动指令的使用
快速入门 | 篇十六:正运动控制器EtherCAT总线快速入门
快速入门 | 篇十五:运动控制器运动缓冲简介
快速入门 | 篇十四:运动控制器基础轴参数与基础运动控制指令
快速入门 | 篇十三:正运动技术运动控制器ZDevelop 编程软件的使用
快速入门 | 篇十二:正运动技术运动控制器U盘接口的使用
快速入门 | 篇十一:正运动技术运动控制器中断的应用
快速入门 | 篇十:运动控制器多任务运行特点
快速入门 | 篇九:如何进行运动控制器示波器的应用?
快速入门 | 篇八:如何进行运动控制器EtherCAT总线的基础使用?
快速入门 | 篇七:如何进行运动控制器ZCAN总线扩展模块的使用?
快速入门 | 篇六:如何进行运动控制器数据与存储的应用?
快速入门 | 篇五:如何进行运动控制器输入/输出IO的应用?
快速入门 | 篇四:如何进行运动控制器与触摸屏通讯?
快速入门 | 篇三:如何进行运动控制器ZPLC程序开发?
快速入门 | 篇二:如何进行运动控制器ZBasic程序开发?
快速入门 | 篇一:如何进行运动控制器固件升级?
EtherCAT与RTEX驱动器轴回零的配置与实现
G代码在运动控制器上的应用
运动控制器的自定义G代码编程应用
离线仿真调试,加快项目进度!
8轴EtherCAT轴扩展模块EIO24088的使用
运动控制器之追剪应用Demo
运动控制器激光振镜控制运动控制器轴回零的配置与实现
运动控制器位置锁存功能的应用
ZMC运动控制器SCARA机械手应用快速入门
运动控制器RTEX总线使用入门
正运动技术CAD导图软件配合控制器的使用方法
EtherCAT总线运动控制器应用进阶一
EtherCAT运动控制卡开发教程之Qt(下):SCARA机械手正反解的建立
EtherCAT运动控制卡开发教程之Qt(中):小线段连续轨迹加工、暂停与继续
EtherCAT运动控制卡开发教程之Qt(上):开发环境配置与简单运动控制应用
EtherCAT运动控制卡开发教程之python
EtherCAT运动控制卡的SCARA等机器人指令的应用
EtherCAT运动控制卡的PWM与模拟量输出和运动速度同步
EtherCAT运动控制卡硬件比较输出以及编码器锁存
EtherCAT运动控制卡IO动作与运动控制的同步
EtherCAT运动控制卡实时程序的运行和读写控制
EtherCAT运动控制卡的运动暂停、恢复与系统安全设置
EtherCAT运动控制卡小线段前瞻的连续插补运动
EtherCAT运动控制卡的多轴插补运动和手轮运动
EtherCAT运动控制卡的辅助调试工具与方法介绍
EtherCAT运动控制卡的总线轴参数设置和轴运动
EtherCAT运动控制卡的硬件接线与C#的硬件外设读写与回零运动
EtherCAT运动控制卡的硬件接线与C#的单轴运动控制
简单易用的运动控制卡(十六):螺距补偿和反向间隙补偿
简单易用的运动控制卡(十五):PC启停控制器的实时程序
简单易用的运动控制卡(十四):PWM、模拟量输出与运动控制的同步
简单易用的运动控制卡(十三):IO动作与运动控制的同步
简单易用的运动控制卡(十二):运动控制系统的安全设置
简单易用的运动控制卡(十一):运动的暂停恢复和速度倍率设置
简单易用的运动控制卡(十):连续插补和小线段前瞻
简单易用的运动控制卡(九):圆弧插补和螺旋插补
简单易用的运动控制卡(八):直线插补和手轮运动
简单易用的运动控制卡(七):一次性加载多条连续小线段数据
简单易用的运动控制卡(六):Basic文件下载和连续轨迹加工
简单易用的运动控制卡(五):IO配置与回零运动
简单易用的运动控制卡(四):函数库的封装
简单易用的运动控制卡(三):轴参数配置和单轴运动控制
简单易用的运动控制卡(二):外设读写与ZDevelop诊断
简单易用的运动控制卡(一):硬件接线和上位机开发
运动控制卡在ROS上的应用(下)
运动控制卡在ROS上的应用(上)
EtherCAT运动控制卡和LabVIEW构建智能装备(五)
EtherCAT运动控制卡和LabVIEW构建智能装备(四)
EtherCAT运动控制卡和LabVIEW构建智能装备(三)
EtherCAT运动控制卡和LabVIEW构建智能装备(二)
EtherCAT运动控制卡和LabVIEW构建智能装备(一)
EtherCAT运动控制卡在LabVIEW中的运动控制与数据采集
运动控制卡应用开发教程之MATLAB
运动控制卡应用开发教程之C++
运动控制卡应用开发教程之Python
运动控制卡应用开发教程之C#
运动控制卡应用开发教程之Linux
运动控制卡应用开发教程之VB.NET
运动控制卡应用开发教程之VB6.0
运动控制卡应用开发教程之VC6.0
运动控制卡应用开发教程之使用Qt
运动控制卡应用开发教程之LabVIEW
运动控制卡应用开发教程之激光振镜控制
运动控制卡应用开发教程之硬件比较输出
关于正运动技术
深圳市正运动技术有限公司成立于2013年,专注于纯国产运动控制技术研究和通用运动控制软硬件平台和产品的研发,是国家级高新技术和专精特新“小巨人”企业。
正运动技术汇集了来自华为、中兴等公司的优秀人才。力求创新,目前公司拥有专利、著作权等知识产权五十余项。在坚持自主创新的同时,积极联合各大高校和科研院所协同运动控制基础技术的研究,是国内工控领域发展最快的企业之一,也是国内少有、完整掌握运动控制核心技术和实时工控软件平台技术的企业。
正运动技术除本部研发中心外,设有中山、武汉、上海三个研发分部。为更好地服务客户,本部之外设有苏州、东莞两个区域性服务中心,设有佛山、厦门、青岛、西安、武汉、成都、天津、郑州等销售和技术服务机构。
经过众多合作伙伴多年的开发应用,正运动技术的产品广泛地应用于3C电子、半导体、新能源、机器人、包装印刷、纺织服装、激光加工、医疗制药、数控机床、传统加工等领域。
|