0
  • 聊天消息
  • 系統(tǒng)消息
  • 評(píng)論與回復(fù)
登錄后你可以
  • 下載海量資料
  • 學(xué)習(xí)在線課程
  • 觀看技術(shù)視頻
  • 寫文章/發(fā)帖/加入社區(qū)
會(huì)員中心
創(chuàng)作中心

完善資料讓更多小伙伴認(rèn)識(shí)你,還能領(lǐng)取20積分哦,立即完善>

3天內(nèi)不再提示

跑馬燈是什么 如何用HFSS來跑馬燈

ExMh_zhishexues ? 來源:微波射頻網(wǎng) ? 作者:94巨蟹座少年 ? 2021-08-13 11:30 ? 次閱讀

學(xué)個(gè)Antenna是以天線仿真和調(diào)試為主,理論原理為輔的干貨天線技術(shù)專欄,包括天線入門知識(shí)以及各類天線的原理簡介、仿真軟件建模、設(shè)計(jì)、調(diào)試過程及思路。如有想看到的內(nèi)容或技術(shù)問題,可以在文尾寫下留言。

摘要:

經(jīng)過前面兩期的教學(xué)HFSS-API入門第一彈,第二彈,已經(jīng)可以完成部分常規(guī)的建模需求。本期整點(diǎn)好玩的,用HFSS來跑馬燈。歡迎小伙伴們閱讀、分享、再看,轉(zhuǎn)發(fā)給更多有需要的人!喜歡的小伙伴可贊賞下作者哦。

本文使用的軟件為MATLAB2019a和AnsysEM 18.2

0 1簡單介紹

常規(guī)的跑馬燈,是指將多個(gè)發(fā)光二極管分別連接到單片機(jī)的某一并行端口處,通過編程控制這幾個(gè)發(fā)光二極管依次點(diǎn)亮。

在HFSS-API入門第一彈:畫個(gè)Box中對(duì)hfssBox函數(shù)的使用進(jìn)行了詳細(xì)介紹,如果再加上修改Box的顏色的透明度,加上延時(shí)操作,就可以利用MATLAB編寫vbs腳本,在HFSS中Run Script實(shí)現(xiàn)“跑馬燈”效果。

0 2修改顏色和透明度函數(shù)

接下來先介紹修改物體顏色和透明度的函數(shù):hfssSetColor,hfssSetTransparency。

% hfssSetColor(fid, ObjectName, Color)% ObjectName:需要修改顏色的物體對(duì)應(yīng)的名字.% Color:RGB三色值.% 實(shí)例:% hfssSetColor(fid, ‘Box1’, [255, 255, 0]);

% hfssSetTransparency(fid, ObjectName, Value)% ObjectName:需要修改顏色的物體對(duì)應(yīng)的名字.% Value:透明度值,在0到1之間;0代表完全不透明,1代表完全透明.% 實(shí)例:% hfssSetTransparency(fid,‘Box1’, 0)

這兩個(gè)函數(shù)的使用自然是很簡單。壓縮的GIF動(dòng)圖預(yù)覽如下:

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

那么這個(gè)效果是如何實(shí)現(xiàn)的呢?

新建工程,新建設(shè)計(jì)文件,定義變量,畫Box,這四個(gè)常規(guī)步驟是很容易做到的,hfssSetColor和hfssSetTransparency這兩個(gè)函數(shù)也可以對(duì)物體的顏色和透明度進(jìn)行二次修改。剩下需要做的就是在vbs中進(jìn)行延時(shí),以及控制鼠標(biāo)左鍵在非模型區(qū)域點(diǎn)擊一下,使得物體不處于高亮狀態(tài),便于觀察變色效果。

首先需要解決的延時(shí)問題,網(wǎng)絡(luò)上隨手搜索關(guān)鍵詞vbs延時(shí)函數(shù),可以找到wscript.sleep這個(gè)函數(shù)用法:

用法:Times為延遲時(shí)間(單位:毫秒)wscript.sleep Times

新建一個(gè)txt文件,將后綴改為vbs,然后用記事本打開復(fù)制粘貼下面代碼:

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

單獨(dú)運(yùn)行時(shí)正??捎玫?。

說明HFSS的vbs腳本中不支持該函數(shù)方法,聯(lián)想到單片機(jī)中的delay函數(shù)都是自己寫的,于是也在MATLAB里手?jǐn)]了一個(gè)大概的延時(shí)函數(shù):

