仿真语言

专门用于仿真研究的计算机高级语言,是一种面向问题的非顺序性的计算机语言。仿真语言是一类重要的仿真软件。在系统仿真时应用仿真语言,不要求用户深入掌握通用高级语言编程的细节和技巧,因此用户可用原来习惯的表达方式来描述仿真模型,而把主要精力集中在仿真研究上。

简史

仿真语言是随着数字计算机的发展而发展起来的。在连续系统仿真方面,1955年出现第一个框图式仿真语言,称为数字模拟仿真语言 DAS(英文 DigitalAnalog Simulator的缩写)。这种仿真软件配有一整套对应于模拟计算机中各种标准运算部件的程序模块,用这种仿真语言编写的源程序分为结构、参数和控制三部分,分别用来指定程序模块间的连接、模块的参数和模块的运行方式。用户书写源程序语句的顺序则是任意的。源程序经编译程序翻译成机器码,或经解释程序解释后执行。因为源程序的编制方法与模拟计算机的编排方式相类似,所以很受仿真界的欢迎,盛行于1955~1965年间。但模型的表达内容要受预先编制好的模块类型的限制。DAS语言吸取了早期许多仿真语言的特点,在仿真语言的发展中起过重要的作用。60年代初还在 DAS语言的基础上作了改进,出现改进型数字模拟仿真语言 MIDAS(英文 Modified Digital Analog Simulator的缩写)。1959年出现系统动力学建模语言DYNAMO(英文 DynamicModels的缩写)。1967年美国计算机仿真学会提出一种兼有框图表示功能的面向方程的仿真语言,称为连续系统仿真语言CSSL(英文Continuous System SimulationLanguage的缩写),成为连续系统仿真语言的规范。此后又出现了许多符合CSSL规范的仿真语言。其中应用较广的有连续系统建模语言CSMP(英文Continuous SystemModeling Program的缩写)和微分分析器置换语言 DARE(英文Differential Analyzer Replacen ent的缩写)。由于近代公式翻译语言 FORTRAN的编译程序对某些小型计算机也能产生高效率的目标代码,所以面向方程的仿真语言都是先翻译成FORTRAN语言,再通过编译程序生成目标代码。现在符合CSSL规范的仿真语言有许多版本。

离散系统仿真方面,1959年出现第一个离散系统仿真程序包MONTECONE。1961年提出进程型仿真语言──通用系统仿真语言GPSS(英文General Purpose SystemsSimulator的缩写)。1963年出现事件型仿真语言 SIMS-CRIPT。1967年又提出另一种进程型仿真语言SIMULA67。后来又出现另一种事件型仿真语言:一般活动仿真语言GASP(英文General Activity Simulation Program的缩写)。70年代以后,仿真语言开始向多功能的方向发展。在离散系统仿真语言中引入连续系统仿真语言, 产生混合系统仿真语言。 其中应用最广的是GASP语言的两个新版本GASPⅣ和GASP-PL/1, 和交替建模仿真语言SLAM(英文Simulation Language for Alternative Modeling的缩写)。混合仿真语言 HL1(英文Hybrid Language 1的缩写)可用于设计并行计算模块的程序,适用于高速仿真和实时仿真。将仿真语言与控制系统计算机辅助设计软件包配合使用,使计算机仿真系统成为控制系统设计研究的有力工具。近年来出现的仿真软件系统和仿真专家系统进一步扩展了仿真语言的功能,成为仿真语言发展的新方向。

分类

仿真语言按被仿真系统的特点分为连续系统仿真语言、离散系统仿真语言和连续离散混合系统仿真语言。按数学模型的型式分为面向框图的仿真语言和面向方程的仿真语言。按运行方式分为交互式仿真语言和批处理式仿真语言。

组成

仿真语言是一类重要的仿真软件,市售商品均以文本和软磁盘的形式提供。它由以下四个部分组成:

(1)模型定义语言:用以定义模型和仿真实验的语言。

(2)翻译程序(用于连续系统仿真)或处理程序(用于离散系统仿真):翻译程序是将用模型定义语言书写的源程序翻译成宿主语言。处理程序是将源程序连接实用程序库和运行支持程序,形成机器码。

(3)实用程序库:包括算法、专用函数、随机采样函数、各种框图和绘图程序。

(4)运行控制程序:供用户以人机交互的方式控制仿真运行、改变参数、收集数据和显示数据的程序。

特点

仿真语言不同于一般通用的高级语言,具有以下几个特点:

(1)仿真语言使用户可以采用习惯的表达方式来描述仿真模型。

(2)仿真语言具有良好的并行性。在实际的连续系统中,过程都是并行发生的,而一般数字计算机都是串行计算的。因此,用仿真语言编写的源程序都有自动分选排序的功能,通过编译程序将源程序排列成正确的计算顺序,供计算机按顺序进行计算。

(3)仿真语言与顺序性的通用编程语言(如 FORTRAN语言)有兼容性,以扩展仿真语言的功能。

(4)仿真语言备有多种积分方法可供用户选用。

(5)仿真语言配有常用输入和输出子程序。

(6)用仿真语言编制的源程序,便于实现多次运行仿真的研究。

(7)用仿真语言编制的源程序,在程序运行的不同阶段,可给出诊断程序错误的信息,帮助用户查找程序错误。