日韩av黄I国产麻豆传媒I国产91av视频在线观看I日韩一区二区三区在线看I美女国产在线I麻豆视频国产在线观看I成人黄色短片

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程语言 > C# >内容正文

C#

C# OPC UA 客户端开发

發布時間:2023/12/14 C# 41 豆豆
生活随笔 收集整理的這篇文章主要介紹了 C# OPC UA 客户端开发 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

OPC UA(OPC Unified Architecture)是為了在工業自動化等行業安全可靠地進行數據交換而制定的開放式國際標準規格。由OPC Foundation于2008年發布,之后制定了國際標準IEC62541.跨越設備的種類、操作系統(OS)、制造商的壁壘,可以安全地進行高可靠性的數據交換,作為標準通信協議得到了工業?4.0的推薦。https://opcfoundation.org/

OPC UA開發首先需要一個服務器端:這里使用KEPServer來模擬。首先下載并安裝KepServer,基本一路下一步。配置OPC UA:

在桌面右下角右鍵點擊“OPC UA配置”

選擇網卡和端口號,修改成自己想要的地址。

服務端測試:下載softing OPC Client 工具并安裝。如下圖所示連接KepServer?

?數據節點讀寫測試:

有了以上準備后,利用C# 開發自己的OPC UA helper:

我使用的VS2019,新建.net framework類庫項目:修改.net framework版本4.6.2以上,nuget 包管理器里搜索opc.ua.client.選擇opc 基金會的開發組件:如下圖所示:

新建類OPCUAClient.cs

