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

ARTICLE DETAIL

資訊詳情

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

Modbus TCP Server源碼解析:從寄存器模型到并發(fā)與排錯實戰(zhàn)

Modbus TCP Server源碼解析:從寄存器模型到并發(fā)與排錯實戰(zhàn) 簡介這是一份基于C實現的MODBUS TCP服務器源碼主要面向工業(yè)自動化領域的開發(fā)者用于快速搭建支持MODBUS TCP通信的服務端程序。源碼實現了MODBUS協議中常用的功能碼03讀取輸入寄存器/離散輸入與功能碼16寫多個保持寄存器覆蓋請求解析、應答構造和常見錯誤處理流程可作為理解協議棧、學習TCP/IP網絡編程及進行二次開發(fā)的基礎框架同時幫助理解MODBUS協議規(guī)范與報文交互機制。資源壓縮包共22個文件、約152KB以7個h頭文件與5個cpp源文件為主附帶Visual Studio工程配置sln、vcxproj、rc等整體結構清晰便于在Windows環(huán)境下直接編譯調試。目前已有2173人學習/下載。通過研讀源碼開發(fā)者可以掌握從報文接收到響應返回的完整實現思路并據此便捷地擴展線圈讀寫等更多功能碼適配智能能源管理、環(huán)境監(jiān)測、自動化產線等不同工業(yè)控制場景提升設備互聯與遠程控制的開發(fā)效率。1. 為什么 MODBUS TCP SERVER 源碼值得翻現場最常見的尷尬是用現成的 Modbus 從站模擬器主站數據讀得干干凈凈等換成一版自己寫的服務端連接能建立、報文也發(fā)了寄存器卻永遠返回零或者偶爾飄成亂碼。你面前只有一個黑匣子轉向現有工具又復現不了最后只能硬著頭皮把服務端源碼從頭到尾查一遍。這正是 MODBUS TCP SERVER 源碼的價值所在它不是拿來到處復制粘貼的模板而是你處理現場問題的最后一本底賬。這篇文章會從一份最小可運行的服務端源碼講起把 Modbus TCP 的報文結構、寄存器模型、并發(fā)處理和事務標識拆清楚再把我在幾個設備聯網項目里遇到過的坑按“現象—原因—解決”寫成排查清單。適合兩類人一類是要把 Modbus TCP Server 集成到采集網關、邊緣盒子或上位機里的開發(fā)工程師另一類是天天跟 PLC、HMI、組態(tài)軟件對點表被未知從站行為反復折磨的調試工程師。讀完你至少能帶走兩樣東西一套可以直接抄作業(yè)的源碼骨架一份按圖索驥的排錯手冊。至于最后要不要用開源庫、要不要自己維護看完第三四章你自己就能拍板。2. 從協議到源碼MODBUS TCP SERVER 的最小骨架2.1 先看 7 字節(jié)頭事務、單元和長度怎么對齊寫服務端之前腦子里必須有一張固定的幀結構圖否則后面所有字節(jié)偏移都會算錯。Modbus TCP 的請求由 MBAP Header 和 PDU 組成。MBAP 固定 7 字節(jié)事務標識符占 2 字節(jié)協議標識符占 2 字節(jié)長度字段占 2 字節(jié)單元標識符占 1 字節(jié)。事務標識符用在同一個連接里把請求和響應配對協議標識符必須為 0表示這是 Modbus 協議長度字段表示單元標識符加 PDU 一共還有多少字節(jié)單元標識符在串口透傳網關里代表從站地址純 TCP 場景通常填 0 或 1。服務端最容易翻車的不是總字節(jié)數而是長度字段的計算口徑。請求頭里的 length 是“單元標識符 1 字節(jié) PDU 長度”。也就是說服務端讀完 7 字節(jié)頭之后還要繼續(xù)讀 length-1 個字節(jié)才是完整的 PDU。很多新人直接把后續(xù)所有可讀字節(jié)當成一幀收完在連續(xù)請求的場景下會把下一個請求的頭也吞進去表現就是第一幀正常第二幀開始全部錯位。下面這張表列出四個最常用功能碼的請求響應格式實現的邊界判斷基本都圍繞它展開。功能碼含義請求 PDU響應 PDU0x03讀保持寄存器起始地址(2B) 寄存器數量(2B)字節(jié)數(1B) 寄存器值(NB)0x04讀輸入寄存器起始地址(2B) 寄存器數量(2B)字節(jié)數(1B) 寄存器值(NB)0x06寫單個寄存器地址(2B) 值(2B)地址(2B) 值(2B)0x10寫多個寄存器起始地址(2B) 數量(2B) 字節(jié)數(1B) 值(NB)起始地址(2B) 數量(2B)注意 Modbus 協議里的寄存器地址從 0 開始而組態(tài)軟件界面上往往顯示成 40001、40002這個 1 的偏移是上位機顯示層的事源碼里別跟著加。我在項目里見過服務端收到起始地址 0 卻去讀數組下標 1最后每個點位都差一位。2.2 寄存器模型的取舍用哪種內存結構支撐讀寫Modbus 的 PDU 不關心數據來自數組、數據庫還是某個硬件寄存器服務端源碼真正的分水嶺在寄存器模型的組織方式。最直接的做法是把每種寄存器區(qū)域做成一個數組。保持寄存器用 16 位無符號整數地址連續(xù)讀寫都靠下標索引。先初始化一塊長 100 的列表寫單個寄存器就更新第 n 個元素讀就按切片返回。這個模型跑通協議已經足夠但它有個明顯缺點當點位數量和業(yè)務邏輯變多每個功能碼分支都要復制一遍邊界判斷代碼很快會變得沒法維護。我建議的順序是先用簡單數組把服務端跑通再做數據訪問層抽象。不要一開始就上配置文件、多區(qū)域映射那會讓問題疊加。真實項目里常見的做法是維護一個點表配置每個條目包含起始地址、數量、讀寫權限和數據來源服務端在收到請求后根據配置動態(tài)查表。這個會在最后一章展開。選型方面還有另一條路直接用現成開源庫比如某開發(fā)者常用的 Python Modbus 庫它內置了 Datablock 和協議解析上位機工具類項目用它非常省事。我當時堅持自己寫一遍是因為內核要移植到一個很小的實時系統里第三方庫依賴太重不如一套純 socket 代碼容易裁剪。這個選擇沒有標準答案關鍵看你的運行環(huán)境是否允許引入外部依賴。2.3 最小源碼不依賴第三方庫的 Python server下面給出一份我裁剪過的最小實現只覆蓋讀保持寄存器和寫單個寄存器以及異?;匕K茏屇阍诒镜亓⒖炭吹揭粋€可交互的 Modbus TCP Server。import socket import struct import threading # 保持寄存器表地址從 0 開始長度 100 REG_HOLDING [0] * 100 REG_LOCK threading.Lock() def build_response(tid, unit, pdu): # MBAP 中 length 單元標識(1) PDU 長度 length len(pdu) 1 return struct.pack(HHHB, tid, 0, length, unit) pdu def handle_client(conn): try: while True: mbap conn.recv(7) if not mbap: break tid, pid, length, unit struct.unpack(HHHB, mbap) if pid ! 0: break # 還需要讀取 length-1 字節(jié)的 PDU pdu b remain length - 1 while remain 0: chunk conn.recv(remain) if not chunk: return pdu chunk remain - len(chunk) func pdu[0] if func 0x03: # 讀保持寄存器 start, count struct.unpack(HH, pdu[1:5]) # 單次最多讀 125 個寄存器 if count 0 or count 125 or start count len(REG_HOLDING): resp build_response(tid, unit, bytes([0x83, 0x02])) else: with REG_LOCK: values REG_HOLDING[start:start count] payload bytes([count * 2]) for v in values: payload struct.pack(H, v) resp build_response(tid, unit, bytes([0x03]) payload) elif func 0x06: # 寫單個保持寄存器 addr, value struct.unpack(HH, pdu[1:5]) if addr len(REG_HOLDING): resp build_response(tid, unit, bytes([0x86, 0x02])) else: with REG_LOCK: REG_HOLDING[addr] value resp build_response(tid, unit, bytes([0x06]) struct.pack(HH, addr, value)) else: # 非法功能碼 resp build_response(tid, unit, bytes([func | 0x80, 0x01])) conn.sendall(resp) finally: conn.close() def start_server(ip0.0.0.0, port502): srv socket.socket(socket.AF_INET, socket.SOCK_STREAM) srv.setsockopt(socket.SOL_SOCKET, socket.SO_REUSEADDR, 1) srv.bind((ip, port)) srv.listen(5) print(Modbus TCP Server listening on {}:{}.format(ip, port)) while True: conn, addr srv.accept() threading.Thread(targethandle_client, args(conn,), daemonTrue).start() if __name__ __main__: start_server()這段代碼有幾個值得圈出來的點。tid, pid, length, unit用HHHB一次拆出所有多字節(jié)字段都按網絡大端解析。build_response統一封裝 MBAP 頭每個分支不用各自拼長度從根上減少“響應長度算錯”的概率。REG_LOCK是必須加的因為多客戶端線程同時讀寫同一個列表不加鎖會出現數據交錯現場表現是寄存器值莫名其妙歸零或者變成舊值。功能碼 0x03 的響應里有“字節(jié)數”字段這是 01/02/03/04 共有的結構漏掉之后主站會一直等到超時。異?;匕仨毎压δ艽a最高位置 1例如 0x03 變 0x83同時帶異常碼 0x02 表示非法數據地址。主站看到高位為 1 才會按異常處理直接回普通功能碼會讓主站把后面的字節(jié)當成正常數據去解析必然錯亂。啟動后用 Modbus Poll 或其他主站工具連接 502 端口讀起始地址 0、數量 10如果返回的數據比你預期少或者讀到亂碼先看是不是字節(jié)數字段和實際返回長度不一致。這是最小實現最容易踩的第一個坑后面避坑章節(jié)還會繼續(xù)展開。3. 源碼不只是收發(fā)事務標識、并發(fā)和連接管理3.1 事務標識符(TID)并發(fā)請求配對的關鍵MBAP 頭第一個字段是事務標識英文縮寫 TID。在同一個 TCP 連接里客戶端可以連續(xù)發(fā)送多個請求并不嚴格要求一問一答。服務端必須原樣回顯請求中的 TID客戶端才能把響應和請求對應起來。如果服務端把 TID 改成了自增序列客戶端就會出現響應超時、請求錯位。有些簡單的上位機工具并不校驗 TID但不校驗不代表你可以隨便改。我用過的幾款主流組態(tài)軟件都會在協議棧里核對這個字段一旦發(fā)現對不上就把這條響應丟棄。所以源碼里最保守的做法是在handle_client入口保存?zhèn)魅氲?tidbuild_response原樣帶回。有一點容易被忽略Modbus TCP 標準允許在同一連接上多路復用事務但很多設備端從站只支持串行處理。如果你的客戶端是同一連接并發(fā)發(fā)請求而你的服務端是一個線程連續(xù)阻塞讀取響應自然是一個一個返回這時客戶端如果做了多事務 pending就會認為部分請求超時。服務端源碼要區(qū)分好“連接級并發(fā)”和“事務級并發(fā)”。最簡單的辦法是限制同一連接同一時刻只處理一個事務客戶端通常也會退化為串行。真正要支持事務級并發(fā)就得為每個連接維護一個 pending 字典按 TID 找到等待的 writer 再回包復雜度會明顯上升。3.2 多客戶端連接線程池與 asyncio 的取舍最小源碼用threading.Thread對每個客戶端起一個線程。這在客戶端數量少的時候沒有問題五六個主站輪詢完全扛得住。但現場往往是多臺主站同時連接每臺還會建立多條連接線程數一旦跑到幾十上百系統上下文切換開銷會非常明顯服務端響應延遲開始抖動。常見的替代方案有兩個。第一是線程池用ThreadPoolExecutor限制最大并發(fā)線程數。因為每個連接的處理函數是一個長循環(huán)會一直占住一個線程所以線程池大小嚴格意義上是“最大并發(fā)連接數”不是“每秒能處理的請求數”。超出的連接會在 listen 隊列里排隊如果 backlog 太小新連接會直接被內核拒絕。配合線程池一定要做空閑超時比如 30 秒沒收到幀就關閉連接否則一個斷開的客戶端沒被發(fā)現線程池里就少了一個可用的線程。第二是 asyncio 單線程事件循環(huán)適合連接多、每連接流量小、寄存器響應快的場景。但 asyncio 有個致命禁忌業(yè)務代碼里不能出現任何阻塞調用比如time.sleep、同步數據庫查詢、文件鎖。一旦阻塞所有客戶端的請求一起卡住。用 asyncio 實現 Modbus TCP Server 時讀取一幀的標準寫法是先讀 7 字節(jié)頭再根據長度字段用readexactly(length - 1)把剩余部分讀夠不要手動拼包因為 Modbus 幀邊界是自描述的長度字段就是最好的拆包依據。下面是 asyncio 服務端處理連接的核心骨架保留了 MPAB 讀取邏輯import asyncio import struct async def handle_connection(reader, writer): try: while True: mbap await reader.readexactly(7) tid, pid, length, unit struct.unpack(HHHB, mbap) if pid ! 0: break pdu await reader.readexactly(length - 1) # 按功能碼構造響應 pdu邏輯同第二章節(jié) resp build_response(tid, unit, pdu) writer.write(resp) await writer.drain() except (asyncio.IncompleteReadError, ConnectionResetError): pass finally: writer.close() await writer.wait_closed()這里的關鍵參數是readexactly它要么讀滿指定字節(jié)要么拋異常絕不會出現少讀半個數據包的情況。缺點是一旦客戶端發(fā)了一個不完整的頭服務端會一直等下去所以必須在asyncio.wait_for里包一層超時。不要小看這個超時真實網絡環(huán)境里丟包后客戶端重傳服務端如果沒有超時機制連接會一直掛著慢慢耗盡系統文件描述符。3.3 長連接 vs 短連接哪種現場更常見Modbus TCP 設計默認是長連接。真正的 PLC 主站會保持連接到從站周期性地輪詢寄存器斷線后還會自動重連。服務端如果處理完一次請求就關閉連接主站每個周期都要重新建連現場會出現“數據刷新慢、狀態(tài)經常斷”的假象。短連接場景主要出現在 Web 后臺測試、臨時腳本或者需要快速釋放端口的工具中。做服務端源碼時要兩種都支持但不要主動關閉長連接。如果你確實需要回收空閑資源把空閑超時設置得盡量長至少 60 秒以上如果主站輪詢周期本身就長要考慮把這個超時再放大。還有一個常被忽略的點半開連接?,F場網絡抖動之后客戶端已經不在但服務端的recv還一直在阻塞它根本不知道對方已經消失。解決方法是給每個連接設置 socket 超時conn.settimeout(60)超時后關閉連接并記錄日志。這一步是 demo 代碼和生產級代碼真正的分界線。某些系統里還需要配合 TCP keepalive讓內核層探測對端是否存活但 keepalive 默認探測周期很長不能替代應用層超時。4. 參數與配置讓 MODBUS TCP SERVER 源碼跑得穩(wěn)4.1 必調參數超時、緩沖區(qū)、地址范圍與端口把源碼從“能跑”推向“能扛現場”無非是把下面這幾個參數調成符合業(yè)務的數值。參數推薦值作用調大/調小的影響socket 超時30-60s檢測半開連接太小會讓慢周期主站誤認為斷線太大浪費連接資源recv 緩沖區(qū)2-8KB接收多幀時緩存Modbus 單幀小于 260B太大并不會提升性能監(jiān)聽 backlog5-10未 accept 的連接隊列太小高并發(fā)會丟連接太大占用系統內存寄存器區(qū)長度按點表實際越界返回異常碼設成 65536 沒有任何收益反而放寬了越界風險最大連接數按設備性能保護服務不被打爆超過可以拒絕新連接返回日志字節(jié)序big-endian寄存器默認大端改成小端會直接造成數據翻倍端口默認是 502Linux 下低于 1024 的端口需要 root 權限很多開發(fā)環(huán)境會先用 1502 調試上線再映射到 502。如果你用 Docker 部署容器內的 502 可以映射到宿主機的 1502不影響協議本身。SO_REUSEADDR一定要在 bind 之前設置否則服務端程序重啟后會因為之前的 TIME_WAIT 狀態(tài)占用端口而失敗。這個選項不會像某些博客講的那樣“解決并發(fā)連接被 bind 拒絕”的問題它只是允許重用地址避免快速重啟時端口被占用。4.2 功能碼的邊界03/04/06/16 怎么實現與限制Modbus TCP 的 PDU 理論最大長度是 253 字節(jié)這一個數學約束決定了很多功能碼的數量上限。讀保持寄存器 0x03 和讀輸入寄存器 0x04 單次最多讀 125 個寄存器因為每個寄存器 2 字節(jié)125 個就是 250 字節(jié)加上功能碼和字節(jié)數正好 252卡在 253 以內。寫多個寄存器 0x10 單次最多寫 123 個因為請求里還有起始地址和數量留給數據的空間更少。很多從站源碼沒有做這個限制收到 count200 的請求時直接越界訪問列表并拋異常連接直接斷掉。主站看到連接斷開通常會連續(xù)重試然后報告“從站無響應”。正確的做法是像第二章節(jié)代碼里那樣把邊界判斷放在任何數據處理之前如果 count 超過上限就返回異常碼 0x02 非法數據地址而不是讓程序崩潰。06 寫單個寄存器是最簡單的不存在批量上限問題但要處理地址越界。有些主站用 06 寫單個設置項時起始地址正好是點表末尾你如果只判斷addr len(REG_HOLDING)就沒有給“最后一個合法地址”留空間。常規(guī)寫法是addr len(REG_HOLDING)對應數組下標 0 到 len-1 合法。01 和 02 線圈/離散輸入功能碼在現場也很常見。線圈是 bit 存儲讀取 2000 個線圈需要 250 字節(jié)數據正好是 PDU 允許的極限。如果只實現了寄存器客戶端發(fā) 01 功能碼就會收到 0x01 異常。大多數設備端會同時實現 01/02/03/04因為組態(tài)軟件默認要把所有類型都讀一遍。4.3 錯誤處理異常碼返回與日志Modbus 異常碼總共就那么幾個0x01 非法功能碼、0x02 非法數據地址、0x03 非法數據值、0x04 從站設備故障。返回異常時必須把功能碼最高位置 1。比如 0x03 變成 0x830x06 變成 0x86。最高位沒有置 1 的響應會被主站按正常數據處理這是現場排查時最難發(fā)現的錯誤之一因為報文結構看起來完整實際內容全是錯位數據。日志不要貪多。每個連接記錄 TID、功能碼、起始地址和數量就夠了寄存器內容只有在異常時才打印。我見過有人把每個請求的完整十六進制都打進日志結果服務端跑一天日志文件幾個 GB真正想看關鍵信息的時候全被刷沒了。生產環(huán)境里建議加一個開關默認開“請求摘要日志”級別 INFO調試時開“詳細報文日志”級別 DEBUG。抓包工具能覆蓋一部分問題但服務端日志能看到“程序內部認為哪里越界”這是 Wireshark 看不到的。5. 避坑MODBUS TCP SERVER 的常見故障排查5.1 現象請求一多寄存器值就被置零現象是單個連接單次請求都正常主站并發(fā)輪詢或者頻繁寫操作之后某個寄存器開始變成 0再過一會又恢復。原因通常是兩個一是多線程同時寫同一個寄存器數組沒有加鎖Python 里雖然 GIL 保證了單個字節(jié)碼指令的原子性但列表切片和賦值并不是整體原子操作兩個線程交錯時會讀到舊值二是服務端讀取 PDU 時沒有嚴格按 length 字段接收用了一次不完整的 recv導致下一幀的偏移量出錯寫入請求的地址亂套。解決方法是給寄存器數據加鎖并在解析幀時嚴格按“先讀 7 字節(jié)頭再循環(huán)讀夠 length-1 字節(jié)”來收包。第二章節(jié)代碼里的while remain 0就是這個目的。不要相信一次 recv 能拿到完整 PDU尤其在本地回環(huán)之外的以太網環(huán)境。5.2 現象連接不釋放導致端口耗盡現象是服務端運行一段時間后新的客戶端連接全部失敗用netstat能看到大量 TIME_WAIT 或者 ESTABLISHED 狀態(tài)的連接堆積程序日志里全是 bind 或 accept 相關的報錯。原因是對端異常斷開時服務端 recv 沒有返回一直阻塞或者客戶端主動關閉時服務端沒有進入 close 流程。每個堆積連接占一個文件描述符Linux 默認進程最大文件描述符是 1024很快就會被耗盡。解決方法是給每個連接設置超時時間conn.settimeout(60)在handle_client里把 socket 超時異常統一捕獲并關閉連接。同時可以在 accept 后設置 TCP keepalive但 keepalive 默認參數在 Linux 下是 2 小時不適合短周期檢測需要配合套接字選項調整探測時間。最穩(wěn)的還是應用層超時加線程回收。5.3 現象字節(jié)序反了明明是 1 讀出來是 256現象是寫一個寄存器值 1主站讀出來是 256寫 0x0102讀出來 0x0201。原因是 Modbus 寄存器默認大端高字節(jié)在前。如果用本地字節(jié)序的struct.pack(H, value)在 x86/ARM 小端環(huán)境里會把低字節(jié)放到內存前面報文變成低字節(jié)在前主站按大端解析正好反了。解決方法是所有多字節(jié)字段統一用H、I不要用裸的H或I。Python 的struct默認用本地字節(jié)序機器不同行為不同最容易踩。排查時寫一個固定值 0x1234 到寄存器讀回來看字節(jié)排列能立刻確認是不是字節(jié)序問題。5.4 現象模擬器可以讀真實 PLC 請求超時現象是 Modbus Poll、模擬主機都能正常讀寫換成某品牌 PLC 做主站后服務端日志顯示收到了請求但主站一直報超時或者間歇性失敗。原因通常是真實 PLC 會一次性建立多個連接并在一個連接里連續(xù)發(fā)送多個請求還有可能是 PLC 發(fā)送了你沒有實現的功能碼比如 0x10 寫多個寄存器而服務端返回了非法的異常碼主站協議棧直接放棄重試。解決方法是先抓包看 PLC 實際發(fā)出來的請求是什么樣子。重點看三個字段TID 是否在同一個連接上遞增、功能碼是什么、起始地址和數量是多少。抓不到包時在服務端日志里打印收到的原始 PDU 十六進制哪怕不打完整報文也要打功能碼和長度。很多問題時隱性的主站只報超時不會告訴你它發(fā)送了什么。5.5 現象異步框架里用阻塞讀導致整個服務卡死現象是用 asyncio 實現的服務端在低并發(fā)時正??蛻舳诉B接一多整體響應延遲飆升甚至所有請求都沒反應。原因是在異步回調里用了同步的time.sleep、同步 socket 操作或者 CPU 密集型的大循環(huán)。asyncio 是單線程事件循環(huán)一個阻塞調用會停掉整個循環(huán)其他連接即使早就準備好了也無法被處理。解決方法是所有耗時操作放進線程池比如await asyncio.to_thread(do_heavy_work, data)讀取網絡數據必須用reader.readexactly不要用socket.recv。同時給每個請求的處理加上超時保護避免某個客戶端不發(fā)完數據時整個事件循環(huán)被readexactly永久占住。這個坑最容易在“把原來 thread 版改成 asyncio 版”的時候出現因為很多代碼只是換了個殼內部還是一堆阻塞函數。6. 從源碼到交付寄存器映射、抓包驗證和壓測6.1 把寄存器表變成配置而不是把地址寫死在 if 里第二章節(jié)的源碼用的是一個固定長度列表適合跑通協議。真正到一個有幾十個點位、不同寄存器代表溫度、轉速、狀態(tài)的現場再在 if 分支里手寫地址就很痛苦了。我一般會把點表抽成一個配置結構每個數據區(qū)包含起始地址、長度、讀寫權限、當前值來源函數。比如溫度寄存器由傳感器線程更新設定值寄存器由 Modbus 寫請求更新。服務端收到請求后先按功能碼找到對應的數據區(qū)再做邊界判斷。這樣做的好處是現場點位調整時只改配置不重新編譯。點表結構可以用一個簡單的 Python 類來表示核心目的是讓“地址—數據來源”的映射一目了然。不要在這里過度設計第一個版本用 dict 加回調函數就足夠。6.2 抓包驗證是源碼調試的第一現場Wireshark 是排查 Modbus TCP Server 最直接的證據來源。過濾條件寫tcp.port 502逐幀展開 MBAP 和 PDU立刻能看到長度字段是不是正確的、功能碼有沒有回執(zhí)、異常碼高位有沒有置 1。我最常用的驗證套路是先寫一個寄存器值 0x0102再讀回來。如果抓包看到的值是 0x0102說明字節(jié)序和收發(fā)都正常如果看到 0x0201不用懷疑就是字節(jié)序問題。然后再測邊界讀起始地址 0、數量 125成功改成數量 126應返回 0x83 0x02。這個用例能同時驗證正常路徑和異常路徑。Wireshark 里如果看到 Malformed 標記基本是長度字段和實際數據長度不匹配。此時不要急著改程序先看這一幀的 Byte Count 和后續(xù)實際字節(jié)數差了幾個。常見原因是在響應里多寫了地址或者少算了 unit 標識符長度。6.3 給源碼加一個最小壓測腳本交付之前我會用一個幾十行的腳本做一次并發(fā)冒煙。下面是一個用 Python 線程池模擬多主站的簡單框架每一線程建立獨立連接連續(xù)執(zhí)行寫后讀統計成功率import socket import struct import threading def modbus_read(conn, start, count): # 構造 03 請求 tid 1 pdu struct.pack(BHH, 0x03, start, count) mbap struct.pack(HHHB, tid, 0, len(pdu) 1, 1) conn.sendall(mbap pdu) header conn.recv(7) tid2, pid, length, unit struct.unpack(HHHB, header) data b while len(data) length - 1: data conn.recv(length - 1 - len(data)) return data def worker(ip, port, errors): try: conn socket.create_connection((ip, port), timeout3) for i in range(100): resp modbus_read(conn, 0, 10) if len(resp) 22: # 1字節(jié)功能碼 1字節(jié)數量 20字節(jié)數據 errors.append(short response) break conn.close() except Exception as e: errors.append(str(e)) threads [] errors [] for i in range(20): t threading.Thread(targetworker, args(127.0.0.1, 502, errors)) t.start() threads.append(t) for t in threads: t.join() print(errors:, len(errors))這個腳本不對響應內容做過深校驗它主要看兩件事多連接并發(fā)時會不會崩、會不會出現短包。如果 errors 數量逐漸增長下一步就去查服務端 backlog 和線程數如果短包頻繁極大概率是響應長度字段寫錯。6.4 一個長期受用的交付習慣這套源碼骨架我在不同項目里打磨過很多輪真正讓它穩(wěn)定下來的不是代碼技巧而是“每跑一個用例都留證據”的習慣。本地能連通只是第一步邊界返回、異常碼、并發(fā)讀寫、抓包一致性這四個驗證點缺一不可?,F在每接到一個要集成 Modbus 從站的活我都會先花一小時把最小服務和壓測腳本搭起來再開始談業(yè)務點表。源碼的價值不在第一次運行通過而在后續(xù)任何一次故障里你都能翻開它快速定位到那幾行可疑的判斷。希望幫到你。本文還有配套的精品資源點擊獲取
返回列表
PREV
查看更多資訊
NEXT
返回資訊列表
91国产丝袜美女| 久久草草亚洲蜜桃臀| 精品亚洲| 超碰在线人妻不卡| 黄色片A级一区二区三区| 色欧美亚洲| 3P乱轮视频| 亚洲男人的天堂V| 久久久久久9999| 操人妻视频| 91性高潮久久久久久久久| 青青草手机在线免费观看| 国产福利合集| 欧美第一页性| WWW.操逼.COM| 大香蕉 222| 97国产精品久久久久| 日韩精品一区二区人人人| 国产a级午夜毛片| 丰满人妻一区| 日韩av乱伦| 欧美日韩人人精品| 精品久久久av无码免费| AV天堂电影网| 日本色色视频网站| 国产精品午夜福利视频| 性爱乱伦网址| a啊啊啊啊啊啊啊啊一区二区| 国产福利电影| 91欧美长吊| 日韩成人高清一区二区| 久久久∴| 久久东京热久久| 操逼不卡中文字幕| 欧洲欧美视频一区二区| 裸体1区| 国产网红精品| 尤物AV免费网站| 成人国产精品三级A片| 天天射天天色成人| 美女啊啊啊啊pc| 国产午夜在线观看| 国产精品色哟哟| 伊人网综合在线视频| 日韩特一级久久| 大香网伊人久久综合| 男人在线天堂| 精品人妻一区二区蜜桃视频| 日韩人妻精品久久久久| 天天爱综合网| 伊人久久综合精品欧美| 久久久久久久久久久久97| 91婷婷伊人狠人| 国模无码人体一区二区三| av一区二区三区四区五区久草臀| 久久国产在线一区二区| 人妻素股| 蜜桃精品一区二区三区ww| 久久蜜桃一区二区| 亚洲、日韩、综合、另类| 中文字幕91页| 日韩欧美大片免费高清啪啪| 啊啊啊好湿国产一二| 亚洲精品官网在线观看| 秋霞 色色| 熟妇最新先锋一二三区| 伊人网综合在线视频| 色香天天| 超碰精品人妻狠狠干| 欧美综合站| 在线观看色视频| 一区二区三区国产在线播放 | 欧美大香蕉在线观看| 性暴力欧美猛交在线直播| 人人妻天天做天天爽| 伊人网av| 免费一级毛片在线视频观看| 日小BB小视频| 婷婷操视频| 91精品人妻啪啪间| 久久一本大香蕉| 日韩99神马视频播放片在线播放| 操逼无码操逼| 日韩兔费看黄片| 熟女熟妇伦久久影院毛片一区二区| 黄色片大香蕉| 熟女人妻一区二区三区| 国产亚洲日韩在线三区黑人| 国产久久天堂资源| 亚洲天堂一区二区| Aa东京男人的天堂| 日日A∨| 色好看av| 青青草五月天| 国产一级久久久| 日韩另类| 久久精品人体| 情色AV电影| 久久99网站| 亚乱色| 操日韩第| 久久99人妖视频国产| 日韩字幕一区| 色情乱伦AV| 日韩簧片免费看| 国产 日韩 欧美一区| 青青草色AV| AV色五月天| 日产123区精品免费观看| 国产99999| 搡老女人老91妇女熟女| 青青草国产一区二区三区| www.人人cao| 国产AV激情无码久久无码| 国产成年精品高清在线观看91| 国产精品午夜福利| 91精品老女人| 999久久久国产精品| 97中文字幕一区| 免费人人搞97| 怡红院成人av| 职场同事知名国产国产精品久久欧美日韩 | 91爱网| 精品少妇999| 天天做天天爱| 一区三区啪啪| 东京热男人的天堂精品| 欧美极度丰满熟妇hd| 操人无码| 亚洲精品一区二区免费在线观看| 宅男91视频在线播放| 欧美成人精品一区二区三区| 久久精品中文| 青青国产在线拍揄自揄拍| 久久亚码| 久久成人东京热人妻| 亚洲资源一区| 国产美女91| 免费成人自拍视频在线| 久久五月天婷婷丁香中文字幕| 偷拍 亚洲 欧美| 天天看天天日天天操| 午夜人人操| 日韩Va亚洲va欧美Ⅴa久久| 99热99在线播放激情| 婷婷导航| 超碰97最新人妻| 黑人粗大V S日韩女优视频| 舔足天天操天天射| 干干干天天| 日本一级性爱| 秋霞蝌科网日本一区| 伊人久久婷婷| 久久久久久波多野吉衣高潮| 大香久久| www..com操老师| 五月丁香色情| 啊啊啊啊啊,啊啊啊啊好舒服,操我舒服啊啊啊 | jizzjizz欧美| 蜜桃久久久久久| 亚州国产成人精品女人久久| 欧美色图亚洲激情| 18禁超污无遮挡无码免费网| 日本999精品视频| 亚洲美女30b| 丰满人妻av一区二区三区| 久久婷五月| 欧美天堂超碰97| 国产日韩久久| 亚洲AV无码成人精品久久| 手机不卡视频不卡在线一二三区| 蜜桃在线观看一区二区三区| 美女爽到高潮91| 囯戸精品高潮呻吟旡码| 大香蕉久| 超碰免费欧美7| 亚洲精品97| 免费观看啪视频| 香蕉免费一区二区三区不读| 日韩成人私密一级精品av| 成人性爱美曰韩| 婷婷五月天丁香花| 狠狠爱大香蕉| 日韩内射视频| 蜜臀av中文字幕| 亚洲国产精品无码AV久久| 麻豆视频国产一区二区| 久久久久久波多野吉衣高潮| 七月丁香婷婷| 黄色网址久久精品欧美喷水| 加勒比综合在线| yellow网站免费观看日韩高清无码| 深田咏美亚洲精品福利社| 亚洲揄拍网| 91男人综合| 国产综合网站在线播放| 夜夜操一区二区| 亚洲熟女av中文字幕| 五月丁香六月综合缴清无码| 九九热精品免费视频| 亚洲黄色电影| 男人兔费天堂| 日韩高清一二三| 天天摸夜夜添无码小视频| 99爱久久视频频| 99热在线观看| 国产黄a三级三级三级av在线看| 性欧美精| 一区二区视频在线播放| 激情文学亚洲| 99色综合| 天天狠操| 日本好吊色视频| 日韩国产在线观看av| 制服诱惑亚洲一区二区三区在线观看| 熟女五十路一区二区三| 久久熟女嫩草成人片免费| 激情专区综合| 亚洲欧美日韩不卡人妻| 精品免费1| 91偷拍欧美亚洲| 天天做天天爱夜夜爽毛片试看| 欧美性爱1080p| 97一本大道亚洲一区| 国产亚洲精品美女久久久m| 操老熟女AV| 岛国免费视频在线| 久久精品国产99久久,亚洲日韩久久日本一区一区三区 | 96国产污污污丝袜| 伊人五月天激情| 国产日产欧产美韩系列麻豆免费| 8x福利精品第一福利视频导航| 在线观看一卡二卡| www.99色| 蜜臀在线网站| 亚洲综合网电影91| 欧洲亚洲国产综合在线| 激情情色五月天| 曰韩精品九九无码| 一线黄色免费性爱片| 淫穴高潮色图| 色婷婷成人综合| 亚洲va有码在线天堂| 夜夜性| 日韩ab网| 色婷五月天| 久久超碰国产一区二区三区| 精久久久| 麻豆啪啪啪视频| 精品91日日夜夜超清资源| 欧洲精品欧洲精品| 另类图片亚洲加勒比另类图片亚洲加勒比另类图片亚洲加勒比 | 国产99999久久精品| 丁香五月激情五月| 亚洲精品天堂久久A∨51成人漫| 久久熟女久| 婷婷九月色| 国产日韩欧美操逼视频| 国产精品久久久| 超碰97在线色男人??| 中文字幕精品一区二区精品| 一级乱伦网站| 欧美热图99| 红杏大香蕉| 一起草日韩| 中国AAAAAA黄色片| 免费一二区| 久久九九久精品国产尤物|国产精品爽黄69天堂A片潘金莲,国产亚洲精品第一综合 | 日本熟女中文字幕一区| 奇米四色网| 日本女人久久久| 日本久久久精品电影| 精品十三区| 国产精品九9| 亚洲第一页色| 99热18| 国产三级电影免费观看| 精品人妻一区| 色就色综合| 九九九九九九视频免费| 男人的天堂99| 射久久| 久草电影网| 视频黄站| 中国韩国明星一极片一区乱码毛片人妻熟女一区二区三区 | 78m成人视线| 99精品高潮| 日韩精品第3页| 骚乳在线| 大香蕉在线免| 国产免费久久精品99re韩国| 欧美综合 站| 97天天操天天干| 天天综和| 国产肏屁眼视频| 美女啪欧美一区| 三上制服丝AV| 色九九九综合| 日本精品九九九| 午夜天天碰综合视频| 992这里有精品| 91精品91久久久中77777| 久操精品网| 97色干| 色五月婷婷麻豆在| 欧美中字二区| 欧美亚洲涩涩| 色香网| 日韩AV噜噜噜一区二区三区四区| 国产综合久久久鬼色| 色综合潮| 日本不卡一区二区三区| 久久9精品| 麻豆久久一区二区三区| 91色夜| 久久久亚洲| 五月天婷婷在线看| 乱伦av麻豆| 国产成人精品日本亚洲语言| 99re6久热只有精品6在线直播 | 超碰欧美97| 思思热在线视频免费| 欧美激情内射| 强奸乱伦 亚洲一区| 东京热视频网| 日本日皮视频逼| 69少妇一区二区| 日韩在线电影| 特级特黄一级毛片免费| 亚洲日韩美女中文字幕乱| 欧美网站免费| 国产精品91一样| 女人的天堂大香蕉网| 亚洲欧美校园另类春色| 综合天天网| 麻豆婷婷成人一二三| 国产精品不卡一区二区三区| 密臀成人视频久久久| 欧美性夜| 精品免费囯产一区二区三区| 91伊人久| 激情五月综合网| 午夜天堂网| 性欧美第一页| 为用户提供免费看黄网址在线观看| a片偷拍视频| 女人喷水视频在线观看| 亚洲男人的天堂V| 男人天堂最新手机版在线青青草| 99热国产| 伊人久久综合精品欧美| 青青草视频爽一爽| 97久久国产| 欧美人妻一区| 五月天色色网站| 激情亚洲天堂| 丁香色狠狠色综合久久小说| 国产高清成人传媒影视| 日韩午夜国产| 亚洲影院成人| 伊人成人中文字幕久久网| 欧美色图天堂在线| 啊啊啊好湿久久| 欧美国产一区二区三区麻豆传媒| 青青草玖玖爱| www.亚洲黄色| 午夜福利视频在线一区| 又摸又舔在线观看网站| 男女做爰猛烈动高潮A片免费应用 少妇厨房愉情理伦片bd在线观看 不卡中文字幕aⅴ在线 | 久艹日日日| 国模吧 一区二区三区| 婷婷色五月激情| 亚洲爱爱视频一区二区| 韩日色费| 成人五月天色网| 欧美性爽xyxOOOO| 强奸乱伦Av网| 久草热制服丝袜在线观看| 999久久久| 无码99| 亚洲第二页| 一区二区三区 日韩欧美| 精品人妻视频一区二区三区蜜桃视频| 尤物视频偷拍免费| 久久精品国产亚洲AV成人直播| 色九九九九久| 91天堂网| 久久免费老司机精品| 中文字幕三四五区| 啊好大好舒服| 精品久久久中文字幕不| 午夜噜噜噜| 去干网最新版| 佐山爱中文字幕| 欧美性爱第1 页| 黄污污污污| 精品国产乱子伦一区二区三区,精品一| 午夜男女爽爽大片免费观看| 日本免费一区二| 一区二区三区国产在线播放| 九九九久千久久激情蜜桃在线看 | 久久久久久久9最新免费视频观看| 少妇熟女一区二区三区| 大香蕉久| 96国产精品| 成人情色一区二区| 亚洲国产精品成人久久蜜臀| 亚洲夜夜欢无码一区二区| 国产丁香精品露脸视频| 国产精品原创巨作?v网站| 白丝jkav| 最新日产中文在线麻豆| 91欧美丨精品丨入口| 岛国黄| 亚洲丰满很很操| 动漫爆乳3D奶水一区在线观看| 一区,二区,三区视频| 色官网色综合| 人人妻人人爽一区二区三区| 久偷拍| 人妻另类 专区 欧美 制服| 日日夜夜国产综合| 午夜男人一级A片7777| 综合97| 人人妻人人色| 九九九九久久久| www.色婷婷色综合| 91天天综合日韩欧美| 综合亚洲欧美| 玖玖蜜臀资源网| 中文字幕亚洲热播人妻| 欧美97视频| 韩国一级做A片免费的| 99热这里只有精品18| 国产超碰在线一区| 国产精品久久久视频| 春色91| 男人的天堂在线2| 夜色AV无码手机在线影院| 啊啊啊啊好疼| 婷婷五月天网| 国产乱色国产精品免费视| 91精品在线播放| 1区2区3区在线视频| 岛国色情视频在线观看| Aa东京男人的天堂| 日韩三级久久久| 日逼国产| 91精品女厕偷拍视频| 欧美偷拍| 精品国产乱码久久久影院| 青青草天天亲夜夜操网| 日韩精品色呦呦| 日本二三四区| 91精品人妻五十路| 天美一二三在线观看Av| 骚逼高潮久久精品| 色香色欲天天综合网天天来吧| 97在线观看免费| 大香蕉丝袜一级片| 午夜120视频在线观看| 女沟厕偷窥piss小便| 欧美色图片色哟哟| 98福利在线视频| 欧美有码亚洲中文字幕一区二区三区四区| 极品综合| 欧美第一页| 啊啊啊慢点| 精品视频久久区| 99久视频| 欧美性生活综合| 91精品老女人| 亚洲人妻精品一区二区| 欧美图片校园春色| 男人的天堂2018.| 色色99| 99久久网站| 婷婷伊人五月| 97在线观看免费| 老熟妇一区二区三区啪啪| 色爱欲亚洲| 亚洲天堂另类小说男人| 一区麻豆 高清中文字幕| 亚洲系列第一页| 狼狼色丁香久久婷婷综合五月| 亚洲一区中文字幕| 99久草| 97人人夜| 青青草国产欧美非洲黑人| 极品色综合| 澳门色噜噜色噜噜色噜噜色噜噜色噜噜| 超碰97色色| 吉田爱美AV在线| 日本97久久久精品| 夜夜国产一区| 国产诱惑| 欧美综合色| 人人操人人肉久久精品| 国产60页| 久久中文字幕一区不卡| 国产成人一级av88| 一区二区三区精品视频| 九九Av| 人妻 中文 日韩| av在线一区二区三区| 伊人影院综合是一个与深夜成人在线 | 91人精品妻入口| 在线看的av| 国产午夜激片Av毛片不卡| 日本精品不卡一二三区| 午夜超爽| 熟女被操视频网址| 91麻豆天美国产欧美| 色噜噜狠狠色综无码久久合欧美| 91无摭挡| 欧美国产操逼| 久久99九九九九6666免费观看软件| 少妇特黄一区二区三区| 亚洲中文字幕一区二区| 手机看片91人妻| 久久精品欧美一区二区三区不卡| 日韩无码操逼片| 日本女优在线视频福利| 国产在线76页| 免费成人在线熟妇网| 亚洲中文字幕av| 98人妻精品一区二区色欲| 视频黄色国产一级| 日日操丁香五月天| 91亚洲人电影| 亚洲综合骚逼| 日本一级真人黄色性爱视频| 在线a v| 99亚洲精品| 欧美视频激情久久久久久| 黑人性暴力毛片| 免费少妇一区二区| 五月激情小说| 精品成人女人久久| 12一15性XXXX粉嫩国产| 国产精品午夜高潮呻吟久久av| 国产精品自在自拍视频| 殴美性色a级欧美| 亚洲综合 欧美| 尤物视频视频官网| 六月婷婷五月丁香| 97国产精品久久久久 | 日韩AC| 四虎免费看黄| 凹凸精品熟女在线观看| www.国产高潮精品| av久日| 国产精品成久久久久午夜午夜| 91看黄片| 美女超碰978| 欧美淫乱视频| 美国aaaaa一级黄片| 超碰午夜在线| 国产又黄又爽| 黄色污污污污污污网站| 亚洲图片视频小说| 午夜寂寞欧美| 伊人伊人LD| 爱妃国产亚洲视频中文字幕| 嗯啊免费视频| 日日骚中文字幕| 婷婷综合在线| 国产9熟妇视频网站| 色牛aV| 蜜臀久久一区二区| 色九久| 99精品在线观看| 欧美91网| 五月天伊人| 好涩综合| 淮穴色AV| 又粗又长又大国产不卡| 九九热男人天堂| 国产三级片在线观看| 大香樵伊人网| 我要色综合网| 欧美18禁91| 亚洲 欧美 精品专区 极品| 午夜天天碰综合视频| 97超碰欧美中文字幕| 五月婷婷六月色| 青青青青青手机视频| 欧综合网| 色噜噜精品一区二区三| 久久久久久久久久久久九| 亚洲免费在线探花| 艳美熟妇先锋一二三区| 十八禁啪啪视频| 欧美 亚洲 大香| 午夜在线播放| 人人扣人人操| 日韩小电影| 少妇同性| 熟女精品va中文字幕| av在线浏览| 日韩中文字幕国产| 99热日| 婷色五月| 亚洲一区中文精品| 蜜臀少妇一区二区| 久久AV无码AV| 精品人妻无码一区二区三区不卡-精品人妻无码一区二区...|精品少妇一区二区三 | 国产精品爽爽v| 少妇99| AA丁香综合激情| 视频一区二区免费在线| 91色伦综合| 色婷婷色99国产综合精品| 中文字幕后石码四区五区| 亚洲码和欧洲精品激情系列| 污污汅18禁网站在线永久免费观看 | www.伪伪| silk lablo在线观看一区二区| 秋霞色色影院| 在线女人91| 奇米狠999| 78m啪啪啪| 黄色小说亚洲| 大屁股xxxxx| 国产美女高潮| 欧美熟女逼久久久久久| 久热伊人99re| 蜜臀一区二区三区在线| 99re在线精品78| 91人人爽人人爽人人人,gav福利视频导航,日韩欧美亚洲国产字幕四区 | 久久社区一区二区三区| 天天综合网~91| 九九九九精品一区| 男人下部插入女人下部| 国产辣妈在线视频福利| 国产三级中文字幕粉嫩| AV老汉| 国产玖玖| 丁香婷婷九月| 园内精品自拍视频在线播放| 亚洲诱惑天堂 | 欧美真人抽搐一进一出gif| 超碰偷拍| 久久久久78| 俺去俺来也在线www| 天天干天天操天天操夜夜操天天操 | 精品午夜福利国产一区二区在线观看| 天美欧美国产| 亚洲 中文 女同| 国产免费一区在线观看| 91五十路| 久久久网一区| 午夜精品99久久久久传媒| 成人av动漫在线观看| 97超碰9| 91内射| 亚洲做性| 亚洲人人夜夜澡人人爽| 级品肉射| 久久、1234| 日韩中文字幕熟妇人妻 | 亚洲熟女乱综合一区二区三区| 黑人嘿嘿嘿超爽免费视频| 国产精品一二三区18| sewuyueav| 亚洲日韩资源| 97超碰国产亚洲精品| 日韩不卡网操逼中文字幕日韩| 717影院理论午夜伦八戒| 国产精品嫩草影院免费| 无码国产Av| 成人AV超碰免费在线| 无遮挡又黄又刺激的视频| 亚州91| 无码人妻一区二区三区免费九色| 2017大香蕉国产精品久久| 色婷婷成人综合| 色婷婷综合久久久久中文一区二区| 户外裸露刺激视频第一区| 九九AV| 91狠狠综| 久久产精品一区二区三区电影| 四虎免费视频| 人伦四五区| 情色大香蕉| 国产91美女视频| 日韩少妇无吗| 午夜精品人妻二区三区| 激情婷婷丁香网| 97色色,97综合| 日韩美女,国产传媒,视频一区| 亚洲 综合 欧美| 天天综合网一91网| 亚洲色图加勒比| 久久黄黄| 成人熟女视频一区二区三区| 亚洲 图片 欧美 色图| 狠狠夜色午夜久久综合在线| av72网| 精久久久| 亚洲综合射| 欧美九九99久久精品| 青女在线| 中文字幕少妇色| 操逼999| 四虎免费在线播放| 亚洲另类春色| 日韩在线一区高清在线| 人妻精品一区二区在线| 久久午夜伦| 一区二区娱乐网站| 精品性爱一二三区| 99色色| 一区| av天天在线| 亚洲资源吧| 东京热一区二区中文字幕| 久久受www免费人成| 国产成人自拍视频在线| 东京太热久久久| 性吧在线视频| 日韩懂色网| 久久久久久人体| 久久性爱视频99| 爽 好舒服 无码刺激久久| 黄片aaaaa一区| 夜嗨影院| 欧美一区二区情色| 亚洲素人综合| 精品日韩人妻视频| 91丨九色丨大屁股| 色五月天AV| 国产丝袜啪啪| 97人妻免费中文字幕| 人妻激情另类| 青青草在线视频人人想人人上| 英伦大奶子熟妇吊带| 日韩专区久久久| 日本乱人伦片中文三区| 日本人妻中文字幕精品| 人妻少妇久久久| 大乔未久88一区| 国产成人久久精品蜜臀| 亚洲最大无码中文字幕网站| 欧美少妇第一页| 大香网伊人久久综合网eew| 天天夜夜rb| 国产区91柔拿会所技师| 国产性刺激| 欧美亚洲手机在线| 26UUU欧美日本| 99久久婷婷国产综合精品草原| 色嘟嘟人妻天堂网| 亚洲永久AV无码精品秋霞| 97超碰欧美精品| 中文字幕av乱伦| 亚洲人久久久网| 人妻丰满熟妇一区二区三| 久久久精品国产亚洲伊人| 久久九九久精品国产尤物|国产精品爽黄69天堂A片潘金莲,国产亚洲精品第一综合 | 亚州国产精品乱| 青青草国产一区二区三区| 一起草欧美| 欧美一区二区传媒| 亚洲性爱成人| 国产又操| 一区二区三区四区在线不卡| 性暴力欧美猛交在线直播| 91人人臊| 一区超碰一区| 美女一区二区国产精品| 欧洲精品一二三在线| 免费人成在线观看网站品爱网| 成人av动漫在线观看| 中文字幕、久久精品国产2020、久久综合久久自在自线精品自、亚洲 | 日本 成 人 小说 电影 一区二区| 少妇69中文| 黄色免费一级在线毛片| 毛片17S| 欧美激情久操网| 天天肏美女| 亚洲国产综合视频| 91女网站| 天天射天天| 九九久久国产精品| 搞中出久久| 97操在线| 美国一区二区免费视频| 俺去啦自拍| 久久大香蕉| 天久久久噜噜噜久久国产精品爽爽| 免费公开人人操| 青草影院内射高潮| 国产又操| 殴美性天天| 午夜呻吟欧美| 日韩免费高清大片在线| 另类图片亚洲加勒比另类图片亚洲加勒比另类图片亚洲加勒比 | 国产日韩中文字幕欧美| 亚洲经典啪啪| 久久久久久久9| 2025亚洲男人天堂| 免费的很黄很污的全部视频| 久久久9 9 9精品| 精品人人插人人操| 天天射夜夜操| 成人热久久精品| 欧美一区二区观看在线| 男人的天堂VA| 久久人人爽人人爽人人片Ⅴ| 欧美色图20P| 午夜激情床戏激情| 国产精品免费日韩| 欧美性色欧美| yazhousetuoumei| 殴美在线AⅤ| 97亚洲在线| 人人澡人人弄| 九热视频| 人妻干天天| 91综合天天看| 欧美天天综| av网站免费看| 久久精品视| 婷婷丁香五月综合| 人妻一二三区| 97一区二压| 婷婷五月天激情小说| 十八禁视频一区二区| 好一吊区二区| 蜜伊人色综合97| 天天躁日日躁AAA片李宗瑞| 超碰97护士| 亚洲国产剧情少妇激情| 一区三区啪啪| 91热| 欧美午夜精品久久久久久3D| 久久五月天婷婷丁香中文字幕| 天堂亚洲精品久久老牛| 电影69乱码96| 亚洲日韩成人性爱视频| 伊人热综合| 美女十八禁| 欧美 牲| 九九毛片这里只有精品| 日韩成人性爱电影在线播放| 亚洲一区中文精品| 久久粉色| 国产精品3| 美国久久一二三四| 欧美大码在线视频| 日韩无码专区| 国产综合网站在线播放| 国产精品一区在线播放| 日韩精品怡红院| 伊人青青一区成人视频在线观看区| 久久免费99精品久久久久久| 欧美亚洲手机在线| 夜夜操av亚洲一区二区| 婷婷综合网站| 日韩欧美字幕亚洲一区二区| 性爱乱伦视频免费| AV乱伦国产| 丝袜美腿av女优在线| 久久99干一本高清| 久久久999日本大片| 欧美亚洲中文字幕| 国产成人在线观看网址| 日本在线伊人啪啪| 午夜操操操| 欧美第二页午夜| 亚洲美女 晚间男人天堂 | 丁香六月婷婷久久综合| 国产 日韩 另类 视频一区爱| 夜夜嗨视频| 97资源亚洲| 婷婷性网| 四虎AV在线播放| 青青青草原| 亚洲素人综合| 91亚洲狠狠色| 久久久青草青青国产亚洲免观精品高清完整版_97久久综合区小说区图片区,国精品 | 一本色道久久天天射天天干| 丰满人妻被猛烈进入中| 青娱乐休闲视频在线观看| 欧美性暴力| 久久久久久久久久9| 黄页| 神马久久午夜| av网站免费看| 爱妃国产亚洲视频中文字幕| 欧美啪啪天堂| 久久香蕉国产线看观看亚洲女人 | 怡红院视频在线| 亚洲欧美一区二区三区在钱蜜桃| 美女操逼福利视频| 午夜影美女日鸡鸡天天视频国产| 亚洲欧美综合| 九九九成人| 啊啊啊好大好深| 日少妇视频| 搡老女人911熟妇老熟女| 自拍偷拍 日韩欧美| 亚洲精品白浆高清久久久久久 | 北野未奈加勒比av| 男人天堂无码| 人妻天堂网| 亚洲一区二区三区春色| 一级特黄aaa大片在线观看成人一级片在线观看| 五月天婷婷在线看| 在线A日本| 蜜臀AV网站| 清柠毛片| 青青草色情网站视频| 精品中文一区二区| 啊啊啊啊好疼| 亚洲欧洲中文日韩女优乱码| 九九热国产| 亚洲网站一区二区在线| 三级AV入口| 亚洲国产高清福利视频| 一区二区三区成人高清视频| 极品白嫩美女白浆成人福利在线看| 欧美色视频在线| av资源在线播放天堂| 久久久久无码| 久久6热精品99视频| 殴美性天天| 成人免费看吃奶视频网站| 久久久久国产一区二| 日韩pv中文| 久久久爆乳翘臀一线天伦理视频| 超碰在线人妻| 伊人成人情色综合| 婷婷激情五月综合| 夜草网站| 免费av在线播放二区| 偷看洗澡一二三区美女| 一起草精品人妻| 久久性爱城| 男女91| 天天影视综合色| 骚鸭AV| 久久久久久久久久va| 大学生口爆吞精| 亚洲制服aⅴ中文字幕| 婷婷五月天小说| 99黄页网站| av中亚| 日韩不卡av一二三| 情色五月天久久久| 97超碰巨乳| 久久东京热久久| 久久久久久网址| 日韩国产中文字幕| 无码高清操逼网址| 丁香五月性爱| 91国产在线精品| 蜜臀无码视频在线观看| 久久婷婷伊人| 亚洲综合射| 女欧美一区二三区| 在线只有精品| 久久精品99| 中字幕人妻一区二区三区| 亚洲免费在线探花| 久久免费中文字幕在线观看| 2017天天操天天日| 无码逼| 乱码熟妇人妻久久久| 啊啊啊啊网站| 婷婷99| 夜夜无码| 久久香蕉综合一本到3atv| 嗯嗯啊啊好疼| 精品女同一区二区三区| AV不卡在线| 中出789在线视频| 日本精品一级二级三级| 99精品久久久久久久婷婷| 国产亚洲在线观看| 白嫩妹子国产骚| 操逼视频亚洲| 国产女人9999| 精品欧美А∨无码黑人大荫蒂| 99操视频| 97精品视频免费| 日日爽熟女| 91精品人妻电影| 丰满人妻一区二区三区在线| 天啪| 日韩天美| 97国产超碰| 久久精品国产亚洲AV无码电影| 偷拍 精品另类 凸凹了四区| 天天操妹子| 亚洲宅男天堂| 亚洲性感丝袜诱惑在线观看| 伊人久久在线视频观看| 色综合美国| 亚洲欧美另类图片| oumeisetu综合| 国产精品香蕉| 日本精品不卡一二三区| 九热大香蕉| 国产精品人人爽人人做可爱福利| 五月天激情小说| 久热最新在线杭州| 久久黄黄| 欧美色www亚洲国产阿娇要播| 婷婷精品视频| 国产精品一区二区三区四区五区| 青娱乐国产精品| 国产乱不卡| 丁香六月啪啪| 久久久蜜桃臀无码视频| 欧美专利1区2区3区4区5区免费| 超碰导航97| 伊人天堂在线| 一级AV性爱| 欧美一区二区三区成人性生活| 日韩操啪| 欧美91丝袜| 五月婷婷激情网| 99热在线观看| 欧美视频第二页| 国产在线综合网| 欧美韩国你懂得在线 | 久久五月天婷婷丁香中文字幕| 精彩视频日韩| 色就色综合| 91 亚欧| 久久啊哟| 婷婷午夜成人色中色| 天天操福利视频综合网站| 人人色97| 久久精品久久九九精品| 偷拍欧美亚洲| 夜夜夜夜夜夜夜夜夜狠狠狠狠狠狠狠 | 亚洲色图久久成人| av天堂影视中文在字幕在线中文| 欧美性少妇| 亚洲国产精品久久久久婷婷青年| 九九九九精品| 狠狠躁天天躁日日躁97| 校园春色 男人天堂| 6080YYY午夜理论片在线观看| 91丝袜激情在线| 日本3级一区二区免费 | 玖玖色综合| 日韩熟女无码| 亚洲色图欧美色图在线播放| 九久9热| av凤凰久久久| 99亚洲精品| 中国91AV| 欧美日韩另类字幕中文| 亚州色图第三区| 色姑娘综合网| 在线 欧美 亚洲| 在线 亚洲 网爆 自拍| 翔田千里无码一区| 美女毛片999| 水澄无码AV| 青娱乐国产盛宴视频| 91操熟女| 97 国产精品| 91久久婷婷| 区日韩亚洲乱码av电影| 可免费观看的av毛片中日美韩| 亚洲一欧洲中文字幕在线| 亚洲男人天堂AV| 舔舔啊| 成人A片男人的天堂| 日本性爰一道本| 青青草好吊色| 日韩中文字幕精品一二三事国产精品| 日本 欧美 国产一区| 麻豆91熟妇人妻中文字幕茄子| 日本一区二区三区精品| 九九激情网| 日韩精品中文字幕一| 日婷婷| 2020久久免费视频| 亚洲图片欧美偷拍| 99国产精品自在自在| 91爰爱欧美| 日本综合久久| 青娱乐国产精品| 天天躁日日躁AAAAXXXX国产| 亚洲欧美成人网站AAA| 日韩九九九| 欧美精品系列| 超碰 国产熟女精品一区| 狠狠中文字幕| 色五月婷婷网| 99热久| 人妻人人操| 抽插无码高清一区| 91视频精品| 懂色Av| 成·人免费午夜在线观看| 91色宗合| 色欲久久99国产精品久久久久久| 久久综合女优| 99天天超碰| 97精品第3页| 天美欧美国产| 色娱乐色呦呦夜夜夜夜av| 北京美女一区二区| 91黑丝美女| 亚洲爱爱视频一区二区| 青娱乐手机日韩在线视频| 伊人操操| 91欧美综合在线| 污电影在线观看| 208天天久久九九九| 亚洲色图片区| 91丰满| 特色a在线上| 欧美色亚洲| 在线观看不卡一区二区三区| 久久久啊啊啊| 欧美玖玖爱免费玖玖| 91欧美巨乳| 亚91网| 亚洲欧美人妻| 久久性生大片免费观看性| 日本成熟少妇A∨网站| 性暴力欧美猛交在线直播| 免费公开人人操| 熟妇操花| 玖玖综合.com| 色眯眯射| 91欧美性| 老熟女阿 国产91| 91丝袜在线观看| 国产日韩精品无码去免费专区国产| 亚州色综合| 精品美女久久久久| 欧美日韩操逼动图| 涩五月婷婷| 亚洲另类色图片| 色阁阁AV综合网| 欧美的精品的视频| 日韩有码 一区二区三区| 欧美不在线| 久久精品福利影院| 色综合久| 日韩女优中文字幕| 欧美影音在线| 99久久99九九99九九九| 国产在线综合福利网站| 日本操逼视频导航| 操操逼操操逼操操逼逼| 大香蕉久操| 亚洲大色堂| AV女资源| 亚洲se91| 国产高清无码一区三区二区|