您好,欢迎访问三七文档
当前位置:首页 > 商业/管理/HR > 信息化管理 > PFC手册中文翻译整理3FISH
1FISH语言4FISH语言初学指南4.1介绍和概述FISH是一种内嵌于PFC2D的编程语言,使用户能够定义新的变量和函数。这些函数可以扩大PFC2D的应用范围或增加用户定义特性。例如,可以绘制或打印新的变量,生成特殊粒子,将伺服控制用于数值试验,指定性能的不均匀分布,以及自动进行参数研究。FISH语言是针对那些想用Itasca软件做些事情的人开发的,而用现存的Itasca软件很难或者说不可能做到。它提供了一个内置语言,因此用户可以写自己需要的函数,而不是在标准代码中加入许多新的和专门的功能。一些有用的FISH函数已经写出;这些函数的相互关联设置,称为扩张的Fishtank,在PFC2D程序中给出(见FISHvolume第3节)。对于没有编程经验的人,写一些简单的函数或对现有的函数作一些简单修改是可行的。第4.2节为非程序员作了介绍。但是FISH程序也可以变的复杂(在任何编程语言中的代码都是这样);更多详细资料参见FISHvolume第2节。与所有的编程任务一样,FISH函数应按一个渐进的方式编写,在编写更加复杂的代码之前每一步都要检查运行。FISH函数的错误检查不会比大多数编译器少,因此所有的函数在用于实际应用之前,应进行简单的数据测试。FISH程序简单地嵌入一个正常的PFC2D数据文件—在DEFINE后面的行是FISH函数;函数遇到END终止。FISH函数还可以调用其它函数。定义函数的顺序并不重要,只要它们都是先定义后使用(例如通过PFC2D命令引用)。由于FISH函数的汇编形式是储存在PFC2D的存储空间,SAVE命令保存FISH函数和相关变量的当前值。FISH语言规则和固有功能的完整定义见FISHvolume第2节。其中包括2语法规则,数据类型,运算,变量和函数。所有FISH语言名称在FISHvolume第2节进行了描述,在命令和FISH参考概要中给出了这些名称的概要。4.2新手指南和教程本节是为已经运行PFC2D(至少是一些简单问题)而没有使用FISH语言的人准备的;如果没有编程经验。为了从例子中获得最大的好处,你应该尝试用PFC2D运行这些例子。短的程序可以直接键入。在运行一个例子之后,使用命令NEW“清除界面”,就可以为下一个例子作准备。另外较长的程序可以先在文件中创立然后用CALL调用。在PFC2D命令提示后面输入例4.1中的各行,每输入一行便在其末尾按enter键。(在此和后面的所有例子,第一行用了分号,这仅表示注释不必输入。)注意在输入第一行后(不是注释行),命令提示符变为DEF;当输入END命令后,命令提示符变为常用提示符。如果你是在给PFC2D或FISH输入行得到话,提示符的变化会让你了解。通常情况下,DEFINE语句后面的所有行都作为FISH函数定义的一部分(直到输入END语句)。但是如果输入的行中有错误(例如将“=”输入为“+”),那么会使PFC2D提示符回到原来状态。在这种情况下,应输入NEW命令重新开始。因为输入很容易出错,因此FISH程序通常通过编辑器输入文件。它们被PFC2D调用就像正常的PFC2D数据文件。这一过程将稍后描述;现在继续运行。如果在输入下面行时没有错误,在PFC2D提示符下,实现abc函数的值(在前面例4.1中定义的),输入行:将得到:通过定义符号abc(用DEFINE…END结构,如例4.1),现在在使用PFC2D3的许多方面都涉及到该结构。例如PRINT命令使FISH函数的值显示出来;该值经过一系列的算术运算:这是一个赋值语句。如果等号成立,等号右边的表达式值将赋给等号左边的变量。注意算术运算按照通常的法则;加、减、乘、除分别用符号+,-,*,/表示。符号“^”表示指数。我们现在输入一个稍微不同的程序(用命令NEW清除旧的):这里我们引入变量hh,给它赋值为22,在后面的行用到。如果我们输入命令PRINTabc,输出的结果与前面完全相同。但是我们这里用到两个FISH符号;它们都有值,一个(abc)是作为函数。另外一个(hh)是作为变量。它们的区别如下:当用到FISH函数符号名时(例如在PRINT语句中),如果符号对应一个函数,那么相关的函数将被执行。但是,如果符号并不是一个函数名称,那么仅仅使用符号的当前值。下面的实验可以帮助澄清区分变量和函数。在此实验之前,请注意,PFC2D的SET命令可以用来设置任何用户定义的FISH符号的值,符号在FISH程序中的独立性已介绍。现在,键入以下行不使用NEW命令,因为我们希望保留以前输入的程序。4SET命令将abc和hh的值设为0。因为hh是一个变量,第一个PRINT命令简单地显示了hh的值为0。第二个PRINT命令使abc执行(因为abc是函数名);hh和abc的值被重新计算。因此,第三个PRINT命令表明hh已经重置其原来的值。为了测试您是否已经理解,请输入稍作修改的程序(例4.4)并指出为什么显示的答案是不同的。在这个阶段,直接列出涉及到FISH变量或函数的PFC2D最重要的命令是很有好处的。(见表4.1,var代表变量或函数名)我们已经看到了前面的两个例子(参考例4.3和4.4);第三种有用的情况是,当在历史变量的~~~~~~~~~~~~~~~~~。例4.5说明了如何做到这一点。例4.5显示了粒子的不平衡力是如何储存在FISH变量中和通过HISTORY命令使用的。5在这个例子中,一个球落到平面上,经反弹后达到平衡。b_yfob在函数中是一个预定义的变量名—在这种情况下,为相应的在y方向的不平衡力。Ball_head是另外一个预定义名,为相应的球的“地址”。PFC2D所有预定义的名称在FISHvolume的表2.1中给出。运行结束后,与其它历史一样,我们简单的绘制了yforce(历史1,y方向的不平衡力)。以类似的方式,可以用FISH函数绘制任何数量我们想得到的历史,不管用多么复杂的公式来描述它。除了上述预定义的变量名,还有许多其它提供给FISH程序的预定义对象。它们可以分为几类;有一类是是由标量变量组成,它们有单一的号码—例如:内置于对象有用的另一类是一系列的固有功能,这些固有功能可以使诸如正弦和余弦之类的函数能在FISH中程序计算。完整的清单见FISHvolume中第2.5.2节;一部分如下:6使用固有功能的例子稍后给出。现在我们必须讨论一种更深入的方法,运用这种方法,PFC2D数据文件可以利用用户定义的FISH名。当想在PFC2D中输入一个数字时,可以用FISH变量或函数来代替。这个简单的声明对于FISH非常强大的功能来说是很重要的,它允许在FISH函数中计算,并使用通过PFC2D以符号形式输入的诸如范围,作用力和性能等。因此,参数的变化可以很容易,而无需在输入文件中改变许多号码。例如4.6要求将墙的几何形状和刚度定于文件开始的某个位置,而不是许多位置。这就减少了出现错误和数据文件紊乱的风险,以及在许多模型中重复利用一块工作。7顺便请注意,为FISH变量和函数选择名称有很大的灵活性;字符“_”可以包含在名称中。名称必须以非数字开头,并且不能包含任何算术运算符(+,-,*或^)。选定的名称不应与内置(或保留)名称相同;FISHvolume第2.2.2节中表2.1包含所有需要避免的名称的清单,以及应该遵循的一些规则。在上面的例子中,我们检查了FISH变量的计算值,通过将它们的名称直接给PRINT命令。另外,我们可以通过命令printfish列出当前所有的变量和函数。我们现在研究如何在FISH程序中进行选择和循环运行。下面的FISH语句允许程序的指定部分重复多次。LOOP和ENDLOOP是FISH语句,字符var代表loop变量,expr1和expr2代表表达式(或单个变量)。例4.7显示了循环的应用(或重复顺序),得到10的阶乘。8在这种情况下,循环变量n从1连续变化到10,循环里面的语句(在LOOP和ENDLOOP之间的语句)对每个价都执行。如前所述,变量名称或算术表达式可取代1到10之间的数字。在PFC2D中一个实际使用的循环,将按顺序选取模型中的每个球并访问和/或改变一些属性。例4.8包含了FISH函数makecolors,说明了(随机,在这种情况下)如何改变模型中每个球的颜色指数。其中0到2内的整数值指定为颜色指数。我们已经看到了几个FISH程序的例子,让我们简要地检查一下程序语法和风格的问题。一个完整的FISH语句必须占一行;没有连续行。如果一个公式太长而不能放在一行,那么必须用一个临时变量将公式分开。例4.9说明了这个问题。9在这种情况下15个变量的和被分为两部分。注意分号之后的函数名表示注释。分号之后的任何字符都会被FISH编译器忽略,但是它们反映了日志文件。带有信息的注释程序是非常好的。有些程序出现了缩进——在某些行的开头插入空格来说明相关的一组语句。可以在变量名和算术运算之间插入(随意地)任何数量的空格字符使程序更具可读性。通过缩进来表示循环,条件语句等是很好的程序实践。空格在FISH中的“重要”意义,即空格字符不可以插入变量和函数名中。需要说明的另一个问题是变量的类型。您可能已经注意到,当从各种程序的例子打印出变量时,这数字没有小数点或“E格式”——指数的次数。在任何时候,FISH函数或变量名分为四种类型:整数,浮点数,字符串和指针。这些类型可以根据情况发生动态变化,但临时的用户不必担心变量类型,因为它是自动设置的。思考例4.10。与变量aa,bb,cc相对应分配给它们的数字(或字符串)分别转化为整数,浮点数和字符串。整型是精确的数字(没有小数点),但范围有限;浮点数精度有限(大约精确到小数点后15位),范围较大;字符串变量是任意的字符序列;在PFC2D中指针用来处理内部变量。四种类型存在一定转换规则。例如,dd成为一个浮点数,因为它是一个浮点数和一个整数的乘积;ee变变成一个字符串,因为它是两个字符串的和(串联)。这个问题可以相当复杂,它的充分解释见FISHvolume第2.2.5节。10此外,FISH中还有常用的语言要素——if语句。下面的三个语句通过FISH程序可以做出选择。这些语句允许FISH程序有条件的执行,ELSE和THEN表示选择。测试的项目包括下列其中一个符号或符号配对:Themeaningsarestandardexceptfor#,whichmeans“notequal.”expr1和expr2是任意有效的表达或单一变量。如果测试为真,立即执行IF后的语句直到遇到ELSE或ENDIF。如果测试为假,则执行ELSE和ENDIF之间的语句;否则程序跳到ENDIF后的第一行。这些语句的应用见例4.11。例4.1中显示的abc的值取决于xx的值。可以用不同的测试符号检验(例如用“”代替“”。到现在为止,我们已经调用了来自PFC2D的FISH程序,通过使用PRINT命令,或在PFC2D输入窗口独立行中给定函数名。也有可能是相反的——就是在FISH函数中给????????????????????最有效的PFC2D命令是位于下列两FISH语句之间:11从FISH程序中发出PFC2D命令主要有两个原因。首先,它可以使用FISH函数执行我们已经讨论过的预定义变量不能实现的操作。第二,我们可以控制FISH在PFC2D中的整个运行。在例4.12中,我们通过函数makewalls创建了四个墙。为了从FISH函数中执行这四个PFC2D墙命令,它们必须在置于COMMANDENDCOMMAND结构之间。我们现在已经覆盖到了FISH语言的一些方面以及如何与PFC2D相互作用。FISH语言的完整指南见FISHvolume第2节。墙的状态信息功能墙的状态信息包括位置,速度,非平衡加载和固定。12W_pos(wp,dof)旋转中心的位置(dof为分量形式,其中dof{1,2,3})W_x(wp)旋转中心的位置(x分量)W_y(wp)旋转中心的位置(y分量)W_z(wp)旋转中心的位置(z分量)W_vvel(wp,dof)速度(dof为分量形式,其中dof{1,2,3})W_xvel(wp)速
本文标题:PFC手册中文翻译整理3FISH
链接地址:https://www.777doc.com/doc-3986559 .html