% 延時(shí)函數(shù)的編寫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腳本中控制鼠標(biāo)左鍵點(diǎn)擊的需求,這里也是一樣百度關(guān)鍵詞vbs模擬鼠標(biāo)按鍵,找到下面的網(wǎng)站:

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

經(jīng)過拆解分析后,轉(zhuǎn)化為自己可使用的封裝代碼。

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腳本得一行一行處理,于是將其單獨(dú)復(fù)制到一個(gè)mouse_control.txt文件里,通過MATLAB的讀寫文件操作,將這段代碼追加寫入到vbs腳本文末,作為可調(diào)用的函數(shù)進(jìn)程。

上面代碼第8行之所以是雙斜杠,是為了將單斜杠寫入到vbs腳本中。

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

有了上面的代碼后,鼠標(biāo)點(diǎn)的移動(dòng)和左鍵點(diǎn)擊事件可以在MATLAB中寫入:

fprintf(fid, ‘Set mouse=New SetMouse

’);fprintf(fid, ‘% move后面是電腦鼠標(biāo)需要移動(dòng)的坐標(biāo)點(diǎn),通過mousexy確定坐標(biāo)點(diǎn)fprintf(fid, ’mouse.move 1678,575

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

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

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

‘);fprintf(fid, ’

‘);

用MATLAB進(jìn)行整體的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或者h(yuǎn)fss(安裝hfss15以下的后綴名為.hfss)項(xiàng)目文件的路徑名 % tmpScriptFile:生成的vbs腳本文件的路徑名 tmpPrjFile = ’F:vbsScripthorse_race_lamp.aedt‘; tmpScriptFile = ’F:vbsScriptauto_code.vbs‘;

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

% 創(chuàng)建一個(gè)可讀寫vbs腳本文件。 fid = fopen(tmpScriptFile, ’wt‘);

%創(chuàng)建一個(gè)新的HFSS項(xiàng)目并插入一個(gè)新的設(shè)計(jì)文件。 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); % 點(diǎn)擊鼠標(biāo)左鍵 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 % 保存項(xiàng)目文件到指定路徑 hfssSaveProject(fid, tmpPrjFile,1); % 延時(shí)函數(shù)的編寫 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

‘); % 鼠標(biāo)控制 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(’程序出現(xiàn)異常!‘); fclose(fid);end

按個(gè)人情況按圖索驥地修改tmpPrjFile,tmpScriptFile ,hfssExePath這幾個(gè)路徑和Design_name,使用的時(shí)候記得將mouse_control.txt和該vbs_horse_race_lamp.m文件單獨(dú)拎出來,與hfssapi-by-Jianhui Huang放在同一個(gè)總文件夾內(nèi)。點(diǎn)擊運(yùn)行即可生成vbs腳本(在自行賦值的tmpScriptFile的這個(gè)路徑下)。vbs腳本可以直接點(diǎn)擊運(yùn)行,或者在HFSS軟件中Run Script。

基礎(chǔ)性地寫代碼編注釋還是挺費(fèi)時(shí)間和精力的,希望大家多點(diǎn)贊分享。

編輯:jq

聲明:本文內(nèi)容及配圖由入駐作者撰寫或者入駐合作網(wǎng)站授權(quán)轉(zhuǎn)載。文章觀點(diǎn)僅代表作者本人,不代表電子發(fā)燒友網(wǎng)立場。文章及其配圖僅供工程師學(xué)習(xí)之用,如有內(nèi)容侵權(quán)或者其他違規(guī)問題,請(qǐng)聯(lián)系本站處理。 舉報(bào)投訴
  • 仿真
    +關(guān)注

    關(guān)注

    50

    文章

    4003

    瀏覽量

    133238
  • API
    API
    +關(guān)注

    關(guān)注

    2

    文章

    1465

    瀏覽量

    61687
  • 函數(shù)
    +關(guān)注

    關(guān)注

    3

    文章

    4262

    瀏覽量

    62237
  • hfss
    +關(guān)注

    關(guān)注

    32

    文章

    167

    瀏覽量

    50196
