国产成人欧美一区二区三区vr_久久国产精品人人爽人人爽_国产精品永久免费播放_肉欲啪啪a∨无码精品一区二区_国产超短裙jk丝袜在线_亚洲AV片高清资源在线观看_国模无码一区二区三区久久_国产成年人未进视频_中文字幕无码精品夜_一区二区三区在线视频免费看_亚洲成AV人片在线观看网址_日本激情视频高清综合久久_亚洲午夜视频福利_国内大量揄拍人妻精品視_久久国产精品福利二区三区

ARTICLE DETAIL

資訊詳情

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

Android 485串口通信實(shí)戰(zhàn):Modbus RTU鎖板與避坑指南

Android 485串口通信實(shí)戰(zhàn):Modbus RTU鎖板與避坑指南 1. 項(xiàng)目緣起與整體設(shè)計(jì)思路1.1 為什么要在 Android 上折騰 485 串口先說(shuō)背景。我手上有個(gè)工業(yè)場(chǎng)景的項(xiàng)目需求很明確一臺(tái) Android 平板作為上位機(jī)通過(guò) RS485 總線去控制一塊伺服驅(qū)動(dòng)板走 Modbus RTU 協(xié)議。聽起來(lái)不復(fù)雜對(duì)吧但真正動(dòng)手之后才發(fā)現(xiàn)Android 平臺(tái)上的串口通信跟我們?cè)?STM32 或者 PC 上玩串口完全是兩碼事。在 STM32 上搞 485你直接操作 UART 寄存器配好波特率、數(shù)據(jù)位、停止位再控制一個(gè) GPIO 做收發(fā)切換就完事了。PC 上更簡(jiǎn)單插個(gè) USB 轉(zhuǎn) 485 模塊用 Modbus Poll 或者自己寫個(gè) Python 腳本就能跑。但 Android 呢系統(tǒng)本身對(duì)串口設(shè)備節(jié)點(diǎn)的權(quán)限管得很死/dev/ttyS*這些節(jié)點(diǎn)普通應(yīng)用根本碰不到除非你有 root 權(quán)限或者系統(tǒng)簽名。這就導(dǎo)致了一個(gè)很尷尬的局面——你明明看到設(shè)備節(jié)點(diǎn)在那里但就是打不開。我選擇android-serialport-api這個(gè)庫(kù)原因很實(shí)際它足夠輕量核心就是幾個(gè) JNI 文件加一個(gè) Java 封裝層沒(méi)有引入額外的依賴編譯出來(lái)的 so 庫(kù)體積很小。市面上也有一些其他的方案比如usb-serial-for-android那個(gè)走的是 USB Host 通道需要設(shè)備支持 OTG 并且要處理 USB 權(quán)限彈窗對(duì)于嵌入式設(shè)備固定安裝的場(chǎng)景來(lái)說(shuō)反而更麻煩。而android-serialport-api直接操作設(shè)備節(jié)點(diǎn)只要權(quán)限到位打開就能用延遲也更低。這個(gè)項(xiàng)目適合誰(shuí)參考呢如果你正在做 Android 工控平板、智能終端、自助設(shè)備這類需要跟下位機(jī)通過(guò) 485 通信的場(chǎng)景或者你單純想搞清楚 Android 串口通信的底層邏輯那這篇內(nèi)容應(yīng)該能幫你省下不少踩坑的時(shí)間。1.2 整體方案架構(gòu)與選型考量整個(gè)通信鏈路的架構(gòu)是這樣的Android 平板通過(guò) OTG 或者板載的 UART 接口外接一個(gè) TTL 轉(zhuǎn) 485 模塊然后通過(guò) A/B 差分線接到伺服驅(qū)動(dòng)板的 485 接口上。軟件層面Android 端用android-serialport-api打開串口設(shè)備節(jié)點(diǎn)按照 Modbus RTU 的幀格式組包發(fā)送然后等待從站響應(yīng)。這里有個(gè)關(guān)鍵選型點(diǎn)為什么不直接用 Modbus TCP因?yàn)楝F(xiàn)場(chǎng)設(shè)備只支持 RTU而且 485 總線在工業(yè)環(huán)境下的抗干擾能力和布線成本優(yōu)勢(shì)是實(shí)打?qū)嵉摹R粭l雙絞線可以掛多個(gè)從站布線簡(jiǎn)單成本低。當(dāng)然代價(jià)就是速率相對(duì)慢一些但對(duì)于伺服控制這種場(chǎng)景波特率 9600 或者 19200 完全夠用。另一個(gè)選型點(diǎn)是關(guān)于 485 收發(fā)切換電路。我用的 TTL 轉(zhuǎn) 485 模塊是帶自動(dòng)收發(fā)切換的也就是說(shuō)模塊內(nèi)部會(huì)根據(jù)發(fā)送數(shù)據(jù)的狀態(tài)自動(dòng)控制 DE/RE 引腳不需要 Android 端額外操作 GPIO。這一點(diǎn)很重要因?yàn)?Android 應(yīng)用層根本沒(méi)法直接控制 GPIO如果模塊不帶自動(dòng)切換那就必須用帶使能控制的電路通過(guò)串口的 RTS 引腳來(lái)控制收發(fā)方向而android-serialport-api對(duì) RTS 的支持并不完善這就很容易出問(wèn)題。注意選 TTL 轉(zhuǎn) 485 模塊的時(shí)候一定要確認(rèn)是否支持自動(dòng)收發(fā)切換。如果不支持你需要在 Android 端通過(guò) RTS 控制收發(fā)方向而很多 Android 設(shè)備的串口驅(qū)動(dòng)對(duì) RTS 的支持并不好會(huì)導(dǎo)致發(fā)送完成后無(wú)法及時(shí)切回接收狀態(tài)從而丟失從站的響應(yīng)數(shù)據(jù)。2. android-serialport-api 的兩個(gè)深坑詳解2.1 第一個(gè)坑設(shè)備節(jié)點(diǎn)權(quán)限與路徑適配android-serialport-api這個(gè)庫(kù)的原理很簡(jiǎn)單它通過(guò) JNI 調(diào)用 Linux 的open()系統(tǒng)調(diào)用來(lái)打開串口設(shè)備節(jié)點(diǎn)然后通過(guò)read()和write()進(jìn)行數(shù)據(jù)收發(fā)。問(wèn)題就出在這個(gè)“打開”上。在標(biāo)準(zhǔn)的 Linux 系統(tǒng)里串口設(shè)備節(jié)點(diǎn)通常是/dev/ttyS0、/dev/ttyS1這種。但在 Android 上不同廠商的設(shè)備節(jié)點(diǎn)命名完全不一樣。我手上這臺(tái)平板串口節(jié)點(diǎn)是/dev/ttyMT0而另一臺(tái)設(shè)備上是/dev/ttyHSL0。更坑的是有些設(shè)備的節(jié)點(diǎn)權(quán)限是root:root 660普通應(yīng)用根本打不開。我試過(guò)幾種方案。第一種是直接在代碼里硬編碼節(jié)點(diǎn)路徑但換一臺(tái)設(shè)備就廢了。第二種是遍歷/dev/目錄下的所有tty*節(jié)點(diǎn)逐個(gè)嘗試打開但這樣效率低而且容易誤操作。最后我采用的方案是在應(yīng)用啟動(dòng)時(shí)通過(guò)讀取/proc/tty/drivers文件來(lái)獲取當(dāng)前系統(tǒng)可用的串口驅(qū)動(dòng)信息然后結(jié)合設(shè)備型號(hào)做映射。具體來(lái)說(shuō)/proc/tty/drivers文件里會(huì)列出所有已注冊(cè)的 tty 驅(qū)動(dòng)包括驅(qū)動(dòng)名稱、節(jié)點(diǎn)路徑、主設(shè)備號(hào)等信息。我可以從中篩選出類型為serial的驅(qū)動(dòng)然后拿到對(duì)應(yīng)的節(jié)點(diǎn)路徑。但這里還有個(gè)問(wèn)題——即使拿到了路徑權(quán)限不夠還是打不開。關(guān)于權(quán)限如果你的設(shè)備是 root 過(guò)的可以在應(yīng)用啟動(dòng)時(shí)通過(guò)su命令去修改節(jié)點(diǎn)權(quán)限比如chmod 666 /dev/ttyMT0。但這種方式依賴 root而且每次重啟都要重新執(zhí)行。另一種方案是讓系統(tǒng)集成商在init.rc或者ueventd.rc里配置好節(jié)點(diǎn)權(quán)限讓應(yīng)用可以直接訪問(wèn)。我最終采用的是后者因?yàn)轫?xiàng)目是定制設(shè)備系統(tǒng)層可以配合修改。實(shí)操心得在調(diào)試階段可以先用adb shell進(jìn)入設(shè)備用ls -l /dev/tty*查看節(jié)點(diǎn)權(quán)限然后用cat /proc/tty/drivers確認(rèn)驅(qū)動(dòng)信息。如果權(quán)限不對(duì)臨時(shí)用chmod 666改一下確認(rèn)通信沒(méi)問(wèn)題后再去推動(dòng)系統(tǒng)層做永久配置。這樣可以把軟件問(wèn)題和權(quán)限問(wèn)題分開排查效率高很多。2.2 第二個(gè)坑JNI 層的文件描述符泄漏與線程安全這個(gè)坑更隱蔽也更致命。android-serialport-api的 JNI 層在打開串口時(shí)會(huì)創(chuàng)建一個(gè)文件描述符fd這個(gè) fd 在 Java 層對(duì)應(yīng)一個(gè)FileDescriptor對(duì)象。問(wèn)題在于如果你在代碼里多次打開同一個(gè)串口而沒(méi)有正確關(guān)閉fd 就會(huì)泄漏。Linux 系統(tǒng)對(duì)每個(gè)進(jìn)程的 fd 數(shù)量是有限制的一般是 1024 個(gè)。泄漏到一定程度后open()就會(huì)返回 -1串口再也打不開。我第一次遇到這個(gè)問(wèn)題的時(shí)候現(xiàn)象是應(yīng)用運(yùn)行了大概兩三天后串口突然就通信不上了重啟應(yīng)用又恢復(fù)正常。當(dāng)時(shí)排查了很久一開始懷疑是 485 總線干擾后來(lái)懷疑是 Modbus 幀格式問(wèn)題最后用lsof命令查看進(jìn)程的 fd 列表才發(fā)現(xiàn)有一大堆/dev/ttyMT0的 fd 沒(méi)有被釋放。原因是我在代碼里每次發(fā)送數(shù)據(jù)前都會(huì)調(diào)用SerialPort.open()但發(fā)送完成后沒(méi)有調(diào)用close()。當(dāng)時(shí)的想法是保持串口常開避免頻繁開關(guān)帶來(lái)的開銷。但實(shí)際上android-serialport-api的SerialPort類并沒(méi)有實(shí)現(xiàn)Closeable接口也沒(méi)有 finalizer 來(lái)保證 fd 被釋放。如果你不顯式調(diào)用close()fd 就會(huì)一直掛著。修復(fù)方案很簡(jiǎn)單把SerialPort對(duì)象做成單例在應(yīng)用啟動(dòng)時(shí)打開一次在應(yīng)用退出時(shí)關(guān)閉。同時(shí)在SerialPort的封裝類里加一個(gè)isOpen標(biāo)志位避免重復(fù)打開。另外我還加了一個(gè) fd 泄漏檢測(cè)機(jī)制定期讀取/proc/self/fd目錄下的文件數(shù)量如果超過(guò)閾值就報(bào)警。線程安全是另一個(gè)問(wèn)題。android-serialport-api的write()和read()方法本身不是線程安全的。如果你在一個(gè)線程里寫數(shù)據(jù)同時(shí)在另一個(gè)線程里讀數(shù)據(jù)就有可能出現(xiàn)數(shù)據(jù)錯(cuò)亂。我采用的方案是加一把讀寫鎖寫操作和讀操作互斥。但這樣又帶來(lái)了新的問(wèn)題——如果讀操作阻塞時(shí)間太長(zhǎng)寫操作就會(huì)被卡住。后來(lái)我改成了讀寫分離的方案寫操作走一個(gè)單獨(dú)的線程通過(guò)一個(gè)阻塞隊(duì)列來(lái)緩沖待發(fā)送的數(shù)據(jù)讀操作走另一個(gè)線程持續(xù)讀取串口數(shù)據(jù)并放入接收緩沖區(qū)。兩個(gè)線程通過(guò)synchronized塊來(lái)保護(hù)對(duì)SerialPort對(duì)象的訪問(wèn)但讀寫操作本身不互斥。這樣既保證了線程安全又避免了讀寫互相阻塞。注意android-serialport-api的read()方法是阻塞的如果你在 UI 線程里調(diào)用會(huì)直接 ANR。一定要在子線程里做讀寫操作然后通過(guò) Handler 或者 LiveData 把數(shù)據(jù)傳回 UI 層。3. Modbus RTU 鎖板通信實(shí)戰(zhàn)3.1 Modbus RTU 幀格式與組包細(xì)節(jié)Modbus RTU 的幀格式是這樣的從站地址1 字節(jié) 功能碼1 字節(jié) 數(shù)據(jù)域N 字節(jié) CRC 校驗(yàn)2 字節(jié)。幀與幀之間需要至少 3.5 個(gè)字符時(shí)間的靜默間隔來(lái)區(qū)分。在波特率 9600 的情況下一個(gè)字符時(shí)間是 10 位1 起始位 8 數(shù)據(jù)位 1 停止位也就是大約 1.04 毫秒3.5 個(gè)字符時(shí)間就是 3.64 毫秒。我用的功能碼是 0x06寫單個(gè)寄存器和 0x03讀保持寄存器。寫單個(gè)寄存器的幀格式是從站地址 0x06 寄存器地址高字節(jié) 寄存器地址低字節(jié) 數(shù)據(jù)高字節(jié) 數(shù)據(jù)低字節(jié) CRC 低字節(jié) CRC 高字節(jié)。讀保持寄存器的幀格式是從站地址 0x03 起始地址高字節(jié) 起始地址低字節(jié) 寄存器數(shù)量高字節(jié) 寄存器數(shù)量低字節(jié) CRC 低字節(jié) CRC 高字節(jié)。CRC 校驗(yàn)是 Modbus RTU 里最容易出錯(cuò)的地方。它的計(jì)算方式是初始化 CRC 為 0xFFFF然后對(duì)每個(gè)字節(jié)進(jìn)行處理每個(gè)字節(jié)與 CRC 的低字節(jié)異或然后右移 8 次每次如果最低位為 1 就與 0xA001 異或。最終得到的 CRC 需要低字節(jié)在前高字節(jié)在后。我一開始就是搞反了字節(jié)序?qū)е聫恼疽恢辈豁憫?yīng)。public static int calculateCRC(byte[] data, int length) { int crc 0xFFFF; for (int i 0; i length; i) { crc ^ (data[i] 0xFF); for (int j 0; j 8; j) { if ((crc 0x0001) ! 0) { crc (crc 1) ^ 0xA001; } else { crc 1; } } } return crc; }組包的時(shí)候先把從站地址、功能碼、數(shù)據(jù)域拼成一個(gè)字節(jié)數(shù)組然后計(jì)算 CRC把 CRC 的低字節(jié)和高字節(jié)追加到數(shù)組末尾。發(fā)送的時(shí)候通過(guò)SerialPort的write()方法把整個(gè)字節(jié)數(shù)組寫出去。3.2 鎖板通信的超時(shí)與重試機(jī)制“鎖板”這個(gè)詞在工業(yè)場(chǎng)景里指的是從站設(shè)備處于一種鎖定狀態(tài)只響應(yīng)特定地址的請(qǐng)求。我遇到的場(chǎng)景是伺服驅(qū)動(dòng)板被配置成了地址 0x01只響應(yīng)這個(gè)地址的 Modbus 請(qǐng)求。如果地址不對(duì)從站直接忽略不會(huì)返回任何響應(yīng)。這就帶來(lái)了一個(gè)問(wèn)題如果 Android 端發(fā)送了請(qǐng)求但沒(méi)收到響應(yīng)怎么區(qū)分是從站沒(méi)收到、從站收到了但地址不對(duì)、還是從站響應(yīng)了但 Android 端沒(méi)收到我的做法是設(shè)置一個(gè)響應(yīng)超時(shí)時(shí)間比如 200 毫秒。發(fā)送請(qǐng)求后開始計(jì)時(shí)如果在 200 毫秒內(nèi)沒(méi)有收到完整的響應(yīng)幀就認(rèn)為本次通信失敗觸發(fā)重試。重試策略我采用的是指數(shù)退避第一次重試等待 100 毫秒第二次等待 200 毫秒第三次等待 400 毫秒最多重試 3 次。如果 3 次都失敗就上報(bào)通信故障。這樣做的原因是485 總線在工業(yè)環(huán)境下可能會(huì)受到瞬時(shí)干擾偶爾一兩次通信失敗是正常的通過(guò)重試可以恢復(fù)。但如果連續(xù)多次失敗那就說(shuō)明是硬件或者配置問(wèn)題了再重試也沒(méi)用。實(shí)操心得超時(shí)時(shí)間不要設(shè)得太短。我一開始設(shè)了 50 毫秒結(jié)果發(fā)現(xiàn)從站響應(yīng)經(jīng)常超時(shí)。后來(lái)用示波器抓了一下波形發(fā)現(xiàn)從站從收到請(qǐng)求到發(fā)出響應(yīng)之間有大概 80 毫秒的處理時(shí)間。所以超時(shí)時(shí)間至少要設(shè)成從站最大處理時(shí)間的兩倍以上我最終設(shè)的是 200 毫秒實(shí)測(cè)很穩(wěn)。3.3 485 總線布線與隔離電路要點(diǎn)485 總線的布線有很多講究。首先必須用雙絞線因?yàn)殡p絞線可以抵消共模干擾。A 和 B 兩根線要絞在一起不能分開走。其次總線的兩端需要接終端電阻一般是 120 歐姆。終端電阻的作用是匹配總線阻抗消除信號(hào)反射。如果總線長(zhǎng)度小于 50 米可以不接終端電阻但超過(guò) 50 米就一定要接。隔離電路是另一個(gè)關(guān)鍵點(diǎn)。工業(yè)現(xiàn)場(chǎng)的地電位差可能很大如果 Android 設(shè)備和伺服驅(qū)動(dòng)板不共地485 總線上會(huì)有很大的共模電壓輕則通信不穩(wěn)定重則燒毀收發(fā)器。我用的 TTL 轉(zhuǎn) 485 模塊是帶光耦隔離的隔離電壓 2500V。這樣即使兩邊地電位差很大也不會(huì)損壞設(shè)備。還有一個(gè)細(xì)節(jié)是 485 總線的接地。很多人以為 485 只需要 A 和 B 兩根線其實(shí)還需要一根地線。這根地線不是用來(lái)傳輸信號(hào)的而是用來(lái)給總線上的所有設(shè)備提供一個(gè)共同的參考地。如果設(shè)備之間地電位差太大就需要用隔離模塊來(lái)切斷地環(huán)路。注意485 總線的 A 和 B 不要接反。雖然有些收發(fā)器有極性自適應(yīng)功能但大部分標(biāo)準(zhǔn) 485 收發(fā)器是不支持的。接反了要么完全通信不上要么通信極不穩(wěn)定。我一般會(huì)在接線端子旁邊標(biāo)注 A 和 B避免插錯(cuò)。4. 常見問(wèn)題與排查技巧實(shí)錄4.1 通信失敗排查速查表現(xiàn)象可能原因排查方法解決方案完全無(wú)響應(yīng)串口節(jié)點(diǎn)打不開檢查/dev/tty*權(quán)限修改節(jié)點(diǎn)權(quán)限或推動(dòng)系統(tǒng)層配置完全無(wú)響應(yīng)A/B 線接反交換 A/B 線測(cè)試糾正接線完全無(wú)響應(yīng)從站地址不對(duì)用 Modbus Poll 掃描地址修改從站地址或請(qǐng)求地址偶爾超時(shí)485 總線干擾示波器抓波形加終端電阻、改用屏蔽雙絞線偶爾超時(shí)超時(shí)時(shí)間太短增大超時(shí)時(shí)間設(shè)為從站處理時(shí)間的 2 倍以上數(shù)據(jù)錯(cuò)亂讀寫線程沖突檢查線程同步邏輯加讀寫鎖或讀寫分離運(yùn)行一段時(shí)間后失敗fd 泄漏lsof查看 fd 數(shù)量確保串口正確關(guān)閉CRC 校驗(yàn)失敗CRC 字節(jié)序錯(cuò)誤檢查 CRC 計(jì)算代碼低字節(jié)在前高字節(jié)在后4.2 獨(dú)家避坑技巧與調(diào)試心得第一個(gè)技巧是關(guān)于調(diào)試工具的。我強(qiáng)烈建議在開發(fā)階段同時(shí)用 Modbus Poll 和 Modbus Slave 這兩個(gè)工具。Modbus Poll 作為主站可以模擬 Android 端發(fā)送請(qǐng)求Modbus Slave 作為從站可以模擬伺服驅(qū)動(dòng)板響應(yīng)請(qǐng)求。這樣你可以先把 Android 端的代碼放一邊用 PC 工具確認(rèn) 485 硬件鏈路和 Modbus 協(xié)議沒(méi)問(wèn)題然后再去調(diào) Android 端的代碼。這樣可以避免同時(shí)排查硬件和軟件問(wèn)題效率高很多。第二個(gè)技巧是關(guān)于日志的。Android 端的串口日志一定要打全包括發(fā)送的原始字節(jié)、接收的原始字節(jié)、CRC 校驗(yàn)結(jié)果、超時(shí)時(shí)間等。我一般會(huì)用十六進(jìn)制格式打印方便對(duì)比。另外日志要寫到文件里不要只打在 Logcat 里因?yàn)?Logcat 緩沖區(qū)有限時(shí)間長(zhǎng)了會(huì)被沖掉。第三個(gè)技巧是關(guān)于 485 收發(fā)切換的。如果你的 TTL 轉(zhuǎn) 485 模塊不帶自動(dòng)切換需要用 RTS 控制收發(fā)方向那一定要注意切換時(shí)機(jī)。發(fā)送數(shù)據(jù)前先把 RTS 拉高發(fā)送模式發(fā)送完成后等最后一個(gè)字節(jié)完全移出移位寄存器再拉低接收模式。如果拉低太早最后一個(gè)字節(jié)會(huì)丟失如果拉低太晚從站的響應(yīng)可能已經(jīng)開始發(fā)送了會(huì)沖突。我一般會(huì)在發(fā)送完成后延時(shí) 1 個(gè)字符時(shí)間再切換。第四個(gè)技巧是關(guān)于電源的。Android 平板和 485 模塊的電源一定要共地否則 485 通信會(huì)不穩(wěn)定。如果 Android 平板用電池供電485 模塊用外部電源供電那一定要把兩者的地線連在一起。我遇到過(guò)好幾次通信不穩(wěn)定的情況最后發(fā)現(xiàn)都是地線沒(méi)接好。4.3 性能優(yōu)化與穩(wěn)定性提升在穩(wěn)定性方面我做了幾件事。第一把串口讀寫放在單獨(dú)的服務(wù)里跟 UI 生命周期解耦。這樣即使 UI 退到后臺(tái)串口通信也不會(huì)中斷。第二加了看門狗機(jī)制定期檢查串口是否還在正常工作如果發(fā)現(xiàn)異常就自動(dòng)重啟串口服務(wù)。第三加了通信質(zhì)量統(tǒng)計(jì)記錄每次通信的成功率和平均響應(yīng)時(shí)間方便后期分析。在性能方面主要是減少不必要的內(nèi)存分配。Modbus 幀的組包和解包都在字節(jié)數(shù)組上操作避免頻繁創(chuàng)建對(duì)象。接收緩沖區(qū)用固定大小的環(huán)形緩沖區(qū)避免動(dòng)態(tài)擴(kuò)容帶來(lái)的開銷。發(fā)送隊(duì)列用ArrayBlockingQueue容量設(shè)為 64足夠緩沖短時(shí)間內(nèi)的突發(fā)請(qǐng)求。還有一個(gè)細(xì)節(jié)是關(guān)于read()方法的。android-serialport-api的read()方法會(huì)阻塞直到有數(shù)據(jù)可讀但如果你設(shè)置的超時(shí)時(shí)間太長(zhǎng)線程會(huì)一直卡在那里。我一般會(huì)把read()放在一個(gè)循環(huán)里每次讀取前先檢查一下是否有數(shù)據(jù)可讀如果沒(méi)有就sleep一小段時(shí)間再試。這樣雖然稍微增加了 CPU 占用但可以避免線程長(zhǎng)時(shí)間阻塞。實(shí)操心得如果你的應(yīng)用需要長(zhǎng)時(shí)間運(yùn)行建議定期重啟串口服務(wù)。我實(shí)測(cè)下來(lái)連續(xù)運(yùn)行 72 小時(shí)后串口通信的成功率會(huì)從 99.9% 降到 99% 左右雖然看起來(lái)降得不多但在工業(yè)場(chǎng)景下1% 的失敗率已經(jīng)很高了。后來(lái)我加了一個(gè)定時(shí)重啟機(jī)制每 24 小時(shí)重啟一次串口服務(wù)成功率就穩(wěn)定在 99.9% 以上了。5. 從踩坑到填坑的完整復(fù)盤5.1 那些讓我熬夜的瞬間第一個(gè)讓我熬夜的問(wèn)題是 fd 泄漏。當(dāng)時(shí)應(yīng)用跑了兩天突然通信不上我以為是硬件問(wèn)題換了模塊、換了線、換了設(shè)備折騰了一整天。最后用lsof一看fd 數(shù)量已經(jīng)到 900 多了離 1024 的上限就差一點(diǎn)。那一刻的心情真的是又氣又笑。第二個(gè)讓我熬夜的問(wèn)題是 CRC 校驗(yàn)。我按照網(wǎng)上的代碼寫了 CRC 計(jì)算但從站一直不響應(yīng)。我用 Modbus Poll 抓了正確的請(qǐng)求幀跟我的請(qǐng)求幀對(duì)比發(fā)現(xiàn) CRC 字節(jié)序反了。Modbus RTU 的 CRC 是低字節(jié)在前高字節(jié)在后而我寫成了高字節(jié)在前。改過(guò)來(lái)之后一次就通了。第三個(gè)讓我熬夜的問(wèn)題是線程沖突。我在一個(gè)線程里寫數(shù)據(jù)在另一個(gè)線程里讀數(shù)據(jù)結(jié)果偶爾會(huì)出現(xiàn)數(shù)據(jù)錯(cuò)亂。后來(lái)加了讀寫鎖問(wèn)題解決了但讀操作經(jīng)常被寫操作阻塞導(dǎo)致響應(yīng)變慢。最后改成了讀寫分離才徹底解決。5.2 最終穩(wěn)定運(yùn)行的方案總結(jié)最終穩(wěn)定運(yùn)行的方案是這樣的串口服務(wù)作為前臺(tái)服務(wù)運(yùn)行保證不被系統(tǒng)殺掉。串口對(duì)象做成單例應(yīng)用啟動(dòng)時(shí)打開應(yīng)用退出時(shí)關(guān)閉。讀寫操作分別走獨(dú)立的線程通過(guò)阻塞隊(duì)列和環(huán)形緩沖區(qū)來(lái)交換數(shù)據(jù)。Modbus 組包和解包都在字節(jié)數(shù)組上操作避免頻繁創(chuàng)建對(duì)象。超時(shí)時(shí)間設(shè)為 200 毫秒重試 3 次指數(shù)退避。485 模塊用帶光耦隔離和自動(dòng)收發(fā)切換的型號(hào)總線兩端接 120 歐姆終端電阻用屏蔽雙絞線。這套方案在我手上的設(shè)備上連續(xù)運(yùn)行了一個(gè)月通信成功率穩(wěn)定在 99.9% 以上沒(méi)有出現(xiàn)過(guò) fd 泄漏或者線程沖突的問(wèn)題。當(dāng)然不同的設(shè)備和場(chǎng)景可能需要微調(diào)但整體思路應(yīng)該是通用的。5.3 后續(xù)可以擴(kuò)展的方向這個(gè)項(xiàng)目后續(xù)還可以往幾個(gè)方向擴(kuò)展。第一支持 Modbus TCP這樣可以通過(guò)網(wǎng)絡(luò)遠(yuǎn)程控制不局限于 485 總線。第二加一個(gè) Web 配置界面方便現(xiàn)場(chǎng)調(diào)試和參數(shù)修改。第三加數(shù)據(jù)記錄和分析功能把通信日志和伺服運(yùn)行數(shù)據(jù)存到數(shù)據(jù)庫(kù)里方便后期分析。第四支持多從站輪詢一條 485 總線上掛多個(gè)伺服驅(qū)動(dòng)板Android 端輪流跟每個(gè)從站通信。我個(gè)人在實(shí)際操作中的體會(huì)是Android 串口通信的難點(diǎn)不在協(xié)議本身而在 Android 系統(tǒng)的權(quán)限管理和資源管理。只要你把權(quán)限問(wèn)題解決了把 fd 泄漏和線程安全問(wèn)題處理好了剩下的就是標(biāo)準(zhǔn)的 Modbus 協(xié)議實(shí)現(xiàn)跟在其他平臺(tái)上沒(méi)什么區(qū)別。但恰恰是這兩個(gè)問(wèn)題最容易讓人掉坑里。希望這篇內(nèi)容能幫你少走一些彎路。
返回列表
PREV
查看更多資訊
NEXT
返回資訊列表
爱我干综合| 怡红院亚洲怡春院av| 九九超碰综合网| hd成人一区二区在线| 抽插一区二区视频| 亚洲色丰满少妇高潮| 黄色视频特级毛片| 日本操逼视频不卡直接放| 亚洲啪啪啪啪视香蕉| 五月天婷婷欧美三区| 午夜福利1区2区3区| 操死我了啊啊啊| 青青草九九九九九| 图片区小说区| 國產尤物AV尤物在線觀看| 很狠操| 99热97| 黄色免费网页无码| 国产强奸AV在线| 国产中文字幕在线观看| 怡红院怡春院| 蜜桃成人1区2区3区| 极品综合| 亚洲av性爱电影| 狠狠入| 亚洲欧美在线综合| 激情终合网| 天天做天天爽| 亚洲av影院在线观看| 大香蕉免费3| 色婷婷一区二区三区久久| 精品国产自在在线99| 日本国产欧美高清在线| 无码一区二区精品视频久久久春药| 天天综合91入口| 九九九热精品| 欧美91网站| 欧美 亚洲 综合 制服| av爱爱爱| 国产乱伦亚洲色图高清无码| 免费视频在线一区二区不卡| 亚洲色婷婷久久久综合日本| 夜色91| 超碰97伊人| 久久久啊啊啊| 97在线观看| 99人妻| 欧美亚洲特P| 精品十八在线观看| 国产嫩草精品A88AV| 亚洲欧美内射| 男人天堂东京热| 无码人妻精品酒店| 国产69精品久久久久99尤物| 福利社区午夜一区二区| 欧美不卡二区| 色九区| 亚洲中文一区二区三区视频| 天堂8在线新版官网| 一本大道不卡一二三区| 狠狠激情综合狠狠操中文字幕| 国产av又色又爽又黄| 秋霞一集毛片观看| 亚洲精美粉嫩嫩泬在线观看| 东亚亚洲无码高清| 91色综合激情| 精品九九九九九九九九九| 9999亚洲电影| 97国产精品久久久久| 久久97超碰香蕉| 玖玖综合视频| 无码人妻精品一区二区中文| av一区二区三区四区| 97人人夜夜精品视频| 亚欧色图在线激情| 成年人黄色小视频网站| 亚洲九区| 神马久久69| 亚洲视频二区 | 日韩99精品视频综合区| 色99在线| 大香蕉宗合网在线| 久久九九精品一区二区| 97无码视频在线播放| 最新三级网址| 女同亚洲欧美一二三区久久电影| 九九九九精品一区| 亚欧美综合网| 九九伊人网| 午夜男人天堂| 97神马久久| 亚洲91在线播放影院| 电影69乱码96| 无码人妻丰满熟妇区毛片| 亚洲人成网站7777| 涩爱AV在线| 美女黄页网站| 2020国产精品| 久草老司机| 欧美十八禁视频| 国内91熟女人妻丝袜天天精品视频在线| 四虎在线播放| 把腿张开老子CAO烂你| 极品丝袜无码| 国产尤物在线三区| 亚洲精品亚洲人成人网| 久久久亚洲熟妇资源| 自拍视频一区在线观看| 乱伦一区二区三区‘| 少妇毛片久久| 爱妃国产亚洲视频中文字幕| 精品人妻二区三区| 精品人妻免费观看| 综合天天网| AV乱伦专区| 又摸又舔在线观看网站| 操www| 高潮嗯啊性感美女久久久| 欧美一级特黄淫片在线观看| 久久综合久色欧美综合狠狠| 日本中文字幕在线视频 | 操亚州| 探花在线免费观看视频国产一区| 激情小说亚洲视频| 成人AV素股で擦久久| 91国产操逼视频| 久久久熟妇熟女国产| 先锋激情∨在线视频播放| 国产精品不卡一区二区三区| 国产热RE99久久6国产精品首| 熟妇一区,二区,三区。| 久久免费少妇| 校园春色亚洲无码| 亚洲不卡不卡中文字幕不卡| 亚洲三区视频| 91天天综合日韩欧美| 九九九九欧美| 黄色av一区二区在线| 久久东京热久久| 嗯嗯啊好大| 毛片电影一区二区三区| 精品无码久久久久久国产浪潮| 日韩精品操少妇| 精品成人av一区二区三区在线| 黄久久| 丝袜性亚洲| 久久综合久色欧美综合狠狠| 99久久99久久免费精品蜜臀| 午夜精品久久久久久久男人的天堂 | 久久久久久久久久va| 欧美天天综合在线| 亚洲色悠悠久久88| 精品久久久久9999| 香一区二区三区| 国产92麻豆天美精品色欲5| a片久久久久久久久久久久| 欧美丝袜美女电影一二三四区| 四方色播| 91网站视频在线观看| julia中文字幕在线观看| 日韩资源网| 久9爱精品| 97在线视频观看| 日本操逼视频导航| 97超碰天天爱天天爱| 91日日夜夜| 婷婷色色五月天福利| 久草视频在线视频在线视频在线观看| 亚洲综合九九| 久热大香蕉网站| 久久九九久精品国产尤物|国产精品爽黄69天堂A片潘金莲,国产亚洲精品第一综合 | 亚洲人妖网| 综合 青草 伊久久 影院 综合 | 日韩欧美天天爽爽爽天天爽爽| 欧美精品,四区。五区| 91精品国产91综合久久蜜臀| 亚洲一卡2卡3卡4卡乱码网站 | 强奸乱伦αv片| 国产夜夜艹| 97亚洲中文| 久草国产在线视频| 内射中国少妇高清视频免费视频 | 99精品人人爽| 欧美色综合| 久久这里只精品99re66图| 九九九久久久久| 无码精品久久久久久亚洲| 果冻国产精品麻豆成人av| 东京热av男人的天堂| 狠狠色伊人亚洲综合网站色| 欧美精品丝袜久久久中文字幕| 一区二区三区高清| 免费视频无码| 午夜视频黄| 91在线限制级| 91丨熟女丨丰满熟女| 日本免费一区二区不卡| 五月丁香婷婷综合网| 综合网少妇| 97人肏| 九九九九热| 亚洲人在线| 超碰免费人妻人人| 青青草无码视频| 中文字幕日本久久| 欧美色偷偷| 91麻豆天美传媒HD| 婷婷导航| 中文字幕精品一区二| 99爱爱| 丁香六月婷婷久久综合| 成人av影院在线观看| 国产第二页| 欧美色五月| 欧美性爱18观看| 高清孕妇孕交 交孕妇| 99色在线| 国产伦乱91| 粉嫩av平台| 热久久无毒不卡| 亚洲色图久久成人| 狠狠狠狠狠干| 欧美性爱第一区| 亚洲国产97| 啊啊啊久久久视频| 亚洲欧美性生活| 亚洲一区日韩| 亚洲色色探花| 曰韩人妻中文字幕在线| 97网址97| 精品少妇后入一区二区三区四区人妻巨乳 | 久久性爱网站| 在线日韩视频| 日欧毛片久久| 97爱综合| 亚洲AV无码久久久国产精品| av亚洲天堂资源网站| 3P丝袜熟女 色综合| 日韩人妻一二三区视频| 97人人干| 激情深爱五月天| 国内偷自视频区视频综合| 午夜精品一区二区三区三上悠亚| 日韩 欧美 国产 麻豆| 国产肏逼网站| 夜色97| 激情综合97| 亚洲一区二区中文字幕| 日韩无码极品| 91高潮喷水美女| 六月婷婷综合| 无码黑人精品一区二区三区三| 国产熟妇一区二区| 精品在线观看视频在线| 欧美性爱第1 页| 91美女视频电影| 欧美激情总合网| 国产宅男宅女在线观看| 亚洲不卡三级手机播放| 夜夜做夜夜爽精品视频| 国产精品suv一区| 97色在线| 超碰在线看| 成人av影院在线观看| 少妇天堂| 人人九九精| 99999精品成人| 日韩在线观看AV| WWW.加勒比人妻一区不卡.com| 国内自拍 日韩激情 99| 国产男人又猛又粗又爽| 人人操人人干xxx| 99操逼| 午夜福利在线视频1000| 泰国AV在线观看| 久久激情视频| 欧美一区二区亚洲天堂| 逼逼逼逼操操操操操操操操操午夜剧场 | 素人播放一区| 婷婷综合网站| 久久女人一区二区三区| 免费综合亚洲中文| 333kkkk·亚洲com久久| av强奸乱轮| 1769国内精品视频| 国产精品激情久久久久久久| 性爱Av免费| 夜夜草天天| 青青草久草| 国产精品一区二区三区四区五区| 91天美免费| 2017天天操天天日| 东北女人性交| 97综合国产| 91熟女丨老女人| 69久久| 91精品婷婷国产综合久久| 亚洲日产专区婷婷| 欧美熟女丝袜| 91国产丝袜白虎| 久久精品国产97欧美精品亚洲 | 九九九九97| 超碰 国产熟女精品一区| 狠狠躁日日躁夜夜躁A| 天美传媒av在线| 久久久男人的天堂| 欧美日韩亚洲国产中文永久天天看| 97超碰资源网| 夜夜夜爽www精品视频| 伊人性在线视频| 精品黄色电影| 亚洲97成人在线观看| 久久久久久久伊人精品| 欧美日韩国内不卡| 久久麻豆一区二区| 男人的天堂.com| 粉嫩国产精品久久久| 久久神马影院| 人人九九精| 午夜传煤十二区精品| 美女91| 尤物av网站免费在线播放| 2021国产成人精品久久| 99热99在线播放激情| 99久久久无码国产精品性男| 五月天精品| 丰满少妇一区二区三区四区观看| 亚洲日韩乱码中文无码蜜桃臀网站| 麻豆人妻偷人精品无码视频| 啊啊啊啊好疼| 日本操逼视频不卡直接放| 日韩av一级黄片| 99精品久久久久久久婷婷| 91在线|亚| 色yeye成人免费视频| 色图综合网| 日韩色| 日本操逼视频不卡直接放| 最新日韩黄片| 青青草啪啪网| 日韩精品 欧美激情| 欧美高清无码免费视频高清版| 免费看黄视频亚洲网站| 殴美牲| 青青草久草AV| 精品欧美老熟女一二区| 成人免费在线网站| yazhousetuoumei| 欧美97av| 国产亚洲女v在线观看| 91麻豆天美国产欧美| 一区二区 电影 亚洲| 色噜噜人妻av中文字幕| 极品欧美一区二区三区| 97色色网| 色色九区| 色婷视频| 99热99re6国产在线播放| 视频一区二区免费在线| 人人操AV| 亚洲成人在线资源| 日韩色欲久久一二三四区| 青青草自拍视频在线播放| 福利天天都操| 日本色色色视频| 激情图片亚洲色图| 91肉片| 欧美精品999| 欧美日韩婷婷中文| 92性色国产午夜福利在线661| 操逼日韩无码| 超碰97人人乐| 中文字幕aⅴ在线视频| 蜜臀AV成人精品蜜臀AV久久| 97视频在线看| 久久精品视-一级做a爰片性色毛片16美国-中国女与老外在线精品 | 伊人网在线视频| 极品销魂美女一区二区| 91亚洲精品青草| 成人性交午夜免费片| 久久久久亚洲Aⅴ无码| 色久综合| 美国三级日本三级久久99| 国产欧美精选激情视频| 嗯嗯啊好大| 日本操逼视频免费| 国产性感骚丝袜在线| 高清孕妇孕交 交| 久99| 91久| 亚洲、日韩、综合、另类| aa片毛片| 青青草国产亚洲精品久久| 亚洲高清视频在线免费观看| 九九九九88| 尤物视频视频官网| 色噜噜人妻丝袜AV资源| 色综和网| 人人摸人人添人人操 | 91伊人久久在线| 操B在线观看| 九九九九97| 囯产操逼片| 欧美后入式| 丁香五月色| 日本综合色图| 欧美A√综合网 | 亚洲情色在线| 国产精品一级片在线看| 国产又长又大又粗的视频| 日韩成人电影AV| 久久国产乱子伦精品免费女,网站| 中文字幕一区av| 欧美爱爱97| 中文字幕日韩精品一区二区三区| 日韩一区二区高清在线观看的| 大屁股熟女一区二区三区| 亚洲AV成人无码一区二区三区在线观看| 久久99久久99精品天美传媒棢·纸:. | 免费观看一区| 亚洲视频二区| 亚洲五月丁香花狠狠干一区二区三区| 人妻二区| 久久久久久99999国产精品| 日本三级韩国三级99| 牛牛AV人人夜夜澡人人爽| 97超碰巨乳| 亚洲综合婷婷| 影音先锋新男人| 日夜尻逼网| 日韩无码成人电影| 欧美国产精品久久九九| 91麻豆天美国产欧美高潮| 欧美色网络| 啊啊啊不要好疼视频| 久久这里只精品免费福利| 亚洲国产丝袜在线观看| 欧美激情综合| 最新亚洲人成网站在线影院| 亚洲黄色电影| 青青操视频在线| 97操97色| www九九热| 精品美女久久久久| 蜜臀久久99精品久久久久久无删减| 亚州熟妇精品| 欧美色九九九| 操操啪| 精品成人亚洲午夜电影| 精品视频一二三中文| 久久夜精品一区二区三区| 国产高清1234区| 久操不卡视频| 中文字幕交换人妻| 操逼日批| 国产偷拍网站| 色婷婷一区二区三区久久| 男女性扦B| 久久、1234| 神马久久久久眼| 操逼日韩无码| 美女被啪到深处抽搐视频| 亚洲精品熟妇1区2区3区。| 中出789在线视频| 日本韩国一本产品小视频日本韩国一本产品久久久产品小视频日本韩国一本产品久 | 国产黄色在线播放观看| 校园春色五月天| 色噜噜人妻av中文字幕| 亚州九九九精品视频| 久久久久久久国产| 中日韩久久人妻一区二区| 人妻啊啊人妻啊| 久久五月视频| 91操碰| 女人被添高潮免费视频| 日韩av一级黄片| 国产精品国产自产高清AV | 久久视频,这里只有精品| 91在线丝袜视频| 无码精品久久| 狠狠操官网| 91性高朝久久久久久久久| 国产9区| 五十路一区无码| 日韩在线电影| 白丝AV| 欧美激情综合| A级在线视频| 亚洲无992tv| 人妻天天爽天天爽三区| 亚洲无码超碰免费| 操操逼操操逼操操逼逼| 天天干天天操天天干天天操| 久久人人爽人人爽人人片Ⅴ| www色色com| 免费观看欧美日韩操逼视频| 老色69| 91九色丨国产丨爆乳| 69AV女优男人的天堂| 超碰色中文| 自拍二页| 91美女国产在线| 亚洲欧美激情小说| 亚洲 暴爽 AV人人爽日日碰| 91丨九色丨国产丨人妻在线 | 无码动漫av中文字幕| 人人操,人人插| 久久男人精品| 黄aaaaaaaaaaaaaaaaaa色网站| 亚洲欧美精品福利在线| 精品超碰中文在线| 色偷偷色偷偷欧美日韩| 熟女高潮精品一区二区| 另类天堂| 操逼操逼逼操操逼91| 97碰在线视频| 日韩精品高清资源在线| 91影视亚洲| 中国韩国明星一极片一区乱码毛片人妻熟女一区二区三区 | 亚洲欧美校园另类春色| 亚精品无码毛片一区二区三区| 国产丝袜高跟美女av免费观看| 天天欧美| 免费看黄视频亚洲网站| 亚洲色图大香| 天天草AV| 大学生美女口爆| A V视频日本| 男人兔费天堂| 另类专区加勒比| 亚洲国产一区二区三区在线 | 超碰这里只有精品| 少妇蹲下露出大唇5| 综合影院永久入口国产| 日韩不卡a级视频专区| 人妻81p| 丝袜大香蕉| 久热久操| 清纯唯美第一页| 色综合一区二区三区| 中文色综合| 无码9区| 校园春色家庭伦理欧美激情| 久96热在线观看视频| 亚洲一区中文字幕一区| 性性欧美| 欧美高清18A片| 国产精品电影| 激情文学亚洲| 欧美不卡二区| 青青草白白色| 无码不卡亚洲成?人片| 欧美黄色大香蕉一区二区| 青青草手机在线免费观看| 亚洲日韩精品一区二区| 欧美国产日韩高清在线| 亚洲凸凹超碰成人| 国产日韩色综合| 精品福利视频| 欧美色女人| 超碰久热| 怡红院成人视频| 欧美精品自慰系列寂寞少妇| 成人精品视频| 2019久久久久久久久福利| 麻豆区99999| 国产精品视屏| 麻豆天美电影一区二区| 欧美亚洲首页| 91丝袜美女国产| 色与欲影视天天看综合网| 国产区91柔拿会所技师| 97频视在线| 国产精品黄色三级av| 老外又粗又长一晚做五次| 殴美,日韩国产伦精品| 亚洲色人阁| 99在线精品视频| 妇女一区二区三区| 国产丝袜美女诱惑| 日韩免费a级毛片无码a∨| 97人妻色| 国产综合日韩伦理| 五月天久久婷婷亚洲 | 成人性生活高清视频在线播放| 日本黄 R色 成 人网站| 亚洲Av诱惑| 情侣开房子拍 日韩无码 女的很漂亮| 欧美色性情| 久久久久13| 亚洲无992tv| 亚洲色9| 亚洲密乳AV| 一区二区三区成人 | 98人妻精品一区二区色欲 | 激情综合五| 超碰97欧美| 国产亚卅97| 国产精品久久久久久无码红治院| 超碰在线1234区| 超碰av在线| 翔田千里AV无码秘 三区| 操美女人妻| 日本操嫩b网| 亚洲性刺激| 国产伦精品免编号公布| 人妻丰满熟妇一区二区三| 亚洲人码13| 久久性视频| 精品人妻中文字幕高清| 青青伊人加勒比海| 人人操av| 亚洲精品性爱片| 色婷婷A V一二三四区麻豆综合| 婷婷久久网| 欧美福利视频啊啊啊啊| 色婷婷一区二区三区久久午夜 | 国产树林里野战在线看| 91综合中文字幕| 欧美激情久| 五月天激情国产综合婷婷婷| 狠综合网| 中文字幕成人| 五十路六十路素人熟女| 超碰天天去日穴| 日韩精品熟妇| 91久久婷婷| 天天草夜夜草高潮片| 91大香蕉伊人| 久久综合日韩亚洲欧美| 色香色欲天天综合网天天来吧| 久久人妻| 91久热| 欧美97在线观看| 九月婷婷久久| 亚洲制服aⅴ中文字幕| 亚洲天堂男人天堂网| 嗯~啊~快点 死我视频免费看网站| 日本福利社| 人人操人人叉人人插人人| 午夜精品久久一区二区| 精品少妇一区二区| 欧美 日韩 婷婷 五月| 天天综合日韩网| 熟女被操视频网址| 久草国产在线视频| 人人做天天爱| 亲子敌伦对白在线播放| 超碰九九| 91热色| 美女黄码视频午夜| 330Dv国产女人终合视频极品人与兽 | 色波多| 欧美97超碰| 久久久青草青青国产亚洲免观精品高清完整版_97久久综合区小说区图片区,国精品 | 超碰97在线中文| 蜜臀人妻少妇久久在线观看| 性欧美另类高清| 丁香婷婷大香蕉| 国产女生在线| 国产AV无码AV| 免费伦费视频在线观看| 欧美韩国你懂得在线 | 精品国产乱码久久久影院| 欧亚揄拍偷拍精品视频 | 国产又大又粗又长视频在线| 91久精品| 内射白嫩美女| 97久久久久久久精| 色97| 91欧美高清| 一本一道人妻久久一区二区三区| 99爱在线视频| 成人看片网站| 99热这里都是精品| 丁香六月天| 亚洲精品99| 色欧美天天| 黑丝少妇在线观看| 91oumei| 国产少妇与亚洲av| 爱射综合| 国产精品经典一卡久久久| 97综合在线观看| 国产精品情侣啪啪| 亚熟在线| 97超碰久久色| 视频黄站| 午夜美女诱惑电源网| 九九热精品| 无码78| 国产在线能看的你懂的| 涩涩涩综合| 乱伦Av网| 噜噜在线| 精品久久久久9999| 天天干天天中出av| 色一区二区三区综合| 熟妇高潮二区三区| 97超碰超| 婷婷干黄色| 欧美日韩操逼动图| 狠狠综合| 97色97好| 蜜桃网熟妇| 丝袜亚洲综合| 天天日天天搞天天干| 国语av最新自产拍在线观看| 337p大胆噜噜噜噜噜91Av| 欧美黑人猛交春色影视大全| 5252色欧美在线| 日韩人妻精品| 99re免费| 久草免费福利在线播放| 国产精品电影| 国产精品色哟哟| 超碰久草| 亚洲第一页第二页激情| 免费观看的黄色的网站| 日本一本一区二区三区四区五区欧美日韩中文字幕 | 日本乱人伦片中文三区| 人人操人人精品影片| 亚洲97超碰| 亚洲色系另类精品国产| 五月婷婷无码| 中 文字幕一区二区三四 五 区日 日 骚 | 花野真衣| 中精品一区二区三区| 91肉丝| 中文自拍欧美影视| ,国产乱人伦精品一区二区三区| 亚洲精品一区二区免费在线观看| 粉嫩AV一区二区夜夜| 国产家庭乱伦性爱视频| 防屏蔽在线视频| 91高潮喷水美女| 中文字幕精品探花视频| 在线国产探花| 青青草成人视频在线观看二区| 欧美伊人电影| 色狠狠 - 百度| www四虎| 超碰97人妻自拍| 色黄色美女大长腿午夜视频| 久久熟女人| 91热热色| 日韩性爱电影一区| 亚州再线| 欧美一级在线观看成人| 免费A V在线| 久偷拍欧美日韩三区| 精品免费视频国产一区| AV电影在线播放| 欧美 亚洲 综合 制服 另类| 另类亚洲一区二区三区| 九九热精品视频在线观看| 欧美最大综合网| 日韩在线欧美精品一区二区| 天堂蜜桃无码视频一区二区| 蜜区区视频79| 中文操嬖片。| 亚洲综合校园春色| 国产亚洲精品美女久久久| 英伦大奶子熟妇吊带| 后入国产| 韩国久久97| 久久国产精品m码| 亚洲精品成人| 欧美综合亚洲| 极品极品色影院| 夜夜高潮夜夜爽国产伦精品| 黄色小视频日本txt| 18禁久极品美女久久哦哟呀!| 久草尤物| 男人的天堂欧美| 国产精品不卡一区二区三区av| 国产白丝精品在线观看| 91色综| 啊啊啊免费视频| 超碰在线99| 9Ⅰ超碰| 精品精品精品| 91老熟妇| 午夜性| 亚洲成人性爱网站在线播放| 久久久久久久久久久999| 老熟女搡BBBB搡BBBB视频| 国产传媒美日韩av| 中文字幕黄片在线| 激情欧美日韩女同久久| 伊人久久综合精品欧美| 亚洲性少妇| 人妻中文字幕日韩电影| 精品久久久久成人码免| 在线另类| 欧美色图综合| 精品一区二区麻豆| a天堂视频| 欧美久久人体| 欧美后进式| 欧美黄色手机在线观看| 少妇500双飞99| 国产熟女完整版中字 | 麻豆精品三区视频| 粉嫩绯色AV一区二区在线| 96超碰网| 色好看av| 日日操丁香五月天| 欧美操逼录像国产黄色国产| 七久久久| 久久中文字幕一区不卡| 综合一区二区影视| 五月天激情小说| 男人天堂网站| 亚洲精品 欧美精品| 久久久国产三级黄色片| 97久久网| 精品一区二区三区四区外站| 久久99综合| 大二网站亚洲| 久久久成人免费av电影| 日韩国语字幕| 在线a v| 久久中文字幕在线观看| 大香蕉欧美伊| 在线国产探花| 日本羞羞的视频在线播放| 久久亚洲人妻| 丁香五月激情婷婷| 国产三级在线现体验区| 夜夜高潮夜夜爽国产伦精品| 九一屌逼| 手机看片1025| 亚洲无码精品AV久久久| 日韩免费性爱视频在线观看| 囯产精品久久久久久久久久梁医生 | 91九九九逼| 另类小说五月天| 性爱视频啪啪啪啪| 91狠狠狠| 91在线免费观看处女| 亚洲国产ⅴ高清在线观看| 2017天天插| 天天综合网入口~91| 日本肏逼视频在线观看| 97久久网| 欧美色图小说综合| 天堂在线一区二区| 亚州少妇| 欧美精品99久久久| 淫荡少妇免费| 亚洲黄色AV电影| 久久网亚洲| 国产丰满少妇久久久精品影院| 天天日少妇逼AV| 殴美在线AⅤ| 久久受www免费人成| 欲香欲色| 久久免费9| 亚洲日本大香蕉1| #NAME?| 二对二中文字幕。| 欧美人妻精品| 久久草草欧美精品| AV九九| 夜夜影视四色| 日本一级婬片试看三分钟| 久久久久久网址| 大香蕉中文在线| 久久久涩| 日本ZZ高免费A级视频| 欧美高潮| 中文在线视频| 欧美一区二区三区成人性生活| 欧美日韩国产电影| 九九久久99| 欧美色图私拍91| 91女神在线视频| 97国产精品国| 男人的天堂在线2| 人妻精品综合中文字幕在线 | 欧美日不卡| 久久乐| 91oumei| 男人天堂2019亚洲| 韩国久久97| 99免费视频| 婷婷五月色| 一区二区激情国产熟女| 熟女精品一区二区三区| 久热这里| 日韩有码免费视频| 亚洲综合春色| xxx亚洲午夜天堂| 天天弄欧美| 久久精品视频在线观看| 99精品人人爽| 青青草AV色| 欧美宗合网| 老司机福利青青草| 日韩性爱免费观看视频| 思思热久久成人| 欧美亚洲日本激情在线| 噜噜吧,噜噜色,噜噜| 丁香五月激情网| 天天综合精品| 男女激烈网站最新| AV和黑人在线播放| 九九精品网| 日韩人成网站在线播放| 亚洲精品一区二区精品| 玖色AV| 欧美视频激情久久久久久| 一区二区高清视频| 日韩乱插| 亚洲综合码| 高潮综合网| 蜜臀久久99精品久久久久久成人小说| 91网九色蝌蚪操熟女| gogogo免费高清看中国国语| A片 AV一级在线播放观看免费| 97 色综合| 天天日老熟妇| se吧提供国产乱老熟视频胖女人 | 男人天堂2012| 久久久免费的精品| 久久久国产亚洲精品系列| 舔足天天操天天射| 天美传媒av一区二区| 人人摸人人干| 欧美综合自拍成人自拍第二十页| 国产高清免费不卡av| 亚精品无码毛片一区二区三区| 欧美白嫩女HD| 首页亚洲国产高跟丝袜诱惑视频 | 色91综合网| 国产精品乱码久久久久久久| 97在线视频免费看| 一个国产在线综合网站| 综合婷婷| 色综合20p| 91社区伊人| 一块操欧美| 动漫区日韩区欧美区| 中文字幕在线观看AV| 国产精品青草综合久久| 亚洲AV噜噜狠狠网址蜜桃动漫| 一中国女人毛片水真多| 亚洲熟女人妻中文字幕一区二区| 人妻喷水| 91痴汉| 久久夜黄色无码A级大片| 欧洲综合视频| 91熟女网| 亚洲另类电影| 久久久久幕乱码| 亚洲第一黄色av网站| 色偷偷色偷偷欧美日韩| 国产高清自拍视频| 久热伊人99re| 97这里只有精品| 殴美牲| 热99这里有精品综合久久 | 五月天婷婷色色| 亚洲中文字幕一区| 91精品无码人妻系列| 国产精品粉嫩福利在线| 黄骗免费| 国产夫妻性生活视频| 国产又色又爽又舒服的三级视频| 丁香7月婷婷| 五月天大香蕉| 久久九色| 亚洲色图欧美另类在线| 亚洲国产精品9999在线观看| 98福利在线视频| 黑人黄片在线免费观看| 日本三级精品| 无码精品人妻一区二区三区妖精 | 亚洲性网| 99re在线视频国产| 国产免费久久久久| 日韩人体偷拍| 97精品国产| 精品少妇999| 91国产操逼视频| A级在线视频| 伦激情人妻另类人妻| 性饥渴少妇av无码毛片| 婷婷人妻激情| 欧美激情超碰777| 七久久久| 亚洲少妇中文字幕网址| 97碰| AV中文字幕三四五| 欧美精品双插| 亚州精人品大香蕉| 18禁止看精品中文字幕| 91伊人久久在线| 激情婷婷丁香| 九九热九九| 夜夜免费视频| 欧美久热| 久久久久婷婷精品av电影| 精品国产Av无码久久久亚洲| 少妇69中文| 亚洲国产欧美另类自拍| 国精综合一二三区影视| 欧美Aⅴ| 麻豆 亚洲 97| 九九干| 色亚洲欧美| 欧美日韩色图片| 日产操逼| 精品成人久久久人人亚洲| 日韩综合97P| 青青草久草AV| 欧美一区二区成人一卡| 亚洲人妻熟妇三十三区| 久插不卡| 亚洲人妖网| 久久久禁| 五月天AV资源| 91在线欧色| 日操粉逼逼| 欧美视频一| 亚欧操逼片在线观看| 毛片视频白嫩| 国产精品成人蜜臀AV在线| 亚洲图片激情小说| 手机av亚洲丝袜美腿日韩第一页二页| 日日夜夜狠狠| 日本成人A片免费看| 超碰九7| 亚洲男人天堂视频| 亚洲欧美中日韩| 欧美激情五月天| 日本Xx性爱| 偷拍亚洲熟女视频播放| 欧美色涩| 欧美熟妇色| 欧美成人贴图| 久久97超碰香蕉| 天堂在线一区二区| 少妇一区二区三区在线观看| 丁香五月激情综合国产| 国产欧美岛国精品一区| 亚洲精品色| 欧美爱三级日韩久久| 综合激情婷婷| 久久 亚洲 日韩 人妻| 午夜一区| 亚洲成熟国产精品美女| 超碰午夜在线| 综合网亚洲在线| 岛国毛片在线观看免费| 五月丁香六月婷| 丝袜色综合| 啪啪视频亚洲第一 | 操B久久| 99re欧美| 777奇米影视777四色| 亚洲男人的天堂AV| 亚洲色图综合| 99热在线播放| 亚洲成人AB| 亚洲四虎熟女精品| 天堂亚洲精品久久老牛| 亚洲国产精品无码AV久久久| 美女好片色日本| 亚洲熟伦熟妇AV无码春色| 天美精品一区二区三区四区在线观看| 巨爆乳一区二区爆乳区| 亚洲欧美校园| 欧美78| 激情五月综合网| 夜夜高潮夜夜爽夜夜爱爱一区| 福利伊人玖玖国产| 天天日少妇逼AV| 性爱AV天堂| 大香蕉久久| 一区二区三区免费岛国片| 激情久久日韩精品中文字幕麻豆| 首页中文字幕中文字幕免费| 亚洲骚男同com| 激情久久久| 欧美色图下一页| 欧美经典一区二区三区| 97在线欧洲| 日本精品成人无码| 亚州日韩97| 9I1性色影院| 一起草AV| 亚洲欧美另类图片| 日韩人妻播放| 久久超碰亚洲人| 强奸乱伦AV一天堂网| 熟女乱伦二区| 国产免费内射视频| 狠狠狠狠狠| 中文字幕第9页萱萱影音先锋| 91爰爱欧美| 中文字幕精品区先锋资源| 97碰| 国产精品乱码久久久久久| 蜜臀av一区二区三区免费观看| 日本乱人伦片中文三区| 91老熟女91老女人| 夜夜操91744565| 亚洲女毛多水多21P| 久久神马| 蜜桃臀一区二区三区久久| 殴美日韩m| 欧美在线视频99| 精品无av| 一区=区三区视频| 精品蜜乳AV免费观看| 国产美女91视频| 两性色网| 78精品| 蜜臀精品1区2区| 18禁精品网站在线看| 97视频新免费| 色噜噜综合在线| 成人无码在线视频网站| 精品无码久久久久| 国产精品久久伊人| 欧美综合1性辶| 久草精品在线| 久久久一二三四区| 黑人精品欧美一区二区蜜桃| 超碰69| 欧美色图97| 亚洲好色人妻| 色狠狠一区二区三区香蕉| 春色综合免费| 在线洲亚线| 久久久久久人体| 欧美激情专区| 91啦人妻| 天天操天天射天天日| 精品中文字幕一区二区| 国产女人高潮嗷嗷嗷叫小说| 亚洲成人免费中文字幕| 91精品伊人久久久大香线蕉91| 久久草在线综合视频| 九九99精品| 欧美精品另类人妖xxxx| 级品肉射| 熟女91网| 亚洲啪啪综合?v一区综合精品区| 免费在线看黄片av| 国产aⅴ无码片毛片一级网站| 多乙久久久久久| 少妇无码太爽| 精品人妻一区二区三区视频| 夜夜嗨免费视频| 久久久久久九九九九| 污污汅18禁网站在线永久免费观看 | 绯色AV粉色AV蜜臀AV|