您的当前位置:首页第8天Microsoft Robotics Developer Studio中文教程--Hello World Again! (DSS Service version)

第8天Microsoft Robotics Developer Studio中文教程--Hello World Again! (DSS Service version)

2024-06-11 来源:乌哈旅游
[Robotics Studio] Hello World Again! (DSS Service version) -- Day8 编辑整理<杜毓聪 duyucong@gmail.com www.yucongdu.cn>太混了, 第八天還在 Hello World ! 事實是, 我們開始往更深入的技術邁進囉, 如果想要更深入了解 RDS (Microsoft Robotics Developer Studio) , 我們要開始了解 DSS (Decentralized Software Services) 以及 CCR (Concurrency And Coordination Runtime) , 雖然 DSS 以及 CCR 是隨著 RDS 而出現, 但其實它們可不需要限定於 RDS 才能使用歐, 雖然我目前沒有在 .NET Framework 4.0 當中發現他們的身影, 但是隨著多核心系統的進展, 軟體當然也是要能夠發揮多核心的長處, 隨之而來的平行處理問題, 當然是程式人員要面對的課題, 有了 CCR 以及 DSS 這樣的 Framework , 開發平行處理程式時將會採用不同的邏輯思考與概念. 如果你已經寫了很多年的程式, 相信對於之前的 VPL 覺得有些不太習慣, 現在我要弄點程式人員習慣的東西, 就是用 Visual Sutdio 2008 (or VS 2008 Express Edition) 來開發程式. 但是我還是不會脫離 VPL 這個介面. 為 什麼我要貼著 VPL 這個介面呢, 因為 RDS 教學套件中有相當多關於 DSS 與 CCR 資訊, 但卻都是單純的 Visual Sutdio 操作, 鮮少提及如何跟 VPL 整合, 但我認為 VPL 才是適合初學者的良好介面, 所以對於初學者而言, 能夠與這個介面整合, 應該比較能夠提起寫 code 的興趣. 這就如同一開始如果教學採用 Unix Command Line 模式, 相信很多人都受不了. 但是如果一開始採用拖拉視覺操作系統方式, 相信很多人都比較容易有興趣, 等到有了興趣, 再介紹更強大的命令列模式, 就比較不會覺得排斥. 況且, 良好的視覺操作系統有時候比起命令列模式還棒, 這點只要你看過 VPL 開發的程式經過 Compile 轉成 C# 的程式後, 你會承認 VPL 有時候是比較好的 (當然不是所有狀況, 而是各有優缺點). OK! 寫了很多廢話才開始寫程式, 這大概是年紀大了(愛碎碎念)才會這樣吧?? 首先, 在你安裝完 RDS 以後, 如果你有 Visual Studio 2008 (or Express Edition) , 你應該可以在新增專案當中看到 Microsoft Robotics Express , 像這樣: 我們可以透過這個新增專案快速地開發一個 DSS Service, 而這個 DSS Service 就可以出現在我們安裝的 VPL 當中歐.

按下確定以後, 你會看到一個對話框:

這是對話框可以讓你輸入 DSS 的名稱, 日期 (用以跟其他同名的 DSS 區別), 還可以輸入 Partners (一起合作的 DSS Service) , Alternate Contracts (替代協定)

我們可以都用預設的, 因為我們現在只要寫 Hello World 嘛...

不過在開始撰寫 DSS Service 之前, 我想要先講解 DSS Service 的大體架構: (這張圖來自 RDS 官方文件)

首先, 一個 DSS Service 需要有兩個名稱用來以供辨識, 一個是 Service Identifier ,表示它存在的實體 URL 位置. 所 以每一個 DSS 實體 (Instance) 都會有一個唯一的 Service Identifier, 你可以看成是變數名稱 (Variable Name) , 不要跟 Contract Identifier 搞混了, Contract Identifier 的格式會是像這樣 : http://schemas.tempuri.org/[year]/[month]/[name].html (這樣你知道剛剛對話框要你填日期以及 Organization Domain 是要幹啥用了吧),它才是這個 DSS Service 的功能名稱, 你可以看成是類別名稱 (Class Name). 每 個 DSS 都會有一個狀態 (State), 也會有一堆程式碼 (Service Handlers) 負責對外溝通 (Main Port) ,還可以有通知 (Notifications) , 然後可以有協同運作的 Service (Partners) 這幾大塊. 完成以後你會看到 Visual Studio 幫你生了一個專案像是這樣: 其中 DSSService_HelloWorldType.cs 放的是宣告的程式碼, DSSService_HelloWorld.cs 則是主體程式碼 (當然事後你可以亂改..) 為了完成 Hello World, 我們來把這個 DSS 的 State 加上一個字串的資料成員 (Data Member) 吧, 你可以在 DSSService_HelloWorldTypes.cs 當中找到下面這段程式碼: ///