收藏 人收藏

    評(píng)論

    相關(guān)推薦

    電弧打火機(jī)方案開發(fā)-電弧點(diǎn)煙器集成SOC芯片EN40\\EN604系列

    ,主要負(fù)責(zé)如下的功能: 1、開盒蓋接通電源。 2、接通電源時(shí)顯示電量,通常通過LED燈顯示,如4顆LED燈表示不同電量水平。 3、按下開關(guān),電量指示燈顯示為跑馬燈狀態(tài),電弧打火機(jī)點(diǎn)火。 4、點(diǎn)火超過10秒
    發(fā)表于 10-23 11:00

    EN40電弧打火機(jī)集成SOC芯片-電弧點(diǎn)煙器集成MCU定制IC

    %。 3、按下開關(guān),電量指示燈顯示為跑馬燈狀態(tài),電弧打火機(jī)點(diǎn)火。 4、點(diǎn)火超過10秒,自動(dòng)關(guān)閉。 5、充電時(shí),4顆LED指示燈根據(jù)電量百分比25%、50%、75%、100%依次亮起,充滿時(shí)全部點(diǎn)亮
    發(fā)表于 10-23 10:58

    基于51單片機(jī)的跑馬燈/流水燈系統(tǒng)

    具體實(shí)現(xiàn)功能(1)9種LED流水燈模式通過按鍵進(jìn)行切換,數(shù)碼管顯示流水燈模式。(2)通過加減按鍵可以切換每種LED流水燈的速度。仿真演示視頻:設(shè)計(jì)介紹51單片機(jī)簡介51單片是一種低功耗、高性能CMOS-8位微控制器,擁有靈巧的8位CPU和可編程Flash,使得51單片機(jī)為眾多嵌入式控制應(yīng)用系統(tǒng)提供靈活、高效的解決方案。本設(shè)計(jì)所使用的芯片可兼容以下所有的51系列單片機(jī)(包括AT系列和STC系列)。資料內(nèi)容仿真實(shí)現(xiàn)(protues8.7)本設(shè)計(jì)利用protues8.7軟件實(shí)現(xiàn)仿真設(shè)計(jì),具體如圖。程序(Keil5)本設(shè)計(jì)利用KEIL5軟件實(shí)現(xiàn)程序設(shè)計(jì)。程序運(yùn)行結(jié)果如圖:全部內(nèi)容全部資料包括程序(keil5)、protues仿真(protues8.7)、開發(fā)資料、資料使用介紹、仿真視頻、程序講解視頻、仿真講解視頻、最小系統(tǒng)介紹視頻等。資料獲取https://docs.qq.com/doc/DT2JKeWhQZGZJd2Jm
    的頭像 發(fā)表于 10-22 14:12 ?38次閱讀
    基于51單片機(jī)的<b class='flag-5'>跑馬燈</b>/流水燈系統(tǒng)

    基于51單片機(jī)的多模式音樂跑馬燈

    具體實(shí)現(xiàn)功能 1、16個(gè)發(fā)光二極管做跑馬燈,跑馬燈有10種模式。 2、按鍵可以切換跑馬燈模式,且跑馬燈速度可以用按鍵進(jìn)行控制。 3、數(shù)碼管顯示當(dāng)前的
    的頭像 發(fā)表于 10-22 14:10 ?91次閱讀
    基于51單片機(jī)的多模式音樂<b class='flag-5'>跑馬燈</b>

    Keil uVision5 stm32跑馬燈實(shí)驗(yàn)錯(cuò)誤

    新人剛接觸stm32,距離點(diǎn)亮LED燈編程只有一步之遙了! 還得請(qǐng)教各位老師問題在哪, 對(duì)著《STM32庫開發(fā)實(shí)戰(zhàn)指南》示例已經(jīng)修改了幾次錯(cuò)誤,還是存在錯(cuò)誤
    發(fā)表于 10-18 18:17

    《DNK210使用指南 -CanMV版 V1.0》第十二章 跑馬燈實(shí)驗(yàn)

    第十二章 跑馬燈實(shí)驗(yàn) 本章實(shí)驗(yàn)將介紹如何使用CanMV讓Kendryte K210控制板載的雙色LED閃爍,以實(shí)現(xiàn)跑馬燈的效果。通過本章的學(xué)習(xí),讀者將學(xué)習(xí)到在CanMV下控制Kendryte
    發(fā)表于 10-10 09:27

    LED燈帶斷點(diǎn)續(xù)傳是什么意思

    led幻彩跑馬燈帶分帶斷點(diǎn)續(xù)傳和不帶斷點(diǎn)續(xù)傳的。燈帶斷點(diǎn)續(xù)傳是指采用雙信號(hào)線交叉?zhèn)鬏數(shù)姆桨?,?dāng)其中一個(gè)信號(hào)中斷后,另一條備用信號(hào)線能繞開故障點(diǎn),將信號(hào)傳輸?shù)较乱粋€(gè)像素點(diǎn)。簡單來說就是一個(gè)燈珠壞了
    發(fā)表于 07-18 18:20

    鴻蒙ArkTS聲明式組件:Marquee

    跑馬燈組件,用于滾動(dòng)展示一段單行文本。僅當(dāng)文本內(nèi)容寬度超過跑馬燈組件寬度時(shí)滾動(dòng),不超過時(shí)不滾動(dòng)。
    的頭像 發(fā)表于 06-25 15:52 ?346次閱讀
    鴻蒙ArkTS聲明式組件:Marquee

    盤古1K開發(fā)板主芯片PGC1KG-LPG100直流及交流特性

    電流 位流功能為跑馬燈 測(cè)試條件為常溫 25℃,VCCIO=2.5V,JTAG 接口頻率 15MHz 交流特性 DRM 的開關(guān)特性   DRM 的開關(guān)特性 時(shí)鐘交流特性   時(shí)鐘交流特性 PLL 交流
    發(fā)表于 05-17 16:53

    CubeMx生成的最簡單程序Stm32F407用Jlink無法仿真是怎么回事?

    最近了解了一下CubeMX工具,用它生成了最簡單的GPIO跑馬燈程序,下載到407芯片里無法運(yùn)行,用JLinkV8無法仿真調(diào)試,每當(dāng)程序運(yùn)行到HAL_Init()函數(shù),進(jìn)入函數(shù)后調(diào)用
    發(fā)表于 04-22 06:14

    STM8L151做的跑馬燈PB0和PB4上電閃爍是什么原因?qū)е碌模?/a>

    我用STM8L151做的跑馬燈PB0和PB4上電閃爍,請(qǐng)各位幫忙分析一下,謝謝!
    發(fā)表于 04-11 08:20

    使用STM32H735-DK創(chuàng)建的LED跑馬燈工程失敗的原因?

    使用CUBEMX創(chuàng)建簡單的點(diǎn)燈工程,無論是生成KEIL工程還是CUBEIDE工程。都卡在system clock配置里面。感覺應(yīng)該是官方對(duì)應(yīng)的板子的BSP 有問題。麻煩技術(shù)幫忙看看 tips:使用cubeide自帶的example 測(cè)試是沒有問題的,所以板子的供電和程序下載都是可以的。
    發(fā)表于 03-28 07:40

    hfss怎么讓天線發(fā)生彎曲

    ”選項(xiàng),然后選擇“Project”創(chuàng)建一個(gè)新的項(xiàng)目。 步驟2:在新項(xiàng)目中,選擇“Insert”菜單中的“Design”選項(xiàng)。然后選擇“Insert HFSS Design”添加一個(gè)HFSS
    的頭像 發(fā)表于 12-15 09:21 ?2296次閱讀

    為何工程師測(cè)試PLC都喜歡用跑馬燈程序?

    工程師在測(cè)試PLC時(shí)經(jīng)常使用跑馬燈程序,主要有以下幾個(gè)原因: (1)簡單易懂:跑馬燈程序是一種非常簡單的程序,通過控制不同的輸出點(diǎn)依次亮滅,模擬了跑馬燈的效果。這種程序易于理解和實(shí)現(xiàn),使得工程師能夠
    的頭像 發(fā)表于 12-06 08:35 ?426次閱讀

    使用按鈕依次切換8個(gè)輸出且可控制輸出通道

    本案例使用按鈕依次切換8個(gè)輸出且可控制輸出通道,比如控制指示燈,可以輸入序號(hào)來點(diǎn)亮該序號(hào)指示燈,連接時(shí)鐘信號(hào)可以實(shí)現(xiàn)跑馬燈效果。
    的頭像 發(fā)表于 12-04 15:52 ?625次閱讀
    使用按鈕依次切換8個(gè)輸出且可控制輸出通道