贝加莱运动控制PLCopen介绍
版本信息 |
修改内容 |
修改人 |
V1.00 |
创建 |
穆珊珊 |
1. PLCopen标准介绍
在自动化系统中,软件的作用越来越重要。随着功能范围的扩展和应用复杂性的增加,软件的开发和维护更加艰难。另外,市场上也有大量的解决方案(产品)供选择。
PLCopen,作为一个工控领域的组织,一直致力于在自动化领域的各个方面实现统一和标准化,包括驱动技术,安全技术,IEC61131-3标准,以及OPC UA和XML等。
PLCopen组织所涉及的功能分类
PLCopen组织的详细信息及它的具体功能介绍可以从它的主页获取:http://www.plcopen.org/
它开发了一系列准则用以确保在不同的系统中可以使用同样的方式实现问题的解决方案。
自动化解决方案的供应商如果加入了该组织,那么就要在他们的软件中提供由PLCopen定义的统一的软件接口。B&R目前正是PLCopen组织的成员。
B&R软件平台为运动控制系统编程提供完全符合PLCopen标准的功能块。使用标准功能块有助于快速简单的实现项目开发。
2. 贝加莱PLCopen的运动控制库
在Automation Studio及其帮助系统中,PLCopen的运动控制库叫做ACP10_MC。它包含标准的PLCopen功能块来驱动B&R的运动控制系统。另外,ACP10_MC库中还包含B&R特有的扩展的功能块。
ACP10_MC库包含如“走绝对位置”或者“寻参”这样的所有系统都能使用的基本功能块。这为用户在具体行业的标准应用提供了一个完全统一的软件接口。
除了提供PLCopen标准所规定的功能块外, ACP10_MC还增加了自己所特有的功能块,以便更好的支持贝加莱伺服的强大功能。这样用户就可以用统一的方式来使用这些功能。这些额外的功能块在使用上是和标准功能块完全一样的。
例如,提供了多伺服驱动器之间的强大同步功能。同时也提供了带有增强选项的基本定位功能块。
可以从功能块的名字来区分ACP10_MC库中的功能块是PLCopen标准的还是B&R特有的:
PLCopen标准功能块名字是以前缀“MC_”开头,例如,MC_MoveAdditive,MC_ReadAxisError。
B&R特有功能块名字是以前缀“MC_BR_”开头,例如,MC_BR_BrakeOperation,MC_BR_AutControl。
3. 轴状态概述
为了更好的规划轴的运动序列,我们为轴运行过程定义了不同的运动状态。这些运动状态可以为复杂的运动过程提供一个简单的整体概览,并且使错误处理变得更加容易。共有以下运动状态:
状态 |
描述 |
Disabled |
控制器关闭 |
Standstill |
轴当前没有运动,并等待执行定位命令 |
Homing |
正在执行寻参过程 |
Errorstop |
报错后停止 |
Stopping |
正在停止当前的运动 |
Discrete motion |
正在执行指定目标位置运动。这种运动是有预定终点的。 |
Continuous motion |
正在执行正反转运动,这种运动没有预定终点。 |
Synchronized motion |
轴同步于另一个轴 |
状态之间通过调用某些特定命令进行转换。
例如,可以实现如下的运动状态序列:
假设轴的初始状态在Standstill状态。当成功执行完Homing命令后,可以使用MC_MoveAbsolute命令启动运动。
当到达目标位置后,轴返回到初始状态。如果在运动过程中发生了错误,那么轴就会进入error状态(Errorstop)。纠正错误并且确认后,使用MC_Reset功能块回到初始状态。
下图是一个完整的状态图,它描述了在多个功能块“同时”激活时,轴是如何动作的。通过这个图能够帮助我们理解不同类型的运动方式,以便于实现更复杂的运动序列和处理错误。
Note1:不论哪个状态,轴发生了错误。
Note2:调用MC_Reset,并且MC_Power.Status = FALSE
Note3:调用MC_Reset,并且MC_Power.Status = TRUE,MC_Power.Enable = TRUE
Note4:MC_Power.Enable = TRUE,并且MC_Power.Status = TRUE
Note5:MC_Power.Enable = FALSE
Note6:MC_Stop.Done = TRUE,并且MC_Stop.Execute = FALSE
Note7:运动过程中MC_Power.Enable = FALSE,减速停止。
下面我们对每个轴状态进行具体的解释。
Disabled 状态
▪该状态表示内部初始化完成,但是轴控制器是关闭的。
▪虚轴不存在该状态,初始化完成后直接进入Standstill状态
Standstill状态
▪该状态表示轴控制器已经打开,可以开始运动了
▪对虚轴来说,该状态表示可以开始运动了。虚轴没有控制器。
Homing状态
▪该状态表示轴正在寻参,或者整定功能块、制动测试正在进行。一旦这些过程完成,轴会自动切换回Standstill状态或Disabled状态。
▪Homing模式不同所需要的时间也不同,所以在不同模式下在该状态停留的时间会差别很大。
Errorstop状态
▪该状态表示轴发生了严重错误,造成轴停止运动。
▪可以使用MC_ReadAxisError或者MC_BR_ReadAxisError来读取错误号和错误文本,以便于改正错误。
▪在该状态下不能运动。
▪必须调用功能块MC_Reset来退出该状态。根据控制器的状态,轴可能会进入Disabled状态或者Standstill状态。
▪如果正在E-stop停止过程中调用了MC_Reset,轴会继续停留在ErrorStop状态,直到减速结束,然后才会更改状态。
在减速过程中,MC_Reset会返回Busy,直到减速完成才会显示Done
Stopping状态
▪该状态表示轴在停止命令下进行停止;
▪该状态下不能启动运动;
▪如果是调用了MC_Stop进入了该状态,那么轴会一直留在该状态直到“Execute“复位为FALSE;
Discrete Motion状态:
▪该状态表示轴当前执行的运动当到达某个指定位置时会停止;
▪如果使用MC_Halt停止,那么轴将继续停留在该状态,直到完全停止进入Standstill
Continuous Motion状态:
▪该状态表示轴会一直保持运动,直到有stop命令或者被其它命令终止;
Synchronized Motion状态:
▪该状态表示轴耦合于其它轴,是其它轴的从轴;
▪轴在该状态静止不动是因为:
▪主轴没有运动
▪没有启动信号
▪当前的cam曲线是不产生运动的;
轴控最基本的原则是运动命令需要依次执行,不管控制器是否有并行处理的能力。因为命令的执行会影响轴的状态转换。轴在任一时刻都必然处于某个定义好的状态中。每个运动命令都会造成轴状态的转换,并且影响当前运动参数的计算。
该图是基于单个轴的。从状态图的角度来看,多轴功能块如MC_CamIn、MC_GearIn和MC_Phasing可以认为是多个单轴处于某个特定状态。例如,cam的主轴可以处于Continuous Motion状态,而关联的从轴则处于Synchronized Motion状态。将一个从轴耦合到主轴不会对主轴产生影响。
轴的当前状态可以使用功能块MC_ReadStatus来读取。如果一个功能块在不允许被调用的状态中调用了,那么就会产生:“29238:Unable to use function block in current PLCopen state”这个报错。
功能块在哪些状态可以调用,可以参考帮助中功能块的详细介绍部分。例如下图:
4. 功能块特性
4.1 功能块接口
所有功能块都通过统一方式和状态参数来访问。功能块都使用标准化的操作,这样编程就会变得容易很多,而且也能让程序有一个清晰的结构。
下表列出了功能块中统一的接口参数, 包括轴的使能和状态输出:
参数 |
描述 |
Axis |
指定功能块所使用的轴的参考地址来确定是哪个轴 |
Enable |
使用Enable作为使能输入端的功能块根据Enable的输入值来运行。当Enable置为1的时候,功能块的输入端数据被读入。当置为0的时候,所有输出会被复位。 |
Execute |
使用Execute作为使能输入端的功能块,当Execute端有上升沿时,读输入端的值并且执行功能块(例如,Execute上升沿时接收新的设定速度)。 不能通过复位该输入端来停止功能块的运行,必须通过调用其它功能块来打断或停止。(例如,MC_Halt,MC_Stop,MC_Move等) |
Busy |
表明相应功能已成功启动,并且正在执行中。该输出置位时,功能块必须持续调用,否则状态信息、功能等会受到影响。 |
Done |
每个功能块都有这样一个状态输出,来表示功能是否成功执行。不同的功能块中,该输出端的名字可能不同,但意义都是一样的。 |
CommanAbort |
命令被其它功能块的调用取消 |
Error |
功能块调用中出错 |
ErrorID |
错误发生时,相应的错误号从该输出端给出。通过错误号能够查找到错误发生的原因。在AS的帮助中可以找到错误列表。 |
4.2 时序图
通过功能块返回的状态参数和当前的使能信号,我们可以确定功能块的执行情况。下面给出了几种功能块运行结果的时序图。
▪命令成功执行
Execute上升沿时,功能块开始执行。Busy输出端表示命令正在执行。Done(或者InVelocity,InGear等)表示命令已经成功完成。
▪命令执行过程中出错
使能后功能块执行出错,如果Error置1,那么在ErrorID输出端可以找到相应的错误号。
▪命令执行被打断
正在执行的命令被其它命令打断。当执行的功能块影响了其它已经激活的Busy=1的功能块时,就会发生这种情况。
例如,相对运动(MC_MoveAdditive)能打断绝对运动(MC_MoveAbsolute)。
读状态数据(位置、参数等)的功能块和控制运动的命令之间不会相互影响。
从以上几种状况可以总结出以下结论:
▪状态信息Done、Command Aborted、Error和ErrorID会保持输出值直到Execute复位。
▪如果在Execute在状态信息输出前就已经复位,那么状态信息和错误信息会输出一个周期后复位。
▪错误发生后,如果想复位功能块的输出,需要把Execute或Enable复位为FALSE。然后纠正错误发生的原因(错误也可能需要复位)再重启功能块。
▪使用Enable使能的功能块只有在Enable置位为1的时候才会激活。否则功能块的功能就会停止,并且输出的状态值也会复位。
5. 程序结构和编程指导
下面列出了使用PLCopen库编程的一些基本原则和指导:
▪读取状态和错误信息的功能块(MC_ReadStatus、MC_ReadAxisError等)在程序的最开始调用;
执行命令的功能块(MC_Power、MC_MoveAbsolute等)在程序的最末尾调用;
▪正确进行错误处理。使用MC_ReadAxisError、MC_ReadStatus、MC_Reset等功能块来确定轴和功能块错误;
▪使用CASE语句来编写控制结构,以确保在一个任务周期内只有一个运动功能块被调用;
▪添加易懂的注释,以便于后续维护或修改更新;
▪使用MC_ReadStatus功能块读取轴状态,以便于功能块调用时处于可调用的轴状态;
▪使用帮助系统的例子或者是AS自带的sample作为你自己程序的基础;
▪在每个功能块的详细介绍的Additional Information中查找有用的信息,例如如何消除网络延迟;
▪功能块的Velocity、Acceleration、Deceleration输入端只能接受正的值。
下图给出了一个结构良好的程序代码的例子。这段代码主要由三部分组成:
•调用状态信息功能块和错误检测;
•CASE 语句;
•命令功能块调用;
读取状态和错误信息的功能块在程序的最开始调用,这样最新的信息就可以在后面的程序中使用了。
错误检测放在step序列之前执行,如果检查到有错误发生,那么程序就可以直接跳到STATE_ERROR_AXIS步执行错误处理。
功能块的参数在CASE语句之中(step序列)执行赋值,却不在其中调用,而是放在循环程序的最后调用。这样能确保功能块在每个任务周期都会被调用,然后每个周期都会更新输出参数。
6. 错误处理
编程时,要时刻把错误处理放在首要地位。而错误处理的首要问题就是哪些错误必须要考虑?
有两类错误:
▪调用功能块报错
▪轴报错
如何能够监测到这些错误呢?
PLCopen功能块本身能够给出自己的状态信息。在执行过程中发生的错误会在Error输出端显示。另外,还会有一个ErrorID输出端会输出错误号来给出具体的错误。
如果是轴错误的话,可以使用MC_ReadAxisError功能块来读取轴错误。该功能块还提供了使用字符串变量输出错误文本描述的功能。
推荐的错误处理方式:
(1)我们建议在程序中循环调用MC_ReadAxisError功能块来监控轴错误,功能块需要一直处于使能状态,并且要在程序的循环部分,即控制结构体之外。
(2)当发生了轴错误的时候,常规程序的执行应该停止,转而进入错误处理的步骤。
(3)同样,当功能块调用发生错误的时候也是这样。因此,还需要一个“error step”来区分这两种错误。
错误处理可以分多个步骤来处理:
▪轴错误的检测和确认是顺序处理的。功能块将轴错误逐一读取,直到最后一条确认后完成所有的轴错误确认。
▪如果是PLCopen功能块错误,系统会首先检查错误是否由轴错误引起(ErrorID29226)。如果不是轴错误,确认错误后就可以退出错误处理了。
▪前述两步执行完之后,还需要检查轴状态。在某些情况下,轴可能会进入“Error stop”的状态。这种状态会一直持续,直到使用MC_Reset执行复位。
当所有错误都被纠正并且确认后,应用程序就可以继续执行了。
以上介绍仅作为一种实现错误处理的基本方法,但不能作为指导原则。实际上,B&R的PLCopen运动控制库中扩展了关于轴状态及错误处理的功能块,比如MC_BR_ReadAxisError,MC_BR_AxisErrorCollector等,可以更加方便的实现错误处理。具体可以参考AS软件中自带的motion sample中的多轴例程的ErrorHandling。
如果是功能块调用错误,必须要在下次调用前把功能块复位。在Enable或Execute端置0的情况下调用功能块可以将功能块复位。同样,读取轴错误信息这些功能块调用错误的话也是需要复位的,所以需要注意Enable端的赋值方式。通常是判断出错之后直接复位,如下图。该方式同样适用于其它Enable使能的状态功能块。
7. 注意
下图是AS例程basic部分代码:
例程中如果发生错误会导致主switch直接跳转到错误处理,那么上个周期正在执行的case就不会继续执行,这样造成功能块excute命令没有被复位。从而造成错误无法复位,需要断电才能解决的问题。因此,错误处理可参照第6部分的介绍。