现在的位置: 首页 > 专题 > 机器人 > Robotics Studio > 设计中心 > 文档 > 专题 > 机器人 > 正文

Robotics Studio学习教程:第八天——Hello World Again! (DSS Service version)

2014年04月24日 Robotics Studio, 文档, 机器人 ⁄ 转载:原文链接 ⁄ 共 3386字 ⁄ 字号 暂无评论 ⁄ 阅读 1,189 次

 

Microsoft Robotics Studio

Microsoft Robotics Studio

继之前分享的一篇《Robotics Studio学习教程:第七天——改良自走型机器车(续)》,我们将继续分享下一篇《Robotics Studio学习教程:第八天——Hello World Again! (DSS Service version)》,让我继续开始我们学习Visual Programming Language,以及使用Robotics Studio学习开发机器人应用的道路吧。

 

[Robotics Studio] Hello World Again! (DSS Service version) -- Day8

太混了, 第八天还在 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 , 像这样:

clip_image002

我们可以透过这个新增项目快速地开发一个 DSS Service, 而这个 DSS Service 就可以出现在我们安装的 VPL 当中欧.

按下确定以后, 你会看到一个对话框:

clip_image004

这是对话框可以让你输入 DSS 的名称, 日期 (用以跟其他同名的 DSS 区别), 还可以输入 Partners (一起合作的 DSS Service) , Alternate Contracts (替代协定)

我们可以都用预设的, 因为我们现在只要写  Hello World 嘛...

不过在开始撰写 DSS Service 之前, 我想要先讲解 DSS Service 的大体架构: (这张图来自 RDS 官方文件)

clip_image006

首先, 一个 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 帮你生了一个项目像是这样:

clip_image008

其中 DSSService_HelloWorldType.cs 放的是宣告的程序代码, DSSService_HelloWorld.cs 则是主体程序代码 (当然事后你可以乱改..)

为了完成 Hello World, 我们来把这个 DSS 的 State 加上一个字符串的数据成员 (Data Member) 吧, 你可以在 DSSService_HelloWorldTypes.cs 当中找到下面这段程序代码:

  1. /// <summary>
  2. /// DSSService_HelloWorld state
  3. /// </summary>
  4. [DataContract]
  5. public class DSSService_HelloWorldState
  6. {
  7. }

我们加上一个字符串成员的宣告如下:

  1. /// <summary>  
  2.   
  3. /// DSSService_HelloWorld state  
  4.   
  5. /// </summary>  
  6.   
  7. [DataContract]  
  8.   
  9. public class DSSService_HelloWorldState  
  10.   
  11. {  
  12.   
  13. [DataMember]  
  14.   
  15. public string StrData { getset; }  
  16.   
  17. }  

每个 DSS  Service 在启动的时候, 会呼叫 Start() 这个函式, 所以你在 DSSService_HelloWorld.cs 当中可以找到它:

  1. /// &lt;summary&gt;  
  2.   
  3. /// Service start  
  4.   
  5. /// &lt;/summary&gt;  
  6.   
  7. protected override void Start()  
  8.   
  9. {  
  10.   
  11. //  
  12.   
  13. // Add service specific initialization here  
  14.   
  15. //  
  16.   
  17. base.Start();  
  18.   
  19. }  

现在我们加上 _state.StrData = "Hello World"; 如下:

  1. /// &lt;summary&gt;  
  2.   
  3. /// Service start  
  4.   
  5. /// &lt;/summary&gt;  
  6.   
  7. protected override void Start()  
  8.   
  9. {  
  10.   
  11. //  
  12.   
  13. // Add service specific initialization here  
  14.   
  15. //  
  16.   
  17. base.Start();  
  18.   
  19. _state.StrData = "Hello World";  
  20.   
  21. }  

Ok, 现在我们完成一个 DSS Service, 这个 Service 的状态有一个 StrData , 而启动以后会放入 "Hello World", 透过 VS 2008 建置以后, 它自动会放在你的 VPL  bin 目录下面, 像是这样:

clip_image010

所以你打开 VPL , 就可以看到 Services 多了一个 DSSService_HelloWorld, 把它拖来到 Diagram 当中,
连上 SimpleDialog, 你会从 DSSService_HelloWorld 看到 Get-Success 联机 (这表示你想要取得该 DSS Service 的状态 (state)), 连接设定如下:

clip_image012

现在你的 VPL 程序如下:

clip_image014

好啦, 一周后我们又回到了 Hello World ...

 

让我们继续一下章教程:

《Robotics Studio学习教程:第九天——用DSS 改写自行走小车的 Activity》

fgx

分享到:

Wopus问答

×