本文主要介绍正运动技术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的高速比较输出,响应速度达到微秒级别,故名硬件比较输出。
03MFC项目的开发
(一)新建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
|
|
输出参数
|
|
返回值
|
成功返回值为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
| 模式1-启动比较器
ModePara1 = 第一个比较点坐标所在TABLE编号
ModePara2 = 最后一个比较点坐标所在TABLE编号
ModePara3= 第一个点判断方向 0-坐标负向 1- 坐标正向 -1- 不使用方向
ModePara4 = 预留
模式2-停止并删除没完成的比较点
ModePara1 = 预留
ModePara2 = 预留
ModePara3= 预留
ModePara4 = 预留
模式3-矢量比较方式
ModePara1 = 第一个比较点坐标所在TABLE编号
ModePara2 = 最后一个比较点坐标所在TABLE编号
ModePara3= 预留
ModePara4 = 预留
模式4-矢量比较方式单个比较点
ModePara1 = 比较点坐标
ModePara2 = 预留
ModePara3= 预留
ModePara4 = 预留
模式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交互界面
Demo主要分为三个部分:
1.链接控制器,支持网口连接和串口连接。2.配置基本轴参数。3.配置硬件比较输出,可选多种模式测试,部分模式需要先配置TABLE的比较点数据才能启动。
(二)常用模式例程功能与效果
1.单轴比较(模式1)
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:1-启动比较器;(4)Opnum:对应的输出口;(5)Opstate:第一个比较点的输出状态;(6)ModePara1:第一个比较点绝对坐标所在TABLE寄存器编号;(7)ModePara2:最后一个比较点绝对坐标所在TABLE寄存器编号;(8)ModePara3:第一个点判断方向,0坐标负向,1坐标正向,-1不使用方向;(9)ModePara4:模式1里面,该参数无意义,填0或其他任意值。模式1主要功能为:在TABLE寄存器里面设置好比较点,碰到设置好的单轴比较点之后,输出口电平反转。
该模式使用时需要指定高速输出口,将首个比较点的输出状态、比较轴设置好之后,再设置比较点(即设置table寄存器,点数量等),最后设置比较点的运动方向,启动比较。紧接着驱动轴运动即可。
如下图所示,设置高速比较输出口0,首个比较点的输出状态为1,设置比较轴为0。设置4个比较点,比较点坐标分别为:100,200,300,400。即当轴运动到100,200,300,400时,都会触发电平变化。
示波器波形如图所示:由图可得输出口OP(0)在100,200,300,400时会发生电平变化。
2.清除比较点(模式2)
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:2-清除比较缓冲区;(4)Opnum:对应的输出口;(5)Opstate:模式2里面,该参数无意义,填0;(6)ModePara1:模式2里面,该参数无意义,填0;(7)ModePara2:模式2里面,该参数无意义,填0;(8)ModePara3:模式2里面,该参数无意义,填0;(9)ModePara4:模式2里面,该参数无意义,填0。使用前需要调用此模式,清除可能没有比较完成的数据。使用过程中也可以发送此命令,停止比较。3.矢量比较方式(模式3)
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:3-启动比较器;(4)Opnum:对应的输出口;(5)Opstate:第一个比较点的输出状态;(6)ModePara1:第一个矢量距离比较点绝对坐标所在TABLE寄存器编号;(7)ModePara2:最后一个矢量距离比较点绝对坐标所在TABLE寄存器编号;(8)ModePara3:模式3里面,该参数无意义,填0或其他任意值;(9)ModePara4:模式3里面,该参数无意义,填0或其他任意值。模式3主要功能为:在TABLE寄存器里面设置好比较点,碰到设置单轴矢量距离比较点之后,输出口电平反转。该模式使用时需要指定高速输出口,将首个比较点的输出状态、比较轴设置好之后,再设置比较点(即设置TABLE寄存器,点数量等),启动比较。紧接着驱动轴运动即可。如下图所示,设置高速比较输出口0,首个比较点的输出状态为1,设置比较轴为0。设置4个比较点,比较点坐标分别为:100,200,300,400。即当轴矢量距离运动到100,200,300,400时,都会触发电平变化。
示波器波形如图所示:由图可得输出口OP(0)在100,200,300,400时会发生电平变化。
本次,正运动技术运动控制器PSO视觉飞拍与精准输出的C++开发(一):单轴PSO,就分享到这里。
更多精彩内容请关注“正运动小助手”公众号,需要相关开发环境与例程代码,请咨询正运动技术销售工程师:400-089-8936。本文由正运动技术原创,欢迎大家转载,共同学习,一起提高中国智能制造水平。文章版权归正运动技术所有,如有转载请注明文章来源。
关于正运动技术
正运动技术专注于运动控制技术研究和通用运动控制软硬件产品的研发,是国家级高新技术企业,主要产品有运动控制器、运动控制卡、视觉运动控制一体机、人机界面以及扩展模块等。正运动技术汇集了来自华为、中兴等公司的优秀人才,在坚持自主创新的同时,积极联合各大高校协同运动控制基础技术的研究,是国内工控领域发展最快的企业之一,也是国内少有、完整掌握运动控制核心技术和实时工控软件平台技术的企业。
正运动技术背靠蓬勃发展的制造业,与时俱进,富有创新,致力于智能制造设备商和终端用户不断提升技术应用和制造水平。经过众多合作伙伴多年的应用开发,产品广泛应用于国内外的3C电子、半导体、印刷包装、纺织服装、激光加工、机械加工、机器人、新能源、医疗保健、舞台娱乐等领域。
|