C#實現儀器的自動化控制


1.概述

生產測試當中,測試儀器不可或缺,如果是小規模生產,手動測試可以對付;但是要想到達大批量生產的目的,為了簡化測試,節約時間,就需要進行自動化測試。出於這樣的需求,對儀器的自動化程控就有了需求。

下圖是一個相對普遍的測試框架


整個控制過程中最為關鍵的部分就是上位機同測試儀器之間的通信,首先測試環境搭建完畢之后,能通信是關鍵的第一步,第二步就是用“儀器的語言”告訴儀器我們需要它們做什么。簡而言之,就是這倆步。

下面先介紹幾個相關的知識點。

2.常見的控制接口

常見的控制接口主要有:GPIB、串口(RS-232)、USB、LAN或以太網。

串行接口通信速度較慢,現代測試系統已經很少使用。

雖然現代儀表控制接口豐富, 但是,對於儀表生產廠商和用戶而言,使用最為廣泛 的是GPIB接口。

常用的USB接口版本為USB 2.0,其支持三種傳輸速率:低速1.5Mbps , 全速12Mbps 和 高速480Mbps , 傳輸速度根據外接設備自動調整,無需設置。直連最大的電纜長度5M, 最多連接設備127台。

以太網是當今現有LAN采用的最通用的通信協議標准 , 可在互聯設備間實現 10Mbps-10Gbps 數據通信。

本人在實際中用到的主要是LAN和USB方式,所以提及較多的主要是這倆種。

關於控制接口更加詳細的介紹,請到相關網站進行查閱。

3.SCPI(可編程儀器標准語言)

SCPI (Standard Command for Programmable Instrumentation)程控儀器標准命令是1990由九家儀器公司聯合推出,其建立在IEEE488.2的基礎,面向測試功能或測試信號,倡導儀器控制的一致性。

主要特點為:

  1. 程控命令面向測試流程,而不是描述儀器操作;兼容的編程環境使用同樣的命令和參數來控制具有相同功能的儀器。
  2. 在與通信物理連接層硬件無關的高層次上定義程控消息。
    SCPI基於IEEE488.2形成,但並不局限於GPIB接口,它也可用於RS232C,LAN,USB總線。
  3. 與編程手段和程序語言無關,SCPI用戶測試程序模塊易於移植。

SCPI有公共的命令,即對所有的儀器都是可行的;也有特定的命令,即不同的儀器命令不同。但所有的命令都符合SCPI標准。

對於SCPI的更詳細的介紹,請查閱相關資料,這里不再贅述。

4.VISA(虛擬儀器軟件架構)

VISA是一個驅動程序軟件架構,開發這一架構的目的在於統一與GPIB、串口、以太網/LAN、IEEE 1394和USB儀器的通信,並簡化儀器的控制應用。通過VISA API,開發人員可以使用GPIB、串口、以太網/LAN、IEEE 1394和USB儀器。

VISA具備如下優勢:

  • 接口獨立性--VISA提供了一個單一的API以相同的方法與儀器進行通信,而不考慮其接口類型。例如,VISA命令,發送一個ASCII字符串到一個基於消息的儀器,對於GPIB、串口、以太網/LAN、IEEE 1394和USB接口是完全相同的。
  • 一種面向對象的架構,可以方便地適應未來開發的儀器接口。
  • 功能全面的儀器編程特性,通過一個非常緊湊的命令集實現。
對於VISA更詳細的介紹,請查閱相關資料。

5.儀器控制過程

  • 連接儀器:通過常用的控制接口將上位機和待控儀器連接。
  • 確定儀器資源的名稱:也稱之為儀器描述符,描述了VISA資源的准確名稱與位置。確認儀器的資源名稱,可以到NI相關網站下載NI硬件驅動,打開NI-VISA軟件后可以識別出來。
    在設備和接口選項下面就可以找到儀器的資源名稱,如果找不到(大多數情況是使用LAN接口的情況),可以手動添加,將儀器的IP地址(有可能需要端口號)輸入,軟件就可以識別儀器。
    更詳細的介紹請查閱NI相關網站或者其他資料。
  • 編寫控制程序:
    這里需要說明兩點,不同的儀器使用方法並不相同。編寫儀器控制程序有幾種方式。
    1.使用儀器驅動。有的儀器廠商可能會自己基於VISA或者SCPI開發儀器的驅動,也就是往高層做了進一步封裝,同時也是是對VISA和SCPI做了進一步封裝,這樣就進一步簡化了開發流程。我們可以根據驅動說明或者儀器的編程說明使用儀器驅動軟件架構。需要實現什么功能,調用相應的驅動API即可。還可以參考提供的樣例。
    2.使用VISA。使用VISA同儀器獲得通信的橋梁,然后將“儀器語言”通過VISA接口通知給儀器,儀器就會按我們的邏輯進行相關的操作。這里的儀器語言需要參考儀器對應的編程說明(可以到儀器相應的官網下載),主要是指SCPI通信指令集。下文會稍作詳細的介紹該方法。
    3.實現自己的通信。這一點主要是針對LAN口通信的方式來說的,因為我目前只碰到過這一種情況。有的儀器並沒有那么先進,去支持VXI-11協議,雖然也是TCPIP類的資源名稱,但是這種情況下需要我們自己去實現TCP通信過程。並不難,我們只要實現一個TCP的客戶端就可以。通過儀器提供的IP地址和PORT端口號,我們的客戶端同儀器進行TCP連接,連接完成后給儀器發送“儀器語言”,同時也會接受到儀器的響應。

下面,詳細說一下如何使用VISA同儀器進行通信。

方法一

平台:vs2013。

建立好工程后,現引入兩個.NET的托管DLL,將NationalInstruments.Common與NationalInstruments.VisaNS引用添加到項目。這兩個dll文件在C:\Program Files (x86)\National Instruments\MeasurementStudioVS20XX\DotNET\Assemblies\目錄下面可以找到。
打開一個VISA會話。

查詢數據,在創建了一個與我們的儀器通信的會話之后,我們可以開始發送數據至該儀器,並讀回其響應。

我們也可用Write函數只發送不讀取數據。

最后將會話關閉

需要說明一點,在用串口和USB口控制時,我用這種方法失敗了,所以用了第二種方法。現在我還沒試驗過是否該方法對所有的串口和U口都不能用,如果你測試過了,可以相互交流一下。同樣,這種方式不適用於使用Socket的儀器。

方法二

第二種方法使用visa接口。

控制流程同第一種方法差不多。首先,將Visa32.dll文件放在工程的debug目錄下面,如果不這么做,程序會先搜索debug目錄,然后搜索system32目錄,尋找Visa32.dll文件。這里,不像上面一樣,將dll文件引入項目,是因為該dll文件是.NET非托管的程序集,需要顯式引入,負責引入的類文件參考Visa32.cs。(注:通過dumpbin -depents ***.exe或dll可以查看該文件是否屬於托管,如果有mscoree.dll就是托管的,否則非托管)

在項目中建立Visa32.dll后就可以引用里面的函數。具體的使用方法請參考:NI-Visa help。

下面是部分代碼

這種方法對於不支持VXI-11協議的儀器也不適用,需要自己實現TCP通信。

對於儀器控制很多地方我還有弄清楚,暫時先把這段時間的收獲記錄一下,如果對這方面也有想法的話,可以隨時交流。



免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM