毛片视频免费观看-毛片视频在线免费观看-毛片手机在线视频免费观看-毛片特级-中文亚洲字幕-中文一级片

在HFSS中用vbs腳本跑馬燈?

2022-01-12 來源:微波射頻網 作者:94巨蟹座少年 字號:

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

摘要:

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

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

簡單介紹

常規的跑馬燈,是指將多個發光二極管分別連接到單片機的某一并行端口處,通過編程控制這幾個發光二極管依次點亮,如下面的動圖所示:

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

修改顏色和透明度函數

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

1  % hfssSetColor(fid, ObjectName, Color)

2  % ObjectName:需要修改顏色的物體對應的名字.

3  % Color:RGB三色值.

4  % 實例:

5  % hfssSetColor(fid, 'Box1', [255, 255, 0]);

 

1  % hfssSetTransparency(fid, ObjectName, Value)

2  % ObjectName:需要修改顏色的物體對應的名字.

3   % Value:透明度值,在0到1之間;0代表完全不透明,1代表完全透明.

4  % 實例:

5  % hfssSetTransparency(fid,'Box1', 0)

這兩個函數的使用自然是很簡單。壓縮的GIF動圖預覽如下:

那么這個效果是如何實現的呢?

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

首先需要解決的延時問題,網絡上隨手搜索關鍵詞vbs延時函數,可以找到wscript.sleep這個函數用法:

1  用法:Times為延遲時間(單位:毫秒)

2  wscript.sleep Times

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

1  wscript.sleep 1000

2  msgbox("Hello")

3  wscript.sleep 1000

4  msgbox("This World!")

單獨運行時正常可用的,但是在HFSS中Run Script發現如下圖所示報錯現象:

說明HFSS的vbs腳本中不支持該函數方法,聯想到單片機中的delay函數都是自己寫的,于是也在MATLAB里手擼了一個大概的延時函數:

1  % 延時函數的編寫

2  fprintf(fid, 'Sub delay(ms)\n');

3  fprintf(fid, '    Dim i,value\n');

4  fprintf(fid, '    for i=1 to 7500*ms\n');

5  fprintf(fid, '        value=i+1\n');

6  fprintf(fid, '    next\n');

7  fprintf(fid, 'End Sub\n');

然后我們需要解決vbs腳本中控制鼠標左鍵點擊的需求,這里也是一樣百度關鍵詞vbs模擬鼠標按鍵,找到下面的網站:

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

經過拆解分析后,轉化為自己可使用的封裝代碼。

1  Class SetMouse

2  private S

3  private xls, wbk, module1

4  private reg_key, xls_code, x, y

5  Private Sub Class_Initialize()

6      Set xls = CreateObject("Excel.Application")

7      Set S = CreateObject("wscript.Shell")

8      reg_key = "HKEY_CURRENT_USER\\Software\\Microsoft\\Office\\$\\Excel\\Security\\AccessVBOM"

9      reg_key = Replace(reg_key, "$", xls.Version)

10      S.RegWrite reg_key, 1, "REG_DWORD"

11   xls_code = _

12      "Private Type POINTAPI : X As Long : Y As Long : End Type" & vbCrLf & _

13    "Private Declare Function SetCursorPos Lib ""user32"" (ByVal x As Long, ByVal y As Long) As Long" & vbCrLf & _

14    "Private Declare Function GetCursorPos Lib ""user32"" (lpPoint As POINTAPI) As Long" & vbCrLf & _

15    "Private Declare Sub mouse_event Lib ""user32"" Alias ""mouse_event"" " _

16    & "(ByVal dwFlags As Long, ByVal dx As Long, ByVal dy As Long, ByVal cButtons As Long, ByVal dwExtraInfo As Long)" & vbCrLf & _

17    "Public Function getx() As Long" & vbCrLf & _

18    "Dim pt As POINTAPI : GetCursorPos pt : getx = pt.X" & vbCrLf & _

19    "End Function" & vbCrLf & _

