第一周,老师讲了实时控制系统的历史和实现方法,在做案例分析前我想先通过听课和网上的资料总结一下实时控制系统的特点:
“实时系统是能够在确定的时间内执行计算或处理事务并对外部事件作出响应的计算机系统“,正好最近在学微机原理,也正好上到了中断程序那一章,咦我就在想,好像用中断程序也可以 “执行计算或处理事务并对外部事件作出响应” 不过马上又反应过来,好像在执行中断程序的时候不能响应别的中断,如果想要响应的话还要在中断服务里面再加一个中断,突然发现稍微复杂一点的控制,中断就不够用了;而且更重要的是响应的时间慢,对于那种要求很快速响应的外部事件(我记得看过一部关于某可乐公司易拉罐的生产线上面,最后踢除不合格产品的时候,就是在输送线上加一个传感器和机械手,检测到不合格的产品,机械臂立马把它“弹”出去,那输送线的速度真是飞快,要从检测到机械臂做出动作最多只能有很短的反应时间)可能就无能为力了。我就大概明白实时控制系统为什么主要用在工业控制中了。
上图是RT-Linux系统的结构,Linux运行在实时核心下,实时内核直接管理硬件中断,如果中断是实时中断,那么就直接执行实时操作,几乎没有延时,实时操作完了再运行Linux进程 “具体地说就是当有实时任务要完成时,实时操作系统运行实时内核下的任务;当没有实时任务时,实时内核调度 Linux运行。所以Linux是实时内核中优先级最低的一个任务。”
上面提到了踢除不合格易拉罐的机械手,那我就分析这个案例。
首先要保证检测到不合格产品,1.传感器的实时检测功能是必须的,然后就是检测到不合格产品时,2.机械手实时做出动作也是必须的;最后为了保障员工安全,如果检测到机械手前方有人就不能执行动作,3.那么实时检测是否有人也是必要的。因为输送带上易拉罐传送的速度很快,算上机械手的延时时间和传感器的延时时间,那么允许的实时延迟大概在零点几个毫秒。
这些实时时间都是触发的,产品不合格或者前方有人。
检测到产品不合格机械手踢除产品是基于前方没有检测到人才能执行的。所以并不独立。
共享的硬件比如机器人控制器。
扩展:在Linux里还可以运行一些非实时的模块,比如显示两个传感器的数据,显示机械手的状态,这些都是先经过实时内核处理,执行完成实时进程之后,再传输给Linux,Linux再显示出来。