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

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

OPC UA - Open62541学习

發(fā)布時間:2023/12/14 编程问答 38 豆豆
生活随笔 收集整理的這篇文章主要介紹了 OPC UA - Open62541学习 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.

前言

這幾天看了看Open62541,這是用C語言遵循C99標準實現(xiàn)的一個開源跨平臺OPC UA庫。學習過程中發(fā)現(xiàn)好多不明白的運行結果,可能是自己沒搞太明白,也可能是源碼有些潛在bug,希望大神看到指導下小弟。這里簡單記錄下自己的學習過程和測試結果,算是個小筆記?

一:編譯

按著文檔編譯下

Linux:

sudo apt-get install git build-essential gcc pkg-config cmake python python-six
# enable additional features
sudo apt-get install cmake-curses-gui # for the ccmake graphical interface
sudo apt-get install libmbedtls-dev # for encryption support
sudo apt-get install check # for unit tests
sudo apt-get install python-sphinx graphviz # for documentation generation
sudo apt-get install python-sphinx-rtd-theme # documentation style

這些都是一些環(huán)境,聯(lián)網(wǎng)后敲上去安裝就好了。

cd open62541
mkdir build
cd build

到文件夾下,創(chuàng)建build文件件,然后到build文件夾下執(zhí)行編譯指令。

這里注意下編譯參數(shù),文檔上寫的很清楚:

CMAKE_BUILD_TYPE
? RelWithDebInfo -O2 optimization with debug symbols
? Release -O2 optimization without debug symbols
? Debug -O0 optimization with debug symbols
? MinSizeRel -Os optimization without debug symbols

最好把參數(shù)寫上,我不寫參數(shù)就出錯。

?

很快就編譯完成了,就可以拿去開發(fā)了。

Windows:

2.2.2 Building with CMake on Windows
Here we explain the build process for Visual Studio (2013 or newer). To build with MinGW, just replace the
compiler selection in the call to CMake.
? Download and install
– Python 2.7.x (Python 3.x works as well): https://python.org/downloads
– Install python-six with the pip package manager (pip install six)
– CMake: http://www.cmake.org/cmake/resources/software.html
– Microsoft Visual Studio: https://www.visualstudio.com/products/visual-studio-community-vs
? Download the open62541 sources (using git or as a zipfile from github)
? Open a command shell (cmd) and run
cd <path-to>\open62541
mkdir build
cd build
<path-to>\cmake.exe .. -G "Visual Studio 14 2015"
:: You can use use cmake-gui for a graphical user-interface to select features
? Then open buildopen62541.sln in Visual Studio 2015 and build as usual

這些文檔寫的都很清楚,按著一步一步來就好了,注意配置的時候可以選動態(tài)庫、可以選動態(tài)庫、也可以直接用open62541.c和open62541.h 。

二:實用方法

1.先把頭文件和源文件添加到項目中

2.功能簡單測試

枚舉服務節(jié)點

char *uri = "opc.tcp://127.0.0.1:49320";/* Listing endpoints */UA_EndpointDescription* endpointArray = NULL;size_t endpointArraySize = 0;UA_StatusCode retval = UA_Client_getEndpoints(client, uri,&endpointArraySize, &endpointArray);if (retval != UA_STATUSCODE_GOOD) {UA_Array_delete(endpointArray, endpointArraySize, &UA_TYPES[UA_TYPES_ENDPOINTDESCRIPTION]);UA_Client_delete(client);return (int)retval;}printf("%i endpoints found\n", (int)endpointArraySize);for (size_t i = 0; i<endpointArraySize; i++) {printf("URL of endpoint %i is %.*s\n", (int)i,(int)endpointArray[i].endpointUrl.length,endpointArray[i].endpointUrl.data);}UA_Array_delete(endpointArray, endpointArraySize, &UA_TYPES[UA_TYPES_ENDPOINTDESCRIPTION]);

連接OPC UA服務

UA_Client *client = UA_Client_new(UA_ClientConfig_default);char *uri = "opc.tcp://127.0.0.1:49320"; retval = UA_Client_connect(client, uri);if (retval != UA_STATUSCODE_GOOD) {UA_Client_delete(client);return (int)retval;}

這里還可以用指定用戶名和密碼去連接,連接函數(shù)原型為:但是我沒有測試

UA_StatusCode UA_Client_connect_username(UA_Client *client, const char *endpointUrl,const char *username, const char *password) {client->authenticationMethod = UA_CLIENTAUTHENTICATION_USERNAME;client->username = UA_STRING_ALLOC(username);client->password = UA_STRING_ALLOC(password);return UA_Client_connect(client, endpointUrl); }

瀏覽指定節(jié)點下NODE

