UNPKG

node-red-contrib-opcua-server

Version:

Node-RED contribution nodes with next generation OPC UA in a compact and less dependencies package.

50 lines (49 loc) 7.58 kB
[ { "id": "9d10f83b.2ea49", "type": "tab", "label": "Compact Server", "disabled": false, "info": "" }, { "id": "4da8dd81.76c12c", "type": "opcua-compact-server", "z": "9d10f83b.2ea49", "port": "54855", "endpoint": "", "productUri": "", "acceptExternalCommands": true, "maxAllowedSessionNumber": "10", "maxConnectionsPerEndpoint": "10", "maxAllowedSubscriptionNumber": "100", "alternateHostname": "", "name": "", "showStatusActivities": false, "showErrors": true, "allowAnonymous": true, "individualCerts": false, "isAuditing": false, "serverDiscovery": true, "users": [], "xmlsetsOPCUA": [], "publicCertificateFile": "", "privateCertificateFile": "", "registerServerMethod": 3, "discoveryServerEndpointUrl": "", "capabilitiesForMDNS": "", "maxNodesPerRead": 1000, "maxNodesPerWrite": 1000, "maxNodesPerHistoryReadData": 100, "maxNodesPerBrowse": 3000, "maxBrowseContinuationPoints": "", "maxHistoryContinuationPoints": "", "delayToInit": 1000, "delayToClose": "200", "serverShutdownTimeout": "100", "addressSpaceScript": "function constructAlarmAddressSpace(server, addressSpace, eventObjects, done) {\n // server = the created node-opcua server\n // addressSpace = address space of the node-opcua server\n // eventObjects = add event variables here to hold them in memory from this script\n\n // internal sandbox objects are:\n // node = the compact server node,\n // coreServer = core compact server object for debug and access to NodeOPCUA\n // this.sandboxNodeContext = node context node-red\n // this.sandboxFlowContext = flow context node-red\n // this.sandboxGlobalContext = global context node-red\n // this.sandboxEnv = env variables\n // timeout and interval functions as expected from nodejs\n\n const opcua = coreServer.choreCompact.opcua;\n const rootFolder = addressSpace.findNode(\"RootFolder\");\n\n /*\n * BrowseName AnalyserDeviceStateMachineType\n * Subtype of the FiniteStateMachineType defined in [UA Part 5]\n * IsAbstract False\n * References NodeClass BrowseName DataType TypeDefinition ModellingRule\n * HasComponent Object Powerup InitialStateType Mandatory\n * HasComponent Object Operating StateType Mandatory\n * HasComponent Object Local StateType Mandatory\n * HasComponent Object Maintenance StateType Mandatory\n * HasComponent Object Shutdown StateType Mandatory\n * HasComponent Object PowerupToOperatingTransition TransitionType Mandatory\n * HasComponent Object OperatingToLocalTransition TransitionType Mandatory\n * HasComponent Object OperatingToMaintenanceTransition TransitionType Mandatory\n * HasComponent Object LocalToOperatingTransition TransitionType Mandatory\n * HasComponent Object LocalToMaintenanceTransition TransitionType Mandatory\n * HasComponent Object MaintenanceToOperatingTransition TransitionType Mandatory\n * HasComponent Object MaintenanceToLocalTransition TransitionType Mandatory\n * HasComponent Object OperatingToShutdownTransition TransitionType Mandatory\n * HasComponent Object LocalToShutdownTransition TransitionType Mandatory\n * HasComponent Object MaintenanceToShutdownTransition TransitionType Mandatory\n */\n\n const namespace = addressSpace.getOwnNamespace();\n\n const myFiniteStateMachine = namespace.addObjectType({\n \"browseName\": \"MyFiniteStateMachine\",\n \"subtypeOf\": \"FiniteStateMachineType\"\n });\n\n // The AnalyserDevice is in its power-up sequence and cannot perform any other task.\n namespace.addState(myFiniteStateMachine, \"Powerup\", 100, true);\n\n // The AnalyserDevice is in the Operating mode.\n // The ADI Client uses this mode for normal operation: configuration, control and data collection.\n // In this mode, each child AnalyserChannels are free to accept commands from the ADI Client and the\n // Parameter values published in the address space values are expected to be valid.\n // When entering this state, all AnalyserChannels of this AnalyserDevice automatically leave the SlaveMode\n // state and enter their Operating state.\n namespace.addState(myFiniteStateMachine, \"Operating\", 200);\n\n // The AnalyserDevice is in the Local mode. This mode is normally used to perform local physical maintenance\n // on the analyser.\n // To enter the Local mode, the operator shall push a button, on the analyser itself. This may be a physical\n // button or a graphical control on the local console screen. To quit the Local mode, the operator shall\n // press the same or another button on the analyser itself.\n // When the analyser is in Local mode, all child AnalyserChannels sit in the SlaveMode state of the\n // AnalyserChannelStateMachine.\n // In this mode, no commands are accepted from the ADI interface and no guarantee is given on the\n // values in the address space.\n\n namespace.addState(myFiniteStateMachine, \"Local\", 300);\n\n // The AnalyserDevice is in the Maintenance mode. This mode is used to perform remote maintenance on the\n // analyser like firmware upgrade.\n // To enter in Maintenance mode, the operator shall call the GotoMaintenance Method from the ADI Client.\n // To return to the Operating mode, the operator shall call the GotoOperating Method from the ADI Client.\n // When the analyser is in the Maintenance mode, all child AnalyserChannels sit in the SlaveMode state of\n // the AnalyserChannelStateMachine.\n // In this mode, no commands are accepted from the ADI interface for the AnalyserChannels and no guarantee\n // is given on the values in the address space.\n namespace.addState(myFiniteStateMachine, \"Maintenance\", 400);\n\n // The AnalyserDevice is in its power-down sequence and cannot perform any other task.\n namespace.addState(myFiniteStateMachine, \"Shutdown\", 500);\n\n namespace.addTransition(myFiniteStateMachine, \"Powerup\", \"Operating\", 1);\n namespace.addTransition(myFiniteStateMachine, \"Operating\", \"Local\", 2);\n namespace.addTransition(myFiniteStateMachine, \"Operating\", \"Maintenance\", 3);\n namespace.addTransition(myFiniteStateMachine, \"Local\", \"Operating\", 4);\n namespace.addTransition(myFiniteStateMachine, \"Local\", \"Maintenance\", 5);\n namespace.addTransition(myFiniteStateMachine, \"Maintenance\", \"Operating\", 6);\n namespace.addTransition(myFiniteStateMachine, \"Maintenance\", \"Local\", 7);\n namespace.addTransition(myFiniteStateMachine, \"Operating\", \"Shutdown\", 8);\n namespace.addTransition(myFiniteStateMachine, \"Local\", \"Shutdown\", 9);\n namespace.addTransition(myFiniteStateMachine, \"Maintenance\", \"Shutdown\", 10);\n\n myFiniteStateMachine.instantiate({\n \"organizedBy\": rootFolder.objects,\n \"browseName\": \"BiancoRoyalFSM\"\n });\n \n done();\n}\n", "x": 190, "y": 70, "wires": [] } ]