999精品在线视频,手机成人午夜在线视频,久久不卡国产精品无码,中日无码在线观看,成人av手机在线观看,日韩精品亚洲一区中文字幕,亚洲av无码人妻,四虎国产在线观看 ?

基于Windows平臺設(shè)備驅(qū)動模塊的開發(fā)

2011-07-25 06:49:08馮克平上海工程技術(shù)大學(xué)資產(chǎn)管理及保障處上海201260
計算機(jī)工程與設(shè)計 2011年9期
關(guān)鍵詞:設(shè)備

馮克平(上海工程技術(shù)大學(xué)資產(chǎn)管理及保障處,上海201260)

0 引 言

計算機(jī)在工業(yè)領(lǐng)域的廣泛應(yīng)用以及工業(yè)自動化程度的迅速提高,人們對工業(yè)自動化的要求也越來越高,表現(xiàn)在種類繁多的控制設(shè)備和過程監(jiān)控裝置在工業(yè)領(lǐng)域的廣泛應(yīng)用,使得傳統(tǒng)的工業(yè)軟件已無法滿足用戶的各種需求。在開發(fā)傳統(tǒng)的工業(yè)軟件時,工控領(lǐng)域的工程師需通過手工或委托第三方編寫人機(jī)接口應(yīng)用軟件,開發(fā)周期長,效率低,可靠性差;或者購買專用的工控系統(tǒng),通常是封閉的、功能專一的很難與外界進(jìn)行數(shù)據(jù)交互,升級和增加功能都受到嚴(yán)重的限制。工業(yè)實(shí)時監(jiān)控組態(tài)軟件的出現(xiàn),為根本改變這一狀況提供了可能[1]。

工業(yè)實(shí)時監(jiān)控組態(tài)軟件是從分布式監(jiān)控系統(tǒng)(distributed control system,DCS)發(fā)展而來。它不僅保留了DCS所具有的大規(guī)模數(shù)據(jù)采集處理功能、數(shù)據(jù)通訊及信息管理和操作顯示功能,而且有其獨(dú)特的優(yōu)點(diǎn):實(shí)時多任務(wù)、接口開放、使用靈活、功能多樣、運(yùn)行可靠和可擴(kuò)充性。工業(yè)實(shí)時監(jiān)控組態(tài)軟件,顧名思義它是以靈活多樣的組態(tài)方式而不是編程方式為用戶提供良好的開發(fā)界面和簡捷的使用方法,其預(yù)設(shè)的各種軟件模塊可以非常容易地實(shí)現(xiàn)和完成監(jiān)控層的各項(xiàng)功能[2]。

評價一個工業(yè)實(shí)時監(jiān)控組態(tài)軟件的優(yōu)劣,首先要看它支持I/O設(shè)備的種類是否豐富,以及在組態(tài)了多種I/O設(shè)備下的目標(biāo)應(yīng)用程序的運(yùn)行速度,然后還要看它是否便于功能擴(kuò)展及版本升級。所以,如何開發(fā)一個具有支持豐富的I/O設(shè)備并有很好的數(shù)據(jù)通訊的實(shí)時性,這在開發(fā)工業(yè)實(shí)時監(jiān)控組態(tài)軟件中占據(jù)了重要的地位。

本文以從事開發(fā)工業(yè)實(shí)時監(jiān)控組態(tài)軟件和設(shè)備驅(qū)動模塊的經(jīng)驗(yàn),分析當(dāng)今各種主流工控設(shè)備和標(biāo)準(zhǔn)通信協(xié)議,探討如何在Windows平臺上構(gòu)建一個適用于各種I/O通訊方式的設(shè)備驅(qū)動模塊開發(fā)平臺,從設(shè)計思路到應(yīng)用實(shí)例,提出了開發(fā)設(shè)備驅(qū)動模塊的框架結(jié)構(gòu)及其關(guān)鍵部分的過程實(shí)現(xiàn)。

1 Windows平臺下監(jiān)控組態(tài)軟件綜述

