如何学习ANSYS命令流及APDL简解.ppt

上传人:聆听****声音 文档编号:18071602 上传时间:2023-08-10 格式:PPT 页数:65 大小:3.26MB
下载 相关 举报
如何学习ANSYS命令流及APDL简解.ppt_第1页
第1页 / 共65页
如何学习ANSYS命令流及APDL简解.ppt_第2页
第2页 / 共65页
如何学习ANSYS命令流及APDL简解.ppt_第3页
第3页 / 共65页
如何学习ANSYS命令流及APDL简解.ppt_第4页
第4页 / 共65页
如何学习ANSYS命令流及APDL简解.ppt_第5页
第5页 / 共65页
如何学习ANSYS命令流及APDL简解.ppt_第6页
第6页 / 共65页
如何学习ANSYS命令流及APDL简解.ppt_第7页
第7页 / 共65页
如何学习ANSYS命令流及APDL简解.ppt_第8页
第8页 / 共65页
如何学习ANSYS命令流及APDL简解.ppt_第9页
第9页 / 共65页
如何学习ANSYS命令流及APDL简解.ppt_第10页
第10页 / 共65页
如何学习ANSYS命令流及APDL简解.ppt_第11页
第11页 / 共65页
如何学习ANSYS命令流及APDL简解.ppt_第12页
第12页 / 共65页
如何学习ANSYS命令流及APDL简解.ppt_第13页
第13页 / 共65页
如何学习ANSYS命令流及APDL简解.ppt_第14页
第14页 / 共65页
如何学习ANSYS命令流及APDL简解.ppt_第15页
第15页 / 共65页
如何学习ANSYS命令流及APDL简解.ppt_第16页
第16页 / 共65页
如何学习ANSYS命令流及APDL简解.ppt_第17页
第17页 / 共65页
如何学习ANSYS命令流及APDL简解.ppt_第18页
第18页 / 共65页
如何学习ANSYS命令流及APDL简解.ppt_第19页
第19页 / 共65页
如何学习ANSYS命令流及APDL简解.ppt_第20页
第20页 / 共65页
亲,该文档总共65页,到这儿已超出免费预览范围,如果喜欢就下载吧!
下载资源
资源描述

如何学习ANSYS命令流及APDL简解.ppt

《如何学习ANSYS命令流及APDL简解.ppt》由会员分享,可在线阅读,更多相关《如何学习ANSYS命令流及APDL简解.ppt(65页珍藏版)》请在冰点文库上搜索。

如何学习ANSYS命令流及APDL简解.ppt

如何学习ANSYS命令流,筷子学苑交流活动之十,APDL内容简解,Dean|迪安2014-5-4,主要内容,简介及准备,什么是ANSYS命令流,APDL是什么?

ANSYS命令流与GUI方式联系及其优点二次开发涉及到的工具如何学习ANSYS命令和APDL工欲善其事必先利其器(编辑器选择)LOG文件的秘密,上篇,ANYS提供两种工作方式,GUI图形用户界面(GraphicalUserInterface又称图形用户接口)操作和命令流。

在ANSYS中,命令流是由一条条ANSYS的命令组成的一个命令组合,这些命令按照一定顺序排布,能够完成同GUI方式一样甚至GUI不能完成的的操作。

命令流方式融GUI方式、APDL、UPFs、UIDL、MAC,甚至TCL/TK于一个文本文件中,可通过/input命令(或UtilityMenuFileReadInputFrom)读入并执行,也可通过拷贝该文件的内容粘贴到命令行中执行。

什么是ANSYS命令流,APDL是什么?

命令流通常由ANSYS命令和APDL功能语句组成。

APDL(ANSYSParametricDesignLanguage)为ANSYS参数化设计语言。

APDL是用来自动完成某些功能或建模的类似于FORTRAN的解释性语言,提供一般程序语言的功能。

它包含三个方面的内容:

工具条、参量和宏命令。

灵活运用这三种工具,可以实现快速操作,数据快速传递、更新等功能。

APDL是什么,上篇简介及准备,解释性语言解释性语言的程序不需要编译,在运行程序的时候才翻译,每个语句都是执行的时候才翻译。

这样解释性语言每执行一次就需要逐行翻译一次,效率比较低。

现代解释性语言通常把源程序编译成中间代码,然后用解释器把中间代码一条条翻译成目标机器代码,一条条执行。