/// DSSService_HelloWorld state/// [DataContract]public class DSSService_HelloWorldState{}我們加上一個字串成員的宣告如下: /// /// DSSService_HelloWorld state///

[DataContract]

public class DSSService_HelloWorldState

{

[DataMember]

public string StrData { get; set; }

}

每個 DSS Service 在啟動的時候, 會呼叫 Start() 這個函式, 所以你在 DSSService_HelloWorld.cs 當中可以找到它:

///

/// Service start///

protected override void Start()

{

//

// Add service specific initialization here //

base.Start();

}

現在我們加上 _state.StrData = \"Hello World\"; 如下:

///

/// Service start

///

protected override void Start()

{

//

// Add service specific initialization here //

base.Start();

_state.StrData = \"Hello World\";

}

Ok, 現在我們完成一個 DSS Service, 這個 Service 的狀態有一個 StrData , 而啟動以後會放入 \"Hello World\透過 VS 2008 建置以後, 它自動會放在你的 VPL bin 目錄下面, 像是這樣:

所以你打開 VPL , 就可以看到 Services 多了一個 DSSService_HelloWorld, 把它拖來到 Diagram 當中,

連上 SimpleDialog, 你會從 DSSService_HelloWorld 看到 Get-Success 連線 (這表示你想要取得該 DSS Service 的狀態 (state)), 連接設定如下:

現在你的 VPL 程式如下: 好啦, 一周後我們又回到了 Hello World ... --> 2008/12/25 01:37| 閱讀數 : 1045 | 我要推薦 | 8 Comments | | 訂閱 DotBlogs Tags: Robotics 關連文章 •••••• [Robotics Studio] 改良自走型機器車 [III] -- Day7 [Robotics Studio] 改良自走型機器車 [II] -- Day6 [Robotics Studio] MSRS 概觀 (Overview) -- Day5 [Robotics Studio] 自走型機器車 -- Day4 [Robotics Studio] 介紹 Activity -- Day3 [Robotics Studio] 開始玩機器人啦 -- Day2 回應 •mxymxy 2009/1/22 下午 03:49 回覆 # re: [Robotics Studio] Hello World Again! (DSS Service version) -- Day8我有 Visual Studio 2008 (or Express Edition) , 但我不可以在新增專案當中看到 Microsoft Robotics Express,为什么 • laneser 2009/1/22 下午 06:17 回覆 # re: [Robotics Studio] Hello World Again! (DSS Service version) -- Day8to mxymxy : 我的順序是 : 先安裝 VS 2008 , 再安裝 robotics developer studio . •mxymxy 2009/1/22 下午 08:09 回覆 # re: [Robotics Studio] Hello World Again! (DSS Service version) -- Day8重装了一遍,成了,不过只有C#,不是能用C++吗?谢谢• laneser 2009/1/23 下午 12:00 回覆 # re: [Robotics Studio] Hello World Again! (DSS Service version) -- Day8to mxymxy : Express 只有 C# , Standard 版本才能用 C++,或其他語言 (希望 M$ 下次能發發善心) •Comix 2009/1/30 上午 01:03 回覆 # re: [Robotics Studio] Hello World Again! (DSS Service version) -- Day8Laneser你好!我是一名初學者,不知用C#編寫DSS SERVICE需要多少C#基礎啊?謝謝!祝新春快樂! • laneser 2009/1/31 下午 12:38 回覆 # re: [Robotics Studio] Hello World Again! (DSS Service version) -- Day8to Comix : 我覺得 C# 寫 DSS 還算有點深度,所以, 個人建議有以下基礎後再學比較不會遇到困難 (由淺至深):1. 基本的 C# 觀念2. 泛型 (Generic)3. 多執行緒 (Multi-thread)4. Enumerator (yield), 以及因為 Enumerator 所造成的 deferred execution 概念 不過, 如果很有興趣, 也可以摸索前進, 倒不一定要循規蹈矩, 只要有熱情跟謙遜, 遇到問題就想辦法了解並解決就好囉. DSS 以及 CCR 都有點算是新的工具用來解決以前遇到的問題, 所以對於初學者或是老手, 都算是從頭學起, 頂多是老人比較占一點點優勢(對於舊問題), 新手的優勢就是沒有包袱 (就像張三丰教太極, 你已經忘光了 XD)... •tinghoo 2009/2/25 上午 04:37 回覆 # re: [Robotics Studio] Hello World Again! (DSS Service version) -- Day8请好,请问那个“新增专案”是在哪,我找不到我现在把所有的都卸载掉,那具体应该都安装哪些呢,顺序?麻烦你了 •tinghoo 2009/2/25 上午 05:53 回覆 # re: [Robotics Studio] Hello World Again! (DSS Service version) -- Day8我知道了,原来是因为大陆的台湾的翻译不一样,麻烦了

因篇幅问题不能全部显示,请点此查看更多更全内容