在您的 Python 開發環境中,按照以下步驟來建立簡單的Sequence。此範例使用 PXIe-4137 SMU來產生一系列電壓輸出的Sequence做為示範。
1. 匯入以下所需Module:
import hightime
import nidcpower
2. 用下列輸入參數來定義
main()功能:
- resource_name :用於指定 PXI SMU 的名稱。
- options:用於指定模擬和驅動程式選項。
- voltage_max :用於指定最大的輸出電壓。
- current_limit :用於指定限制多少電流。
- number_of_outputs :用於指定要產生的電壓數目。
- delay_in_seconds :用於定義timeouts。
def main(resource_name, options, voltage_max, current_limit, number_of_outputs, delay_in_seconds):
3. 在
main()內部,定義
delay_in_seconds + 1 秒的timeout。
timeout = hightime.timedelta(seconds=(delay_in_seconds + 1.0))
4. 建立一個
NIDCPower session,使用
resource_name和
options來定義session參數。
with nidcpower.Session(resource_name=resource_name, options=options) as session:
5. 在 NIDCPower session中,設定Source Mode (
session.source_mode ) 和輸出功能 (
session.output_function )。
- source_mode必須設置為SEQUENCE 。
- 對於此範例, output_function設置為DC_VOLTAGE 。請參閱output_function檔案來查看其他可使用的輸入值。
session.source_mode = nidcpower.SourceMode.SEQUENCE
session.output_function=nidcpower.OutputFunction.DC_VOLTAGE
6. 定義Sequence要使用的voltage 以及 Source Delay 陣列。
- 定義一個名為voltages的空陣列。
- 定義一個名為source_delays的空陣列。
- 透過將voltage_max除以number_of_outputs來計算voltage_step 。
- 定義一個 for 迴圈, number_of_outputs作為要執行的次數。
- 在 for 迴圈內,將voltage_step*i添加到電壓陣列。這將建立一個陣列,其中包含從 0 到voltage_max的電壓,每次電壓增加幅度都相等。
- 將delay_in_seconds添加到source_delays陣列。這確保每個輸出電壓之間有相同的source_delay 。
- 此部份程式碼會類似於如下:
voltages = []
source_delays = []
voltage_step = voltage_max/number_of_outputs
for i in range(number_of_outputs):
voltages.append(voltage_step*i)
source_delays.append(delay_in_seconds)
7. 在 for 迴圈之外,定義Sequence並完成session設定。
- 將電壓和source_delays陣列傳遞給set_sequence方法。這能夠設定Sequence中的steps。
- 將session.voltage_level_range設置為voltage_max 。
- 將session.current_limit設置為current_limit 。
- 將session.current_limit_range設置為current_limit 。
- 將session.aperture_time設置為合適的值。此範例使用 0.0001 秒的Aperture Time。
- 此部份程式碼會類似於如下:
session.set_sequence(voltages, source_delays)
session.voltage_level_range = voltage_max
session.current_limit = current_limit
session.current_limit_range = current_limit
session.aperture_time = 0.0001
8. Initiate the session並獲取量測數值。
- 呼叫initiate方法。
- 使用wait_for_event 方法將session設置為等待SEQUENCE_ENGINE_DONE event。
- 定義一個名為measurement_group的變數,用於儲存session.fetch_multiple的結果。
- [Optional]使用[External] input()強制 Python 腳本在繼續執行之前先等待使用者輸入。如果您是打算稍後從 InstrumentStudio 監控Sequence,這會很有幫助。
- 此部份程式碼會類似於如下:
session.initiate()
session.wait_for_event(nidcpower.Event.SEQUENCE_ENGINE_DONE)
measurement_group = session.fetch_multiple(len(voltages),timeout=timeout)
input('Wait before printing results')
9.格式化獲取的資料並印出結果。
- 定義一個名為line_format的變數,將字串格式以 3欄呈現,靠左對齊。請參閱[外部] 常用字串操作以了解字串格式。
- 列印三欄,標題為“Num”、“Voltage”和“Current”。
- 定義一個 for 迴圈,每一次每個量測值會儲存在measurement_group中。
- 在 for 迴圈內,將num設置為 0。
- 使用line_format格式化印出num 、 measurements[0]和measurements[1] 。這將分別在每個“Num”、“Voltage”和“Current”欄下印出值。
- 此部份程式碼會類似於如下:
line_format= '{:<10}{:<10}{:<10}'
print(line_format.format('Num', 'Voltage', 'Current'))
for i, measurements in enumerate(measurement_group):
num = 0
print(line_format.format(num, measurements[0], measurements[1]))
10. 定義傳遞給
main函式的選項。
- 退出main函式。
- 輸入options={'simulate': <Simulated>, 'driver_setup': {'Model' : '<Model>', 'BoardType'': '<BoardType>', }, } 其中:
- <Simulated>是True或False ,具體取決於您是否希望模擬 SMU。
- <Model>是 SMU 的型號。對於此範例, <Model>是4137 。
- <BoardType>是PXI或PXIe 。
options = {'simulate': False, 'driver_setup': {'Model': '4137', 'BoardType': 'PXIe', }, }
11. 從下面的範例程式碼呼叫具有所需參數值的
main函式:
- resource_name設置為PXI1Slot2 。確保這與 NI Measurement & Automation Explorer (MAX) 中列出的 SMU 名稱相匹配。
- options設置為options。
- voltage_max設置為10 。
- current_limit設置為0.5 。
- number_of_outputs設置為10 。
- delay_in_seconds設置為0.5 。
main('PXI1Slot2', options, 10, 0.5, 10, 0.5)