日本在线www-日本在线播放一区-日本在线不卡免费视频一区-日本在线不卡视频-成人影院久久久久久影院-成人影院一区二区三区

ABB
關注中國自動化產業(yè)發(fā)展的先行者!
工業(yè)智能邊緣計算2025年會
CAIAC 2025
2025工業(yè)安全大會
OICT公益講堂
當前位置:首頁 >> 案例 >> 案例首頁

案例頻道

使用Delphi7進行OPC服務器的開發(fā)
  • 企業(yè):控制網     領域:工業(yè)以太網     行業(yè):市政工程    
  • 點擊數:6346     發(fā)布時間:2005-05-10 14:23:04
  • 分享到:

 

1. 前言
    在企業(yè)"管控一體化"的信息系統(tǒng)建設中,實時信息系統(tǒng)起著非常重要的作用。它可以采集控制系統(tǒng)中的實時數據,使管理者在辦公室里就可以監(jiān)測到生產現(xiàn)場的生產情況及報警信息;并可以對取得的實時數據進行優(yōu)化、分析,從而為保證生產設備正常運轉、降低成本提供重要基礎。作為制造執(zhí)行系統(tǒng),MES必然要求與企業(yè)其它生產管理系統(tǒng)有密切關系,MES在其中起到了信息集線器(Information Hub)的作用,它相當于一個通訊工具為其它應用系統(tǒng)提供生產現(xiàn)場的實時數據。

    作為信息集線器的MES要將來自不同硬件生產廠商的控制系統(tǒng)的現(xiàn)場數據匯總在實時數據庫中,必須要和不同的設備,比如PLC,變頻器,現(xiàn)場總線的儀表等通訊,如果不同的設備廠家都遵守一個相同的程序接口標準的話,那么程序和不同設備的溝通將變得非常容易。OPC 就是這樣一種工業(yè)標準,它是OLE for process control 的英文縮寫。OPC 是基于微軟的COM(Component Object Model)和OLE(Object Linking and Embedding)技術之上的。和以前不同的是,現(xiàn)在設備廠家提供不同的OPC Server。OPC Server負責從設備中取數據和寫數據。用戶所要做的就是利用統(tǒng)一的COM 規(guī)范編寫OPC Client。客戶程序和OPC Server 打交道。OPC Server是一座在客戶和硬件設備之間的橋梁,通過它,我們可以很容易的取得現(xiàn)場的溫度,壓力,流量,位置等信號,以及控制現(xiàn)場的閥門開度,電機轉速等。注意客戶程序和服務器程序可以在同一臺計算機上,也可以在不同的計算機上,區(qū)別是使用COM 還是使用DCOM。

2. 項目背景
     我們開發(fā)的OPC服務器的項目背景是貴鋁熱電廠的數據上網項目。此項目中的一個子項目需要將現(xiàn)場的一些重要輔機的溫度值上傳至熱電廠的熱網之中。在數據的接口上我們選擇使用OPC作為統(tǒng)一的數據接口,因此我們在輔機溫度巡檢系統(tǒng)中需要實際開發(fā)其相應的數據訪問服務器,用于和實時數據庫服務器通訊以便于將數據上傳至熱電廠的熱網之中。以下我以此項目為例來介紹OPC數據訪問服務器的開發(fā)過程。服務器的開發(fā)工具通常是在VC6環(huán)境中使用MFC類庫搭配ATL,我選擇了Delphi7。因為Delphi是功能強大的應用程序開發(fā)工具。它具有功能強大,運行速度快,易于學習和使用以及開發(fā)效率高等特點。它是可視化應用編程環(huán)境,可重用性面向對象編程語言,快速編譯器和數據庫的完美組合。編寫OPC定制接口的客戶程序的本質就是編寫COM客戶程序,而使用Delphi進行COM開發(fā)時,我們會發(fā)現(xiàn)Object Pascal為COM提供了強大的語言支持。

圖表 1 輔機溫度巡檢網絡連接圖

