2008年第1期福建电脑基于Simulink/Stateflow模型的嵌入式软件开发研究任书明,揭金良,石开强(成都理工大学信息工程学院四川成都610054【摘要】:当前在控制领域内使用Simulink/Stateflow建模并以RTW生成指定代码的方式代替传统嵌入式软件开发方法已形成趋势。这是由于基于Simulink模型的嵌入式软件开发大大节省了软件开发的人力、物力和时间成本。本文针对在Matlab环境下如何使用Simulink/Stateflow建立模型,实现嵌入式软件开发的过程进行了详细介绍。【关键词】:Simulink,Stateflow,RTW,模型1.引言1.1模型开发的意义鉴于软件工程化思想的引入和盛行,软件业发展潮流逐渐趋于工程化,流水化。Matlab环境下集成的Simulink/Stateflow模型设计和使用RTW生成目标代码的软件设计方案便是这一大背景的产物。Matlab集成了一组完整的、紧密集成的工具,形成了支持整个工程设计流程的、无缝集成的嵌入式控制系统设计解决方案。这一解决方案可以使用户方便的穿梭于建模、仿真、验证与实施之间而无须重写代码或改变软件环境。用户花费在编程与代码调试方面的时间显著减少,而留出更多的时间探索新思想、开发先进的技术、降低应用成本并提高产品质量。本文所描述的解决方案基于Matlab环境。这一环境集成了世界上最广泛应用的动态系统仿真软件Simulink。它与State-flow、RTW(Real-TimeWorkshop及面向特殊应用领域的相关产品一起,提供了不同于传统的、综合的、灵活的、高效的、基于模型的设计方法。1.2工具介绍1.2.1Simulink/Stateflow介绍:Simulink是基于MATLAB的框图设计环境,可以用来对各种动态系统进行建模、分析和仿真,它的建模范围广泛,可以针对任何能够用数学来描述的系统进行建模,例如航空航天动力学系统、卫星控制制导系统、通讯系统、船舶及汽车等等,其中了包括连续、离散,条件执行,事件驱动,单速率、多速率和混杂系统等等。Simulink提供了利用鼠标拖放的方法建立系统框图模型的图形界面,而且Simulink还提供了丰富的功能块以及不同的专业模块集合,利用Simulink几乎可以做到不书写一行代码完成整个动态系统的建模工作。Stateflow是一个交互式的设计工具,它基于有限状态机的理论,可以用来对复杂的事件驱动系统进行建模和仿真。Stateflow与Simulink和MATLAB紧密集成,可以将Stateflow创建的复杂控制逻辑有效地结合到Simulink的模型中。1.2.2RTW介绍:由于基于模型的Matlab开发流程总是欠缺和工程实现的有效连接,系统级的设计产物无法和硬件产品直接挂钩,所以工程师无法直接应用Simulink模型的宝贵资源。为了改善设计流程中的这一缺陷,MATLAB产品体系中加入了连接工程实现的桥梁-实时代码生成工具Real-TimeWorkshop(RTW。RTW使用户可以直接将Simulink框图模型转化为实时标准C代码,进而为快速原型系统、半物理仿真系统或者产品提供设计输入,使仿真与实际应用紧密结合。2.建立Simulink/Stateflow模型本节主要介绍在Matlab下用Simulink/Stateflow工具建立模型,模型中包含了Simulink模块,并使用了Stateflow状态图控制各状态间的转移。下面建立一个简单的仿真模型Testmodel.mdl,实现的功能如下:(模型如图11系统初始输入1,系统的输入值在1和-1之间变换2用scope显示输入的值图1搭建的Simulink模型图图2Chart状态机图Testmodel.mdl中用Target1和Target2模块持续产生常量1和-1;Switch模块用于选择输入到Stateflow状态图(Chart中的值。Chart中有两个状态,一个状态为:onStateOne,另一状态为offStateOne,转换条件如上图所示。3.定制并生成代码3.1TLC文件介绍鉴于嵌入式软件开发主要是以应用为导向的,所以就不同的嵌入式平台生成的代码规范等也不尽相同。那如何在模型设计并验证通过后生成针对具体平台下的嵌入式代码呢?这就引入了与具体平台(如操作系统和编译器等进行结合的工作。如:在Matlab环境下生成支持VxWorks等系统的代码。生成特定平台下定制代码的工作主要是由一个被称之为TLC(TargetLanguageCompiler的文件完成的。在其中设定了生成代码的模板,格式,编译器等内容。由于篇幅问题,在此不作具体介绍(详见Matlab下的TLC文档。我们在此以生成普通ERT代码指代特定操作系统,如需要生成指定操作系统代码只需要更换为具体平台相关联的TLC文件即可。TLC的选择如(图3、4所示:3.2模型普通ERT代码生成在生成ERT代码时可以通过替换TLC文件的方式实现有针对性地生成用于不同平台代码的工作。而这大大方便了不同平台下的软件开发差异性带来的问题。如上内容介绍,生成代码的工作主要是由RTW实现,下图描述了具体代码生成的步骤:第一步:选择图3中的Solver中的SolverOptions为FixedStep第二步:如图4所示选择ert.tlc文件;第三步:点击图3中的Build按钮生成并编译代码;(普通ert.tlc使用lcc编译器,如果只生代码可以选中前面的Generatecodeonly选项通过以上三步可以生成ert.tlc所定制的代码。生成代码中792008年第1期福建电脑(上接第73页!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!5.实例应用为了验证本文提出的新的改建算法的有效搜索能力,分别用本文中改进的遗传算法和普通的遗传算法进行了仿真结果比较,并做了进一步的探讨。选取一定量的配送目的地,本文中选取6个,运送车辆选为2台,根据数学求最优解的方法,可以得出问题的最优解是67.5。遗传算法的参数分别选为:对于双种群,主种群和次种群规模均选为30,主种群的选择算子采用期望值法,交叉率Pc=0.6、变异率Pm=0.01;次种群的选择算子采用赌轮法,交叉率Pc=0.8、变异率Pm=0.05;种群间个体迁移率为Pt=0.382;世代之间交换率Pg=2(即采用隔代人口迁移法;对于普通遗传算法种群规模选为60,交叉率Pc=0.8、变异率Pm=0.05。设定两组的运算,均迭代50次。运算结果如下表所示,从响应曲线可以看出,双种群的平均值73.25,普通遗传算法的平均值是68.565,由此可以的出结论,在参数(种群规模,交叉,变异概率大致相同的情况下,应用本文提出的算法可以更好接近最优化解。6.结论本文提出的算法实行的是一种动态次种群中迁入新的个体,参与到主种群中进行竞争,运用黄金分割点来进行优化,克服了传统遗传算法算法由于受到种群规模的限制而导致的早熟或易陷入局部最优的问题,它增加了迭代过程中模式的多样性,有效地增强了算法的寻优能力和搜索速度。通过比较,结果表明,优化后的遗传算法在解决货物配送问题上的有效性是很明显的。根据同样的道理,本文提出的方法也可以运用到其他的最优解的问题上,例如在用于分析非线性系统的稳定性时,也是可行的。参考文献:1.张铃,张钹.遗传算法机理的研究[J].软件学报.2000.11(72.宋巨龙,钱富才.平面上的黄金分割法[J]。系统工程与实践.3.熊伟清,魏平.遗传算法的早熟现象研究[J].计算机应用研究.2001.94.王复兴.黄金分割在自动系统故障判断中的作用[J].自动化仪表.2001.(225.姜大立,杨四龙,杜文.车辆问题的遗传算法研究[J].系统工程理论与实践。1999.19(66.郭宇春等.遗传算法及其应用.系统工程与电子工程[J].1998.77.扬智民,王旭,庄显义.遗传算法在自动控制领域中的应用综述[J].信息与控制.2000.29(48.邓正龙,何小荣,蒋兆贵等化工中的优化方法[M]北京:化学工业出版社。19929.席裕庚,柴天佑等.遗传算法综述[J].信息与控制.1996.13(6实现了模型的所有功能。图3RTW选项图4TLC的选择4.模型代码运行下图介绍了如生成代码如何通过TLC被编译并下放到目标环境运行的原理:图5编译目标代码过程模型代码生成并编译为指定平台可执行文件后,只要目标环境平台配置得当,就可以将生成的可执行文件下放到目标环境运行了。在实验中我们使用了普通ERT方式生成代码,其编译器默认使用是Matlab自带的Lcc。使用此编译器编译模型生成的代码文件testmodel.c可实现EXE文件的生成(生成代码中有make文件可用,工具可选择直接生成可执行文件。并可用于本地环境运行(因为普通ert.tlc不是针对具体目标环境生成的,而仅仅是提供ERT代码的格式样板,不含与特定操作系统和编译器有关内容,所以编译生成后可直接本地运行。5.总结由本文可鉴,通过模型设计的方式开发嵌入式软件可以大大节省项目在开发时间和人力上的投入,工程师可以将注意力集中在模型的设计和验证上,而屏蔽了各种应用中的实现细节(这些都由tlc文件来完成。大量事实表明,RTW生成的代码在效率和代码可读性等方面足以与优秀的手写代码媲美。以模型方式进行嵌入式软件的开发,在动辄上万行的系统中优势尤为明显。参考文献:1.TheMathWorksInc.Real-TimeWorkshopforUsersWithSimulink.User'sGuideVersion6TheMathWorksInc,2006092.MATLAB/SIMULINK在动态系统仿真中的应用聂春燕长春大学学报2001.023.基于MATLAB环境的实时仿真研究边新迎等微计算机信息2006年第22卷第7-1期4.Real-TimeWorkshop?EmbeddedCoderForUsewithReal-TimeWorkshop?User'sGuideVersion4TheMathWorksInc,20065.Stateflow?andStateflow?CoderForUsewithSimulink?User'sGuideVersion6TheMathWorksInc,20060980