精品欧美一区二区三区在线观看 _久久久久国色av免费观看性色_国产精品久久在线观看_亚洲第一综合网站_91精品又粗又猛又爽_小泽玛利亚一区二区免费_91亚洲精品国偷拍自产在线观看 _久久精品视频在线播放_美女精品久久久_欧美日韩国产成人在线

C# Opcda 應用詳解,你學會了嗎?

開發 前端
OPC的出現正是為了解決這些問題。它采用一種簡單的接口標準,允許不同的供應商設備和應用程序之間進行數據交換。通過使用OPC,應用程序可以自由地組合不同的設備和應用程序,從而實現更加靈活、高效和經濟的工業自動化系統。

OPC,一句話DA用的越來越少了。全稱OLE For Process Control,是一種工業標準,旨在解決不同供應商設備與應用程序之間的接口標準化問題。隨著工業自動化和控制系統的不斷發展,各種設備和應用程序不斷涌現,其之間的通信變得越來越復雜。傳統的設備和應用程序之間的通信主要依靠編程和調試,但這種方式效率低下、不靈活、成本高,也限制了應用程序的自由組合和開發。

OPC的出現正是為了解決這些問題。它采用一種簡單的接口標準,允許不同的供應商設備和應用程序之間進行數據交換。通過使用OPC,應用程序可以自由地組合不同的設備和應用程序,從而實現更加靈活、高效和經濟的工業自動化系統。

OPC標準包括一組接口規范和協議,可以被用于不同類型的設備和應用程序。OPC的接口規范包括以下幾個部分:OPC控制器規范、OPC數據服務規范、OPC應用程序接口規范和OPC數據傳輸規范。這些規范提供了一種通用的接口,允許設備和應用程序之間進行數據交換。OPC的協議主要包括基于協議的和基于消息的兩種方式。

基于協議的方式是通過協議規范定義的消息格式進行通信。每個設備和應用程序都可以使用OPC協議生成自己的消息格式,從而實現與其他設備和應用程序的通信。基于消息的方式則是通過定義消息的格式和目的地來進行通信。消息可以通過OPC服務器進行傳輸,服務器可以是本地的或者遠程的。

OPC標準的實現依賴于OPC基金會,該基金會是一個非營利性的組織,致力于推廣和發展OPC標準。基金會負責維護OPC標準,開發新的規范和協議,提供技術支持和培訓等服務。OPC基金會的成員包括各種設備和應用程序的供應商、系統集成商、工程師和用戶。

利用驅動器的系統連接

圖片圖片

利用 OPC 控制的系統組成

圖片圖片

OPC 的分層結構

OPC 對象中最上層的對象是 OPC 服務器,一個 OPC 服務器中可以設置一個以上的 OPC 組。OPC 服務器常對應于某種特定的控制設備,如 DCS 以及 PLC 等。

OPC 組是可以進行數據訪問的多個 OPC 標簽的集合,OPC 應用程序可以將需要的數據分組進行批量讀取,也可以以組為單位啟動或者停止數據訪問。此外,OPC 組還提供組內 OPC 標簽數據變化時向 OPC 應用程序通知的事件。

圖片圖片

OPC 與 OPC UA

OPC DA 與 OPC UA 都是 OPC 協議的標準:

OPC 是一種通過微軟 COM/DCOM 技術來實現自動化控制的協定,采用 C/S 架構。開發人員只需要按照 OPC 的標準編寫 OPC-Client 訪問 OPC-Server 進行讀寫操作即可實現與硬件設備的通信。OPC 的協定中包括:

DA (Data Access):訪問數據的主要規范;

A&E (Alarm and Event):基于事件提供 Client 端訂閱,事件觸發后 Server 主動提交數據;

HDA (History Data Access):歷史數據訪問;

OPC UA 是 OPC 協議的新版,其不再依賴于 COM/DCOM 技術,這意味著其具有跨平臺性,不再局限于 Windows 系統。OPC UA 提供了可靠的通信機制,接口簡單一致。

先用KepServerEx 做個防真環境

模擬數據配制

線形變化型 RAMP(Rate, Low Limit, High Limit, Increment) Rate:變化率,單位毫秒 Low Limit:下限值 High Limit:上限值 Increment:變化量

