热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

python获取窗口句柄自动输入文本_基于Python的Workbench开发指南+案例解析

ANSYSWorkbench中日志(Journal)功能提供了记录界面操作的能力。Workbench日志功能为基于Python的脚本,通过脚本功能,我们

ANSYS Workbench中日志(Journal)功能提供了记录界面操作的能力。Workbench日志功能为基于Python的脚本,通过脚本功能,我们能够实现以下功能:

  • 能够快速轻松地重播日志记录的操作;

  • 扩展仿真功能、自动化重复仿真分析;

  • 通过脚本以批处理(Batch)模式运行分析。

1、Journal脚本综述

Workbench提供脚本录制功能,我们可以修改这些脚本或创建新的脚本。

1.1 日志脚本录制

可以通过以下几个步骤录制:

①  启动ANSYS Workbench平台,选择File > Scripting > Record Journal;

②  指定日志文件的名称存放地址,点击Save;

③  像往常一样使用界面操作进行仿真分析,Workbench会自动记录操作脚本;

④  选择File > Scripting > Stop Record Journal,停止脚本录制。

1.2 脚本命令窗口

在Workbench中可以使用命令窗口以交互模式调用命令访问数据实体(Data Entity)属性,调用数据实体数据容器(Data Container)方法。操作如下:

①  选择File > Scripting > Open Command Window;

②  命令窗口打开后,输入想要运行的命令;

每次输入命令时,相应的操作将出现在Workbench数据库和GUI上。我们一起看下面一段命令:

962f3c3e2e9011d4cc55116c195d8828.png

38de048a8b3c91cf8c34364c6da48dd5.gif

解析:在上面命令中:首先通过GetTemplate()方法获得Mesh组件系统的对象变量:mesh_temp;然后调用mesh_temp对象下的CreateSystem()方法创建Mesh组件系统。

2、脚本编写

脚本是向Workbench发出的一组指令。脚本可以是修改过的日志,也可以是直接编写的全新指令。Workbench脚本使用面向对象的编程方法,脚本是基于IronPython2.7编写的,在尝试编写或修改脚本之前,我们应该熟悉这个版本的Python。

