基于微信小程序的结点电压法智能计算及界面设计实践
尹昊龙 沈瑶 赵彦珍 高昕悦
摘 要:《电路》是电类专业学生的第一门专业基础课程,是后续专业课程学习的基础,为了使学生对所学知识进行综合运用,锻炼其解决实际问题的能力,提高创新能力,在计算机专业学生中开展了结点电压法的智能分析计算及拓展应用课程设计,采用分层次的教学任务,充分调动学生的积极性,激发潜能。实践表明,学生从本次课程设计中获得自信,提高了用编程方法解决电路问题的能力。文章重点介绍应用微信小程序实现界面设计和采用JavaScript实现智能分析计算的过程。
关键词:结点电压法;微信小程序;JavaScript;界面设计
中图分类号:TM13? ? ? ? 文献标志码:B? ? ? ? ? 文章编号:1673-8454(2020)24-0092-05
微信小程序是一种不需要下载安装即可使用的应用,由于开发难度低和维护成本小,且能够节约手机内存空间,因而备受关注。目前微信小程序已在各个领域中推广应用。[1]陈刚等应用微信小程序设计温度控制实验系统,融合理论和实践教学,改善了教学效果。[2] 宋钰设计了基于小程序的微信学习平台,平台上包含丰富的学习资源,满足不同用户的学习需求,学习效果良好。[3] 郑显玲等介绍了小程序在图书馆服务平台中的一些应用场景。[4] 杭莉等基于微信小程序设计了一个点餐系统,使点餐过程更加便捷。[5] 王传杰利用微信小程序和云服务器设计智能储物柜,实现更智能、便捷、安全的存取操作。[6] 严一涵基于微信小程序以JavaScript实现了数字电路仿真平台的设计。[7]
在新工科背景下,学校提倡教师积极开展混合式教学,笔者尝试在计算机专业学生中开展以提高学生创新能力为目标的课程设计实践,本文介绍了采用微信小程序实现界面设计的步骤,通过《电路》课程设计实践使学生将所学知识进行综合运用和创新。
一、实验原理
1.任务描述
为提高学生的自主学习能力、实践能力和创新能力,充分激发学生的潜能,该课程设计任务采用分层次任务设计,将实验任务分为4个层次。层次1是自选编程语言编写能够生成任意结构电阻网络(含电压源、电流源和电阻)的结点电压方程的程序,并求出结点电压;层次2考虑电路中包含受控源的情况;层次3求电路任意端口的戴维宁等效电路;层次4设计人机交互界面。本文将以图1所示电路为例说明具体设计过程。
2.电路结構参数的存储
为了实现电路的智能分析与计算,满足对任意结构电路结点电压方程的列写,应首先将不同电路的结构参数输入计算机,计算机根据输入参数自动列写结点电压方程。仔细研究手动列写结点电压方程的过程发现,结点电压方程与元件的类型、连接的起止结点及元件参数相关。现将电路元件分为电阻、电流源、电压源和受控源4种。对元件进行分类,电阻、电流源、电压源作为一类,参数存储方式为:id num nodestart nodeend;受控源作为一类,参数存储方式为:id num num2 nodestart nodeend knodestart knodeend 。其中id为元件类型,nodestart和nodeend分别为元件连接的正负结点,knodestart和knodeend分别为受控源的正、负控制端,num为元件的值或受控源的控制支路的电阻,num2为受控源的控制系数。参数id区分四种元件,不同id值对应的元件类型如表1所示。
3.结点电压方程的列写
将其简写为:
AU=B公式2
其中A为系数矩阵,U为结点电压列向量,B为右端列向量。下面介绍采用填入法思想通过编程获得A矩阵、列向量U和B的方法。
由公式1可知,电阻元件对该元件连接的两个结点的自导和互导有贡献。若某电阻连接在结点p和n之间,该电阻对系数矩阵的贡献的核心代码为:
对于电流源,由公式1可知,电流源对结点电压方程的右端列向量B有贡献。若电流源从结点p流入结点n,则电流源对列向量B的贡献的核心代码为:
对于电压源,电压源会影响系数矩阵A和右端列向量B。若电压源的正端连接的结点为p,负端连接的结点为m,电压值为Us,则增补方程Up - Um = Us[9]。将该方程代入公式1,得到考虑电压源后的修正方程式:
故编程时需将系数矩阵A第p行元素的值先全部归零,再修改第p行第p列的元素为1,第p行第m列的元素为-1,修改右端列向量第p行元素为Us。特别地,若m=0,即电压源负端连接的为参考结点,在修改系数矩阵A时,因为不存在第0列,故不必修改第p行第m列元素。核心代码为:
对于受控源,仍应对系数矩阵A和右端列向量B进行修正[10]。以图1中电流控制电流源为例,设控制电流从结点pc流向结点nc,控制支路的电阻为Rpnc,受控电流源从结点p流向结点n电流值为I,控制系数为?茁,则可得:
由于该受控源可看作电流源,则可以将公式4代入与该受控电流源相连的结点对应的方程,然后对系数矩阵A和右端列向量B进行修正,以下通过一个实例具体解释修正过程。如图1所示受控源,控制电流从结点3流向结点1,控制支路的电阻为R3,可得:
对其他受控源,可进行类似分析。
4.计算结点电压
在上节得到电路结点电压方程的系数矩阵A、结点电压列向量U和右端列向量B,需要解方程才能得到结点电压。由线性代数知识可知U=A-1B,其中A-1=A*/|A|。由于JavaScript中没有矩阵运算的库函数,为了实现对矩阵的计算,自定义了矩阵运算函数(见表2)。
det函数采用了递归思想求矩阵A的行列式|A|。tranpose函数返回矩阵的转置,若A是m×n矩阵,则返回一个n×m的矩阵。adjoint函数返回矩阵的伴随矩阵,首先计算待求矩阵中每个元素的代数余子式并存放入对应元素的位置,再调用tranpose函数,即得到待求矩阵的伴随矩阵。inverse函数返回A矩阵的逆矩阵A-1,先调用adjoint函数得到待求矩阵A的伴随矩阵A*,再調用det函数得到待求矩阵的行列式|A-1|,则A-1=A*/|A|。multiply函数实现两个矩阵相乘。利用这些自定义函数可求得结点电压列向量U。
5.给定端口的戴维宁等效电路
根据戴维宁定理可知,求给定结点n和结点p之间的戴维宁等效电路,需计算给定端口的开路电压和等效电阻。
求开路电压Uoc的方法是,首先将结点n和结点p之间连接的所有元件(即nodestart =n且nodeend = p,或nodestart = p且nodeend = n)删除,得到一个开路端口,调用求解结点电压的函数,重新求解新电路结构的结点电压,则开路电压Uoc = Un - Up。
等效电阻Req是从开路端口看进去,当网络内部所有独立源均置零以后的等效电阻。首先将结点n和结点p之间连接的所有元件删除;其次将所有的电流源从电路中移除;最后将每个无伴电压源视作短路,连接无伴电压源的两个结点成为一个结点,若无伴电压源的起始端点为x,终止端点为y,先将x与y结点之间的所有元件从电路中删除,再将所有与y结点相连的元件的结点号y修改为x(若结点n或p正好等于y,则同时将结点值改为x);最后在待求戴维宁等效电路的结点n和p之间添加一个电流源I=1A,再次调用求解结点电压的函数,求得结点电压Un 和Up,则结点n和p之间的等效电阻为:
二、基于微信小程序的界面设计
微信小程序的界面设计主要使用了WXSS (WeiXin Style Sheets)和WXML(WeiXin Markup Language)两种语言,WXSS是一套用于小程序的样式语言,用于描述WXML的组件样式。WXML是框架设计的一套标签语言,结合基础组件、事件系统,可以构建出页面的结构。本文实现结点电压智能分析计算的小程序使用原生的框架开发,主要包括开始页面、元件列表页面、元件参数输入页面和结果页面,小程序的使用流程如图2所示。
小程序通过一个全局变量stack实现页面跳转,当stack为不同值时显示不同的页面。若点击某个按钮时需要跳转页面,只需在按钮的点击事件中添加修改stack值的程序。小程序通过表单实现对用户输入数据的接收和处理,表单可将表单内用户输入的input(输入框)、radio-group(单项选择器)等组件的值保存并提交。每一个表单内都有一个绑定了表单提交事件函数的按钮,用户在表单内输入数据后点击此按钮,即可将input携带的文本数据和radio-group携带的选中元素的索引数据提交,由JavaScript编写的程序对这些提交数据进一步处理,生成便于计算处理的数据。
1.开始页面
开始页面对该小程序进行简单介绍,如图3所示,用户需在此页面内输入电路结点个数,点击“确定”按钮即可触发表单提交事件和页面跳转事件。表单成功提交后程序获取电路的结点数量,并为后续元件参数输入做准备,方便后续元件的添加和数据处理。
2.元件列表页面
元件列表页面由元件添加按钮模块、元件列表模块和计算按钮模块组成,是小程序的核心页面,如图4所示。元件添加按钮模块包括“添加元件”和“添加受控源”两个按钮,均绑定了点击事件,点击后触发页面跳转事件,跳转至图5元件参数输入页面。
元件列表模块显示已添加的元件参数,用户可查看已输入元件参数是否正确。
计算按钮模块的“计算”按钮绑定了点击事件,电路参数输入完毕后,点击“计算”按钮触发计算结点电压的程序,计算出结点电压,同时也会触发页面跳转事件,跳转至图6结果页面。
3.元件参数输入页面
元件参数输入页面是一个表单,以添加一般元件为例(即非受控源),如图5所示,采用radio组件实现选择元件类型、起始和终止结点,采用input组件实现元件参数值的输入,所有参数输入完毕后,点击“确定”按钮(该按钮绑定表单提交事件和页面跳转事件)即可将元件参数添加到自定义的itemlist数组中,同时返回元件列表页面。
4.结果页面
电路参数输入完毕后,在图4页面中点击“计算”按钮后进入图6所示结果页面,该页面上半部分显示结点电压结果,下半部分是戴维宁等效电路计算模块,输入欲求戴维宁等效电路的两个结点序号,点击“计算”按钮后即可得到这两个结点间电路的开路电压Uoc、等效电阻Req和短路电流Isc。
三、算例
现以图1所示电路说明利用小程序求解结点电压及结点1和2之间戴维宁等效电路的流程,其中Us=12V,R1=10Ω,R2=8Ω,R3=15Ω,R4=5Ω,Is=2A,Ic=?茁i1,?茁=0.5。
首先在图3所示开始页面输入结点数为4,点击“确定”按钮跳转至图4所示元件列表页面,单击“添加元件”按钮进入图5所示元件参数输入页面,增加的元件种类默认为电阻,若要增加其他种类的元件,在图5中点击相应元件类型单选框,在起始结点和终止结点栏分别选择元件连接的起始结点号和终止结点号,单击“请输入元件的值(Ω)”输入框,输入元件的值。之后,单击“确定”按钮,提交输入的元件参数,同时返回图4所示元件列表页面,继续添加元件,输入电路参数,待所有电路参数输入完毕后,元件列表页面如图4所示,单击“计算”按钮,跳转至图6所示结果页面,图中显示结点1的电压为12.0000V,结点2的电压为10.7961V,结点3的电压为11.3786V。
在图6页面的求戴维宁等效电路栏输入起始结点1和终止结点2,单击“计算”按钮,即可得到结点1和2之间的开路电压为1.7222V,等效电阻为4.306Ω。
利用Multisim软件对图1所示电路进行仿真验证,如图7所示,求得结点电压如图8所示,与图6小程序计算结果相同。Multisim软件求得结点1和2之间的开路电压为1.722V,等效电阻为4.306Ω,如图9所示,与小程序求解结果一致。
本文基于微信小程序,以JavaScript为计算语言,利用WXML和WXSS语言設计人机交互界面,开发了一个求解任意结构电路结点电压和任意端口戴维宁等效电路的小程序。该小程序页面操作简单,计算速度快,且结果精确,能够适应于求解包含电阻、电流源、电压源和受控源等元件的任意结构电路的情况。通过本次课程设计锻炼,加深了学生对电路基本理论的理解,激发学生学习《电路》课程的兴趣,提高了学生应用所学知识解决实际问题的能力,使他们在后续课程学习中更加努力、自信,不畏困难,对人才培养起到积极作用。
参考文献:
[1]何晓静.微信小程序如何构建大格局[J].青年记者,2019(32):94-95.
[2]陈刚,何秋睿.基于微信小程序的反馈式教学模式改革[J].教育教学论坛,2019(47):97-98.
[3]宋钰.基于小程序的微信学习平台设计与实现[J].河南科技,2019(32):36-38.
[4]郑显玲,汤雪姣.微信小程序助力图书馆学科服务[J].才智,2019(29):236-237.
[5]杭莉,聂莉娟.基于微信小程序的点餐系统[J].电子制作,2019(23):54-58.
[6]王传杰,孙玉昕,饶茜雅,等.应用微信小程序的智能储物柜[J].福建电脑,2019,35(10):58-60.
[7]严一涵.一种数字电路仿真平台的设计与实现[J].科技传播,2020,12(2):152-154.
[8]邱关源,罗先觉.电路(第四版)[M].北京:高等教育出版社,1999:69-72.
[9]张西宁.基于结点电压法的无伴电压源电路分析[J].河西学院学报,2009,25(2):59-61.
[10]霍龙.含有无伴受控源网络的结点电压全矩阵分析[J].沈阳工程学院学报(自然科学版),2016,12(3):227-233.
(编辑:鲁利瑞)