0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
会员中心
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

跑马灯是什么 如何用HFSS来跑马灯

ExMh_zhishexues 来源:微波射频网 作者:94巨蟹座少年 2021-08-13 11:30 次阅读

学个Antenna是以天线仿真和调试为主,理论原理为辅的干货天线技术专栏,包括天线入门知识以及各类天线的原理简介、仿真软件建模、设计、调试过程及思路。如有想看到的内容或技术问题,可以在文尾写下留言。

摘要:

经过前面两期的教学HFSS-API入门第一弹,第二弹,已经可以完成部分常规的建模需求。本期整点好玩的,用HFSS来跑马灯。欢迎小伙伴们阅读、分享、再看,转发给更多有需要的人!喜欢的小伙伴可赞赏下作者哦。

本文使用的软件为MATLAB2019a和AnsysEM 18.2

0 1简单介绍

常规的跑马灯,是指将多个发光二极管分别连接到单片机的某一并行端口处,通过编程控制这几个发光二极管依次点亮。

在HFSS-API入门第一弹:画个Box中对hfssBox函数的使用进行了详细介绍,如果再加上修改Box的颜色的透明度,加上延时操作,就可以利用MATLAB编写vbs脚本,在HFSS中Run Script实现“跑马灯”效果。

0 2修改颜色和透明度函数

接下来先介绍修改物体颜色和透明度的函数:hfssSetColor,hfssSetTransparency。

% hfssSetColor(fid, ObjectName, Color)% ObjectName:需要修改颜色的物体对应的名字.% Color:RGB三色值.% 实例:% hfssSetColor(fid, ‘Box1’, [255, 255, 0]);

% hfssSetTransparency(fid, ObjectName, Value)% ObjectName:需要修改颜色的物体对应的名字.% Value:透明度值,在0到1之间;0代表完全不透明,1代表完全透明.% 实例:% hfssSetTransparency(fid,‘Box1’, 0)

这两个函数的使用自然是很简单。压缩的GIF动图预览如下:

5700dbae-fbe4-11eb-9bcf-12bb97331649.gif

那么这个效果是如何实现的呢?

新建工程,新建设计文件,定义变量,画Box,这四个常规步骤是很容易做到的,hfssSetColor和hfssSetTransparency这两个函数也可以对物体的颜色和透明度进行二次修改。剩下需要做的就是在vbs中进行延时,以及控制鼠标左键在非模型区域点击一下,使得物体不处于高亮状态,便于观察变色效果。

首先需要解决的延时问题,网络上随手搜索关键词vbs延时函数,可以找到wscript.sleep这个函数用法:

用法:Times为延迟时间(单位:毫秒)wscript.sleep Times

新建一个txt文件,将后缀改为vbs,然后用记事本打开复制粘贴下面代码:

wscript.sleep 1000msgbox(“Hello”)wscript.sleep 1000msgbox(“This World!”)

单独运行时正常可用的。

说明HFSS的vbs脚本中不支持该函数方法,联想到单片机中的delay函数都是自己写的,于是也在MATLAB里手撸了一个大概的延时函数:

% 延时函数的编写fprintf(fid, ‘Sub delay(ms)

’);fprintf(fid, ‘ Dim i,value

’);fprintf(fid, ‘ for i=1 to 7500*ms

’);fprintf(fid, ‘ value=i+1

’);fprintf(fid, ‘ next

’);fprintf(fid, ‘End Sub

’);

然后我们需要解决vbs脚本中控制鼠标左键点击的需求,这里也是一样百度关键词vbs模拟鼠标按键,找到下面的网站:

https://www.cnblogs.com/jinjiangongzuoshi/p/3821375.html

经过拆解分析后,转化为自己可使用的封装代码。

