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

ARTICLE DETAIL

資訊詳情

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

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

.NET 6 OPC UA工業(yè)級(jí)通信實(shí)戰(zhàn):心跳保活、異步寫(xiě)入與訂閱穩(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)、變量讀寫(xiě)、節(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依賴(lài)庫(kù)、112個(gè)TXT說(shuō)明文檔及少量CS源碼、EXE可執(zhí)行程序和Sln工程文件整體87.75MB便于按模塊定位協(xié)議配置、客戶(hù)端邏輯與證書(shū)管理細(xì)節(jié)。已有673人學(xué)習(xí)下載提供可直接運(yùn)行的完整工程環(huán)境、典型錯(cuò)誤處理示例及訂閱回調(diào)機(jī)制實(shí)現(xiàn)片段助開(kāi)發(fā)者規(guī)避連接超時(shí)、證書(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ù)訂閱 異步寫(xiě)入 PLC 寄存器你搜“.net opc ua demo”大概率會(huì)撞上一堆只連得上模擬服務(wù)器如 UA Simulation Server、不處理斷線重連、沒(méi)心跳?;钸壿?、寫(xiě)操作全卡主線程的“教學(xué)玩具”。但這份.Net OPC UA通信Demo不是——它基于.NET 6 OPCFoundation.NetStandard官方 SDK非 UaClient 封裝層完整覆蓋工業(yè)現(xiàn)場(chǎng)最剛需的五個(gè)動(dòng)作連接含證書(shū)自動(dòng)信任、斷開(kāi)資源釋放無(wú)泄漏、同步讀/異步寫(xiě)支持批量與單點(diǎn)、訂閱帶發(fā)布間隔、采樣間隔、隊(duì)列深度三重控制、心跳監(jiān)聽(tīng)獨(dú)立線程輪詢(xún) Session 狀態(tài) 自動(dòng)重連觸發(fā)。它不是教你怎么建模而是教你怎么讓 C# 程序在車(chē)間工控機(jī)上連續(xù)跑 72 小時(shí)不掉線、不丟數(shù)據(jù)、不爆內(nèi)存。適合正在對(duì)接西門(mén)子 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ù)”、“寫(xiě)寄存器不能阻塞 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類(lèi)暴露了足夠底層的控制權(quán)——比如你能直接拿到Session的KeepAliveCounter、手動(dòng)調(diào)用Session.ReconnectAsync()、甚至替換默認(rèn)的IChannelFactory來(lái)注入自定義證書(shū)驗(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 證書(shū)存儲(chǔ)時(shí)后者才是唯一選擇。2.2 創(chuàng)建 Client 實(shí)例四步初始化缺一不可// 1. 配置 ApplicationConfiguration必須否則證書(shū)加載失敗 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) { /* 自定義證書(shū)校驗(yàn)邏輯 */ } }, TransportConfigurations new TransportConfigurationCollection(), TransportQuotas new TransportQuotas { OperationTimeout 15000 }, ClientConfiguration new ClientConfiguration { MaxRequestAge 30000 } }; // 2. 加載或生成客戶(hù)端證書(shū)生產(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í)控制 異常分類(lèi)捕獲 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ù)器證書(shū)導(dǎo)入 Windows 本地計(jì)算機(jī)的“受信任的根證書(shū)頒發(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)制要求此路徑若寫(xiě)成opc.tcp://...:4840會(huì)返回BadEndpointUrlInvalidSecurityMode?SignAndEncrypt僅None模式無(wú)需證書(shū)但絕大多數(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毫秒控制單次讀/寫(xiě)/訂閱請(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—— 客戶(hù)端證書(shū)未綁定私鑰或未導(dǎo)出為 PFX 格式BadWaitingForInitialData—— 訂閱創(chuàng)建后未及時(shí)調(diào)用session.AddSubscription()。3. 數(shù)據(jù)讀寫(xiě)實(shí)戰(zhàn)同步讀取 異步寫(xiě)入避免 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í)際類(lèi)型調(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 異步寫(xiě)入批量寫(xiě) 失敗回滾防止部分寫(xiě)入導(dǎo)致?tīng)顟B(tài)不一致// 構(gòu)造寫(xiě)請(qǐng)求支持 Value、StatusCode、SourceTimestamp 三元組寫(xiě)入 var writeRequest new WriteRequest { NodesToWrite new[] { new WriteValue { NodeId NodeId.Parse(ns2;sPLC1.Setpoint), AttributeId Attributes.Value, Value new DataValue(new Variant(125.5)) // 寫(xiě)入浮點(diǎn)數(shù) }, new WriteValue { NodeId NodeId.Parse(ns2;sPLC1.Mode), AttributeId Attributes.Value, Value new DataValue(new Variant((int)OperationMode.Auto)) // 枚舉寫(xiě)入 } } }; // 異步執(zhí)行寫(xiě)入不阻塞主線程 var writeResponse await session.WriteAsync(writeRequest).ConfigureAwait(false); // 關(guān)鍵逐個(gè)檢查寫(xiě)入結(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 寫(xiě)回 Manual避免 Setpoint 生效但 Mode 未切換 await RollbackPartialWriteAsync(session).ConfigureAwait(false); }避坑 / 常見(jiàn)問(wèn)題 / 排查現(xiàn)象 1寫(xiě)入后 PLC 寄存器值未更新但WriteResponse.Results[i].IsGood()返回true原因PLC 端對(duì)該節(jié)點(diǎn)設(shè)置了寫(xiě)權(quán)限限制如只允許特定用戶(hù)組寫(xiě)入或?qū)懭胫党龇秶?125.5 寫(xiě)入 INT16 寄存器解決用 UA Expert 連接同一服務(wù)器右鍵節(jié)點(diǎn) → “Browse Attributes” → 查看WriteMask和UserWriteMask確認(rèn)數(shù)據(jù)類(lèi)型匹配INT16 節(jié)點(diǎn)只能寫(xiě)-32768 ~ 32767整數(shù)現(xiàn)象 2WriteAsync()拋出ServiceResultException: BadWaitingForInitialData原因Session 已斷開(kāi)但未被檢測(cè)到session.WriteAsync()內(nèi)部嘗試復(fù)用失效 Channel解決在寫(xiě)入前加if (!session.Connected) await session.ReconnectAsync();或監(jiān)聽(tīng)session.SessionClosing事件現(xiàn)象 3批量寫(xiě)入中一個(gè)節(jié)點(diǎn)失敗其余節(jié)點(diǎn)仍被寫(xiě)入違反原子性原因OPC UA 協(xié)議本身不保證事務(wù)性NodesToWrite是并行寫(xiě)入而非事務(wù)塊解決如代碼所示必須手動(dòng)檢查每個(gè)Results[i]失敗時(shí)主動(dòng)回滾已成功寫(xiě)入的節(jié)點(diǎn)需預(yù)先緩存舊值3.3 讀寫(xiě)性能邊界單次最多讀/寫(xiě)多少節(jié)點(diǎn)OPC UA 協(xié)議未硬性限制單次請(qǐng)求節(jié)點(diǎn)數(shù)但實(shí)際受以下因素制約PLC 處理能力西門(mén)子 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寫(xiě)操作單次 ≤ 20 個(gè)節(jié)點(diǎn)且避免高頻寫(xiě)如 100ms 間隔否則 PLC 可能丟棄后續(xù)請(qǐng)求關(guān)鍵變量如急停信號(hào)應(yīng)單獨(dú)建讀請(qǐng)求不與其他變量混綁確保低延遲響應(yīng)。4. 訂閱與心跳讓數(shù)據(jù)“活”起來(lái)而不是輪詢(xún)拉取4.1 創(chuàng)建 Subscription三個(gè)核心參數(shù)決定數(shù)據(jù)新鮮度與內(nèi)存占用// 創(chuàng)建訂閱對(duì)象注意PublishingInterval 決定服務(wù)器推送頻率非客戶(hù)端接收頻率 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í)器周期不是客戶(hù)端收到數(shù)據(jù)的間隔。若SamplingInterval 500且值持續(xù)變化客戶(hù)端可能每 500ms 收到一次若值穩(wěn)定可能數(shù)分鐘才推送一次SamplingInterval 500服務(wù)器采集頻率必須 ≤PublishingInterval否則無(wú)效QueueSize 10當(dāng)網(wǎng)絡(luò)中斷時(shí)服務(wù)器會(huì)緩存最多 10 個(gè)變更值恢復(fù)后批量推送設(shè)太大會(huì)吃?xún)?nèi)存設(shè)太小如 1易丟數(shù)據(jù)。4.2 監(jiān)聽(tīng)數(shù)據(jù)變更用 EventHandler 而非輪詢(xún)釋放 CPU// 注冊(cè)數(shù)據(jù)變更事件推薦強(qiáng)類(lèi)型泛型事件避免 object 轉(zhuǎn)換開(kāi)銷(xiāo) 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 { // 處理空值或類(lèi)型不匹配如 PLC 返回 BadValue LogWarning($Pressure node returned invalid value: {item.Value?.StatusCode}); } } };邏輯說(shuō)明Notification事件在 OPC UA SDK 的專(zhuān)用線程中觸發(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ú)立線程輪詢(xún) 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)銷(xiāo)解決所有await后添加.ConfigureAwait(false)如代碼所示5. 避坑指南產(chǎn)線部署前必須驗(yàn)證的 5 個(gè)血淚經(jīng)驗(yàn)5.1 證書(shū)鏈信任Windows 證書(shū)存儲(chǔ)區(qū) vs. 文件系統(tǒng)證書(shū)路徑現(xiàn)象開(kāi)發(fā)機(jī)上運(yùn)行正常部署到客戶(hù) WinServer 2019 后連接失敗日志顯示BadCertificateUseNotAllowed原因開(kāi)發(fā)時(shí)用LoadOrCreateCertificateAsync()生成 PFX 證書(shū)并存于項(xiàng)目目錄但生產(chǎn)環(huán)境未將該證書(shū)導(dǎo)入 Windows 本地計(jì)算機(jī)的“個(gè)人”存儲(chǔ)區(qū)且ApplicationConfiguration未指定CertificateStoreLocation解決部署時(shí)運(yùn)行 PowerShell 腳本導(dǎo)入證書(shū)Import-PfxCertificate -FilePath C:\OPC\client.pfx -CertStoreLocation Cert:\LocalMachine\My -Password (ConvertTo-SecureString password -AsPlainText -Force)代碼中顯式指定證書(shū)位置config.SecurityConfiguration.ApplicationCertificate new CertificateIdentifier { StoreType Directory, // 或 Windows StorePath C:\OPC\Certs, // Directory 模式路徑 SubjectName OPCUA-Client-Cert };5.2 斷線重連不要依賴(lài) SDK 自動(dòng)重連必須手動(dòng)控制重試策略現(xiàn)象網(wǎng)絡(luò)閃斷 3 秒后session.ReconnectAsync()報(bào)錯(cuò)BadWaitingForInitialData后續(xù)所有讀寫(xiě)失敗原因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)建/銷(xiāo)毀 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ù)類(lèi)型映射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ò)誤描述。例如西門(mén)子 S7-1500 在寫(xiě)入非法地址時(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)成可讀中文西門(mén)子、羅克韋爾等廠商的InnerStatusCode是十六進(jìn)制編碼直接查文檔效率低。我整理了一份常用映射表可嵌入日志模塊InnerStatusCode中文描述常見(jiàn)場(chǎng)景0x801F0000讀取地址超出范圍訪問(wèn) DB1.DBX1000.0但 DB1 只有 500 字節(jié)0x80240000寫(xiě)入地址只讀嘗試寫(xiě)入 PLC 的系統(tǒng)寄存器如I0.0輸入點(diǎn)0x80350000數(shù)據(jù)類(lèi)型不匹配向 INT16 節(jié)點(diǎn)寫(xiě)入浮點(diǎn)數(shù) 3.140x804F0000節(jié)點(diǎn)不存在ns2;sPLC1.NonExistentTag拼寫(xiě)錯(cuò)誤實(shí)現(xiàn)自動(dòng)解析public static string GetErrorDescription(uint innerCode) { return innerCode switch { 0x801F0000 讀取地址超出范圍, 0x80240000 寫(xiě)入地址只讀, 0x80350000 數(shù)據(jù)類(lèi)型不匹配, 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ī)單純依賴(lài)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ú)歸類(lèi)告警——它幫我們提前發(fā)現(xiàn)過(guò) 3 次 PLC 程序邏輯錯(cuò)誤比等客戶(hù)投訴快 48 小時(shí)。希望幫到你。本文還有配套的精品資源點(diǎn)擊獲取
返回列表
PREV
查看更多資訊
NEXT
返回資訊列表
亚洲激情视频| 67194国产| 97最新在线播放视频| 国产欧美精品日韩区二区麻豆天美| 日韩综合色网| 熟妇的味道HD中文字幕| 天堂岛av| 亚洲欧美999| 色婷亚洲五月在线观看| 久久久九九| 日韩乱伦影音先锋| 亚洲影视第一页| 亚洲日韩美国人妻| 青青草久久在线| 精品国产一区二区三区四区在线看| 国产人妻久久精品一区二区三区| 大香蕉中文aV在线| 国产最火爆久久国产网站网站| 蜜桃狠狠色伊人亚洲综合网站| 东京热毛片177b2viP| 偷看洗澡一二三区美女| 一级免费精品| 农村妇女一级二级三级视频| 9Ⅰ老熟女| 神马久久久久眼| 无遮挡一级毛片视频免费的| 久久久九九九九| 日韩人妻一二三区视频| 日本五区不卡| 日韩中文字幕av在线播放| 91足交| 91久久久老司机| 色小视频蜜乳| 国产精品香蕉热久久新品| 美女黑人91神马| 操91| 国产三级多多影院2022国产AA一级毛片无码 | 国产亚洲色婷婷久久99精品91 - 百度| 天天激清| 激情婷婷黑人91| 婷婷伊人一区| 色吧综合网| 亚洲一级黄色毛片| 亚洲人妻日日日| 精品一区二区三区四区女| 国产黄色av大片网站| 91熟女丨91老女人| 日本不卡在线二区三区| 天天做天天爱| 午夜120视频在线观看| 免费观看一区| 亚洲激情在线| 日本大香蕉综合网| 少妇综合| 2017天天拍大香蕉| 中文字幕精品探花视频| 亚洲成人贴图| 日本操逼视频免费| 色悠久| 欧美综合综合| 干少妇视频| 嗯嗯嗯啊啊在线观看| 丁香婷婷激情五月天无毒不卡| 手机av亚洲丝袜美腿日韩第一页二页| 青娱乐国产盛宴视频| 夜草网站| 99视频这有这里有精品| 久久精品性| 夜夜草天天| 一区二区高清视频| av黄图片在线观看| 狠狠操夜夜| 亚洲情色综合| 2017av无码免费无线播| 欧美偷拍区| 97最新在线播放视频| 男人天堂2019亚洲| 天天看片麻豆| 亚洲超碰97| 强奸乱伦AV一天堂网| 国产精品久久99日日| 性爱av网站| 天天影视网综合少妇| 中文伊人大香蕉视频| 日韩AV电影网站| 绑缚麻绳人妻寝取完整版| 色欲天香天天综合网-成年人三级片网站-欧美乱妇狂野-日韩国产专区-久久久久久 | 日韩人妻资源在线看| 少妇内射www在线观看视频| 素颜老阿姨乱情色| 亚洲av青草久久一区二区| 亚洲av综合色区图片亚洲| 99热99在线| 亚洲AV不卡在线观看尤物| 麻豆成人av| 欧美激情精品| 五月丁香久久| 超碰导航97| 久久亚洲欧美中文字幕国语 | 99啪| 亚洲色人| 97久久精品亚洲中六字幕| 9 1超碰九色| 97视频在线播放| 九九精品热| 亚州大图综合色图| 大香蕉丝袜一级片| 97手机日韩| 性做久久久久久免费观看软件| 中文字幕97| 99在线免费观看| 亚州图片第一页| 精品国产无码中文| 另类成人首页一区| 日韩不卡av一二三| 黄色交缠性感爆操91国产精品免费一区二区三区| 人人操欧美风骚| 加勒比大香蕉视频在线| 91综合站| 欧美日韩美女精品久草一区二区三区| 欧美一级二级三级| 99久热| 加勒比99999| 亚洲综合性感在线| 国产成人免费观看在线视频| 久久精品一区一起草| 久久久久久国产精品| 男女国产精品| 欧美激情久久久久| 青青草中文-久久青草精品一区二区三| 丰满欧美少妇| 亚洲精品无码成人久久久99| 九久久精| 久久久神马影院| 欧美国产伊人久久久久| 国产精品69久久久久久久| 九九综合| 久久久国产三级黄色片| 手机午夜电影神马久久| 9精品久久久久| 久久大线蕉一区| 92福利社视频| 26uuu性物| 超碰九7免费| 天天日熟妇| 人妻一区二区三区| 久久99视频| 殴美在线AⅤ| 99无码狠狠久久| 另类图片亚洲加勒比另类图片亚洲加勒比另类图片亚洲加勒比 | 91精品国产乱码| 午夜精品久久久久久久男人的天堂| 熟妇人妻一区二区三在线 | 九久久九精品视频| 丁香五月综合| 99久久9| 成人 日本A片无码8888| 色操逼网| 国内亚洲高清无码| 欧美A片中文字幕| 中文字幕免费看| 蜜屁Av| 中文字幕78| 婷婷情色综合网| 亚殴在线| 国产乱码精品久久久久久| 性爱动态120秒| 国内自拍 日韩激情 99| 日本一本一区二区三区四区五区欧美日韩中文字幕 | 91精品人妻一区二区三区蜜桃| 夜夜爽爽爽| AV不卡在线| 欧美日韩电影成人在线| 亚洲情色1区| 五月婷婷大香蕉| 成人五月香网在线| 啊啊啊啊二区好大| 日韩欧美蜜桃精品久久中文字幕久久| 国产精品交换一区二区| 男人的天堂2019AV| 国产成人主播| 日韩精品午夜操呦呦不卡影院| 亚洲免费97免费| 10000部十八禁看电影| 久久 亚洲 日韩 人妻| 97 视频在线| 97国产伦理| 久 久无码人妻AV| 日韩免费三级黄片电影| 美国aaaaa一级黄片| 操逼片国产| 中出91| 91综合国产精品| com 首页 18岁 禁区 女优 免费 精选 同城 | www.色综合| 精品久久視頻在线| 33044男人的天堂深夜备| 超碰社区97| 放黄片放3级黄片没穿衣服| 麻豆国产96在线| 色性荡荡荡荡视频| 国产热av| 18禁精品网站在线看| 欧美在线播放aaaa| 老鸭窝成人| 亚洲小电影免费涩涩成人在线高清| 色97干| α√在线| 久久久精品视频欧州站| 久草尤物| 女人妻一区| 欧美黑人极品高潮喷吹熟女黑人性暴力日韩在线欧美极品一区二区老师黑人潮喷一 | 国产精品美女| 久久乐| 欧美草草高清日韩视频| 襙一襙| 亚洲AV免费在线| 亚洲欧美在线综合| 亚洲国产一区二区入口| 2020天天色综合| 99热最新网址| 国产无码精品成人| 久久久久ab| 国产精品爱欲| 亚洲一区制服诱惑| 在线视频日韩欧美国产| 97欧美综合网| 久久国产视频专区一二三| yazhououmeizongya| 3d成人精品一区二区| 国内外毛片在线观看| 日韩色欲久久一二三四区| 欧美 亚洲 另类 综合| 色翁荡息又大又硬又粗又爽| 久久久久久少妇| 久操网址| 亚洲欧美伦综合| 淫色网综合| AV一区观看| 精品久久九| 亚洲午夜福利视频| 欧美爆乳精品一区二区| 色与欲影视天天看综合网| 香蕉久久国产AV一区二区| 99色视频| 91久久九九精品国产综合| 国产精品视频在线播放| 激情五月综合| 欧美爱三级日韩久久| SUV一区二区在线看| 日本在线视频导航| 国产一区二区三区免费视频在性观看| 色97国产69香蕉| 国产黄色影片在线观看| 韩国一区二区精品亚洲| 欧洲精品久久| 久久99视频| 超碰色图| 丰满精品人妻少妇久久字幕| 人人摸人人干人人拍97| 亚洲欧洲av影音| 91香蕉国产尤物视频| 日韩有码专区| 亚洲欧美综合| 亚洲国产一级黄色视频| 风韵犹存大大大大香蕉 | 亚洲综合影片| 九九热免费在线国产视频伊人五月| 国内精品99999| 91女优在线观看| 欧美日韩国产人人| av日韩中文字幕| 国产精品视频在线播放| 和协影院中文字幕三区| 又大又白奶子| 欧美狠狠弄| 中文字幕乱码人妻一区二区三区,99精品 | 国产乱码久久久| 麻豆影音天美视频| 美女被啪到深处抽搐视频| 日韩av免费一级电影| 久草资源在线| 亚洲一区日韩精品中文字幕| 国产精品美女久久久久久网站| 六月婷婷综合| 婷色五月| 久9久9精品| 欧亚成人在线视频| 人妻熟女一区二区三区视频| 三级精品三级在线观看| 国产成人无码久久精品| 美女主播色欲91抠b在线播放| 黄色网址在线免费观看| 亚洲人精| 亚洲人妻久久久| 久久97| 亚洲一区二区三区在线激情| 久久99精品视频| 欧美 传媒 麻豆 日韩 偷拍| 97欧美色| 日婷婷| 99热精品在线观看| 91男人天堂网| 在线日韩精品一区二区三区| 久久 国产精品 一区| 性色avv| 一区二区视频在看| a在线视频免费观看| 日韩情色AV| 蜜臀99久| 曰韩精品九九无码| 黄页av| 色综合久久888| 婷婷色香伊人| 丰满人妻一区二区三区| 噜噜噜噜天天狠狠| 丁香婷婷啪啪| 亚洲天天操| 日韩无码专区| 日韩人妻丝袜美腿中文| 国产高清免费不卡av| 黄色网址久久精品欧美喷水| 91精片| 日本天天吊| 久久精品一区二区三区四区五区| 成人三级片无码| 久久999久| 91久久久久久久久久久| 激情小说图片亚洲首页| 青青草九九九九九| 亚洲高清无毛一区二区| 亚洲人在线| 91综合色噜噜| 亚洲黄色电影| 久久久久久亚洲精品不卡人乳| 天天综合色电影| 淫荡网址| 超碰人妻中文在线| 澳门特级毛片免费观看| 91女日逼| 日日噜噜夜夜久久亚洲一区二区 | 风流老熟女一区二区三区l| 国产探花日韩援交| 激情视屏国产乱伦强奸| 啊嗯嗯啊好大好爽| 国产成久久综合片| 97超碰人操| www激情| 欧美视频在线视频免费va| 97资源免费视频| 激情四射五月天| 国模不卡| 麻豆久久一区二区三区| 精品妇操一区二区三区| 97视频网站| 久久色一区二区| 在线观看黄色电话| 亚川综合视频| 超碰成人公开| 激情综合网五月婷婷五月天| 大香蕉视频一二三区| 亚洲熟女综合网| 操死我了啊啊啊| 欧美永久激情一区二区| 五月激情啪啪| 欧美成人性爱视频大全| 每日更新AV| 亚洲第一黄色av网站| 2025年A片视频精品| 亚洲综合在线91| 日韩不卡网操逼中文字幕日韩| 亚洲天堂电影网| 密臀AV在线| 夜色五月天| 成人av免费观看| 97人人草| 国产熟码AV| 一区麻豆 高清中文字幕| 99re这里只有精品中心播放 | 国产精品视频播放| 日本最新免费韩国1区2区视频播放| 操逼操逼逼操操逼91 | 亚洲综合网电影91| 亚洲国成人情色好看电影| 98超碰日本| 人妻少妇精品视频一区二区三区| 蜜桃色院一区久久 | 麻豆天美AV传媒第一页| 91综合站| 欧亚性爱啪啪| 97色论| 欧美九一精品久久久熟妇| 成年在线视频日本亚洲在线视频区精品江靖宇公司 | 中文字幕一区二区三区50路| 性爱免费视频成人| 内射白嫩美女| 亚洲黄色| 性一交一乱一交A片久久四色| 久久久久免费看少妇A片特黄| 欧美色图综合网| 欧美十八禁导航成人| 色综合 加勒比| 国产在线综合福利网站| 99热久| 人妻另类| 亚洲超碰在线| 亚洲青青草| 狠日操| yazhousetuoumei| 91丝袜在线观看| 五月综合视频| 九九九九久久久久| 亚洲精品欧洲精品| 7月婷婷综合| 国产黄色 A 片免费看| 亚洲精品九九九| 秋霞免费无码视频日韩A片| 性夜影院爽黄A爽免费动漫| 无码不卡亚洲成?人片| 亚洲国产91精品一区二区久久| 玖玖爱综合| 四虎视频在线观看| 日躁天天爽爽| 国产动漫操逼视频| 久草精品一区 | 人人妻人人玩人人澡人人爽| 日韩A优精品在线观看| 69精品人人人人| 2019午夜福利视频| 国产精品 久久久精品一牛| 91精品大奶人妻| 97国产色图| 2017天天拍大香蕉| 亚洲色图在线视频| 另类欧美色| 怡红院一区二区熟女人妻| 97超视频在线观看| 亚洲国产一区二区入口| 欧美激情亚洲色图| 国产97在线 | 亚洲| 福利在线观看一区二区| 久久久男人的天堂| 26uuu性| 偷拍超碰| 在线精品福利免费播放| 极品AV网站在线观看| 国产精品久久久久无码A√| 人人爽夜夜操| 福利操逼| 日逼97| 日本天天吊| 成人毛片免费| 干B| 蜜臀AV网站| 东北女人性交| 国产精品久久久亚洲一区| 婷婷激情四射| 97超级欧美| 激情接吻视频久久久久久| 天天肏夜夜肏| 看黑丝美女操逼青青网站| 国产福利影视| 蜜臀在线看片| 色色国产| 岛国在线一区二区三区| 日韩欧美~中文字| 色五月大香蕉| 国产精品一区二区久久精品| 麻豆色约约| 国产精品对白内射| 天天精品| 中文字幕五月婷婷免费| 性生活性生大爱77AV国产| 97综合在线观看| 精品人体无圣光凹凸| 久久老熟女| AV99热18这里只有精品| 国产九九久久久精品| 欧美亚洲中文字幕| 亚洲啪啪视频一区二区| 一个人免费视频观看在线WWW| 一区二区三区高清天码| 九九九国产精品| 日韩成人色图| 日本欧美国内在线| 深田咏美亚洲精品福利社| 岛国A V在线免费看| 九九九九九精品视频| 久久久久白虎| 国产乱伦视频污| 亚洲综合第一页| 曰本熟女视频| 超碰 97国产熟女| 99久久网站| 欧美大香蕉专区网| 日韩高清黄片| 少妇一级婬片免费放一级a性色.| 秋霞无码av鲁丝片一区| 欧色网址| 久久一区二区蜜桃| 亚洲天堂日本| 色综合99999| 久久久久久少妇| 久久男人网| 一区=区三区视频| 91久久午夜无码鲁丝片久久人妻| av无线看| 911粉嫩人妻| 色天使亚洲综合在线观看| 久久精品国产亚洲AV高清演员表| 日韩三级网址| 久神马| 天天日美女的B| 啊啊啊不要啊啊受不了了视频在线| 亚洲操逼网| www.99在线| 91人人爽人人爽| 天天看片麻豆| 91大香蕉伊人| 国产中文字幕在线点播| 久久riav中文精品| 天堂精品在线| 欧美玖玖爱免费玖玖| 殴美性天天| 国产美女裸体秘 永久无遮挡| 丰满少妇精品一区二区| 2019天天干| 欧美综合娱乐久久| 久久婷婷六月综合| 亚洲色偷偷色噜噜狠狠99网| 自拍亚洲综合| 久久精品国产亚洲AV清纯| 亚洲最新中文字幕免费| 97免费在线视频在线观看| 亚洲男人的天堂在线看| 精品久久久久久中文字幕视频免费 | 九九亚洲精品| 午夜欧美精品久久久| 93人人操人人| 日韩不卡一二三四| 91AV入口| 91欧美成人色站| 超碰色老头| 色婷婷激一区二区三区| 人妻人人澡人人爽人人| 日韩熟女操逼| 一个人在线看的黄色电影网站| 狠狠干综合| 老熟女综合网| 欧美婷婷五月天| 后入福利| 激情五月天视频| 青青草影视蜜久久| 色婷婷小说| 超碰吊日色| 婷婷综合五月天| 九九草| 欧美狠狠操| 天天拍夜夜| 96久久精品一二三区色欲| 麻豆影音天美视频| 国产中文精品一区二区在线观看| 精品国产丝袜一区二区三区乱码| 免费簧片在线观看| 中文字幕视频二区| 午夜天堂精品久久久久91| 91精品国产长腿丝袜美女| 嫖老熟女A片一二三区| 亚洲女优有码无码高清| 亚洲日韩XXX| 精品区国产区一区二区三区| 囯产精品强| 爱我干综合| 中文字幕av亚洲精品| 日日夜夜草草草| 婷婷视频在线免费观看| 国产v亚洲v日韩v欧美v片另类| 人人么人人操| av天天在线| 成人夜夜爽| 91精品伊人久久久大香线蕉91| 激情五月婷婷| 亚洲午夜未满十八勿入网站日本又色又爽又黄 | 丰满岳乱妇一区二区三区| 嗯阿好爽好紧| 天天天天天干夜夜夜夜夜操| 精品人体无圣光凹凸| 91精品人妻一区二区三区蜜桃| 久久一级无码精品毛片6| 上特色A在线| 久久久久久久久久久久久女过产乱-少妇高潮一区二区三区喷水-成人AV | 国产人妖视频一区在线观看| 欧美狠狠狠| 日韩人妻精品中文字幕| 久久久久成人亚洲国产| 夜夜草天天| 91精品91久久久久77777俄罗斯老妇姓x| 亚洲精品人妻在线| V A在线| 亚洲天天操| 青青操日韩| 五月丁香| 亞洲久久直播| 黄人人操人人操| 丁香九月婷婷| 婷婷伊人五月| 97在线免费视频观看| 舔人妻中文免费视频| 99在线啪| 1.igao73.com 加入收藏 免费专区 国产精品 中文字幕 日韩精品 欧美精品 精彩 | 无码人妻丰满熟妇奶水区毛片| 91人妻人人澡人人爽人人精品| 亚洲情色电影网| 九九Av| 婷婷五月成人| 999日韩中文精品观看视频。| 婷婷色综合欧美日韩| 日本大香蕉综合网| 91丨人妻丨国产丨丝袜| 黄色工厂这里只有精品| 日本精品一区二区三区四区的功能| 99久久久无码精品国产人| 亚洲激情久久久伊人综合| 78m成人视线| 91老熟女| 日韩欧洲操屄视频| 亚洲色图亚洲无码强奸乱伦| 乱伦熟女区| 国产精品交换一区二区| 亚洲有码 欧美精品| 久久亚洲不卡一区二区三区| 自拍啪啪视频| 中文视频在线观看| 91精品无码人妻系列| 夜夜一区二区| 久热这里| 天天躁日日躁成人字幕aⅴ| 女人被男人桶爽视频网站| 大地资源在线观看中文第二页| JuliaAnnXXX888| 黑人猛交| 不卡免费av在线播放| 中字乱伦AV| 亚洲污一污二| 91被操| 99热综合| 天天摸夜夜操视频| 天天做天天爱夜夜爽毛片试看| 中文字幕在线免费观看| 色综合天天| 中文字幕 av v| 欧美 日韩第一性色| 久久春色| 人妻AV 中文字幕的| 91视频综合网| 九九精品美女高溯喷水| 亚洲天堂一区| 国产精品自拍欧美在线| 亚洲综合性网址| 网站A V在线| 婷婷香蕉欧美在线一区二区三区| 色蜜AV| 久久久久熟女| 91碰碰| 日夜精品| 日韩有码免费视频| 小说区 图片区色 综合区| 婷婷三区| 7777奇米影视久久| 久久久久久久9| 欧美性爱另类综合| 91国产丝袜白虎| 欧美日韩操逼嗦吊| 人妻少妇久久中文| 色九九综合| 日韩人妻丝袜中文字幕| 天美精品av| 一区二区三区国产在线播放 | 99久久综合| 欧美一区二区三区不卡高清视频| 97超碰欧美| 色综合98| 久久午夜色播影院免费高清| 综合色拍| 99精品丰满人妻无| www.99在线| 国产精品com| 久久极品伊人| 91人妻中文| 日韩熟女精一区二区三区不卡| 国产91亚洲精品一区二区三区| 99热这里只有精品地址| 在线免费观看高清无码视频| 国产蜜臀在线| 九一性生活免费视频| 91精品电影18| 亚洲国产ⅴ高清在线观看| 国产国产亚洲一二三久久| 少妇第一页| 99啪啪| 久久久久久夜夜夜夜夜| 黄色激情电影在线观看| 人妻内射一区二区在线视频| 97舔舔| 婷婷综合激情| 国产AV久久野战精品| 国产男女边吃边摸视频网站| 欧美97爱| 91宗合网| 91四海无码日韩欧美| 亚洲男人的天堂在线看| 97AV在线免费观看| 亚洲性综合| 人妻喷水| 久久人妻少妇| 亚洲熟女乱综合一区二区三区 | 五月婷亚洲精品天堂| 亚洲国产中文字幕| CCYY草草影院地址入口| 婷婷爽人人婷婷爽视频| 天天碰久久入| 天天躁夜夜躁狠狠躁AV| 日韩精品一区,二区 九九...老司机| 国产精品无码在线| 亚洲一区二区三区欧美日韩| 99热66| 97欧美精品综合| 天堂av2019| 四虎在线播放| 久久精品操| 日韩色图 一区二区| 偷拍亚洲视频一区二区三区四区| 搡老女人老妇女老妇老熟女怎么读| 久久精品午夜国产亚洲AV无码| GVH-003 母子姦 青木玲-麻豆视频,麻豆视传媒短视频网站入口,麻豆视传媒官网直 | 欧美日韩夜夜| 人人搡人人肉久久精品| 欧美色老汉| 超碰97色| 26uuu性| 激情自拍 校园春色| 操九九九九九九| 9997se| 99中文字幕| 国产精品探花色| 高清国产成人无码| 色色色综合网| 日韩色图 一区二区| 色色毛片| 精品久久久亚洲AV成人网站| 色哟哟-国产专区| 人妻天堂三区| Blackedraw视频一区二区| 日本韩国一本产品小视频日本韩国一本产品久久久产品小视频日本韩国一本产品久 | 精品国产乱码久久久久久免费| 99热导航| 久久99久久99精品天美传媒棢·纸:.| 丝袜无码a片| 天天日日日射| 久久久久久久久久9| 国模不卡| 9热9热综合网| 欧美亚洲情色| 综合色图亚洲欧美| 日日摸天天爽夜夜欢| 操逼国产免费| 国产综合色精品在线观看| 成人夜夜爽| 亚洲成人福利电影免费| 97资源欧美| 人妻少妇精品| 超碰超碰95| 99少妇| 综合激情婷婷| 亚洲欧美高清| 天堂精品小草| 亚洲av综合色区无码一| 精品人妻无码一区二区三区不卡-精品人妻无码一区二区...|精品少妇一区二区三 | 熟女人妻一区二区三区| 欧美变态激情网| 一区二区视频在线播放| 加勒比99999| 久久久久日本视| 国产精品网址| 竹菊一区二区三区AV线| 5月婷婷6月六月丁香| 国产午夜精品一区二区三区牛牛| 久操免费观看| 嗯啊啊啊轻点视频 | 天天做天天爱天天爽AV| 国产成人一级av88| 青草成人免费视频一COm| 欧洲乱码视频| 天天做天天爱天天爽| 激情小说图片亚洲首页| 欧美在线视频观看一二三四区高清| 精人妻一区二区三区| 久99视频| 无码高清少妇久久| 超碰在线1234区| 亚洲国产一级中文综合久久天堂在线免费观看| 好吊色综合| 欧美99热| 欧州一区二区三区四区| 精品小视频在线| 国产成人久久久精品免费AV| 日本精品五区| chaopen97久久| 亚洲狼狼干综合1| 成人国产精品三级A片| 欧美精品97| 大香交| 中文字幕少妇色| 乱伦1色页| 成人蜜乳小视频网站| 日本媚薬中文字幕在线| www.男人天堂| 欧美se亚洲| 欧美九九爱| 男人兔费天堂| 99热免费| 亚洲五月婷婷| 3p国产欧美99热| 亚洲熟女av日韩熟女| 亚洲一区二区久久久久| 久久精品国产亚洲AV高清演员表| 久草免费福利在线播放| www.久久超碰| 美女9118禁| 啊好爽快点-国产一区二区三区撒尿在线-成人AV | 五月婷婷丁香六月| 精品少妇一区二区三区在线视频| 久久久无码精品人妻二区 | 午夜.DJ高清在线观看免费7| 日本国产亚洲一区在线观看| 夜夜高潮夜夜爽国产伦精品| 日1区2区3区2020| 91亚洲综合在线| 中文字幕精品三级久久久| 亚洲熟妇AV日韩熟妇在线| 色女免费在线观看视频网址| 天天干人妻视频| 亚欧洲日韩国产精品| 東南亚性呦成人伦理资源在线视频| 另类图片五月| 99www.bibizy香蕉资源国产一区二区三区高清 | 伊人伊人LD| 欧美激情久久久久| 91操熟妇| 香蕉久久AⅤ...| 欧美日韩国产中文精品字幕自在自线| 日本中文字幕一区| 欧美 牲| 97伦综合| 亚洲欧洲av影音| 强奸乱伦Av网| 五月丁香综合啪啪| 婷婷另类小说| 狠狠爱夜夜| 自拍视频一区在线观看| 亚洲色欲天天人妻无码系列专区| 精品无码久久久久久国产浪潮| 欧美 亚洲 在线| A级毛片在线看免费| 国产麻豆一级精品视频| 安徽熟妇视频| 色99999| 国产激情综合| 色偷综合| 另类TS人妖一区二区三区 | 国产AV人人夜夜澡人人爽麻豆| 97色97好| 久久九操在线观看| 亚洲 小说 欧美 激情 另类| 青娱乐日韩无码| 啊好爽快点-国产一区二区三区撒尿在线-成人AV | 黑人无码一区二区| 久妇网| 78超碰| 一牛影视成人片免费| 日日橹狠狠爱欧美超碰| 日韩熟女三十乱伦| 男人天堂.AB| 亚洲天堂男人| 97爱爱影院| 人人操我人人干| 久久久专区| 激情干在线| 国产夫妻性生活视频| 日本人人操人人操| 天天性射网| 色色热| 欧美Ⅴ性爱| 一区二区三区四区久久视1| 天天上日日上日韩精品| 亚州久久9| 日韩欧美午夜视频在线| 青青操视频在线| 伊人久久婷婷| 91A欧美电影网站| 无套内射性感少妇视频| 插日本熟女视频| 亚洲图片欧美制度| 无码丰满熟妇一区二区浪潮AV| 日韩熟女操逼| 伊人国产视频| 91视频国品一二三区| 在线午夜成人无码视频| 国产精品午夜福利视频| 婷婷色综合| 国产又黄又爽又刺激久久久久久| www九九热| 日韩有码 一区二区三区| 日本中文字幕熟妇| 国产久久久久久久久一区二区| 极品粉嫩一区二区| 人人操,操人人| 国产亚洲色婷婷久久99精品91 - 百度| 国产熟女完整版中字| 亚洲脚交| 欧美亚洲涩涩| 91夜夜蜜桃臀1区2区3区| 91精品久久久久久综合五月天| 99爱爱| 人人摸人人干| 看日韩美女二区三区免费操逼视频 | 少妇二级| 97久久超碰| 男人高清无码一区二区| 美国黄片aaa| 91热热色| 后入式福利| 熟啊v色欧美热| 色婷亚洲五月在线观看| 成人五级久久| 欧美呦呦性爱| 视频国产欧美在线播放| 亚洲加勒比久久日本道| 国产精品农村妇女| 欧美成人精品一区二区男人蜜臀| 亚洲精品aa久久伊人| 日韩性爱一级片| 91白嫩| 亚洲丝袜诱惑| 久久精品黄色| 中文?日韩?免费?精品| 国产狂喷潮在线精品| 国产色产精品在线观看| 清纯唯美亚洲综合| 传媒在线观看一区二区三区| 999精品乱码| 国产丝袜欧美在线视频| 中文字幕美女91| 国产高清无码一区三区二区| 高清无码国产亚洲| 97精品国产97久久久久久户外免费| 国产中文字幕在线点播| 大香蕉免费3| 这里都是精品在线观看| 亚洲天堂另类美腿| 亚洲精品97中文字幕| 男人天堂最新手机版在线青青草| 嗯~啊~快点 死我视频| 99999精品视频| 91久久国外网| 97在线播放 | 波多野42部激情无码喷潮| 眼镜人妻101.com| 婷婷丁香六月| 国产精品久久久久久9999| 天天看片青娱乐| www国产天美久久久| 日韩伦理视频| 欧中美三级一区二区三区| 亚洲av国产av综合av卡| 少妇超碰在线| 日韩综合第八区国产精品| 日躁天天爽爽| 91精品大奶人妻| 亚洲精品久| 超碰99在线| 91GD.COM| 激情婷婷黑人91| 久久男女激情视频网站| 蜜桃精品视频一区| av最新免费中文字幕| AV老汉| 久久欲| 69综合网| 国产乱伦搜索结果91P| 中文字幕一区av| 久热热| 九九英色视频| 无遮挡一级毛片视频免费的| 人妻插插人妻人| 小说区 图片区色 综合区| 日韩情色视频| 久久久久久九九九九九| 三级三级三级日本99| 久久国模av| 探花熟女,姿勢到位,體驗感也到位| 成人福利视频网| 亚洲女人毛茸茸91| 丁香婷婷色五月| 97欧美超碰| 素颜老阿姨乱情色| 欧美日韩性爱电影在线| 午夜综合在线| 夜夜操狠狠操| 翔田千里爆乳巨臀无码| 欧美亚洲宗合色性图| 熟女被操视频网址| 少妇色| 青青草成人视频在线观看二区| 天天操人人操骚逼网站| 黄色视频特级毛片| 精品传媒在线一区| 精品国产72| 国产又爽又黄| 国产性爱在线视频一区二区| 91超碰碰在线| 日韩三级一区| 天天综合欧美| 久久亚洲天堂| 麻豆性爱视频在线播放| 国产精品成人在线| 三级精品三级在线观看| 熟女久久久| 欧美综合在线91| 啊…啊…操我用力操我| 亚洲综合另类小说色区亚洲成av人片在www | 婷婷五月成人| 曰本人妻人人澡人人夹| 超碰精品日韩欧美国产| 久久精品免视看国产成人﹣蜜臀av一区. 久久精品免视看国产成人,蜜臀av一区 | 精品一区96| 色婷婷五月天| 久久久久久久久久8888| 国产二区三区免费视频| 亚洲资源一区| 97伊人| 亚洲综合伊人无码久久| 美女t无毒不卡不卡| 久久久91福利姬| 超碰99在线| 欧美 亚洲 第一页 | AV女资源| 欲综合网| 美女啊啊啊啊啊啊| 91亚洲综合在线| 人妻色偷色噜| 绯色一区二区三区不卡少妇| 欧美gv在线观看| 国产精品一区午夜福利| 久久久久久久久久va| 日本国产高清色www视频在线| 97超碰9| 在线a亚洲视频播放在线| 又粗又长又爽在线观看| 日韩美女操b| 99久久e免费热视| 激情视频网址| 日本三级黄页| 8050午夜少妇无码| 长长久久免费视频| 怡春苑东京热| 91色欧美| 女性喷水高潮在线观看| 日本人妻中文字幕| 一块操欧美性爱| 91九久| 天天干夜夜肏| 人妻 丝袜美腿 中文字幕| 久热伊人| 国产第11页| 屁股久久久久久久久| 欧美色图亚洲激情| 国产1769在线| 久久综合精品一区二区三区| 日韩欧美天堂| 少妇干B| 欧美在线啊啊啊| 精品人妻视频一区二区在线播放 | 5月婷婷6月六月丁香| 精品性爱无码在线播放| 好舒服视频| 99国产女人| 91操人| 亚洲Av噜噜一区二区三区妖精| 国产suv精品一区二区四区999| 操逼逼中文字幕| 日韩女优中文字幕| 久久久久久久免费A片国产成a人亚洲精∨品无码 | 求求你操操我| 天天色播亚洲综合网站| 极品少妇99| 亚洲精品一区二区三区新线路| 无码黑人精品一区二区三区三| 黑人美精品 A片| 国产农村妇女精品一| 亚洲一区二区三区婷婷| 狠狠干综合| 少妇无码999| 五月丁香激情综合网| 欧美日韩国产色五月综合在线 | 欧美不卡在线美女| 另类图片五月天| 亚欧Av| 综合亚洲网| 青娱乐日韩无码| 蜜臀久久99精品久久久久久酒店 | 操九九九九九九| 网站A V在线| 超碰在线97国产| 色播丁香| 亚洲熟伦熟妇AV无码春色| 九九热免费国产视频婷婷伊人五月 | 99热99在线| 亚洲久草AV色图| 九九色婷婷| 亚洲人码13| 黄色小视频日本txt| 久久啊啊啊| 歐美性天天| 宅男91视频在线播放| 亚洲一区二区精品福利| 少妇大屁屁| 天堂蜜桃无码视频一区二区| 欧美日韩操操操| 欧美天天射| 欧美综合中文| 综合 青草 伊久久 影院 综合| 国产精品伦理| 极品色社| 日韩av乱伦| 少妇久久久久久| 亚洲色婷婷综合久久一区二区三区| 九色精品视频导航1| 91欧美www| 校园春色 亚洲| 干B| 亚洲人在线| 麻豆精品久久久久久久| av午夜影院在线播放| 最新国内自拍av免费| 天天日天天干天天操| 亚洲欧美日韩不卡人妻| 亚洲情色综合网| 99re在线视频国产| 97一本大道亚洲一区| 成人AV素股で擦久久| 一本一道人妻久久一区二区三区 | 红杏大香蕉| 性在久久久久久| 岛国色情视频在线观看| 97在线精品观看视频| 成 人片 黄色大片| 黄色一区二区秘书性感| 天天视频综合在线观看视频| 精品一级毛片在线观看|