2017-03-06 178 views
0

我使用LabVIEW及其VISA功能來控制吉時利2635A源表。每當我嘗試識別設備時,無論是在閱讀和寫作方面,它都可以正常工作。LabVIEW和Keithley 2635A - 無法讀取數據

viWRITE(*IDN?) /* VISA subVI to send the command to the machine */ 
viREAD /* VISA subVI to read output */ 

但是,只要我設置電壓(或電流),它就這樣做了。然後,我將命令發送到執行測量,但我無法讀取數據,並顯示錯誤

VISA: (Hex 0xBFFF0015) Timeout expired before operation completed. 

在那之後,我無法讀取*IDN?地輸出了。

源電錶通過National Instrument GPIB-USB-HS適配器連接到PC。

編輯:我忘了補充,這也發生在VISA交互式控制程序中。

+1

提示:發送命令或查詢以查看是否有錯誤時,一定要留意前面板。此外,你已經說過「設置」,然後「讀」。「set」(命令)不一定會導致響應。檢查文檔。 –

回答

2

好的,顯然文件不是很清楚。當然,(其中X是必需的參數)命令的作用是將測量結果寫入緩衝區。然而,爲了讀取該緩衝區,簡單的viREAD[]是不夠的。

所以基本上答案是簡單地增加一個print命令:這種方式我有

viWRITE[print(smua.measure.X())]; 
viREAD[] 

而且我沒有錯誤了。不知道爲什麼需要這樣的命令,但就是這樣。謝謝大家的時間回答我。

+1

SMU確實有測量緩衝區,但我不確定'smua.measure.X()'會導致寫入它。但關鍵在於它不會寫入輸出(通信)緩衝區,因此viREAD無法獲取並超時。 BTW-語言是Lua,'print'是一個標準的Lua函數,它們已經連線寫入輸出緩衝區。 –

+0

@TomBlodget非常感謝您的澄清。我認爲'smua.measure.X()'實際上寫在一個緩衝區中,至少文檔說明了這一點。 – Enzo

+0

感謝您發佈您的答案,一旦你找出答案!你是否可以編輯答案以包含文檔的鏈接? – SNygard

0

正如@Tom Blodget在評論中提到的那樣,機器在設置電壓後可能沒有任何響應。 *IDN?字符串是命令和查詢。也就是說,你會的命令*IDN?的結果。一些命令沒有任何讀取響應。這是一個快速測試,看看你是否應該從儀器中讀數。下面的代碼是在Python中;我編寫了GPIB命令來設置電壓。當你希望得到來自儀器的響應

sm = SourceMonitor() 
# Prints out IDN  
sm.query('*IDN?') 

# Prints out current voltage (change this to your actual command) 
sm.query('SOUR:VOLT?') 

# Set a new voltage 
sm.write('SOUR:VOLT 1V') 

# Read the new voltage 
sm.query('SOUR:VOLT?') 

注意這個問題,標誌着GPIB命令和query使用。儀器不會給出write命令的響應。查詢是write(...)read(...)的組合。如果您使用的是LabView,則可能需要單獨寫入和讀取。

如果需要機器收到您的指示,並作用於它驗證,大多數儀器具有以下共同命令:

  • *OPC?查詢,看看是否在操作完成
  • SYST:ERR?查詢看是否有錯誤產生
  • 給GPIB命令添加一個問號?用於設置電壓
+0

我應該更清楚,對不起。我的意思是,在發送命令設置電壓後,我發送另一個「寫入」命令來請求測量,然後使用「讀取」來檢索該測量。 至於'* IDN?'命令,當我發送給機器時,我沒有任何反饋,我仍然必須發送一個'read'信號。 我也會在帖子中編輯它。 – Enzo

+0

我看到......如果您的數據集很大,從儀器讀取可能需要很長時間。對於我的一些GPIB連接,當讀取測試結果時,我需要指定更長的超時值。你可以發佈一個最小的命令集(帶電壓和'* IDN?'),給你超時錯誤嗎? – SNygard

+0

這組命令實際上是非常基本的。分別調用'viWRITE'和'viREAD',將VISA子VI寫入並讀取,並將字符串輸入放入方括號中,我的VI是'viWRITE [* IDN?]; VIREAD []; viWRITE [smua.output.levelv = 0.1]; viWRITE [smua.measure.v()]; VIREAD []'。超時發生在最後一次讀取命令。讀命令都被送入一個足夠大的緩衝區 – Enzo