在Windows平臺上開發(fā)的工業(yè)實(shí)時監(jiān)控組態(tài)軟件系統(tǒng),要充分發(fā)揮Windows所具有的實(shí)時多任務(wù)特性,一般將數(shù)據(jù)讀寫、數(shù)據(jù)顯示打印等分成若干個任務(wù)線程來完成。主要模塊有:系統(tǒng)任務(wù)管理、數(shù)據(jù)采集、畫面顯示、報表打印、系統(tǒng)組態(tài)、設(shè)備驅(qū)動模塊等[1]。通常工業(yè)實(shí)時監(jiān)控組態(tài)軟件系統(tǒng)是由組態(tài)子系統(tǒng)和運(yùn)行子系統(tǒng)兩大部分構(gòu)成的[2]:

(1)組態(tài)子系統(tǒng)自動化工程設(shè)計師為實(shí)施其控制方案,常在組態(tài)子系統(tǒng)支持下進(jìn)行應(yīng)用程序的系統(tǒng)生成工作。通過建立一系列用戶數(shù)據(jù)文件(如:設(shè)備配置文件IO.ini,圖形目標(biāo)文件Monitor.ini),供運(yùn)行子系統(tǒng)運(yùn)行時使用。組態(tài)子系統(tǒng)可由若干個組態(tài)程序模塊組成,如設(shè)備驅(qū)動組態(tài)模塊、數(shù)據(jù)采集組態(tài)模塊、圖形顯示組態(tài)模塊、實(shí)時數(shù)據(jù)庫組態(tài)模塊等。

(2)運(yùn)行子系統(tǒng)在系統(tǒng)運(yùn)行環(huán)境下,目標(biāo)應(yīng)用程序被載入計算機(jī)內(nèi)存并投入實(shí)時運(yùn)行。系統(tǒng)任務(wù)管理模塊會根據(jù)已組態(tài)好的用戶數(shù)據(jù)文件以多線程方式啟動各個運(yùn)行模塊,完成采集和監(jiān)控現(xiàn)場設(shè)備的數(shù)據(jù),將現(xiàn)場工程運(yùn)行狀況以圖形或報表的方式顯示出來。運(yùn)行子系統(tǒng)由畫面顯示模塊、數(shù)據(jù)采集模塊、設(shè)備驅(qū)動模塊等組成。

本文的分析主要涉及“數(shù)據(jù)采集模塊”和“設(shè)備驅(qū)動模塊”。

1.1 動態(tài)鏈接庫技術(shù)

作為Windows系統(tǒng)中一種重要的模塊化方法,動態(tài)鏈接庫(DLL)技術(shù)是一種在Windows平臺下代碼可重用的技術(shù)。本文設(shè)計的設(shè)備驅(qū)動模塊開發(fā)平臺就是采用Windows的動態(tài)鏈接庫技術(shù),即每個設(shè)備的驅(qū)動模塊都以DLL形式提供的。

在數(shù)據(jù)采集模塊中,因采用了動態(tài)鏈接庫技術(shù),所以可以針對不同的設(shè)備、不同的通訊協(xié)議和實(shí)際需求,調(diào)用對應(yīng)的設(shè)備驅(qū)動模塊DLL。即用hLibrary=LoadLibrary(設(shè)備驅(qū)動模塊文件名)方式動態(tài)裝載驅(qū)動模塊,然后用lpDriverProc=GetProcAddress(hLibrary,"Driver")記住DLL的地址,當(dāng)需要訪問該設(shè)備的時候調(diào)用該DLL中的函數(shù),這樣可大大提高系統(tǒng)的可靠性,滿足不同情況的要求,同時也可以提高程序開發(fā)的效率。

1.2 硬件通訊接口分析歸類

工業(yè)實(shí)時監(jiān)控組態(tài)軟件中通訊接口的一大特點(diǎn)就是面向種類繁多的硬件設(shè)備,有通過插在PCI、ISA插槽的板卡形式與計算機(jī)連接,有通過串行口以RS232/485的方式和上位機(jī)通信,有通過網(wǎng)絡(luò)通訊方式與工業(yè)實(shí)時監(jiān)控組態(tài)軟件連接,仔細(xì)分析各自的特點(diǎn)并找出它們的共性,對開發(fā)通用的設(shè)備驅(qū)動模塊是非常有價值的,如圖1所示。

