當前位置:
首頁 > 最新 > 力科示波器遠程控制

力科示波器遠程控制

力科示波器遠程控制(編程基礎)|遠程控制

導語

1

理解遠程控制

我們通過編程的方式控制儀器,從原理上來講,無非不過是通過不同的硬體介面,使用軟體向儀器發送一些控制指令,並且獲取測試數據以及原始波形。下圖是力科示波器遠程控制的互聯參考模型,從下往上分別為介面、驅動和應用程序,對於我們使用者來說,主要是在PC應用層進行開發,而下面的幾層則需要根據自己的編程環境進行選擇。

Cable層指的是上位機和儀器之間的物理介面,主要有GPIB、LAN、和USB幾種,

力科示波器遠程控制(基礎篇)|遠程控制一文中有詳細的介紹,這裡不多描述。

Adapter層是可選的,以PC端為例,現在的PC一般都包含網口和USB介面,所以在使用網口或者USB介面控制的時候就不再需要額外的適配器,而如果需要使用GPIB口進行控制,則需要擴展GPIB介面。

Protocol層的選擇需要和物理介面相一致,USB介面對應的協議層是USBTMC,網口可以選擇的協議層包括VICP和LXI等。

PC Instrument Driver這一層指的是PC端的驅動,一般包含兩種,一個是VISA,另一個是ActiveDSO。另外,力科針對NI的LabVIEW基於NI-VISA編寫了特定的驅動,可以通過網口、GPIB和USBTMC控制示波器。這些驅動讓我們不需要去調用最底層的控制指令,而是通過一些高級的子VI控制儀器,減小開發難度。

下圖所示的就是力科的LabVIEW驅動,可以在力科和NI的官網上下載,我們會有文章中對此做詳細的介紹,這裡不再詳述。

下面的內容將對如何搭建遠程控制系統做詳細的介紹。

2

選擇合適的控制協議

我們需要根據我們現有的硬體條件來選擇編程介面以及控制協議。

對於GPIB和USB口來說,介面和協議是一一對應的,如果需要使用GPIB口控制示波器,只需要將示波器的控制模式選擇成GPIB。可以在示波器界面的以下位置進行選擇:

Utilities → Utilities Setup→ Remote,選擇「GPIB」,如果有需求,可以在右側更改GPIB地址。

USB的設置類似,上述位置選擇USBTMC即可,右側是USB通過VID和PID生成的控制地址

網口的協議選擇會複雜一些,力科示波器支持兩種網口協議,一種是力科的VICP,另一種是通用的LXI,下面簡單介紹一下這兩種協議:

VICP全稱 Versatile Instrument Control Protocol,力科在1997年發布第一款可以通過網口通信的示波器的時候,需要使用某種特定的通信協議,規範示波器和上位機之間的通信,VICP應運而生。關於VICP協議方面的內容,我們會有專門的文章對VICP做詳細的解讀。

力科示波器默認使用VICP作為遠程控制協議。如需選擇,可在Utilities → Utilities Setup→ Remote目錄下,選擇「TCPIP(VICP)」即可。

LXI全稱 LAN eXtensions for Instrumentation,是2005年前後制定的工業標準,LXI在1.5版本之後利用 VXI-11 協議進行TCPIP通信和儀器發現,目前LXI最新的儀器可以通過VXI-11和HiSLIP兩種LAN協議進行通信,由於VXI-11歷史比較久遠,支持的儀器較多,所以在很多情況下LXI都是通過VXI-11協議通信。

需要注意的是,LXI協議出現的時間相對較晚,早期的力科示波器固件不支持,只有在5.7.2.1之後的固件版本才支持LXI,如需選擇,可在Utilities → Utilities Setup→ Remote目錄下,選擇 「LXI(VXI11)」 即可。

力科示波器支持多種介面以及通信協議進行遠程控制,但是從成本以及便利性方面來考慮,我們一般推薦客戶以網口作為首選;而且,就目前而言,我們絕大多數的客戶都是選擇網口作為遠程控制介面,所以我們接下來主要討論如何使用網口進行遠程控制。使用其他的介面在程序上只需要更改儀器的地址就可以了。

3

選擇合適的上位機驅動

對力科示波器而言,PC端的驅動有兩種,一種是VISA,另一種是ActiveDSO。

VISA全稱 Virtual Instrument Software Architecture,是多家測試儀器廠商一起定製的工業標準,支持串口、USBTMC、VXI-11、GPIB等多種通信介面。由於NI公司的LabVIEW以及LabWindows/CVI在儀器遠程控制上廣泛使用,所以目前NI的VISA是使用的最為廣泛的。NI-VISA可以在NI的官網上免費下載,目前最新的版本是17.5。除此之外,有一些儀器廠家也有自己的VISA,在遠程控制方面可以實現的功能相同,但是有可能無法和NI-VISA共存,一般情況下不建議安裝。