ANSYS命令流与GUI方式联系及其优点,ANSYS命令流可以和GUI方式配合使用,各自分别都能独立完成分析,部分操作只能通过命令方式实现。

对于复杂的有限元模型,使用GUI方式的缺点就会暴露,因为一个分析的完成需要进行多次反复。

这样,在GUI方式中,就会出现大量重复的操作,会严重影响设计人员的心情。

命令流有以下几个优点:

可减少大量的重复工作,少许修改的话,只需变动几行代码或者参数就行,可为设计人员节省大量的时间。

便于保存和携带,一个复杂的有限元分析的APDL代码也就几百行,也就几十KB。

便于交流,设计人员进行交流时,查看APDL代码明显方便得多。

高级需求时,可以二次开发。

熟练后分析速度要快于使用GUI;减少重复劳动;方便和别人交流。

但这并不是说只需学习命令流就可以了,对于初学者来说,GUI方式是最易懂和入门的方式,熟练的操作GUI可以便于命令的理解。

因此,我们在学习ANSYS过程中,菜单操作是对ANSYS使用环境熟悉的一个重要过程。

命令流方式的优点,上篇简介及准备,二次开发涉及到的工具,可以通过ANSYS为用户提供了良好的二次开发环境,开发适用于用户自己的模块,提高分析效率和质量。

ANSYS提供了四种二次开发工具:

APDL;UPFs(UserProgrammableFeatures)用户可编程特性,操作途径是对ANSYS核心FORTRAN代码进行修改,对开发者有限元知识水平要求较高;UIDL(UserInterfaceDesignLanguage)用户界面设计语言;Tcl(Toolcommandlanguage)工具命令语言,Tk是基于Tcl的图形开发工具箱,二者用于ANSYS界面开发,比UIDL更加接近底层。

如何学习ANSYS命令和APDL,命令流通常由ANSYS命令和APDL功能语句组成。

大致可以通过命令有无前缀区分:

带/的命令:

一般是系统命令(总体命令)或各模块标示符,比如功能菜单(UtilityMenu)中的多数操作、主菜单(MainMenu)进入各模块。

如删除所有的参数以及模型和结果/clear,前处理命令对应的处理器/PREP7,求解模块/SOLUTION,后处理命令/post1、/post26等。

带*的命令:

一般是APDL的标识符,也就是ANSYS的参数化语言,如*do,*enddo等无/和*命令:

是各个模块下的ANSYS命令,使用时需要进入相应的处理器。

如/PREP7下才可以使用ET(定义单元)命令。

ANSYS命令按照功能可分为三个大类:

前处理命令、后处理命令、和结果查看命令,每个大类有自己对应的处理器,/PREP7处理器,后处理/POST1、/POST26等。

ANSYS有超过1000条命令,很难有人把这些完完全全记住,我建议先学习APDL语法及规则,记住常用的关键词,配合这些关键词套用需要的命令。

然后了解常用的ANSYS命令。

对于ANSYS常用命令的学习,网上资料很多,更详细的用法可以在ANSYS主菜单-help-helptopic中查找。

如何学习ANSYS命令和APDL,上篇简介及准备,如何学习ANSYS命令和APDL,上篇简介及准备,图1APDL在ANSYS14.5帮助中的位置,工欲善其事必先利其器(编辑器选择),多数命令流可以直接拷贝到ANSYS命令提示符栏中运行,但部分命令不支持这种方式,而且执行速度比较慢。

更常用的方法是将命令流在文本文档中整理好,然后通过/input命令或UtilityMenuFileReadInputFrom运行。

最常见的文本编辑器就是WINDOWS自带的记事本了,具有系统自带、功能简单,使用方便的特点,能够满足基本的需求。

常用的文本编辑器,UltraEdit和PSPad,编辑器选择,上篇简介及准备,选择编辑器的原因:

强大的数据处理能力、文件对比、替换、列选等语法高亮PSPad还具有自动完成功能。

UE9.0c版体积小,绿色版,大文件打开速度快,很EASY的列选及列操作。

PSPad在大文件打开时速度慢,Unicode支持不太好,另外换行(wordwrap)问题始终没解决,编辑器选择,上篇简介及准备,LOG文件的秘密,通过ANSYSGUI操作时,几乎所有的操作都会记录到工作目录jobname.log文件中,并且以ANSYS命令的方式记录。