(1)獨(dú)立板卡類通訊

獨(dú)立板卡類包括模數(shù)(A/D)轉(zhuǎn)換板、數(shù)模(D/A)轉(zhuǎn)換板、開關(guān)量(DI/DO)輸入輸出板及通信板卡等。它們直接插入計算機(jī)的總線槽里,通過ISA或PCI總線擴(kuò)展槽與計算機(jī)進(jìn)行數(shù)據(jù)通信。每塊板都有一個基地址范圍,計算機(jī)通過訪問該基地址即可達(dá)到輸入輸出數(shù)據(jù)。

在Windows平臺下,生產(chǎn)板卡類的廠家一般會提供以下4種主要的WindowsAPI函數(shù):

板卡初始化:Open()、Start();

功能設(shè)置查詢:SetRange()、SetGain()、GetRange()、GetGain()、IsDataReady()、Status();

數(shù)據(jù) IO:In()、Out()、DI()、DO();

暫停、關(guān)閉:Stop()、Close()。

(2)串口類通訊

各種智能儀表和智能模塊設(shè)備通常是通過串口 (通常叫COM口)與計算機(jī)連接通訊,或者說通過計算機(jī)的串口,采用該設(shè)備的通信協(xié)議與之通訊。但在Windows平臺下,無論是哪種通信協(xié)議,其通訊操作就如同對文件操作一樣,串行設(shè)備的打開和關(guān)閉操作與文件的打開和關(guān)閉使用的函數(shù)完全相同。幾個重要的WinAPI函數(shù)說明如下:

打開關(guān)閉串口通訊資源函數(shù)——CreateFile和CloseHandle;

配置串口通訊資源函數(shù)——BuildCommDCB和SetComm-State;

讀寫串口數(shù)據(jù)函數(shù)——ReadFile和WriteFile;

設(shè)置通訊事件函數(shù)——WriteCommEvent。

(3)網(wǎng)絡(luò)類通訊

網(wǎng)絡(luò)通訊可以采用TCP(transfercontrolprotocol)或者UDP(userdatagramprotocol)兩種方式,一般在工控軟件中考慮到數(shù)據(jù)的可靠傳輸,多數(shù)是采用TCP面向連接的通訊協(xié)議。

Windows平臺提供了方便的網(wǎng)絡(luò)應(yīng)用開發(fā)接口——Socket,用戶所開發(fā)的應(yīng)用程序可以通過網(wǎng)絡(luò)與其它Socket應(yīng)用程序通信。使用Socket開發(fā)應(yīng)用程序主要包括以下幾個基本步驟:創(chuàng)建并配置Socket、建立Socket連接、通過Socket進(jìn)行數(shù)據(jù)的發(fā)送和接收、關(guān)閉Socket。

2 數(shù)據(jù)采集模塊及設(shè)備驅(qū)動模塊設(shè)計

根據(jù)以上分析可以看出,無論那種通訊方式都存在設(shè)備初始化、數(shù)據(jù)的讀寫、關(guān)閉通訊口3個基本步驟,而其它操作(如:功能設(shè)置查詢、配置通訊資源等)或歸類在設(shè)備初始化階段或用設(shè)備配置文件(如:IO.ini)詳細(xì)描述。

圖1 3類硬件通訊接口數(shù)據(jù)讀寫流程比較

2.1 設(shè)備驅(qū)動模塊

(1)函數(shù)接口

用動態(tài)鏈接庫(DLL)技術(shù)設(shè)計設(shè)備驅(qū)動模塊,定義入口函數(shù)為Driver(WORDFunc,DWORDlpParam),其中Func是標(biāo)志,lpParam是根據(jù)Func不同值由采集模塊調(diào)用時給出的參數(shù)指針,根據(jù)上節(jié)分析,對3類通訊方式定義一種較為統(tǒng)一的數(shù)據(jù)結(jié)構(gòu),其描述見表1。

