康瑞航,王 毅,郝 飞,严 宇,刘 奇,张 旭
(陕西万方汽车零部件有限公司,陕西 西安 710200)
车身控制器是重型汽车的重要零部件,直接影响到重型汽车灯具、油量检测和燃油防盗逻辑、机油压力和品质判定检测、差速锁控制、雨刮控制、电源管理、信号转发、挂车检测以及参数标定等功能要求。
以转向灯程序为例:日间行车灯作为重型汽车上使用最频繁使用的灯具。
在技术要求都明确后,进行程序设计:设计程序时执行不同功能需要设计不同的优先级、使用比较频繁就需要有即时和稳定考虑故障检测以及故障报警程序设计。为保证这些需求常规手写代码,分层程序设计需要至少三层的程序设计:底层用于驱动程序设计、中间层用于不同的功能逻辑程序设计和负载开段路诊断程序设计、顶层用作不同优先级调用程序的设计。
如图1 所示转向灯程序列表,为左右两侧日间行车灯灯的控制程序。
图1 某重型汽车的日间行车灯函数列表
如图2 某重型汽车的部分转向灯驱动原理图通过控制VND5T035AKTR-E 芯片的INPUT(1/2)进而控制OUT(1_x/2_x)输出电平的高低来控制负载灯具的亮灭:
图2 某重型汽车的部分日间行车驱动原理图
底层驱动程序阶段,根据功能的不同,以驱动芯片的输入端为参数,编写底层驱动程序,当打左转型灯时,调用相应端口为参数的底层驱动程序,完成底层程序的编写和验证后,需要完成底层程序的说明性文档,以供应用层调用时理解和以后测试的依据性文档。
中间层程序阶段,分两部分功能逻辑程序,逻辑:点亮或关闭日间行车灯;诊断:通过周期性检测工作时各个输出端口的分压电阻上的电压值判断负载状态,并将相应标志位置位。完成中间层程序的编写和验证后,需要完成中间层程序的说明性文档,以及其他工程师调用时理解和以后测试的依据性文档。
顶层间层程序阶段,编写调用程序,通过检测各个开关状态确定转型灯的工作状态。根据优先级关系调用相应功能程序完成相应功能。完成顶层程序的编写和验证后,需要完成顶层程序的说明性文档,以及其他工程师调用时理解和以后测试的依据性文档。
最后,将各个层次程序统一放置在只含转向灯程序的C文件中,通过main 函数中相应周期时间执行函数中调用顶层程序实现相应功能,并完成整个功能模块程序的技术文档。
基于Stateflow 模型代码主要分为以下步骤,(1)需求分析;(2)系统规范;(3)子系统设计;(4)子系统实现;(5)子系统集成和测试;(6)分系统集成和测试;(7)全系统集成和测试[1]。本例以日间行车灯模块为例,在清楚需求后以Stateflow 状态转移为核心搭建相应功能的逻辑模型。
如图3 所示日间行车灯模型总体包含电源状态、灯光开关状态、点火开关状态、日间行车灯负载诊断标志位状态作为输入条件,日间行车灯命令为输出动作。
图3 日间行车灯模型总体
如图4 所示日间行车灯模型内部第一层状态转移图展示了将灯光开关和钥匙这两个同一级输入通过图5 所示真值表为逻辑条件放在上框图合二为一,和电源状态以及诊断标志状态作为逻辑模块的输入条件[2]。
图4 日间行车灯模型内部第一层状态转移图
图5 上框图内部真值表
如图6 所示为日间行车灯模型最内层逻辑状态图,以输入条件为状态转移条件,实现日间行车诊断和亮灭控制。
图6 图4下框图内部状态转移图
完成模型搭建和模拟验证,就可以进行Stateflow Coder目标编译生成嵌入式C 代码。
如图7 所示在求解器(Solver)中设置步长为固定步长(Fixed-step)。
图7 在参数设置框设置步长
如图8 所示在参数设置框配置模型,设置目标编译器为ert.tlc->Embedded Codery 语言选择为C,应用并保存设置[3]。
图8 在参数设置框配置模型
图9 代码生成报告框
在设置完所有参数、数据类型以及接口后,点击代码生成按钮Build Model,生成需要的C 代码,将生成的C 文件加载到嵌入式工程中,在功能函数调用部分调用相关调用自动生成的代码即可完成相关逻辑。
对于代码生成还可以通过设置Code Styleg 改变生成的代码的风格以及减少占用更少RAM。
(1)经实验验证两种方式的代码都可以完美实现功能需求。
(2)Stateflow 自动生成代码不需要再根据编写每个环节的说明性文档和测试文档。
(3)Stateflow 自动生成的代码可以在代码生成报告中追溯每一段代码对应的模型。
(3)Stateflow 自动生成的代码可以通过设置取消或者增加代码的标注,方便快捷。
(4)Stateflow 模型的每个阶段都可以进行仿真和验证。
通过Stateflow 自动生成代码技术和传统手写代码对比,Stateflow 自动生成代码技术具有以下优势:
(1)Stateflow 模型就是可执行规范。在基于模型的系统设计过程中,所有过程遵循统一环境下的统一模型。由于模型能够进行仿真计算,因而在设计初期就可以针对设计思想进行仿真验证,这相当于把测试手段从系统设计的初期就引入到整个设计流程中。作为规范的模型能够通过执行仿真来验证自己的正确性,从而保证规范的正确性。
(2)连续不断的测试和验证。在整个基于模型的系统设计过程中,从设计初期就进行离线的算法仿真测试,在产品实现之前通常还有完成快速原型仿真,软件再回路仿真处理器再回路仿真灯步骤,从产品实现之后需要完成硬件再回路仿真,人在回路仿真等集成测试手段。这些测试都是基于前面开发的模型,即每个环节都引入了测试仿真手段。利用充分的仿真,可以考察系统不同组件对整个系统的影响。
(3)自动代码生成。利用自动代码生成技术,工程师摆脱了繁琐的代码编写和调试工作。自动生成代码源头为一步步测试验证过的模型,只要模型正确,则生成的代码也正确。自动代码生成技术使快速原型仿真和硬件在回路仿真成为简单易行的测试手段。而且嵌入式产品代码生成技术则能够帮助工程师节约70%以上的工作时间,极大提高工作效率。一旦测试发现问题,只需要直接追溯模型,修改仿真即可,对于控制器程序升级和后期维护提供便捷渠道。