2023年3月28日 星期二

Rohde&Schwarz FSV Signal Analyzer control by C#

在之前文章 OTA天線測試系統中, 用到R&S的FSV Signal Analyzer. 最近又要開始OTA的場型測試所以就用C#寫一個比較容易控制的介面如下圖

圖一: SA控制介面

在設計控制儀器界面的時候, 大家必須先將其使用手冊研讀清楚. 能夠自己手動操作出結果就能夠用自動控制的方式呈現這點非常重要. 再來就必須將remote control 的指令寫入介面的控制裡面.

控制介面分為三部分: 連接, 設定儀器和讀取資料, 這樣的設計對Spectrum Analyzer 來說應該都適用

圖二: 操作示範圖
圖三: SA實際畫面

實作影片 






2023年3月16日 星期四

可編程交流電源供應器61502之C#應用

PROGRAMMABLE AC POWER SOURCE MODEL 61502 From C# GUI Application

61502 可提供強大的使用功能,如電網干擾模擬,可編程輸出阻抗,QUAN方位的測量功能,合成波形與IEC標準測試軟件。因擁有以上特點使得61500系列適合應用于一般商業產品,電力電子,航空電子設備,軍事與IEC標準測試的開發和運用,并且從實驗桌上測試到大量生產單位皆可適用。
61502 提供用戶不同容量的單相輸出產品,從 500VA到4000VA。不論是在研發設計,產品驗證或量產測試等
61502系列產品使用的脈寬調變技術,使其能輸出多達6倍最大額定電流峰值的能力,使得61502系列成為測試浪涌電流的最佳選擇。
不僅提供純交流電壓應用,AC+DC模式還擴展功能提供直流偏移電壓的應用。61502系列運用先進的數字訊號處理技術(DSP),能夠提供高精度和瞬時電壓波形測量,如電壓均方根值,電流均方根值,實功率,功率因子,電流波峰因子以及量測多達40次的電流諧波成份。

因應上述測試需求規劃測試GUI
圖一: 測試設定畫面
圖二:測試主畫面


2023年3月13日 星期一

c# ping application

Ping 是 dos cmd 網絡實用程式,將訊號透過網絡傳送至另一部電腦,然後另一部電腦再將其訊號傳回。 這種訊號以毫秒(ms) 為量度單位,讓你知悉將數據封包由電腦傳輸至互聯網伺服器後再傳回所需的時間。 此量度值是指電腦與其伺服器之間的延遲。
在這一篇文章中  WIFI RvO TEST TOOL FROM C# 用到了ping的功能去察看跟DUT_AP的連線情況
圖一: Ping Function

public bool Ping(string nameOrAddress, string timeout)
    {
        bool pingable = false;
        int pingcnt = 0;

        try
        {
            string pingrst;
            Process p = new Process();
            p.StartInfo.FileName = "C:\\Windows\\System32\\cmd.exe";
            p.StartInfo.UseShellExecute = false;
            p.StartInfo.RedirectStandardInput = true;
            p.StartInfo.RedirectStandardOutput = true;
            p.StartInfo.RedirectStandardError = true;
            p.StartInfo.CreateNoWindow = true;
            p.Start();
            p.StandardInput.WriteLine("ping -n 6 " + nameOrAddress + " -w " + timeout);
            p.StandardInput.WriteLine("exit");

            CommonData.pFindStr.Source = p.StandardOutput.ReadToEnd();

            if (CommonData.pFindStr.Source.IndexOf("TTL=") != -1)
            {
                pingcnt = SubstringCount(CommonData.pFindStr.Source, "TTL=");
                if (pingcnt > 2)
                {
                    CommonData.WriteMessage(CommonData.richtextbox, DateTime.Now.ToString() + CommonData.pFindStr.Source, "", Color.Blue, Color.Green);
                    pingrst = "連接";
                    CommonData.WriteMessage(CommonData.richtextbox, pingrst, pingcnt.ToString(), Color.Blue, Color.Green);
                    pingable = true;
                }
            }
            else if (CommonData.pFindStr.Source.IndexOf("Destination host unreachable.") != -1 || CommonData.pFindStr.Source.IndexOf("一般失敗") != -1)
            {
                //一般失敗
                this.GridData.WriteMessage(this.GridData._TPars.richtextbox, DateTime.Now.ToString() + CommonData.pFindStr.Source, "", Color.Blue, Color.Green);
                pingrst = "無法到達目的主機";
                this.GridData.WriteMessage(this.GridData._TPars.richtextbox, pingrst, "", Color.Blue, Color.Green);
            }
            else if (CommonData.pFindStr.Source.IndexOf("Request timed out.") != -1 || CommonData.pFindStr.Source.IndexOf("要求等候逾時") != -1)
            {
                //要求等候逾時
                this.GridData.WriteMessage(this.GridData._TPars.richtextbox, DateTime.Now.ToString() + CommonData.pFindStr.Source, "", Color.Blue, Color.Green);
                pingrst = "超時";
                this.GridData.WriteMessage(this.GridData._TPars.richtextbox, pingrst, "", Color.Blue, Color.Green);
            }
            else if (CommonData.pFindStr.Source.IndexOf("Unknown host") != -1)
            {
                this.GridData.WriteMessage(this.GridData._TPars.richtextbox, DateTime.Now.ToString() + CommonData.pFindStr.Source, "", Color.Blue, Color.Green);
                pingrst = "無法解析主機";
                this.GridData.WriteMessage(this.GridData._TPars.richtextbox, pingrst, "", Color.Blue, Color.Green);
            }
            p.Close();
        }
        catch (Exception e)
        {
            CommonData.WriteMessage(CommonData.richtextbox, e.Message, "", Color.Red, Color.Green);
        }
        return pingable;
    }

2023年3月2日 星期四

WIFI RvO TEST TOOL FROM C#

繼上篇c# Ixchariot throughput 測試文章後, 整合整個測試環境構成一個包含角度, 用衰減器

(LDA-908V 200~8000MHz SMA 90dB,0.1dB/Step USB Digital Attenuator)模擬距離的W-Fi測試系統

RvR(Range versus Rate), 以可程式衰減器模擬距離並配合量測系統,進而得到衰減值(距離)和Throughput之對應資料

RvO(Rate versus Orientation)以程式衰減器模擬距離並搭配轉檯,配合量測系統,進而得到衰減值(距離)及待測樣品角度對Throughput之對應資料

The Performance Measurement of Range versus Rate and Rate versus Orientation for Wi-Fi System

呈現待測物在各角度及不同衰減值(不同距離)Wi-Fi傳輸效能的表現.
圖一: 測試PC, 可程式衰減器, 隔離箱
圖二: 側面介面接口

待測物在不同角度的傳輸結果,也就是說,各角度涵蓋面越大,則代表待測物較不受到因不同擺放位置而影響無線網路傳輸效能。
圖三:隔離箱內部待測物, 轉台及陪測天線


測試程式規劃:
衰減器:可控制四個衰減器.依照start衰減值開始每個step衰減值end衰減值為一個Step角度迴圈
旋轉角度:start, end, step. 依照start角度開始, 每個step角度執行衰減值一迴圈到end角度

圖四: 測試角度, 衰減值設定
圖五:測試Tool執行畫面
圖六: RX測試數據雷達圖

圖七: TX測試數據雷達圖