3. OPC服務器的結構
    
    下面首先給出OPC服務器的內部結構。

                         圖表 2 OPC服務器的內部結構
   
    OPC規(guī)范提供了兩套接口方案,即COM接口和自動化。COM接口效率高,通過該接口,客戶能夠發(fā)揮OPC服務器的最佳性能,采用C++語言的客戶一般采用COM接口方案;自動化接口一般為采用VB語言的客戶所采用。自動化接口使解釋性語言和宏語言編寫客戶應用程序變得簡單,然而自動化客戶運行時需進行類型檢查,這一點則大大犧牲了程序的運行速度。OPC服務器必須實現(xiàn)COM接口,是否實現(xiàn)自動化接口則取決于供應商的主觀意愿。通常可以直接使用OPC基金會提供的OPC自動化包裝DLL(OPCDAAuto.DLL),將OPC定制接口變換成OPC自動化接口。當然也可以自己編制自動化包裝器。
 



圖表 3 OPC服務器通過自動化包裝器提供OPC自動化接口

4. OPC服務器對象模型
    OPC服務器由三類對象組成,相當于三種層次上的接口:服務器(Server)、組(Group) 和數據項(Item)。

1) 服務器對象(Server)
    擁有服務器的所有信息,同時也是組對象(Group)的容器,一個服務器對應于一個OPC Server,即一種設備的驅動程序。在一個Server中,可以有若干個組。

2) 組對象(Group)
    擁有本組的所有信息,同時包容并邏輯組織OPC數據項(Item)。

    OPC組對象(Group)提供了客戶組織數據的一種方法,組是應用程序組織數據的一個單位。客戶可對之進行讀寫,還可設置客戶端的數據更新速率。當服務器緩沖區(qū)內數據發(fā)生改變時,OPC將向客戶發(fā)出通知,客戶得到通知后再進行必要的處理,而無需浪費大量的時間進行查詢。OPC規(guī)范定義了兩種組對象:公共組(或稱:全局組,public)和局部組(或稱:局域組、私有組,Local)。公共組由多個客戶共有,局部組只隸屬于一個OPC客戶。全局組對所有連接在服務器上的應用程序都有效,而局域組只能對建立它的Client有效。一般說來,客戶和服務器的一對連接只需要定義一個組對象。在一個組中,可以有若干個項。

3) 項
    項是讀寫數據的最小邏輯單位。一個項與一個具體的位號相連。項不能獨立于組存在,必須隸屬于某一個組。在每個組對象中,客戶可以加入多個OPC數據項(Item)。OPC數據項是服務器端定義的對象,通常指向設備的一個寄存器單元。OPC客戶對設備寄存器的操作都是通過其數據項來完成的,通過定義數據項,OPC規(guī)范盡可能的隱藏了設備的特殊信息,也使OPC服務器的通用性大大增強。OPC數據項并不提供對外接口,客戶不能直接對之進行操作,所有操作都是通過組對象進行的。每個數據項的數據結構包括三個成員變量:數據值、數據質量和時間戳。數據值是以VARIANT形式表示的。應當注意,數據項表示同數據源的連接而不等同于數據源,無論客戶是否定義數據項,數據源都是客觀存在的。可以把數據項看作數據源的地址,即數據源的引用,而不應看作數據源本身。組與項的關系如下圖所示:

圖表 4 OPC服務器的對象模型

    應用程序作為OPC接口中的Client方,硬件驅動程序作為OPC接口中的Server方。每一個OPC Client應用程序都可以接若干個OPC Server,每一個硬件驅動程序可以為若干個應用程序提供數據。

5. OPC服務器對象接口
    OPC服務器是通過接口向客戶提供服務的,接口實際上是一組相關函數的集合。