NI-VISA最大的優勢是它支持的協議非常全面,而且和LabVIEW以及CVI有極好的兼容性;另外,NI-VISA現在也支持Mac和Linux等操作系統,方便程序移植;這些是NI-VISA的優勢。但是現在NI-VISA相對來說比較臃腫,附帶的配套軟體對PC的硬體要求相對較高。

ActiveDSO是一個ActiveX控制項,通過Windows DCOM架構實現對示波器的遠程控制。ActiveDSO對Office以及支持ActiveX的編程語言有很好的兼容性,支持串口、USBTMC、LAN以及GPIB等多種通信介面。另外ActiveDSO不會和VISA相衝突。

和NI-VISA相比,ActiveDSO要小巧靈活很多——NI-VISA的安裝包一般在500MB以上,而ActiveDSO則不足2MB;除了常用的讀寫操作函數以外,ActiveDSO還有一些力科自定義的函數,例如從示波器讀取波形、獲取示波器屏幕截圖並保存到上位機,如果要通過基本的遠程控制指令來實現這些功能會比較複雜;這些是ActiveDSO的優勢。但是ActiveDSO只支持Windows操作系統,這一點比起VISA要局限一些,另外,NI-VISA有一些自帶的軟體,如NI-MAX,調試起來會方便一些。

VICP Passport:VICP是力科自定義的網口通信協議,而且力科示波器早期的固件版本是不支持LXI協議的,這樣的話無法使用VISA通過網口控制示波器,VICP Passport是力科針對NI-VISA(注意,僅針對NI-VISA)開發的插件,讓NI-VISA可以通過VICP的方式控制力科示波器。不過,目前絕大多數(2007年3月以後的)力科的示波器都支持LXI協議,如果需要使用VISA控制示波器,推薦直接選擇LXI介面

VICP Passport可以在力科官網上下載,地址如下:

http://teledynelecroy.com/support/softwaredownload/vicppassport.aspx?

一般情況下,我們都推薦客戶優先選擇ActiveDSO作為上位機驅動,通過VICP控制示波器;如果一定要使用NI-VISA作為上位機驅動的話,建議配合LXI(VXI-11)控制協議使用。

4

獲取控制指令

遠程控制編程中最重要的就是控制指令了,無論是選擇什麼樣的介面和協議、使用哪一種驅動,最終都是把一條一條的控制指令由上位機發送給示波器,所以控制指令是遠程控制裡面最重要的一個部分。

如果讀者有過遠程控制的編程經驗,應該熟悉下述格式的控制指令

TRIGger:MODe NORMal

類似這樣語法的控制指令叫做SCPI,全稱 Standard Commands for Programmable Instruments,是對IEEE488.2的一個擴展,也是目前比較常見的編程式控制制指令格式。其中大寫字母部分是必須要的,而小寫字母部分是可以省略的,所以,下述的兩種表述是完全等效的,都是表示把觸發模式改成Normal模式

TRIG:MOD NORM

TRIGger:MODe NORMal

力科的控制指令沒有遵從SCPI的格式,目前力科示波器有兩套控制指令集,一套是基於IEEE488.2的控制指令集,另一套是基於Windows DCOM的控制指令集。基於DCOM的控制指令集採用的是新的架構,為了替代基於IEEE488.2的指令集,為了區分,下文中把這兩種指令集分別成為Legacy (IEEE488.2)和Automation (DCOM)控制指令集。

在絕大多數情況下,建議使用Automation指令集實現對儀器的控制。Legacy指令集大多數都是兼容以前的示波器,多年來有一些術語會有些變化,例如原來的通道帶寬復用技術稱為 "Channel Interleaving",而現在一般稱作為「DBI (Digital Bandwidth Interleaving)」,如果按照現有的描述去編程手冊中以 「DBI」 為關鍵詞搜索和通道復用控制相關的Legacy控制指令,可能找不到相關的結果。

下面是一些常見的Legacy指令集,Legacy指令集的優勢就是簡潔,而且有一些比較底層的指令,例如WF和WFSU,這兩條指令能夠實現把原始波形以二進位的形式傳輸給上位機。另外,在不支持DCOM的編程環境下都可以通過VBS指令將Automation指令集傳輸給示波器。

VBS指令的語法會在後面Automation指令集的時候具體講到,WF指令涉及到的內容比較複雜,我們之後會專門有一篇文章詳細講述力科示波器的二進位波形文件,裡面會著重講述這個指令,所以本文不再詳述。

