APP下载

基于Python的线性动态电路可视化分析软件设计与实现

2022-04-06王博文赵彦珍

实验室研究与探索 2022年2期
关键词:用户界面结点稳态

康 颢, 沈 瑶, 王博文, 赵彦珍

(西安交通大学电气工程学院,西安 710049)

0 引 言

线性动态电路是电路理论中的重要内容。对线性动态电路进行暂态分析,通常需要列写并求解线性微分方程,随着电路阶数的逐渐增高,手工求解的难度也会急速增大[1]。随着计算机技术的飞速发展,功能强大的科学计算软件如Matlab提供了新的解决方案,例如文献[2]中利用拉氏变换手工列写电路方程,借助Matlab进行辅助计算和绘制响应曲线;文献[3]中采用系统法手工列写电路的状态方程,借助Matlab的符号运算功能进行求解。这些研究为解决线性动态电路问题提供了很好的思路,本文将在这些研究的基础上,使用Python设计并实现一个可视化电路分析软件,实现对存在换路过程的任意阶线性动态电路的自动分析。

Python作为一种解释型的高级语言,具有良好的可扩展性和可移植性,拥有丰富的第3方库,其中不乏各种优秀的科学计算库[4-5]。本文所设计实现的软件,其主要功能包括:①利用基尔霍夫电流定律(Kirchhoff’s Current Law,KCL)和支路电压电流关系(Voltage Current Relation,VCR),自动求解任意阶线性动态电路在稳态下的结点电压和支路电流;②利用状态方程和龙格库塔法,自动计算任意阶线性动态电路中任一电压或电流的时域数值解;③借助图形化的用户界面,进行电路原理图的交互式绘制及计算结果的可视化显示等。

1 实验原理介绍

以图1为例介绍动态电路的分析方法。

图1 示例动态电路

1.1 电路的稳态求解

在t=0-时刻,电路处于稳态,可将电容元件视为开路,电感元件视为短路,开关根据其类型视为相应的开路或短路。图1所示电路在t=0-时刻的稳态电路如图2所示。

图2 t=0-时刻的稳态电路

设此时电路中结点数量为n,元件数量为b。设电路中结点电压uk(k=1,2,…,n-1)和元件支路电流ik(k=1,2,…,b)为未知量。为简便起见,将每个元件视作一条支路,且元件电压和电流取关联参考方向。

对除去0号参考结点之外的n-1个结点列写出共n-1个独立KCL方程:

式中:bj为与结点j关联的元件个数;ijk为与结点j关联的元件上电流的代数值,流出取正,流入取负。

根据元件的VCR,对b个元件可列写出共b个方程。以图1所示电路为例,电阻、电压源和电流控制电压源(Current Controlled Voltage Source,CCVS)的VCR方程分别为:

其中:Ri为电阻阻值;upos、uneg分别为元件两端的结点电压;r为CCVS的控制系数;icid为CCVS的控制电流。

未知量数与独立代数方程数均为n-1+b。根据线性代数理论可知,解此方程组即可得到电路在t=0-稳态下的各结点电压和支路电流。得到在t=0-时刻的各电容电压u Cj(0-)和电感电流iLj(0-)。

1.2 电路的动态求解

图1所示电路中,t=0时刻开关S1闭合,S2断开。设换路后的电路结点数量为n′,元件数量为b′,其中包含p个电容和q个电感,其状态方程的标准形式为:

与电路的稳态求解类似,对于除参考结点外的n′-1个结点列写n′-1个KCL方程,对于所有非动态元件列写b′-p-q个VCR方程。对于每个电容元件,需要列写两个方程:

式(6)为电容两端电压,式(7)为流过电容的电流;对于每个电感元件,需列写方程:

式(8)为流过电感的电流,式(9)为电感两端电压。

