【摘要】:FEKO提供了LUA的脚本功能,在前处理CADFEKO和后处理POSTFEKO中均集成了LUA脚本编辑器Script editor,如图4-37所示。图4-37 FEKO的LUA脚本编辑器FEKO脚本编辑器的启动方法非常简单,即在CADFEKO或POSTFEKO的“Home”菜单中单击“Script editor”按钮,即可弹出脚本编辑器,如图4-38和图4-39所示。对于初学者,也有助于掌握LUA脚本。
FEKO提供了LUA的脚本功能,在前处理CADFEKO和后处理POSTFEKO中均集成了LUA脚本编辑器Script editor,如图4-37所示。在脚本编辑器中可以输入或编辑脚本,支持断点设置进行调试,可直接运行输出结果。

图4-37 FEKO的LUA脚本编辑器
FEKO脚本编辑器的启动方法非常简单,即在CADFEKO或POSTFEKO的“Home”菜单中单击“Script editor”按钮,即可弹出脚本编辑器,如图4-38和图4-39所示。

图4-38 CADFEKO中启动脚本编辑器

图4-39 POSTFEKO中启动脚本编辑器
FEKO网站提供了部分脚本,网址为https://www.feko.info/support/lua-scripts,可直接下载。
1.LUA脚本在CADFEKO中的使用
CADFEKO可以基于LUA脚本来完成求解之前所有的工作,主要包括参量定义、材料定义、建立模型(包括导入几何模型或网格)、赋材料属性、端口定义、工作频率设置、求解方法设置、求解参数设置以及网格生成等,为了提高代码生成的效率,CADFEKO支持脚本宏的录制功能(Record macro),单击“Record macro”按钮后,CADFEKO按照单击按钮功能的顺序,自动生成LUA脚本,完成操作再次单击“Record macro”按钮后,会自动弹出脚本编辑器,查看生成的脚本,非常方便。同时,由于LUA脚本语法简单,易读性强,因此非常有助于用户理解和修改脚本。对于初学者,也有助于掌握LUA脚本。
这里给出的例子就是利用宏录制功能快速生成的脚本,可以直接复制下边几个部分的脚本到脚本编辑器,或直接读取光盘目录“../scripts/cadfeko/”中的“cadfeko_macro_record.lua”文件,直接运行。
示例:CADFEKO录制宏。
第1部分是创建CADFEKO的一个应用app(cf代表CADFEKO的一个接口),并生成一个工程project:
--CADFEKO14.0-273612(x64)
app=cf.GetApplication()
project=app:NewProject()
第2部分是设置长度单位为毫米(mm):
--Modified solution entity:Model unit
properties=project:GetProperties()
properties.ModelAttributes.Unit=cf.Enums.ModelUnitEnum.Millimetres
project:SetProperties(properties)
第3部分是设定几个主要变量:
--Added variable"freq"=6e9
freq=project.Variables:Add("freq","6e9")
--Added variable"lam"=c0/freq/0.001
lam=project.Variables:Add("lam","c0/freq/0.001")
--Added variable"a"=0.8*lam
a=project.Variables:Add("a","0.8*lam")
--Added variable"b"=0.6*lam
b=project.Variables:Add("b","0.6*lam")
--Added variable"c"=0.2*lam
c=project.Variables:Add("c","0.2*lam")
第4部分是创建模型Cuboid1和Cylinder1:
--Created geometry:cuboid"Cuboid1"
properties=cf.Cuboid.GetDefaultProperties()
properties.Depth="b"
properties.Height="c"
properties.Label="Cuboid1"
properties.Width="a"
Cuboid1=project.Geometry:AddCuboid(properties)
--Created geometry:cylinder"Cylinder1"
properties=cf.Cylinder.GetDefaultProperties()
properties.Base.U="a/2"
properties.Base.V="b/2"
properties.Height="2*c"
properties.Label="Cylinder1"
properties.Radius="0.2*lam"
Cylinder1=project.Geometry:AddCylinder(properties)
第5部分是进行布尔操作:
--Created geometry:union""
Cuboid1=project.Geometry["Cuboid1"]
Cylinder1=project.Geometry["Cylinder1"]
targets={Cuboid1,Cylinder1}
project.Geometry:Union(targets)
第6部分是调整视图:
View3D=app.Views["3D view 1"]
View3D:ZoomToExtents()
第7部分是网格剖分设置:
MeshSettings=project.Mesher.Settings
properties=MeshSettings:GetProperties()
properties.Advanced.MinElementSize=37.0511713132585
properties.Advanced.RefinementFactor=62.4196350581785
properties.MeshSizeOption=cf.Enums.MeshSizeOptionEnum.Custom
properties.TetrahedronEdgeLength=""
properties.TriangleEdgeLength="lam/12"
properties.WireSegmentLength=""
MeshSettings:SetProperties(properties)
第8部分是进行网格划分:
--Mesh the model
project.Mesher:Mesh()
上述脚本的运行,也可以直接进入DOS界面,把目录切换到../scripts/cadfeko中,输入如下脚本,按〈Enter〉键即可:
>>:cadfeko--run-script cadfeko_macro_record.lua
关于CADFEKO中LUA脚本的使用方法与详细说明,可以参考User Manual中的第7章。
2.LUA脚本在POSTFEKO中的使用
POSTFEKO也支持LUA脚本功能,主要是利用LUA脚本读取bof中的计算结果信息(电场强度、磁场强度、电流、功率、RCS等),并可对这些结果进行计算处理。
FEKO运算直接得到参量结果(近场、远场、源、阻抗、S参数、功率、模式项、T/R等),可以单击“Home”菜单中的“New script”按钮,选择相应的参数,会直接弹出脚本编辑器,自动生成相应的代码。
下边给出的示例,可以直接复制下边几个部分的脚本到POSTFEKO的脚本编辑器,保存该脚本文件,并把光盘目录“../scripts/postfeko”中的“horn.fek”和“horn.bof”复制过来,或直接读取光盘目录“../scripts/postfeko”中的“far_field.lua”文件,直接运行。
示例1:POSTFEKO读取远场数据,并在3D视图和直角坐标系中显示。
第1部分是创建POSTFEKO的一个应用app(pf代表POSTFEKO的一个接口),生成一个工程,并打开“Horn.fek”文件,读取CADFEKO求解设置中所设定的远场计算FarFields:
app=pf.GetApplication()
app:NewProject()
app:OpenFile("Horn.fek")
farFieldCollection=app.Models[1].Configurations[1].FarFields
第2部分添加一个直角坐标系,采用索引和名称两种方式来生成2D曲线:
--Add the first far field to a Cartesian graph
graph=app.CartesianGraphs:Add()
farFieldTrace1=graph.Traces:Add(farFieldCollection[1])--Index method
farFieldTrace2=graph.Traces:Add(farFieldCollection["FarField1"])--Name method
第3部分是显示远场的3D视图:
--Add all the far fields in the collection to the 3D view
for index,farFieldData in pairs(farFieldCollection)do
farFieldPlot=app.Views[1].Plots:Add(farFieldData)
end
示例2:POSTFEKO中通过LUA读取近场数据。
该脚本把z=0,以原点为中心,半径大于等于0.15m区域的电/磁场值强制设置为0:
(www.chuimin.cn)
上述脚本参见链接资源的文件“../scripts/postfeko/near_field.lua”。要运行该脚本,方法是:单击“Home”菜单中的“Script editor”按钮,启动脚本编辑器,这时复制上述代码,或选择打开“../scripts/postfeko/near_field.lua”,单击“运行”按钮。
示例3:POSTFEKO中通过LUA设置2D曲线的运算。
该脚本演示了如何读取FEKO安装路径下的已有工程的结果,显示近场的2D曲线,并激活“Enable math”选项,写入表达式实现2D曲线翻倍和取dB,其中FEKO_HOME是FEKO的环境变量,并可以在脚本编辑器中直接使用。
app=pf.GetApplication()
app:NewProject()
app:OpenFile(FEKO_HOME..[[/examples/Resources/Automation/startup.fek]])
cartesianGraph1=app.CartesianGraphs:Add()
trace1=cartesianGraph1.Traces:Add(app.Models[1].Configurations[1].NearFields[1])
--Set 'TraceMathExpression' properties
trace1.Math.Expression="self*2.0"
trace1.Math.Enabled=true
cartesianGraph2=app.CartesianGraphs:Add()
trace2=cartesianGraph2.Traces:Add(app.Models[1].Configurations[1].NearFields[1])
cartesianGraph1:ZoomToExtents()
--Set 'TraceMathExpression' properties
trace2.Math.Expression="20*log(self)"
trace2.Label="NearField_Math_Expression_".."20log10E"
trace2.Math.Enabled=true
trace3=cartesianGraph2.Traces:Add(app.Models[1].Configurations[1].NearFields[1])
--Set 'Value ScaledToDB'
trace3.Quantity.ValuesScaledToDB=true
trace3.Label="NearField_dB"
关于POSTFEKO中LUA脚本的使用方法与详细说明,可以参考User Manual中的第10章。
3.LUA窗体与控件(Form&Controls)
为方便用户创建自定义窗体(Form)以实现某些功能应用,FEKO集成的LUA脚本也提供了窗体与常用控件(Controls)集创建功能,可以通过输入脚本的方式来完成,不提供常用控件的面板功能。对于复杂的窗体,也可以通过Visual Studio等工具来创建。
FEKO提供了控件集主要包括:按钮(formButtons),组合框(formComboBox),复选框(FormCheckBox),单选按钮(FormRadioButtonGroup),文本编辑框(FormLineEdit),选项卡(FormLabel),文件夹浏览(FormDirectoryBrowser),文件浏览(FormFileBrowser),文件另存为(FormFileSaveAsBrowser),控件分组容器(FormGroupBox)等。详细的内容可以参考软件自带的UserManual.pdf第10.3.67~10.3.91节所列的内容。
在POSTFEKO中,打开Script editor,并把下述代码复制到脚本编辑区域;或直接在脚本编辑器中单击打开按钮,打开“../scripts/controls/form_controls.lua”,单击“Run script”按钮或按〈Ctrl+R〉快捷键运行该脚本,显示如图4-40所示的界面(在该脚本中读取链接资源中自带的Horn.fek文件和图片文件horn.png)。



