<meter id="pryje"><nav id="pryje"><delect id="pryje"></delect></nav></meter>
          <label id="pryje"></label>

          新聞中心

          EEPW首頁 > 嵌入式系統(tǒng) > 設(shè)計應用 > 利用Python語言實現(xiàn)實驗室自動化

          利用Python語言實現(xiàn)實驗室自動化

          作者: 時間:2017-03-23 來源:電子產(chǎn)品世界 收藏

            作為一名系統(tǒng)和應用工程師,得益于自動化儀器和軟件,我已經(jīng)節(jié)省了不計其數(shù)的日日夜夜;例如,這是一款系統(tǒng)設(shè)計平臺和開發(fā)環(huán)境,支持可視化編程語言。支持用戶利用友好的圖形用戶界面(GUI)構(gòu)建應用程序。該平臺帶有多個庫和模塊,使其能夠與儀器通信,所以可用于實驗室自動化。作為用戶,我已經(jīng)使用該工具構(gòu)建了多款應用程序,但在過去幾年中,我已經(jīng)開始逐步將其淘汰,代之以語言(見側(cè)欄:“是什么以及如何使用?”)。

          本文引用地址:http://www.ex-cimer.com/article/201703/345661.htm

            為了理解其中緣由,我們首先了解一下相對于現(xiàn)有替代語言的主要優(yōu)勢,以及討論Python應用程序的工作實例。表達Python方便和強大之處的最佳方式是介紹一個完整、可工作的Python自動化腳本,例如我用來實現(xiàn)穩(wěn)壓器(VR)負載調(diào)節(jié)曲線(負載調(diào)節(jié)是指輸出電壓隨輸出電流(負載)增大而發(fā)生的變化)自動測量的腳本。

            這些穩(wěn)壓器分為兩類:零下垂穩(wěn)壓器設(shè)計的輸出電阻為零;因此,輸出電壓設(shè)置點不應隨輸出電流增大而變化。相比較而言,下垂穩(wěn)壓器具有“載重線”,意味著被設(shè)計成具有特定的等效輸出電阻。本例中所用穩(wěn)壓器的零電流輸出電壓為1 V,設(shè)定的載重線為2.5 mΩ。

          圖1. 測量配置

            在圖1所示的試驗配置中,使用Chroma 63201電子負載施加負載電流(VR輸出電流)。通過采集經(jīng)過校準的4 mΩ短路器上的電壓,測得輸出電流。利用Agilent 34970A數(shù)字采集器(DAQ)采集電壓和電流,DAQ和電子負載均通過GPIB連接至計算機。我們測量的目的是證明:在一定輸出電流范圍下,輸出電壓在技術(shù)指標范圍之內(nèi);圖2所示為應用程序的流程圖。

          圖2. 應用程序流程圖

            從基本代碼結(jié)構(gòu)開始

            以下是自動化腳本代碼的第一部分。Python語言中,注釋用#表示:

            第1至3行引用庫,其中包含隨后代碼中使用的方法:

            ?Numpy是用于科學計算的封裝庫。本例中,Numpy用于產(chǎn)生輸出電流值的數(shù)組。

            ?Pandas (用于數(shù)據(jù)處理和分析的庫)創(chuàng)建一個功能強大的數(shù)據(jù)結(jié)構(gòu),以儲存我們的測量結(jié)果。

            ?Visa是PyVISA庫,用來控制我們的儀器。

            ?Time是一個非常方便的庫,用于產(chǎn)生某些時間延遲。

            注意,引用的Numpy和Pandas庫被重命名為np和pd,以保持代碼整潔。本文中提及的所有庫要么已經(jīng)隨Python 安裝包提供,要么也很容易從在線軟件庫中安裝。

            第4至5行創(chuàng)建我們用來訪問Chroma電子負載和Agilent DAQ的對象。這正是PyVISA的作用:我們只需調(diào)用instrument方法,并提供表示通信接口的字符串(GPIB)以及儀器在總線上的地址。

            第6行創(chuàng)建results數(shù)據(jù)框(dataframe),用來儲存測量結(jié)果。數(shù)據(jù)框是一種二維標簽數(shù)據(jù)結(jié)構(gòu),各列的數(shù)據(jù)類型可以不同。使用數(shù)據(jù)框而不使用數(shù)組,允許我們通過容易記憶的字符串而不是數(shù)字來引用列,以及在數(shù)據(jù)本身中混合數(shù)字和文本。

            第7行創(chuàng)建一個實數(shù)數(shù)組,從0到20,步長為2。這些數(shù)字表示以安培為單位的輸出電流值,在這些電流點測量VOUT。

            第8行用于構(gòu)建“for”循環(huán)。注意,語法很容易理解:每次執(zhí)行循環(huán)時,創(chuàng)建一個load 變量,其值等于loads數(shù)組的新元素。當使用了數(shù)組的全部元素時,循環(huán)結(jié)束。有意思的是,Python利用縮進定義代碼的層次結(jié)構(gòu),而不依賴于任何類型的括號。這樣能夠保持代碼的整潔和易讀性,非常有用。

            既然我們已經(jīng)定義了主循環(huán),就需要告訴儀器設(shè)置電流,然后讀取電壓,并保存結(jié)果。

            儀器通信及保存數(shù)據(jù)

            我們接下來看看第二部分的代碼:

            第9至10行配置相應的負載電流并打開負載。只需要使用讀/寫方法,并且知道儀器接受的命令串(可查閱儀器手冊),即可通過GPIB接口進行通信。與其他編程語言類似,%.2f為占位符,在實際運行時用變量load的值代替。也表示我們希望數(shù)據(jù)表示為帶兩位小數(shù)的實數(shù)。第11行產(chǎn)生1秒延遲,這對于確保儀器和電路達到穩(wěn)態(tài)條件非常有用。

            第12行創(chuàng)建一個空對象(在Python中稱為字典),用于暫存執(zhí)行一次循環(huán)的結(jié)果。

            第13至16行用來測量輸出電壓和電流。第一條命令告訴儀器我們想要做什么(測量直流電壓,采用自動變比)以及對應的采集通道。分別在通道101和102采集輸出電壓和電流。第二條命令讀取返回的結(jié)果并將其儲存在temp中。數(shù)據(jù)以字符串的形式返回,所以必須利用float函數(shù)將其轉(zhuǎn)換為實數(shù)。此外,由于DAQ測量的是電壓,我們需要將讀數(shù)與短路器電阻(0.004 Ω)相除,得到正確的電流值。

            看看使用Python和Pandas有條理地保存數(shù)據(jù)是多么簡單:temp字典中的字段無需提前定義,并且使用具有含義的字符串進行訪問。無需記憶列號與數(shù)據(jù)之間的關(guān)系,而如果使用數(shù)組存儲數(shù)據(jù)的話則必須這么做。

            在第17行中,我們將字段附加到results數(shù)據(jù)框。注意,results也不需要進行初始化;每次附加一個新行時,將增加新字段至數(shù)據(jù)框。

            第18行可選,但在終端上打印當前電壓和電流值非常有用,尤其對于長時間測量,可以作為確認應用程序仍然在運行的途徑,以及了解執(zhí)行到了什么程度。

            在第19至20行,關(guān)閉負載,將數(shù)據(jù)保存到硬盤。對于后者,每個數(shù)據(jù)框?qū)ο蠖际褂靡环N內(nèi)置方法將數(shù)據(jù)保存到CSV文件。


          上一頁 1 2 下一頁

          關(guān)鍵詞: Python LabVIEW

          評論


          相關(guān)推薦

          技術(shù)專區(qū)

          關(guān)閉
          看屁屁www成人影院,亚洲人妻成人图片,亚洲精品成人午夜在线,日韩在线 欧美成人 (function(){ var bp = document.createElement('script'); var curProtocol = window.location.protocol.split(':')[0]; if (curProtocol === 'https') { bp.src = 'https://zz.bdstatic.com/linksubmit/push.js'; } else { bp.src = 'http://push.zhanzhang.baidu.com/push.js'; } var s = document.getElementsByTagName("script")[0]; s.parentNode.insertBefore(bp, s); })();