(1) OPCServer對象接口
OPCServer對象是OPC中的首要對象,它提供了如下接口:
IUnknown接口是COM的標準接口
IOPCServer接口可對OPCGroup對象進行有關操作
IOPCServerPublicGroups接口為客戶和服務器提供了管理公共組的功能
IOPCBrowseServerAddressSpace接口提供了客戶瀏覽服務器數據項的功能
IOPCItemProperties接口讓客戶能夠瀏覽與ItemID相關的可訪問屬性
IOPCCommon接口提供了設置和詢問LocaleID的功能
IPersistFile接口允許客戶裝載和保存服務器的配置信息
IConnectionPointContainer接口允許用戶探查發(fā)現(xiàn)連接點

                         圖表 5 OPCServer對象接口圖
  
(2) OPCGroup對象接口
OPCGroup對象是管理數據項集合的對象,它提供的接口如下:
IUnknown接口是COM的標準接口
IOPCItemMgt接口為客戶提供了添加,刪除和控制組中數據項的功能
IOPCGroupStateMgt接口允許客戶管理組中的所有狀態(tài)信息
IOPCPublicGroupStateMgt接口用來將私有組轉換為公共組
IOPCSyncIO接口允許用戶對服務器執(zhí)行同步讀寫操作
IOPCAsyncIO接口允許客戶對服務器執(zhí)行異步讀寫操作
IOPCAsyncIO2接口用來替代IOPCAsyncIO接口
IConnectionPointContainer接口允許用戶探查發(fā)現(xiàn)連接點
IDataObject接口允許客戶和使用OPC數據流格式的組之間產生連接



圖表 6 OPCGroup對象接口圖

6. OPC服務器的Delphi實現(xiàn)
    本項目的輔機溫度巡檢OPC數據訪問服務器使用Delphi7開發(fā),其遵守OPC Data Access 2.05規(guī)范。本服務器功能如下:
    服務器的注冊與反注冊
    定時讀取現(xiàn)場數據并更新數據緩沖池
    OPCServer對象的實現(xiàn)
    OPCGroup對象的實現(xiàn)
    服務器的界面顯示

     程序實現(xiàn)如下:
(1) 服務器的注冊與反注冊
OPC服務器必須按照規(guī)范要求正確注冊才能被OPC客戶訪問。OPC服務器按照組件模式可以劃分為進程內組件、進程外組件。不同模式的服務器注冊的方法稍有差異。
    通常OPC服務器要求的標識格式為:Vendor.Drivername.Version
    我的溫度巡檢OPC服務器的標識為:HUA.DA2.1
    按照OPC規(guī)范要求,我的OPC服務器在系統(tǒng)注冊表中建立如下注冊表項:
    1至6項對于不同模式的服務器均需要:
1. HKEY_CLASSES_ROOT\Vendor.Drivername.Version = A Description of your server
2. HKEY_CLASSES_ROOT\Vendor.Drivername.Version\CLSID = {Your Server's unique CLSID}
3. HKEY_CLASSES_ROOT\Vendor.Drivername.Version\OPC
4. HKEY_CLASSES_ROOT\Vendor.Drivername.Version\OPC\Vendor =Your vendor name
5. HKEY_CLASSES_ROOT\CLSID\{Your Server's unique CLSID} = A Description of your server
6. HKEY_CLASSES_ROOT\CLSID\{Your Server's unique CLSID}\ProgID = Vendor.Drivername.Version
7至8項根據服務器的模式進行選擇注冊:
7. HKEY_CLASSES_ROOT\CLSID\{Your Server's unique CLSID}\InprocServer32 = Full Path to DLL
8. HKEY_CLASSES_ROOT\CLSID\{YourServer's unique CLSID}\LocalServer32 = Full Path to EXE
9. HKEY_CLASSES_ROOT\CLSID\{YourServer's unique CLSID}\InprocHandler32 = Full Path to DLL
步驟1的代碼示例如下:
aReg:=nil;
 try
  aReg:=TRegistry.Create;
  aReg.RootKey:=HKEY_CLASSES_ROOT;
  aReg.OpenKey(HUA.DA2.1,true);
  aReg.WriteString('','HUA Data Access Server Version 2.0');
 finally
  aReg.CloseKey;
  aReg.Free;
 end;
    此外,還應根據規(guī)范創(chuàng)建組件的分類信息,以便與組件分類管理。對于數據訪問服務器規(guī)范提供的組件類別為:
"OPC Data Access Servers Version 1.0"
CATID_OPCDAServer10 = {63D5F430-CFE4-11d1-B2C8-0060083BA1FB}

"OPC Data Access Servers Version 2.0"
CATID_OPCDAServer20 = {63D5F432-CFE4-11d1-B2C8-0060083BA1FB}
    創(chuàng)建類別的程序代碼為:
CreateComponentCategory(CATID_OPCDAServer20,'HUA OPC Data Access');
RegisterCLSIDInCategory(CLASS_HUA_DA2,CATID_OPCDAServer20);

    實現(xiàn)服務器的反注冊就簡單了,逐一清除掉以上所建立的注冊表項即可:
aReg:=nil;
 try
  aReg:=TRegistry.Create;
  aReg.RootKey:=HKEY_CLASSES_ROOT;
  aReg.DeleteKey(name);
 finally
  aReg.CloseKey;
  aReg.Free;
 end;
    還應刪除自己組件類別信息
UnRegisterCLSIDInCategory(CLASS_HUA_DA2,CATID_OPCDAServer20);
UnCreateComponentCategory(CATID_OPCDAServer20,'HUA OPC Data Access');

(2) 定時讀取現(xiàn)場數據并更新數據緩沖池
    OPC服務器本身就是一個可執(zhí)行程序,該程序以設定的速率不斷地同物理設備進行數據交互。服務器內有一個數據緩沖區(qū),其中存有最新的數據值,數據質量戳和時間戳。時間戳表明服務器最近一次從設備讀取數據的時間。服務器對設備寄存器的讀取是不斷進行的,時間戳也在不斷更新。即使數據值和質量戳都沒有發(fā)生變化,時間戳也會進行更新。客戶既可從服務器緩沖區(qū)讀取數據,也可直接從設備讀取數據,從設備直接讀取數據速度會慢一些,一般只有在故障診斷或極特殊的情況下才會采用。

    OPC客戶和OPC服務器進行數據交互可以有兩種不同方式,即同步方式和異步方式。同步方式實現(xiàn)較為簡單,當客戶數目較少而且同服務器交互的數據量也比較少的時候可以采用這種方式;異步方式實現(xiàn)較為復雜,需要在客戶程序中實現(xiàn)服務器回調函數。然而當有大量客戶和大量數據交互時,異步方式能提供高效的性能,盡量避免阻塞客戶數據請求,并最大可能地節(jié)省CPU和網絡資源。

    本服務器的數據緩沖池的數據格式是按照OPC數據訪問規(guī)范中的     OPCITEMSTATE格式設計的。
type
  TOPCItem=record
    strID:string;//點的ID編號
    bActive:longbool;//點的激活狀態(tài)
    ItemState:OPCITEMSTATE;//點的客戶訪問項
end;

type 
OPCITEMSTATE = record
    hClient:              OPCHANDLE;//點的客戶句柄
    ftTimeStamp:          TFileTime;//點的時間戳
    wQuality:             Word;//點的品質
    wReserved:            Word;//保留
    vDataValue:           OleVariant;//點的值
  end;
    本溫度采集項目選用研華的亞當4000系列模塊,OPC服務器通過計算機串口與ADAM-4520模塊連接,這是一塊隔離RS232到RS422/485轉換器。現(xiàn)場模塊通過485總線與其連在一起。數據的采集方式如下圖所示

                        圖表 7 溫度巡檢系統(tǒng)配置圖

    對于服務器來說實現(xiàn)現(xiàn)場數據的采集,只需要對串口進行編程即可。串口編程的方法很多,例如:Windows API方式、在程序中嵌入匯編語言操作端口、使用控件等。我選擇了使用控件。不同公司開發(fā)的串口控件很多,我使用的是微軟的MSComm控件。編程時只需要參照研華的相關模塊操作命令表,然后使用MSComm控件發(fā)出相應的命令進行操作即可。例如根據如下命令表
 

圖表 8 ADAM-4015命令表摘錄  

    對于命令#AAN 意思是讀取地址為AA的模塊的第N通道數據。如果操作正確則模塊響應為>(data)(cr)
    如果在程序中發(fā)出如下命令:
    MSComm1.Output :='#021'+#13; //讀取2號模塊的第一通道數據
    2號模塊的響應為:>+1.4567(cr)

(3) OPCServer對象的實現(xiàn)
    必須嚴格按照規(guī)范要求,實現(xiàn)所要求的所有接口函數。但是這并不意味著所有的接口函數都必須自己編寫,我們可以充分利用COM的包容與聚合機制來復用一些常規(guī)的接口。在Delphi中有很多現(xiàn)成的類已經實現(xiàn)了眾多的接口,我們可以充分利用這一點來簡化我們的編程過程。例如在我的 OPCServer服務器對象中IUnknown接口是通過父類TAutoObject 實現(xiàn)的,IConnectionPointContainer 接口是通過創(chuàng)建一個Delphi的TConnectionPoints對象,然后將其接口暴露給客戶實現(xiàn)的; OPCServer的Delphi描述如下,限于篇幅具體實現(xiàn)過程從略:
type
  THUA_DA2 = class(TAutoObject,IHUA_DA2,
IOPCServer,IConnectionPointContainer,IOPCCommon,IOPCItemProperties,
      IOPCServerPublicGroups,IOPCBrowseServerAddressSpace,IPersist,IPersistFile)
  public
    ClientIUnknown:IUnknown;
    Grp:TOPCGroup;
   
    procedure Initialize; override;
    procedure ShutdownOnConnect(const Sink: IUnknown; Connecting: Boolean);
    destructor Destroy;override;
  private
   FIConnectionPoints:TConnectionPoints;
  protected
  property iFIConnectionPoints:TConnectionPoints read FIConnectionPoints
                          write FIConnectionPoints implements IConnectionPointContainer;
//IOPCServer 接口描述省略   
//IOPCCommon接口描述省略
//IOPCServerPublicGroups接口描述省略
//IOPCBrowseServerAddressSpace接口描述省略
//IPersistFile接口描述省略
//IOPCItemProperties接口描述省略
end;//end type

(4) OPCGroup對象的實現(xiàn)
    OPCGroup對象是由OPCServer對象創(chuàng)建的。當OPC客戶程序調用OPCServer對象的接口函數AddGroup時,在AddGroup函數體內生成OPCGroup對象。以后用戶依賴與指向這個OPCGroup接口的指針,便可以方便的創(chuàng)建和管理點項目,從而獲得現(xiàn)場的實時數據。OPCGroup對象的描述如下:

type
  TOPCGroup = class(TTypedComObject,IOPCGroup,IOPCItemMgt,IOPCGroupStateMgt,
                    IOPCPublicGroupStateMgt,IOPCSyncIO,
                    IConnectionPointContainer,IOPCAsyncIO2)
  private
   FIConnectionPoints:TConnectionPoints;
  protected
   property iFIConnectionPoints:TConnectionPoints read FIConnectionPoints
                          write FIConnectionPoints implements IConnectionPointContainer;
//IOPCItemMgt 接口描述省略
//IOPCGroupStateMgt接口描述省略
//IOPCPublicGroupStateMgt接口描述省略
//IOPCSyncIO接口描述省略
//IOPCAsyncIO2接口描述省略  
end;

(5) 服務器的界面顯示
    OPC服務器的主要功能在于數據的傳遞,它常常并不需要過多的人機交互過程。項目中的OPC服務器只是為了調試的方便,在界面中通過兩個按鈕向用戶提供了服務器的注冊與反注冊功能。在服務器中還顯示了所連接的OPC客戶數和OPC客戶創(chuàng)建的OPC組數目,以及數據緩沖池中的數據更新情況。

7. 結語
    總的來說,進行OPC服務器程序的開發(fā)就是嚴格按照OPC規(guī)范編寫各種接口函數來向客戶提供服務,在定時更新緩沖池中的數據的同時,還應對緩沖池中的數據提供較快的查詢服務從而減少系統(tǒng)延遲。

熱點新聞

推薦產品

x
  • 在線反饋
1.我有以下需求:



2.詳細的需求:
姓名:
單位:
電話:
郵件:
主站蜘蛛池模板: 亚洲精品国产免费-亚洲精品国产理论电影网-亚洲精品国产精品国自产网站-亚洲精品国产第1页-韩国电影一区二区-韩国电影一区 | 亚洲精品色情影片-亚洲精品沙发午睡系列-亚洲精品深夜AV无码一区二区-亚洲精品天堂在线观看-亚洲精品偷拍AV一区二区-亚洲精品偷拍影视在线观看 | 91导航在线-91岛国-91第一页-91短视频在线高清hd-91粉嫩萝控精品福利网站-91粉色视频在线观看 | 午夜成人影视-午夜成人影片-午夜成人免费影院-午夜不卡影院-国产日本欧美亚洲精品视-国产日本欧美高清免费区 | 精品久久久久久蜜臂a∨-精品久久久久久蜜臀-精品久久久久久免费看-精品久久久久久免费影院-精品久久久久久清纯-精品久久久久久日韩字幕无 | 人人狠狠综合久久亚洲,超大乳首授乳一区二区,五月天视频网,久久综合成人网,久草视频免费播放,漂亮的保姆4-bd国语在线观看 | www五月天,国产精品视频网站你懂得,精品国产你懂的在线观看,久久伊人成人,国产精品黄页网站在线播放免费,国产va在线 | 欧美精品综合-欧美精品自拍-欧美精品专区免费观看-欧美精品在线一区二区三区-欧美精品在线一区-欧美精品在线视频观看 | 18禁欧美猛交XXXXX无码-18禁无遮挡爽爽爽无码视频-18禁止观看免费私人影院-1区2区3区高清视频-日本在线网-日本在线视频一区二区 在线观看日本视频-在线观看日本免费-在线观看日本www-在线观看日本-久久亚洲精品成人-久久亚洲精品tv | 日韩精品无码一区AAA片-日韩精品三级-日韩草逼-日韩操穴-成人黄色在线观看-成人黄色在线播放 | 人人澡人人爽人人精品-人人澡人人擦人人免费-人人在线碰碰视频免费-人人听力网mp3下载-俺也去最新地址-俺来也俺去也视频久久 | 日韩美在线-日韩美一区二区三区-日韩美女在线视频-日韩美女视频在线观看-亚洲无线一二三四区手机-亚洲无专砖码直接进入 | 91噜噜噜在线观看-91露脸对白-91麻豆福利-91麻豆高清国产在线播放-91麻豆国产-91麻豆国产福利精品 | 亚洲午夜久久久久中文字幕,欧美精品久久久久久久久大尺度,91精品推荐,九九久久99综合一区二区,哪里有毛片,精品亚洲一区二区三区 精品国产91乱码一区二区三区,成人国产一区二区三区精品,亚洲一区免费在线观看,日韩在线一区二区三区免费视频,波多野吉衣在线观看,日韩一级精品久久久久 | 综合色网站-综合色图-综合色婷婷-综合色天天-乱淫视频-乱淫片 | 国产a一级-国产a网-国产a视频精品免费观看-国产a视频-国产a免费观看-国产a毛片 | 免费黄色在线观看视频-免费黄色在线观看-免费黄色在线电影-免费黄色在线-成人精品一区二区三区电影-成人精品一区二区三区 | 波多野在线-波多野衣结在线精品二区-波多野一区二区三区在线-波多野一区二区-波多野一区-波多野结在线 | 开心色99xxxx开心色-开心色99-开心久久婷婷综合中文字幕-开心 色 欧美 图-中文字幕人乱码中文-中文字幕人妻丰满熟女 | 91香蕉导航-91香蕉成人免费高清网站-91香蕉成人-91午夜视频-91午夜精品亚洲一区二区三区-91网址在线观看 | 欧美日韩国产精品-欧美日韩国产剧情-欧美日韩国产伦理-欧美日韩国产欧美-you ji z z日本人在线观看-you jizz jizz japan日本 | 91香蕉视频在线播放-91香蕉视频在线看-91香蕉小视频-91香蕉亚洲精品人人影视-91香蕉影院-91香蕉在线视频 | 久久久毛片-久久久麻豆-久久久鲁-久久久噜噜噜久久久-午夜你懂得-午夜男人网 | 中文字幕第一页亚洲-中文字幕第一页国产-中文字幕第38页永久乱码-中文字幕不卡在线观看-久久久久青草大香线综合精品-久久久久青草 | 热久久久久久-热久久久久久久-热久久免费-热久久视久久精品18国产-国产欧美日韩网站-国产欧美日韩亚洲 | 自拍偷拍另类-自拍偷拍国内-自拍偷拍国产-自拍偷拍第6页-自拍偷拍第4页-自拍偷拍第3页 | 国产成人无码影视-国产成人无码专区-国产成人无码综合-国产成人无码综合亚洲日韩-国产成人无码综合亚洲日韩榴莲-国产成人无套精品在线观看 | 亚洲 欧美 日韩 在线,97热久久免费频精品99国产成人,另类激情亚洲,久久99九九精品免费,久久综合精品国产一区二区三区,2020精品极品国产色在线观看 | 久久夜视频-久久夜色视频-久久夜色精品国产欧美-久久夜色精品国产噜噜小说-久久夜色精品国产-久久亚洲这里只有精品18 | 久草免费在线观看-久草免费在线色站-久草免费在线视频-久草免费资源-天堂网中文在线-天堂网中文字幕 | 欧美精欧美乱码一二三四区,怡红院五月天,国色天香社区在线看免费,水蜜桃视频在线高清观看,日韩欧美在线免费观看,水蜜桃在线视频 国产夜色福利院在线观看免费-国产夜趣福利免费视频-国产野花视频天堂视频免费-国产亚洲综合一区二区在线-日韩精品在线观看免费-日韩精品在线电影 | 午夜欧美福利-午夜欧美成人香蕉剧场-午夜欧美成人久久久久久-午夜久久网-国产亚洲男人的天堂在线观看-国产亚洲免费观看 | 日韩精品电影在线观看-日韩精品电影在线-日韩精品电影一区-日韩精品电影-国产日韩欧美综合-国产日韩欧美在线一区二区三区 | 好男人天堂网,久久精品国产这里是免费,国产精品成人一区二区,男人天堂网2021,男人的天堂在线观看,丁香六月综合激情 | 日韩在线黄色-日韩在线观看精品-日韩在线观-日韩在线高清视频-日韩在线不卡视频-日韩在线播放中文字幕 | h在线动漫-h玉足嫩脚嗯啊白丝-h网站国产-h视频免费高清在线观看-欧美亚洲欧美-欧美亚洲免费 | 国产 在线 | 日韩,精品一区二区三区的国产在线观看,亚洲国产精品日韩在线,国产视频在,青青国产成人久久91网站站,国内精品视频免费观看 | 黄色在线免费播放-黄色在线免费-黄色在线看网站-黄色在线观看网站-色综合小说天天综合网-色综合小说久久综合图片 | 国产欧美日韩中文久久-国产欧美日韩在线一区二区不卡-国产欧美日韩在线人成aaaa-国产欧美日韩在线观看一区二区三区-婷婷国产天堂久久综合五月-婷婷99视频精品全部在线观看 | 性色做爰片在线观看WW-性夜影院午夜看片-性一交一乱一A片-性一交一乱一A片WWW-性一交一乱一交A片久久-性一交一乱一交A片久久四色 | 91香蕉视频在线播放-91香蕉视频在线看-91香蕉小视频-91香蕉亚洲精品人人影视-91香蕉影院-91香蕉在线视频 |