隨機變化型

格式:RANDOM(Rate, Low Limit, High Limit)
Rate:變化率,單位毫秒
Low Limit:下限值
High Limit:上限值

三角函數型 SINE(Rate, Low Limit, High Limit, Frequency, Phase) Rate:變化率/變化周期,單位毫秒 Low Limit:下限值 High Limit:上限值 Frequency:三角函數頻率 Phase:三角函數偏移量

用戶自定義型 USER(Rate, User Value1, User Value2, User Value3,…User ValueN) Rate:變化率,單位毫秒 User Value1….ValueN:用戶自定義的值,可以有多個

OPCDA

OPCDAAuto.dll下載_解決OPCDAAuto.dll丟失問題 OPCDAAuto.dll是微軟vc組件的一個重要dll文件,缺少它可能會造成部分軟件或游戲無法正常運行。當系統提示“沒有找到OPCDAAuto.dll”或“丟失OPCDAAuto.dll”等類似錯誤信息 dll文件修復方法:1、解壓下載的文件。2、復制文件“OPCDAAuto.dll”到系統目錄下。3、系統目錄一般為:C:\WINNT\System32 64位系統為C:\Windows\SysWOW64 4、最后點擊開始菜單-->運行-->輸入regsvr32 OPCDAAuto.dll 后,回車即可解決錯誤提示。

圖片圖片

注意:這個組件在.net core下項目需要是x86下才能正常使用。

一個例子

圖片圖片

做一個自定義控件UPanel。

圖片圖片

public partial class UPanel : UserControl
{
    public event Action<string,string> ValueClick;


    public UPanel()
    {
        InitializeComponent();
    }


    protected override void OnInvalidated(InvalidateEventArgs e)
    {
        base.OnInvalidated(e);
        ResetLocation();
    }
    protected override void OnLoad(EventArgs e)
    {
        base.OnLoad(e);
        ResetLocation();
    }


    protected override void OnResize(EventArgs e)
    {
        base.OnResize(e);
        ResetLocation();
        this.Invalidate();
    }


    private void ResetLocation()
    {
        lblTitle.Left = (this.Width - lblTitle.Width) / 2;
        lblValue.Left = (this.pnlMain.Width - lblValue.Width) / 2;
        lblValue.Top = (this.pnlMain.Height - lblValue.Height) / 2;
    }


    public string Title
    {
        get
        {
            return lblTitle.Text;
        }
        set
        {
            lblTitle.Text = value;
        }
    }


    public string Value
    {
        get
        {
            return lblValue.Text;
        }
        set
        {
            lblValue.Text = value;
        }
    }


    private void pnlMain_Click(object sender, EventArgs e)
    {
        valueClick(Value);
    }


    private void lblValue_Click(object sender, EventArgs e)
    {
        valueClick(Value);
    }


    private void valueClick(string value)
    {
        if (ValueClick != null)
        {
            lblValue.Visible = false;
            TextBox txt = new TextBox();
            txt.Multiline = true;
            this.pnlMain.Controls.Add(txt);
            txt.Dock= DockStyle.Fill;
            txt.Focus();
            txt.MouseLeave += (obj, e) =>
            {
                txt.Visible=false;
                lblValue.Visible = true;
                if(value!=txt.Text && txt.Text != "")
                {
                    Value = txt.Text;
                    this.ValueClick(Value, Title);
                }
            };
        }
    }
}

申明一個Dev類

public class Dev
{
    public Int32 Bom1 { get; set; }
    public string Part1 { get; set; }


    public Int32 Qty1 { get; set; }
    public Int32 Speed1 { get; set; }
    public bool Status1 { get; set; }
    public bool Status2 { get; set; }
    public bool Status3 { get; set; }
    public bool Status4 { get; set; }


    public Int32 Times1 { get; set; }


    public Int32 Weight { get; set; }


    public int OnLine { get; set; } = 0;
    public int Offline { get; set; } = 0;


    public void Status()
        {
            OnLine = 0;
            Offline = 0;
            var properties= this.GetType().GetProperties()
            .Where(x => x.Name.Contains("Status"));
            foreach (var item in properties)
            {
                if ((bool)item.GetValue(this, null))
                {
                    OnLine++;
                }
                else
                {
                    Offline++;
                }
            }
        }


}