20    "Public Function gety() As Long" & vbCrLf & _

21    "Dim pt As POINTAPI: GetCursorPos pt : gety = pt.Y" & vbCrLf & _

22    "End Function"

23    Set wbk = xls.Workbooks.Add

24    Set module1 = wbk.VBProject.VBComponents.Add(1)

25    module1.CodeModule.AddFromString xls_code

26End Sub

27Private Sub Class_Terminate

28    xls.DisplayAlerts = False

29    wbk.Close

30    xls.Quit

31End Sub

32Public Sub getpos( x, y)

33    x = xls.Run("getx")

34    y = xls.Run("gety")

35End Sub

36Public Sub move(x,y)

37        xls.Run "SetCursorPos", x, y

38End Sub

39Public Sub clik(keydown)

40    Select Case UCase(keydown)

41    Case "LEFT"

42    xls.Run "mouse_event", &H2 + &H4, 0, 0, 0, 0

43    Case "RIGHT"

44    xls.Run "mouse_event", &H8 + &H10, 0, 0, 0, 0

45    Case "MIDDLE"

46    xls.Run "mouse_event", &H20 + &H40, 0, 0, 0, 0

47    Case "DBCLICK"

48    xls.Run "mouse_event", &H2 + &H4, 0, 0, 0, 0

49    xls.Run "mouse_event", &H2 + &H4, 0, 0, 0, 0

50    End Select

51End Sub

52End Class

由于這段代碼過長,直接在MATLAB中用fprintf寫入到vbs腳本得一行一行處理,于是將其單獨復制到一個mouse_control.txt文件里,通過MATLAB的讀寫文件操作,將這段代碼追加寫入到vbs腳本文末,作為可調用的函數進程。

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

reg_key = "HKEY_CURRENT_USER\\Software\\Microsoft\\Office\\$\\Excel\\Security\\AccessVBOM"

有了上面的代碼后,鼠標點的移動和左鍵點擊事件可以在MATLAB中寫入:

1  clear;clc;

2  path = mfilename('fullpath');