當(dāng)數(shù)據(jù)采集模塊依次調(diào)用 Driver(DRV_INITIAL,lpParam)、Driver(DEV_INITIAL,lpParam)、Driver(GRP_INITIAL,lpParam)、Driver(GRP_READ,lpParam)、Driver(DEV_INITEND,lpParam)、Driver(DRV_INITEND,lpParam),就可以完成設(shè)備初始化、數(shù)據(jù)的讀、關(guān)閉通訊口的3個基本步驟。而對1.2中歸納的3類硬件通訊接口,其調(diào)用Driver時的接口參數(shù)略有不同。

獨(dú)立板卡類通訊如表2所示,串口類通訊如表3所示,網(wǎng)絡(luò)類通訊如表4所示,可以看出,對于不同類型的硬件通訊接口只需定義各自的設(shè)備驅(qū)動模塊列表(DRVPARAPTR)和部分設(shè)備列表(DEVPARAPTR)而無需改動其它部分,即可完成數(shù)據(jù)采集模塊和設(shè)備驅(qū)動模塊間的接口定義,大大地減少了設(shè)備驅(qū)動模塊開發(fā)的工作量,縮短了軟件的開發(fā)周期,也能夠確保設(shè)備驅(qū)動模塊的穩(wěn)定性。

表1 通訊方式入口參數(shù)定義描述

表2 獨(dú)立板卡類DLL函數(shù)接口的參數(shù)定義

表3 串口類DLL函數(shù)接口的參數(shù)定義

表4 網(wǎng)絡(luò)類DLL函數(shù)接口的參數(shù)定義

圖2 數(shù)據(jù)讀寫流程

(2)內(nèi)部數(shù)據(jù)結(jié)構(gòu)

內(nèi)部數(shù)據(jù)結(jié)構(gòu)是服務(wù)于設(shè)備驅(qū)動模塊內(nèi)程序處理流程中所必需的數(shù)據(jù)結(jié)構(gòu),所以通用于不同類型的硬件通訊接口。考慮到多任務(wù)及Windows所特有的消息傳遞特性,設(shè)備驅(qū)動模塊的內(nèi)部數(shù)據(jù)結(jié)構(gòu)定義如下(簡略):

typedef struct tagDATA{

HWND hWnd; //設(shè)備驅(qū)動模塊內(nèi)部的窗體句柄,用于通訊口的消息處理

HANDLE hMutex;//用于存放IO共享緩存的互斥

WORD *LinePtr;//存放IO共享緩存,結(jié)構(gòu)為BUFF

WORD NumbersInLine;//動態(tài)記錄IO共享數(shù)據(jù)區(qū)中有效個數(shù)

unsigned char ReadPosOfLine;

unsigned char WritePosOfLine;

}DATA;

typedef struct tagBUFF{

HWND MainWinhWnd;//調(diào)用模塊窗口句柄,用于返回數(shù)據(jù)或設(shè)備通訊狀態(tài)

WORD GroupID;

WORD*AnswerData;//數(shù)據(jù)采集模塊的數(shù)據(jù)區(qū)指針

WORD *PostErrorCode;//保存通訊口的返回值

}BUFF;

其中,互斥量hMutex是針對多任務(wù)運(yùn)行環(huán)境下,各設(shè)備驅(qū)動模塊線程訪問共享數(shù)據(jù)區(qū)(*LinePtr所指向)而設(shè)計的。變量 ReadPosOfLine、WritePosOfLine和 NumbersInLine,動態(tài)記錄環(huán)形共享數(shù)據(jù)區(qū)中的有效數(shù)據(jù)個數(shù)以及存入取出的位置。*AnswerData中存放的是數(shù)據(jù)采集模塊寫入設(shè)備的原始數(shù)據(jù)或設(shè)備中讀出的返回給數(shù)據(jù)采集模塊的數(shù)據(jù)。

圖2說明了數(shù)據(jù)采集模塊對設(shè)備驅(qū)動模塊的一次讀寫數(shù)據(jù)的流程,前提是設(shè)備驅(qū)動模塊已被調(diào)用了設(shè)備初始化等操作。

