亚洲乱码中文字幕综合,中国熟女仑乱hd,亚洲精品乱拍国产一区二区三区,一本大道卡一卡二卡三乱码全集资源,又粗又黄又硬又爽的免费视频

C# 通過NI-VISA操作Tektronix TBS 2000B系列示波器的實現(xiàn)步驟

 更新時間:2021年02月19日 10:11:13   作者:seabluescn  
這篇文章主要介紹了C# 通過NI-VISA操作Tektronix TBS 2000B系列示波器的實現(xiàn)步驟,幫助大家更好的理解和學習使用c#,感興趣的朋友可以了解下

一、概述

本文描述采用C#語言訪問控制Tektronix TBS 2000B 系列示波器。接口協(xié)議采用NI-VISA。

最近一個項目需要和一款示波器進行通信,需要對示波器進行一些簡單控制并獲取到波形數(shù)據(jù)。經過一段時間研究,大致了解了相關操作,因為發(fā)現(xiàn)相關資料不是很多,所以把我了解的相關知識和大家分享一下。文末將提供本文涉及的相關文檔、代碼、安裝程序的下載地址。

正常情況下,我們如果需要和一個設備進行通信,首先需要知道PC通過什么方式和設備進行連接,通信協(xié)議是什么。由于工作需要和很多設備進行過連接,常用的連接方式主要有:網絡連接、串口連接、USB接口連接等;通信協(xié)議都是自定義的協(xié)議文本。 本來以為這個項目首先得需要搞清楚示波器的通信協(xié)議,然后才能進行下一步開發(fā),在官方網站下載了一些編程資料,發(fā)現(xiàn)該設備是可以通過VISA進行連接的,那什么是VISA呢?VISA是由National Instruments公司牽頭,聯(lián)合一些設備制造廠商共同指定的一個通用設備連接標準,不管設備通過何種方式進行連接,只要符合VISA規(guī)范就可以通過該標準協(xié)議進行連接,而NI-VISA就是NI公司實現(xiàn)的一個協(xié)議,通過這個協(xié)議接口,我們不用直接和設備進行通信,只需要通過NI-VISA提供的接口就可以訪問設備,而常用的接口非常簡單,主要就是OPEN、WRITE、READ等幾個命令。符合規(guī)范的設備都會公開一份SCPI指令集的文檔,只要仔細閱讀該文檔就可以實現(xiàn)設備的控制。在整個項目過程中,我僅僅通過幾個官方網站下載的文檔就完成項目開發(fā),幾乎沒有什么障礙,在此不得不感慨我們的制造業(yè)和發(fā)達國家相比確實有很大差距,我們就缺少這樣標準性的東西,什么事情都得從底層做起,很不科學。要是那些巨頭們肯做一些這方面的工作就太好了,比做什么買菜、賣魚的APP有意義得多了。

二、連接

示波器通過網絡接口和PC進行連接

配置示波器IP和PC在同一個網段,例如:192.168.11.11,在設置時注意IP內不要有0,然后在PC上先ping一下,看能否ping通。

如果能ping通就在瀏覽器輸入http://192.168.11.11看能否打開示波器主頁,確認SCPI指令可以運行。

三、安裝驅動

運行NI-VISA Runtime安裝程序,選中運行時基礎包和.NET支持包。 

.NET支持包選.NET 4.0-4.5.1 Runtime Support(IVI),不選.NET XX Runtime Support(NS),NS的包是老版本。

安裝完成后形成兩個包:Ivi.Visa和NationalInstruments.Visa

其中Ivi.Visa有兩個版本:

32位位置:C:\Program Files (x86)\IVI Foundation\VISA\Microsoft.NET\Framework32\v2.0.50727\VISA.NET Shared Components 5.8.0

64位位置:C:\Program Files\IVI Foundation\VISA\Microsoft.NET\Framework64\v2.0.50727\VISA.NET Shared Components 5.8.0

NationalInstruments.Visa位置:C:\Windows\Microsoft.NET\assembly\GAC_MSIL\NationalInstruments.Visa\v4.0_17.0.0.0__2eaa5af0834e221d

四、引用

新建VS工程,按上述地址添加Ivi.Visa和NationalInstruments.Visa兩個引用。Ivi.Visa的庫根據(jù)需要可以選32位或64位。

程序運行需要在目標機器安裝運行時,所以引用的庫不需要復制到項目文件夾。

五、代碼

https://github.com/cnxy/VISAInstrument

連接代碼:

string IP = this.txtIP.Text.Trim();

      string IpRegex = @"^((25[0-5]|2[0-4]\d|[01]?\d\d?)\.){3}(25[0-5]|2[0-4]\d|[01]?\d\d?)$";

      if (!Regex.IsMatch(IP, IpRegex))
      {
        MessageBox.Show("IP地址不正確!");
        return;
      }

      if (!PortUltility.OpenIPAddress(IP, out string fullAddress))
      {
        MessageBox.Show("未找到設備!");
        return;
      }

      try
      {
        _portOperatorBase = new LANPortOperator(fullAddress);
      }
      catch (Exception ex)
      {
        MessageBox.Show($"初始化設備失敗:{ex.Message}");
        return;
      }

      try
      {
        _portOperatorBase.Timeout = 2000;
        _portOperatorBase.Open();
      }
      catch (Exception ex)
      {
        MessageBox.Show($"連接設備失敗:{ex.Message}");
        return;
      }

      EnabledControls(true);
      MessageBox.Show("連接成功!");

寫指令一共有兩種,一種不需要返回數(shù)據(jù)、一種需要返回數(shù)據(jù),下發(fā)了需要返回數(shù)據(jù)的指令后才能進行讀取指令,否則就會讀取失敗。

讀寫指令如下:

private void btnWrite_Click(object sender, EventArgs e)
    {
      string CmdStr = this.txtCommand.Text.Trim();

      
      try
      {
        _portOperatorBase.WriteLine(CmdStr);
        ShowLog($"[Write][{CmdStr}][Success]");
      }
      catch
      {
        ShowLog($"[Write][{CmdStr}][ERROR]");
      }
    }

    private void btnReadString_Click(object sender, EventArgs e)
    {
      try
      {
        var result = _portOperatorBase.Read();
        ShowLog($"[Read][{result}][{result.Length}]");
      }
      catch (IOTimeoutException)
      {
        ShowLog($"[Read][ERROR:Timeout]");
      }
      catch (Exception ex)
      {
        ShowLog($"[Read][Exception:{ex.Message}]");
      }
    }

核心代碼就這么多,剩下的就根據(jù)需要查詢SCPI指令表就可以了。

附錄、相關SCPI指令

 以下指令僅適用于Tektronix TBS 2000B系列示波器。

(一)    基本指令
1.   身份
WRITE:*IDN?

READ:

(二)    設置
1.   默認設置
RECAll:SETUp FACtory

2.  通道控制
Select:CH<x> ON/OFF

3.  水平位置與比例
HORizontal:POSition?

HORizontal:POSition 10

 

HORizontal:SCAle?

400  單位是秒

HORizontal:SCAle 0.2

 

4.  垂直位置與比例
CH1:POSition?

CH1:POSition 1

 

CH1:SCAle?

CH1:SCAle 2.5

 

5.  觸發(fā)
模式

TRIGger:A:MODe?

NORMAL

 

觸發(fā)類型

TRIGger:A:TYPe?

EDGE

 

觸發(fā)源

TRIGger:A:EDGE:SOUrce CH1

 

耦合:

TRIGger:A:EDGE:COUPling g {DC|HFRej|LFRej|NOISErej}

 

斜率

TRIGger:A:EDGE:SLOpe {RISe|FALL}

 

觸發(fā)電平(當前)

TRIGger:A:LEVel?

2.0800

TRIGger:A:LEVel 3.5

 

觸發(fā)電平(指定通道)

TRIGger:A:LEVel:CH1?

2.0800

TRIGger:A:LEVel :CH1 3.5

 

(三)    控制
1.   設置/查詢工作類型
ACQuire:STOPAfter SEQuence

ACQuire:STOPAfter RUNSTOP

查詢:ACQuire:STOPAfter?

返回最后一次設置的工作類型

 

2.  設置/查詢運行狀態(tài)
ACQuire:STATE?

0:Run或Single

1:Stop

設置:ACQuire:STATE ON/OFF

 

3.  查詢觸發(fā)狀態(tài)
TRIGger:STATE?

READY:等待觸發(fā)

SAVE:已經觸發(fā)

 

(四)    讀取數(shù)據(jù)
1.   設置數(shù)據(jù)來源(通道)
DATA:SOURCE CH1

 

2.  設置/讀取記錄寬度
HORizontal:RECOrdlength?

2000

 

3.  讀取波形數(shù)據(jù)寬度(僅讀取,觸發(fā)完成后有效)
WFMOutpre:RECOrdlength?

2000

4.  設置傳輸數(shù)據(jù)窗口
DATa:STARt 1  最小為1