至此,共列写了n′-1+b′+p+q个独立方程,而此时未知量共有n′-1+b′+2p+2q个,包括n′-1个结点电压uk、b′个支路电流、p个电容电压uCj及其p个导数个电感电流iLj及其q个导数由于未知量数恰比独立方程数多p+q,根据线性代数理论可知,若将p个电容电压uCj和q个电感电流iLj视为参量后解方程组,可关于状态向量的函数,且各函数均为uCj,iLj的线性组合加一常数项的形式:

根据换路定则,在换路前后电容电流和电感电压为有限值的条件下,由1.1节计算的稳态解,可得到状态变量的初始值,即uCj(0+)=uCj(0-),iLj(0+)=iLj(0-)。

根据状态方程及状态变量的初值,利用龙格库塔法即可得到各状态变量在时域内的数值解,进而可求出电路中任一电压或电流的解。

2 软件设计

软件共分为4大部分:电路分析(SOLVER)、用户界面(UI)、电路计算流程(CORE)和启动器(STARTER)模块。其中,SOLVER模块用于对处理后的电路进行最基本的稳态或动态分析;UI模块负责与用户进行交互式操作;CORE模块是对SOLVER和UI模块的整合运用,同时负责两个模块之间的数据转换与传递;STARTER是整个程序的入口,负责UI和CORE模块的初始化及启动。程序各部分间的关系结构如图3所示。

图3 程序架构

2.1 电路分析模块(SOLVER)

电路分析模块由3部分组成:分析器(ANALYZER)、电路元件模块(ELEMENT)和公用模块(COMMON)。其中,分析器包含稳态分析器(STEADY)和动态分析器(DYNAMIC),稳态分析器用于对稳态的电阻电路进行结点电压和支路电流的求解,动态分析器用于在给定动态电路初始条件的前提下对其进行暂态分析;电路元件模块包含一系列理想电路元件类,每种元件类都包含相应的元件参数和附加VCR方程作为类的属性;公用模块包含一些常用的工具类或方法。模块结构如图4所示。

图4 电路分析模块结构

2.1.1 线性代数方程组的求解

在电路稳态和动态求解中,分别需要对不含符号参数和含符号参数的线性代数方程组进行求解。对于这两种计算情境,可使用SymPy这一用于符号计算的第3方库。具体实现为调用sympy.solvers.solvers.solve函数对方程组进行求解,其内部会将线性方程组先转化为标准的矩阵形式Ax=b,再使用高斯消元法求解[7]。

2.1.2 非齐次线性微分方程组的数值求解

2.2 用户界面模块(UI)

用户界面一方面用于输入电路结构参数,另一方面用于图形结果显示。软件采用了第3方Pygame库进行用户界面的开发,其优势在于绘图函数丰富全面、开发灵活度较高。

用户界面模块的结构如图5所示,主要由7个子模块构成:渲染器(RENDERER)、电路绘制面板(BOARD)、命令输入栏(PROMPT)、状态栏(STATUSBAR)、结果显示栏(RESULTBAR)、管理器(MANAGER)和图像绘制器(PLOTTER)。其中渲染器负责各窗体控件的绘制与渲染;管理器负责对用户发出的鼠标操作或输入的命令进行解释和执行,并对各控件进行数据更新,起到管理全局的作用。

图5 用户界面模块结构

用户界面的运行流程如图6所示,在程序主循环中,对事件队列进行遍历,根据事件的类型进行相应操作;直至事件队列为空,绘制各控件并更新窗口画面,开始新一轮的循环过程。

图6 用户界面运行流程

本文开发的用户界面如图7所示,用户可通过鼠标操作或在命令输入栏中输入命令的方式,在电路绘制面板上绘制待分析的电路原理图,并进行电路自动分析及结果显示。本软件涉及的各项命令见表1。

表1 各命令行的名称及功能

图7 用户界面布局

2.2.1 电路结构参数输入

对于只包含二端元件的电路,可以将其抽象成一个有向图G=(V,E),其中点集V与电路中各结点对应,边集E与各元件对应。本软件采用邻接表存储有向图[10],其优势在于时空复杂度一般较低,且编码难度低,使用Python中的嵌套列表即可实现。

