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

ARTICLE DETAIL

資訊詳情

深耕商務(wù)建站與企業(yè)官網(wǎng)運(yùn)營(yíng)的一線(xiàn)實(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)線(xiàn) WinServer 上完成設(shè)備心跳監(jiān)聽(tīng) 實(shí)時(shí)數(shù)據(jù)訂閱 異步寫(xiě)入 PLC 寄存器你搜“.net opc ua demo”大概率會(huì)撞上一堆只連得上模擬服務(wù)器如 UA Simulation Server、不處理斷線(xiàn)重連、沒(méi)心跳?;钸壿?、寫(xiě)操作全卡主線(xiàn)程的“教學(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ú)立線(xiàn)程輪詢(xún) Session 狀態(tài) 自動(dòng)重連觸發(fā)。它不是教你怎么建模而是教你怎么讓 C# 程序在車(chē)間工控機(jī)上連續(xù)跑 72 小時(shí)不掉線(xiàn)、不丟數(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)部線(xiàn)程模型封閉無(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)線(xià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 線(xiàn)程如 WPF 的 Dispatcher中直接調(diào)用會(huì)導(dǎo)致界面凍結(jié)。因此必須包裹在Task.Run中交由線(xiàn)程池執(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ě)入不阻塞主線(xiàn)程 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)用線(xiàn)程中觸發(fā)不是 UI 線(xiàn)程。若直接更新 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ú)立線(xiàn)程輪詢(xún) Session 狀態(tài)實(shí)現(xiàn)秒級(jí)故障感知// 啟動(dòng)心跳檢測(cè)線(xiàn)程避免阻塞主邏輯 _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心跳線(xiàn)程 CPU 占用率高達(dá) 25%四核機(jī)器原因Task.Delay(2000)未ConfigureAwait(false)導(dǎo)致上下文捕獲開(kāi)銷(xiāo)解決所有await后添加.ConfigureAwait(false)如代碼所示5. 避坑指南產(chǎn)線(xià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 斷線(xiàn)重連不要依賴(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; } }或直接訪(fǎng)問(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)子、羅克韋爾等廠(chǎng)商的InnerStatusCode是十六進(jìn)制編碼直接查文檔效率低。我整理了一份常用映射表可嵌入日志模塊InnerStatusCode中文描述常見(jiàn)場(chǎng)景0x801F0000讀取地址超出范圍訪(fǎng)問(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(); }; // 心跳線(xiàn)程中檢查 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)線(xià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
返回資訊列表
日韩av在线精品观看| 亚洲蜜乳av| 麻豆久久久久久久久丝袜| 国产精品无码久久久久2028| 中文字幕99999| 国产伦精品免编号公布| 欧美成人都市人妻| 亚洲精品影视老司机| 91欧美经典| 91爱看| 人人色人人操在线| 国产精品麻豆成人av| 人人妻人人色一区二区三区| 超碰 国产熟女精品一区| 久久久一级| www色日本| 俄罗斯及免费在线看| 大香交| 麻豆天美久久91| 中文字幕高清精品一区| 国产性爱在线视频一区二区| 日本久久超碰| 欧美激情性爱视频网站| 亚洲伊人a线观看视频| 欧美色综合| 欧美 日韩第一性色| 又摸又舔在线观看网站| 超碰久久性爱| 人妻加勒比东京热| 久久中文色图| 免费看美国人人爽,人人操| 日韩AV片| 99ri在线视频| 欧美黄页在线| 99热这里只有精品9| 日韩性爱电影一区| 亚洲午夜福利在线影院| 伊人久久综合精品欧美| 亚洲一级性爱视频免费看| 日韩av电影网站| 国产熟女精品区| 激情文学欧美| 国产白丝在线| 欧美色91| 91亚洲欧洲| 亚洲国产精品无石码久久 | 性无码专区2020| 秋霞 色色| 婷婷性网| 韩国黄片aaaa| 一区二区三区机械有限公司| 再深点灬舒服灬太大了好硬好爽| 精品一区二区三区蜜桃臀赵总 | 久草久热| 77777亚洲蜜臀精品久久综合蜜臀| 亚州色图第三区| 亚州操操穴网| 加勒比日本在线| 亚洲天堂美臀在线| 校园春色 亚洲| 丰满熟女人妻一区二区三五十一路| 噜噜噜亚洲精品| 亚洲综合射| 97精品综合久久网| 美女91网址| 日本亚洲嫩草影院啪啪| 色色毛片| 乱伦1色页| 少妇高潮流水av免费| 熟女激情综合网| 一级成人性爱| 91久久久久久| 动漫区日韩区欧美区| 亚洲欧美91√| а√天堂资源官网在线资源| 国产亚洲综合欧美一区| 青春草A| 久久久99999久网站| 中文字幕熟女人妻丝袜丝| 久久精品无码熟妇一区二区三区视频导航 | 美女AV一区二区| 97欧美色| 草草草视频在线免费看| 久久无码电影| 欧美精品偷拍| 夜夜国自区| 欧美性爱第一页久久| 亚洲 自拍偷拍 欧美| 亚洲成人免费在线| 久久深夜无码| 久草新在线| 亚洲综合另类小说色区亚洲成av人片在www| 91精品女厕偷拍视频| 五月婷婷六月色| 久久久久大香青草精品综合| 中文字幕黄色一起草| 亚洲āv网址在线观看| 全球成人中文在线| 密臀AV在线| 精品日日人妻| 在线只有精品| 91制服丝袜中文字幕| 亚州一区二区成人片免费| 亚洲熟女av日韩熟女| 五月婷婷hd| 色臀av| 成人a大片在线观看| 日韩人妻精品久久久久| 五月天人妻综合| 美女尤物人人操| 开心五月激情网| 天操老女人| 国产精品人妻无码久久久互動交流 | 强奸熟女一区二区三区| 富女玩鸭子一级毛片| 五月色综合| 亚洲色香| 日韩不卡毛片Av免费高清| 亚洲aw毛茸茸在线| 91老熟女视频| 青青欧美在线| 久久久久亚洲熟妇熟女| 久久色一区| 东京热男人天堂| 99啪啪| 骚逼自拍99| 亚洲精品天堂久久A∨51成人漫| 快点操死我| 欧美狠狠狠| 五月婷色| 超碰九7| 天天影视综合网欧美精品| 国产丁香精品露脸视频| 国产精品老熟女一区二区| 熟人人妻少妇精品久久| 日本不卡三级网在线播放| 操东北女人| 亚洲无套久久嗯嗯| 精品人妻一区二区三区四区石在线| 99久在线精品99re8热| 蜜臀va69| 熟妇在线视频一区二区| 张柏芝国产一区在线观看| 东北女人被操| blacked精品一区国产| 97se亚洲| 99青青草国产视频| 亚洲性爱无码乱伦av| 九七人妻在线| 色五月婷婷色| 日本黄大片在线观看视频| 欧美97视频| 熟女网站最新| 在线看免费无码AV天堂的| 超碰九九| 久久久久久久国产| 中文字幕jul-617人妻熟女| 91bbb| 精品久久久不卡一区二区| 日韩欧美字幕亚洲一区二区| 在线洲亚线| 国产自产91区13区| 国产操偷| 欧洲性爱无码区| 日韩欧美水蜜桃人妻| 国产这里只有精品| 日韩一区二区精彩视频| 丝袜美腿操av| 九九热视频这里只有精品| 天天干干天天干干| 人人操人人色网| 操逼999| 人妻碰碰碰碰碰碰| 蜜乳av首页| 中文字幕国产在线天堂| 人妻人久久精品中文字幕| 啊啊啊好湿国产一二| 欧美日韩另类在线播放| 屁股久久久久久| 伊人精品国产| 啊好爽快点-国产一区二区三区撒尿在线-成人AV | 欧美激情精品| 中文字幕文字幕无码一区二区三区电影99| 欧美日日网| 婷婷影院入口| 乱伦一区二区三区‘| 精品999一区二区| 久久av色| 亚洲情色婷婷五月天| 伊人网综合在线视频| 另类图片天天影视| 久久久久96| 欧美一区二区在线资源| 95人妻爽爽人人做人人澡| 永久免费av无码网站国产app| 日本熟妇自慰性高潮一区二区三区| 综合激情97 | 大香蕉在线视频重口味毛片在线| 婷婷香蕉欧美在线一区二区三区| 韩国一级婬片A片AAAAA| 温婉少妇玩3p| 中文字幕免费看大片| 青青草一区二区高清无码视频| 久草资源在线视频官方总站日韩丝袜美腿| 欧美熟妇人体| 久偷拍| 色97| 爱欲AV| 伊人97色天使| 91扒丝袜综合在线| 亚洲色图 欧美热图 清纯唯美 另类自拍 | 亚洲男人天堂2019| 殴美在线AⅤ| 18禁网站在线播放| 干婷婷综合网| 91 手机在线播放 绯色| 国产天美欧美| 2020中文字幕| 精品国产一区二区久久| 色妺妺在线视频| 青青爽| 九九在线视频| 国产精品乱人伊人网| 中文字幕 码精品视频网站| 91小视频| www99热| 国产精品色| 无码免费一区二区三区啪啪| 一区二区三区精品黑丝白丝酒店对鸡 | 日产成人久久| 亚洲欧美综合图片| 国产激情在线| 国产精品久久久吖| 中文字幕AV乱伦| 久久久新亚洲AV| 亚洲国产丝袜熟女av| 亚洲高清视频在线免费观看| 无码外流操逼视频| 一级A啪啪啪啪| 狠狠五月天| 6080yy午夜理论三级一区二区三区无码| 国产11页| 91黑丝操| 亚州熟女乱伦| 亚洲乱码国产乱码精网站| 国语对白在线播放视频| 久久久草成人网站久久久草成人久久久草久久久| 无码人妻系列少妇| 日韩欧视频| 亚洲av成人精品一区| 91精品国产日韩欧美综合| 免费簧片在线观看| 五月开心网| 久久这里| 午夜性生活av免费在线看| 少妇丝袜在线观看AV| 色综合 加勒比| 国产熟女精品一区二区| 人人操人人插 - 百度 - 百度| 999热日韩精品| 日韩成年人性爱视频| 高清有码一区二区| 91粉芽高清在线一区二区| 欧美内射少妇| 精品久久久久久久| 日韩精品一区二区日韩| 91色女| 久久人妻少妇| 色哟哟综合| 日韩AV熟女乱伦| 中文字幕加勒比海高清无码免费视频| 人妻大香蕉| 人妻91少妇| 欧美一区二区三区另类精品| 五月天综合在线| 日本精品九九九| 欧美亚洲小说| 丁香六月婷婷综合| 99re黄| 伊人激情五月天一区二区| 五月天色图| 一个人在线看的黄色电影网站| 人妻 欧美亚洲| 少妇被c 黄 免费观看| 超碰九色| 大乔未久88一区| 精品国产三级av韩国在线| 精品久久久亚洲AV成人网站| 九九免费影片| 9999免费精彩视频| 中文字幕日韩情色| 隔壁邻居波多野结衣中文字幕| 女优视频第10页| 天天躁夜夜躁狠狠躁AV| 大香网站| 超碰这里有精品| 久久av一级av少妇av高潮| 91天天日| 秋霞一级A片黄色视频| 欧美天天插| 9久久精品| 综合色啪| 大奶的诱惑| 伊人色综合网电影| 日夜久久久九九九久| 久久久97| 亚洲宗合电影| 成人a级高清视频在线观看| 台湾佬激情综合| 日韩猛交| 色性荡荡荡荡视频| 综合伊人网12色| 97超碰美国| 国产无码精品久久久久久| 亚洲少妇喷视频看| 欧洲欧美视频一区二区| 偷拍在线观看视频| 国产成人bd在线观看| 偷拍片久久| 久久人人爽爽人人爽人人片αV| 97国产天堂岛| 久热婷婷| 超碰人人操97碰| 天天操人人操骚逼网站| 色婷婷电影网| 中文字幕第9页萱萱影音先锋| 97天天搞在线| 97任你吞精| 怡春院久久| 啊啊啊 在线观看| 国产精品盗摄 偷窥盗摄| 天天干天天中出av| 这里只有精品视频| 天天干天天操天天操夜夜操天天操| 熟女色图在线| 国产福利影视| 美女让帅哥通她小鸡鸡| 久久超碰久| 国产兽交视频在线播放| 五月天九九日国产精品一区二区三区| 另类天堂| 欧美人妻精品一区二区| 亚洲双插| 91路www| 大香蕉婷婷| 欧美亚洲国产91在线| 亚洲偷91色| 国产四虎在线| 九色婷婷| 99久久精品国产高潮| 欧美成人性活片| 色香在线| 97综合在线观看| 福利色色| 日韩无码精品综合久久| 天美传媒精品一区二区| 97国产天堂岛| 人妻日日夜夜精品| 亚洲色天堂日韩中| 日日日日做夜夜夜夜无码| 欧美亚洲特P| 超碰99热中文字幕| 超碰久久性爱| 日本狠狠干| 国产精品69人妻无码久久久| 亚洲一区二区在线观看91| 综合97久久| AND人妻系列| 婷婷五月天网| 操逼日韩无码 | 国产亚洲深夜激情| 综合亚洲网| 丰满熟女人妻一区二区三五十一路| 91狠狠综合久久久久久| 亚洲另类在线观看| 在线综合色| 欧美日韩亚洲一区二区在线观看| 丰满人妻一区二区三区四区| 成人网欧美风情| 久久久草成人网站久久久草成人久久久草久久久| 性爱免费视频成人| 最新亚洲人成网站在线影院| 成人精品无码| 加勒比伊人| 色淫网站优优视频| 偷拍精品一区二区三区| 日韩在线国产字幕| 精品一区二区三区免费古装毛片香港三级日本三级人妇 | 亚洲AV不卡在线观看| 在线 亚洲 网爆 自拍| 美女露胸露尿口| 亚洲精品视频在线播放| 97人人草| 欧美极品少妇交| 超碰日本97美女人妻人人玩人人爱 | 麻豆AV96熟妇人妻| 九九九九97| 爱爱久久| 欧美激情黑人| 国产久久久久久| 国产AV中文| 波多野结衣之双飞调教在线播放| 中文AV制服乱伦| 精品九九国产无码| 国产亚洲性生活视频播放| 免费看国产曰批40分钟怎么下载| 成全在线观看免费观看| 婷婷AV一区二区三区| 亚洲日韩国产欧美综合v| 大香蕉婷婷| 人人妻人人操人人乐| 男人把坤坤插入女人的下体| 亚洲色棕合| 精品对白久久不卡| 国产日逼视频| 69人妻精品一区二区绯色| 四虎永久在线精品免费网址| 黄网站黄视频网站进入口| 中文字幕诱惑制服人妻丝袜美丝袜美| 日韩传媒在线| 超碰欧美COM| 偷拍综合网| 免费av在线播放二区| 中国探花熟女| 国产人妻精品久久久一区二区三区 | 大香蕉懂9| 黄片免费日韩| 国产精品久久久久久照片| 色综合网1| 五月天激情四射| 欧美黑人与女人91~| 色香伊人| 欧美精品系列| 欧美偷拍区| 丁香六月激情| 情色五月天网| 久久岛国| 黄色一级视| 91麻豆天美国产欧美| 黄色十八禁网站| 亚洲狠| 人人操人人插人人摸人人干| 啪啪啪综合网| 熟妇高潮二区三区| 日韩精品在线放| 国产大学生高潮在线播放| 欧美综合站| 中文字幕视频免费| 超清中文乱码字幕| 人妻乱仑一区二区三区| 五月天丁香欧洲日韩| 国产少妇内射| 国产熟女完整版中字| 嗯嗯啊在线视频| 成人欧美日超碰| 97干97色| 性做久久久久久久| 亚洲日精品| 午夜120视频在线观看| 亚洲第一综合| 少妇久久久久久| 久久婷综合| 国产亚洲色婷婷99精品91| 蜜臀一区二区三区亚洲最新章节在线观看 - 高清蜜臀一区二区三区亚洲全集播放 | 色综合av男人天堂| 久久有码| 插入逼91| 校园春色综合| 东北毛片| 不卡在线一区,精品一区二区三区中| 国产精品午夜精品| 操逼视频亚洲| 97精品中文字幕| 久久久久久国产无码精品| 亚洲激情 欧美色图| 爱爱动态60秒| 久久婷婷色综合一区二区三区| 亚洲天天精品| 91香蕉视频在线观看免费| 超碰97最新人妻| 中文字幕日韩专区精品系列| 蜜桃久久久久久久| 国产精品一区二区手机看片| 亚洲图片欧美制度| 中文字幕一区二区日韩网| 欧美日韩淫加| 欧美日韩在线国产在线| 亚洲人久久久网| 亚洲成人久久一区二区| 久久九精品| 99re公开精品免费视频| 超碰日韩美妻| 丁香激情五月天| 久夜操| 91国产精品在线看| 亚洲Av噜噜一区二区三区妖精| 欧美性爱第一区| a片亚洲一本通视频| 3P乱轮视频| 曰本特级特黄特色黄色A级网站高清在线免费看 | 国产亚洲精品农村妇女| 亚洲天堂日本| 日本色婷婷| 久久久一区二区三区四区五区| 精品四五区| 成人小说视频在线精品欧美| 亚洲精品白丝| 啊啊啊好爽快点啊啊啊嗯嗯| 色哟哟AⅤ| 91N综合网在线| 又黑又大又粗| 777AV电影| 春色91| 日韩三级一区 | 情色五月天就去干| 国产 v乱码一区二| 亚洲欧美色图片| 亚洲免费精品一区| 日韩精品在线观看观看| 久久久久久久| 精品小视频在线| 久久草草欧美精品| 国产精品熟女九色九色蜜臀| 91国产伊人大香蕉| 久久黄黄| 99re公开精品免费视频| 97天天日| 91在线国产后入风骚翘臀美女素人| 日日狠狠久久偷偷色综合免费| 亚洲天堂中文字| 国语精品对白| 亚州色国| 中文字幕av久久爽Av| 精品一区二区在线针对华人免费观看这里只有精品免费观看 | 人人操人人摸人人骑| 人人操人人精品影片| 天天淫人人妻日日色| 最新三级网址| 99热| 中文三一区| 日本不卡码黄色| 99爱在线视频| 亚洲国产午夜真人一级片中文字幕精品黄网站 | 天天躁日日躁xxxxx| 综合 亚洲 欧美| 久久久久亚洲精品| 精品久久久久9999| 韩日精品四区| 午夜视频久久久久一区| 91视频在线观看18| 啊啊啊啊嗯嗯在线久久久| 操老熟女AV| 亚洲棕合电彰| 乱理日韩中文| 一区黄二区黄| 日韩pv中文| 激情五月综合网| 国产精品电影| 操美女高潮抽搐白浆| 国产精品亚洲天堂网址| 精品无吗m| 亚洲一区二区中文字幕| 97草草| ai欧美亚洲小说| 超碰在线974| 五月婷婷激情网| 国产精品视频精品一二| 手机在线人成免费视频| 亚洲成人久久一区二区| 久久精品国产亚洲5555| 偷拍 亚洲 欧美| 97伊人超碰| 舔人妻中文免费视频| k频道色撸撸| 欧美性爱网97| 色香综合天天影视综合 | 激情综合婷婷| 色人久久| 亚洲精品 大香蕉| 95人妻爽爽人人做人人澡| 丁香五月性爱| 成人熟女视频一区二区三区| 天天操女人| 热久久91婷婷| 亚洲三级网址久久最新| juliaann精品熟女一区| av大香蕉网站| 涩涩久久精品| 97中文字幕一区| 超碰在线一区| 欧洲亚洲国产综合在线| 高潮的A片激情扒开一区| 久久久久久日韩| av无码av无码专区| 人妻少妇久久久| 伊人网在线观看| 色哟哟av网址| 婷婷人妻激情| 涩综合导航| 中文字幕交换人妻| 小草三级久久观看| 欧美性爱一区二区三区四区 | 91白虎| 超碰91在线| 亚洲精品白浆高清久久久久久| 人人看人人摸人人色| 少妇 综合| 97 亚洲 日韩 欧美 在线| 97jingpin| 久久久久久久精| 国产区性爱在线视频秋霞豆| 青青草中文-久久青草精品一区二区三| 人妻在线臀日韩| 婷婷激情五月综合| 久久久久久99AV无码免费网站| 亚洲āv网址在线观看| 91精品伊人久久久大香线蕉91| 92福利社视频| 欧美色图成人网一区二区| 夜夜操夜夜高潮夜夜爽国产精品区| 校园春色五月天| 亚洲中文日韩欧美大香蕉视频| 99激情视频| 日韩电影天堂视频二区三区| 九九综合九九综合| 国产97视频免费观看| 免费9 1久久| 肥佬影院91| 免费的很黄很污的全部视频| 色综合加勒比四四季| 日韩中文9| 男女无套 免费网站| 国产精品大香蕉| 操逼999| 操婢日韩| 人妻一区久久二区三区色播| 久久久一区二区三区四区五区| 国产亚洲禁久一区二区| 日本A级视频| 久久精品一区二区一8| 国产 日韩 另类 视频一区爱| 美欧老女人97| 色欲天天综合久久久无码网中文| 欧美黄片视频在线观看免费| 亚洲性少妇| 99视频这有这里有精品| 美女人妻色网站| 9久久久久久| 久久久久国产一区二| 91日产欧美| 国产狂喷潮在线精品| 91原创在线观看| 日韩综合97p| 女同性恋久久| 懂色av中文字幕| 玖玖玖玖精品国产剧情| 好舒服视频| 国产捆绑一区| 射欧美综合| 伊人精品久久网站| 亚洲一二三| 精品成人无码| 性老妇一区二区三区| 八戒午夜福利理论片| 丝袜无码a片| 男女猛烈无遮掩视频免费软件| 亚洲中文人妻色| 成 人 A V免费视频在线观看| 国产青一二三| 国产精品不卡av免费在线观看| 物尤视频一区二区| 无码直播久久久| 日韩精品大香蕉伊人在线| 天天草AV| 中文字幕少妇色 | 久久免费少妇| 超碰 另类 欧美 | 国产av强奸美女| 亚洲精品不卡一二三区| 一个色导综合| 欧美色道啊| 精品性爱无码在线播放| 超碰在线一区| 91色黑人少妇| 精品丝袜无码一区二区三APP| 亚av顶级裸体一区二区三区四区五区| 家庭乱伦性爱av| 鸥美中出| 人妻9117c| **一级毛片国产| 91伊人| 成人在线视频一区| 97色在线| 欧美性爱日韩高清| 蜜臀av网址| 干B视频伊人网| 干日本人少妇午夜寂寞影院| 精品免费囯产一区二区三区| 久久国色天香香蕉| 久草国产在线视频| 久操免费在线| 欧美97视频| 床上啊啊啊一区二区三区| 9国产超碰| 伊人久久大香线蕉亚洲五月天,青草青草欧美日本一区二区,欧美日产欧美日产国产 | 91 丝袜在线| 亚洲欧美精品一区天堂久久 | 91AV入口| 色欲三区| 国产91精品福利在线| 成人aⅴ一区二区三区| 可以在线观看AV的网站| 欧美劲爆视频一区二区| 久久性爱免费送| 91久久久久久久久18| 五月天综合| 蜜臀久久99精品久久久久免费观| 五十路熟女工口| 综合视频91| 成人精品久久| 91人妻少妇| 无码丰满熟妇一区二区浪潮AV| 黑人狂躁日本妞一区二区三区| 国产精品一级毛片不卡视| 91婷婷| 91在线欧色| 天天内射| 有码专区最新中文字幕有码| 日本人妻伦在线中文字幕| ..日韩av毛片精品久久久| 日韩不卡毛片Av免费高清| 天天综合网一91网| 久久久性爱视频| 操一对老熟妇爽上天视频| 国产自制av蜜乳| 性久久| 五月天开心网| 欧亚久久偷拍视频| 欧美性夜| www.大香| 亚洲美乱| 午夜综合在线| 久久99九九九九6666免费观看软件| 久久狠狠色噜噜狠狠狠狠97| 美中日韩无码| 青娱乐 成人娱乐在线| 欧美青青视频| 舔足天天操天天射| 无码人妻精品一区二区中文| 人妻熟女一区在| 另类av综合久久| 久久久91| 2019精品国产无码成人| 久操热线| 欧美熟女妇同| 天天干18禁| 精品少妇999| 国产一级作爱毛片| 综合日韩激情另类图片| www亚洲欧美| 欧美视频一区二区在线| 天堂精品小草| 精品九九九九九九| 在线一道啪| 免费看污网站| 欧美亚洲首页| www.99在线| 东京热不卡视频| 欧美性爱第一页久久| 99热在线播放| 久久午夜鲁丝片| 午夜免费视频1000| 9.1小视频| 亚洲欧洲综合av在线| 天天射,天天操,天天爽-国内精品一区二区三区-成人AV | 嗯嗯啊啊日韩精品| 亚洲欧洲中文日韩女优乱码| 欧美激情五月天| 国产蜜臀在线| 亚洲一区二区三区不卡国产欧美| 精品人妻二区三区| 老熟女网站| 日韩无码嘿咻黑热久| 深爱伊人影院| 亚洲欧洲综合av在线| 日韩激情视频| 午夜啪| 九九九久千久久激情蜜桃在线看| 中韩中文字幕在线观看| 色色色99| 亚洲中文sv| 超碰91在线| 国产9熟妇视频网站| 91制服丝袜中文字幕| 国产少妇肉丝在线观看| 亚洲色图欧美色18直播在线| 欧美黄片欧美黄片xxx| 999综合色| 黄色电影观看久久9| 天天天天天天天天综合| 亚一综合久久久久久久久久| 99国产人成精品| 狠狠97| 亚洲不卡AV在线| 精品视频一二三中文| 顶级少妇BT天堂| 国内毛片欧美香蕉精品| 国产有码一区| 亚洲欧美一区二区网址| 日韩电影天堂视频一区二区| 在线免费观看日韩一区| 四虎在线免费视频| 免费毛片在线播放| 78超碰| 亚码激情| 日本女人久久久| 亚洲免费精品一区| 在线观看不卡一区二区三区| 日本999精品| 日韩国产成人自拍视频| 91中文字幕制服丝袜免费视频| 五月婷丁香| 五月丁香六月综合缴清无码| 久久人妻97久久久久久久| 国产乱伦性爱区| 另类成人首页一区| 国产高清成人mv在线观看| 嗯嗯嗯啊啊在线观看| 色播五月丁香| 人妻一区二区三区四区视频| 妇女视频网站| 在线日韩视频| 国产精品一区二区久久精品| 日本加勒比无码专区一二三| 五月天婷婷欧美三区| 乱伦一二三区| 久久久成人免费av电影| 国产 三级自拍| 97综合国产| 亚洲 欧美 综合 91| 日本99热| 精品中文字幕一区二区| 综合五月天| 欧美成人精品A片免费一区99| 丰满岳乱妇一区二区三区| 久久风骚城市| 97大色网| 中文字幕成人| 日本欧美一区二区三区免费| 麻豆精品.欧美精品.日韩精品.| 亚洲人91| 97精品一二区| 一级久久久久久久久久久| 久艹日日日| 精品久操| 乱欲性色| 久久天天躁日日躁狠狠躁| 欧美精品1区2区3区| 亚洲影院365| 亚春色色| 欧亚日韩综合精品国产| 旡码电影特区| 亚洲激情AV| 日本欧美中文字幕| 欧美日韩小说| 少妇第一页| 欧美日韩222| 国产无马av| 青青草丝袜在线视频| 丰满美女一级毛片在线播放| 亚洲情色视频| 欧美综合传媒| 91天射| 国产白领连续中出在线观看| 91狠狠色丁香婷婷综合久久精品| 青娱乐国产精品| 色香欲影| 久久啊啊| 亚洲资源吧| 土豪酒店各种姿势玩弄极品幼稚| 欧美熟妇乱码在线一区| 日本久久网| 色翁荡息又大又硬又粗又爽| 亚洲av噜噜噜噜噜噜| 亚洲女人91| 精品69网| 久草线上视频免费看| 大香蕉在线SuP| 激情图片伦理国产一区二区日韩| 91狠狠综合久久久久久| 5月婷婷6月六月丁香| 美女黄频a美女大全免费皮| 一本久道在线综合视频| 一级aaaaa欧美中文字幕录像片| 老熟妇91| 2017天天插| 中文字幕一区二区三区人妻不卡 | 国产91亚洲精品一区二区三区| 啊啊啊啊好爽好舒服一区二区易域| 九九热精品视频六| 亚洲天堂另类| 怡红院成人视频| 九九九国产精品| 日韩精品人妻中文字幕不卡乱码| 激情情色五月天| 久久久涩| 欧美亚洲系列| 亚洲综合另类| 国产精品九九九| 玖玖爱在线视频免费观看| 12一15性XXXX粉嫩国产| 极品欧美一区二区三区| 91精品久久久久五月天精品| 老熟妇一区二区三区…| 日人妻视频91| 激情综合网五月婷婷五月天| 欧美日韩中文亚洲v在线综合| 97久久超碰| 大香蕉宗合网在线| 狠狠图片青青草| 91 丝袜在线观看| 本道在线| 成人一二三区| 国产三级在线现体验区| 丝袜AV一区二区三区| 探花精品 一区二区| A级片日韩欧美国产欧美视频精选观看| 精品人妻中文字幕4399| 精品中文字幕一区二区l - 百度| 激情丁香五月婷婷| 丰满人妻一区二区三区免费,| 亭亭丁香激情| 欧美日韩理论一区| 欧美日韩97在线| www欧美91| 成人精品在线免费视频| 国产成人免费观看在线视频| 午夜男女爽爽爽在线视频| 人妻在线臀日韩| 9长久久精品| 天堂亚洲精品| 97爱爱| 亚洲色图欧美视频| 一区二区三区机械有限公司| 国产白嫩精品久久| 999熟女精品| 综合97| 国产极品美女高潮无套在线观看| 天美精品av| 欧中日成人免费影视| 久湿久久| 日韩av电影成人在线| 丝袜熟女一区二区三区| 亚洲最大91网| 国产一区二区久久| 美女裸体无遮挡永久免费观看网站| 午夜性生活av免费在线看| 殴美大黄片| 蜜臀av中字字幕网站| 91痴汉| 很很操在线| 丁香五月综合| 日日日色色色色色| 国产91福利小视频在线观看| 99人人干| 综合91网| 日韩成人无码| 亚洲日韩精品在线播放| 日韩噜噜69| 天天欲望网| 中文字幕中文字幕一区二区| 少妇与黑人高潮在线| 国产夫妻性生活视频| 欧美黄色手机在线观看| 亚洲色啪| 热热色国产一二区AV| 色在线综合| 国产久久久9999| 欧美亚洲韩国视频十五区| 亚洲三区视频| 国产蜜臀精品一区免费尤物| 国产精品播放| 五月激情天| 日韩久草| 太久视频| 青青草五月天| 国产精品一区二区密臀| 操逼啊啊啊91| 东北操逼| 亲子敌伦对白在线播放| 大香蕉啪啪啪| 亚洲色电影在线| 亚洲av淫乱| 99在线视频播放| 免费无码婬片AAAA片直播色戒| 亚洲色图激情小说| 人妻天堂三区| 久久98| 插入粉嫩少妇视频| 天天色黄色影院天天操| 中文字幕精品人妻丝袜| 资源新线在线天堂| 久久久久久中文字幕中文字幕最新| 日韩大香蕉AV影片| 99熟女| 久久久久久久9最新免费视频观看| 无码不卡八戒| 精品97久久综合| 国产高清视频无码在线| 欧美激情 日韩精品| 国产成人欧美精品在线| 欧美性猛交美女自慰91| 蜜臀99久久精品久久久懂爱| 综合欧美日韩在线观看| 久久久精品视频欧州站| 国产强上视频在线观看| 黄久在线| 欧美黑人精品一区二区| 玖日综合网| 亚洲欧洲综合av在线| 国产精品久久久久久夜夜夜| 青娱乐福利99| 日日夜夜国产综合| 中日韩欧美精品无码AⅤ一区二区| 经典丝袜一区| 日本一级一级一级一级| 综合色欧美| 亚洲日本韩国极品一区二区| a片 xxxx受爽视频| 97视频在线免费看| 欧美一区二区三区四区综合| 人妻插插人妻人| 黄片免费久久久久久久| 亚洲久草AV色图| 久久五月婷| 亚洲一区操| 嗯嗯嗯啊啊啊干死我吧| 伦理片秋霞免费影院| 激情小说亚洲| 国产高清不卡视频| 大香蕉免费3| 亚洲鸥美色图| 中文字幕第页| 中文字幕一区二区三区高清| 中文字幕色AV| 中文字幕91综合| 人人摸.人人色| 久草看看看| 亚洲国产欧美日韩精品一区二区三区,国产一区二区三区在线看片,欧美性猛交 XXX | 色y情视频免费看| 激情综合av| av凤凰久久久| 天天激情综合站| 国产熟女一区二区| 亚洲 图片 欧美 色图| 大香蕉视频一二三区| 久久久久极品| 亚洲熟妇自偷自拍另欧美| 丝袜亚洲综合| 久久婷婷欧美| 亚洲AV免费在线| 久久99干一本高清| 60秒试看最爽10分钟网站| 日韩AV一起草| 亚洲天天做日日做天天谢日日| 久久久男人的天堂| 尹人大香蕉视频在线| 插穴性爱视频在线观看| 国产suv一区二区三区6| 美欧老女人97| 花野真衣| 秋霞曰韩R级| 精品国产一区二区三区在线播出| 久久久青草青青国产亚洲免观精品高清完整版_97久久综合区小说区图片区,国精品 | 碰人碰碰人人开房人肉| www.狠狠干.coom | 天天操天天干美女网址导航| 中文字幕人妻色偷偷久久皮| 色色婷| 中文字幕奈奈美被公侵犯| 最新日本中文字幕| 久久精品无码熟妇一区二区三区视频导航 | www.色吧5.com| 熟女人妻一区二区三区| 在线观看A啊啊啊| 长长久久曰曰夜夜成人网| 日韩乱伦视频| 久久精品国产AV一区二区三区| 欧美一区二区| 蜜桃臀av一区二区| 日本大香蕉| 狠狠操一区二区| 国产激情在线观看| 午夜影美女日鸡鸡天天视频国产| 另类小说综合网| 欧美色图综合| 九九九九九九九九九九九蜜桃| 色大香蕉97N| 男人的天堂2018.| 国产天天骚| 91成人精品在线播放| 18禁免费视频| 一级黄色视频网| 国产欧美在线观看免费观看| 狠狠超| 欧美在线天堂| 97欧美日韩精品| 91欧美www| 天天在线91| 欧美国产操逼| 女上位精品在线| 91国产在线精品| 国产精品久久久久久夜夜夜夜| 超碰碰97| 欧美日韩淫加| 欧美操逼视频二区| 狠狠躁AV| 久久久久骚| 嗯~啊~快点 死我视频| 久久久久久久极品香蕉视频| 婷婷国产精品九区| 2019天天干天天操| 95精品在线| 狠狠色综合网| 五月丁香色综合| 天天爽夜夜操| 综合色久| 爆乳免费黄网站| 久操 高清| 亚洲欲色9532548967一区| 白丝1区2区3区| 91亚·色| 日欧美色| 日日噜噜夜夜久久亚洲一区二区| 和协无码影院| 亚州色图片在线色| 人妻激情视频| 超碰99re| 欧美激情综合网| 国产一区二区三区白丝| 中文精品一区二去| 亚洲激情在线一区二区| A级毛片在线看免费| 巨爆乳一区二区爆乳区| 精品国产久热在线观看| 婷婷色一区| 97一区二区蜜臀| 美女AV一区二区| 亚洲欧美综合图片| 熟妇色99| 精品毛片av一区二区| 大象AV在线| 嫩呦国产一区二区三区AV| 国产激情片在线观看| 91成人久久| 中文字幕人妻丝袜| 亚洲精品骚逼| 国产女主播视频在线观看| 另类天堂| 99久久精品国产高潮|