所以,查看log文件就能弄明白操作所对应的命令,这也是初学者学习和编写命令流的一种途径。

但log里也记录了很多无用的东西,比如转动视角,放大缩小等;选择实体也会产生啰嗦大量代码。

这就需要进行整理和简化。

下面7点是网友总结的log文件整理心得。

1.要注意时间,因为每次做的东西都会跟在log文件后面,所以要根据时间取舍,不是所有的log文件中的内容就有用的,一开始我建议从新建一个文件开始。

2.最好每做一步看一下log文件,可以知道自己的操作对应哪些命令3.有些关于存盘、显示视角等命令可以删除。

4.选取实体时往往会产生很多命令,可以简化。

5.整理命令流时要新建立一个文本文件,以便从log文件中拷贝所需要的。

6.File菜单中的Readinputfrom可以读入自己所建立的命令流来执行。

7.可以增加注释语句以增强可读性,LOG文件整理,上篇简介及准备,其实有一个小工具可以帮助你快速整理logAnsysCommandParserANSYS命令解析器,同时,如果你的db文件是在ANSYS中操作的,可以通过下面方式写出记录文件UtilityMenuFileWriteDBLogFileLGWRITE,Fname,Ext,-,Kedit,ANSYS命令解析器,上篇简介及准备,用于清理和转换Ansys日志文件(.log文件),以生成等价的Ansys命令流的小工具。

主要功能:

1.删除/auto“,/dist“,/replot之类因图形界面操作所产生的“无用指令”(对建模和计算本身无影响的指令);2.将图形界面选择操作所产生的选择操作指令转换为等价,但更加简洁、可读性更好、更适合手工输入的选择操作指令,转换Ansys日志文件命令流的小工具AnsysCommandParserhttp:

/,APDL内容简解,自定义工具栏使用参数数组初步ANSYS*get命令和查询函数宏控制语句GUI交互编写命令流的良好习惯有用的东东参考资料,下篇,APDL也像其他编程语言一样,有自己的语法特点和语法规则。

其功能语句和FORTRAN语言较为接近。

使用工具栏:

Workingwiththetoolbar使用参数:

Usingparameters使用APDL数学函数和矩阵运算:

UsingAPDLMathformatrixmanipulationsAPDL作为宏语言:

APDLasamacrolanguage用户界面接口:

InterfacingwiththeGUI加密宏:

Encryptingmacros,APDL主要内容,用参数而不是用数值输入模型尺寸,材料类型等从ANSYS数据库中获取信息,比如节点位置或最大应力在参数中进行数学运算,包括矢量和矩阵运算把常用的命令或宏定义成缩写形式建立一个宏使用if-then-else分支和do循环等来执行一系列任务,ANSYS没有像其他软件一样的工具图标,但是可以把一些经常用的功能通过自定义按钮的方式添加到Toolbar里面。

主要用到了*ABBR(Abbreviation的缩写)命令,其格式为*ABBR,按钮上的标签名称,按钮调用的命令或宏的名称,自定义工具栏,命令*ABBR的使用格式如下:

*ABBR,Abbr,stringabbr:

显示在工具条上的缩写名,最多可包含8个字符.string:

Abbr所代表的ANSYS命令,系统UIDL函数名或宏名的缩写字符串.如果*ABBR命令的值域string是一个宏名,那么该宏必须放在指定的宏搜索路径下.,!

ANSYSTOOLBAR工具快捷按钮byTAOLEI!

-!

说明:

通过在界面上增加常用按钮,快速完成相应功能,输入这些命令后,更新工具栏就可以了!

也可以修改ansysv100v100ANSYSapdlstart110.ans文件(ANSYS11.0)(ansys11,其它版本也有相应的文件)!

ANSYS14.5版本路径ANSYSIncv145ansysapdlstart145.ans!

加入*ABBR,.,.达到初始化时就添加的目的!

-/NOPR!

以下语句不写入log文件*ABBR,ALLS,ALLS*ABBR,RPLOT,/RPLOT*ABBR,E_PLOT,EPLOT*ABBR,N_PLOT,NPLOT*ABBR,V_PLOT,VPLOT*ABBR,A_PLOT,APLOT*ABBR,MOVE_WK,KWPAVE,P*ABBR,ALIGN_WK,KWPLAN,-1,P*ABBR,CALC,/SYS,CALC.EXE*ABBR,UNDO,UNDO/GO!