2.2 數(shù)據(jù)采集模塊

如前所述,數(shù)據(jù)采集模塊啟動后,用hLibrary=LoadLibrary(設(shè)備驅(qū)動模塊文件名)方式動態(tài)裝載設(shè)備驅(qū)動模塊,并用lpDriverProc=GetProcAddress(hLibrary,"Driver")記住DLL的地址,然后分別調(diào)用Driver(DRV_INITIAL,lpParam)、Driver(DEV_INITIAL,lpParam)、Driver(GRP_INITIAL,lpParam)對設(shè)備作初始化操作,當(dāng)需要讀寫數(shù)據(jù)的時候調(diào)用函數(shù) Driver(GRP_READ,lpParam)或 Driver(GRP_WRITE,lpParam),在數(shù)據(jù)采集模塊退出時調(diào)用Driver(GRP_INITEND,lpParam)、Driver(DEV_INITEND,lpParam)、Driver(DRV_INITEND,lpParam),關(guān)閉設(shè)備驅(qū)動模塊結(jié)束通訊。

利用Windows的多任務(wù)工具,對不同的設(shè)備端口開設(shè)各自獨(dú)立的線程進(jìn)行監(jiān)測,可以實(shí)現(xiàn)對所有硬件設(shè)備數(shù)據(jù)采集的并行處理。數(shù)據(jù)采集模塊在裝載設(shè)備驅(qū)動模塊之前需要得到所有通訊設(shè)備的有關(guān)信息,如:地址范圍、工程量上下限、報警范圍、串口的波特率大小等等,一般是在組態(tài)子系統(tǒng)下由設(shè)備驅(qū)動組態(tài)模塊和數(shù)據(jù)采集組態(tài)模塊完成,并構(gòu)成設(shè)備配置文件(如:IO.ini)。而在運(yùn)行環(huán)境下,數(shù)據(jù)采集模塊通過讀入配置文件得到這些參數(shù),在以后的 Driver()調(diào)用中作為參數(shù)lpParam傳遞給設(shè)備驅(qū)動模塊。

3 調(diào)用函數(shù)的主要流程

本節(jié)以串口通訊類的設(shè)備驅(qū)動模塊為例,簡述各調(diào)用函數(shù)的主要流程,如圖3~圖6所示。

圖3 設(shè)備驅(qū)動模塊列表初始化及退出流程

圖4 設(shè)備列表初始化及退出流程

圖5 數(shù)據(jù)組表初始化及退出流程

圖6 設(shè)備驅(qū)動模塊內(nèi)的窗體消息處理流程

4 應(yīng)用分析

應(yīng)用本文所述方案,在自行開發(fā)的“工業(yè)實(shí)時監(jiān)控組態(tài)軟件”中先后開發(fā)了支持以下一些主要設(shè)備的設(shè)備驅(qū)動模塊:

獨(dú)立板卡類通訊:CONTEC各類板卡、研華各類板卡;

串口類通訊:三菱PLC、歐姆龍PLC、西門子PLC、Sharp-PLC;

網(wǎng)絡(luò)類通訊:三菱PLC。

從每個設(shè)備的開發(fā)周期看,設(shè)備數(shù)與時間成反比,舉例來說,如果在同類通訊設(shè)備中開發(fā)第一個需兩個人月數(shù),那么開發(fā)第二個僅需一個人月數(shù),甚至更少的時間。

根據(jù)不同的工業(yè)現(xiàn)場,在自行開發(fā)的“工業(yè)實(shí)時監(jiān)控組態(tài)軟件”中配置對應(yīng)硬件接口的設(shè)備驅(qū)動模塊構(gòu)成應(yīng)用系統(tǒng),經(jīng)用戶現(xiàn)場組態(tài)運(yùn)行,已成功應(yīng)用在多項(xiàng)具體項(xiàng)目中:

國內(nèi):上海寶鋼《高爐煤粉制粉裝置的數(shù)據(jù)采集監(jiān)控系統(tǒng)》、南京梅山煉鐵廠《1#高爐溫度、壓力計算機(jī)監(jiān)控系統(tǒng)》、浙江平湖熔劑廠《現(xiàn)場數(shù)據(jù)采集系統(tǒng)》等;

