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

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

案例頻道

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

 

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

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

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

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

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

                         圖表 2 OPC服務器的內部結構
   
    OPC規范提供了兩套接口方案,即COM接口和自動化。COM接口效率高,通過該接口,客戶能夠發揮OPC服務器的最佳性能,采用C++語言的客戶一般采用COM接口方案;自動化接口一般為采用VB語言的客戶所采用。自動化接口使解釋性語言和宏語言編寫客戶應用程序變得簡單,然而自動化客戶運行時需進行類型檢查,這一點則大大犧牲了程序的運行速度。OPC服務器必須實現COM接口,是否實現自動化接口則取決于供應商的主觀意愿。通常可以直接使用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)提供了客戶組織數據的一種方法,組是應用程序組織數據的一個單位??蛻艨蓪χM行讀寫,還可設置客戶端的數據更新速率。當服務器緩沖區內數據發生改變時,OPC將向客戶發出通知,客戶得到通知后再進行必要的處理,而無需浪費大量的時間進行查詢。OPC規范定義了兩種組對象:公共組(或稱:全局組,public)和局部組(或稱:局域組、私有組,Local)。公共組由多個客戶共有,局部組只隸屬于一個OPC客戶。全局組對所有連接在服務器上的應用程序都有效,而局域組只能對建立它的Client有效。一般說來,客戶和服務器的一對連接只需要定義一個組對象。在一個組中,可以有若干個項。

3) 項
    項是讀寫數據的最小邏輯單位。一個項與一個具體的位號相連。項不能獨立于組存在,必須隸屬于某一個組。在每個組對象中,客戶可以加入多個OPC數據項(Item)。OPC數據項是服務器端定義的對象,通常指向設備的一個寄存器單元。OPC客戶對設備寄存器的操作都是通過其數據項來完成的,通過定義數據項,OPC規范盡可能的隱藏了設備的特殊信息,也使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接口允許用戶探查發現連接點

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



圖表 6 OPCGroup對象接口圖

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

     程序實現如下:
(1) 服務器的注冊與反注冊
OPC服務器必須按照規范要求正確注冊才能被OPC客戶訪問。OPC服務器按照組件模式可以劃分為進程內組件、進程外組件。不同模式的服務器注冊的方法稍有差異。
    通常OPC服務器要求的標識格式為:Vendor.Drivername.Version
    我的溫度巡檢OPC服務器的標識為:HUA.DA2.1
    按照OPC規范要求,我的OPC服務器在系統注冊表中建立如下注冊表項:
    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;
    此外,還應根據規范創建組件的分類信息,以便與組件分類管理。對于數據訪問服務器規范提供的組件類別為:
"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}
    創建類別的程序代碼為:
CreateComponentCategory(CATID_OPCDAServer20,'HUA OPC Data Access');
RegisterCLSIDInCategory(CLASS_HUA_DA2,CATID_OPCDAServer20);

    實現服務器的反注冊就簡單了,逐一清除掉以上所建立的注冊表項即可:
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) 定時讀取現場數據并更新數據緩沖池
    OPC服務器本身就是一個可執行程序,該程序以設定的速率不斷地同物理設備進行數據交互。服務器內有一個數據緩沖區,其中存有最新的數據值,數據質量戳和時間戳。時間戳表明服務器最近一次從設備讀取數據的時間。服務器對設備寄存器的讀取是不斷進行的,時間戳也在不斷更新。即使數據值和質量戳都沒有發生變化,時間戳也會進行更新。客戶既可從服務器緩沖區讀取數據,也可直接從設備讀取數據,從設備直接讀取數據速度會慢一些,一般只有在故障診斷或極特殊的情況下才會采用。

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

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

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

                        圖表 7 溫度巡檢系統配置圖

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

圖表 8 ADAM-4015命令表摘錄  

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