using Opc.Ua; using Opc.Ua.Client; using System; using System.Collections.Generic; using System.Linq; using System.Threading.Tasks;namespace hg.opc.client {public class OPCUAClient{#region Private Fieldsprivate ApplicationConfiguration appConfig;private Session clientSession;private bool isConnected = false; //是否已經連接過private int reconnectPeriod = 10; // 重連狀態private SessionReconnectHandler sessionReconnectHandler;private EventHandler onConnectedEventHandler;private Dictionary<string, Subscription> subscriptionNodes=new Dictionary<string, Subscription>(); // 系統所有的節點信息#endregion Private Fields#region Public Memberspublic IUserIdentity UserIdentity { get; set; }= new UserIdentity(new AnonymousIdentityToken());public bool IsConnected { get => isConnected; private set => isConnected = value; }public Dictionary<string, Subscription> SubscriptionNodes { get => subscriptionNodes; set => subscriptionNodes = value; }public event EventHandler OnConnectedEvent{add { onConnectedEventHandler += value; }remove { onConnectedEventHandler -= value; }}#endregion#region 構造函數public OPCUAClient(){var certificateValidator = new CertificateValidator();certificateValidator.CertificateValidation += (sender, eventArgs) =>{if (ServiceResult.IsGood(eventArgs.Error))eventArgs.Accept = true;else if (eventArgs.Error.StatusCode.Code == StatusCodes.BadCertificateUntrusted)eventArgs.Accept = true;elsethrow new Exception(string.Format("證書驗證錯誤: {0}: {1}", eventArgs.Error.Code, eventArgs.Error.AdditionalInfo));};certificateValidator.Update(new SecurityConfiguration{AutoAcceptUntrustedCertificates = true,RejectSHA1SignedCertificates = false,MinimumCertificateKeySize = 1024,});var configuration = new ApplicationConfiguration{ApplicationName = "MyOpc_Client",ApplicationType = ApplicationType.Client,CertificateValidator = certificateValidator,ApplicationUri = string.Empty, ServerConfiguration = new ServerConfiguration{MaxSubscriptionCount = 100000,MaxMessageQueueSize = 100000,MaxNotificationQueueSize = 100000,MaxPublishRequestCount = 100000,},SecurityConfiguration = new SecurityConfiguration{AutoAcceptUntrustedCertificates = true,RejectSHA1SignedCertificates = false,MinimumCertificateKeySize = 1024,SuppressNonceValidationErrors = true,ApplicationCertificate = new CertificateIdentifier{StoreType = CertificateStoreType.X509Store,StorePath = "CurrentUser\\My",},TrustedIssuerCertificates = new CertificateTrustList{StoreType = CertificateStoreType.X509Store,StorePath = "CurrentUser\\Root",},TrustedPeerCertificates = new CertificateTrustList{StoreType = CertificateStoreType.X509Store,StorePath = "CurrentUser\\Root",}},TransportQuotas = new TransportQuotas{OperationTimeout = 6000000,MaxStringLength = int.MaxValue,MaxByteStringLength = int.MaxValue,MaxArrayLength = 65535,MaxMessageSize = 419430400,MaxBufferSize = 65535,ChannelLifetime = -1,SecurityTokenLifetime = -1},ClientConfiguration = new ClientConfiguration{DefaultSessionTimeout = -1,MinSubscriptionLifetime = -1,},DisableHiResClock = true};configuration.Validate(ApplicationType.Client);appConfig = configuration;}#endregion#region 連接public async Task ConnectServer(string serverUrl){Disconnect();var endpointDescription = CoreClientUtils.SelectEndpoint(serverUrl, false);var endpointConfiguration = EndpointConfiguration.Create(appConfig);var endpoint = new ConfiguredEndpoint(null, endpointDescription, endpointConfiguration);clientSession = await Task.Run(async ()=> {return await Session.Create(appConfig,endpoint,false,false,appConfig.ApplicationName,60000,UserIdentity,new string[] { });});clientSession.KeepAlive += Session_KeepAlive;IsConnected = true;onConnectedEventHandler?.Invoke(this, EventArgs.Empty);}private void Session_KeepAlive(Session session, KeepAliveEventArgs e){try{if (!object.ReferenceEquals(session, this.clientSession)){return;}if (ServiceResult.IsBad(e.Status)){if (reconnectPeriod <= 0){return;}if (sessionReconnectHandler == null){sessionReconnectHandler = new SessionReconnectHandler();sessionReconnectHandler.BeginReconnect(session, reconnectPeriod * 1000, Server_ReconnectComplete);}return;}}catch (Exception exception){throw exception;}}private void Server_ReconnectComplete(object sender, EventArgs e){try{if (!ReferenceEquals(sender, sessionReconnectHandler)){return;}clientSession = sessionReconnectHandler.Session;sessionReconnectHandler.Dispose();sessionReconnectHandler = null;}catch (Exception exception){throw exception;}}public void Disconnect(){if (sessionReconnectHandler != null){sessionReconnectHandler.Dispose();sessionReconnectHandler = null;}if (clientSession != null){clientSession.Close(10000);clientSession = null;}IsConnected = false;}#endregion#region 瀏覽節點public ReferenceDescriptionCollection BrowserNode2(NodeId nodeId){var browser = new Browser(clientSession);return browser.Browse(nodeId);}public ReferenceDescriptionCollection BrowserNode(NodeId nodeId){ var browseDescriptions = new BrowseDescriptionCollection();var browserDesc = new BrowseDescription();browserDesc.NodeId = nodeId;browserDesc.BrowseDirection = BrowseDirection.Forward;browserDesc.ReferenceTypeId = ReferenceTypeIds.Aggregates;browserDesc.IncludeSubtypes = true;browserDesc.NodeClassMask = (uint)(NodeClass.Object | NodeClass.Variable | NodeClass.Method | NodeClass.ReferenceType | NodeClass.ObjectType | NodeClass.View | NodeClass.VariableType | NodeClass.DataType);browserDesc.ResultMask = (uint)BrowseResultMask.All;var browseDesc2 = new BrowseDescription();browseDesc2.NodeId = nodeId;browseDesc2.BrowseDirection = BrowseDirection.Forward;browseDesc2.ReferenceTypeId = ReferenceTypeIds.Organizes;browseDesc2.IncludeSubtypes = true;browseDesc2.NodeClassMask = (uint)(NodeClass.Object | NodeClass.Variable | NodeClass.Method | NodeClass.View | NodeClass.ReferenceType | NodeClass.ObjectType | NodeClass.VariableType | NodeClass.DataType);browseDesc2.ResultMask = (uint)BrowseResultMask.All;browseDescriptions.Add(browserDesc);browseDescriptions.Add(browseDesc2);ReferenceDescriptionCollection references = GetReferenceDescriptionCollection(browseDescriptions);return references;}public ReferenceDescriptionCollection GetReferenceDescriptionCollection(BrowseDescriptionCollection browseDescriptions){try{var referenceDescriptions = new ReferenceDescriptionCollection();var unprocessedOperations = new BrowseDescriptionCollection();while (browseDescriptions.Count > 0){BrowseResultCollection results = null;DiagnosticInfoCollection diagnosticInfos = null;clientSession.Browse(null, null, 0, browseDescriptions,out results,out diagnosticInfos);ClientBase.ValidateResponse(results, browseDescriptions);ClientBase.ValidateDiagnosticInfos(diagnosticInfos, browseDescriptions);ByteStringCollection continuationPoints = new ByteStringCollection();for (int i = 0; i < browseDescriptions.Count; i++){if (StatusCode.IsBad(results[i].StatusCode)){if (results[i].StatusCode == StatusCodes.BadNoContinuationPoints){unprocessedOperations.Add(browseDescriptions[i]);}continue;}// check if all references have been fetched.if (results[i].References.Count == 0){continue;}referenceDescriptions.AddRange(results[i].References);if (results[i].ContinuationPoint != null){continuationPoints.Add(results[i].ContinuationPoint);}}ByteStringCollection revisedContiuationPoints = new ByteStringCollection();while (continuationPoints.Count > 0){// continue browse operation.clientSession.BrowseNext(null,true,continuationPoints,out results,out diagnosticInfos);ClientBase.ValidateResponse(results, continuationPoints);ClientBase.ValidateDiagnosticInfos(diagnosticInfos, continuationPoints);for (int j = 0; j < continuationPoints.Count; j++){if (StatusCode.IsBad(results[j].StatusCode)){continue;}if (results[j].References.Count == 0){continue;}referenceDescriptions.AddRange(results[j].References);if (results[j].ContinuationPoint != null){revisedContiuationPoints.Add(results[j].ContinuationPoint);}}revisedContiuationPoints = continuationPoints;}browseDescriptions = unprocessedOperations;}return referenceDescriptions;}catch (Exception exception){return null;}}#endregion#region Node Write/Read Support/// <summary>/// Read a value node from server/// </summary>/// <param name="nodeId">node id</param>/// <returns>DataValue</returns>public DataValue ReadNode(NodeId nodeId){ReadValueIdCollection nodesToRead = new ReadValueIdCollection{new ReadValueId( ){NodeId = nodeId,AttributeId = Attributes.Value}};// read the current valueclientSession.Read(null,0,TimestampsToReturn.Neither,nodesToRead,out DataValueCollection results,out DiagnosticInfoCollection diagnosticInfos);ClientBase.ValidateResponse(results, nodesToRead);ClientBase.ValidateDiagnosticInfos(diagnosticInfos, nodesToRead);return results[0];}/// <summary>/// 是否可讀寫節點/// </summary>/// <param name="nodeId"></param>/// <returns></returns>public bool IsWriteableNode(NodeId nodeId){ReadValueIdCollection nodesToRead = new ReadValueIdCollection{new ReadValueId( ){NodeId = nodeId,AttributeId = Attributes.AccessLevel}};// read the current valueclientSession.Read(null,0,TimestampsToReturn.Neither,nodesToRead,out DataValueCollection results,out DiagnosticInfoCollection diagnosticInfos);ClientBase.ValidateResponse(results, nodesToRead);ClientBase.ValidateDiagnosticInfos(diagnosticInfos, nodesToRead);DataValue value= results[0];if (value.WrappedValue == Variant.Null){return true;}return !((byte)value.WrappedValue.Value == 1);}/// <summary>/// Read a value node from server/// </summary>/// <typeparam name="T">type of value</typeparam>/// <param name="tag">node id</param>/// <returns>實際值</returns>public T ReadNode<T>(string tag){DataValue dataValue = ReadNode(new NodeId(tag));return (T)dataValue.Value;}/// <summary>/// Read a tag asynchronously/// </summary>/// <typeparam name="T">The type of tag to read</typeparam>/// <param name="tag">tag值</param>/// <returns>The value retrieved from the OPC</returns>public Task<T> ReadNodeAsync<T>(string tag){ReadValueIdCollection nodesToRead = new ReadValueIdCollection{new ReadValueId(){NodeId = new NodeId(tag),AttributeId = Attributes.Value}};// Wrap the ReadAsync logic in a TaskCompletionSource, so we can use C# async/await syntax to call it:var taskCompletionSource = new TaskCompletionSource<T>();clientSession.BeginRead(requestHeader: null,maxAge: 0,timestampsToReturn: TimestampsToReturn.Neither,nodesToRead: nodesToRead,callback: ar =>{DataValueCollection results;DiagnosticInfoCollection diag;var response = clientSession.EndRead(result: ar,results: out results,diagnosticInfos: out diag);try{if (!StatusCode.IsGood(response.ServiceResult))throw new Exception(string.Format("Invalid response from the server. (Response Status: {0})", response.ServiceResult));if (!StatusCode.IsGood(results[0].StatusCode))throw new Exception(string.Format("Invalid response from the server. (Response Status: {0})", results[0].StatusCode));var val = results[0];taskCompletionSource.TrySetResult((T)val.Value);}catch (Exception ex){taskCompletionSource.TrySetException(ex);}},asyncState: null);return taskCompletionSource.Task;}/// <summary>/// read several value nodes from server/// </summary>/// <param name="nodeIds">all NodeIds</param>/// <returns>all values</returns>public List<DataValue> ReadNodes(NodeId[] nodeIds){ReadValueIdCollection nodesToRead = new ReadValueIdCollection();for (int i = 0; i < nodeIds.Length; i++){nodesToRead.Add(new ReadValueId(){NodeId = nodeIds[i],AttributeId = Attributes.Value});}// 讀取當前的值clientSession.Read(null,0,TimestampsToReturn.Neither,nodesToRead,out DataValueCollection results,out DiagnosticInfoCollection diagnosticInfos);ClientBase.ValidateResponse(results, nodesToRead);ClientBase.ValidateDiagnosticInfos(diagnosticInfos, nodesToRead);return results.ToList();}/// <summary>/// read several value nodes from server/// </summary>/// <param name="nodeIds">all NodeIds</param>/// <returns>all values</returns>public Task<List<DataValue>> ReadNodesAsync(NodeId[] nodeIds){ReadValueIdCollection nodesToRead = new ReadValueIdCollection();for (int i = 0; i < nodeIds.Length; i++){nodesToRead.Add(new ReadValueId(){NodeId = nodeIds[i],AttributeId = Attributes.Value});}var taskCompletionSource = new TaskCompletionSource<List<DataValue>>();// 讀取當前的值clientSession.BeginRead(null,0,TimestampsToReturn.Neither,nodesToRead,callback: ar =>{DataValueCollection results;DiagnosticInfoCollection diag;var response = clientSession.EndRead(result: ar,results: out results,diagnosticInfos: out diag);try{CheckReturnValue(response.ServiceResult);taskCompletionSource.TrySetResult(results.ToList());}catch (Exception ex){taskCompletionSource.TrySetException(ex);}},asyncState: null);return taskCompletionSource.Task;}/// <summary>/// read several value nodes from server/// </summary>/// <param name="tags">所以的節點數組信息</param>/// <returns>all values</returns>public List<T> ReadNodes<T>(string[] tags){List<T> result = new List<T>();ReadValueIdCollection nodesToRead = new ReadValueIdCollection();for (int i = 0; i < tags.Length; i++){nodesToRead.Add(new ReadValueId(){NodeId = new NodeId(tags[i]),AttributeId = Attributes.Value});}// 讀取當前的值clientSession.Read(null,0,TimestampsToReturn.Neither,nodesToRead,out DataValueCollection results,out DiagnosticInfoCollection diagnosticInfos);ClientBase.ValidateResponse(results, nodesToRead);ClientBase.ValidateDiagnosticInfos(diagnosticInfos, nodesToRead);foreach (var item in results){result.Add((T)item.Value);}return result;}/// <summary>/// read several value nodes from server/// </summary>/// <param name="tags">all NodeIds</param>/// <returns>all values</returns>public Task<List<T>> ReadNodesAsync<T>(string[] tags){ReadValueIdCollection nodesToRead = new ReadValueIdCollection();for (int i = 0; i < tags.Length; i++){nodesToRead.Add(new ReadValueId(){NodeId = new NodeId(tags[i]),AttributeId = Attributes.Value});}var taskCompletionSource = new TaskCompletionSource<List<T>>();// 讀取當前的值clientSession.BeginRead(null,0,TimestampsToReturn.Neither,nodesToRead,callback: ar =>{DataValueCollection results;DiagnosticInfoCollection diag;var response = clientSession.EndRead(result: ar,results: out results,diagnosticInfos: out diag);try{CheckReturnValue(response.ServiceResult);List<T> result = new List<T>();foreach (var item in results){result.Add((T)item.Value);}taskCompletionSource.TrySetResult(result);}catch (Exception ex){taskCompletionSource.TrySetException(ex);}},asyncState: null);return taskCompletionSource.Task;}/// <summary>/// 0:NodeClass 1:Value 2:AccessLevel 3:DisplayName 4:Description/// </summary>/// <param name="nodeIds"></param>/// <returns></returns>public DataValue[] ReadNodeAttributes(List<NodeId> nodeIds){ReadValueIdCollection nodesToRead = new ReadValueIdCollection();foreach (var nodeId in nodeIds){NodeId sourceId = nodeId;nodesToRead.Add(new ReadValueId(){NodeId = sourceId,AttributeId = Attributes.NodeClass});nodesToRead.Add(new ReadValueId(){NodeId = sourceId,AttributeId = Attributes.Value});nodesToRead.Add(new ReadValueId(){NodeId = sourceId,AttributeId = Attributes.AccessLevel});nodesToRead.Add(new ReadValueId(){NodeId = sourceId,AttributeId = Attributes.DisplayName});nodesToRead.Add(new ReadValueId(){NodeId = sourceId,AttributeId = Attributes.Description});}// read all values.clientSession.Read(null,0,TimestampsToReturn.Neither,nodesToRead,out DataValueCollection results,out DiagnosticInfoCollection diagnosticInfos);ClientBase.ValidateResponse(results, nodesToRead);ClientBase.ValidateDiagnosticInfos(diagnosticInfos, nodesToRead);return results.ToArray();}/// <summary>/// write a note to server(you should use try catch)/// </summary>/// <typeparam name="T">The type of tag to write on</typeparam>/// <param name="tag">節點名稱</param>/// <param name="value">值</param>/// <returns>if success True,otherwise False</returns>public bool WriteNode<T>(string tag, T value){WriteValue valueToWrite = new WriteValue(){NodeId = new NodeId(tag),AttributeId = Attributes.Value};valueToWrite.Value.Value = value;valueToWrite.Value.StatusCode = StatusCodes.Good;valueToWrite.Value.ServerTimestamp = DateTime.MinValue;valueToWrite.Value.SourceTimestamp = DateTime.MinValue;WriteValueCollection valuesToWrite = new WriteValueCollection{valueToWrite};// 寫入當前的值clientSession.Write(null,valuesToWrite,out StatusCodeCollection results,out DiagnosticInfoCollection diagnosticInfos);ClientBase.ValidateResponse(results, valuesToWrite);ClientBase.ValidateDiagnosticInfos(diagnosticInfos, valuesToWrite);if (StatusCode.IsBad(results[0])){throw new ServiceResultException(results[0]);}return !StatusCode.IsBad(results[0]);}/// <summary>/// Write a value on the specified opc tag asynchronously/// </summary>/// <typeparam name="T">The type of tag to write on</typeparam>/// <param name="tag">The fully-qualified identifier of the tag. You can specify a subfolder by using a comma delimited name. E.g: the tag `foo.bar` writes on the tag `bar` on the folder `foo`</param>/// <param name="value">The value for the item to write</param>public Task<bool> WriteNodeAsync<T>(string tag, T value){WriteValue valueToWrite = new WriteValue(){NodeId = new NodeId(tag),AttributeId = Attributes.Value,};valueToWrite.Value.Value = value;valueToWrite.Value.StatusCode = StatusCodes.Good;valueToWrite.Value.ServerTimestamp = DateTime.MinValue;valueToWrite.Value.SourceTimestamp = DateTime.MinValue;WriteValueCollection valuesToWrite = new WriteValueCollection{valueToWrite};// Wrap the WriteAsync logic in a TaskCompletionSource, so we can use C# async/await syntax to call it:var taskCompletionSource = new TaskCompletionSource<bool>();clientSession.BeginWrite(requestHeader: null,nodesToWrite: valuesToWrite,callback: ar =>{var response = clientSession.EndWrite(result: ar,results: out StatusCodeCollection results,diagnosticInfos: out DiagnosticInfoCollection diag);try{ClientBase.ValidateResponse(results, valuesToWrite);ClientBase.ValidateDiagnosticInfos(diag, valuesToWrite);taskCompletionSource.SetResult(StatusCode.IsGood(results[0]));}catch (Exception ex){taskCompletionSource.TrySetException(ex);}},asyncState: null);return taskCompletionSource.Task;}/// <summary>/// 所有的節點都寫入成功,返回<c>True</c>,否則返回<c>False</c>/// </summary>/// <param name="tags">節點名稱數組</param>/// <param name="values">節點的值數據</param>/// <returns>所有的是否都寫入成功</returns>public bool WriteNodes(string[] tags, object[] values){WriteValueCollection valuesToWrite = new WriteValueCollection();for (int i = 0; i < tags.Length; i++){if (i < values.Length){WriteValue valueToWrite = new WriteValue(){NodeId = new NodeId(tags[i]),AttributeId = Attributes.Value};valueToWrite.Value.Value = values[i];valueToWrite.Value.StatusCode = StatusCodes.Good;valueToWrite.Value.ServerTimestamp = DateTime.MinValue;valueToWrite.Value.SourceTimestamp = DateTime.MinValue;valuesToWrite.Add(valueToWrite);}}// 寫入當前的值clientSession.Write(null,valuesToWrite,out StatusCodeCollection results,out DiagnosticInfoCollection diagnosticInfos);ClientBase.ValidateResponse(results, valuesToWrite);ClientBase.ValidateDiagnosticInfos(diagnosticInfos, valuesToWrite);bool result = true;foreach (var r in results){if (StatusCode.IsBad(r)){result = false;break;}}return result;}private void CheckReturnValue(StatusCode status){if (!StatusCode.IsGood(status))throw new Exception(string.Format("Invalid response from the server. (Response Status: {0})", status));}#endregion Node Write/Read Support#region 訂閱/// <summary>/// 新增一批訂閱,需要指定訂閱的關鍵字,訂閱的tag名數組,以及回調方法/// </summary>/// <param name="key">關鍵字</param>/// <param name="tags">節點名稱數組</param>/// <param name="callback">回調方法</param>public void AddSubscription(string key, string[] tags, Action<string, MonitoredItem, MonitoredItemNotificationEventArgs> callback){Subscription m_subscription = new Subscription(clientSession.DefaultSubscription);m_subscription.PublishingEnabled = true;m_subscription.PublishingInterval = 0;m_subscription.KeepAliveCount = uint.MaxValue;m_subscription.LifetimeCount = uint.MaxValue;m_subscription.MaxNotificationsPerPublish = uint.MaxValue;m_subscription.Priority = 100;m_subscription.DisplayName = key;for (int i = 0; i < tags.Length; i++){var item = new MonitoredItem{StartNodeId = new NodeId(tags[i]),AttributeId = Attributes.Value,DisplayName = tags[i],SamplingInterval = 100,};item.Notification += (MonitoredItem monitoredItem, MonitoredItemNotificationEventArgs args) =>{callback?.Invoke(key, monitoredItem, args);};m_subscription.AddItem(item);}clientSession.AddSubscription(m_subscription);m_subscription.Create();lock (SubscriptionNodes){if (SubscriptionNodes.ContainsKey(key)){// removeSubscriptionNodes[key].Delete(true);clientSession.RemoveSubscription(SubscriptionNodes[key]);SubscriptionNodes[key].Dispose();SubscriptionNodes[key] = m_subscription;}else{SubscriptionNodes.Add(key, m_subscription);}}}/// <summary>/// 新增訂閱,需要指定訂閱的關鍵字,訂閱的tag名數組,以及回調方法/// </summary>/// <param name="key">關鍵字</param>/// <param name="tags">節點名稱數組</param>/// <param name="callback">回調方法</param>public void AddSubscription(string key, string tag, Action<string, MonitoredItem, MonitoredItemNotificationEventArgs> callback){AddSubscription(key, new string[] { tag }, callback);}/// <summary>/// 移除訂閱消息,如果該訂閱消息是批量的,也直接移除/// </summary>/// <param name="key">訂閱關鍵值</param>public void RemoveSubscription(string key){lock (SubscriptionNodes){if (SubscriptionNodes.ContainsKey(key)){// removeSubscriptionNodes[key].Delete(true);clientSession.RemoveSubscription(SubscriptionNodes[key]);SubscriptionNodes[key].Dispose();SubscriptionNodes.Remove(key);}}}/// <summary>/// 移除所有的訂閱消息/// </summary>public void RemoveAllSubscription(){lock (SubscriptionNodes){foreach (var item in SubscriptionNodes){item.Value.Delete(true);clientSession.RemoveSubscription(item.Value);item.Value.Dispose();}SubscriptionNodes.Clear();}}#endregion} }

?利用上面的OPCUAClient開發的winform程序:

?源碼下載:https://download.csdn.net/download/elie_yang/20814696

總結

以上是生活随笔為你收集整理的C# OPC UA 客户端开发的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。

深夜免费小视频 | 最近在线中文字幕 | 久久99精品久久久久久清纯直播 | 国产欧美在线一区二区三区 | 国产啊v在线| 四虎伊人 | 国产不卡免费av | 97综合在线| 色婷婷狠狠18 | 色网站国产精品 | 久久国产精品久久国产精品 | 免费人成在线观看网站 | 一区二区视| 欧美国产日韩一区二区三区 | 91亚洲在线 | 天天插日日操 | 久久久wwww| 91成人网在线观看 | 日韩电影一区二区在线 | www天天干| 六月丁香婷婷在线 | 成人免费看黄 | 美国三级黄色大片 | 久久久精品国产免费观看同学 | 国产不卡av在线 | 夜夜躁日日躁狠狠久久av | 国产一区二区在线观看视频 | 国产第一二区 | 国产精品理论在线观看 | 亚洲乱码精品 | 人操人 | 国产精品久久久久久久久久久久午 | 国产91勾搭技师精品 | 五月婷婷六月丁香在线观看 | av网站免费在线 | 另类五月激情 | 日韩 在线观看 | 中文字幕色网站 | 精品一区二区视频 | 婷婷激情综合 | 日韩久久久久久久久 | 碰超在线 | 日韩午夜网站 | 中文在线资源 | 国产在线一线 | 8x成人在线 | 国产精品久久久久久久久免费看 | 玖玖视频网 | 狠狠色丁婷婷日日 | 国产午夜麻豆影院在线观看 | 国产一区视频免费在线观看 | 伊人网综合在线观看 | 97人人模人人爽人人少妇 | 日本性视频 | 日日草天天干 | 亚洲婷久久 | 国产精品一区二区av | 国产一区视频导航 | 一级淫片在线观看 | 亚洲一区二区黄色 | 婷婷激情综合五月天 | 日本在线视频网址 | 久久久影院一区二区三区 | 狠狠的干 | 日韩免费在线观看视频 | 色欲综合视频天天天 | 免费特级黄毛片 | 国产伦理久久精品久久久久_ | 99久久一区 | 欧美男男tv网站 | 国产精品爽爽爽 | 成人av电影网址 | 又黄又爽又湿又无遮挡的在线视频 | 久久躁日日躁aaaaxxxx | 成人性生交大片免费看中文网站 | 国产福利91精品一区二区三区 | 亚洲国产精品电影在线观看 | 日韩精品无码一区二区三区 | 偷拍精偷拍精品欧洲亚洲网站 | 国产又黄又爽又猛视频日本 | 伊人精品在线 | 亚洲欧美日韩精品久久奇米一区 | 激情久久久久久久久久久久久久久久 | 国产专区在线视频 | 国产精品美女免费 | 永久免费精品视频网站 | 亚洲精品久久久久久中文传媒 | 国产精品美女久久久久久免费 | 亚洲精欧美一区二区精品 | 中文字幕91在线 | 日韩电影中文字幕在线 | 亚洲美女免费精品视频在线观看 | 国产在线精品观看 | 久久视频在线观看免费 | 综合色站导航 | 久久色中文字幕 | 成年人电影免费看 | 欧美日比视频 | 久久天堂网站 | 国产999 | 国产精品久久久久久久久久不蜜月 | 国产不卡在线视频 | 国产精品久久久久久久久毛片 | 婷婷爱五月天 | 日韩av不卡在线 | 天天操天天射天天爽 | 97人人添人澡人人爽超碰动图 | 99re8这里有精品热视频免费 | 69视频永久免费观看 | 国产乱老熟视频网88av | 又黄又爽又色无遮挡免费 | 97精品久久人人爽人人爽 | 国产资源精品 | 97伊人网| 成人小视频在线播放 | 91成人精品一区在线播放69 | 六月丁香婷婷在线 | 亚洲视频一区二区三区在线观看 | 91欧美精品 | av中文在线播放 | 激情综合五月天 | 久久精品精品电影网 | 91人人揉日日捏人人看 | 2021国产在线视频 | 黄av免费在线观看 | 国产高清免费观看 | 免费a v视频 | 久久久99久久 | 国产专区精品 | av片中文 | 98超碰在线观看 | 精品国产乱码久久久久久久 | 综合久久久久久久 | 黄色aaaaa| 亚洲国产成人精品电影在线观看 | 狂野欧美激情性xxxx欧美 | 国产三级午夜理伦三级 | 在线观看黄网站 | 97人人模人人爽人人少妇 | 久草综合视频 | 天天综合网久久 | 国产男女无遮挡猛进猛出在线观看 | 亚洲精品视频在线免费播放 | 国产人在线成免费视频 | 欧美精品在线一区二区 | 国产精品久久久久久久久毛片 | 婷婷精品国产欧美精品亚洲人人爽 | 精品一区二区亚洲 | 天天亚洲综合 | 免费看的黄网站软件 | 中文字幕视频一区 | 欧美日韩一级视频 | 欧美三级在线播放 | 99视频在线免费观看 | 欧美日韩高清国产 | 亚洲国产精品人久久电影 | 色综合久久88色综合天天 | www.精选视频.com | 一级a性色生活片久久毛片波多野 | 日韩精品一区在线播放 | 亚洲视频网站在线观看 | 夜夜天天干 | 中日韩欧美精彩视频 | 最新三级在线 | 日本在线精品视频 | 视频一区在线免费观看 | 9在线观看免费高清完整版 玖玖爱免费视频 | 日韩视频一区二区在线 | 久草精品视频 | 成人a免费看 | 久草在线免费新视频 | 六月婷婷网 | 在线免费黄| 中文字幕在线视频一区 | 五月婷香蕉久色在线看 | 人人草在线视频 | 丁香在线观看完整电影视频 | 青青五月天 | 美州a亚洲一视本频v色道 | 奇米影视8888在线观看大全免费 | 久久精品一二三区白丝高潮 | 99免费看片| www四虎影院| 中文字幕在线成人 | 久久久免费毛片 | 精品久久毛片 | 久久久久久亚洲精品 | 美女又爽又黄 | 国产欧美精品一区二区三区四区 | 国产精品久久久久久久久久久久 | 91麻豆国产福利在线观看 | 激情婷婷色 | 中文字幕一区二区三 | 久久精品爱爱视频 | 三级av在线免费观看 | 午夜久久久久 | 欧美久久久久久久久久 | 欧美黑人xxxx猛性大交 | 99久久er热在这里只有精品15 | 国内精品久久久久影院男同志 | 天天操操 | 91视视频在线直接观看在线看网页在线看 | 播五月婷婷| 免费视频久久久久 | 97天天综合网| 日韩欧美视频免费看 | 成人一级片免费看 | 国产一区二区在线免费播放 | 一区二区三区久久精品 | 在线观看黄色 | 日韩免费观看av | 欧美性久久久久久 | 免费亚洲视频在线观看 | 国产高清在线不卡 | 久久亚洲综合色 | 久久久久久久久久亚洲精品 | 国产成人免费在线 | www.久久色 | 视频在线在亚洲 | 国产色久 | 免费亚洲精品视频 | 欧美日韩电影在线播放 | 亚洲精品乱码久久久久久久久久 | 国产网站在线免费观看 | 91麻豆精品国产91久久久无限制版 | 欧美日韩高清不卡 | 日韩欧美不卡 | 丝袜美女视频网站 | www.777奇米| 亚洲精品视频中文字幕 | 国产爽妇网 | 激情欧美丁香 | 欧美精品免费一区二区 | 18+视频网站链接 | 成片人卡1卡2卡3手机免费看 | av3级在线| 91色吧| 久久男人影院 | 国产精品久久久久久久午夜片 | 91久久国产露脸精品国产闺蜜 | 91av视频导航 | 亚洲精品一区二区在线观看 | 国产视频 亚洲视频 | 欧美午夜性 | 亚州天堂 | 超碰97中文 | 天天爽人人爽夜夜爽 | 久久不卡免费视频 | 国产精品2区 | 久久99国产精品自在自在app | 在线黄色毛片 | 一区二区视频播放 | 天天色棕合合合合合合 | 久久人人艹 | 精品综合久久 | 成人在线观看av | 日韩网页 | 久久tv| 中文字幕一区二区三区乱码在线 | av先锋中文字幕 | 波多野结衣在线观看一区 | 色a在线观看 | 久久久精品国产一区二区电影四季 | 99色婷婷| 97电影手机| 丁香国产视频 | 香蕉一区 | av在线免费观看不卡 | 国产精品一区二区 91 | 久久一区二区三区日韩 | 久久伊99综合婷婷久久伊 | 国产日本在线播放 | www黄| 欧美一区二区三区在线 | a√天堂资源| 在线观看国产一区 | 又爽又黄又无遮挡网站动态图 | 国产精品12 | 中文av在线免费观看 | 亚洲在线黄色 | 一区二区三区日韩在线 | 久久69av| 亚洲国产片 | 欧美日本日韩aⅴ在线视频 插插插色综合 | 日韩在线观看电影 | 久久久精品网站 | 国产玖玖精品视频 | 夜夜躁日日躁 | 欧美一区二区在线 | 日日干干| 人人艹视频 | 成年人电影免费看 | 免费av网站在线看 | 天天插综合| 777xxx欧美| 九九综合九九 | 精品免费视频. | 欧美激精品 | 91亚洲精品在线观看 | 国产精品日韩久久久久 | 国产午夜精品av一区二区 | 成人宗合网| 91麻豆高清视频 | 91精品国产一区二区在线观看 | 国产在线播放一区二区 | 日日干影院 | 国产在线美女 | 久久久久久毛片精品免费不卡 | 麻豆一区在线观看 | 超碰在线人人艹 | 碰超在线| 91资源在线 | a黄色片在线观看 | 成人一区电影 | 手机在线看永久av片免费 | 亚洲激情影院 | 天天操天天添 | 色综合国产 | 中文字幕成人在线 | 国产区精品视频 | 成人在线超碰 | 精品亚洲视频在线 | 天天操天天操天天操天天操天天操 | 超碰九九 | 国产精品久久久久久久久久久杏吧 | 91精品久久久久久久99蜜桃 | 国产日韩欧美在线一区 | 玖玖在线观看视频 | 久久久免费高清视频 | 亚洲精品色婷婷 | 在线导航av| 欧美在线观看视频免费 | 久久国产精品久久精品国产演员表 | 免费十分钟 | 最近最新中文字幕 | 久草资源在线 | 色综合天天综合 | 色婷婷狠狠五月综合天色拍 | 久久久久亚洲天堂 | 亚洲91网站 | 免费在线观看黄网站 | 日本精品午夜 | 99色网站 | 日韩av一卡二卡三卡 | 欧美与欧洲交xxxx免费观看 | 亚洲一区精品人人爽人人躁 | 成人超碰在线 | 四虎在线免费视频 | 91高清视频| 三级av网站| 天天摸天天干天天操天天射 | 久久久久国产精品免费 | 国产日韩一区在线 | 久久久久久片 | 依人成人综合网 | 成人在线电影观看 | 99精品久久精品一区二区 | 日韩高清一| 欧美一级片在线播放 | 国模精品一区二区三区 | 久久久久久99精品 | 国产精品久久久777 成人手机在线视频 | 黄色www在线观看 | 91精品婷婷国产综合久久蝌蚪 | 国产麻豆视频在线观看 | 成人av直播 | 九九热在线观看视频 | 日韩色一区二区三区 | 天天操狠狠操网站 | 久久免费精品国产 | 精品国产乱码久久 | 蜜桃视频在线视频 | 国产视频资源在线观看 | 久久久久在线 | 98福利在线| 久久这里只有精品9 | 日韩精品免费在线观看视频 | 在线 视频 一区二区 | 中文字幕在线观看一区 | 久久精品日产第一区二区三区乱码 | 最近2019好看的中文字幕免费 | 亚洲国产成人久久综合 | av资源在线观看 | 中文字幕精品一区二区三区电影 | 国产精品久久久久久影院 | 国产亚洲精品免费 | av免费在线网站 | 六月丁香激情综合色啪小说 | 国产九九热视频 | 国产一二三四在线观看视频 | 国产成人l区| 久草在线视频免赞 | 一区二区三区在线观看免费视频 | 91女神的呻吟细腰翘臀美女 | 久久久久久久久久久久99 | 97超碰在线视 | 成年人免费在线 | 国产精品一区免费观看 | 日日夜夜精品网站 | 亚洲精品乱码久久久久久久久久 | 91视频麻豆| 国产伦精品一区二区三区四区视频 | 午夜精品视频免费在线观看 | 在线免费观看国产 | 9797在线看片亚洲精品 | 69精品人人人人 | 免费成人黄色 | 亚洲国产精品第一区二区 | 欧美老女人xx | 成人午夜免费福利 | 国产亚洲精品成人av久久影院 | 国产精品免费视频久久久 | 在线观看中文字幕dvd播放 | 精品在线观看一区二区三区 | 久草在线高清视频 | 国产福利资源 | 精品一区二区精品 | 国产精品一区二区三区在线看 | www.精选视频.com | 99精品在线免费视频 | 久久久免费av | 亚洲黄色免费 | 国产精品成人在线 | www.伊人网 | 麻豆久久 | 久久久高清视频 | 美女福利视频在线 | 日本69hd| 婷婷在线视频观看 | 天天射天天色天天干 | 天天射天天爱天天干 | 国产一卡久久电影永久 | 天天射天天舔天天干 | 欧美最爽乱淫视频播放 | 欧美国产91 | 香蕉视频91 | 99操视频| 久久成人在线 | 91在线porny国产在线看 | 精品中文字幕视频 | 九九在线精品视频 | 天天干天天做天天操 | av福利在线看 | 97视频免费在线观看 | 在线观看福利网站 | 久99久视频 | 91av原创| 91网站在线视频 | 日韩网站免费观看 | 久久97超碰 | 国产精品久久久久一区二区三区共 | 伊人婷婷综合 | 午夜精品久久久久久久久久久久 | 国产成人精品一区二区三区免费 | 91精品免费在线视频 | 久久黄色免费 | 天天躁日日 | 91av看片 | 日日日日干| 人人超碰人人 | 国产区精品视频 | 色黄久久久久久 | 天天干夜夜| 日韩在线高清 | 国产乱码精品一区二区三区介绍 | 久久久久久久av麻豆果冻 | 欧美日韩一级久久久久久免费看 | 久久草在线视频国产 | 国内精品免费久久影院 | 又黄又爽又刺激 | 国产精品岛国久久久久久久久红粉 | 国际精品久久 | 97热视频 | 久草免费手机视频 | 五月婷婷综合在线观看 | 亚洲一区天堂 | 亚洲最新精品 | 成年美女黄网站色大片免费看 | 黄色一级免费网站 | 亚洲理论片 | 日韩一区二区免费播放 | 啪啪午夜免费 | 四虎影视成人精品 | 日日干视频 | 婷婷日| 久久综合欧美精品亚洲一区 | 午夜在线国产 | 亚洲日本色 | 久久综合狠狠狠色97 | 久久久久久综合 | 国产一区久久久 | 黄色免费网 | 国产精品伦一区二区三区视频 | 婷婷激情在线观看 | 99福利影院 | 91亚洲精 | 97精品国自产拍在线观看 | 国产精品黄色影片导航在线观看 | 在线视频 精品 | 日本精品视频免费 | 久久99精品国产91久久来源 | 综合网中文字幕 | 久久99视频免费观看 | 久久久亚洲精品 | 久草在线免费在线观看 | 国产欧美精品一区二区三区 | 激情综合狠狠 | 在线免费性生活片 | 久久手机视频 | 欧美日本在线视频 | 91av视频| 免费国产一区二区视频 | 日本成人免费在线观看 | 中文字幕在线播放视频 | 天天操天天操 | 人人爽人人做 | 在线黄色毛片 | 亚洲精品三级 | 婷婷中文字幕在线观看 | 国产69精品久久app免费版 | 国产69久久久欧美一级 | 久久理论电影 | 日韩视频中文字幕在线观看 | 国产香蕉视频 | 日日摸日日| www.天天草| 亚洲五月| 免费能看的黄色片 | 久久免费福利视频 | 超碰最新网址 | 久久久久亚洲精品男人的天堂 | 久久精品视 | 最近中文字幕大全中文字幕免费 | 婷婷伊人综合亚洲综合网 | 天天操欧美 | 99re国产| 视频一区在线免费观看 | 98涩涩国产露脸精品国产网 | 欧美-第1页-屁屁影院 | 99精品国产免费久久久久久下载 | 在线成人观看 | 国产999精品久久久久久绿帽 | 麻豆影视在线免费观看 | 久久精品亚洲一区二区三区观看模式 | 久久短视频 | 欧美一区免费在线观看 | 国产精品美女久久久久久久 | 日韩一区正在播放 | 国产精品都在这里 | 欧美激情片在线观看 | 久久久久久久久久久久久久电影 | 三级av在线播放 | 欧美一级视频免费看 | 欧美日韩破处 | 69精品在线观看 | 欧美国产一区二区 | 成人在线网站观看 | 日韩欧美在线免费 | 成人黄色片免费 | 在线观看深夜视频 | 97在线观看视频 | 精品久久久99 | 综合久久2023 | 亚洲黄色一级视频 | 中文字幕精品在线 | 婷婷久久综合九色综合 | 精品99视频 | 亚洲精品成人av在线 | 亚洲国产成人精品在线 | 久久久精品日本 | 欧美性生活小视频 | 在线免费三级 | 欧美日韩亚洲在线观看 | 亚洲成年人免费网站 | 成人9ⅰ免费影视网站 | 又黄又爽的视频在线观看网站 | 黄色影院在线免费观看 | 亚洲高清在线视频 | 99久久999久久久精玫瑰 | 欧美久草视频 | www.香蕉视频在线观看 | 日韩三级久久 | 久久免费大片 | 亚洲精品在线播放视频 | 9免费视频 | 久久久久在线 | 7777xxxx| 久久久久久久久福利 | 91女人18片女毛片60分钟 | 国产视频在线观看免费 | 视频91在线 | 久久久久久久久久久网 | 欧美伦理一区二区三区 | 亚洲综合少妇 | 高清av免费观看 | 欧美日韩高清一区二区 国产亚洲免费看 | 欧美日韩国产精品爽爽 | 亚洲精品久久久久久久不卡四虎 | 日本中文字幕影院 | 99国产免费网址 | 久草视频免费在线播放 | 国产欧美精品在线观看 | 欧美特一级 | 国产色综合天天综合网 | 国产高清不卡在线 | 国产很黄很色的视频 | 国产69久久久 | av 一区 二区 久久 | 成人免费在线看片 | 国产精品99久久久久的智能播放 | 精品影院| 久久夜色电影 | 五月婷婷综| 在线中文字母电影观看 | 成人中文字幕在线 | 久久av在线播放 | 91av超碰| 麻豆视频观看 | 麻豆你懂的 | 色狠狠一区二区 | 国产亚洲午夜高清国产拍精品 | 91亚洲在线观看 | 天天躁天天操 | 亚洲精品视频在 | 日韩免费在线观看网站 | 久草在线视频首页 | 国产黄色在线观看 | 成人一级视频在线观看 | 又污又黄网站 | 国产专区欧美专区 | 天天射综合网视频 | 日韩欧美高清不卡 | 国产精品99久久久久久宅男 | 亚洲黄色一级电影 | 国产一级片免费视频 | 成人在线免费看视频 | 九九九热| 欧美激情视频一二区 | 国产高清av免费在线观看 | 午夜精品久久久久久久爽 | 激情喷水| 久久超 | 日韩中文在线观看 | 国产欧美久久久精品影院 | 99精品视频在线 | 中文在线免费视频 | 最近中文字幕mv免费高清在线 | 黄视频网站大全 | 欧美日韩视频在线观看一区二区 | 亚洲人av免费网站 | 色综合久久精品 | 精品国产一区二区三区av性色 | 日韩大片在线观看 | 国产精品毛片一区视频 | 久草视频在线免费播放 | 国产精品一区二区久久久 | 久久国产精品精品国产色婷婷 | 九九免费在线看完整版 | 99久久er热在这里只有精品15 | 91精品视频免费看 | 日韩成人av在线 | 色av男人的天堂免费在线 | 久久综合久久综合这里只有精品 | 中文字幕在线看片 | 国产精品久久久视频 | 欧美日韩国产在线 | 欧美精品999 | 麻豆成人在线观看 | 中文字幕一区二区三区乱码不卡 | 中文字幕av免费 | 在线欧美最极品的av | 日本黄色大片免费看 | 探花国产在线 | 色视频网站在线观看一=区 a视频免费在线观看 | 国内精品毛片 | 亚洲在线视频网站 | 日日干夜夜草 | 亚洲国产精品影院 | 正在播放一区 | 日韩免费观看一区二区 | 色网免费观看 | 亚洲精品一区二区三区新线路 | 久久久免费观看视频 | 骄小bbw搡bbbb揉bbbb | av在线看网站 | 二区中文字幕 | 91黄色免费网站 | 国产精品入口传媒 | 久久成人高清 | 在线观看免费视频你懂的 | 国产xx视频 | 96精品在线 | 国产在线播放观看 | 国产成人一区二区三区影院在线 | 日韩二区三区在线 | 国产精品黄色影片导航在线观看 | 中文亚洲欧美日韩 | 二区三区在线 | 亚洲一二视频 | 亚洲成人黄色 | 久久久九色精品国产一区二区三区 | 激情 一区二区 | 91精品国自产在线观看欧美 | 国产中文字幕视频在线观看 | 久久精品视 | 婷婷色5月 | 又黄又刺激的视频 | 久久综合九色 | 国产精品久久二区 | 久久草网| 在线观看91av | 99久久精品免费看国产一区二区三区 | 在线直播av | 久久久久久久久久久久av | 国产精品亚洲片夜色在线 | 黄色的网站免费看 | 九九视频这里只有精品 | 99视频在线精品免费观看2 | 99视频免费观看 | 最近字幕在线观看第一季 | 国产精品一区欧美 | www.夜夜操.com | 国产一区二区精品久久91 | 成人动漫一区二区 | 一区二区三区国 | 国产精品久久精品国产 | 国产一区在线精品 | 青青草国产成人99久久 | 特级黄色视频毛片 | 开心激情久久 | 欧美在线1区| 综合精品久久久 | 中文字幕在线看视频国产中文版 | 日韩精品中文字幕久久臀 | 99性视频| 国产99久久九九精品免费 | 国产 在线观看 | 91福利区一区二区三区 | 国产一级大片免费看 | 激情久久一区二区三区 | 国产精品麻豆三级一区视频 | 在线免费观看黄色大片 | 亚洲电影在线看 | 91插插插网站 | 丁香婷婷色综合亚洲电影 | 91av在线看 | 欧美巨大荫蒂茸毛毛人妖 | 九九热免费在线观看 | 热久久这里只有精品 | 日本精品午夜 | 日女人电影 | 免费av免费观看 | 蜜臀一区二区三区精品免费视频 | 欧美精品久久久久久久久老牛影院 | 婷婷在线视频 | 国产一区二区在线免费播放 | 91在线国内视频 | 黄色一级片视频 | 色婷婷婷 | av免费在线看网站 | 成人网色 | 蜜臀av性久久久久蜜臀aⅴ涩爱 | 韩国av不卡| 亚洲国产美女精品久久久久∴ | 天天拍天天操 | 91在线播放综合 | 99精品国产99久久久久久福利 | www最近高清中文国语在线观看 | 精品久久九九 | 日日爱999| 99视频精品免费观看, | 色偷偷av男人天堂 | 97精产国品一二三产区在线 | 五月综合在线观看 | 午夜私人影院久久久久 | 亚洲精品五月天 | 午夜美女wwww | 久草热久草视频 | 欧美做受69 | 五月婷婷久久丁香 | 欧美日韩中文字幕视频 | 亚洲精品国产欧美在线观看 | 综合久久2023 | 亚洲精品高清在线 | 国产精品久久久777 成人手机在线视频 | 久久成人高清 | 在线激情小视频 | 国产精品久久久久四虎 | 亚洲最新在线 | 免费成视频 | 久久久精品 | 亚洲欧美成人综合 | 97碰视频 | 91资源在线播放 | 超碰在线日本 | 亚洲清纯国产 | 天天人人 | 久久久亚洲精华液 | 日韩精品综合在线 | 高清久久久久久 | 国产在线观看地址 | 免费av试看 | 日韩电影中文字幕在线观看 | 国产成人精品一区二区三区福利 | 国产一区二区在线免费 | 最近更新好看的中文字幕 | 国产在线一卡 | 天天干,狠狠干 | 日本二区三区在线 | 中文字幕在线网 | av线上看| 尤物97国产精品久久精品国产 | 蜜桃传媒一区二区 | 97电院网手机版 | 国产1区在线 | 成人一区二区三区中文字幕 | 一区二区三区在线免费播放 | 欧美在线观看视频免费 | 人人要人人澡人人爽人人dvd | 国产高清在线观看av | 国产色黄网站 | 精品欧美日韩 | 久草视频在 | 麻豆国产精品视频 | 亚洲最大在线视频 | 国产精品都在这里 | 国产精品18久久久久白浆 | 亚洲日本韩国一区二区 | 日本中文乱码卡一卡二新区 | 久久久这里有精品 | 亚洲自拍自偷 | 欧美成人按摩 | 久久er99热精品一区二区 | 99精品视频一区二区 | 99在线热播精品免费99热 | 国产精品va视频 | 在线观看国产日韩欧美 | 狠狠的日| 亚洲最快最全在线视频 | 国产一区二区三区 在线 | 日韩在线视频免费观看 | 日韩精品短视频 | 天天曰天天射 | 婷婷在线免费观看 | 国产精品爽爽久久久久久蜜臀 | 日韩欧美国产精品 | av网站播放 | 国产午夜精品一区二区三区在线观看 | 人人玩人人添人人澡97 | 少妇bbr搡bbb搡bbb | 国产午夜精品福利视频 | 黄色免费大全 | 国产99视频在线观看 | 在线只有精品 | 天天干天天摸 | 天天色天天射综合网 | 成人午夜电影网站 | 亚洲免费观看视频 | 在线免费观看黄色大片 | av女优中文字幕在线观看 | 国产精品免费久久久久久久久久中文 | www日| 久久99精品国产91久久来源 | 奇米导航| 黄色软件网站在线观看 | 麻豆精品传媒视频 | 天天爽夜夜爽精品视频婷婷 | 久久美女高清视频 | 午夜视频一区二区 | 能在线观看的日韩av | 一区二区三区在线观看免费视频 | 在线免费观看的av | av一级二级 | 国产高清视频在线播放 | 久久国产麻豆 | a久久久久久 | 麻豆视频在线播放 | 色噜噜在线观看视频 | 狠狠色丁香婷婷综合最新地址 | 精品国产乱子伦一区二区 | 国产小视频在线播放 | 亚洲人成在线观看 | 一区二区三区av在线 | 天天操天天射天天 | 91精品影视 | 精品国产一区二区在线 | 天天操天天摸天天射 | 在线免费国产 | 欧美在线视频a | 久久大香线蕉app | 成 人 免费 黄 色 视频 | 国产日韩精品久久 | 精品亚洲免费 | 美女黄频视频大全 | 在线观看免费成人 | 国产人成在线视频 | 国产视频在线免费 | 天天干天天搞天天射 | 日日夜日日干 | 天堂在线一区 | 亚洲国产成人在线播放 | 中文字幕视频一区 | 91高清免费观看 | 久久久久伦理电影 | 美女视频一区二区 | 日韩欧美电影在线 | 国产人成一区二区三区影院 | 亚洲精色 | 制服丝袜天堂 | 97人人爽 | 久久一区91 | 六月丁香社区 | 中文字幕在线资源 | 深爱婷婷久久综合 | 在线观看视频日韩 | 亚洲激情免费 | 超碰个人在线 | 亚洲精品视频在线 | 超碰97人人爱| 久久精品屋| 在线国产视频 | 天天干,夜夜操 | 96精品高清视频在线观看软件特色 | 免费看的黄色小视频 | 国产视频一区在线 | av一区二区三区在线 | 97在线精品视频 | 一本之道乱码区 | 99免费精品视频 | 亚洲视频h | 欧美一区二区精美视频 | 00av视频| 一区二区三区免费在线观看视频 | 伊人影院在线观看 | 久久毛片视频 | 最近中文字幕免费视频 | 丁香六月激情 | 黄色大片入口 | 亚洲精品动漫成人3d无尽在线 | 99精品视频中文字幕 | ,午夜性刺激免费看视频 | 伊人手机在线 | 国产麻豆精品在线观看 | 国产精品视频99 | av千婊在线免费观看 | 欧美性色综合网 | 久久精品中文视频 | 青青啪 | 亚洲欧美视频网站 | 久久久久国产精品一区二区 | 91大神在线观看视频 | 又色又爽的网站 | 精品久久综合 | 国产精品中文字幕在线播放 | 国产亚洲精品成人av久久ww | 一色屋精品视频在线观看 | 99这里只有久久精品视频 | 超碰夜夜| 国产精品资源网 | 香蕉网在线观看 | 91在线免费播放视频 | 日韩国产高清在线 | 99视频在线免费观看 | 在线观看精品黄av片免费 | 日韩在线视频免费看 | 狠狠网| 国内久久久 | 综合色伊人 | 最新黄色av网址 | 色综合久久中文综合久久牛 | 国产在线一区观看 | 免费看黄在线观看 | 成人h视频| 国产一二三四在线观看视频 | 在线观看日本韩国电影 | 精品视频专区 | 国产精品久久久久久久久久久久 | 婷婷丁香花 | 国产亚洲日本 | 日韩欧美精品在线观看 | 国产一级二级视频 | 一级黄色视屏 | 中文字幕 影院 | a黄在线观看 | 欧美日韩aaaa | 欧美午夜性生活 | 日韩成人免费电影 | 国产美女久久久 | 99久久精品久久久久久动态片 | 香蕉网站在线观看 | 亚洲人成人天堂h久久 | 蜜臀av免费一区二区三区 | 色悠悠久久综合 | 日韩亚洲精品电影 | 最近2019好看的中文字幕免费 | 日韩高清一二三区 | a电影在线观看 | 久草资源在线 |