OpcDev類

public class OpcModel
{
    public Action<Dev> ReadFinish=null;
    public Dev dev { get; set; } = new Dev();
    OPCServer MyOpcServer;
    OPCGroup MyOpcGroup;
    OPCItem MyOpcItem1;
    OPCItem MyOpcItem2;
    OPCItem MyOpcItem3;
    OPCItem MyOpcItem4;


    OPCItem MyOpcItem5;
    OPCItem MyOpcItem6;
    OPCItem MyOpcItem7;
    OPCItem MyOpcItem8;


    OPCItem MyOpcItem9;
    OPCItem MyOpcItem10;


    //連接初使化
    public bool Connect()
    {
        try
        {
            MyOpcServer = new OPCServer();
            //ProgID是一個字符串,唯一標識注冊的真實OPC數據訪問服務器(實現自定義接口)
            //The Node name can specify another computer to connect using DCOM.
            MyOpcServer.Connect("Kepware.KEPServerEX.V6", "127.0.0.1");


            MyOpcGroup = MyOpcServer.OPCGroups.Add("MyGroup1");
            MyOpcGroup.IsActive = true;
            //是否可以Change事件
            MyOpcGroup.IsSubscribed = true;
            MyOpcGroup.DeadBand = 0;
            MyOpcGroup.UpdateRate = 100;


            MyOpcItem1 = MyOpcGroup.OPCItems.AddItem("Channel1.Dev1.Bom1", 0);
            MyOpcItem2 = MyOpcGroup.OPCItems.AddItem("Channel1.Dev1.Part1", 0);
            MyOpcItem3 = MyOpcGroup.OPCItems.AddItem("Channel1.Dev1.Qty1", 0);
            MyOpcItem4 = MyOpcGroup.OPCItems.AddItem("Channel1.Dev1.Speed1", 0);
            MyOpcItem5 = MyOpcGroup.OPCItems.AddItem("Channel1.Dev1.Status1", 0);
            MyOpcItem6 = MyOpcGroup.OPCItems.AddItem("Channel1.Dev1.Status2", 0);
            MyOpcItem7 = MyOpcGroup.OPCItems.AddItem("Channel1.Dev1.Status3", 0);
            MyOpcItem8 = MyOpcGroup.OPCItems.AddItem("Channel1.Dev1.Status4", 0);
            MyOpcItem9 = MyOpcGroup.OPCItems.AddItem("Channel1.Dev1.Times1", 0);
            MyOpcItem10 = MyOpcGroup.OPCItems.AddItem("Channel1.Dev1.Weight1", 0);


            //異步讀完成
            MyOpcGroup.AsyncReadComplete += MyOpcGroup_AsyncReadComplete;


            return true;
        }
        catch
        {
            return false;
        }
    }


    //同步讀取信息
    public void ReadValue()
    {
        object ItemValues;
        object Qualities;
        object TimeStamps;


        MyOpcItem1.Read(1, out ItemValues, out Qualities, out TimeStamps);
        dev.Bom1 = (Int32)ItemValues;


        MyOpcItem2.Read(1, out ItemValues, out Qualities, out TimeStamps);
        dev.Part1 = ItemValues.ToString();


        MyOpcItem3.Read(1, out ItemValues, out Qualities, out TimeStamps);
        dev.Qty1 = (Int32)ItemValues;


        MyOpcItem4.Read(1, out ItemValues, out Qualities, out TimeStamps);
        dev.Speed1 = (Int32)ItemValues;


        MyOpcItem5.Read(1, out ItemValues, out Qualities, out TimeStamps);
        dev.Status1 = (bool)ItemValues;


        MyOpcItem6.Read(1, out ItemValues, out Qualities, out TimeStamps);
        dev.Status2 = (bool)ItemValues;


        MyOpcItem7.Read(1, out ItemValues, out Qualities, out TimeStamps);
        dev.Status3 = (bool)ItemValues;


        MyOpcItem8.Read(1, out ItemValues, out Qualities, out TimeStamps);
        dev.Status4 = (bool)ItemValues;


        MyOpcItem9.Read(1, out ItemValues, out Qualities, out TimeStamps);
        dev.Times1 = (Int32)ItemValues;


        MyOpcItem10.Read(1, out ItemValues, out Qualities, out TimeStamps);
        dev.Weight = (Int32)ItemValues;


        dev.Status();
    }
    
