Giotto编程技术、特点及实现嵌入式应用设计

作者:雷万军,张云生,陈颖,陈辉
1 Giotto编程特点
传统的实时嵌入式软件设计是在抽象的数学模型基础上,控制工程师根据对象行为和环境影响,利用求解模型的软件工具,得到模型的功能和性能,然后交给软件工程师针对给定的平台写出代码,并在给定的平台上检验和优化代码,直到得出满意的时间行为 。在这个过程中,常常丢失了模型和代码之间紧密的对应关系,放弃了软件的复硝性,增加了软件设计的复杂度,因而产生的软件是弱化的,难于在不同的平台上应用 。
基于Giotto的嵌入式控制软件设计将功能程序从特定平台分离,将时限从功能中分离,其与平台无关性使得它具有更好的实时性、可靠性及可复用性,更适合嵌入式实时分布系统 。图l为基于Giotto的嵌入式控制系统的设计流程图 。首先,控制工程师和软件工程师就控制设计的功能和时限达成一致,设计一个Giotto程序;然后,软件工程师使用Giotto编译器产生一个可执行代码,该代码能连接Giotto运行时间库,将程序映射到给定的平台 。Giotto运行时间库提供一个时序安排和通信的中间层,这一层定义了Giotto可执行程序与平台之间的接口 。目前已经建立了一个Giotto运行时间库,用于Intel x86机上Wind River的VxWorks实时操作系统 。
【Giotto编程技术、特点及实现嵌入式应用设计】 2 Giotto编程技术
Giotto是一种与平台无关,且在特定控制领域应用中具有高水平的编程语言 。Giotto的设计用于高要求的控制应用,这些应用要求周期性地渎取传感器,调用任务,更新执行和模式转换 。Giotto基于时间触发编程,从传感器到CPU以及CPU到执行器之问的通信由全局时钟触发,使其具有可预报性 。Giotto程序不指定与平台相关的部分,如优先权、通信等 。其优点是与具体的执行平台无关,能与任何实时操作系统、调度运算法则以及实时通信协议兼容 。
Giotto的两个核心组成部分是:周期性的任务调用和模式转换 。一个Giotto程序指定一系列的模式,每一种模式又包含一系列的任务和模式转换 。每一时刻,程序都执行在特定的模式P下,每个P模式转换包含1个评估函数和1个目标模式Q,只有评估函数为真时系统才转换为新模式Q 。

Giotto编程技术、特点及实现嵌入式应用设计
文章插图
Giotto任务是一项剧期性的工作,其输入和输出端几分别在任务周期的启动和结束时更新,但Giotto任务不一定要在周期开始时启动,只需在周期内启动和完成 。图2(a)显示了运行在同一个CPU上的1个40ms任务M和1个10ms任务N的时序,虚线为目前任务占用CPU的可能情况 。在第Oms,M和N都读取它们输入端口的值;在第10 ms,任务N的计算结果写入它的输出端口,但是N早已结束执行(如图中虚线所示);在第40 ms,任务M的计算结果写入它的输出端口,但任务M在第40ms之前已经完成执行 。无论任务M在0~40 ms的任何时间完成计算,任务N都只会在第40 ms读其结果 。

Giotto编程技术、特点及实现嵌入式应用设计
文章插图
在Giotto中一个任务可以看作是一个工作单元,一旦开始,就必须要完成 。任务周期没结束时,模式转换不能终止任何任务 。给定一个Giotto模式P(包括分别由40 ms和10 ms调用的Giotto任务M和N)和一个Giotto模式Q(包括分别由40ms和5ms调用的Giotto任务M和R) 。图2(b)显示了在P模式中的第10ms模式转换被激活的时序,此时模式P转换为模式Q 。由于P和Q都包含任务M,所以任务M不会终止,但任务N被周期为5ms的任务R代替 。
3 物流系统自主小车设计
2一自主小车系统包括2个自主小车,每个自主小车包含一个微处理器、马达和触摸式传感器 。设定在任何时候只有一个自主小车是领导者,而其他自主小车是跟随者 。其中,处于领导或避开状态的自主小车称为“领导者”,处于跟随或停止状态的自主小车称为“跟随者” 。当领导者被阻碍时,领导者进入避开状态,跟随者进入停止状态 。进入避开状态的自主小车执行一段避开程序,以避开障碍物,此时处于停止状态的自主小车仍停止;当领导者完成避开程序返回到领导状态时,跟随者返回跟随状态 。当跟随者之一被阻碍时,该自主小车进入避开状态,其他所有的自主小车进入停止状态,被阻碍的这个自主小车成为新的领导者 。图3显示了2一自主小车系统的状态行为 。

Giotto编程技术、特点及实现嵌入式应用设计
文章插图
由于自主小车处于领导或避开状态时其他自主小车处于跟随或停止状态,因此对每一个领导者X使用1个LeildXFollow模式和1个EvadeXStop模式 。其中,处于LeadlFollow模式时,自主小车l是领导者;处于Evadelstop模式时,自主小车l执行避开程序 。另外,为每个自主小车X引入一个stopX模式,它允许自主小车快速停止 。runCom1任务每40 ms运行一次存储于输出端口 command中的命令 。两个Giotto任务rrailerCtrl和trailerCtr2具有lOms的周期,它们根据command中的命令控制两个自主小车的马达;command中的数据由任务驱动trailerDrv传送到任务trailerCtrl和trailerCtr2的输入端口 。
系统分别对自主小车l和2的传感器不断地进行检测 。当自主小车1被阻碍时,系统转换到stopl模式 。两个自主小车都停止移动;完成stopl模式之后系统转换为EvadelStop模式.此时自主小车l执行避开程序而自主小车2停止不动 。类似地,当自主小车2被阻碍时,自主小车2经过stop2模式后转换到Evade2Stop模式 。在EvadelStop模式下,Evadel任务每一周期计算一次避开动作是否完成以及避开的下一步动作;具有10ms周期的任务trailerCtrl根据command中避开的步骤去控制自主小车1的马达,一旦完成避开动作,就转换为LeadlFollow模式 。
图4为系统从LeadlFollow模式到stopl模式,EvadelStop模式和LeadlFollow模式的模式转换时序图 。到stopl模式的转换发生在LeadlFollow模式下的第60 ms,自主小车l的传感器检测到障碍,系统由LeadlFollow模式转换为stopl模式.两个自主小车执行停止程序;完成stopl模式后,在第80 ms系统转换为另外一个模式EvadelStop,自主小车1的控任务立刻被调用,自主小车l执行避开程序,此时自主小车2仍停止;当自主小车1完成避开动作后,在第110ms,两个自主小车的控制任务立刻被调用,系统转换为LeadlFollow模式 。当自主小车2是领导者时,其模式转换类似 。

Giotto编程技术、特点及实现嵌入式应用设计
文章插图
4 结论
在基于Giotto的嵌入式控制设计中,时序程序与功能程序的分离,使Giotto程序与具体的运行平台无关,从而提高了程序的健壮性、稳定性及代码的复用性 。Giotto系统中任务的调用和环境变量的检测由全局时钟触发,其时间行为具有高度可预报性,使得Giotto非常适合具有硬实时约束的嵌入式控制系统 。
责任编辑:gt
.dfma {position: relative;width: 1000px;margin: 0 auto;}.dfma a::after {position: absolute;left: 0;bottom: 0;width: 30px;line-height: 1.4;text-align: center;background-color: rgba(0, 0, 0, .5);color: #fff;font-size: 12px;content: "广告";}.dfma img {display: block;}
Giotto编程技术、特点及实现嵌入式应用设计
文章插图

    推荐阅读