一种残膜回收机防缠绕挑膜装置的制 一种秧草收获机用电力驱动行走机构

基于CAX软件录制用户操作自动生成Python脚本的方法和装置

2023-02-04 14:58:50 来源:中国专利 TAG:

基于cax软件录制用户操作自动生成python脚本的方法和装置
技术领域
1.本发明涉及计算机技术领域,尤其涉及一种基于cax软件录制用户操作自动生成python脚本的方法和装置。


背景技术:

2.cax是cad(计算机辅助设计)、cam(计算机辅助制造)、cae(计算机辅助工程)等各项技术的综合叫法。cax实际上是把多元化的计算机辅助技术集成起来复合和协调地进行工作,除了在产品设计时,设计部门工作外,其他各部门也可以提前介入无需等待上一道作业完成后,才开始下一道作业,缩短了开发时间;同时,在产品设计早期,能很好地考虑到产品生命周期的各种因素,提前发现设计上的错误和误差,及时进行修正以及可以在设计过程中,按照市场的需求,不断提出可比较的多种设计方案,从而获得最优化的设计成果和效益。此时,cax软件用户主要是通过软件对生产和设计过程进行计算机仿真,仿真流程包括前处理、求解、后处理、优化、报告等环节。为了寻找最优结果,这一仿真流程可能需要反复执行多次,需要消耗cax软件用户大量的时间。
3.通过执行录制得到的脚本,能够模拟cax软件用户的操作,对cax软件进行直接控制,这种解决方案已经被广泛应用在各类cax软件中。录制脚本的解决方案可归纳为一个集脚本录制、编辑和回放于一体的软件系统。此时,该系统可抽象为三个核心模块:脚本生成器、脚本编辑器和脚本解释器。
4.根据实现的机制不同,脚本生成器可以分为cax软件自带实现(紧耦合)和第三方软件实现(松耦合)两种。
5.松耦合方式主要使用一个钩子程序或基于开放的操作系统接口,截获操作系统发送给其它应用程序的消息,然后通过对截获消息的解析翻译得到脚本。windows操作系统下的消息机制提供了应用程序与应用程序之间、应用程序与操作系统之间通讯的手段。windows系统中有两种消息队列,一种是系统消息队列,另一种是应用程序消息队列。应用程序通过对应用程序消息队列中的消息进行处理或转发,实现与windows用户的交互。windows操作系统会监控所有输入设备(鼠标、键盘等),当用户按键、移动鼠标时将触发一个“简单事件”(产生一个消息),windows先将输入的消息放入系统消息队列中,然后再将输入的消息拷贝到相应的应用程序队列中,应用程序中的消息循环从它的消息队列中检索每一个消息并发送给相应的窗口函数中。通过钩子程序,或者依赖winsocket协议,可以实现对windows消息队列的监听,从而捕获用户的输入,通过监听、过滤、翻译等步骤可实现对用户操作的录制。
6.紧耦合方式直接在cax软件内部实现,绕开了操作系统的限制,进一步可分为录制简单事件和录制高级事件两类。在cax软件内部,从理论上讲,所有用户在gui表现层的操作都可被细分为若干简单事件(主要是qt事件,例如:按下鼠标按键、释放鼠标按键、鼠标移动、按下键盘按键和释放键盘按键)。一种录制用户操作的简单方式是,在录制脚本时,首先
记录所有的简单事件及参数,然后合并相同的事件,这样可确保在回放时应用程序进入相同的状态。通过将这些简单事件翻译成特定的脚本语言语句,记录下来即可实现脚本录制功能。
7.紧耦合的另一种实现是录制“高级事件”方式。此时,不是简单地记录用户在某坐标处按下并释放了鼠标按键这种简单事件,而应该是完成从用户在gui界面触发的简单事件到高级事件的一种映射。例如,应该记录单个“按钮激活”这种高级事件,以便可以在回放期间激活正确的按钮,而不管其屏幕坐标如何。同样,在文件对话框中的所有鼠标单击和滚动操作都应该由单个“选择文件”事件代替,该事件以文件名作为参数。在回放期间,脚本可以指定正确的文件,而无需对基础文件系统进行任何更改。当记录与旋转按钮的交互时,一系列鼠标单击和键盘输入可以替换为单个“设置整数”事件,该事件以最终赋给整数的值作为参数。记录高级事件的一个核心过程就是如何将一系列简单事件转义为一个高级事件。通常,这一过程需要通过qt事件翻译器、小部件事件翻译器和事件观察者三个组件协同工作加以实现。其中,qt事件翻译器作为一个顶级的、全局qt事件过滤器,被挂载到qt事件处理循环中,它将对应用程序产生的每个qt事件进行过滤,并接收来自qt小部件的记录事件信号,将其发送给相应的事件观察者。小部件事件翻译器是一个抽象接口,通过翻译事件方法实现从简单事件到高级事件的转换。它的派生类可能是特定于某个小部件,例如comboboxeventtranslator;或者可以表示一类相关的小部件,例如abstractslidereventtranslator,可以转换从qabstractslider派生的任何小部件的事件,包括qdial,qscrollbar和qslider。事件观察者是一个抽象接口,它的实例通过配置某个qt消息插槽,将接收来自小部件翻译器实例的消息,对高级事件进行序列化,并以流的方式写入到脚本文件或系统日志文件中。
8.松耦合实现的脚本录制功能和记录简单事件的紧耦合实现,由于用户界面皮肤、平台、硬件和操作环境的差异,录制得到脚本在不同用户电脑、不同操作系统上执行可能会失败,均面临如下几个方面的不足:
9.1、仅记录用户操作,难以记录用户操作的结果。这一不足在松耦合实现上表现尤为突出。由于通过操作系统的消息机制,无法获取到cax软件的状态变化(cax软件自身状态变化不会直接通过系统消息或软件消息反映出来),这样一来在进行脚本回放时无法验证执行结果的正确性,或者无法根据用户的操作得到cax软件的中间状态,作为下一步用户操作的输入,脚本无法实现cax软件的所有功能,通用性和灵活性受到限制。
10.2、不同平台之间(由于用户的选择,甚至在同一平台上)窗口管理器的差异可能导致窗口的大小和排列在记录脚本和回放脚本之间有所不同。会导致在某些特定情况下,脚本回放的失败。
11.3、由于用户界面的外观或平台特定的外观,即使顶层窗口的大小始终保持一致,小部件(widget)的大小也可能非常大。例如,分隔条的宽度在两个平台之间可能会相差几个像素。在回放用户调整分割器大小的脚本期间,这可能导致鼠标“错过”分割器,将随后的鼠标移动事件发送到相邻控件中,而不是发送到它们所属的分割器中。此外,字体大小的差异会影响菜单的大小,国际化也可以从根本上改变小部件的大小和布局。
12.4、当记录与文件对话框的典型用户交互时,回放将包括滚动条移动和用户在其文件系统中导航时双击的某种组合。不幸的是,这种记录在很大程度上取决于文件系统的内
容。在记录和回放之间,因为文件名相对于鼠标位于不同的位置,文件系统内容的几乎任何更改都将导致测试失败。
13.5、如果由于gui界面升级,cax软件用户界面将旋转按钮替换为一个滑块,则在回放过程中,用户与旋转按钮的交互将失败,尽管事实是两者均表示整数。
14.上述不足将导致回放失败,或者脚本功能受限。
15.对于记录高级事件的紧耦合方式,主要存在以下两方面的不足:
16.1.录制得到的脚本语言不具备普适性。ansys公司软件记录生成的tcl/tk、apdl、scheme等脚本语言,受到历史原因的限制,面临学习资料少、学习成本高、灵活性和通用性不足等问题。
17.2.实现机制不够灵活,用户扩展需要重新编译。现有实现方式中,负责事件翻译的三个部件全部采用c 编码实现,用户进行二次开发时,若希望记录用户扩展的功能模块、组件、插件的操作,需要用户将二次开发部分代码发送给原厂进行编译,得到可被执行的二进制代码,系统实现不够灵活,且二次开发用户的知识产权无法得到保护。


