免费国产精品自在自线-91精品国产色综合久久久浪潮-99热久久免费频精品-国产精品国模在线观看-久久亚洲国产精品成人?V秋霞-久久国产一级A片免费播放-亚洲国产欧洲综合97久久-久久国产白嫩美女呻吟高潮

ARTICLE DETAIL

資訊詳情

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

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

QT集成SOEM實(shí)現(xiàn)EtherCAT主站:從編譯到運(yùn)動(dòng)控制實(shí)戰(zhàn) 1. 為什么是QT加SOEM一個(gè)老牌主站庫(kù)的二次生命力做嵌入式上位機(jī)開發(fā)這些年我踩過不少協(xié)議棧的坑最后在EtherCAT主站這個(gè)方向上SOEMSimple Open EtherCAT Master是我目前最推薦用來搭配QT做上位機(jī)的一套組合。原因很簡(jiǎn)單SOEM是開源庫(kù)代碼量適中移植性極強(qiáng)而且它不依賴Linux內(nèi)核補(bǔ)丁——這意味著你可以輕松地在Windows、Linux、甚至RTOS上跑起來而QT恰好又是跨平臺(tái)界面開發(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é)議?!焙脡闹苯記Q定了整個(gè)運(yùn)動(dòng)控制系統(tǒng)的實(shí)時(shí)性和穩(wěn)定性。SOEM最初是由德國(guó)的一家自動(dòng)化公司貢獻(xiàn)給開源社區(qū)的后來被納入了IgH的生態(tài)體系??赡苡腥藭?huì)問既然IgHEtherLab那么有名為什么不去用IgH我的實(shí)測(cè)體會(huì)是IgH功能雖然全但它是基于Linux內(nèi)核模塊實(shí)現(xiàn)的驅(qū)動(dòng)模型復(fù)雜編譯和加載都要在內(nèi)核態(tài)完成而且每次內(nèi)核升級(jí)都要重新編譯這對(duì)很多做產(chǎn)品的人來說是件很頭疼的事情。SOEM則完全是用戶態(tài)的庫(kù)API簡(jiǎn)潔編譯出來就是一個(gè)靜態(tài)庫(kù)或者動(dòng)態(tài)庫(kù)QT工程里直接引用就行開發(fā)效率高得多。還有一點(diǎn)很關(guān)鍵SOEM對(duì)嵌入式平臺(tái)的適配相當(dāng)好。我試過STM32MP1、i.MX8M Plus、瑞薩RZ/G2L這些平臺(tái)SOEM都能很好地跑起來。對(duì)于需要做HMI人機(jī)界面的項(xiàng)目比如點(diǎn)膠機(jī)、貼片機(jī)、機(jī)器人控制柜QT畫界面SOEM跑實(shí)時(shí)通信這套架構(gòu)在生產(chǎn)線上已經(jīng)經(jīng)過了大量驗(yàn)證。這篇文章我就從頭到尾梳理一遍從庫(kù)的編譯到QT工程的集成再到實(shí)際應(yīng)用中的關(guān)鍵細(xì)節(jié)和踩坑記錄幫助大家少走彎路。2. SOEM主站協(xié)議庫(kù)的架構(gòu)與核心機(jī)制2.1 主站協(xié)議棧的分層思想理解SOEM之前先得理解EtherCAT主站協(xié)議棧的層次劃分。EtherCAT的通信模型其實(shí)很簡(jiǎn)潔主站發(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庫(kù)這一層是平臺(tái)相關(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)都封裝在里面。對(duì)于多線程應(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的定位差異很多人一上來就會(huì)問SOEM和IGH到底選哪個(gè)我個(gè)人的結(jié)論是如果追求絕對(duì)最高的實(shí)時(shí)性并且團(tuán)隊(duì)有Linux內(nèi)核開發(fā)能力項(xiàng)目周期長(zhǎng)那IGH確實(shí)可以做得很極致。如果追求快速落地、跨平臺(tái)、嵌入式友好尤其是要搭配QT做上位機(jī)/觸控屏那么SOEM絕對(duì)是性價(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在百微秒級(jí)別的周期控制中完全夠用。對(duì)于絕大多數(shù)使用EtherCAT的場(chǎng)景——伺服周期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ū)動(dòng)這些狀態(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對(duì)象字典。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庫(kù)3.1 源碼準(zhǔn)備與CMake構(gòu)建SOEM的源碼托管在GitHub上倉(cāng)庫(kù)地址是OpenEtherCATsociety/SOEM。建議不要直接下載master分支的代碼而是選擇一個(gè)穩(wěn)定的release標(biāo)簽版本目前我常用的是1.4.0版本這個(gè)版本在ARM平臺(tái)和x86平臺(tái)上的測(cè)試都比較充分。源碼下載回來之后解壓到本地目錄SOEM本身采用CMake構(gòu)建系統(tǒng)這也是它能輕松集成到QT工程的前提之一。在Linux平臺(tái)下構(gòu)建過程很簡(jiǎn)單mkdir build cd build cmake .. make sudo make install但這里有幾個(gè)細(xì)節(jié)需要注意。默認(rèn)的CMake配置會(huì)生成動(dòng)態(tài)庫(kù)和示例程序如果你想得到一個(gè)精簡(jiǎn)的靜態(tài)庫(kù)用于嵌入式平臺(tái)可以在cmake時(shí)加上參數(shù)cmake -DBUILD_SHARED_LIBSOFF -DSOEM_BUILD_TESTSOFF -DSOEM_BUILD_EXAMPLESOFF ..這樣得到的就是一個(gè)純凈的libsoem.a靜態(tài)庫(kù)體積很小適合直接丟到嵌入式ARM的交叉編譯工具鏈里面去鏈接。SOEM支持兩種構(gòu)建方式一種是在主機(jī)上編譯然后通過交叉編譯工具鏈重新構(gòu)建另一種是直接把SOEM源碼加入QT工程一并編譯。對(duì)于產(chǎn)品化項(xiàng)目我更推薦后者理由后面細(xì)說。3.2 Windows平臺(tái)上的編譯特殊性Windows平臺(tái)下編譯SOEM會(huì)比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í)測(cè)下來MSVC2019配合Npcap是最穩(wěn)定的組合MinGW環(huán)境下偶爾會(huì)出現(xiàn)頭文件找不到的情況解決辦法是手動(dòng)把Npcap的Include目錄和Lib目錄加進(jìn)工程文件。3.3 引入QT工程的兩種姿勢(shì)把SOEM用到QT工程中主要有兩種方式。第一種是把SOEM編譯成靜態(tài)庫(kù)然后在QT的.pro文件里通過LIBS 來引用。這種方式的優(yōu)點(diǎn)是工程結(jié)構(gòu)清晰QT只負(fù)責(zé)界面和業(yè)務(wù)邏輯SOEM作為獨(dú)立的庫(kù)存在缺點(diǎn)是當(dāng)你想修改SOEM源碼時(shí)需要單獨(dú)編譯庫(kù)。第二種方式是把SOEM的全部源文件soem/目錄下直接加入到QT工程中參與整體編譯。這種方式對(duì)源碼的調(diào)試非常方便打斷點(diǎn)直接就能進(jìn)入SOEM的內(nèi)部函數(shù)對(duì)于想深入學(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ù)平臺(tái)調(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也會(huì)跟著交叉編譯到目標(biāo)平臺(tái)完全不用手動(dòng)維護(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; // 請(qǐng)求切換到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è)從站信息會(huì)填充到全局?jǐn)?shù)組ec_slave[]中每個(gè)元素的eep_id、eep_man、eep_rev這些字段存儲(chǔ)的就是從站的Vendor ID、Product ID等信息。ec_config_map(IOmap)這個(gè)函數(shù)是理解EtherCAT從站映射的關(guān)鍵它會(huì)為每個(gè)從站計(jì)算PDO的映射關(guān)系返回所有從站輸出和輸入數(shù)據(jù)占用的總字節(jié)數(shù)。IOmap這個(gè)緩沖區(qū)就是你接下來讀寫過程數(shù)據(jù)的“舞臺(tái)”。4.2 理解Vendor ID與從站配置的坑在調(diào)試新從站時(shí)很多人會(huì)遇到一個(gè)“詭異”現(xiàn)象從站明明被掃描到了但狀態(tài)始終切不到OP。這時(shí)大概率是從站的配置信息不完整尤其是FMMU映射出了問題。FMMUFieldbus Memory Management Unit是EtherCAT從站內(nèi)部用來把過程數(shù)據(jù)映射到本地地址的機(jī)制SOEM在ec_config_map時(shí)會(huì)按EEPROM里的配置自動(dòng)設(shè)置但是如果從站的EEPROM沒有燒錄或者配置錯(cuò)誤映射就會(huì)失敗。這時(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í)廠商會(huì)把這些信息寫好。但如果是自己開發(fā)的從站比如基于LAN9252或者AX58100的板子在初次調(diào)試時(shí)就要特別留意很多從站不支持自動(dòng)配置FMMU必須在上位機(jī)中顯式地設(shè)置PDO的映射參數(shù)。這種情況下光靠SOEM的自動(dòng)映射是不夠的你可能需要直接操作ESC寄存器來手動(dòng)配置。一個(gè)我非常推薦的做法是在正式控制邏輯之前先打印所有從站的輸入輸出長(zhǎng)度和映射地址確認(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)目中會(huì)為每個(gè)從站定義一個(gè)結(jié)構(gòu)體再把這些結(jié)構(gòu)體按映射順序重疊到IOmap中。比如常見的伺服驅(qū)動(dòng)器通常使用CiA402協(xié)議控制字Controlword、狀態(tài)字Statusword、目標(biāo)位置Target Position和實(shí)際位置Actual Position這些對(duì)象都是標(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)體成員訪問那么簡(jiǎn)單。比如要讓1號(hào)伺服進(jìn)入位置模式并開始運(yùn)動(dòng)我只需要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)必須成對(duì)調(diào)用并且建議在一個(gè)獨(dú)立的實(shí)時(shí)線程中以固定周期循環(huán)調(diào)用。發(fā)送函數(shù)構(gòu)造報(bào)文接收函數(shù)解析從站反饋兩者的間隔通常在幾十微秒以內(nèi)超時(shí)會(huì)返回EC_ERR。為了監(jiān)控通信質(zhì)量我習(xí)慣在接收之后檢查返回值如果在連續(xù)多個(gè)周期內(nèi)返回錯(cuò)誤就觸發(fā)報(bào)警。4.4 從站狀態(tài)切換的狀態(tài)機(jī)封裝從站從啟動(dòng)到進(jìn)入OP狀態(tài)中間要經(jīng)歷多次狀態(tài)切換每一次切換都要給從站留出足夠的時(shí)間去處理郵箱通信和PDO配置。SOEM官方示例中的方式比較初級(jí)只是簡(jiǎn)單地把目標(biāo)狀態(tài)寫進(jìn)ec_slave[0].state然后調(diào)用ec_writestate而實(shí)際項(xiàng)目中每臺(tái)從站的狀態(tài)切換速度不一樣尤其是一些復(fù)雜的伺服驅(qū)動(dòng)器可能需要幾百毫秒才能完成參數(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會(huì)在ec_slave[i].ALstatuscode中給出具體原因常見的有AL狀態(tài)碼含義處理建議0x0012無效的郵箱配置檢查SMSyncManager配置0x0013無效的PDO映射檢查PDO映射并重新配置0x0014同步錯(cuò)誤檢查DC時(shí)鐘配置0x001E從站本地錯(cuò)誤查看從站手冊(cè)確認(rèn)錯(cuò)誤來源有了這個(gè)等待函數(shù)切OP之前的流程就清晰可查了先切Pre-Op然后寫入PDO映射再切Safe-Op最后切Op。每一層都能驗(yàn)證。5. 分布式時(shí)鐘與同步讓多軸動(dòng)得整齊劃一5.1 為什么需要同步EtherCAT最吸引人的地方之一就是它的分布式時(shí)鐘Distributed Clock簡(jiǎn)稱DC。如果沒有DC同步總線上每個(gè)從站都是按照各自的晶振節(jié)拍來采樣和輸出晶振的頻率誤差雖然不大但累積到一定時(shí)間就會(huì)導(dǎo)致軸與軸之間出現(xiàn)明顯的偏移。在高精度的運(yùn)動(dòng)控制場(chǎng)合這種時(shí)間偏差會(huì)直接表現(xiàn)為軌跡跟隨的抖動(dòng)。DC的原理簡(jiǎn)單來說就是第一個(gè)具有DC功能的從站作為參考時(shí)鐘主站周期性發(fā)送時(shí)鐘同步報(bào)文其他從站讀取參考時(shí)鐘的時(shí)間戳并通過本地時(shí)鐘補(bǔ)償算法來校準(zhǔn)自身的本地時(shí)間。這樣一來所有從站的采樣時(shí)刻就對(duì)齊到了同一個(gè)時(shí)間基準(zhǔn)上。SOEM對(duì)DC的支持很到位在ec_config_map之后只需要調(diào)用以下幾個(gè)函數(shù)就可以完成DC初始化ec_configdc();這個(gè)函數(shù)會(huì)自動(dòng)檢測(cè)從站的DC能力并對(duì)有DC功能的從站進(jìn)行時(shí)鐘同步設(shè)置。如果總線上混合了有DC和無DC的從站SOEM會(huì)以第一個(gè)支持DC的從站的時(shí)鐘作為參考也就是所謂的SYNC0事件由DC0來觸發(fā)。5.2 周期同步與SYNC信號(hào)在實(shí)際項(xiàng)目中伺服驅(qū)動(dòng)器的位置環(huán)、速度環(huán)甚至電流環(huán)都需要依賴從站的SYNC事件來觸發(fā)。SYNC事件是DC時(shí)鐘在到達(dá)預(yù)設(shè)時(shí)刻時(shí)生成的硬件中斷信號(hào)驅(qū)動(dòng)內(nèi)部的數(shù)字信號(hào)處理器DSP會(huì)響應(yīng)這個(gè)中斷進(jìn)行采樣和計(jì)算。也就是說周期控制的精度直接取決于DC同步鏈路的質(zhì)量和SYNC信號(hào)周期的設(shè)置。在SOEM中可以通過ec_dcsync0來設(shè)置SYNC0的周期和偏移// slaveIndex為參考從站索引 // cycleTimeNs為周期時(shí)間單位是納秒 // shiftTimeNs為偏移時(shí)間 ec_dcsync0(slaveIndex, TRUE, cycleTimeNs, shiftTimeNs);例如對(duì)于1ms的控制周期ec_dcsync0(1, TRUE, 1000000, 0);這里有一個(gè)心得SYNC0的偏移時(shí)間不要一律設(shè)置為0。在總線上有多個(gè)從站時(shí)如果所有從站都在同一個(gè)時(shí)間點(diǎn)觸發(fā)SYNC可能會(huì)造成總線上瞬時(shí)電流峰值過大尤其在伺服驅(qū)動(dòng)器的使能瞬間。通常我會(huì)把偏移時(shí)間錯(cuò)開幾十微秒讓各驅(qū)動(dòng)器的采樣點(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)毫秒級(jí)的漂移那就要檢查參考時(shí)鐘從站的選擇是否正確或者從站之間的線纜連接是不是接觸不良。還有一點(diǎn)容易被忽略如果總線上有非DC能力的從站它的報(bào)文轉(zhuǎn)發(fā)延遲會(huì)對(duì)DC同步產(chǎn)生可見的影響這種情況下盡量把DC參考點(diǎn)設(shè)在離主站最近的DC從站上或者調(diào)整DC偏移參數(shù)來補(bǔ)償。同步是所有運(yùn)動(dòng)控制系統(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)一旦被長(zhǎng)時(shí)間阻塞界面就會(huì)卡死這是絕對(duì)不可接受的。正確做法是把EtherCAT周期通信放在一個(gè)單獨(dú)的實(shí)時(shí)線程中用信號(hào)槽機(jī)制與界面線程通信。在設(shè)計(jì)這個(gè)框架時(shí)我會(huì)把功能分成三層界面層負(fù)責(zé)顯示狀態(tài)、接收用戶輸入比如目標(biāo)位置、速度完全不接觸任何EtherCAT API??刂茖右粋€(gè)獨(dú)立的QThread運(yùn)行周期通信循環(huán)調(diào)用SOEM的收發(fā)函數(shù)并維護(hù)一個(gè)簡(jiǎn)化的狀態(tài)機(jī)。數(shù)據(jù)層定義好控制指令和反饋數(shù)據(jù)的結(jié)構(gòu)體用互斥鎖或者隊(duì)列在控制層和界面層之間傳遞數(shù)據(jù)。對(duì)于運(yùn)動(dòng)控制系統(tǒng)我通常定義一個(gè)EtherCATWorker類繼承自QObject并把它移動(dòng)到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平臺(tái)還可以配合timerfd或者clock_nanosleep這些實(shí)時(shí)接口。6.2 跨線程數(shù)據(jù)傳遞不丟不重在EtherCATWorker中更新的伺服位置、狀態(tài)字等數(shù)據(jù)界面需要實(shí)時(shí)刷新。直接用普通成員變量跨線程讀寫有數(shù)據(jù)競(jìng)爭(zhēng)的風(fēng)險(xiǎn)用QT信號(hào)槽傳輸又可能出現(xiàn)高頻下的丟包或延遲。我的做法是在Worker內(nèi)部用三個(gè)環(huán)形緩沖區(qū)分別存儲(chǔ)位置、狀態(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ā)信號(hào)刷新的通知 emit dataRefreshed(); // 周期節(jié)拍控制 } }界面端的刷新槽函數(shù)只需要加鎖拷貝數(shù)據(jù)然后更新控件即可。這樣的設(shè)計(jì)下不管界面刷新頻率快慢底層通信都不會(huì)受到影響。當(dāng)然有人會(huì)說直接用emit positionUpdated(axis,pos)不是更簡(jiǎn)單嗎在軸數(shù)少、通信周期慢的場(chǎng)景下確實(shí)夠用但是在16軸甚至32軸、1ms周期的系統(tǒng)里高頻信號(hào)的發(fā)射和槽函數(shù)的調(diào)用會(huì)引入不必要的線程切換開銷。環(huán)形緩沖區(qū)加通知信號(hào)的方案在這類場(chǎng)景下明顯更穩(wěn)。6.3 日志記錄與在線升級(jí)產(chǎn)品化的系統(tǒng)不能只跑通就完事。我們需要日志來追蹤異常需要OTA升級(jí)能力來修復(fù)現(xiàn)場(chǎng)問題。SOEM的FOEFile over EtherCAT協(xié)議可以在EtherCAT總線上傳輸文件最常見的就是給從站升級(jí)固件。SOEM提供了ec_foe_write和ec_foe_read函數(shù)使用起來很直接uint32_t err ec_FOEwrite(1, filename, password, buffer, size, timeout);返回值為0代表成功非0值則是從站返回的錯(cuò)誤碼。在給伺服驅(qū)動(dòng)器升級(jí)固件時(shí)注意事項(xiàng)比較多升級(jí)前必須確保從站處于Pre-Op狀態(tài)過程數(shù)據(jù)交換要暫停升級(jí)期間不要斷電??偩€上多個(gè)從站升級(jí)時(shí)務(wù)必一臺(tái)上完再切下一臺(tái)絕不能“并發(fā)”。日志方面QT的qInstallMessageHandler可以把運(yùn)行日志同時(shí)輸出到控制臺(tái)、文件和網(wǎng)絡(luò)配合SOEM的通信錯(cuò)誤返回值記錄這樣現(xiàn)場(chǎng)如果出了問題能快速定位是通信鏈路問題還是控制邏輯問題。我見過太多項(xiàng)目因?yàn)槿鄙偃罩粳F(xiàn)場(chǎng)調(diào)試像大海撈針一樣。7. 實(shí)戰(zhàn)中的常見問題與排查技巧7.1 網(wǎng)卡選型與實(shí)時(shí)性優(yōu)化SOEM跑不好很多時(shí)候問題不出在協(xié)議棧本身而是網(wǎng)卡選錯(cuò)了。EtherCAT主站對(duì)網(wǎng)卡的要求非常嚴(yán)格網(wǎng)卡必須支持接收所有以太網(wǎng)幀混雜模式并且發(fā)送和接收的時(shí)間戳越精確越好。普通消費(fèi)級(jí)USB網(wǎng)卡是絕對(duì)不可用的延遲大還不穩(wěn)定。目前做EtherCAT主站最常用的方案是Intel的I210、I211以及部分瑞昱的千兆網(wǎng)卡芯片。I210因?yàn)橹С钟布r(shí)間戳在DC同步精度要求高的場(chǎng)合幾乎是首選。英特爾的I210網(wǎng)卡成本不算高很多工控主板也直接板載。在Linux下可以通過ethtool -i查看網(wǎng)卡驅(qū)動(dòng)如果是igb驅(qū)動(dòng)那基本上就沒問題了。為了提高通信穩(wěn)定性我還會(huì)做以下幾個(gè)優(yōu)化在多核處理器上把EtherCAT線程綁定到獨(dú)立CPU核心避免線程被系統(tǒng)調(diào)度到其他核上。在Linux下使用chrt命令把實(shí)時(shí)線程設(shè)為SCHED_FIFO優(yōu)先級(jí)保證周期調(diào)度的確定性。關(guān)閉網(wǎng)卡的節(jié)能模式、中斷合并Interrupt Moderation盡量降低報(bào)文延遲。這些優(yōu)化看似不起眼但對(duì)系統(tǒng)的長(zhǎ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)場(chǎng)問題最終都查出來是網(wǎng)線壓接不合格這一段我踩過很多次??偩€末端必須接上終結(jié)電阻否則信號(hào)反射會(huì)導(dǎo)致通信不穩(wěn)定。7.3 從站EEPROM異?;謴?fù)還有一種常見的現(xiàn)場(chǎng)故障從站的EEPROM損壞或者數(shù)據(jù)被意外改寫導(dǎo)致SOEM掃描時(shí)上報(bào)錯(cuò)誤的從站信息甚至根本掃描不到。針對(duì)這種情況SOEM提供了寄存器級(jí)的訪問接口可以強(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)場(chǎng)應(yīng)急時(shí)可以把錯(cuò)誤從站隔離然后重新掃描其他從站至少保證單站故障不拖垮整條線。7.4 QT串口界面卡死與崩潰最后聊一個(gè)很常見的QT層面的坑。很多人在用QT開發(fā)監(jiān)控界面時(shí)習(xí)慣在槽函數(shù)里直接更新表格控件比如QTableWidget的行列變化。但如果數(shù)據(jù)刷新頻率太高控件頻繁重建內(nèi)存碎片化會(huì)導(dǎo)致界面越來越卡甚至直接崩潰。我建議的做法是在界面上使用模型/視圖架構(gòu)Model/View預(yù)先分配足夠大的表格數(shù)據(jù)模型刷新時(shí)只更新數(shù)據(jù)而不重建控件。對(duì)于大量波形類數(shù)據(jù)的監(jiān)控建議用QCustomPlot或QCharts的增量刷新模式而不是整個(gè)圖重繪。如果界面線程和EtherCAT線程之間通過信號(hào)槽傳遞高頻數(shù)據(jù)記得用Qt::DirectConnection連接方式并且信號(hào)參數(shù)用const QByteArray這種隱式共享類型減少拷貝開銷。8. 一個(gè)完整的起步項(xiàng)目單軸伺服的點(diǎn)動(dòng)控制為了讓大家把前面的知識(shí)串起來我給出一個(gè)最簡(jiǎn)單的完整示例QT界面上放一個(gè)按鈕和一個(gè)進(jìn)度條按下按鈕后1號(hào)伺服以固定速度運(yùn)行到指定位置。8.1 界面與業(yè)務(wù)邏輯分離界面很簡(jiǎn)單一個(gè)QPushButton用于觸發(fā)運(yùn)動(dòng)一個(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)動(dòng)控制的骨架就出來了。8.2 防止誤觸發(fā)的安全邏輯控制類軟件里“防止誤觸發(fā)”是必須考慮的功能。我在按鈕槽函數(shù)里加入了一個(gè)鎖定機(jī)制只有從站狀態(tài)都正常、伺服使能成功、急停信號(hào)未觸發(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í)會(huì)忽略急停信號(hào)。實(shí)際上EtherCAT的AL狀態(tài)機(jī)和急停邏輯是兩回事——急停信號(hào)通常通過硬接線接入IO模塊或者伺服驅(qū)動(dòng)器的STOSafe Torque Off端子軟件層面只能檢測(cè)和報(bào)警不能替代硬件的安全功能。這一點(diǎn)必須提醒大家安全回路的設(shè)計(jì)一定不要依賴上位機(jī)軟件這是人命關(guān)天的事情不能有任何僥幸心理。8.3 從簡(jiǎn)單到復(fù)雜的演進(jìn)路線如果你是從零開始接觸這套架構(gòu)我建議的路徑是先跑通官方示例simple_test再用QT封裝一個(gè)單軸點(diǎn)動(dòng)然后擴(kuò)展成多軸聯(lián)動(dòng)最后加入DC同步和FOE升級(jí)。不要一上來就追求大而全否則出了Bug你根本不知道是協(xié)議棧的問題還是自己代碼的問題。單軸跑通之后再嘗試在兩臺(tái)伺服上做同步運(yùn)動(dòng)對(duì)比DC同步開啟和關(guān)閉時(shí)的曲線差異。有了實(shí)際的實(shí)驗(yàn)數(shù)據(jù)你對(duì)EtherCAT的同步機(jī)制才會(huì)有真正的體感。9. 個(gè)人經(jīng)驗(yàn)總結(jié)寫這篇文章的時(shí)候我回想這幾年在EtherCAT主站上走過的彎路最想傳達(dá)的一點(diǎn)是SOEM雖然叫“Simple”但它的內(nèi)部機(jī)制并不簡(jiǎn)單只是把復(fù)雜性封裝得比較友好而已。真正用好的關(guān)鍵還是要把EtherCAT的協(xié)議原理和從站的行為摸透。QT加SOEM這套組合在目前的開源生態(tài)里可以說是“能打”的。QT負(fù)責(zé)跨平臺(tái)的界面、豐富的控件庫(kù)和完善的調(diào)試工具SOEM提供輕量、高效、可嵌入的EtherCAT主站能力兩者疊加無論是做實(shí)驗(yàn)室原型還是量產(chǎn)設(shè)備都有足夠的底子。最后分享一個(gè)很小的技巧在開發(fā)和調(diào)試階段把SOEM的調(diào)試打印打開能看到每個(gè)從站的寄存器讀寫過程對(duì)理解協(xié)議和排查問題幫助極大。SOEM在編譯時(shí)用DEBUG宏來控制這些輸出QT工程中可以在.pro里加一句DEFINES DEBUG來啟用。等你在實(shí)際項(xiàng)目中積累了自己的工具函數(shù)庫(kù)和模板工程之后開發(fā)效率會(huì)飛躍一個(gè)臺(tái)階。希望這篇實(shí)戰(zhàn)指南能幫你把QT加SOEM的框架從編譯到落地完整搭建起來少踩一些我當(dāng)年踩過的坑。
返回列表
PREV
查看更多資訊
NEXT
返回資訊列表
五月丁香美女视频| 情婷婷五月天| 9热在线视频精品| 日日夜夜天天| 五月激情婷婷女| 五月婷色色| 99色在线观看视频者| 亚洲色网址| 亚洲婷婷丁香五月在线| 久久久8| 少妇AB又爽又紧无码网站| 色久五月天| 色~性~乱~伦~噜| 五月天激情美女久久| 激情五月天视频| 综合激情五月丁香| 婷丁五月| 丁香色五月婷婷17C| 一本色道久久综合狠狠躁一二三| 狠狠综合网| 色五月欧美| 五月色无码| 狠狠色大香蕉| 久久999久久999久久999久久| 无码99| 婷婷丁香宗合888| 人人视频色| 99热在线观看免费中文| 激情四射网| 人人操人人爰人人一天天碰夜夜拍夜夜爽-中国A级毛片天天看天天谢… | 色久免费| 婷婷五月花西瓜| 婷婷丁香六月综合激情站| 午夜激情久久| 综合精品99| 国产又爽又猛又粗的视频A片| 爱操人妻| 99在线免费视频| 伊人久久五月天| 五月激情影院| 日韩在线一级| 日日操,夜夜撸| 噜噜在线| 丁香色婷婷五月天| 丁香九月婷婷综合| 国产一级片| 日本天堂免费99| 26uuu欧美日本| 亚洲五月天狠狠| 丁香五月婷婷动漫| 99久久精品视频女神1| 91热er| 成人五月天综合网| 开心五月丁香综合久久| 丁香五月亚洲综合| 91VIP在线观看| 激情婷婷| 九九成人电影婷婷| 一级精品999WWW| 久久婷婷婷| 小色小蛇伊人婷婷色香五月| 日本色色色| 热99国产精品| 99热这里只有精品最新| 六月丁香激情| 99热这里只有精品9| 婷婷激情四射| 色婷婷亚洲在线观看| 国产黄色av| 99啪在线视频| 激情五月天在线观看色婷婷| 亚州日本欧州韩美高青高潮一| 色婷婷丁香五月丁香| 深爱激情四射| 久久精品人妻| 久热婷婷| 亚洲AV无码影院| AV在线免费播放| 久久人操| 色狠狠综合入口| 色色无码| 亚洲乱码日产精品BD| 不卡成人免费| 九九無碼| 丁香五月Av| 女婷久久| 岛囯综合激情网| 69色婷婷| 成人AV在线网站| 懂色AⅤ| 激情六月色| 亚洲操人| 日韩五月婷婷| 婷婷五月情色| 成人在线网| 亚洲无码色| 亚洲av电影在线| 99碰网站| 天天搞天天爽| 1024操逼| 五月婷婷六月丁| 婷婷色情六月| 国产成人精品一区二区三区视频| 99久久99九九九99九他书对| 婷五月天| 五月婷婷香蕉| 色五月xxx| 婷婷丁香五月综合激情小说| 超碰免费在线| 久久婷婷青草五月天| 日韩按摩二区| 亚洲亚洲人成综合网络| 久久狠狠欧美| 99热91| 级人人91| 69婷婷丁香午夜| 天天拍天天操| 伊人久热91| 丁香五月婷婷色五月| 婷婷丁香六月天| 国产精品涩涩涩视频网站| 99热网址| 五月激情小说| 久久中国毛毛片爱久久| 99亚洲无码| 婷婷五月影院| 天天开心婷婷丁香五月| 操91| 看婷婷五月天网| 很很干夜夜干| 九月大香蕉| 五月天三级| 激情五月婷婷综合| 日韩成人综合网| 久久婷婷综合五月趴| 欧美色婷婷| 色婷婷先锋| 日本成人噜噜| 国产亚洲99久久精品熟女| 日韩人妻无码一区二区| 99久久婷婷国产综合精品草原| 三级毛片7979| 九色七七| 久久婷综合| 99久久这里只有精品| 亚洲视频在线网站| 婷婷五月天天aV| 亚洲日韩操B| 熟女激情网| 99综合| 在线网黄| 日本丁香五月| 思思综合热| 少妇高潮呻吟A片免费看软件| 亚洲综合视频在线| 日本色色色| 在线视频99| 五月天色色色色色| 99亚洲天堂| 在线综合亚洲欧美65| 激情五月婷婷免费视频| 婷婷久久五月天| 五月丁香999| 99九九99九九九视频精彩| 五月丁香婷婷钟和色图| 婷婷性爱视频在线| 亚洲最大视频| 色天使色婷婷| 99A片| 亚洲激情婷婷| 五月天深爱激情网| 久99热在线观看| 久婷五月| 亚洲中文乱字字幕在线永久| 男人的天堂五月丁香| 丁香六月婷婷综合| 亚洲天堂AV免费片| 久久蜜臀婷婷| 久久视频这里有精品99| 久久婷婷五月综合色播| 久9精品| 97性视频| a v色婷婷| 婷婷五月天 丁香五月天 裸体| 第一区久久网站| av五月丁香| 婷婷激情六月视频| site:esunnet.com| 99精品偷拍视频| 激情综合网激情五月天| 亚洲天堂AV免费片| 538任你爽视频不一样的| 五月天停婷基地| 99爱视频精品| 婷婷中文字幕网| 婷婷五月天精品| 五月丁香六月激情综合啪啪| 丁香五月开心亚洲| 综合久久五| 欧美成人性爱网| 国产操碰| 2021日韩无码| 热思思九九| 久久久这里有精品| 色五月婷婷丁香婷婷| 日本黄色在线观看| 五月婷婷性爱网| 日本色色图| 男女久久婷婷五月天| 国产精品美女| 六月婷婷最新网址| 久热久69| 五月日韩中文字幕| 26uuu欧美| 激情网婷婷五月天| 久播影院免费观看电视剧大全最新网| 老司机午夜福利视频金瓶梅| 五月婷色色| 婷婷五月18永久免费视频| 大香蕉久久婷婷精品综合| 亚洲激情综合| 婷婷97| 亚洲成人噜噜| 五月丁香花激情综合网| 五月天婷婷色播在线网| 婷婷五月成人有| 色色婷婷色色| 亚洲激情五月| 亚洲天堂有码| www.1024久久| 人操91在线| 天天综合网站| 成人做爰高潮A片免费视频| 国产毛片精品一区二区色欲黄A片| 五月激情综合婷婷| 日韩一区二区三区无码| 色情五月丁香婷婷网| 色蜜婷婷| 国产av基地| 久久男人网婷婷| 最近韩国日本免费高清观看| 久久六月综合| 中文字幕在线免费观看视频| 操日视频| 丁香激情久久| 日本美女上人| 九九大香蕉黄色影院| 五月婷婷乱| 99爱视频精品| 99视频在线| 青青草Avb在线| 婷婷香蕉视频| 在线观看欧美3区| 第九色区av天堂| 欧洲不卡视频| 日韩成人无码人妻| 啪啪啪大香蕉| 狠狠精品干练久久久无码中文字幕| 99热亚洲精品| 婷婷中文无码| 婷婷综合激情| 激情综合五月| 99视频内射三四| 丁香五月性| 综合激情五月天| 激情亚洲婷婷| 99热超碰在线| 亚洲国产精品VA在线看黑人| 狠狠婷婷色| 四LLL少妇BBBB槡BBBB| 99精在线| 久久AAAA片一区二区| 丁香五月婷婷五月| 日本偷拍九九九| 婷婷色狠狠| 色噜婷婷| 黄网免费观看| 欧美婷婷六月丁香综合色连续高潮抽搐| 99精品久久久久久久| 色综合天堂| 五月婷婷啪啪啪| 色综合中文色综合网| 色吊丝永久访问网址| 青青草99热久久精品国| 91九九精品| 久久新| 大香蕉婷婷色| 丁香五月婷婷六月婷| 五月丁六月香av| 日韩久久这里只有精品| 操九色| 丁香婷婷大香蕉| 五月丁香啪啪网| 99热这里只有精品8| 免费无码毛片一区二区A片| 色五月激情五月| 五月丁香A片| 一操久久| 狠狠操天天操| 婷婷六月丁| 五月天色色婷婷| 婷婷精品| 七七色色综合| 色综合开心五月深爱五月| 色小说五月婷婷| 日日夜夜狠狠操| 亚洲网站999| 极品少妇XXXX精品少妇偷拍| 欧美、日韩、中文、制服、人妻| 五月婷婷丁香深深爱| 思思99热这里只有精品6| 激情五月天激情综合网| a网站免费观看| 好叼操在线观看| 婷婷va| 五月天婷基地| 99在线热视频| 久久ri精品| 人妻22p| 91dy.av| 97色啪| 99噜噜噜在线播放| 五月丁香六月婷婷啪啪| 亚洲精品乱码久久久久久综合| 99精品在这里| 中文字幕乱码亚洲精品一区| 久草视频一,二三四| 丁香六月av| 99精品久久| 色狠狠色| 五月Huangsewang| 婷色天堂| 成人Av在线大片| 日本色99| 天天爽天天做| 色欲婷婷五月天| 日本色色网| www超碰com| 99日在线观看视频| 五月色丁香综合| 色婷婷丁香五月天激情综合网| www99热| 婷婷午夜精品久久久| 色情五月综合婷婷| 超碰在线网站9| 五月婷婷五月丁香综合| www激情| 丰满少妇猛烈A片免费看观看| 五月婷婷色综图片| 香蕉人在线香蕉人在线 | 久久五月热| 梁铮版蜘蛛女在线观看| 亚洲色五月| 91丨九色丨熟女| 婷婷天天日婷婷| 亚洲182在线观看| 99热久只有精品首页| 色综合九九色综合88| 五月亭亭色| 97好吊操| 九九色婷婷Av| 狠狠色噜噜色狠狠狠综合久久成人波 | 五月综合色| 亚洲区视频| 色色色99| 美女天天久久| 搡BBBB搡BBB搡18| 日日日,com| 97色碰| 婷婷丁香91| 婷婷丁香人妻天天久久| 91jiuseshunv| 91精品久久久久久久久| 九九亚洲综合| 欧美日韩99| 99热久| 五月婷婷激情综合网| 九月丁香婷婷综合| 99视频精品在线| 99热在线观看免费中文| 青青久在线视频免费观看| 五月天亚洲最大成人| 中文字幕成人| 亭亭社区五月天| a性生活久久无| 99在线小视频| 天天肏夜夜肏| 九八Av| 丁香五月婷婷欧美成人色图| 五月天婷综合| 婷婷五月天在线观看| 色天天综合色| 亚洲成Av人片乱码色第1集| 久久综合人妻| 日韩啪啪视频| 婷婷情色五月| 婷婷五月丁香六月| 欧美五月丁香在线观看| 色吊丝av中文字幕| 蜜桃人妻无码AV天堂三区| 天天做天天要天天爽| 色婷婷五月综合激情中文字幕| 五月婷婷在线观看| 综合网啪啪| 五月丁香六月成人| 可以看的av网站| 熟妇天天综合| 99爱无码| 婷婷丁香激情五月天色色色| 婷婷综合五月色播| 婷婷狠狠干| www.狠狠色.com| 激情内射人妻1区2区3区| 综合五月激情网| 亚洲综合在线播放| av在线播放网站| 婷婷 丁香 精品| 欧美噜噜噜草| 激情婷| 另类视频在线| 天天拍天天操| 婷婷色日本| 大伊香蕉玖玖爱| 鲁鲁色五月| 日日干日日| 狠狠五月激情在线| 超碰资源在线| 亚州成人综合在线| 大香蕉综合| 99久久婷婷五月天| 91精品综合久久久久久五月丁香| 99超级超级超级碰| 丁香五月av| 婷婷激情性爱| 五月丁香综合激情网| 婷婷五月丁香av网站| 久久婷鲁| av亚洲国产小电影| 色色色网站| 成人婷婷| 婷婷激情图片| 色六月视频| 丁香五月中文字幕| 狠狠色婷婷丁香五月| 婷婷大香蕉| 超碰人人91| 手机免费福利视频| 久久亚洲婷婷| 艹| 色五月婷色彩免播放器| 久久激情天堂| 蜜桃婷婷狠狠久久综合| 婷婷丁香五月天熟女丝袜| 婷婷久久综合久| 免费观看亚洲AV片| 免费97碰碰| 五月天婷婷丁香社区| 天天综合干| 大香蕉综合在线| 伊人五月综合网| 天天碰夜夜操| 婷婷色资源| 无码人妻AV久久久一区二区三区| 色婷婷丁香五月| 九九AV在线| 九九热视| 九九热re99re6在线精品| 插插干干干色| 五月天激情AAAA| 六月亚洲婷婷6月中文字幕| 99在线视频精品| 色婷婷综合丁香五月天| 色爱综合五月| 丁香五月婷婷五月| 99伊人性爱在线影院| 五月婷丁香久久综合| 六月丁香AV| 综合久久五| 男同91| 久久99热网| 国外亚洲成AV人片在线观看| 六月丁香啪| 五月丁香亭亭A片| 九月色婷婷综合亚洲| 久久久久久久久月丁| 婷婷九月久久| 综合性爱网| 婷婷综合97| 99爱爱| 97人人搞| www.伊人天堂偷偷婷婷| 天天日天天做天天操| 五月丁香六月激情综合在线| 婷婷六月五月天综合| 日本五月天激情| 婷婷色色丁香五月天| 亚洲在线操| 婷婷五月成人| 7EzOBIhNq85TO| 亚洲AV免费国产电影| 日韩欧美老妇性视频91久久久| 99热日| 99操视频| 九热视频| 日韩啊啊啊| 色135综合网| 久热爱大香蕉在线蜜臀悦色| 六月亚洲婷婷6月中文字幕| 丁香六月高清视频| 五月激情影院| 激情综合五月婷婷| 综合精品99| 五月婷婷在线视频免费观看| 久久aaaa片一区二区| www激情| 亚洲五月婷| 91男人操女人视频| 日良久久| 新激情五月天色播| av久热| 亚洲高清在线| 成人在线观看一区| 久久人妻乱子伦| 99热免费看| 天天高潮夜夜爽| 色综合五月| 婷婷久久天堂网| 久久久久久久五月婷婷六月丁香综合,开心激情综合网 | 激情综合网五月丁香| 蜜桃婷婷丁香五月天狠狠久久综合| 狠狠色噜噜狠狠| 色综合婷婷| 久久九久久| 九九碰九九爱97超| 狠狠操天天日| 五月天婷婷久久| 日韩天堂久久| 女性自慰系列第五页| 久久九九蜜| 六月婷婷五月天| 热久久婷婷| 亚洲精品色色| 99热主页日本| 亚洲在线成人| 中文字幕乱轮| 搡BBBB搡BBB搡五十| 婷婷九月亚洲| 婷婷五月天小说网| 亚洲无码AV片| WWW.99热| 中文字幕一色哟哟哟哟| 精热在线综合网| 成人AV免费观看| 亚洲欧洲小视频9| 国产精品久久在线观看技巧| 五月丁香婷婷久久| 久久婷婷五月天激情四射| 不卡影院午夜理论片| 涩涩五月天| 精品牛仔裤超碰| 中文久久婷婷| 海外网站专业操老外| 天天操夜夜肏| 国产黄色在线观看| 五月色精品| 免费无码毛片一区二区A片| 亚洲激情在线| 精品影院| 综合日本婷婷| 九九AV在线| 激情深爱五月婷婷| 色综合五月在线| 色五月婷婷色五月婷婷色五月婷婷| 五月天啪啪视频| 五月婷婷网五月在线| 五月天桃色深爱网| 综合久久丁香婷婷,五月婷婷六月丁香,开心激情综合网,六月丁香在线观看,婷婷丁 | 婷婷综合精品视频97| 狠狠色 综合色区| 激情五月天网页| 午夜天堂一区人妻| 天天cha成人综合网| 国产人妻777人伦精品HD| 日本无va视频| 精品人妻午夜一区二区三区四区| 激情综合网激情五月欧美| 99精品视频在线观看| 五月天婷婷六月| 久久精品99国产精品日本| va婷婷在线| 国产欧美精品AAAAAA片| 日夜夜久久| 影音先锋综合网| 五月天婷婷激情| 色激情五月| www.婷婷五月| 六月香五月婷| 国产人妻人伦精品一区二区| 色色色色色色综合| 性爱五月婷| 欧美视频五区| 天天日天天摸天天| 最新久久99视频网站| 日本WWW九九九| 婷婷六月综合基地| 婷婷五月成人| 五月天影院| 色五月大| 五月色情| 99免费在线视频| 成人看片网站| 丁香五月性爱| 天天综合色| 五月色网| 91人妻人人操| 五月天婷婷色综合| 五月婷婷啪啪网| 97色图片中文字幕视频在线观看| 五月天色综合| 五月成人天| 99ri视频在线观看| 激情五月天婷婷| 天天日天天色| 久月久在线视频| 天天爽夜夜爽夜夜爽精品| 99热在线播放| 九九热这里只有精品9| 五月天社区| 99久热这里只有精品| 夜夜操加勒比| 人人操Av| 99色在线视频| 久久九九国产| 五月婷视频在线| 亚洲婷婷性爱| 色婷婷婷婷成人网| 99精彩视频| 深夜男女福利刺激影院一区完整| 激情www| 这里只有精品视频免费在线观看| 日本三级日本三级三级人妇四虎| 欧美25p| 午夜伊人大香蕉| 91主播在线| 激情综合网五月| 丁香五月天中文字幕| 操一区| 人人澡天天色天天做| 美女网黄| www.97碰碰com| 五月婷婷日| 人操人人| 婷婷色基地| 五月天婷婷青青草| 丁香婷在线| 欧美激情综合五月色丁香| 日日爱678| 99国产在线| 激情四射网| 极品另类| 99精品久久久| 欧美精品18| 综合五月草| 99热综合| 色婷婷色久综| 一起草AV入口| 婷婷五月天论坛| av操B网站| 99久久久国产精品免费蜜乳tv| 欧美69久成人做爰视频| 夜夜夜叫天天天做| 婷婷成人av| 久久免片| 五月天婷婷社区久久综合| 亚洲激情婷婷| 久久丁香| 国产伦亲子伦亲子视频观看| 婷婷日| 91午夜婷婷狠狠久久综合9色| 婷婷五月天激情影片| 婷婷99视频全集高清| 婷婷六月啪啪| 婷婷涩涩五月天| 99在线视频。| 成人免费120分钟啪啪| 狠狠插狠狠操| 日日日日日| 99热精品在线| 久9综合| 午夜成人av在线| 夜色.cnm| 色欲天天综合| 欧洲永久精品| 天天婷婷天天| 色婷婷视频在线| 国产激情综合五月久久| 色激情五月| 六月婷婷中文字幕| 欧美人与性动交CCOO| 老师的粉嫩小又紧水又多A片视频| 伊人五月天在线| 欧美成人精品三区综合A片| 国产偷人爽久久久久久老妇APP| 中国丰满熟女A片免费观| 68热超碰在线| 99热欧美精品| 狠狠搞五月天| 婷婷五点亚洲| 强伦轩人妻一区二区电影| 九色婷婷| 丁香花综合永久入口| 六月婷婷AV| 色婷婷香蕉| 五月丁香五月天现场视频| 五月开心深爱激情网| 97久久人人| 国产午夜精品一区二区三区四区| 色婷婷精品视频在线播放| 91人人操.COM| 五月天性色| 五月天开心激情综合网| 啪啪一区| 伊人丁香五月婷婷潮吹| 久久人人看| 五月婷婷丁香综合| 久九色| 天堂伊人干| 亚洲AV成人片无码网站| 五月丁香色婷婷基地| 色五月婷婷基地| 欧美顶级少妇做爰HD| 丁香五月婷婷色偷偷| 伊人婷婷青青cao| 丁香六月婷婷高清| 亚洲综合无码| 99操九九网| 日韩 欧美 国产 一区 二区| 综合五月网| 婷婷色播婷婷| 另类图片激情五月| 999热成人在线综合网| 天天色图| 欧美婷婷九月| 五月天婷婷丁香蜜桃91| 久久婷婷五月天激情四射| 欧美性爱五月天| 天天久久狠狠色综合| 天天日天天色| 亚洲AV成人在线| 欧美丁香五月| 婷婷丁香五月亚洲| 婷婷永久在线| 色婷婷久久| 久久九九九九| 天天操天天插天天射| 国产99热| 人妻内射视频| 九九免费视频| 操日视频| 大婷婷色呦呦噜噜色呦呦噜噜| 欧美综合五月丁香六月婷| 丁香五月婷婷深爱综合激情| 五月丁香花激情综合网| 青青草99热久久精品国| 有码一区二区三区| 免费看欧美成人A片无码| AV九九| 久久婷婷视频| 亚洲愉拍99热成人精品| 久9无码视频| 久久九九色| 日本三级第一页| 97人人干| 精品激情| 久久9视频欧美| 97影院一级片| 精品99在线看| 激情五月婷| 六月丁香停| www.婷婷五月| 婷婷影院欧美| 在线中文亚洲| 六月丁香中文字幕| 色综合com| 六月丁香色色色| 婷婷在线激情| 国产在线黄色| 国产成人AV在线| 婷婷五月电影| 开心激情网在线| 久热伊人| 99热这里只有精品8| 欧日韩AV| 99国产精品久久久久久久久久久| www狠狠| 久久精彩视频| 亚洲五月婷天天操| 69精品人人人人人人人人人| 亚洲色小说在线综合| 日韩精品AV一区二区三区| 丁香综合伊人AV| 影音先锋美国A| 色色色欧美色色| 激情五月瑟瑟| 天天婷婷综合亚洲亚洲| 狠狠久综合| 69精品人人人人| 激情网五夜婷婷| 99色综合| 激情深爱综合网| 久热亚洲| 亚洲色色色| 99人人操人人摸| 五月婷丁香久久综合| 久久与婷婷| 色狠狠五月天| .精品久久久麻豆国产精品| 就爱射中文字幕资源网| 操操精品| 日韩1区2区| 午夜国产精品AV在线播放| 99草在线免费观看视频| 丁香五月自拍| 激情伊人六| 亚洲一区二区色图-亚洲精品国产精品乱码-成人AV| 五月天播播中文字幕| 91丨九色丨丰满人妖| 五月婷激情| 久久激情五月天| 在线视频99| 中文字幕AV在线播放| 五月丁香综合精品| 玖玖爱导航| 欧美性做爰大片免费看办公室| 婷婷五月天第四色| 色娸娸综合网| 狠狠噪| 婷婷欧美激情综合| 免费99情趣网视频| 亚洲五月激情| 无码人妻丰满熟妇奶水区码| 日本天堂爱爱| 五月色情网| 殴美日韩成人| 乱岳熟女50岁| 丁香婷婷性爱| 欧美激情凹凸丁香网| 碰超在线九色| 少妇搡BBBB搡BBB搡毛茸茸| 97色色视频| 亚洲色域网| 91久久精品无码一区二区三区| 丁香五月大香蕉| 国产成人高清| 久久丁香五月婷婷| 99啪在线| 亚洲天堂色| 精品人妻一区二区| 棕合影院色色| 思思久久青草热| 97天堂| 91狠狠色色丁香婷婷综合久久| 最近中文字幕2019视频1| 无码任你操| 99视频在线| www.五月天性.com| 日韩好吊操| 久久9精品视频| 玖玖婷婷视频| 在线看AV| WWW.桔色成人.COM| 99激情| av在线观看网站| 免费精品99| 五月丁香婷婷伊人| 天天搞夜夜叫| 色婷婷黄色网络| 成人网在线视频| 狠狠爱婷婷色| 在线日本www| 五月天社区婷婷| www。久久久久一b。Cc| 中文字幕 中文字幕明步| 欧美影院婷婷| 丁香五月欧美色综合| 激情五月婷婷丁香综合网| 天天干天天色天天干| 色五月丁香总合网| 五月色婷婷综合色| 色五月大香蕉| 丁香激情久久| 五月丁香大香蕉| 丁香五月影视| 另类视频一区| 91精品婷婷国产综合久久| 91热手机在线| 狠狠色丁香婷婷久久综合| 色综合久网| 成年视频免费观看| 亚洲天堂有码| 中文字幕人妻一区二区| 玖玖九九9999在线观看视频精品| 久久视9精| 久9热插入| 天天操天天国产三级片处女学生妹| 成人超碰网| 国产女人十八水真多1| 日本色99网站| 亚洲av无码精品色午夜| 婷婷伊人五月丁香天堂网| 激情又色又爽又黄的A片| 国产成人精品一区二三区熟女在线 | 亚洲欧洲另类| 色五月激情网| 国产无遮挡又黄又爽免费网站| 久热超碰| 激情五月天.色网| 日本全黄一级999| 亚洲欧洲午夜成人精品av| 色噜噜五月天| 91尤物九色在线| 六月色日韩| 婷婷激情综合色五月久久,色婷婷丁香花,丁香婷婷五月情天,久久婷婷五月综合色 | 欧美激情性做爰免费视频| 国产又黄又爽又色的免费| 无码激情AAAAA片-区区| 欲色人妻| 99九九玖玖| 激情综合网络插| www.狠狠操.com| 国产日批视频免费播放| 国模淫穴色图| 婷婷色导航| 人人草人人舔| 色级停停| 久久婷婷色情7777网站| 精热在线综合网| 深爱激情网婷婷| 99热这里只有精品青草| 国产欧美第五十五页| 99re6在线视频精品免费| 丁香五月亚洲综合丝袜| 精品成人在线观看| 人妻内射麻豆视频| 婷婷开心久久| 色五月激情| 婷婷六月天国产综合| www.五月天色色.com| 色综合色综合婷婷热| 淑女丝袜bi操逼123| 91九色视频| 变态 另类 在线| 日本一毛片| 欧洲亚洲免费视频区| 精品久久这里热66| 九九激情网| 五月丁香网站| 欧美成人精品A片免费一区99| 激情久久综合| 久久9视频| 婷婷丁香色五月| 亚洲五月天狠狠| 综合五月丁香六月婷婷| 日韩AV片| 婷婷五月丁香国产| 亚洲 综合中文| 婷婷五月成人系列| 无码99| 无码髙清| 五月婷婷六月丁香在线视频| 激情五月天婷婷五月天| 国产色99| 91啪级电影| 五月婷婷六月丁香在线| 亚洲天堂有码| 国产亚洲99久久精品| 九九精品免费| 黄色三级毛片中字| wwW天天干| 五月丁香激情综合网| 婷婷五月,综合伊人| 开心五月激情网| 国产精品视频免费看| 五月婷婷久久大片| 激情丁香淫荡婷婷| 91碰在线| 久久午夜丁香| 五月丁香六月婷婷视频| 激情五月天色色| 丁香婷最新动态| 丁香五月成人av| 色吧网综合| 五月婷婷久久爱| 91操碰| 婷婷伊人久久| 色婷婷久久久| 99人妻碰碰碰久久久久视| 五月天激情AV| 久久一级AV| 伊人网欧美在线男人天堂五月丁香| 五月丁香激情综合网| www.99精品日操伊人乱碰在线| 成人色五月天| 天天色粽合合合合合合合| 蜜臀AV在线成人| 婷婷色情网| 九九热自拍| 色在线99| 中文AV在线播放| 五月天播播中文字幕 | 丁香激情网| 超碰大香蕉网| 五月婷婷五月天| 亚洲AV网址| 精品婷婷| 亚洲精品无码久久| 桃色五月天| 亚洲热久| 天天开心AV色综合婷婷五月天| 极品人妻XXXXOOOO| 天天操夜夜夜拍拍拍| 国产精品色情AAAAA片软件| 激情五月综合视频| 熟女人妻视频| 欧美综合丁香网| 成人五月丁香花| 五月婷婷精品无在线| 9久热在线视频| 久久婷婷综合五月趴| 99re免费在线视频| 97色女人在线| 男人的天堂999| 激情深爱五月天| 狠狠狠狠狠狠狠狠草| 日韩成人中文| 久久99久久99精品免观看软件 | 婷婷在线日韩综合| 婷婷五月天资源| 久久香蕉婷婷| 99啪啪网| 五月天五月色婷婷综合| 天天日天天插| 狠狠五月激情丁香六月| HD久久精品视频| 欧美精产国品一二三区| 日本99热| 日本eVa一区=区视频| 99热中文字幕久久| 久久九九玖玖| 五月丁香六月激情综合| 丁香婷婷伊人| 97碰碰人人视频| 九九伊人网| 婷婷深爱五月亚洲综合| 日韩三及成人AV片| 天天久久狠狠色综合| 天天插天天很| 噜噜五月天综合| 综合色久| 九九爱看亚洲| 综合激情在线| 九月婷婷综合| 人人操AV| 97亚洲色 torrent magnet| 1级欧美日韩| 中文字幕av在线播放| 色五月丁香激情视频| 一起操最新网址| 玖玖婷婷五月天| 亚洲免费99| 99热精品在线观看| 91人在线观看| 日本三级日本三级99| 深爱五月天婷综合| 日韩久热| 麻豆观看夏晴子| 伊人久久五月天| 日日干干天天干| 99热这里都是精品| av操逼网| 激情www| 天天操天天操天天操天天操天天操天天操| 青草青草久热这里只有精品| 婷婷五月天久草在线| 六月丁香婷| 噜噜久| 高清无码 一区 二区 三区| 18久久| 色婷婷狠狠禁18久久| 日韩av在线电影| 婷婷基地爱| 人人干天天舔| 激情综合网五月丁香| 久久5 9视频免费观看| 激情五月天综合网| 99热97| 九色色| 五月丁香操婷逼| 婷婷久久图片| www.一区二区三区| 日本三级日本三级99| 超碰超碰在线| 开心日韩丁香婷婷五月| 先锋资源婷婷| 夂夂夂夂夂夂夂夂夂夂夂夂夂夂夂夂夂夂夂亚洲亚洲亚洲亚洲亚洲亚洲亚洲亚洲色 | 亚洲丁香婷婷| 超碰在线国产| 香蕉综合网| 中文在线成人| 婷婷六月丁香五月| 五月永久激情| 婷婷五月天激情偷拍| 五月婷婷与六月丁香图片激情| 综合精品99| 2025超碰| 精品欧美一区二区三区久久久| 九九热九九| 91人人操人人| 五月天婷婷激情在线色图| 综合五月天婷婷色| 国产日批视频| 久久精品国产色| 婷婷四月 成人 狠狠干| 色婷婷色情| 婷婷久久综| 97伊人综合婷婷| 成人丁香五月婷| 久久婷婷五月综合色和| 久9综合| 亚洲精品V天堂中文字幕| 国产FREESEXVIDEOS性中国 | 一区二区三区四区无码| 色五月婷婷在线视频| 国产六月婷婷| anquye伊人| 综合久久丁香婷婷,五月婷婷六月丁香,开心激情综合网,六月丁香在线观看,婷婷丁 | WWW色五月| 精品一二三区久久AAA片| 国产精品色色| 日韩精品AV一区二区三区| 五月丁香六月激情综合| 色色操| 日韩操人| 香蕉久久国产AV一区二区| 91啪啪| 欧美丰满熟妇BBB久久久| 99精品网| 三十熟女| 五月丁香日逼| 黄色99热| wWW九九在线播放| 午夜丁香综合婷婷| 亚洲国产99| 色五月成人| 青青草婷婷五月天| 亚洲免费电影2| 亚洲AV永久无码影院黑人| 色444综合网| 97超碰婷婷五月天| 97超碰,人人舔,人人操,人人摸 | 激情五月天无码| 91中文在线| 五月婷婷激情网| 国产精品18久久久| 草榴成人影片| 欧美碰碰| 国产五月天婷婷| 色色色国产| 婷婷激情肏屄网| www,婷婷五月天777me,com| 精品皮股午夜AV| 色欲午夜无码久久久久久张津瑜| 五月色婷婷中文字幕| 久久亚洲婷婷| 香蕉97碰碰碰欧美| 色五月婷婷激情基地| 99久久婷婷国产综合| 久久老码第一| 婷婷五月另类网站| 色久影院| 99在线精品免费视频| 美国少妇性做爰| 日本色超碰| 99人妻碰碰碰久久久久禁片| 丁香五月狠狠在线观看| 欧美丁香五月| www.99久久久| www,黄色在线,con| www.91.com黄| 综合色五月天| 婷婷欧美激情综合| 婷婷五月天激情四射| 久久久九九视频精品18| 丁香五月综合狠狠| 影音先锋色婷婷| 婷婷丁香五月天中文字幕| 久久激情网| 国产精自产拍久久久久久蜜| 五月丁香婷婷老司机| 婷婷亚洲五| 五月天成人综合| 亚洲色综合| 国产性爱一级| 777久久综合视频| 婷婷在线视频| 久久婷婷五月天懂色| 日逼影音先锋男人AV资源站| 成人五月丁香社区| AV国产有码| 中文av网| 97在线观看| 久久丝丝热| 97五月天| 亚洲V国产V欧美V久久久久久| 成人一级片| 播四月婷婷六月丁香| 亚洲色另类| 久久精品五月天| 色丁香久综合在线久综合在线观看| 亚洲五月婷| 伊人无码高清| 五月天丁香成人社| 成人视频婷婷| 99热99在线| 婷婷黄色| 日本天堂免费99| 激情五月黄色| 亚洲99激情| 六月婷婷综合激情| 区啪精品| 中文字幕婷婷五月天在线观看| 99亚州综合精品成人网| 伊人9在线| 伊人9999| 国产熟妇乱子伦hd| 五月激情丁香久久综合网| 婷婷五月天激情小说| 99久久天堂婷婷| 亚洲综合99| 久久与婷婷| 国产免费一区二区三区三州老师F1F1.CC| 婷婷中文字幕版| 成人无码髙潮喷水A片| 日韩无码系列| 五月婷婷激情69| 97在线观视频免费观看 | 久久色五月天综合网| 涩五月婷婷| 色五月xxx| 亚洲精品在线视频| 碰超在线九色| 超碰1999| 97色精品视频| 国产精品婷婷午夜在线观看| 中文字幕网伦射乱中文| 噜噜狠狠| 九九色精品| 婷婷另类开心| 9+1视频网址| 五月丁香六月欧美综合| 99色精品| 99久久国产成人精品| 国产精品涩涩涩视频网站| 欧美激情 日韩无码 婷婷 五月天| 色五月婷婷中文字幕| 丁香婷婷激情五月|