久久亚洲成a人片熟女精品色一区二区三区|国产精品视频第一精品视频|av天堂热无码手机版|亚洲?v无码久久无遮挡|国产精品偷伦视频免费观看国产|麻豆国产自产精品丰满熟妇|av无码av不卡一区二区|久久亚洲精品中文字

ARTICLE DETAIL

資訊詳情

深耕商務(wù)建站與企業(yè)官網(wǎng)運(yùn)營的一線實(shí)戰(zhàn)洞察。

QT集成SOEM實(shí)現(xiàn)EtherCAT主站:從編譯到運(yùn)動控制實(shí)戰(zhàn)

QT集成SOEM實(shí)現(xiàn)EtherCAT主站:從編譯到運(yùn)動控制實(shí)戰(zhàn) 1. 為什么是QT加SOEM一個(gè)老牌主站庫的二次生命力做嵌入式上位機(jī)開發(fā)這些年我踩過不少協(xié)議棧的坑最后在EtherCAT主站這個(gè)方向上SOEMSimple Open EtherCAT Master是我目前最推薦用來搭配QT做上位機(jī)的一套組合。原因很簡單SOEM是開源庫代碼量適中移植性極強(qiáng)而且它不依賴Linux內(nèi)核補(bǔ)丁——這意味著你可以輕松地在Windows、Linux、甚至RTOS上跑起來而QT恰好又是跨平臺界面開發(fā)的首選兩者配合起來幾乎是無縫銜接。先說一個(gè)很多人容易混淆的點(diǎn)EtherCAT主站協(xié)議棧和從站協(xié)議棧完全是兩碼事。從站一般由從站控制器ESC硬件來完成比如LAN9252、AX58100這類芯片芯片出廠就固化了EtherCAT從站協(xié)議的處理邏輯你不用去碰協(xié)議棧的底層。而主站這邊就不一樣了主站的任務(wù)是生成報(bào)文、管理從站狀態(tài)機(jī)、處理分布式時(shí)鐘、維護(hù)過程數(shù)據(jù)映射這些邏輯全部要跑在CPU上所以主站的“協(xié)議棧”好壞直接決定了整個(gè)運(yùn)動控制系統(tǒng)的實(shí)時(shí)性和穩(wěn)定性。SOEM最初是由德國的一家自動化公司貢獻(xiàn)給開源社區(qū)的后來被納入了IgH的生態(tài)體系??赡苡腥藭柤热籌gHEtherLab那么有名為什么不去用IgH我的實(shí)測體會是IgH功能雖然全但它是基于Linux內(nèi)核模塊實(shí)現(xiàn)的驅(qū)動模型復(fù)雜編譯和加載都要在內(nèi)核態(tài)完成而且每次內(nèi)核升級都要重新編譯這對很多做產(chǎn)品的人來說是件很頭疼的事情。SOEM則完全是用戶態(tài)的庫API簡潔編譯出來就是一個(gè)靜態(tài)庫或者動態(tài)庫QT工程里直接引用就行開發(fā)效率高得多。還有一點(diǎn)很關(guān)鍵SOEM對嵌入式平臺的適配相當(dāng)好。我試過STM32MP1、i.MX8M Plus、瑞薩RZ/G2L這些平臺SOEM都能很好地跑起來。對于需要做HMI人機(jī)界面的項(xiàng)目比如點(diǎn)膠機(jī)、貼片機(jī)、機(jī)器人控制柜QT畫界面SOEM跑實(shí)時(shí)通信這套架構(gòu)在生產(chǎn)線上已經(jīng)經(jīng)過了大量驗(yàn)證。這篇文章我就從頭到尾梳理一遍從庫的編譯到QT工程的集成再到實(shí)際應(yīng)用中的關(guān)鍵細(xì)節(jié)和踩坑記錄幫助大家少走彎路。2. SOEM主站協(xié)議庫的架構(gòu)與核心機(jī)制2.1 主站協(xié)議棧的分層思想理解SOEM之前先得理解EtherCAT主站協(xié)議棧的層次劃分。EtherCAT的通信模型其實(shí)很簡潔主站發(fā)送一個(gè)以太網(wǎng)幀幀里面串聯(lián)了所有從站的數(shù)據(jù)每個(gè)從站從幀中提取自己的輸出數(shù)據(jù)同時(shí)把輸入數(shù)據(jù)插入到幀的相應(yīng)位置然后幀繼續(xù)傳給下一個(gè)從站。整個(gè)過程是“飛讀飛寫”也就是所謂的過程數(shù)據(jù)Process Data交換。SOEM的核心代碼主要分為這幾個(gè)層次底層套接字層負(fù)責(zé)原始以太網(wǎng)幀的收發(fā)在Linux下走的是AF_PACKET協(xié)議族在Windows下走的是WinPcap/Npcap庫這一層是平臺相關(guān)的。鏈路層抽象SOEM通過ecx_setup系列函數(shù)來初始化網(wǎng)卡和從站掃描真正把以太網(wǎng)幀封裝成EtherCAT報(bào)文。應(yīng)用層接口這一層是我們最常碰到的包括狀態(tài)機(jī)管理郵箱通信、狀態(tài)轉(zhuǎn)換、過程數(shù)據(jù)映射、分布式時(shí)鐘等。在SOEM中有一個(gè)全局的結(jié)構(gòu)體ecx_context它把整個(gè)主站運(yùn)行狀態(tài)都封裝在里面。對于多線程應(yīng)用SOEM允許你創(chuàng)建多個(gè)ecx_context實(shí)例從而實(shí)現(xiàn)多主站并行——比如一個(gè)主站控制關(guān)節(jié)伺服另一個(gè)主站控制IO模塊這在復(fù)雜機(jī)器人系統(tǒng)里非常實(shí)用。2.2 SOEM與IGH的定位差異很多人一上來就會問SOEM和IGH到底選哪個(gè)我個(gè)人的結(jié)論是如果追求絕對最高的實(shí)時(shí)性并且團(tuán)隊(duì)有Linux內(nèi)核開發(fā)能力項(xiàng)目周期長那IGH確實(shí)可以做得很極致。如果追求快速落地、跨平臺、嵌入式友好尤其是要搭配QT做上位機(jī)/觸控屏那么SOEM絕對是性價(jià)比最高的選擇。IGH把主站做成內(nèi)核模塊實(shí)時(shí)性確實(shí)是用戶態(tài)方案比不了的但付出的代價(jià)是調(diào)試?yán)щy、移植麻煩、GUI集成費(fèi)勁。SOEM走的是用戶態(tài)雖然實(shí)時(shí)性上限略低但通過配合PREEMPT_RT補(bǔ)丁或者綁定CPU核心CPU Affinity在百微秒級別的周期控制中完全夠用。對于絕大多數(shù)使用EtherCAT的場景——伺服周期1ms、4ms、甚至8ms都常見——SOEM的性能毫無壓力。2.3 狀態(tài)機(jī)與通信流程EtherCAT通信的核心是狀態(tài)機(jī)從站設(shè)備在上電之后要依次經(jīng)過Init、Pre-Operational、Safe-Operational、Operational四個(gè)狀態(tài)主站負(fù)責(zé)驅(qū)動這些狀態(tài)轉(zhuǎn)換。SOEM的API封裝了這些狀態(tài)轉(zhuǎn)換ec_statechange檢查狀態(tài)變化ec_writestate讓從站切換到目標(biāo)狀態(tài)ec_readstate讀取所有從站的當(dāng)前狀態(tài)每一個(gè)狀態(tài)都有各自允許的通信服務(wù)Init只能進(jìn)行寄存器讀寫用來獲取從站信息。Pre-Op郵箱通信開啟可以配置PDO映射、加載Coe對象字典。Safe-Op過程數(shù)據(jù)開始刷新但此時(shí)從站不輸出只處理輸入。Op完全運(yùn)行狀態(tài)輸出有效伺服使能。我在調(diào)試時(shí)習(xí)慣寫一個(gè)狀態(tài)機(jī)等待函數(shù)在切換狀態(tài)之后輪詢所有從站是否都到了預(yù)期狀態(tài)如果超時(shí)就把錯(cuò)誤寄存器讀出來這樣能快速定位從站配置的問題。3. 從零開始編譯SOEM庫3.1 源碼準(zhǔn)備與CMake構(gòu)建SOEM的源碼托管在GitHub上倉庫地址是OpenEtherCATsociety/SOEM。建議不要直接下載master分支的代碼而是選擇一個(gè)穩(wěn)定的release標(biāo)簽版本目前我常用的是1.4.0版本這個(gè)版本在ARM平臺和x86平臺上的測試都比較充分。源碼下載回來之后解壓到本地目錄SOEM本身采用CMake構(gòu)建系統(tǒng)這也是它能輕松集成到QT工程的前提之一。在Linux平臺下構(gòu)建過程很簡單mkdir build cd build cmake .. make sudo make install但這里有幾個(gè)細(xì)節(jié)需要注意。默認(rèn)的CMake配置會生成動態(tài)庫和示例程序如果你想得到一個(gè)精簡的靜態(tài)庫用于嵌入式平臺可以在cmake時(shí)加上參數(shù)cmake -DBUILD_SHARED_LIBSOFF -DSOEM_BUILD_TESTSOFF -DSOEM_BUILD_EXAMPLESOFF ..這樣得到的就是一個(gè)純凈的libsoem.a靜態(tài)庫體積很小適合直接丟到嵌入式ARM的交叉編譯工具鏈里面去鏈接。SOEM支持兩種構(gòu)建方式一種是在主機(jī)上編譯然后通過交叉編譯工具鏈重新構(gòu)建另一種是直接把SOEM源碼加入QT工程一并編譯。對于產(chǎn)品化項(xiàng)目我更推薦后者理由后面細(xì)說。3.2 Windows平臺上的編譯特殊性Windows平臺下編譯SOEM會比Linux多一些步驟。SOEM的底層套接字在Windows上依賴WinPcap或Npcap的SDK原因在于EtherCAT主站需要自己構(gòu)造以太網(wǎng)幀的MAC地址和EtherType0x88A4標(biāo)準(zhǔn)的Windows Socket API是干不了這件事的必須借助Npcap的底層抓包接口。你需要先安裝Npcap并勾選“安裝SDK”的選項(xiàng)然后在CMake配置時(shí)指定Npcap SDK的路徑。如果直接用QT的MinGW工具鏈要特別留意Npcap SDK和MinGW的兼容性。實(shí)測下來MSVC2019配合Npcap是最穩(wěn)定的組合MinGW環(huán)境下偶爾會出現(xiàn)頭文件找不到的情況解決辦法是手動把Npcap的Include目錄和Lib目錄加進(jìn)工程文件。3.3 引入QT工程的兩種姿勢把SOEM用到QT工程中主要有兩種方式。第一種是把SOEM編譯成靜態(tài)庫然后在QT的.pro文件里通過LIBS 來引用。這種方式的優(yōu)點(diǎn)是工程結(jié)構(gòu)清晰QT只負(fù)責(zé)界面和業(yè)務(wù)邏輯SOEM作為獨(dú)立的庫存在缺點(diǎn)是當(dāng)你想修改SOEM源碼時(shí)需要單獨(dú)編譯庫。第二種方式是把SOEM的全部源文件soem/目錄下直接加入到QT工程中參與整體編譯。這種方式對源碼的調(diào)試非常方便打斷點(diǎn)直接就能進(jìn)入SOEM的內(nèi)部函數(shù)對于想深入學(xué)習(xí)EtherCAT主站協(xié)議的人來說特別有價(jià)值。我自己的項(xiàng)目就采用的第二種方式在.pro文件里添加INCLUDEPATH $$PWD/soem/soem SOURCES \ $$PWD/soem/soem/ethercat.c \ $$PWD/soem/soem/ethercatcoe.c \ $$PWD/soem/soem/ethercatdc.c \ $$PWD/soem/soem/ethercatfoe.c \ $$PWD/soem/soem/ethercatmain.c \ $$PWD/soem/soem/ethercatprint.c \ $$PWD/soem/soem/ethercatsoe.c \ $$PWD/soem/soem/osal/osal.c \ $$PWD/soem/soem/osal/osal_win32.c注意文件列表要根據(jù)平臺調(diào)整Windows下需要osal_win32.cLinux下則需要osal_linux.c。另外Npcap的依賴也要加進(jìn)去win32 { INCLUDEPATH C:/Program Files/Npcap LIBS -LC:/Program Files/Npcap/Lib -lwpcap -lPacket }直接參與編譯還有一個(gè)好處是可以用上QT的構(gòu)建套件Kit比如你在Qt Creator里配置了交叉編譯套件那么SOEM也會跟著交叉編譯到目標(biāo)平臺完全不用手動維護(hù)交叉編譯鏈的環(huán)境變量。4. 核心API應(yīng)用實(shí)戰(zhàn)主站掃描、配置與過程數(shù)據(jù)交換4.1 初始化網(wǎng)卡與從站掃描無論多復(fù)雜的EtherCAT系統(tǒng)起步操作都是類似的打開網(wǎng)卡、掃描總線、獲取從站信息。SOEM提供了一個(gè)極其實(shí)用的API以下是典型的初始化流程#include ethercat.h #include QDebug char IOmap[4096]; int slaveCount 0; bool setupEtherCAT(const QString ifname) { // 打開網(wǎng)卡返回套接字句柄 if (ec_init(ifname.toLocal8Bit().data()) 0) { qCritical() Failed to initialize NIC: ifname; return false; } qInfo() NIC initialized: ifname; // 掃描總線上所有從站 slaveCount ec_config_init(FALSE); if (slaveCount 0) { qCritical() No slaves found on the bus.; return false; } qInfo() Total slaves: slaveCount; // 配置過程數(shù)據(jù)映射 int result ec_config_map(IOmap); if (result 0) { qCritical() PDO mapping failed.; return false; } qInfo() PDO mapping done, bytes used: result; // 請求切換到OP狀態(tài) ec_slave[0].state EC_STATE_OPERATIONAL; ec_writestate(0); return true; }這里有幾個(gè)關(guān)鍵點(diǎn)。ec_config_init(TRUE)中的參數(shù)表示是否使用保留地址reserved address進(jìn)行配置一般設(shè)為FALSE即可。掃描完成后總線上的每個(gè)從站信息會填充到全局?jǐn)?shù)組ec_slave[]中每個(gè)元素的eep_id、eep_man、eep_rev這些字段存儲的就是從站的Vendor ID、Product ID等信息。ec_config_map(IOmap)這個(gè)函數(shù)是理解EtherCAT從站映射的關(guān)鍵它會為每個(gè)從站計(jì)算PDO的映射關(guān)系返回所有從站輸出和輸入數(shù)據(jù)占用的總字節(jié)數(shù)。IOmap這個(gè)緩沖區(qū)就是你接下來讀寫過程數(shù)據(jù)的“舞臺”。4.2 理解Vendor ID與從站配置的坑在調(diào)試新從站時(shí)很多人會遇到一個(gè)“詭異”現(xiàn)象從站明明被掃描到了但狀態(tài)始終切不到OP。這時(shí)大概率是從站的配置信息不完整尤其是FMMU映射出了問題。FMMUFieldbus Memory Management Unit是EtherCAT從站內(nèi)部用來把過程數(shù)據(jù)映射到本地地址的機(jī)制SOEM在ec_config_map時(shí)會按EEPROM里的配置自動設(shè)置但是如果從站的EEPROM沒有燒錄或者配置錯(cuò)誤映射就會失敗。這時(shí)可以用SOEM提供的工具函數(shù)讀取從站的EEPROM信息qDebug() Slave i Vendor: hex ec_slave[i].eep_man Product: hex ec_slave[i].eep_id Revision: hex ec_slave[i].eep_rev;通常從站出廠時(shí)廠商會把這些信息寫好。但如果是自己開發(fā)的從站比如基于LAN9252或者AX58100的板子在初次調(diào)試時(shí)就要特別留意很多從站不支持自動配置FMMU必須在上位機(jī)中顯式地設(shè)置PDO的映射參數(shù)。這種情況下光靠SOEM的自動映射是不夠的你可能需要直接操作ESC寄存器來手動配置。一個(gè)我非常推薦的做法是在正式控制邏輯之前先打印所有從站的輸入輸出長度和映射地址確認(rèn)每個(gè)從站占用的IOmap偏移是否正確for (int i 1; i slaveCount; i) { qDebug() Slave i InputStart: ec_slave[i].Istart OutputStart: ec_slave[i].Ostart InputBits: ec_slave[i].Ibits OutputBits: ec_slave[i].Obits; }這個(gè)過程能幫你發(fā)現(xiàn)在后續(xù)訪問過程數(shù)據(jù)時(shí)該把指針指向哪個(gè)偏移位置尤其是總線上有多個(gè)不同類型的從站時(shí)這一步絕不能省。4.3 過程數(shù)據(jù)的讀寫PDO映射完成之后我們就可以通過IOmap來讀寫數(shù)據(jù)了。SOEM的思想是把所有從站的輸入輸出緊湊排列在一段連續(xù)的內(nèi)存中然后由協(xié)處理器和主站代碼通過指針來操作。為了方便管理我在實(shí)際項(xiàng)目中會為每個(gè)從站定義一個(gè)結(jié)構(gòu)體再把這些結(jié)構(gòu)體按映射順序重疊到IOmap中。比如常見的伺服驅(qū)動器通常使用CiA402協(xié)議控制字Controlword、狀態(tài)字Statusword、目標(biāo)位置Target Position和實(shí)際位置Actual Position這些對象都是標(biāo)準(zhǔn)化的于是我可以這樣定義typedef struct { uint16_t controlword; int32_t target_position; int32_t target_velocity; uint16_t mode_of_operation; } ServoOutput_t; typedef struct { uint16_t statusword; int32_t actual_position; int32_t actual_velocity; uint16_t mode_of_operation_display; } ServoInput_t; ServoOutput_t* servoOut[16]; ServoInput_t* servoIn[16]; // 在配置完成后按每個(gè)從站的IOmap偏移綁定地址 for (int i 1; i slaveCount; i) { servoOut[i] (ServoOutput_t*)(IOmap ec_slave[i].Ostart); servoIn[i] (ServoInput_t*)(IOmap ec_slave[i].Istart); }這樣綁定之后讀寫過程數(shù)據(jù)就成了結(jié)構(gòu)體成員訪問那么簡單。比如要讓1號伺服進(jìn)入位置模式并開始運(yùn)動我只需要servoOut[1]-controlword 0x000F; servoOut[1]-mode_of_operation 0x01; // CSP模式 servoOut[1]-target_position 100000; // 單位取決于電子齒輪比然后調(diào)用ec_send_processdata()和ec_receive_processdata(0)把這一幀數(shù)據(jù)發(fā)送出去。這里要特別強(qiáng)調(diào)一個(gè)細(xì)節(jié)SOEM的ec_send_processdata()和ec_receive_processdata(0)必須成對調(diào)用并且建議在一個(gè)獨(dú)立的實(shí)時(shí)線程中以固定周期循環(huán)調(diào)用。發(fā)送函數(shù)構(gòu)造報(bào)文接收函數(shù)解析從站反饋兩者的間隔通常在幾十微秒以內(nèi)超時(shí)會返回EC_ERR。為了監(jiān)控通信質(zhì)量我習(xí)慣在接收之后檢查返回值如果在連續(xù)多個(gè)周期內(nèi)返回錯(cuò)誤就觸發(fā)報(bào)警。4.4 從站狀態(tài)切換的狀態(tài)機(jī)封裝從站從啟動到進(jìn)入OP狀態(tài)中間要經(jīng)歷多次狀態(tài)切換每一次切換都要給從站留出足夠的時(shí)間去處理郵箱通信和PDO配置。SOEM官方示例中的方式比較初級只是簡單地把目標(biāo)狀態(tài)寫進(jìn)ec_slave[0].state然后調(diào)用ec_writestate而實(shí)際項(xiàng)目中每臺從站的狀態(tài)切換速度不一樣尤其是一些復(fù)雜的伺服驅(qū)動器可能需要幾百毫秒才能完成參數(shù)初始化。因此我在QT工程里封裝了一個(gè)帶超時(shí)管理的狀態(tài)切換函數(shù)bool waitForState(int slaveIndex, uint16_t targetState, int timeoutMs) { QElapsedTimer timer; timer.start(); while (timer.elapsed() timeoutMs) { ec_slave[slaveIndex].state targetState; ec_writestate(slaveIndex); // 讀取實(shí)際狀態(tài) ec_readstate(); uint16_t actual ec_slave[slaveIndex].state; // 檢查是否到達(dá)目標(biāo)狀態(tài) if (actual targetState) { return true; } // 如果從站報(bào)錯(cuò)讀取AL狀態(tài)碼 if (actual EC_STATE_ERROR) { uint16_t alStatusCode ec_slave[slaveIndex].ALstatuscode; qWarning() Slave slaveIndex error, AL status code: hex alStatusCode; return false; } QThread::msleep(10); } qWarning() Slave slaveIndex state timeout; return false; }從站無法進(jìn)入OP狀態(tài)時(shí)SOEM會在ec_slave[i].ALstatuscode中給出具體原因常見的有AL狀態(tài)碼含義處理建議0x0012無效的郵箱配置檢查SMSyncManager配置0x0013無效的PDO映射檢查PDO映射并重新配置0x0014同步錯(cuò)誤檢查DC時(shí)鐘配置0x001E從站本地錯(cuò)誤查看從站手冊確認(rèn)錯(cuò)誤來源有了這個(gè)等待函數(shù)切OP之前的流程就清晰可查了先切Pre-Op然后寫入PDO映射再切Safe-Op最后切Op。每一層都能驗(yàn)證。5. 分布式時(shí)鐘與同步讓多軸動得整齊劃一5.1 為什么需要同步EtherCAT最吸引人的地方之一就是它的分布式時(shí)鐘Distributed Clock簡稱DC。如果沒有DC同步總線上每個(gè)從站都是按照各自的晶振節(jié)拍來采樣和輸出晶振的頻率誤差雖然不大但累積到一定時(shí)間就會導(dǎo)致軸與軸之間出現(xiàn)明顯的偏移。在高精度的運(yùn)動控制場合這種時(shí)間偏差會直接表現(xiàn)為軌跡跟隨的抖動。DC的原理簡單來說就是第一個(gè)具有DC功能的從站作為參考時(shí)鐘主站周期性發(fā)送時(shí)鐘同步報(bào)文其他從站讀取參考時(shí)鐘的時(shí)間戳并通過本地時(shí)鐘補(bǔ)償算法來校準(zhǔn)自身的本地時(shí)間。這樣一來所有從站的采樣時(shí)刻就對齊到了同一個(gè)時(shí)間基準(zhǔn)上。SOEM對DC的支持很到位在ec_config_map之后只需要調(diào)用以下幾個(gè)函數(shù)就可以完成DC初始化ec_configdc();這個(gè)函數(shù)會自動檢測從站的DC能力并對有DC功能的從站進(jìn)行時(shí)鐘同步設(shè)置。如果總線上混合了有DC和無DC的從站SOEM會以第一個(gè)支持DC的從站的時(shí)鐘作為參考也就是所謂的SYNC0事件由DC0來觸發(fā)。5.2 周期同步與SYNC信號在實(shí)際項(xiàng)目中伺服驅(qū)動器的位置環(huán)、速度環(huán)甚至電流環(huán)都需要依賴從站的SYNC事件來觸發(fā)。SYNC事件是DC時(shí)鐘在到達(dá)預(yù)設(shè)時(shí)刻時(shí)生成的硬件中斷信號驅(qū)動內(nèi)部的數(shù)字信號處理器DSP會響應(yīng)這個(gè)中斷進(jìn)行采樣和計(jì)算。也就是說周期控制的精度直接取決于DC同步鏈路的質(zhì)量和SYNC信號周期的設(shè)置。在SOEM中可以通過ec_dcsync0來設(shè)置SYNC0的周期和偏移// slaveIndex為參考從站索引 // cycleTimeNs為周期時(shí)間單位是納秒 // shiftTimeNs為偏移時(shí)間 ec_dcsync0(slaveIndex, TRUE, cycleTimeNs, shiftTimeNs);例如對于1ms的控制周期ec_dcsync0(1, TRUE, 1000000, 0);這里有一個(gè)心得SYNC0的偏移時(shí)間不要一律設(shè)置為0。在總線上有多個(gè)從站時(shí)如果所有從站都在同一個(gè)時(shí)間點(diǎn)觸發(fā)SYNC可能會造成總線上瞬時(shí)電流峰值過大尤其在伺服驅(qū)動器的使能瞬間。通常我會把偏移時(shí)間錯(cuò)開幾十微秒讓各驅(qū)動器的采樣點(diǎn)稍微錯(cuò)開能有效減少總線上的干擾。5.3 DC同步誤差的觀察與調(diào)優(yōu)怎么判斷DC同步是否正常一個(gè)可行的辦法是循環(huán)讀取參考從站的時(shí)鐘時(shí)間戳和本地從站的系統(tǒng)時(shí)間計(jì)算時(shí)間偏差。SOEM提供了ec_dcreg相關(guān)的寄存器讀取函數(shù)可以讀取從站的0x092CSystem Time寄存器和0x0920Receive Time寄存器實(shí)時(shí)打印偏差。我在調(diào)試時(shí)發(fā)現(xiàn)當(dāng)DC同步正常時(shí)時(shí)間偏差一般能穩(wěn)定在幾百納秒以內(nèi)如果偏差出現(xiàn)毫秒級的漂移那就要檢查參考時(shí)鐘從站的選擇是否正確或者從站之間的線纜連接是不是接觸不良。還有一點(diǎn)容易被忽略如果總線上有非DC能力的從站它的報(bào)文轉(zhuǎn)發(fā)延遲會對DC同步產(chǎn)生可見的影響這種情況下盡量把DC參考點(diǎn)設(shè)在離主站最近的DC從站上或者調(diào)整DC偏移參數(shù)來補(bǔ)償。同步是所有運(yùn)動控制系統(tǒng)的生命線SOEM在這塊已經(jīng)封裝得很好但用戶必須理解這些參數(shù)的含義才能合理使用。切忌直接復(fù)制網(wǎng)上的參數(shù)不同品牌伺服、不同拓?fù)浣Y(jié)構(gòu)最優(yōu)配置是不同的。6. 基于QT的完整應(yīng)用框架設(shè)計(jì)6.1 界面線程與實(shí)時(shí)線程如何協(xié)作很多初次接觸QT結(jié)合EtherCAT的人最容易犯的錯(cuò)誤就是把通信直接塞進(jìn)GUI線程。QT的GUI線程運(yùn)行著事件循環(huán)一旦被長時(shí)間阻塞界面就會卡死這是絕對不可接受的。正確做法是把EtherCAT周期通信放在一個(gè)單獨(dú)的實(shí)時(shí)線程中用信號槽機(jī)制與界面線程通信。在設(shè)計(jì)這個(gè)框架時(shí)我會把功能分成三層界面層負(fù)責(zé)顯示狀態(tài)、接收用戶輸入比如目標(biāo)位置、速度完全不接觸任何EtherCAT API。控制層一個(gè)獨(dú)立的QThread運(yùn)行周期通信循環(huán)調(diào)用SOEM的收發(fā)函數(shù)并維護(hù)一個(gè)簡化的狀態(tài)機(jī)。數(shù)據(jù)層定義好控制指令和反饋數(shù)據(jù)的結(jié)構(gòu)體用互斥鎖或者隊(duì)列在控制層和界面層之間傳遞數(shù)據(jù)。對于運(yùn)動控制系統(tǒng)我通常定義一個(gè)EtherCATWorker類繼承自QObject并把它移動到QThread中執(zhí)行class EtherCATWorker : public QObject { Q_OBJECT public: explicit EtherCATWorker(QObject* parent nullptr); public slots: void start(); void stop(); void setTargetPosition(int axis, int32_t pos); signals: void statusUpdated(const QString status); void positionUpdated(int axis, int32_t pos); void errorOccurred(const QString error); private: void cycleLoop(); bool runningFlag; };start()插槽里執(zhí)行前面說到的初始化和狀態(tài)切換然后進(jìn)入一個(gè)while循環(huán)以QElapsedTimer控制周期節(jié)拍在循環(huán)內(nèi)部調(diào)用ec_send_processdata和ec_receive_processdata。這里有個(gè)性能細(xì)節(jié)周期循環(huán)中不要使用QThread::msleep()來粗略延時(shí)因?yàn)樗木炔蛔阋灾?ms以下的控制周期而且受系統(tǒng)調(diào)度影響很大。更可靠的做法是使用QElapsedTimer做自旋等待或者干脆加上std::this_thread::sleep_for(std::chrono::microseconds(...))配合高精度定時(shí)器。如果是在Linux平臺還可以配合timerfd或者clock_nanosleep這些實(shí)時(shí)接口。6.2 跨線程數(shù)據(jù)傳遞不丟不重在EtherCATWorker中更新的伺服位置、狀態(tài)字等數(shù)據(jù)界面需要實(shí)時(shí)刷新。直接用普通成員變量跨線程讀寫有數(shù)據(jù)競爭的風(fēng)險(xiǎn)用QT信號槽傳輸又可能出現(xiàn)高頻下的丟包或延遲。我的做法是在Worker內(nèi)部用三個(gè)環(huán)形緩沖區(qū)分別存儲位置、狀態(tài)和報(bào)警數(shù)據(jù)界面線程按需取用用QMutex保護(hù)讀寫指針。void EtherCATWorker::cycleLoop() { while (runningFlag) { // 等待周期節(jié)拍 // 發(fā)起過程數(shù)據(jù)交換 ec_send_processdata(); int wkc ec_receive_processdata(0); // 讀取各從站的反饋 for (int i 1; i slaveCount; i) { int32_t pos servoIn[i]-actual_position; uint16_t status servoIn[i]-statusword; mutex.lock(); posBuffer[i] pos; statusBuffer[i] status; mutex.unlock(); } // 向界面發(fā)信號刷新的通知 emit dataRefreshed(); // 周期節(jié)拍控制 } }界面端的刷新槽函數(shù)只需要加鎖拷貝數(shù)據(jù)然后更新控件即可。這樣的設(shè)計(jì)下不管界面刷新頻率快慢底層通信都不會受到影響。當(dāng)然有人會說直接用emit positionUpdated(axis,pos)不是更簡單嗎在軸數(shù)少、通信周期慢的場景下確實(shí)夠用但是在16軸甚至32軸、1ms周期的系統(tǒng)里高頻信號的發(fā)射和槽函數(shù)的調(diào)用會引入不必要的線程切換開銷。環(huán)形緩沖區(qū)加通知信號的方案在這類場景下明顯更穩(wěn)。6.3 日志記錄與在線升級產(chǎn)品化的系統(tǒng)不能只跑通就完事。我們需要日志來追蹤異常需要OTA升級能力來修復(fù)現(xiàn)場問題。SOEM的FOEFile over EtherCAT協(xié)議可以在EtherCAT總線上傳輸文件最常見的就是給從站升級固件。SOEM提供了ec_foe_write和ec_foe_read函數(shù)使用起來很直接uint32_t err ec_FOEwrite(1, filename, password, buffer, size, timeout);返回值為0代表成功非0值則是從站返回的錯(cuò)誤碼。在給伺服驅(qū)動器升級固件時(shí)注意事項(xiàng)比較多升級前必須確保從站處于Pre-Op狀態(tài)過程數(shù)據(jù)交換要暫停升級期間不要斷電??偩€上多個(gè)從站升級時(shí)務(wù)必一臺上完再切下一臺絕不能“并發(fā)”。日志方面QT的qInstallMessageHandler可以把運(yùn)行日志同時(shí)輸出到控制臺、文件和網(wǎng)絡(luò)配合SOEM的通信錯(cuò)誤返回值記錄這樣現(xiàn)場如果出了問題能快速定位是通信鏈路問題還是控制邏輯問題。我見過太多項(xiàng)目因?yàn)槿鄙偃罩粳F(xiàn)場調(diào)試像大海撈針一樣。7. 實(shí)戰(zhàn)中的常見問題與排查技巧7.1 網(wǎng)卡選型與實(shí)時(shí)性優(yōu)化SOEM跑不好很多時(shí)候問題不出在協(xié)議棧本身而是網(wǎng)卡選錯(cuò)了。EtherCAT主站對網(wǎng)卡的要求非常嚴(yán)格網(wǎng)卡必須支持接收所有以太網(wǎng)幀混雜模式并且發(fā)送和接收的時(shí)間戳越精確越好。普通消費(fèi)級USB網(wǎng)卡是絕對不可用的延遲大還不穩(wěn)定。目前做EtherCAT主站最常用的方案是Intel的I210、I211以及部分瑞昱的千兆網(wǎng)卡芯片。I210因?yàn)橹С钟布r(shí)間戳在DC同步精度要求高的場合幾乎是首選。英特爾的I210網(wǎng)卡成本不算高很多工控主板也直接板載。在Linux下可以通過ethtool -i查看網(wǎng)卡驅(qū)動如果是igb驅(qū)動那基本上就沒問題了。為了提高通信穩(wěn)定性我還會做以下幾個(gè)優(yōu)化在多核處理器上把EtherCAT線程綁定到獨(dú)立CPU核心避免線程被系統(tǒng)調(diào)度到其他核上。在Linux下使用chrt命令把實(shí)時(shí)線程設(shè)為SCHED_FIFO優(yōu)先級保證周期調(diào)度的確定性。關(guān)閉網(wǎng)卡的節(jié)能模式、中斷合并Interrupt Moderation盡量降低報(bào)文延遲。這些優(yōu)化看似不起眼但對系統(tǒng)的長期穩(wěn)定運(yùn)行非常關(guān)鍵。7.2 總線掉線、丟幀與從站超時(shí)EtherCAT總線上最怕的就是掉從站。運(yùn)行中一旦某個(gè)從站斷線主站發(fā)出的幀就無法正常返回所有從站過程數(shù)據(jù)都可能失效。SOEM的ec_receive_processdata返回值是“工作計(jì)數(shù)器”Working Counter的總和通過檢查它可以判斷這一幀通信是否成功。我封裝過一個(gè)檢查函數(shù)bool checkWorkingCounter(int expectedWkc) { int wkc ec_receive_processdata(0); if (wkc expectedWkc) { qWarning() WKC mismatch, expected: expectedWkc actual: wkc; // 可以在這里記錄是哪一幀、哪個(gè)從站失聯(lián) return false; } return true; }如果報(bào)文丟失頻繁首要懷疑點(diǎn)就是網(wǎng)線接頭。EtherCAT要求使用屏蔽雙絞線至少Cat5e且屏蔽層要良好接地。很多現(xiàn)場問題最終都查出來是網(wǎng)線壓接不合格這一段我踩過很多次??偩€末端必須接上終結(jié)電阻否則信號反射會導(dǎo)致通信不穩(wěn)定。7.3 從站EEPROM異?;謴?fù)還有一種常見的現(xiàn)場故障從站的EEPROM損壞或者數(shù)據(jù)被意外改寫導(dǎo)致SOEM掃描時(shí)上報(bào)錯(cuò)誤的從站信息甚至根本掃描不到。針對這種情況SOEM提供了寄存器級的訪問接口可以強(qiáng)制讀寫EEPROM。在實(shí)際操作中只要從站的ESC芯片本身沒有損壞就可以通過ec_escread和ec_escrwrite直接訪問EEPROM接口恢復(fù)出廠配置。不過要注意裸操作EEPROM風(fēng)險(xiǎn)較大如果誤改了廠商區(qū)域的數(shù)據(jù)從站可能無法正常運(yùn)行。最穩(wěn)妥的方式是聯(lián)系從站廠商獲取原廠配置工具而不是自行修復(fù)?,F(xiàn)場應(yīng)急時(shí)可以把錯(cuò)誤從站隔離然后重新掃描其他從站至少保證單站故障不拖垮整條線。7.4 QT串口界面卡死與崩潰最后聊一個(gè)很常見的QT層面的坑。很多人在用QT開發(fā)監(jiān)控界面時(shí)習(xí)慣在槽函數(shù)里直接更新表格控件比如QTableWidget的行列變化。但如果數(shù)據(jù)刷新頻率太高控件頻繁重建內(nèi)存碎片化會導(dǎo)致界面越來越卡甚至直接崩潰。我建議的做法是在界面上使用模型/視圖架構(gòu)Model/View預(yù)先分配足夠大的表格數(shù)據(jù)模型刷新時(shí)只更新數(shù)據(jù)而不重建控件。對于大量波形類數(shù)據(jù)的監(jiān)控建議用QCustomPlot或QCharts的增量刷新模式而不是整個(gè)圖重繪。如果界面線程和EtherCAT線程之間通過信號槽傳遞高頻數(shù)據(jù)記得用Qt::DirectConnection連接方式并且信號參數(shù)用const QByteArray這種隱式共享類型減少拷貝開銷。8. 一個(gè)完整的起步項(xiàng)目單軸伺服的點(diǎn)動控制為了讓大家把前面的知識串起來我給出一個(gè)最簡單的完整示例QT界面上放一個(gè)按鈕和一個(gè)進(jìn)度條按下按鈕后1號伺服以固定速度運(yùn)行到指定位置。8.1 界面與業(yè)務(wù)邏輯分離界面很簡單一個(gè)QPushButton用于觸發(fā)運(yùn)動一個(gè)QLabel顯示當(dāng)前位置。整個(gè)QT工程的關(guān)鍵代碼集中在Worker線程。void MainWindow::on_startButton_clicked() { if (worker nullptr) { worker new EtherCATWorker(); thread new QThread(); worker-moveToThread(thread); connect(thread, QThread::started, worker, EtherCATWorker::start); connect(worker, EtherCATWorker::positionUpdated, this, MainWindow::updatePosition); connect(worker, EtherCATWorker::statusUpdated, this, MainWindow::updateStatus); connect(worker, EtherCATWorker::errorOccurred, this, MainWindow::showError); thread-start(); } // 發(fā)一個(gè)位置指令 worker-setTargetPosition(1, 50000); }EtherCATWorker::start()先初始化SOEM成功之后進(jìn)入周期循環(huán)。設(shè)置目標(biāo)位置時(shí)注意給數(shù)據(jù)加鎖void EtherCATWorker::setTargetPosition(int axis, int32_t pos) { QMutexLocker locker(cmdMutex); targetPositionMap[axis] pos; }然后在周期循環(huán)里讀取這個(gè)目標(biāo)位置并寫入PDOint32_t pos; { QMutexLocker locker(cmdMutex); pos targetPositionMap[1]; } servoOut[1]-target_position pos; servoOut[1]-controlword 0x000F;這樣單軸點(diǎn)動控制的骨架就出來了。8.2 防止誤觸發(fā)的安全邏輯控制類軟件里“防止誤觸發(fā)”是必須考慮的功能。我在按鈕槽函數(shù)里加入了一個(gè)鎖定機(jī)制只有從站狀態(tài)都正常、伺服使能成功、急停信號未觸發(fā)時(shí)按鈕才有效。bool MainWindow::checkSystemReady() { if (isEmergencyStop) { showError(Emergency stop active!); return false; } if (!worker-isOperational()) { showError(EtherCAT not in OP state); return false; } return true; }很多初學(xué)者在調(diào)試時(shí)會忽略急停信號。實(shí)際上EtherCAT的AL狀態(tài)機(jī)和急停邏輯是兩回事——急停信號通常通過硬接線接入IO模塊或者伺服驅(qū)動器的STOSafe Torque Off端子軟件層面只能檢測和報(bào)警不能替代硬件的安全功能。這一點(diǎn)必須提醒大家安全回路的設(shè)計(jì)一定不要依賴上位機(jī)軟件這是人命關(guān)天的事情不能有任何僥幸心理。8.3 從簡單到復(fù)雜的演進(jìn)路線如果你是從零開始接觸這套架構(gòu)我建議的路徑是先跑通官方示例simple_test再用QT封裝一個(gè)單軸點(diǎn)動然后擴(kuò)展成多軸聯(lián)動最后加入DC同步和FOE升級。不要一上來就追求大而全否則出了Bug你根本不知道是協(xié)議棧的問題還是自己代碼的問題。單軸跑通之后再嘗試在兩臺伺服上做同步運(yùn)動對比DC同步開啟和關(guān)閉時(shí)的曲線差異。有了實(shí)際的實(shí)驗(yàn)數(shù)據(jù)你對EtherCAT的同步機(jī)制才會有真正的體感。9. 個(gè)人經(jīng)驗(yàn)總結(jié)寫這篇文章的時(shí)候我回想這幾年在EtherCAT主站上走過的彎路最想傳達(dá)的一點(diǎn)是SOEM雖然叫“Simple”但它的內(nèi)部機(jī)制并不簡單只是把復(fù)雜性封裝得比較友好而已。真正用好的關(guān)鍵還是要把EtherCAT的協(xié)議原理和從站的行為摸透。QT加SOEM這套組合在目前的開源生態(tài)里可以說是“能打”的。QT負(fù)責(zé)跨平臺的界面、豐富的控件庫和完善的調(diào)試工具SOEM提供輕量、高效、可嵌入的EtherCAT主站能力兩者疊加無論是做實(shí)驗(yàn)室原型還是量產(chǎn)設(shè)備都有足夠的底子。最后分享一個(gè)很小的技巧在開發(fā)和調(diào)試階段把SOEM的調(diào)試打印打開能看到每個(gè)從站的寄存器讀寫過程對理解協(xié)議和排查問題幫助極大。SOEM在編譯時(shí)用DEBUG宏來控制這些輸出QT工程中可以在.pro里加一句DEFINES DEBUG來啟用。等你在實(shí)際項(xiàng)目中積累了自己的工具函數(shù)庫和模板工程之后開發(fā)效率會飛躍一個(gè)臺階。希望這篇實(shí)戰(zhàn)指南能幫你把QT加SOEM的框架從編譯到落地完整搭建起來少踩一些我當(dāng)年踩過的坑。
返回列表
PREV
查看更多資訊
NEXT
返回資訊列表
超碰97综合网| www.成人无码| 青娱乐国产精品| 亚洲在线综合| 搞中出视频在线观看| 97人人干人人操| а√天堂资源官网在线资源| 青操影院| 成人久久久精品| 东北黄色电影| 欧美色五月| 国产啊v在线免费播放| 五十路熟女人妻一区二区三区四区五| 亚洲天天影视色综合| 欧美制服另类丝袜| 日本福利社| 干婷婷综合网| 最新日韩黄片| 超碰碰碰碰| 日韩午夜精品一区二区三区电影| 日本精品中文字幕视频| 精品久| 天天操天天7| 超碰 另类 欧美| 六月婷婷激情| 亚洲综合色婷婷| 欧美日韩性爱无码| 在线A日本| 亚洲欧美不卡线| 草久在线| 日本久久超碰| 亚洲国产精品无码AV久久| 99蜜月精品久久| 囯产精品强| 亚洲欧洲无码97久久精品| 国产精品情侣啪啪| 伊人五月天青青草婷婷| 久久熟女人| 999在线电影香蕉| 天天干,天天日| 乱伦熟女区| 亚洲成人美女无吗| 久久丁香五月天| 久久久精品成人国产| 5月婷婷6月六月丁香| 操比国产| 亚洲人妻AV| 志村玲子视频一区二区| 亚洲男人的天堂AV| 亚洲熟久久| 色眯眯av| 加勒比色99999| 色原狠狠天天天| 色哟哟av| 黄色大片视频在线免费看| 78久久| 日韩欧美大片免费高清啪啪| 欧美亚洲| 久久五月份| 欧美日韩免费专区在线| 熟女网站最新| 婷婷国产精品一区二区| 丁香婷婷五月| 国产家庭乱伦网址| 亚洲图片欧美91N| 欧亚洲精品有视频| 久草久日| 97色97干| 99视频只有精品| 嗯啊不要在线| 国产风韵犹存熟妇三区| 超碰色97| 18禁美女裸体无遮挡啪啪| 久久精品国产72国产精品福利| 久操热| 久久久久久久 九九九九九九九| 天天看片麻豆| 国产精品一区二区三区在线| 岛国片国产成人亚洲播放| 最近的最新的中文字幕视频| 青青草国产盗摄一二三区| 四虎影视永久在线观看精品免费网站| 老熟女91| 啊视频在线| 亚洲精品天天影视综合网| 欧美性视频二区三区| 伊人久久AV诱惑悠悠| 丰满岳乱妇一区二区三区| 综合色色网| 中文字幕乱碼在线| 国产一区二区二区按摩精品啪视频| AV在线性爱| 操狠狠| 加勒比少妇AV婷婷六月天超碰超碰| 综合亚洲欧美| 亚洲va综合va国产va中文| 爱干爱射网啊啊啊| 91天天综合日韩欧美| 久久精品中文字幕无码l| 77777亚洲蜜臀精品久久综合蜜臀| 天天插夜夜爽| 欧美精品精品一区二区| 99999久久久久9国产精品| 色噜噜狠狠色综无码久久| 高清国产无码av| 天天色综合图片| 国产91专区| 操婢日韩| 无码人妻精品一区二区三区九九| 国产精品一区午夜福利| 极品内射| 婷婷五月色| 亚洲成人帖图| 探花精品视频| 色97欧美| 激情五月综合网| 日韩91网| 九九亚洲| 99re超碰| 超碰调教97| 欧洲精品一级二级精品综合视频综合 | 欧亚揄拍偷拍精品视频| 久久久久久久伊人精品| 天天日天天射天天干| 国产色图乱伦| 国产SV一线| yw尤物av无码点击进入麻豆| 97欧美精品综合| 97色碰| 日韩AV电影网站| 天天久久| 有码免费观看| 国产最新小视频在线播放下载| 后入人妻一区| 丰满少妇乱子伦精品无| 青青操日韩| 综合色色网| 国产91 丝袜在线播放00-百度| 亚洲操操操| 亚洲丝袜少妇在线| 91丝袜在线观看视频在线观看| 国产精品内射婷婷一级二| 日韩av熟女一区二区三区成人| 成人av性爱电影在线观看| 台湾大香蕉99热| 国产一区二区三区视频在线看| 欧美韩日精品资源| 国产a级精品| 日本操色导航| 欧美丝袜中文字幕07在线| 五月天婷婷激情| 欧美色欧美| 色欲色香天天天综合网www-亚洲综合国| www亚洲免费| 中国一级αV| 91网站18在线| 亚州伊人色综台| 強姦亂倫a| 东京热不卡视频| 91一起操| 性在久久久久久| www.人人摸在线视频| 男人的天堂2010| 中字幕人妻一区二区三区| 中文字幕精品三级久久久| 少妇超碰在线| 久久久久国产精品喷潮免费观看臀| 欧美日韩不卡传媒| 免费看污网址| 精品久久視頻在线| 亚洲AV无码国产成人| 亚洲在线网站| 啪啪啪男女亚洲中文字幕99| 九九九九一级| 97 国产一区| 激情第四色| 做爱A级亚欧| 欧美高清色| 欧美久久久| 综合久草| 校园春色 男人天堂| 一区二区三区亚洲| 中文字幕AV乱伦| 成人怡红院| 欧美综合狠| surenchaopeng| 欧美一区二区| 国产欧洲精品亚洲午夜拍精品| 久久精品亚洲东京热色播| 插欧洲美女欧美精品| 日韩欧美成人综合在线| 欧美福利视频啊啊啊啊| 男女一进一出视频久久| 大逼色网站| 亚洲清纯唯美| 综合九九| 熟妇女伦乱视频视频| 亚洲一区二区专区-国产丝袜精品丝袜-成人AV| 日韩三级视频一区二区三区| 91久久久久久| 色99在线| 天天日日夜夜| 午夜激情床戏激情| 亚洲综合春色| 久久超碰亚洲人| 玖玖综合.com| 夜夜夜久久| 欧美日韩情色一区二区| 东北女人的毛片| 熟女自慰久久久| 精品v1区| 国产99999久久精品| 超碰97最新人妻| 亚洲高清内射| 日本精品性生活久久久| 中文无线日韩一区| 1024精品在线| 襙一襙| 中文字幕黄片在线| 老熟女搡BBBB搡BBBB视频| 91精品国产91久久福利| 免费自拍三级综合| 大香蕉免费乱伦视频| 亚洲欧美国产其他二区| 欧美色色色| 色色色欧美| 亚洲中文字幕妇伦久久| 你草精品在线视频| 亚洲在线91| 91久久青青草原精品| 午夜精品久久一区二区| 看日韩操逼| 久久精彩视频| 精品网站99999| 中文字幕熟女人妻丝袜丝| 男同专区一区二区三区在线| 永久电影三级在线观看| 91人妻中文| 一块操欧美| 麻豆亚洲Av成人无码一区精品| 亚洲成人精品久久久| 小草av不卡亚洲二区 | 综合免费无码中文| 麻豆天美国美国产AV| 亚洲另类色图片| 欧美综合网1| 91超碰在线观看| 啊啊啊啊网站| 在线观看国产黄色| 亚91亚洲网| 久久激情视频| 狠狠色噜噜狠狠狠狠狠色综合久久| 丁香五月天堂网| 99re69| 亚洲男人天堂手机版| 亚洲精品自拍| av在线资源| 大香网伊人久久综合网eew| 人人妻人人色一区二区三区| 97超碰人人模人人拍人人| 久干9操| 国产超碰国产97| 91熟女.com| 肏逼视频日本| 久久久A∨| 精品视频久久区| 超碰免费97| 高清无码国产亚洲| 久久久久78| 99久久精品欧美国产| 国产亚洲色婷婷久久99精品91| 淫乱图区| 亚洲男人综合| 九九热精品免费视频| 欧美日韩美女精品久草一区二区三区| 欧美Ⅴ性爱| 久久久精品成人国产| 懂色AV中文| 9久精品| 色五月激情网| 97综合激情| 人妻人人做人人澡人人爽欧美一区| 久九九九九九九热| 超碰成人人人爽人人爽| 大香蕉伊人在线成人AV在线观看| 国产97在线 | 亚洲| 日韩成人精品中文字幕| 人妻精品一区二区| 久久人人看| 好一吊区二区| 欧美综合区| 男人天堂毛片| 五月综合久久| 中文乱码字幕观看| 国色天香av| 亚洲熟妇A V黑人| 久久久久久裸体| 日韩无码a片| 亚洲色丰满少妇高潮| 黑人美精品 A片| www.男人天堂| 国产强奸超碰AV| 久久精品91| 99熟女| 97超级久久| 成年女人一区| 免费公开人人操| 夜夜爽妓女| 精品人妻一区二区三区-国产精品 一个人在线看的黄色电影网站 | 人妻二区| 久久超碰av在线| 国产女性无套 免费观看| 亚洲精品不卡一二三区| 性爱av网站| 校园激情狠狠四射| 久久色激情一区二区三区| 91精品无码久久久久久久| 亚州色站 日韩电影| 午夜国产乱伦视频| 狠久久| 伊人影院中文字幕| 欧美亚洲一级在线观看| 另类老少妇| 五月综合激情网| 国产精品直播在线观看直播| 国产白丝在线| 亚洲精品一二三四区| 久久天天艹| 骚妻少妇精品性色无码四色A V| 色吧五月| 欧美亚洲素人制服精品| 亚洲天堂资源网| 久久一二三四不卡| 九九久久综合| 欧美性生活免费网| 亚洲人妻爽爽爽| 欧洲综合视频| 户外裸露刺激视频第一区| 九t超碰| 夜夜草天天| 欧美色图 人妻| 色播丁香| 看黄片视频免费| 人人妻人人爱人人玩| 亚洲人妖网| 99热在线观看| 亚洲第一黄色av网站| 欧美人妻少妇| 中文字幕激情小说| 亚洲高清少妇| 91丝袜美腿网站| 蜜乳AV网址| 欧亚无码视频| 伊人天天久久动态图| 精品国产综合久久福利,热99这里有精品综合久久,99热这里只有免费国产精品,精 | 国产一区二区成人av在线播放| 超碰碰小说97| 99re这里| 四虎884a| 青青草在线成人视频| 国产在线精品偷| 欧美熟妇成人一区二区| 精品国模无码| 在线亚洲欧美| 黄页av| 日本高清视频在线观看黄已三辽| 自拍视频大全亚洲专媒视频/一区二区三区 | 裸体美女国产免费久久久网站| 日韩精品一区二区日韩| 亚洲啪AⅤ永久无码| 婷婷五月天激情四射| 中日韩欧美精品无码AⅤ一区二区| 中文字幕三四区| 99热在线只有精品| 91九九| 999精品女人| 欧美综色欧| 中文字幕av一区二区三区人妻少妇 | 国产传媒日本欧美专区| 久悠悠av| 一区中文字幕二区日韩| 91艹逼精品| 国产精品 午夜福利| 99久久无色码| 午夜成人福利影视| 激情文学欧美| 老女人老91妇女老热女| 九九九九免费高| 欧美日韩天堂| 色69大色97香蕉| 男人的天堂kva| 欧亚日本情色| 国产97在线 | 亚洲| 97资源站日韩| 欧美人人操人人插| 国产精品免费日韩| 日本中文字幕在线视频| 亚洲精品819| 亚州成人A√| 色诱中文字幕| 欧美91久久久久| 一区二区三区男人的天堂| 麻豆天天躁天天揉揉AV| 夜夜爽夜夜操| 亚洲无码太久| 久久99网站| 91无人区卡一卡二卡三乱码入口最新版:能让用户有更多选择的选择-经典说说-爱 | 亚洲欧美日韩精品久| 强奸a片网| 日韩啪啪啪啪啪| 欧美一二三区四五区| 国产青视频| 内射黑丝袜| 清纯唯美综合亚洲| 亚洲精品自拍| 婷婷丁香五月激情啪啪| 亚洲一区二区三区麻豆传媒| 日本一级不卡一二区| juliaann欧美丝袜办公室| 久久久久久网址| 亚洲第2页| 色婷婷久久| 欧美页片| 久久系列| 无码免费精品高清| 色一射色一射| 熟女熟妇一区二区三四区| 亚洲中文字幕精品一区| 五月婷婷爱六月丁香色| 久草资源在线视频官方总站日韩丝袜美腿 | 91熟女.com| 日日摸天天爽夜夜欢| 国产av强奸美女| 发朗少妇买婬全视频中文| 美女AV一区二区| 91熟女丨老女人| 黄片免费久久久久久久| 国产欧美一区二区| 色图四区| 国模少妇一区二区三区| 欧美人妻中出| 日产操逼| 亚洲 图片 综合91| 久久久久久人| 欧美日韩国产中文精品字幕自在自线 | 久久久久斤小| 亚洲综合有玛| 久久久亚洲精品中文字幕人妻| 久久综合国产精品国产| 欧美激情总合网| 99后入| 国产精品视频自拍在线| 在现视频女上位好爽| 日本高清视频在线观看黄已三辽| 91香蕉视频在线观看免费| 欧美熟妇视频| 久久久九九九| 欧洲乱码一区二区| 熟女探花啪啪| 天天综合AV| 久午视频| 男人的天堂2010| 久久久精品,3| www.婷婷| 天美传媒AV在线| 97干在线| 蜜桃久久一区二区| 女优视频第10页| 超碰色97| 久久久久久久久久久人妻| 91欧| 国产这里只有精品| 1024精品在线| 操久久久久久| 凹凸精品熟女在线观看| 国产亚洲精品自在线亚洲情侣| 五十路熟女工口| 一级毛片久久久久久久女人18| 亚洲欧美日韩综合在线尤物| 99热精品国产| 久久成人午夜精品影院| 一区二三区四区视频大全套| 日韩欧美操逼xxx| 青青草精玖玖69精品| 亚洲A曰本VA欧美VA视频| 成人天天看站长推荐| 色色网91| 激情内射| 6080yy午夜理论三级一区二区三区无码| 78精品在线| http://qxhbdz.com| 无码高清操逼| 偷拍片久久| 五月婷婷性爱| 人妻性爱一区二区| 久久久久久少妇| 欧美色五月| 丁香七月婷婷| 色欧洲97| 久久久久精| 搞中出久久| 综合色久欲| 精品久久久九九九孕妇| 黄色AAAAAAAAAAA大片| 好一吊区二区| 蜜臀精品1区2区| 久久精品毛片免费不卡| 激情欧美97| 91丝袜激情在线| 欧美性爱另类综合| 久久av无码| 黄页网站成人免费| 久久久久久波多野吉衣高潮| 2020国产精品| 久久透逼视频| 亚洲在线91| 91综合国产精品| 天天干天天干天天干| 日韩成人在线性爱视频| 91丝袜视频在线观看| 久操网在线| 亚洲激情网一二三四区| 日本视频在线观看污污污| 97欧美精品| 亚洲脚交| 中文字幕精品乱码| 国产精品经典一卡久久久 | 五月丁香成人网| 一区二区 电影 亚洲| 999国产精品999| 人人看人人插| 婷婷爽人人婷婷爽视频| 中日韩久久久免费看| 亚州春色| 欧美老妇女内射网址| 好吊妞转入那个网| 天天爽人人综合免费7799| 日本熟女免费視颖| 一个国产在线综合网站| 欧美人黑A片无码免视费| 性感美女91影视| 亚欧美综合网。| 黄总AV色图| 亚洲色人妻综合| 婷婷五月av| 在线v中文字幕一区二区三区 | 欧美一区91大爱| 99久久99久久综合| 日本 欧美 国产一区| 综合欧美激情网| 免费日韩黄片| WWW啪啪的com| 久久成人国产| 国产99久久99热这里只有精品15| 日韩无码三级影院| 国产成人精品必看| 欧美伊人久久综合网| 内射老妇BBWX0C0CK| 人妻天天爽天天爽三区| 97久久网| 人妻色偷色噜| 秋霞一级A片黄色视频| 2019精品国产无码成人| 久久久久久久九九九九九九| 黑人白女精品一区| 99re公开精品免费视频| 强奸乱伦中文字幕AV| 岛国黄色短视频| 一级A片女人高潮叫床| 黑人精品成人一区二区三区| 日韩乱插| 欧美日日网| 91视频观看网站| 97久久久精品| 久久久久婷婷精品av电影| 日韩BBN| 97视频免费| 国产又黄又粗又猛大片| 国产精品久久久久无码A√| 成全在线观看免费观看| 性爱精品一区| 大香蕉碰碰| 9超碰免费| 久久久噜噜噜久久人妻| 清纯唯美综合| 黄色香蕉视频网站一区| 3P乱轮视频| 日本三级大片| 欧美久久婷婷| 欧美97网| 日韩熟女操逼| 欧美日韩性爱视屏免费看了| 偷拍欧美激情| 污电影在线观看| v91av| 99re国产精品视频| 婷婷色色五月天| 夜夜久久| 欧美综合网在线| 思思热免费在线视频| 免费AV播放| 亚洲天堂第一页| 婷婷丁香人妻 | 探花激情视频| 综合网久久| 午夜噜噜噜| 夜夜天天噜狠狠爱2021| 欧美|91色综合| 色哟哟av网址| 欧美日韩*字幕一区| 国产a级午夜毛片| 96AV久久久| 青青草公开在线免费不卡视频| 黄片免费视频2019| 蜜桃视频精品一区二区| 1.igao73.com 加入收藏 免费专区 国产精品 中文字幕 日韩精品 欧美精品 精彩 | 四虎永久在线精品免费网址| 日本在线15p| 久综合国内精品自在自线| 91一区二区| 久久网亚洲| 秋霞一级鲁丝片A片| 亚洲天堂,男人| daxiangjiao你懂的| 狠狠久久手机视频精品| 一区二区三区精品黑丝白丝酒店对鸡| 秋霞福利网| 黄片视频,下载| 密臀在线免费观看| 亚洲人天堂| 婷婷五月av| 日韩欧美中文字亚洲慕| 亚洲精品无码久久AV| 97人人爱人人做人人乐| 日本成a人v网站在线观看| 九九热精品| 亚洲精品乱码久久久久久蜜桃麻豆| 国产99精品一区二区三区免费| 麻豆区99999| 男人亚洲天堂| 日韩欧美亚洲国产日韩| 91中文字幕制服丝袜免费视频| 探花一区在线| 亚洲日本大香蕉1| 留下AⅤ黄色片| 色欧美色交综合| 日本日皮视频逼| 97射欧美| 香蕉久久国产AV一区二区| 亚洲精品 欧美97色色| 免费人成?大片在线播放| 蜜臀av中文字幕| 亚洲国产午夜真人一级片中文字幕精品黄网站 | 欧美夜夜狠| 色婷婷一区二区三区久久| 婷婷丁香六月| 欧美第一页| 中文字幕片| 在线综合 亚洲 欧美中文字幕| 大香蕉99热| 国产 日韩 欧美高清 | 国产成人网站在线观看| 农村少妇久久久久久久| 小少妇| 天天视频黄| 91久久堂| 婷婷亚洲综合| 久久久久久久人妻丝袜| 成人AV素股で擦久久| 一本色道久久天天射天天干| 久偷拍欧美日韩三区| 久久久久久AⅤ无码免费肉站| 日韩精品三级| 国产精品小视频一区二区三区| 人人人摸人人| …中文字幕亚洲乱,97人妻无码费视… | 手机看片1024你懂的国产| 午夜噜噜噜| 香蕉99秘 精品一区丁香| 91P0RNY大屁股人妻| 亚洲图片 激情小说| 久操不卡视频| a片在线播放| 一区二区亚州激情久婷婷欧美| 九九综合久久| 一级二级三级黑人无码| 成人日本片久久久蜜桃| 日本伦理一区二区| 91人妻尻屄视频| 国产美女高潮| 一区超碰一区| 国产传媒1234区| 毛片电影一区二区三区| 欧美极品美女aaaaaa级黄片| 久久9精品网站| 超碰在线974| 综合色啪| 岛国网址国产 | 超碰成人国产| 超碰国产精品无码| 97资源亚洲| 精品国产久久乱码| 欧洲Au麻豆| 国产97色在线| 一级aaaaa欧美中文字幕录像片| 熟女精品日韩一区二区三区| 九九九九九九视频| 淫色网综合| 五月天大香蕉| 日本在线播放不卡一区| 国产精品久久久久久久AV大片| 精品人妻一区二区三区不卡断| 色大师网站www永久网站视频| 囯产精品一区二区三区线|亚洲人成无码网WWW动漫|国产精品免费一级... | 久久 国产 无码| 婷婷激情四射| 国产97综合| silk lablo在线观看一区二区| 日韩人体偷拍| 东京热亚洲一区二区| 亚洲av影院在线观看| 国产亚洲性生活视频播放| 夜夜精品视频| 97亚洲色图| 天天干夜夜操一区二区| 少妇色综合| 欧美aⅴ99久久黑人专区| 日本天天人人狠狠在线日美女 | 啊好爽受不了无码| 欧美亚洲国内自拍| 色五月亚洲| 婷婷伊人网| 大香蕉黄色一区| 久久性爱大全| 国产黄色av大片网站| 自拍偷拍 高清无码| 久久91视频| 日韩操逼HD| 欧美一区二区三区入口| 日日噜噜夜夜狠狠视频无| 18啪啪手机免费性爱| 欧洲欧美视频一区二区| 在线综合 亚洲 欧美中文字幕| 麻豆国产精品午夜视频| 精品无码一区二区三区| 国产精品久久久久久高清无码免费看| 91丨国产丨白浆秘 洗澡动漫| 97在线免费视频| 中文字幕国产在线天堂| 国产在线视频午夜精华在| 亚洲综合影院| 性色av大全| 亚洲精品人妻在线| 天天天天天天天天天天干美女| 日韩欧美一级特黄大片| 怡红院一区二区熟女人妻| 激情综合二| 女人高潮大叫一级毛片| 大香蕉九九| 操九九九九九九| 大香蕉在线免| 日韩特一级久久| 超碰诱惑| 欧美日韩*字幕一区| 三级色综合| 一级A啪啪啪啪| 欧美亚洲丝袜人妻制服99| 99啪| 亚州综合色图| 亚洲熟妇白浆无码AV| 午夜在线播放| 一级一性爱免费视频| 99老司机精品视频在线观看| 成人性爱全视频观看| 一区二区娱乐网站| 久久久中文| 激情五月天丁香| 毛片17S| 午夜精品久久久久久久| 欧美草草| 老司机香蕉久久久久| 9久久久久| 美国一区二区三区视频| 91久久久久免| 成人黄页| 日夜伊人网| 丝袜人妻av一区二区| 国产女生在线| 老外又粗又长一晚做五次| 久草精品一区| 曰韩欧美国产传媒麻豆第一区| 久久的网站啊啊啊啊啊| 99热国产| 日韩无码视频黄色| 操操啪| 免费成人在线熟妇网| 男女啊啊啊| 国产区91柔拿会所技师| 天天操天天射青青草| 欧美黑人91| 99久久精品欧美国产| 免费观看啪视频| 人妻 欧美 中文| 另类图片综合| 99爱爱| 97精品97久久| 91视频伊人| 日韩一级二级| 麻豆一区二区三区在线看| 日本色色视频网站| 人人妻人人操人人乐| 综合熟妇一区二区三区| 中文字幕一区二区在线日韩精品| 9久综合网| 青青操在线视频| av日韩在线观看电影| 精品一区二区麻豆| 一级一性爱免费视频| 激情五月综合| 97操97干| 91性高潮久久久久久久久| 天天操天天看| 欧美αv.com| 国产美女精品| 日本一区二区三区午夜观看| 北京专精特新企业招聘信息| 亚洲天堂资源网| 九九在线视频| 蜜臀一区二区三区亚洲最新章节在线观看 - 高清蜜臀一区二区三区亚洲全集播放 | 美女刺激久久国产欧美| 精品丰满熟妇人妻一区| 福利在线黄片| 色综合 加勒比| 在线精品福利免费播放| 少妇高潮喷水无套久久久久久| 性爱免费视频成人| 综合97久久| 亚洲国产午夜真人一级片中文字幕精品黄网站 | 国产免费久久精品99re韩国| 伊人久久综合影院精品久久久| 久久久不能久久久久| 亚洲高清视频在线免费观看| 久久久久久久久久久97| 亚洲人妻中文在线视频| 青青操在线亚洲视频观看欧美在线 | v91av| 麻豆黄色五月天| 97AV爱| 激情文学88| 麻豆乱码久久精| 大香蕉视频一二三区| 成人十八禁日韩欧美一二三| 亚洲精品官网在线观看| 久久精品综合| 一区二区日韩欧美久久| 国产强奸乱伦无码视频| 欧洲亚洲人妻无码中字久久三区四区 | 高清无码一区二区三区| 91欧美性| 色墦五月丁香| 麻豆国产精品午夜视频| 97伪v| 婷婷色中文字幕| 国产精品高潮久久久无码| 激情欧美日韩女同久久| 人人射人人操人人摸| 国产精品久久久久久久久久久久久久吹 | 日韩欧美中文日韩欧美色| 日韩欧美~中文字| 欧美黑人性猛交91| 国产99精品一区二区三区免费| 99这里都是精品| 91久久精品蜜臀| 日韩无码操逼片| 91蜜臀人妻中文字幕在线| 亚洲色图久久成人| 四虎影视永久在线免费| 三及片网站| 99www.bibizy香蕉资源国产一区二区三区高清| 伊人久久综合精品欧美| 欧美碰碰综合色| 青青草乱入乱欲视频在线观看| 无码抄逼网| 黄色免费网| 9美女超碰在线免费观看| 男人的天堂.com| 午夜福利成人免费视频| 97无码视频在线播放| 狠狠躁久久躁| 岛国人妻少妇av在线观看| 久久精品99| 欧美精品成人在线播放| 91老熟妇| 色香网| 国产久久一区二区| 人妻精品综合中文字幕在线| 亚洲AV永久无码一区仙野| 日韩免费福利在线观看| 欧洲精品二区| 99热国产精品| 亚洲大色堂| 九九九九九九九九九九九免费国产| 日韩精品黄片免费观看| 亚欧无码线免费观看视频| 淫纸中9区| 久久久久久久久久久久久女过产乱-少妇高潮一区二区三区喷水-成人AV | 久久国色天香香蕉| 大香蕉综合网| 综合自拍| 黄色网址在线免费观看| 国产精品高清2021在线| 亚洲情欲| 欧美97色| 水滴偷拍| 成人三级片无码| 老司机天天操| 9丨亚洲一区二区在线| 99无码狠狠久久| 诱惑网综合| 农村少妇久久久久久久| 亚欧美色图| 久久是精品| 欧美黑人91| 色悠久久久av| 日本最新1区2区3区| ai欧美亚洲小说| 超碰综合色| 午夜精品久久久久| 欧美72网页| 牛牛久久国产精品视频一二三| 亚洲av热热色| 天天日天天射天天干| 日日AV加勒比| 精品小视频在线| 久久精品夜色国产亚洲AV| 青青草在线视频欧美| 麻豆AV96熟妇人妻| 最新中文字幕av| 国产十八禁视频| 国产一区二区在线播放,久久亚洲精品中文字幕第一区,亚洲精品在线中文字幕视频 | 亚洲综合骚逼| 激情综合网一盗摄| 97jingpin| 老鸭窝成人| 91高清欧美| 天天干人人乐| 久久大黄片| 少妇一级无码精品| 久久久久久电影| 日韩三级天堂在线观看| 国产成人精品日本亚洲语言| 99re久久| 97国产精品国| 91性高| 草B在线| 另类图片天天影视| 亚洲欧美色图小说| 中文字幕中文字幕一区二区| 人人做人人妻人人夜视频| 亚洲欧美经典一区二区| 中文字幕人妻丝袜| 97天天做| 日本国产二线女色| 97色亚洲| 先锋色眉乱伦资源| 久久五月婷| 亚洲日韩青青草色月| 锕锕好爽 死我在线观看| 91精品丝袜久久久久久| A级片一区| 欧美经典一区二区三区| 91丨九色丨国产打屁股| 色狠狠综合噜一二三区| 欧洲精品欧洲精品| 99999国产精品| 国产特级毛片AAAAAA高潮流水 | 天天做天天爱| 操操操操网黑人| 91N综合网| 国产精品网站www| 国产风韵犹存熟妇三区| 欧美中文字幕精品人妻| 中文字幕中文字幕一区二区| 久久五月天婷婷| 国产亚洲欧洲在线观看| 老熟女综合网| 中文字幕国产| 欧美成人9797| 亚洲日本大香蕉1| 日韩福利综合一区| 久久曰曰| 青青三级视频| 男啪女色黄无遮挡免费观看| 亚洲古典另类欧美在线| 久久嫩草国产成人一区| 欧中美三级一区二区三区| 日韩免费福利在线观看| 97人人干| 伊人96在线| 国产精品成人久久一区二区三区 | 风月影院十八禁| 久久久夜夜嗨免费视频| 亚州春色| 2021国产成人精品久久| 五月婷婷丁香| 青青草无码视频| 人人干黄色| 日韩美脚一区二区网站| 亚洲激情欧美色图| 亚州免费啪啪视频| 伊人成人情色综合| 亚洲综合第一页| www.99在线| 99热99re6国产在线播放| 成人乱人伦一区二区| 嗯嗯啊啊啊好舒服| 色悠久| 亚洲中文字幕噜噜噜久久久| 国产97/欧美| 福利在线黄片| 啊啊啊啊好大好硬啊啊啊啊啊| 97资源视频| 亚洲熟妇无码一区二区三区| 男人的午夜天堂| 91狠| 97天天摸天天爽| 久久久一级| 亚洲天天更新| 无码9区| 97免费在线观看视频| 丁香六月激情综合| 久久日韩肥臀| 五月婷婷丁香六月| 丰满人妻-区二区三区| 天天日天天色| 亚洲天天更新| 97国产色综合| 国产精品懂色tv影视免费观看| 91 在线亚洲| 欧美精品宗合| 天堂国产AV| 免费一级a毛片久久久久久鸭绿欲| 亚洲永久永久永久永久一级一级一级精品| 尤物视频视频官网| 日han少妇无码| 懂色av色欲av蜜臀av| 天天色怡春院| 蜜乳AV网址| 青青草色AV| 婷婷久草一区二区三区| 少妇综合| 日韩懂色网| 亚洲 一区二区 自拍| 羞答答AV中文字| 久久综合五月天| 黄色视频高清无码网站| 久热精品色情| 一本一道波多野毛片中文在线| 4虎在线视频| 大香蕉五月天| 亚洲精品97| 啊啊啊啊在线观看网址| 色婷婷激一区二区三区| 欧美日韩系列| 久久极品伊人| 国内精品a| 91久久精品美女高潮喷水| 天天日天天舔| 少妇厨房愉情理伦片bd在线观看 | 日韩黄色一区二区三区| 青青操在线视频| 久久9久9久99久9久9| 伊人久久综合精品欧美| 99草精| 老熟女区| 在线小说视频一区| 中文字幕 人妻不满 在线视频| 美女裸体无遮挡永久免费观看网站| 伦在线97| 亚洲男人天堂Av| 日逼逼免费看| 男人的天堂VA| 日日A∨| 日本色婷婷| 色黄色美女大长腿午夜视频| 男人天堂2019| 99热 按摩 日韩| 天天日天天操心| 亚洲三区视频| 国产97免费视频| 蜜屁Av| 大香蕉碰| 午夜久久无码1000合集| 欧美不卡五十路| 天美传媒精品久久视频| 欧美美女在线高潮999| 欧美一区二区亚洲天堂| 性饥渴少妇av无码毛片| 成人草草视频| 美女AV一区二区| 久久色人体| 桃花色涩综合影院| 十八禁av无码免费网站APP| 熟女精品日韩一区二区三区| 伊人少妇久久久| 天天综合欧美综合| 思思热在线观看| 国产激情av女片自拍| www.99色| 亚洲日韩国产精品| 超碰欧美COM| 嗯嗯嗯啊啊啊干死我吧| 亚洲不卡不卡中文字幕不卡| 久99视频| 殴美大黄片| 福利操逼| 日韩性爱免费观看视频| 亚洲色图欧美| 久久有码视频| 一级免费精品| 色臀aV| 激情视频一二三| 99re只有精品| 91丝袜美腿网站| 超碰人人乐97| 92福利社视频| www.狠狠操| 色色色欧美| 久久露脸国产老熟女| 国产又大又硬又长又粗| 日韩av不卡在线看| 涩综合导航| 99亚洲国产精品色一区二区三区| 国产精品福利视频| 啊啊啊好舒服视频| 欧美se综合| 黑人在线91| 蜜臀久久久99久久久久 | 成人性爱电影一区二区| 欧美日韩国产高清在线一二三区| 日本十八禁免费看污网站| 国产不良强奸视频免费看| 人妻9117c| 91露脸熟女专区| 高清国产精品无码| 欧美午夜视频免费观看| 草草影院最新网址| 巨爆乳一区二区爆乳区| 人人操肉肉| 欧美日本国产日韩激情视频| 国产日韩欧美亚洲精品95| 美女极品一区二区三区| a级成人毛片免费视频高清| 亚洲美女自拍偷拍视频| 成人三级片无码| 久/久精品99看9| 麻豆久久视频在线地址| 色呦呦、国产精品| 午夜精品久久久久久久99热影院 | 精品伊人久久久大香线蕉小说|