產(chǎn)品分類

      當(dāng)前位置: 首頁 > 傳感測量產(chǎn)品 > 數(shù)據(jù)采集產(chǎn)品 > 運(yùn)動控制卡

      類型分類:
      科普知識
      數(shù)據(jù)分類:
      運(yùn)動控制卡

      EtherCAT運(yùn)動控制卡的總線軸參數(shù)設(shè)置和軸運(yùn)動

      發(fā)布日期:2022-10-09 點(diǎn)擊率:112

      • 關(guān)鍵詞:正運(yùn)動技術(shù),EtherCAT,運(yùn)動控制卡


      • 摘要:今天,正運(yùn)動技術(shù)為大家分享一下《EtherCAT運(yùn)動控制卡的總線軸參數(shù)設(shè)置和軸運(yùn)動》。在正式學(xué)習(xí)之前,我們先了解一下正運(yùn)動技術(shù)的運(yùn)動控制卡ECI2618和ECI2828。這兩款產(chǎn)品分別是6軸,8軸運(yùn)動控制卡。


      image.png


      今天,正運(yùn)動技術(shù)為大家分享一下《EtherCAT運(yùn)動控制卡的總線軸參數(shù)設(shè)置和軸運(yùn)動》。在正式學(xué)習(xí)之前,我們先了解一下正運(yùn)動技術(shù)的運(yùn)動控制卡ECI2618和ECI2828。這兩款產(chǎn)品分別是6軸,8軸運(yùn)動控制卡。


      image.png


      ECI2618支持6軸脈沖輸入與編碼器反饋,板載24點(diǎn)輸入,16點(diǎn)輸出,2AD,2DA,支持手輪接口,其中特定輸出口支持高速PWM控制。


      image.png


      ECI2828支持8軸總線型輸入與編碼器反饋,板載24點(diǎn)輸入,16點(diǎn)輸出,2路AD,2路DA,支持手輪接口,其中特定輸出口支持高速PWM控制。 


      ECI2618,ECI2828均使用同一套API函數(shù),均支持C、C++、C#、LabVIEW、Python、Delphi等開發(fā)語言,支持VC6.0、VB6.0、Qt、.Net等平臺,支持Windows、Linux、WinCE、iMac等操作系統(tǒng)。


      接下來,進(jìn)入正題。本節(jié)我們主要給大家分享一下EtherCAT運(yùn)動控制卡之ECI2820如何使用C#進(jìn)行EtherCAT總線軸運(yùn)動和軸參數(shù)設(shè)置。


      一ECI2828運(yùn)動控制卡硬件介紹


      ECI2828系列運(yùn)動控制卡支持多達(dá) 16 軸直線插補(bǔ)、任意圓弧插補(bǔ)、空間圓弧、螺旋插補(bǔ)、電子凸輪、電子齒輪、同步跟隨、虛擬軸、機(jī)械手指令等;采用優(yōu)化的網(wǎng)絡(luò)通訊協(xié)議可以實(shí)現(xiàn)實(shí)時(shí)的運(yùn)動控制。


      ECI2828系列運(yùn)動運(yùn)動控制卡支持以太網(wǎng),232 通訊接口和電腦相連,接收電腦的指令運(yùn)行,可以通過EtherCAT總線和CAN總線去連接各個(gè)擴(kuò)展模塊,從而擴(kuò)展輸入輸出點(diǎn)數(shù)或運(yùn)動軸。


      ECI2828系列運(yùn)動控制卡的應(yīng)用程序可以使用 VC,VB,VS,C++,C#等軟件來開發(fā),程序運(yùn)行時(shí)需要動態(tài)庫 zmotion.dll。調(diào)試時(shí)可以把ZDevelop軟件同時(shí)連接到控制器,從而方便調(diào)試、方便觀察。


      image.png


      二C#語言進(jìn)行運(yùn)動控制開發(fā)


      1.新建WinForm項(xiàng)目并添加函數(shù)庫


      (1)在VS2015菜單“文件”→“新建”→ “項(xiàng)目”,啟動創(chuàng)建項(xiàng)目向?qū)А?/p>


      image.png


      (2)選擇開發(fā)語言為“Visual C#”和.NET framework 4以及Windows 窗體應(yīng)用程序。


      image.png


      (3)找到廠家提供的光盤資料里面的C#函數(shù)庫,路徑如下(64位庫為例):


      A、進(jìn)入廠商提供的光盤資料找到“8.PC函數(shù)”文件夾,并點(diǎn)擊進(jìn)入。


      image.png


      B、選擇“函數(shù)庫2.1”文件夾。


      C、選擇“Windows平臺”文件夾。


      D、根據(jù)需要選擇對應(yīng)的函數(shù)庫這里選擇64位庫。


      E、解壓C#的壓縮包,里面有C#對應(yīng)的函數(shù)庫。


      image.png


      F、函數(shù)庫具體路徑如下。


      image.png


      (4)將廠商提供的C#的庫文件以及相關(guān)文件復(fù)制到新建的項(xiàng)目中。


      A、將zmcaux.cs文件復(fù)制到新建的項(xiàng)目里面中。


      image.png


      B、將zaux.dll和zmotion.dll文件放入bindebug文件夾中。


      image.png


      (5)用vs打開新建的項(xiàng)目文件,在右邊的解決方案資源管理器中點(diǎn)擊顯示所有,然后鼠標(biāo)右鍵點(diǎn)擊zmcaux.cs文件,點(diǎn)擊包括在項(xiàng)目中。 


      image.png


      (6)雙擊Form1.cs里面的Form1,出現(xiàn)代碼編輯界面,在文件開頭寫入 using cszmcaux,并聲明控制器句柄g_handle。


      image.png


      至此項(xiàng)目新建完成,可進(jìn)行C#項(xiàng)目開發(fā)。


      2.PC函數(shù)介紹


      A、PC函數(shù)手冊也在光盤資料里面,具體路徑如下:“光盤資料8.PC函數(shù)函數(shù)庫2.1Motion函數(shù)庫編程手冊 V2.1.pdf”。


      image.png


      B、PC編程,一般如果網(wǎng)口對控制器和工控機(jī)進(jìn)行鏈接。網(wǎng)口鏈接函數(shù)接口是ZAux_OpenEth();如果鏈接成功,該接口會返回一個(gè)鏈接句柄。通過操作這個(gè)鏈接句柄可以實(shí)現(xiàn)對控制器的控制。


      ZAux_OpenEth()接口說明:


      image.png


      項(xiàng)目應(yīng)用截圖:


      image.png


      C、我們會提供EtherCAT總線初始化的basic代碼,可以通過指令ZAux_BasDown()將總線初始化的basic代碼下載到控制器中,從而實(shí)現(xiàn)EtherCAT總線軸的初始化。 


      image.png


      D、使用PC函數(shù)庫里面的相關(guān)的函數(shù)接口,通過操作鏈接句柄“g_handle”,對控制器進(jìn)行軸參數(shù)的設(shè)置和獲取。


      軸參數(shù)設(shè)置相關(guān)函數(shù)接口:


      image.png


      軸運(yùn)動速度設(shè)置接口說明: 


      image.png


      E、使用ZAux_BusCmd_SDORead()和ZAux_BusCmd_SDOWrite()接口,實(shí)現(xiàn)對總線驅(qū)動器SDO參數(shù)的讀寫。 


      image.png

       image.png


      3、C#開發(fā)實(shí)現(xiàn)EtherCAT總線軸運(yùn)動


      (1)EtherCAT總線軸運(yùn)動控制例程界面如下。


      image.png


      (2)例程簡易流程圖。


      image.png


      (3)EtherCAT總線初始化Basic程序介紹,先將該程序下載到控制器中,PC再調(diào)用下面的總線初始化函數(shù),即可完成總線初始化。


      '********************ECAT總線初始化****************

      global ConST BUS_TYPE = 0        '總線類型。

      global ConST MAX_AXISNUM = 16      '最大軸數(shù)

      global ConST Bus_Slot  = 0        '槽位號0

      global ConST Bus_AxisStart   = 0    '總線軸起始軸號


      global Bus_InitStatus      '總線初始化完成狀態(tài)

      Bus_InitStatus = -1

      global  Bus_TotalAxisnum      '檢查掃描的總軸數(shù)

      delay(3000)            '延時(shí)3S等待驅(qū)動器上電

      Ecat_Init()

      end


      global sub Ecat_Init()

        '初始化還原軸類型

        for i=0 to MAX_AXISNUM - 1              

          AXIS_ENABLE(i) = 0

          ATYPE(i)=0  

        next

        '掃描總線  

        Bus_InitStatus = -1

        Bus_TotalAxisnum = 0  

        SLOT_STOP(Bus_Slot)

        DELAY(200)

        SLOT_SCAN(Bus_Slot)

        '如果掃描成功                      

        if return then 

          

          ?"總線掃描成功","連接設(shè)備數(shù):"NODE_COUNT(Bus_Slot)

          ?

          ?"開始映射軸號"

          '遍歷總線下所有從站節(jié)點(diǎn)

          for i=0 to NODE_COUNT(Bus_Slot)-1            

            '判斷當(dāng)前節(jié)點(diǎn)是否有電機(jī)

            if NODE_AXIS_COUNT(Bus_Slot,i) <>0 then      

              for j=0 to NODE_AXIS_COUNT(Bus_Slot,i)-1

                '映射軸號

                AXIS_ADDRESS(Bus_AxisStart+i)=Bus_TotalAxisnum+1

                '設(shè)置控制模式 65-位置 66-速度 67-轉(zhuǎn)矩       

                ATYPE(Bus_AxisStart+i)=65

                '設(shè)置PROFILE功能                

                DRIVE_PROFILE(Bus_AxisStart+i)= 4

                '每軸單獨(dú)分組            

                DISABLE_GROUP(Bus_AxisStart+i)              

                '映射驅(qū)動器上的IO起始地址

                DRIVE_IO(Bus_AxisStart+i) = 128 + (Bus_AxisStart+i)*16  

                '設(shè)置限位信號

                REV_IN(Bus_AxisStart+i) = 128 + (Bus_AxisStart+i)*16 

                FWD_IN(Bus_AxisStart+i) = 129 + (Bus_AxisStart+i)*16

                DATUM_IN(Bus_AxisStart+i) = 130 + (Bus_AxisStart+i)*16

                INVERT_IN(128 + (Bus_AxisStart+i)*16,off)

                INVERT_IN(129 + (Bus_AxisStart+i)*16,off)

                INVERT_IN(130 + (Bus_AxisStart+i)*16,off)

                '總軸數(shù)+1

                Bus_TotalAxisnum=Bus_TotalAxisnum+1              

              next

            endif

            

          next

          

          ?"軸號映射完成","連接總軸數(shù):"Bus_TotalAxisnum

          WA 2000

          '啟動總線

          SLOT_START(Bus_Slot)            

          if return then 

            ?"總線開啟成功"

            

            ?"開始清除驅(qū)動器錯(cuò)誤(根據(jù)驅(qū)動器數(shù)據(jù)字典設(shè)置)"

            for i= Bus_AxisStart to Bus_AxisStart + Bus_TotalAxisnum - 1 

              

              DRIVE_CONTROLWORd(i)=128          '根據(jù)驅(qū)動器數(shù)據(jù)字典

              wa 100

              DRIVE_CONTROLWORd(i)=6

              wa 100

              DRIVE_CONTROLWORd(i)=15

              wa 100

            next

            

            ?"驅(qū)動器錯(cuò)誤清除完成"

            wa 100


            ?"清除控制器錯(cuò)誤"

            DATUM(0)

            DRIVE_CLEAR(0)

            ?"控制器錯(cuò)誤清除完成"

            wa 100

                  

            ?"軸使能準(zhǔn)備"

            for i= Bus_AxisStart to Bus_AxisStart + Bus_TotalAxisnum - 1

              base(i)

              AXIS_ENABLE=1

            next

            '使能總開關(guān)

            WDOG=1                      

            Bus_InitStatus  = 1

            ?"軸使能完成"

          else

            ?"總線開啟失敗"

            Bus_InitStatus = 0

          endif

          

        else

          ?"總線掃描失敗"

          Bus_InitStatus = 0

        endif

      end sub



      (4)在連接按鈕的事件處理函數(shù)中調(diào)用接口ZAux_OpenEth(),實(shí)現(xiàn)與控制器的連接。


      //網(wǎng)口連接控制器

      private void C_Open_Eth_Click(object sender, EventArgs e)

      {

            zmcaux.ZAux_OpenEth(C_Ip_Address.Text, out g_handle);

            if (g_handle != (IntPtr)0)

            {

                 this.Text = "已連接";

                 timer1.Enabled = true;

            }

      }



      (5)通過定時(shí)器更新控制器軸參數(shù)和總線軸初始化情況。


      //定時(shí)器

      private void timer1_Tick(object sender, EventArgs e)

      {

          int ret = 0;

          float[] f_AxisPara = new float[10];

          int[] i_AxisPara = new int[10];

          if (g_handle != (IntPtr)0)

          {

              //獲取軸參數(shù),軸狀態(tài)

              m_axisnum = Convert.ToInt32(C_Move_Axis.Text);

              ret += zmcaux.ZAux_Direct_GetAxisEnable(g_handle, m_axisnum, ref i_AxisPara[0]);

              ret += zmcaux.ZAux_Direct_GetMpos(g_handle, m_axisnum, ref f_AxisPara[0]);

              ret += zmcaux.ZAux_Direct_GetDpos(g_handle, m_axisnum, ref f_AxisPara[1]);

              ret += zmcaux.ZAux_Direct_GetAxisStatus(g_handle, m_axisnum, ref i_AxisPara[1]);

              ret += zmcaux.ZAux_Direct_GetIfIdle(g_handle, m_axisnum, ref i_AxisPara[2]);

              if (ret == 0)

              {    

                  C_AxisEnable.Text = (i_AxisPara[0] == 0) ? "off" : "on";

                  C_AxisMpos.Text = f_AxisPara[0].ToString();

                  C_AxisDpos.Text = f_AxisPara[1].ToString();

                  C_AxisStatus.Text = i_AxisPara[1].ToString();

                  C_AxisIdle.Text = i_AxisPara[2].ToString();

              }

              //如果已經(jīng)加載文件并且正在初始化---讀取總線初始化狀態(tài)

              if (g_basflag && g_InitStatus == -1)

              {

                    float tempstatus = -1;

                    int m_BusNodeNum = 0;

                    float m_BusAxisNum = 0;

                    ret += zmcaux.ZAux_Direct_GetUserVar(g_handle, "BUS_TYPE", ref Bus_type);            //讀取BAS文件中的變量判斷總線類型

                    ret += zmcaux.ZAux_Direct_GetUserVar(g_handle, "Bus_InitStatus", ref tempstatus);        //讀取BAS文件中的變量判斷總線初始化完成狀態(tài)

                    ret += zmcaux.ZAux_BusCmd_GetNodeNum(g_handle, 0, ref m_BusNodeNum);              //讀取槽位0上節(jié)點(diǎn)個(gè)數(shù)。

                    ret += zmcaux.ZAux_Direct_GetUserVar(g_handle, "Bus_TotalAxisnum", ref m_BusAxisNum);      //讀取BAS文件中的變量判斷掃描的總軸數(shù)

                    g_InitStatus = (int)tempstatus;

                    if (ret == 0 && g_InitStatus != -1)

                   {

                        C_Bus_Status.Text = (g_InitStatus == 1) ? "初始化成功" : "初始化失敗";

                        C_NodeNum.Text = m_BusNodeNum.ToString();

                        C_AxisNum.Text = m_BusAxisNum.ToString();

                   }

               }

           }

      }



      (6)通過BAS文件下載按鈕的事件處理函數(shù),調(diào)用BAS文件下載接口將廠商提供的EtherCAT總線初始化的Basic代碼下載到控制器中。


      //下載總線初始化的BAS文件到控制器

      private void C_Download_Click(object sender, EventArgs e)

      {

            if (g_handle == (IntPtr)0)

            {

                  MessageBox.Show("未鏈接到控制器!", "提示");

            }

            else

            {

                  int ret = 0;

                  string strFilePath;

                  OpenFileDialog openFileDialog1 = new OpenFileDialog();

                  openFileDialog1.InitialDirectory = "";

                  openFileDialog1.Filter = "配置文件(*.bas)|*.bas";

                  openFileDialog1.RestoreDirectory = true;

                  openFileDialog1.FilterIndex = 1;

                  //打開配置文件

                  if (openFileDialog1.ShowDialog() == DialogResult.OK)            

                  {

                      strFilePath = openFileDialog1.FileName;

                      C_BasFile.Text = strFilePath;

                     //下載到ROM

                      ret = zmcaux.ZAux_BasDown(g_handle, strFilePath, 1);               

                      if (ret != 0)

                      {

                           MessageBox.Show("文件下載失敗!", "提示");

                      }

                      else

                      {

                            MessageBox.Show("文件下載成功", "提示");

                      }    

                   }

            }

      }


      (7)通過總線初始化按鈕的事件處理函數(shù)調(diào)用運(yùn)行basic程序里的總線初始化函數(shù)進(jìn)行總線初始化。


      //總線初始化,下載ROM時(shí)程序會自動初始化一次

      private void C_BusInit_Click(object sender, EventArgs e)

      {

          if (g_handle == (IntPtr)0)

          {

              MessageBox.Show("未鏈接到控制器!", "提示");

          }

          else

          {

              int ret;

              if (g_basflag && (g_InitStatus != -1))

              {

                  g_InitStatus = -1;

                  StringBuilder buffer = new StringBuilder(10240);

                  C_Bus_Status.Text = "初始化未完成";

                  //調(diào)用basic程序中的總線初始化函數(shù)Ecat_Init()

                  ret = zmcaux.ZAux_Execute(g_handle, "RUNTASK 1,Ecat_Init", buffer, 0);

              }  

           }

      }



      (8)通過設(shè)置按鈕的事件處理函數(shù)來設(shè)置軸參數(shù)。


      //軸參數(shù)設(shè)置按鈕

      private void AxisParaSet_Click(object sender, EventArgs e)

      {

          int ret = 0;

          ret = zmcaux.ZAux_Direct_SetUnits(g_handle, m_axisnum, Convert.ToSingle(C_AxisUnits.Text));

          ret = zmcaux.ZAux_Direct_SetSpeed(g_handle, m_axisnum, Convert.ToSingle(C_AxisSpeed.Text));

          ret = zmcaux.ZAux_Direct_SetAccel(g_handle, m_axisnum, Convert.ToSingle(C_AxisAcc.Text));

      }




      (9)通過運(yùn)動按鈕的事件處理函數(shù)來控制軸運(yùn)動。


      //持續(xù)正轉(zhuǎn)運(yùn)動

      private void C_Button_Fwd_Click(object sender, EventArgs e)

      {

          int ret = 0;

          //更新軸參數(shù)

          ret = zmcaux.ZAux_Direct_SetUnits(g_handle, m_axisnum, Convert.ToSingle(C_AxisUnits.Text));

          ret = zmcaux.ZAux_Direct_SetSpeed(g_handle, m_axisnum, Convert.ToSingle(C_AxisSpeed.Text));

          ret = zmcaux.ZAux_Direct_SetAccel(g_handle, m_axisnum, Convert.ToSingle(C_AxisAcc.Text));

          //持續(xù)正方向運(yùn)動

          ret = zmcaux.ZAux_Direct_Single_Vmove(g_handle, m_axisnum, 1);

      }

      //反轉(zhuǎn)

      private void C_Button_Rev_Click(object sender, EventArgs e)

      {

          //更新軸參數(shù)

          int ret = 0;

          ret = zmcaux.ZAux_Direct_SetUnits(g_handle, m_axisnum, Convert.ToSingle(C_AxisUnits.Text));

          ret = zmcaux.ZAux_Direct_SetSpeed(g_handle, m_axisnum, Convert.ToSingle(C_AxisSpeed.Text));

          ret = zmcaux.ZAux_Direct_SetAccel(g_handle, m_axisnum, Convert.ToSingle(C_AxisAcc.Text));

          //持續(xù)負(fù)方向運(yùn)動

          ret = zmcaux.ZAux_Direct_Single_Vmove(g_handle, m_axisnum,-1);

      }


      (10)通過SDO讀寫按鈕的事件處理函數(shù)來讀寫驅(qū)動器的SDO參數(shù)。


      private void C_Sdo_Read_Click(object sender, EventArgs e)       //ETHERCAT讀取

      {

          if (g_handle == (IntPtr)0)

          {

              MessageBox.Show("未鏈接到控制器!", "提示");

              return;

          }

          int ret = 0;

          string str;

          uint m_sdo_node2 = Convert.ToUInt32(C_SdoNode1.Text);

          str = Convert.ToString(C_SdoReg1.Text);

          uint m_sdo_index2 = uint.Parse(str, System.Globalization.NumberStyles.AllowHexSpecifier);

          uint m_sdo_sub2 = Convert.ToUInt32(C_SdoIsub1.Text);

          uint m_sdo_type2 = Convert.ToUInt32(C_SdoType1.SelectedIndex.ToString()) + 1;

          int m_sdo_data2 = 0;

          if (Bus_type == 0)

          {

              ret = zmcaux.ZAux_BusCmd_SDORead(g_handle, 0, m_sdo_node2, m_sdo_index2, m_sdo_sub2, m_sdo_type2, ref m_sdo_data2);

              if (ret != 0)

              {

                  MessageBox.Show("讀取失敗");

                  return;

              }

              C_Sdodata1.Text = m_sdo_data2.ToString();

          }

          else

          {

              MessageBox.Show("非ETHERCAT模塊");

              return;

          }


      }


      private void C_Sdo_Write_Click(object sender, EventArgs e)      //ETHERCAT寫

      {

          if (g_handle == (IntPtr)0)

          {

              MessageBox.Show("未鏈接到控制器!", "提示");

              return;

          }

          int ret = 0;

          string str;

          uint m_sdo_node1 = Convert.ToUInt32(C_SdoNode0.Text);

          str = Convert.ToString(C_SdoReg0.Text);

          uint m_sdo_index1 = uint.Parse(str, System.Globalization.NumberStyles.AllowHexSpecifier);

          uint m_sdo_sub1 = Convert.ToUInt32(C_SdoIsub0.Text);

          uint m_sdo_type1 = Convert.ToUInt32(C_SdoType0.SelectedIndex.ToString()) + 1;

          int m_sdo_data1 = Convert.ToInt32(C_Sdodata0.Text);

          if (Bus_type == 0)

          {

              ret = zmcaux.ZAux_BusCmd_SDOWrite(g_handle, 0, m_sdo_node1, m_sdo_index1, m_sdo_sub1, m_sdo_type1, m_sdo_data1);

              if (ret != 0)

              {

                  MessageBox.Show("寫入失敗");

                  return;

              }

          }

          else

          {

              MessageBox.Show("非ETHERCAT模塊");

              return;

          }

      }



      4.調(diào)試與監(jiān)控


      編譯運(yùn)行例程,同時(shí)連接ZDevelop軟件進(jìn)行調(diào)試,對運(yùn)動控制的軸參數(shù)和運(yùn)動情況進(jìn)行監(jiān)控。


      (1)連接ZDevelop軟件,對軸參數(shù)和軸狀態(tài)進(jìn)行監(jiān)控。


      image.png

      image.png


      (2)總線軸運(yùn)動與軸參數(shù)設(shè)置演示


      image.png


      本次,正運(yùn)動技術(shù)EtherCAT運(yùn)動控制卡的總線軸參數(shù)設(shè)置和軸運(yùn)動,就分享到這里。


      更多精彩內(nèi)容請關(guān)注“正運(yùn)動小助手”公眾號,需要相關(guān)開發(fā)環(huán)境與例程代碼,請咨詢正運(yùn)動技術(shù)銷售工程師:400-089-8936。


      本文由正運(yùn)動技術(shù)原創(chuàng),歡迎大家轉(zhuǎn)載,共同學(xué)習(xí),一起提高中國智能制造水平。文章版權(quán)歸正運(yùn)動技術(shù)所有,如有轉(zhuǎn)載請注明文章來源。


      下一篇: PLC、DCS、FCS三大控

      上一篇: VPLC系列機(jī)器視覺運(yùn)動

      推薦產(chǎn)品

      更多
      主站蜘蛛池模板: 视频一区二区中文字幕| 立川理惠在线播放一区| 亚洲高清日韩精品第一区| 国产一区二区三区韩国女主播| 欧美成人aaa片一区国产精品| 国产成人精品无人区一区| 国产未成女一区二区三区| 日韩精品无码一区二区三区 | 亚洲日本中文字幕一区二区三区| 亚洲欧洲精品一区二区三区| 美女福利视频一区| 狠狠色婷婷久久一区二区| 精品无码人妻一区二区三区不卡| 日韩精品一区二区三区老鸭窝| 狠狠色成人一区二区三区| 波霸影院一区二区| 波多野结衣一区在线| 国产SUV精品一区二区四| 亚洲AV无码一区二区三区网址| 免费播放一区二区三区| 亚洲蜜芽在线精品一区| 日本一区二区三区在线观看 | 久久AAAA片一区二区| 一区三区三区不卡| AV无码精品一区二区三区宅噜噜 | 亚洲综合一区二区精品导航| 国产精品亚洲不卡一区二区三区 | 国产内射999视频一区| 日本精品高清一区二区| 久久免费精品一区二区| 美女福利视频一区| 精品国产一区二区三区无码| 精品福利视频一区二区三区| 激情内射亚洲一区二区三区爱妻| 色妞色视频一区二区三区四区| 乱色精品无码一区二区国产盗| 国产精品一区二区久久精品| 伊人色综合视频一区二区三区| 国精产品一区一区三区MBA下载| 日本一区二区三区日本免费 | 青娱乐国产官网极品一区|