恢复语句写入log文件,自定义工具栏,下篇APDL内容简解,使用参数,APDL内容简解,参数指的是变量。

即能够代表数据、字符或者数组的自定义名称。

例如,一个长方体的几何属性,可以用长宽高这几个参数来描述。

为形象、简便的表述这几个参数,常用length、width和hight变量指代其具体数值。

ANSYS变量类型分为:

数值、字符和表三种类型。

所有数值变量(整形或实形)都以双精度数储存。

被使用但未声明的参数都被赋一个接近0的值,或极小值,大约为2100。

例如,若参数A被定义为A=B,但B没被定义,则赋给A一个极小值。

ANSYS包含两种类型的参数:

标量和数组。

length,width,hight,ANSYS的变量由不超过8个字符的字母、数字和下划线组成,且变量只能以字母开头。

例如ABC、PI、A_1等为合法变量,而M&E、VALUE_ABC、3M_为非法变量。

同时,定义ANSYS变量时要注意以下几点:

不能与ANSYS表示字相同,例如自由度(DOF)标识字(TEMP,UX,PRES等);常用标识字(ALL,PICK,STAT等);用户定义标识字(如用ETABLE命令定义的标识字);数组类型标识字(如CHAR,ARRAY,TABLE等)名称为从ARG1到ARG9和从AR10到AR99的参数被保留为局部参数。

使用参数,变量命名,通常由下面几种方法给变量赋值:

1.使用*set命令,如*set,AA,1*SET,AA,ABC!

ABC已知或已赋值*SET,CPARM,CASE1!

字符型变量的值需要用单引号括起来2.当然最简单的方法是使用“=”号赋值AA=1AA=ABCCPARM=CASE1使用*get获得变量的值使用ANSYS函数获得变量值通过参数间的运算或合成X=A+BP=(R2+R1)/2D=-B+(E*2)-(4*A*C)!

求值D=-B+E2-4ACM=(X2-X1)*2-(Y2-Y1)*2)/2!

使用参数,变量赋值,定义好的变量可以整体显示或者查看,也可以重新赋值和删除用*STATUS命令把定义的变量排列显示出来字符和数值型变量可以通过parameters-scalarparameters查看、修改和删除,数值型数组变量的值通过Parameters-ARRAYParameters-DefineArray查看、修改和删除清除变量值*set,AA或AA=删除某个变量可以用*del*del,AA*del,all删除所有变量,使用参数,变量查看和删除,如果要在其他ANSYS任务中使用当前定义的参数,可以先把它们写入一个文件中,然后读取(恢复)该文件。

读取文件时,可以全部代替当前定义的参数,也可以只把它们加到当前定义的参数中(会覆盖已存在的参数)。

可用PARSAV命令把参数写入一个文件中(UtilityMenuParametersSaveParameters)。

参数文件是ASCII文件,主要由APDL*SET命令组成,该命令用来定义各种参数。

可用PARRES命令从一个文件中读取参数(UtilityMenuParametersRestoreParameters)。

使用参数,变量保存和恢复,数组初步,数组是ANSYS非常实用有效的数据存储和运算工具。

其定义方法与普通变量略有差别。

ANSYS中数组包括数值型、字符型和表三种类型的数组。

下面分别是三种数组的定义方法。

一般格式*DIM,变量名,数组类型,行数,列,面*DIM,AA,4!

类型ARRAY为缺省类型,维数为4x1x1*DIM,XYZ,ARRAY,12!

ARRAY类型数组,维数为12x1x1*DIM,FORCE,TABLE,5!

TTABLE类型数组,维数为5x1x1*DIM,T2,4,3!

维数为4x3x1*DIM,CPARR1,CHAR,5!

CHAR类型数组,维数为5x1x1其中数值型和字符型数组,下标为整数,行列面的起始下标均为1,而TABLE的下标为大于等于0的实数或整数。

1)利用*set命令或“=”给单个或多个数组元素赋值与scalar变量赋值是格式相同。

2)利用*set或“=”赋值时,赋值对象为第一个元素名,赋值数据是一个列矢量,赋值结果是按列下标递增顺序从第一个赋值数组依次赋值。

注意,一次最多只能给10个连续数组元素赋值,当只给一个元素赋值时与变量赋值完全一致。

