崔翔++鲍克勤++邵明强++胡旭波++张磊++陈炯
摘要: 对于GUI和SIMULINK联合编程问题,本文介绍了一种通过MATLAB的GUI模块建立的人机交互图形界面来实时控制Simulink的参数并运行Simulink仿真的方法。根据工程实际中的变压器热点温度分析模型,论文介绍了相应的温度计算仿真,并且将GUI和Simulink组合模块转换成EXE可执行文件。通过上述对MATLAB GUI/SIMULINK的应用可知,联合编程和可执行文件的生成提高了研究人员的仿真效率,同时为该模块在工程中的应用提供了一种方案。
关键词: 人机交互图形界面;SIMULINK;可执行程序;热点温度分析
中图分类号:TP311 文献标识码:A 文章编号:1009-3044(2016)17-0220-04
Abstract: For the problem of mixed programming with GUI and SIMULINK, this article introduce a method to establish the graphical user interface to control SIMULINK with GUI in MATLAB. According to the analyzing model of transformer hot-spot temperature, this article introduce relevant temperature calculating program, and transfer the combine model of GUI and SIMULINK to EXE executive program. By the using of MATLAB GUI/SIMULINK , mixed programming and executive program generating improve the efficiency of researcher, and it can provide a valid way to apply the SIMULINK model in the engineering.
Key words: GUI; SIMULINK; Executive program; hot-spot temperature analyzing
Simulink是MATLAB中的一种可视化仿真工具,是一种基于MATLAB的框图设计仿真环境,是实现动态系统建模、仿真和分析的一个软件包,为了方便地创建动态系统模型,Simulink提供了一个建立窗口化的人机交互接口(GUI) ,这个创建过程只需单击和拖动鼠标操作就能完成,它提供了一种更简洁明了的方式,并且用户可以立即看到系统的仿真结果[1]。
从目前应用类软件发展趋势来看,友好的图形用户界面(Graphical User Interface,GUI)已成为应用软件的基本交互入口[3]。相比于VC、VB等软件的GUI功能,MATLAB的GUI的优势在于可以方便得控制并修改Simulink中的参数,并可以实时得将所需要的结构显示在GUI中,而不再需要将Simulink转换成C/C++代码再利用VC、VB等软件编制对应的GUI界面。
1 SIMULINK仿真模型的搭建和GUI界面的建立
根据上述对MATLAB中的Simulink/GUI的介绍,结合工程实际中的基于对实际变压器运行状态的变压器热点温度计算模型,对其的仿真界面进行了编程和分析。
1.1 变压器热点温度分析模型
变压器热点温度监测和温度预估一直是变压器实际运行的难点和重点,能够对变压器在不同负荷及不同环境下的热点温度计算,对变压器实际安全稳定运行具有重要意义。本实验室通过对实际运行的变压器采集的热点温度的分析,我们利用Simulink模型搭建了能够很好拟合实际热点温度的仿真模型。在该模型中,通过输入环境温度、变压器铭牌参数、变压器各部分油温等温度参数,可以计算出24小时内各个时刻变压器的运行温度[2]。
根据热电类比理论,变压器内部的热量传递路径可以等效为电路模型,其中物理量的对应关系为:热流量对应电流、热阻对应电阻、温度差对应电压、热容对应电容[2]。传统的基于底层油温的热点温度模型的计算公式为:
温度差,
由于热点一般在绕组纵向高度85%左右,传统模型中用顶层油温作为计算热点的参考节点存在较大误差,本模型用热点附近油温
经研究表明,该模型在过负荷以及动态负荷的情况下更接近于实测值,具有较高的热点温度预测精度[2]。
1.2 Simulink仿真模型的搭建
在MATLAB的command window中输入Simulink,即可进入Simulink Library Browser,在Simulink Library Browser中拖动所需要的模块,将模块用连接线进行连接,并对模块参数进行调整即可。可以通过Scope模块进行仿真数据监测,可以通过out模块将数据输出至out.m文件,可以通过To Workspace模块将数据输出至工作空间。变压器热点温度分析模型如图1所示。
1.3 GUI界面的建立
1.3.1 使用GUIDE快速生成GUI界面
MATLAB的GUIDE工具为使用者提供了组建布局编辑器、排列工具、属性编辑器、对象浏览器、菜单编辑器这几种组建布局工具,通过使用布局工具,用户可以添加所需的用户控件对象并设置所需的属性[3]。设计完成并保存就完成了对GUI的快速布局,其中所有的图形界面信息就保存在相应的FIG文件中,图形界面的回调程序代码就保存在相应的.m文件中。
1.3.2 通过.M文件动态生成GUI界面
MATLAB图形界面程序是基于消息驱动的,但它与其他可视化编程语言的不同之处也决定了其运行流程的不同[3]。运行流程如下。
① 初始化图形界面。这一过程是通过函数Openfig实现的,Openfig函数的调用与M文件对应的FIG文件来初始化图形界面[3]。在这一过程中,还在回调函数中存在CreatFcn函数,除了设置图形界面外需要用输入参数,还利用初始化函数对相应的参数进行初始化设置。
② 创建用于回调函数,存储该图形界面所有的对象内容。这一过程是通过句柄函数guihandles和guidata来实现的。只有获得了图形界面所有对象的句柄,才能顺利编程,因为对句柄的应用是MATLAB图形界面程序的基础。
③ 在后台人机交互驱动机制,等待用户通过图形界面对计算机进行的操作,并等待计算机做出相应的回应。
④ 初始化完毕,给出输出参数。
2 SIMULINK与GUI中参数的传递
由于Simulink使用的数据均来自基本工作空间,因此在仿真之前必须对Simulink中的参数进行定义,如输入常数(Constant)、系统增益(Gain)等,否则将出错。在Simulink中,可以直接双击模块的图形对仿真模块进行参数的修改,同样的,在GUI中可以使用set_param()函数设置Simulink中的参数。另外,由于函数有自己的状态空间,因此需要在GUI中使用sim()函数对Simulink进行模型仿真控制。虽然在函数中定义了仿真中的的参数,但是这些函数只存在于函数的基本状态空间中,模型在仿真时无法获取。因此,由于函数状态空间和基本状态空间的变量和数据不兼容,这就增加了在GUI中调用SIMULINK的难度。具体的参数传递步骤如下:
① 在利用GUI控制Simulink时,首先需要在GUI中加载所需要控制的Simulink仿真。利用load_system(‘model)函数加载需要控制的仿真模块,其中model即为所需要控制的仿真模块。
② 在GUI中加载了相应的Simulink模型后,即可对模型中的函数进行控制。利用set_param(‘model/Constant,Value,str)函数可以将str所对应的参数赋值给model模型中Constant模块的Value值。同样的,也可以利用set_param(‘model/Gain,Value,str)函数将str所对应的参数赋值给model中Gain模块的Value值。
③ 在配置完相应的仿真参数后,利用sim函数在GUI中运行仿真,具体的语句为:sim(‘model,str2num(str1)),str1为运行时间,如果不设置此运行时间,模型的运行时间为Simulink的默认值。运行之后,必须对仿真系统进行保存,否则MATLAB会报错,保存语句为:save_system('model')。
④ 在仿真结束之后,研究人员经常会需要利用仿真的结果来进行数据分析。Simulink中提供了两种方法来让我们利用这些数据。第一种是Simulink中的To Workspace模块,利用这个模块可以直接将数据导入到MATLAB的工作空间(Workspace)中,再在GUI中利用plot或axe等函数将数据绘制在坐标系中。第二种是利用Simulink中的Out模块,可以将仿真的结果直接输出到基本工作空间中,如仿真的自变量为时间t、因变量为长度y,在工作空间中就会分别存储为tout和yout,在GUI中利用plot(tout,yout)函数即可绘制图线。另外,也可以在GUI中利用open_system('model/Scope')函数直接打开Simulink中的Scope进行图像观察,这样还可以利用Scope中内置的多种工具来分析图像,但是这条语句不能在封装之后的文件中执行,即单独的可执行文件不能运行Simulink中的Scope模块。
3 可执行文件EXE的生成
3.1 单独GUI的可执行文件的生成
由于Matlab软件本身占用较大的存储空间,不利于在工程实际中方便、直接地使用。为了使编制好的人机交互界面在脱离MATLAB环境下运行,可以利用MATLAB强大的编译功能将GUI程序编译成可执行文件(exe)进行发布和应用。但是在编译之前,需要对MATLAB的编译环境进行设置。在MATLAB的Command Window中输入”mbuild –setup”,可以选择不同的编译器进行编译,由于Visual C++编译器对各种系统平台的兼容性好并且编译的效率非常高,因此一般选用Visual C++系列的编译器。设置好编译器后,有两种方法可以将GUI编译成可执行文件。
方法一:直接在命令窗口输入”mcc –m example.m”或”mcc –e example.m”,其中”example.m”即GUI界面所对应的m文件。对于第一条语句,在编译生成exe文件时,会额外生成一个DOS窗口,这个DOS窗口显示的内容就是Matlab Command Window里的内容,这样会便于程序调试。在程序调试安全无误之后,就可以利用第二条语句,直接生成不含有DOS窗口的exe程序,进行发布。
方法二:利用Matlab的Deploytool生成exe程序。在命令窗口输入”deploytool”会提示新建一个”new deployment project”,在Matlab的编译器一栏中选择建立”Standalone Application”,然后将所需要转换的GUI主程序放置在”Main Function”中,其他子程序(如子m文件、表格、图片等)放置在”Other Files”中,并在设置-打包中勾选”Include MATLAB Compiler Runtime(MCR)”,MCR是在没有Matlab环境下运行这种exe程序的环境。设置好变量之后就可以点击”Build the Project”完成编译,然后点击”Package the Project”就可以对编译好的程序与MCR一并打包,这样在其他电脑上安装程序时即可以自动安装程序与环境。
3.2 单独SIMULINK的可执行文件的生成
Real-Time Workshop(以下简称RTW)是Simulink中用于生成C或C++源代码的工具。它可以将Simulink仿真模块转换成C或C++代码与其他语言(如VB、VC、JAVA等)进行混合编程Simulink模型可以,也就是说RTW为Simulink和其他语言提供了一个“接口”。在生成C或C++代码后即可以将代码转换成exe程序,如图2所示,具体步骤如下:
① 编译模型。RTW会分析仿真中的各个仿真模块并且编译成一个中继文件“model.rtw”。
② 产生C代码。目标语言编译器会读取”model.rtw”并将它翻译为C语言,然后将这个C文件放在一个新建的目录里,而非工作目录。
③ 生成一个自定义的makefile。RTW软件会从一个合适的目标makefile样板里建立一个makefile并将它写入新建的目录。
④ 生成可执行程序(exe)。
3.3 GUI与SIMULINK进行联合编程时的可执行文件的生成
由于Matlab的编译器不支持如”sim”函数和”set_param”函数等可以控制Simulink的函数,当利用GUI和SIMULINK联合编程时,需要对这些函数进行处理。因此在GUI与Simulink联合编程时生成可执行文件的做法为:先使用实时工作工具RTW把Simulink编译成exe文件,然后与GUI一起编译,这时在GUI中就不能使用控制Simulink相关的函数,当需要给Simulink模块赋值时,先在GUI里将参数写入一个mat文件中,如将x写入Input.mat为:”save Input.mat x”,然后在Simulink模型中对模型进行修改,让Simulink从mat文件中读取参数,而不是直接由Constant模块或者Gain模块给仿真赋值。同样的,在Simulink输出时,将输出参数也写入到mat文件(如Output.mat)中,Output文件也会存储在Workspace中,就可以在GUI中从Output.mat文件读取数据并作图。
4 变压器热点温度仿真计算及分析
如图3所示为本实验室开发的变压器热点温度分析软件,该软件可以设置不同变压器参数并进行保存,通过输入不同的环境参数以及温度限制,可以计算出变压器热点温度曲线以及当前条件下的变压器运行参数。此外,该软件还具有对变压器过载能力分析的能力,输入期望的目标运行电流或者目标运行负载可以得到相应的过载分析结果。
如图4,所示为本实验室研制的改进模型热点温度、实测热点温度与其他模型热点温度对比图,其中实测热点温度数据为四川省资阳电力公司的变压器实际运行数据。通过与实际运行数据进行比对发现,该仿真结果能够很好地拟合实际运行曲线,并且利用本论文中的方法编制的软件能够稳定、高效地运行在变电站中,对变电站的实际生产提供有力的数据支持。
其他模型热点温度对比[2]
当环境温度为25℃,变压器额定功率为120MVA,变压器额定电压为250KV,负载电流为250A时,变压器的额定电流为277.13A,电流裕度为46.49A,当前运行温度为83.35℃,热点温度曲线如图5所示。
由MATLAB软件中的Simulink/GUI在变压器热点温度计算中的应用可知,该系统通过输入相应的参数,可实现对变压器热点温度、电流裕度和过载能力分析,这大大减少了研究人员在常规方法基础上的工作量,提高了效率,同时为今后MATLAB软件中的Simulink/GUI在工程应用中提供了一种新的解决问题方法。
5 结论
① 在Matlab中可以利用Simulink与GUI的混合编程来实现仿真与界面的融合,避免了先将Simulink转换为C代码在其他界面软件上二次编程的繁琐,并且还可以在GUI中实时地修改各类参数,这种方法高效而又稳定。
② Simulink与GUI混合编程可以编译成可执行文件exe,而且这种方法要比利用外部接口来实现exe程序的设计要简便。
③ 通过该方法编制的软件可以脱离matlab环境运行,易于在工程实际工作中使用。
参考文献:
[1] 刘浩, 韩晶.MATLAB R2012a完全自学一本通[M].北京:电子工业出版社,2003:136-137.
Liu H, Han J. Self-Study of MATLAB R2012a;Bei Jing: Publishing House of Electronics Industry,2003:136-137.
[2] 陈炯,薛飞,周健聪,等.动态负载下改进的变压器热点温度计算方法[J].华东电力,2014,42(12).
Chen J,Xue F,Zhou J C, etc. Improved Calculation Method for Transformer Hot Spot Temperature with Dynamic Load. East China Of Electric Power, 2014;Vol42,No.12
[3] 陈垚光,毛涛涛,王正林,等.精通MATLAB GUI设计[M].北京:电子工业出版社,2011:236-237.
Chen Y G, Mao T T, Wang Z L, etc. Master In MATLAB GUI Design, ublishing House of Electronics Industry,2011:236-237
[4] MathWorks.MATLAB SIMULINK Real-Time Workshop 7 Getting Started Guide; Mathworks,13-15.