步进的光栅尺全闭环EtherCAT运动控制器ZMC432CL-V2(二):RTSys编程调试

2025-02-20ASPCMS社区 - fjmyhfvclm
️本文导读

上节课程给大家介绍了ZMC432CL-V2硬件接口,本节主要讲解如何通过RTSys开发软件调试ZMC432CL-V2的脉冲闭环功能。

️一、ZMC432CL-V2产品简介

ZMC432CL-V2高性能多轴运动控制器是一款兼容EtherCAT总线和脉冲型的独立式运动控制器,具备高速实时反馈功能,支持脉冲全闭环控制,能够实现高精度、高响应速度的运动控制。高精度定位,有效消除机械传动误差,满足高精密加工场景应用要求。

️1.ZMC432CL-V2硬件功能

(1)丰富的运动控制功能:支持直线、圆弧、空间圆弧、螺旋插补等。

(2)硬件接口丰富:支持脉冲轴(带编码器反馈)和EtherCAT总线轴,具备24路输入和12路输出的通用IO,部分为高速IO,2路模拟量输出(DA)。

(3)EtherCAT刷新周期最快达250us,满足高速通信需求。

(4)支持4通道硬件比较输出、硬件定时器、运动中精准输出,适用于多通道视觉飞拍等场合。

(5)支持掉电检测、掉电存储,多种程序加密方式,能够有效防止系统故障,保护项目工程文件数据,并提高系统的可靠性。

(6)通过纯国产IDE开发环境RTSys进行项目开发,可实时仿真、在线跟踪以及诊断与调试,简便易用,支持多种高级上位机语言联合编程进行二次开发。

️二、RTSys调试ZMC432CL-V2的脉冲闭环功能

️1.新建RTSys的项目文件

点击【文件】→【新建工程】→【输入文件名】→【保存】。

️2.新建RTBasic文件和RTHmi文件

点击【新建】→【选择Basic/Hmi】→【确定】,完成Basic和Hmi文件的创建,其中Basic文件用于运动逻辑的编写,Hmi文件用于人机交互界面的设计。

右击【工程视图】下的HMI文件名称,在弹出的选项框中选择【设置任务号】,并将其设置为0,表示控制器启动后将一任务0去执行Hmi文件程序。

️3.在BasicMain.bas文件里面编写系统初始化函数和周期扫描函数

'/****************************************************************************

'任务编号:无

'函数功能:系统初始化

'Input:无

'Output:无

'返回值:无

'备注:无

'******************************************************************************/

GLOBAL SUB SysInit()

'测试固件信息

?"测试固件信息:ver 24.8.28 : "version_build, "SERVO_PERIOD: "SERVO_PERIOD

'轴分配

GLOBAL CONST TestAxisId=0

'线程分配

GLOBAL CONST IntCycleTask=1

GLOBAL CONST OtherTask=2

'其他变量

GLOBAL gvCLStstus,gv_HandMode

GLOBAL gv_P,gv_I,gv_D

GLOBAL gv_VF,gv_AF,gv_OV

'轴初始化参数

GLOBAL gv_Speed,gv_Accel,gv_Decel

GLOBAL gv_Sramp,gv_Inch

GLOBAL gv_Units

GLOBAL gv_mpos,gv_input

GLOBAL VpMode

'*********************轴参数初始化*********************

gv_Units=2000

gv_mpos =4000

gv_input=-20043

gvCLStstus=0

gv_Speed=2

gv_Accel=100

gv_Decel=100

gv_Sramp=0

gv_Inch=1

gv_HandMode=0

VpMode=0

'**********************系统初始化**********************

RAPIDSTOP(2) '停止所有轴

WAIT IDLE

DELAY(100)

DATUM(0) '清除轴报警

WAIT IDLE

'**********************轴参数初始化*********************

BASE(TestAxisId)

'关闭闭环功能

SERVO=OFF

ENCODER_SERVO=OFF

'关闭闭环功能后要远程ATYPE从0到4的切换

ATYPE = 0

DELAY(100)

ATYPE = 4

'轴坐标清零

DPOS=0

MPOS=0

'更新轴参数

UpDataAxisPara()

'更新PID参数

UpDatePid(0)

ENDSUB

'/*****************************************************************************

'任务编号:无