Class SetMouseprivate Sprivate xls, wbk, module1private reg_key, xls_code, x, yPrivate Sub Class_Initialize() Set xls = CreateObject(“Excel.Application”) Set S = CreateObject(“wscript.Shell”) reg_key = “HKEY_CURRENT_USER\Software\Microsoft\Office\$\Excel\Security\AccessVBOM” reg_key = Replace(reg_key, “$”, xls.Version) S.RegWrite reg_key, 1, “REG_DWORD” xls_code = _ “Private Type POINTAPI : X As Long : Y As Long : End Type” & vbCrLf & _ “Private Declare Function SetCursorPos Lib ”“user32”“ (ByVal x As Long, ByVal y As Long) As Long” & vbCrLf & _ “Private Declare Function GetCursorPos Lib ”“user32”“ (lpPoint As POINTAPI) As Long” & vbCrLf & _ “Private Declare Sub mouse_event Lib ”“user32”“ Alias ”“mouse_event”“ ” _ & “(ByVal dwFlags As Long, ByVal dx As Long, ByVal dy As Long, ByVal cButtons As Long, ByVal dwExtraInfo As Long)” & vbCrLf & _ “Public Function getx() As Long” & vbCrLf & _ “Dim pt As POINTAPI : GetCursorPos pt : getx = pt.X” & vbCrLf & _ “End Function” & vbCrLf & _ “Public Function gety() As Long” & vbCrLf & _ “Dim pt As POINTAPI: GetCursorPos pt : gety = pt.Y” & vbCrLf & _ “End Function” Set wbk = xls.Workbooks.Add Set module1 = wbk.VBProject.VBComponents.Add(1) module1.CodeModule.AddFromString xls_codeEnd SubPrivate Sub Class_Terminate xls.DisplayAlerts = False wbk.Close xls.QuitEnd SubPublic Sub getpos( x, y) x = xls.Run(“getx”) y = xls.Run(“gety”)End SubPublic Sub move(x,y) xls.Run “SetCursorPos”, x, yEnd SubPublic Sub clik(keydown) Select Case UCase(keydown) Case “LEFT” xls.Run “mouse_event”, &H2 + &H4, 0, 0, 0, 0 Case “RIGHT” xls.Run “mouse_event”, &H8 + &H10, 0, 0, 0, 0 Case “MIDDLE” xls.Run “mouse_event”, &H20 + &H40, 0, 0, 0, 0 Case “DBCLICK” xls.Run “mouse_event”, &H2 + &H4, 0, 0, 0, 0 xls.Run “mouse_event”, &H2 + &H4, 0, 0, 0, 0 End SelectEnd SubEnd Class

由于这段代码过长,直接在MATLAB中用fprintf写入到vbs脚本得一行一行处理,于是将其单独复制到一个mouse_control.txt文件里,通过MATLAB的读写文件操作,将这段代码追加写入到vbs脚本文末,作为可调用的函数进程。

上面代码第8行之所以是双斜杠,是为了将单斜杠写入到vbs脚本中。

reg_key = “HKEY_CURRENT_USER\Software\Microsoft\Office\$\Excel\Security\AccessVBOM”

有了上面的代码后,鼠标点的移动和左键点击事件可以在MATLAB中写入:

