[Robotics Studio] 介紹 Activity -- Day3

  • 8841
  • 0
  • 2009-02-17

[Robotics Studio] 介紹 Activity -- Day3

今天開始介紹 Activity, 這個可是 VPL 化繁為簡的工具, 這樣可以讓你的 VPL 更容易讓人看得懂, 也更好控制, 它就很像 Basic 的副程式一樣, 把一堆比較複雜但相關的流程框成一個自定的 Activity.

先把昨天的程式抓來改吧.

還記得昨天最後有點複雜的程式吧?

 

image

 

現在我們要把中間這個過程寫成一個 Activity, 這樣日後看這個程式就更容易懂了,  先從 Basic Activities 當中拉一個  Activity 放到 Diagram, 請注意右邊有 Properties, 這個就是屬性表, 我們可以從當中修改元件的屬性, 名字目前只能用英文, 所以我們先把 Name, Friendly Name 設為 RobotControl, 在 Comment 的地方可以下註解, 寫上 "控制機器車子的方向" , 如下:

image

 

現在你已經有一個自訂的活動了, 看起來就像是這樣 :

image

對它點兩下, 你會進入編輯畫面,

讓我們回到剛剛的 Diagram , 把原本中間的一堆元件複製過來這個 RobotControl Activity.

如下:

image

 

現在你看到一堆驚嘆號了, 這代表有些小問題需要解決.
移動到每一個小驚嘆號, 都會告訴你發生了甚麼問題, 首先, 我們要先宣告這個活動的介面,

也就是定義這個活動的輸出以及輸入. 點擊上方的紅色編輯紐, 或者使用下拉選單的 Edit/ Actions and Notifications,

你會看到這個對話框:

image

主要分為兩大區塊, Actions 代表你可以定義的反應, 所謂的 Action, 是指需要輸入一個訊息, 然後該 Activity 會經過一些處理以後(包括做了一些整體環境上的改變), 最後吐出一個訊息, 而 Notifications 就比較簡單, 是自動自發的吐出訊息, 不需要輸入訊息. 所以通常一個流程的最前面的元件往後吐出訊息的是 Notification.

再回到 Actions, 我們可以看到下方有三排 Add,Delete, 由左至右分別代表 你新增刪除定義的 Actions, 新增刪除輸入的訊息組合內容, 新增刪除輸出的訊息組合內容. 每一個 Action 你都可以定義個別的輸出入內容, 而且每一個 Action 都是一個獨立的編輯元件畫面歐.

讓我們定義一個 Action, 取名為 ControlDirection, Input values 需要一個 PressButton, Type 是 String, Output values 則是 LeftDriverPower, RightDriverPower, Type 都是 double, 如下:

image

之後, 我們把左邊的輸入拉到原本的 Calculate 這個元件.

為了要統一輸出, 所以我們還要多拉一個 Join, 把 "Stop", "Fowards", "Backwords" 產生出來的訊息經由 Merge 後再一次 Join, 一樣在 Join 裡面填入 left, right , 如下:

image

然後把這個 Join 輸出給 "Left", "Right" 的  Merge,最後把這個 Merge 輸出給 Result, 整體的流程就像下面這樣:

image

 

當你把 Merge 的結果輸出給 Result 時, 會跳出 Data Connections 對話框, 此時你要指定輸出的 LeftDriverPower, RightDriverPower 為何,
因為透過 Merge, Visual Programming Language Express Edtion 無法計算出正確的下拉選單給你選 (你只能選 value), 但是其實要輸入的值應該是
value.left, value.right (因為 Merge 之前的訊息是 Join 吐出來的), 所以你要勾選下方的 Edit Values Directly, 自己輸入正確值 (但系統會提示你),
如下:

image

這樣你就完成了一個 Activity (其中的一個 Action) 的定義囉!

讓我們回到原本的 Diagram, 刪除那些被你複製到 Activity 當中的元件, 改用這個 Activity 取代,
當你把 DirectionDialog 的 Notifications 拖到這個 RobotControl 的 Activity 時, 會出現 Connections 對話框,
我們當然選擇 ButtonPress , 如下:

image

接著出現 Data Connections 對話框, 要選 value.Name

image

而當你把這個 RobotControl Activity 的輸出丟給 GenericDifferentialDrive 的時候,
又出現 Connections 對話框, 輸出要選 SetDrivePower,

image

Data Connections 對話框設定如下:

image

 

現在整體的元件流程就像下圖:

image

這樣看起來清爽多了吧.
那我們之前複製的一個分身 GenericDifferentialDrive 也就不需要了.
不過, 暫且不要刪掉它, 還記得昨天你玩車子的時候, 按下去就一直跑了, 直到按 Stop, 是有點不方便.
現在我們改為放開就停止, 這樣還不錯玩.
所以我們再複製一個 DirectionDialog (請注意, 它還是該 DirectionDialog 的分身囉),
然後把 Notification 直接拖到另一個分身 GenericDifferentialDrive,
在 Connections 對話框設定 ButtonRelease 給 SetDrivePower,
在 Data Connections 對話框設定兩個值都是 0

這樣你的整體元件流程如下:

image

好啦, 可以試玩看看是不是好多了? 比較不會翻車囉?
撞到東西還是會翻啦 XD

image

有了自訂 Activity, 就像是可以自己定義積木, 我們就可以邁向更複雜的人生啦...(啊?!)