图4-40 显示的界面
4.其他主要模块
FEKO安装完成后,包含大量的LUA模块,默认情况下可以直接使用下列模块。
1)math:一个数学类库,包含常用的函数方法,见表4-15。
2)string:一个字符串处理库。
3)table:一个表数据处理库。
4)os:方便用户访问操作系统环境和文件的类库。
5)io:一个读写文件的输入/输出模块。
6)debug:脚本调试模块。
表4-15 常用函数

FEKO安装完后,有些广泛应用的LUA模块(也包括网上下载得到的模块)在默认情况下会包含进来,如果要应用这些模块,则必须使用函数require()进行加载,例如,require('luacom')。下面介绍的几个模块均为FEKO安装自带的模块,应用时必须重新进行加载。
1)luacom:在Windows系统中安装完FEKO后,会包含“luacom”模块,该模块是一个非常强大的模块,它使用户可以使用各种com组件,如Office的Word、Excel等。下述示例说明了如何使用该模块来控制Excel。
--COM example 1
require('luacom')
excel=luacom.CreateObject("Excel.Application")
excel.Visible=true
wb=excel.Workbooks:Add()
ws=wb.Worksheets(1)
for i=1,20 do
ws.Cells(i,1).Value2=i
end
--COM example 2
require"luacom"
excel=luacom.CreateObject("Excel.Application")
local book=excel.Workbooks:Add()
local sheet=book.Worksheets(1)
excel.Visible=true
for row=1,30 do
sheet.Cells(row,1).Value2=math.floor(math.random()*100)
end
local chart=excel.Charts:Add()
chart.ChartType=4
local range=sheet:Range("A1:A30")
chart:SetSourceData(range)
2)LuaFileSystem:该模块提供便携的方式访问底层的目录结构和文件属性。模块名称必须包括“lfs”。
3)LuaXml:一个处理XML数据的精简函数集,必须采用名称“luaxml”来调用该模块。
4)PenLight:LUA的扩展模块,一个包含表、数组、字符串、路径和目录、数据和函数的集合,必须采用名称“pl”来调用该模块。
5)winapi:该模块是视窗操作系统应用程序接口,提供了一些基本的工具,用于Windows系统,如访问注册表、找出系统资源,并让用户更多地控制进程的创建。
FEKO的LUA脚本也提供了特殊的功能函数集,这里列出一部分:
1)Complex——复数运算函数集。
2)Matrix——矩阵运算函数集。
3)ComplexMatrix——快速矩阵复数运算。
下述脚本演示了矩阵的复数运算,参见链接资源“../scripts/math/matrix_complex.lua”。为了保证该脚本在CADFEKO和POSTFEKO中都可以直接运行,而不用修改代码,这里加入了一行特殊的命令——“feko=cf or pf”。
--Create a default 2×2 complex matrix of zeros
feko=cf or pf
cm1=feko.ComplexMatrix.Zeros(2)
--Assign values to each element of the matrix
cm1[1][1]=1+j
cm1[2][1]=2+2*j
cm1[1][2]=3+3*j
cm1[2][2]=4+4*j
--Create a 2×2 complex matrix with a fill value of 2+j
cm2=feko.ComplexMatrix(2,2,2+j)
--Determine the transpose and determinant of the matrix
transpose=cm1:Transpose()
determinant=cm1:Determinant()
--Some of the valid operators for 'ComplexMatrix'
cm3=cm1*2
cm4=cm2*(3+j)
cm5=cm1+2
cm6=cm1-1
cm7=cm1+cm2
cm8=cm1-cm2
本部分的内容主要针对LUA脚本的初学者,通过本节的学习,能够快速掌握FEKO的LUA脚本的使用以及最基本的函数和结果处理功能,为以后灵活应用LUA脚本解决工作中的任意功能需求打下坚实的基础。
相关推荐