精品欧美一区二区三区在线观看 _久久久久国色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技術棧公眾號

国产精品一级久久久| 91麻豆精品国产自产在线观看一区| 精品乱码一区| 国产偷人爽久久久久久老妇app| 日韩欧美高清| 精品国产免费视频| 国产一二三四在线视频| 久久久久亚洲av片无码| 日本在线成人| 在线亚洲高清视频| 免费看成人片| 99热这里只有精| 久久国产电影| 亚洲精品美女久久久久| 可以看污的网站| 性爽视频在线| 一二三四社区欧美黄| 五月天丁香综合久久国产 | 日本一级理论片在线大全| 国产日韩欧美一区二区三区乱码| 91超碰rencao97精品| 久草视频在线免费| 亚洲精品婷婷| 精品国产99国产精品| 中文字幕永久视频| √天堂8资源中文在线| 综合在线观看色| 欧美极品色图| 人人妻人人爽人人澡人人精品| 欧美一区在线看| 一本色道久久综合狠狠躁篇怎么玩| 欧美亚洲另类色图| 亚洲按摩av| 国产精品电影一区二区| 成人激情春色网| 伊人久久久久久久久久久久| 99视频在线精品国自产拍免费观看| 亚洲成人在线网| 日本亚洲一区二区三区| 91成人精品观看| 欧美日韩视频在线观看一区二区三区 | 久久不见久久见国语| 亚洲精品久久久久久下一站| 性活交片大全免费看| 日本少妇精品亚洲第一区| 7777精品伊人久久久大香线蕉超级流畅 | 视频一区二区三区免费观看| 玖玖综合伊人| 国产亚洲精品久| 欧美日韩在线精品| 久蕉在线视频| 国产欧美一区二区三区在线看蜜臀 | 亚洲综合福利| 日韩精品中午字幕| 亚洲国产欧美日韩在线| 日韩一二三区在线观看| 精品欧美乱码久久久久久| 强伦女教师2:伦理在线观看| 国产手机在线视频| 欧美久久99| 欧美激情欧美激情在线五月| 国产性70yerg老太| 亚洲电影av| 欧美中文字幕在线视频| 国产成人无码专区| 麻豆91精品视频| 成人伊人精品色xxxx视频| 国产欧美日韩综合精品一区二区三区| 黄色资源网久久资源365| 5g国产欧美日韩视频| 亚洲精品国产av| 日本中文在线一区| 成人黄色午夜影院| 草逼视频免费看| 91丝袜高跟美女视频| 日韩欧美99| www.久久ai| 亚洲成人777| 午夜免费一区二区| 欧美另类中文字幕| 欧美亚洲综合在线| 国产精品成人久久电影| 美女高潮视频在线看| 色激情天天射综合网| 久久成年人网站| 97se亚洲| 中文字幕精品久久| 欧美xxxx黑人xyx性爽| 性娇小13――14欧美| 国产精品一二三在线| 日本久久综合网| 激情图区综合网| 久久精品久久精品国产大片| 欧美性天天影视| 2024国产精品| 114国产精品久久免费观看| 亚洲免费成人网| 欧美激情资源网| 男人天堂手机在线视频| 超碰这里只有精品| 精品福利二区三区| 国产精品久久久免费看| 9色精品在线| 91中文在线视频| 国产毛片在线看| 亚洲国产精品一区二区久久| 天堂av在线8| 蜜桃a∨噜噜一区二区三区| 久久不射电影网| 无码视频一区二区三区| 成人av网在线| 亚洲第一综合网站| 国产精品原创视频| 亚洲免费人成在线视频观看| 欧美成人手机视频| 久久国产尿小便嘘嘘| 欧美一区2区三区4区公司二百| 秋霞在线午夜| 亚洲成人777| 色婷婷综合在线观看| 日韩欧美精品综合| 国产成人精品一区二区| 天天综合网在线观看| 亚洲精品菠萝久久久久久久| 五月婷婷之婷婷| 欧美手机在线| 9.1国产丝袜在线观看| 性一交一乱一精一晶| 1024成人网| 午夜激情av在线| 国产成人一区| 日本免费一区二区三区视频观看| 亚洲国产成人在线观看| 亚洲女厕所小便bbb| 日本美女视频一区| 欧美xxav| 性欧美长视频免费观看不卡| 精品久久久久久亚洲综合网站| 综合色中文字幕| 成人亚洲免费视频| 天天做天天爱天天爽综合网| 欧美俄罗斯性视频| 国产免费福利视频| 亚洲精品免费电影| 激情小说欧美色图| 欧美三区不卡| 国产亚洲在线| 日本高清视频精品| 欧洲毛片在线| 欧洲人成人精品| 337人体粉嫩噜噜噜| 婷婷六月综合| 成人黄色av网站| 亚洲第一图区| 亚洲精品99久久久久| 久久国产精品波多野结衣av| 成人免费看的视频| 中文字幕日本最新乱码视频| 蜜桃国内精品久久久久软件9| 欧美一区视频在线| 福利成人在线观看| 8x福利精品第一导航| 91精品国产高清一区二区三蜜臀| 国内外成人在线| 人妻无码一区二区三区四区| 国产一区福利| 久久国产精品久久精品| 国产极品999| 午夜激情一区二区三区| 日韩精品电影一区二区| 久久精品国产网站| 日韩a级黄色片| 亚洲裸色大胆大尺寸艺术写真| 国产高清视频一区三区| 麻豆视频在线免费观看| 亚洲第一中文字幕| 久草视频在线免费| 亚洲精品第1页| 中文字幕一区二区三区人妻| 麻豆成人久久精品二区三区红| 99热这里只有精品免费| 国产剧情一区| 97超碰最新| 欧美日韩免费看片| 欧美xxxx18性欧美| 色鬼7777久久| 欧美一区二区免费观在线| 中文字幕亚洲乱码熟女1区2区| 中文字幕在线不卡一区| 中文乱码人妻一区二区三区视频| 日本不卡视频在线| 久久久久久人妻一区二区三区| 国产成人手机高清在线观看网站| 2022国产精品| 97久久香蕉国产线看观看| 久热爱精品视频线路一| 久久综合九色综合久| 日韩视频免费观看高清完整版在线观看 | 亚洲免费专区| 97免费高清电视剧观看| www.成人在线视频| 97精品一区二区视频在线观看| 欧美激情二区| 亚洲天堂av在线免费| 黑人精品一区二区| 欧美美女一区二区在线观看| 亚洲图片在线视频| 亚洲国产中文字幕在线视频综合| 国产极品视频在线观看| 99国产欧美另类久久久精品| 日本黄色www| 美国欧美日韩国产在线播放| 久久久精品在线视频| 最新成人av网站| 日韩一二区视频| 日韩精品一卡| 欧美一区二区综合| 久久精品论坛| 成人欧美一区二区三区在线观看 | 日韩和一区二区| 国产精品一二二区| 日本久久久久久久久久久久| 国产九九精品| 欧美大片在线播放| 红桃视频国产精品| av片在线免费| 欧美色一级片| 欧美美女黄色网| 永久91嫩草亚洲精品人人| 亚洲精品一区二| 成人婷婷网色偷偷亚洲男人的天堂| 蜜桃视频在线观看成人| 欧美巨大xxxx| 久久久亚洲综合网站| 欧美色图婷婷| 久久久久欧美| 亚洲欧美tv| 日韩欧美三级电影| 国产亚洲一区| 亚洲欧洲久久| 欧美freesextv| 国产精品波多野结衣| 天天天综合网| 激情五月婷婷六月| 日韩网站在线| 日韩免费毛片视频| 日韩激情中文字幕| 日日噜噜夜夜狠狠| 精品一区二区三区免费播放| 不卡中文字幕在线观看| 国产福利电影在线播放| 亚洲天堂福利av| 青花影视在线观看免费高清| 亚洲柠檬福利资源导航| 亚洲精品在线观看av| 91麻豆免费在线观看| 亚洲黄色在线网站| 国产婷婷一区二区| 精品人体无码一区二区三区| 亚洲欧洲精品成人久久奇米网| 91嫩草丨国产丨精品| 一区二区三区小说| 国产无套在线观看| 色婷婷久久久亚洲一区二区三区| 精品成人无码久久久久久| 欧美日韩一区二区三区高清| 国产人妖一区二区| 亚洲国产精品女人久久久| 国产在线色视频| 久久久国产精品x99av| 大菠萝精品导航| 国产精品精品久久久久久| 久久一级大片| 久99久在线| 99久久99热这里只有精品| 99在线免费视频观看| 久久精品系列| 女教师高潮黄又色视频| 91在线云播放| 好吊日在线视频| 欧美日韩另类字幕中文| 亚洲一区中文字幕永久在线| 精品国产一区二区三区久久影院| 青春有你2免费观看完整版在线播放高清| 综合久久五月天| 丁香花高清在线观看完整版| 国产精品久久久91| a看欧美黄色女同性恋| 色噜噜狠狠一区二区三区| 激情91久久| 91 在线视频观看| 91在线云播放| 免费中文字幕在线| 色94色欧美sute亚洲线路一ni| 国产一区二区三区在线观看| 亚洲国产日韩欧美在线动漫| 免费在线看黄色| 欧美亚洲视频在线观看| 日本成人手机在线| 婷婷久久五月天| 99精品国产99久久久久久福利| 奇米影视四色在线| 久久影院午夜片一区| 欧美激情国产精品免费| 成人精品999| 国产欧美日韩综合一区在线播放| 国产男女激情视频| 国产盗摄一区二区三区| 亚洲av成人无码久久精品 | 精品视频在线免费| 粉嫩av一区二区夜夜嗨| 精品国内产的精品视频在线观看| 欧亚av在线| 产国精品偷在线| 欧美激情成人| 欧美日韩在线免费播放| www.欧美日韩国产在线| 欧美成人三级视频| 欧美精品久久久久久久久老牛影院 | а√在线天堂官网| 97神马电影| 欧美一区国产在线| 永久av免费在线观看| 国产精品久久影院| 国产日韩在线免费观看| 亚洲图片制服诱惑| 神马久久午夜| 精品视频高清无人区区二区三区| 欧美精品色网| 国产精品日日摸夜夜爽| 亚洲免费在线视频一区 二区| 91精品国产综合久| 久久久国产91| 精品一区二区三区中文字幕在线| 爱爱爱视频网站| 奇米影视一区二区三区| 少妇精品无码一区二区免费视频| 色综合咪咪久久| 国产小视频免费在线观看| 国产成人av在线播放| 久操国产精品| 一区二区成人网| 国产精品毛片大码女人| 亚洲自拍偷拍另类| 超碰97人人做人人爱少妇| 欧美2区3区4区| 国产a级黄色大片| 成人免费毛片嘿嘿连载视频| 久久不卡免费视频| 亚洲精品亚洲人成人网| 国产又粗又猛又爽又黄视频| 精品国产一区二区三区久久久狼| a一区二区三区亚洲| 蜜臀在线免费观看| 国产91综合网| 日韩欧美一级视频| 国产亚洲视频在线| 欧美在线se| 国产毛片久久久久久国产毛片| 成人va在线观看| 中文字字幕在线中文| 国产一区二区三区丝袜| 日本亚洲欧洲无免费码在线| 最近免费观看高清韩国日本大全| 国产成人精品免费看| www.av麻豆| 中文字幕无线精品亚洲乱码一区 | 动漫精品视频| 99综合视频| 四虎影视一区二区| 日韩免费福利电影在线观看| 黄在线观看免费网站ktv| 茄子视频成人在线观看| 国产揄拍国内精品对白| 日本一级黄色录像| 亚洲夜晚福利在线观看| 粉嫩av国产一区二区三区| 亚洲国产精品一区二区久久 | 青青草免费观看免费视频在线| 国产精品免费视频xxxx| 午夜日韩电影| 亚洲精品乱码久久久久久久久久久久| 欧美性大战久久久久久久蜜臀| av在线免费观看网址| 欧美亚洲另类久久综合| 国产美女视频91| 91丝袜一区二区三区| 久久精品青青大伊人av| 色天下一区二区三区| 中文字幕在线视频精品| 精品成人乱色一区二区| 日本在线观看网站| 国内一区在线| 亚洲二区三区不卡| 欧美午夜性生活| 亚洲一区二区欧美| 在线视频自拍| 久久久久久国产精品mv| 国产资源精品在线观看| 亚洲欧美偷拍一区|