举例:

(1)*DIM,A,ARRAY,12,1,1定义数组A为一个array类型,12行1列A

(1)=1,2,12给每个元素赋值为其行标

(2)*DIM,B,array,4,3,1定义数组B为一个array类型4行3列B(1,1)=11,21,31,41B(1,2)=12,22,32,42B(1,3)=31,32,33,43B=注意此赋值的下标!

对于二维数组,赋值顺序按照列进行赋值,注意此规律。

三维也是一样的。

(3)*DIM,C,char,4,1,1C

(1)=a,b,c,d,数组初步,数组赋值,ANSYS*get命令和查询函数,ANSYS*get(UtilityMenuParametersGetScalarData)命令可以返回一些值并存储在一个变量或者数组中。

例如通过*GET,node1x,NODE,1,LOC,X可以获得节点1的X坐标,并存储在变量node1x中,其GUI操作如下:

*get命令,*GET,Par,Entity,ENTNUM,Item1,IT1NUM,Item2,IT2NUM这里Par是将被赋值的参数名;Entity是被提取项目的关键词,有效的关键词是NODE,ELEM,KP,LINE,AREA,VOLU等。

ENTNUM是实体的编号(若为0指全部实体);Item1是指某个指定实体的项目名。

例如,如果Entity是ELEM,那么Item1要么是NUM(选择集中的最大或最小的单元编号),要么是COUNT(选择集中的单元数目)。

在ANSYS命令参考手册中的*GET部分对每种实体的Item1值有完整的说明。

