色五月色开心色婷婷色丁香,五月婷婷丁香花综合网,婷婷丁香五月激情综合在线,五月婷婷六月丁香动漫,婷婷丁香五月激情综合在线,丁香花中文字幕在线观看,播五月色五月开心五月网,开心激情综合网,狠狠色丁香婷婷综合最新地址,丁香视频在线观看,狠狠做六月爱婷婷综合av,久久激情五月丁香伊人

ARTICLE DETAIL

資訊詳情

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

.NET 6 OPC UA工業(yè)級(jí)通信實(shí)戰(zhàn):心跳保活、異步寫入與訂閱穩(wěn)態(tài)監(jiān)控

.NET 6 OPC UA工業(yè)級(jí)通信實(shí)戰(zhàn):心跳?;睢惒綄懭肱c訂閱穩(wěn)態(tài)監(jiān)控 簡(jiǎn)介本資源是一個(gè)面向.NET開(kāi)發(fā)者的OPC UA工業(yè)通信實(shí)戰(zhàn)Demo聚焦自動(dòng)化系統(tǒng)集成場(chǎng)景幫助初學(xué)者快速掌握PLC等設(shè)備與上位機(jī)間安全可靠的數(shù)據(jù)交互核心能力。Demo完整覆蓋連接建立與斷開(kāi)、變量讀寫、節(jié)點(diǎn)訂閱及心跳監(jiān)聽(tīng)五大關(guān)鍵功能依托OPCFoundation.NetStandard.Opc.Ua庫(kù)實(shí)現(xiàn)代碼結(jié)構(gòu)清晰適合作為工業(yè)物聯(lián)網(wǎng)或智能制造項(xiàng)目的技術(shù)驗(yàn)證起點(diǎn)。壓縮包共2000個(gè)文件含1218個(gè)XML配置與協(xié)議描述文件、324個(gè)隱藏系統(tǒng)文件、252個(gè)DLL依賴庫(kù)、112個(gè)TXT說(shuō)明文檔及少量CS源碼、EXE可執(zhí)行程序和Sln工程文件整體87.75MB便于按模塊定位協(xié)議配置、客戶端邏輯與證書管理細(xì)節(jié)。已有673人學(xué)習(xí)下載提供可直接運(yùn)行的完整工程環(huán)境、典型錯(cuò)誤處理示例及訂閱回調(diào)機(jī)制實(shí)現(xiàn)片段助開(kāi)發(fā)者規(guī)避連接超時(shí)、證書信任、數(shù)據(jù)變更響應(yīng)延遲等常見(jiàn)實(shí)踐痛點(diǎn)。1. 這不是“Hello World”式的 OPC UA Demo它真能跑在產(chǎn)線 WinServer 上完成設(shè)備心跳監(jiān)聽(tīng) 實(shí)時(shí)數(shù)據(jù)訂閱 異步寫入 PLC 寄存器你搜“.net opc ua demo”大概率會(huì)撞上一堆只連得上模擬服務(wù)器如 UA Simulation Server、不處理斷線重連、沒(méi)心跳?;钸壿嫛懖僮魅ㄖ骶€程的“教學(xué)玩具”。但這份.Net OPC UA通信Demo不是——它基于.NET 6 OPCFoundation.NetStandard官方 SDK非 UaClient 封裝層完整覆蓋工業(yè)現(xiàn)場(chǎng)最剛需的五個(gè)動(dòng)作連接含證書自動(dòng)信任、斷開(kāi)資源釋放無(wú)泄漏、同步讀/異步寫支持批量與單點(diǎn)、訂閱帶發(fā)布間隔、采樣間隔、隊(duì)列深度三重控制、心跳監(jiān)聽(tīng)獨(dú)立線程輪詢 Session 狀態(tài) 自動(dòng)重連觸發(fā)。它不是教你怎么建模而是教你怎么讓 C# 程序在車間工控機(jī)上連續(xù)跑 72 小時(shí)不掉線、不丟數(shù)據(jù)、不爆內(nèi)存。適合正在對(duì)接西門子 S7-1500、羅克韋爾 ControlLogix、倍福 CX 系列或國(guó)產(chǎn) PLC 的 .NET 工程師也適合需要把 OPC UA 數(shù)據(jù)喂給 WPF 監(jiān)控界面、ASP.NET Core Web API 或 MQTT 橋接服務(wù)的后端開(kāi)發(fā)者。如果你的場(chǎng)景里有“斷網(wǎng)后自動(dòng)恢復(fù)”、“寫寄存器不能阻塞 UI”、“訂閱值突變要立刻通知”、“心跳超時(shí)必須發(fā)告警日志”這些關(guān)鍵詞這份 Demo 就不是可選項(xiàng)而是避坑剛需。2. 從零搭建通信骨架.NET 6 環(huán)境下 OPC UA Client 的最小可行配置2.1 為什么選 OPCFoundation.NetStandard 而非 UA-.NETStandard 或 QuickOPC很多新手一上來(lái)就dotnet add package QuickOPC結(jié)果發(fā)現(xiàn)它對(duì) .NET 6 的 TLS 1.2 默認(rèn)策略兼容性差且內(nèi)部線程模型封閉無(wú)法干預(yù)心跳檢測(cè)邏輯。而OPCFoundation.NetStandardv1.4.368是 OPC Foundation 官方維護(hù)的跨平臺(tái) SDK其UaTcpSessionChannel和Subscription類暴露了足夠底層的控制權(quán)——比如你能直接拿到Session的KeepAliveCounter、手動(dòng)調(diào)用Session.ReconnectAsync()、甚至替換默認(rèn)的IChannelFactory來(lái)注入自定義證書驗(yàn)證邏輯。本 Demo 基于 v1.4.382它修復(fù)了 .NET 6 下X509Certificate2Collection在 Linux 容器中加載失敗的問(wèn)題且Subscription的PublishRequest重試機(jī)制已內(nèi)置指數(shù)退避比 QuickOPC 的簡(jiǎn)單重試更抗網(wǎng)絡(luò)抖動(dòng)。關(guān)鍵區(qū)別在于QuickOPC 是“幫你干活的黑匣子”O(jiān)PCFoundation 是“給你扳手和圖紙的工具箱”——當(dāng)你需要定制心跳閾值、控制訂閱隊(duì)列溢出行為、或?qū)?Windows 證書存儲(chǔ)時(shí)后者才是唯一選擇。2.2 創(chuàng)建 Client 實(shí)例四步初始化缺一不可// 1. 配置 ApplicationConfiguration必須否則證書加載失敗 var config new ApplicationConfiguration { ApplicationName OPCUA-Production-Client, ApplicationType ApplicationType.Client, SecurityConfiguration new SecurityConfiguration { AutoAcceptUntrustedCertificates true, // 生產(chǎn)環(huán)境請(qǐng)改為 false 并預(yù)置可信 CA RejectSHA1SignedCertificates true, CertificateValidation (sender, e) { /* 自定義證書校驗(yàn)邏輯 */ } }, TransportConfigurations new TransportConfigurationCollection(), TransportQuotas new TransportQuotas { OperationTimeout 15000 }, ClientConfiguration new ClientConfiguration { MaxRequestAge 30000 } }; // 2. 加載或生成客戶端證書生產(chǎn)環(huán)境必須啟用 config.SecurityConfiguration.CertificateValidator new CertificateValidator(); config.SecurityConfiguration.ApplicationCertificate await LoadOrCreateCertificateAsync(config); // 3. 創(chuàng)建 Session注意EndpointUrl 必須帶 /opcua/ 路徑否則 Siemens PLC 拒絕連接 var endpoint new EndpointDescription { EndpointUrl opc.tcp://192.168.1.100:4840/opcua/, SecurityMode MessageSecurityMode.SignAndEncrypt, SecurityPolicyUri SecurityPolicyUris.Basic256Sha256 }; // 4. 實(shí)例化并連接超時(shí)控制 異常分類捕獲 var session await Session.Create( config, new ConfiguredEndpoint(endpoint), false, // useSecureChannel null, // sessionName 60000, // timeout null, // identity null // preferredLocales ).ConfigureAwait(false);提示AutoAcceptUntrustedCertificates true僅用于調(diào)試。產(chǎn)線部署前必須關(guān)閉并將服務(wù)器證書導(dǎo)入 Windows 本地計(jì)算機(jī)的“受信任的根證書頒發(fā)機(jī)構(gòu)”存儲(chǔ)區(qū)。否則每次連接都會(huì)彈窗或拋BadCertificateInvalid錯(cuò)誤。2.3 連接參數(shù)詳解為什么你的 EndpointUrl 總是連不上參數(shù)必填典型值說(shuō)明EndpointUrl?opc.tcp://192.168.1.100:4840/opcua/末尾/opcua/不可省略Siemens S7-1500 和 Beckhoff CX 系列強(qiáng)制要求此路徑若寫成opc.tcp://...:4840會(huì)返回BadEndpointUrlInvalidSecurityMode?SignAndEncrypt僅None模式無(wú)需證書但絕大多數(shù) PLC 默認(rèn)禁用SignAndEncrypt是工業(yè)現(xiàn)場(chǎng)事實(shí)標(biāo)準(zhǔn)SecurityPolicyUri?Basic256Sha256必須與服務(wù)器端協(xié)商一致若 PLC 配置為Aes256_Sha256_RsaPss此處必須同步修改否則握手失敗OperationTimeout??15000毫秒控制單次讀/寫/訂閱請(qǐng)求最大等待時(shí)間低于 5000ms 易因網(wǎng)絡(luò)延遲誤判失敗MaxRequestAge??30000毫秒訂閱發(fā)布的響應(yīng)有效期設(shè)太小會(huì)導(dǎo)致BadRequestTooOld錯(cuò)誤頻發(fā)常見(jiàn)錯(cuò)誤BadNotConnected—— 通常因EndpointUrl路徑錯(cuò)誤或防火墻攔截 TCP 4840 端口BadCertificateUseNotAllowed—— 客戶端證書未綁定私鑰或未導(dǎo)出為 PFX 格式BadWaitingForInitialData—— 訂閱創(chuàng)建后未及時(shí)調(diào)用session.AddSubscription()。3. 數(shù)據(jù)讀寫實(shí)戰(zhàn)同步讀取 異步寫入避免 UI 卡死與寄存器沖突3.1 同步讀取一次讀多個(gè)節(jié)點(diǎn)但別踩“超時(shí)疊加”陷阱// 構(gòu)造讀請(qǐng)求支持 NodeId 字符串如 ns2;sChannel1.Device1.Tag1或 NumericNodeId var readRequest new ReadRequest { NodesToRead new[] { new ReadValueId { NodeId NodeId.Parse(ns2;sPLC1.MotorSpeed), AttributeId Attributes.Value }, new ReadValueId { NodeId NodeId.Parse(ns2;sPLC1.Temperature), AttributeId Attributes.Value }, new ReadValueId { NodeId NodeId.Parse(ns2;sPLC1.Status), AttributeId Attributes.Value } }, MaxAge 0, // 0 表示不使用緩存強(qiáng)制從設(shè)備讀 TimestampsToReturn TimestampsToReturn.Both // 返回源時(shí)間戳和服務(wù)器時(shí)間戳 }; // 執(zhí)行讀取注意這是同步阻塞調(diào)用務(wù)必放在 Task.Run 中 var readResponse await Task.Run(() session.Read(readRequest)).ConfigureAwait(false); // 解析結(jié)果檢查 StatusCode 是否為 Good for (int i 0; i readResponse.Results.Length; i) { var result readResponse.Results[i]; if (result.StatusCode.IsGood()) { var value result.Value?.GetValueint(); // 泛型解析需按實(shí)際類型調(diào)整 Console.WriteLine($Node {readRequest.NodesToRead[i].NodeId} {value}); } else { Console.WriteLine($Read failed for {readRequest.NodesToRead[i].NodeId}: {result.StatusCode}); } }邏輯說(shuō)明Read()方法本身是同步的但session.Read()內(nèi)部會(huì)通過(guò)Channel.SendRequest()發(fā)送二進(jìn)制報(bào)文并等待響應(yīng)。若在 UI 線程如 WPF 的 Dispatcher中直接調(diào)用會(huì)導(dǎo)致界面凍結(jié)。因此必須包裹在Task.Run中交由線程池執(zhí)行。參數(shù)說(shuō)明MaxAge 0強(qiáng)制繞過(guò) OPC UA 服務(wù)器緩存確保讀到最新值TimestampsToReturn Both可對(duì)比設(shè)備本地時(shí)間與服務(wù)器時(shí)間偏差用于排查時(shí)鐘不同步問(wèn)題。3.2 異步寫入批量寫 失敗回滾防止部分寫入導(dǎo)致?tīng)顟B(tài)不一致// 構(gòu)造寫請(qǐng)求支持 Value、StatusCode、SourceTimestamp 三元組寫入 var writeRequest new WriteRequest { NodesToWrite new[] { new WriteValue { NodeId NodeId.Parse(ns2;sPLC1.Setpoint), AttributeId Attributes.Value, Value new DataValue(new Variant(125.5)) // 寫入浮點(diǎn)數(shù) }, new WriteValue { NodeId NodeId.Parse(ns2;sPLC1.Mode), AttributeId Attributes.Value, Value new DataValue(new Variant((int)OperationMode.Auto)) // 枚舉寫入 } } }; // 異步執(zhí)行寫入不阻塞主線程 var writeResponse await session.WriteAsync(writeRequest).ConfigureAwait(false); // 關(guān)鍵逐個(gè)檢查寫入結(jié)果而非只看整體 StatusCode bool allSuccess true; for (int i 0; i writeResponse.Results.Length; i) { if (!writeResponse.Results[i].IsGood()) { allSuccess false; Console.WriteLine($Write failed for {writeRequest.NodesToWrite[i].NodeId}: {writeResponse.Results[i]}); // 此處可觸發(fā)告警或記錄到數(shù)據(jù)庫(kù) } } if (!allSuccess) { // 【重要】執(zhí)行補(bǔ)償操作例如將 Mode 寫回 Manual避免 Setpoint 生效但 Mode 未切換 await RollbackPartialWriteAsync(session).ConfigureAwait(false); }避坑 / 常見(jiàn)問(wèn)題 / 排查現(xiàn)象 1寫入后 PLC 寄存器值未更新但WriteResponse.Results[i].IsGood()返回true原因PLC 端對(duì)該節(jié)點(diǎn)設(shè)置了寫權(quán)限限制如只允許特定用戶組寫入或?qū)懭胫党龇秶?125.5 寫入 INT16 寄存器解決用 UA Expert 連接同一服務(wù)器右鍵節(jié)點(diǎn) → “Browse Attributes” → 查看WriteMask和UserWriteMask確認(rèn)數(shù)據(jù)類型匹配INT16 節(jié)點(diǎn)只能寫-32768 ~ 32767整數(shù)現(xiàn)象 2WriteAsync()拋出ServiceResultException: BadWaitingForInitialData原因Session 已斷開(kāi)但未被檢測(cè)到session.WriteAsync()內(nèi)部嘗試復(fù)用失效 Channel解決在寫入前加if (!session.Connected) await session.ReconnectAsync();或監(jiān)聽(tīng)session.SessionClosing事件現(xiàn)象 3批量寫入中一個(gè)節(jié)點(diǎn)失敗其余節(jié)點(diǎn)仍被寫入違反原子性原因OPC UA 協(xié)議本身不保證事務(wù)性NodesToWrite是并行寫入而非事務(wù)塊解決如代碼所示必須手動(dòng)檢查每個(gè)Results[i]失敗時(shí)主動(dòng)回滾已成功寫入的節(jié)點(diǎn)需預(yù)先緩存舊值3.3 讀寫性能邊界單次最多讀/寫多少節(jié)點(diǎn)OPC UA 協(xié)議未硬性限制單次請(qǐng)求節(jié)點(diǎn)數(shù)但實(shí)際受以下因素制約PLC 處理能力西門子 S7-1500 默認(rèn)單次最多處理 100 個(gè)讀節(jié)點(diǎn)超過(guò)則返回BadTooManyOperations網(wǎng)絡(luò) MTUTCP 包大小通常為 1500 字節(jié)單次請(qǐng)求若超過(guò) 1200 字節(jié)約 30 個(gè)復(fù)雜節(jié)點(diǎn)可能被分片導(dǎo)致丟包SDK 內(nèi)存分配ReadRequest.NodesToRead數(shù)組過(guò)大200會(huì)觸發(fā) GC 壓力影響實(shí)時(shí)性。實(shí)測(cè)建議讀操作單次 ≤ 50 個(gè)節(jié)點(diǎn)間隔 ≥ 100ms寫操作單次 ≤ 20 個(gè)節(jié)點(diǎn)且避免高頻寫如 100ms 間隔否則 PLC 可能丟棄后續(xù)請(qǐng)求關(guān)鍵變量如急停信號(hào)應(yīng)單獨(dú)建讀請(qǐng)求不與其他變量混綁確保低延遲響應(yīng)。4. 訂閱與心跳讓數(shù)據(jù)“活”起來(lái)而不是輪詢拉取4.1 創(chuàng)建 Subscription三個(gè)核心參數(shù)決定數(shù)據(jù)新鮮度與內(nèi)存占用// 創(chuàng)建訂閱對(duì)象注意PublishingInterval 決定服務(wù)器推送頻率非客戶端接收頻率 var subscription new Subscription(session.DefaultSubscription) { PublishingInterval 1000, // 毫秒服務(wù)器每 1s 主動(dòng)推送一次變更 LifetimeCount 100, // 訂閱生命周期內(nèi)最大發(fā)布次數(shù)0永生 MaxNotificationsPerPublish 1000, // 單次 Publish 最多攜帶的通知數(shù) PublishingEnabled true, StatusChangeCallback OnSubscriptionStatusChanged // 訂閱狀態(tài)變更回調(diào) }; // 添加監(jiān)控項(xiàng)支持多種 SamplingInterval subscription.AddMonitoredItem(new MonitoredItem(subscription) { StartNodeId NodeId.Parse(ns2;sPLC1.Pressure), AttributeId Attributes.Value, MonitoringMode MonitoringMode.Reporting, SamplingInterval 500, // 毫秒服務(wù)器每 500ms 采樣一次但只在值變化時(shí)推送 QueueSize 10, // 本地隊(duì)列深度緩存最近 10 個(gè)變更防網(wǎng)絡(luò)抖動(dòng)丟失 DiscardOldest true }); // 啟動(dòng)訂閱必須顯式調(diào)用否則不生效 await subscription.CreateAsync().ConfigureAwait(false); session.AddSubscription(subscription);參數(shù)說(shuō)明PublishingInterval 1000服務(wù)器端定時(shí)器周期不是客戶端收到數(shù)據(jù)的間隔。若SamplingInterval 500且值持續(xù)變化客戶端可能每 500ms 收到一次若值穩(wěn)定可能數(shù)分鐘才推送一次SamplingInterval 500服務(wù)器采集頻率必須 ≤PublishingInterval否則無(wú)效QueueSize 10當(dāng)網(wǎng)絡(luò)中斷時(shí)服務(wù)器會(huì)緩存最多 10 個(gè)變更值恢復(fù)后批量推送設(shè)太大會(huì)吃內(nèi)存設(shè)太小如 1易丟數(shù)據(jù)。4.2 監(jiān)聽(tīng)數(shù)據(jù)變更用 EventHandler 而非輪詢釋放 CPU// 注冊(cè)數(shù)據(jù)變更事件推薦強(qiáng)類型泛型事件避免 object 轉(zhuǎn)換開(kāi)銷 subscription.Notification (sub, notification) { foreach (var item in notification.MonitoredItems) { if (item.Deleted) continue; // 【關(guān)鍵】獲取原始值Variant并安全轉(zhuǎn)換 var value item.Value?.GetValuedouble(); if (value.HasValue) { // 更新 UI 或?qū)懭霐?shù)據(jù)庫(kù)務(wù)必用 Dispatcher.Invoke 或 AsyncLocal UpdatePressureDisplay(value.Value); } else { // 處理空值或類型不匹配如 PLC 返回 BadValue LogWarning($Pressure node returned invalid value: {item.Value?.StatusCode}); } } };邏輯說(shuō)明Notification事件在 OPC UA SDK 的專用線程中觸發(fā)不是 UI 線程。若直接更新 WPF TextBox會(huì)拋InvalidOperationException: The calling thread cannot access this object。正確做法是WPFApplication.Current.Dispatcher.Invoke(() textBox.Text value.ToString());WinFormsthis.BeginInvoke((MethodInvoker)(() label.Text value.ToString()));ASP.NET Core將值存入ConcurrentDictionarystring, double由后臺(tái)任務(wù)定期推送 WebSocket。4.3 心跳監(jiān)聽(tīng)獨(dú)立線程輪詢 Session 狀態(tài)實(shí)現(xiàn)秒級(jí)故障感知// 啟動(dòng)心跳檢測(cè)線程避免阻塞主邏輯 _taskHeartbeat Task.Run(async () { while (!_cancellationTokenSource.Token.IsCancellationRequested) { try { // 【核心】檢查 Session 是否活躍且 KeepAliveCounter 0 if (!session.Connected || session.KeepAliveCounter 0) { _logger.LogWarning(Session heartbeat lost. Attempting reconnect...); await AttemptReconnectAsync().ConfigureAwait(false); } else { _logger.LogDebug($Session alive. KeepAliveCounter: {session.KeepAliveCounter}); } } catch (Exception ex) { _logger.LogError(ex, Heartbeat check failed); } await Task.Delay(2000, _cancellationTokenSource.Token).ConfigureAwait(false); // 2秒檢測(cè)一次 } });避坑 / 常見(jiàn)問(wèn)題 / 排查現(xiàn)象 1session.KeepAliveCounter一直為 0但session.Connected為true原因服務(wù)器未發(fā)送 KeepAlive 響應(yīng)常見(jiàn)于網(wǎng)絡(luò)中間設(shè)備如工控防火墻截?cái)?UDP 心跳包或服務(wù)器配置MaxKeepAliveCount 0解決改用session.LastKeepAliveTime時(shí)間戳判斷若DateTime.UtcNow - session.LastKeepAliveTime TimeSpan.FromSeconds(30)則視為失聯(lián)現(xiàn)象 2AttemptReconnectAsync()成功但原有 Subscription 數(shù)據(jù)不再推送原因重連后 Session ID 變更原 Subscription 未重新CreateAsync()解決在OnSubscriptionStatusChanged回調(diào)中監(jiān)聽(tīng)SubscriptionState.Closed觸發(fā)時(shí)清除舊 Subscription 并重建現(xiàn)象 3心跳線程 CPU 占用率高達(dá) 25%四核機(jī)器原因Task.Delay(2000)未ConfigureAwait(false)導(dǎo)致上下文捕獲開(kāi)銷解決所有await后添加.ConfigureAwait(false)如代碼所示5. 避坑指南產(chǎn)線部署前必須驗(yàn)證的 5 個(gè)血淚經(jīng)驗(yàn)5.1 證書鏈信任Windows 證書存儲(chǔ)區(qū) vs. 文件系統(tǒng)證書路徑現(xiàn)象開(kāi)發(fā)機(jī)上運(yùn)行正常部署到客戶 WinServer 2019 后連接失敗日志顯示BadCertificateUseNotAllowed原因開(kāi)發(fā)時(shí)用LoadOrCreateCertificateAsync()生成 PFX 證書并存于項(xiàng)目目錄但生產(chǎn)環(huán)境未將該證書導(dǎo)入 Windows 本地計(jì)算機(jī)的“個(gè)人”存儲(chǔ)區(qū)且ApplicationConfiguration未指定CertificateStoreLocation解決部署時(shí)運(yùn)行 PowerShell 腳本導(dǎo)入證書Import-PfxCertificate -FilePath C:\OPC\client.pfx -CertStoreLocation Cert:\LocalMachine\My -Password (ConvertTo-SecureString password -AsPlainText -Force)代碼中顯式指定證書位置config.SecurityConfiguration.ApplicationCertificate new CertificateIdentifier { StoreType Directory, // 或 Windows StorePath C:\OPC\Certs, // Directory 模式路徑 SubjectName OPCUA-Client-Cert };5.2 斷線重連不要依賴 SDK 自動(dòng)重連必須手動(dòng)控制重試策略現(xiàn)象網(wǎng)絡(luò)閃斷 3 秒后session.ReconnectAsync()報(bào)錯(cuò)BadWaitingForInitialData后續(xù)所有讀寫失敗原因OPCFoundation SDK 的自動(dòng)重連僅重連 Transport Channel不重建 Session 和 Subscription且默認(rèn)重試無(wú)退避連續(xù)失敗會(huì)壓垮 PLC解決實(shí)現(xiàn)指數(shù)退避重連int retryCount 0; TimeSpan delay TimeSpan.FromSeconds(1); while (retryCount 3 !session.Connected) { try { await session.ReconnectAsync().ConfigureAwait(false); break; } catch { retryCount; await Task.Delay(delay, _cancellationTokenSource.Token).ConfigureAwait(false); delay delay.Add(delay); // 1s → 2s → 4s } }重連成功后必須重新創(chuàng)建所有 Subscriptionforeach (var sub in session.Subscriptions.ToList()) { session.RemoveSubscription(sub); await sub.CreateAsync().ConfigureAwait(false); // 重建 }5.3 內(nèi)存泄漏未釋放 Subscription 和 Session 導(dǎo)致 GDI 句柄耗盡現(xiàn)象程序運(yùn)行 24 小時(shí)后 UI 卡死任務(wù)管理器顯示“句柄數(shù)”超 10000Event Log 記錄GdiPlus: ERROR: 0x88982F80原因WPF 界面頻繁創(chuàng)建/銷毀 OPC UA 控件但未調(diào)用subscription.DeleteAsync()和session.CloseAsync()解決在控件Unloaded事件中清理private async void OnControlUnloaded(object sender, RoutedEventArgs e) { if (_subscription ! null) { await _subscription.DeleteAsync().ConfigureAwait(false); _subscription null; } if (_session ! null) { await _session.CloseAsync().ConfigureAwait(false); _session null; } }使用using語(yǔ)句包裝短期 Session如配置頁(yè)測(cè)試連接using var tempSession await Session.Create(...); await tempSession.ReadAsync(...); // 離開(kāi) using 塊自動(dòng)調(diào)用 CloseAsync()5.4 數(shù)據(jù)類型映射Variant 轉(zhuǎn)換失敗導(dǎo)致 NullReferenceException現(xiàn)象讀取ns2;sPLC1.AlarmCode返回null但 UA Expert 顯示值為101整數(shù)原因item.Value.GetValueint()在值為UInt16時(shí)拋InvalidCastException且未被捕獲解決使用安全轉(zhuǎn)換擴(kuò)展方法public static T? GetValueT(this Variant variant) where T : struct { try { return variant.Value switch { int i (T)(object)i, uint u (T)(object)u, short s (T)(object)s, ushort us (T)(object)us, _ default }; } catch { return default; } }或直接訪問(wèn)variant.Value的GetType()判斷if (item.Value?.Value is ushort us) alarmCode us; else if (item.Value?.Value is int i) alarmCode (ushort)i;5.5 日志診斷啟用 SDK 內(nèi)置 Trace定位協(xié)議層問(wèn)題現(xiàn)象連接總是超時(shí)Wireshark 顯示 TCP 握手成功但無(wú) OPC UA 報(bào)文原因TLS 版本不匹配服務(wù)器要求 TLS 1.2.NET 默認(rèn)啟用 TLS 1.3或 Cipher Suite 不兼容解決啟用 OPCFoundation Trace// 在 Program.cs 中 var trace new TraceSource(Opc.Ua); trace.Switch.Level SourceLevels.All; trace.Listeners.Add(new TextWriterTraceListener(opcua-trace.log));強(qiáng)制 TLS 1.2ServicePointManager.SecurityProtocol SecurityProtocolType.Tls12;檢查 Trace 日志中的SendRequest和ReceiveResponse時(shí)間戳若ReceiveResponse缺失說(shuō)明服務(wù)器未響應(yīng)需檢查 PLC 防火墻規(guī)則。6. 進(jìn)階技巧用 DiagnosticInfo 提升故障定位速度告別“猜謎式排錯(cuò)”6.1 解析 DiagnosticInfo從 StatusCode 中提取 PLC 級(jí)錯(cuò)誤碼OPC UA 的StatusCode不只是Good或Bad它攜帶了DiagnosticInfo結(jié)構(gòu)其中AdditionalInfo字段常包含 PLC 原生錯(cuò)誤描述。例如西門子 S7-1500 在寫入非法地址時(shí)會(huì)返回BadNotWritable并附帶DB1.DBX0.0 is not writable。但默認(rèn)情況下SDK 不解析DiagnosticInfo你需要手動(dòng)啟用// 創(chuàng)建 Session 前啟用 DiagnosticInfo config.TransportConfiguration new TransportConfiguration { MaxMessageSize 10 * 1024 * 1024, // 10MB確保 DiagnosticInfo 不被截?cái)?MaxArrayLength 1000000 }; // 讀取時(shí)請(qǐng)求 DiagnosticInfo var readRequest new ReadRequest { RequestHeader new RequestHeader { ReturnDiagnostics (uint)DiagnosticMasks.All // 關(guān)鍵請(qǐng)求全部診斷信息 }, NodesToRead new[] { new ReadValueId { NodeId NodeId.Parse(ns2;sPLC1.ErrorFlag), AttributeId Attributes.Value } } }; var readResponse await session.ReadAsync(readRequest).ConfigureAwait(false); // 解析 DiagnosticInfo if (readResponse.ResponseHeader.DiagnosticInfo ! null) { var diag readResponse.ResponseHeader.DiagnosticInfo; Console.WriteLine($Diagnostic Info: {diag.AdditionalInfo}); // 輸出 PLC 原生錯(cuò)誤 Console.WriteLine($Inner Error Code: {diag.InnerStatusCode}); // 如 0x801F0000 }參數(shù)說(shuō)明ReturnDiagnostics DiagnosticMasks.All告訴服務(wù)器返回完整診斷信息包括AdditionalInfo字符串描述、InnerStatusCodePLC 內(nèi)部錯(cuò)誤碼、SymbolicId符號(hào)化錯(cuò)誤名。若只設(shè)DiagnosticMasks.OperationLevel則只返回基礎(chǔ)錯(cuò)誤碼丟失關(guān)鍵上下文。6.2 構(gòu)建錯(cuò)誤碼映射表把十六進(jìn)制 StatusCode 轉(zhuǎn)成可讀中文西門子、羅克韋爾等廠商的InnerStatusCode是十六進(jìn)制編碼直接查文檔效率低。我整理了一份常用映射表可嵌入日志模塊InnerStatusCode中文描述常見(jiàn)場(chǎng)景0x801F0000讀取地址超出范圍訪問(wèn) DB1.DBX1000.0但 DB1 只有 500 字節(jié)0x80240000寫入地址只讀嘗試寫入 PLC 的系統(tǒng)寄存器如I0.0輸入點(diǎn)0x80350000數(shù)據(jù)類型不匹配向 INT16 節(jié)點(diǎn)寫入浮點(diǎn)數(shù) 3.140x804F0000節(jié)點(diǎn)不存在ns2;sPLC1.NonExistentTag拼寫錯(cuò)誤實(shí)現(xiàn)自動(dòng)解析public static string GetErrorDescription(uint innerCode) { return innerCode switch { 0x801F0000 讀取地址超出范圍, 0x80240000 寫入地址只讀, 0x80350000 數(shù)據(jù)類型不匹配, 0x804F0000 節(jié)點(diǎn)不存在, _ $未知錯(cuò)誤碼 0x{innerCode:X8} }; } // 日志中直接調(diào)用 _logger.LogError($OPC UA Error: {GetErrorDescription(diag.InnerStatusCode)} - {diag.AdditionalInfo});6.3 心跳 訂閱聯(lián)合健康檢查構(gòu)建“雙保險(xiǎn)”狀態(tài)機(jī)單純依賴session.KeepAliveCounter不夠魯棒——它只證明 TCP 連通不證明數(shù)據(jù)通道可用。我設(shè)計(jì)了一個(gè)狀態(tài)機(jī)結(jié)合心跳與訂閱數(shù)據(jù)流驗(yàn)證public enum OpcUaHealthState { Healthy, HeartbeatLost, DataStale, Disconnected } private OpcUaHealthState _healthState OpcUaHealthState.Disconnected; private DateTime _lastDataTime DateTime.MinValue; // 在 Subscription Notification 事件中更新 subscription.Notification (_, _) { _lastDataTime DateTime.UtcNow; UpdateHealthState(); }; // 心跳線程中檢查 private void UpdateHealthState() { var now DateTime.UtcNow; if (!session.Connected) { _healthState OpcUaHealthState.Disconnected; } else if (session.KeepAliveCounter 0) { _healthState OpcUaHealthState.HeartbeatLost; } else if (now - _lastDataTime TimeSpan.FromSeconds(10)) { _healthState OpcUaHealthState.DataStale; // 訂閱數(shù)據(jù) 10 秒未更新 } else { _healthState OpcUaHealthState.Healthy; } } // 對(duì)外提供健康檢查接口 public bool IsDataFlowing _healthState OpcUaHealthState.Healthy;為什么這招管用HeartbeatLost網(wǎng)絡(luò)層斷開(kāi)需立即重連DataStale網(wǎng)絡(luò)通暢但 PLC 停止推送數(shù)據(jù)如程序停在斷點(diǎn)、CPU 模式切到 STOP此時(shí)不應(yīng)盲目重連而應(yīng)發(fā)告警并檢查 PLC 狀態(tài)HealthyTCP 數(shù)據(jù)流雙驗(yàn)證通過(guò)UI 可顯示綠色指示燈。從那以后我每次部署新產(chǎn)線都強(qiáng)制走一遍這個(gè)狀態(tài)機(jī)日志輸出把DataStale場(chǎng)景單獨(dú)歸類告警——它幫我們提前發(fā)現(xiàn)過(guò) 3 次 PLC 程序邏輯錯(cuò)誤比等客戶投訴快 48 小時(shí)。希望幫到你。本文還有配套的精品資源點(diǎn)擊獲取
返回列表
PREV
查看更多資訊
NEXT
返回資訊列表
欧美性爱精品七区| 97超碰色屌| 亚洲天堂久久久久久粉红视频| 精品国产72| 中文字幕免费看大片| 色吧5亚洲| 香蕉av一区二区三区| AV天天在线观看| 操逼国产免费| 人人操人人摸人 | 手机看片日韩人妻| 一区二区三区亚洲| 国产丝袜欧美在线视频| 97超碰站| 精品视频一二三中文| 蜜桃精品视频一区二区三区| 做爱福利视频一区二区| yazhousetuoumei| 97五月天| 丁香五月天婷婷姐| 九九热免费在线国产视频伊人五月| 2018色综合天天操| 丁香久久| 中文字幕 码 自拍 视频 区| 99热9| 欧美一级色| av婷婷色婷婷色六月| 在线中文字幕| 女同性恋久久| 国产无马av| 久久精品亚洲成a人天堂| 嫩草一区二区在线观看| 亚洲九月丁香| 日韩欧美亚洲一区二区三区影院| 国产av美女被艹的乱叫| 3p国产欧美99热| 中文字幕一区二区三区高清| 9/A片| 天天爽天天操| 欧美熟妇精品黑人巨大一二三区| 青青操97| 超碰中文字幕人妻草一区| 高凊专区人人操| 中文字幕 av v| 九一综合精品视品av| 欧美亚综合色图| 国产一区二区三区不卡手机在线| 国产成人天堂| 中文无线日韩一区| 97超碰人人操人人操| 伊人天天久久动态图| 乱伦熟女专区| av婷婷色婷婷色六月| 国产激情久久久| 色婷婷影院| 东京热男人的天堂网| 人人色97| 亚洲极品| 午夜性刺激视频免费观看| 91色图| 日本东京热久久久电影| 丝袜剧情| 二区熟妇韩日| 精品少妇一区二区| 18啪啪手机免费性爱| 麻豆国产96在线| 又黄又爽在线观看视频 | 国产日韩久久| 国产乱色国产精品免费视| 啪啪免费| 色婷婷aV一区二区三区麻豆综合| 丰满人妻一区| 1769一区| 色色婷婷五月| 亚州色国| 日韩性爱长视频免费| 色色香蕉| 麻豆区99999| 夜夜骑操视频| 欧美人体性爱互联网第一页婷婷日本| 国产精品女久久久久av爽| 国产成人网| 区一二区日韩亚洲乱码av电影| 国产成人精品一区| 91精品国产91综合久久蜜臀| yellow网站免费观看日韩高清无码| 久99视频| 伊人少妇久久久| 黄色视频高清无码网站| 丁香五月激情综合国产| 欧美91丝袜| 91久久九九精品国产综合| 超碰在线国产| 婷婷五月天无码 | 国产一区二区精品久久久不卡蜜臀| 色哟哟 日韩精品| 日韩成人性爱电影在线播放| 天天日天天屌天天操| 亚州一区二区| 亚洲.欧美.丝袜.中文.综合| 日日AAvv| 人人色人人操在线| 果冻传媒A片一二三区| 国产精品久久久 | 亚洲va综合va国产va中文| 久久精品夜色国产亚洲AV| 97干在线| 夜夜肏2021| 玖玖大干人妻| 婷婷五月天_亚洲小说欧美激情另类_精品久久国产字幕 | 五月丁香六月| 国产人妻久久精品一区二区三区| 黄网色一区二区三区四区精品| 另类图片亚洲加勒比另类图片亚洲加勒比另类图片亚洲加勒比 | 欧美中出| 一本一道人妻久久一区二区三区 | yy少妇精品久久| 亚洲图片激情综合另类| 91美女在线视频| 人妻色偷色噜| 五十路人妻在线| 99re国产精品视频| 日韩 欧美 国产 麻豆| 亚洲av综合色区图片亚洲| 操香逼| 91色综合| 蜜臀99999| 日本三级一区二区 在线| 国产av青草| 亚洲成a人v欧美综合天堂下载 | 91视频在线观看18| 久久亚州高清| 再深点灬舒服灬太大了添视频| 韩国嫰模上门援交视频| 久久性爱大全| 欧美97色| 岛国999| 综合一区中亚洲国产成人综合精品| 淫纸中9区| 五月婷丁香| 色色毛片| 蜜臀99久久精品久久久久久| 水澄无码AV| 欧美成人免费在线观看| 久久久少妇诱惑精品视频| 精品超碰国产| 大象AV在线| 任你干在线视频| 综合色啪| 视频黄色国产一级| 怡红院成人视频| 欧美日韩夜夜| 天天摸夜夜添无码小视频| 欧日韩一二三f区| 色色无码| A片三级无码| 酒色综合网| 后入内射蜜桃臀| 久久黄色性爱视频| 亚洲日韩电影| 嗯,啊。舔我逼| 麻豆人妻精品一区二区| 久久av成人无码免费| 中文字幕国产| 美女诱惑在线一区| 日日爽夜夜爽| 国产网站在线播放| 亚洲巨爆乳一区二区三区四季网| 蜜桃狠狠色伊人亚洲综合 | 欧美亚州手机在线| 日本三级网页| 国产日韩欧美操逼视频| 蜜臀中文字幕| 97视频免费在线| 国产天天骚| 在线播放成人网站| 色乱二区| 国产h片在线观看视频| 国产综合久久久麻桃个| 五月天久久人妻| 在线一区| 激情终合网| 97人妻色| 精品国产乱码久久久久久久久1 | 日韩射图| 人人操人人精品影片| 亚洲人妖网| 日韩人体偷拍| 久无码| 超碰免费在线| 色妹子A V| 在线视频日韩欧美国产| 久久久A∨| 色综合尤物| 一起草日韩| 无码外流操逼视频| 人妻9117c| 色婷婷一区二区三区久久| 久久久久久裸体| 精品九九淫乱男| 亚洲自拍一区夜夜操| 少妇人妻无码| 亚州综合电影| 人妻激情在线视频| 久久久久久中文| 97超碰超欧美。| av一区二区三区四区五区久草臀| 欧美后入视频| 日本熟妇精品九九| 男人成人黄色视频在线观看免费下载| 制服中出中文人人精品| 插B在线观看| 精品久久97| 亚洲人妻爽爽爽| 欧洲人妻视频| 黄色香蕉视频网站一区| 影音先锋乱伦资源| 中文字幕中文字幕一区二区| 亚洲精品中文字幕一区在线视频 | 狠狠亚洲| 欧美一品道| 亚洲 欧美 日本 国内 首页| 麻豆AV一区二区天美传媒| 久九九九| 青娱乐国产盛宴视频| 日本精品高清一二区一本到| 日韩人妻资源网| 日韩无码嘿咻黑热久| av在线人气| 情色五月天久久久| 精品无码少妇| 激情五月综合开心五月| www…国产操逼| 99精品在线观看| 日本韩国一本产品小视频日本韩国一本产品久久久产品小视频日本韩国一本产品久 | 久久久久久久久国产| 大色网久久| 久久国产乱子伦精品免费女,网站| 激情小说日韩无码| 综合色色网| 国产成人资源| 亚洲交换| 日韩性爱1级片视频| 国产精品免费美女视频| 爱爱60秒免费视频| 激情啪啪视频| 在线观看无码三级少妇| 中文高清一区二区的| 日本不卡二三区| 久久日韩肥臀| 亚洲精品中文字幕一区在线视频| 久视频在线观看| 亚欧美综合| 热99re69精品8在线播放| 黄色激情电影在线观看| 无码91| 性欧美| 18禁无码永久免费无限制| 9色在线| 求求你操操我| 97日韩| 日韩中文字幕视频在线观看| 偷拍亚洲高清图片| 搡老女人老91二区| 尤物一级在线免费观看| 欧美中文狠| 男人天堂2030| 亚洲激情AV| 97欧美色综合| 强奸乱伦大香蕉网| 人妻 制服 日韩 中文 在线| 日本狂喷奶水在线播放212| 99热超碰| …亚洲黄色厕厕女女在线播…| 日韩欧美中文| SUV一区二区在线看| 久久男人天堂| 亚洲欧美精品一区天堂久久 | 午夜福利合集| 婷婷五月天影院| 99超碰网| 欧美色五月| K8久久久久| 国产尤物AV尤物在线观看不卡| 久久中出在线| 无遮挡一级毛片视频免费的| 97精品视频免费| 亚洲 无码 偷拍| 欧美v日韩欧亚洲电影天堂色诱,国产传媒| 91精品久久久久| 久久久久国产一区二| 玖玖草久草99蜜月一区二区三区| 中文字幕奈奈美被公侵犯| 国产欧美日韩在线不卡第一页| 青青草国产欧美非洲黑人| 蜜臀99久久国产| 久久久免费懂色| 久久精品国产亚洲妲己影视| 人妻密肉在线观看| 性暴力欧美猛交在线直播| 欧美精品在线观看| 天堂v无码免费视频| 精品国产乱码久久久久久久久1| 在线看污网站| www老逼91| 日韩操啪| 天天热精品| 久久亚洲精品成人av| 97精品视频在线| 亚洲国产无码精品首页久久久| 超碰 欧美| 精品久久久亚洲AV成人网站| 好爽视频在线观看视频| 欧美日韩婷婷中文| 丝袜美腿制服人妻二区中文字幕| 午夜欧美精品久久久| 啊啊啊操一区| 日韩综合无码色欲vv| 亚洲系列欧美| 五月丁香色婷婷| 91在线视频国产网站| 97露脸精品丝袜| 日本三级网页| av三级电影在线播放| 黄色不卡视频| 高清无码网址| 无码国产Av| 色噜噜人妻av中文字幕| 蜜奶av| 家庭乱伦网站国产| 九九九免费视频| 97久久精品国产| 99日精品欧美国产| 少妇一区二区三区精选| 深夜视频| 91女优在线观看| oumeisetu综合| 成人 日本A片无码8888| 久久性爱视频免费看| 夜夜做夜夜爽精品视频| 97欧美精品综合| 操婷婷逼| 国产一区二区三区导航| 最新亚洲黄色免费电影| 欧美日韩狠狠爱| 美女AV一区二区| 久久免费精彩视频| 岛国网址国产 | 成人日韩欧美| 一区二区三区探花在线观看| 久久综合九色综合欧洲98| 国产99999久久精品| 小草三级久久观看| 婷婷久久五月天| 国产东北女人在线视频| 男女无套 免费网站| 物业黑人 AV一区| 欧美亚洲性爱一区二区| 97操碰| 国产一区二区欧美日本| 狠狠操夜夜| A级国产欧美激情在线| 99re这里只有精品2| 国产熟女精品区| 超碰国产情侣自拍网| 吻戏激情性巴克| 亚洲av淫乱| 亚洲综合另类小说色区亚洲成av人片在www | 欧美日韩在线视频网站| 日本一二区不卡| 蜜臀Av一区二区三区| 男人的天堂在线| 日本天堂网| 日韩偷拍色图| 成年女人一区| 亚洲另类久操网| 99爱视频| 亚洲 91 在线| 麻豆天美久久91| 熟女人妻久久中文字幕一二区| 亚洲福利中文字幕在线| 操美女高潮抽搐白浆| 多乙久久久久久| 在线无码网站| 午夜久久无码1000合集| 色狠狠色| 91人人爽人人爽人人人,gav福利视频导航,日韩欧美亚洲国产字幕四区 | 日韩乱伦视频| 一级免费啪啪片| 久久久夜夜嗨免费视频| 伊人五月天| 五月天色五月| 欧美大香蕉卡久久| 传媒免费一区二区三区| 美国三级日本三级久久99| 亚州Av天美传媒| 欧美色图片色哟哟| 中国一级αV| 成人26uuu| 国产一区二区三区免费视频在性观看| 国内亚洲精彩视频在线| 亚洲精品乱码久久久久久蜜桃麻豆| 丝袜美腿制服人妻二区中文字幕| 婷婷在线视频| 操逼内射干逼白丝91| 欧美91网站| 九九久精品| 东京太热男人的天堂久久久| 无码不卡亚洲成?人片| 操逼视频国产无套| 午夜福利成人免费视频| 91在线欧色| 秋霞一区二区三区四区五区六区七区| 91天堂丝袜美腿| 大肥女高潮bbwbbwhd视频| 26uuu偷拍亚洲欧洲综合| 99久久精品无码一区二区| 蜜乳av首页| 日本特黄f c2| 超碰97在线中文| 亚洲男人天堂手机版| 国内精品久久人妻性色av| 国产色呦呦| 夜夜爽妓女| 中文字幕欧美日本乱码一线二线| 欧美日本成人一区二区| 日本精品第一视频在'| 91狠婷| 情色五月天就去干| 飘花国产午夜精品不卡| 欧美九九爱| 91亚洲狠狠色| 二男一女成人A片| 中文字幕在线播放2中文字幕在线观看2| 青青操在线亚洲视频观看欧美在线 | 1024精品在线| 国产区91柔拿会所技师| 超碰99热中文字幕| 色臀AV| 综合影视国产无码| 亚州色图欧美| 久久性爱视频99| 五月天婷婷基地| 操淫穴亚洲五月丁香| 99热| 麻豆久久视频在线地址| 97ai亚洲| 色香色欲天天综合网天天来吧| 性老妇一区二区三区| 一区在线精品中文字幕| 欧美在线官网| 91精品国产91综合久久蜜臀| 又黑又大又粗| 超碰色老头| 日本中文字幕在线视频 | 亚洲操逼视频网站| 久9综合在线| 国产第25页在线观看| 99精品伊人| 久久在线观看免费视频| 九九玖玖精品| 亚洲无码精品AV久久久| 一牛影视久久久一区二区三区| 色九九久九九| 开心激情站| 美女性91| 亚码激情| 亚洲 欧美 日韩 国产一区二区 | 亚洲天堂精品日韩电影| 偷拍 亚洲| 欧美天天综合网| 97天天爽| 国产精品白丝在线播放| 精品免费国产二区三区 | 欧美91精彩| 97精品熟女少妇一区| 欧美色图 人妻| 日韩国产欧美伦理在线| 91在线国产后入风骚翘臀美女素人| 国产精品久久久久中文字幕| 日韩精品三级| 91熟女熟妇视频网站| 香蕉视频欧美一卡二卡| 人妻美腿丝袜制服诱惑综合天堂-| 成人五月天丁香激情综合| 四虎AV无码| 欧美亚洲一级在线观看| 人人摸人人舔一区二区| 97av在线视频| 明星性猛交ⅹxxx乱大交| 久久伊人青青草| 国产精品激情久久久久久久| 亚洲美女精品九九视频| 97久久久精品| 五月丁香婷婷啪啪| 欧美色图综合| 校园春色家庭伦理欧美激情| 亚洲有薄码区日本系列中文字幕| 国产性爱在线视频一区二区| 国产又粗又长的视频| 性欧美另类高清| 天天激情干| 青娱乐黄色录像| 色91综合网| 日本午夜精品理论片A级APP发布| 亚洲久久久久| 超碰97在线中文| 五月天激情网图片| 中国国产精品一区视频| 熟女人妻一区二区三区| 狠狠干妹子| 国产黄a三级三级三级av在线看| 日本成人A片网站| 啊啊啊啊免费视频| 校园春色综合香蕉| 加勒比无码一区二区三区| 一二三四视频中文字幕在线看| 96精品久久久| 超碰 av 女人天堂| 日韩三级久久久| 欧美性爱视频免费一区一A| 欧美97在线欧| 91无码人妻精品一区二区三区蜜桃 | 久久东京热成人| 黄日韩| 偷窥自拍亚洲色图| 久久xx| 国产AV无码AV| 日逼逼免费看| 在线有码中文字幕| 天天综合网网欲色| 日韩十八禁| 国产又大又粗又长视频| 亚洲黄色网址| 乱久久久| 亚洲男人的天堂在线看| 大香蕉十区| 91久久久久免| 超碰免费在线| 超碰成人免费| 天天天天天干夜夜夜夜夜操| 岛国在线一区二区三区| 成年人黄色小视频网站| 欧美一区二区福利在线| a亚洲欧美色欲| 天天做天天爱| 欧美裸体美女日麻屄| 青青草好吊色| 丰满人妻一区二区三区免费| 夜夜嗨一区二区三区直播内容| 丝袜色综合| 激情人妻另类| 极品一区二区三区免费| av草草在线电影| 日韩人妻精品| 啊啊啊男女| 久久精品国产99久久,亚洲日韩久久日本一区一区三区 | 久区视频| 欧美 亚洲精品首页| www.91视频网| 性猛交| 国产精品成久久久久午夜午夜| 神马久久久久久| 天美精品原创av片国产| 日韩有码 一区二区三区| 成人国产视频在线观看| 伊人网免费视频| AA级电影三区| 国精精品无码一二三区水多多| 成人网站 免费观看| 日韩精品在线观看网站| 欧美日韩性爱精品| 青草青青久久久久久国产| 夜夜操老骚逼视频网站| 懂色AV中文| 我中文字幕6区| 熟女熟妇伦久久影院毛片一区二区| 亚洲脚交| 国产1024在线播放| 亚洲高清国产理伦片| 国产尹人在线视频免费| 好吊色在线观看| 天天干天天日天天射黄色片| 亚洲情色综合网| 麻豆av一区二区| 欧美一级黄色免费专区| 殴美在线AⅤ| 啊啊啊操一区| 欧美国产成人在线| 欧美一级二级三级| 翔田千里无码中出中文字幕| 探花精品视频| 亚洲视频,小说| 97中文综合| 夜草网站| 五月天激情影院| 欧美天堂日韩三级国产传媒| 中文字幕一品色图| 三级日本一区二区三区| 亚洲综合色婷婷| 久久九七| 色香av| 亚洲色图日韩精品| 九九热五区| 亚洲色婷婷综合久久一区二区三区| 中文?日韩?免费?精品| 久久久久国产精品片区无码直播 | 亚洲天堂五月天国产| 国产第25页在线观看| 九九玖玖精品| 久久在肏| 国产亚洲禁久一区二区| 97视频620| 欧美资源| 婷婷五月成人| 我想要啊 啊 啊| 亚洲一区二区三区不卡国产欧美| 一本一道人妻久久一区二区三区 | 久久大香蕉97| 极品尤物自安慰| 久久九九一区二区三区成人| 欧美色图91| 黄片在线免费在线观看| 日韩天天本| 大香蕉免费3| 亚洲欧美一区二区三区在钱蜜桃 | 精品一区二区三区蜜桃臀赵总 | 欧洲亚洲国产综合在线| 白丝1区2区3区| 超碰色97| 综合色播| 黑人性欧美| 天天干天天操天天干天天操| 中文久久96| 欧美精品日韩久久久九| 99色婷婷中文字幕乱色| 三级精品三级在线观看| 色哟哟-国产专区| 超碰成人人人爽人人爽| 99re6久热只有精品6在线直播| 大逼色网站| 欧美日综合| 色九九久九九| 五月天激情综合网| 日韩97P| 亚洲天堂性爱| 香港澳门日本三级网站| 神马久久中文字幕| 日韩乱伦AⅤ| 亚洲精品白丝| 欧美日韩岛国大片在线观看| 国产精品一区在线播放| 伊人五月天| 91n欧美| WWW4虎| 人人干黄色| 久久人爽| 国产强奸超碰AV| 国产蜜臀精品一区二区尤物| 高清无码网址| 98人妻精品一区二区色欲| 天天综合香 ld视频| 精品国产91av一区二区三区| 东北操逼| 丁香六月婷婷| 69XX一中文字幕人妻91| 伊人 俄罗斯 a v| 久久久久久精品免费看A级| 亚洲天堂久久| 亚洲熟妇图片| 免费观看国产不卡av| 国产深喉| 天天看片天天爽| 日本操色导航| 东京热综合久久一区二区| 美女人妻色网站| 国产精品亚洲高清在线| 成人性交午夜免费片| 99啪啪视频| 熟女色综合久久| 欧美 亚洲 在线| 四虎视频在线观看| 免費黃色視頻觀看一| 夜色综合| 欧美激情黑人| caopeng97| 亚洲少妇综合在线播放| 久久精品一区二区| 国产和美国毛片| 天天日老熟妇| 九九综合久久| 精品国产三级av韩国在线| 九久久精品| 中文字幕艹艹| 青娱乐日韩无码| 日本韩国国产精品一区| www.成人无码| 伊人精品视频| 超碰97爽| 久久99精品视频| 精品久久久高清无码| 男人的天堂免费| 中文在线视频| 2019天天操天天爽天天拍| 五月丁香婷婷色| 日本操大逼| 手机午夜电影神马久久| 97免费视频在线| 精品无码产区一区二| 75大香蕉| 国产乱婷婷精品二区三区| 九九aV| 无码日韩人妻av一| 操逼视频国产无套| 激情小说在线视频| 99rre在线精品99re8| 超碰在97| 精品人妻无码一区二区三区不卡-精品人妻无码一区二区...|精品少妇一区二区三 | 操人妻少妇中文| www激情| 成人性爱电影一区二区| 温婉少妇玩3p| 久操com| 欧亚性爱在线视频| 成人av福利在线观看| 国产免费一区2区3区| 超碰九区| 天天噜| 日韩熟女精一区二区三区不卡| 九九五月天| 超碰色美女| 疯操AV| 熟女高潮精品一区二区| 美国三级日本三级久久99| 五月丁香六月激情综合| 97综合| 天天爽天天操| 婷婷色导航| 婷婷色五月激情| 亚洲av乱伦色图网站| 欧美日韩国内不卡| 黄片无码在线制服| 肉嘟嘟www视频在线观看高清| 熟女这里只有精品6| 无码高清少妇久久| 久久性生大片免费观看性| 中文字幕99999| 69天堂| 97国产精品| 日本一区二区中文字幕久久| 国产精品九九九| 无码国产精品96久久久久孕妇| 中文字幕在线观| 亚洲色图综合| 久热精品在线国产| 亚洲 欧美 制服 另类 自拍| 综合在线导航一区| 欧美日韩性爱操大逼| 精品婷婷| 手机不卡视频不卡在线一二三区| 欧洲中文字幕| 亚洲综合贴图91| 婷婷九月丁香| 欧美综合天天| 草草影院最新网址| 丰满人妻av一区二区三区| 久久女婷| 91国产大片| 人人摸人人舔一区二区| 极品色综合| 人妻偷拍一区二区三区| 黄色网址在线免费观看| www.五月天| 久久精品72| 欧美亚洲韩国视频十五区 | 天天日天天操天天射河南省| 琪琪精品免费一区二区三区 | 美女天天干| 东京热男人的天堂| 日韩不卡在线一区二区| 婷婷日韩一区二区三区中文字幕在线| 欧美少妇内射| 大香蕉中文201| 人人干黄色| 国产精品大香蕉| 天天天乱色综合全| 男女啊啊啊| 国产专区第一页| 91大胆欧美| 久欲AV| 天天视频网站黄| 五月丁香婷婷色| h色99999| 国产精品不卡av免费在线观看| 国产家庭乱伦网址| 99国产精品在线观看| 99热线麻豆 | 亚洲精品日日夜夜52| 欧美九九99久久精品| 四虎精品亚洲| 亚洲导航深夜福利| 国产原创精品| 啊啊啊啊免费视频| 强奸乱伦麻豆| 国产日韩人人| 人人爱人人乐人人操| 久久激情网| 高清不卡 中文 人妻| 欧美中文字幕日韩在线| 麻豆人妻精品一区二区| 超碰久草| 91成人精品在线播放| 69精品人人人人| 欧美亚洲高清| 91熟女熟妇视频网站| 日韩BBN| A片 AV一级在线播放观看免费| 久久綜合很很很| 欧美成人一级麻豆| 裸体美女国产免费久久久网站| av橘色网站| 92人人操人人| 操死我了啊啊啊| 草草影院日本第一页| 91色图片| 久久日韩精品一区二区| 动漫片子网站3黄| 2021国产成人精品久久| 91天天日| 99精品国产户外露出| AV色天香在线| 精品一区二区三区国产 | 热久久国产| 97国产天堂岛| 久操com| 老熟妇一区二区三区啪啪| 国产亚洲精品激情| 欧美日韩亚洲五月天婷婷| 正在播放国产精品一区| 欧美日韩国产电影| 日本免费中文字幕在线 | 国产97色在线| 97这里有精品| 超碰公开久久网| 婷婷伊人五月| 成人在线视频一区| 国产熟女免费观看久久| 国产熟码AV| 91 刺激在线| 家庭乱伦麻豆| 丰满精品人妻少妇久久字幕| 手机在线视频国内精品| 国产乱不卡| 色婷婷五月天| 国产无码久久高清| 日韩少妇无吗| 亚洲高清无码免费观看视频| JuliaAnn丝袜熟女系列| 精品一区96| 亚洲国产奇米影视久久| 国产精品另类一区大香蕉| 青青草日韩无码| 欧美不卡五十路| 欧美国产有色电影| 韩国一级婬片A片AAAAA| 性色亚洲| 校园春色宗合网| 色香蕉影院| 精品人妻一二三| 黑人精品久久97| 色色色欧美| 欧美十八禁视频| 久久9精品网站| 96精品在线| 国产亚洲精品美女久久久| 午夜操操操| 日本不卡码黄色| 91成人在线免费视频| 97九色| 婷婷九月国产| 精品免费一区二区三区在线亚洲人成| 黑人狂躁日本妞一区二区三区| 这里都是精品| 亚洲综合99999| 五月天色图| 国产精品99精品视频网站| 5252色欧美在线男人的天堂| 欧洲中文字幕| 久久99视频| 99国产在线 精品 视频| 久久超碰97| 精品制服美女中文一区二区三区| 91九久| 欧美很很操视频| 国产亚洲性生活视频播放| 欧美se综合| 人妻内射一区二区在线视频| 另类图片五月| 欧美中出1| 国产自产自拍| 国产在线观看一区二区三区| 偷偷人人精品女女久久| 大香蕉琪琪日本女优不卡| 青青青操| 亚洲一区二区麻豆影院| 日本高清一区二区在线| 久久riav中文精品| 日韩有码 一区二区三区| 大香蕉日韩| 激情婷婷黑人91| 91国产在线精品| 亚洲熟妇无码一区二区三区| 欧美少妇熟女| 日本熟女中文| 被体育老师抱着c到高潮| 成人性爱av| 国产精品久久久久久高清无码免费看| 日日摸天天爽夜夜欢| 天天夜夜rb| 亚州高清AV| 久久成人精品| 天天爱综合网| 亚洲一区制服诱惑| 天堂涩涩| 蜜臀一二三| 欧美传媒一区| 色欧洲97| 久久久九九| 欧美偷偷网| 国产91丝袜在线播放蜜月| 人妻无码视频一区二区三区久久| 精品人妻一区春色| 亚州男人的天堂| 69久久久久久久久久久久久| 素颜老阿姨乱情色| 亚洲资源网| 大香蕉92| 日韩欧美麻豆 | 国产日韩在线播放av| 国产一区二区三区久久久精品| 欧美一区二区日韩三区| 国产精品爽爽v| 一级aaaaa欧美中文字幕录像片| 26uuu性物| 强奸乱伦av电影| 日韩一级片在线看| 97色色色| 91啪9色| 97视频7| 97视频在线视频| 中出20p| 97超碰色色| 十八禁啪啪视频| 蜜乳av一区二区| 中文字幕123| 久久婷婷五月| 67194无码不卡| 亚洲欧洲久久天堂| 91热色| 射综合网| 一级日本牲交大片好爽在线看| 欧美另类精品xxxx| 婷婷五月色| 99久久无色码| 色天堂综合| 狠狠色五月亚洲91| 国产在线视频午夜精华在| 尤物网址| 五月天伊人| 二级久久网| nuu12国产麻豆精品| 91久久久久久久久18| 高清无码一区二区三区| 亚洲高清在线| 啊啊啊97视频| 免费视频观看60秒| 爱妃国产亚洲视频中文字幕| 国岛片视频| 天天操女人| 欧美高清在线| 国产在线视频午夜精华在| 亚洲AV无码黄色强奸| 992这里有精品| 91天美传媒在线观看| 亚洲天堂资源在线| 色网在线视频观看免费| 伊人久久88国产女| 久久熟女久| 久久久久9999| 亚洲女毛多水多21P| 欧美精品另类人妖xxxx| 亚洲情色综合网| 五月天婷婷在线看| 久久久97| 综合网97| 翔田千里无码一区| www.99视频| 蜜臀无码一区二区| 欧亚无码视频| 午夜免费视频1000| 超碰伊人在线| www.99色| 久久色人体| 老司机福利社视频在线观看| 在线有码中文字幕| 日本一区二区电影网站| 亚洲无码一区成人免费午夜| 国产精品婬乱一级毛片彝族| 日韩伦理视频| 欧美亚洲今日在线| 美国一区二区免费视频| 欧美 亚洲 另类 综合| 久久成年片色大黄全免费网站| 色999五月色| 搡老熟女国产1000部| www.黄色在线| 日本99一区二区| 少妇高潮流水av免费| 手机av天堂久久久久| 天天综合-91入口| 五月天社区| 中文字幕国产| 一区二区三区视频在线观看免费| 97色涩| 吖在线不卡一区二区国产剧情 | 国产丝袜美女在线一区| 大香蕉在线视频15| 久久久96| 精品无码一区二区| 91亚州| 四虎影视在线| 亚洲高清视频在线免费观看| 亚洲av在线免费观看| 亚洲av资源| 丝袜美腿诱惑亚洲欧美视频在线观看| 欧美色图校园春色| 婷婷九月色| 欧综合网| 亚洲美乱| 中文操逼字幕| 欧美 青青草| 国内精品a| 97伪v| 看黄片视频免费| 伊人在线大香蕉二。| 国产成人精品亚洲日本| 后入人妻无码| 精品 码产区一区二-1080P高清在线www-B029AV | 亚洲情色欧美| 精品久久久中文字幕不| 久久久久久久久久va| 性爱AV天堂| 韩国午夜理伦三级好看| 国产不卡的视频| 婷婷九月色| 国产精品电影大全| 欧美熟妇操操视频| 高清无码 国产精品| 亚洲,欧美,综合网| 日本三级韩三级99久久| 被窝影院午夜看片无码| 伊人991| 亚洲欧洲网站免费观看| 超碰地址久久| 91久久久视| 日韩在线观看字幕精品| 91熟女丨老女人| 亚洲色欲一区二区三区| 乱论91| 超碰久超碰久| 97色欧州| 人妻精品一区二区在线| 神马久久午夜| 亚洲日韩少妇一道本视频| 丁香五月性爱| 亚州熟女乱伦| 国产精品久久久久久9999| 丁香六月激情| 国产操逼视频在线观看| 日日躁狠狠躁天天躁精品| 99热色这里只有精品| 日韩国产乱子伦App| 久久久久久久久999| 欧美大片天天看| 色噜噜狠狠色综无码久久合欧美| 日本人妻中文字幕| 97久操| 亚州春色| 国产在线76页| 日本性爱不卡视频| 久操精品| 久久99干一本高清| 亚州色图狠狠干| www久久久| 韩国黄片aaaa| 九九九久久久| 97人人色| 亚洲欧洲第二视频在线观看色图| 丁香五月天堂网| 乳欲人妻办公室奶水| 在线综合网| 91天天综合在线| 伊人网在线视频| 在线女人91| 国产超碰在线| 久操视频资源站公开| 东北少妇高潮zzzz| 大香蕉伊人75| 少妇精品久久久八区九区| 激情文学 国产一二三aV| 天天插天天干| 91在线无码精品秘 软件| 婷婷丁香九月| 成人五月天丁香激情综合| 蜜屁av| 天天影视91看看| 丰满人妻一区二区中文| 日韩av色图综合| 丰满少妇一区二区三区专区| 精品久久99| 国产高清成人传媒影视| 欧美日韩激情无码专区| 天天躁日日躁成人字幕aⅴ| 久久精品人妻一区| 超碰2017| 日躁天天爽爽| 极品少妇久久久| 99少妇内射| 欧日韩一二三f区| 国产精品3| 97欧美色综合| 天天天操天天天爱| 男人精品天堂一区| 亚洲黄色网址| 欧美 综合 亚洲| 欧美日韩青操| 中文字幕在线2| 天天综合网~91入口| 国产视频第2页| 熟女高潮合集-永久久久-成人AV| 白 大 人妻 区 在线| 国产盗摄美女如厕大神作品在线观看 | 99re6在线视频精品免费完整版安卓版| 四季AV一区二区凹凸精品小说| 中文字幕少妇色| 亚洲美女30b| 久久只有精品一区二区三区| 操学生天天| 国产久久一区二区| 九9热伊人| 久久久性少妇| 96久久久久久久| 男人的天堂2018| 国产二区三区免费视频| se吧提供91精品国产91久久久久久 | 久久xx| 精品网站9999| 91挑色欧美| 中文字幕精品专区搜索结果91| 美女上床网站|