没有问题的我们,为了任务

基于乐高组件和ROBOLAB软件的工程教学第三章;3.4任务技能牌;任务;NXT已经有了多任务能力,意味着它能够同时执行一;如果你在英特网上冲浪过,你一定遇到过,选择一个链;口,而且关闭一个不会把两个都关掉;3.4.1任务分裂;为了产生一个新的任务,要使用任务分裂命令,这个命;图3.46任务分裂创建独立的程序,每个程序必须有;图3.47.任务编号;任务的地方
基于乐高组件和ROBOLAB软件的工程教学
3.4 任务技能牌
任务 NXT已经有了多任务能力,意味着它能够同时执行一个以上的程序,完成的方法是使用任务。 如果你在英特网上冲浪过,你一定遇到过,选择一个链接会打开一个全新的浏览窗口,此时你有了两个浏览窗口,而且关闭一个不会把两个都关掉。ROBOLAB的任务与此类似,你可以使你的程序产生一个新的任务,就像打开一个新的浏览窗口一样,它将独立于原来的任务运行。直到所有任务结束程序才会结束,这意味着每个任务必须有自己的红色停止灯结尾。你可以最多同时运行9个任务。
3.4.1任务分裂
为了产生一个新的任务,要使用任务分裂命令,这个命令允许你实际上同时运行两个不同的程序,这十分便于同时监视两个传感器。图 3.46 所示程序利用任务分裂去独立的控制马达 A 和马达 B , 以及监视接在输入口1的触感和输入口2的光感,注意,因为任务是独立的,即使一个马达停了(它的任务结束了),另一个将会继续运转。
图 3.46 任务分裂创建独立的程序,每个程序必须有停止灯结束
图 3.47. 任务编号。任务1 在绿灯开始,任务2在起先的地方开始,任务3在第二个任务的地方开始。
36 此书授权西觅亚翻译,版权所有
基于乐高组件和ROBOLAB软件的工程教学
3.4.2硬件冲突 运行独立程序的能力是一把双刃剑,因为程序共享同样的硬件资源,如果一个任务告诉马达 A 正转,而另一个任务在同一时刻告诉它反转,很难预测将会发生什么。冲突解决方法在第5章讲解,但是,确保任务不在同一时刻争抢同一资源来避免冲突还是容易的。 在下面的例子中,下面的任务正向打开马达A ,2秒后上面的任务反向马达A 并结束(尽管上面的任务已结束,程序将继续运行,因为下面的任务仍然有效),两秒后(进入这个程序 4 秒)下面的任务将再次翻转马达方向(正转),等10秒后停止马达 A 并结束程序。因为两个任务在不同的时间控制马达 A ,所以在任务间没有冲突。要点是:确保你知道多任务时可能出现的硬件冲突。
图 3.48 注意看!两个任务正在试图控制马达A
在下个例子中,两个任务争抢控制马达 A ,因为它们都试图在同一时刻控制它。如同我们将在第5章详细描述的,上面的任务将赢得控制,因为它有较高的优先级,即最后的结果是马达A 将正向转动2秒,下面的任务实际上未做任何事,因为它在马达 A 冲突中失去了控制。
图 3.49 马达 A 任务冲突
虽然控制输出可能引起冲突,任务却可以共享输入而没有任何问题。在下面的程序中,一个触感用于终止两个任务,两个任务在同一时刻监视同一个触感。
图 3.50 两个任务监视同一个触感没有问题
37 此书授权西觅亚翻译,版权所有
基于乐高组件和ROBOLAB软件的工程教学
第三章 除了同一时间访问传感器,任务也可以进入容器。实际上,容器仅仅是真正可用到的可以在任务之间共享信息的机构。在下面的例子里,我填入了任务1的容器,并且在任务2中使用容器值。
图 3.51. 任务还可以共享容器值。容器在任务间传递信息。
几个关于任务的要点提示: { 你不能合并任务,你只能合并分支。 { 任务分裂基本上与有了另一个正在运行的程序是相同的事情。 { 如果你使用任务分裂,每一个分开的程序必须有自己的停止灯。 { 当两个任务试图在同一时刻控制一个输出时,要意识到硬件冲突。 { 决不要在任务间使用跳转。 { 决不要使用跳转从任务分裂的一边跳到另一边。
图 3.52 有害的(不合法的)跳转与任务分裂组合应用
38 此书授权西觅亚翻译,版权所有
基于乐高组件和ROBOLAB软件的工程教学
3.4.3启动与结束任务
结束任务命令将使所有任务停止运行。在下面的程序中,两个任务在10秒钟后停止,下面的任务在10秒内可能已完成,但不影响上面的任务,注意,默认的声音是永远不会播放的,因为停止任务命令先执行,实质上已结束了程序。
图 3.53 两个任务将在10秒后停止
接下来的例子中是另一个停止任务的例子。在这里,我特定的指定了停止哪个任务;比起停止所有的任务来说,只有任务2停止。但总是,程序会继续运行只要其它三个任务还在运行。每个任务都是一个独立的程序。
注意 在ROBOLAB程序中,你一次最多使用9个任务。
图 3.54.在程序中只有2号任务停止
除了停止程序,它也可以使用开始任务命令来重启任务。下个例子中,当过了10秒39 此书授权西觅亚翻译,版权所有
基于乐高组件和ROBOLAB软件的工程教学
第三章 后上面的任务会导致两个任务都停止。。然而,如果触动传感器在10秒前被触碰过,下面的任务将会停止两个电机,使LCD黑屏,以及在绿灯处重启任务1(也会重启任务2)。开始任务命令在绿灯处是本质的重启特定的任务。这个程序会一直“停止”只要触动传感器在每隔10秒被触碰至少一次的情况下。
图 3.55. 任务1会在绿灯处重启。
图3.56在下一页展现了最后的任务的例子,把它们都整合到了一起。这个程序的目的是使用光电传感器避障,以及使用左右触电传感器(任务2和3)。我使用了停止和开始任务功能控制马达来防止冲突。只有一个任务在一个时间可以控制,因为每个任务在其它控制马达前会停止。细节的注意是我从不重启任务3,当它会自动的跟随任务2重启。另一个细微差别是任务2的绿灯是任务分裂,当它在那里开始。这样,当我重启任务2,一开始的两个马达功能(在任务分裂前)已经不再执行了。
3.4.4 向前看:高级任务 在第五章的高级任务中注入了两个新的理念。任务的优先权用另一种方式来介绍,在输出端口来避免冲突。我会介绍在图3.56中可选择性的程序,比起停止和开始任务使用任务优先。第二个观念是把NXT的按钮当作触动传感器来用。它包括高级任务,因为按钮监视必须在分支任务中运行。
40 此书授权西觅亚翻译,版权所有 三亿文库包含各类专业文献、各类资格考试、应用写作文书、生活休闲娱乐、高等教育、专业论文、行业资料、文学作品欣赏、幼儿教育、小学教育、乐高ROBOLAB教程chapter0380等内容。 

参考资料

 

随机推荐