freepeople性欧美熟妇, 色戒完整版无删减158分钟hd, 无码精品国产vα在线观看DVD, 丰满少妇伦精品无码专区在线观看,艾栗栗与纹身男宾馆3p50分钟,国产AV片在线观看,黑人与美女高潮,18岁女RAPPERDISSSUBS,国产手机在机看影片

正文內(nèi)容

基于網(wǎng)絡(luò)的虛擬儀器測試系統(tǒng)資料(編輯修改稿)

2025-04-21 12:46 本頁面
 

【文章內(nèi)容簡介】 給出提示信息返回操作界面給出提示信息失敗成功以上就是我的函數(shù)信號發(fā)生器的編程思想和設(shè)計思路。這是一個最基本的函數(shù)信號發(fā)生器模塊,具備基本的功能參數(shù)。有了界面和思路之后就可以進(jìn)行底下的編程操作了。 函數(shù)信號發(fā)生器的編程首先,需要能使函數(shù)信號發(fā)生器根據(jù)用戶的輸入來產(chǎn)生相應(yīng)的波形。我于是參看了33250A 80MHz的函數(shù)/任意波形發(fā)生器的電子資料以及網(wǎng)上關(guān)于該儀器的操作的SCPI指令。 就像前面所說的那樣,函數(shù)信號發(fā)生器是基于消息基,也就是說它具有自己的處理器來對用戶輸入的高級指令進(jìn)行解釋和判斷以及進(jìn)行執(zhí)行操作。譬如,如果希望產(chǎn)生一個正弦波,則輸入下面的語句既可:viPrintf(funcgen,function :shape sin\n)。就可以產(chǎn)生一個采用默認(rèn)頻率和幅值的正弦波了!而viPrintf()就是VISA庫中的格式化輸入輸出操作函數(shù),用來向儀器發(fā)送SCPI指令。在函數(shù)信號發(fā)生器的編程過程中,經(jīng)常需要用到這個函數(shù),還有格式化輸入函數(shù):viScanf()。在指令的測試過程中,也遇到了一些問題:如viPrintf(funcgen,func:shape tri。freq 2000。volt 2\n)。這條指令就有問題,只能顯示三角波,但是后面的參數(shù)就沒有根據(jù)我的指定來進(jìn)行顯示。后來才發(fā)現(xiàn),原來每一個指令后面加上回車符就可以正常的執(zhí)行了。譬如,下面一條語句:viQueryf(funcgen,AM:SOUR?,buf)。該語句的功能是查詢AM的調(diào)制源的類型并將查詢到的類型字符以%t的格式給buf。注意:該語句是沒有錯誤,但是好像就沒有起到預(yù)期的效果。而當(dāng)我在AM:SOUR?\n加上一個回車符后,就可以執(zhí)行正確了??梢钥闯龈袷交钍且曰剀嚪鳛橛|發(fā)命令的,只有\(zhòng)n才能使命令有效,舍去將視為字符串處理。(但程序本身并不提示錯誤)又如,產(chǎn)生象使用APPL命令的波形:Appl:sin freq,volt,dcoffset\n,當(dāng)使用其他函數(shù)產(chǎn)生時,如下:FUNC SIN\nFREQ freq\nVOLT volt\n…\n或是FUNC SIN\n。FREQ freq\n。VOLT volt\n?!璡n可以看出執(zhí)行指令都加上了回車符(對于象這樣的一串執(zhí)行指令,也可以在末尾加\n來執(zhí)行――只是需要使用分號來進(jìn)行隔開,用逗號和空格均不行)下面是復(fù)位按鈕的執(zhí)行代碼: 圖3-9原理是通過向儀器發(fā)送IDN的SCPI指令根據(jù)函數(shù)返回值來進(jìn)行判斷,并給出相關(guān)的信息提示用戶。除了SCPI命令外,還有IEEE ,兩種命令之間用分號隔開如下所示:RST。OUTP:LOAD INF\n 又如:TRIG:SOUR BUS。TRG\n連接多個SCPI命令時,使用分號和冒號(冒號表示不同的命令系統(tǒng))如:OUTP:LOAD 50。:APPL:RAMP注意:函數(shù)viPrintf()和viScanf()都是單向的傳送命令和數(shù)據(jù),而函數(shù)viQueryf()則是雙向的傳送數(shù)據(jù)和命令。在格式化命令中不允許有兩條如似的命令FREQ?\n VOLT?\n。在我的測試命令以及組合發(fā)送命令過程中,我遇到這樣的問題:Cstring m_sFreq,m_sVolt。 viQueryf(vi,Freq?\n,%t,m_sFreq)。 viQueryf(vi,Volt?\n,%t,m_sVolt)。SetDlgItemText(ID0,m_sFreq)。SetDlgItemText(ID1,m_sVolt)。如果以這種方式執(zhí)行的話,執(zhí)行的結(jié)果是m_sFreq和m_sVolt是同一個值,當(dāng)把語句改為如下的形式的時候就正常了:Cstring m_sFreq,m_sVolt。 viQueryf(vi,Freq?\n,%t,m_sFreq)。SetDlgItemText(ID0,m_sFreq)。viQueryf(vi,Volt?\n,%t,m_sVolt)。SetDlgItemText(ID1,m_sVolt)。這也表示SCPI查詢命令不允許執(zhí)行多個,只能一條一條的執(zhí)行,否則,最后的結(jié)果會是以最后一條查詢指令的結(jié)果。通過反復(fù)的測試之后,理解了SCPI命令的執(zhí)行的一些格式及語法之后,就開始我的編程。下面列出了函數(shù)信號發(fā)生器的部分執(zhí)行代碼://這是一個switch語句,對用戶的調(diào)制方式的判斷,其中nID_Select_Modul保存的是用//戶選擇的調(diào)制方式的ID。通過GetCheckedRadioButton()函數(shù)獲得。 switch(nID_Select_Modul)//對用戶通過單選按鈕選擇的調(diào)制參數(shù)的判斷 { case IDC_RADIO_BW://無調(diào)制情況 viPrintf(/*funcgen*/,OUTPut:LOAD %s\n,m_nResistance)。//輸出端的設(shè)置 viPrintf(/*funcgen*/,OUTPut:SYNC %s\n,m_nSignal)。//設(shè)置同步信號CheckWaveRadioButton()。//這是一個自己定義的函數(shù),對用戶的波形的選擇進(jìn)行判斷-將波形的字符串存儲在m_nBaseShape中,該函數(shù)的具體代碼將會在附錄中給出。//判斷用戶選擇的波形是否是方波,并通過函數(shù)viPrintf來進(jìn)行各種SCPI命令的執(zhí)行if(GetCheckedRadioButton(IDC_RADIO_SIN,IDC_RADIO_DC)==IDC_RADIO_FWAVE) { viPrintf(/*funcgen*/,FUNC %s\n,m_nBaseShape)。 viPrintf(/*funcgen*/,FREQ %f\n,m_nFreq)。 viPrintf(/*funcgen*/,VOLT %f\n,m_nAmpl)。 viPrintf(/*funcgen*/,VOLT:OFFS %f\n,m_nOffs)。 viPrintf(/*funcgen*/,FUNC:SQU:DCYC %f\n,m_nDcycle)。 }//判斷用戶選擇的是否是任意波 else if(GetCheckedRadioButton(IDC_RADIO_SIN,IDC_RADIO_DC)==IDC_RADIO_ARBI) {error=viPrintf(/*funcgen*/,APPL:USER %f,%f,%f\n,m_nFreq,m_nAmpl,m_nOffs)。 if(error!=VI_SUCCESS) {error_handler(/*funcgen*/,error)。 break。} viPrintf(/*funcgen*/,FUNC:USER%s\n,)。}else {error=viPrintf(/*funcgen*/,APPL:%s %f,%f,%f\n,m_nBaseShape,m_nFreq,m_nAmpl,m_nOffs)。//這里的參數(shù)需要用戶自己添加 if(error!=VI_SUCCESS) { error_handler(/*funcgen*/,error)。 break。}}MessageBox(Successfully!)。//給一個提示框--明示用戶的操作 break。 以上只是無調(diào)制情況下的輸出代碼,而調(diào)幅、調(diào)頻等的實現(xiàn)代碼將會在附錄給給出。 對儀器的編程中,首先是先打開跟資源管理器的會話,然后通過資源管理器會話來進(jìn)一步打開與某一臺儀器的會話(會話也就是與儀器進(jìn)行通訊,所有被使用的儀器都需要建立連接,并且都要調(diào)用VISA函數(shù)viOpenDefaultRM來打開資源管理器,這個函數(shù)會初始化VISA系統(tǒng),包括資源管理系統(tǒng);如果在沒有器件連接的情況下調(diào)用該函數(shù),則在有器件連接上時又進(jìn)行一次操作,則連接的器件是不被認(rèn)識的;你必須關(guān)閉所有的資源管理器會話,并重新的打開才行);當(dāng)結(jié)束訪問之后需要對會話進(jìn)行清除操作,調(diào)用函數(shù)viClose對資源會話和其他會話進(jìn)行關(guān)閉。該操作會把所有分配給指定會話的數(shù)據(jù)結(jié)構(gòu)資源進(jìn)行釋放操作。上面給出的是在用戶配置好各種參數(shù)后的執(zhí)行代碼。然而,在自己的界面的設(shè)計過程中也給出了一些配置信息,比如,頻率,幅值,偏移,占空比(其中對占空比也做了特別的處理,因為占空比參數(shù)只適合于方波,所以在選中其他波形的時候需要對該參數(shù)進(jìn)行屏蔽,以防止用戶的輸入)。當(dāng)用戶選擇調(diào)制方式的時候,會彈出對話框以提供用戶的輸入操作:圖3-10可以看出在該界面中共有四種調(diào)制方式,也是最基本的調(diào)制方式。在彈出時,各個參數(shù)都有其初始值以方便用戶。對于其中的數(shù)據(jù)的處理比較簡單:通過VC的ClassWizard對界面中的各個控件進(jìn)行變量的定義,以接收用戶的數(shù)據(jù)的輸入:圖3-11在程序的編寫過程中也遇到了一些問題:譬如,多個單選按鈕如何組合在一起,實現(xiàn)真正的單選;當(dāng)用戶選中一個按鈕之后,如何對用戶的選擇進(jìn)行判斷,以正確的執(zhí)行用戶所需要的執(zhí)行指令;各個功能模塊之間如何的進(jìn)行協(xié)調(diào)的工作等等。就拿單選按鈕的實現(xiàn)來說,因為我的基本波形的選擇設(shè)想是通過用戶的選擇(單選)來進(jìn)行的,這樣的設(shè)計直觀且美觀,符合人們的操作習(xí)慣。但是應(yīng)該如何去實現(xiàn)呢?通過查找書本上介紹的例子,首先進(jìn)行一些測試?yán)印y試通過之后,再在程序中進(jìn)行運用。但是也會遇上這樣那樣的一些問題:例子中能進(jìn)行正確的執(zhí)行,但是移植到自己的程序中就不行了。(不過,我想說的一點是有許多書籍的內(nèi)容是很垃圾的,程序不完整不說,而且還誤人子弟)。我現(xiàn)在遇到的問題就是,已經(jīng)將單選按鈕組合在一起了,也能實現(xiàn)單選了,可是,單擊的波形,與設(shè)計的并不一樣,也就是各個單選按鈕之間的功能出現(xiàn)了紊亂。而且還出現(xiàn)了跟另外一組的單選按鈕出現(xiàn)了沖突。當(dāng)時我就有點懵了。怎么會出現(xiàn)這樣的情況呢??思索了蠻久,:因為該文件中都是一些關(guān)于控件ID資源的定義。是不是ID資源沖突了呢?!通過自己的仔細(xì)的研究和思索,發(fā)現(xiàn)了另外一個問題:在該文件中有許多自己并沒有使用到的空閑ID,怎么會這樣呢?原來是自己在設(shè)計界面的過程中,經(jīng)常的添加和刪除控件,使得有些控件ID并沒有隨著自己對控件的刪除而刪除。故而遺留了下來??!于是我就將其全部的進(jìn)行刪除。感覺ID就干凈了許多。但是,前面的問題還沒有解決啊!于是我對單選按鈕的ID進(jìn)行的排序和分析,發(fā)現(xiàn)沖突的按鈕的ID的順序也是交叉的。并沒有順序的進(jìn)行ID的定義。我懷疑是這個原因,于是對混亂的ID進(jìn)行的重新的排序。并將不同的兩組ID進(jìn)行了分離。重新運行程序,結(jié)果一切OK! 圖3-12象這樣的問題,如果沒有碰上過,也是有點不知所措的。這是我的小小的心得哦??!在調(diào)試前,先進(jìn)行IO Config的配置,并通過VISA 助手進(jìn)行儀器的連接的測試,通過之后,開始調(diào)試程序。我進(jìn)行分塊的調(diào)試:首先是調(diào)試產(chǎn)生不同波形的功能塊是否正常。圖3-13相應(yīng)的程序如下://******以下是對單選按鈕的處理函數(shù),通過單擊按鈕來進(jìn)行相應(yīng)的操作void CGENERATER::OnRadioSin() { (FALSE)。}void CGENERATER::OnRadioTriangle() { (FALSE)。}void CGENERATER::OnRadioFwave() { (TRUE)。}void CGENERATER::OnRadioRamp() { (FALSE)。}等等//********************************************以下是對基本波形選擇處理函數(shù)void CGENERATER::CheckWaveRadioButton(){ int nID_SelectWaveF。 nID_SelectWaveF=GetCheckedRadioButton(IDC_RADIO_SIN,IDC_RADIO_DC)。 switch(nID_SelectWaveF) {//添加處理代碼--即是對波形參數(shù)賦值 case IDC_RADIO_SIN:m_nBaseShape=SIN。break。 case IDC_RADIO_TRIANGLE:m_nBaseShape=TRI。break。 case IDC_RADIO_FWAVE:m_nBaseShape=SQU。break。 case IDC_RADIO_RAMP:m_nBaseShape=RAMP。break。 case IDC_RADIO_ARBI:m_nBaseShape=。break。 case IDC_RADIO_NOISE:m_nBaseShape=NOISE。break。 case IDC_RADIO_PULSE:m_nBaseShape=PULSE。break。 case IDC_RADIO_DC:m_nBaseShape=DC。break。 default:return。}}上面是對用戶的選擇進(jìn)行的變量的賦值以備后用。下面就是產(chǎn)生各種函數(shù)的部分(部分代碼):viPrintf(/*funcgen*/m_Session,OUTPut:LOAD %s\n,m_nResistance)。//輸出端的設(shè)置viPrintf(/*funcgen*/m_Session,OUTPut:SYNC %s\n,m_nSignal)。//設(shè)置同步信號注意:下面這個是一個子程序,用來對用戶的選擇進(jìn)行判斷,并將用戶選擇的波形的相應(yīng)的參數(shù)傳遞給一個字符串變量中。CheckWaveRadioButton()。//波形選擇的判斷--將波形的字符串存儲在m_nBaseShape中//****************
點擊復(fù)制文檔內(nèi)容
教學(xué)教案相關(guān)推薦
文庫吧 www.dybbs8.com
備案圖片鄂ICP備17016276號-1