RTI知识介绍dSPACE培训教程2;RTI基础知识RTI高级应用总结3)实现使用dSPACE硬件功能的模块库)与普通的Simulink模块的使用无异)通过GUI界面配置I/O通道RTI:dSAPCE与RTW的接口RTW/RTIRTW/RTIRTIRTI4RTI:用户接口界面5RTI:启动)如何打开RTI库:•在MATLAB命令行下键入rti,图(a)•打开Simulink,使用Simulink浏览器,图(b))如何开始生成代码:(b)(b)(a))dSPACE处理器和I/O板模块库•所有的模块都是MATLAB/Simulink库中的模块•板卡和处理单元的名称作为模块名字的关键字(不允许改动))中断处理模块库•HW(硬件)中断处理模块•SW(软件)中断处理模块(a)6RTI在代码生成中的作用 自动产生包含RTI模块的Simulink框图模型代码,应用于fRapidControllerPrototyping(RCP)快速控制原型fHardware-In-The-Loop-Simulation(HIL)硬件在回路仿真 支持的系统类型f连续系统(Continuous)f离散时间系统(Discretetime)f混合系统(Hybrid) 为ControlDesk进行准备f自动创建SDF文件(和TRC文件)fHost_service(x,y)f仿真控制f错误处理操作Errorhandling 将生成的实时代码载入到处理器系统上TargetLanguageCompilerRTWfile(database)Systemtargetfile:rti1003.tlcRTWFunctionLibraryRTIFunctionLibrary.c.h.prm.reg.io.trc.sdf.tlc.tlcBlock-levelTLCfilesBlock-levelTLCfilesRTWRTITargetLanguageCompilerRTWfile(database)Systemtargetfile:rti1003.tlcRTWFunctionLibraryRTIFunctionLibrary.c.h.prm.reg.io.trc.sdf.tlc.tlcBlock-levelTLCfilesBlock-levelTLCfilesRTWRTI7RTW选项对话框:Targetconfiguration模型的积分算法和基本计算步长(固定步长),选择单任务(single)或多任务(Multitasking)模式make_rti(M文件):•调用TLC编译器•基于makefile模板生成模型专属的makefile•调用make工具•用户也可以制定build选项Build:执行编译、连接代码并下载生成的实时代码rtixxxx.tlc:选择控制模型所生成代码样式的Targetlanguagecompiler文件rtixxxx.tmf:控制代码编译和连接过程的模板makefile8作用于Build过程的本地RTI选项9I/O操作可以包含在触发和使能子系统中的I/O模块友好,易用的对话框界面Ground和terminator模块用于标明未被使用的通道不同通道运行在不同采样速率10典型的应用开发流程创价被控对象的原理模型形成初步的控制算法设计通过离线仿真测试设计的控制算法生成模型的实时代码在ControlDesk中进行设定以采集数据,观察并改变变量在模型中设定I/O11Real-TimeFrame—实时构架 RTI:rti_sim_engine.c(DSPACE_ROOT\MATLAB\rti1005\c) Simulink模型实时执行的C代码构架f基于Simulink仿真的数据类型(SimstructS)f主函数y硬件(HW)/软件(SW)初始化y后台任务Backgroundtask实时模型运行的控制(START,PAUSE,STOP)f定时器驱动中断服务例程程序yI/O调用(actioncalls)y多速率模型运行的调度(dSPACE实时内核)y用于进行参数设置和信号采集的ControlDesk服务yTurnaroundtimeprofilingfPHS-总线中断驱动f软件中断驱动(Softwareinterruptdriven)12 RTI基础知识;RTI高级应用 总结13RTI:TaskLibLibraryITimerATimerB 实现第二个定时器任务:f应用:y创建第二个任务,其采样时间间隔不是第一个任务的整数倍y创建具有较高优先级的慢任务f模块:yTimerInterrupt(A,B,C)14RTI:TaskLibLibraryII 如何创建一个硬件中断触发的任务:f应用:y计算,处理系统中与定时器中断不同步的部分y由外部信号驱动的任务y可以指定任务的优先级(见TaskHandling对话框)f使用模块:yHWInterruptBlock(I/O模块库)当软件中断发生时触发执行 如何创建一个软件中断触发的任务:f应用:y创建一个具有细分调度的系统y为系统的不同部分指定不同的运行优先级15RTI:TaskLibLibraryIII 如何将一个子系统设置成后台任务:f应用:y优化或其他计算进程,他们无需实时运行(在系统中优先级最低)子系统的执行可能依赖于当前的simState 如何实现合法的任务内容传递f所有在不同中断驱动子系统之间,不同定时器任务之间,或两类系统之间传递的数据必须通过一个合法的任务转换进行。f应用:y数据一致性要求并不严格时f使用模块:yNon-BufferedTaskTransition16RTI:TaskLibLibraryIV 如何使用外部事件触发整个系统:f应用:y使模型运行与外部事件同步,例如用于交流电机的PWM信号f使用模块:yTimerTaskAssignment模块 如何保证在中断驱动子系统间矢量数据传递的一致性:f使用模块:yBufferedTaskTransition(Read)yBufferedTaskTransition(Write)17时间触发的任务f应用:在发动机火花塞点火后n毫秒后进行一次测量yn的量值取决于几个参数,例如发动机转速和加速度。使用定时器触发任务可以实现这一过程。y用一个时间表可以实现若干次测量。 TimeTriggerSetBlockf设定一个或多个任务触发延迟时间,在延迟后相应的时间触发任务被调度执行。 TimeTriggeredTaskBlockfTime-TriggerSetblock设定的任务触发延迟时间到达时,执行其所连接的function-call子系统。 TimeTableStartBlockf用来指明记录开始延迟计时的时刻的列表,和对应时间列表的任务模块。 TimeTableTaskBlockf用于设定任务触发延迟时间并在任务触发延时到达时(加上另外可选的TimetableStart模块设定的启动延时时间)执行与其连接的function-call子系统。18RTI:ExtrasLibraryI 如何读出系统的simState值:f模块:ysimStateREAD:f读出当前的simState值y0:STOPy1:PAUSEy2:RUNf该模块应置于设为后台执行任务的子系统中 如何设置模型的仿真状态:f模块:ysimStateSETf配置触发或使能端口f模块被执行时设置simState的值19RTI:ExtrasLibraryII 在一个实时模型里如何实现不同的数据采集服务:f应用:y与不同的任务同步来采集数据,例如硬件中断,第二个定时器,等等。 PPC平台上(DS1005,DS1401,DS1103):可以使用时戳Time-stampingfx-轴单位是秒20实时构架:单定时器和多定时器任务模式 单任务模式Single-taskingmode(缺省)f单速率系统(只有一个任务)y使用单任务模式效率最高f多速系统(多于一个任务)y生成的代码在一个时间步长里被中断服务例程调用y所有模块的采样时间必须是基本采样时间的整数倍y采样点控制的运行机制 多任务模式Multitaskingmode(可选)fSimulink/Simulation/Parameters/Solverf多速率系统(超过一个任务)y不同任务都被赋予不同任务优先级y只有一个定时器中断服务程序(ISR)运行在基本采样时间上y任务调度决定哪一个任务要被执行进行超时检查(超时:某个任务在前一个任务完成之前被要求执行)提前Overhead?1.非多速率模型2.高优先级的速率任务运算负荷高低优先级的速率任务运算负荷低1.高优先级的速率任务运算负荷低低优先级的速率任务运算负荷高B1B2B2B1B1定时器中断T1T2B1B1B1B1B2B2B2B221Ts1=1msTaskT1Ts2=2msTaskT2Ts3=4msTaskT3Time[msec]01234PriorityInterruptT1T2T3定时器驱动的任务 通过以下方式有效的处理多速率系统f任务抢占式多速率f按速率编排纯连续系统:SignalGeneratorScope1/sIntegratorTz-1T=0.002Tz-1T=0.001SignalGenerator2SignalGenerator1Scope2Scope1Tz-1T=0.002Tz-1T=0.001SignalGenerator3SignalGenerator2SignalGenerator1Scope3Scope2Scope11/sIntegrator纯离散系统(多速率):连续/离散混合系统:22混合任务类型 基于优先级的任务调度f不同的中断类型具有不同的优先级f只有一个连续采样任务23RTI:TaskHandlingDialog 为每个任务指派优先级(不同任务可以具有相同的优先级) 显示中断源,中断模块和任务名称信息 在TRC文件中可以找到变量overruncount(改变量对任务队列和忽略超时选项非常有用) 停止仿真:f当出现超时simState被设置为STOP(0) 任务队列:f安排新的任务实例f任务将尽可能快的被执行f设定允许队列的最大任务实例数量 忽略超时:f中断请求被拒绝24 关闭ControlDesk 保持MATLAB打开,切换到d:\dspace-training\Exercise9目录下,打开模型pidrtdu.mdl 添加一个softwareinterrupt模块驱动的中断驱动子系统 在这个中断驱动的模块种添加一个计数器模型(为memory模块设置合适的采样时间),设置软件中断子系统的优先级最高并生成实时代码 在模型根层次和子系统中分别添加HostService 开始Build进程,然后打开ControlDesk,调入“vcfp_control.lay”并载入他的数据连接“vcfp_control.con”(仪表数据连接关系…)f添加PlotterArray以测量各个turnaround时间f改变任务的优先级,再次分析turnaround时间f使用CaptureSettings仪器检查HostServices的设定f把所有的layouts和.sdf文件保存在实验d:\dspace-training\Exercise9中ExerciseIX:使用软件中断25 关闭ControlDesk 保持MATLAB打开,切换到d:\dspace-training\Exercise9目录下,打开模型pidrtdu.mdl 添加一个由DS4001定时和数字I/O板的userinterrupt1触发的中断驱动子系统 在这个中断驱动的模块中添加一个计数器模型(为memory模块设置合适的采样时间),设置硬件中断子系统的优先级最高并生成实时代码 在模型根层次和子系统中分别添加HostService 将外部信号源连接到DS4001板上(使用INT1) 启动ControlDesk,打开“vcfp_control.lay”并载入他的数据连接f添加PlotterArray以测量各个tu