還是以觸發模式為例,如果需要把觸發模式改成「Single」,可以向示波器傳輸以下命令:

TRMD SINGLE

Automation指令相比Legacy指令要冗長,但是分類清晰,而且命名方式和和示波器界面一一對應。Automation指令需要以VBS的形式傳輸給示波器,VBS指令的語法如下所示。

仍舊以設置觸發模式為例,如果需要把觸發模式設置成「Single」模式,需要向示波器發送如下指令:

VBS app.Acquisition.TriggerMode="Single"

如果需要讀取示波器當前的觸發模式,可以向示波器發送如下命令,然後向示波器讀取返回值:

VBS? return =app.Acquisition.TriggerMode

其中,後面"app.xxxx"這一段就是Automation指令,Automation指令的結構有點像C++中的結構體(或者對象)。和對象類似,Automation指令包含屬性和事件。例如,我們需要設置觸發模式,相當於修改Acquisition的TriggerMode屬性;如果需要清除當前測試結果,需要調用ClearSweeps事件。

Automation指令的常用數據類型有布爾、數值、字元和枚舉類型四種,數值和字元類型的使用比較簡單,正常操作即可,例如我們需要將通道C1的幅值調到1V/格,只需要發送如下所示指令:

VBS app.Acquisition.C1.VerScale = 1

枚舉類型賦值的時候會稍微麻煩一些,需要給值加上雙引號,例如,示波器的觸發模式共有4種,Auto、Normal、Single、Stoped,這就是經典的枚舉類型,如果需要修改示波器的觸發模式到Auto,需要發送如下指令

VBS app.Acquisition.TriggerMode="Auto"

布爾類型在使用的時候需要特別注意,因為力科示波器中是以「-1」來表示「True」的,這一點和許多編程語言不同,所以在操作布爾類型的時候需要特別注意,例如,我們如果需要顯示通道C1,需要發送如下指令:

VBS app.Acquisition.C1.View = ture

或VBSapp.Acquisition.C1.View= -1

Automation指令可以通過編程手冊查找,但是並不推薦。因為示波器是一個功能十分豐富的測試設備,許多的功能完全是通過軟體的方式實現的,而且測試功能會逐漸擴展,所以編程手冊就需要經常更新,如果得到的不是最新的編程手冊,那麼新功能的控制命令就有可能是錯誤的。

力科提供了一種查詢編程指令的方法,就是通過儀器自帶的軟體——XStream Browser。力科帶操作系統的全系列示波器的命令都可以通過XStream Browser查找,並且編程命令全系列通用(限於通用命令,有些跟軟體選件相關的命令取決於當前示波器是否包含此軟體選件,如果沒有包含此軟體選件,則無法使用) ,因此,代碼的可移植性很強,很容易讓不同型號、不同平台的兩款示波器使用相同的底層代碼。

下圖是XStream Browser的界面示意圖,XStream Browser可以通過示波器桌面上的快捷方式打開。點擊File → Connect to Local Instrument就可以連接到示波器並且查看控制指令(需要示波器軟體保持打開的狀態,否則無法連接)。

窗口左邊是按照A~Z順序排列的,列舉了示波器當前支持遠程控制的所有功能,這些功能都是和示波器界面上的菜單或者子菜單中的功能都是相吻合的,其中和採集相關的都在 「Acquisition」 中,例如通道的設置、水平軸設置、採樣率/存儲深度設置、觸發方式等,都在這一欄中;和參數測量相關的都在 「Measurement」 中,相對應的,和函數運算相關的,都在 「Math」 中。

那麼如何通過XStream Browser獲取控制指令呢?

下面舉一個和測量相關的例子來進行說明,現在我使用的示波器能夠同時支持12個參數的測量,如下圖所示。

我們可以在XStream Browser中找到和測量相關的 「Measure」,點擊左側的「+」可以展開,這時候我們可以看到如下圖所示,右側的內容基本上和上面示波器界面上的測量菜單完全一致,如果我們需要顯示測量表格,點擊右側的 「ShowMeasure」,下方紅色方框中出現的就是顯示測量參數對應的控制指令。

右鍵單機選中的 「ShowMeasure」,可以設置這個屬性的值,如下圖所示。我們在XStream Browser做的修改會在示波器上面得到體現,我們將 「ShowMeasure」 這個值改成 「True」。

在示波器界面中我們也可以同步看到示波器上面也同步有了改變,測量值已經顯示出來了。我們可以通過這種方式來Double Check我們是否找到了正確的控制指令。

