Giotto编程技术、特点及实现嵌入式应用设计
作者:雷,陈颖,
随着计算机技术、控制技术和信息技术的快速发展,工业生产和管理模式已经进入生产自动化和智能控制时代,特别是分布式嵌入式系统的应用,需要标准化、实时化的控制模块和I/O功能模块,以集成系统,构建适用于恶劣环境的复杂分布式系统。嵌入式软件模块适用于不复杂的分布式系统,支持分布式和异构设备的系统设计和构建。嵌入式模块的功能是提供使复杂性易于处理的结构和技术。基于Giorio的嵌入式控制设计更适合实时性控制要求严格的应用。本文中的平台是指硬件结构、操作系统和通信协议,由CPU、传感器、执行器和网络组成。平台无关事件包括应用功能和时间限制,而平台相关事件包括调度、通信和物理特性。
1 Giotto编程功能
传统的实时嵌入式软件设计是基于抽象的数学模型。控制工程师根据对象行为和环境影响,利用软件工具对模型进行求解,得到模型的功能和性能,然后交给软件工程师编写给定平台的代码,在给定平台上对代码进行测试和优化,直到得到满意的时间行为。在这个过程中,模型和代码之间的紧密对应往往会丢失,软件的复杂性被抛弃,软件设计的复杂性增加。因此,产生的软件很弱,难以在不同的平台上应用。
基于Giotto的嵌入式控制软件设计将功能程序与具体平台分离,将时间限制与功能分离。其平台无关性使其更具实时性、可靠性和可重用性,更适合于嵌入式实时分布式系统。l是基于Giotto的嵌入式控制系统的设计流程图。首先,控制工程师和软件工程师商定控制设计的功能和时限,设计一个Giotto程序;然后,软件工程师使用Giotto编译器生成可执行代码,该代码可以连接Giotto运行时库,并将程序映射到给定的平台。Giotto运行时库提供了一个调度和通信的中间层,它定义了Giotto可执行程序和平台之间的接口。目前已经为Wind River的VxWorks实时操作系统在Intel x86上建立了Giotto运行时库。
2 Giotto编程技术
Giotto是一种平台无关的编程语言,在特定的控制领域有很高的应用水平。Giotto专为高要求的控制应用而设计,这些应用需要定期的传感器滥用、任务调用、更新执行和模式转换。Giotto基于时间触发编程,传感器与CPU、CPU与执行器之间的通信由全局时钟触发,具有可预测性。Giotto程序没有指定与平台相关的部分,如优先级、通信等。它的优点是与具体的执行平台无关,可以兼容任何实时操作系统、调度算法和实时通信协议。
Giotto的两个核心组件是:周期性任务调用和模式转换。Giotto程序指定了一系列模式,每个模式包含一系列任务和模式转换。在每一时刻,程序都以特定的模式P执行,每一次P模式转换都包含一个评价函数和一个目标模式q,只有当评价函数为真时,系统才会转换到新的模式q。
Giotto task是一个戏剧性的工作,它的输入和输出分别在任务周期的开始和结束时更新。但是,Giotto task不一定要在周期开始时启动,只需要在周期内启动并完成即可。图2(a)示出了在同一CPU上运行的40毫秒任务M和10毫秒任务N的时序。虚线表示当前任务占用CPU的可能情况。在Oms中,M和N都读取其输入端口的值;在第10th ms时,任务n的计算结果被写入其输出端口,但n的执行已经结束(如图中虚线所示);在第40 ms,任务M的计算结果被写入其输出端口,但任务M在第40 ms之前已经被执行过,无论任务M在0到0~40 ms的任何时间完成计算,任务N都只会在第40 ms读取结果.
在Giotto中,任务可以被视为一个工作单元。一旦开始,就必须完成。当任务周期没有结束时,模式转换不能终止任何任务。给定Giotto模式p(包括分别由40ms和10 ms调用的Giotto任务m和n)和Giotto模式q(包括分别由40 ms和5ms调用的Giotto任务m和r)。图2(b)示出了当P模式中的10ms模式转换被激活时的时序,此时模式P被转换到模式Q。由于P和Q都包含任务M,所以任务M不会被终止,但是任务N被周期为5 ms的任务R替换
3物流系统独立汽车设计
自动驾驶汽车系统包括两辆自动驾驶汽车,每辆汽车都包含一个微处理器、一个电机和一个触摸传感器。设定任何时候只有一辆自动驾驶汽车是领导者,其他自动驾驶汽车是跟随者。其中,处于领先或避让状态的自主车称为领导,处于跟随或停止状态的自主车称为追随者。当领导者被阻挡时,领导者进入回避状态,追随者进入停止状态。进入回避状态的自主车执行回避程序以避开障碍物,而处于停止状态的自主车仍然停止;当领导者完成回避程序并返回到领先状态时,跟随者返回到跟随状态。当其中一个跟随者被阻挡时,自主车进入避让状态,其他所有自主车进入停止状态,被阻挡的自主车成为新的领导者。图3显示了2-1自主汽车系统的状态行为。
由于自主车处于引导或避让状态,其他自主车处于跟随或停止状态,所以每个引导车x使用一个LeildXFollow模式和一个EvadeXStop模式,其中,在LeadlFollow模式下,自主车L为引导车;当处于回避停止模式时,自主车辆L执行回避程序。此外,为每个自主车辆X引入了stopX模式,这允许自主车辆快速停止。RunCom1任务每40 ms运行一次输出端口command中存储的命令,两个Giotto任务rrailerCtrl和trailerCtr2有lOms周期,它们根据command中的命令控制两个自主车的电机;命令中的数据由任务驱动的trailerDrv传送到任务trailer tr1和trailerCtr2的输入端口。
该系统分别连续检测自主车辆1和2的传感器。当自主车辆1被阻挡时,系统切换到stopl模式。两辆自动驾驶汽车都停止移动;Stop模式完成后,系统切换到EvadelStop模式。此时,自主汽车L执行回避程序,自主汽车2停止。类似地,当自主车辆2被阻挡时,自主车辆2经过stop2模式,然后切换到Evade2Stop模式。在EvadelStop模式下,Evadel task每循环计算一次回避动作是否完成,以及回避的下一个动作;10ms周期的任务trailerCtrl根据命令中的避让步骤控制自主车1的电机,一旦避让动作完成,将切换到LeadlFollow模式。
图4是系统从Leadfollow模式到Stop模式、EvadelStop模式和Leadfollow模式的模式转换的时序图。在Leadfollow模式的第60th ms,转换到stopl模式。自主汽车L的传感器检测到障碍物,系统从引导跟随模式变为停车模式。两辆自动驾驶汽车执行了停车程序;Stop模式完成后,系统在80 ms内切换到另一种模式EvadelStop,自动车1的控制任务立即被调用,自动车L执行避让程序,而自动车2仍然停止;当自主车1完成避让动作后,两台自主车的控制任务立即在110ms内被调用,系统切换到引导跟随模式。当自主车2领先时,其模式转换类似。
4结论
在基于Giotto的嵌入式控件设计中,顺序程序和功能程序的分离,使得Giotto程序独立于具体的运行平台,从而提高了程序的健壮性、稳定性和代码重用性。Giotto系统中任务的调用和环境变量的检测由全局时钟触发,其时间行为具有高度的可预测性,这使得Giotto非常适用于实时性有硬约束的嵌入式控制系统。
推荐阅读
- 常见的码率控制模式CBR、VBR、CRF和Capped-CRF
- 台灯哪个品牌好,台灯的十大品牌,台灯什么牌子好
- 2020年杭州中考第一批最低录取分数线(2020年杭州中考第一批录取分数线出来了)
- 快剪辑怎么剪辑文章中间部分,快剪辑怎么剪辑文章
- oppo reno 6长度? oppo reno6
- 怎么洗掉铁锈
- 前挡风玻璃贴膜有没有必要_前挡风玻璃贴膜
- ps换脸操作步骤,photoshop之完美换脸教程
- 成都东软学院2020学费多少(成都东软学院本科学费多少)
- 如何快速去除蟑螂药的味道小妙招,如何快速去除蟑螂
- 六界仙尊辅助盒子游戏介绍(六界仙尊辅助盒子)
- 侠盗猎车手圣安地列斯怎么不掉血,侠盗猎车手圣安地列斯怎么无限血
- 2021年12左右最省油的合资suv? 十二万合资suv排名
- 怎样正确认识自己,怎样正确吃西餐
- 怎么用手机破解wi-fi密码,手机如何破解wifi密码蹭网
- 山东高考分数线一段线二段线是什么意思(山东高考成绩一段线二段线什么意思)
- 电子地图管理系统,采用J2ME技术的手机地图服务系统设计
- 荣耀6Plus可以更新鸿蒙系统吗? 华为荣耀6plus参数
- 蛏子怎样去除内脏图解,蛏子怎么快速去内脏