PyVISA在三個層次上實現了方便的Pythonic編程。
1. 低級別:一個包含visa庫接口的容器。
該容器定義了每個函數的參數類型和返回值類型,打通了Python類和外部接口類型。
一般不需要直接調用這些函數。這麼做就意味着需要提升Layer 2的封裝與定義了。
所有level 1的函數均爲VisaLibraryBase的靜態方法。
並不是所有低級別的函數在所有後臺上都實現了。爲了更好地兼容性,不要使用Layer 1.所有的功能均在Layer 2中實現了。
2. 中間級:visa庫的所有函數的Python實現。
這些函數調用低級別函數,增加了處理類型轉換代碼。這些函數擁有詳細的,友好的Python類型文檔。
如果沒有對應的設備類,可以直接調用此級別的函數,控制VISA庫特定的接口。
所有level 2的函數均爲VisaLibraryBase中的封裝函數。
3. 高級別:ResourceManager或Resource的基於對象的層。
ResourceManager實現了控制所連接設備的方法。可以應用此對象打開對應Resource派生類的各種設備。
Resource類和派生類實現了獲取設備參數和控制設備的Pythonic方式。
大部分情況下,只需訪問ResourceManager。對一個給定的設備,用open_resource()方法來實現該對象的訪問。如果需要,可以使用visalib的參數訪問VisaLibrary對象。
VisaLibraryBase類實現低級別的調用。對於默認的NI後臺,level 1和level 2均在pyvisa.ctwrapper包中。該包包含在PyVISA中。
其他的後臺只需將@符號和後臺名稱做爲參數傳遞給ResourceManager即可。更多信息詳見A frontend for multiple backends.
調用中級別和低級別函數
首先,訪問ResourceManager:
|
然後,可以訪問visalib下的VisaLibrary實體。
例如,VISA函數viMapAddress。在低級別layer中爲viMapAddress,在中級別中爲map_address。
可以通過名稱區分低級別和中級別函數。低級別函數和共享庫中的方法具有相同的名稱,並被冠以前綴vi。中級別函數具有更Python化但可識別的名稱。一般,首字母大寫並以vi爲前綴的名稱變爲下劃線間隔的小寫字母的名稱。在API章節有對此級別函數的詳細介紹。
低級別
可以用靜態方法直接訪問低級別函數,例如:
|
調用這些函數需要了解函數聲明和對應python接口。避免這些,可以用VisaLibrary對象的中級別函數。
中級別
VisaLiability對象實現了外部庫一一對應的封裝函數。
每一箇中級別函數封裝了一個低級別函數。例如:
|
封裝庫解決了調用約定和類型轉換。