DATa:STOP 2000

DATa:WIDth? 單個數(shù)據(jù)寬度(字節(jié)數(shù))默認為1,可以修改為2字節(jié),但高位始終為0

 

5.  數(shù)據(jù)讀取
CURVe?

Read(Bytes):返回指定長度的字節(jié)數(shù)據(jù)【LENGTH= N+(STOP-STARt+1)+1】

數(shù)據(jù)為:幀頭(N字節(jié))+數(shù)據(jù)(STOP-STARt+1字節(jié))+幀尾(1字節(jié))。

幀頭為:#(1字節(jié))+數(shù)據(jù)長度的長度(1字節(jié))+數(shù)據(jù)長度(1~9字節(jié))

幀尾為:\n

數(shù)據(jù)每個字節(jié)表示一個波形高度值,采用補碼方式,即第一個位表示符號,范圍從-128~127

相關文檔、代碼下載:https://gitee.com/seabluescn/tksamples.git

以上就是C# 通過NI-VISA操作Tektronix TBS 2000B系列示波器的實現(xiàn)步驟的詳細內容,更多關于c# 操作Tektronix TBS 2000B系列示波器的資料請關注腳本之家其它相關文章!

您可能感興趣的文章:

相關文章

  • C#實現(xiàn)批量更改文件名稱大小寫或擴展名

    C#實現(xiàn)批量更改文件名稱大小寫或擴展名

    這篇文章主要為大家詳細介紹了如何利用C#實現(xiàn)批量更改文件名稱大小寫或擴展名的功能,文中的示例代碼講解詳細,對我們學習C#有一定的幫助,感興趣的小伙伴可以跟隨小編一起了解一下
    2022-12-12
  • 一篇文章教會你用Unity制作網格地圖生成組件

    一篇文章教會你用Unity制作網格地圖生成組件

    網格地圖這個功能在策略型游戲中應用比較廣泛,基本情況下會將地圖分割成正方形網格或者六邊形網格,這篇文章主要給大家介紹了如何通過一篇文章學會用Unity制作網格地圖生成組件的相關資料,需要的朋友可以參考下
    2021-08-08
  • C#利用雪花算法實現(xiàn)生成ID工具類

    C#利用雪花算法實現(xiàn)生成ID工具類

    雪花算法表示生成的ID如雪花般獨一無二,該算法源自Twitter,主要用于解決分布式系統(tǒng)的唯一Id生成問題,本文主要介紹了C#如何利用利用雪花算法實現(xiàn)生成ID,需要的可以參考下
    2023-12-12
  • c# 兩種發(fā)送郵件的方法

    c# 兩種發(fā)送郵件的方法

    這篇文章主要介紹了c# 兩種發(fā)送郵件的方法,幫助大家更好的理解和學習使用c#,感興趣的朋友可以了解下
    2021-04-04
  • C#之關于Base64簡單加密與解密方式

    C#之關于Base64簡單加密與解密方式

    這篇文章主要介紹了C#之關于Base64簡單加密與解密方式,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2023-06-06
  • 詳解WPF中的隧道路由和冒泡路由事件

    詳解WPF中的隧道路由和冒泡路由事件

    這篇文章主要介紹了WPF中的隧道路由和冒泡路由事件的相關資料,幫助大家更好的理解和學習使用c#的wpf,感興趣的朋友可以了解下
    2021-04-04
  • C++中const的實現(xiàn)細節(jié)介紹(C,C#同理)

    C++中const的實現(xiàn)細節(jié)介紹(C,C#同理)

    本篇文章主要是對C++中const的實現(xiàn)細節(jié)進行了詳細的介紹,需要的朋友可以過來參考下,希望對大家有所幫助
    2014-01-01
  • 說說C#的async和await的具體用法

    說說C#的async和await的具體用法

    本篇文章主要介紹了說說C#的async和await的具體用法,小編覺得挺不錯的,現(xiàn)在分享給大家,也給大家做個參考。一起跟隨小編過來看看吧
    2017-09-09
  • C#圖像處理之圖像平移的方法

    C#圖像處理之圖像平移的方法

    這篇文章主要介紹了C#圖像處理之圖像平移的方法,涉及C#操作圖形實現(xiàn)平移的相關技巧,需要的朋友可以參考下
    2015-04-04
  • C#簡單聊天室雛形

    C#簡單聊天室雛形

    這篇文章主要為大家詳細介紹了C#簡單聊天室雛形,文中示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2022-02-02

最新評論