專利名稱:一種智能測(cè)量儀器通用語法分析的實(shí)現(xiàn)方法
技術(shù)領(lǐng)域:
本發(fā)明涉及一種測(cè)量儀器語法分析方法,尤其涉及一種智能測(cè)量儀器通用語法分析的實(shí)現(xiàn)方法,屬于程控測(cè)量儀器技術(shù)領(lǐng)域。
背景技術(shù):
目前智能型測(cè)量儀器門類繁多,例如功率計(jì)、頻譜儀、網(wǎng)絡(luò)儀、信號(hào)源、噪聲儀、頻率計(jì)、示波器等。這些智能測(cè)量儀器具有一個(gè)共同特點(diǎn)可以通過任何可與之通訊的控制器進(jìn)行系統(tǒng)集成。這些控制器可能是個(gè)人電腦、小型計(jì)算機(jī)或者卡槽上的插卡,乃至一些人工智能的設(shè)備。由控制器通過相應(yīng)的測(cè)試總線,GP-IB、網(wǎng)絡(luò)等向測(cè)量儀器發(fā)送程控命令,實(shí)現(xiàn)對(duì)測(cè)量儀器的程控操作(如附圖1所示)。但是如何正確輸入有效命令、測(cè)量儀器如何獲取正確指令、如何正確解析在發(fā)送過程中可能會(huì)出現(xiàn)的發(fā)送錯(cuò)誤例如關(guān)鍵字錯(cuò)誤、參數(shù)個(gè)數(shù)、參數(shù)數(shù)據(jù)類型不匹配、參數(shù)超界等,卻是本領(lǐng)域所面臨的常見問題。如果測(cè)量儀器不能很好地識(shí)別這些錯(cuò)誤,將無法實(shí)現(xiàn)指定功能,甚至可能會(huì)造成測(cè)量儀器的崩潰。因此,必須對(duì)通過通訊接口所接收到的數(shù)據(jù)和程控命令信息進(jìn)行解析,判斷其合法性,提取有效指令和相應(yīng)的參數(shù)。語法分析是一項(xiàng)繁瑣、復(fù)雜的工作,但針對(duì)測(cè)量儀器又不可或缺。由于用戶的輸入可能錯(cuò)綜復(fù)雜,所以稍有考慮不周,就可能出現(xiàn)誤判、漏判,從而出現(xiàn)意想不到的情況。由于不同的測(cè)量儀器具有不同的測(cè)試功能,所以每種測(cè)量儀器的生產(chǎn)廠商都要針對(duì)自身儀器進(jìn)行包括語法分析在內(nèi)的程控的重復(fù)開發(fā)。這無疑會(huì)造成大量、重復(fù)的勞動(dòng),造成極大的人力、物力浪費(fèi)。而經(jīng)多方查閱,到目前為止還沒有一套完整的、完善的、針對(duì)不同測(cè)量儀器通用的語法分析方法。因此,能否針對(duì)不同門類的智能測(cè)量儀器,搭建出一套完善的通用語法分析平臺(tái)以同時(shí)滿足其各自程控的要求,成為本領(lǐng)域技術(shù)人員亟待解決的技術(shù)難題。
發(fā)明內(nèi)容
為了解決上述技術(shù)問題,提出本發(fā)明。本發(fā)明旨在提供一種智能測(cè)量儀器通用語
法分析的實(shí)現(xiàn)方法,其基于 SCPI (Standard Commands for Programmable Instruments-
可程控設(shè)備的標(biāo)準(zhǔn)命令,一個(gè)基于標(biāo)準(zhǔn)IEEE488. 2建立的、適合所有儀器的命令集),針對(duì)多種智能測(cè)量儀器開發(fā)的。用于使不同測(cè)量儀器相同功能具有相同的程控命令,以實(shí)現(xiàn)程控命令的通用性。其采用的技術(shù)方案如下該種智能測(cè)量儀器通用語法分析的實(shí)現(xiàn)方法包括以下步驟1)生成命令樹利用二叉樹的方式來構(gòu)建數(shù)據(jù)結(jié)構(gòu),將整個(gè)語法分析的過程分成生成樹過程和遍歷樹過程;2)語法分析與接口相應(yīng)的線程接收來自接口的命令和數(shù)據(jù),并送語法分析先進(jìn)先出隊(duì)列,激活語法分析;逐個(gè)分離出用戶輸入命令的關(guān)鍵字,依據(jù)生成樹中的數(shù)據(jù)結(jié)構(gòu), 判斷輸入的整條命令在每個(gè)具體部位是否存在問題,然后對(duì)正確的分析進(jìn)行解析解碼,把
3相應(yīng)的命令和參數(shù)分別送入命令隊(duì)列,激活命令處理線程進(jìn)行相應(yīng)的命令處理;對(duì)錯(cuò)誤的命令予以拋棄,并進(jìn)行示警和錯(cuò)誤定位。優(yōu)選地,所述命令樹包括如下五個(gè)數(shù)據(jù)結(jié)構(gòu)命令和關(guān)鍵字結(jié)構(gòu)、節(jié)點(diǎn)結(jié)構(gòu)、葉子節(jié)點(diǎn)結(jié)構(gòu)、參數(shù)鏈表結(jié)構(gòu)以及C參數(shù)鏈表。優(yōu)選地,在所述語法分析步驟中,還使用命令結(jié)構(gòu)和參數(shù)結(jié)構(gòu),在語法分析完成某條命令之后,這兩個(gè)結(jié)構(gòu)分別寫入命令處理線程。優(yōu)選地,在遍歷樹的過程中,如果在同級(jí)的目錄中沒有找到,在下級(jí)中查找乃至一直找到葉子節(jié)點(diǎn);如果在葉子節(jié)點(diǎn)還沒有找到,回溯到之前正確的解析部位,在其兄弟節(jié)點(diǎn)乃至兄弟節(jié)點(diǎn)的子節(jié)點(diǎn)中繼續(xù)查找。優(yōu)選地,所述用戶輸入命令包括大數(shù)據(jù)塊命令。優(yōu)選地,所述用戶輸入命令中還包括關(guān)聯(lián)命令,在語法分析步驟中關(guān)聯(lián)命令出現(xiàn)問題時(shí),把前面判斷正確的命令包括命令碼和參數(shù)送給命令處理,而出錯(cuò)之后的命令包括本條進(jìn)行清除。優(yōu)選地,其特征在于,所述接口為GPIB或網(wǎng)絡(luò)。優(yōu)選地,對(duì)于大數(shù)據(jù)塊關(guān)聯(lián)命令還包括如下處理步驟分析到大數(shù)據(jù)塊參數(shù)時(shí),把所有滯留命令全部一并寫入命令先進(jìn)先出隊(duì)列中,然后等待;命令處理到這條命令時(shí),發(fā)消息給語法分析,并給語法分析一個(gè)緩沖區(qū)的指針,然后命令處理處于等待狀態(tài);語法分析直接從語法先進(jìn)先出隊(duì)列中按當(dāng)前的數(shù)據(jù)格式進(jìn)行讀取,然后寫入到對(duì)應(yīng)的內(nèi)存中;如果在處理大數(shù)據(jù)的過程中出現(xiàn)錯(cuò)誤,則發(fā)送消息給命令處理線程,結(jié)束該命令的處理,同時(shí)設(shè)置該條命令的關(guān)聯(lián)碼為最后一個(gè);如果沒有出錯(cuò),就要看是否是關(guān)聯(lián)命令的中間一條,要等到下一條命令處理完畢,得到正確的關(guān)聯(lián)碼之后才給命令處理發(fā)消息;如果不是中間一條,則在處理完之后給命令處理發(fā)消息。優(yōu)選地,對(duì)于大數(shù)據(jù)塊關(guān)聯(lián)命令還包括如下處理步驟大數(shù)據(jù)塊命令處理時(shí),如果發(fā)現(xiàn)通道或者測(cè)量不存在,給語法傳送一個(gè)指針,長度為-1 ;語法分析把數(shù)據(jù)寫入緩沖區(qū)內(nèi),同時(shí)設(shè)置接收的長度為有效長度。與現(xiàn)有技術(shù)相比,本發(fā)明具有如下優(yōu)點(diǎn)1、通用性強(qiáng),適用于多種智能測(cè)量儀器,大大降低了科研工作量和科研成本;2、方便用戶采用,操作簡單,定位和查錯(cuò)功能強(qiáng);3、經(jīng)多個(gè)內(nèi)嵌儀器驗(yàn)證,可靠性強(qiáng)、穩(wěn)定性好。
圖1現(xiàn)有技術(shù)中的程控流程圖2本發(fā)明中命令及結(jié)構(gòu)的簡要說明圖3本發(fā)明中生成命令樹的流程圖4本發(fā)明中數(shù)據(jù)結(jié)構(gòu)簡圖1;
圖5本發(fā)明中語法分析流程圖6本發(fā)明中3條關(guān)聯(lián)命令的處理圖7本發(fā)明中3條大數(shù)據(jù)塊關(guān)聯(lián)命令的處理圖
圖8本發(fā)明中數(shù)據(jù)結(jié)構(gòu)簡圖2。
具體實(shí)施例方式下面結(jié)合附圖和實(shí)施例對(duì)本發(fā)明作進(jìn)一步說明該實(shí)現(xiàn)方法主要包括以下步驟生成命令樹(如圖3所示)在具體設(shè)計(jì)上,為了滿足速度、通用性和易集成性等要求,利用二叉樹的方式來構(gòu)建數(shù)據(jù)結(jié)構(gòu),將整個(gè)語法分析的過程分成生成樹過程和遍歷樹過程。命令樹優(yōu)選為主要由如下五個(gè)數(shù)據(jù)結(jié)構(gòu)來進(jìn)行管理(如圖2、4、8所示):命令和關(guān)鍵字結(jié)構(gòu)、節(jié)點(diǎn)結(jié)構(gòu)、葉子節(jié)點(diǎn)結(jié)構(gòu)、參數(shù)鏈表結(jié)構(gòu)以及C參數(shù)鏈表。命令和關(guān)鍵字結(jié)構(gòu)包括關(guān)鍵字編碼、首節(jié)點(diǎn)指向的節(jié)點(diǎn)結(jié)構(gòu)。節(jié)點(diǎn)結(jié)構(gòu),用來放置每個(gè)命令節(jié)點(diǎn)的相關(guān)信息,包括節(jié)點(diǎn)缺省標(biāo)識(shí)、節(jié)點(diǎn)可否帶參數(shù)、節(jié)點(diǎn)參數(shù)缺省標(biāo)識(shí)、缺省值、最小值、最大值、父指針、兄弟指針、孩子指針(當(dāng)是最后一個(gè)命令時(shí),指向葉子結(jié)構(gòu))、是否葉子節(jié)點(diǎn)。葉子結(jié)構(gòu),存放整條命令信息和參數(shù)特性,包括命令編碼、是否可查詢、是否交迭、查詢時(shí),所有參數(shù)是否全部返回、總參數(shù)個(gè)數(shù)、缺省參數(shù)個(gè)數(shù)、參數(shù)鏈表入口。參數(shù)鏈表結(jié)構(gòu),保存每個(gè)參數(shù)的信息,包括參數(shù)是否可缺省、是否支持最值、參數(shù)類型、參數(shù)單位、是否有C缺省、C參數(shù)鏈表的起始下標(biāo)。C參數(shù)鏈表僅用于C參數(shù),存放內(nèi)容為該C在關(guān)鍵字結(jié)構(gòu)中的索引,最后用-1結(jié)
束ο在下面的語法分析步驟中,優(yōu)選還使用了另外兩個(gè)結(jié)構(gòu)命令結(jié)構(gòu)和參數(shù)結(jié)構(gòu),在語法分析完成某條命令之后,這兩個(gè)結(jié)構(gòu)分別寫入命令處理線程。命令結(jié)構(gòu)包括命令來源、命令碼、參數(shù)個(gè)數(shù)、命令查詢標(biāo)識(shí)、是否存在語法錯(cuò)、命令關(guān)聯(lián)碼、節(jié)點(diǎn)參數(shù)個(gè)數(shù)和節(jié)點(diǎn)參數(shù)。參數(shù)結(jié)構(gòu)包括參數(shù)類型、整型參數(shù)、浮點(diǎn)型參數(shù)、字符串型參數(shù)、C型參數(shù)、參數(shù)單位、指向下一個(gè)參數(shù)的指針。這些數(shù)據(jù)結(jié)構(gòu)是本發(fā)明實(shí)現(xiàn)方法的重點(diǎn),生成樹是生成這些數(shù)據(jù)結(jié)構(gòu),而語法分析,則完全依靠這些結(jié)構(gòu)來判斷用戶輸入的命令是否合法。所以,這些結(jié)構(gòu)的合理性和完善性是極其重要的。語法分析(如圖5所示)與接口(例如GPIB、網(wǎng)絡(luò)等)相應(yīng)的線程接收來自接口的命令和數(shù)據(jù),并送語法分析先進(jìn)先出隊(duì)列,激活語法分析;逐個(gè)分離出用戶輸入命令的關(guān)鍵字,依據(jù)生成樹中的五個(gè)數(shù)據(jù)結(jié)構(gòu),判斷輸入的整條命令在每個(gè)具體部位是否存在問題, 然后對(duì)正確的分析進(jìn)行解析編碼,把相應(yīng)的命令和參數(shù)分別送入命令隊(duì)列,激活命令處理線程進(jìn)行相應(yīng)的命令處理;對(duì)錯(cuò)誤的命令予以拋棄,并進(jìn)行示警和錯(cuò)誤定位。由于用戶輸入的情況復(fù)雜,所以在整個(gè)語法分析的過程中,樹的搜索是前提。由于存在關(guān)鍵字的缺省情況,所以在搜索的過程中,如果在同級(jí)的目錄中沒有找到,就要考慮是否是進(jìn)行了缺省,要在下級(jí)中查找,由于存在多級(jí)的缺省,所以可能要一直找到葉子節(jié)點(diǎn)。 如果在葉子節(jié)點(diǎn)都沒有找到,那么就要一直回溯到之前正確的解析部位,在兄弟節(jié)點(diǎn)中,甚至是兄弟節(jié)點(diǎn)的子節(jié)點(diǎn)中繼續(xù)查找,這是該技術(shù)的一個(gè)難點(diǎn)所在。SCPI規(guī)范要求輸入命令,也可以輸入大數(shù)據(jù)塊命令。大數(shù)據(jù)塊命令分多種格式,不
5論是哪種格式,只要分析出存在問題,那么后面的數(shù)據(jù)就要停止接收,并把前面已經(jīng)接收的數(shù)據(jù)予以清除。因?yàn)榇髷?shù)據(jù)塊的數(shù)據(jù)很大,所以我們和命令一起同步處理,這是語法分析的另一個(gè)難點(diǎn)所在。SCPI規(guī)范中,還提到一點(diǎn),多條命令可以同時(shí)輸入。這就是關(guān)聯(lián)命令。關(guān)聯(lián)命令在分析中出現(xiàn)錯(cuò)誤,要把前面判斷正確的命令送給命令處理,包括命令碼和參數(shù),而出錯(cuò)之后的命令,包括本條,都要清除。如果是分系統(tǒng)命令的關(guān)聯(lián)輸入,那么還存在同根命令的簡化輸入,而對(duì)于分系統(tǒng)命令和公用命令在關(guān)聯(lián)輸入時(shí)還存在差異。如果是與大數(shù)據(jù)塊命令關(guān)聯(lián),那么語法分析將變得更加復(fù)雜。這些問題在處理關(guān)聯(lián)命令時(shí)都進(jìn)行了全面的考慮。關(guān)聯(lián)命令的處理也是語法分析中難點(diǎn)中的難點(diǎn)。下面簡述其相關(guān)處理方法。關(guān)聯(lián)命令的處理對(duì)于命令所跟的參數(shù),只要處理到了,就寫入命令處理隊(duì)列中, 但命令要滯留1條,只有處理完下一條并且正確時(shí),修改了前一條的關(guān)聯(lián)碼之后才會(huì)寫入命令處理隊(duì)列,以此類推。大數(shù)據(jù)塊關(guān)聯(lián)命令,具體處理如下因?yàn)榇髷?shù)據(jù)塊參數(shù)占有很大內(nèi)存,所以分析到大數(shù)據(jù)塊參數(shù)時(shí)直接把所有的滯留命令全部一并寫入命令先進(jìn)先出隊(duì)列中,然后等待;命令處理到這條命令時(shí),發(fā)消息給語法分析,并給語法分析一個(gè)緩沖區(qū)的指針,然后命令處理處于等待狀態(tài)。語法分析直接從語法先進(jìn)先出隊(duì)列中按當(dāng)前的數(shù)據(jù)格式進(jìn)行讀取,然后寫入到對(duì)應(yīng)的內(nèi)存中。如果在處理大數(shù)據(jù)的過程中出現(xiàn)錯(cuò)誤,則發(fā)送消息給命令處理線程,結(jié)束該命令的處理,同時(shí)設(shè)置該條命令的關(guān)聯(lián)碼為最后個(gè);如果沒有出錯(cuò),就要看是否是關(guān)聯(lián)命令的中間一條,要等到下一條命令處理完畢,得到正確的關(guān)聯(lián)碼之后才給命令處理發(fā)消息;如果不是中間一條,則在處理完之后給命令處理發(fā)消息。大數(shù)據(jù)塊命令處理時(shí),如果發(fā)現(xiàn)通道或者測(cè)量不存在,仍然會(huì)給語法傳送一個(gè)指針,只是長度為-ι。語法分析仍然會(huì)把數(shù)據(jù)寫入這個(gè)緩沖區(qū)內(nèi),同時(shí)設(shè)置接收的長度為有效長度。圖6和圖7以3條命令為例,簡要說明了大數(shù)據(jù)塊和關(guān)聯(lián)命令的處理流程。上面以舉例方式對(duì)本發(fā)明進(jìn)行了說明,但本發(fā)明不限于上述具體實(shí)施例,凡基于本發(fā)明所做的任何改動(dòng)或變型均屬于本發(fā)明要求保護(hù)的范圍。
權(quán)利要求
1.一種智能測(cè)量儀器通用語法分析的實(shí)現(xiàn)方法,其特征在于,包括以下步驟1)生成命令樹利用二叉樹的方式來構(gòu)建數(shù)據(jù)結(jié)構(gòu),將整個(gè)語法分析的過程分成生成樹過程和遍歷樹過程;2)語法分析與接口相應(yīng)的線程接收來自接口的命令和數(shù)據(jù),并送語法分析先進(jìn)先出隊(duì)列,激活語法分析;逐個(gè)分離出用戶輸入命令的關(guān)鍵字,依據(jù)生成樹中的數(shù)據(jù)結(jié)構(gòu),判斷輸入的整條命令在每個(gè)具體部位是否存在問題,然后對(duì)正確的分析進(jìn)行解析解碼,把相應(yīng)的命令和參數(shù)分別送入命令隊(duì)列,激活命令處理線程進(jìn)行相應(yīng)的命令處理;對(duì)錯(cuò)誤的命令予以拋棄,并進(jìn)行示警和錯(cuò)誤定位。
2.如權(quán)利要求1所述的一種智能測(cè)量儀器通用語法分析的實(shí)現(xiàn)方法,其特征在于,所述命令樹包括如下五個(gè)數(shù)據(jù)結(jié)構(gòu)命令和關(guān)鍵字結(jié)構(gòu)、節(jié)點(diǎn)結(jié)構(gòu)、葉子節(jié)點(diǎn)結(jié)構(gòu)、參數(shù)鏈表結(jié)構(gòu)以及C參數(shù)鏈表。
3.如權(quán)利要求1所述的一種智能測(cè)量儀器通用語法分析的實(shí)現(xiàn)方法,其特征在于,在所述語法分析步驟中,還使用命令結(jié)構(gòu)和參數(shù)結(jié)構(gòu),在語法分析完成某條命令之后,這兩個(gè)結(jié)構(gòu)分別寫入命令處理線程。
4.如權(quán)利要求1所述的一種智能測(cè)量儀器通用語法分析的實(shí)現(xiàn)方法,其特征在于,在遍歷樹的過程中,如果在同級(jí)的目錄中沒有找到,在下級(jí)中查找乃至一直找到葉子節(jié)點(diǎn);如果在葉子節(jié)點(diǎn)還沒有找到,回溯到之前正確的解析部位,在其兄弟節(jié)點(diǎn)乃至兄弟節(jié)點(diǎn)的子節(jié)點(diǎn)中繼續(xù)查找。
5.如權(quán)利要求1所述的一種智能測(cè)量儀器通用語法分析的實(shí)現(xiàn)方法,其特征在于,所述用戶輸入命令包括大數(shù)據(jù)塊命令。
6.如權(quán)利要求1所述的一種智能測(cè)量儀器通用語法分析的實(shí)現(xiàn)方法,其特征在于,所述用戶輸入命令中還包括關(guān)聯(lián)命令,在語法分析步驟中關(guān)聯(lián)命令出現(xiàn)問題時(shí),把前面判斷正確的命令包括命令碼和參數(shù)送給命令處理,而出錯(cuò)之后的命令包括本條進(jìn)行清除。
7.如權(quán)利要求1所述的一種智能測(cè)量儀器通用語法分析的實(shí)現(xiàn)方法,其特征在于,所述接口為GPIB、網(wǎng)絡(luò)和com的語法接口。
8.如權(quán)利要求1所述的一種智能測(cè)量儀器通用語法分析的實(shí)現(xiàn)方法,其特征在于,對(duì)于大數(shù)據(jù)塊關(guān)聯(lián)命令還包括如下處理步驟分析到大數(shù)據(jù)塊參數(shù)時(shí),把所有滯留命令全部一并寫入命令先進(jìn)先出隊(duì)列中,然后等待;命令處理到這條命令時(shí),發(fā)消息給語法分析,并給語法分析一個(gè)緩沖區(qū)的指針,然后命令處理處于等待狀態(tài);語法分析直接從語法先進(jìn)先出隊(duì)列中按當(dāng)前的數(shù)據(jù)格式進(jìn)行讀取,然后寫入到對(duì)應(yīng)的內(nèi)存中;如果在處理大數(shù)據(jù)的過程中出現(xiàn)錯(cuò)誤,則發(fā)送消息給命令處理線程,結(jié)束該命令的處理,同時(shí)設(shè)置該條命令的關(guān)聯(lián)碼為最后一個(gè);如果沒有出錯(cuò),就要看是否是關(guān)聯(lián)命令的中間一條,要等到下一條命令處理完畢,得到正確的關(guān)聯(lián)碼之后才給命令處理發(fā)消息;如果不是中間一條,則在處理完之后給命令處理發(fā)消息。
9.如權(quán)利要求1所述的一種智能測(cè)量儀器通用語法分析的實(shí)現(xiàn)方法,其特征在于,對(duì)于大數(shù)據(jù)塊關(guān)聯(lián)命令還包括如下處理步驟大數(shù)據(jù)塊命令處理時(shí),如果發(fā)現(xiàn)通道或者測(cè)量不存在,給語法傳送一個(gè)指針,長度為-1 ;語法分析把數(shù)據(jù)寫入緩沖區(qū)內(nèi),同時(shí)設(shè)置接收的長度為有效長度。
全文摘要
本發(fā)明涉及一種測(cè)量儀器語法分析方法,尤其涉及一種智能測(cè)量儀器通用語法分析的實(shí)現(xiàn)方法,屬于程控測(cè)量儀器技術(shù)領(lǐng)域,該方法針對(duì)不同門類的智能測(cè)量儀器,搭建出通用語法分析平臺(tái)滿足其程控要求,開發(fā)人員依據(jù)SCPI命令規(guī)范編寫出該儀器所有程控命令的文本文件,自動(dòng)生成高效的命令樹,同時(shí)可對(duì)此文本文件進(jìn)行審閱;完成編譯之后,把此方法內(nèi)嵌于測(cè)量儀器中實(shí)現(xiàn)對(duì)該儀器的程控,對(duì)于不同的測(cè)量儀器,只需要重新創(chuàng)建、編譯一下程控命令的文本文件即可,通用性強(qiáng),可靠性、穩(wěn)定性好。
文檔編號(hào)G06F17/30GK102521250SQ20111036264
公開日2012年6月27日 申請(qǐng)日期2011年11月16日 優(yōu)先權(quán)日2011年11月16日
發(fā)明者井濤, 劉丹, 孫朋德, 李明太, 李樹彪, 趙學(xué)強(qiáng), 趙立軍, 郭永瑞 申請(qǐng)人:中國電子科技集團(tuán)公司第四十一研究所