实习总结2

接着整理下我实习的时候做的项目具体内容吧~~

实习的时候也差不多把软件开发流程走了一遍,从需求分析,需求规格说明,功能模块,开发执行计划以及项目实施。下面附上一张软件流程所需文档截图供以后参考:

项目来源是:上海发那科机器人有限公司技术支持部在进行Robot Interface技术支持时,工作内容的重复度高;而且有一些客户工厂,像可成科技、可胜科技、TPK等,进厂手续繁杂,时间消耗大;客户在测试过程中·也可能经常变更需求,从而导致变更后修改程序的成本也很高。为了降低技术支持时由进出厂引起的超高时间成本,减少工作人员工作量,提高用户体验。基于此开发Robot Testing System软件,用于高效实时进行客户机器人信息读写,以便于我们及时与客户沟通,做好技术支持准备工作,减少重复现场工作。

概述:鉴于本人自己学习的是C++,所以在最初是打算用VS的MFC来完成该项目,但由于项目搭建经验不足,初始版本的扩展性较差,意义不大,在指导老师建议下,重新构建系统框架,并转用WPF框架(C#)来搭建客户端界面。选择WPF是因为这个UI框架包含了很多界面开发的特性,非常灵活,而且上手比较快。还有就是WPF本身比较注重继承和多态等,这很好的满足了对扩展性的要求。

          关于本项目调用的COM组件的介绍以及所需模拟机器人实现流程,在下篇再附上,先记录下我的开发过程和遇到的那些问题吧~

系统搭建

一、机器人相关信息的数据类型及本系统概述

IO端口包含有SDI, SDO, RDI, RDO, UI, UO, GI, GO, SI, SO: 对这些端口需要获取的内容有类型,状态(ON/OFF),注释信息以及索引号信息。本项目完成的状态是周期监测端口状态,进行端口的读和写操作,之后可做的改进是:将IO状态信息与背景颜色相关联,更加直观,IO端口读写出来的数据可选择保存log文件,便于后续查找。另外,对于特殊端口如RDI和RDO对应的是数据寄存器输入输出,可以获取具体数据,曲线显示。

寄存器包含字符串寄存器,数据寄存器,位置寄存器等,用于获取各数据类型的注释信息,机器人位置信息以及其它相关数据等。对这些变量本系统需要获取其类型,索引号以及对应值。本项目完成功能是数据获取,多个数据寄存器数据设置及周期显示状态。可改进的地方是在获取数据的同时,可设置点击事件,看到数值的同时,相关联的注释信息也能得到显示。

系统变量包含许多变量,如时钟信号$FAST_CLOCK,临时数据$DATA_TEMP及定时信号$TIMER[1]等,本系统需完成功能是获得它们的数据并进行周期性显示。难点在于信号类型各不相同,实习结束前测试了int型的各个变量获取与显示。这部分还有待进一步补充完善其他数据类型数据,我的想法是每个类型均有一个队列存储,显示数据时需要遍历各类型队列,应该还有其他更好方式。

警报信息包含历史警报记录以及当前警报,可直接获取警报信息,因其为记录类型,可直接用比较友好的方式显示在界面或写入文件。

二、方案一:

起初,准备在VS2012的MFC框架下进行系统搭建(语言C++),实现功能是通过控件选择相应变量进行配置,然后获取相应的变量,想法简单,但系统做出来的扩展性弱,每次重启系统都需要重新配置数据,才能获取相应的数据,而且每次进能获取一种数据,不够智能化。但是还是记录一下,作为纪念:

由于本人之前并未使用MFC进行过软件开发,刚开始的时候还是经过一些曲折的,比如说如何调用窗口,全局变量的设置,以及这些APP,Dialog都是什么关系,都是经历过各种出错,调试,网络搜索才慢慢解决的,虽说这是放弃的方案,但也是有自己很大的心血在的。

该版本系统主要完成功能有连接机器人,警告历史及当前信息读取写入文件,系统变量写入文件,IO端口信息写入文件等。这些操作是通过下拉框选择属性,以及手动输入显示比例因子进行显示比例设置。下面介绍下主要操作结果界面,首先进入连接机器人界面:

                                                                                                      图3 连接界面

输入机器人对应的IP地址信息,点击连接进入到主界面:

                                                                                                     图4     MFC主界面

配置所需数据类型,点击确认配置之后,点击开始,来获取所需数据,下面是获取Alarm信息的操作结果图:

                                                                                                     图5 MFC数据获取界面

对于实时显示部分是用来显示系统变量的实时曲线,这部分还有一个处理是对于比例因子的设置,我先采用多选下拉框获取所需变量,然后通过输入多个比例因子配置数据进行统一配置,对于显示曲线部分我打算用插件teeChart来做。这部分未完成,就发现这种方案的扩展性不够,方案作废,进入方案二。

三、方案二:

鉴于初始想法过于简单,在指导老师建议下,转用WPF框架(语言C#)进行界面设计。选择WPF是因为这个UI框架包含了很多界面开发的特性,非常灵活,MVVM模式讲究让界面代码尽量xaml化,有强大的.net类库支持,基于DirectX渲染,渲染效率好,而且上手比较快。选择C#语言是因为C#在做机械控制方面特别流行,且是.NET所支持的语言,而且FANUC一般编程控制都是用C#语言。主要实现流程是:实现过程:首先建机器人,以及机器人相关IO端口,register属性的类等,用于后续数据链接;通过读取XML配置文件中机器人IP地址等信息,传递给机器人类相应成员函数进行机器人连接;在进行数据获取时,页面初始化时系统会根据读取到的IO端口,register等数据段信息设置相应类的属性,从而实现相应数据的读取;之后进到各个监测信号页面可通过控件响应事件来进行数据的读写及查找等功能。

在方案一的基础上,计划采用读取XML或ini等配置文件的方式进行数据配置,方便之后需要多次重复监测多种数据的场合。加上扩展性要求, UI设计框架WPF比较适合,因为它的特点是灵活运用了各种继承关系、多态、重载等,这对于扩展性实现比较有利。若需要显示数据,则只需要将数据与控件进行绑定就能实现实时获取与显示等功能。对于我来说这算是一个新的领域了,因为C#我是只看过一点基础的输入输出吧,但是好在语言都相通,很容易就上手了。WPF呢,它是一种前后端共同编程的框架,你可以在界面设计文件xmal中进行界面设置,也可以在cs文件中直接码代码控制,数据之间的连接通过数据绑定来实现,但数据绑定也有着很多的东西需要学习,我的实习期可能只能学到皮毛,之后若想继续做WPF客户端开发,还需要继续学习,因为这些微软软件开发工具都上手容易,精通难。

主要实现流程在系统搭建部分已简要介绍,下面介绍一下实习期间我主要完成的功能,我主要做的是三个界面:IO监测,寄存器监测以及系统变量监测,最后还有一个帮助页面用于提示操作方法。首先看一下配置文件,这是XML格式的,通过各个Label进行变量标记,本次测试主要使用的是IO端口,数据寄存器以及系统变量:

                                                                                                     图6 XML配置文件样例

接下来是进入系统,打开配置文件后,会直接读取机器人信息进行连接:

                                                                                                     图7 打开配置文件及连接结果界面

连接成功后默认进去IO监测界面(主要功能为读写IO,查找以及通过时钟信号实时显示):

                                                                                                     图8 IO监测初始界面

                                                                                    图9 (a)通过索引号查找,(b)Timer周期显示

 

                                                                 图10 非Timer周期时(a)读选中IO的状态与(b)写选中IO的状态(true/false)

点击寄存器监测进入寄存器监测页面(主要功能为读写寄存器,清空数据表以及通过时钟信号下周期显示):

                                                                图11 (a)读选中Register的状态,(b)写(连续写入两个)寄存器的值

点击系统变量监测进入系统变量监测页面,实时显示系统变量:

         虽然实习期间这个项目未把所有功能都做全,但还是感觉收获蛮多的。首先,我了解了机器人基本构造,以及FANUC的工作环境,学会了基础的机器人仿真。其次,我通过实习学习到了之前未接触到的UI框架-WPF,这是一种现在Windows下界面编程比较流行的框架,而且,这个框架重视的是继承关系、多态、重载等,而这些是我在学校自我学习时接触比较少的。最后,看到了自己的不足,实践经验缺乏,软件开发时第一想到的是实现功能,不够深入,需要进一步考虑实际问题,用户体验以及扩展性都是一个好的软件所必需的。当然,我最终改用WPF方案,也是自己编程或者说系统搭建能力不足的结果,因为在最后两周我无法独立对扩展性不好的系统改造。最后篇幅有限,有兴趣可以看一下我的下篇博客关于机器人仿真以及调用的COM组件相关内容。

  • 2
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
很好的C#培训教程,适合初学者使用 目 录 1 .NET体系结构 7 1.1 什么是.NET Framwork? 7 1.2 .NET Framework的内容 7 1.3 如何用.NET Framework编写应用程序 8 1.4 MSIL和JIT 8 1.5 程序集 9 1.6 托管代码 9 1.7 垃圾回收 9 1.8 链接 10 1.9 实例分析 11 1.10 内容总结 13 1.11 独立实践 14 2 C#基础 15 2.1 面向对象基本概念 15 2.2 变量 18 2.3 常量 22 2.4 预定义数据类型 22 2.5 流控制 28 2.6 数组 37 2.7 命名空间 38 2.8 C#预处理器指令 44 2.9 C#编程规则 46 2.10 内容总结 50 2.11 独立实践 50 3 对象和结构 52 3.1 类和结构 52 3.2 类和成员 53 3.3 构造函数 60 3.4 结构 65 3.5 部分类 68 3.6 内容总结 72 3.7 独立实践 72 4 继承 73 4.1 继承的类型 73 4.2 结构和类 75 4.3 调用函数的基类版本 76 4.4 抽象类和抽象函数 77 4.5 密封类和密封方法 79 4.6 修饰符 80 4.7 接口 81 4.8 内容总结 86 4.9 独立实践 86 5 委托与事件 88 5.1 事件的原理 88 5.2 简单的自定义事件 89 5.3 预定义事件处理机制 92 5.4 内容总结 100 5.5 独立实践 100 6 运算符和类型强制转换 101 6.1 运算符 101 6.2 运算符的简化操作 102 6.3 类型的安全性 107 6.4 类型转换 108 6.5 装箱和拆箱 111 6.6 对象的相等比较 112 6.7 引用类型的相等比较 112 6.8 运算符重载 114 6.9 运算符的工作方式 114 6.10 用户定义的数据类型转换 118 6.11 执行用户定义的类型转换 119 6.12 多重数据类型转换 126 6.13 内容总结 130 6.14 独立实践 131 7 字符串与正则表达式 132 7.1 System.String类 132 7.2 StringBuilder成员 135 7.3 字符串的格式化 138 7.4 正则表达式概述 142 7.5 内容总结 149 7.6 独立实践 150 8 集合 151 8.1 集合 151 8.2 索引器 152 8.3 集合接口 155 8.4 字典 157 8.4.1 现实生活中的字典 158 8.4.2 .NET中的字典 158 8.4.3 字典的工作情况 160 8.5 内容总结 167 8.6 独立实践 167 9 错误与异常 168 9.1 错误和异常 168 9.2 捕获异常 170 9.3 System.Exception属性 177 9.4 嵌套的 try块 178 9.5 用户定义的异常类 180 9.6 内容总结 189 9.7 独立实践 189 10 内存管理与指针 190 10.1 后台内存管理 190 10.2 值数据类型 190 10.3 引用数据类型 192 10.4 垃圾收集 194 10.5 释放未托管的资源 195 10.6 析构函数 195 10.7 IDisposable接口 196 10.8 实现IDisposable接口和析构函数 198 10.9 不安全的代码 199 10.10 指针 200 10.11 使用指针优化性能 213 10.12 内容总结 217 11 泛型 218 11.1 泛型的概念 218 11.2 使用泛型 219 11.3 可空类型 219 11.4 运算符和可空类型 220 11.5 System.Collections.Generic命名空间 227 11.6 定义泛型类 237 11.7 default关键字 239 11.8 约束类型 240 11.9 从泛型类中继承 247 11.10 泛型运算符 248 11.11 泛型结构 250 11.12 定义泛型接口 250 11.13 定义泛型方法 251 11.14 定义泛型委托 253 11.15 独立实践 253 12 反射 254 12.1 定制特性 254 12.2 编写定制特性 255 12.3 指定特性参数 258 12.4 VectorClass程序集 261 12.5 反射 263 12.6 查找定制特性 269 12.7 内容总结 273 13 线程 274 13.1 线程 274 13.2 多线程应用程序 275 13.3 线程的处理 276 13.4 线程的优先级 282 13.5 同步 283 13.6 同步问题 285 13.7 内容总结 288 14 Winform基本概念 289 14.1 .NET Windows应用程序开发 289 14.2 .NET框架类库简介 289 14.3 事件和事件处理程序 290 14.4 事件参数 290 14.5 Windows 应用程序 290 14.6 窗体属性、方法和事件 291 14.7 this 关键字 292 14.8 控件概念 292 14.9 各种类型控件 292 14.10 控件的一些通用属性 294 14.11 标签、文本框、按钮控件简介 295 14.12 列表框控件简介 296 14.13 复选列表框 296 14.14 组合框 296 14.15 内容总结 302 15 Winform控件 303 15.1 控件分类 303 15.2 在窗体之间建立链接 307 15.3 应用程序的启动和关闭 308 15.4 内容总结 308 16 高级用户界面 309 16.1 打印控件的使用 309 16.2 PrintDocument组件 309 16.3 PrintPreviewControl组件 310 16.4 PrintDialog 组件 310 16.5 PrintPreviewDialog组件 311 16.6 PageSetUpDialog控件 311 16.7 对话框 311 16.8 通用对话框 312 16.9 OpenFileDialog控件 312 16.10 SaveFileDialog控件 312 16.11 FontDialog控件 312 16.12 ColorDialog控件 312 16.13 MessageBox消息框 313 16.14 WinForms 中的可视效果 314 16.15 内容总结 315 17 MDI应用程序 316 17.1 SDI程序 316 17.2 MDI程序 316 17.3 MenuStrip和ToolStripMenuItem 317 17.4 toolStrip控件简介 318 17.5 StatusStrip控件 320 17.6 创建对话框 320 17.7 内容总结 321 18 ADO.NET编程 322 18.1 简介 322 18.2 ADO.NET 的优点 322 18.3 ADO.NET 结构 324 18.4 ADO.NET 的基本组件 325 18.5 DataReader 328 18.6 获取单个值 328 18.7 修改数据库中的数据 329 18.8 从SQL Server获取XML数据 329 18.9 DataAdapter 330 18.10 数据集:DataSet 330 18.11 DataTable 330 18.12 DataView 332 18.13 关系 332 18.14 数据绑定 333 18.15 DataRow 简介 335 18.16 操纵数据源中的值 336 18.17 内容总结 336 19 GDI+ 编程 337 19.1 理解绘图规则 337 19.2 测量坐标和区域 341 19.3 绘制可滚动的窗口 343 19.4 颜色 348 19.5 画笔和钢笔 351 19.6 绘制图形和线条 352 19.7 显示图像 355 19.8 绘制文本 357 19.9 字体和字体系列 359 19.10 内容总结 363 20 自定义控件 364 20.1 添加事件处理程序 368 20.2 添加更多的属性 370 20.3 内容总结 372 21 部署与安装 373 21.1 部署的设计 373 21.2 无干涉部署 387 21.3 内容总结 394 22 ASP.NET与Web窗口简介 395 22.1 应用程序方案 395 22.2 Web 应用程序开发周期 399 五个对象实现了服务器端的请求 403 22.3 ASP.NET 的演变 404 22.4 Global.asax 文件 405 22.5 发布网站 408 22.6 内容总结 408 23 ASP.NET中的内置对象 409 23.1 ASP.NET页面 409 23.2 虚拟目录 421 23.3 内容总结 423 24 Web服务器控件 424 24.1 Web 控件 424 24.2 复杂控件 429 24.3 内容总结 431 25 HTML控件 432 25.1 服务器控件 432 25.2 HTMLForm控件 432 25.3 Web服务器控件优缺点 433 25.4 HTML服务器控件优缺点 433 25.5 使用服务器控件设计页面建议 433 25.6 内容总结 439 26 深入服务器对象 440 26.1 Global.asax文件简介 441 26.2 Application 对象 446 26.3 HttpServerUtility类和Server对象 446 26.4 HttpSessionState类和Session对象 448 26.5 内容总结 449 27 ADO.NET WEB应用 450 27.1 回顾ADO.NET 450 27.2 模板概念 464 27.3 ASP.NET 中的数据处理 465 27.4 内容总结 466 28 WEB服务器基础 467 28.1 ASP.NET Web 服务 467 28.2 编写简单的 Web 服务 468 28.3 内容总结 470 28.4 独立实践 470 29 用户控件 471 29.1 用户控件开发 471 29.2 内容总结 479 29.3 独立实践 480 30 Web部署 481 30.1 使用XCOPY部署 481 30.2 使用Visual studio的Copy Web Site功能部署 482 30.3 使用Visual Studio的Precompilation预编译部署 482 30.4 内容总结 483 30.5 独立实践 484

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值