(机械制造及其自动化专业论文)基于人机界面的制造业软件自动化驱动.pdf_第1页
(机械制造及其自动化专业论文)基于人机界面的制造业软件自动化驱动.pdf_第2页
(机械制造及其自动化专业论文)基于人机界面的制造业软件自动化驱动.pdf_第3页
(机械制造及其自动化专业论文)基于人机界面的制造业软件自动化驱动.pdf_第4页
(机械制造及其自动化专业论文)基于人机界面的制造业软件自动化驱动.pdf_第5页
已阅读5页,还剩56页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

华 中 科 技 大 学 硕 士 学 位 论 文华 中 科 技 大 学 硕 士 学 位 论 文 i 摘 要 摘 要 随着制造业信息化的发展,大量工程软件及信息系统已经深入应用到企业的生产、 管理、运行中,能够满足企业用户越来越多的功能需求,同时,软件界面日趋复杂,操 作日趋繁琐。在软件应用的过程中,伴随着大量繁琐、低效的软件界面手工操作,所以, 提高软件人机界面交互效率是提高软件运行效能的重中之重。另外,企业为了更好地提 高效益,对软件间的集成需求在不断提高。然而,传统集成方法需利用软件自身提供的 二次开发接口或者其源程序进行扩充而实现, 面对众多工程软件并不开放接口或程序的 现状,传统方法就无法进行。为此提出应用集成新的研究课题。 本文分析了工程软件虽不存在开发接口,但绝大多数都存在人机交互界面的现状, 并以此为出发点,研究以自动操控来满足界面信息集成;在对界面自动操控原理与技术 进行深入研究之后,提出了拟人自动操控工程软件界面的“机器人”的概念,给出了工 程软件界面自动操控以及界面人机交互信息集成的解决方案;结合用户的定制需求,完 成了界面自动操控定制系统(kmrobot)的总体设计与模块化设计,并给出了系统的平 台化技术实现。 在研究过程中,本文对制造业信息化软件界面对象进行了深入探讨,通过详细归纳 分析,提出了完整的逻辑模型;另外,针对软件 ui 对象的识别、操控等界面自动操控 技术以及 kmrobot 跨进程交互集成技术难点,给出了相应解决方案,并应用在系统的 平台化实现中。 最后,本文给出了在不依赖工程软件开发接口的情况下,基于界面自动操控定制系 统平台实现的 pro/e 文件自动生成工具、kmpdm 与 protel 交互集成、kmrobot 嵌入式 集成框架的成功应用实例,验证了系统的可行性、可用性。 关键字:关键字:界面 自动操控 集成代理 可定制 软件机器人 人机交互 华 中 科 技 大 学 硕 士 学 位 论 文华 中 科 技 大 学 硕 士 学 位 论 文 ii abstract with the development of manufacturing information industry, a large number of engineering software(es) and information system has been applied to the production, management and operation of enterprise. at the same time, the software user interface and manipulation become more and more complex. in the engineering software applications, accompanied by a lot of cumbersome and inefficient software-ui manual-manipulations. therefore, improving the efficiency of software manipulation is the top priority in es-performance enhancement. in addition, software-integration demand in manufacturing enterprises continues to increase. however, the traditional integration which was bsaed on the secondary development interface or source code provided by engineering software, becomes invalid when it has less or no development interface. solving this integration technical problem is a new research topic. engineering software always has an excellent and friendly ui(user interface) rather than a perfect development interface. as a starting point, this thesis analyses the demand of es on interface automatic control, manipulate(iacm) and interface information integration, conducts an in-depth study in the principle and technology of iacm, presents the concept of iacm-“robot”, gives the solutions covered both software iacm and interface information integration. combined with the customizable demand of users , completed the architecture design and module design of the software iacm customizable system (kmrobot), and gives platform technique implementation of the system. in the course of the study, the thesis conducted an in-depth study on manufacturing information software interface, gives an object logic model of integrity. in addition, for the difficulties on ui object identification, control, and inter-process interactive integration, corresponding solution is presented in this thesis and has been used in the implementation of kmrobot system. finally, three examples based on kmrobot: document-auto-generation of pro/e, kmpdm if(id = quit) break; translatemessage; 当该程序没有消息通知时 getmessage 就不会返回, 也就不会占用系统的 cpu 时间。 在 32 位系统中每一运行的程序都会有一个消息队列,所以系统可以在多个消息队列中 转换而不必等待当前程序完成消息处理就可以得到控制权。 这种多任务系统称为抢先式 的多任务系统,如 windows98/nt/2000/xp 等。 消息系统是 windows 设计中的精髓,它是一切程序运行的基石。从整体而言, windows 的消息系统由以下三个部分组成: (1)消息队列(message queue) windows 能够为所有的应用程序维护一个消息队列。 应用程序必须从消息队列中获 取消息,然后分发给某个接受该消息的窗口。 (2)消息循环(message loop) 通过循环机制应用程序从消息队列中检索消息,再把它分派给适当的窗口,然后继 续从消息队列中检索下一条消息,再分派给适当的窗口,依次进行。 (3)窗口过程(window procedure) 每个窗口都有一个对应窗口处理过程来接收传递给该窗口的消息, 它的任务就是获 取消息然后响应它。窗口处理过程是一个回调函数;处理了一个消息后,它通常要返回 一个值给 windows。回调函数是程序中的一种函数,它是由 windows 或外部模块调用 的。 windows 消息提供了应用程序与应用程序之间、应用程序与 windows 系统之间进 行通讯的手段。 应用程序要实现的功能由消息来触发, 并靠对消息的响应和处理来完成。 一个消息从产生到被一个窗口响应,其中有 5 个步骤: 华 中 科 技 大 学 硕 士 学 位 论 文华 中 科 技 大 学 硕 士 学 位 论 文 31 (1)系统中应该发生了某个事件; (2)windows 把这个事件翻译为消息,把它放到消息队列中; (3)应用程序从消息队列中检索并接收到这个消息; (4)应用程序把消息传递给一个适当的窗口处理过程; (5)窗口处理过程响应这个消息并进行处理。 步骤(3)和(4)构成了应用程序的消息循环。消息循环往往是 windows 应用程 序的核心,因为消息循环使一个应用程序能够响应外部的事件。消息循环的任务就是从 消息队列中检索消息,然后把消息传递给适当的窗口。如果消息队列中没有消息, windows 就允许其他应用程序处理它们的消息。 通过了解 windows 系统消息机制,可以知道工程软件的任何功能代码的执行都是 通过事件或消息来触发响应执行的。对工程软件动态添加自定义功能响应首先要监控、 拦截工程软件可用的消息,并对消息进行筛选过滤,kmrobot 是利用 win32 api 来实 现底层拦截的。用户的定制开发通常不具有直接使用 win32 api 编程的水平,面对数以 千计的 windows 消息也往往摸不着头脑,针对这种情况,kmrobot 已经将工程软件常 用的触发命令的 windows 事件、消息整理成标准的自定义响应事件入口点,如表 4.1 所 示,用户只需要根据自己实际要监控、拦截的命令,来确定自定义事件入口点,而不需 要理会该入口点对应 windows 底层何种消息或消息组合等细节问题。 表 4.1 工程软件常用命令事件入口点列表 自定义事件入口点相应的 windows 消息 鼠标左键按下 wm_lbuttondown 鼠标左键弹起 wm_lbuttonup 鼠标右键按下 wm_rbuttondown 鼠标右键弹起 wm_rbuttonup 单击按钮 bm_clilked 选中按钮 bm_checked 选中菜单项 wm_command 复制 wm_copy 剪切 wm_cut 粘贴 wm_paste 在指定软件事件入口点之后, 只需要调用对该事件的自定义响应程序就可以实现动 态插入自定义功能响应的目的。 华 中 科 技 大 学 硕 士 学 位 论 文华 中 科 技 大 学 硕 士 学 位 论 文 32 4.2 对象识别技术实现 4.2.1 界面对象的显示特征 4.2 对象识别技术实现 4.2.1 界面对象的显示特征 经过 3.1 节对制造业软件界面操控对象模型归纳、研究可知,不同的界面对象实际 对应了不同的类,底层是由面向对象编程语言来实现的,界面的显示属性、功能都是通 过该界面类程序内部封装的属性和方法来完成的。在了解了界面对象的底层实现之后, 对于工程软件界面对象的识别就可以采用这种方法: 根据指定的界面对象属性查找当前 工程软件中与所提供属性相对应的界面对象。可见,界面对象的属性是界面识别的输入 条件,应该由用户来指定。所以,这里所讨论的对象属性对用户来说必须是通过当前界 面显示出来的, 不包括当前隐藏的界面对象。 按照界面对象的作用可以将其分为很多种, 如对话框、菜单、绘图区域等43,这方便了界面对象的查找,但不利于脚本程序的编写 和界面对象的管理。我们按照能够指定的查找属性分类,将工程软件界面对象分为文字 对象和图形项目对象两大类。在查找界面对象时,只需指定界面对象的种类(文字对象 和图形项目对象)及其属性即可查找到符合条件的界面对象。 文字对象是能够用界面对象上的显示文字作为标识条件的对象。 这些显示的文字在 工程软件内部使用编码表示(如:ascii、unicode),调用 windows 系统内部字体(如 宋体、微软雅黑、times new roman 等)显示文字,而不同于在工程软件内部没有编码 对应的图形输出文字。 一个界面对象一般对应一个界面窗口,文字对象的文字就显示在界面窗口之内;虽 然在实际编程中也能将文字显示在窗口之外,但此时文字已被 windows 系统剪切,是 不可见,因此不能用窗口之外显示的文字作为查找界面对象的文字属性。 文字对象还可以细分为框架窗口对象、内容窗口对象和菜单对象,各自显示特征如 表 4.2 所示,它们都可以用显示文字属性作为界面识别的输入条件。 表 4.2 文字对象类别及其显示特征 文字对象类别对象特征 框架窗口对象 带有标题栏,也可以有最大化、最小化和关闭按钮,还可 以有系统菜单,它是其他界面对象的容器 内容窗口对象 无标题栏,不可改变其在父对象中的位置,也不能改变大 小,对象的显示窗口一般以控件的形式出现 菜单 依附于其父窗口,不能改变大小与位置,具有层次结构 图形对象泛指不能用文字作为查找条件的界面对象,其显示特征为没有文字标识, 华 中 科 技 大 学 硕 士 学 位 论 文华 中 科 技 大 学 硕 士 学 位 论 文 33 在工程软件内部是以图片格式的编码实现的。图形对象在工程软件中出现非常频繁,滑 动条,用于显示零件简图、工艺流程图的窗口等,都是图形的对象。图形对象通常都是 作为子窗口对象出现的,因此通常也不能改变其在工程软件界面中的位置与大小。 图形对象按照其表现形式不同可以分为控制对象,功能项对象和其他对象三种。控 制对象本身能够控制其他的窗口对象,使其他的窗口对象出现变化。例如滚动条,滑动 条等;功能项对象是许多快捷功能以图形小按钮的形式给出的集合,如 cad 软件的绘 图工具栏;其他图形对象泛指一些只提供信息提示,无可操控性,故不具有识别意义。 在图 3.1 所示的 autocad 2004 中设置尺寸标注样式的效果图窗口。图形界面对象类别 及其示例如表 4.3 所示,它们都是利用图形技术对目标界面进行识别的。 表 4.3 图形对象类别表及其示例 图形界面对象类别 示例 控制对象 功能项对象 4.2.2 窗口对象识别技术 4.2.2.1 基于文字的精确识别 4.2.2 窗口对象识别技术 4.2.2.1 基于文字的精确识别 windows 系统提供的字符输出函数只有很少的几个: textout, exttextout, drawtext 等,其中 drawtext 最终是用 exttextout 实现的。所以 windows 的所有字符输出都是由 调用 textout 和 exttextout 实现的。textout 和 exttextout 是系统核心动态库 gdi32.dll 中的函数,它们的函数原型为: bool textout(hdc hdc, int nxstart, int nystart, lpctstr lpstring, int cbstring); bool exttextout(hdc hdc, int x, int y, uint fuoptions, const rect* lprc, lpctstr lpstring, const int* lpdx); 参数 lpstring 就是文字对象显示的文字内容。这些文字输出函数是在界面对象窗口 重画时调用的,在界面对象的窗口有效时则不会调用这些函数。因此,必须先使界面对 象的显示窗口无效,同时拦截属于该窗口的文字输出调用即可。使窗口无效通常使用 invalidaterect 函数, 它会向界面对象窗口发出 wm_paiint 消息,窗口处理过程会在处 理这个消息时调用文字输出函数重画界面对象上的文字39,41。 华 中 科 技 大 学 硕 士 学 位 论 文华 中 科 技 大 学 硕 士 学 位 论 文 34 对文字输出函数的拦截是通过监视上述显示文字的 api 函数调用而实现的39。 当该 函数一被调用就跳转到,用于实现获取文字信息的替换函数中去。在替换函数内部便可 以利用输入参数实现文字信息的获取。在完成调用之后再回到系统原来的函数中去,以 完成软件原有的文字显示功能。 4.2.2.2 基于图形的精确识别 4.2.2.2 基于图形的精确识别 图形的识别有多种方法,复杂的有基于遗传算法的图形识别技术,简单的有直接位 图比较。考虑到一般界面对象的显示图形并不复杂,在此使用直接对比位图的方法效率 会比较高。 基于位图的图形对象识别是对工程软件的图形对象进行分割和对比, 查找与指定的 位图文件相同的图形对象。一般来说,对文字对象也使用位图识别的方法进行识别也是 可行的,但是考虑到识别的效率,基于位图的界面对象识别只用于图形对象。基于位图 的图形对象识别分为工程软件界面对象的图形抓取、分割和对比(.bmp 文件)这几个步 骤。 位图文件的拾取可以通过系统自带的位图抓取工具来获得, 也可以通过第三方软件 来获取,对用户来说是很简单的。取得待识别的目标图形对象的显示位图之后,就能将 该位图文件(.bmp 格式)与工程软件所有的图形对象位图进行对比了。bmp 图像文件 格式称为设备相关位图,bmp 位图文件默认的文件扩展名是 bmp 或者是 bmp,有时, 它也以 dib 或者是 rlb 扩展名结束。位图文件主要由四部分组成,位图文件头,位图 信息头,彩色表和定义位图的图像数据阵列。其形式如下表 4.4 所示: 表 4.4 位图文件结构 位图文件的组成 结构名称 符号 位图文件头 bitmapfileheaderbmfh 位图信息头 bitmapinfoheaderbmih 彩色表 rgbquad acolors 图像数据阵列 byte abitmapbits 位图文件头,包含有关于文件类型,文件大小,文件存放位置等信息,用 bitmapfileheader 结构来定义; 位图信息头包含了有关位图的尺寸及位格式等信息 用 bitmapinfoheader 结构;彩色表包含的元素与位图所具有的颜色数相同,象素 的颜色用 rgbquad 结构来定义;图像数据阵列由图像的每一扫描行由表示图像象素 华 中 科 技 大 学 硕 士 学 位 论 文华 中 科 技 大 学 硕 士 学 位 论 文 35 的连续的字节组成,每一行的字节数取决于图像的颜色数目和用象素表示的图像宽度。 扫描行是由底向上存储的,这就是说,阵列中的第一个字节表示位图左下角的象素,而 最后一个字节表示位图右上角的象素。即简单说明,图像数据阵列中每个元素值就是指 每个元素的 rgb 值。 在上述的位图文件格式描述中, 图像数据阵列存储着该位图文件中每个像素的像素 彩色值,因此,要想判断某两个位图文件完全相同,就只需要判断两个文件中图像数据 阵列中的每个像素的像素值及像素的个数是否完全相同。 基于图像识别的识别算法流程 如图 4.4 所示。 开始 获取目标进程id 获取目标窗口位图 结构bmpdata 枚举可见窗口 获取窗口id 与目标进程id一致 获取该窗口位图结 构 与目标位图bmpdata一致 位图识别完毕,返 回该窗口句柄 结束 是 是 否 否 图 4.4 图形识别算法流程图 华 中 科 技 大 学 硕 士 学 位 论 文华 中 科 技 大 学 硕 士 学 位 论 文 36 基于位图对图像进行识别时选择的位图文件, 后缀名必须为 bmp; 对于标准工具条, 可以根据子按钮对象位图和工具条按钮位图,能够识别出其子按钮对象;不支持 jpg 格 式的对象图像格式文件,不支持不带工具条的子按钮位图的子对象识别。 4.2.2.3 界面对象的模糊识别 4.2.2.3 界面对象的模糊识别 针对工程软件的界面,用户通常可以将其对象进行分类,进而利用基于文字、位图 的方式进行精确识别获取。但是在特殊情况下精确识别会遇到以下困难:目标对象的类 型无法确定、存在多个文字相同的目标对象、存在多个图像相同的目标对象。在这些情 况下, 精确识别就失去了作用, 应该用到模糊识别方式才能获取到目标对象。 模糊识别, 是在用户不能通过精确识别来获取对象的情况下, 通过指定界面上与目标对象相关的多 个可用信息来进行识别的一种方式。利用 kmrobot 定制功能,用户在指定了文字、位 图、对象类别等精确识别途径之外,还可以结合指定目标对象当前状态、对象在软件界 面上的大概方位、 对象在屏幕上的大概方位等信息来对工程软件整个界面上的对象进行 筛选、查找。因为这种机制具有不确定性,初步筛选可能是错误的,故模糊识别提供了 对象纠错环节,通过该环节执行后,一般都能够成功识别出精确识别方式无法识别的对 象。 但是相对于精确识别来说,模糊识别的运行速度、执行效率要低得多,所以在用户 的定制开发中,该方式应该处于比较低的优先级。 4.2.3 web 对象识别技术 4.2.3 web 对象识别技术 随着制造业信息化规模的发展,b/s 构架的集成模式越来越多,界面操控自动化也 必须加入对 web 界面对象的支持。网页对象结构不同于窗口层次结构,是由基于 dom 规范开发应用的。 根据图 3.4 所示的 dom 对象类别层次结构,可以得出查找目标操控对象的基本思 路:首先,就是想方设法能够得到 ihtmldocument2 的接口。因为文档可能包含帧, 而帧又包含着子文档,子文档可能再包含帧。如此要得到所有的文档,这里有一个递归 遍历的处理过程。在得到文档(ihtmldocument2 类型)后,下一步任务就是要设法取 得表单了(ihtmlformelement 类型)。因为在一个文档中可以包含零个或多个表单 (form),而管理这些表单的又是一个表单集合(ihtmlelementcollectionl 类型),所以 必须先得到集合,然后再枚举出所有的表单条目。在枚举过程中,加入目标操控对象的 华 中 科 技 大 学 硕 士 学 位 论 文华 中 科 技 大 学 硕 士 学 位 论 文 37 判断条件,如:id 号、名称、位图等,就可以唯一确定某个表单对象为自动操控的目 标对象。 通过编程来访问网页对象,需要使用到一个非托管类库:mshtml.dll。mshtml.dll 是 微软 ie 浏览器的核心类库。可以通过 mshtml.dll 提供的接口,访问到 ie 布局对象,从 而达到对 web 的控制和检查38。以下给出枚举 web 界面对象的算法: (1)通过网页窗口,取得 ihtmldocument2 的接口指针。(web 页面 对象类别在第三章已经介绍,此处不在赘述) (2)得到了 ihtmldocument2 接口指针后,如果网页是单帧的,那么转 第(4)步骤。如果是多帧(有子框架)则还需要遍历所有的子框架。这些子 框架(ihtmlwindow2),被保存在集合中(ihtmlframescollection2),取 得集合指针的方法为 ihtmldocument2:get_frames()。 (3)首先调用 ihtmlframescollection:get_length()方法取得子框架的总 数目,接着就可以循环调用 ihtmlframescollection:item()方法一个一个地取 得子框架 ihtmlwindow2 指针,然后转第(1)步。 ( 4) 一 个 文 档 中 可 能 拥 有 多 个 表 单 , 因 此 , 先 要 取 得 表 单 的 集 合 (ihtmlelementcollection),其实这个不光是表单的集合,其他元素的集合, 比如图片集合也是用它。这个操作需要调用 ihtmldocument2:get_forms()方 法。 (5)然后,可以调用 ihtmlelementcollection:get_length()方法取得表单 总数目,从而就获得了循环历遍该表单集合的循环次数,接着就可以利用 ihtmlelementcollection:item()方法,循环取得每一个表单对象指针,利用用 户指定的判断条件,对每一个表单对象指针进行判断,筛选出待识别目标对象 后将该对象指针返回,从而完成界面对象的识别。 4.3 对象操控技术实现 4.3.1 对界面对象发送消息 4.3 对象操控技术实现 4.3.1 对界面对象发送消息 通过对 windows 消息机制的了解,可以知道,利用发送标准的 windows 消息的方 式对工程软件进行控制,是一种行之有效的方式。直接向界面对象窗口发送消息就是直 接将 windows 消息插入到工程软件的消息队列中,而工程软件本身将会自动处理消息, 从而达到控制工程软件的界面对象的目的。windows 操作系统内含了很多标准消息(消 华 中 科 技 大 学 硕 士 学 位 论 文华 中 科 技 大 学 硕 士 学 位 论 文 38 息标识 wm_开头),是 windows 系统本身所注册的界面对象窗口的窗口处理过程能够 处理并进行响应的消息,比如 wm_paint 消息,窗口收到该消息时,窗口处理过程将 更新界面对象的显示内容(在 mfc 中由 ondraw()函数负责重画窗口)。对于工程软件 设计人员自己定义的消息类型,其意义由设计人员解释定义,其窗口处理过程也是有设 计人员编写,而且在不同的工程软件中,设计人员很可能定义了消息值相同的自定义消 息,而其解释和响应过程却是完全不同的,因此自定义消息除非有公开的标准文档的说 明,否则是难以加以利用的。因此,直接发送消息的控制方式适合于 windows 内置的 界面窗口类型和标准的消息类型。 发送消息的方式有 sendmessage 和 postmessage 两种,它们的函数原型分别为: lresult sendmessage(hwnd hwnd, uint unmsg, wparam wparam, lparam lparam) bool postmessage(hwnd hwnd, uint unmsg, wparam wparam, lparam lparam) 这两个函数执行的过程有所不同。 sendmessage 函数直接触发消息响应过程的调用, 并且直到消息响应函数返回时,sendmessage 函数才会返回,其返回值就是消息响应过 程的返回值;而 postmessage 函数则只是将消息插入工程软件进程的消息队列之中就返 回,并不等待消息的处理过程处理消息。也就是说 sendmessage 属于阻塞的消息发送方 式,而 postmessage 属于非阻塞的消息发送方式。 由于 sendmessage 能够取得消息处理过程的返回值, 而且通常是要等待一个控制动 作完成之后才能进行下一个动作, 因此常用 sendmessage 方式发送消息。 而 postmessage 可以用于各个控制动作间的联系不大,不需要严格的动作执行顺序的动作执行。在用 postmessage 来执行控制动作时,有一点必须注意,由于其只是返回消息是否发送成功, 而不能取得窗口处理过程的返回值,因而其动作执行的时间是不能估计的,而且是否被 处理也不能得知, 因此用此方式发送消息执行控制动作之后需要取得界面对象的状态信 息,判断其是否符合下一步的处理条件,否则动作执行的过程和结果是难以保证的。 4.3.2 模拟用户手工输入 4.3.2 模拟用户手工输入 用户的输入和工程软件界面状态的改变都会产生触发事件,使 windows 系统生成 消息,并将其加入到工程软件的消息队列中。工程软件会在其消息循环中取走消息并交 由窗口处理过程进行处理。模拟用户输入也是一种有效的界面操控方式。目前,基于 windows 的应用软件的输入系统主要包括:键盘、鼠标。故模拟用户输入,就是发出键 盘与鼠标动作事件从而产生键盘、鼠标消息,触发工程软件对消息的响应,实现模拟人 华 中 科 技 大 学 硕 士 学 位 论 文华 中 科 技 大 学 硕 士 学 位 论 文 39 对键盘和鼠标的操作,进而由 windows 系统将产生消息传入工程软件进行处理。模拟 用户输入与直接发送消息有着明显的区别,模拟用户输入在消息产生的上一层,它属于 事件层, 而且不能指定对象。 windows 系统在收到事件触发后, 才会产生相对应的消息, 投递到工程软件的消息对列里去。 可以利用 sendinput 函数来产生键盘和鼠标的动作事件。其原型为: uint sendinput(uint ninputs, lpinput pinputs, int cbsize); sendinput 函数为产生键盘和鼠标事件提供了统一的方式,功能强大,不仅能够产 生键盘鼠标事件,还能产生其他的硬件输入事件,因此还能够用来在编写虚拟仪器时产 生其他的电信号的输入。 使用 sendinput 产生的鼠标事件,能够被各种显示在桌面的界面所接收,而键盘事 件则有些不同,它只能被 windows 系统中当前拥有输入焦点的界面对象。在 windows 系统中,当前只能有一个输入焦点,没有输入焦点的界面对象不能获得键盘事件。 模拟键盘、鼠标动作只是简单的产生键盘、鼠标事件,比如某按键按下或弹起,鼠 标左、 右键单击等, 是以按下的按键或移动位置为参数的, 而不是以界面对象为参数的。 用模拟的方法控制界面对象,就像一个盲人在使用键盘和鼠标进行操作一样,只是直到 按键被按下了,鼠标被移动或者点击过了,而按下的键由哪个界面对象接收了,点击到 了哪个界面对象,这些都是不知道的。因此在模拟键盘、鼠标动作之前,必须将要控制 的界面对象移动到桌面的最上层,让其获得输入焦点,而不能让其被其他界面对象的显 示窗口遮挡。 通过鼠标模拟技术可以实现鼠标的输入事件有:左键按下、弹起、单击、双击,右 键按下、弹起、单击,中间按下、弹起、单击,鼠标移动等;通过键盘模拟技术可以实 现键盘的输入事件有:单键按下、弹起,组合键,输入字符串等。用户可以使用这些事 件的组合来实现一些列鼠标、键盘输入。 4.3.3 com 接口的调用 4.3.3 com 接口的调用 网页对象不是窗口类型对象,故不能利用 windows 的消息机制,对网页对象发送 消息来实现。网页对象有着多种平台访问,多样的交互方式,所以网页对象利用 com 技术开发实现,对外提供统一标准接口。 com(component object model,组件对象模型),是一种以组件为发布单元的对 象模型,这种模型使各软件组件可以用一种统一的方式进行交互。com 既提供了组件 之间进行交互的规范,也提供了实现交互的环境44。com 规范的定义不依赖于特定的 华 中 科 技 大 学 硕 士 学 位 论 文华 中 科 技 大 学 硕 士 学 位 论 文 40 语言。因此,编写组件对象所使用的语言与编写客户程序使用的语言可以不同,只要它 们都能够生成符合 com 规范的可执行代码即可,是不同语言协作开发的一种标准。 web 页面对象有一套基于 com 技术开发的标准对外接口。对 web 界面元素的操 控是通过调用对象开放接口来实现的。对于 windows 的 ie 浏览器,web 页面元素访问 与操控需要使用到一个非托管类库 interop.shdocvw.dll。 interop.shdocvw.dll 提供了一 个 internetexploer 的接口, 可以帮助我们操纵 ie 进程, 并且进行一些简单的 (如: 前进, 后退等)操作。在获取了网页元素对象之后,就可以对应通过调用 interop.shdocvw.dll 提供的接口来对该对象进行操作。通过 com 接口的调用,可以实现填写网页表单、触 发网页按钮等类似与模拟键盘、鼠标的功能。 4.4 界面自动操控系统的平台化实现 4.4 界面自动操控系统的平台化实现 图 4.5 界面自动操控定制平台 ui 界面自动操控定制系统的平台化实现的用户界面如图 4.5 所示。根据系统内部模块 划分,用户界面主要包括:程序对象初始化模块、界面识别系统、界面操控系统、过程 华 中 科 技 大 学 硕 士 学 位 论 文华 中 科 技 大 学 硕 士 学 位 论 文 41 控制系统、互动集成、脚本编辑系统。程序初始化模块负责启动目标应用程序,在目标 应用程序已经开启的情况下,可以对其直接识别;界面识别可以通过精确识别、模糊识 别两种方式来定制完成,用户不熟悉识别方式的情况下,还可以直接利用平台提供的界 面对象查询工具来获取目标对象;界面操控系统提供了鼠标/键盘模拟输入,发送消息, 调用 web 对象方法几种方式来完成对象的操控;过程控制系统负责设置改变当前界面 环境,并且实现界面对象有效性验证和自动等待应用程序响应。脚本系统接收用户直接 脚本编辑,并且提供编译、简单调试、执行功能。当目标对象需要实现与 kmrobot 或 者其他工程软件的集成时,就需要利用互动集成模块来实现:集成菜单的制作与插入、 应用程序的事件监控、自定义事件响应调用。 平台对用户提供三种开发方式:界面定制过程、直接编写脚本、过程录制/回放。实 际上, 界面定制和编写脚本是统一的, 用户利用界面进行定制的同时, 脚本将自动生成; 同样,录制回放模式下,同时也将自动生成脚本。由界面定制开发方式自动生成的代码 如图 4.5 右部脚本系统所示。 用户通过提供多种开发方式能够适应不同开发水平的用户, 提高平台的易用性。 4.5 本章小结 4.5 本章小结 根据将界面自动操控技术应用于制造业信息化软件操控集成中的研发目的, 结合企 业用户特定软件操控过程对自动化工具的定制需求, 本章完成了界面自动操控定制系统 的平台化技术实现。主要内容如下:首先介绍了工程软件动态添加集成菜单、动态添加 自定义功能自动化接口的实现,解决了工程软件之间界面信息集成问题。接着给出了系 统中界面对象识别模块以及操控模块的技术实现。 最后展示了界面自动操控定制系统的 主功能界面。 在界面信息集成开发中,用户就可以利用该平台,轻松定制出一台智能“软件机器 人”,实现软件操作的自动化和软件界面信息集成的自动化。 华 中 科 技 大 学 硕 士 学 位 论 文华 中 科 技 大 学 硕 士 学 位 论 文 42 5 软件机器人在系统集成中的应用 5 软件机器人在系统集成中的应用 5.1 pro/e 文件自动生成工具 5.1 pro/e 文件自动生成工具 在企业信息集成应用中,产品信息在 cad、cam、capp、cae 各个系统中流通。 这种信息集成是以了解各个系统的主要文件格式为前提的。了解了文件格式,就能够根 据需要提取文件中相应信息。但是,制造业信息化产品开发商都不会把文件格式信息对 外公布,所以在没有官方资料的情况下,想要得到文件格式主要信息,就通常要对大量 二进制文件进行分析,文件内容的随机离散性越好,对格式分析越有利。 pro/e 零件图生成的文件是 .prt 格式的文件,为了实现从文件中提取指定的信息的 功能,就需要对.prt 文件进行分析,这首先就需要生成大量随机性较好的文件45。生 成 .prt 文件的大概步骤如下: (1)启动 pro/e,执行菜单“新建/零件”; (2)等待新建/零件命令响应完成之后,点击“工具”菜单下的“参数”子项,如 图 5.1 所示; (3)等待参数对话框启动完成,如图 5.2 所示; (4)点击对话框的“删除”按钮若干次(具体量由用户指定),将上次所有的参 数删除; (5)点击对话框的“添加”按钮; (6)键盘输入焦点自动聚焦参数名称编辑框,自动输入参数名称; (7)自动模拟键盘输入两次“tab”键; (8)键盘输入焦点自动定位数据编辑框,自动输入随机生成的数据; (9)如果需要添加多条数据,则重复回到第(5)步操作,否则,即完成参数数据 的添加; (10)点击“确定”按钮,完成文件的生成; (11)返回 pro/e 软件主界面,确认返回主界面环境后,执行菜单“文件/保存”, 如图 5.3 所示; (12)等待保存文件对话框启动完成,点击“确定”按钮,如图 5.4 所示。 华 中 科 技 大 学 硕 士 学 位 论 文华 中 科 技 大 学 硕 士 学 位 论 文 43 图 5.1 “参数”菜单项操作 图 5.2 数据填写 华 中 科 技 大 学 硕 士 学 位 论 文华 中 科 技 大 学 硕 士 学 位 论 文 44 图 5.3 “保存”菜单项操作 图 5.4 保存对话框操作 华 中 科 技 大 学 硕 士 学 位 论 文华 中 科 技 大 学 硕 士 学 位 论 文 45 经过以上步骤就完成了一个 .prt 文件的生成。可以看出,这一过程有着大量的软 件界面操控与键盘输入, 而且是重复性的劳动, 如果让用户手工完成可以说是非常繁琐、 枯燥的;另外一个问题就是,手工输入参数数据不能保证参数的随机性、离散性,从而 生成的文件不利于后续的文件格式分析工作。 利用界面自动操控定制系统,能够定制出来执行界面自动操控那个的运行脚本。只 需要运行该脚本就能够很好的完成上面的步骤, 而且可以利用计算机随机生成数据的能 力,保证大批量数据的离散型。定制出的主要脚本代码如下: /* 设输入参数字符串变量为 strparaname,省去该参数在脚本循环中的变化 */ /启动 pro/e 野火版,设置 pro/e 为当前环境 app = startapp(appname = pro/engineer wildfire 2.0); setenviroment(currentobject: appname = pro/engineer wildfire 2.0); /获取菜单对象,执行菜单,设置新建对话框为当前环境 appmenu = getobject(app, menu = 文件); submenu = getobject(appmenu, menu 新建); autoexecut(菜单, submenu); setenviroment(currentobject: dlgname = 新建); btn = getobject(button, 确定); autoexecute(按钮, btn, leftclick); /* 开始生成文件循环,生成文件个数为 n,单个文件参数个数为 n */ for(int i = 0; i n; +i) /获取菜单对象,执行菜单,设置新建对话框为当前环境 appmenu = getobject(app, menu = 工具); submenu = getobject(appmenu, menu 参数); autoexecut(菜单, submenu, leftclick); setenviroment(currentobject: dlgname = 参数); /清空参数 for(int j = 0; j n; +j) delbtn = getobject(button, 删除); 华 中 科 技 大 学 硕 士 学 位 论 文华 中 科 技 大 学 硕 士 学 位 论 文 46 autoexecute(按钮, delbtn, leftclick); /添加参数 for(int k = 0; k n; +k) addbtn = getobject(button, 添加); autoexecute(按钮, addbtn, leftclick); autoexecute(inputstring, strparaname); autoexecute(singlekey, tab); data = getrandom();/获取随机数据,方法省略 autoexecute(inputstring, data); /输入参数值 /返回主窗口界面,设置 pro/e 为当前环境 yesbtn = getobject(button, 确定); autoexecute(按钮, yesbtn, leftclick); setenviroment(currentobject: appname = pro/engineer wildfire 2.0); /获取菜单对象,执行菜单,设置新建对话框为当前环境 appmenu = getobject(app, menu = 文件); submenu = getobject(appmenu, menu 保存); autoexecut(菜单, submenu, leftclick); setenviroment(currentobject: dlgname = 保存对象); /完成新建零件功能 yesbtn = getobject(button, 确定); autoexecute(按钮, yesbtn, leftclick); appquit(app); /生成文件结束,关闭程序 通过简单对比测试,对于生成相同规模的文件,自动化生成文件所消耗的时间明显 低于手工生成的时间,能够有效地提高工作效率,并保证文件数据的离散性。如表 5.1 所示: 表 5.1 自动化工具实际应用效果 参数数量:100 个参数数量:50 个 手工生成单个文件 15 分 7 分 自动生成单个文件 30 秒 15 秒 华 中 科 技 大 学 硕 士 学 位 论 文华 中 科 技 大 学 硕 士 学 位 论 文 47 在实际应用中,用户针对该需求自行定制的自动化程序运行 24 小时,大概可以生 成 .prt 文件 5000 个,很好地满足了文件格式分析对文件数量的要求,文件的数量和质 量都是手工操控所不能比拟的。 5.2 kmpdm 与 protel 的文件交互集成 5.2 kmpdm 与 protel 的文件交互集成 protel 是电子电路设计中最常用的一款 cad 软件,本节将介绍基于 kmrobot(界 面操控自动化定制系统)开发实现的 protel 与 kmpdm 的集成方案。 在利用 protel 进行设计过程中,常常需要进行标准库文件的导入。但是在企业集成 应用中,库文

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论