技术论坛

 【征文】DB_ANY在运动控制结构化批处理编程中的应用

返回主题列表
作者 主题
刚刚入门
至圣

经验值: 12687
发帖数: 2083
精华帖: 23
楼主    2019-07-25 14:09:42
主题:【征文】DB_ANY在运动控制结构化批处理编程中的应用 精华帖 

一、运动控制结构化批处理编程的需求

目前大家用西门子博途控制器+V90PN做项目越来越多,如果走工艺对象的话就必须采用PLC-OPEN运控指令编程,程序里轴数量较多的话会每根轴重复调用MC_Power、MC_Absolute等指令,同时产生大量的背景数据块。我们大家都熟悉西门子的结构化批量编程套路:建一个标准FB,然后通过SCL语言的FOR循环Array of FB进行多重背景的数组调用,这样100个对象FB块的调用一个FOR 循环语句就完事了。那么这个套路能否用在运动控制编程中的,实际上焦点就是TO_PositioningAxis(包括TO_CommandTable)这个数据类型作为参数时支不支持多重实例的Array,实际是不支持的。如图1所示。但不要紧,可以用DB_ANY这个数据类型来转换,从S7-1200 V4.2开始,DB_ANY可以在运动控制中使用,它可以使用在形参为TO_PositioningAxis和TO_CommandTable类型的实参处,包括以下几种:

(1) 当FC/FB的输入形参数据类型为TO_PositioningAxis时,外部实参可以使用DB_ANY数据类型的变量。
(2) 在MC_MoveAbsolute/MC_MoveRelative指令的参数Axis处,实参可使用DB_ANY数据类型的变量。
(3) 当FC/FB的输入形参数据类型为TO_CommandTable时,外部实参可使用DB_ANY数据类型的变量。
(4) 在MC_CommandTable指令的参数CommandTable处,实参可直接使用DB_ANY数据类型的变量。

图2显示了支持多重实例的DB_ANY。

图1:定位轴数据类型不支持多重实例

图2:支持多重实例的DB_ANY

二、运动控制程序使用DB_ANY的调用结构

大家注意看上面第(2)条,只有绝对运动和相对运动指令的参数Axis处,实参才可以直接使用DB_ANY数据类型。其他的指令比如使能(MC_Power)、点动(MC_MoveJog)等的参数Axis处如果实参直接填DB_ANY,CPU会报错,如图3和4所示,原因是MC_Power/MC_Reset/MC_Home指令的参数Axis,类型为TO_Axis。而MC_Halt/MC_MoveVelocity/MC_MoveJog/MC_ChangeDynaic指令的参数Axis,类型为TO_SpeedAxis。    

图3:如果MC_POWER指令使用DB_ANY实参

图4:下载到CPU后报错

解决方法:这时我们增加一个FC进行转换,MC_Power等指令在这个FC里进行调用(使用参数实例),这个转换FC再使用DB_ANY作为接口参数被上级FB调用。这样绕开了MC_Power等指令无法直接使用DB_ANY类型的矛盾,程序调用结构如图5所示。为了方便,我们实际在程序中把几个转换FC合并在一起用一个FC实现。

图5:程序的调用结构

三、具体实例化实现过程

下面以笔者手上的两台伺服松下A6和西门子V90PN来进行具体实践,松下A6采用PTO脉冲控制,V90PN采用PROFINET通信控制。

(1)对两台伺服建立TO_PoistioningAxis轴工艺对象进行控制,如图6所示。

图6:建立2个伺服定位轴工艺对象

(2)建立数据块,包括DB_ANY数组和实参用的数据变量,如图7所示。实参数组长度是8,可以处理8根轴,但实际只用了2根轴,所以DB_ANY数组长度是2。为了方便,将各运动指令的参数都设置成PLC数据类型,这样DB块里引用会很快捷。

图7:运动控制参数数据块

(3)在启动OB里(OB100)将实际工艺对象DB赋值给DB_ANY,如图8所示。

图8:赋值DB_ANY

(4)建立转换FC程序,在里面调用MC_Power等指令。

我们把实际应用中常用的MC_Power、MC_Reset、MC_ReadParam(读实际距离、速度)等指令都放进去,注意在该FC中调用上述运动控制指令FB时选择“参数实例”,如图9所示。

图9:对MC_Power等FB的调用

同时在FC接口处定义相关输入输出变量,用于实际参数控制,如图10所示,转换FC程序如图11所示。

图10:转换FC参数接口

图11:转换FC程序

(5)在FB中对转换FC和绝对/相对运动指令进行数组调用。

注意在FB的静态变量中建立多重背景,如图12所示,数组调用程序如图13所示。

 

图12:FB静态变量中多重背景

图13:FB程序调用

(6)运行测试

将PLC与松下A6伺服和V90PN连接后进行程序测试,图14就是两台伺服同时点动的测试运行图。

图14:运行测试

至此,DB_ANY在运动控制结构化编程中的应用就结束了,当项目中轴数量较多时这种结构化编程还是有一定优势的,特别是使用了S7-1500PLC的项目。但MC_Power等指令无法直接使用DB_ANY实参还是带来了许多不方便(转换有点繁琐),期待西门子后续能有所改进。

文章思路实际来自全球技术资源条目号109750880的文档,我只是手上有设备进行了实际测试应用而已,在西门子现在这种什么都安排好的产品应用模式里,只要照搬就行了。

我不听不听
侠客

经验值: 897
发帖数: 37
精华帖: 1
1楼    2019-07-26 08:55:45
精华帖  主题:回复:【征文】DB_ANY在运动控制结构化批处理编程中的应用

楼主,您好,我的思路是这样的:

    功能块MC_Power、MC_Home、MC_Reset的参数类型为TO_PositioningAxis;功能块MC_MoveJog、MC_MoveVelocity、MC_Halt的参数类型为TO_SpeedAxis;功能块MC_MoveAbsolute和MC_MoveRelative可以使用DB_ANY数据类型。也就是说轴的常用功能块能用这三种数据类型的变量表示,我的编程如下:

    最终在调用轴控制功能块的时候将轴的实际变量传给这几个输入参数即可,如下图所示:

好久没来了,重新进来学习,起航。
您收到0封站内信:
×
×
信息提示
很抱歉!您所访问的页面不存在,或网址发生了变化,请稍后再试。