static void BrowseNode(UA_Client *client,char* nodeIdStr) {/* Browse some objects */if (nodeIdStr == NULL){printf("nodeIdStr == NULL");return;}printf("Browsing nodes in objects folder:\n");UA_NodeId nodeId = UA_NODEID_STRING(2, nodeIdStr);//UA_NodeId nodeId = UA_NODEID_NUMERIC(0, 8);UA_BrowseRequest bReq ;UA_BrowseRequest_init(&bReq);bReq.requestedMaxReferencesPerNode = 0;bReq.nodesToBrowse = UA_BrowseDescription_new();bReq.nodesToBrowseSize = 1;bReq.nodesToBrowse[0].nodeId = nodeId;bReq.nodesToBrowse[0].resultMask = UA_BROWSERESULTMASK_ALL; /* return everything */UA_BrowseResponse bResp = UA_Client_Service_browse(client, bReq);printf("%-9s %-16s %-16s %-16s\n", "NAMESPACE", "NODEID", "BROWSE NAME", "DISPLAY NAME");for (size_t i = 0; i < bResp.resultsSize; ++i) {for (size_t j = 0; j < bResp.results[i].referencesSize; ++j) {UA_ReferenceDescription *ref = &(bResp.results[i].references[j]);if (ref->nodeId.nodeId.identifierType == UA_NODEIDTYPE_NUMERIC) {printf("%-9d %-16d %-16.*s %-16.*s\n", ref->nodeId.nodeId.namespaceIndex,ref->nodeId.nodeId.identifier.numeric, (int)ref->browseName.name.length,ref->browseName.name.data, (int)ref->displayName.text.length,ref->displayName.text.data);}else if (ref->nodeId.nodeId.identifierType == UA_NODEIDTYPE_STRING) {printf("%-9d %-16.*s %-16.*s %-16.*s\n", ref->nodeId.nodeId.namespaceIndex,(int)ref->nodeId.nodeId.identifier.string.length,ref->nodeId.nodeId.identifier.string.data,(int)ref->browseName.name.length, ref->browseName.name.data,(int)ref->displayName.text.length, ref->displayName.text.data);}}}UA_BrowseDescription_deleteMembers(&bReq);//UA_BrowseRequest_deleteMembers(&bReq);UA_BrowseResponse_deleteMembers(&bResp); }

這里遇到個小問題,其實應該用UA_BrowseRequest_deleteMembers(&bReq);來釋放資源,瀏覽根節(jié)點釋放資源時沒問題,指定Node去瀏覽后 釋放就報錯,這樣寫同樣可以起到釋放的效果。

UA_BrowseDescription_deleteMembers(&bReq);

這里還有一種枚舉指定節(jié)點下NODE的方法

UA_NodeId *parent = UA_NodeId_new();*parent = UA_NODEID_NUMERIC(0, UA_NS0ID_OBJECTSFOLDER);UA_Client_forEachChildNodeCall(client, UA_NODEID_NUMERIC(0, UA_NS0ID_OBJECTSFOLDER),nodeIter, (void *)parent);UA_NodeId_delete(parent);static UA_StatusCode nodeIter(UA_NodeId childId, UA_Boolean isInverse, UA_NodeId referenceTypeId, void *handle) {if (isInverse)return UA_STATUSCODE_GOOD;UA_NodeId *parent = (UA_NodeId *)handle;printf("%d, %d --- %d ---> NodeId %d, %d\n",parent->namespaceIndex, parent->identifier.numeric,referenceTypeId.identifier.numeric, childId.namespaceIndex,childId.identifier.numeric);return UA_STATUSCODE_GOOD; }

每個子節(jié)點會以回調的方式反饋給我們。

讀指定Node

UA_Variant *val = UA_Variant_new();UA_LocalizedText outDisplayName;UA_NodeId nodeId = UA_NODEID_STRING(2, nodeIdStr);//CX62KX63.ER.Queue.CarVin//CX62KX63.ER.Queue.RequestUA_StatusCode retval = UA_Client_readValueAttribute(client, nodeId, val);

主動讀的時候需要注意,根據(jù)指定node的數(shù)據(jù)類型指定類型來接收,不然可能拿不到或者拿到錯誤的數(shù)據(jù),因為C語言嘛,比較基于內存。

讀的時候很靈活可以用底層的

__UA_Client_readAttribute(UA_Client *client, const UA_NodeId *nodeId,UA_AttributeId attributeId, void *out,const UA_DataType *outDataType);

指定UA_AttributeId 去讀。但是推薦使用包裝后的讀取方式,官方文檔上有說明

static UA_INLINE UA_StatusCode UA_Client_readNodeIdAttribute(UA_Client *client, const UA_NodeId nodeId,UA_NodeId *outNodeId) {return __UA_Client_readAttribute(client, &nodeId, UA_ATTRIBUTEID_NODEID,outNodeId, &UA_TYPES[UA_TYPES_NODEID]); }static UA_INLINE UA_StatusCode UA_Client_readNodeClassAttribute(UA_Client *client, const UA_NodeId nodeId,UA_NodeClass *outNodeClass) {return __UA_Client_readAttribute(client, &nodeId, UA_ATTRIBUTEID_NODECLASS,outNodeClass, &UA_TYPES[UA_TYPES_NODECLASS]); }static UA_INLINE UA_StatusCode UA_Client_readBrowseNameAttribute(UA_Client *client, const UA_NodeId nodeId,UA_QualifiedName *outBrowseName) {return __UA_Client_readAttribute(client, &nodeId, UA_ATTRIBUTEID_BROWSENAME,outBrowseName,&UA_TYPES[UA_TYPES_QUALIFIEDNAME]); }static UA_INLINE UA_StatusCode UA_Client_readDisplayNameAttribute(UA_Client *client, const UA_NodeId nodeId,UA_LocalizedText *outDisplayName) {return __UA_Client_readAttribute(client, &nodeId, UA_ATTRIBUTEID_DISPLAYNAME,outDisplayName,&UA_TYPES[UA_TYPES_LOCALIZEDTEXT]); }static UA_INLINE UA_StatusCode UA_Client_readDescriptionAttribute(UA_Client *client, const UA_NodeId nodeId,UA_LocalizedText *outDescription) {return __UA_Client_readAttribute(client, &nodeId, UA_ATTRIBUTEID_DESCRIPTION,outDescription,&UA_TYPES[UA_TYPES_LOCALIZEDTEXT]); }static UA_INLINE UA_StatusCode UA_Client_readWriteMaskAttribute(UA_Client *client, const UA_NodeId nodeId,UA_UInt32 *outWriteMask) {return __UA_Client_readAttribute(client, &nodeId, UA_ATTRIBUTEID_WRITEMASK,outWriteMask, &UA_TYPES[UA_TYPES_UINT32]); }static UA_INLINE UA_StatusCode UA_Client_readUserWriteMaskAttribute(UA_Client *client, const UA_NodeId nodeId,UA_UInt32 *outUserWriteMask) {return __UA_Client_readAttribute(client, &nodeId,UA_ATTRIBUTEID_USERWRITEMASK,outUserWriteMask,&UA_TYPES[UA_TYPES_UINT32]); }static UA_INLINE UA_StatusCode UA_Client_readIsAbstractAttribute(UA_Client *client, const UA_NodeId nodeId,UA_Boolean *outIsAbstract) {return __UA_Client_readAttribute(client, &nodeId, UA_ATTRIBUTEID_ISABSTRACT,outIsAbstract, &UA_TYPES[UA_TYPES_BOOLEAN]); }static UA_INLINE UA_StatusCode UA_Client_readSymmetricAttribute(UA_Client *client, const UA_NodeId nodeId,UA_Boolean *outSymmetric) {return __UA_Client_readAttribute(client, &nodeId, UA_ATTRIBUTEID_SYMMETRIC,outSymmetric, &UA_TYPES[UA_TYPES_BOOLEAN]); }static UA_INLINE UA_StatusCode UA_Client_readInverseNameAttribute(UA_Client *client, const UA_NodeId nodeId,UA_LocalizedText *outInverseName) {return __UA_Client_readAttribute(client, &nodeId, UA_ATTRIBUTEID_INVERSENAME,outInverseName,&UA_TYPES[UA_TYPES_LOCALIZEDTEXT]); }static UA_INLINE UA_StatusCode UA_Client_readContainsNoLoopsAttribute(UA_Client *client, const UA_NodeId nodeId,UA_Boolean *outContainsNoLoops) {return __UA_Client_readAttribute(client, &nodeId,UA_ATTRIBUTEID_CONTAINSNOLOOPS,outContainsNoLoops,&UA_TYPES[UA_TYPES_BOOLEAN]); }static UA_INLINE UA_StatusCode UA_Client_readEventNotifierAttribute(UA_Client *client, const UA_NodeId nodeId,UA_Byte *outEventNotifier) {return __UA_Client_readAttribute(client, &nodeId, UA_ATTRIBUTEID_EVENTNOTIFIER,outEventNotifier, &UA_TYPES[UA_TYPES_BYTE]); }static UA_INLINE UA_StatusCode UA_Client_readValueAttribute(UA_Client *client, const UA_NodeId nodeId,UA_Variant *outValue) {return __UA_Client_readAttribute(client, &nodeId, UA_ATTRIBUTEID_VALUE,outValue, &UA_TYPES[UA_TYPES_VARIANT]); }static UA_INLINE UA_StatusCode UA_Client_readDataTypeAttribute(UA_Client *client, const UA_NodeId nodeId,UA_NodeId *outDataType) {return __UA_Client_readAttribute(client, &nodeId, UA_ATTRIBUTEID_DATATYPE,outDataType, &UA_TYPES[UA_TYPES_NODEID]); }static UA_INLINE UA_StatusCode UA_Client_readValueRankAttribute(UA_Client *client, const UA_NodeId nodeId,UA_Int32 *outValueRank) {return __UA_Client_readAttribute(client, &nodeId, UA_ATTRIBUTEID_VALUERANK,outValueRank, &UA_TYPES[UA_TYPES_INT32]); }UA_StatusCode UA_EXPORT UA_Client_readArrayDimensionsAttribute(UA_Client *client, const UA_NodeId nodeId,size_t *outArrayDimensionsSize,UA_UInt32 **outArrayDimensions);static UA_INLINE UA_StatusCode UA_Client_readAccessLevelAttribute(UA_Client *client, const UA_NodeId nodeId,UA_Byte *outAccessLevel) {return __UA_Client_readAttribute(client, &nodeId, UA_ATTRIBUTEID_ACCESSLEVEL,outAccessLevel, &UA_TYPES[UA_TYPES_BYTE]); }static UA_INLINE UA_StatusCode UA_Client_readUserAccessLevelAttribute(UA_Client *client, const UA_NodeId nodeId,UA_Byte *outUserAccessLevel) {return __UA_Client_readAttribute(client, &nodeId,UA_ATTRIBUTEID_USERACCESSLEVEL,outUserAccessLevel,&UA_TYPES[UA_TYPES_BYTE]); }static UA_INLINE UA_StatusCode UA_Client_readMinimumSamplingIntervalAttribute(UA_Client *client,const UA_NodeId nodeId,UA_Double *outMinSamplingInterval) {return __UA_Client_readAttribute(client, &nodeId,UA_ATTRIBUTEID_MINIMUMSAMPLINGINTERVAL,outMinSamplingInterval,&UA_TYPES[UA_TYPES_DOUBLE]); }static UA_INLINE UA_StatusCode UA_Client_readHistorizingAttribute(UA_Client *client, const UA_NodeId nodeId,UA_Boolean *outHistorizing) {return __UA_Client_readAttribute(client, &nodeId, UA_ATTRIBUTEID_HISTORIZING,outHistorizing, &UA_TYPES[UA_TYPES_BOOLEAN]); }static UA_INLINE UA_StatusCode UA_Client_readExecutableAttribute(UA_Client *client, const UA_NodeId nodeId,UA_Boolean *outExecutable) {return __UA_Client_readAttribute(client, &nodeId, UA_ATTRIBUTEID_EXECUTABLE,outExecutable, &UA_TYPES[UA_TYPES_BOOLEAN]); }static UA_INLINE UA_StatusCode UA_Client_readUserExecutableAttribute(UA_Client *client, const UA_NodeId nodeId,UA_Boolean *outUserExecutable) {return __UA_Client_readAttribute(client, &nodeId,UA_ATTRIBUTEID_USEREXECUTABLE,outUserExecutable,&UA_TYPES[UA_TYPES_BOOLEAN]); }

看這些函數(shù)命名,幾乎不用注釋就可以猜到每個函數(shù)讀的是什么內容。

寫指定Node

static bool WriteValue(UA_Client *client,char* nodeIdStr,void *value,UINT type) {boolean result = true;UA_Variant *myVariant = UA_Variant_new();UA_NodeId nodeId = UA_NODEID_STRING(2, nodeIdStr);UA_StatusCode code = UA_Variant_setScalarCopy(myVariant, value, &UA_TYPES[type]);if(code != UA_STATUSCODE_GOOD){result = false;UA_Variant_delete(myVariant);return result;}code=UA_Client_writeValueAttribute(client, nodeId, myVariant);if (code != UA_STATUSCODE_GOOD){result = false;UA_Variant_delete(myVariant);return result;}UA_Variant_delete(myVariant);return result; }

我是測試寫了個字符串,因為相對字符串要比int、bool這些基本類型字符串讀寫的時候更需要注意。

和讀一樣,寫也有一個比較低級的函數(shù)

UA_StatusCode UA_EXPORT __UA_Client_writeAttribute(UA_Client *client, const UA_NodeId *nodeId,UA_AttributeId attributeId, const void *in,const UA_DataType *inDataType);

指定UA_AttributeId 去寫。但是推薦比較高級的包裝函數(shù)。

static UA_INLINE UA_StatusCode UA_Client_writeNodeIdAttribute(UA_Client *client, const UA_NodeId nodeId,const UA_NodeId *newNodeId) {return __UA_Client_writeAttribute(client, &nodeId, UA_ATTRIBUTEID_NODEID,newNodeId, &UA_TYPES[UA_TYPES_NODEID]); }static UA_INLINE UA_StatusCode UA_Client_writeNodeClassAttribute(UA_Client *client, const UA_NodeId nodeId,const UA_NodeClass *newNodeClass) {return __UA_Client_writeAttribute(client, &nodeId, UA_ATTRIBUTEID_NODECLASS,newNodeClass, &UA_TYPES[UA_TYPES_NODECLASS]); }static UA_INLINE UA_StatusCode UA_Client_writeBrowseNameAttribute(UA_Client *client, const UA_NodeId nodeId,const UA_QualifiedName *newBrowseName) {return __UA_Client_writeAttribute(client, &nodeId, UA_ATTRIBUTEID_BROWSENAME,newBrowseName,&UA_TYPES[UA_TYPES_QUALIFIEDNAME]); }static UA_INLINE UA_StatusCode UA_Client_writeDisplayNameAttribute(UA_Client *client, const UA_NodeId nodeId,const UA_LocalizedText *newDisplayName) {return __UA_Client_writeAttribute(client, &nodeId, UA_ATTRIBUTEID_DISPLAYNAME,newDisplayName,&UA_TYPES[UA_TYPES_LOCALIZEDTEXT]); }static UA_INLINE UA_StatusCode UA_Client_writeDescriptionAttribute(UA_Client *client, const UA_NodeId nodeId,const UA_LocalizedText *newDescription) {return __UA_Client_writeAttribute(client, &nodeId, UA_ATTRIBUTEID_DESCRIPTION,newDescription,&UA_TYPES[UA_TYPES_LOCALIZEDTEXT]); }static UA_INLINE UA_StatusCode UA_Client_writeWriteMaskAttribute(UA_Client *client, const UA_NodeId nodeId,const UA_UInt32 *newWriteMask) {return __UA_Client_writeAttribute(client, &nodeId, UA_ATTRIBUTEID_WRITEMASK,newWriteMask, &UA_TYPES[UA_TYPES_UINT32]); }static UA_INLINE UA_StatusCode UA_Client_writeUserWriteMaskAttribute(UA_Client *client, const UA_NodeId nodeId,const UA_UInt32 *newUserWriteMask) {return __UA_Client_writeAttribute(client, &nodeId,UA_ATTRIBUTEID_USERWRITEMASK,newUserWriteMask,&UA_TYPES[UA_TYPES_UINT32]); }static UA_INLINE UA_StatusCode UA_Client_writeIsAbstractAttribute(UA_Client *client, const UA_NodeId nodeId,const UA_Boolean *newIsAbstract) {return __UA_Client_writeAttribute(client, &nodeId, UA_ATTRIBUTEID_ISABSTRACT,newIsAbstract, &UA_TYPES[UA_TYPES_BOOLEAN]); }static UA_INLINE UA_StatusCode UA_Client_writeSymmetricAttribute(UA_Client *client, const UA_NodeId nodeId,const UA_Boolean *newSymmetric) {return __UA_Client_writeAttribute(client, &nodeId, UA_ATTRIBUTEID_SYMMETRIC,newSymmetric, &UA_TYPES[UA_TYPES_BOOLEAN]); }static UA_INLINE UA_StatusCode UA_Client_writeInverseNameAttribute(UA_Client *client, const UA_NodeId nodeId,const UA_LocalizedText *newInverseName) {return __UA_Client_writeAttribute(client, &nodeId, UA_ATTRIBUTEID_INVERSENAME,newInverseName,&UA_TYPES[UA_TYPES_LOCALIZEDTEXT]); }static UA_INLINE UA_StatusCode UA_Client_writeContainsNoLoopsAttribute(UA_Client *client, const UA_NodeId nodeId,const UA_Boolean *newContainsNoLoops) {return __UA_Client_writeAttribute(client, &nodeId,UA_ATTRIBUTEID_CONTAINSNOLOOPS,newContainsNoLoops,&UA_TYPES[UA_TYPES_BOOLEAN]); }static UA_INLINE UA_StatusCode UA_Client_writeEventNotifierAttribute(UA_Client *client, const UA_NodeId nodeId,const UA_Byte *newEventNotifier) {return __UA_Client_writeAttribute(client, &nodeId,UA_ATTRIBUTEID_EVENTNOTIFIER,newEventNotifier,&UA_TYPES[UA_TYPES_BYTE]); }static UA_INLINE UA_StatusCode UA_Client_writeValueAttribute(UA_Client *client, const UA_NodeId nodeId,const UA_Variant *newValue) {return __UA_Client_writeAttribute(client, &nodeId, UA_ATTRIBUTEID_VALUE,newValue, &UA_TYPES[UA_TYPES_VARIANT]); }static UA_INLINE UA_StatusCode UA_Client_writeDataTypeAttribute(UA_Client *client, const UA_NodeId nodeId,const UA_NodeId *newDataType) {return __UA_Client_writeAttribute(client, &nodeId, UA_ATTRIBUTEID_DATATYPE,newDataType, &UA_TYPES[UA_TYPES_NODEID]); }static UA_INLINE UA_StatusCode UA_Client_writeValueRankAttribute(UA_Client *client, const UA_NodeId nodeId,const UA_Int32 *newValueRank) {return __UA_Client_writeAttribute(client, &nodeId, UA_ATTRIBUTEID_VALUERANK,newValueRank, &UA_TYPES[UA_TYPES_INT32]); }UA_StatusCode UA_EXPORT UA_Client_writeArrayDimensionsAttribute(UA_Client *client, const UA_NodeId nodeId,size_t newArrayDimensionsSize,const UA_UInt32 *newArrayDimensions);static UA_INLINE UA_StatusCode UA_Client_writeAccessLevelAttribute(UA_Client *client, const UA_NodeId nodeId,const UA_Byte *newAccessLevel) {return __UA_Client_writeAttribute(client, &nodeId, UA_ATTRIBUTEID_ACCESSLEVEL,newAccessLevel, &UA_TYPES[UA_TYPES_BYTE]); }static UA_INLINE UA_StatusCode UA_Client_writeUserAccessLevelAttribute(UA_Client *client, const UA_NodeId nodeId,const UA_Byte *newUserAccessLevel) {return __UA_Client_writeAttribute(client, &nodeId,UA_ATTRIBUTEID_USERACCESSLEVEL,newUserAccessLevel,&UA_TYPES[UA_TYPES_BYTE]); }static UA_INLINE UA_StatusCode UA_Client_writeMinimumSamplingIntervalAttribute(UA_Client *client,const UA_NodeId nodeId,const UA_Double *newMinInterval) {return __UA_Client_writeAttribute(client, &nodeId,UA_ATTRIBUTEID_MINIMUMSAMPLINGINTERVAL,newMinInterval, &UA_TYPES[UA_TYPES_DOUBLE]); }static UA_INLINE UA_StatusCode UA_Client_writeHistorizingAttribute(UA_Client *client, const UA_NodeId nodeId,const UA_Boolean *newHistorizing) {return __UA_Client_writeAttribute(client, &nodeId, UA_ATTRIBUTEID_HISTORIZING,newHistorizing, &UA_TYPES[UA_TYPES_BOOLEAN]); }static UA_INLINE UA_StatusCode UA_Client_writeExecutableAttribute(UA_Client *client, const UA_NodeId nodeId,const UA_Boolean *newExecutable) {return __UA_Client_writeAttribute(client, &nodeId, UA_ATTRIBUTEID_EXECUTABLE,newExecutable, &UA_TYPES[UA_TYPES_BOOLEAN]); }static UA_INLINE UA_StatusCode UA_Client_writeUserExecutableAttribute(UA_Client *client, const UA_NodeId nodeId,const UA_Boolean *newUserExecutable) {return __UA_Client_writeAttribute(client, &nodeId,UA_ATTRIBUTEID_USEREXECUTABLE,newUserExecutable,&UA_TYPES[UA_TYPES_BOOLEAN]); }

函數(shù)命名幾乎和讀一樣,根據(jù)函數(shù)名稱一目了然。

訂閱模式

static void handler_TheAnswerChanged(UA_Client *client, UA_UInt32 subId, void *subContext, UA_UInt32 monId, void *monContext, UA_DataValue *value) {UA_String valueStr = *(UA_String*)value->value.data;printf("The Answer has changed! %s\n",valueStr.data); }UA_CreateSubscriptionRequest request = UA_CreateSubscriptionRequest_default();UA_CreateSubscriptionResponse response = UA_Client_Subscriptions_create(client, request,NULL, NULL, NULL);UA_UInt32 subId = response.subscriptionId;if (response.responseHeader.serviceResult == UA_STATUSCODE_GOOD)printf("Create subscription succeeded, id %u\n", subId);UA_MonitoredItemCreateRequest monRequest =UA_MonitoredItemCreateRequest_default(UA_NODEID_STRING(2, "CX62KX63.ER.Queue.CarVin"));UA_MonitoredItemCreateResult monResponse =UA_Client_MonitoredItems_createDataChange(client, response.subscriptionId,UA_TIMESTAMPSTORETURN_BOTH,monRequest, NULL, handler_TheAnswerChanged, NULL);if (monResponse.statusCode == UA_STATUSCODE_GOOD)printf("Monitoring 'the.answer', id %u\n", monResponse.monitoredItemId);//UA_Client_Subscriptions_manuallySendPublishRequest(client);UA_StatusCode code = UA_Client_run_iterate(client, 10); //lw這里報錯,所以先注釋掉

對于訂閱模式,open62541.c 和 open62541.h和源代碼不一致,找不到UA_StatusCode code = UA_Client_run_iterate(client, 10);這個函數(shù)(其實用了這個函數(shù)程序就編譯不過去,我這里是因為我把源代碼的一些東西拿過來了,所以能編譯過)。也可以不用這個函數(shù),用UA_Client_Subscriptions_manuallySendPublishRequest(client);這個函數(shù),但是這個函數(shù)被標記廢棄了

不過我測試了下,還可以用。

未測試的功能

添加NODE

/* Add new nodes*//* New ReferenceType */UA_NodeId ref_id;UA_ReferenceTypeAttributes ref_attr = UA_ReferenceTypeAttributes_default;ref_attr.displayName = UA_LOCALIZEDTEXT("en-US", "NewReference");ref_attr.description = UA_LOCALIZEDTEXT("en-US", "References something that might or might not exist");ref_attr.inverseName = UA_LOCALIZEDTEXT("en-US", "IsNewlyReferencedBy");retval = UA_Client_addReferenceTypeNode(client,UA_NODEID_NUMERIC(1, 12133),UA_NODEID_NUMERIC(0, UA_NS0ID_ORGANIZES),UA_NODEID_NUMERIC(0, UA_NS0ID_HASSUBTYPE),UA_QUALIFIEDNAME(1, "NewReference"),ref_attr, &ref_id);if (retval == UA_STATUSCODE_GOOD)printf("Created 'NewReference' with numeric NodeID %u\n", ref_id.identifier.numeric);/* New ObjectType */UA_NodeId objt_id;UA_ObjectTypeAttributes objt_attr = UA_ObjectTypeAttributes_default;objt_attr.displayName = UA_LOCALIZEDTEXT("en-US", "TheNewObjectType");objt_attr.description = UA_LOCALIZEDTEXT("en-US", "Put innovative description here");retval = UA_Client_addObjectTypeNode(client,UA_NODEID_NUMERIC(1, 12134),UA_NODEID_NUMERIC(0, UA_NS0ID_BASEOBJECTTYPE),UA_NODEID_NUMERIC(0, UA_NS0ID_HASSUBTYPE),UA_QUALIFIEDNAME(1, "NewObjectType"),objt_attr, &objt_id);if (retval == UA_STATUSCODE_GOOD)printf("Created 'NewObjectType' with numeric NodeID %u\n", objt_id.identifier.numeric);/* New Object */UA_NodeId obj_id;UA_ObjectAttributes obj_attr = UA_ObjectAttributes_default;obj_attr.displayName = UA_LOCALIZEDTEXT("en-US", "TheNewGreatNode");obj_attr.description = UA_LOCALIZEDTEXT("de-DE", "Hier koennte Ihre Webung stehen!");retval = UA_Client_addObjectNode(client,UA_NODEID_NUMERIC(1, 0),UA_NODEID_NUMERIC(0, UA_NS0ID_OBJECTSFOLDER),UA_NODEID_NUMERIC(0, UA_NS0ID_ORGANIZES),UA_QUALIFIEDNAME(1, "TheGreatNode"),UA_NODEID_NUMERIC(1, 12134),obj_attr, &obj_id);if (retval == UA_STATUSCODE_GOOD)printf("Created 'NewObject' with numeric NodeID %u\n", obj_id.identifier.numeric);/* New Integer Variable */UA_NodeId var_id;UA_VariableAttributes var_attr = UA_VariableAttributes_default;var_attr.displayName = UA_LOCALIZEDTEXT("en-US", "TheNewVariableNode");var_attr.description =UA_LOCALIZEDTEXT("en-US", "This integer is just amazing - it has digits and everything.");UA_Int32 int_value = 1234;/* This does not copy the value */UA_Variant_setScalar(&var_attr.value, &int_value, &UA_TYPES[UA_TYPES_INT32]);var_attr.dataType = UA_TYPES[UA_TYPES_INT32].typeId;retval = UA_Client_addVariableNode(client,UA_NODEID_NUMERIC(1, 0), // Assign new/random NodeIDUA_NODEID_NUMERIC(0, UA_NS0ID_OBJECTSFOLDER),UA_NODEID_NUMERIC(0, UA_NS0ID_ORGANIZES),UA_QUALIFIEDNAME(0, "VariableNode"),UA_NODEID_NULL, // no variable typevar_attr, &var_id);if (retval == UA_STATUSCODE_GOOD)printf("Created 'NewVariable' with numeric NodeID %u\n", var_id.identifier.numeric);

這個功能我暫時還沒有測試,等有時間再深入研究。

結束

很佩服這些做開源軟件的個人和機構,無私的他們,使我們開發(fā)更加經(jīng)濟高效,這種精神值得我們學習。也歡迎加入我的QQ群:633204942? ,我們一起學習。

windows 下編譯的動態(tài)庫和頭文件

Linux 下編譯的靜態(tài)庫文件

總結

以上是生活随笔為你收集整理的OPC UA - Open62541学习的全部內容,希望文章能夠幫你解決所遇到的問題。

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

久久久久久久久艹 | 蜜臀91丨九色丨蝌蚪老版 | 国内精品久久久久影院一蜜桃 | 一区二区三区在线看 | 久久久亚洲麻豆日韩精品一区三区 | 久久大片| 97超视频免费观看 | 国产高清视频在线免费观看 | 亚洲国产日韩欧美在线 | 精品免费视频. | 精品九九九 | 99精品国产一区二区三区麻豆 | 日韩午夜电影网 | 91精品91 | 日本aa在线| 四虎成人免费观看 | 亚洲综合色激情五月 | 国产精品网红福利 | 欧美精品一区二区蜜臀亚洲 | 日本在线视频一区二区三区 | 又黄又爽又湿又无遮挡的在线视频 | 色www免费视频 | 国产成人av网站 | 夜夜狠狠 | 国产色视频123区 | 久久9视频 | 成 人 黄 色视频免费播放 | 97在线观看免费高清完整版在线观看 | 久久久久久久久精 | 五月黄色 | 玖草在线观看 | 国产精品9区 | 久久久精品一区二区 | 91x色| 97超碰人人模人人人爽人人爱 | 成人精品999| 欧美日韩91| 日韩动漫免费观看高清完整版在线观看 | 久久综合九色综合欧美就去吻 | 在线免费91 | 成人a级网站 | 色视频成人在线观看免 | 国产美女视频一区 | 91精品一区二区三区久久久久久 | 黄色在线免费观看网站 | 亚洲欧美成aⅴ人在线观看 四虎在线观看 | 国产高清视频在线观看 | 国产精品黄色在线观看 | 日韩电影在线观看一区二区 | 天天躁日日躁狠狠躁av中文 | 香蕉视频网址 | 亚洲男男gⅴgay双龙 | 日本高清dvd| 91在线国内视频 | 中文字幕有码在线播放 | 午夜视频在线网站 | 月丁香婷婷| 成人片在线播放 | 91亚洲精品乱码久久久久久蜜桃 | 成人av高清在线观看 | 日韩在线观看第一页 | 亚洲精品ww | 久在线观看视频 | 欧美日韩大片在线观看 | av国产在线观看 | 国产精品久久久久久999 | 色国产精品一区在线观看 | 亚洲最大av在线播放 | 8x成人免费视频 | 久久夜色精品国产欧美一区麻豆 | 91在线免费播放视频 | 激情综合亚洲精品 | 激情综合网五月激情 | 国产字幕在线观看 | 一级特黄av | 国产小视频免费在线网址 | 国产视频一区在线播放 | 国产成人一级电影 | 国产中文字幕在线视频 | 五月天激情综合 | 久草久热| 黄色三级网站 | 欧美整片sss | 天天射天天操天天 | 91亚洲精品乱码久久久久久蜜桃 | 欧美精品一区二区免费 | 亚洲欧美日韩精品久久奇米一区 | 五月开心六月婷婷 | 国产黄色精品视频 | 日韩精品五月天 | 日韩网站在线免费观看 | 国产精品毛片完整版 | 欧美精品免费在线 | 91久久精 | 久久久婷 | 天天操天天爱天天爽 | 国产精品k频道 | www免费网站在线观看 | 成人宗合网 | 五月婷久 | av网址最新 | 日韩成人精品一区二区 | 成人精品国产 | 久久综合偷偷噜噜噜色 | 香蕉蜜桃视频 | 不卡视频一区二区三区 | 欧美性精品 | 国产五月天婷婷 | 91麻豆国产福利在线观看 | 久久1区 | 国产精品热 | 一级黄色大片在线观看 | 欧美一级免费 | 欧美日韩视频在线观看一区二区 | 激情婷婷综合 | 在线a人v观看视频 | 色综合a | 91精品国产高清 | 久久精品站 | 天天草天天干天天 | www麻豆视频| 91视频午夜 | 亚洲涩涩色 | 狠狠色丁香久久婷婷综合五月 | 玖玖玖国产精品 | 一区二区三区影院 | 国产精品亚洲a | 欧美日韩伦理一区 | 欧美精品午夜 | 911精品美国片911久久久 | 亚洲电影一区二区 | 免费看精品久久片 | 最新极品jizzhd欧美 | 中文字幕在线观看网站 | 69精品视频 | 草樱av | 亚洲少妇久久 | 综合激情网... | 丁香六月婷| 成人黄色中文字幕 | 涩涩成人在线 | 国产麻豆电影 | 四虎影视精品永久在线观看 | 色播99 | 亚洲精品视频在线观看免费视频 | 欧美激情亚洲综合 | 色噜噜噜噜 | 国产 日韩 在线 亚洲 字幕 中文 | 久久人人爽人人爽人人片av软件 | 日本精品视频免费 | 国产精品久久久久国产a级 激情综合中文娱乐网 | 久久久精品网站 | 天天碰天天操 | 免费v片| 午夜久久久久久久久久久 | 黄色1级毛片 | 婷婷色吧 | 欧美一区二区三区不卡 | av一级片 | 亚洲黄网站 | 黄色99视频| 91在线区 | japanesexxxxfreehd乱熟 | 久草网在线观看 | 免费观看丰满少妇做爰 | 永久免费毛片在线观看 | 欧美日韩国产mv | 91视频久久久久久 | 国产精品一区二区av影院萌芽 | 爱色婷婷| 久产久精国产品 | 亚洲专区欧美 | 狠狠狠狠狠狠狠狠干 | 久久婷婷久久 | 91亚洲国产成人久久精品网站 | 国产日产精品一区二区三区四区 | 91精品在线观看视频 | 在线高清一区 | 天天射天天射天天射 | 婷婷丁香激情五月 | 中文日韩在线视频 | 一区二区电影网 | 特级xxxxx欧美 | 国产精品99久久久久 | 日韩成人高清在线 | 国产一区二区三精品久久久无广告 | 久久男人中文字幕资源站 | 美女一二三区 | 日本在线免费看 | 懂色av懂色av粉嫩av分享吧 | 国产女做a爱免费视频 | 天天天天天天天操 | av电影一区二区三区 | 成人免费一级 | 亚洲视频免费 | 欧美一区二区精美视频 | 亚洲免费婷婷 | 欧美三级在线播放 | 一级一片免费视频 | 成人在线免费看 | 精品一区二区在线播放 | 色中色综合 | 在线91视频 | 欧美a级在线播放 | 国产一区二区精品久久 | 国产 欧美 在线 | 粉嫩aⅴ一区二区三区 | 久久久精品亚洲 | 国产毛片aaa | 久久久久久国产一区二区三区 | 国产精品福利小视频 | 亚洲欧洲国产日韩精品 | 国内精品久久久久影院优 | 日韩在线观看第一页 | 精品久久久久久久久久久久久久久久 | 久久综合九色综合97_ 久久久 | 国产日韩欧美在线观看视频 | 免费的国产精品 | av在线收看 | 成人黄色电影在线观看 | 黄影院| 蜜桃麻豆www久久囤产精品 | 天天草视频 | 丁香影院在线 | 狠狠操.com | 在线观看成年人 | 国产高清日韩 | 91禁在线观看 | 亚洲最大成人网4388xx | 国产精品久久久久久影院 | 婷婷丁香狠狠爱 | 99人久久精品视频最新地址 | 伊人天堂网 | 少妇啪啪av入口 | 日本中文字幕网 | 成人一级电影在线观看 | 91精品在线观看视频 | 在线 高清 中文字幕 | 在线国产精品视频 | 国产中文字幕免费 | 国产小视频在线免费观看 | 久久国产午夜精品理论片最新版本 | 国产精品九九九九九九 | 成年人免费电影在线观看 | 成人午夜久久 | 国产精品久久久久一区二区三区共 | 91在线一区二区 | 麻豆传媒视频在线 | 国产一性一爱一乱一交 | 国产精品久久婷婷六月丁香 | 亚洲一区二区三区四区在线视频 | 国产精品va在线 | 欧美日韩中 | 九九免费在线观看视频 | 国产香蕉av | av中文字幕日韩 | 日本黄色大片儿 | 二区三区在线视频 | 99精品免费在线 | 欧美一级xxxx | 日韩国产精品毛片 | 91九色国产蝌蚪 | 一区二区在线不卡 | 在线日本看片免费人成视久网 | 亚洲精品中文字幕在线观看 | 2018好看的中文在线观看 | 日韩久久在线 | 国产精品九九热 | 中文字幕av全部资源www中文字幕在线观看 | 福利一区二区 | 91最新国产 | 日韩中文字幕免费电影 | 四虎在线视频 | 成人性生交大片免费观看网站 | 美女视频黄免费网站 | 久久久官网 | 亚洲视频2 | 日韩三级在线观看 | 四虎国产免费 | 国产精品1区2区在线观看 | 中文字幕免费国产精品 | 99精品偷拍视频一区二区三区 | 成人免费观看网站 | 中文字幕在线观看亚洲 | 天天操天天操一操 | 一级黄色电影网站 | 国产视频综合在线 | 亚洲最新av网站 | 欧美日比视频 | 久草在线综合网 | 亚洲精品乱码久久久久久蜜桃欧美 | 香蕉视频在线观看免费 | 波多野结衣在线视频一区 | 日日夜夜精品 | 亚洲a在线观看 | 国产精品激情偷乱一区二区∴ | 久久精品艹 | www.久久久com | 久久手机视频 | 日韩视频一区二区三区 | 国产最新网站 | 日产av在线播放 | 一区二区在线不卡 | 97超碰在线播放 | 亚洲欧洲精品一区二区 | av视屏在线播放 | 午夜在线观看影院 | 在线精品视频在线观看高清 | avove黑丝 | 韩国av免费 | 2018好看的中文在线观看 | 中文字幕在线观看视频一区二区三区 | 国产福利一区二区三区视频 | 婷婷精品在线 | av中文在线播放 | av在线免费网站 | 黄色app网站在线观看 | 91自拍视频在线观看 | 久久99精品久久久久久清纯直播 | 久久这里只有精品久久 | 狠狠做深爱婷婷综合一区 | 人人爽人人爽人人爽学生一级 | 欧美极品xxx | 五月天激情综合网 | 色视频网站在线 | 五月婷婷综合在线视频 | 亚洲国产成人精品久久 | av综合站 | 97人人爽| 在线视频婷婷 | www.97视频 | www.久久久久 | 最新超碰 | 成人免费在线看片 | 久久99精品久久久久久三级 | 日韩精品一区二区三区外面 | 97网在线观看 | 国产成人黄色 | 在线免费观看成人 | 日韩字幕| 国产精品第一 | 国产精品专区一 | 亚洲性xxxx | 日韩精品一区二区在线视频 | 精品久久久亚洲 | 精品久久久久久电影 | 99精品视频在线播放免费 | 一 级 黄 色 片免费看的 | 国产精品第十页 | 国产中文 | 亚洲理论在线观看 | av天天草| 亚洲 精品在线视频 | 亚洲精品午夜国产va久久成人 | 日韩色一区二区三区 | 91中文字幕在线 | 久久国产精彩视频 | 麻豆一区二区三区视频 | 最近免费观看的电影完整版 | 亚洲精欧美一区二区精品 | 国产原厂视频在线观看 | 91久久精品一区 | www.国产视频| 日韩色视频在线观看 | 久久久久久久久久久久久久电影 | 日本精品视频网站 | 亚洲精品自拍视频在线观看 | 91av在线不卡 | 国产成人精品午夜在线播放 | 久久久久久久久久久久电影 | 四虎成人在线 | 国产精品系列在线 | 五月天色综合 | 在线观看国产亚洲 | 久久视频在线视频 | av免费看在线 | 久久精品1区2区 | 三日本三级少妇三级99 | 日本中文字幕在线播放 | 国产成人亚洲在线观看 | 色视频在线 | 国产黄色精品在线观看 | 欧美亚洲国产精品久久高清浪潮 | 国产精品激情在线观看 | 久草视频中文 | 天天操天天干天天爽 | 五月婷婷丁香在线观看 | 免费视频久久 | 97成人精品视频在线播放 | 日韩精品一区二区三区免费观看视频 | a久久久久久 | 91亚洲影院 | 黄色成人av网址 | 在线观看一区 | 天天干天天玩天天操 | 成人黄大片视频在线观看 | 国产精品久久人 | 国语自产偷拍精品视频偷 | 成人免费观看网址 | 国内精品二区 | 国产亚洲精品久久久久久电影 | 欧美日韩二三区 | 99免费看片 | 亚洲视频,欧洲视频 | 成人在线黄色电影 | 成人免费在线视频观看 | 激情久久网 | av色综合| 亚洲资源在线 | www.午夜| 欧美精品久久久久 | 久久久久在线视频 | 91九色网站 | 国产婷婷 | 国产麻豆精品一区 | 国产区高清在线 | 国内精品久久久久久久影视麻豆 | 日韩不卡高清 | 天天干天天草 | av大全在线播放 | 亚洲日本va午夜在线电影 | 中文字幕 二区 | 麻豆综合网 | 最近免费中文视频 | 91精品国自产在线 | 国产精品成人自产拍在线观看 | 操操操人人 | 91久草视频| 久久综合网色—综合色88 | 亚洲国产美女精品久久久久∴ | 亚洲精品午夜久久久久久久久久久 | 久久草草热国产精品直播 | 国产日产精品久久久久快鸭 | 日韩高清av | 性日韩欧美在线视频 | 婷婷激情综合网 | 91热爆视频 | 国产麻豆视频 | 成人91免费视频 | 国产精品一区二区三区四区在线观看 | 色av资源网| 婷婷新五月 | 久久在线免费观看视频 | 午夜性生活 | 69精品人人人人 | 国产成人精品午夜在线播放 | 国产精品激情 | 97超碰在线久草超碰在线观看 | 国产一级二级在线观看 | 亚洲一区二区视频 | 日韩中文字幕在线看 | 高清不卡一区二区在线 | 国产成人三级在线 | 日韩精品在线视频免费观看 | 一区二区高清在线 | 日韩理论电影在线观看 | 精品1区2区| 免费午夜av | 又黄又爽的免费高潮视频 | 久久久黄视频 | 狠狠狠色| 91福利社区在线观看 | 久久免费看毛片 | 婷婷色吧 | 精品视频免费久久久看 | 99精品色| 亚洲区二区 | 免费福利视频网 | 久草视频2 | 国产成视频在线观看 | 久久不卡电影 | 日本视频不卡 | 99久久久久免费精品国产 | 黄色网址中文字幕 | 日韩免费成人 | 在线亚洲人成电影网站色www | 麻豆你懂的 | 亚洲精品高清视频在线观看 | 国产精品综合久久久久久 | 亚洲日韩中文字幕在线播放 | 国产中的精品av小宝探花 | 国产精品正在播放 | 久久高清毛片 | 久久久久高清 | 亚洲成a人片在线观看网站口工 | 国产高清中文字幕 | 婷婷综合影院 | 色小说av| 黄污网| 国产日韩精品在线 | 久久久蜜桃 | 伊人色播 | 啪啪动态视频 | av福利网址导航 | 亚洲天堂首页 | 人人爱人人做人人爽 | 九九涩涩av台湾日本热热 | 日韩大片在线免费观看 | 欧美日韩在线免费观看视频 | 日本三级大片 | 日韩在线视频看看 | 在线一区观看 | 日韩欧美在线一区 | 日本在线成人 | www.成人精品 | 久草视频在线看 | 日韩久久久久久久久 | 永久中文字幕 | 毛片99 | 狠狠的日日 | 精品国产123| .国产精品成人自产拍在线观看6 | 国语麻豆| 99热999| 日韩欧美精品一区二区三区经典 | 免费高清在线视频一区· | av在线播放中文字幕 | 午夜体验区 | 精品国产免费久久 | 在线免费精品视频 | 亚洲爽爽网 | 久久99精品国产麻豆宅宅 | 精品主播网红福利资源观看 | 天天舔天天射天天操 | 波多野结衣资源 | 免费黄色网止 | 韩国av免费在线 | 色综合天天色综合 | 久久在线精品视频 | 午夜视频播放 | 国产精品中文字幕av | av网站在线观看播放 | 探花视频在线观看免费 | 国产日韩欧美在线观看 | 午夜在线免费视频 | 亚洲精品视频中文字幕 | 波多野结衣最新 | 国产手机av在线 | 开心色停停 | 久久国产精品一区二区三区 | 99中文视频在线 | 亚洲精选国产 | 亚洲成人资源 | 女人18精品一区二区三区 | 又黄又爽又色无遮挡免费 | 久久精品日本啪啪涩涩 | 欧美一级小视频 | 国产精品区二区三区日本 | 国产.精品.日韩.另类.中文.在线.播放 | 九九欧美视频 | 国产综合小视频 | www.福利 | 五月婷婷在线播放 | 特级西西444www大胆高清无视频 | 天天综合网在线观看 | 友田真希av | 精品不卡av | 亚洲精品美女在线观看 | 免费大片av | 中文字幕在线不卡国产视频 | 97国产精品视频 | 国产成人精品一二三区 | 国产精品久久久久久久电影 | 国产亚洲精品久久久久久久久久久久 | 91麻豆精品国产91久久久无限制版 | 在线观看视频免费大全 | 又黄又刺激又爽的视频 | 奇米影音四色 | 婷婷国产精品 | 黄色国产在线 | 久久国产精品色婷婷 | 91精品在线视频 | 国产日韩欧美在线看 | 国产精品一区一区三区 | 亚洲国产精品小视频 | 婷婷网站天天婷婷网站 | 黄色特级片 | 色婷婷国产在线 | 黄色毛片在线观看 | 亚洲成人资源网 | 狠狠干天天操 | 二区在线播放 | 成人国产网址 | 亚洲精品h | 日韩精品一区二区三区中文字幕 | 日韩av电影网站在线观看 | 五月天婷亚洲天综合网鲁鲁鲁 | 国产精品无 | 天天干人人插 | 九九视频精品免费 | 久草在线免费播放 | 91污在线 | 成人在线免费看视频 | 久久久在线 | 人人爱天天操 | 在线国产视频一区 | 免费一级片久久 | 亚洲精品中文在线 | 国产免费一区二区三区最新 | 成人午夜电影在线 | 日韩av三区 | 日韩精品一二三 | 久久国产精品视频观看 | 精品久久久久久久久久久久久久久久 | 亚洲高清视频一区二区三区 | 怡红院av久久久久久久 | 亚洲精品字幕在线 | 九九免费观看视频 | 亚洲综合五月 | 成人精品一区二区三区电影免费 | 国产在线观看国语版免费 | 黄色软件在线观看 | 国产精品久久久久久久久久妇女 | 四虎国产永久在线精品 | 国产精品永久在线 | 午夜视频在线观看欧美 | 精品亚洲网 | www.伊人色.com| 精品在线看 | 久久久久久久久久久久久影院 | 欧美一区二区三区在线看 | 日韩精品一区二区三区高清免费 | 白丝av在线| 米奇狠狠狠888 | 麻豆国产精品一区二区三区 | 久久国产精品小视频 | 激情伊人五月天久久综合 | 人人操日日干 | 国产亚洲精品av | 操久 | av日韩国产 | 少妇高潮流白浆在线观看 | 久久久久久久网 | 手机看片午夜 | 欧美在线99| 九九热精品在线 | 黄污网站在线观看 | 亚洲综合国产精品 | 日韩色视频在线观看 | 又黄又爽的免费高潮视频 | 久久久久免费网 | 国产精品免费久久久久 | 色婷婷在线观看视频 | 天天色成人网 | 国产精品情侣视频 | 一区三区在线欧 | 精品播放 | 国产在线自| 久久伦理 | 国产自产在线视频 | 在线观看免费视频你懂的 | 亚洲国产高清在线观看视频 | 日韩高清免费无专码区 | 国产精品久久久久av福利动漫 | av电影 一区二区 | 久久电影中文字幕视频 | 麻豆一精品传二传媒短视频 | 亚洲免费a | 综合五月婷婷 | 色噜噜狠狠色综合中国 | 亚洲成av人片在线观看 | 亚洲 综合 国产 精品 | 久久成人一区二区 | 国产成人久 | 人人看人人爱 | 涩涩伊人 | 久久视频这里有久久精品视频11 | 黄色大片日本免费大片 | 国产精品久久久一区二区三区网站 | 国产视频在线免费 | 91在线观看欧美日韩 | 国产一区二区三区网站 | 色视频网站在线 | 国产一级免费在线 | 黄色精品一区二区 | 久久精品福利视频 | 人人看看人人 | 久久这里只有精品9 | 日韩欧美高清在线观看 | 香蕉97视频观看在线观看 | 日韩av伦理片 | 久久国产精品久久精品国产演员表 | 成人一区在线观看 | 国产精品一区二区三区久久 | 中文字幕乱在线伦视频中文字幕乱码在线 | av888.com| 毛片二区 | 国产亚洲精品久久久久久网站 | 中文字幕欧美三区 | 日本在线观看中文字幕无线观看 | 香蕉在线观看 | 一区二区三区手机在线观看 | 亚洲精品一区二区网址 | 国际精品久久久久 | 五月婷婷.com | 久久精品最新 | 天天天色综合a | 成人污视频在线观看 | 国产一区免费视频 | 国产精品自产拍 | 国产高清视频在线播放一区 | 黄色一级影院 | 日韩激情影院 | av在线h| 久久精品视频网站 | 超碰在线最新地址 | 黄色在线观看污 | 天天爱天天草 | 伊人久久国产精品 | 狠狠躁日日躁夜夜躁av | 国产成人av一区二区三区在线观看 | 五月天综合色 | 91精品视频在线观看免费 | 欧美日韩高清免费 | 91桃色在线播放 | 少妇bbbb揉bbbb日本 | 国产香蕉av | 免费在线观看不卡av | 中文字幕在线免费观看视频 | 亚洲aⅴ在线观看 | 成人国产在线 | 青青河边草观看完整版高清 | 国产一区免费在线 | 天天躁日日躁狠狠躁av中文 | 中文字幕一区二区三区久久 | 高清av影院 | 免费欧美高清视频 | 狠狠干天天 | 91在线免费观看网站 | 97偷拍在线视频 | 手机在线看a | 超碰97人人在线 | 国产乱码精品一区二区三区介绍 | 中文字幕中文字幕 | 午夜精品视频一区二区三区在线看 | 亚洲欧美日本一区二区三区 | 国产v在线观看 | 久久精品网站免费观看 | 在线看欧美 | 日韩欧美一区二区不卡 | 亚洲国产播放 | 久草观看视频 | 午夜天天操| 国产中文欧美日韩在线 | av在线播放观看 | 国产在线看 | 麻豆视频在线观看免费 | 精品久久久久久亚洲 | 黄网站大全| 婷婷在线综合 | 四虎5151久久欧美毛片 | 色伊人网 | 日本成人a| 久热免费在线观看 | 欧美日韩国产三级 | 天天操天天弄 | 91精品办公室少妇高潮对白 | 亚洲波多野结衣 | 精品国产诱惑 | 成人夜晚看av | 国产一区二区不卡视频 | 中文字幕第一页在线 | www激情com| 欧美日韩一区二区视频在线观看 | 中文成人字幕 | 久久久精品综合 | 亚洲国产精品视频 | 日韩中文字幕视频在线 | 婷婷六月天天 | 国产成人精品免高潮在线观看 | a在线观看国产 | 久艹视频免费观看 | www.少妇| 97精品国产 | 国产高清在线精品 | 91尤物国产尤物福利在线播放 | av在线电影网站 | 欧美久久久一区二区三区 | 91理论片午午伦夜理片久久 | 99在线免费视频 | www.亚洲黄色 | 国产精品欧美久久久久三级 | av电影免费| 欧美在线视频免费 | 91在线精品一区二区 | 日韩在线不卡视频 | 日韩欧美久久 | av一区二区在线观看中文字幕 | 久久久黄视频 | 久久手机免费视频 | 亚洲精品麻豆 | 亚洲国产精品500在线观看 | 久久久久久久久久久网站 | 在线观看中文字幕亚洲 | 99久久精品国产一区 | 亚州国产精品 | 精品在线你懂的 | 国产午夜剧场 | 91在线网址 | 日本在线观看黄色 | 亚洲高清视频在线观看免费 | 婷婷视频在线 | 韩国av在线 | 91av视频免费观看 | 亚洲激情电影在线 | 成人午夜电影网站 | 狠狠狠狠狠狠狠狠 | 亚洲精品中文字幕在线 | 成年人视频在线免费播放 | 久草在线电影网 | 国产亚洲片 | 色午夜影院| 色婷婷激情综合 | 久草网视频在线观看 | 99视频这里只有 | 国产资源在线播放 | 日韩高清免费在线 | 最新极品jizzhd欧美 | 99热高清 | 亚洲精品在线资源 | 久久综合操 | 91精品国产91久久久久福利 | 夜夜天天干 | 国产精久久久 | 免费在线观看亚洲视频 | 欧美视频在线观看免费网址 | 二区中文字幕 | 精品亚洲欧美一区 | 国产97在线播放 | 国产精品久久久久影院日本 | 日本中文字幕高清 | 97操碰| 日韩在线视频一区 | 国产精品免费观看视频 | 欧美黑人巨大xxxxx | 国产精品中文字幕av | 国产精品剧情在线亚洲 | 久久看片网 | 国产91区 | 亚洲激情中文 | 在线 欧美 日韩 | 91免费视频网站在线观看 | 国产日韩在线播放 | 久久久久女人精品毛片九一 | 国产成人综合精品 | 天天干,天天射,天天操,天天摸 | 麻豆一精品传二传媒短视频 | 91成人在线看 | www.狠狠插.com | 日韩av成人 | 久久久久亚洲精品 | 国产精品国产自产拍高清av | 91视频国产免费 | 视频在线99 | www.在线观看av | 色国产精品 | 亚洲高清视频在线观看免费 | 久草资源在线观看 | 国产高清视频色在线www | 日韩精品大片 | 中国一级片在线观看 | 午夜在线国产 | 激情综合色综合久久综合 | 欧美日韩高清在线一区 | 国产精品九九久久99视频 | 国产精品免费视频观看 | 天天色天天操综合 | 欧美精品在线视频观看 | 国产高清一 | 黄色免费观看视频 | 国产在线v| 99精彩视频在线观看免费 | 一级片在线 | 狠狠干在线播放 | 日韩视频一区二区三区在线播放免费观看 | 国产手机视频在线播放 | 欧美日韩有码 | 成人国产精品入口 | 国产成人专区 | 欧美日产一区 | 日本久久免费电影 | 国产欧美在线一区二区三区 | 国产亚洲精品久久19p | 日韩在线免费 | 91精品推荐| 国产人成在线视频 | 91丨九色丨国产在线 | 成人a在线观看高清电影 | 伊人五月婷 | 欧洲成人av | 日本韩国精品在线 | 国产午夜在线 | 国产主播大尺度精品福利免费 | 一区二区视频网站 | 香蕉视频在线播放 | 日韩久久久久久久久久久久 | 337p日本欧洲亚洲大胆裸体艺术 | 91精品国产麻豆国产自产影视 | 久久久久久久久久久久国产精品 | 日韩一二区在线 | av免费在线观看1 | 人人插超碰 | 在线亚洲成人 | 亚洲aⅴ一区二区三区 | 欧美精品九九99久久 | 国产精品21区 | 国产精品久久久久久久妇 | 91av中文字幕 | 国际精品久久久 | 国产三级精品三级在线观看 | 国产精品99久久久久的智能播放 | 黄视频色网站 | 久久久久久久av麻豆果冻 | 国产高清在线视频 | 国产玖玖视频 | av一区二区三区在线 | 亚洲人片在线观看 | 亚洲综合国产精品 | 免费av高清 | 久久国产精品99国产 | 1024手机基地在线观看 | 久久久精品久久 | 国产精品毛片一区二区在线看 | 久久免费观看少妇a级毛片 久久久久成人免费 | 色综合色综合久久综合频道88 | 亚洲国产成人精品久久 | 亚洲一区二区三区毛片 | 日韩精品无码一区二区三区 | 成人黄色免费在线观看 | 精品欧美在线视频 | 久久免费99 | 超碰免费97 | www久草 | 中文字幕欧美日韩va免费视频 | 亚洲国产精品影院 | 99热只有精品在线观看 | 狠狠色丁香久久婷婷综合丁香 | 国产麻豆果冻传媒在线观看 | 亚洲乱码精品久久久久 | 五月激情丁香图片 | 6080yy午夜一二三区久久 | 手机看片99 | 夜夜视频欧洲 | 视频1区2区 | 国内精品美女在线观看 | 亚洲精品在线一区二区三区 | 亚洲人xxx| 欧美日韩中文在线视频 | 欧美吞精| 日韩免费一级a毛片在线播放一级 | 91人人人| 四虎永久免费在线观看 | 五月天久久精品 | 四虎永久视频 | 免费黄色激情视频 | 全久久久久久久久久久电影 | 91九色蝌蚪在线 | 欧美性生交大片免网 | 成年在线观看 | 免费在线观看一区 | 国产精品va最新国产精品视频 | 亚洲精品免费在线播放 | 一二三精品视频 | 欧美日韩大片在线观看 | 成人一区在线观看 | 日韩av黄 | 99久久激情 | 日韩伦理片一区二区三区 | 国产成人免费网站 | 黄色av播放| 欧美日韩中文字幕综合视频 | 国产91亚洲精品 | 国产在线精品观看 | 观看免费av | 九九热1 | 国产精品 中文在线 | 国产精品免费麻豆入口 | 久久精品日本啪啪涩涩 | 亚洲综合精品视频 | 美女黄频在线观看 | 亚洲 欧美日韩 国产 中文 | 亚洲干视频在线观看 | 91av片| 毛片视频电影 | 九九九热精品 | 欧美一区在线看 | 麻豆91小视频 | 国产不卡高清 | 成人中文字幕在线观看 | 久久久久国产视频 | 欧美综合干 | 久久精品首页 | 亚洲午夜在线视频 | 色吊丝在线永久观看最新版本 | 欧美作爱视频 | 国产乱码精品一区二区蜜臀 | 国产视频手机在线 | 精品国产乱码久久久久久1区二区 |