[其他] 运动控制器PSO视觉飞拍与精准输出的C++开发(二):多轴PSO等距/周期输出

[复制链接]
查看81060 | 回复0 | 4 天前 | 显示全部楼层 |阅读模式
点击上方“正运动小助手”,随时关注新动态!


本文主要介绍正运动技术EtherCAT控制器在VS平台采用C++语言实现的各种PSO功能。正运动提供多种PSO模式供用户搭配不同的场景使用。上节讲解了采用TABLE寄存器存储的数据表触发比较,本节主要讲解矢量比较两种模式:等距周期比较输出,固定时间周期比较输出。更多周期比较模式、二维三维比较模式参见下一节说明。

01硬件介绍
ZMC408CE是正运动推出的一款多轴高性能EtherCAT总线运动控制器,具有EtherCAT、EtherNET、RS232、CAN和U盘等通讯接口,ZMC系列运动控制器可应用于各种需要脱机或联机运行的场合。



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位置同步输出功能,在加工圆角与曲线时即使进行有减速调整,在高速加工的场合中也能控制激光输出的等间距输出。

02PSO技术介绍
PSO(position synchronized output)即位置同步输出,本质是通过采集实时的编码器反馈位置(无编码器可使用输出的脉冲位置)与比较模式设定的位置进行比较,控制OP高速同步输出信号,PSO示意图如下。


PSO一般与激光器(或点胶喷射阀等设备)同步输出信号进行相位同步,在运动轨迹的所有阶段以恒定的空间(或恒定时间)间隔触发输出开关,包括加速、减速和匀速段,从而实现脉冲能量均匀地作用在被加工物体上。PSO功能的特点是能高速且稳定的输出信号,因为输出精度足够高,所以能够在整个运动轨迹中以固定的距离触发输出信号而不用考虑总体速度,即在直线部分以很快的速度运动,而在圆角部分减速的同时也能保证输出间距恒定。通常圆角加工部分在整个加工过程中占有比较小的部分,这样在保证加工效果的同时,就可以最大限度地提高产能。


正运动的PSO功能调用ZAux_Direct_HwPswitch2函数接口实现,该函数采用硬件实现IO的高速比较输出,响应速度达到微秒级别,故名硬件比较输出。

03C++语言MFC进行运动控制项目的开发
(一)新建MFC项目并添加函数库

注:本例程在VS2010编译环境下,基于.NET Framework 4.0框架创建的MFC窗体应用程序。

1.工具栏菜单“文件”→“新建”→“项目”,启动创建项目向导。



2.选择开发语言为“Visual C++”和.NET Framework 4以及MFC应用程序,填写好程序名以及选择好程序存放路径,点击确定。


3.点击下一步。


4.选择类型为“基于对话框”,点击下一步或者完成即可。


(二)找到厂家提供的C++函数库文件1.进入厂商提供的光盘资料,找到“8.PC函数”文件夹,并点击进入,找到C++函数库,路径如下(64位库为例)。


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


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


4.根据需要选择对应的函数库,这里选择“64位库”。

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


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


7.将厂商提供的C++库文件以及相关文件复制到新建的项目中。

(三)在项目中添加静态库和相关头文件静态库:zauxdll.lib, zmotion.lib相关头文件:zauxdll2.h, zmotion.h1.先右击头文件,接着依次选择:“添加”→“现有项”。


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


3.声明用到的头文件和定义控制器连接句柄。




至此,项目新建完成。
(四)查看PC函数手册
用户需要从PC函数手册中获取运动控制开发使用的函数接口,对照手册说明使用,PC函数手册在光盘资料查看,具体路径如下:“光盘资料\8.PC函数\函数库2.1\ZMotion函数库编程手册V2.1.pdf”。


(五)控制器网口连接函数接口
PC编程一般使用网口对控制器和工控机进行链接。ZAux_FastOpen();如果链接成功,该接口会返回一个链接句柄。通过操作这个链接句柄可以实现对控制器的控制。ZAux_OpenEth()接口说明:

指令11
ZAux_FastOpen

指令原型

int32  __stdcall  ZAux_FastOpen(int type, char *pconnectstring, uint32 uims ,ZMC_HANDLE * phandle)

指令说明

与控制器建立连接, 可以指定连接的等待时间

输入参数


参数名

描述

type

连接类型

type: 1-COM 2-ETH 4-PCI 5-MotionRT

pconnectstring

连接字符串:

type=1:COM口号

type=2:IP地址

type=4:卡号

type=5:无要求

uims

连接超时时间 uims;单位ms


输出参数


参数名

描述

phandle

控制器连接句柄


返回值

成功返回值为0,非0详见错误码说明

指令示例

1.串口连接:

ZMC_HANDLE  phandle;//控制器连接句柄

Char comID[32]= "0";//串口ID

ZAux_FastOpen(1, comID,1000s ,&phandle);

2.网口连接例子:

ZMC_HANDLE  phandle;//控制器连接句柄

Char EthID[32]= "192.168.0.11";//网口ID

ZAux_FastOpen(1, EthID,1000s ,&phandle);

详细说明

type设置为5,zmotion.dll版本要在3.8.8.50以上
项目应用截图:


(六)硬件比较输出函数接口使用对下位机寄存器操作的指令操作链接句柄“g_handle”,对控制器进行寄存器内容取值,实时控制下位机相关的指令如下。实时全局变量指令:ZAux_Direct_HwPswitch2硬件比较输出指令到位置后硬件自动触发op输出信号。

指令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支持。

