精华内容
下载资源
问答
  • 本文转自原创:努力小菜籽文末有彩蛋...部分api设计参考使用了Matthew Radway在github中分享的Interact with ANSYS HFSS via the HFSS Windows COM API。地址:http://mradway.github.io/hycohanz/我们知道HFSS是...

    本文转自原创:努力小菜籽

    文末有彩蛋代码,原文链接,以及加入HFSS官方共建微信群(最后57个名额满500人)的方法。

    部分api设计参考使用了Matthew Radway在github中分享的Interact with ANSYS HFSS via the HFSS Windows COM API。

    地址:http://mradway.github.io/hycohanz/

    我们知道HFSS是一款电磁仿真商用软件,用其进行天线的设计十分方便。而该软件也预留了可以运行脚本的接口,使用者可以使用脚本对软件进行控制,实现模型的建立、求解等等。由于后期可能会用到联合仿真,而大多数联合仿真的脚本都是使用的Matlab进行编程,网上也有不少现成的api,因为对python比较熟悉,且python除了数值计算其他的功能也相当强大,并且免费开源,于是决定用python写一个建模的脚本(其实是我matlab学得太烂了),折腾了两天,终于把微带天线的模型建立与仿真的过程搞定了,当然是基于有Matthew Radway这位大牛的基础上。这个例子也是接触HFSS时手绘天线做的第一个例子,现在用代码做一遍,也是很有意思的事情。下面分享给大家。

    1、连接软件

    GetAppDesktop

    Use:     GetAppDesktopis a function of    oAnsoftApp. This function does not take an input and it returns an object. The object is assigned to the variable   oDesktop.

    Syntax:              GetAppDesktop()

    Return Value:    Object.

    Parameters:      None

    Example:     

    Set oDesktop = oAnsoftApp.GetAppDesktop()

    给出了函数名,参数值,返回值,以及一个实例(这个帮助文档写得很不错,但是后面阅读过程中也发现了一些小错误,当然很可能是因为我用的是daoban)。这个返回值oAnsoftApp就是后面进行一系列操作要使用的对象,所有的操作的形式都是下面这样:oAnsoftApp.

    python中编写了一个接口函数把这个函数封装在里面。代码如下:

    1. from __future__ import division, print_function, unicode_literals, absolute_import

    2. import win32com.client

    3. def setup_interface():

    4.     """

    5.     Set up the COM interface to the running HFSS process.

    6.     Returns

    7.     -------

    8.     oAnsoftApp : pywin32 COMObject

    9.         Handle to the HFSS application interface

    10.     oDesktop : pywin32 COMObject

    11.         Handle to the HFSS desktop interface

    12.     Examples

    13.     --------

    14.     >>> import Hyphasis as hfss

    15.     >>> [oAnsoftApp, oDesktop] = hfss.setup_interface()

    16.     """

    17.     # I'm still looking for a better way to do this.  This attaches to an 

    18.     # existing HFSS process instead of creating a new one.  I would highly 

    19.     # prefer that a new process is created.  Apparently 

    20.     # win32com.client.DispatchEx() doesn't work here either.

    21.     oAnsoftApp = win32com.client.Dispatch('AnsoftHfss.HfssScriptInterface')

    22.     oDesktop = oAnsoftApp.GetAppDesktop()

    23.     return [oAnsoftApp, oDesktop]

    作者用了win32com.client.Dispatch()这个函数,这个函数是专门用来连接接口的,返回值中的那个oDesktop就是生成的对象。

    实际调用代码:[oAnsoftApp, oDesktop] = hfss.setup_interface()

    2、新建一个project

    oProject = hfss.new_project(oDesktop)

    这里就是用了上面生成的oDesktop对象新建了一个object,具体查阅help文档和编写api的工作和上一步一致,并且平时使用时直接使用接口调用即可。注意,下面进行的操作都在这个project中,所以下面操作的对象就是oProject了。这个时候HFSS里应该长这样了。

    07fdf482f1fa8d20c049b73bbe0eb94b.png

    3、保存project

    养成良好习惯,新建的文件之后先保存,在编写过程中因为没有先保存,生成了一堆临时文件,挺讨厌的。这个传人的参数可以包含路径。

    hfss.save_as_project(oDesktop,"E:/dj/test/microstrip_antenna.hfss")

    4、新建一个design

    这里传人的参数为design的名字,设计模式。

    oDesign = hfss.insert_design(oProject, "HFSSDesign1", "DrivenModal")

    新建完成后发现和我们手动操作是一样的。

    d52b26f082a93a5aa15c5ad7bebd38ef.png

    5、建立模型

    教程中首先新建了一个地板,并设置为PEC。这里也分别调用了这两个函数,尺寸可以用字符串输入,很方便灵活,不需要自己转换为一堆小数点的数字。设置PEC表面首先需要获得平面的faceid,再给这个表面设置边界条件。

    1. raw_input('Press "Enter" to draw a ground plane>')

    2. ground = hfss.create_rectangle(

    3.     oEditor,   

    4.     "-45mm", 

    5.     "-45mm", 

    6.     0,

    7.     "90mm", 

    8.     "90mm",

    9.     Name='ground',

    10.     Transparency=0.8)

    11. raw_input('Press "Enter" to assign a PerfectE boundary condition on the ground.>')

    12. ground_faceid=[]

    13. ground_faceidnum = hfss.get_face_by_position(oEditor, ground, 0, 0, 0)

    14. print ground_faceidnum

    15. ground_faceid.append(ground_faceidnum)

    16. hfss.assign_perfect_e(oDesign, "ground", ground_faceid)

    由于建模过程比较类似,这里就不逐个给出了,模型建立完毕如下图(包括了设置边界条件和设置端口):

    ea704e8532abf13f07b1745804a92a31.png

    6、设置求解和扫频

    这里求解函数传人了中心频点;扫频传入了扫频方式,起始频率和终止频率,频率间隔。

    1. raw_input('Press "Enter" to insert analysis setup.>')  

    2. setuplist=[]

    3. setupname = hfss.insert_analysis_setup(oDesign, 2.45)

    4. setuplist.append(setupname) 

    5. raw_input('Press "Enter" to insert frequency sweep.>')  

    6. hfss.insert_frequency_sweep(oDesign,

    7.                             setupname,

    8.                             "Sweep1",

    9.                             1.5,

    10.                             3.5,

    11.                             0.1,

    12.                             IsEnabled=True,

    13.                             SetupType="LinearStep",

    14.                             Type="Discrete",

    15.                             SaveFields=True,

    16.                             ExtrapToDC=False)

    7、求解

    对于每个setup进行求解。是不是和手动操作是一样的?

    hfss.solve(oDesign,setuplist)

    d38cf108cfb193a100a58bafed01488b.png

    8、退出HFSS

    hfss.quit_application(oDesktop)

    结束语:

    今天暂时研究到这儿,还有很多比如查看求解完成后的驻波、增益曲线等等还有设置主从边界啦很多的api还没有编写,有时间会继续完善。

    做了个有趣的小玩意儿,分享给大家~

    完整主函数源码(api部分还不是很完整,哦,相当不完整,就先不给出了):

    1. # -*- coding: utf-8 -*-

    2. """

    3. Created on Fri Apr 22 14:29:38 2016

    4. @author: DJ

    5. """

    6. from __future__ import division

    7. import hycohanz as hfss

    8. raw_input('Press "Enter" to connect to HFSS.>')

    9. [oAnsoftApp, oDesktop] = hfss.setup_interface()

    10. raw_input('Press "Enter" to create a new project.>')

    11. oProject = hfss.new_project(oDesktop)

    12. raw_input('Press "Enter" to save the project.>') 

    13. hfss.save_as_project(oDesktop,"E:/dj/test/microstrip_antenna.hfss")

    14. raw_input('Press "Enter" to insert a new DrivenModal design named HFSSDesign1.>')

    15. oDesign = hfss.insert_design(oProject, "HFSSDesign1", "DrivenModal")

    16. raw_input('Press "Enter" to set the active editor to "3D Modeler" (The default and only known correct value).>')

    17. oEditor = hfss.set_active_editor(oDesign)

    18. raw_input('Press "Enter" to draw a ground plane>')

    19. ground = hfss.create_rectangle(

    20.     oEditor,   

    21.     "-45mm", 

    22.     "-45mm", 

    23.     0,

    24.     "90mm", 

    25.     "90mm",

    26.     Name='ground',

    27.     Transparency=0.8)

    28. raw_input('Press "Enter" to assign a PerfectE boundary condition on the ground.>')

    29. ground_faceid=[]

    30. ground_faceidnum = hfss.get_face_by_position(oEditor, ground, 0, 0, 0)

    31. print ground_faceidnum

    32. ground_faceid.append(ground_faceidnum)

    33. hfss.assign_perfect_e(oDesign, "ground", ground_faceid)

    34. raw_input('Press "Enter" to insert some substrate properties into the design.>')

    35. hfss.add_property(oDesign, "w", hfss.Expression("80mm"))

    36. hfss.add_property(oDesign, "h", hfss.Expression("5mm"))

    37. raw_input('Press "Enter" to draw a substrate using the properties.>')

    38. substrate = hfss.create_box(

    39.     oEditor,   

    40.     -hfss.Expression("w")/2, 

    41.     -hfss.Expression("w")/2, 

    42.     0,

    43.     hfss.Expression("w"), 

    44.     hfss.Expression("w"),

    45.     hfss.Expression("h"),

    46.     Name='substrate',

    47.     Transparency=0.8)

    48. raw_input('''Press "Enter" to change the substrate's material to Rogers 4003>''')

    49. hfss.assign_material(oEditor, [substrate], MaterialName="Rogers RO4003 (tm)")

    50. raw_input('Press "Enter" to insert some patch properties into the design.>')

    51. hfss.add_property(oDesign, "w_p", hfss.Expression("31.0mm"))

    52. hfss.add_property(oDesign, "l_p", hfss.Expression("41.4mm"))

    53. raw_input('Press "Enter" to draw a patch>')

    54. patch = hfss.create_rectangle(

    55.     oEditor,   

    56.     -hfss.Expression("w_p")/2, 

    57.     -hfss.Expression("l_p")/2, 

    58.     hfss.Expression("h"),

    59.     hfss.Expression("w_p"), 

    60.     hfss.Expression("l_p"),

    61.     Name='patch',

    62.     Transparency=0.8)

    63. raw_input('Press "Enter" to assign a PerfectE boundary condition on the patch.>')

    64. patch_faceid=[]

    65. print hfss.Expression("h")

    66. patch_faceidnum = hfss.get_face_by_position(oEditor, patch, 0, 0, 0.005) #hardcode!!

    67. #print ground_faceidnum

    68. patch_faceid.append(patch_faceidnum)

    69. hfss.assign_perfect_e(oDesign, "patch", patch_faceid)

    70. raw_input('Press "Enter" to draw a Coaxial core>')

    71. Coaxial_core = hfss.create_cylinder(

    72.     oEditor,   

    73.     "9.5mm", 

    74.     0, 

    75.     0,

    76.     "0.5mm", 

    77.     "5mm",

    78.     Name='Coaxial_core',

    79.     Transparency=0.8)

    80. raw_input('''Press "Enter" to change the Coaxial_core's material to copper>''')

    81. hfss.assign_material(oEditor, [Coaxial_core], MaterialName="copper")

    82. raw_input('Press "Enter" to draw a Signal transmission port>')

    83. port = hfss.create_circle(

    84.     oEditor,   

    85.     "9.5mm", 

    86.     0, 

    87.     0,

    88.     "1.5mm", 

    89.     Name='port',

    90.     Transparency=0.8)

    91. raw_input('Press "Enter" to subtract the transmission port from the ground.>')

    92. hfss.subtract(oEditor, [ground], [port], KeepOriginals=True)

    93. raw_input('Press "Enter" to draw an air box>')

    94. air = hfss.create_box(

    95.     oEditor,   

    96.     '-80mm', 

    97.     '-80mm', 

    98.     0,

    99.     '160mm', 

    100.     '160mm',

    101.     '75mm',

    102.     Name='air',

    103.     Transparency=0.8)

    104. raw_input('Press "Enter" to assign a Radiation boundary condition for the air box.>')

    105. air_objectid=[]

    106. air_objectidnum = hfss.get_object_id_by_name(oEditor, "air")

    107. #print ground_faceidnum

    108. air_objectid.append(air_objectidnum)

    109. print air_objectid

    110. hfss.assign_radiation(oDesign, objectname=['air'], Name='Air')

    111. raw_input('Press "Enter" to assign a lumped port on the port.>')

    112. port_faceid=[]

    113. port_faceidnum = hfss.get_face_by_position(oEditor, port, "9.5mm", 0, 0) #hardcode!!

    114. #print port_faceidnum

    115. port_faceid.append(port_faceidnum)

    116. hfss.assign_lumpedport_multimode(oDesign, "port", port_faceid,["10mm","0mm","0mm"],["11mm","0mm","0mm"])

    117. raw_input('Press "Enter" to insert analysis setup.>')  

    118. setuplist=[]

    119. setupname = hfss.insert_analysis_setup(oDesign, 2.45)

    120. setuplist.append(setupname) 

    121. raw_input('Press "Enter" to insert frequency sweep.>')  

    122. hfss.insert_frequency_sweep(oDesign,

    123.                             setupname,

    124.                             "Sweep1",

    125.                             1.5,

    126.                             3.5,

    127.                             0.1,

    128.                             IsEnabled=True,

    129.                             SetupType="LinearStep",

    130.                             Type="Discrete",

    131.                             SaveFields=True,

    132.                             ExtrapToDC=False)

    133. raw_input('Press "Enter" to solve the setup.>') 

    134. hfss.solve(oDesign,setuplist)

    135. raw_input('Press "Enter" to quit HFSS.>')

    136. hfss.quit_application(oDesktop)

    137. del oEditor

    138. del oDesign

    139. del oProject

    140. del oDesktop

    141. del oAnsoftApp

    版权声明:本文为CSDN博主「努力小菜籽」的原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接及本声明。原文链接:https://blog.csdn.net/sinat_31360161/article/details/51226894

    射频rf易迪艾eda

    微波仿真论坛(bbs.rfeda.cn) 

    2006-2020专注微波14年,现13.5万微波会员

    关注公众号(微波仿真论坛 http://bbs.rfeda.cn)可获得更多优秀资料

    b712b3f944ff19ac77e5678252d52af5.png

    扫码加小编微信号:18010874378 (昵称:Amy_射频易迪艾|编辑)备注:地区+研究方向+工作单位 可邀请你加入 论坛与ANSYS HFSS官方共建的微信群

    9a981d8287bdde2a0c480a22f98ba328.png

    注明:加HFSS官方共建群(最后57个名额满500人)该群有HFSS官方技术经理加入

    往期 精彩 回顾  

    93d3c1396b0590d1c1bd0ff233b9573b.png 
    展开全文
  • 说明:本文中的微带线设计案例来自李明洋老师的《HFSS电磁仿真设计应用详解》一书的第10章----HFSS微带天线设计实例。 部分api设计参考使用了Matthew Radway在github中分享的Interact with ANSYS HFSS via the HFSS ...

    说明:本文中的微带线设计案例来自李明洋老师的《HFSS电磁仿真设计应用详解》一书的第10章----HFSS微带天线设计实例。

    部分api设计参考使用了Matthew Radway在github中分享的Interact with ANSYS HFSS via the HFSS Windows COM API。地址:http://mradway.github.io/hycohanz/


    我们知道HFSS是一款电磁仿真商用软件,用其进行天线的设计十分方便。而该软件也预留了可以运行脚本的接口,使用者可以使用脚本对软件进行控制,实现模型的建立、求解等等。由于后期可能会用到联合仿真,而大多数联合仿真的脚本都是使用的Matlab进行编程,网上也有不少现成的api,因为对python比较熟悉,且python除了数值计算其他的功能也相当强大,并且免费开源,于是决定用python写一个建模的脚本(其实是我matlab学得太烂了),折腾了两天,终于把微带天线的模型建立与仿真的过程搞定了,当然是基于有Matthew Radway这位大牛的基础上。这个例子也是接触HFSS时手绘天线做的第一个例子,现在用代码做一遍,也是很有意思的事情。下面分享给大家。

    1、连接软件

    第一步当然要用脚本实现打开软件了。关于这个步骤,HFSS帮助文档中是这样写的

    GetAppDesktop

    Use:     GetAppDesktopis a function of    oAnsoftApp. This function does not take an input and it returns an object. The object is assigned to the variable   oDesktop.

    Syntax:              GetAppDesktop()

    Return Value:    Object.

    Parameters:      None

    Example:     

    Set oDesktop = oAnsoftApp.GetAppDesktop()

    给出了函数名,参数值,返回值,以及一个实例(这个帮助文档写得很不错,但是后面阅读过程中也发现了一些小错误,当然很可能是因为我用的是daoban)。这个返回值oAnsoftApp就是后面进行一系列操作要使用的对象,所有的操作的形式都是下面这样:

    oAnsoftApp.<CommandName> <args>

    python中编写了一个接口函数把这个函数封装在里面。代码如下(不是我写的):

    from __future__ import division, print_function, unicode_literals, absolute_import
    
    import win32com.client
    
    def setup_interface():
        """
        Set up the COM interface to the running HFSS process.
        
        Returns
        -------
        oAnsoftApp : pywin32 COMObject
            Handle to the HFSS application interface
        oDesktop : pywin32 COMObject
            Handle to the HFSS desktop interface
        
        Examples
        --------
        >>> import Hyphasis as hfss
        >>> [oAnsoftApp, oDesktop] = hfss.setup_interface()
        
        """
        # I'm still looking for a better way to do this.  This attaches to an 
        # existing HFSS process instead of creating a new one.  I would highly 
        # prefer that a new process is created.  Apparently 
        # win32com.client.DispatchEx() doesn't work here either.
        oAnsoftApp = win32com.client.Dispatch('AnsoftHfss.HfssScriptInterface')
    
        oDesktop = oAnsoftApp.GetAppDesktop()
    
        return [oAnsoftApp, oDesktop]
    作者用了win32com.client.Dispatch()这个函数,这个函数是专门用来连接接口的,返回值中的那个oDesktop就是生成的对象。

    实际调用代码:

    [oAnsoftApp, oDesktop] = hfss.setup_interface()


    2、新建一个project

    oProject = hfss.new_project(oDesktop)

    这里就是用了上面生成的oDesktop对象新建了一个object,具体查阅help文档和编写api的工作和上一步一致,并且平时使用时直接使用接口调用即可。注意,下面进行的操作都在这个project中,所以下面操作的对象就是oProject了。这个时候HFSS里应该长这样了。



    3、保存project

    养成良好习惯,新建的文件之后先保存,在编写过程中因为没有先保存,生成了一堆临时文件,挺讨厌的。这个传人的参数可以包含路径。

    hfss.save_as_project(oDesktop,"E:/dj/test/microstrip_antenna.hfss")

    4、新建一个design

    这里传人的参数为design的名字,设计模式。

    oDesign = hfss.insert_design(oProject, "HFSSDesign1", "DrivenModal")
    新建完成后发现和我们手动操作是一样的。



    5、建立模型

    教程中首先新建了一个地板,并设置为PEC。这里也分别调用了这两个函数,尺寸可以用字符串输入,很方便灵活,不需要自己转换为一堆小数点的数字。设置PEC表面首先需要获得平面的faceid,再给这个表面设置边界条件。

    raw_input('Press "Enter" to draw a ground plane>')
    
    ground = hfss.create_rectangle(
        oEditor,   
        "-45mm", 
        "-45mm", 
        0,
        "90mm", 
        "90mm",
        Name='ground',
        Transparency=0.8)
    
    raw_input('Press "Enter" to assign a PerfectE boundary condition on the ground.>')
    ground_faceid=[]
    ground_faceidnum = hfss.get_face_by_position(oEditor, ground, 0, 0, 0)
    print ground_faceidnum
    ground_faceid.append(ground_faceidnum)
    hfss.assign_perfect_e(oDesign, "ground", ground_faceid)
    由于建模过程比较类似,这里就不逐个给出了,模型建立完毕如下图(包括了设置边界条件和设置端口):



    6、设置求解和扫频

    这里求解函数传人了中心频点;扫频传入了扫频方式,起始频率和终止频率,频率间隔。

    raw_input('Press "Enter" to insert analysis setup.>')  
    
    setuplist=[]
    
    setupname = hfss.insert_analysis_setup(oDesign, 2.45)
    
    setuplist.append(setupname) 
    
    raw_input('Press "Enter" to insert frequency sweep.>')  
    
    hfss.insert_frequency_sweep(oDesign,
                                setupname,
                                "Sweep1",
                                1.5,
                                3.5,
                                0.1,
                                IsEnabled=True,
                                SetupType="LinearStep",
                                Type="Discrete",
                                SaveFields=True,
                                ExtrapToDC=False)

    7、求解

    对于每个setup进行求解。是不是和手动操作是一样的?

    hfss.solve(oDesign,setuplist)


    8、退出HFSS

    hfss.quit_application(oDesktop)


    结束语:

    今天暂时研究到这儿,还有很多比如查看求解完成后的驻波、增益曲线等等还有设置主从边界啦很多的api还没有编写,有时间会继续完善。

    做了个有趣的小玩意儿,分享给大家~

    完整主函数源码(api部分还不是很完整,哦,相当不完整,就先不给出了):

    # -*- coding: utf-8 -*-
    """
    Created on Fri Apr 22 14:29:38 2016
    
    @author: DJ
    """
    
    from __future__ import division
    
    import hycohanz as hfss
    
    raw_input('Press "Enter" to connect to HFSS.>')
    
    [oAnsoftApp, oDesktop] = hfss.setup_interface()
    
    raw_input('Press "Enter" to create a new project.>')
    
    oProject = hfss.new_project(oDesktop)
    
    raw_input('Press "Enter" to save the project.>') 
    
    hfss.save_as_project(oDesktop,"E:/dj/test/microstrip_antenna.hfss")
    
    raw_input('Press "Enter" to insert a new DrivenModal design named HFSSDesign1.>')
    
    oDesign = hfss.insert_design(oProject, "HFSSDesign1", "DrivenModal")
    
    raw_input('Press "Enter" to set the active editor to "3D Modeler" (The default and only known correct value).>')
    
    oEditor = hfss.set_active_editor(oDesign)
    
    raw_input('Press "Enter" to draw a ground plane>')
    
    ground = hfss.create_rectangle(
        oEditor,   
        "-45mm", 
        "-45mm", 
        0,
        "90mm", 
        "90mm",
        Name='ground',
        Transparency=0.8)
    
    raw_input('Press "Enter" to assign a PerfectE boundary condition on the ground.>')
    ground_faceid=[]
    ground_faceidnum = hfss.get_face_by_position(oEditor, ground, 0, 0, 0)
    print ground_faceidnum
    ground_faceid.append(ground_faceidnum)
    hfss.assign_perfect_e(oDesign, "ground", ground_faceid)
        
    raw_input('Press "Enter" to insert some substrate properties into the design.>')
    
    hfss.add_property(oDesign, "w", hfss.Expression("80mm"))
    hfss.add_property(oDesign, "h", hfss.Expression("5mm"))
    
    raw_input('Press "Enter" to draw a substrate using the properties.>')
    
    substrate = hfss.create_box(
        oEditor,   
        -hfss.Expression("w")/2, 
        -hfss.Expression("w")/2, 
        0,
        hfss.Expression("w"), 
        hfss.Expression("w"),
        hfss.Expression("h"),
        Name='substrate',
        Transparency=0.8)
        
    raw_input('''Press "Enter" to change the substrate's material to Rogers 4003>''')
    
    hfss.assign_material(oEditor, [substrate], MaterialName="Rogers RO4003 (tm)")
    
    raw_input('Press "Enter" to insert some patch properties into the design.>')
    
    hfss.add_property(oDesign, "w_p", hfss.Expression("31.0mm"))
    hfss.add_property(oDesign, "l_p", hfss.Expression("41.4mm"))
    
    raw_input('Press "Enter" to draw a patch>')
    
    patch = hfss.create_rectangle(
        oEditor,   
        -hfss.Expression("w_p")/2, 
        -hfss.Expression("l_p")/2, 
        hfss.Expression("h"),
        hfss.Expression("w_p"), 
        hfss.Expression("l_p"),
        Name='patch',
        Transparency=0.8)
    
    raw_input('Press "Enter" to assign a PerfectE boundary condition on the patch.>')
    patch_faceid=[]
    print hfss.Expression("h")
    patch_faceidnum = hfss.get_face_by_position(oEditor, patch, 0, 0, 0.005) #hardcode!!
    #print ground_faceidnum
    patch_faceid.append(patch_faceidnum)
    hfss.assign_perfect_e(oDesign, "patch", patch_faceid)
    
    raw_input('Press "Enter" to draw a Coaxial core>')
    
    Coaxial_core = hfss.create_cylinder(
        oEditor,   
        "9.5mm", 
        0, 
        0,
        "0.5mm", 
        "5mm",
        Name='Coaxial_core',
        Transparency=0.8)
        
    raw_input('''Press "Enter" to change the Coaxial_core's material to copper>''')
    
    hfss.assign_material(oEditor, [Coaxial_core], MaterialName="copper")
    
    raw_input('Press "Enter" to draw a Signal transmission port>')
    
    port = hfss.create_circle(
        oEditor,   
        "9.5mm", 
        0, 
        0,
        "1.5mm", 
        Name='port',
        Transparency=0.8)
    
    raw_input('Press "Enter" to subtract the transmission port from the ground.>')
    
    hfss.subtract(oEditor, [ground], [port], KeepOriginals=True)
    
    raw_input('Press "Enter" to draw an air box>')
    
    air = hfss.create_box(
        oEditor,   
        '-80mm', 
        '-80mm', 
        0,
        '160mm', 
        '160mm',
        '75mm',
        Name='air',
        Transparency=0.8)
        
    raw_input('Press "Enter" to assign a Radiation boundary condition for the air box.>')
    air_objectid=[]
    air_objectidnum = hfss.get_object_id_by_name(oEditor, "air")
    #print ground_faceidnum
    air_objectid.append(air_objectidnum)
    print air_objectid
    hfss.assign_radiation(oDesign, objectname=['air'], Name='Air')
    
    raw_input('Press "Enter" to assign a lumped port on the port.>')
    
    port_faceid=[]
    
    port_faceidnum = hfss.get_face_by_position(oEditor, port, "9.5mm", 0, 0) #hardcode!!
    #print port_faceidnum
    port_faceid.append(port_faceidnum)
    hfss.assign_lumpedport_multimode(oDesign, "port", port_faceid,["10mm","0mm","0mm"],["11mm","0mm","0mm"])
    
    raw_input('Press "Enter" to insert analysis setup.>')  
    
    setuplist=[]
    
    setupname = hfss.insert_analysis_setup(oDesign, 2.45)
    
    setuplist.append(setupname) 
    
    raw_input('Press "Enter" to insert frequency sweep.>')  
    
    hfss.insert_frequency_sweep(oDesign,
                                setupname,
                                "Sweep1",
                                1.5,
                                3.5,
                                0.1,
                                IsEnabled=True,
                                SetupType="LinearStep",
                                Type="Discrete",
                                SaveFields=True,
                                ExtrapToDC=False)
    
    raw_input('Press "Enter" to solve the setup.>') 
    
    hfss.solve(oDesign,setuplist)
    
    raw_input('Press "Enter" to quit HFSS.>')
    
    hfss.quit_application(oDesktop)
    
    del oEditor
    del oDesign
    del oProject
    del oDesktop
    del oAnsoftApp


    展开全文
  • 原标题:利用Python与HFSS联合仿真设计一个微带天线!我们知道HFSS是一款电磁仿真商用软件,用其进行天线的设计十分方便。而该软件也预留了可以运行脚本的接口,使用者可以使用脚本对软件进行控制,实现模型的建立、...

    原标题:利用Python与HFSS联合仿真设计一个微带天线!

    我们知道HFSS是一款电磁仿真商用软件,用其进行天线的设计十分方便。而该软件也预留了可以运行脚本的接口,使用者可以使用脚本对软件进行控制,实现模型的建立、求解等等。由于后期可能会用到联合仿真,而大多数联合仿真的脚本都是使用的Matlab进行编程,网上也有不少现成的api,因为对python比较熟悉,且python除了数值计算其他的功能也相当强大,并且免费开源,于是决定用python写一个建模的脚本(其实是我matlab学得太烂了),折腾了两天,终于把微带天线的模型建立与仿真的过程搞定了,当然是基于有Matthew Radway这位大牛的基础上。这个例子也是接触HFSS时手绘天线做的第一个例子,现在用代码做一遍,也是很有意思的事情。下面分享给大家。

    1、连接软件

    第一步当然要用脚本实现打开软件了。关于这个步骤,HFSS帮助文档中是这样写的

    GetAppDesktop

    Use:GetAppDesktopis a function of oAnsoftApp. This function does not take an input and it returns an object. The object is assigned to the variable oDesktop.

    Syntax:GetAppDesktop()

    Return Value:Object.

    Parameters:None

    Example:

    Set oDesktop = oAnsoftApp.GetAppDesktop()

    给出了函数名,参数值,返回值,以及一个实例(这个帮助文档写得很不错,但是后面阅读过程中也发现了一些小错误,当然很可能是因为我用的是daoban)。这个返回值oAnsoftApp就是后面进行一系列操作要使用的对象,所有的操作的形式都是下面这样:

    oAnsoftApp.

    python中编写了一个接口函数把这个函数封装在里面。代码如下(不是我写的):

    作者用了win32com.client.Dispatch()这个函数,这个函数是专门用来连接接口的,返回值中的那个oDesktop就是生成的对象。

    实际调用代码:

    [oAnsoftApp, oDesktop] = hfss.setup_interface()

    2、新建一个project

    oProject = hfss.new_project(oDesktop)

    这里就是用了上面生成的oDesktop对象新建了一个object,具体查阅help文档和编写api的工作和上一步一致,并且平时使用时直接使用接口调用即可。注意,下面进行的操作都在这个project中,所以下面操作的对象就是oProject了。这个时候HFSS里应该长这样了。

    3、保存project

    养成良好习惯,新建的文件之后先保存,在编写过程中因为没有先保存,生成了一堆临时文件,挺讨厌的。这个传人的参数可以包含路径。

    hfss.save_as_project(oDesktop,"E:/dj/test/microstrip_antenna.hfss")

    4、新建一个design

    这里传人的参数为design的名字,设计模式。

    oDesign = hfss.insert_design(oProject, "HFSSDesign1", "DrivenModal")

    新建完成后发现和我们手动操作是一样的。

    5、建立模型

    教程中首先新建了一个地板,并设置为PEC。这里也分别调用了这两个函数,尺寸可以用字符串输入,很方便灵活,不需要自己转换为一堆小数点的数字。设置PEC表面首先需要获得平面的faceid,再给这个表面设置边界条件。

    由于建模过程比较类似,这里就不逐个给出了,模型建立完毕如下图(包括了设置边界条件和设置端口):

    6、设置求解和扫频

    这里求解函数传人了中心频点;扫频传入了扫频方式,起始频率和终止频率,频率间隔。

    7、求解

    对于每个setup进行求解。是不是和手动操作是一样的?

    hfss.solve(oDesign,setuplist)

    8、退出HFSS

    hfss.quit_application(oDesktop)

    结束语:今天暂时研究到这儿,还有很多比如查看求解完成后的驻波、增益曲线等等还有设置主从边界啦很多的api还没有编写,有时间会继续完善。

    做了个有趣的小玩意儿,分享给大家~

    完整主函数源码(api部分还不是很完整,哦,相当不完整,就先不给出了):

    进群“960410445” 即可获取书十套PDF!

    说明:本文中的微带线设计案例来自李明洋老师的《HFSS电磁仿真设计应用详解》一书的第10章----HFSS微带天线设计实例。

    部分api设计参考使用了Matthew Radway在github中分享的Interact with ANSYS HFSS via the HFSS Windows COM API。地址:http://mradway.github.io/hycohanz/返回搜狐,查看更多

    责任编辑:

    展开全文
  • 原标题:利用Python与HFSS联合仿真设计一个微带天线(附详细代码)我们知道HFSS是一款电磁仿真商用软件,用其进行天线的设计十分方便。而该软件也预留了可以运行脚本的接口,使用者可以使用脚本对软件进行控制,实现...

    原标题:利用Python与HFSS联合仿真设计一个微带天线(附详细代码)

    我们知道HFSS是一款电磁仿真商用软件,用其进行天线的设计十分方便。而该软件也预留了可以运行脚本的接口,使用者可以使用脚本对软件进行控制,实现模型的建立、求解等等。由于后期可能会用到联合仿真,而大多数联合仿真的脚本都是使用的Matlab进行编程,网上也有不少现成的api,因为对python比较熟悉,且python除了数值计算其他的功能也相当强大,并且免费开源,于是决定用python写一个建模的脚本(其实是我matlab学得太烂了),折腾了两天,终于把微带天线的模型建立与仿真的过程搞定了,当然是基于有Matthew Radway这位大牛的基础上。这个例子也是接触HFSS时手绘天线做的第一个例子,现在用代码做一遍,也是很有意思的事情。下面分享给大家。

    1、连接软件

    第一步当然要用脚本实现打开软件了。关于这个步骤,HFSS帮助文档中是这样写的

    GetAppDesktop

    Use:GetAppDesktopis a function of oAnsoftApp. This function does not take an input and it returns an object. The object is assigned to the variable oDesktop.

    Syntax:GetAppDesktop()

    Return Value:Object.

    Parameters:None

    Example:

    Set oDesktop = oAnsoftApp.GetAppDesktop()

    给出了函数名,参数值,返回值,以及一个实例(这个帮助文档写得很不错,但是后面阅读过程中也发现了一些小错误,当然很可能是因为我用的是daoban)。这个返回值oAnsoftApp就是后面进行一系列操作要使用的对象,所有的操作的形式都是下面这样:

    oAnsoftApp.

    python中编写了一个接口函数把这个函数封装在里面。代码如下(不是我写的):

    作者用了win32com.client.Dispatch()这个函数,这个函数是专门用来连接接口的,返回值中的那个oDesktop就是生成的对象。

    实际调用代码:

    [oAnsoftApp, oDesktop] = hfss.setup_interface()

    2、新建一个project

    oProject = hfss.new_project(oDesktop)

    这里就是用了上面生成的oDesktop对象新建了一个object,具体查阅help文档和编写api的工作和上一步一致,并且平时使用时直接使用接口调用即可。注意,下面进行的操作都在这个project中,所以下面操作的对象就是oProject了。这个时候HFSS里应该长这样了。

    3、保存project

    养成良好习惯,新建的文件之后先保存,在编写过程中因为没有先保存,生成了一堆临时文件,挺讨厌的。这个传人的参数可以包含路径。

    hfss.save_as_project(oDesktop,"E:/dj/test/microstrip_antenna.hfss")

    4、新建一个design

    这里传人的参数为design的名字,设计模式。

    oDesign = hfss.insert_design(oProject, "HFSSDesign1", "DrivenModal")

    新建完成后发现和我们手动操作是一样的。

    5、建立模型

    教程中首先新建了一个地板,并设置为PEC。这里也分别调用了这两个函数,尺寸可以用字符串输入,很方便灵活,不需要自己转换为一堆小数点的数字。设置PEC表面首先需要获得平面的faceid,再给这个表面设置边界条件。

    由于建模过程比较类似,这里就不逐个给出了,模型建立完毕如下图(包括了设置边界条件和设置端口):

    6、设置求解和扫频

    这里求解函数传人了中心频点;扫频传入了扫频方式,起始频率和终止频率,频率间隔。

    7、求解

    对于每个setup进行求解。是不是和手动操作是一样的?

    hfss.solve(oDesign,setuplist)

    8、退出HFSS

    hfss.quit_application(oDesktop)

    结束语:今天暂时研究到这儿,还有很多比如查看求解完成后的驻波、增益曲线等等还有设置主从边界啦很多的api还没有编写,有时间会继续完善。

    做了个有趣的小玩意儿,分享给大家~

    完整主函数源码(api部分还不是很完整,哦,相当不完整,就先不给出了):

    说明:本文中的微带线设计案例来自李明洋老师的《HFSS电磁仿真设计应用详解》一书的第10章----HFSS微带天线设计实例。

    部分api设计参考使用了Matthew Radway在github中分享的Interact with ANSYS HFSS via the HFSS Windows COM API。地址:http://mradway.github.io/hycohanz/

    作者:努力小菜籽

    微波射频行业人士 | 相聚在这里

    【10大细分领域的微信技术交流群】

    微波射频网已建立射频、天线、雷达、毫米波、手机射频、RFIC、功放、SDR等细分领域的技术交流群,提供一个互相交流的平台,促进技术进步。

    加群主为好友,说明:单位+技术方向,邀请您加入相应技术群返回搜狐,查看更多

    责任编辑:

    展开全文
  • 我们知道HFSS是一款电磁仿真商用软件,用其进行天线设计十分方便。而该软件也预留了可以运行脚本的接口,使用者可以使用脚本对软件进行控制,实现模型的建立、求解等等。由于后期可能会用到联合仿真,而大多数联合...
  • 前言这篇文章是我在网上看到,几乎未做任何编辑转过来的。...我们知道HFSS是一款电磁仿真商用软件,用其进行天线设计十分方便。而该软件也预留了可以运行脚本的接口,使用者可以使用脚本对软件进行控制,...
  • 我们知道HFSS是一款电磁仿真商用软件,用其进行天线设计十分方便。而该软件也预留了可以运行脚本的接口,使用者可以使用脚本对软件进行控制,实现模型的建立、求解等等。由于后期可能会用到联合仿真,而大多数联合...
  • 前言这篇文章是我在网上看到,几乎未做任何编辑转过来的。...我们知道HFSS是一款电磁仿真商用软件,用其进行天线设计十分方便。而该软件也预留了可以运行脚本的接口,使用者可以使用脚本对软件进行控制,...
  • 我们知道HFSS是一款电磁仿真商用软件,用其进行天线设计十分方便。而该软件也预留了可以运行脚本的接口,使用者可以使用脚本对软件进行控制,实现模型的建立、求解等等。由于后期可能会用到联合仿真,而大多数联合...
  • 人工智能微带天线

    2018-04-16 21:57:17
    1、利用电磁软件Ansoft HFSS设计一款微带天线。 2、使用HFSS设计中心频率为2.45GHZ的矩形微带天线,并给出天线参数。介质基片采用厚度为1.6mm的RF4环氧树脂板,天线馈电方式为微带线馈电。
  • 介绍了设计中心频率为800 MHz 矩形微带天线的整个流程,首先根据矩形微带天线设计公式计算出天线参数,然后在Ansof t 公司的仿真软件HFSS 中建立天线模型并对其仿真,通过调整天线模型得到最佳的天线参数使天线特性符合...
  • 基于微带天线理论及单极天线的典型结构,改变三维结构、平面形状及介质的宽度,设计出一种新型的小型天线。考虑到影响天线特性的相关因素,利用HFSS11软件进行仿真优化,结果表明,该天线大小仅为16 mm×17 mm,绝对...
  • 主要是设计设计具有一种具有低阻抗特性的侧馈矩形微带天线。该天线中心频率2.37GHZ~2.43GHZ频段范围内,介质基片采用厚度为1.6mm的FR4环氧树脂板,天线的馈电方式为微带线馈电。利用HFSS做出仿真。
  • 0 引言  微带天线具有体积小、重量轻、易馈电、易与载体共形等优点,广泛直用于测量和通信各个领域。...利用HFSS模拟仿真以及实测结果表明,这种天线在工作于4.25~5.366 GHz时,其相对带宽达到了23.2
  • 微带贴片天线HFSS仿真

    2018-08-01 15:59:13
    微波设计利用HFSS软件仿真微带贴片天线,此为扇形天线。附有报告包括建模的详细步骤和结果,可依此自行修改。非常详细。
  • 设计了一种新型测量型GPS微带天线.这种天线采用双层贴片结构的形式,上下两层贴片均采用了均匀分布的四馈点馈电方案,在要求的带宽内满足双频(L1 /L2)圆极化特性的同时实现了小型化.采用对天线贴片切角和添加短截线的...
  • 设计了一种新型测量型GPS 微带天线. 这种天线采用双层贴片结构的形式,上下两层贴片均采用了均匀分 布的四馈点馈电方案,在要求的带宽内满足双频( L1 /L2 ) 圆极化特性的同时实现了小型化. 采用对天线贴片切角和 ...
  • 使用三维电磁场仿真软件(Ansoft HFSS)对微带天线进行仿真优化,仿真结果表明,天线单元性能良好,相对阻抗带宽(S11≤-10 dB)为8.5%,增益为8.05 dB。四单元天线阵列相对阻抗带宽(S11≤-10 dB)达到16.6%,增益为...
  • 微带阵列天线的空腔模型...利用HFSS宏定义优化了天线的尺寸参教,通过数据后处理得出了驻波比、反射系数、增益方向Iit和电场方向图等曲线。仿真设计结果表明,该4元微带阵列天线各项性能良好.满足天线工程的需要。
  • 提出了一种新型频率可重构圆极化微带贴片天线设计。采用一种方环形贴片结构,在贴片对称缝隙中添加4个RF MEMS开关,通过调节开关的通断来实现对天线频率的可重构。同时天线采用4馈点馈电来实现右旋圆极化波,并利用...
  • 本文介绍了一种工作频率为2143 GHz 的圆极化四单元矩形微带天线阵的设计方法。通过对天线单元采用正交馈电激励起两个极化方向正交的、幅度相等的、相位相差90°的线极化波从而使天线单元获得圆极化波。在利用圆极化...
  • 给出了一种收发分频双线极化层叠型微带贴片天线设计方法,利用双层贴片谐振于不同的频率来实现双频,通过在贴片的相互垂直方向上馈电来实现双线极化,从而在收发频段上实现双线极化。本设计采用HFSS电磁仿真软件对...
  • 利用HFSS进行了微带天线设计仿真,给出了具体的操作过程和仿真结果。
  • 基于传统的偶极振子天线的原理和结构特点,结合微带天线的优势,改进设计了一种中心工作频率为2.45GHz的微带贴片偶极子天线,缩小了天线尺寸。设计过程中使用Ansoft HFSS软件搭建天线的模型并进行仿真。制作的天线利用...
  • 设计了一种双三角形谐振环结构的左手材料,通过理论计算和仿真...利用HFSS仿真软件对比了加载左手材料前后矩形贴片微带天线的性能,仿真结果表明,左手材料的加载提高了天线的带宽,增大了天线的增益,有效地抑制了旁瓣。
  • 基于传统的对数周期偶极子天线的原理和结构特点,结合微带天线的优势,改进设计了一种工作在1.2~3.2 GHz的以楔形夹角相连的16单元微带贴片对数周期单极子天线。利用VB软件设计了一款天线计算器,方便了天线尺寸参数...

空空如也

空空如也

1 2 3
收藏数 43
精华内容 17
关键字:

利用hfss设计微带天线