    //同步寫
    public void WriteValue(string title, object value)
    {
        int[] tmp = new int[] { 0, MyOpcItem1.ServerHandle };
        Array serverHandles = (Array)tmp;
        Array Errors;
        int cancelID;
        object[] v = new object[] { "", value };
        Array values = (Array)v;
        MyOpcGroup.SyncWrite(1, ref serverHandles, ref values, out Errors);
        switch (title)
        {
            default:
                break;
        }
    }
}

修改異步寫

//同步寫
public void WriteValue(string title, object value)
{
    int[] tmp = new int[] { 0, MyOpcItem1.ServerHandle };
    Array serverHandles = (Array)tmp;
    Array Errors;
    int cancelID;
    object[] v = new object[] { "", value };
    Array values = (Array)v;
    MyOpcGroup.SyncWrite(1, ref serverHandles, ref values, out Errors);
    switch (title)
    {
        default:
            break;
    }
}


//異步寫
public void WriteValueAsync(string title, object value)
{
    int[] tmp = new int[] { 0, MyOpcItem1.ServerHandle };


    Array serverHandles = (Array)tmp;
    Array Errors;
    int cancelID;
    object[] v = new object[] { "", value };
    Array values = (Array)v;
    MyOpcGroup.AsyncWrite(1, ref serverHandles, ref values
    , out Errors, 1, out cancelID);


    switch (title)
    {
        default:
            break;
    }
}

異步讀

//異步讀
public void ReadValueAsync()
{
    int[] tmp = new int[] { 0, MyOpcItem1.ServerHandle, MyOpcItem2.ServerHandle
    , MyOpcItem3.ServerHandle, MyOpcItem4.ServerHandle, MyOpcItem5.ServerHandle
    , MyOpcItem6.ServerHandle, MyOpcItem7.ServerHandle, MyOpcItem8.ServerHandle
    , MyOpcItem9.ServerHandle, MyOpcItem10.ServerHandle };
    Array serverHandles = (Array)tmp;
    Array Errors;
    int cancelID;
    MyOpcGroup.AsyncRead(10, ref serverHandles, out Errors, 1, out cancelID);
}


//異步讀完成后的回調
private void MyOpcGroup_AsyncReadComplete(int TransactionID, int NumItems
, ref Array ClientHandles, ref Array ItemValues
, ref Array Qualities, ref Array TimeStamps, ref Array Errors)
{
    dev.Bom1 = (Int32)MyOpcItem1.Value;
    dev.Part1 = MyOpcItem2.Value.ToString();
    dev.Qty1 = (Int32)MyOpcItem3.Value;
    dev.Speed1 = (Int32)MyOpcItem4.Value;
    dev.Status1 = (bool)MyOpcItem5.Value;
    dev.Status2 = (bool)MyOpcItem6.Value;
    dev.Status3 = (bool)MyOpcItem7.Value;
    dev.Status4 = (bool)MyOpcItem8.Value;
    dev.Times1 = (Int32)MyOpcItem9.Value;
    dev.Weight = (Int32)MyOpcItem10.Value;


    if (ReadFinished != null)
    {
        ReadFinished();
    }
}

數據改變事件

MyOpcGroup.IsSubscribed = true; //只有為真事件才有效


MyOpcGroup.DataChange += MyOpcGroup_DataChange; //綁定事件


private void MyOpcGroup_DataChange(int TransactionID, int NumItems
, ref Array ClientHandles
, ref Array ItemValues, ref Array Qualities, ref Array TimeStamps)
{
    dev.Bom1 = (Int32)MyOpcItem1.Value;
    dev.Part1 = MyOpcItem2.Value.ToString();
    dev.Qty1 = (Int32)MyOpcItem3.Value;
    dev.Speed1 = (Int32)MyOpcItem4.Value;
    dev.Status1 = (bool)MyOpcItem5.Value;
    dev.Status2 = (bool)MyOpcItem6.Value;
    dev.Status3 = (bool)MyOpcItem7.Value;
    dev.Status4 = (bool)MyOpcItem8.Value;
    dev.Times1 = (Int32)MyOpcItem9.Value;
    dev.Weight = (Int32)MyOpcItem10.Value;
    if (DataChanged != null)
    {
        DataChanged();
    }
}

