open62541-master
所属分类:嵌入式Linux
开发工具:Unix_Linux
文件大小:558KB
下载次数:37
上传日期:2017-04-12 21:25:25
上 传 者:
zsybj
说明: OPC UA MASTER 协议栈,测试可用
(OPC UA protocol stack)
文件列表:
.travis.yml (2699, 2015-11-26)
AUTHORS (327, 2015-11-26)
CMakeLists.txt (26156, 2015-11-26)
LICENSE (8477, 2015-11-26)
LICENSE-CC0 (6535, 2015-11-26)
appveyor.yml (1497, 2015-11-26)
cmake (0, 2015-11-26)
cmake\FindCheck.cmake (1748, 2015-11-26)
cmake\FindSphinx.cmake (286, 2015-11-26)
cmake\Toolchain-gcc-m32.cmake (175, 2015-11-26)
cmake\Toolchain-mingw32.cmake (2773, 2015-11-26)
cmake\Toolchain-mingw64.cmake (1797, 2015-11-26)
cmake\Toolchain-rpi.cmake (554, 2015-11-26)
cmake\Toolchain-rpi64.cmake (532, 2015-11-26)
deps (0, 2015-11-26)
deps\libc_string.c (831, 2015-11-26)
deps\pcg_basic.c (3744, 2015-11-26)
deps\pcg_basic.h (2520, 2015-11-26)
deps\queue.h (22332, 2015-11-26)
doc (0, 2015-11-26)
doc\Doxyfile.in (101249, 2015-11-26)
doc\DoxygenLayout.xml (6085, 2015-11-26)
doc\building.rst (5488, 2015-11-26)
doc\conf.py (9399, 2015-11-26)
doc\datatypes.rst (5415, 2015-11-26)
doc\in_a_nutshell.rst (7022, 2015-11-26)
doc\index.rst (1231, 2015-11-26)
doc\mainpage.dox (5959, 2015-11-26)
doc\open62541.png (19648, 2015-11-26)
doc\open62541_html.png (4900, 2015-11-26)
doc\style (0, 2015-11-26)
doc\style\doxygen.css (105635, 2015-11-26)
doc\style\footer.html (639, 2015-11-26)
doc\style\header.html (876, 2015-11-26)
doc\style\jquery-1.11.1.min.js (95786, 2015-11-26)
doc\style\load-style.js (2195, 2015-11-26)
doc\tutorial_client_firstSteps.rst (10744, 2015-11-26)
... ...
open62541
=========
open62541 (http://open62541.org) is an open source and free implementation of OPC UA (OPC Unified Architecture). open62541 is a C-based library that contains all the necessary tools to set up a dedicated OPC UA server, to integrate OPC UA-based communication into existing applications (linking with C++ projects [is possible](examples/server.cpp)), or to create an OPC UA client. The library is distributed as a single pair of [header](https://github.com/acplt/open62541/releases/download/v0.1.1/open62541.h) and [source](https://github.com/acplt/open62541/releases/download/v0.1.1/open62541.c) files, that can be easily dropped into your project. An example server and client implementation can be found in the [/examples](examples/) directory or further down on this page.
open62541 is licensed under the LGPL + static linking exception. That means **open62541 can be freely used also in commercial projects**, although changes to the open62541 library itself need to be released under the same license. The server and client implementations in the [/examples](examples/) directory are in the public domain (CC0 license). They can be used under any license and changes don't have to be published.
[![Ohloh Project Status](https://www.ohloh.net/p/open62541/widgets/project_thin_badge.gif)](https://www.ohloh.net/p/open62541)
[![Build Status](https://travis-ci.org/acplt/open62541.png?branch=master)](https://travis-ci.org/acplt/open62541)
[![MSVS build status](https://ci.appveyor.com/api/projects/status/w2geggs5s28gfu6t/branch/master?svg=true)](https://ci.appveyor.com/project/Stasik0/open62541/branch/master)
[![Coverage Status](https://coveralls.io/repos/acplt/open62541/badge.png?branch=master)](https://coveralls.io/r/acplt/open62541?branch=master)
[![Coverity Scan Build Status](https://scan.coverity.com/projects/18***/badge.svg)](https://scan.coverity.com/projects/18***)
### Documentation
A general introduction to OPC UA and the open62541 documentation can be found at http://open62541.org/doc.
Build instruction are here: https://github.com/acplt/open62541/wiki/Building-open62541.
For discussion and help, you can use
- the [mailing list](https://groups.google.com/d/forum/open62541)
- our [IRC channel](http://webchat.freenode.net/?channels=%23open62541)
- the [bugtracker](https://github.com/acplt/open62541/issues)
Automated builds of 50 last single-file distributions are available [here](http://open62541.org/releases).
Automatically compiled MSVC binaries are available [here](https://ci.appveyor.com/project/Stasik0/open62541/build/artifacts).
### Contribute to open62541
As an open source project, we invite new contributors to help improving open62541. If you are a developer, your bugfixes and new features are very welcome. Note that there are ways to contribute even without deep knowledge of the project or the UA standard:
- [Report bugs](https://github.com/acplt/open62541/issues)
- Improve the [documentation for 0.1](http://open62541.org/doc) and [documentation for 0.2](http://open62541.org/doc/sphinx)
- Work on issues marked as "[easy hacks](https://github.com/acplt/open62541/labels/easy%20hack)"
### Example Server Implementation
Compile the examples with the single file distribution `open62541.h` and `open62541.c` from the latest [release](https://github.com/acplt/open62541/releases).
With the GCC compiler, just run ```gcc -std=c99 open62541.c -o server```.
```c
#include
#include "open62541.h"
#define WORKER_THREADS 2 /* if multithreading is enabled */
#define PORT 166***
UA_Boolean running = UA_TRUE;
void signalHandler(int sign) {
running = UA_FALSE;
}
int main(int argc, char** argv)
{
/* catch ctrl-c */
signal(SIGINT, signalHandler);
/* init the server */
UA_Server *server = UA_Server_new(UA_ServerConfig_standard);
UA_Server_setLogger(server, Logger_Stdout_new());
UA_Server_addNetworkLayer(server,
ServerNetworkLayerTCP_new(UA_ConnectionConfig_standard, PORT));
/* add a variable node */
UA_Variant *myIntegerVariant = UA_Variant_new();
UA_Int32 myInteger = 42;
UA_Variant_setScalarCopy(myIntegerVariant, &myInteger, &UA_TYPES[UA_TYPES_INT32]);
UA_QualifiedName myIntegerName = UA_QUALIFIEDNAME(1, "the answer");
UA_LocalizedText myIntegerBrowseName = UA_LOCALIZEDTEXT("en_US","the answer");
UA_NodeId myIntegerNodeId = UA_NODEID_STRING(1, "the.answer");
UA_NodeId parentNodeId = UA_NODEID_NUMERIC(0, UA_NS0ID_OBJECTSFOLDER);
UA_NodeId parentReferenceNodeId = UA_NODEID_NUMERIC(0, UA_NS0ID_ORGANIZES);
UA_Server_addVariableNode(server, myIntegerNodeId, myIntegerName, myIntegerBrowseName, myIntegerBrowseName,
0, 0, parentNodeId, parentReferenceNodeId, myIntegerVariant, NULL);
/* run the server loop */
UA_StatusCode retval = UA_Server_run(server, WORKER_THREADS, &running);
UA_Server_delete(server);
return retval;
}
```
### Example Client Implementation
```c
#include
#include "open62541.h"
int main(int argc, char *argv[])
{
UA_Client *client = UA_Client_new(UA_ClientConfig_standard, Logger_Stdout_new());
UA_StatusCode retval = UA_Client_connect(client, ClientNetworkLayerTCP_connect,
"opc.tcp://localhost:166***");
if(retval != UA_STATUSCODE_GOOD) {
UA_Client_delete(client);
return retval;
}
/* Read a node's value-attribute */
UA_ReadRequest req;
UA_ReadRequest_init(&req);
req.nodesToRead = UA_ReadValueId_new();
req.nodesToReadSize = 1;
/* copy the nodeid-string to the heap (deleted with the req) */
req.nodesToRead[0].nodeId = UA_NODEID_STRING_ALLOC(1, "the.answer");
req.nodesToRead[0].attributeId = UA_ATTRIBUTEID_VALUE;
UA_ReadResponse resp = UA_Client_read(client, &req);
if(resp.responseHeader.serviceResult == UA_STATUSCODE_GOOD &&
resp.resultsSize > 0 && resp.results[0].hasValue &&
UA_Variant_isScalar(&resp.results[0].value) &&
resp.results[0].value.type == &UA_TYPES[UA_TYPES_INT32]) {
UA_Int32 *value = (UA_Int32*)resp.results[0].value.data;
printf("the value is: %i\n", *value);
}
UA_ReadRequest_deleteMembers(&req);
UA_ReadResponse_deleteMembers(&resp);
UA_Client_disconnect(client);
UA_Client_delete(client);
return UA_STATUSCODE_GOOD;
}
```
近期下载者:
相关文件:
收藏者: