This is a fork of open62541, https://github.com/open62541/open62541

FlorianPalm 738b636944 fixed wrong function def in client před 10 roky
cmake d5cc1d3bb9 async networking with libuv před 10 roky
doc 8ee327ac44 add introduction to UA to documentation. reset doxygen style until a more complete reskin is ready před 10 roky
examples 738b636944 fixed wrong function def in client před 10 roky
include bda9cd58f5 update concurrent nodestore před 10 roky
ports 80f57754c7 fixing patch před 10 roky
src 56bdc25ad2 adding new line před 10 roky
tests 44a443b54d fixing the handling of extension object, relates to #141 před 10 roky
tools bda9cd58f5 update concurrent nodestore před 10 roky
.gitignore 9f6a679802 updated gitignore před 10 roky
.travis.yml 241c7f5ff3 update travis před 10 roky
AUTHORS c495d9b248 Update AUTHORS před 10 roky
CMakeLists.txt 72970f0627 fix multithreaded build of the client před 10 roky
LICENSE 9310d323c9 changed .gitignore again před 11 roky
LICENSE-CC0 f8265df738 clean up include structure před 10 roky
README.md 8ee327ac44 add introduction to UA to documentation. reset doxygen style until a more complete reskin is ready před 10 roky

README.md

open62541

open62541 (http://open62541.org) is an open-source implementation of OPC UA (OPC Unified Architecture) licensed under LGPL + static linking exception. The open62541 library can be used to build a dedicated OPC UA server or to integrate OPC UA-based communication into existing applications.

The project is in an early stage but already usable. See below for a simple server implemenation that provides access to a single variable.

Ohloh Project Status Build Status Coverage Status Coverity Scan Build Status

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

If open62541 is not fit for your needs, have a look at some other open source OPC UA implementations. Or even better, help us improving open62541 by sending bug reports/bugfixes on github or the mailing list!

Example Server Implementation

#include <stdio.h>
#include <signal.h>

// provided by the open62541 lib
#include "ua_server.h"
#include "ua_namespace_0.h"

// provided by the user, implementations available in the /examples folder
#include "logger_stdout.h"
#include "networklayer_tcp.h"

UA_Boolean running = UA_TRUE;
void stopHandler(int sign) {
	running = UA_FALSE;
}

void serverCallback(UA_Server *server) {
    // add your maintenance functionality here
    printf("does whatever servers do\n");
}

int main(int argc, char** argv) {
	signal(SIGINT, stopHandler); /* catches ctrl-c */

    /* init the server */
	#define PORT 16664
	UA_String endpointUrl;
	UA_String_copyprintf("opc.tcp://127.0.0.1:%i", &endpointUrl, PORT);
	UA_Server *server = UA_Server_new(&endpointUrl, NULL);

    /* add a variable node */
    UA_Int32 myInteger = 42;
    UA_String myIntegerName;
    UA_STRING_STATIC(myIntegerName, "The Answer");
    UA_Server_addScalarVariableNode(server,
                 /* browse name, the value and the datatype's vtable */
                 &myIntegerName, (void*)&myInteger, &UA_TYPES[UA_INT32],
                 /* the parent node where the variable shall be attached */
                 &UA_NODEIDS[UA_OBJECTSFOLDER],
                 /* the (hierarchical) referencetype from the parent */
                 &UA_NODEIDS[UA_HASCOMPONENT]);

    /* attach a network layer */
	NetworklayerTCP* nl = NetworklayerTCP_new(UA_ConnectionConfig_standard, PORT);
	printf("Server started, connect to to opc.tcp://127.0.0.1:%i\n", PORT);

    /* run the server loop */
	struct timeval callback_interval = {1, 0}; // 1 second
	NetworkLayerTCP_run(nl, server, callback_interval, serverCallback, &running);
    
    /* clean up */
	NetworklayerTCP_delete(nl);
	UA_Server_delete(server);
    UA_String_deleteMembers(&endpointUrl);
	return 0;
}