@@ -79,6 +79,43 @@ function construct_my_address_space(server) {
7979 createOpcuaVariable ( 'Recipe[1]' , 'MI5.Recipe[1].Description' , 'String' , 'Recipe 1 description' ) ;
8080 createOpcuaVariable ( 'Recipe[1]' , 'MI5.Recipe[1].Name' , 'String' , 'XTS two Round' ) ;
8181 createOpcuaVariable ( 'Recipe[1]' , 'MI5.Recipe[1].RecipeID' , 'Int16' , 10002 ) ;
82+
83+ // Order-tool
84+ server . engine . addFolder ( "Mi5" , { browseName : "Order" } ) ;
85+ server . engine . addFolder ( "Order" , { browseName : "Order[0]" } ) ;
86+ var localPending = false ;
87+ function pendingSet ( variant ) {
88+ localPending = variant . value ; // boolean cast
89+ // Reset false after it has been set to true
90+ if ( variant . value == true ) {
91+ setTimeout ( function ( ) {
92+ localPending = false ;
93+ } , 1000 ) ;
94+ }
95+ return opcua . StatusCodes . Good ;
96+ }
97+ function pendingGet ( ) {
98+ return new opcua . Variant ( { dataType : opcua . DataType [ 'Boolean' ] , value : localPending } ) ;
99+ }
100+ createOpcuaVariable ( 'Order[0]' , 'MI5.Order[0].Pending' , 'Boolean' , false , pendingSet , pendingGet ) ;
101+ createOpcuaVariable ( 'Order[0]' , 'MI5.Order[0].Locked' , 'Boolean' , false ) ;
102+ createOpcuaVariable ( 'Order[0]' , 'MI5.Order[0].Name' , 'String' , '' ) ;
103+ createOpcuaVariable ( 'Order[0]' , 'MI5.Order[0].RecipeID' , 'Int16' , 0 ) ;
104+ createOpcuaVariable ( 'Order[0]' , 'MI5.Order[0].TaskID' , 'Int16' , 0 ) ;
105+ server . engine . addFolder ( "Order[0]" , { browseName : "UserParameter" } ) ;
106+ server . engine . addFolder ( "UserParameter" , { browseName : "UserParameter[0]" } ) ;
107+ createOpcuaVariable ( 'UserParameter[0]' , 'MI5.Order[0].UserParameter[0].Value' , 'Int16' , 0 ) ;
108+ server . engine . addFolder ( "UserParameter" , { browseName : "UserParameter[1]" } ) ;
109+ createOpcuaVariable ( 'UserParameter[1]' , 'MI5.Order[0].UserParameter[1].Value' , 'Int16' , 0 ) ;
110+ server . engine . addFolder ( "UserParameter" , { browseName : "UserParameter[2]" } ) ;
111+ createOpcuaVariable ( 'UserParameter[2]' , 'MI5.Order[0].UserParameter[2].Value' , 'Int16' , 0 ) ;
112+ server . engine . addFolder ( "UserParameter" , { browseName : "UserParameter[3]" } ) ;
113+ createOpcuaVariable ( 'UserParameter[3]' , 'MI5.Order[0].UserParameter[3].Value' , 'Int16' , 0 ) ;
114+ server . engine . addFolder ( "UserParameter" , { browseName : "UserParameter[4]" } ) ;
115+ createOpcuaVariable ( 'UserParameter[4]' , 'MI5.Order[0].UserParameter[4].Value' , 'Int16' , 0 ) ;
116+ server . engine . addFolder ( "UserParameter" , { browseName : "UserParameter[5]" } ) ;
117+ createOpcuaVariable ( 'UserParameter[5]' , 'MI5.Order[0].UserParameter[5].Value' , 'Int16' , 0 ) ;
118+
82119}
83120
84121/**
@@ -183,7 +220,7 @@ var localVars = [];
183220 * @param type
184221 * @param value
185222 */
186- function createOpcuaVariable ( parent , nodeId , type , value ) {
223+ function createOpcuaVariable ( parent , nodeId , type , value , setter , getter ) {
187224 var helper = require ( './../../models/opc-helper.js' ) . helper ;
188225
189226 nodeId = helper . checkAndCorrectNodeId ( nodeId ) ;
@@ -193,6 +230,27 @@ function createOpcuaVariable(parent, nodeId, type, value){
193230 var currentElement = localVars . length ;
194231 localVars [ currentElement ] = value ;
195232
233+ // functions
234+ function defSetter ( variant ) {
235+ if ( type == 'Double' ) {
236+ localVars [ currentElement ] = parseFloat ( variant . value ) ;
237+ } else if ( type == 'Int16' || type == 'UInt16' ) {
238+ localVars [ currentElement ] = parseInt ( variant . value , 10 ) ;
239+ } else { // e.g. String, Boolean
240+ localVars [ currentElement ] = variant . value ;
241+ }
242+ return opcua . StatusCodes . Good ;
243+ }
244+ function defGetter ( ) {
245+ return new opcua . Variant ( { dataType : opcua . DataType [ type ] , value : localVars [ currentElement ] } ) ;
246+ }
247+ if ( typeof setter == 'function' ) {
248+ defSetter = setter ;
249+ }
250+ if ( typeof getter == 'function' ) {
251+ defGetter = getter ;
252+ }
253+
196254 // generate random string for adding to server object
197255 var randomString = createVariableName ( ) ;
198256 try {
@@ -201,19 +259,8 @@ function createOpcuaVariable(parent, nodeId, type, value){
201259 browseName : browseName ,
202260 dataType : type ,
203261 value : {
204- get : function ( ) {
205- return new opcua . Variant ( { dataType : opcua . DataType [ type ] , value : localVars [ currentElement ] } ) ;
206- } ,
207- set : function ( variant ) {
208- if ( type == 'Double' ) {
209- localVars [ currentElement ] = parseFloat ( variant . value ) ;
210- } else if ( type == 'Int16' || type == 'UInt16' ) {
211- localVars [ currentElement ] = parseInt ( variant . value , 10 ) ;
212- } else { // e.g. String, Boolean
213- localVars [ currentElement ] = variant . value ;
214- }
215- return opcua . StatusCodes . Good ;
216- }
262+ get : defGetter ,
263+ set : defSetter
217264 }
218265 } ;
219266 server [ randomString ] = server . engine . addVariable ( parent , options ) ;
0 commit comments