任意波形編輯軟件中手動(dòng)任意繪制功能的設計
作為一種特殊的信號源,任意波形發(fā)生器越來(lái)越廣泛地應用于各個(gè)領(lǐng)域。它不僅具有產(chǎn)生常規波形的能力,而且可以仿真實(shí)際測試中需要的任意波形。手動(dòng)繪制是任意波形發(fā)生器的一項特殊功能,它是在給定的電腦屏幕上,按照用戶(hù)的需求,拖動(dòng)鼠標繪制需要的波形形狀。這里介紹了一種采用虛擬儀器進(jìn)行任意波形手動(dòng)繪制功能軟件的設計方法。
本文引用地址:http://dyxdggzs.com/article/195839.htm
l 手動(dòng)任意繪制功能描述及難點(diǎn)分析
手動(dòng)任意繪制功能包括波形參數信息、波形示意圖、狀態(tài)信息以及系統設置信息等。手動(dòng)任意繪制波形功能也包括使用鼠標繪制波形,以及在此基礎上對波形進(jìn)行各種修改,包括替代、翻轉、重新繪制、插入等。此外波形的顏色和點(diǎn)數可以根據用戶(hù)的需求進(jìn)行設置,同時(shí)要求波形能夠實(shí)時(shí)顯示。該軟件的邏輯關(guān)系和數據結構較為復雜,設計中需要考慮以下幾方面的問(wèn)題:
(1)由于是手動(dòng)任意繪制,在繪制波形的過(guò)程中可能發(fā)生很多情況,因此需要包括對各種情況的處理。例如來(lái)回拖動(dòng)鼠標,鼠標拖動(dòng)越界等。在繪制好波形后,對波形進(jìn)行各樣的修改也是設計的一個(gè)難點(diǎn)。
(2)如何獲取離散點(diǎn)的坐標值,采用何種插值處理計算離散點(diǎn)之間的坐標值使得波形更加平滑也成為設計需要重點(diǎn)考慮的一個(gè)方面。
(3)由于波形的點(diǎn)數可以很大,在波形的修改過(guò)程中可能要對數據進(jìn)行備份,因此也需要考慮到數據的存儲結構,保障整個(gè)軟件的速度和效率。
(4)軟件應具有良好的移植性,應考慮用對象編程的思想對軟件進(jìn)行整體的一個(gè)架構設計。
2 總體設計流程圖
手動(dòng)繪制是波形生成方法中最直觀(guān)、最方便的方法。它同時(shí)也體現了任意波形編輯過(guò)程中的“任意性”。在設計中,選用LabWindows/CVI做為軟件開(kāi)發(fā)平臺。具體操作時(shí),用戶(hù)將鼠標移動(dòng)到需要的起始位置,然后按下鼠標不放,根據需要的波形形狀拖動(dòng)鼠標在波形顯示區移動(dòng),當到達合適的位置時(shí),放開(kāi)鼠標,則一次繪制過(guò)程完成。在整個(gè)過(guò)程中首先需要確定接收什么樣的信號觸發(fā)繪制波形事件發(fā)生,繪制波形也必須被限制在特定的區域內,如若超出繪圖區域需做出相應處理;波形的點(diǎn)數可以根據用戶(hù)的需要自行選擇,如若不選擇則默認為65 536個(gè)點(diǎn),這也是設計的最大波形點(diǎn)數。手動(dòng)任意繪制可能發(fā)生各種各樣的情況,比如鼠標可以前后拖動(dòng),因此需要對這樣的情況做出相應的處理,即對鼠標拖動(dòng)過(guò)程中的有效值進(jìn)行存儲。由于涉及到波形的修改,也需要對波形的部分存儲值進(jìn)行更新。在整個(gè)繪制過(guò)程中鼠標連續操作,需要采集到各個(gè)離散的點(diǎn),然后進(jìn)行插值處理,做到整個(gè)波形比較平滑。
整個(gè)設計主要由監測模塊、處理模塊和顯示模塊3部分組成。監測模塊主要完成對鼠標左鍵的監測,設定波形數據的初始值,對其他模塊進(jìn)行初始化,并啟動(dòng)采集離散點(diǎn)時(shí)鐘,每隔2 ms進(jìn)行一次采點(diǎn);處理數據主要包括4個(gè)步驟:獲取當前數據并查看是否有效;根據有效值做線(xiàn)性插值處理使得波形平滑;存儲當前數據;實(shí)時(shí)顯示鼠標的當前坐標。顯示模塊主要完成波形顏色和顯示點(diǎn)數的設置,并對波形做實(shí)時(shí)顯示。圖1即為總體設計流程圖。
3 具體實(shí)現
3.1 手動(dòng)任意繪制波形具體實(shí)現
(1)在手動(dòng)繪制時(shí),鼠標左鍵一直按下可以有兩個(gè)操作,一是繪制任意波形;二是拉動(dòng)滑塊,此時(shí)要判斷是拉動(dòng)滑塊還是繪波形,這時(shí)筆者采用判斷標志變量的方法解決此問(wèn)題。
(2)由于鼠標是連續操作,因此根據需要使用筆者選用定時(shí)函數,每隔一定的時(shí)間(2 ms)被觸發(fā)1次,每次執行函數采集1個(gè)離散的點(diǎn),即獲取當前光標處的橫縱坐標,這樣就得到了一系列的離散點(diǎn),相鄰離散點(diǎn)之前的間隔是不等的,這與用戶(hù)拖動(dòng)鼠標的速度有關(guān)。于是還有許多波形點(diǎn)數沒(méi)有賦值,這樣就要在相鄰的離散點(diǎn)之間插值計算出那些空缺的幅值??紤]到兩個(gè)相鄰點(diǎn)之間的距離比較小,于是可以采用線(xiàn)性插值,插值計算出來(lái)的波形是比較光滑的。
(3)正如難點(diǎn)分析中講到,手動(dòng)任意繪制可能發(fā)生的情況很多,用戶(hù)可以從前向后繪制波形也可以從后向前繪制波形,甚至可以重復繪制。而且,在繪制過(guò)程中還可能超出當前的繪圖范圍,因此采用只有當鼠標位置在波形內部時(shí)才采集當前坐標點(diǎn),超出波形范圍則取最大值的方法。再者,對于繪制中的方向及重復繪制問(wèn)題,采用取兩點(diǎn)之間的絕對值解決,然后再進(jìn)行線(xiàn)性插值并計算兩點(diǎn)之間的其他各點(diǎn)的幅值,最后對波形各點(diǎn)相應值進(jìn)行存儲更新和坐標映射。
評論