接着整理下我实习的时候做的项目具体内容吧~~
实习的时候也差不多把软件开发流程走了一遍,从需求分析,需求规格说明,功能模块,开发执行计划以及项目实施。下面附上一张软件流程所需文档截图供以后参考:
项目来源是:上海发那科机器人有限公司技术支持部在进行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组件相关内容。