fprintf(fid, ‘Set mouse=New SetMouse

’);fprintf(fid, ‘% move后面是电脑鼠标需要移动的坐标点,通过mousexy确定坐标点fprintf(fid, ’mouse.move 1678,575

‘);fprintf(fid, ’delay(500)

‘);fprintf(fid, ’mouse.clik “dbclick”

‘);fprintf(fid, ’delay(500)

‘);fprintf(fid, ’

‘);

用MATLAB进行整体的vbs脚本写入,整段代码如下所示,可在文末下载链接下载。

clear;clc;path = mfilename(’fullpath‘);i=strfind(path,’‘);path=path(1:i(end));cd(path);addpath(genpath(strcat(path,’hfssapi-by-Jianhui Huang‘)));try % 填写路径 % tmpPrjFile:生成的aedt或者hfss(安装hfss15以下的后缀名为.hfss)项目文件的路径名 % tmpScriptFile:生成的vbs脚本文件的路径名 tmpPrjFile = ’F:vbsScripthorse_race_lamp.aedt‘; tmpScriptFile = ’F:vbsScriptauto_code.vbs‘;

% hfssExePath:HFSS软件的路径 hfssExePath = ’D:softwareHFSS15AnsysEM18.2Win64ansysedt.exe‘;

% 创建一个可读写vbs脚本文件。 fid = fopen(tmpScriptFile, ’wt‘);

%创建一个新的HFSS项目并插入一个新的设计文件。 hfssNewProject(fid); Design_name=’example‘; hfssInsertDesign(fid, Design_name); Box_W=1;Box_L=1;Box_H=1; % hfssVariableInsert(fid,DesignName,variableName, value, units,flag) hfssVariableInsert(fid,Design_name,’Box_W‘, Box_W, ’mm‘,1); hfssVariableInsert(fid,Design_name,’Box_L‘, Box_L, ’mm‘,1); hfssVariableInsert(fid,Design_name,’Box_H‘, Box_H, ’mm‘,1); % 画Box % hfssBox(fid, BoxName, Start, Size, Units, Color, Material, Transparency, flag) hfssBox(fid, ’Box1‘, {’-Box_W/2‘, ’-Box_L/2‘, ’0mm‘}, {’Box_W‘, ’Box_L‘, ’Box_H‘}, ’mm‘,。。。 “(0 128 128)”, “Rogers RO4350 (tm)”, 0, 2); % 点击鼠标左键 fprintf(fid, ’

‘); fprintf(fid, ’Set mouse=New SetMouse

‘); fprintf(fid, ’mouse.getpos x,y

‘); fprintf(fid, ’mouse.move 1678,575

‘); fprintf(fid, ’delay(500)

‘); fprintf(fid, ’mouse.clik “dbclick”

‘); fprintf(fid, ’delay(500)

‘); fprintf(fid, ’

‘); % 跑马灯 for num=0:20 hfssSetColor(fid, ’Box1‘, [randi(255,1), randi(255,1), randi(255,1)]); fprintf(fid, ’delay(100)

‘); end % 保存项目文件到指定路径 hfssSaveProject(fid, tmpPrjFile,1); % 延时函数的编写 fprintf(fid, ’Sub delay(ms)

‘); fprintf(fid, ’ Dim i,value

‘); fprintf(fid, ’ for i=1 to 7500*ms

‘); fprintf(fid, ’ value=i+1

‘); fprintf(fid, ’ next

‘); fprintf(fid, ’End Sub

‘); % 鼠标控制 fid1=fopen(’mouse_control.txt‘); %打开文本文件 INDEX=0; while ~feof(fid1) strdata = fgetl(fid1); % 读取一行, strdata是字符串 fprintf(fid, strdata); fprintf(fid, ’

‘); end fclose(fid1); % Close the HFSS Script File. fclose(fid); disp(’vbs脚本已生成!‘);catch disp(’程序出现异常!‘); fclose(fid);end

按个人情况按图索骥地修改tmpPrjFile,tmpScriptFile ,hfssExePath这几个路径和Design_name,使用的时候记得将mouse_control.txt和该vbs_horse_race_lamp.m文件单独拎出来,与hfssapi-by-Jianhui Huang放在同一个总文件夹内。点击运行即可生成vbs脚本(在自行赋值的tmpScriptFile的这个路径下)。vbs脚本可以直接点击运行,或者在HFSS软件中Run Script。

基础性地写代码编注释还是挺费时间和精力的,希望大家多点赞分享。

编辑:jq

声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • 仿真
    +关注

    关注

    50

    文章

    4039

    浏览量

    133408
  • API
    API
    +关注

    关注

    2

    文章

    1484

    浏览量

    61809
  • 函数
    +关注

    关注

    3

    文章

    4304

    浏览量

    62423
  • hfss
    +关注

    关注

    32

    文章

    167

    浏览量

    50249
收藏 人收藏

    评论

    相关推荐

    【RA-Eco-RA2E1-48PIN-V1.0开发板试用】原创测量代码运行时间

    ,P103,P104,在keil里打开 配置P103和P104 点击生成 关闭瑞萨IDE,打开keil 封装好LED1和LED2的跑马灯程序 void led_1_flicker(void
    发表于 11-06 15:32

    电弧打火机方案开发-电弧点烟器集成SOC芯片EN40\\EN604系列

    ,主要负责如下的功能: 1、开盒盖接通电源。 2、接通电源时显示电量,通常通过LED灯显示,如4颗LED灯表示不同电量水平。 3、按下开关,电量指示灯显示为跑马灯状态,电弧打火机点火。 4、点火超过10秒
    发表于 10-23 11:00

    EN40电弧打火机集成SOC芯片-电弧点烟器集成MCU定制IC

    %。 3、按下开关,电量指示灯显示为跑马灯状态,电弧打火机点火。 4、点火超过10秒,自动关闭。 5、充电时,4颗LED指示灯根据电量百分比25%、50%、75%、100%依次亮起,充满时全部点亮
    发表于 10-23 10:58

    基于51单片机的跑马灯/流水灯系统

    具体实现功能(1)9种LED流水灯模式通过按键进行切换,数码管显示流水灯模式。(2)通过加减按键可以切换每种LED流水灯的速度。仿真演示视频:设计介绍51单片机简介51单片是一种低功耗、高性能CMOS-8位微控制器,拥有灵巧的8位CPU和可编程Flash,使得51单片机为众多嵌入式控制应用系统提供灵活、高效的解决方案。本设计所使用的芯片可兼容以下所有的51系列单片机(包括AT系列和STC系列)。资料内容仿真实现(protues8.7)本设计利用protues8.7软件实现仿真设计,具体如图。程序(Keil5)本设计利用KEIL5软件实现程序设计。程序运行结果如图:全部内容全部资料包括程序(keil5)、protues仿真(protues8.7)、开发资料、资料使用介绍、仿真视频、程序讲解视频、仿真讲解视频、最小系统介绍视频等。资料获取https://docs.qq.com/doc/DT2JKeWhQZGZJd2Jm
    的头像 发表于 10-22 14:12 154次阅读
    基于51单片机的<b class='flag-5'>跑马灯</b>/流水灯系统

    基于51单片机的多模式音乐跑马灯

    具体实现功能 1、16个发光二极管做跑马灯跑马灯有10种模式。 2、按键可以切换跑马灯模式,且跑马灯速度可以用按键进行控制。 3、数码管显示当前的
    的头像 发表于 10-22 14:10 251次阅读
    基于51单片机的多模式音乐<b class='flag-5'>跑马灯</b>

    Keil uVision5 stm32跑马灯实验错误

    新人刚接触stm32,距离点亮LED灯编程只有一步之遥了! 还得请教各位老师问题在哪, 对着《STM32库开发实战指南》示例已经修改了几次错误,还是存在错误
    发表于 10-18 18:17

    《DNK210使用指南 -CanMV版 V1.0》第十二章 跑马灯实验

    第十二章 跑马灯实验 本章实验将介绍如何使用CanMV让Kendryte K210控制板载的双色LED闪烁,以实现跑马灯的效果。通过本章的学习,读者将学习到在CanMV下控制Kendryte
    发表于 10-10 09:27

    LED灯带断点续传是什么意思

    led幻彩跑马灯带分带断点续传和不带断点续传的。灯带断点续传是指采用双信号线交叉传输的方案,当其中一个信号中断后,另一条备用信号线能绕开故障点,将信号传输到下一个像素点。简单来说就是一个灯珠坏了
    发表于 07-18 18:20

    鸿蒙ArkTS声明式组件:Marquee

    跑马灯组件,用于滚动展示一段单行文本。仅当文本内容宽度超过跑马灯组件宽度时滚动,不超过时不滚动。
    的头像 发表于 06-25 15:52 386次阅读
    鸿蒙ArkTS声明式组件:Marquee

    CubeMx生成的最简单程序Stm32F407用Jlink无法仿真是怎么回事?

    最近了解了一下CubeMX工具,用它生成了最简单的GPIO跑马灯程序,下载到407芯片里无法运行,用JLinkV8无法仿真调试,每当程序运行到HAL_Init()函数,进入函数后调用
    发表于 04-22 06:14

    STM8L151做的跑马灯PB0和PB4上电闪烁是什么原因导致的?

    我用STM8L151做的跑马灯PB0和PB4上电闪烁,请各位帮忙分析一下,谢谢!
    发表于 04-11 08:20

    使用STM32H735-DK创建的LED跑马灯工程失败的原因?

    使用CUBEMX创建简单的点灯工程,无论是生成KEIL工程还是CUBEIDE工程。都卡在system clock配置里面。感觉应该是官方对应的板子的BSP 有问题。麻烦技术帮忙看看 tips:使用cubeide自带的example 测试是没有问题的,所以板子的供电和程序下载都是可以的。
    发表于 03-28 07:40

    hfss怎么让天线发生弯曲

    ”选项,然后选择“Project”创建一个新的项目。 步骤2:在新项目中,选择“Insert”菜单中的“Design”选项。然后选择“Insert HFSS Design”添加一个HFSS
    的头像 发表于 12-15 09:21 2483次阅读

    为何工程师测试PLC都喜欢用跑马灯程序?

    工程师在测试PLC时经常使用跑马灯程序,主要有以下几个原因: (1)简单易懂:跑马灯程序是一种非常简单的程序,通过控制不同的输出点依次亮灭,模拟了跑马灯的效果。这种程序易于理解和实现,使得工程师能够
    的头像 发表于 12-06 08:35 478次阅读

    使用按钮依次切换8个输出且可控制输出通道

    本案例使用按钮依次切换8个输出且可控制输出通道,比如控制指示灯,可以输入序号来点亮该序号指示灯,连接时钟信号可以实现跑马灯效果。
    的头像 发表于 12-04 15:52 679次阅读
    使用按钮依次切换8个输出且可控制输出通道