0
0

More than 3 years have passed since last update.

Open62541のチュートリアルを動かしてみる

Posted at

Open62541 Tutorial

4.3 Valiablesの追加

main処理とツリーの表示


105 int main( void )
106 {
107   signal( SIGINT, stopHandler );
108   signal( SIGTERM, stopHandler );
109
110   UA_Server *server = UA_Server_new();
111   UA_ServerConfig_setDefault( UA_Server_getConfig( server ) );
112   UA_ServerConfig* config = UA_Server_getConfig( server );
113   config->verifyRequestTimestamp = UA_RULEHANDLING_ACCEPT;
114
115   addVariable( server );
116   addMatrixVariable( server );
117
118 //  writeVariable( server );
119 //  writeWrongVariable( server );
120
121   UA_StatusCode retval = UA_Server_run( server, &running );
122
123
124   UA_Server_delete( server );
125
126   return retval == UA_STATUSCODE_GOOD ? EXIT_SUCCESS : EXIT_FAILURE;
127 }

t431png.png

AddVariable関数


  8 static void addVariable( UA_Server *server )
  9 {
 10   /* Define the attribute of the myInteger variable node */
 11   UA_VariableAttributes attr = UA_VariableAttributes_default;
 12   UA_Int32 myInteger = 42;
 13   UA_Variant_setScalar( &attr.value, &myInteger, &UA_TYPES[UA_TYPES_INT32] );
 14   attr.description = UA_LOCALIZEDTEXT( "en-US", "the answer" );
 15   attr.displayName = UA_LOCALIZEDTEXT( "en-US", "the answer" );
 16   attr.dataType = UA_TYPES[UA_TYPES_INT32].typeId;
 17   attr.accessLevel = UA_ACCESSLEVELMASK_READ | UA_ACCESSLEVELMASK_WRITE;
 18
 19   /* Add the variable node to the information model */
 20   UA_NodeId myIntegerNodeId = UA_NODEID_STRING( 1, "the.answer" );
 21   UA_QualifiedName myIntegerName = UA_QUALIFIEDNAME( 1, "the answer" );
 22   UA_NodeId parentNodeId = UA_NODEID_NUMERIC( 0, UA_NS0ID_OBJECTSFOLDER );
 23   UA_NodeId parentReferenceNodeId = UA_NODEID_NUMERIC( 0, UA_NS0ID_ORGANIZES );
 24   UA_Server_addVariableNode( server, myIntegerNodeId, parentNodeId, parentReferenceNodeId, myIntegerName, UA_NODEI    D_NUMERIC( 0, UA_NS0ID_BASEDATAVARIABLETYPE ), attr, NULL, NULL );
 25 }

t433.png

addMatrixVariable


 27 static void addMatrixVariable( UA_Server *server )
 28 {
 29   UA_VariableAttributes attr = UA_VariableAttributes_default;
 30   attr.displayName = UA_LOCALIZEDTEXT( "en-US", "Double Matrix" );
 31   attr.accessLevel = UA_ACCESSLEVELMASK_READ | UA_ACCESSLEVELMASK_WRITE;
 32
 33   /* Set the variable value constraints */
 34   attr.dataType = UA_TYPES[UA_TYPES_DOUBLE].typeId;
 35   attr.valueRank = UA_VALUERANK_TWO_DIMENSIONS;
 36   UA_UInt32 arrayDims[2] = { 2, 2 };
 37   attr.arrayDimensions = arrayDims;
 38   attr.arrayDimensionsSize = 2;
 39
 40   /* Set the value. The array dimensions need to be the same for the value. */
 41   UA_Double zero[4] = { 0.0, 0.0, 0.0, 0.0 };
 42   UA_Variant_setArray( &attr.value, zero, 4, &UA_TYPES[UA_TYPES_DOUBLE] );
 43   attr.value.arrayDimensions = arrayDims;
 44   attr.value.arrayDimensionsSize = 2;
 45
 46   UA_NodeId myIntegerNodeId = UA_NODEID_STRING( 1, "double.matrix" );
 47   UA_QualifiedName myIntegerName = UA_QUALIFIEDNAME( 1, "doouble matrix" );
 48   UA_NodeId parentNodeId = UA_NODEID_NUMERIC( 0, UA_NS0ID_OBJECTSFOLDER );
 49   UA_NodeId parentReferenceNodeId = UA_NODEID_NUMERIC( 0, UA_NS0ID_ORGANIZES );
 50   UA_Server_addVariableNode( server, myIntegerNodeId, parentNodeId, parentReferenceNodeId, myIntegerName, UA_NODEI    D_NUMERIC( 0, UA_NS0ID_BASEDATAVARIABLETYPE ), attr, NULL, NULL );
 51 }

t432.png

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0