2020年7月2日 星期四

如何設計可以支援大量參數的操作介面

如果要透過自動化程式生成一個複雜結構,比如via array,那麼可能需要輸入數十筆甚至上百筆數值資料才足以完整的描述結構。要設計出一個操作介面讓使用者可以方便輸入如此大量的資料並不是一件容易的事。如果介面還要加上標籤,使用說明甚至數值驗證機制,難度之高恐不是一般自動化程式設計師所能駕馭。其實有一個現成的工具可以直接拿來利用,那就是EXCEL。

EXCEL的試算表格式很適合大量資料的輸入。由於EXCEL儲存格可以設定不同顏色跟框線,可以很好的區隔不同種類的參數群。儲存格可以加上驗證機制,比如上下限來確保使用者不會輸入過當的數值。其他像是下拉式選單,欄位鎖定等功能都可以保證輸入數值的有效性。至於在表單上加上說明文字或是圖表更是輕而易舉。就算不懂得編程技巧的人也可以輕易設計出精美且可靠的表單。圖一為一個via array的輸入表單範例。

(圖一) EXCEL作為參數輸入表格

如果數值有效性已經在EXCEL被驗證過,那麼Python程式只要直接讀取試算表特定欄位的數值便可以進行操作。AEDT的IronPython可以支援EXCEL檔案的讀寫,不需另行安裝函式庫。以下程式碼演示了如何讀取EXCEL欄位並輸出到AEDT的訊息視窗(如圖二)。

import ScriptEnv
ScriptEnv.Initialize("Ansoft.ElectronicsDesktop")
oDesktop.RestoreWindow()
import clr
clr.AddReferenceByName('Microsoft.Office.Interop.Excel, Version=11.0.0.0, Culture=neutral, PublicKeyToken=71e9bce111e9429c')
from Microsoft.Office.Interop import Excel

ex = Excel.ApplicationClass()   
ex.Visible = False
ex.DisplayAlerts = False   

workbook = ex.Workbooks.Open('d:/demo/pcb.xlsx')
worksheet = workbook.Worksheets[1]
xrange = list(worksheet.Range["A3", "D100"].Value2)
stackup=[]
for i in range(0, 4*98, 4):
    x = xrange[i:i+4]
    if x != [None]*4:
        stackup.append(x)
    
AddWarningMessage(str(stackup))

drill = []
xrange = list(worksheet.Range["F3", "L100"].Value2)
for i in range(0, 7*98, 7):
    x = xrange[i:i+7]
    if x != [None]*7:
        drill.append(xrange[i:i+7])
    
AddWarningMessage(str(drill))

(圖二) Python讀取EXCEL欄位並輸出到AEDT訊息視窗

沒有留言:

張貼留言