人員在沒(méi)有做出創(chuàng)造性勞動(dòng)前提下所獲得的所有其他實(shí)施例,都屬于本申請(qǐng)保護(hù)的范圍。
[0045]本申請(qǐng)公開(kāi)了一種測(cè)試系統(tǒng),該系統(tǒng)基于MATLAB模型,其結(jié)構(gòu)如圖1所示,包括:上位機(jī)101,下位機(jī)102和被測(cè)目標(biāo)系統(tǒng)103。其中,上位機(jī)101用于完成MATLAB模型的開(kāi)發(fā)和編譯,在開(kāi)發(fā)過(guò)程中,在原有MATLAB模型的基礎(chǔ)上,開(kāi)發(fā)了用于讀寫(xiě)文件的第一函數(shù),該第一函數(shù)為S-Funct1n函數(shù),S-Funct1n也就是system-funct1n的縮寫(xiě)。通俗的講,S-Funct1n就是當(dāng)用MATLAB所提供的模型不能完全滿足用戶需求時(shí),提供給用戶自己編寫(xiě)程序來(lái)滿足要求模型的接口。通過(guò)該接口,開(kāi)發(fā)適用于用戶需要的函數(shù)。然后,將第一函數(shù)與原有MATLAB模型共同編譯,由于該函數(shù)是利用MATLAB模型的自身接口開(kāi)發(fā),因此兩者并不存在矛盾,可以順利的編譯在一起,成為一個(gè)新的模型。
[0046]在開(kāi)始測(cè)試之前,下位機(jī)102需要從上位機(jī)101上下載已經(jīng)編譯好的模型到預(yù)定的內(nèi)存空間,同時(shí),下位機(jī)根據(jù)S-Funct1n中初始化要求預(yù)先分配一個(gè)內(nèi)存區(qū)域,定義為第一內(nèi)存區(qū)域。
[0047]在進(jìn)行測(cè)試之前,下位機(jī)102還需要從上位機(jī)101上下載回放數(shù)據(jù),將該回放數(shù)據(jù)存儲(chǔ)在下位機(jī)的硬盤(pán)中。
[0048]測(cè)試進(jìn)行時(shí),運(yùn)行模型后,模型首先利用第一函數(shù),將存儲(chǔ)在硬盤(pán)中的回放數(shù)據(jù)加載到第一內(nèi)存區(qū)域中,整個(gè)測(cè)試過(guò)程分為多個(gè)測(cè)試周期,在每一個(gè)測(cè)試周期內(nèi),模型按照回放數(shù)據(jù)的存儲(chǔ)順序,讀取當(dāng)前測(cè)試周期對(duì)應(yīng)的回放數(shù)據(jù),然后把讀取的回放數(shù)據(jù)發(fā)送給被測(cè)目標(biāo)系統(tǒng),被測(cè)目標(biāo)系統(tǒng)接收到回放數(shù)據(jù)后,進(jìn)行仿真(測(cè)試),然后將得到的結(jié)果數(shù)據(jù)通過(guò)接口發(fā)送給下位機(jī)并存儲(chǔ)在第二內(nèi)存區(qū)域。如此重復(fù),直到該測(cè)試過(guò)程的所有測(cè)試周期都完成。
[0049]本申請(qǐng)實(shí)施例公開(kāi)的測(cè)試系統(tǒng)中,預(yù)先在MATLAB模型編譯用于讀寫(xiě)文件的第一函數(shù),下位機(jī)下載編譯后的MATLAB模型和回放數(shù)據(jù)后,利用第一函數(shù),將回放數(shù)據(jù)從下位機(jī)硬盤(pán)加載到第一內(nèi)存區(qū)域,然后根據(jù)測(cè)試周期,讀取回放數(shù)據(jù)發(fā)送給被測(cè)目標(biāo)系統(tǒng)進(jìn)行測(cè)試。在上述過(guò)程中,MATLAB模型讀取的是與其處于同一計(jì)算機(jī)內(nèi)存區(qū)域的數(shù)據(jù),無(wú)需再?gòu)纳衔粰C(jī)獲取,保證了數(shù)據(jù)讀取的實(shí)時(shí)性和準(zhǔn)確性,能夠滿足對(duì)實(shí)時(shí)性要求較高的被測(cè)目標(biāo)系統(tǒng)的測(cè)試需求。
[0050 ]進(jìn)一步的,在上位機(jī)編譯MATLAB模型時(shí),還可以同時(shí)開(kāi)發(fā)用于寫(xiě)內(nèi)存的第二函數(shù),該第二函數(shù)與第一函數(shù)一起編譯到MATLAB模型中,并被下載到下位機(jī),下位機(jī)根據(jù)S-Funct1n中初始化要求預(yù)先分配一個(gè)內(nèi)存區(qū)域,定義為第二內(nèi)存區(qū)域。當(dāng)每個(gè)測(cè)試周期內(nèi)接收到結(jié)果數(shù)據(jù)后,利用該第二函數(shù)將結(jié)果數(shù)據(jù)按照順序?qū)懭氲较挛粰C(jī)中預(yù)先分配的第二內(nèi)存區(qū)域中。并且,在整個(gè)測(cè)試過(guò)程結(jié)束后,將所有結(jié)果數(shù)據(jù)生成文件后,一起上傳至上位機(jī)。
[0051]本申請(qǐng)實(shí)施例公開(kāi)的基于上述測(cè)試系統(tǒng),并應(yīng)用于系統(tǒng)中的MATLAB模型的測(cè)試方法流程如圖2所示,包括:
[0052]步驟S201:利用所述第一函數(shù)加載回放數(shù)據(jù)到所述第一內(nèi)存區(qū)域中。
[0053]所述回放數(shù)據(jù)為所述下位機(jī)預(yù)先從上位機(jī)下載,并存儲(chǔ)于下位機(jī)硬盤(pán)中的數(shù)據(jù)。
[0054]本實(shí)施例中,第一函數(shù)為利用CMEX S文件模板,編寫(xiě)的S-Funct1n文件,可命名^readwr itefile.c。
[0055]MATLAB模型在被下載到下位機(jī)時(shí),利用模型中的mdlStart函數(shù),向下位機(jī)申請(qǐng)內(nèi)存,下位機(jī)分配第一、二內(nèi)存區(qū)域。然后,readwr itefile.c從硬盤(pán)中加載回放數(shù)據(jù)到第一內(nèi)存區(qū)域。
[0056]步驟S202:在每一預(yù)設(shè)的測(cè)試周期內(nèi),分別執(zhí)行測(cè)試步驟直到測(cè)試過(guò)程結(jié)束。
[0057]其中,測(cè)試過(guò)程的流程如圖3所示,包括:
[0058]測(cè)試周期對(duì)應(yīng)的回放數(shù)據(jù);
[0059]模型在每一測(cè)試周期內(nèi),分別調(diào)用mdlOutputs函數(shù),按照回放數(shù)據(jù)的存儲(chǔ)順序,讀取當(dāng)前的回放數(shù)據(jù),讀取后,將指針指向下一測(cè)試周期要讀取的回放數(shù)據(jù)的存儲(chǔ)地址處。
[0060]步驟S302:將所述當(dāng)前測(cè)試周期對(duì)應(yīng)的回放數(shù)據(jù)發(fā)送給被測(cè)目標(biāo)系統(tǒng);
[0061]步驟S303:接收所述被測(cè)目標(biāo)系統(tǒng)反饋的當(dāng)前測(cè)試周期的結(jié)果數(shù)據(jù)。
[0062]在上述測(cè)試過(guò)程中,MATLAB模型讀取的是與其處于同一計(jì)算機(jī)內(nèi)存區(qū)域的數(shù)據(jù),無(wú)需再?gòu)纳衔粰C(jī)獲取,保證了數(shù)據(jù)讀取的實(shí)時(shí)性和準(zhǔn)確性,能夠滿足對(duì)實(shí)時(shí)性要求較高的被測(cè)目標(biāo)系統(tǒng)的測(cè)試需求。
[0063]進(jìn)一步的,MATLAB模型上還預(yù)先編譯有用于寫(xiě)內(nèi)存的第二函數(shù)。第二函數(shù)同樣也是利用C MEX S文件模板,編寫(xiě)的S-Funct1n文件,可命名為writememory.Co
[0064]在具有第二函數(shù)后,上述圖3中還包括:
[0065]步驟S304:利用所述第二函數(shù),將所述結(jié)果數(shù)據(jù)按照預(yù)設(shè)順序?qū)懭氲诙?nèi)存區(qū)域。
[0066]因?yàn)榈诙瘮?shù)具有寫(xiě)內(nèi)存的功能,所以能夠?qū)⒔Y(jié)果數(shù)據(jù)寫(xiě)入下位機(jī)預(yù)先分配的第二內(nèi)存區(qū)域中。在mdlOutputs函數(shù)中,將每一測(cè)試周期采集的結(jié)果數(shù)據(jù)按照規(guī)律順序存放在已第二內(nèi)存區(qū)域中,直到測(cè)試終止。
[0067]而在整個(gè)測(cè)試周期結(jié)束后,圖2所示流程還包括:
[0068]步驟S203:將存儲(chǔ)于所述第二內(nèi)存區(qū)域中的各個(gè)測(cè)試周期的結(jié)果數(shù)據(jù)生成文件,并上傳至上位機(jī)。
[0069]在上述實(shí)施例中,利用第二函數(shù)可將得到的結(jié)果數(shù)據(jù)先寫(xiě)入下位機(jī)內(nèi)存,等測(cè)試結(jié)束后,再一起上傳至上位機(jī),避免了重復(fù)多次傳輸結(jié)果數(shù)據(jù)的過(guò)程,并且,避免了由于傳輸過(guò)程中的故障導(dǎo)致結(jié)果數(shù)據(jù)丟失或者不準(zhǔn)確的情況發(fā)生。
[0070]在上述實(shí)施例中,回放數(shù)據(jù)包括:多個(gè)子數(shù)據(jù),該多個(gè)子數(shù)據(jù)可以為按照預(yù)設(shè)長(zhǎng)度劃分的子數(shù)據(jù),也就是,每個(gè)子數(shù)據(jù)長(zhǎng)度相同,其在進(jìn)行存儲(chǔ)時(shí),所占用的存儲(chǔ)空間也是相同的,這樣,在模型運(yùn)行時(shí),可以通過(guò)為mdlOutputs函數(shù)中的指針設(shè)置一個(gè)固定的偏移量,就能夠?qū)崿F(xiàn)在讀取完當(dāng)前測(cè)試周期的子數(shù)據(jù)后,指針跳轉(zhuǎn)到下一測(cè)試周期對(duì)應(yīng)的子數(shù)據(jù)的存儲(chǔ)地址的操作。
[0071]可替換的,各個(gè)子數(shù)據(jù)的長(zhǎng)度也可以不一致,例如,可以是5bit,也可以是lObit,本申請(qǐng)并不限定。為了避免不同長(zhǎng)度的子數(shù)據(jù)在存儲(chǔ)時(shí)存儲(chǔ)空間大小不確定導(dǎo)致的存儲(chǔ)地址的變化不固定的情況,可以為各個(gè)子數(shù)據(jù)都分配相同大小的存儲(chǔ)空間,該存儲(chǔ)空間能夠保證最長(zhǎng)的子數(shù)據(jù)被存儲(chǔ)在內(nèi),而對(duì)于其他的子數(shù)據(jù),該存儲(chǔ)空間的剩余部分可以填充0,或其他沒(méi)有實(shí)際意義的數(shù)據(jù),既不會(huì)影響測(cè)試的過(guò)程,也保證了存儲(chǔ)空間的一致性。
[0072]所述子數(shù)據(jù)按照預(yù)設(shè)存儲(chǔ)數(shù)據(jù)進(jìn)行存儲(chǔ),分段存儲(chǔ)并不會(huì)影響回放數(shù)據(jù)中各個(gè)數(shù)據(jù)的先后關(guān)系。
[0073]回放數(shù)據(jù)的子數(shù)據(jù)個(gè)數(shù)可以與測(cè)試周期的個(gè)數(shù)有關(guān),例如,測(cè)試周期有5個(gè),則將回放數(shù)據(jù)劃分為5個(gè)子數(shù)據(jù)。每個(gè)測(cè)試周期讀取其中的一個(gè)子數(shù)據(jù)。子數(shù)據(jù)按照順序一次排列,第一測(cè)試周期內(nèi)讀取排在第一位的子數(shù)據(jù),第二測(cè)試周期內(nèi)讀取排在第二位的子數(shù)據(jù),以此類(lèi)推。
[0074]本申請(qǐng)實(shí)施例中,由于回放數(shù)據(jù)是從上位機(jī)下載到下位機(jī)中,并且,其已經(jīng)根據(jù)測(cè)試周期進(jìn)行了相應(yīng)的處理,相鄰的數(shù)據(jù)間的位置關(guān)系是不會(huì)發(fā)生變化的,即便不同的測(cè)試過(guò)程間相比,下位機(jī)分配的第二內(nèi)存區(qū)域會(huì)有所變化,但是回放數(shù)據(jù)內(nèi)的數(shù)據(jù)關(guān)系是不會(huì)發(fā)生變化,這就使得無(wú)論進(jìn)行多少次