• <tr id="yyy80"></tr>
  • <sup id="yyy80"></sup>
  • <tfoot id="yyy80"><noscript id="yyy80"></noscript></tfoot>
  • 99热精品在线国产_美女午夜性视频免费_国产精品国产高清国产av_av欧美777_自拍偷自拍亚洲精品老妇_亚洲熟女精品中文字幕_www日本黄色视频网_国产精品野战在线观看 ?

    基于SWIG的Python儀器驅(qū)動(dòng)封裝技術(shù)

    2018-07-05 05:56:08馬宇葉衛(wèi)東
    計(jì)測(cè)技術(shù) 2018年2期
    關(guān)鍵詞:測(cè)試軟件自動(dòng)測(cè)試跨平臺(tái)

    馬宇,葉衛(wèi)東

    (北京航空航天大學(xué),北京 100191)

    0 引言

    虛擬儀器是自動(dòng)測(cè)試系統(tǒng)的基礎(chǔ),測(cè)試軟件是虛擬儀器的核心。目前虛擬儀器和測(cè)試軟件常見(jiàn)的開(kāi)發(fā)平臺(tái)包括:NI公司的LabVIEW,LabWindows / CVI,C#,C++和Java等。LabVIEW和LabWindows具有豐富的圖形化測(cè)試控件庫(kù);C#便于開(kāi)發(fā)Windows圖形界面程序;C,C++和Java是目前使用最廣的編程語(yǔ)言。

    在實(shí)際的產(chǎn)品測(cè)試開(kāi)發(fā)中,這些平臺(tái)或編程語(yǔ)言也存在一些局限。比如,LabVIEW圖形化語(yǔ)言不便于代碼管理和維護(hù),LabWindows / CVI使用面向過(guò)程的C語(yǔ)言,模塊化開(kāi)發(fā)需要大量的編程技巧,開(kāi)發(fā)效率較低,手工管理內(nèi)存容易導(dǎo)致軟件缺陷(如緩沖區(qū)溢出)。設(shè)計(jì)功能較復(fù)雜的測(cè)試軟件時(shí),靜態(tài)語(yǔ)言在不重新編譯的情況下難以對(duì)軟件的功能進(jìn)行動(dòng)態(tài)配置。

    Python是面向?qū)ο蟮母呒?jí)編程語(yǔ)言,動(dòng)態(tài)類(lèi)型、自動(dòng)內(nèi)存管理、解釋執(zhí)行、原生跨平臺(tái),可拓展性極強(qiáng),具有豐富的開(kāi)源庫(kù),能快速實(shí)現(xiàn)應(yīng)用程序所需的各種功能[1]。Python在儀器編程方面已有少量應(yīng)用[2],主要障礙是大量?jī)x器沒(méi)有提供Python的編程接口。SWIG(Simple Wrapper and Interface Generator)是跨語(yǔ)言接口轉(zhuǎn)換工具,支持Python/Perl/ PHP等動(dòng)態(tài)腳本語(yǔ)言與C,C++,C#,Java等靜態(tài)編譯型語(yǔ)言之間的接口轉(zhuǎn)換[3],Python中的很多拓展庫(kù)實(shí)際上來(lái)自SWIG對(duì)C庫(kù)的封裝。

    本文采用Python設(shè)計(jì)和開(kāi)發(fā)自動(dòng)測(cè)試軟件,提出將SWIG用于儀器驅(qū)動(dòng)的跨語(yǔ)言、跨平臺(tái)封裝,彌補(bǔ)Python在儀器編程方面的短板,希望能夠促進(jìn)Python在虛擬儀器和自動(dòng)測(cè)試領(lǐng)域的推廣和應(yīng)用。

    1 系統(tǒng)組成

    1.1 硬件結(jié)構(gòu)

    整個(gè)測(cè)試系統(tǒng)由測(cè)試計(jì)算機(jī)、測(cè)試服務(wù)器和控制主機(jī)組成,通過(guò)交換機(jī)組網(wǎng),如圖1所示。測(cè)試計(jì)算機(jī)采用RS-232,GPIB或PXI等測(cè)試總線(xiàn)連接測(cè)試資源(模塊化儀器或可程控的臺(tái)式儀器),通過(guò)儀器驅(qū)動(dòng)程序控制儀器設(shè)備;測(cè)試服務(wù)器運(yùn)行數(shù)據(jù)庫(kù)和測(cè)試應(yīng)用軟件;控制主機(jī)實(shí)現(xiàn)人機(jī)交互,對(duì)整個(gè)測(cè)試系統(tǒng)進(jìn)行控制。

    圖1 系統(tǒng)硬件組成

    可根據(jù)測(cè)試需求,調(diào)整和縮放系統(tǒng)規(guī)模,如將三者合為一體,即以傳統(tǒng)的單機(jī)方式運(yùn)行整個(gè)測(cè)試系統(tǒng)。

    1.2 軟件組成

    用Python開(kāi)發(fā)自動(dòng)測(cè)試軟件,其基本層次結(jié)構(gòu)如圖2所示。

    圖2 系統(tǒng)軟件層次結(jié)構(gòu)

    最上層為測(cè)試應(yīng)用層,負(fù)責(zé)測(cè)試用例執(zhí)行、數(shù)據(jù)存儲(chǔ)和分析、測(cè)試報(bào)告生成等具體的測(cè)試業(yè)務(wù)。應(yīng)用層之下為儀器驅(qū)動(dòng)層,在Python儀器驅(qū)動(dòng)模塊中封裝和調(diào)用底層硬件的API,對(duì)測(cè)試資源進(jìn)行配置和管理。

    對(duì)于支持NI-VISA和NI-IVI標(biāo)準(zhǔn)驅(qū)動(dòng)的測(cè)試設(shè)備,Python中的開(kāi)源拓展庫(kù)pyvisa和pyivi分別提供了二者的API封裝,可以直接調(diào)用已封裝好的與具體儀器無(wú)關(guān)的函數(shù)接口或可互換類(lèi)驅(qū)動(dòng)接口[4]。

    但實(shí)際的測(cè)試需求往往豐富多變,因?yàn)楦鞣N原因,測(cè)試系統(tǒng)還會(huì)使用很多缺少VISA或IVI驅(qū)動(dòng)支持的測(cè)試儀器,如各種總線(xiàn)通訊接口卡、數(shù)據(jù)采集卡、多功能復(fù)合儀器,以及一些自研或定制的非標(biāo)準(zhǔn)設(shè)備,有時(shí)也包括一些暫時(shí)無(wú)法升級(jí)的老舊測(cè)試設(shè)備。這類(lèi)不被VISA或IVI驅(qū)動(dòng)支持的測(cè)試資源,常被稱(chēng)作專(zhuān)有設(shè)備或非標(biāo)設(shè)備。

    將Python作為測(cè)試開(kāi)發(fā)平臺(tái)的主要技術(shù)障礙,就是如何在Python中對(duì)這類(lèi)專(zhuān)有設(shè)備進(jìn)行編程控制。

    2 非標(biāo)儀器驅(qū)動(dòng)的封裝和調(diào)用

    儀器驅(qū)動(dòng)通常采用C或C++編寫(xiě),一般會(huì)以C語(yǔ)言動(dòng)態(tài)鏈接庫(kù)的形式發(fā)布,并提供頭文件、庫(kù)文件等供二次開(kāi)發(fā)。常見(jiàn)的儀器驅(qū)動(dòng)程序(或SDK)中包含的文件類(lèi)型及作用,如表1所示。

    表1 非標(biāo)儀器設(shè)備驅(qū)動(dòng)程序的常見(jiàn)結(jié)構(gòu)

    用C,C++調(diào)用專(zhuān)有儀器驅(qū)動(dòng)的API函數(shù)時(shí),一般只需要正確設(shè)置編譯器的鏈接路徑和鏈接方式。在C#中,需要用declare語(yǔ)句對(duì)API函數(shù)的參數(shù)和返回值類(lèi)型等進(jìn)行聲明,之后方可調(diào)用儀器API進(jìn)行編程。有些廠(chǎng)商提供了LabVIEW,C#等環(huán)境的驅(qū)動(dòng)接口聲明代碼(或SDK),以簡(jiǎn)化編程工作。

    Python語(yǔ)言在虛擬儀器開(kāi)發(fā)中使用比例比較低,大多數(shù)儀器廠(chǎng)商并沒(méi)有為儀器提供Python SDK支持。Python不支持指針操作,完全使用引用類(lèi)型表示變量、參數(shù)等(傳遞內(nèi)存地址而不是值拷貝),編譯成中間二進(jìn)制字節(jié)碼后通過(guò)解釋器解釋運(yùn)行。Python與C語(yǔ)言雖然語(yǔ)句類(lèi)似,但在數(shù)據(jù)類(lèi)型、內(nèi)存操作、設(shè)計(jì)模式、運(yùn)行方式等方面存在很大的差異,Python無(wú)法簡(jiǎn)單直接地調(diào)用針對(duì)C語(yǔ)言編程而設(shè)計(jì)的儀器驅(qū)動(dòng)。

    本文對(duì)在Python中跨語(yǔ)言調(diào)用儀器驅(qū)動(dòng)程序,進(jìn)行了技術(shù)研究和方案驗(yàn)證。

    2.1 儀器驅(qū)動(dòng)調(diào)用和封裝

    Python本身是開(kāi)放、可拓展的,除了可使用大量的第三方開(kāi)源拓展庫(kù),還可自行編寫(xiě)Python拓展模塊。借助于一些開(kāi)源庫(kù),可以實(shí)現(xiàn)在Python腳本中調(diào)用外部DLL動(dòng)態(tài)鏈接庫(kù)中的C程序。

    1)ctypes庫(kù),使用方式與C#中非托管方式調(diào)用DLL類(lèi)似,手工編寫(xiě)接口代碼、聲明每個(gè)API函數(shù)的參數(shù)和返回值類(lèi)型。該方案簡(jiǎn)單易行,但工作量大、難以自動(dòng)化處理,適合API函數(shù)較少的情況。

    2)libcffi庫(kù)提供了比ctypes更友好的編程接口,用更少的代碼可完成同樣的功能。

    3)用CPython將外部DLL庫(kù)封裝為原生的Python拓展模塊。該方案需要編寫(xiě)C代碼,將儀器驅(qū)動(dòng)頭文件中定義的各種API函數(shù)、數(shù)據(jù)類(lèi)型等轉(zhuǎn)換為相應(yīng)的Python對(duì)象。由于需要了解Python解釋器的底層實(shí)現(xiàn)機(jī)制,工作量和開(kāi)發(fā)難度都很大。

    4)SWIG可自動(dòng)解析C或C++的代碼和頭文件,提取API函數(shù)的參數(shù)類(lèi)型、返回值類(lèi)型,自動(dòng)生成CPython接口轉(zhuǎn)換代碼。該方案通用性和自動(dòng)化程度較高,只要熟悉SWIG的配置語(yǔ)法,無(wú)需手工編寫(xiě)底層的轉(zhuǎn)換代碼,即可快速批量地進(jìn)行API封裝。Python中的pyivi模塊,實(shí)際上就是NI-IVI的SWIG封裝。

    在以上4種方案中,可能并不存在絕對(duì)的最佳方案。自動(dòng)測(cè)試系統(tǒng)經(jīng)常搭配使用模塊化儀器、臺(tái)式儀器以及其他程控測(cè)試資源,并根據(jù)測(cè)試需求靈活地增加或置換儀器。在選擇驅(qū)動(dòng)封裝方案時(shí),建議根據(jù)驅(qū)動(dòng)API的數(shù)量和復(fù)雜度,結(jié)合開(kāi)發(fā)人員對(duì)相關(guān)工具的熟悉程度,使用ctypes,libcffi或SWIG。

    本文所設(shè)計(jì)的測(cè)試系統(tǒng)中使用了較多的非標(biāo)儀器,API數(shù)量和類(lèi)型都比較豐富,因此使用SWIG對(duì)儀器驅(qū)動(dòng)進(jìn)行封裝,通過(guò)自動(dòng)化處理提高開(kāi)發(fā)效率。

    2.1 用SWIG封裝儀器驅(qū)動(dòng)為Python拓展模塊

    本文以某公司的多功能數(shù)據(jù)采集模塊PXI-nuDAQ2206為例(以下簡(jiǎn)稱(chēng)DAQ2206),簡(jiǎn)要介紹將其廠(chǎng)商專(zhuān)有驅(qū)動(dòng)用SWIG轉(zhuǎn)換為Python拓展模塊的關(guān)鍵步驟。

    DAQ2206為PXI模塊儀器,測(cè)試資源包括64個(gè)AD通道,2個(gè)DA通道,2個(gè)定時(shí)/計(jì)數(shù)器和24個(gè)IO口。在工業(yè)控制、自動(dòng)測(cè)試中使用多功能復(fù)合測(cè)試設(shè)備,可以提高資源密度、減小設(shè)備體積。但此類(lèi)多功能復(fù)合設(shè)備,往往缺少VISA和IVI驅(qū)動(dòng)的支持。

    公司提供了專(zhuān)有驅(qū)動(dòng)包D2K_DASK,支持包括DAQ2206在內(nèi)的多種模塊化儀器。用SWIG對(duì)其進(jìn)行接口封裝的核心工作是按照SWIG庫(kù)的配置語(yǔ)法,在拓展名為*.i的API接口描述文件中對(duì)特殊的API參數(shù)類(lèi)型進(jìn)行聲明,以便于SWIG能夠正確地進(jìn)行類(lèi)型轉(zhuǎn)換和封裝。示例如下(片段):

    %module D2KDASK

    %include"D2K_DASK.h"

    %include"typemaps.i"

    %apply int *OUTPUT { BOOLEAN *Stopped,U32 *AccessCnt};

    %apply double *OUTPUT { F64 *voltage };

    首先用%include指令包含驅(qū)動(dòng)API的頭文件。一般情況下SWIG能自動(dòng)識(shí)別大部分函數(shù)原型、變量和常量[5],并將其轉(zhuǎn)換為相應(yīng)的Python對(duì)象。Python采用動(dòng)態(tài)數(shù)據(jù)類(lèi)型和自動(dòng)內(nèi)存管理,無(wú)法通過(guò)指針直接操作內(nèi)存,所以?xún)x器驅(qū)動(dòng)中經(jīng)常使用的指針類(lèi)型的參數(shù)通常需要特殊處理。

    儀器API大多將操作的狀態(tài)碼作為返回值,但由于C / C++函數(shù)不支持多返回值,為了輸出額外的數(shù)據(jù),一般會(huì)使用指針作為參數(shù)、間接地繞開(kāi)這一限制。以函數(shù)D2K_AI_AsyncCheck為例,其函數(shù)原型為I16 D2K_AI_AsyncCheck (U16 CardNumber,BOOLEAN *Stopped,U32*AccessCnt)。其中,指針類(lèi)型的參數(shù)BOOLEAN*Stopped和U32 *AccessCnt,被用于輸出數(shù)據(jù)采集狀態(tài)和已采集數(shù)據(jù)的個(gè)數(shù)。該API函數(shù)實(shí)際上并不關(guān)心這些形參的初始值,只是單向地將輸出數(shù)據(jù)寫(xiě)入指針?biāo)赶虻膬?nèi)存。

    借助于SWIG的指針類(lèi)型處理模塊typemaps.i,通過(guò)指令%apply int *OUTPUT { BOOLEAN *Stopped,U32 *AccessCnt },可將對(duì)應(yīng)的參數(shù)聲明為Python整數(shù)類(lèi)型,參數(shù)用途為OUTPUT。

    編寫(xiě)好SWIG接口文件后,調(diào)用swig命令可自動(dòng)生成接口的包裝代碼(如D2KDASK_wrap.c),將其編譯為動(dòng)態(tài)鏈接庫(kù)(Windows下還需要修改拓展名為*.pyd),即得到儀器驅(qū)動(dòng)的Python拓展模塊。在Python中可直接import導(dǎo)入儀器驅(qū)動(dòng)拓展模塊。受益于Python語(yǔ)法簡(jiǎn)單、多返回值、動(dòng)態(tài)類(lèi)型、自動(dòng)內(nèi)存管理等特性,無(wú)需繁瑣的定義、聲明和底層操作,可以簡(jiǎn)潔、自然地調(diào)用驅(qū)動(dòng)模塊中的資源,如:

    >>>from D2K_DASK import D2K_AI_AsyncCheck

    >>>status,stop,count=D2K_AI_AsyncCheck(0)

    >>>status,stop,count

    (0,1,50)

    以上只是使用SWIG封裝儀器驅(qū)動(dòng)的簡(jiǎn)單示例。除typemaps.i外,SWIG還提供了windows.i,cpointer.i,carrays.i,cstring.i,cmalloc.i,cdata.i等拓展庫(kù),能夠處理Windows編程中使用的各種頭文件,在Python腳本中操作函數(shù)指針、數(shù)組、字符串、結(jié)構(gòu)體和聯(lián)合體等C語(yǔ)言數(shù)據(jù)類(lèi)型,通過(guò)malloc動(dòng)態(tài)申請(qǐng)和釋放內(nèi)存,直接對(duì)內(nèi)存進(jìn)行不受保護(hù)地讀寫(xiě)。SWIG大大豐富和擴(kuò)充了Python的底層編程能力,基本能滿(mǎn)足用Python進(jìn)行儀器編程的需求。

    2.2 進(jìn)一步功能封裝

    將儀器驅(qū)動(dòng)封裝為Python模塊后,還可參考IVI可互換類(lèi)驅(qū)動(dòng)的實(shí)現(xiàn)機(jī)制,利用Python面向?qū)ο蟮奶匦?,將具體的底層API操作封裝在類(lèi)內(nèi)部,對(duì)外抽象出與儀器無(wú)關(guān)的高級(jí)操作接口,逐步將測(cè)試軟件與底層儀器API解耦,提高儀器的可互換性。

    2.3 實(shí)現(xiàn)分布式和跨平臺(tái)調(diào)用

    設(shè)計(jì)和開(kāi)發(fā)測(cè)試系統(tǒng)時(shí),有時(shí)需要在測(cè)試軟件中集中管理和操作連接到多臺(tái)測(cè)試計(jì)算機(jī)的儀器資源??赡艿脑虬ǎ河?jì)算機(jī)接口類(lèi)型和數(shù)量有限,儀器設(shè)備空間分布較廣,系統(tǒng)中不同的測(cè)試設(shè)備所要求的軟件運(yùn)行環(huán)境無(wú)法統(tǒng)一等。隨著計(jì)算機(jī)軟硬件平臺(tái)不斷升級(jí),測(cè)試設(shè)備會(huì)逐漸過(guò)時(shí),在需要對(duì)老舊的測(cè)試系統(tǒng)進(jìn)行升級(jí)維護(hù)時(shí),上述問(wèn)題可能會(huì)更加突出[6]。將儀器設(shè)備接入到多臺(tái)測(cè)試計(jì)算機(jī)后,傳統(tǒng)的測(cè)試開(kāi)發(fā)平臺(tái)或編程語(yǔ)言往往難以用比較簡(jiǎn)單的方式,解決在分布式、跨平臺(tái)的環(huán)境下,對(duì)儀器驅(qū)動(dòng)進(jìn)行遠(yuǎn)程操作和遠(yuǎn)程調(diào)試等問(wèn)題。

    Python具有數(shù)量眾多且功能強(qiáng)大的網(wǎng)絡(luò)編程庫(kù)。其中,RPyC(Remote Python Call)庫(kù)采用對(duì)象代理(Object Proxying)技術(shù),可以像操作本地對(duì)象一樣操作遠(yuǎn)程主機(jī)上的Python模塊和程序。Python作為弱類(lèi)型的動(dòng)態(tài)語(yǔ)言,允許在運(yùn)行時(shí)修改和替換對(duì)象,該技術(shù)被稱(chēng)為“猴子補(bǔ)丁”(MonkeyPatch),可用于在不改變?cè)创a的情況下、對(duì)軟件功能進(jìn)行追加或變更。

    結(jié)合RPyC庫(kù)和“猴子補(bǔ)丁”,通過(guò)本地測(cè)試軟件中的代理對(duì)象,可通過(guò)RPyC庫(kù),透明地操作遠(yuǎn)程計(jì)算機(jī)所連接的測(cè)試設(shè)備,如圖3所示。

    圖3 實(shí)現(xiàn)遠(yuǎn)程、跨平臺(tái)調(diào)用儀器驅(qū)動(dòng)

    >>>import rpyc

    >>>server_ip=′192.168.1.22′

    >>>server=rpyc.classic.connect(host=server_ip,port=18812)

    >>>D2K_AI_AsyncCheck=server.D2K_DASK.D2K_AI_AsyncCheck

    >>>status,stop,count=D2K_AI_AsyncCheck(0)

    在實(shí)現(xiàn)遠(yuǎn)程調(diào)用的同時(shí),以上方案還支持跨平臺(tái)操作,即遠(yuǎn)程計(jì)算機(jī)和本地計(jì)算機(jī)可分別使用不同類(lèi)型的操作系統(tǒng)(Windows/Linux/Unix等),不同版本的Python,SWIG。

    使用pyvisa,pyivi以及SWIG封裝的Python拓展調(diào)用儀器驅(qū)動(dòng),結(jié)合RPyC和“猴子補(bǔ)丁”,可將單機(jī)測(cè)試軟件無(wú)縫遷移到分布式、跨平臺(tái)的網(wǎng)絡(luò)環(huán)境中。該方案能非常好地解決測(cè)試軟件設(shè)計(jì)中遠(yuǎn)程調(diào)試、遠(yuǎn)程操作以及運(yùn)行環(huán)境無(wú)法統(tǒng)一的問(wèn)題,為老舊測(cè)試設(shè)備的聯(lián)網(wǎng)升級(jí)改造、多臺(tái)測(cè)試機(jī)的組網(wǎng)運(yùn)行,提供了一種簡(jiǎn)單易行的技術(shù)方案。

    3 性能測(cè)試與分析

    Python腳本在運(yùn)行時(shí)首先會(huì)被編譯為中間字節(jié)碼,再通過(guò)解釋器解釋執(zhí)行,執(zhí)行過(guò)程中解釋器會(huì)進(jìn)行大量的類(lèi)型檢查、自省等操作,導(dǎo)致Python代碼的運(yùn)行效率和實(shí)時(shí)性表現(xiàn)較差[7]。虛擬儀器程序和自動(dòng)測(cè)試軟件,對(duì)運(yùn)行性能和實(shí)時(shí)性往往有較高的要求。調(diào)用經(jīng)SWIG封裝的儀器驅(qū)動(dòng)模塊時(shí),隱含的類(lèi)型轉(zhuǎn)換、數(shù)據(jù)拷貝等跨語(yǔ)言調(diào)用,必然會(huì)引入一定的封裝延遲。因此,有必要定量測(cè)量和研究經(jīng)SWIG封裝后的Python儀器驅(qū)動(dòng)模塊的運(yùn)行效率。

    本文選取了DAQ2206的5個(gè)API函數(shù),分別用C語(yǔ)言直接調(diào)用和用Python調(diào)用經(jīng)SWIG封裝后的驅(qū)動(dòng)模塊,統(tǒng)計(jì)執(zhí)行耗時(shí)、計(jì)算封裝開(kāi)銷(xiāo)。

    在C程序中精確測(cè)量時(shí)間的原理是:北橋提供了高精度性能計(jì)數(shù)器,調(diào)用QueryPerformanceCounter和QueryPerformanceFrequency這兩個(gè)API可分別獲取其計(jì)數(shù)值和計(jì)數(shù)頻率。在被測(cè)函數(shù)前后插樁、獲取計(jì)數(shù)差值,除以計(jì)數(shù)頻率,即得到函數(shù)的執(zhí)行耗時(shí)。

    表2 測(cè)試環(huán)境

    嵌入式控制器 cPCI-2510計(jì)數(shù)頻率測(cè)得約為1.46 MHz(硬件決定),相當(dāng)于計(jì)時(shí)分辨力可達(dá)1 μs以上。測(cè)試次數(shù)1000次,數(shù)據(jù)統(tǒng)計(jì)如表3所示。

    表3 性能測(cè)試數(shù)據(jù) μs

    可以看出,SWIG接口轉(zhuǎn)換引入的封裝耗時(shí)約為2~15 μs。Register_Card,Release_Card的延遲相對(duì)其他API較高,但由于只在初始化階段和程序退出時(shí)調(diào)用,封裝開(kāi)銷(xiāo)對(duì)性能的影響基本可忽略。其他3個(gè)API函數(shù)的封裝開(kāi)銷(xiāo)為2~3 μs,與API本身的執(zhí)行時(shí)間沒(méi)有明顯關(guān)聯(lián)。受操作系統(tǒng)任務(wù)調(diào)度影響,Windows軟件的實(shí)時(shí)性指標(biāo)往往只能達(dá)到10 ms左右,因此微秒級(jí)的調(diào)用開(kāi)銷(xiāo)一般不會(huì)對(duì)測(cè)試任務(wù)產(chǎn)生嚴(yán)重影響。

    在對(duì)程序性能要求非常嚴(yán)格的場(chǎng)合,不建議非常頻繁(如每秒數(shù)千次以上)地調(diào)用SWIG封裝后的API函數(shù)(如AI_VoltScale)。此時(shí),可以將最耗時(shí)的底層關(guān)鍵代碼用C語(yǔ)言實(shí)現(xiàn),一并編譯、封裝到Python儀器驅(qū)動(dòng)拓展模塊中,作為整體進(jìn)行調(diào)用,這樣既可以使用Python語(yǔ)言進(jìn)行高效率的開(kāi)發(fā),也不會(huì)由于SWIG封裝和Python解釋運(yùn)行而導(dǎo)致軟件整體的實(shí)時(shí)性受到破壞。

    在100 Mbps局域網(wǎng)環(huán)境下,遠(yuǎn)程調(diào)用驅(qū)動(dòng)API會(huì)再引入約2 ms的傳輸延遲,可能對(duì)軟件的執(zhí)行效率產(chǎn)生一定的影響。因此,遠(yuǎn)程調(diào)用一般更適用于軟件調(diào)試、低速數(shù)據(jù)采集等實(shí)時(shí)性要求相對(duì)較低的場(chǎng)景。

    4 總結(jié)

    測(cè)試軟件是虛擬儀器和自動(dòng)測(cè)試系統(tǒng)的核心,傳統(tǒng)的測(cè)試開(kāi)發(fā)平臺(tái)使用中存在較大的局限性。本文通過(guò)SWIG將儀器驅(qū)動(dòng)程序轉(zhuǎn)換為Python拓展模塊,彌補(bǔ)了Python在底層編程方面的不足,解決了用Python進(jìn)行儀器編程的主要障礙。

    受益于Python的自動(dòng)內(nèi)存管理、動(dòng)態(tài)類(lèi)型、面向?qū)ο笠约柏S富的拓展庫(kù),用Python開(kāi)發(fā)測(cè)試軟件,可提高編程效率,降低在分布式、跨平臺(tái)的環(huán)境下設(shè)計(jì)和開(kāi)發(fā)測(cè)試軟件的難度,縮短復(fù)雜測(cè)控系統(tǒng)的開(kāi)發(fā)時(shí)間,一定程度上也有助于提高儀器的可互換性。在對(duì)軟件實(shí)時(shí)性、儀器操作性能等有較高要求的場(chǎng)合,可采用C語(yǔ)言和Python混合編程,在軟件開(kāi)發(fā)效率和運(yùn)行效率之間,取得比較好的平衡。

    [1] 丁未.將工業(yè)與科技世界的運(yùn)行統(tǒng)一在Python語(yǔ)言的開(kāi)源框架中[J].中國(guó)儀器儀表,2013(08):23-25.

    [2] Hughes J M.真實(shí)世界的Python儀器監(jiān)控 : Real world instrumentation with Python:數(shù)據(jù)采集與控制系統(tǒng)自動(dòng)化[M].北京:電子工業(yè)出版社,2013.

    [3] Beazley D M.SWIG: An Easy to Use Tool for Integrating Scripting Languages with C and C++[C]// Usenix Tcl/tk Workshop,1996.

    [4] 黃建軍,李宥謀,劉婧,等.基于Python語(yǔ)言的自動(dòng)化測(cè)試系統(tǒng)的設(shè)計(jì)與實(shí)現(xiàn)[J].現(xiàn)代電子技術(shù),2017,40(4):39-43.

    [5] Beazley D M.Automated scientific software scripting with SWIG[J].Future Generation Computer Systems,2003,19(5):599-609.

    [6] Weltzin C,Schlonsky S.Reducing obsolescence of Linux-based ATEs with virtualization[J].Instrumentation & Measurement Magazine IEEE,2011,14(4):1-3.

    [7] 范浩杰.面向Python程序源代碼的分析與編譯優(yōu)化研究[D].北京:北京信息科技大學(xué),2015.

    猜你喜歡
    測(cè)試軟件自動(dòng)測(cè)試跨平臺(tái)
    網(wǎng)絡(luò)自適應(yīng)測(cè)試軟件運(yùn)行方法設(shè)計(jì)
    跨平臺(tái)APEX接口組件的設(shè)計(jì)與實(shí)現(xiàn)
    JXG-50S型相敏軌道電路接收器自動(dòng)測(cè)試臺(tái)
    可并行測(cè)試的電磁兼容自動(dòng)測(cè)試系統(tǒng)的實(shí)現(xiàn)
    關(guān)于某型雷達(dá)自動(dòng)測(cè)試系統(tǒng)的幾點(diǎn)認(rèn)識(shí)和建議
    電子制作(2018年11期)2018-08-04 03:26:00
    自動(dòng)化檢測(cè)EPU10A板卡系統(tǒng)設(shè)計(jì)與實(shí)現(xiàn)
    基于QT的跨平臺(tái)輸電鐵塔監(jiān)控終端軟件設(shè)計(jì)與實(shí)現(xiàn)
    基于OPC跨平臺(tái)通信的電機(jī)監(jiān)測(cè)與診斷系統(tǒng)
    基于B/S的跨平臺(tái)用戶(hù)界面可配置算法研究
    遠(yuǎn)程開(kāi)放教育學(xué)生自主學(xué)習(xí)能力評(píng)價(jià)的研究
    真人一进一出gif抽搐免费| 亚洲av免费高清在线观看| 在线免费观看不下载黄p国产 | 久久人人精品亚洲av| 亚洲国产精品合色在线| 十八禁国产超污无遮挡网站| 日韩亚洲欧美综合| 亚洲最大成人av| 国产欧美日韩精品亚洲av| 婷婷精品国产亚洲av在线| 女同久久另类99精品国产91| 久久久久久久久中文| 脱女人内裤的视频| 国产单亲对白刺激| 一本久久中文字幕| 老鸭窝网址在线观看| 国产精品精品国产色婷婷| 久久久久久大精品| 嫩草影院精品99| АⅤ资源中文在线天堂| 国内精品美女久久久久久| 成人高潮视频无遮挡免费网站| 国产在线精品亚洲第一网站| 直男gayav资源| 亚洲成av人片免费观看| 嫩草影院入口| 51午夜福利影视在线观看| 精华霜和精华液先用哪个| 色5月婷婷丁香| 如何舔出高潮| 免费在线观看成人毛片| 99在线视频只有这里精品首页| 一夜夜www| 淫秽高清视频在线观看| 国产三级黄色录像| 亚洲av免费在线观看| 18禁黄网站禁片免费观看直播| 欧美高清成人免费视频www| 亚洲精品乱码久久久v下载方式| 欧美成狂野欧美在线观看| 一个人免费在线观看电影| 九九久久精品国产亚洲av麻豆| 国产高清视频在线播放一区| 欧美精品啪啪一区二区三区| 国产成人a区在线观看| 美女高潮的动态| 亚洲国产精品成人综合色| 亚洲欧洲日产国产| 亚洲精品视频女| av福利片在线观看| 精品少妇黑人巨大在线播放| 别揉我奶头 嗯啊视频| 在线免费观看不下载黄p国产| 最后的刺客免费高清国语| 国产精品熟女久久久久浪| 国产精品久久久久久精品电影小说 | 午夜亚洲福利在线播放| 国产精品国产三级国产av玫瑰| 国产真实伦视频高清在线观看| 亚洲精品视频女| 中文欧美无线码| 美女主播在线视频| 免费观看a级毛片全部| 国产毛片a区久久久久| 国产淫语在线视频| 别揉我奶头 嗯啊视频| av女优亚洲男人天堂| 亚洲国产精品成人综合色| 成人特级av手机在线观看| 久久久国产一区二区| 亚洲精品久久久久久婷婷小说| 亚洲最大成人中文| 天堂网av新在线| 久久久久久久国产电影| 日本欧美国产在线视频| 久久久久久久精品精品| 九色成人免费人妻av| 99久久精品热视频| av在线观看视频网站免费| 插逼视频在线观看| 日韩欧美一区视频在线观看 | 国产成人精品久久久久久| 国产成人精品久久久久久| 99re6热这里在线精品视频| 欧美97在线视频| 国产大屁股一区二区在线视频| 欧美极品一区二区三区四区| 亚洲人成网站高清观看| 青春草国产在线视频| 成人无遮挡网站| 免费观看无遮挡的男女| 久久精品久久精品一区二区三区| 国产精品精品国产色婷婷| av免费观看日本| 国产一区二区三区av在线| 欧美bdsm另类| 最近最新中文字幕免费大全7| 国产一区二区三区av在线| 久久国产乱子免费精品| 亚洲激情五月婷婷啪啪| 中文字幕av成人在线电影| 亚洲欧美一区二区三区黑人 | 国产白丝娇喘喷水9色精品| 成年女人在线观看亚洲视频 | 国产黄色免费在线视频| 国产有黄有色有爽视频| 久久久久久久久久久免费av| 亚洲精华国产精华液的使用体验| 国产精品麻豆人妻色哟哟久久| 99热这里只有是精品在线观看| 丝袜脚勾引网站| 免费观看的影片在线观看| 午夜激情久久久久久久| 国产精品久久久久久精品电影| 美女主播在线视频| 国产极品天堂在线| av网站免费在线观看视频| 永久网站在线| 国产有黄有色有爽视频| 最近中文字幕2019免费版| 看十八女毛片水多多多| 亚洲色图av天堂| 国产伦精品一区二区三区四那| 99久久精品一区二区三区| 亚洲欧美日韩东京热| 久久鲁丝午夜福利片| 美女被艹到高潮喷水动态| 中文在线观看免费www的网站| 国产精品久久久久久久久免| 18禁动态无遮挡网站| 99热这里只有是精品50| 亚洲无线观看免费| 亚洲在久久综合| 男女那种视频在线观看| 久久久久久久大尺度免费视频| 国产爽快片一区二区三区| 国产精品伦人一区二区| 国产精品蜜桃在线观看| 久久精品国产鲁丝片午夜精品| 欧美 日韩 精品 国产| 亚洲精品第二区| 能在线免费看毛片的网站| 午夜福利视频精品| 欧美xxxx黑人xx丫x性爽| 人妻少妇偷人精品九色| 国产91av在线免费观看| 中文在线观看免费www的网站| 欧美3d第一页| 久久精品国产鲁丝片午夜精品| 成人欧美大片| 国产精品99久久久久久久久| 免费av不卡在线播放| 伊人久久精品亚洲午夜| 欧美高清成人免费视频www| 人人妻人人看人人澡| 久久久精品免费免费高清| 可以在线观看毛片的网站| 国产成人a区在线观看| 看黄色毛片网站| 亚洲丝袜综合中文字幕| 国产午夜精品一二区理论片| 亚洲av中文字字幕乱码综合| 亚洲三级黄色毛片| 亚洲国产精品999| 国产成人午夜福利电影在线观看| 国产毛片a区久久久久| 在线天堂最新版资源| 亚洲真实伦在线观看| 又大又黄又爽视频免费| 亚洲国产av新网站| 亚洲av福利一区| 看非洲黑人一级黄片| 亚洲综合色惰| 欧美另类一区| 嫩草影院入口| 一区二区三区乱码不卡18| 亚洲国产最新在线播放| 久久国内精品自在自线图片| 色视频www国产| 最近最新中文字幕大全电影3| 赤兔流量卡办理| 女人久久www免费人成看片| 亚洲精品亚洲一区二区| 欧美激情在线99| 久久精品久久精品一区二区三区| 啦啦啦中文免费视频观看日本| 男男h啪啪无遮挡| 国语对白做爰xxxⅹ性视频网站| 大香蕉97超碰在线| 国产淫片久久久久久久久| 少妇人妻精品综合一区二区| 人妻系列 视频| 晚上一个人看的免费电影| 久久精品国产a三级三级三级| 观看免费一级毛片| av专区在线播放| 人人妻人人爽人人添夜夜欢视频 | 夜夜看夜夜爽夜夜摸| 国产高潮美女av| 亚洲天堂av无毛| 亚洲欧洲日产国产| 最近手机中文字幕大全| 特大巨黑吊av在线直播| 丝瓜视频免费看黄片| 男女无遮挡免费网站观看| 三级经典国产精品| 大话2 男鬼变身卡| 日韩不卡一区二区三区视频在线| 国产亚洲最大av| 午夜福利视频1000在线观看| 最近的中文字幕免费完整| 亚洲精品国产av蜜桃| 久热这里只有精品99| 最近中文字幕2019免费版| 成人黄色视频免费在线看| 亚洲欧洲日产国产| 亚洲精品久久午夜乱码| 中国国产av一级| 日日摸夜夜添夜夜爱| 最近的中文字幕免费完整| 别揉我奶头 嗯啊视频| 久久久久久久久久成人| 人体艺术视频欧美日本| 日产精品乱码卡一卡2卡三| 亚洲国产av新网站| 综合色av麻豆| 六月丁香七月| 久久久久性生活片| 国产日韩欧美亚洲二区| 午夜免费观看性视频| 国产毛片在线视频| 我的老师免费观看完整版| 99久久精品热视频| 精品午夜福利在线看| 麻豆国产97在线/欧美| 国产黄片视频在线免费观看| 一二三四中文在线观看免费高清| 高清欧美精品videossex| 亚洲精品第二区| 亚洲精品乱码久久久v下载方式| 大又大粗又爽又黄少妇毛片口| 久久久久久久久久成人| 最近中文字幕2019免费版| 亚洲精品视频女| 一区二区av电影网| 久久久久久国产a免费观看| 日本爱情动作片www.在线观看| 插阴视频在线观看视频| 久久精品国产亚洲网站| 成年av动漫网址| 久热这里只有精品99| 网址你懂的国产日韩在线| 三级国产精品欧美在线观看| 少妇人妻 视频| 国产黄片视频在线免费观看| 国产淫片久久久久久久久| 欧美 日韩 精品 国产| av在线app专区| 中文资源天堂在线| 国产免费福利视频在线观看| 99热网站在线观看| 久久97久久精品| 好男人视频免费观看在线| 日本欧美国产在线视频| 熟妇人妻不卡中文字幕| 国产伦精品一区二区三区四那| 欧美区成人在线视频| eeuss影院久久| 国精品久久久久久国模美| 啦啦啦啦在线视频资源| 国产在线男女| 成人毛片a级毛片在线播放| 在线观看三级黄色| 一区二区三区免费毛片| 亚洲不卡免费看| 久久久久久久久久久丰满| 在线免费观看不下载黄p国产| 国产探花在线观看一区二区| 国产高潮美女av| 亚洲一级一片aⅴ在线观看| 在线观看美女被高潮喷水网站| 亚洲欧美中文字幕日韩二区| 男女那种视频在线观看| 一级毛片黄色毛片免费观看视频| 国产精品人妻久久久影院| 男人爽女人下面视频在线观看| 免费人成在线观看视频色| 国产探花极品一区二区| 在线看a的网站| 亚洲成人精品中文字幕电影| 一个人看的www免费观看视频| 天天躁夜夜躁狠狠久久av| 亚洲国产欧美在线一区| 18禁在线播放成人免费| 国产乱来视频区| 欧美人与善性xxx| 国产精品福利在线免费观看| 久久精品综合一区二区三区| 麻豆成人午夜福利视频| 美女视频免费永久观看网站| 一级爰片在线观看| 欧美激情久久久久久爽电影| 亚洲欧美精品专区久久| 嫩草影院精品99| 性色av一级| 日韩国内少妇激情av| 国产精品无大码| 欧美少妇被猛烈插入视频| 久久国内精品自在自线图片| 内地一区二区视频在线| 伦精品一区二区三区| 亚洲成人精品中文字幕电影| 青青草视频在线视频观看| 超碰97精品在线观看| 亚洲国产日韩一区二区| 精品久久久久久久久亚洲| 国产亚洲最大av| 欧美成人一区二区免费高清观看| 久久人人爽人人片av| 欧美97在线视频| 熟女电影av网| 亚洲欧洲国产日韩| 少妇裸体淫交视频免费看高清| 国产美女午夜福利| 国产乱人偷精品视频| 亚洲国产日韩一区二区| 2021天堂中文幕一二区在线观| 最近最新中文字幕免费大全7| 国产一区亚洲一区在线观看| av在线播放精品| 国产亚洲一区二区精品| 亚洲在久久综合| 看非洲黑人一级黄片| 最后的刺客免费高清国语| 亚洲图色成人| 久久久久国产网址| 亚洲av欧美aⅴ国产| 国产成人91sexporn| 国产在视频线精品| 美女被艹到高潮喷水动态| 国产极品天堂在线| av国产精品久久久久影院| 在线亚洲精品国产二区图片欧美 | 亚洲人成网站在线播| 国产成人精品福利久久| 国产精品国产三级国产av玫瑰| videossex国产| 嘟嘟电影网在线观看| 成人欧美大片| 亚洲电影在线观看av| 七月丁香在线播放| 国产淫片久久久久久久久| 18+在线观看网站| 午夜福利高清视频| 午夜激情久久久久久久| 午夜爱爱视频在线播放| 人妻 亚洲 视频| 神马国产精品三级电影在线观看| 久久久精品欧美日韩精品| 国产乱来视频区| 特级一级黄色大片| 成人黄色视频免费在线看| 69人妻影院| 国产精品久久久久久久久免| 午夜免费男女啪啪视频观看| 精品久久久久久久久亚洲| 欧美xxxx性猛交bbbb| 看免费成人av毛片| 国产精品久久久久久精品电影| 亚洲欧美中文字幕日韩二区| 亚洲欧美成人精品一区二区| 久久久亚洲精品成人影院| 久久久久久国产a免费观看| 亚洲欧美一区二区三区国产| 人妻 亚洲 视频| 日韩av在线免费看完整版不卡| 一级毛片电影观看| 99热6这里只有精品| 欧美老熟妇乱子伦牲交| 自拍偷自拍亚洲精品老妇| 欧美一区二区亚洲| 亚洲精品成人av观看孕妇| 欧美老熟妇乱子伦牲交| 亚洲欧美精品专区久久| 久久99热这里只频精品6学生| 中文字幕亚洲精品专区| 国产白丝娇喘喷水9色精品| 九九久久精品国产亚洲av麻豆| 春色校园在线视频观看| 成人高潮视频无遮挡免费网站| 神马国产精品三级电影在线观看| 丝袜脚勾引网站| a级一级毛片免费在线观看| 亚洲精品成人久久久久久| 国产高清有码在线观看视频| 成人亚洲精品av一区二区| 亚洲av二区三区四区| 国产成年人精品一区二区| 久久精品夜色国产| 亚洲色图av天堂| 国产亚洲午夜精品一区二区久久 | 美女脱内裤让男人舔精品视频| 亚洲怡红院男人天堂| 一级毛片我不卡| 精品一区二区三卡| 亚洲真实伦在线观看| 69av精品久久久久久| 欧美一级a爱片免费观看看| 自拍偷自拍亚洲精品老妇| videossex国产| 午夜视频国产福利| 婷婷色综合大香蕉| 日韩欧美精品免费久久| 男女无遮挡免费网站观看| 自拍偷自拍亚洲精品老妇| 日本爱情动作片www.在线观看| 亚洲人成网站在线播| 大话2 男鬼变身卡| 噜噜噜噜噜久久久久久91| 亚洲美女搞黄在线观看| 91午夜精品亚洲一区二区三区| 午夜日本视频在线| 久久久精品欧美日韩精品| 97在线人人人人妻| 亚洲av欧美aⅴ国产| 欧美激情在线99| 乱码一卡2卡4卡精品| 久久久亚洲精品成人影院| 嫩草影院新地址| 一级爰片在线观看| av在线观看视频网站免费| 国产亚洲精品久久久com| 国产探花极品一区二区| 五月玫瑰六月丁香| 中文字幕亚洲精品专区| 在线观看av片永久免费下载| 69人妻影院| 男女那种视频在线观看| 亚洲精品亚洲一区二区| 欧美日韩国产mv在线观看视频 | 精品久久久噜噜| 国产精品成人在线| 亚洲va在线va天堂va国产| 美女被艹到高潮喷水动态| 国产真实伦视频高清在线观看| 精品久久久久久久末码| 一级毛片aaaaaa免费看小| 国产真实伦视频高清在线观看| 在线观看免费高清a一片| 丝袜喷水一区| 神马国产精品三级电影在线观看| 亚洲,一卡二卡三卡| 一级爰片在线观看| 自拍偷自拍亚洲精品老妇| 欧美xxxx黑人xx丫x性爽| 国产色婷婷99| 深夜a级毛片| av在线播放精品| 国产日韩欧美在线精品| av播播在线观看一区| 王馨瑶露胸无遮挡在线观看| 人妻夜夜爽99麻豆av| 国产精品av视频在线免费观看| 午夜爱爱视频在线播放| 网址你懂的国产日韩在线| 久久ye,这里只有精品| 在线观看一区二区三区激情| 亚洲成人中文字幕在线播放| 熟女人妻精品中文字幕| 波野结衣二区三区在线| av一本久久久久| 中文字幕人妻熟人妻熟丝袜美| av在线观看视频网站免费| 国产亚洲精品久久久com| 亚洲欧美日韩东京热| 国产男女内射视频| 精品人妻一区二区三区麻豆| 2022亚洲国产成人精品| 成年人午夜在线观看视频| 国产精品一区二区在线观看99| 国产综合精华液| 精品久久久久久久人妻蜜臀av| 各种免费的搞黄视频| 亚洲精品国产av蜜桃| 日韩av不卡免费在线播放| videossex国产| 国产精品不卡视频一区二区| 男女下面进入的视频免费午夜| 精品人妻熟女av久视频| 女人久久www免费人成看片| 国产一区二区亚洲精品在线观看| 欧美高清性xxxxhd video| 在线观看av片永久免费下载| av卡一久久| 欧美日本视频| 亚洲一级一片aⅴ在线观看| 成人二区视频| 成人毛片a级毛片在线播放| 久久韩国三级中文字幕| 熟女av电影| 黑人高潮一二区| 亚洲久久久久久中文字幕| 日本午夜av视频| 如何舔出高潮| 国产亚洲5aaaaa淫片| 在线免费十八禁| 成年女人看的毛片在线观看| 一区二区三区免费毛片| 亚洲,欧美,日韩| 午夜激情久久久久久久| 熟妇人妻不卡中文字幕| 自拍偷自拍亚洲精品老妇| 国产美女午夜福利| 亚洲欧美精品自产自拍| 国模一区二区三区四区视频| 五月开心婷婷网| 青青草视频在线视频观看| 亚洲精华国产精华液的使用体验| 亚洲内射少妇av| 国产大屁股一区二区在线视频| 黄片wwwwww| 欧美极品一区二区三区四区| 亚洲熟女精品中文字幕| 成人鲁丝片一二三区免费| 久久久午夜欧美精品| 国产精品99久久99久久久不卡 | 亚洲精品日本国产第一区| 夫妻性生交免费视频一级片| 亚洲色图综合在线观看| 欧美人与善性xxx| 午夜亚洲福利在线播放| 日韩国内少妇激情av| 亚洲av电影在线观看一区二区三区 | 黄色一级大片看看| 亚洲av一区综合| 亚洲,欧美,日韩| 嫩草影院精品99| 人妻 亚洲 视频| av又黄又爽大尺度在线免费看| 久久久久久久久久久丰满| 日韩中字成人| 国产精品伦人一区二区| 免费看a级黄色片| 少妇人妻精品综合一区二区| 亚洲精品aⅴ在线观看| 一本一本综合久久| 欧美日韩一区二区视频在线观看视频在线 | 在线观看三级黄色| 国产综合懂色| 搡女人真爽免费视频火全软件| 极品教师在线视频| 亚洲精品,欧美精品| 99热6这里只有精品| 亚洲激情五月婷婷啪啪| 精品人妻熟女av久视频| 大话2 男鬼变身卡| 国产在视频线精品| 免费av不卡在线播放| 亚洲aⅴ乱码一区二区在线播放| 亚洲,欧美,日韩| 在线观看国产h片| 波多野结衣巨乳人妻| 国产成人福利小说| 日韩视频在线欧美| 亚洲精品色激情综合| 老师上课跳d突然被开到最大视频| 亚洲欧洲国产日韩| 中文字幕制服av| 亚洲精品日韩av片在线观看| 欧美3d第一页| 国产69精品久久久久777片| 在线观看av片永久免费下载| 亚洲国产色片| 日本黄大片高清| 日本欧美国产在线视频| 欧美日韩一区二区视频在线观看视频在线 | 2018国产大陆天天弄谢| 精品一区二区三卡| 精品午夜福利在线看| 男女那种视频在线观看| 中国三级夫妇交换| 在线观看人妻少妇| 一级毛片 在线播放| 精品人妻一区二区三区麻豆| 少妇人妻久久综合中文| 免费在线观看成人毛片| av在线观看视频网站免费| 国产精品国产三级国产专区5o| 久久99蜜桃精品久久| 中文字幕免费在线视频6| 草草在线视频免费看| 国产乱人偷精品视频| av免费在线看不卡| 国产日韩欧美在线精品| 少妇的逼好多水| 美女被艹到高潮喷水动态| 国产亚洲午夜精品一区二区久久 | 日日撸夜夜添| 观看免费一级毛片| 亚洲熟女精品中文字幕| 久久久久久久国产电影| 99久久精品热视频| 真实男女啪啪啪动态图| 国产男人的电影天堂91| 99久久精品一区二区三区| 嫩草影院精品99| 高清视频免费观看一区二区| 久久97久久精品| .国产精品久久| 高清欧美精品videossex| 交换朋友夫妻互换小说| 少妇熟女欧美另类| av免费观看日本| 亚洲av在线观看美女高潮| 丰满人妻一区二区三区视频av|