技术实现要素:

18.针对现有技术之不足,本发明提出一种基于cax软件录制用户操作自动生成python脚本的方法,在gui表现层和核心业务逻辑层之间,设置脚本处理引擎,实现将cax软件用户操作翻译成python脚本的功能,所述脚本引擎处理包括事件驱动组件、脚本生成器和规则元数据驱动组件,所述规则元数据驱动组件实现对规则元数据信息本身的读取、遍历、查询功能,同时提供c 和python语言访问接口,具体脚本翻译方法包括:
19.步骤1:启动cax软件,在所述cax软件初始化过程中从xml文件加载规则元数据到内存;
20.步骤2:用户在gui表现层上通过键盘、鼠标操作触发qt简单事件,并通过所述qt简单事件的响应机制通知事件驱动组件;
21.步骤3:所述事件驱动组件将所述qt简单事件存入历史事件队列,根据规则元数据信息,判断历史事件队列中的事件是否构成一个完整的高级事件,即完成一个动作,若已完成,则清空历史事件队列,执行步骤4,否则跳转到步骤2;
22.步骤4:所述事件驱动组件触发一个高级事件,通过消息机制通知核心业务逻辑层,完成所述高级事件对应的业务逻辑操作,基于不同类型的高级事件,所述事件驱动组件与核心业务逻辑之间的通信可采用同步或异步方式;
23.步骤5:所述核心业务逻辑层执行高级事件所对应的业务逻辑操作,并在执行结束后通过消息机制通知所述事件驱动组件;
24.步骤6:所述事件驱动组件判断所述核心业务逻辑层执行的结果,若执行成功,则执行步骤7,否则跳转到步骤15,结束程序执行,并异常退出;
25.步骤7:所述事件驱动判断但钱是否正在录制脚本,若正在录制,则继续执行步骤8,否则跳转步骤14;
26.步骤8:所述事件驱动从内存中读取规则元数据,将一个高级事件转换成一个追踪项,并调用c 代码中定义的宏,通知所述脚本生成器开始记录一个追踪项;
27.步骤9:所述脚本生成器根据接收到的追踪项信息,完成c 端的追踪项初始化,并
调用python代码;
28.步骤10:根据传入的追踪项实例化一个python对象,所述脚本生成器根据传入的追踪项信息,并依据规则元数据信息,实例化一个与该用户操作相对应的python对象,本步骤在python端执行;
29.步骤11:记录追踪项生成python语句,所述脚本生成器调用python对象的记录日志方法,将该追踪项信息以python语句的形式追加到一个缓存列表中,本步骤在python端执行;
30.步骤12:所述脚本生成器在在c 端获取到对步骤10中所创建python对象的引用,并反馈给所述事件驱动组件;
31.步骤13:所述事件驱动组件获得python对象的引用,供后续业务代码使用;通常情况下,该引用仅供c 代码来判断脚本生成器是否执行成功。
32.步骤14:cax程序是否结束执行,若结束,则继续步骤15;否则跳转到步骤2;
33.步骤15:结束cax程序执行,正常退出。
34.根据一种优选的实施方式,所述规则元数据信息记录着cax软件各项功能点的元数据信息,一个元数据即为一条规则,所述规则将gui表现层、核心业务逻辑层、事件驱动组件和脚本生成器联系到一起。
35.根据一种优选的实施方式,步骤3中的规则包括对应某个功能点核心业务逻辑层的实现接口、事件驱动组件调用所述实现接口是相关属性参数及返回值、某个功能点对应在gui层需要展现的相关文本信息和控制逻辑、脚本生成器记录该功能点时需要的相关信息。
36.一种基于cax软件录制用户操作自动生成python脚本的装置,所述装置包括gui表现层和核心业务逻辑,所述装置还包括设置在所述gui表现层和核心业务逻辑之间的脚本处理引擎,所述脚本处理引擎包括:
37.事件驱动组件,被配置成收集并过滤用户在gui表现层上的操作,通过读取规则原数据,将gui表现层上触发的简单事件转化成高级事件,即动作语义,并将所述动作语义发送给脚本生成器;
38.脚本生成器,被配置成读取规则元数据,将所述动作语义翻译成一组脚本指令,实现以某个特定编程语言语法记录动作语义的功能;即可通过不同的脚本生成器实现采用不同编程语言录制脚本的功能;
39.脚本生成器,还被配置成实现语义分析,实现变量的自动定义和调用;
40.规则元数据驱动组件,被配置成记录cax软件各项功能点的元数据信息,实现对规则元数据信息本身的读取、遍历、查询功能,同时提供c 和python语言访问接口。
41.本发明旨在设计一种记录高级事件、紧耦合实现的脚本处理引擎,该引擎可将cax软件用户操作翻译成python脚本。并且,在实现从简单事件向高级事件翻译的过程中使用c 和python的混合编程,翻译和记录的核心代码使用python语言实现。
42.针对现有技术不足,本发明的有益效果在于:
43.1、能够记录cax软件用户操作并自动生成python脚本。通过编辑录制脚本,可减少用户的重复性工作,通过在python脚本中加入条件、分支、循环等语句,可对用户操作进行扩展和离线执行,提高cax用户的工作效率。
44.2、python语言降低了cax软件用户的学习成本。目前,python语言具有较好的用户基础,本发明采用python语言记录用户操作,cax软件用户学习、理解和编辑录制生成的python脚本相对其它脚本语言更容易。
45.3、采用c 和python混合编程模型,将小部件事件翻译器和观察者采用python语言编码实现,可方便cax软件开发者进行程序的更新。同时,cax软件的二次开发用户可分别在本地实现对扩展功能的python脚本语言扩展,提高了二次开发的灵活性。
附图说明
46.图1是gui表现层、脚本处理引擎与核心业务逻辑三者关系图;
47.图2是事件、语义、语句转换过程示意图;
48.图3是本发明提出的cax软件自动生成python脚本流程图。
具体实施方式
49.为使本发明的目的、技术方案和优点更加清楚明了,下面结合具体实施方式并参照附图,对本发明进一步详细说明。应该理解,这些描述只是示例性的,而并非要限制本发明的范围。此外,在以下说明中,省略了对公知结构和技术的描述,以避免不必要地混淆本发明的概念。
50.下面结合附图进行详细说明。
51.图1是gui表现层、脚本处理引擎与核心业务逻辑三者关系图。本发明提出一种基于cax软件录制用户操作自动生成python脚本的方法,在gui表现层和核心业务逻辑层之间,设置脚本处理引擎,实现将cax软件用户操作翻译成python脚本的功能,如图1所示。所述脚本引擎处理包括事件驱动组件、脚本生成器和规则元数据驱动组件,所述规则元数据驱动组件实现对规则元数据信息本身的读取、遍历、查询功能,同时提供c 和python语言访问接口。图2是事件、语义、语句转换过程示意图。图3是本发明提出的cax软件自动生成python脚本流程图。具体如图2和图3所示。
52.具体脚本翻译方法包括:
53.步骤1:启动cax软件,在所述cax软件初始化过程中从xml文件加载规则元数据到内存;所述xml文件存放在cax文件的安装目录中,为cax软件的配置文件的一部分。
54.规则元数据信息记录着cax软件各项功能点的元数据信息,功能点是cax软件自身需要实现的业务功能,如前面提到的图形定义(椎体、球体、立方体、不规则图形等)、图形绘制、网格导入、网格格式转换、运算、残差分析、结果展示等。通常,一个cax软件可能具有几十甚至上百个功能点。一个元数据即为一条规则,所述规则将gui表现层、核心业务逻辑层、事件驱动组件和脚本生成器联系到一起。
55.步骤2:用户在gui表现层上通过键盘、鼠标操作触发qt简单事件,并通过所述qt简单事件的响应机制通知事件驱动组件。
56.图2是事件、语义、语句转换过程示意图。图3是本发明提出的cax软件自动生成python脚本流程图。具体如图2和图3所示。
57.步骤3:所述事件驱动组件将所述qt简单事件存入历史事件队列,根据规则元数据信息,判断历史事件队列中的事件是否构成一个完整的高级事件,即完成一个动作,若已完
成,则清空历史事件队列,执行步骤4,否则跳转到步骤2。
58.这里的规则元数据是指记录在步骤1中加载到内存的xml文件中包含的数据信息。以绘制一个椎体为例,需要指定椎体的面数、高度、边长、颜色等属性信息。这些属性信息需要用户通过gui界面中的多个文本框进行输入,从输入时将产生多个简单事件。只有当所有属性信息齐全后,才能绘制一个椎体,产生一个高级事件。通过读取“规则元数据信息”,才能知道所有属性信息是否齐全,才能判断何时生成一个对应的高级事件。
59.步骤3中的规则包括对应某个功能点核心业务逻辑层的实现接口、事件驱动组件调用所述实现接口是相关属性参数及返回值、某个功能点对应在gui层需要展现的相关文本信息和控制逻辑、脚本生成器记录该功能点时需要的相关信息。
60.可以采用任何结构化方式记录规则信息,如xml文件。
61.步骤4:所述事件驱动组件触发一个高级事件,通过消息机制通知核心业务逻辑层,完成所述高级事件对应的业务逻辑操作,如绘制一个椎体,基于不同类型的高级事件,所述事件驱动组件与核心业务逻辑之间的通信课采用同步或异步方式。
62.步骤5:所述核心业务逻辑层执行高级事件所对应的业务逻辑操作,并在执行结束后通过消息机制通知所述事件驱动组件。
63.消息机制是由windows或linux操作系统的消息系统,或者第三方消息中间件提供。不同平台的cax软件、不同的开发者可能会选用不同的消息机制。
64.步骤6:所述事件驱动组件判断所述核心业务逻辑层执行的结果,若执行成功,则执行步骤7,否则跳转到步骤15,结束程序执行,并异常退出。
65.步骤7:所述事件驱动判断但钱是否正在录制脚本,若正在录制,则继续执行步骤8,否则跳转步骤14。
66.步骤8:所述事件驱动从内存中读取规则元数据,将一个高级事件转换成一个追踪项,并调用c 代码中定义的宏,通知所述脚本生成器开始记录一个追踪项;追踪项是本发明中对于一个高级事件的抽象,反映为一个c 对象。该c 对象最终将被转换成一个python对象。
67.步骤9:所述脚本生成器根据接收到的追踪项信息,完成c 端的追踪项初始化,并调用python代码。
68.步骤10:根据传入的追踪项实例化一个python对象,所述脚本生成器根据传入的追踪项信息,并依据规则元数据信息,实例化一个与该用户操作相对应的python对象,本步骤在python端执行。
69.步骤11:记录追踪项生成python语句,所述脚本生成器调用python对象的记录日志方法,将该追踪项信息以python语句的形式追加到一个缓存列表中,本步骤在python端执行。
70.步骤12:所述脚本生成器在在c 端获取到对步骤10中所创建python对象的引用,并反馈给所述事件驱动组件。
71.步骤13:所述事件驱动组件获得python对象的引用,供后续业务代码使用;通常情况下,该引用仅供c 代码来判断脚本生成器是否执行成功。
72.步骤14:cax程序是否结束执行,若结束,则继续步骤15;否则跳转到步骤2。
73.步骤15:结束cax程序执行,正常退出。
74.关于开始录制脚本:用户使用cax软件过程中,若在gui表现层点击开始录制按钮,则步骤7中判断是否正在录制脚本选项置为真。
75.关于结束录制脚本:当用户在gui表现层点击停止录制按钮,事件驱动将从脚本生成器中获取步骤11所述的缓存列表数据,形成本次录制脚本所自动生成的所有python语句,并以python脚本的形式呈现给用户。
76.本发明还提出一种基于cax软件录制用户操作自动生成python脚本的装置,所述装置包括gui表现层和核心业务逻辑,所述装置还包括设置在所述gui表现层和核心业务逻辑之间的脚本处理引擎,所述脚本处理引擎包括:
77.事件驱动组件,被配置成收集并过滤用户在gui表现层上的操作,通过读取规则原数据,将gui表现层上触发的简单事件转化成高级事件,即动作语义,并将所述动作语义发送给脚本生成器。
78.脚本生成器,被配置成读取规则元数据,将所述动作语义翻译成一组脚本指令,实现以某个特定编程语言语法记录动作语义的功能;即可通过不同的脚本生成器实现采用不同编程语言录制脚本的功能。
79.脚本生成器,还被配置成实现语义分析,实现变量的自动定义和调用。
80.规则元数据驱动组件,被配置成记录cax软件各项功能点的元数据信息,实现对规则元数据信息本身的读取、遍历、查询功能,同时提供c 和python语言访问接口。
81.需要注意的是,上述具体实施例是示例性的,本领域技术人员可以在本发明公开内容的启发下想出各种解决方案,而这些解决方案也都属于本发明的公开范围并落入本发明的保护范围之内。本领域技术人员应该明白,本发明说明书及其附图均为说明性而并非构成对权利要求的限制。本发明的保护范围由权利要求及其等同物限定。
再多了解一些

本文用于创业者技术爱好者查询,仅供学习研究,如用于商业用途,请联系技术所有人。

发表评论 共有条评论
用户名: 密码:
验证码: 匿名发表

相关文献