一個更復雜的例程
下面的例程展示,如何用SCPI命令從Keithley 2000萬用表讀取10個電壓值。在讀完之後,程序將計算平均值並輸出到屏幕上。
讓我們一步一步的介紹程序。首先,初始化儀器:
>>> keithley = rm.open_resource("GPIB::12")
>>> keithley.write("*rst; status:preset; *cls")
此處,我們創建了變量keithley,這是進行深入操作儀器的基礎。緊隨其後,我們發送初始化和復位命令到儀器。
下一步是發送測量參數給儀器,此處爲間隔時間(500ms)和讀取電壓值的數目(10)。我將不做更多解釋,請直接看SCPI命令和(或)Keithley 2000手冊。
>>> interval_in_ms = 500
>>> number_of_readings = 10
>>> keithley.write("status:measurement:enable 512; *sre 1")
>>> keithley.write("sample:count %d" % number_of_readings)
>>> keithley.write("trigger:source bus")
>>> keithley.write("trigger:delay %f" % (interval_in_ms / 1000.0))
>>> keithley.write("trace:points %d" % number_of_readings)
>>> keithley.write("trace:feed sense1; trace:feed:control next")
現在,儀器已經準備好開始測量了。接下來的三行命令使儀器等待一個觸發脈衝,觸發它,並等待直到它發送一個服務請求信號。
>>> keithley.write("initiate")
>>> keithley.assert_trigger()
>>> keithley.wait_for_srq()
發送服務請求信號,儀器顯示測量結束並且結果已經準備好傳輸。我們可以用 keithley.query("trace:data?")獲取數據,得到如下結果:
-
000.0004E
+
0
,
-
000.0005E
+
0
,
-
000.0004E
+
0
,
-
000.0007E
+
0
,
-
000.0000E
+
0
,
-
000.0007E
+
0
,
-
000.0008E
+
0
,
-
000.0004E
+
0
,
-
000.0002E
+
0
,
-
000.0005E
+
0
然後,我們將其轉換成python的數值列表。函數query_assii_values可以完成這項任務。
>>> voltages = keithley.query_ascii_values("trace:data?")
>>> print("Average voltage: ", sum(voltages) / len(voltages))
最後,我們需要復位儀器的數據緩存區和SRQ狀態寄存器,以便準備新一次的測量。這些在儀器手冊上有詳細的說明。
>>> keithley.query("status:measurement?")
>>> keithley.write("trace:clear; trace:feed:control next")
瞧,簡潔的18行代碼實現了採集數據的目的(自然SCPI命令是比較繁瑣的,那又是另一回事了)。