电学仿真实验的一种模式及其算法冯绍勇(景德镇高专物理系,江西景德镇333000)摘要:针对当前在电学内容课程教学中,缺乏好的、适合学生用的虚拟仿真实验软件,作者开发了能达到一定虚拟效果和沉浸性的仿真实验软件,对开发思路和算法作了介绍,该仿真实验软件的模式及其开发方法对一般学科教师在开发自己的仿真实验软件时有一定的借鉴作用。关键词:电学仿真实验;拓扑结构的识别;远程教育中图分类号:TP391.9文献标识码:A一、引言在理工科教学中,实验占据着比较重要的地位,随着现代化教学方式的普及和远程教育的发展,虚拟实验在集体教学与个体自学中用得越来越广泛。在电工教学领域,仿真实验软件一般采用国外的EDA软件中的EWB和PSPICE等,但对这些仿真软件的使用,在教学上也有不尽人意的地方。(1)EDA软件的开发初衷并非教学仿真实验,而是电子CAD,即是针对电子电路设计、PCB设计和IC设计的,它们的功能很强大,软件系统复杂,学生要学会用它们做仿真实验需要费一定精力。实际上它们不适合电学类课程的初学者使用;(2)无论是课堂教学还是学生自学,教学资源比较理想的存在情况是把它们整合到课件当中,让课件设计者来科学地引导学生利用它们,例如在课件中通过看或自己动手操作仿真实验,来引导或总结出科学结论等。然而至少在目前,EDA软件与教学课件的亲和力是不强的,它们只能是一个独立的系统,揉不到课件当中;(3)为了给学生好的沉浸效果,仿真实验教学软件应该尽可能做到给学生一个接近真实的虚拟环境,器件和仪器设备不但在理论建模上做到仿真而且在空间形象上、光感和声效上也应做到仿真,然而EDA软件中的器件是符号化的、抽象的,只能做理论的验证性实验,对学生在动手实践能力的培养上是没有帮助的,而且也很枯燥。毕竟它们是研究、设计软件,而非教学软件。所以在电工类仿真实验教学资源建设领域有着很大的空白等着去填补。事实上,目前很多教师也都在探索虚拟效果好的、能训练学生动手操作的仿真实验软件的开发。易学易用、与课件亲和力强并且沉浸效果好的仿真实验软件才会受到师生的欢迎。二、一种电学仿真实验的模式及其实现算法1、仿真实验介绍图1是作者开发的三相电路仿真实验软件界面。与该仿真软件风格一致的另一仿真实验(三相异步电动机控制)曾在教育部主办的第七届全国高校多媒体课件大赛中荣获二等奖。该仿真软件在虚拟环境的创建上以及在电学仿真实验的建模和算法上有鲜明的特点和原创性,对学生理论知识的认识和掌握,像真实实验一样能起到很好的帮助作用。希望能对有意开发此类仿真实验的老师有所启发和帮助。从图1所示软件界面上看,仿佛环境中摆放了实验所需真实仪器设备,有三相四线制电源、三个单相调压器、电流插座、三个灯排、电压表和电流表,右上角是连接导线工具和帮助菜单,整个软件界面为彩色画面。使用者在电脑上做此仿真实验时,可取右上角不同颜色的连线工具对界面中的电器设备随意连线(在点取连线工具的情况下,分别单击两个电器设备上的接线桩头即可自动画出线条),如图2中所示,电器设备被连成了三相四线制星形连接电路。当合上空气开关通电后,电路中将产生虚拟电流和电压,此电流和电压是根据随意连接成的线路、电源电压及电路中负载阻抗,用矩阵分析法精确计算出来的。如果灯泡负载中有电流通过时,灯丝将发出红光,周围会有光晕(如图2中所示),其亮度是电流的函数。与电流表相连的电流插头可用鼠标在界面中随意拖拽,当将其插入电流插座时,电流表指针将偏转而指示出通过电流插座的电流值。同样,与电压表相连的两个插头也可用鼠标在界面中随意拖拽,当两个插头插入不同的桩头时,电压表指针将偏转而指示出那两个桩头之间的电位差值。电表指针偏转时,指针做欠阻尼振动,非常逼真。当将调压器接入电路时,输出电压在0~250V范围可调。这种仿真实验模式的特点就是在空间形象上、光感和声效上做到了逼真,给使用者以很好的沉浸效果,图1仿真实验软件介面图2仿真实验过程介面学生使用时像做游戏一样,能激发学习兴趣与热情。它也可以作为插件,在课件中使用。2、仿真实验编程算法(1)概述把所有仪器设备看成一个系统。实验软件介面中呈现的是它的外在表象;对于系统内在,把所有电器设备抽象为一个个理想元件,系统内元件之间的电量联系(即数学模型)为基尔霍夫定理和欧姆定理。系统与外界的联系表现为输入信息与输出信息,输入信息主要是(a)软件使用者在做实验时,要用导线把系统内电器设备进行连接,使用者的某种连线结果即构成对系统的一种信息输入;(b)各种开关设备的接通与断开构成对系统的一种信息输入;(c)电压表和电流表的接入由于会改变线路的连接状态,所以也构成对系统的一种信息输入。输出信息主要是(a)由理论计算得出的流经各元件的电流和各元件的端电压;(b)电流表和电压表在接入电路情况下指针发生的偏转;(c)由流经灯泡电流大小决定的灯泡亮度及开关动作时发出的声音。系统根据输入信息,经数学模型计算得出输出信息。这个软件的开发难点(也是关键点)在于如何识别输入信息,主要是对实验设备的不同连线结果的识别。对于一个无须识别的已知网络,根据数学模型用计算机编程求解输出信息应该不是问题,诸如电路的计算机辅助分析与设计一类的书中都有介绍。而对电学仿真软件,网络是在软件的运行中由使用者适时连接而成的,他们连接成什么样的拓扑结构的电路,事先是不知道的,所以程序在对网络进行分析时必须首先对网络的拓扑结构进行识别,因此这里有人工智能的成分。国内外一些先进的EDA类软件及部分仿真实验软件应该都有网络的拓扑结构识别这一功能,这是绕不过去的一座山,然而其实现算法未见到公开发表,作者在这里对自己原创的这一算法做粗线条地介绍,以期对开发这类仿真软件及课件的老师有所帮助,为现代化教学方式的普及添砖加瓦。(2)网络矩阵分析方法节点法是计算机辅助分析与设计中用得最广泛的一种方法。为了编程的需要,把每个元件定义为一条“复合支路”,图3所示,为网络中第k个元件的复合支路,其中的电量均为相量。把此复合支路创建为一个类,该类具有几个属性,即电源电动势SKU、电流源电流SKI、元件的等效复阻抗KZ、流经该元件的电流KI及元件的端电压KU。每个元件为该类的一个实例,在具体创建元件实例时,可以根据不同的元件设置一些不同的属性值,如对灯泡元件,实例化时,其电源电动势及电流源电流属性赋给零值,给复阻抗属性赋一定值,而对电压源元件实例化时,电流源电流属性赋给零值,给复阻抗和电源电动势属性赋一定值。以上属性值都是复数,以表示正弦量及复阻抗。由反映基尔霍夫电压定理的nTUAU、反映基尔霍夫电流定理的0IA及复合支路电量之间的关系ssUIIZU,可以推导出网络中节点电压的求解公式为ssTnUAYIAAYAU1。其中,U为由各复合支路端电压组成的电压列向量,nU为由除参考节点外的所有节点电位组成的电位列向量,A为关联矩阵,I为由流经各复合支路电流组成的电流列向量,Y为由各复合支路复导纳组成的对角矩阵,sI为由各复合支路电流源电流组成的电流列向量,sU为由各复合支路电压源电压组成的电压列向量。nU一旦求出,根据nTUAU即可求出各元件端电压,根据ssUYIUYI即可求出各元件电流。在以上求解问题中,关键是要知道关联矩阵A,A反映网络的拓扑结构,A的探知过程实际上就是网络拓扑的识别过程。(3)网络拓扑的识别由前述网络分析方法(节点法)中可知,只要知道关联矩阵A,就可以根据它和图3复合支路网络中各元件的属性值求出未知电量。而矩阵A的探求即是要知道网络中有哪些节点、每个节点与哪些元件(复合支路)相连、相连元件的电流参考方向是流入还是流出节点就可以了,至于网络中有哪些回路,是与求解过程无关的,也因此节点法对网络识别程度的要求并不高。网络拓扑结构识别还有一个任务,就是对由电器设备连接而成的电路群组的识别。实验操作者有可能把元件连接成毫无电气连接的多个电路,而这多个电路是不可能用节点法同时算出的,只能分别计算,所以还必须区分出哪些元件组合在一起成为一个电路。这里把连接在同一个电路中的元件看作同组。为了识别拓扑结构,再给“复合支路”类设置几个属性,让它们在拓扑结构识别时起“标记”作用。一个是组别属性,它是一个变量,装入其中的数值代表某个元件属于哪组电路;两个端头“节点”属性,分别是两个变量,其数值代表元件两个端头分别与第几个节点相连,复合支路类的所有属性如图4所示。创建两个赋值函数,来承担给以上变量的赋值工作。一个是组别赋值函数,当实验者在工具栏中取出导线后,可以对隐藏在仪器设备接线端头下面的按钮进行单击,实现把两个元件用导线连接起来,同时将调用该函数,从而给两个端头分别被鼠标单击的元件组别变量赋上相同的组别值,表示这两个元件同组;另一个是节点赋值函数,同样,当用导线连接元件时将调用该函数,给两个被单击的元件端头“节点”变量赋上相同的数值,表示这两个端头被连在同一个节点上,这两个赋值函数的调用,实际上是在给被连接元件做标记。这两个赋值函数功能类似,都是通过鼠标单击两个按钮给两个变量赋上相同的值,编写函数时要考虑四种情况,一种是当两个变量都未赋值时,那么给它们赋上相同的某一自然数,计数器中变量值加1(以备给后续变量赋递增的新值);一种是当前一个变量已经赋值,后一个变量未赋值时,前一个变量值保持不变,让后一个变量值与前变量值相同,计数器中变量值不变;一种是当前一个变量未赋值,后一个变量已经赋值时,后一个变量值保持不变,让前一个变量值与后变量值相同,计数器中变量值不变;第四种情况是当前后变量都已赋值时,让后一变量赋上前变量的数值,而且还要找到所有与后变量值相等的变量,给它们赋上前变量数值,计数器中变量值不变。当实验者连接好线路后,被连入电路的元件,组别属性变量中有组别值,两个端头节点属性变量中有节点号数值,也就是有了组别标记和节点标记。再设元件两个接线端头分别为A端和B端,规定流经元件电流的参考方向为由A指向B。有了这些输入信息(标记),就可以识别网络拓扑结构了,或者说关联矩阵A就出来了。首先求组别值为1的所有元件组成的电路的关联矩阵A,A为e×f矩阵,e为第一组电路节点数减1,f为该组电路元件数,在这里就是复合支路数。节点数就是节点赋值函数被数次调用时计数器变量累加的最大值,元件数f是两个端头节点属性变量都被赋值的组别值为1的元件的个数。矩阵A中第i行第j列元素ija确定方法为:第j个元件A端头和B端头的两个节点属性变量值是否有一个等于i,如果没有,说明这个元件不与第i个节点相连,则ija取0值;如果A端节点属性变量值等于i,说明这个元件的A端与第i个节点相连,元件电流参考方向背离节点,则ija取-1值;如果B端节点属性变量值等于i,说明这个元件的B端与第i个节点相连,元件电流参考方向向着节点,则ija取+1值。同理,其它组别电路的A也可求出。(4)分析计算计算过程如图5所示,A求出后,接下来求A的转图5求各电量算法图4“复合支路”类及其属性置矩阵TA,再根据同组元件的复阻抗属性创建对角复导纳矩阵Y,根据同组元件的电流源电流值属性创建列向量sI,根据同组元件的电压源电压值属性创建列向量sU,然后根据前述公式求各节点电位组成的列向量nU、各元件端电压组成的列向量U和各元件电流组成的列向量I。由于篇幅原因,矩阵运算过程算法不在此介绍。三、后记这篇文章主要介绍了作者开发的仿真实验的一种模式,以及关键的拓扑结构识别这一人工智能的实现方法和电路的计算方法。实验系统的可视化部分,由于与软件的开发系统关系比较大,也由于篇幅的原因,其开发方法不在此介绍。参考文献:[1]单美贤.虚拟实验原理与教学应用[M].北京:教育科学出版社,2005.[2]任艮.电路的计算机辅助分析与设计[M].北京:北京理工大学出版社,1989.[3]黄荣怀.信息技术与教育[M].北京:北京师范大学出版社,2002.Onekindofmodelofelectricitysimulationexperimentandhisalgorithm