Opc server 關閉事件

MyOpcServer.ServerShutDown += MyOpcServer_ServerShutDown;


private void MyOpcServer_ServerShutDown(string Reason)
{
    
}

界面代碼

public partial class FrmMain : Form
    {
        OpcModel opc = new OpcModel();
        System.Timers.Timer timer= new System.Timers.Timer();
        public FrmMain()
        {
            InitializeComponent();
            timer.Interval = 1000;
            timer.Elapsed += Timer_Elapsed;
        }


        private void Timer_Elapsed(object? sender, System.Timers.ElapsedEventArgs e)
        {
            opc.ReadValueAsync();
        }


        private void Opc_ReadFinished()
        {
            this.Invoke(() =>
            {
                uPanel1.Title = "Bom1";
                uPanel1.Value = opc.dev.Bom1.ToString();


                uPanel2.Title = "Part1";
                uPanel2.Value = opc.dev.Part1.ToString();


                uPanel3.Title = "Qty1";
                uPanel3.Value = opc.dev.Qty1.ToString();


                uPanel4.Title = "Speed1";
                uPanel4.Value = opc.dev.Speed1.ToString();


                uPanel5.Title = "Status1";
                uPanel5.Value = opc.dev.Status1.ToString();


                uPanel6.Title = "Status2";
                uPanel6.Value = opc.dev.Status2.ToString();


                uPanel7.Title = "Status3";
                uPanel7.Value = opc.dev.Status3.ToString();


                uPanel8.Title = "Status4";
                uPanel8.Value = opc.dev.Status4.ToString();


                uPanel9.Title = "Times1";
                uPanel9.Value = opc.dev.Times1.ToString();


                uPanel10.Title = "Weight";
                uPanel10.Value = opc.dev.Weight.ToString();


                uPanel1.Refresh();
                uPanel2.Refresh();
                uPanel3.Refresh();
                uPanel4.Refresh();




                uPanel5.Refresh();
                uPanel6.Refresh();
                uPanel7.Refresh();
                uPanel8.Refresh();
                uPanel9.Refresh();
                uPanel10.Refresh();
            });
        }


        private void btnStart_Click(object sender, EventArgs e)
        {
            opc.Connect();
            opc.ReadFinished += Opc_ReadFinished;
            opc.DataChanged += Opc_DataChanged;
            //timer.Start();
        }


        private void Opc_DataChanged()
        {
            Opc_ReadFinished();
        }


        private void pnlValueClick(string value,string title)
        {
            opc.WriteValueAsync(title, value);
            opc.WriteFinished -= Opc_WriteFinished;
            opc.WriteFinished += Opc_WriteFinished;
        }


        private void Opc_WriteFinished()
        {
            
        }
    }


}
責任編輯:武曉燕 來源: 技術老小子
相關推薦

2024-10-21 07:05:14

C#特性語言

2024-12-31 00:08:37

C#語言dynamic?

2024-12-23 10:06:45

C#深拷貝技術

2024-05-17 08:42:52

AttributeMyClass方法

2024-02-04 00:00:00

Effect數據組件

2024-01-02 12:05:26

Java并發編程

2024-07-03 08:15:39

C#字符串表達式

2022-07-13 08:16:49

RocketMQRPC日志

2023-03-26 22:31:29

2022-12-06 07:53:33

MySQL索引B+樹

2024-10-16 11:28:42

2022-04-26 08:41:54

JDK動態代理方法

2024-11-06 11:38:59

C#單例模式

2023-05-18 09:01:11

MBRGPT分區

2024-08-12 08:12:38

2023-03-09 07:38:58

static關鍵字狀態

2024-10-12 10:25:15

2024-01-19 08:25:38

死鎖Java通信

2023-07-26 13:11:21

ChatGPT平臺工具

2023-01-10 08:43:15

定義DDD架構
點贊
收藏

51CTO技術棧公眾號

