1 介绍
1.1 概述
本文档主要介绍如何使用LkinCtrl功能库的LKinCtrl_MC_MovePath功能块快速实现S7-1500T CPU运动学的多路径插补功能。
使用S7-1500T CPU的运动系统功能可以实现路径插补功能。S7-1500T CPU 提供了如下基本插补指令:
- MC_MoveLinearAbsolute: 绝对直线插补指令
- MC_MoveLinearRelative: 相对直线插补指令
- MC_MoveCircularAbsolute:绝对圆弧插补指令
- MC_MoveCircularRelative: 相对圆弧插补指令 通常一个复杂的路径需要拆解成一个个直线或圆弧段。对应的,在程序中需要多次调用上述指令才能完成整个路径。使得程序编写起来非常繁琐。针对这种情况,西门子提供了LkinCtrl功能库来快速的完成路径插补的编程工作。仅需在程序中调用LKinCtrl_MC_MovePath功能块,并在DB块中设置路径的相关参数即可。 本文以图1-1所示路径作为示例,介绍如何使用LKinCtrl_MC_MovePath功能块快速实现该路径的插补运动控制。
图1-1 路径示例
注意:学习本文档的前提条件是用户已掌握运动学功能单个插补指令的使用。
1.2 测试环境
本文档基于以下 硬件及软件环境:
表1-1: 硬件列表
产品 | 订货号 | 固件版本 |
---|---|---|
PM 70 W 120/230VAC | 6EP1332-4BA00 | |
CPU 1517T-3 PN/DP | 6ES7 517-3TP00-0AB0 | V2.8.2 |
SIMATIC Memory Card 24 MB | 6ES7954-8LF03-0AA0 |
表1-2: 软件列表
名称 | 版本 | 备注 |
---|---|---|
STEP 7 Professional | V16 Update 3 | |
LKinCtrl library | 3.0.3 |
可以从如下地址下载LKinCtrl library功能库及说明文档:
https://support.industry.siemens.com/cs/cn/en/view/109755891
2 功能说明
2.1 MC_MovePath功能简介
图2-1 MC_MovePaht指令
MC_MovePath提供了以指令列表的形式合成多个单独的路径运动的功能,可以实现以下功能:
• 启动 / 继续 执行路径运动
• 停止 / 中断路径运动
• 复位功能块错误(非工艺对象错误)
• 选择操作模式(自动/ 单步模式)
• 通过标志控制执行机构(例如:控制吸盘电磁阀)
2.2 MC_MovePath主要管脚说明
【execute】: 输入,Bool类型
开始执行任务,上升沿有效
【stop】: 输入,Bool类型
触发时内部调用MC_GroupStop指令,取消所有路径运动并删除作业序列MotionQueue中的所有指令
【interrupt】: 输入,Bool类型
中断路径运动,触发时内部调用MC_GroupInterrupt,运动作
业被中断,可以通过重新触发execute管脚继续完成路径作业。
【reset】: 输入,Bool类型
复位FB程序块报错。注意该管脚并不复位工艺对象自身的报错。
【sequenceMode】:输入,Int类型
sequenceMode=0 : 自动模式,当excute上升沿触发FB开始执行时,完成定义的所有路径。
sequenceMode=1 : 单步模式, excute每触发一次,仅执行路径表中定义的一条路径命令,该模式下指令之间混合运动功能无效。
【pathTransition】:输入,DInt类型
当pathTransition = 1时,按照MC_MovePath的输入参数【bufferMode】和【transitionParameter】定义的过渡跳转模式和参数跳转到第二段路径。
当pathTransition = 0时,按照第二段MovePath路径中第一条路径指令定义的跳转模式和参数进行跳转。
【bufferMode】:输入,DInt类型
定义与后继新路径的跳转模式,当pathTransition=1时该参数有效。跳转模式说明参照插补指令MC_MoveLinearAbsolute或MC_MoveCircularAbsolute 中的BufferMode参数介绍。
【transitionParameter】:输入,Array[1..5] of LReal类型
定义与后继新路径的跳转参数,当pathTransition=1时该参数有效。跳转参数说明参照插补指令MC_MoveLinearAbsolute或MC_MoveCircularAbsolute 中的TransitionParameter参数介绍。
【configuration】:输入,“ LKinCtrl_typeConfiguration“类型
参数配置输入接口,包括三部分内容:
变量名 | 类型 | 说明 |
---|---|---|
offsetParameter | Array[1.."LKINCTRL_NO_OF_OFFSETS"] of "LKinCtrl_typeContourOffsetParameter" | 轮廓偏移功能投入时有效,详细介绍参见Library Kinematics Control 文档 |
conveyorConfiguration | Array[1.."LKINCTRL_NO_ OF_CONVEYOR"] of"LKinCtrl_typeConveyorConfiguration" | 传送带跟踪功能投入时有效,详细介绍参见Library Kinematics Control 文档 |
stopMode | DInt | 停止模式选择详细介绍参见Library Kinematics Control 文档 |
【done】:输出,Bool类型
指令已成功执行完成
【busy】:输出,Bool类型
指令正在执行
【error】:输出,Bool类型
FB执行过程中出现错误
【status】:输出,Bool类型
FB执行的状态输出
【diagnostics】:输出,"LKinCtrl_typeMovePathDiagnostics"类型
FB诊断状态,具体报错信息参见Library Kinematics Control 文档
【readyForNextPath】:输出,Bool类型
当readyForNextPath=ture时表示已具备执行下一条路径的条件。可以判断该位来及时启动一下一条路径。
注意:
为了实现在两段MovePath路径之间进行混合运动跳转,需要在第一段MovePath指令执行完成之前就触发第二段的MovePath指令。
【axesGroup】:输入/输出,TO_Kinematics类型
用于指定要操作的运动学工艺对象
【pathData】:输入/输出,Variant类型
用于定义路径的相关数据,参见下文pathData详细说明。
【flags】: 输入/输出,Array[0.."LKINCTRL_NO_OF_LAST_SETFLAG"] of
Bool类型
与在路径指令中定义DB的setFlags,参见下文Flags功能说明
【valueFlags】:输入/输出,Array[0.."LKINCTRL_NO_OF_LAST_VALUEFLAG"]
of LReal
在路径指令中定义DB的valueFlags,参见下文Flags功能说明
2.3 PathData数据结构说明
MovePath要执行的路径信息是通过管脚pathData连接的DB来定义的。对于路径的数据结构定义有三种形式PathData_reduced、PathData、PathData_advanced。下面对三种数据结构进行说明。
- PathData_reduced 数据类型名称:LKinCtrl_typePathData_reduced 如图2-2所示,PathData_reduced通常用于小规模的路径定义,仅支持直线插补指令,插补路径的最大条数可以通过用户常量“LKINCTRL_NO_OF_PATHDATA_ELEMENTS _REDUCED”修改。
图2-2 PathData_reduced应用场景
- PathData 数据类型名称:LKinCtrl_typePathData 如图2-3所示,PathData通常用于中等规模的路径定义,支持所有插补指令,插补路径的最大条数可以通过用户常量“LKINCTRL_NO_OF_PATHDATA_ELEMENTS”进行修改。
图2-3 PathData应用场景
- PathData_advanced 数据类型名称:LKinCtrl_typePathData_advanced 如图2-4所示,PathData通常用于中等规模的路径定义,支持所有插补指令,插补路径的最大条数可以通过用户常量 “LKINCTRL_NO_OF_ PATHDATA_ELEMENTS_ADVANCED”进行 修改。
图2-4 PathData_advanced应用场景 在本示例中,由于图1-1所示路径包含了直线插补和圆弧插补两种插补指令,故选择PathData形式作为路径信息的数据类型。下面以PathData为例,对路径信息的填写方式进行详细说明。
图2-5 PathData数据结构 如图2-5所示, PathData在DB块中定义的数据类型为KinCtrl_typePathData,包含以下两个元素:
- pathDataName :String类型,用于定义本段路径的名称
- commands : LKinCtrl_typePathDataElement类型的数组,使用用户常量“LKINCTRL_NO_OF_PATHDATA_ELEMENTS”来定义数组中插补指令的最大数量。 组成整个路径的每个插补指令是通过commands中的数组元素进行设定的。对于每个数组元素都是“LKINCTRL_NO_OF_PATHDATA_ELEMENTS”类型,实现了对单个插补指令相关信息的设定。
图2-6 PathData中插补指令的设置 如图2-6所示,对一条指令包含以下设置内容:
- cmdType:int类型,支持的功能代码如下所示: 1: MoveLinAbs; 2: MoveLinRel; 3: MoveCircAbs; 4: MoveCircRel; 5: MoveDirectAbs; 6: MoveDirectRel; 10: TrackConveyorBelt; 100: WaitTime; 40/41/42: ContourOffset; 0: FlagOnlyCmd; -1: End of List 使用值-1表示该指令为本路径的最后一条指令,数组中该指令之后的指令不再进入执行队列。
- cmdActivated:bool类型,使用该位控制本条指令是否激活,默认值为true,当设置为false时,跳过该指令不执行。
- cmdName: String类型,可以为该指令定义一个名字,例如使用“MoveUp”标注该指令为上升动作。
- cmdCoordinates:包含以下两个元素
图2-7 cmdCoordinates元素
- cartesianPosition定义了笛卡尔坐标的位置值,对不同的指令有不同的含义。
- 当cmdType=1时,对应MC_MoveLinearAbsolute指令的Position输入管脚,表示绝对目标坐标值
- 当cmdType=2时,对应MC_MoveLinearRelative指令的Distance输入管脚,表示相对目标坐标值
- 当cmdType=3时,对应MC_MoveCircularAbsolute指令的EndPoint输入管脚,当CircMode=2时需要填写。
- 当cmdType=4时,对应MC_MoveCircularRelative指令的EndPoint输入管脚,当CircMode=2时需要填写。
- 当cmdType=5时,对应MC_MoveDirectAbsolute指令的Position输入管脚,表示绝对目标坐标值
- 当cmdType=6时,对应MC_MoveDirectRelative指令的Distance输入管脚,表示相对目标坐标值
2. coordSystem用于指定坐标系,与插补指令的输入管脚CoordSystem对应。
5. cmdParameters:用于定义插补指令的相关参数,包含以下几个方面:
- pathDynamics:动态特性定义,对应插补指令的Velocity,Acceleration, Deceleration, Jerk参数
图2-8 pathDynamics参数 注意:当cmdType = 100时,velocity值表示以ms为单位的等待时间。
- orientationDirection:定义笛卡尔坐标的运动方向 ,cmdType = 1,3,5时有效,与插补指令的DirectionA对应。
- bufferMode:过渡模式设置,与插补指令的输入管脚BufferMode对应。
- transitionParameters:过渡参数设置,与插补指令的输入管脚TransitionParameter对应。
- dynamicAdaption: 动态调整模式设定,与插补指令的DynamicAdaption参数对应。
- moveDirectParameters:cmdType = 5或6有效,MC_MoveDirectAbsolute和MC_MoveDirectRelative相关参数设定
- offsetParameters:cmdType = 40,41或42时有效,与MC_MovePath的输入管脚configuration共同完成轮廓偏移和半径补偿功能的相关参数设置。
- conveyorParameters:cmdType = 10时有效,与MC_MovePath的输入管脚configuration共同完成输传送带跟踪相关参数设置。
- circleParameters:cmdType = 3或4时有效,圆弧插补指令参数设置,参数含义参见圆弧插补指令说明。
图2-9 circleParameters参数
6. setFlags: Flag标志功能相关参数的设置,如图2-10所示,PathData的参数setFlags[1]中的flag设置为3时,MovePath的管脚flags数组元素的flags[3]作为本条命令的flag输出。当本条指令按照设定的flagMode模式满足置位条件后使flags[3]=true,可以使用该标志位来控制执行机构,比如可以控制吸盘电磁阀导通。
图2-10 flag对应关系
7. valueFlags: Flag标志功能相关参数的设置,如图2-11所示,PathData的参数valueFlags[1]中的flag设置为3时,MovePath的管脚valueFlags数组元素的valueFlags[3]作为本条命令的标志输出,与setFlags不同valueFlags输出的是LReal类型的数值来控制执行机构。
图2-11 valueFlags对应关系
3 示例项目
3.1 项目建立及功能库导入
步骤1:新建项目【LKinCtrl_Getting_Started】,并插入CPU 1517T-3PN/DP
步骤2:
l 打开以下链接
https://support.industry.siemens.com/cs/cn/en/view/109755891
l 下载库文件并解压缩
【Library V3.0.3 for STEP 7 V16 】
l 在TIA右侧的全局库空白处点击鼠标右键选择【打开库】
步骤3:
l 鼠标左键按住功能库中【LKinCtrl_Blocks】文件夹不放,拖拽到项目的【程序块】文件夹下
l 鼠标左键按住功能库中【LKinCtrl_Tags】文件夹不放,拖拽到项目的【PLC变量】文件夹下
l 鼠标左键按住功能库中【LKinCtrl_Types】文件夹不放,拖拽到项目的【PLC数据类型】文件夹下
步骤4:
如图所示:
l 建立4个定位轴工艺对象,并设置为虚轴。
l 建立1个运动学工艺对象【Rollpicker】
步骤5:
修改PositioningAxis_1, PositioningAxis_2, PositioningAxis_4为旋转轴。
步骤6:
如右图所示,更改运动机构为【滚动拾取器3D (带定位功能,立式)】
步骤7:
如右图所示,在工艺对象【互连】中设置对应的运动机构轴
步骤8:
如右图所示,在工艺对象【几何结构】中设置【变换参数】
步骤9:
如右图所示,在工艺对象【几何结构】中设置【在运动机构中的表示】
步骤10:
如右图所示,在工艺对象【动力学】修改速度预设值为50.0 mm/s
3.2 编程
3.2.1 单轴程序处理
使用库中的功能块【LKinCtrl_MC_GroupPower】、【LKinCtrl_MC_GroupHome】、【LKinCtrl_MC_GroupReset】可以快速的实现对运动机构涉及到的单轴进行使能、回原点以及复位操作。该步骤非必需操作,用户也可以使用自己编写的单轴处理功能块。
步骤1:
建立DB命名为【Controls】如右图建立相关变量。
注意【StartMode】中变量的起始值设置为1
步骤2:
在左侧项目树的【程序块】文件夹下,按如下目录找到【LKinCtrl_Blocks】->【LKinCtrl_AuxBlocks】->【LKinCtrl_MC_GroupPower】,将其拖拽到OB1组织块中,并如右图所示填写管脚
步骤3:
在左侧项目树的【程序块】文件夹下,按如下目录找到【LKinCtrl_Blocks】->【LKinCtrl_AuxBlocks】->【LKinCtrl_MC_GroupHome】,将其拖拽到OB1组织块中,并如右图所示填写管脚
步骤4:
在左侧项目树的【程序块】文件夹下,按如下目录找到【LKinCtrl_Blocks】->【LKinCtrl_AuxBlocks】->【LKinCtrl_MC_GroupReset】,将其拖拽到OB1组织块中,并如右图所示填写管脚
3.2.2 路径插补程序编写
按右图所示路径信息,建立所需的路径数据的DB块
步骤1:
l 新建数据块,命名为【PathData】
l 按照右图所示,填写第1条路径指令
该指令表示使用绝对直线插补指令,从原点移动到路径第一个坐标P1(200,200,50)的正上方
步骤2:
按照右图所示,填写第2条路径指令,该指令表示使用绝对直线插补指令,下降移动到第一个坐标P1(200,200,50)
步骤3:
按照右图所示,填写第3条路径指令,该指令表示使用绝对直线插补指令从P1点移动到P2点(400,200,50)
步骤4:
按照右图所示,填写第4条路径指令完成以下任务:
l 等待5000 ms
l 使用flag功能11,在等待时间到后将flags[0]置位。
可以使用该flag位控制电磁阀给定,比如可以控制电磁阀抓取物料。
步骤5:
按照右图所示,填写第5条路径指令,该指令表示使用绝对圆弧插补指令从P2点移动到P3点(400,100,50)
步骤6:
按照右图所示,填写第6条路径指令,该指令表示使用绝对直线插补指令从P3点移动到P4点(200,100,50)
步骤7:
按照右图所示,填写第7条路径指令,该指令表示使用绝对直线插补指令从P4点移动到P1点
步骤8:
按照右图所示,在之前的数据块【Controls】新建三个变量用于flag存储及_MC_MovePath的配置管脚输入。
步骤9:
在左侧项目树的【程序块】文件夹下,按如下目录找到【LKinCtrl_Blocks】->【LKinCtrl_MC_MovePath】,拖拽到OB1中调用,并如右图所示填写管脚。
步骤10:
为了便于使用PLCSIM Advanced软件进行仿真需要对项目进行设置。
在左侧项目树 选中最上级的项目名称,点击鼠标右键选择【属性】,在【保护】选项卡点击【块编译时支持仿真】
3.2.3 使用运动机构轨迹测量记录运动过程
步骤1:
双击 工艺对象Rollpicker下面的【运动机构轨迹】。
步骤2:
在【组态】选项卡修改记录方式为【工具零点(TCP)】
步骤3:
在OB1中使能轴。
步骤4:
在OB1中完成轴的回原点操作。
步骤5:
在【3D可视化】选项卡点击【监控打开】, 点击【开始记录】
步骤6:
在OB1中启动路径。
步骤7:
路径执行完毕后在【3D可视化】出现右侧的路径轨迹。