- 关键词:运动控制器,PSO功能,上位机开发
- 作者:正运动技术
- 摘要:本节主要讲解矢量比较两种模式:等距周期比较输出,固定时间周期比较输出。
本文主要介绍正运动技术EtherCAT控制器在VS平台采用C++语言实现的各种PSO功能。正运动提供多种PSO模式供用户搭配不同的场景使用。上节讲解了采用TABLE寄存器存储的数据表触发比较,本节主要讲解矢量比较两种模式:等距周期比较输出,固定时间周期比较输出。更多周期比较模式、二维三维比较模式参见下一节说明。ZMC408CE是正运动推出的一款多轴高性能EtherCAT总线运动控制器,具有EtherCAT、EtherNET、RS232、CAN和U盘等通讯接口,ZMC系列运动控制器可应用于各种需要脱机或联机运行的场合。
![企业微信截图_20230308085315.png 企业微信截图_20230308085315.png](http://upload.gongkong.com/Upload/gongkong/baiduEditorImage/202303/09/916f9725865d4429ac82e3539e212e45_w_20230308085315.png)
ZMC408CE支持8轴运动控制,最多可扩展至32轴,支持直线插补、任意圆弧插补、空间圆弧、螺旋插补、电子凸轮、电子齿轮、同步跟随等功能。ZMC408CE支持8轴运动控制,可采用脉冲轴(带编码器反馈)或EtherCAT总线轴,通用IO包含24个输入口和16个输出口,部分IO为高速IO,EtherCAT最快100us的刷新周期。ZMC408CE支持8个通道的硬件比较输出、硬件定时器、运动中精准输出,还支持8通道PWM输出,对应的输出口为OUT0-7,支持8个通道同时触发硬件比较输出,用于多通道的视觉飞拍场合等。ZMC408CE支持PLC、Basic、HMI组态三种编程方式。PC上位机API编程支持C#、C++、LabVIEW、Matlab、Qt、Linux、VB.Net、Python等接口。ZMC408CE内置高精度PSO位置同步输出功能,在加工圆角与曲线时即使进行有减速调整,在高速加工的场合中也能控制激光输出的等间距输出。
PSO(position synchronized output)即位置同步输出,本质是通过采集实时的编码器反馈位置(无编码器可使用输出的脉冲位置)与比较模式设定的位置进行比较,控制OP高速同步输出信号,PSO示意图如下。![企业微信截图_20230308085516.png 企业微信截图_20230308085516.png](http://upload.gongkong.com/Upload/gongkong/baiduEditorImage/202303/09/9cf010fae1fd4864a7f3195daee70386_w_20230308085516.png)
PSO一般与激光器(或点胶喷射阀等设备)同步输出信号进行相位同步,在运动轨迹的所有阶段以恒定的空间(或恒定时间)间隔触发输出开关,包括加速、减速和匀速段,从而实现脉冲能量均匀地作用在被加工物体上。PSO功能的特点是能高速且稳定的输出信号,因为输出精度足够高,所以能够在整个运动轨迹中以固定的距离触发输出信号而不用考虑总体速度,即在直线部分以很快的速度运动,而在圆角部分减速的同时也能保证输出间距恒定。通常圆角加工部分在整个加工过程中占有比较小的部分,这样在保证加工效果的同时,就可以最大限度地提高产能。![企业微信截图_20230308085534.png 企业微信截图_20230308085534.png](http://upload.gongkong.com/Upload/gongkong/baiduEditorImage/202303/09/be676f8a5e6a49f893c4351c1c39613d_w_20230308085534.png)
正运动的PSO功能调用ZAux_Direct_HwPswitch2函数接口实现,该函数采用硬件实现IO的高速比较输出,响应速度达到微秒级别,故名硬件比较输出。(一)新建MFC项目并添加函数库
注:本例程在VS2010编译环境下,基于.NET Framework 4.0框架创建的MFC窗体应用程序。
1.工具栏菜单“文件”→“新建”→“项目”,启动创建项目向导。
![企业微信截图_20230310113049.png 企业微信截图_20230310113049.png](http://upload.gongkong.com/Upload/gongkong/baiduEditorImage/202303/10/f9372110cf1f4c8b94691bd1e5724dcd_w_20230310113049.png)
2.选择开发语言为“Visual C++”和.NET Framework 4以及MFC应用程序,填写好程序名以及选择好程序存放路径,点击确定。![企业微信截图_20230310113115.png 企业微信截图_20230310113115.png](http://upload.gongkong.com/Upload/gongkong/baiduEditorImage/202303/10/27cde751921b493d8be4c3e29686c4c4_w_20230310113115.png)
![企业微信截图_20230310113127.png 企业微信截图_20230310113127.png](http://upload.gongkong.com/Upload/gongkong/baiduEditorImage/202303/10/61697d349cc74a3584468294bbe20cab_w_20230310113127.png)
4.选择类型为“基于对话框”,点击下一步或者完成即可。![企业微信截图_20230310113137.png 企业微信截图_20230310113137.png](http://upload.gongkong.com/Upload/gongkong/baiduEditorImage/202303/10/a10edb8a46af4187bcf9fb6e6e779929_w_20230310113137.png)
1.进入厂商提供的光盘资料,找到“8.PC函数”文件夹,并点击进入,找到C++函数库,路径如下(64位库为例)。![企业微信截图_20230310113149.png 企业微信截图_20230310113149.png](http://upload.gongkong.com/Upload/gongkong/baiduEditorImage/202303/10/c4ee44bdad444782807bb5d77e62ad62_w_20230310113149.png)
![企业微信截图_20230310113200.png 企业微信截图_20230310113200.png](http://upload.gongkong.com/Upload/gongkong/baiduEditorImage/202303/10/c452399b515a49aa9d0f845766936fe5_w_20230310113200.png)
![企业微信截图_20230310113212.png 企业微信截图_20230310113212.png](http://upload.gongkong.com/Upload/gongkong/baiduEditorImage/202303/10/7a1f4617af2e4ed597309e0acb21915c_w_20230310113212.png)
4.根据需要选择对应的函数库,这里选择“64位库”。![企业微信截图_20230310113232.png 企业微信截图_20230310113232.png](http://upload.gongkong.com/Upload/gongkong/baiduEditorImage/202303/10/c7a3f199bcbb4a30a2b4c1722b7894ed_w_20230310113232.png)
![企业微信截图_20230310113241.png 企业微信截图_20230310113241.png](http://upload.gongkong.com/Upload/gongkong/baiduEditorImage/202303/10/c356a1bbf5f440d791bec3dd69883500_w_20230310113241.png)
7.将厂商提供的C++库文件以及相关文件复制到新建的项目中。静态库:zauxdll.lib, zmotion.lib相关头文件:zauxdll2.h, zmotion.h1.先右击头文件,接着依次选择:“添加”→“现有项”。![企业微信截图_20230310113310.png 企业微信截图_20230310113310.png](http://upload.gongkong.com/Upload/gongkong/baiduEditorImage/202303/10/bcd16574481b4a99a8512bf33970c16c_w_20230310113310.png)
![企业微信截图_20230310113321.png 企业微信截图_20230310113321.png](http://upload.gongkong.com/Upload/gongkong/baiduEditorImage/202303/10/750f6634f42643ebb98e94c7972c4335_w_20230310113321.png)
![企业微信截图_20230310113501.png 企业微信截图_20230310113501.png](http://upload.gongkong.com/Upload/gongkong/baiduEditorImage/202303/10/36ac7cd0e470423080a7ab1648944928_w_20230310113501.png)
![企业微信截图_20230310113606.png 企业微信截图_20230310113606.png](http://upload.gongkong.com/Upload/gongkong/baiduEditorImage/202303/10/dd48771cc32b4c82949c5f7597bb1dcf_w_20230310113606.png)
(四)查看PC函数手册
用户需要从PC函数手册中获取运动控制开发使用的函数接口,对照手册说明使用,PC函数手册在光盘资料查看,具体路径如下:“光盘资料\8.PC函数\函数库2.1\ZMotion函数库编程手册V2.1.pdf”。![企业微信截图_20230310113614.png 企业微信截图_20230310113614.png](http://upload.gongkong.com/Upload/gongkong/baiduEditorImage/202303/10/95909eb851b84633b3a1904feccc7c3f_w_20230310113614.png)
(五)控制器网口连接函数接口
PC编程一般使用网口对控制器和工控机进行链接。ZAux_FastOpen();如果链接成功,该接口会返回一个链接句柄。通过操作这个链接句柄可以实现对控制器的控制。ZAux_OpenEth()接口说明:
![企业微信截图_20230310113629.png 企业微信截图_20230310113629.png](http://upload.gongkong.com/Upload/gongkong/baiduEditorImage/202303/10/549fd335784d4174b9729cc29c53c89b_w_20230310113629.png)
![企业微信截图_20230310114247.png 企业微信截图_20230310114247.png](http://upload.gongkong.com/Upload/gongkong/baiduEditorImage/202303/10/2ae16df2b42f47f98e9f880d981b16c8_w_20230310114247.png)
使用对下位机寄存器操作的指令操作链接句柄“g_handle”,对控制器进行寄存器内容取值,实时控制下位机相关的指令如下。实时全局变量指令:ZAux_Direct_HwPswitch2硬件比较输出指令到位置后硬件自动触发op输出信号。
![企业微信截图_20230310113733.png 企业微信截图_20230310113733.png](http://upload.gongkong.com/Upload/gongkong/baiduEditorImage/202303/10/d641ce45acbc402f87facef64800d48f_w_20230310113733.png)
(七)硬件定时器函数接口
ZAux_Direct_HwTimer硬件定时器硬件比较输出后一段时间还原电平。
![企业微信截图_20230310113742.png 企业微信截图_20230310113742.png](http://upload.gongkong.com/Upload/gongkong/baiduEditorImage/202303/10/ad5b2a63f9254a4fb81ad24a1a08b023_w_20230310113742.png)
(一)Demo交互界面如下
![企业微信截图_20230310113752.png 企业微信截图_20230310113752.png](http://upload.gongkong.com/Upload/gongkong/baiduEditorImage/202303/10/975181cbe5aa4d909c3014505a01fdb5_w_20230310113752.png)
(二)例程功能介绍
1.矢量比较,周期距离脉冲(模式5)
ZAux_Direct_HwPswitch2(ZMC_HANDLE handle,int Axisnum,int Mode,int Opnum,int Opstate,float ModePara1, float ModePara2,float ModePara3,float ModePara4)(5)Opstate:第一个比较点的输出状态,认为是有效状态,反之认为无效状态(6)Vectstart:比较点VECTOR_MOVED当前运动距离(7)Repes:重复周期,一个周期内比较两次,先输出有效状态,再输出无效状态(8)Cycledis:周期距离,每隔这个距离输出opstate,ondis后还原为无效状态(9)Ondis:输出有效状态的距离,Cycledis-Ondis为无效状态距离(10)ModePara1:矢量距离比较点坐标(当前运动距离)(11)ModePara2:重复周期,即有效状态个数(12)ModePara3:周期距离,每隔一次有效状态距离(13)ModePara4:有效状态距离(不能大于周期距离)该模式主要功能为:ModePara1参数将比较点设置好之后,当碰到设置单轴矢量距离比较点,则输出一段设置好的周期距离脉冲。该模式使用时需要指定高速输出口,将首个比较点的输出状态和比较轴设置好之后,再设置比较点(矢量距离比较点坐标,当前运动距离),设置好周期距离,重复周期,有效状态距离等。最后启动比较。紧接着驱动轴运动即可。如下图所示,设置高速比较输出口为0,首个比较点的输出状态为1,设置比较轴为0。比较点为80,重复周期为5,周期距离为100,有效距离为20,即当轴矢量距离运动到80之后,每运动100的距离,就会输出设置好的周期位置脉冲。![企业微信截图_20230310113814.png 企业微信截图_20230310113814.png](http://upload.gongkong.com/Upload/gongkong/baiduEditorImage/202303/10/ae47474bd0cd4a4a8c89e0b67b79ae79_w_20230310113814.png)
示波器波形如图所示:由图可得当轴0与轴1在进行300,400的插补运动时,在矢量位置80,180,280,380,480时会输出设置好的周期位置脉冲。ZAux_Direct_HwPswitch2(ZMC_HANDLE handle,int Axisnum,int Mode,int Opnum,int Opstate,float ModePara1,float ModePara2,float ModePara3,float ModePara4)(5)Opstate:第一个比较点的输出状态,认为是有效状态,反之认为无效状态(6)Vectstart:比较点VECTOR_MOVED当前运动距离(7)Repes:重复周期,一个周期内比较两次,先输出有效状态,再输出无效状态(8)Cycledis:周期距离,每隔这个距离输出opstate,ondis后还原为无效状态(9)Ondis:输出有效状态的距离,Cycledis-Ondis为无效状态距离(10)ModePara1:矢量距离比较点坐标(当前运动距离)(11)ModePara2:重复周期,即有效状态个数(12)ModePara3:周期距离,每隔一次这个距离输出一次定时器(13)ModePara4:模式6里面,该参数无意义,填0或其他任意值该模式主要功能为:ModePara1参数设置好比较点之后,当碰到设置单轴矢量距离比较点之后,则输出一段设置好的定时脉冲。该模式使用时需要指定高速输出口,设置好首个比较点的输出状态和比较轴,再设置比较点(矢量距离比较点坐标,当前运动距离),设置好周期距离,重复周期,设置好硬件定时参数。最后启动比较。紧接着驱动轴运动即可。如下图所示,设置高速比较输出口为0,首个比较点的输出状态为1,设置比较轴为0。比较点为50,重复周期为2,周期距离为100,周期时间为40,有效时间为20。即当轴矢量距离运动到50之后,每运动100的距离,就会输出一段设置好的定时脉冲。示波器波形如图所示:由图可得输出口OP(0)在矢量距离50,150时会输出一段设置好的定时脉冲。![企业微信截图_20230310113915.png 企业微信截图_20230310113915.png](http://upload.gongkong.com/Upload/gongkong/baiduEditorImage/202303/10/85a4216e5659494e8f5ac7e1cb9ef538_w_20230310113915.png)
本次,正运动技术运动控制器PSO视觉飞拍与精准输出的C++开发(二):多轴PSO等距/周期输出,就分享到这里。
更多精彩内容请关注“正运动小助手”公众号,需要相关开发环境与例程代码,请咨询正运动技术销售工程师:400-089-8936。本文由正运动技术原创,欢迎大家转载,共同学习,一起提高中国智能制造水平。文章版权归正运动技术所有,如有转载请注明文章来源。