3  i=strfind(path,'\');

4  path=path(1:i(end));

5  cd(path);

6  addpath(genpath(strcat(path,'hfssapi-by-Jianhui Huang')));

7try

8    % 填寫路徑

9    % tmpPrjFile:生成的aedt或者hfss(安裝hfss15以下的后綴名為.hfss)項目文件的路徑名

10    % tmpScriptFile:生成的vbs腳本文件的路徑名

11   tmpPrjFile = 'F:\vbsScript\horse_race_lamp.aedt';

12    tmpScriptFile = 'F:\vbsScript\auto_code.vbs';

13

14    % hfssExePath:HFSS軟件的路徑

15    hfssExePath = 'D:\software\HFSS15\AnsysEM18.2\Win64\ansysedt.exe';

16

17    % 創建一個可讀寫vbs腳本文件.

18    fid = fopen(tmpScriptFile, 'wt');

19

20    %創建一個新的HFSS項目并插入一個新的設計文件.

21    hfssNewProject(fid);

22    Design_name='example';

23    hfssInsertDesign(fid, Design_name);

24    

25    Box_W=1;Box_L=1;Box_H=1;

26    % hfssVariableInsert(fid,DesignName,variableName, value, units,flag)

27    hfssVariableInsert(fid,Design_name,'Box_W', Box_W, 'mm',1);

28    hfssVariableInsert(fid,Design_name,'Box_L', Box_L, 'mm',1);

29    hfssVariableInsert(fid,Design_name,'Box_H', Box_H, 'mm',1);

30    

31    % 畫Box

32    % hfssBox(fid, BoxName, Start, Size, Units, Color, Material, Transparency, flag)

33    hfssBox(fid, 'Box1', {'-Box_W/2', '-Box_L/2', '0mm'}, {'Box_W', 'Box_L', 'Box_H'}, 'mm',...

34        "(0 128 128)", "Rogers RO4350 (tm)", 0, 2);

35    % 點擊鼠標左鍵

36    fprintf(fid, '\n');

37    fprintf(fid, 'Set mouse=New SetMouse\n');

38    fprintf(fid, 'mouse.getpos x,y\n');

39    fprintf(fid, 'mouse.move 1678,575\n');

40    fprintf(fid, 'delay(500)\n');

41    fprintf(fid, 'mouse.clik "dbclick"\n');

42    fprintf(fid, 'delay(500)\n');

43    fprintf(fid, '\n');

44    % 跑馬燈

45    for num=0:20

46        hfssSetColor(fid, 'Box1', [randi(255,1), randi(255,1), randi(255,1)]);

47        fprintf(fid, 'delay(100)\n');

48    end

49    % 保存項目文件到指定路徑

50    hfssSaveProject(fid, tmpPrjFile,1);

51    

52    % 延時函數的編寫

53    fprintf(fid, 'Sub delay(ms)\n');

54    fprintf(fid, '    Dim i,value\n');

55    fprintf(fid, '    for i=1 to 7500*ms\n');

56    fprintf(fid, '        value=i+1\n');

57    fprintf(fid, '    next\n');

58    fprintf(fid, 'End Sub\n');

59    

60    % 鼠標控制

61    fid1=fopen('mouse_control.txt');  %打開文本文件

62    INDEX=0;

63    while ~feof(fid1)

64        strdata = fgetl(fid1);   % 讀取一行, strdata是字符串

65        fprintf(fid, strdata);

66        fprintf(fid, '\n');

67    end

68    fclose(fid1);

69    

70    % Close the HFSS Script File.

71    fclose(fid);

72    disp('vbs腳本已生成!');

73catch

74    disp('程序出現異常!');

75    fclose(fid);

76end

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

基礎性地寫代碼編注釋還是挺費時間和精力的,希望大家多點贊分享。

代碼分享區

hfssapi-by-Jianhui Huang

下載鏈接(后續代碼持續在下面鏈接更新):

https://pan.baidu.com/s/1N0EE3Uv7krkypfzi9vxCvg

提取碼:o5p5

代碼已封裝好打包為p文件不可修改,每次重新下載覆蓋,按函數注釋進行掉包即可!

注釋事項:MATLAB生成vbs腳本的.m文件與hfssapi-by-Jianhui Huang放在同一個總文件夾內。不要在examples文件夾內運行.m文件!

END

*本文的圖片部分來自AnsysEM 18.2軟件

*歡迎左側一鍵轉發至朋友圈,同時右側在看與點贊

本期原創工程師:94巨蟹座少年

本文為MWRF.NET原創文章,未經允許不得轉載,如需轉載請聯系market#mwrf.net(#換成@)

主站蜘蛛池模板: 人人看97| 色综合合久久天天综合绕视看| 四虎国产精品永久地址99新强| 热99精品只有里视频最新| 日韩在线不卡视频| 一级毛片免费观看不收费| 天天操天| 欧美一级看片| 一级毛片不卡| 色男人的天堂久久综合| 色综合网天天综合色中文男男| 西班牙一级特级毛片dvd| 天堂精品| 日本5级床片全免费| 亚洲国产成人精品一区91| 欧美操| 日本三级中文| 亚洲女同精品中文字幕| 深夜一级毛片| 视频一区 在线| 亚洲精品午夜在线观看| 日韩午夜伦| 午夜成人在线视频| 日本激情网| 亚洲色图综合图片| 色国产精品| 天天草人人草| 四虎影视国产精品| 亚洲一区二区欧美| 日韩在线免费| 亚洲综合男人的天堂色婷婷| 青青草在在观免费福利线观看| 天天性综合| 日本三级香港三级妇三| 日本激情一区二区三区| 日韩在线视频免费看| 亚洲黄色在线网站| 亚洲国产精品线播放| 欧美成人久久久| 亚洲人成自拍网站在线观看忄| 日韩免费在线观看|