国产成人精品一区二区| 日韩欧美一级二级| 宅男噜噜99国产精品观看免费| 中文字幕在线一| 欧美三级不卡| 亚洲激情 国产| 香港日本韩国三级网站| aaa大片在线观看| 91丝袜美腿高跟国产极品老师| 国产精品av在线| 精品午夜福利在线观看| 成人aaaa| 亚洲国产成人一区| 天堂av8在线| 波多野一区二区| 国产精品三级av| 久久av一区二区| 国产一区二区在线视频观看| 日韩天堂av| 俺去啦;欧美日韩| 97伦伦午夜电影理伦片| 欧美高清一级片| 在线观看视频一区二区欧美日韩| 奇米777四色影视在线看| 国产私拍精品| 99精品在线观看视频| 91久久精品国产91性色| 国产一级淫片a视频免费观看| 亚洲二区三区不卡| 中文字幕自拍vr一区二区三区| 国产大学生视频| 玖玖精品一区| 欧美日韩免费视频| 亚洲中文字幕久久精品无码喷水 | 久久亚洲国产精品| 波多野结衣片子| 欧美成人专区| 日韩美女主播在线视频一区二区三区| 中文字幕 91| 日韩欧美一区二区三区在线观看| 亚洲成人精品影院| 在线观看污视频| 欧美高清视频| 国产精品人人做人人爽人人添| 欧美另类视频在线| 天天干天天草天天射| 国产a视频精品免费观看| 成人激情视频小说免费下载| 中文字幕人妻一区二区在线视频| 视频在线观看一区二区三区| 国产91精品在线播放| 国产精品男女视频| 一本色道88久久加勒比精品| 午夜伦理精品一区| 日本特黄一级片| 黄页网站一区| 午夜精品免费视频| 美日韩一二三区| 久久这里只有| 国产精品美女久久久久久免费| 国产第一页在线观看| 视频在线在亚洲| 国产精品jvid在线观看蜜臀| 国产精品自拍第一页| 日韩高清中文字幕一区| 国产精品久久久久久久久久久不卡| 岛国av中文字幕| 美女国产一区二区| 91精品啪aⅴ在线观看国产| 国产精品久久久久久久免费看| 国内一区二区在线| 成人羞羞视频免费| 先锋av资源站| 国产日韩欧美精品在线| 亚洲视频电影| 污污视频在线| 高跟丝袜一区二区三区| 久久久久久久久久福利| 黄色成人小视频| 欧美一级生活片| 扒开伸进免费视频| 久久99高清| www.日本久久久久com.| 极品盗摄国产盗摄合集| 136国产福利精品导航网址| 欧美中文在线观看| 手机看片日韩国产| 男女日批视频在线观看| shkd中文字幕久久在线观看| 亚洲色图欧洲色图婷婷| 岛国大片在线播放| 美女100%一区| 欧美一区二区视频在线观看2020 | 国模私拍一区二区| 国产一区二区三区在线观看免费 | 亚洲国产日产av| 久久精品99国产| 国产精品久久久久久av公交车| 欧美精品一区二区三区久久久| 亚洲色成人网站www永久四虎| 欧美r级电影| 97精品国产97久久久久久免费| 亚洲精品毛片一区二区三区| 国产福利91精品一区二区三区| 欧美日韩精品久久| 成人免费网址| 色国产综合视频| 亚洲欧美日韩一二三区| 亚洲欧洲色图| 欧美激情第6页| 亚洲综合成人av| 成人av电影免费观看| 亚洲人体一区| www.精品| 亚洲白虎美女被爆操| 成年人免费视频播放| 99热这里只有精品8| 亚洲自拍av在线| 成人h小游戏| 红桃av永久久久| 国产精品熟女一区二区不卡| 成人6969www免费视频| 91精品国产91久久久久久最新| 国产精品美女一区| 欧美激情一区二区三区全黄| 99视频在线免费播放| 精品99re| 久久天天躁狠狠躁夜夜躁2014| 亚洲国产av一区二区三区| 成人黄色av电影| 欧美一区二区三区综合| va天堂va亚洲va影视| 国产一区二区三区丝袜| 久久国产视频播放| 99久久国产综合精品女不卡| 日韩黄色片在线| 精品中文字幕一区二区三区| 色妞欧美日韩在线| 日韩一级在线视频| 久久综合九色综合欧美亚洲| 丁香六月激情婷婷| www.国产精品一区| 色综合久综合久久综合久鬼88 | 美女网站在线看| 亚洲精品一区二区三区影院| 欧洲猛交xxxx乱大交3| 久久精品噜噜噜成人av农村| 色一情一区二区三区四区| 偷拍精品精品一区二区三区| 亚洲男人天堂网站| www.国产一区二区| 久久久91精品国产一区二区三区| 18禁免费无码无遮挡不卡网站| 欧美日韩一区二区三区四区不卡| 91精品国产免费久久久久久| 天堂中文在线官网| 欧美性猛交xxxx富婆| 亚洲狠狠婷婷综合久久久久图片| 亚洲一区二区三区四区五区午夜 | 国产日韩欧美在线视频观看| 在线免费观看黄色网址| 欧美精品一级二级| 永久看片925tv| 国产成人亚洲综合色影视| 99在线免费视频观看| 女同一区二区三区| 国产97在线观看| 在线观看av黄网站永久| 欧美一区二区三区四区五区| 免费在线看黄网址| 99国产一区二区三精品乱码| 99精品免费在线观看| 国产一区二区三区四区| 国产精品自在线| 丝袜在线观看| 亚洲精品一区中文| 中国精品一区二区| 亚洲欧美日韩久久| 人妖粗暴刺激videos呻吟| 亚洲欧美bt| 永久久久久久| 北条麻妃一区二区三区在线| 欧洲精品毛片网站| 日本在线免费| 亚洲成年人在线播放| 日韩黄色片网站| 亚洲欧美日韩成人高清在线一区| 国产污在线观看| 美女一区二区视频| www.av毛片| 青草国产精品| 国产亚洲欧美一区二区| 成人1区2区| 欧美国产日韩在线| 国产精品久久久久久久龚玥菲 | 国产精品视频免费在线| 亚洲奶水xxxx哺乳期| 亚洲精品福利视频| 91肉色超薄丝袜脚交一区二区| 亚洲一区免费在线观看| 蜜桃av乱码一区二区三区| 国产福利电影一区二区三区| 国产真人无码作爱视频免费| 国产精品www994| 天堂一区二区三区| 久久365资源| 成人午夜小视频| 欧美性xxx| 色综合男人天堂| 欧美videos极品另类| 日韩精品一区二区三区四区| 波多野结衣午夜| 天天av天天翘天天综合网色鬼国产| 国产黄a三级三级| 久久久久久久久久电影| 精品人妻在线视频| 激情深爱一区二区| 久久久久久久久久久久91| 一本一道久久综合狠狠老精东影业| 久久av秘一区二区三区| 精品久久不卡| 欧美精品欧美精品系列c| 亚洲精品福利| 亚洲曰本av电影| av一级久久| 国产日韩欧美视频| 日本综合视频| 琪琪第一精品导航| 川上优av中文字幕一区二区| 欧美黑人一级爽快片淫片高清| 欧美激情黑人| 日韩在线视频网站| 国产午夜在线观看| 日韩精品亚洲视频| 日韩一级免费毛片| 亚洲变态欧美另类捆绑| 亚洲乱色熟女一区二区三区| 91精品国产高清一区二区三区| 欧美视频xxxx| 欧美在线高清视频| 精品一区二区无码| 在线免费观看日本一区| youjizz在线视频| 色偷偷成人一区二区三区91| 草久久免费视频| 精品久久久在线观看| 国产毛片aaa| 色综合久久久久| 国产免费av一区| 欧美性感美女h网站在线观看免费| 久久国产视频播放| 一本大道综合伊人精品热热| 人人爽人人爽人人片av| 色偷偷久久人人79超碰人人澡| 四虎影院在线免费播放| 91国产丝袜在线播放| 成人免费一区二区三区| 欧美日韩不卡一区二区| 97人妻精品一区二区三区| 欧美一区二区三区视频免费| www.好吊色| 日韩麻豆第一页| 国产精品视频一区二区久久| 日韩在线观看免费高清| 日本孕妇大胆孕交无码| 66m—66摸成人免费视频| 欧美gay视频| 国产免费一区二区三区在线能观看| 亚州欧美在线| 欧美理论电影在线| 久久精品小视频| 欧美综合在线播放| 欧美日韩国内| 国产黄色一级网站| 久久国产88| 日韩在线精品一区| 玖玖综合伊人| 色先锋资源久久综合5566| 免费观看在线午夜影视| 欧美二区在线播放| 一区二区三区电影大全| 国产精品视频在线播放| 精品一区二区三区视频在线播放| 懂色一区二区三区av片| 欧美激情在线免费| 欧美日韩亚洲国产成人| 国产精品一区亚洲| 99日在线视频| 97久久精品人人爽人人爽蜜臀| 亚洲自拍偷拍图| 亚洲综合视频在线| 日韩三级一区二区| 91精品国产综合久久婷婷香蕉| 熟妇高潮一区二区三区| 色妞欧美日韩在线| 国产福利电影在线播放| 国产有码一区二区| 台湾色综合娱乐中文网| 中国老女人av| 首页亚洲欧美制服丝腿| 欧美久久久久久久久久久| 国产农村妇女毛片精品久久麻豆| 国产精品九九九九九九| 在线观看成人免费视频| 成人免费公开视频| 久久精品成人欧美大片古装| 黄色18在线观看| 亚洲a在线观看| 欧美日韩一二| 国产黄视频在线| 国产真实精品久久二三区| 欧美多人猛交狂配| 亚洲国产视频一区二区| 一女二男一黄一片| 亚洲无av在线中文字幕| av中文字幕电影在线看| 国产主播欧美精品| 国精一区二区| 内射国产内射夫妻免费频道| 国产精品亚洲第一| 日本一级特级毛片视频| 91成人在线精品| 无码精品一区二区三区在线| 欧美高跟鞋交xxxxhd| 亚洲aⅴ网站| 视频在线99re| 天堂久久一区二区三区| 99久久免费看精品国产一区| 亚洲精品视频免费观看| 亚洲综合精品在线| 亚洲一区999| 欧美人与性动交xxⅹxx| 久久精品国产精品国产精品污| 亚洲欧美亚洲| 在线观看你懂的视频| 亚洲欧美一区二区久久| 国产精品国产av| www.亚洲免费视频| 欧美天堂一区二区| 亚洲精品一区二区三| 日本不卡一区二区三区| 国产精品国产三级国产专业不| 欧美日韩中文字幕在线视频| 婷婷开心激情网| 97精品国产91久久久久久| 另类春色校园亚洲| 亚洲熟妇国产熟妇肥婆| av在线综合网| 精品美女久久久久| 亚洲美女视频网站| 亚洲人免费短视频| 四虎永久国产精品| 久久国产精品一区二区| 无码人妻精品中文字幕| 欧美一区二区三区喷汁尤物| av软件在线观看| 国产欧美日韩综合一区在线观看| 亚洲大片在线| 久久久久久久久免费看无码| 欧美丝袜一区二区| 搞黄视频免费在线观看| 国产日韩欧美成人| 欧美午夜精品| 久久人人爽人人爽人人片| 欧美性猛交xxxx乱大交退制版 | 成人激情综合网站| 97超碰人人干| 国产一区二区三区日韩欧美| 日韩一级特黄| 国产一区二区片| 99国产精品久久久| 国产乱码在线观看| 超在线视频97| 欧美激情15p| 亚洲一级片免费| 一区二区三区欧美日| 国模无码一区二区三区| 国产成人一区二| 亚洲午夜精品一区二区国产| 中文视频在线观看| 在线免费一区三区| 99福利在线| 欧美成人一区二区在线| 精一区二区三区| 国产成人在线免费观看视频| 国产一区二区动漫| av日韩在线播放| 蜜桃免费在线视频| 亚洲一区二区偷拍精品| jizz视频在线观看| 国产精品av一区| 麻豆一区二区三| 国产成人无码一区二区三区在线| 中文字幕亚洲综合久久| 1204国产成人精品视频| 能在线观看的av网站| 一区二区三区中文免费| h视频在线免费| 国外成人在线视频网站| 国内成+人亚洲+欧美+综合在线|