基于LabVIEW的SFP光模塊測試平臺(tái)的設(shè)計(jì)與實(shí)現(xiàn)
掃描二維碼
隨時(shí)隨地手機(jī)看文章
摘 要: 介紹了一種利用LabVIEW構(gòu)建SFP(Small Form-factor Pluggable)光模塊測試平臺(tái)的方法。測試平臺(tái)通過讀寫計(jì)算機(jī)并口來映射地址上的數(shù)據(jù),控制并口端口的邏輯電平實(shí)現(xiàn)計(jì)算機(jī)并口模擬I2C總線。計(jì)算機(jī)利用模擬的I2C總線與SFP光模塊實(shí)現(xiàn)通信。分析了生產(chǎn)者/消費(fèi)者結(jié)構(gòu)隊(duì)列狀態(tài)機(jī)并用于設(shè)計(jì)中,該設(shè)計(jì)模式可以及時(shí)響應(yīng)前面板動(dòng)作或外部事件,并且使得狀態(tài)機(jī)的狀態(tài)變換更加靈活多變。
關(guān)鍵詞: SFP光模塊; 生產(chǎn)者/消費(fèi)者結(jié)構(gòu)隊(duì)列狀態(tài)機(jī); 計(jì)算機(jī)并口模擬I2C總線
隨著近幾年光通信的迅速發(fā)展,光通信接入網(wǎng)對實(shí)現(xiàn)光電、電光轉(zhuǎn)換的光收發(fā)模塊的要求越來越高,光收發(fā)模塊的測試也越來越復(fù)雜。早期一般使用Visual Basic、Visual C++開發(fā)測試軟件,存在開發(fā)周期長、測試效率低等問題,本文提出了使用LabVIEW虛擬儀器技術(shù)來完成測試工作的方法,解決了測試成本高、測試效率低、測試系統(tǒng)松散等問題,同時(shí)它還具備遠(yuǎn)程測試以及儀器定制或自制等特點(diǎn)。虛擬儀器技術(shù)已經(jīng)深遠(yuǎn)地影響著測試測量領(lǐng)域,是企業(yè)和科研單位的測試工作的重要解決方案之一。本文正是利用此項(xiàng)技術(shù)解決了SFP光模塊測試平臺(tái)開發(fā)的幾個(gè)關(guān)鍵問題。
1 SFP光模塊測試軟件的設(shè)計(jì)
1.1軟件結(jié)構(gòu)
軟件由四個(gè)界面構(gòu)成,實(shí)時(shí)監(jiān)控界面、閾值設(shè)置界面、校準(zhǔn)界面和光模塊信息設(shè)置界面。實(shí)時(shí)監(jiān)控界面是軟件的主界面,它顯示數(shù)字診斷功能[1]中的五個(gè)模擬量與其Alarm和Warning標(biāo)志;閾值設(shè)置界面的功能是設(shè)定Alarm與Warning閾值,當(dāng)實(shí)時(shí)監(jiān)控值不在閾值內(nèi)時(shí)會(huì)出現(xiàn)工作異常警示;校準(zhǔn)界面主要是解決數(shù)據(jù)漂移,從而保證測得數(shù)據(jù)準(zhǔn)確;模塊信息設(shè)置界面是完成光模塊在出廠前信息設(shè)置。軟件運(yùn)行的過程中用到的數(shù)據(jù)庫是由Access數(shù)據(jù)庫構(gòu)成。如圖1所示為軟件結(jié)構(gòu)圖。
1.2計(jì)算機(jī)并口模擬I2C總線
I2C總線由四種信號(hào)組成:開始信號(hào)、停止信號(hào)、響應(yīng)信號(hào)和數(shù)據(jù)發(fā)送。在計(jì)算機(jī)并口產(chǎn)生這些信號(hào)就要對數(shù)據(jù)地址、狀態(tài)地址和控制地址進(jìn)行程序設(shè)計(jì)和控制。在LPT1端口中,它們對應(yīng)的地址分別為0x378、0x379和0x37A。計(jì)算機(jī)并口中的8個(gè)數(shù)據(jù)端口分別對應(yīng)0x378中的B7~B0;5個(gè)狀態(tài)端口分別對應(yīng)0x379中的B7~B3;4個(gè)控制端口分別對應(yīng)0x37A中的B3~B0。如果在以上地址的某一位上寫1,計(jì)算機(jī)并口的對應(yīng)端口就會(huì)產(chǎn)生邏輯電平高。I2C總線的SDA和SCL分別需要并口的兩個(gè)端口模擬,這是因?yàn)橛?jì)算機(jī)并口的特性,對地址中的數(shù)據(jù)的操作要么一直讀操作要么一直寫操作。
對LPT1端口地址操作要使用LabVIEW函數(shù)庫中的Out Port函數(shù)和In Port函數(shù)。Out Port函數(shù)和In Port函數(shù)是在指定的16位I/O端口地址讀取和寫入帶符號(hào)的整數(shù)。讀操作要先利用In Port函數(shù)讀取LPT1端口地址上的整數(shù)數(shù)據(jù),再轉(zhuǎn)化為無符號(hào)數(shù)據(jù)并求出特定位的布爾量,最后得到該位對應(yīng)端口的邏輯電平。寫操作就是先利用In Port函數(shù)讀取LPT1端口地址上的整數(shù)數(shù)據(jù),再轉(zhuǎn)化為無符號(hào)數(shù)據(jù)并修改其中某一位的值,最后利用Out Port函數(shù)把修改后的數(shù)據(jù)轉(zhuǎn)化為整數(shù)數(shù)據(jù)并寫入LPT1端口地址,從而改變對應(yīng)端口的邏輯電平。
I2C總線的四種信號(hào)通過SDA和SCL的組合形式如下:(1)開始信號(hào):在SCL高電平期間,SDA由高變?yōu)榈?,將產(chǎn)生一個(gè)開始信號(hào);(2)停止信號(hào):在SCL高電平期間,SDA由低變高,將產(chǎn)生一個(gè)停止信號(hào);(3)應(yīng)答信號(hào):傳輸一個(gè)字節(jié)后的第9個(gè)時(shí)鐘,若從設(shè)備把SDA拉低,表明有應(yīng)答信號(hào),反之則無;(4)數(shù)據(jù)傳輸:數(shù)據(jù)傳輸過程中,數(shù)據(jù)的改變都必須在SCL低電平期間,在SCL為高電平期間必須保持SDA信號(hào)的穩(wěn)定[2]。
按照時(shí)序要求依次可以編寫出I2C start、I2C send、I2C ack和I2C stop四種I2C總線信號(hào)的vi,其中I2C send這個(gè)vi既能發(fā)送地址又能發(fā)送數(shù)據(jù)。最后由這些vi組成如圖2所示的完整I2C總線數(shù)據(jù)傳輸。
1.3 生產(chǎn)者/消費(fèi)者結(jié)構(gòu)隊(duì)列狀態(tài)機(jī)
設(shè)計(jì)模式是在解決問題的過程中,由一些良好思路的經(jīng)驗(yàn)集成的。在LabVIEW中,它包括結(jié)構(gòu)、函數(shù)、控件和錯(cuò)誤處理的布局,它形成了一個(gè)通用的結(jié)構(gòu)來完成一些常見的任務(wù)。設(shè)計(jì)模式可實(shí)現(xiàn)模塊重用,并提高軟件生產(chǎn)效率和質(zhì)量[3]。
生產(chǎn)者/消費(fèi)者結(jié)構(gòu)是一種常用的設(shè)計(jì)模式,它主要用于數(shù)據(jù)采集系統(tǒng)。一般的數(shù)據(jù)采集系統(tǒng)包括數(shù)據(jù)采集、數(shù)據(jù)分析和結(jié)果顯示三個(gè)步驟。如果將這三個(gè)步驟按照常規(guī)的順序執(zhí)行,則數(shù)據(jù)分析導(dǎo)致的時(shí)間延遲會(huì)增大數(shù)據(jù)采集的周期。采用生產(chǎn)者/消費(fèi)者結(jié)構(gòu)的數(shù)據(jù)采集系統(tǒng),它通過并行的方式實(shí)現(xiàn)多個(gè)循環(huán),可以很好地解決這一問題。一個(gè)循環(huán)不斷地采集數(shù)據(jù)(生產(chǎn)者),另一個(gè)循環(huán)不斷地處理數(shù)據(jù)(消費(fèi)者),這兩個(gè)循環(huán)互相通信,但又不產(chǎn)生干涉。
隊(duì)列狀態(tài)機(jī)也是一種常用的設(shè)計(jì)模式,它對經(jīng)典狀態(tài)機(jī)做了很大的改進(jìn)。在經(jīng)典狀態(tài)機(jī)中,移位寄存器的狀態(tài)轉(zhuǎn)移方式受限于每個(gè)循環(huán)間隔內(nèi)一個(gè)指定新狀態(tài)或應(yīng)用程序的狀態(tài)。而隊(duì)列狀態(tài)機(jī)則通過LabVIEW的隊(duì)列結(jié)構(gòu)緩存一個(gè)隊(duì)列的多狀態(tài),使得應(yīng)用程序的任何狀態(tài)都可以通過調(diào)用Enqueue Element函數(shù)在該隊(duì)列的后端增加任意數(shù)量的新狀態(tài),這類似于先進(jìn)先出緩沖器。
生產(chǎn)者/消費(fèi)者結(jié)構(gòu)隊(duì)列狀態(tài)機(jī)最早是由Anthony Lukindo提出和改進(jìn),它結(jié)合以上兩種設(shè)計(jì)模式優(yōu)點(diǎn),其結(jié)構(gòu)示意圖如圖3所示。
從圖中可以看出,該設(shè)計(jì)模式由四部分組成:隊(duì)列引用、事件循環(huán)、主循環(huán)和并行子vi。事件循環(huán)和并行子vi為生產(chǎn)者,主循環(huán)是消費(fèi)者,生產(chǎn)者和消費(fèi)者之間的消息與數(shù)據(jù)的傳遞是通過隊(duì)列引用來實(shí)現(xiàn)的。事件循環(huán)由Event結(jié)構(gòu)和While循環(huán)組成。主循環(huán)由Case結(jié)構(gòu)和While循環(huán)組成,其中Case結(jié)構(gòu)有兩個(gè),分別是主Case結(jié)構(gòu)和錯(cuò)誤Case結(jié)構(gòu)。隊(duì)列引用是由LabVIEW中的隊(duì)列操作中的函數(shù)組成,其中最常用的函數(shù)為Obtain Queue、Enqueue Element、Dequeue Element和Release Queue等。圖中的虛線是指并行子vi可以不通過隊(duì)列引用而和主循環(huán)進(jìn)行連接。
生產(chǎn)者/消費(fèi)者結(jié)構(gòu)隊(duì)列狀態(tài)機(jī)的實(shí)現(xiàn)如下:Obtain Queue函數(shù)和Enqueue Element函數(shù)在While循環(huán)左側(cè)初始化隊(duì)列。枚舉類型定義控件端子連接到Obtain Queue函數(shù)的數(shù)據(jù)類型端子,這樣就可以指定隊(duì)列的數(shù)據(jù)類型。枚舉常量由枚舉類型創(chuàng)建,并連線到Enqueue Element函數(shù)的端子。Initialize狀態(tài)是添加到隊(duì)列中的第一項(xiàng),它是狀態(tài)機(jī)執(zhí)行的第一個(gè)狀態(tài)。Dequeue Element函數(shù)位于主Case結(jié)構(gòu)之外的錯(cuò)誤Case結(jié)構(gòu)的NO Error事例中。如果在錯(cuò)誤簇中沒有出現(xiàn)錯(cuò)誤,則下一狀態(tài)就會(huì)從隊(duì)列移出,并傳送到主Case結(jié)構(gòu)的選擇器端子;如果發(fā)生錯(cuò)誤,則有General Error Handle VI來報(bào)告錯(cuò)誤,并且執(zhí)行Shutdown狀態(tài)。Case結(jié)構(gòu)的每個(gè)事例中,事件循環(huán)和并行子vi都可以使用Enqueue Element函數(shù)來增加其他的狀態(tài)。此外,為了能夠立即執(zhí)行,可以使用Enqueue Element At Opposite End函數(shù)在隊(duì)列的前端增加一個(gè)狀態(tài)。這使得應(yīng)用程序能夠及時(shí)響應(yīng)高優(yōu)先級的操作或事件。當(dāng)用戶要退出應(yīng)用程序時(shí),必須利用Release Queue函數(shù)釋放隊(duì)列引用,同時(shí)釋放隊(duì)列所占用的內(nèi)存空間。
當(dāng)隊(duì)列中需要傳遞狀態(tài)和數(shù)據(jù)時(shí),隊(duì)列元素?cái)?shù)據(jù)類型就需要由一個(gè)簇組成,這個(gè)簇包括一個(gè)與變體打包到一起的枚舉類型定義。通常,該枚舉類型包含了事例選擇器中需要的狀態(tài)。變體用來將數(shù)據(jù)從時(shí)間循環(huán)或并行子vi傳遞給主循環(huán),這些數(shù)據(jù)的傳遞體現(xiàn)了生產(chǎn)者/消費(fèi)者結(jié)構(gòu)。同時(shí),這個(gè)變體可以是多種類型的數(shù)據(jù),但是必須為其中每個(gè)成員指定一種數(shù)據(jù)類型。
SFP光模塊測試程序首先初始化隊(duì)列引用和主界面中的控件,然后進(jìn)入檢測光模塊。如果檢測到光模塊的插入,則主程序會(huì)讀取數(shù)字診斷功能中電壓、溫度和偏置電流等。在大部分時(shí)間里,主程序都是在輪詢地讀取這些數(shù)據(jù)。如果用戶在前面板有操作,此時(shí)事件循環(huán)將利用Flush Queue函數(shù)把隊(duì)列清空,然后加載下幾個(gè)狀態(tài),及時(shí)地響應(yīng)用戶的操作并且最后回到讀取數(shù)字診斷功能中模擬量。
2 測試與驗(yàn)證
2.1測試環(huán)境
測試平臺(tái)的硬件包括計(jì)算機(jī)、測試板、并口線、電源以及待測光模塊。首先在計(jì)算機(jī)中安裝本文開發(fā)的測試軟件,其次利用并口線把計(jì)算機(jī)和測試板連接起來,再次把待測光模塊插入到測試版中,并加載電源,最后打開測試軟件進(jìn)行測試。
連接到I2C總線的器件輸出端要是漏極開路或集電極開路才能執(zhí)行傳輸?shù)墓δ?。因?yàn)橛?jì)算機(jī)并口不滿足這兩種結(jié)構(gòu),所以本設(shè)計(jì)中在并口外接2N3906使得SDA和SCL滿足集電極開路結(jié)構(gòu)。
2.2 I2C總線驗(yàn)證
為了保證光模塊測試平臺(tái)穩(wěn)定地工作,必須測試I2C總線通信的穩(wěn)定性。利用 I2C總線對EEPROM進(jìn)行連續(xù)讀或者連續(xù)寫。在圖4中,C1和C2信號(hào)是對Z1和Z2信號(hào)框內(nèi)部分的放大,這部分是主設(shè)備向從設(shè)備寫數(shù)據(jù)。
主設(shè)備首先發(fā)送器件地址0xA0,在第9個(gè)時(shí)鐘,從設(shè)備給出了一個(gè)拉低SDA的應(yīng)答信號(hào)。主設(shè)備然后發(fā)送寄存器地址0x00,同樣得到了應(yīng)答信號(hào)。最后發(fā)送要寫入的數(shù)據(jù)0x55。圖中的兩個(gè)時(shí)間標(biāo)尺測量出寫入數(shù)據(jù)操作距離下一次操作的時(shí)間,這個(gè)時(shí)間要大于等于5 ms。重復(fù)此讀寫過程10 000次,沒有錯(cuò)誤則證明I2C總線非常穩(wěn)定。
2.3 光模塊測試軟件的驗(yàn)證
如圖5所示,是對一個(gè)Maxim DS1856方案的光收發(fā)模塊的檢測結(jié)果。
其中5個(gè)模擬量的監(jiān)控值直接反映光模塊的工作狀態(tài)。表1是DS1856方案實(shí)測值與軟件監(jiān)控值對比。
在SFF-8472協(xié)議中規(guī)定了每個(gè)模擬量的精度范圍:溫度誤差在±3℃之內(nèi);電壓誤差不超過廠家標(biāo)稱值的3%;偏置電流誤差不超過廠家標(biāo)稱值的10%;發(fā)射功率誤差在±3 dBm之內(nèi);接收功率在±3 dBm之內(nèi)。通過表1結(jié)果顯示,此測試軟件滿足SFF-8472協(xié)議規(guī)定的誤差范圍。
本文使用LabVIEW設(shè)計(jì)實(shí)現(xiàn)了針對SFP光收發(fā)模塊的測試平臺(tái)。重點(diǎn)介紹了測試軟件與SFP光模塊的I2C總線通信的實(shí)現(xiàn),論述了生產(chǎn)者/消費(fèi)者結(jié)構(gòu)隊(duì)列狀態(tài)機(jī)設(shè)計(jì)模式,提供了對該設(shè)計(jì)模式的具體實(shí)現(xiàn)方法,并把它應(yīng)用在SFP光模塊測試軟件。該測試平臺(tái)已經(jīng)應(yīng)用到企業(yè)的實(shí)際生產(chǎn)過程中,減少了對SFP光模塊測試工作量,提高了測試效率,并且保證了所需的測試精度,具有一定的工程應(yīng)用價(jià)值。
參考文獻(xiàn)
[1] SFF-8472 specification for diagnostic monitoring interface for Optical Transceivers Rev 10.4[S]. 2009-01.
[2] The I2C-Bus specification version 2.1[S]. 2000-01.
[3] Blume, Peter A. The LabVIEW style book[M]. Prentice Hall, 2007-03.
[4] 程社成.帶數(shù)字診斷功能的小封裝光模塊研究[D].武漢:武漢理工大學(xué),2006.