國外:東芝燃料電磁檢測系統(tǒng)、日本洗車機(jī)噴漆系統(tǒng)、TOYOTA BODY設(shè)備檢視生產(chǎn)管理系統(tǒng)等。

5 結(jié)束語

經(jīng)實(shí)際開發(fā)并應(yīng)用于工業(yè)現(xiàn)場,可以證明本文所給出的設(shè)計思路及設(shè)備驅(qū)動模塊的框架結(jié)構(gòu)具有以下特點(diǎn):

(1)縮短開發(fā)周期:本文對硬件通訊操作的分析歸類,對軟件開發(fā)人員來說不僅可以節(jié)省對同類通訊設(shè)備的重復(fù)開發(fā),更因分類清晰而便于系統(tǒng)的模塊化開發(fā),縮短開發(fā)周期。

(2)良好的開放性:按照本文的設(shè)計思路及框架結(jié)構(gòu)所開發(fā)的工業(yè)實(shí)時監(jiān)控軟件系統(tǒng),具有良好的開放性,它能與多種通訊協(xié)議互聯(lián),支持多種硬件設(shè)備,提供多種數(shù)據(jù)訪問接口。

(3)易于調(diào)試、維護(hù)升級:共性設(shè)計并進(jìn)行模塊化開發(fā),不僅有利于開發(fā)過程中的調(diào)試,而且對以后的系統(tǒng)維護(hù)和產(chǎn)品升級也帶來了便利。

[1]胡松.關(guān)于工控組態(tài)軟件的幾個技術(shù)問題[J].科技風(fēng),2010(17):270-270.

[2]李賀斌.監(jiān)控組態(tài)軟件中設(shè)備驅(qū)動程序開發(fā)平臺的研究與實(shí)現(xiàn)[D].秦皇島:燕山大學(xué),2006.

[3]張勇旭,李力雄,康盛.通用組態(tài)軟件驅(qū)動程序的設(shè)計與開發(fā)[J].工業(yè)控制計算機(jī),2009,22(9):1-6.

[4]馬婧,馬茜.基于數(shù)據(jù)采集卡和組態(tài)軟件的PLC控制系統(tǒng)仿真[J].先進(jìn)制造與管理,2008,27(7):29-31.

[5]萬紅進(jìn).通用過程監(jiān)測軟件的研究與開發(fā)[D].南京:南京理工大學(xué),2007.

[6]孫立軍,丁偉玲.淺析組態(tài)軟件的發(fā)展趨勢[J].機(jī)電產(chǎn)品開發(fā)與創(chuàng)新,2008,21(2):87-88.

[7]朱曉鳳.基于SOCKET編程實(shí)現(xiàn)的組態(tài)軟件與控制器的網(wǎng)絡(luò)通訊[J].電子元器件應(yīng)用,2010,12(5):41-47.

[8]中國工控網(wǎng).組態(tài)軟件對比分析[OL].http://a.gongkong.com/customer/gktx/imgpdf/ztrjdbfx.pdf.

[9]陳在平,彭登峰.基于Visual Studio.NET的OPC客戶端的研究與實(shí)現(xiàn)[J].制造業(yè)自動化,2008,30(12):22-72.

[10]史穎.基于VC的OPC客戶端軟件研究與實(shí)現(xiàn)[D].烏魯木齊:新疆大學(xué),2007.

[11]高連生,盛柏林.動態(tài)鏈接庫在組態(tài)軟件中的應(yīng)用[J].工業(yè)控制計算機(jī),2010,23(6):21-22.

[12]王曉嵐.基于VB6.0串口通信的氣壓測高系統(tǒng)數(shù)據(jù)采集實(shí)現(xiàn)[J].現(xiàn)代電子技術(shù),2010,33(3):116-118.

[13]李光春,黃建國,王志剛.多線程技術(shù)在數(shù)據(jù)采集中的應(yīng)用[J].電子元器件應(yīng)用,2009,11(7):85-87.

