首页>>科技 >>内容

g编程实例及解释图解,Giotto编程技术、特点及实现嵌入式应用设计

发布时间:2023-10-17 12:04:12编辑:温柔的背包来源:

很多朋友对g编程实例及解释图解,Giotto编程技术、特点及实现嵌入式应用设计不是很了解,每日小编刚好整理了这方面的知识,今天就来带大家一探究竟。

g编程实例及解释图解,Giotto编程技术、特点及实现嵌入式应用设计

作者:雷万军、张云生、陈英、陈辉

随着计算机技术、控制技术、信息技术的快速发展,工业生产和管理方式已进入生产自动化和智能控制时代。特别是分布式嵌入式系统的应用需要标准化、实时的控制模块和I/O系统。 o 功能模块方便系统集成,构建适合恶劣环境的复杂分布式系统。实时嵌入式软件模块适用于无复杂设计的分布式系统。支持分布式、异构设备的系统搭建和构建。嵌入式模块的作用是提供使复杂性易于处理的结构和技术。基于Giorio的嵌入式控制设备更适合具有硬实时控制约束的应用。本文中的平台是指硬件结构、操作系统和通信协议,由CPU、传感器、执行器和网络组成。与平台无关的事件包括应用程序功能和计时,而与平台相关的事件包括计时、通信和物理特性。

1 Giotto编程特点

传统的实时嵌入式软件设计基于抽象的数学模型。控制工程师使用软件工具根据对象行为和环境影响来求解模型,以获得模型的功能和性能,然后交给软件工程师为给定的平台编写软件。制定代码并在给定平台上检查和优化它,直到获得满意的计时行为。在这个过程中,模型和代码之间的紧密对应关系往往会丢失,放弃软件的复杂性,增加软件设计的复杂性。由此产生的软件被削弱并且难以在不同平台上应用。

基于Giotto的嵌入式控制软件设计将功能程序与特定平台分离、时间限制与功能分离。其平台独立性使其具有更好的实时性、可靠性和复用性,更适合嵌入式实时分发系统。图l是基于Giotto的嵌入式控制系统的设计流程图。首先,控制工程师和软件工程师就控制设计的功能和时限达成一致,设计出Giotto程序;然后,软件工程师使用Giotto编译器生成可执行代码,该代码可以连接到Giotto运行时库并将程序映射到给定的平台。 Giotto 运行时库提供了用于计时和通信的中间层。该层定义了Giotto 可执行程序和平台之间的接口。 Giotto 运行时库是为Intel x86 机器上的Wind River VxWorks 实时操作系统构建的。

2 Giotto编程技术

Giotto 是一种独立于平台的高级编程语言,用于特定控制领域。 Giotto 专为需要定期传感器获取、任务调用、更新执行和模式转换的要求严格的控制应用而设计。 Giotto基于时间触发编程,从传感器到CPU以及CPU到执行器的通信由全局时钟触发,使其具有可预测性。 Giotto程序没有指定优先级、通信等与平台相关的部分,其优点是与具体执行平台无关,兼容任何实时操作系统、调度算法和实时通信协议。

Giotto的两个核心组件是:周期性任务调用和模式转换。 Giotto 程序指定了一系列模式,每种模式都包含一系列任务和模式转换。在每个时刻,程序都在特定的模式P下执行。每个P模式转换都包含一个评估函数和一个目标模式Q。只有当评估函数为真时,系统才会切换到新的模式Q。

Giotto任务是一个周期性工作,其输入和输出端子分别在任务周期开始和结束时更新。然而,Giotto任务并不一定要在周期开始时启动,它只需要在周期内启动并完成即可。图2(a) 显示了在同一CPU 上运行的40ms 任务M 和10ms 任务N 的时序。虚线表示当前任务占用CPU的可能情况。在Oms处,M和N都读取其输入端口的值;第10ms,任务N的计算结果被写入其输出端口,但N已经结束执行(如图中虚线所示);在第40ms时,任务M的计算结果被写入其输出端口,但任务M在40ms之前已经执行完毕。无论任务M是否在0到40ms的任何时间完成计算,任务N只会在第40ms读取其结果。