'函数功能:Hmi扫描函数

'Input:无

'Output:无

'返回值:无

'备注:无

'******************************************************************************/

GLOBAL SUB SysScan()

'更新闭环状态

IF SERVO(TestAxisId) = ON AND ENCODER_SERVO(TestAxisId)=ON THEN

gvCLStstus=1

ELSE

gvCLStstus=0

ENDIF

ENDSUB

️4.组态人机界面Hmi文件的编辑

先点击【工程视图】里面的Hmi.hmi文件,在弹出来的【属性】窗口里面输入【初始化函数】和【周期函数】的函数名。

Hmi.hmi文件运行后会先执行一次【初始化函数】一般完成系统的初始化操作,【初始化函数】运行完后Hmi.hmi文件会周期性的执行【周期函数】和周期性的扫描Hmi界面上的按钮等控件的操作情况。

点击【控件箱】,可把控件箱里面的【控件】拖拽到Hmi窗口上进行人机界面的设计。

️5.Hmi人机界面的按钮如何调用Bas文件里面的函数

(1)点击【全闭环开关】按钮实现脉冲全闭环功能的开启与关闭。

先在BasicMain.bas文件中新建函数来完成全闭环功能开关的逻辑程序。

'/*************************************************************************

'任务编号:无

'函数功能:全闭环功能切换

'Input:Mode: 0 开关闭环功能 1:更新闭环Pid参数

'Output:无

'返回值:无

'备注:无

'**************************************************************************/

GLOBAL SUB ClosedLoop(Mode)

IF Mode=0 THEN

IF gvCLStstus= 0 THEN

'配置脉冲轴TestAxisId为全闭环的功能

'配置PID参数

BASE(TestAxisId)

P_Gain = gv_P 'P:比例增益

I_GAIN = gv_I 'I:积分增益

D_GAIN = gv_D 'D:微分增益

VFF_GAIN = gv_VF '速度反馈的前馈增益

AFF_GAIN = gv_AF '加速度反馈的前馈增益

OV_GAIN = gv_OV '速度增益

'打开闭环功能

AXIS_ENABLE = ON '单轴使能打开情况下,全闭环才有效果

ENCODER_SERVO = ON '0-不开启(缺省). 1-开启闭环功能

'重要,打开servo之前打开encoder_servo后

'要完成一次atype由0变为4的切换,否则会报axis:0 config not support Servo.

'无法打开闭环控制,原因未知

ATYPE = 0

DELAY(20)

ATYPE = 4 '脉冲输出+正交编码反馈

SERVO = ON '0-不开启(缺省). 1-开启闭环功能

DELAY(20)

IF SERVO = ON THEN

?"闭环参数配置完成,闭环控制已打开"

ELSE

?"闭环参数配置完成,闭环控制打开失败,请检查轴配置。"

ENDIF

ELSE

BASE(TestAxisId)

SERVO = OFF

ENCODER_SERVO = OFF

'关闭ENCODER_SERVO后需要完成一次 ATYPE从0到4的切换,保证闭环功能完全关闭

ATYPE = 0

DELAY(100)

ATYPE = 4

?"已关闭闭环控制开关(switch),使用开环移动"

ENDIF

ELSEIF gvCLStstus=1 THEN

'配置脉冲轴TestAxisId为全闭环的功能

BASE(TestAxisId)

P_Gain = gv_P 'P:比例增益

I_GAIN = gv_I 'I:积分增益

D_GAIN = gv_D 'D:微分增益

VFF_GAIN = gv_VF '速度反馈的前馈增益

AFF_GAIN = gv_AF '加速度反馈的前馈增益

OV_GAIN = gv_OV '速度增益

?"PID参数已更新 "

ENDIF

ENDSUB

点击【全闭环开关】按钮控件,在属性界面的【点击调用函数栏】输入要调用的函数名即可,并且同时进行函数形参的传递。

(2)手动按钮功能的实现。

先在BasicMain.bas文件中新建函数来完成手动按钮的逻辑程序。

'/********************************************************************

'任务编号:无

'函数功能:寸动运动与测试

'Input:Mode:1表示寸动运动,0表示手动运动

'Input:Dir:运动方向 1正向运动 -1负向运动 0停止运动

'Output:无

'返回值:无