[14]劉世德,王玉正,韓新強(qiáng).Windows下實(shí)時數(shù)據(jù)采集的實(shí)現(xiàn)[J].機(jī)械制造與自動化,2010,39(3):133-134.

[15]李金波,陳慶文.數(shù)據(jù)采集服務(wù)器設(shè)計[J].自動化技術(shù)與應(yīng)用,2010,29(5):39-43.

猜你喜歡
設(shè)備
諧響應(yīng)分析在設(shè)備減振中的應(yīng)用
調(diào)試新設(shè)備
基于VB6.0+Access2010開發(fā)的設(shè)備管理信息系統(tǒng)
基于MPU6050簡單控制設(shè)備
電子制作(2018年11期)2018-08-04 03:26:08
廣播發(fā)射設(shè)備中平衡輸入與不平衡輸入的轉(zhuǎn)換
電子制作(2018年10期)2018-08-04 03:24:48
食之無味,棄之可惜 那些槽點(diǎn)滿滿的可穿戴智能設(shè)備
500kV輸變電設(shè)備運(yùn)行維護(hù)探討
HTC斥資千萬美元入股虛擬現(xiàn)實(shí)設(shè)備商WEVR
IT時代周刊(2015年8期)2015-11-11 05:50:37
Automechanika Shanghai 2014 之“看” 汽保設(shè)備篇
如何在設(shè)備采購中節(jié)省成本
主站蜘蛛池模板: 天天色天天综合| 国产成人区在线观看视频| 中文字幕亚洲综久久2021| 精品人妻系列无码专区久久| 538精品在线观看| 九九热精品在线视频| 手机看片1024久久精品你懂的| 日本免费精品| 免费日韩在线视频| 成人噜噜噜视频在线观看| 欧美综合区自拍亚洲综合天堂| 欧美a级完整在线观看| 国产精品一区二区不卡的视频| 激情综合图区| 精品一区二区三区波多野结衣| 丁香六月激情婷婷| 永久天堂网Av| 国产啪在线91| 久久国产热| 成色7777精品在线| 经典三级久久| 精品無碼一區在線觀看 | 成人免费视频一区| 免费A∨中文乱码专区| 青青久久91| 国产新AV天堂| 国产激情国语对白普通话| 欧美日韩北条麻妃一区二区| 欧美有码在线| 国产精品福利社| 亚洲中文无码av永久伊人| 国产女人爽到高潮的免费视频| 久久男人资源站| 麻豆精品在线播放| 这里只有精品国产| 国产福利免费视频| 一级成人a毛片免费播放| 久久精品人人做人人综合试看| 国产成人av一区二区三区| 国产激爽爽爽大片在线观看| 婷婷激情五月网| 2021无码专区人妻系列日韩| A级毛片无码久久精品免费| 97精品伊人久久大香线蕉| 亚洲人成影视在线观看| 77777亚洲午夜久久多人| 国产成人综合亚洲网址| 欧美午夜理伦三级在线观看| 成人av专区精品无码国产| 高清无码手机在线观看| 国产福利小视频在线播放观看| 天堂亚洲网| 精品1区2区3区| 亚洲香蕉伊综合在人在线| 国产精品无码影视久久久久久久| 欧美一区国产| a级毛片毛片免费观看久潮| 亚洲丝袜第一页| 亚洲va在线观看| 久久99国产综合精品女同| 亚洲中文字幕在线观看| 国产97色在线| 91蜜芽尤物福利在线观看| 超碰aⅴ人人做人人爽欧美 | 欧美日韩久久综合| 国产亚洲一区二区三区在线| 黄色污网站在线观看| 久久香蕉国产线看精品| 免费一级无码在线网站| 久久国产精品77777| 国产精品人成在线播放| 国产乱人伦AV在线A| 久久久91人妻无码精品蜜桃HD| 久久99热这里只有精品免费看| 国产91蝌蚪窝| 欧洲亚洲欧美国产日本高清| 欧美国产成人在线| 日韩精品成人在线| 国产黄网站在线观看| 日韩a在线观看免费观看| 国产亚洲精| 国产丝袜无码一区二区视频|