Giotto 中的一项任务可以被视为一个工作单元。一旦开始,就必须完成。在任务周期结束之前,模式转换不能终止任何任务。给定一个Giotto模式P(包括分别在40ms和10ms调用的Giotto任务M和N)和Giotto模式Q(包括分别在40ms和5ms调用的Giotto任务M和R)。图2(b)显示了P模式下的10ms模式转换被激活的时序,当模式P转换到模式Q时。由于P和Q都包含任务M,所以任务M不会终止,但任务N将被任务取代R的周期为5ms。

3 物流系统自动驾驶汽车设计

2 自动驾驶汽车系统包括2 辆自动驾驶汽车,每辆汽车都包含微处理器、电机和触摸传感器。规定任何时候只有一辆自动驾驶汽车是领导者,其他自动驾驶汽车是跟随者。其中,处于领先或避让状态的自动驾驶汽车称为“领导者”,处于跟随或停止状态的自动驾驶汽车称为“跟随者”。当leader被阻挡时,leader进入回避状态,follower进入停止状态。进入避让状态的自动驾驶汽车执行避让程序来躲避障碍物。此时,处于停止状态的自动驾驶汽车仍然停止;当领导者完成回避程序并返回领导状态时,跟随者返回跟随状态。当其中一名跟随者被阻挡时,自动驾驶汽车进入回避状态,所有其他自动驾驶汽车进入停止状态,被阻挡的自动驾驶汽车成为新的领导者。图3 显示了2-自主汽车系统的状态行为。

由于当其他自动驾驶汽车处于跟随或停止状态时,自动驾驶汽车处于领先或回避状态,因此每个领导者X使用1个LeildXFollow模式和1个EvadeXStop模式。其中,当处于LeadlFollow模式时,自动驾驶汽车l是领导者;当处于Evadelstop模式时,自动驾驶汽车执行避让程序。此外,为每辆自动驾驶汽车X引入了stopX模式,允许自动驾驶汽车快速停止。 runCom1 任务每40 ms 运行一次存储在输出端口命令中的命令。两个Giotto任务rrailerCtrl和trailerCtr2的周期为10ms。他们根据指令中的命令控制两辆自动驾驶汽车的电机;命令中的数据由任务驱动程序trailerDrv传输到任务trailerCtrl和trailerCtr2的输入端口。

该系统分别连续检测自动驾驶汽车1 和2 的传感器。当自动驾驶汽车1被阻挡时,系统切换到stopl模式。两辆自动驾驶汽车都停止行驶;完成stopl模式后,系统切换到EvadelStop模式。此时,自动车1执行回避程序,自动车2停止。类似地,当自动驾驶汽车2被阻挡时,自动驾驶汽车2在经过stop2模式之后切换到Evade2Stop模式。 EvadelStop模式下,Evadel任务每个周期计算一次回避动作是否完成以及下一个回避动作;任务trailerCtrl以10ms为周期,根据命令中的避让步骤控制自动驾驶汽车1的电机。一旦回避动作完成,就会切换到LeadlFollow模式。

图4是系统从LeadlFollow模式到stopl模式、EvadelStop模式和LeadlFollow模式的模式转换时序图。在LeadlFollow 模式中,到stopl 模式的转换发生在第60 ms。自动驾驶汽车l的传感器检测到障碍物,系统从LeadlFollow模式转换到stopl模式。两辆自动驾驶汽车执行停止程序;完成stopl模式后,系统在第80 ms切换到另一个模式EvadelStop。立即调用自动驾驶汽车1的控制任务,自动驾驶汽车1执行回避程序。此时,自动驾驶汽车2仍然停止。当自动驾驶汽车1完成避让动作后,在110ms时,立即调用两辆自动驾驶汽车的控制任务,系统切换到LeadlFollow模式。当自动驾驶汽车2处于领先地位时,其模式转换类似。

4。结论

在基于Giotto的嵌入式控制设计中,定时程序和功能程序的分离使得Giotto程序独立于具体的操作平台,从而提高了程序的健壮性、稳定性和代码复用性。 Giotto系统中任务的调用和环境变量的检测均由全局时钟触发,其时间行为具有高度可预测性,使得Giotto非常适合具有硬实时约束的嵌入式控制系统。

以上知识分享希望能够帮助到大家!