输入参数


参数名
描述

handle
连接标识

Axisnum
比较输出的轴号

Mode
模式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
多功能参数

(七)硬件定时器函数接口

ZAux_Direct_HwTimer硬件定时器硬件比较输出后一段时间还原电平。

指令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系列产品支持

输入参数


参数名

描述

handle

连接标识

mode

0停止,2-启动

cyclonetime

周期时间us单位

optime

有效时间us单位

reptime

重复次数

opstate

输出口变为非此状态后开始计时

opnum

必须支持比较输出的口


输出参数

/

返回值

成功返回值为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输出无限脉冲功能。


04MFC程序的运行和读写控制开发
(一)Demo交互界面如下



(二)例程功能介绍

1.矢量比较,周期距离脉冲(模式5)


ZAux_Direct_HwPswitch2(ZMC_HANDLE handle,int Axisnum,int Mode,int Opnum,int Opstate,float ModePara1, float ModePara2,float ModePara3,float ModePara4)(1)handle:控制器连接句柄(2)Axisnum:比较轴号(3)Mode:5-启动比较器(4)Opnum:对应的输出口(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的距离,就会输出设置好的周期位置脉冲。


示波器波形如图所示:由图可得当轴0与轴1在进行300,400的插补运动时,在矢量位置80,180,280,380,480时会输出设置好的周期位置脉冲。

2.矢量比较,周期时间脉冲(模式6)

ZAux_Direct_HwPswitch2(ZMC_HANDLE handle,int Axisnum,int Mode,int Opnum,int Opstate,float ModePara1,float ModePara2,float ModePara3,float ModePara4)(1)handle:控制器连接句柄(2)Axisnum:比较轴号(3)Mode:6-启动比较器(4)Opnum:对应的输出口(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时会输出一段设置好的定时脉冲。


本次,正运动技术运动控制器PSO视觉飞拍与精准输出的C++开发(二):多轴PSO等距/周期输出,就分享到这里。
更多精彩内容请关注“正运动小助手”公众号,需要相关开发环境与例程代码,请咨询正运动技术销售工程师:400-089-8936。本文由正运动技术原创,欢迎大家转载,共同学习,一起提高中国智能制造水平。文章版权归正运动技术所有,如有转载请注明文章来源。

回顾往期内容

运动控制器PSO视觉飞拍与精准输出的C++开发(一):单轴PSO

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接口与功能

开放式激光振镜+运动控制器(六):双振镜运动

开放式激光振镜+运动控制器(五):ZMC408SCAN控制器硬件介绍

开放式激光振镜+运动控制器(四):PSO位置同步输出在激光振镜加工中的应用

开放式激光振镜+运动控制器(三):振镜矫正

开放式激光振镜+运动控制器(二):振镜填充

开放式激光振镜+运动控制器(一):硬件接口

运动控制器PSO位置同步输出(三):高精度等间距二维三维PSO输出

运动控制器PSO位置同步输出(二):PSO模式详解

运动控制器PSO位置同步输出(一):硬件平台与PSO指令简介

经济型EtherCAT运动控制器(十):EtherCAT总线快速入门

经济型EtherCAT运动控制器(九):示波器使用

经济型EtherCAT运动控制器(八):轴参数与运动指令

经济型EtherCAT运动控制器(七):运动缓冲

经济型EtherCAT运动控制器(六):数据储存

经济型EtherCAT运动控制器(五):多任务运行

经济型EtherCAT运动控制器(四):ModbusRTU或ModbusTcp与触摸屏通讯

经济型EtherCAT运动控制器(三):PLC实现多轴直线插补与电子凸轮

经济型EtherCAT运动控制器(二):ZBasic实现多轴直线插补运动

经济型EtherCAT运动控制器(一):功能简介与应用场景

EtherCAT总线运动控制器中简单易用的直线插补

运动控制+机器视觉Demo软件框架(三):视觉纠偏+连续插补的配方编辑

运动控制+机器视觉Demo软件框架(二):移动标定和形状匹配

运动控制+机器视觉Demo软件框架(一):机械参数和配方文件的管理

运动控制+机器视觉Demo软件框架系统概述

EtherCAT轴扩展模块EIO16084在运动控制系统中的应用

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(中):小线段连续轨迹加工、暂停与继续

EtherCAT运动控制卡开发教程之Qt(上):开发环境配置与简单运动控制应用

EtherCAT运动控制卡的自定义运动曲线

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

运动控制卡应用开发教程之激光振镜控制

运动控制卡应用开发教程之硬件比较输出

关于正运动技术

正运动技术专注于运动控制技术研究和通用运动控制软硬件产品的研发,是国家级高新技术企业,主要产品有运动控制器、运动控制卡、视觉运动控制一体机、人机界面以及扩展模块等。正运动技术汇集了来自华为、中兴等公司的优秀人才,在坚持自主创新的同时,积极联合各大高校协同运动控制基础技术的研究,是国内工控领域发展最快的企业之一,也是国内少有、完整掌握运动控制核心技术和实时工控软件平台技术的企业。
正运动技术背靠蓬勃发展的制造业,与时俱进,富有创新,致力于智能制造设备商和终端用户不断提升技术应用和制造水平。经过众多合作伙伴多年的应用开发,产品广泛应用于国内外的3C电子、半导体、印刷包装、纺织服装、激光加工、机械加工、机器人、新能源、医疗保健、舞台娱乐等领域。

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?注册哦

x
您需要登录后才可以回帖 登录 | 注册哦

本版积分规则