IronPython(https://ironpython.net/)是流行的编程语言Python for .NET的一个实现,而我们常说的Python是基于C语言实现的CPython(https://www.python.org/);两者在语法基础类库是完全一致的,但是IronPython不能使用基于C语言编写的Python模块,如Numpy、Matplotlib等。

Python 是一种面向对象、解释型和交互的编程语言,简单易学容易上手,其代码具有非常强的可读性。Python本身为我们提供了非常完善的基础代码库,覆盖了网络、文件、GUI、数据库、文本等大量内容。基于Python的易学性和强大的扩展性,我们很容易利用Workbench中脚本API扩展所需的仿真功能。关于Python的基础语法和使用方法,本文不做叙述,大家可以去网上自学入门。接下来主要介绍Workbench的框架结构数据结构

2.1 数据集成应用程序

在项目示意图(Project Schematic)下,可以与Workbench的本地应用程序(称为工作区)交互,并且可以启动数据集成(Data-integrated)应用程序。工作区完全构建在Workbench框架上,可以使用它的所有服务,包括:项目示意图、工程数据(Engineering Data)和设计探索(Design Exploration)。

数据集成应用程序是独立于Workbench框架;它们以扩展程序(Addins)集成在框架上,这样可以由项目示意图驱动,并与Workbench和其支持的程序共享关键数据和参数。数据集成应用程序包括Mechanical APDL、Fluent、CFX、DesignModeler、SpaceClaim、Mechanical等。

e87dbdc02b6197f939f49e3b5c930c19.png

工作区数据集成应用程序之间的差异在于:所有与工作区关联的数据修改操作都会被日志记录下来,并且可以通过Workbench脚本完全自动化;对于数据集成应用程序来说,只记录从项目示意图发起的操作,包括系统更新数据共享传输。在数据集成应用程序中执行的操作不一定由ANSYS Workbench脚本记录或控制。例如,没有记录Mechanical APDL中构造几何的步骤或ANSYS Fluent中的求解方法。

虽然数据集成应用程序并不完全支持Workbench脚本,但它们中许多都有自己的原生脚本语言,可以通过Workbench脚本接口驱动。使用SendCommand方法将原生脚本命令传递给数据集成应用程序。可以将SendCommand调用方法插入Workbench脚本中,以驱动集成应用程序。

c59b5752f6d6dcb0157b5f0f646cecaa.png

2.2 Workbench项目和数据结构

在使用Workbench脚本时,我们应该理解以下术语和概念。下图描述了项目中对象之间的关系。

f688a8df86302623ae7cd68757ca08c8.png

项目 - Project

  • 项目是为实现总体仿真目标创建的系统(System)、组件(Components)、数据(Data)及数据共享(Connections)的完整集合。

系统 - System

  • 系统是一组组件或单个组件的集合,它们共同提供实现仿真目标的工作流,例如结构静力学分析、稳态流动分析及网格划分等。

组件 - Component

  • 一个组件包括数据和一个数据编辑器(Editor)的集合,它们一起工作以实现与CAE相关的任务。一个系统可以包括几个组件,这些组件一起定义模拟工作流。数据编辑器可以支持Workbench数据集成应用程序,如:Fluent、mechanical;也可以是工作区应用,如工程数据和设计探索。

数据容器 - Data Container

  • 数据容器包括单个组件独有的数据以及要管理和操作的服务。创建、检索或修改组件本地数据的服务由数据容器提供,而控制数据进出组件的服务则由组件提供。

数据实体 - Data Entity

  • 数据实体是在数据容器中定义的数据结构。数据实体类似于面向对象编程中的类。它定义可以调用的成员数据(或属性)和方法来对数据执行操作。

数据引用 - Data Reference

  • 数据引用是实例化数据实体的句柄。可以从数据实体定义创建对象,数据引用提供对该对象的访问。在Workbench日志中,数据引用被分配给变量。然后使用变量访问数据实体的属性和方法。示例如下:

8d4d3d61039fad3209e16f0538e3f5b5.png

解析:上述代码通过GetSystem方法,返回引用System ID的数据对象,并将其分配给变量mesh_sys;然后使用变量mesh_sys可以调用System数据实体支持的方法,如用于更新组件系统的Update()方法。

数据容器引用 - Data ContainerReference

  • 与数据引用类似,数据容器引用是实例化数据容器对象的句柄。示例如下:

b994962d21a7a46a0deb1259339a0403.png

解析:上述代码通过调用mesh_sys对象的GetContainer方法,返回引用Component ID的数据容器对象,并将其分配给变量mesh;然后使用变量mesh可以访问组件数据实体支持的方法,如Edit和SendCommand方法。

2.3 脚本开发

进行Workbench脚本开发,需要做到以下几个方面:

①首先我们需要了解面向对象编程方法:理解属性实例对象方法的概念;

②掌握Python的基本语法、流程控制、数据结构、函数及类的编程方法,并了解常用模块使用方法;

③了解仿真流程,并理解Workbench框架和数据结构;可通过开发文档查询获取脚本API。

做到上述要求其实并不难,只要我们平时多了解Python的使用方法,理解Workbench框架和数据结构,并时常多阅读Workbench脚本开发文档,多将理论知识付诸于实践中,相信大家很快都能掌握脚本开发的方法。

详细的Workbench脚本开发文档,大家可以在后台回复关键字“workbench脚本”即可获取。

3、命令行启动

Workbench可以从操作系统命令行执行,并接受许多命令行参数,以便于自动化和脚本重放。以下命令可用于从命令行运行Workbench:

ANSYS_INSTALL_PATH/Version/Framework/bin/PLATFORM/runwb2.exe

其中Version是对应ANSYS版本;例如,19.0对应v190,2019R1对应V193。

命令中PLATFORM可以是以下之一:

  • Win64

  • Linux64

例如,要从Windows 64位系统的默认安装位置运行Workbench 19.0,命令是:

C:\Program Files\ANSYS Inc\V190\Framework\bin\win64\runwb2.exe

下表描述了可用于控制ANSYS Workbench的常用命令行参数。

168c61a2da1ec79426a0d07a45fe2029.png

4、案例应用

上述部分我们介绍了Workbench框架和数据结构,以及脚本开发方法和命令行启动方式,下面我们通过一个实例演练一下。

4.1 案例目标

在上一篇文章中我们在Workbench平台下,对球阀的开度和水流速度进行参数化。之后可以在Parameter Set界面下快速更改参数进行仿真求解。

a516bfeeded1b747813368dda5197aaf.png

本案例中,演示通过Workbench脚本驱动更改输入参数,然后更新Mesh和Fluent组件系统,最后仿真计算完成后通过脚本读取输出参数,并将结果保存到csv文件。

4.2 脚本开发

如果对Workbench脚本API不太熟悉,可以采用1.1中的方法先将功能操作录制成日志文件,然后再在日志文件基础上修改并添加功能。完整的代码如下所示,相应注释已添加。

d8a9db12c75a433fbceddd0524ba5467.png

4.3 批处理执行

将脚本文件保存为Valve.py文件,与Workbench项目文件放在一个目录下。然后在同一目录下新建记事本文件,输入以下启动命令,之后将文件保存为ValveRun.bat。

80dd1e1f3bf316c22d12b51b65b542ed.png

上述命令中:①%AWP_ROOT190%对应着ANSYS_INSTALL_PATH/v190目录,是ANSYS安装后自动创建的环境变量;②“.\Valve.wbpj”代表同一目录下的Workbench文件;③“.\Valve.py”代表同一目录下的脚本文件。文件结构如下:

436e003023e9b274db1802708b378d38.png

修改Valve.py中valve_angle和inlet_velocity值,双击运行ValveRun.bat批处理文件,系统会自动调用Workbench19.0,加载脚本文件Valve.py,之后执行脚本中定义的仿真流程:①修改输入参数;②更新组件系统;③输出结果到result.csv文件。输出结果如下:

84aac7146a7c0a46bf9141068363acb8.png

4.4 设计点

在4.2中示例脚本,只是一组设计点下的计算流程;如果需要一次计算多个设计点,可以通过Python中的循环语句实现,脚本代码如下:

2222783cd958f31d72a55b18fe896bce.png

将上述代码保存为Value_dp.py放在和Valve.wbpj同一目录,后在同一目录下新建记事本文件,输入以下启动命令,之后将文件保存为ValveRun_dp.bat。

6e8e5ebffb0ee1f780c6a292e95917ae.png

修改Valve_dp.py中valve_angle列表值及inlet_velocity值,双击运行ValveRun_dp.bat批处理,系统会自动调用Workbench19.0,加载脚本文件Valve_dp.py,之后执行脚本中定义的仿真流程输出结果到result.csv。结果如下:

ec59a6d7328b77a8103a239cde5c47d5.png

8be8700a1879498559f33e05a34b576a.gif案例文件:链接: https://pan.baidu.com/s/1o51cgh0YE4-ttLiomYJB4A      提取码:  84es

解压密码:ansys_development

56819c04819b541f5782fb362d054052.gif基于Workbench中Python脚本开发,你学会了吗?快找个实际案例操作一下吧!今天就聊到这儿了,祝大家周末愉快,吃好睡好玩好!别忘了点个在看呀~有其他想了解的可以后台留言,小田老师随时都在哦。

db6320eee9ff0a34b70cac3795c98cfc.png

f63af9f590199df21911979872b5f143.png觉得有收获记得转发给你的朋友们哦!



推荐阅读
  • 本文详细介绍了SQL日志收缩的方法,包括截断日志和删除不需要的旧日志记录。通过备份日志和使用DBCC SHRINKFILE命令可以实现日志的收缩。同时,还介绍了截断日志的原理和注意事项,包括不能截断事务日志的活动部分和MinLSN的确定方法。通过本文的方法,可以有效减小逻辑日志的大小,提高数据库的性能。 ... [详细]
  • 本文介绍了lua语言中闭包的特性及其在模式匹配、日期处理、编译和模块化等方面的应用。lua中的闭包是严格遵循词法定界的第一类值,函数可以作为变量自由传递,也可以作为参数传递给其他函数。这些特性使得lua语言具有极大的灵活性,为程序开发带来了便利。 ... [详细]
  • 本文介绍了数据库的存储结构及其重要性,强调了关系数据库范例中将逻辑存储与物理存储分开的必要性。通过逻辑结构和物理结构的分离,可以实现对物理存储的重新组织和数据库的迁移,而应用程序不会察觉到任何更改。文章还展示了Oracle数据库的逻辑结构和物理结构,并介绍了表空间的概念和作用。 ... [详细]
  • [译]技术公司十年经验的职场生涯回顾
    本文是一位在技术公司工作十年的职场人士对自己职业生涯的总结回顾。她的职业规划与众不同,令人深思又有趣。其中涉及到的内容有机器学习、创新创业以及引用了女性主义者在TED演讲中的部分讲义。文章表达了对职业生涯的愿望和希望,认为人类有能力不断改善自己。 ... [详细]
  • 本文详细介绍了MysqlDump和mysqldump进行全库备份的相关知识,包括备份命令的使用方法、my.cnf配置文件的设置、binlog日志的位置指定、增量恢复的方式以及适用于innodb引擎和myisam引擎的备份方法。对于需要进行数据库备份的用户来说,本文提供了一些有价值的参考内容。 ... [详细]
  • 图解redis的持久化存储机制RDB和AOF的原理和优缺点
    本文通过图解的方式介绍了redis的持久化存储机制RDB和AOF的原理和优缺点。RDB是将redis内存中的数据保存为快照文件,恢复速度较快但不支持拉链式快照。AOF是将操作日志保存到磁盘,实时存储数据但恢复速度较慢。文章详细分析了两种机制的优缺点,帮助读者更好地理解redis的持久化存储策略。 ... [详细]
  • 解决VS写C#项目导入MySQL数据源报错“You have a usable connection already”问题的正确方法
    本文介绍了在VS写C#项目导入MySQL数据源时出现报错“You have a usable connection already”的问题,并给出了正确的解决方法。详细描述了问题的出现情况和报错信息,并提供了解决该问题的步骤和注意事项。 ... [详细]
  • 本文介绍了一个在线急等问题解决方法,即如何统计数据库中某个字段下的所有数据,并将结果显示在文本框里。作者提到了自己是一个菜鸟,希望能够得到帮助。作者使用的是ACCESS数据库,并且给出了一个例子,希望得到的结果是560。作者还提到自己已经尝试了使用"select sum(字段2) from 表名"的语句,得到的结果是650,但不知道如何得到560。希望能够得到解决方案。 ... [详细]
  • 本文介绍了深入浅出Linux设备驱动编程的重要性,以及两种加载和删除Linux内核模块的方法。通过一个内核模块的例子,展示了模块的编译和加载过程,并讨论了模块对内核大小的控制。深入理解Linux设备驱动编程对于开发者来说非常重要。 ... [详细]
  • 在Oracle11g以前版本中的的DataGuard物理备用数据库,可以以只读的方式打开数据库,但此时MediaRecovery利用日志进行数据同步的过 ... [详细]
  • 本文介绍了一种轻巧方便的工具——集算器,通过使用集算器可以将文本日志变成结构化数据,然后可以使用SQL式查询。集算器利用集算语言的优点,将日志内容结构化为数据表结构,SPL支持直接对结构化的文件进行SQL查询,不再需要安装配置第三方数据库软件。本文还详细介绍了具体的实施过程。 ... [详细]
  • GreenDAO快速入门
    前言之前在自己做项目的时候,用到了GreenDAO数据库,其实对于数据库辅助工具库从OrmLite,到litePal再到GreenDAO,总是在不停的切换,但是没有真正去了解他们的 ... [详细]
  • 本文介绍了在RHEL 7中的系统日志管理和网络管理。系统日志管理包括rsyslog和systemd-journal两种日志服务,分别介绍了它们的特点、配置文件和日志查询方式。网络管理主要介绍了使用nmcli命令查看和配置网络接口的方法,包括查看网卡信息、添加、修改和删除配置文件等操作。 ... [详细]
  • Linux设备驱动开发详解-Note(3)---驱动设计的硬件基础(1)
    驱动设计的硬件基础(1)成于坚持,败于止步处理器分类不做过多说明,处理器类型很多,大同小异存储器存储器可分为只读储存器(ROM)、闪存(Flash)、随机存取存储器(RAM)、光介质存储器和磁介质存储 ... [详细]
  • http头_http头部注入
    1、http头部注入分析1、原理 ... [详细]
author-avatar
sunqingfen5863
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有