在示波器界面上的操作同樣可以在XStream Browser界面上進行查看,我在示波器界面上把統計結果打開,如下圖所示,XStream Browser中應該會有一個和打開統計相關的參數會改變。

因為XStream Browser界面不會實時刷新,所有我們需要手動點擊左上角刷新按鍵,這時候我們可以看到 「StatsOn」屬性的值已經變成「True」了,如下圖所示。我們可以利用這種方法去尋找我們需要的控制指令。

如果需要修改和測量參數P1的測量類型,可以在XStream Browser中選擇 Meaure 下的 P1,如下圖所示,其中 「ParamEngine」 對應的是測量類型, "Source1" 和 "Source2" 是輸入源,當前P1是對通道C1進行幅度測試,所以 "ParamEngine" 的值為 "Amplitude", 「Source1」 的值為 「C1」,需要注意的是 「Source2」,因為測量幅值只需要一個輸入源,所以 「Source2」 有一個 「H」 的標籤。「H」 代表隱藏, 「R」 代表只讀。如果測試項是類似於Skew這類的測試的話,是需要兩個輸入源的,這時候 「Source2」 上面的 「H」 標籤就會消失。

我們可以在 「Measure.P1.Out.Result」 找到value屬性,這個就是P1的當前測量值,

讀取下方的Automation指令,就可以或者P1的測量結果,如果需要讀取平均值,可以在 「Measure.P1.mean.Result」 中尋找。

選擇好了控制協議和上位機驅動,找到了查找控制指令的方法,就可以開始編程了。

5

編程準備

然後是PC端驅動的選擇。VISA和ActiveDSO的控制方式如下圖所示,可以看出來,無論是使用VISA還是ActiveDSO,操作步驟都是比較類似的。

如果選擇NI-VISA,可以在NI官網下載,下載地址如下所示:

http://www.ni.com/download/ni-visa-17.5/7220/en/

下述地址是NI-VISA的支持頁面,我們可以在此下載相關操作手冊、白皮書以及各個不同編程環境下的常式:

http://sine.ni.com/psp/app/doc/p/id/psp-411

需要說明的是,不同的編程環境會對VISA的底層API進行封裝,所以VISA函數在不同的編程環境上會體現出來較大的差別,例如在使用C#編程的時候,如果需要向儀器獲取數據,可以直接調用Query函數,而在MatLab中則需要使用fprintf函數寫入命令,然後用fscanf函數讀取數據。

使用NI-VISA控制的時候建議在示波器端選擇LXI協議。

NI-VISA有一個很實用的工具——NI-MAX,用於添加和管理遠程控制的設備,界面如下圖所示:

在My System → Devices and Interfaces→ Network Devices下右鍵單擊選擇 「Create New VISA TCP/IP Resources」,可以出現如下圖所示界面,如果選擇第1個讓軟體自動檢測,軟體會把同一網段內所有的支持LXI(VXI-11)的設備枚舉出來,如果選擇第2個,則需要手動輸入示波器的IP地址。目前力科示波器不支持Raw Socket的編程方式。

連接成功之後的的界面如下圖所示,圖中 「TCPIP0::127.0.0.1::inst0::INSTR」 是示波器的VISA地址,中間的欄位可以是IP地址或者示波器的host name。 「inst0」這個欄位可以省略。

點擊 「Open VISA Test Panel」 按鍵可以進入VISA的調試界面,我們可以通過這個界面查看儀器工作狀態是否正常,也可以驗證我們是否使用了正確的控制命令。調試界面如下圖所示,VISA中最常用到的就是Write、Read和Query三種事件,Write用於向儀器寫入控制命令;Read用於向儀器讀取返回值;Query相當於Write + Read操作。

需要注意的是,如果使用NI-VISA + VICP Passport對示波器進行控制,我們無法使用NI-MAX工具以及VISA Test Panel對示波器進行調試以及驗證控制指令(所以如果使用NI-VISA控制示波器,我們強烈推薦使用LXI(VXI-11)控制協議)。使用VICP Passport的地址是:

VICP::::INSTR

或者VICP::::INSTR

如果使用ActiveDSO作為上位機端驅動,可以在力科官網上下載,地址如下,ActiveDSO的開發指南也在此頁面下載:

http://teledynelecroy.com/support/softwaredownload/activedso.aspx?

使用ActiveDSO編程需要在示波器端選擇VICP作為控制協議。

ActiveDSO不像VISA一樣有豐富的調試工具,但是ActiveDSO提供了一些常用編程語言的常式,我們可以在 開始菜單 → LeCroy下面找到,或者可以在C盤下的安裝目錄下找到如下所示的常式。我們可以根據常式編寫我們需要的遠程控制程序。