帮助路径为/CommandReference/VIII.GCommands/*GET,ANSYS*get命令和查询函数,*get命令调用格式,可以把*GET命令看成是对一种树型结构从上至下的路径搜索,即从一般到特殊的确定。

可用下面的例子来说明*GET命令的用法。

下面的第一条命令用于获得单元97的材料属性(MAT参考号)并赋给单元BCD:

*GET,BCD,ELEM,97,ATTR,MAT!

BCD=单元97的材料号*GET,V37,ELEM,37,VOLU!

V37=单元37的体积*GET,NMAX,NODE,NUM,MAX!

NMAX=最大激活节点数*GET,COORD,ACTIVE,CSYS!

COORD=激活的坐标系值*GET,NCOUNT,node,0,count!

NCOUNT=得到这些节点的个数*GET,ND_NUM_MN,node,0,num,min!

ND_NUM=得到这些节点中编号最小的节点号正如*GET从数据库获取标量数据,可以用*VGET获取数组信息或UtilityMenuParametersGetArrayData先定义数组,然后获取数据例如:

*dim,dispval,array,20,3!

203array*vget,dispval(1,1),node,1,u,x!

UXofnodes1-20incolumn1*vget,dispval(1,2),node,1,u,y!

UYincolumn2*vget,dispval(1,3),node,1,u,z!

UZincolumn3,ANSYS*get命令和查询函数,*get命令使用实例,在ANSYS操作过程或条件语句中,常常需要知道有关模型的许多参数值,如选择集中的单元数、节点数,最大节点号等。

此时,一般可通过*GET命令来获得这些参数。

现在,对于此类问题,我们有了一个更为方便的选择,那就是查询函数InquiryFunction。

InquiryFunction类似于ANSYS的*GET命令,它访问ANSYS数据库并返回要查询的数值,方便后续使用。

ANSYS每执行一次查询函数,便查询一次数据库,并用查询值替代该查询函数。

ANSYS*get命令和查询函数,查询函数(InquiryFunction),*get,ELMAX,elem,count*do,I,1,ELMAX*enddo,ANSYS*get命令和查询函数,查询函数(InquiryFunction),*do,I,ELMIQR(0,13)*enddo这里的ELMIQR并不是一个数组,而是一个查询函数,它返回的是现在所选择的单元数。

括弧内的数是用来确定查询函数的返回值的。

第一个数是用来标识你所想查询的特定实体(如单元、节点、线、面号等等),括弧内的第二个数是用来确定查询函数返回值的类型的(如选择状态、实体数量等)。

ANSYS提供了许多类似的查询函数,下面举一个例子,其它常用查询函数可以在帮助中查询。

NODEndinqr(node,key)node节点号,对于key=12,13,14为0key标识关于node的返回信息=1,选择状态=12,定义的数目=13,选择的数目=14,定义的最大数=-2,超单元标记=-3,主自由度=-4,激活的自由度=-5,附着的实体模型ndinqr(node,key)的返回值对于key=1=-1,未选择=0,未定义=1,选择,ndinqr(node,key),AREAarinqr(areaid,key),KEYPOINTSkpinqr(kpid,key),LINElsinqr(lsid,key),VOLUMESvlinqr(vnmi,key),系统信息查询函数/INQUIRE,要获得当前系统时间、ANSYS工作目录、文件信息、系统时间等参数使用/INQUIRE命令。

格式为:

/INQUIRE,StrArray,FUNCStrArray:

将接受返回值的字符数组参数名FUNC:

指定系统信息返回的类型参考目录/CommandReference/X.ICommands/INQUIRE,查询函数,内嵌获取函数的用法,对于某些信息,除了使用*get命令获取外,可以通过ANSYS内嵌的获取函数来获得信息。

主要分成两类,一般函数和数学函数。

例如Node1x=NX

(1)!

节点1在当前激活坐标系中的x坐标值与上面的*GET,node1x,NODE,1,LOC,X!

等价可以看出,此类函数比*get的用法更加简洁和明确,ABS(x)SIGN(x,y)CXABS(x,y)EXP(x)LOG(x)LOG10(x)SQRT(x)NINT(x)MOD(x,y)RAND(x,y)GDIS(x,y)SIN(x),COS(x),TAN(x)*AFUN.ASIN(x),ACOS(x),ATAN(x)ATAN2(y,x)VALCHR(CPARM)CHRVAL(PARM)UPCASECPARMLWCASE(CPARM),/ANSYSParametricDesignLanguageGuide/B.GETFunctionSummary,查询这些函数在ANSYS14.5中的路径为,APDL内容简解,自定义工具栏使用参数数组初步ANSYS*get命令和查询函数宏控制语句GUI交互编写命令流的良好习惯有用的东东参考资料,下篇,宏,什么是宏,APDL最强有力的特征之一是创建宏的能力,使用宏能减少工作量并提高分析效率,宏带给开发者高效和惊喜,使你的成就感升华到最大限度。

那么什么是惊喜,什么是宏?

简单来说宏是把多条命令组合后自定义成一个新命令,以后只要键入这条命令就实现多条命令的效果。

类似其它语言中的函数。

例如,多次用到如下操作:

生成一个尺寸为4,3,2的长方形块和一个半径为1的球体。

然后,从块的一个角处减去球体。

其基本命令流为:

/prep7/view,-1,-2,-3block,4,3,2sphere,1vsbv,1,2finish,把这段命令流保存在文本文档中,并命名为mymacro.mac,就可以通过*use,mymacro或mymacro来执行。

在输入窗口执行*CREATE命令。

参数的值不确定,参数名被写入文件中。

使用*CFOPEN,*CFWRITE,和*CFCLOS命令。

参数名被其当前值取代,值被写入文件中。

选择UtilityMenuMacroCreateMacro菜单项。

该方法打开一个可作为简单的多行编辑器的对话框来生成宏。

参数的值不确定,参数名被写入文件中。

生成宏的途径,宏的搜索路径,保存宏的位置可能影响到宏能否正确执行,一般地,ANSYS按如下缺省路径搜索用户生成的宏(.mac扩展名):

ANSYS的/ansys_inc/v145/ansys/apdl目录;在ANSYSMACROLIB环境变量中定义的路径;在WINDOWS系统中的注册路径;当前工作目录。

如果在上级路径和下级路径同时寻找到同样的文件名,则采用上级路径,带参数的宏,通过特殊的字符名,你可以创建多达19个参数的宏,这个特殊的字符名指通过ARG1、ARG2ARG19来接收传递的具体参数。

例如,通过ARG1,ARG2,ARG3,ARG44个变量传递长方体和球的具体尺寸,宏编写如下:

/prep7/view,-1,-2,-3block,arg1,arg2,arg3sphere,arg4vsbv,1,2finish按如下方式运行该宏:

m

展开阅读全文
相关资源
猜你喜欢
相关搜索
资源标签

当前位置:首页 > 人文社科 > 视频讲堂

copyright@ 2008-2023 冰点文库 网站版权所有

经营许可证编号:鄂ICP备19020893号-2