李 根,唐臻宇,耿海翔,金佛荣
(四川大学物理科学与技术学院,四川 成都 610064)
基于Matlab/RTW的控制系统一体化新型设计方法
李 根,唐臻宇,耿海翔,金佛荣
(四川大学物理科学与技术学院,四川 成都 610064)
针对现行的控制系统设计方法存在的开发时间长、研发费用高等问题,介绍了一种基于Matlab/RTW(实时工作间)的新型的一体化设计方法。在控制系统开发中应用Matlab强大的仿真及易修改功能将算法设计、软件设计组合在一起,并利用RTW工具自动生成控制系统主要部分的C代码,不仅大大缩短了开发周期,而且节省了研发费用。在Matlab/Simulink仿真环境下,建立了利用手柄控制步进电机运动方向及速度的模型,自动生成的C代码通过开发人员编写的硬件接口代码与研制出的硬件进行整合,经过实践检测,验证了自动生成的C代码具有很好的稳定性与执行速度。手柄控制步进电机的实例有力地证明了新型设计方法具有开发周期短、研发费用低的优点。
控制系统;RTW组件;一体化方法;生成代码;S-函数
目前,控制系统的开发仍然以传统方法为主。传统的设计方法需要众多研发小组,而且只有当一个小组完成其任务之后,下个小组才能开始工作。这不仅消耗了大量的人力也增加了研发成本,延长了研发周期。该文介绍了一种针对控制系统一体化的新型设计策略,该方法的最主要的优点是基于Matlab/RTW,也即利用Matlab软件及其组件将算法设计、软件设计组合在一起,自动生成控制系统主要部分的C代码,缩短了时间,节省了成本。
在控制系统的开发中,传统方法由于其开发成本大、开发周期长已经越来越阻碍工业的发展。传统的研发策略需要算法设计小组、软件设计小组、硬件设计小组以及整合调试小组,而且只有当一个小组完成工作后,下个小组才可以开始工作,这种方法的所有软件硬件开发都需要研发人员亲自动手完成,因此这种层进式的开发方法是非常耗力耗时的,同时也增加了研发的成本。新型方法是用图形化的语言进行建模仿真,并能够方便快速的修改了,进而利用Matlab软件及其组件自动生成实现算法的C代码。这就将传统方法中的算法设计及软件主控制过程的软件开发整合在一起,省去了开发主控制器主要代码的软件开发过程,从而使得开发周期大大缩短,成本大大降低。两种方法的开发过程的对比如图1所示。
RTW(Real-Time Workshop,实时工作间)是MATLAB的重要组成部分,它作为Matlab和Simulink的扩展,不仅使得系统实时仿真变得异常地快速简便,而且能够从构建好的Simulink模型自动生成优化的、简洁的、可移植的标准ANSI C代码。而这个独立运行的C代码可以在各种各样实时的或者非实时的软硬件目标环境中运行,可以在普通的PC硬件平台、DSP、微控制器(microcontrollers)和裸板(bare-board)上运行,也可以在 Windows、DOS 或者各种商用的、个人的实时操作系统上运行,如XPC、VxWorks等。
图1 两种开发方法过程的对比
如图2所示,新型方法包括以下几个主要的步骤:
(1)Simlink模型构建与仿真。这是方法的第一步骤,也是方法的重心。通过对工程项目的要求进行分析,利用控制工程的原理,建立所需的动态模块,组成系统模型。然后利用Matlab、Simulink、Toolboxes等工具箱对所建立模型进行仿真,分析仿真结果,对模型进行调整修改再仿真,如此反复检测修改直到取得满意的效果。最后由RTW读取最终的系统模型并对其进行编译,形成模型的中间描述文件mode1.rtw,并以ASCII码形式进行存储。
图2 新型设计方法的流程图
(2)生成C代码。目标语言编译器(TLC)首先读取中间描述文件Mode1.rtw,然后进行编译和执行目标文件中的命令,包括系统目标文件和每一个模块目标文件。在这一阶段中,目标语言编译器TLC将中间描述文件Model.rtw转换为目标C代码。
(3)硬件及硬件接口C代码的编写。硬件设计小组通过分析项目要求,设计出应用系统的目标板,并编写硬件接口程序(C代码),这一步骤是由开发人员手动完成的,用于将Matlab生成的C代码与开发的应用系统硬件联系起来,起到一个十分重要的纽带作用。
(4)生成可移植的C代码。将由Matlab软件自动生成的C代码与开发人员手动编写的应用硬件的接口代码通过CPU的C编译器进行编译链接,进而生成可移植于设计的硬件目标板上的移植C代码。
(5)检验。将所生成的可执行C代码移植到开发的系统目标板中进行检验修改,从而完成整个系统的开发。
步进电机是一种将电脉冲转化为角位移或者线位移的执行机构。它需要用连续且有序的电脉冲信号驱动。在电机不过载的情况下,电机的转速和停止位置只取决于脉冲信号的频率和脉冲数,而不受负载变化的影响。当步进驱动器接收到一个脉冲信号,它就驱动步进电机按设定的方向转动一个固定的角度(及步距角)。由于这个线性关系,可以通过控制脉冲个数来控制角位移量,从而达到准确定位的目的。
手柄控制步进电机就是根据步进电机的工作原理,利用手柄移动的方向控制步进电机的转动方向,利用手柄移动的快慢控制步进电机的转动加速度。控制步进电机的控制手柄实际上就是一个电位器。手柄所在位置(x)通过人体工程函数V=f(x)对应电位(V),电位经过A/D采样转换变为变为电压采样信号,电机速度控制模块滤除电压信号变化过快的部分,使步进电机的加速度与速度处于所要求的加速度与速度门限值之内。经过滤波之后的电位信号通过电位频率转换函数变成频率。
手柄处于平衡位置时的电位设为平衡电位V0,此时电机静止。当电压值高于这个平衡电位值时,位移为正;低于平衡电位时,位移为负。此系统就是通过控制手柄运动的方向及瞬时电位值V来控制步进电机的运动。主体框架如图3所示。
图3 手柄到频率的转换关系
电机速度控制模块是该系统的主要模块。可以简单的看作一个滤波器,它控制速度变化的斜率及速度,滤除超过加速度门限值和速度门限值的点,使电机正常工作。电机速度控制模块采用自己编写的S-Function函数,电机速度控制模块如图4所示。
图4 电机速度控制模块
S-Function是系统函数(System Function)的简称,扩展了Simulink的性能,常用来解决建模中遇到的复杂的、不能直接用Simlink创建或者直接用Simlink创建显得非常复杂的问题。它可以用Matlab语言,C,C++,Fortran及Ada语言编写。可以根据自己的需要来编写实现特殊功能的S-Function函数,使得建模易于实现。S-Function函数采用不同的语言编写都有各自确定的格式,这里仅以C语言为例进行讨论。此程序包含定义与包含,回调函数的实现及RTW和Simulink接口三个部分。
mdlOutputs函数是程序的主要部分,在每个采样时间步长内,Simulink调用mdlOutputs来计算块的输出。mdlOutputs函数的实现是取出输入信号,对其进行判断,如果下个采样点大于上个采样点的值与加速度门限值之和,则输出是上个采样值与加速度门限值之和,从而限制了电机的加速度,起到滤波作用。
这段代码用来判断此S-Function函数是植入RTW还是Simulink中。
RTW自动完成从Simulink模型到生成模型C代码的任务,RTW代码的生成方法:(1)设置Solver Options Type参数,并选择Ode5解码器。(2)设置Fixed Step Size参数为一个合适的值。(3)选择Real-TimeWorkshop页面并按下Build按钮。完成以上三个步骤即可生成一系列ABS系统模型相关文件:(1)model.C,它是模型的单机 C 代码。(2)model.h,是包含状态变量和参数的包含头文件。(3)model_expor.h,是输出数据和参数的包含头文件。(4)model.reg,是包含头文件,它包含了完成在生成代码中对数据结构进行初始化的模型注册信息。(5)model.prm,是一个包含模型中所用的参数的有关信息的包含头文件。
通过分析工程项目要求,硬件开发人员开发出手柄控制步进电机的硬件目标板,开发人员手动编写基于此目标板的硬件接口代码,以便与主控制程序进行接口连接。
将所生成的C代码与开发人员编写的基于系统目标板的接口C代码通过所应用CPU的C编译器进行编译链接生成与硬件对应的可移植代码。将所生成的代码移植到开发的应用系统目标板上,经过检验,不论是代码的运行速度还是代码的稳定性都能够很好的满足步进电机的运转、加速及停止要求,达到了令人满意的效果。
由此可见,与传统开发方法相比,新型开发方法有如下优势:
(1)形象的模型语言。用图形语言代替抽象的高级语言来描述复杂的控制系统,编写控制软件程序,这就能使软件工程师将更多的精力和时间用于控制策略的设计、比较和优化,以提高控制软件的功能和性能。
(2)能够快速直观仿真验证控制算法,比较不同控制算法的优劣,能在较短时间内设计出最优的算法。
(3)在线实时观测。能在不中断程序运行的情况下观测控制软件不同部分的运行结果,在不进行重新编译程序的情况下,修改控制软件系统内部的参数,迅速验证参数配置后的控制响应。
[1]曹罗生.VC++与Matlab/Simulink混合编程的实现与研究[J].科学技术与工程,2007,7(21):5685-5687.
[2]齐星刚,赵 刚.在MATLAB/Simulink平台上DSP代码的自动生成[J].中国测试技术,2005,31(1):87-88.
[3]臧怀泉,李旺军.基于RTW的汽车ABS的软件设计与实现[J].工业控制计算机,2007,20(11):50-51.
[4]田 伟,熊晋魁.Simulink模型的C/C++代码实现[J].应用技术,2004,31(11):16-18.
[5]张 祥,杨志刚.Matlab/Simulink模型到C/C++代码的自动实现[J].重庆工学院学报,2006,20(11):111-123.
[6]樊晓丹,孙应飞.一种基于RTW的实时控制系统快速开发方法[J].清华大学学报,2003,43(7):895-898.
[7]胡广书.数字信号处理[M].北京:清华大学出版社,2003.
[8]丁玉美,高西金.数字信号处理[M].西安:西安电子科技大学出版社,2002.
[9]王正林.Matlab/Simulink与控制系统仿真[M].北京:电子工业出版社,2008.
[10]张照明.应用MATLAB实现信号分析和处理[M].北京:科学出版社,2005.
New integrated design method for control system base on M atlab/RTW
LI Gen,TANG Zhen-yu,GENG Hai-xiang,JIN Fo-rong
(School of Physical Science and Technology,Sichuan University,Chengdu 610064,China)
Against the existing design method for control system with long development time and high cost,this paper introduced a new design method on the basis of Matlab/RTW and its steps.The method made full use of strong simulation and easy edition of Matlab, combined the algorithm design with the software design, and automatically generated the main C code of the control system by RTW tool.It reduced the development cycle greatly and saved the development cost too.Then, in the Matlab/Simulink simulation environment, the stepper model, the handlebar controlled the way and speed of the step motor, has been established.The automatically generated C code and the interrelated hardware have been integrated by the interface code written by the developer.The experimental result proved that the code has very good stability and run speed.The example confirmed that the new method took shorter development cycle,low development cost.
Control system;RTW;Integrated method;Generated code;S-function
TP273;TP311.52
A
1674-5124(2010)01-0075-03
2009-05-04;
2009-07-26
李 根(1984-),男,安徽阜阳人,硕士研究生,专业方向为测控技术。