APP下载

数据驱动型状态机伺服控制系统的设计和实现

2011-09-20李绍安李维嘉郎飞阳华中科技大学船舶与海洋工程学院轮机工程系湖北武汉430074

电气自动化 2011年6期
关键词:状态机功能模块驱动器

李绍安 李维嘉 郎飞阳(华中科技大学 船舶与海洋工程学院轮机工程系,湖北 武汉 430074)

0 引言

电动缸相对于液压缸,在响应频率、设计周期、硬件成本和维修等方面有较大的优势[1],因此在实际运用中,十吨以下六自由度平台的设计多采用电动缸作为驱动元件。伺服电机驱动器作为电动缸系统中的关键组成部分,近几年以来得到了飞速的发展,其功率逐渐增大,模拟伺服逐渐发展到数字伺服,输入方式由以前的模拟量发展到现在的数字通讯。由于PLC和FPGA的使用,伺服驱动器更加智能,逐渐简化了控制的工作量,减少了控制开发的成本。

随着数字伺服驱动器的大量使用,对其控制代码的设计及优化成为六自由度控制系统中的重要组成部分。在实际工程项目中,根据平台的功率以及总体成本,常选用不同品牌和型号的数字驱动器。由于不同的数字伺服驱动器在控制及通讯方式上存在差异,往往需要开发不同版本的控制软件,给开发成本和后期维护带来了巨大的困难。

综上所述,为减少开发成本,增加程序代码复用程度,有必要开发一套通用的数字伺服驱动器管理程序,简化驱动器控制的设计。让设计人员能快速开发新的数字伺服驱动器的控制代码,从而把主要精力投入到其他关键控制系统及算法的设计中。

1 数据驱动状态机设计方法

考虑数字驱动伺服控制系统的复杂性,为了保证控制系统的可靠性和可维护性,可选用成熟的软件设计模式。本文数字驱动伺服控制系统的结构设计,以成熟的“状态机设计模式”为依据[2]。“状态机”设计模式通过实际控制对象的状态描述和状态迁移控制,能够很好的简化数字驱动伺服控制系统的复杂性。

针对本控制系统可以控制多种不同品牌和型号的数字伺服驱动器,这里对“状态机”设计模式进行了进一步优化,引入配置数据库,提出了“数据驱动状态机”设计模式。如图1所示。

图1 数据驱动状态机“设计模式”

“数字驱动状态机”在传统状态机设计模式的基础上添加了状态管理类(StateManager)以及向配套的状态数据库(StateData-Base)。状态管理类主要负责状态的配置和管理状态转换。

(1)引入命令方式(Command)[3],作为状态改变的接口,及环境类(Context)采用命令方式改变当前状态。环境类(Context)当接收外部指令时,向状态管理类(StateManager)发送状态改变命令,状态管理类根据命令决定当前状态(ConcreteState)。

(2)允许一个命令产生一系列状态变化。在实际控制系统中,控制对象的状态常常可以划分为多个子状态。不同的状态中包含多个相同的子状态。因此,可以通过细分子状态,组合得到不同控制对象状态,达到节省开发时间的目的。

(3)定义状态类(State)的三个基本接口,分别为开始(begin),运行(run)和结束(end)。使所有的子状态类(ConcreteS-tate),独立完成初始化和结束代码。保证子状态类(ConcreteS-tate)之间无耦合,并且状态管理类(StateManager)对子状态(ConcreteState)的管理仅仅通过状态类(State)提供的接口。减少类与类之间的耦合。

(4)定义状态转换数据库(StateDataBase),使状态转换显式化。状态数据库(StateDataBase)定义了一系列指令以及该指令所对应的状态转换流程。

2 数字驱动器控制软件的结构设计

根据“数据驱动状态机”设计模式所要求的设计过程,首先划分数字驱动器控制系统的功能模块,然后逐步设计各功能模块的功能和状态,最后定义各功能模块的状态转变过程和方法,从而确定数字驱动器控制软件的总体结构。具体设计方法如下:

2.1 数字驱动器控制系统功能模块划分

功能模块划分可按照如下原则

(1)按照实际控制对象的物理种类来划分大功能模块,一个模块只管理一类具有类似性质的物理对象。

(2)划分的模块可以定义清晰的接口。

(3)模块应具备可替换性及模块间无耦合。

(4)模块的接口的定义在满足基本功能的前提下,至少设计一个通用接口,方便快速添加新功能。

(5)如果一个模块用来管理多个类型性质的物理对象,应设计对象管理子模块和对象接口子模块,以便将来添加新的物理对象。

(6)模块的功能应提供一定升级空间。

根据以上原则,数字伺服驱动器控制过程可初步划分成控制管理接口模块、数字伺服驱动器功能模块、通信模块和驱动器四个部分组成,如图2所示。

图2 功能模块划分

其中控制接口模块为电动缸控制系统提供各种功能接口。所有与驱动器的功能被封装到控制接口模块中。功能的具体实现向电动缸控制系统透明。驱动器功能模块向控制接口模块负责,提供驱动器包括参数设置、寻找零位、返回状态等各种驱动器功能。功能的具体实现及控制驱动器的实际代码向控制接口模块透明。通讯模块用来管理控制系统与驱动器之间的实际物理链路,包括数字通讯及IO接口等。

2.2 驱动器功能模块设计

(1)驱动器功能分析

对于不同型号,不同品牌的数字伺服驱动器,虽然它们在通讯方式和控制方法上存在着不同,但相对于电动缸伺服系统[4],它们所实现的功能基本一致,仅仅是具体实现的方法存在差异。比如,对于电动缸伺服系统,数字伺服驱动器实现的基本功能有:

①位置控制

②找零位(HOME)

③零位设置

④极限位处理

⑤手动控制

