1.2 嵌入式组件
组件是基于组件构建的系统中的最小组成单位,组件的基本体系结构应该包含基本组件结构,组件属性以及组件接口几个部分。
组件x是一个四元组<P(x),C(x),PF(x),尺F(x)>,其中P(x)是组件x的属性集合,c(x)={C0,C1,.....,Cn}表示组件x包含的子组件集合,PF(x)是服务接口集合,尺F(x)是请求接口集合。基本组件的结构如图2所示。
P(x)是组件x的属性集合,是一个四元组<N(x),PM(x),,N(x),OUT(x)>,其中N(x)={N0,N1,...,Nn}是组件x的标识,可能有一个或多个,比如组件名,组件佃,组件描述等。PM(x)是组件x的参数,用来修改组件x的配置。删(x)表示组件x的输入,Dur(x)表示组件x的输出,IN(x)和OUT(x)之间通过数据的共享实现组件之间的数据流连接。
PF(x)是组件x的服务接口集合,每一个服务接口都是一个二元组<FP(x),Dp(x)>,其中FP(x)={f0,f1,...,fn}表示接口中包含的操作,Dp(x)表示服务接口中包含的数据参数。DPF(x)是组件x的请求接口集合,每一个请求接口都是一个二元组<Fr(x),Dr(x)>,其中Fr(X)={扣,月,...。厂凡}表示接口中包含的操作,Dr(x)表示请求接口中包含的数据参数。
2 可重构伺服驱动软件设计
2.1 软件体系结构设计
根据上述的组件模型,采用层次化和模块化的设计思想,对伺服驱动软件的体系结构进行设计。可重构伺服驱动软件体系结构如图3所示。
整个软件分为三个层次,驱动层、控制层和应用层,硬件层为外部被控对象(电机)和伺服驱动硬件。驱动层是在硬件层上的第一层软件,实现对硬件层的抽象和封装,并为上层提供服务支持。这样可以使上层编程不用关注硬件的实现细节,同时当硬件发生变化时,只要修改驱动层的程序,而不改变驱动层的服务接口,就不用改变上层软件,从而保证上层软件的稳定性。驱动层主要包括编码器驱动组件模块(QEP)、模数转换组件模块(ADc)、脉宽调制组件模块(PwM)和两个调试接口驱动组件:数模转换组件模块(DAC)和USB组件模块。控制层是实现电机控制算法的核心层,主要包括大量电机控制相关的组件模块(RC、RG、IPARK等),这些组件模块根据现场需要利用参数进行动态连接,从而实现不同控制算法的可重构。控制层的运行要保证实时性。应用层是建构在最上层的非实时性任务,主要用于完成系统的人机交互、通信、参数管理等功能。该层的实现需要底层提供相应的数据支持。
分层体系结构,可以使各层次之间相对独立,在伺服驱动协同开发过程中,把每一层作为有机整体理解,只需要保持各层之间的接口不变,就无需更多的关注其他层次。一方面使得系统结构清晰,规范了系统的开发方法;另一方面还能实现多层的协同开发,缩短了系统的开发周期。
2.2 组件设计
开发过程中,组件的定义形式如下边伪代码段所示(以软件示波器OSCI组件为例):
2.3 组件规划
将伺服驱动内的功能进行合理划分,规划出功能相对独立的组件模块。部分控制相关模块的名称和功能如表1所示。