(3) OPCServer對象的實現
    必須嚴格按照規范要求,實現所要求的所有接口函數。但是這并不意味著所有的接口函數都必須自己編寫,我們可以充分利用COM的包容與聚合機制來復用一些常規的接口。在Delphi中有很多現成的類已經實現了眾多的接口,我們可以充分利用這一點來簡化我們的編程過程。例如在我的 OPCServer服務器對象中IUnknown接口是通過父類TAutoObject 實現的,IConnectionPointContainer 接口是通過創建一個Delphi的TConnectionPoints對象,然后將其接口暴露給客戶實現的; OPCServer的Delphi描述如下,限于篇幅具體實現過程從略:
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對象的實現
    OPCGroup對象是由OPCServer對象創建的。當OPC客戶程序調用OPCServer對象的接口函數AddGroup時,在AddGroup函數體內生成OPCGroup對象。以后用戶依賴與指向這個OPCGroup接口的指針,便可以方便的創建和管理點項目,從而獲得現場的實時數據。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客戶創建的OPC組數目,以及數據緩沖池中的數據更新情況。

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

熱點新聞

推薦產品

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



2.詳細的需求:
姓名:
單位:
電話:
郵件:
主站蜘蛛池模板: 日韩专区第一页-日韩中文字幕在线亚洲一区-日韩中文字幕在线观看视频-日韩中文字幕在线播放-日韩中文字幕一区二区不卡-日韩中文字幕一区 | 色综合天天综合网国产国产人-色综合天天综合网国产成人网-色综合天天综合网国产成人-色综合天天综合给合国产-国产成人精彩在线视频50-国产成人禁片在线观看 | 国产福利在线视频尤物tv-国产福利在线看-国产福利在线高清导航大全-国产福利在线-国产福利影视-国产福利一区二区麻豆 | 二区乱码综合无码一区二区三-二区女人观看chinese中国真实乱-二区欧美三-二区欧美无遮挡中文字幕人成人-二区啪视频-二区日本成人动漫电影 | 午夜国产小视频-午夜国产视频-午夜国产情侣拍视频-午夜国产精品影院在线观看-国产日产高清欧美一区二区三区-国产日本在线视频 | 亚洲精品www久久久久久-亚洲精品m在线观看-亚洲精品99久久久久久-亚洲精品97福利在线-黑人解禁-黑人家教 | 激情www,国产成人爱情动作片在线观看,五月天婷婷在线观看高清,欧美美女福利视频,五月激激激综合网色播免费,国产亚洲欧美日韩综合另类 | 欧美视频综合-欧美视频中文字幕-欧美视频在线观在线看-欧美视频在线观看网站-直接观看黄网站免费视频-正在播放久久 | 日韩精品电影在线观看-日韩精品电影在线-日韩精品电影一区-日韩精品电影-国产日韩欧美综合-国产日韩欧美在线一区二区三区 | 婷婷四房综合激情五月在线,国产精品吹潮在线观看中文,久久99精品亚洲热综合,成人久久久久,99精品久久99久久久久,久久福利小视频 国内自拍中文字幕,久久久一本精品99久久精品66,精品400部自拍视频在线播放,国产麻豆精品在线,日韩欧美高清视频,久久久免费精品视频 | 亚洲女同在线观看-亚洲女同在线-亚洲女同视频-亚洲女同精品中文字幕-美国激情ap毛片-美国黄色一级毛片 | 天天干天操-天天干天天爱天天操-天天干天天操天天干-天天干天天操天天摸-久久2-久久2017 | 日皮影院,一区二区三区高清不卡,国产日韩欧美中文字幕,日韩亚洲欧美一区二区三区,国产三级91,国产精品hd免费观看 | 免费的成人a视频在线观看-免费岛国小视频在线观看-免费岛国-免费大香伊蕉在人线国产-免费大片黄在线观看日本-免费大片黄手机在线观看 | 国产美女小视频-国产美女网站视频-国产美女网站-国产美女特级嫩嫩嫩bbb-天天干视频在线观看-天天干视频在线 | 久久久久久99精品-久久久久久99-久久久久久91香蕉国产-久久久久久91精品色婷婷-中国一级片免费看-中国一级毛片国产高清 | 一区二区视频在线观看高清视频在线-一区二区三区无码高清视频-一区二区三区无码被窝影院-一区二区三区四区国产-久久re视频精品538在线-久久re热在线视频精99 | 天天躁日日躁狠狠躁AV麻豆-天天躁人人躁人人躁狂躁-天天澡夜夜澡人人澡-天天影视香色欲综合网-国产成人女人在线视频观看-国产成人女人视频在线观看 | 亚洲精品永久www嫩草-亚洲精品影院一区二区-亚洲精品影院久久久久久-亚洲精品影院-护士18p-护士16p | 91导航在线-91岛国-91第一页-91短视频在线高清hd-91粉嫩萝控精品福利网站-91粉色视频在线观看 | 四房网,久久久国产99久久国产久,色偷偷男人天堂,九七电影院97网手机版支持,国产人成精品免费视频,五月天最新网站 | 日韩中文字幕视频在线观看-日韩中文字幕视频在线-日韩中文字幕视频-日韩中文字幕久久久经典网-亚洲不卡高清免v无码屋-亚洲成_人网站图片 | 成人久久久久-成人久久久-成人久久精品一区二区三区-成人久久18免费游戏网站-成人久久18免费网-成人久久18免费软件 | 性欧美高清精品video-性欧美高清videofree-性欧美俄罗斯-性欧美xxxx乳高跟-国产真实乱偷人视频-国产真实乱了全集mp4 | 日本特黄一级-日本特黄特色aa大片免费-日本特黄特色aaa大片免费-日本特黄特黄aaaaa大片-二级特黄绝大片免费视频大片-二级片在线观看 | 六月丁香七月婷婷,欧美老女人逼,久久亚洲国产高清,国产一级在线观看视频,日产wv二区三区四区,瑟瑟网站在线观看 | 日韩在线观看网站-日韩在线观看视频网站-日韩在线观看视频免费-日韩在线观看视频黄-日韩在线观看免费完整版视频-日韩在线观看免费 | 玖玖射,国内高清久久久久久久久,久久婷婷丁香,91精品自在拍精选久久,不卡一区二区三区四区,奇迹少女第四季中文版免费全集 | 一区二区国产精品-一区二区高清在线观看-一区二区高清在线-一区二区成人国产精品-九九视频精品全部免费播放-九九视频国产 | 伊人色综合久久大香-伊人色综合久久-伊人色综合97-伊人色在线-免费永久在线观看黄网-免费永久国产在线视频 | 青青青青青青草-青青青青青青-青青青青青国产免费手机看视频-青青青青青国产免费观看-青青青青青草原-青青青青青草 | 精品午夜一区二区三区在线观看-精品午夜视频-精品午夜寂寞影院在线观看-精品午夜寂寞黄网站在线-日夜啪啪一区二区三区-日日摸天天爽天天爽视频 | 久久99精品久久久久久噜噜噜-久久99精品久久久久久噜噜丰满-久久99精品久久久久久噜噜-久久99精品久久久久久久野外-午夜精品人妻无码一区二区三区-午夜精品免费 欧美日韩在线成人免费-欧美日韩在线成人看片a-欧美日韩在线不卡-欧美日韩在线播放-自拍偷拍三级-自拍偷拍欧美亚洲 | 99国产精品欧美久久久久久影院,日本不卡中文字幕,国产片在线观看播放,日韩国产欧美在线观看,久久综合狠狠综合久久97色,婷婷在线影院 | 精品国产91乱码一区二区三区,成人国产一区二区三区精品,亚洲一区免费在线观看,日韩在线一区二区三区免费视频,波多野吉衣在线观看,日韩一级精品久久久久 | 精品无码免费黄色网站-精品无码免费一区二区三区-精品无码免费在线播放-精品无码免费专区-精品无码免费专区午夜-精品无码欧美黑人又粗又 | 在线亚洲不卡,三上悠亚一区二区观看,91伊人久久,婷婷激情五月,中文字幕久久精品,色综合久久中文字幕 | 美女搞j-美女干骚-美女范冰冰hdxxxx-美女吊逼-亚洲欧美在线观看-亚洲欧美一区二区三区在线 | a级在线免费-a级在线看-a级在线观看免费-a级在线观看-日韩avdvd-日韩aa在线观看 | 久草视频精品-久草视频免费-久草视频免费看-久草视频免费在线播放-天天操操-天天操操操操操 | 亚洲伦,视频二区 素人 欧美 日韩,亚洲精品美女久久久aaa,伊人婷婷色,国产福利一区二区三区在线观看,国产成人亚洲欧美三区综合 |