⑥故障报警

⑦故障复位

⑧控制参数设置

⑨状态数据获取

数字伺服驱动器控制流程如图3所示。

图3中,控制程序首先根据数字伺服驱动器的种类从配置数据库中读取相关配置信息(“配置管理”),并根据配置信息初始化驱动器控制量(“初始参数设置”),如速度增益、加速度增益、最大速度和最大加速度等信息,在初始参数设置完成后,向控制类实时反馈驱动器状态信息(“状态信息反馈”),并等待进一步指令;然后,根据控制类指令,驱动器分别执行“手动控制”、“位置控制”和“找零位(HOME)”等功能,并且在每个控制周期中,对驱动器报警信息进行监测,如果驱动器报警,根据报警内容的不同,生成报警指令,使驱动器进入“报警处理”。

(2)驱动器子状态划分

根据驱动器功能分析,驱动器运行过程可划分为如下子状态

①初始参数设置状态(InitDriverPara State)

②状态信息反馈状态(GetDriverState State)

图3 数字伺服器控制流程图

③手动控制状态(ManualCtrl State)

④位置控制状态(PosCtrl State)

⑤找零位状态(HomeCtrl State)

⑥停止状态(Stop State)

⑦普通故障处理状态(Fail1Manage State)

⑧紧急故障处理状态(Fail2Manage State)

其中,初始参数设置状态(InitDriverPara State)负责设置驱动器控制参数;状态信息反馈状态(GetDriverState State)负责读取驱动器状态参数包括故障报警信号,由于它每个控制周期中都必须执行,属于典型的复合子状态;手动控制状态(ManualCtrl State)、位置控制状态(PosCtrl State)和找零位状态(HomeCtrl State)实现电机三种实际控制功能。;通故障处理状态(Fail1Manage State)和紧急故障处理状态(Fail2Manage State)负责管理不同级别下的故障处理过程;停止状态(Stop State)表示驱动器未使能时的特殊状态,在实际控制过程中由于未完成任何控制,可以把它等同于状态信息反馈状态(GetDriverState State)。

(3)驱动器状态转换的设计

根据驱动器功能分析,驱动器在以下几种指令下状态发生改变

①驱动器初始化命令(InitCmd)

②手动控制命令(ManualCtrlCmd)

③位置控制命令(PosCtrlCmd)

④找零位命令(HomeCtrlCmd)

⑤普通故障命令(Fail1Cmd)

⑥紧急故障命令(Fail2Cmd)

⑦停止命令(StopCmd)

驱动器的状态发送改变分为两类,一类是控制系统通过向驱动器管理类(MotorDriver)发送命令改变驱动器状态。另一类是,驱动器管理类(MotorDriver)根据驱动器执行过程或故障直接改变驱动器状态。当改变状态的唯一途径是发送上述指令。

(4)驱动器状态转换命令的优先级设计

①根据命令的紧急程度,驱动器状态转换命令的优先级分为四个级别。

紧急故障命令(Fail2Cmd)具备最高优先级(priority 0),及无论驱动器处于何种状态,紧急故障命令(Fail2Cmd)和立即得到相应。例如,驱动器管理类(MotorDriver)检测到驱动器输入三相电源缺相时,应立即发送紧急故障命令(Fail2Cmd),关闭驱动器使能,闭合电机刹车,使电动缸保持当前位置。

②普通故障命令(Fail1Cmd)具备优先级(priority 1)。例如,驱动器管理类(MotorDriver)检测到驱动器温度超过标准时,应立即普通故障命令(Fail1Cmd),使电动缸缓慢运行到初始零位,关闭驱动器使能,闭合电机刹车。

③驱动器初始化命令(InitCmd)、手动控制命令(ManualCtrl-Cmd)和停止命令(StopCmd)具备优先级(priority 2)。

④找零位命令(HomeCtrlCmd)和位置控制命令(PosCtrlC-md)具备优先级(priority 3)。

⑤由于手动控制命令(ManualCtrlCmd)和停止命令(StopC-md)常运用于电动缸的人工控制,既当驱动器在位置控制时,用于人为干预电动缸的运行。因此,它们的优先级要高于找零位命令(HomeCtrlCmd)和位置控制命令(PosCtrlCmd)。

(5)数据驱动状态机设计

根据上述的驱动器状态划分和状态转换设计,数字驱动模块设计如图4所示。

图4 数字伺服智控制流程图

3 结束语

本文针对数字驱动控制系统的开发,采用数据驱动状态机设计模式,设计控制系统的软件结构,以适应不同品牌和型号数字驱动器的功能控制。以简化开发团队在使用数字驱动器项目中的开发过程,并且进一步提高开发工作的效率和软件产品质量,使软件系统具有良好的稳定性和扩充性。此数字驱动控制系统已在“模型军用直升机六自由度飞行模拟器”和“中国科技馆宇宙飞船模拟器”等项目的控制系统中得到了应用,并取得了良好的效果。

[1] D.Stewart.A Platform with Six Degrees of Freedom.Proc.Inst.Mech.Eng[C].1965 -66,180(15):371 -386.

[2] Peter Cad.Object- oriented patterns.Communications of the ACM[J].1992,35(9):152-159.

猜你喜欢

状态机功能模块驱动器
藏起驱动器号确保数据安全
基于有限状态机的交会对接飞行任务规划方法
空间大载荷石蜡驱动器研制
基于ASP.NET标准的采购管理系统研究
压电陶瓷驱动器的迟滞特性
输电线路附着物测算系统测算功能模块的研究
功能模块的设计与应用研究
双口RAM读写正确性自动测试的有限状态机控制器设计方法
电场调制FeCoSi/PZT驱动器磁性研究
基于反熔丝FPGA的有限状态机加固设计