我們下面簡單介紹一下ActiveDSO的常用函數:

MakeConnection:

類似於VISA的viOpen函數,實現上位機和示波器的連接

輸入參數:

address儀器地址字元串,如下圖所示

返回值:

連接成功為真,失敗為假

WriteString:

類似於VISA的viWrite函數,向示波器寫入字元串命令以及EOI指令

輸入參數:

textString字元串數據,從上位機向示波器傳輸的控制指令或數據

EOI布爾類型,用於確定指令或數據有沒有傳輸完畢,正常情況下EOI為真,只有在傳輸大量指令或數據的時候,如果一次無法傳輸完成,則將EOI置為假,然後下一次繼續寫入。

返回值:

寫入成功為真,失敗為假

和WriteString類似的還有WriteBinary,不過WriteBinary發送給示波器的數據是二進位數據,而WriteString發送的數據是字元串。

ReadString:

相當於VISA的viRead函數,從示波器讀取數據

輸入參數:

maxBytes長整形,要讀取的最大的位元組數

返回值:

示波器返回的字元串數據,如果要讀取的數據量比較大,可以多次讀取。

和ReadString類似的還有ReadBinary,不過ReadBinary從示波器讀取的數據是二進位數據,而ReadString讀取的數據是字元串。

Disconnect:

相當於VISA的viClose函數,斷開上位機和示波器的連接

輸入值:

返回值:

斷開成功為真,失敗為假

上述的幾個函數和VISA的控制函數基本上相一致,可以認為是基本函數,除此之外,AcitveDSO還提供一些更高級的函數,所謂「高級」,是用一個函數實現了一些複雜讀寫操作,其中使用最為廣泛的就是讀取示波器波形的幾個函數——GetXXXWaveform。

GetByteWaveform:

從示波器讀取原始的8bit波形文件,並以Byte數組的形式返回。

輸入參數:

traceName字元串類型,代表讀取的信號源,可以是C1|C2這樣的輸入通道,也可以是F1|F2這樣的運算結果。

maxBytes 長整形,讀取的最大位元組數

whichArray整形,0 = first array, 1 = Second array,如果讀取的是通道的數據,選擇0;如果讀取的是FFT類似的複數運算結果,實部選0,虛部選1

返回值:

返回的是Byte數組原始波形的幅值信息,沒有時間信息。

需要注意的是GetByteWaveform是無法針對HDO以及HRO系列的示波器使用的,因為這兩個系列的示波器硬體ADC都是12bit的,每個Byte只有8bit,無法獲取完整的波形信息,需要使用GetIntegerWaveform。

GetIntergerWaveform使用方法和GetByteWaveform類似,只是返回值是16bit整形數據數組。

上述兩種讀取波形的方式讀取的都是原始的ADC採樣的數值,不是幅值信息,波形的幅值需要我們通過讀到的數值以及對應波形的垂直刻度進行換算。而GetScaledWaveform返回的是單精度浮點數幅值數組。

GetScaledWaveformWithTimes返回的是一個二維數組,其中包含波形中每個點的幅值和時間信息。

需要注意的是,由於不同編程語言之間的數據類型定義大相徑庭,所以上述ActiveDSO函數在不同編程環境使用的時候,會有一些小的差別,至於VISA函數的使用差別就更大了。限於篇幅,本文暫不具體針對某一種編程語言(環境)介紹實例,在之後的文章將對以下幾種編程語言(環境)的遠程控制提供實例詳解:

C# (.Net)

MatLab

Python

Visual Basic

LabVIEW

Reference

Wikipedia

NI-VISA Programmer Reference Manual

Teledyne LeCroy Application Brief: LAB_WM827

TeledyneLeCroy Application Note: Introducing the LXI Interface

TeledyneLeCroy AcitveDSO Developer"s User Guide

TeledyneLeCroy XStream Oscilloscope Remote Control Manual

TeledyneLeCroy MAUI Oscilloscopes Remote Control and Automation Manual

關於力科示波器的遠程控制,本公眾號還將圍繞以下幾個話題進行探討,大家可以對自己感興趣的話題投票,我們會優先探討感興趣人數較多的話題,如果大家還有關於示波器、測試和SI方面感興趣的topic,可以在文章末尾留言。


喜歡這篇文章嗎?立刻分享出去讓更多人知道吧!

本站內容充實豐富,博大精深,小編精選每日熱門資訊,隨時更新,點擊「搶先收到最新資訊」瀏覽吧!


請您繼續閱讀更多來自 全球大搜羅 的精彩文章:

生活雖苦,可是我甜呀
巧妙點綴美式卧房

TAG:全球大搜羅 |