'备注:无

'*********************************************************************/

GLOBAL SUB InchAndSub(Mode,Dir)

BASE(TestAxisId)

SPEED = gv_Speed

ACCEL = gv_Accel

DECEL = gv_DEcel

SRAMP = gv_Sramp

IF Mode=1 THEN

'寸动运动

MOVE(gv_Inch*Dir) AXIS(TestAxisId)

?"寸动运动"

ELSE

IF Dir=1 THEN

'手动运动 正方向

MOVEABS(FS_LIMIT(TestAxisId))

ELSEIF Dir=-1 THEN

'手动运动 负方向

MOVEABS(RS_LIMIT(TestAxisId))

ELSE

'手动运动按钮松开的时候停止轴运动

CANCEL(2)

ENDIF

ENDIF

ENDSUB

点击【手动按钮】相关控件,在属性界面点击【动作栏】选择按下和松开的调用函数,在【动作函数名】和【松开调用函数】栏分别输入按钮按下和松开想要调用的函数,并输入对应函数的形参(函数形参可以是立即数也可以是全局变量或者寄存器)。

️6.下载程序测试代码逻辑

点击【连接】通过网口IP连接上控制器后,点击【下载到RAM】(程序掉电不保存)或者【下载到ROM】(程序掉电保存)即可完成程序的下载。

点击【工具】→【插件】→【Xplc Screen】即可在电脑上显示人机界面,进行相关功能的测试。

️三、通过RTSys示波器对比开环控制和全闭环控制的情况

示波器的使用可以参考正运动小助手的历史推文《运动控制看的更清楚细致!RTSys示波器功能简介》。

️1.开环控制情况分析

测试发现步进驱动器的开环控制,运动过程中随动误差(规划位置和光栅尺反馈位置的差值)一直维持在0.02个用户单位左右(这里一个用户单位即一个UNITS设置的是1mm)。

当运动结束时光栅尺的反馈位置和指令规划位置也不相等,大概差了0.0025个用户单位,折算为脉冲数是0.0025*用户单位=5个脉冲。

️2.闭环控制情况分析

测试发现步进驱动器的闭环控制,运动过程中随动误差(规划位置和光栅尺反馈位置的差值)除了启动和停止以外大部分保持在0个脉冲当量左右。

相比较开环控制有较大的提升,当运动结束时光栅尺的反馈位置和指令规划位置也是相等的。

️四、总结

️1.启用控制器闭环的时候要注意:在打开ENCODER_SERVO后,打开servo之前要完成一次ATYPE从0到4的切换,这样才可以正常打开控制器闭环的功能。

️2.启用控制器闭环同时还需要:打开单轴使能axis_enable,这样才能保证控制器闭环的正常启用。

'打开闭环功能

BASE(TestAxisId)

AXIS_ENABLE = ON '单轴使能打开情况下,全闭环才有效果

ENCODER_SERVO = ON '0-不开启(缺省). 1-开启闭环功能

'重要,打开servo之前打开encoder_servo后

'要完成一次atype由0变为4的切换,否则会报axis:0 config not support Servo.

ATYPE = 0

DELAY(20)

ATYPE=4 '脉冲输出+正交编码反馈

SERVO = ON '0-不开启(缺省). 1-开启闭环功能

DELAY (20)

IF SERVO = ON THEN

?“闭环参数配置完成,闭环控制已打开,使用move指令移动,并在示波器中监测运动参数。"

ELSE

?“闭环参数配置完成,闭环控制打开失败,请检查轴配置。"

ENDIF

️3.为保证控制器闭环功能的完全关闭:在关闭ENCODER_SERVO后需要完成一次ATYPE从0到4的切换,这样才能保证控制器闭环功能完全关闭。

BASE(TestAxisId)

SERVO = OFF

ENCODER_SERVO =OFF

'关闭ENCODER_SERV0后需要完成一次ATYPE从0到4的切换,保证闭环功能完全关闭

ATYPE =0

DELAY(100)

ATYPE =4

?“已关闭闭环控制开关(switch),使用开环移动"

️完整代码获取地址

本次,正运动技术步进的光栅尺全闭环EtherCAT运动控制器ZMC432CL-V2(二):RTSys编程调试,就分享到这里。

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

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

全部评论