针对电路结点编号,软件采用了并查集这一用于处理若干不交集的合并与查询问题的数据结构进行处理[11]。对于一个仅含有b个二端元件的电路,若忽略其导线,则该电路对应的有向图初始包含2b个顶点,每个顶点单独成一集合。连接导线的过程可视为使用并查集合并点集的过程。当所有合并操作完成后,统计每个点集的代表元素,再重新分配连续编号即可。

2.2.2 绘制响应曲线

绘制响应曲线采用了第3方绘图库Matplotlib[12],其提供了功能齐全的图像可视化操作界面。借助该操作界面,用户可对结果图像进行各种高级操作,如选定区域放大、设置光标及导出图像等。

2.3 电路计算流程模块(CORE)

电路计算流程模块在整合运用SOLVER和UI模块的基础上,实现了一系列的电路计算流程函数,起到了在SOLVER和UI两模块之间进行数据处理与传输的作用。

以该模块中的电路暂态分析流程为例:CORE模块首先从UI模块中获取原始电路数据,再参考1.1节的方法得到原始动态电路对应的t=0-时刻的稳态电路,将其传递至SOLVER模块进行稳态求解,因此得到状态变量的初始值。将初始值以及处理后的动态电路数据传递至SOLVER模块进行动态求解,得到原电路的时域数值解。最终该模块会将数值解传递至UI模块进行响应曲线的绘制。

2.4 启动器(STARTER)

当启动器作为程序入口时,它会对CORE、UI模块进行初始化,并调用UI模块的启动函数,达到启动程序的作用。

3 算 例

在图1所示电路中,US=4V,R1=R2=2Ω,R3=R4=R5=1Ω,L1=L2=2 H,L3=4 H,C1=C2=1 F,r=0.5Ω,在t=0时刻,开关S1闭合,S2断开。使用本软件对图1电路进行暂态分析,得到u1,u2,i1,i2的响应曲线如图8所示。为验证正确性,本文借助Simulink对图1电路进行仿真,原理图如图9所示,仿真结果如图10所示。为比对结果,计算本软件得到的结果和Simulink仿真结果的绝对误差Δu1,Δu2,Δi1,Δi2,得到图11所示曲线,误差数量级为10-3,说明本软件对线性动态电路的暂态分析是准确的。

图8 使用本软件得到的响应图像

图9 Simulink仿真原理图

图10 Simulink仿真结果

图11 绝对误差曲线

4 结 语

本文针对求解线性动态电路响应时域数值解,使用Python语言设计并实现了一个线性动态电路可视化自动分析软件。该软件的优点有:①拥有交互式的图形化用户界面,操作简单直观;②采用状态方程和龙格库塔法的分析方法,精度高,且适用于任意阶的线性动态电路,实用性和普适性强;③采用Python语言编写,可扩展性和可移植性强,易于进行二次开发,便于集成到其他系统。该软件的设计与实现,为线性动态电路暂态分析的仿真计算提供了便捷、高效且实用的工具。实践表明,在计算机专业学生中开展此类课程设计项目对激发学生学习兴趣是非常有益的,既加深了对电路理论知识的学习,又锻炼了借助计算机手段解决实际电路问题的能力,对培养新工科人才起到了积极作用。

猜你喜欢

用户界面结点稳态
可变速抽水蓄能机组稳态运行特性研究
LEACH 算法应用于矿井无线通信的路由算法研究
碳化硅复合包壳稳态应力与失效概率分析
基于八数码问题的搜索算法的研究
基于CiteSpace的国外用户界面体验图谱量化分析
电厂热力系统稳态仿真软件开发
元中期历史剧对社会稳态的皈依与维护
物联网用户界面如何工作
UI用户界面色彩设计研究
基于B/S的跨平台用户界面可配置算法研究