将“运动控制功能块”移植到OOP中

近日由于做了个小手术,需要休息一段时间就刚好有时间让我可以再继续研究一下西门子新推出的这个SIMATIC AX。对于一个基于嵌入式背景的IT工程师而言,把面向对象的思想用于我们运动控制的自动化程序是梦寐以求的。

常言道一天不练手生脚慢;两天不练功夫减半;三天不练成了门外汉。理想和现实间总有很长一段路要去跨越,由于本人太久没基于OO做过项目了,折腾了半天还不得法,我也懒得再去尝试,转而去补习一些基础知识。

我们都知道现代PLC语言都是基于IEC61131-3这个标准的,61131-3是PLCopen这个组织主要推出的,当然大名鼎鼎的Motion Control也是PLCopen这个组织的重要成果。我们做舞台控制的核心其实就是运动控制,故最终选择了《Application Examples for Motion Control Porting “Function blocks for motion control” into OOP》来消磨时光,我把学习过程中顺带翻译的内容也贴出,供日后参阅。

运动控制应用示例 - 将“运动控制功能块”移植到OOP中 V1.0

1、本文件介绍

随着 “运动控制功能块(原第1部分和第2部分)”规范的发布,PLCopen运动控制工作组提供了一套标准化功能块,以简化运动控制软件的模块化和重复使用。本文件介绍了运动控制规范的面向对象实现,可与程序标准功能块(FB)集相结合。建议的面向对象(OO)实现的总体设计是用一个轴的类将不同功能作为方法来实现,而不是以前使用的多个FB。该软件设计的一个优点是与程序化运动控制FB兼容:标准运动控制库可以在内部调用轴类,将两种方法结合到一个应用程序中。因此,通过OO实现的用户无需熟悉详细的OO原理或语言元素即可使用。

正如面向对象编程(OOP)中常见的那样,接口用于定义动作标准,因为它描述了一个类对外展示的方法(有时包括行为)。更确切地说,接口是一个类可实现的功能的定义。类是所定义功能的实际实现,包括供应商特定的方面。相应地,本文件对运动接口进行了标准化。要使用这一标准,需要实现一个轴类,该轴类遵循(“实现”)这一标准化运动接口。简而言之:该接口定义了功能,但没有定义如何实现这些功能(其内容),这些功能在轴类中由特定供应商实现。

1.1 本工作组的目标

在本文档中,我们使用了三个应用实例:

  • (1) 贴标签示例:将标签贴在传送带上的产品上
  • (2) 仓储示例:将托盘从仓库货架上移出
  • (3) 多轴组合的FB: CamIn 和 GearIn。

通过这些示例,我们可以看到如何通过使用下面介绍的标准化接口itfAxis,将PLCopen运动控制规范中的标准化FB移植到OOP中。为了在供应商特定的实现中应用该标准,程序员开发了一个类,该类实现了itfAxis接口,因此无需自己去实现即可拥有itfAxis中标准化的所有功能。然后,再对这些功能的具体实施进行编程。

该itfAxis接口的优势在于,用户可以自行决定编程方式:一方面,可以使用标准FB,它们可以在内部调用itfAxis方法。另一方面,也可以使用定义的方法来启动新命令、获取轴的状态、更新或终止命令,从而以OOP方式进行编程。

下文将详细介绍相应的接口、包含的方法以及几种用户定义的数据类型。

本文档仅关注轴的运动控制部分。在实际项目中,轴类还有许多其他属性和方法,用于通信、硬件配置和其他方面。为简单起见,本文档不对这些内容进行解释。

2、OOP运动控制库的元素

将运动FB移植到OOP的起点是定义itfAxis接口,作为PLCopen运动控制规范中轴类的标准化表示。首先,定义了几个ENUMS,在itfAxis接口中使用(参见图1)。

2.1. 参考REF

在本文档中,我们将不会看到AXIS_REF、CAM_REF、MC_INPUT_REF、MC_OUTPUT_ REF等属性,因为它们是供应商特定的属性,不用作任何“Method”的输入。

我们希望供应商以特定的方式在接口中添加ID属性。

2.2. 命令Commands

为了描述命令,定义了itfCommand接口及其用于运动控制的各种扩展。itfCommand包含用于查询命令状态的“Getter Functions”。为符合IEC61131-3标准,“Getter Function”以Methods的形式来实现。(注:实际值可以作为属性实现,与 “Getter函数”(方法)相比,属性可以更简洁。因此,使用起来更简单。读取链接变量的当前值只需要这些属性的Get-Method )。为取消正在运行的命令,定义了一个Abort方法。为了适应未来的控制策略(例如IEC0-61499所定义的事件驱动编程),还定义了Wait方法。在事件驱动编程情况下,同步调用是可能的,该命令可用于等待命令结束或超时。当前的运动控制规范中未包含该命令,但它代表了一种扩展,可用于事件驱动架构中的同步调用函数。

itfAxisCommand接口对itfCommand进行了扩展,该接口添加一个更新方法,该方法可在移动的输入发生变化时调用。该方法模仿了经典FB的ContinuousUpdate输入功能。它用于更新MoveAbsolute等命令的调用参数(位置、加速度等)。

总之,已定义的命令(如itfCommand、itfAxisCommand等)都是通用命令,可用于所有API(应用编程接口)(绝对移动、相对移动、速度移动、停止或停止)。这样就可以使用调

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值