node-opcua-address-space 2.71.0 → 2.72.2
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/source/address_space_ts.d.ts +118 -118
- package/dist/source/address_space_ts.js +17 -17
- package/dist/source/continuation_points/continuation_point_manager.d.ts +32 -32
- package/dist/source/continuation_points/continuation_point_manager.js +195 -195
- package/dist/source/helpers/adjust_browse_direction.d.ts +5 -5
- package/dist/source/helpers/adjust_browse_direction.js +11 -11
- package/dist/source/helpers/argument_list.d.ts +34 -34
- package/dist/source/helpers/argument_list.js +285 -285
- package/dist/source/helpers/call_helpers.d.ts +6 -6
- package/dist/source/helpers/call_helpers.js +70 -70
- package/dist/source/helpers/check_event_clause.d.ts +17 -17
- package/dist/source/helpers/check_event_clause.js +52 -52
- package/dist/source/helpers/coerce_enum_value.d.ts +6 -6
- package/dist/source/helpers/coerce_enum_value.js +33 -33
- package/dist/source/helpers/dump_tools.d.ts +14 -14
- package/dist/source/helpers/dump_tools.js +78 -78
- package/dist/source/helpers/ensure_secure_access.d.ts +9 -9
- package/dist/source/helpers/ensure_secure_access.js +76 -76
- package/dist/source/helpers/make_optionals_map.d.ts +21 -21
- package/dist/source/helpers/make_optionals_map.js +29 -29
- package/dist/source/helpers/multiform_func.d.ts +11 -11
- package/dist/source/helpers/multiform_func.js +73 -73
- package/dist/source/helpers/resolve_opaque_on_address_space.d.ts +3 -3
- package/dist/source/helpers/resolve_opaque_on_address_space.js +36 -36
- package/dist/source/index.d.ts +40 -40
- package/dist/source/index.js +66 -66
- package/dist/source/interfaces/alarms_and_conditions/condition_info_i.d.ts +12 -12
- package/dist/source/interfaces/alarms_and_conditions/condition_info_i.js +2 -2
- package/dist/source/interfaces/data_access/ua_multistate_discrete_ex.d.ts +21 -21
- package/dist/source/interfaces/data_access/ua_multistate_discrete_ex.js +2 -2
- package/dist/source/interfaces/data_access/ua_multistate_value_discrete_ex.d.ts +24 -24
- package/dist/source/interfaces/data_access/ua_multistate_value_discrete_ex.js +2 -2
- package/dist/source/interfaces/data_access/ua_two_state_discrete_ex.d.ts +12 -12
- package/dist/source/interfaces/data_access/ua_two_state_discrete_ex.js +2 -2
- package/dist/source/interfaces/data_access/ua_y_array_item_ex.d.ts +8 -8
- package/dist/source/interfaces/data_access/ua_y_array_item_ex.js +2 -2
- package/dist/source/interfaces/state_machine/ua_exclusive_limit_state_machine_type_ex.d.ts +12 -12
- package/dist/source/interfaces/state_machine/ua_exclusive_limit_state_machine_type_ex.js +2 -2
- package/dist/source/interfaces/state_machine/ua_finite_state_machine_type.d.ts +49 -49
- package/dist/source/interfaces/state_machine/ua_finite_state_machine_type.js +2 -2
- package/dist/source/interfaces/state_machine/ua_program_state_machine_type.d.ts +11 -11
- package/dist/source/interfaces/state_machine/ua_program_state_machine_type.js +2 -2
- package/dist/source/interfaces/state_machine/ua_state_machine_type.d.ts +222 -222
- package/dist/source/interfaces/state_machine/ua_state_machine_type.js +2 -2
- package/dist/source/interfaces/state_machine/ua_transition_ex.d.ts +6 -6
- package/dist/source/interfaces/state_machine/ua_transition_ex.js +2 -2
- package/dist/source/interfaces/ua_subscription_diagnostics_variable_ex.d.ts +8 -8
- package/dist/source/interfaces/ua_subscription_diagnostics_variable_ex.js +2 -2
- package/dist/source/loader/decode_xml_extension_object.d.ts +6 -6
- package/dist/source/loader/decode_xml_extension_object.js +71 -71
- package/dist/source/loader/ensure_datatype_extracted.d.ts +5 -5
- package/dist/source/loader/ensure_datatype_extracted.js +45 -45
- package/dist/source/loader/generateAddressSpaceRaw.d.ts +10 -10
- package/dist/source/loader/generateAddressSpaceRaw.js +45 -45
- package/dist/source/loader/load_nodeset2.d.ts +16 -16
- package/dist/source/loader/load_nodeset2.js +1468 -1464
- package/dist/source/loader/load_nodeset2.js.map +1 -1
- package/dist/source/loader/make_semver_compatible.d.ts +6 -0
- package/dist/source/loader/make_semver_compatible.js +26 -0
- package/dist/source/loader/make_semver_compatible.js.map +1 -0
- package/dist/source/loader/make_xml_extension_object_parser.d.ts +28 -28
- package/dist/source/loader/make_xml_extension_object_parser.js +325 -315
- package/dist/source/loader/make_xml_extension_object_parser.js.map +1 -1
- package/dist/source/loader/namespace_post_step.d.ts +6 -6
- package/dist/source/loader/namespace_post_step.js +47 -47
- package/dist/source/loader/register_node_promoter.d.ts +3 -3
- package/dist/source/loader/register_node_promoter.js +9 -9
- package/dist/source/namespace.d.ts +6 -6
- package/dist/source/namespace.js +2 -2
- package/dist/source/namespace_alarm_and_condition.d.ts +24 -24
- package/dist/source/namespace_alarm_and_condition.js +2 -2
- package/dist/source/namespace_data_access.d.ts +42 -42
- package/dist/source/namespace_data_access.js +2 -2
- package/dist/source/namespace_machine_state.d.ts +7 -7
- package/dist/source/namespace_machine_state.js +2 -2
- package/dist/source/pseudo_session.d.ts +55 -55
- package/dist/source/pseudo_session.js +203 -203
- package/dist/source/session_context.d.ts +111 -111
- package/dist/source/session_context.js +265 -265
- package/dist/source/set_namespace_meta_data.d.ts +2 -2
- package/dist/source/set_namespace_meta_data.js +59 -59
- package/dist/source/ua_root_folder.d.ts +9 -9
- package/dist/source/ua_root_folder.js +2 -2
- package/dist/source/ua_two_state_variable_ex.d.ts +23 -23
- package/dist/source/ua_two_state_variable_ex.js +2 -2
- package/dist/source/xml_writer.d.ts +9 -9
- package/dist/source/xml_writer.js +2 -2
- package/dist/src/address_space.d.ts +392 -392
- package/dist/src/address_space.js +1387 -1387
- package/dist/src/address_space_change_event_tools.d.ts +6 -6
- package/dist/src/address_space_change_event_tools.js +149 -149
- package/dist/src/address_space_private.d.ts +43 -43
- package/dist/src/address_space_private.js +2 -2
- package/dist/src/alarms_and_conditions/check_where_clause.d.ts +4 -4
- package/dist/src/alarms_and_conditions/check_where_clause.js +109 -109
- package/dist/src/alarms_and_conditions/condition.d.ts +5 -5
- package/dist/src/alarms_and_conditions/condition.js +80 -80
- package/dist/src/alarms_and_conditions/condition_info.d.ts +27 -27
- package/dist/src/alarms_and_conditions/condition_info.js +54 -54
- package/dist/src/alarms_and_conditions/condition_snapshot.d.ts +233 -233
- package/dist/src/alarms_and_conditions/condition_snapshot.js +666 -666
- package/dist/src/alarms_and_conditions/deviation_alarm_helper.d.ts +21 -21
- package/dist/src/alarms_and_conditions/deviation_alarm_helper.js +46 -46
- package/dist/src/alarms_and_conditions/extract_event_fields.d.ts +10 -10
- package/dist/src/alarms_and_conditions/extract_event_fields.js +89 -89
- package/dist/src/alarms_and_conditions/index.d.ts +18 -18
- package/dist/src/alarms_and_conditions/index.js +34 -34
- package/dist/src/alarms_and_conditions/ua_acknowledgeable_condition_impl.d.ts +64 -62
- package/dist/src/alarms_and_conditions/ua_acknowledgeable_condition_impl.js +244 -244
- package/dist/src/alarms_and_conditions/ua_acknowledgeable_condition_impl.js.map +1 -1
- package/dist/src/alarms_and_conditions/ua_alarm_condition_impl.d.ts +124 -118
- package/dist/src/alarms_and_conditions/ua_alarm_condition_impl.js +416 -416
- package/dist/src/alarms_and_conditions/ua_alarm_condition_impl.js.map +1 -1
- package/dist/src/alarms_and_conditions/ua_base_event_impl.d.ts +29 -29
- package/dist/src/alarms_and_conditions/ua_base_event_impl.js +38 -38
- package/dist/src/alarms_and_conditions/ua_certificate_expiration_alarm_impl.d.ts +36 -21
- package/dist/src/alarms_and_conditions/ua_certificate_expiration_alarm_impl.js +115 -25
- package/dist/src/alarms_and_conditions/ua_certificate_expiration_alarm_impl.js.map +1 -1
- package/dist/src/alarms_and_conditions/ua_condition_impl.d.ts +187 -182
- package/dist/src/alarms_and_conditions/ua_condition_impl.js +1024 -1022
- package/dist/src/alarms_and_conditions/ua_condition_impl.js.map +1 -1
- package/dist/src/alarms_and_conditions/ua_discrete_alarm_impl.d.ts +18 -17
- package/dist/src/alarms_and_conditions/ua_discrete_alarm_impl.js +57 -57
- package/dist/src/alarms_and_conditions/ua_discrete_alarm_impl.js.map +1 -1
- package/dist/src/alarms_and_conditions/ua_exclusive_deviation_alarm_impl.d.ts +30 -27
- package/dist/src/alarms_and_conditions/ua_exclusive_deviation_alarm_impl.js +56 -56
- package/dist/src/alarms_and_conditions/ua_exclusive_deviation_alarm_impl.js.map +1 -1
- package/dist/src/alarms_and_conditions/ua_exclusive_level_alarm_impl.d.ts +11 -9
- package/dist/src/alarms_and_conditions/ua_exclusive_level_alarm_impl.js +11 -11
- package/dist/src/alarms_and_conditions/ua_exclusive_level_alarm_impl.js.map +1 -1
- package/dist/src/alarms_and_conditions/ua_exclusive_limit_alarm_impl.d.ts +40 -38
- package/dist/src/alarms_and_conditions/ua_exclusive_limit_alarm_impl.js +86 -86
- package/dist/src/alarms_and_conditions/ua_exclusive_limit_alarm_impl.js.map +1 -1
- package/dist/src/alarms_and_conditions/ua_exclusive_rate_of_change_alarm_impl.d.ts +10 -10
- package/dist/src/alarms_and_conditions/ua_exclusive_rate_of_change_alarm_impl.js +7 -7
- package/dist/src/alarms_and_conditions/ua_limit_alarm_impl.d.ts +105 -97
- package/dist/src/alarms_and_conditions/ua_limit_alarm_impl.js +250 -250
- package/dist/src/alarms_and_conditions/ua_limit_alarm_impl.js.map +1 -1
- package/dist/src/alarms_and_conditions/ua_non_exclusive_deviation_alarm_impl.d.ts +29 -28
- package/dist/src/alarms_and_conditions/ua_non_exclusive_deviation_alarm_impl.js +50 -50
- package/dist/src/alarms_and_conditions/ua_non_exclusive_deviation_alarm_impl.js.map +1 -1
- package/dist/src/alarms_and_conditions/ua_non_exclusive_limit_alarm_impl.d.ts +26 -25
- package/dist/src/alarms_and_conditions/ua_non_exclusive_limit_alarm_impl.js +162 -162
- package/dist/src/alarms_and_conditions/ua_non_exclusive_limit_alarm_impl.js.map +1 -1
- package/dist/src/alarms_and_conditions/ua_off_normal_alarm_impl.d.ts +48 -39
- package/dist/src/alarms_and_conditions/ua_off_normal_alarm_impl.js +161 -135
- package/dist/src/alarms_and_conditions/ua_off_normal_alarm_impl.js.map +1 -1
- package/dist/src/alarms_and_conditions/ua_system_off_normal_alarm_impl.d.ts +17 -16
- package/dist/src/alarms_and_conditions/ua_system_off_normal_alarm_impl.js +17 -17
- package/dist/src/alarms_and_conditions/ua_system_off_normal_alarm_impl.js.map +1 -1
- package/dist/src/apply_condition_refresh.d.ts +6 -6
- package/dist/src/apply_condition_refresh.js +27 -27
- package/dist/src/base_node_impl.d.ts +281 -281
- package/dist/src/base_node_impl.js +1395 -1395
- package/dist/src/base_node_private.d.ts +61 -61
- package/dist/src/base_node_private.js +705 -705
- package/dist/src/data_access/add_dataItem_stuff.d.ts +11 -11
- package/dist/src/data_access/add_dataItem_stuff.js +61 -61
- package/dist/src/data_access/check_variant_compatibility_ua_analog_item.d.ts +1 -1
- package/dist/src/data_access/check_variant_compatibility_ua_analog_item.js +34 -34
- package/dist/src/data_access/ua_multistate_discrete_impl.d.ts +32 -32
- package/dist/src/data_access/ua_multistate_discrete_impl.js +130 -130
- package/dist/src/data_access/ua_multistate_value_discrete.d.ts +51 -51
- package/dist/src/data_access/ua_multistate_value_discrete.js +249 -249
- package/dist/src/data_access/ua_two_state_discrete.d.ts +25 -25
- package/dist/src/data_access/ua_two_state_discrete.js +153 -153
- package/dist/src/event_data.d.ts +29 -29
- package/dist/src/event_data.js +95 -95
- package/dist/src/extension_object_array_node.d.ts +61 -61
- package/dist/src/extension_object_array_node.js +276 -276
- package/dist/src/historical_access/address_space_historical_data_node.d.ts +26 -26
- package/dist/src/historical_access/address_space_historical_data_node.js +630 -630
- package/dist/src/index_current.d.ts +45 -45
- package/dist/src/index_current.js +77 -77
- package/dist/src/namespace_impl.d.ts +457 -457
- package/dist/src/namespace_impl.js +1733 -1733
- package/dist/src/namespace_private.d.ts +21 -21
- package/dist/src/namespace_private.js +32 -32
- package/dist/src/nodeid_manager.d.ts +36 -36
- package/dist/src/nodeid_manager.js +197 -197
- package/dist/src/nodeset_tools/adjust_namespace_array.d.ts +2 -2
- package/dist/src/nodeset_tools/adjust_namespace_array.js +13 -13
- package/dist/src/nodeset_tools/construct_namespace_dependency.d.ts +2 -2
- package/dist/src/nodeset_tools/construct_namespace_dependency.js +83 -83
- package/dist/src/nodeset_tools/nodeset_to_xml.d.ts +2 -2
- package/dist/src/nodeset_tools/nodeset_to_xml.js +1143 -1143
- package/dist/src/nodeset_tools/typedictionary_to_xml.d.ts +2 -2
- package/dist/src/nodeset_tools/typedictionary_to_xml.js +154 -154
- package/dist/src/reference_impl.d.ts +43 -43
- package/dist/src/reference_impl.js +139 -139
- package/dist/src/role_permissions.d.ts +2 -2
- package/dist/src/role_permissions.js +10 -10
- package/dist/src/state_machine/finite_state_machine.d.ts +67 -67
- package/dist/src/state_machine/finite_state_machine.js +353 -353
- package/dist/src/state_machine/ua_shelving_state_machine_ex.d.ts +34 -34
- package/dist/src/state_machine/ua_shelving_state_machine_ex.js +250 -250
- package/dist/src/state_machine/ua_two_state_variable.d.ts +61 -61
- package/dist/src/state_machine/ua_two_state_variable.js +331 -331
- package/dist/src/tool_isSupertypeOf.d.ts +17 -17
- package/dist/src/tool_isSupertypeOf.js +108 -108
- package/dist/src/ua_condition_type.d.ts +8 -8
- package/dist/src/ua_condition_type.js +2 -2
- package/dist/src/ua_data_type_impl.d.ts +93 -93
- package/dist/src/ua_data_type_impl.js +368 -368
- package/dist/src/ua_method_impl.d.ts +41 -41
- package/dist/src/ua_method_impl.js +208 -208
- package/dist/src/ua_object_impl.d.ts +35 -33
- package/dist/src/ua_object_impl.js +162 -156
- package/dist/src/ua_object_impl.js.map +1 -1
- package/dist/src/ua_object_type_impl.d.ts +48 -48
- package/dist/src/ua_object_type_impl.js +124 -124
- package/dist/src/ua_reference_type_impl.d.ts +43 -43
- package/dist/src/ua_reference_type_impl.js +139 -139
- package/dist/src/ua_variable_impl.d.ts +351 -351
- package/dist/src/ua_variable_impl.js +1604 -1604
- package/dist/src/ua_variable_impl_ext_obj.d.ts +17 -17
- package/dist/src/ua_variable_impl_ext_obj.js +437 -437
- package/dist/src/ua_variable_type_impl.d.ts +62 -62
- package/dist/src/ua_variable_type_impl.js +570 -570
- package/dist/src/ua_view_impl.d.ts +19 -15
- package/dist/src/ua_view_impl.js +43 -36
- package/dist/src/ua_view_impl.js.map +1 -1
- package/distHelpers/add_event_generator_object.d.ts +3 -3
- package/distHelpers/add_event_generator_object.js +65 -65
- package/distHelpers/alarms_and_conditions_demo.d.ts +10 -10
- package/distHelpers/alarms_and_conditions_demo.js +114 -114
- package/distHelpers/assertHasMatchingReference.d.ts +19 -19
- package/distHelpers/assertHasMatchingReference.js +40 -40
- package/distHelpers/boiler_system.d.ts +113 -113
- package/distHelpers/boiler_system.js +395 -395
- package/distHelpers/create_minimalist_address_space_nodeset.d.ts +5 -5
- package/distHelpers/create_minimalist_address_space_nodeset.js +171 -171
- package/distHelpers/date_utils.d.ts +3 -3
- package/distHelpers/date_utils.js +9 -9
- package/distHelpers/dump_statemachine.js +127 -127
- package/distHelpers/get_address_space_fixture.d.ts +1 -1
- package/distHelpers/get_address_space_fixture.js +30 -30
- package/distHelpers/get_mini_address_space.d.ts +7 -7
- package/distHelpers/get_mini_address_space.js +36 -36
- package/distHelpers/index.d.ts +12 -12
- package/distHelpers/index.js +28 -28
- package/distHelpers/mock_session.d.ts +14 -14
- package/distHelpers/mock_session.js +25 -25
- package/distNodeJS/generate_address_space.d.ts +4 -4
- package/distNodeJS/generate_address_space.js +41 -41
- package/distNodeJS/index.d.ts +1 -1
- package/distNodeJS/index.js +17 -17
- package/package.json +23 -23
- package/source/loader/load_nodeset2.ts +21 -17
- package/source/loader/make_semver_compatible.ts +23 -0
- package/source/loader/make_xml_extension_object_parser.ts +16 -6
- package/src/alarms_and_conditions/ua_acknowledgeable_condition_impl.ts +13 -6
- package/src/alarms_and_conditions/ua_alarm_condition_impl.ts +15 -10
- package/src/alarms_and_conditions/ua_certificate_expiration_alarm_impl.ts +126 -10
- package/src/alarms_and_conditions/ua_condition_impl.ts +26 -13
- package/src/alarms_and_conditions/ua_discrete_alarm_impl.ts +10 -4
- package/src/alarms_and_conditions/ua_exclusive_deviation_alarm_impl.ts +7 -6
- package/src/alarms_and_conditions/ua_exclusive_level_alarm_impl.ts +5 -3
- package/src/alarms_and_conditions/ua_exclusive_limit_alarm_impl.ts +7 -6
- package/src/alarms_and_conditions/ua_exclusive_rate_of_change_alarm_impl.ts +1 -1
- package/src/alarms_and_conditions/ua_limit_alarm_impl.ts +23 -13
- package/src/alarms_and_conditions/ua_non_exclusive_deviation_alarm_impl.ts +6 -7
- package/src/alarms_and_conditions/ua_non_exclusive_limit_alarm_impl.ts +6 -7
- package/src/alarms_and_conditions/ua_off_normal_alarm_impl.ts +62 -30
- package/src/alarms_and_conditions/ua_system_off_normal_alarm_impl.ts +5 -5
- package/src/ua_object_impl.ts +11 -3
- package/src/ua_view_impl.ts +6 -4
- package/test_helpers/test_fixtures/dataType_issue.xml +9 -9
- package/test_helpers/test_fixtures/nodeset_with_guid.xml +1442 -0
- package/test_helpers/test_fixtures/nodeset_with_int64_values.xml +31 -0
- package/dist/source/interfaces/alarms_and_conditions/ua_condition_base_i.d.ts +0 -23
- package/dist/source/interfaces/alarms_and_conditions/ua_condition_base_i.js +0 -3
- package/dist/source/interfaces/alarms_and_conditions/ua_condition_base_i.js.map +0 -1
- package/dist/source/interfaces/data_access/ua_discrete_item.d.ts +0 -6
- package/dist/source/interfaces/data_access/ua_discrete_item.js +0 -3
- package/dist/source/interfaces/data_access/ua_discrete_item.js.map +0 -1
- package/dist/source/interfaces/data_access/ua_multistate_discrete.d.ts +0 -25
- package/dist/source/interfaces/data_access/ua_multistate_discrete.js +0 -3
- package/dist/source/interfaces/data_access/ua_multistate_discrete.js.map +0 -1
- package/dist/source/interfaces/data_access/ua_multistate_value_discrete.d.ts +0 -27
- package/dist/source/interfaces/data_access/ua_multistate_value_discrete.js +0 -3
- package/dist/source/interfaces/data_access/ua_multistate_value_discrete.js.map +0 -1
- package/dist/source/interfaces/data_access/ua_two_state_discrete.d.ts +0 -17
- package/dist/source/interfaces/data_access/ua_two_state_discrete.js +0 -3
- package/dist/source/interfaces/data_access/ua_two_state_discrete.js.map +0 -1
- package/dist/source/interfaces/data_access/ua_y_array_item.d.ts +0 -19
- package/dist/source/interfaces/data_access/ua_y_array_item.js +0 -3
- package/dist/source/interfaces/data_access/ua_y_array_item.js.map +0 -1
- package/dist/source/interfaces/state_machine/exclusive_limit_state_machine.d.ts +0 -11
- package/dist/source/interfaces/state_machine/exclusive_limit_state_machine.js +0 -3
- package/dist/source/interfaces/state_machine/exclusive_limit_state_machine.js.map +0 -1
- package/dist/source/interfaces/state_machine/finite_state_machine.d.ts +0 -70
- package/dist/source/interfaces/state_machine/finite_state_machine.js +0 -3
- package/dist/source/interfaces/state_machine/finite_state_machine.js.map +0 -1
- package/dist/source/interfaces/state_machine/program_finite_state_machine.d.ts +0 -74
- package/dist/source/interfaces/state_machine/program_finite_state_machine.js +0 -3
- package/dist/source/interfaces/state_machine/program_finite_state_machine.js.map +0 -1
- package/dist/source/interfaces/state_machine/state_machine.d.ts +0 -342
- package/dist/source/interfaces/state_machine/state_machine.js +0 -3
- package/dist/source/interfaces/state_machine/state_machine.js.map +0 -1
- package/dist/source/interfaces/state_machine/ua_finite_state_variable.d.ts +0 -18
- package/dist/source/interfaces/state_machine/ua_finite_state_variable.js +0 -3
- package/dist/source/interfaces/state_machine/ua_finite_state_variable.js.map +0 -1
- package/dist/source/interfaces/state_machine/ua_state_variable.d.ts +0 -29
- package/dist/source/interfaces/state_machine/ua_state_variable.js +0 -3
- package/dist/source/interfaces/state_machine/ua_state_variable.js.map +0 -1
- package/dist/source/interfaces/state_machine/ua_two_state_variable.d.ts +0 -26
- package/dist/source/interfaces/state_machine/ua_two_state_variable.js +0 -3
- package/dist/source/interfaces/state_machine/ua_two_state_variable.js.map +0 -1
- package/dist/source/interfaces/subscription_diagnostics_variable.d.ts +0 -41
- package/dist/source/interfaces/subscription_diagnostics_variable.js +0 -3
- package/dist/source/interfaces/subscription_diagnostics_variable.js.map +0 -1
- package/dist/src/alarms_and_conditions/base_event_type.d.ts +0 -26
- package/dist/src/alarms_and_conditions/base_event_type.js +0 -41
- package/dist/src/alarms_and_conditions/base_event_type.js.map +0 -1
- package/dist/src/alarms_and_conditions/shelving_state_machine.d.ts +0 -22
- package/dist/src/alarms_and_conditions/shelving_state_machine.js +0 -241
- package/dist/src/alarms_and_conditions/shelving_state_machine.js.map +0 -1
- package/dist/src/alarms_and_conditions/trip_alarm.d.ts +0 -16
- package/dist/src/alarms_and_conditions/trip_alarm.js +0 -21
- package/dist/src/alarms_and_conditions/trip_alarm.js.map +0 -1
- package/dist/src/alarms_and_conditions/ua_acknowledgeable_condition_base.d.ts +0 -54
- package/dist/src/alarms_and_conditions/ua_acknowledgeable_condition_base.js +0 -255
- package/dist/src/alarms_and_conditions/ua_acknowledgeable_condition_base.js.map +0 -1
- package/dist/src/alarms_and_conditions/ua_alarm_condition_base.d.ts +0 -138
- package/dist/src/alarms_and_conditions/ua_alarm_condition_base.js +0 -460
- package/dist/src/alarms_and_conditions/ua_alarm_condition_base.js.map +0 -1
- package/dist/src/alarms_and_conditions/ua_certificate_expiration_alarm.d.ts +0 -35
- package/dist/src/alarms_and_conditions/ua_certificate_expiration_alarm.js +0 -32
- package/dist/src/alarms_and_conditions/ua_certificate_expiration_alarm.js.map +0 -1
- package/dist/src/alarms_and_conditions/ua_condition_base.d.ts +0 -191
- package/dist/src/alarms_and_conditions/ua_condition_base.js +0 -1029
- package/dist/src/alarms_and_conditions/ua_condition_base.js.map +0 -1
- package/dist/src/alarms_and_conditions/ua_discrete_alarm.d.ts +0 -11
- package/dist/src/alarms_and_conditions/ua_discrete_alarm.js +0 -58
- package/dist/src/alarms_and_conditions/ua_discrete_alarm.js.map +0 -1
- package/dist/src/alarms_and_conditions/ua_exclusive_deviation_alarm.d.ts +0 -24
- package/dist/src/alarms_and_conditions/ua_exclusive_deviation_alarm.js +0 -59
- package/dist/src/alarms_and_conditions/ua_exclusive_deviation_alarm.js.map +0 -1
- package/dist/src/alarms_and_conditions/ua_exclusive_level_alarm.d.ts +0 -14
- package/dist/src/alarms_and_conditions/ua_exclusive_level_alarm.js +0 -17
- package/dist/src/alarms_and_conditions/ua_exclusive_level_alarm.js.map +0 -1
- package/dist/src/alarms_and_conditions/ua_exclusive_limit_alarm.d.ts +0 -22
- package/dist/src/alarms_and_conditions/ua_exclusive_limit_alarm.js +0 -87
- package/dist/src/alarms_and_conditions/ua_exclusive_limit_alarm.js.map +0 -1
- package/dist/src/alarms_and_conditions/ua_exclusive_rate_of_change_alarm.d.ts +0 -6
- package/dist/src/alarms_and_conditions/ua_exclusive_rate_of_change_alarm.js +0 -11
- package/dist/src/alarms_and_conditions/ua_exclusive_rate_of_change_alarm.js.map +0 -1
- package/dist/src/alarms_and_conditions/ua_limit_alarm.d.ts +0 -76
- package/dist/src/alarms_and_conditions/ua_limit_alarm.js +0 -237
- package/dist/src/alarms_and_conditions/ua_limit_alarm.js.map +0 -1
- package/dist/src/alarms_and_conditions/ua_non_exclusive_deviation_alarm.d.ts +0 -27
- package/dist/src/alarms_and_conditions/ua_non_exclusive_deviation_alarm.js +0 -62
- package/dist/src/alarms_and_conditions/ua_non_exclusive_deviation_alarm.js.map +0 -1
- package/dist/src/alarms_and_conditions/ua_non_exclusive_limit_alarm.d.ts +0 -49
- package/dist/src/alarms_and_conditions/ua_non_exclusive_limit_alarm.js +0 -176
- package/dist/src/alarms_and_conditions/ua_non_exclusive_limit_alarm.js.map +0 -1
- package/dist/src/alarms_and_conditions/ua_off_normal_alarm.d.ts +0 -47
- package/dist/src/alarms_and_conditions/ua_off_normal_alarm.js +0 -151
- package/dist/src/alarms_and_conditions/ua_off_normal_alarm.js.map +0 -1
- package/dist/src/alarms_and_conditions/ua_system_off_normal_alarm.d.ts +0 -16
- package/dist/src/alarms_and_conditions/ua_system_off_normal_alarm.js +0 -18
- package/dist/src/alarms_and_conditions/ua_system_off_normal_alarm.js.map +0 -1
- package/dist/src/base_node.d.ts +0 -270
- package/dist/src/base_node.js +0 -1299
- package/dist/src/base_node.js.map +0 -1
- package/dist/src/data_access/ua_analog_item.d.ts +0 -13
- package/dist/src/data_access/ua_analog_item.js +0 -37
- package/dist/src/data_access/ua_analog_item.js.map +0 -1
- package/dist/src/data_access/ua_data_item.d.ts +0 -16
- package/dist/src/data_access/ua_data_item.js +0 -66
- package/dist/src/data_access/ua_data_item.js.map +0 -1
- package/dist/src/data_access/ua_multistate_discrete.d.ts +0 -24
- package/dist/src/data_access/ua_multistate_discrete.js +0 -132
- package/dist/src/data_access/ua_multistate_discrete.js.map +0 -1
- package/dist/src/namespace.d.ts +0 -472
- package/dist/src/namespace.js +0 -1759
- package/dist/src/namespace.js.map +0 -1
- package/dist/src/reference.d.ts +0 -43
- package/dist/src/reference.js +0 -138
- package/dist/src/reference.js.map +0 -1
- package/dist/src/session_context.d.ts +0 -4
- package/dist/src/session_context.js +0 -9
- package/dist/src/session_context.js.map +0 -1
- package/dist/src/ua_data_type.d.ts +0 -81
- package/dist/src/ua_data_type.js +0 -259
- package/dist/src/ua_data_type.js.map +0 -1
- package/dist/src/ua_method.d.ts +0 -33
- package/dist/src/ua_method.js +0 -194
- package/dist/src/ua_method.js.map +0 -1
- package/dist/src/ua_object.d.ts +0 -27
- package/dist/src/ua_object.js +0 -153
- package/dist/src/ua_object.js.map +0 -1
- package/dist/src/ua_object_type.d.ts +0 -49
- package/dist/src/ua_object_type.js +0 -123
- package/dist/src/ua_object_type.js.map +0 -1
- package/dist/src/ua_reference_type.d.ts +0 -31
- package/dist/src/ua_reference_type.js +0 -108
- package/dist/src/ua_reference_type.js.map +0 -1
- package/dist/src/ua_variable.d.ts +0 -346
- package/dist/src/ua_variable.js +0 -1651
- package/dist/src/ua_variable.js.map +0 -1
- package/dist/src/ua_variable_type.d.ts +0 -57
- package/dist/src/ua_variable_type.js +0 -530
- package/dist/src/ua_variable_type.js.map +0 -1
- package/dist/src/ua_view.d.ts +0 -16
- package/dist/src/ua_view.js +0 -41
- package/dist/src/ua_view.js.map +0 -1
|
@@ -1,667 +1,667 @@
|
|
|
1
|
-
"use strict";
|
|
2
|
-
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
-
exports.ConditionSnapshot = void 0;
|
|
4
|
-
/**
|
|
5
|
-
* @module node-opcua-address-space.AlarmsAndConditions
|
|
6
|
-
*/
|
|
7
|
-
const events_1 = require("events");
|
|
8
|
-
const node_opcua_assert_1 = require("node-opcua-assert");
|
|
9
|
-
const node_opcua_data_model_1 = require("node-opcua-data-model");
|
|
10
|
-
const node_opcua_debug_1 = require("node-opcua-debug");
|
|
11
|
-
const node_opcua_nodeid_1 = require("node-opcua-nodeid");
|
|
12
|
-
const node_opcua_status_code_1 = require("node-opcua-status-code");
|
|
13
|
-
const node_opcua_types_1 = require("node-opcua-types");
|
|
14
|
-
const utils = require("node-opcua-utils");
|
|
15
|
-
const node_opcua_variant_1 = require("node-opcua-variant");
|
|
16
|
-
const event_data_1 = require("../event_data");
|
|
17
|
-
const ua_two_state_variable_1 = require("../state_machine/ua_two_state_variable");
|
|
18
|
-
const condition_1 = require("./condition");
|
|
19
|
-
const ua_condition_impl_1 = require("./ua_condition_impl");
|
|
20
|
-
const debugLog = (0, node_opcua_debug_1.make_debugLog)(__filename);
|
|
21
|
-
const doDebug = (0, node_opcua_debug_1.checkDebugFlag)(__filename);
|
|
22
|
-
function normalizeName(str) {
|
|
23
|
-
return str.split(".").map(utils.lowerFirstLetter).join(".");
|
|
24
|
-
}
|
|
25
|
-
function _visit(self, node, prefix) {
|
|
26
|
-
const aggregates = node.getAggregates();
|
|
27
|
-
for (const aggregate of aggregates) {
|
|
28
|
-
if (aggregate.nodeClass === node_opcua_data_model_1.NodeClass.Variable) {
|
|
29
|
-
let name = aggregate.browseName.toString();
|
|
30
|
-
name = utils.lowerFirstLetter(name);
|
|
31
|
-
const key = prefix + name;
|
|
32
|
-
// istanbul ignore next
|
|
33
|
-
if (doDebug) {
|
|
34
|
-
debugLog("adding key =", key);
|
|
35
|
-
}
|
|
36
|
-
const aggregateVariable = aggregate;
|
|
37
|
-
self._map[key] = aggregateVariable.readValue().value;
|
|
38
|
-
self._node_index[key] = aggregateVariable;
|
|
39
|
-
_visit(self, aggregate, prefix + name + ".");
|
|
40
|
-
}
|
|
41
|
-
}
|
|
42
|
-
}
|
|
43
|
-
function _record_condition_state(self, condition) {
|
|
44
|
-
self._map = {};
|
|
45
|
-
self._node_index = {};
|
|
46
|
-
(0, node_opcua_assert_1.assert)(condition instanceof ua_condition_impl_1.UAConditionImpl);
|
|
47
|
-
_visit(self, condition, "");
|
|
48
|
-
}
|
|
49
|
-
function _installOnChangeEventHandlers(self, node, prefix) {
|
|
50
|
-
const aggregates = node.getAggregates();
|
|
51
|
-
for (const aggregate of aggregates) {
|
|
52
|
-
if (aggregate.nodeClass === node_opcua_data_model_1.NodeClass.Variable) {
|
|
53
|
-
let name = aggregate.browseName.toString();
|
|
54
|
-
name = utils.lowerFirstLetter(name);
|
|
55
|
-
const key = prefix + name;
|
|
56
|
-
// istanbul ignore next
|
|
57
|
-
if (doDebug) {
|
|
58
|
-
debugLog("adding key =", key);
|
|
59
|
-
}
|
|
60
|
-
aggregate.on("value_changed", (newDataValue) => {
|
|
61
|
-
self._map[key] = newDataValue.value;
|
|
62
|
-
self._node_index[key] = aggregate;
|
|
63
|
-
});
|
|
64
|
-
_installOnChangeEventHandlers(self, aggregate, prefix + name + ".");
|
|
65
|
-
}
|
|
66
|
-
}
|
|
67
|
-
}
|
|
68
|
-
function _ensure_condition_values_correctness(self, node, prefix, error) {
|
|
69
|
-
const displayError = !!error;
|
|
70
|
-
error = error || [];
|
|
71
|
-
const aggregates = node.getAggregates();
|
|
72
|
-
for (const aggregate of aggregates) {
|
|
73
|
-
if (aggregate.nodeClass === node_opcua_data_model_1.NodeClass.Variable) {
|
|
74
|
-
let name = aggregate.browseName.toString();
|
|
75
|
-
name = utils.lowerFirstLetter(name);
|
|
76
|
-
const key = prefix + name;
|
|
77
|
-
const snapshot_value = self._map[key].toString();
|
|
78
|
-
const aggregateVariable = aggregate;
|
|
79
|
-
const condition_value = aggregateVariable.readValue().value.toString();
|
|
80
|
-
if (snapshot_value !== condition_value) {
|
|
81
|
-
error.push(" Condition Branch0 is not in sync with node values for " +
|
|
82
|
-
key +
|
|
83
|
-
"\n v1= " +
|
|
84
|
-
snapshot_value +
|
|
85
|
-
"\n v2= " +
|
|
86
|
-
condition_value);
|
|
87
|
-
}
|
|
88
|
-
self._node_index[key] = aggregate;
|
|
89
|
-
_ensure_condition_values_correctness(self, aggregate, prefix + name + ".", error);
|
|
90
|
-
}
|
|
91
|
-
}
|
|
92
|
-
if (displayError && error.length) {
|
|
93
|
-
throw new Error(error.join("\n"));
|
|
94
|
-
}
|
|
95
|
-
}
|
|
96
|
-
const disabledVar = new node_opcua_variant_1.Variant({
|
|
97
|
-
dataType: "StatusCode",
|
|
98
|
-
value: node_opcua_status_code_1.StatusCodes.BadConditionDisabled
|
|
99
|
-
});
|
|
100
|
-
// list of Condition variables that should not be published as BadConditionDisabled when the condition
|
|
101
|
-
// is in a disabled state.
|
|
102
|
-
const _varTable = {
|
|
103
|
-
branchId: 1,
|
|
104
|
-
conditionClassId: 1,
|
|
105
|
-
conditionClassName: 1,
|
|
106
|
-
conditionName: 1,
|
|
107
|
-
enabledState: 1,
|
|
108
|
-
"enabledState.effectiveDisplayName": 1,
|
|
109
|
-
"enabledState.id": 1,
|
|
110
|
-
"enabledState.transitionTime": 1,
|
|
111
|
-
eventId: 1,
|
|
112
|
-
eventType: 1,
|
|
113
|
-
localTime: 1,
|
|
114
|
-
sourceName: 1,
|
|
115
|
-
sourceNode: 1,
|
|
116
|
-
time: 1
|
|
117
|
-
};
|
|
118
|
-
class ConditionSnapshot extends events_1.EventEmitter {
|
|
119
|
-
/**
|
|
120
|
-
* @class ConditionSnapshot
|
|
121
|
-
* @extends EventEmitter
|
|
122
|
-
* @param condition
|
|
123
|
-
* @param branchId
|
|
124
|
-
* @constructor
|
|
125
|
-
*/
|
|
126
|
-
constructor(condition, branchId) {
|
|
127
|
-
super();
|
|
128
|
-
this.eventData = null;
|
|
129
|
-
this.branchId = null;
|
|
130
|
-
this._map = {};
|
|
131
|
-
this._node_index = {};
|
|
132
|
-
(0, node_opcua_assert_1.assert)(branchId instanceof node_opcua_nodeid_1.NodeId);
|
|
133
|
-
// xx self.branchId = branchId;
|
|
134
|
-
this.condition = condition;
|
|
135
|
-
this.eventData = new event_data_1.EventData(condition);
|
|
136
|
-
// a nodeId/Variant map
|
|
137
|
-
_record_condition_state(this, condition);
|
|
138
|
-
if ((0, node_opcua_nodeid_1.sameNodeId)(branchId, node_opcua_nodeid_1.NodeId.nullNodeId)) {
|
|
139
|
-
_installOnChangeEventHandlers(this, condition, "");
|
|
140
|
-
}
|
|
141
|
-
this._set_var("branchId", node_opcua_variant_1.DataType.NodeId, branchId);
|
|
142
|
-
}
|
|
143
|
-
_constructEventData() {
|
|
144
|
-
if (this.branchId && (0, node_opcua_nodeid_1.sameNodeId)(this.branchId, node_opcua_nodeid_1.NodeId.nullNodeId)) {
|
|
145
|
-
_ensure_condition_values_correctness(this, this.condition, "", []);
|
|
146
|
-
}
|
|
147
|
-
const c = this.condition;
|
|
148
|
-
const isDisabled = !c.getEnabledState();
|
|
149
|
-
const eventData = new event_data_1.EventData(this.condition);
|
|
150
|
-
for (const key of Object.keys(this._map)) {
|
|
151
|
-
const node = this._node_index[key];
|
|
152
|
-
if (!node) {
|
|
153
|
-
debugLog("cannot node for find key", key);
|
|
154
|
-
continue;
|
|
155
|
-
}
|
|
156
|
-
if (isDisabled && !Object.prototype.hasOwnProperty.call(_varTable, key)) {
|
|
157
|
-
eventData.setValue(key, node, disabledVar);
|
|
158
|
-
}
|
|
159
|
-
else {
|
|
160
|
-
eventData.setValue(key, node, this._map[key]);
|
|
161
|
-
}
|
|
162
|
-
}
|
|
163
|
-
return eventData;
|
|
164
|
-
}
|
|
165
|
-
/**
|
|
166
|
-
* @method resolveSelectClause
|
|
167
|
-
* @param selectClause {SelectClause}
|
|
168
|
-
*/
|
|
169
|
-
resolveSelectClause(selectClause) {
|
|
170
|
-
var _a;
|
|
171
|
-
return ((_a = this.eventData) === null || _a === void 0 ? void 0 : _a.resolveSelectClause(selectClause)) || null;
|
|
172
|
-
}
|
|
173
|
-
/**
|
|
174
|
-
*
|
|
175
|
-
*/
|
|
176
|
-
readValue(sessionContext, nodeId, selectClause) {
|
|
177
|
-
var _a;
|
|
178
|
-
const c = this.condition;
|
|
179
|
-
const isDisabled = !c.getEnabledState();
|
|
180
|
-
if (isDisabled) {
|
|
181
|
-
return disabledVar;
|
|
182
|
-
}
|
|
183
|
-
const key = nodeId.toString();
|
|
184
|
-
const variant = this._map[key];
|
|
185
|
-
if (!variant) {
|
|
186
|
-
// the value is not handled by us .. let's delegate
|
|
187
|
-
// to the eventData helper object
|
|
188
|
-
return ((_a = this.eventData) === null || _a === void 0 ? void 0 : _a.readValue(sessionContext, nodeId, selectClause)) || disabledVar;
|
|
189
|
-
}
|
|
190
|
-
return variant;
|
|
191
|
-
}
|
|
192
|
-
_get_var(varName) {
|
|
193
|
-
const c = this.condition;
|
|
194
|
-
if (!c.getEnabledState() && !Object.prototype.hasOwnProperty.call(_varTable, varName)) {
|
|
195
|
-
// xx console.log("ConditionSnapshot#_get_var condition enabled =", self.condition.getEnabledState());
|
|
196
|
-
return disabledVar;
|
|
197
|
-
}
|
|
198
|
-
const key = normalizeName(varName);
|
|
199
|
-
const variant = this._map[key];
|
|
200
|
-
return variant.value;
|
|
201
|
-
}
|
|
202
|
-
_set_var(varName, dataType, value) {
|
|
203
|
-
const key = normalizeName(varName);
|
|
204
|
-
// istanbul ignore next
|
|
205
|
-
if (!Object.prototype.hasOwnProperty.call(this._map, key)) {
|
|
206
|
-
if (doDebug) {
|
|
207
|
-
debugLog(" cannot find node " + varName);
|
|
208
|
-
debugLog(" map=", Object.keys(this._map).join(" "));
|
|
209
|
-
}
|
|
210
|
-
}
|
|
211
|
-
this._map[key] = new node_opcua_variant_1.Variant({
|
|
212
|
-
dataType,
|
|
213
|
-
value
|
|
214
|
-
});
|
|
215
|
-
if (this._map[key + ".sourceTimestamp"]) {
|
|
216
|
-
this._map[key + ".sourceTimestamp"] = new node_opcua_variant_1.Variant({
|
|
217
|
-
dataType: node_opcua_variant_1.DataType.DateTime,
|
|
218
|
-
value: new Date()
|
|
219
|
-
});
|
|
220
|
-
}
|
|
221
|
-
const variant = this._map[key];
|
|
222
|
-
const node = this._node_index[key];
|
|
223
|
-
if (!node) {
|
|
224
|
-
// for instance localTime is optional
|
|
225
|
-
debugLog("Cannot serVar " + varName + " dataType " + node_opcua_variant_1.DataType[dataType]);
|
|
226
|
-
return;
|
|
227
|
-
}
|
|
228
|
-
(0, node_opcua_assert_1.assert)(node.nodeClass === node_opcua_data_model_1.NodeClass.Variable);
|
|
229
|
-
this.emit("value_changed", node, variant);
|
|
230
|
-
}
|
|
231
|
-
/**
|
|
232
|
-
* @method getBrandId
|
|
233
|
-
* @return {NodeId}
|
|
234
|
-
*/
|
|
235
|
-
getBranchId() {
|
|
236
|
-
return this._get_var("branchId");
|
|
237
|
-
}
|
|
238
|
-
/**
|
|
239
|
-
* @method getEventId
|
|
240
|
-
* @return {ByteString}
|
|
241
|
-
*/
|
|
242
|
-
getEventId() {
|
|
243
|
-
return this._get_var("eventId");
|
|
244
|
-
}
|
|
245
|
-
/**
|
|
246
|
-
* @method getRetain
|
|
247
|
-
* @return {Boolean}
|
|
248
|
-
*/
|
|
249
|
-
getRetain() {
|
|
250
|
-
return this._get_var("retain");
|
|
251
|
-
}
|
|
252
|
-
/**
|
|
253
|
-
*
|
|
254
|
-
* @method setRetain
|
|
255
|
-
* @param retainFlag {Boolean}
|
|
256
|
-
*/
|
|
257
|
-
setRetain(retainFlag) {
|
|
258
|
-
retainFlag = !!retainFlag;
|
|
259
|
-
return this._set_var("retain", node_opcua_variant_1.DataType.Boolean, retainFlag);
|
|
260
|
-
}
|
|
261
|
-
/**
|
|
262
|
-
* @method renewEventId
|
|
263
|
-
*
|
|
264
|
-
*/
|
|
265
|
-
renewEventId() {
|
|
266
|
-
const addressSpace = this.condition.addressSpace;
|
|
267
|
-
// create a new event Id for this new condition
|
|
268
|
-
const eventId = addressSpace.generateEventId();
|
|
269
|
-
const ret = this._set_var("eventId", node_opcua_variant_1.DataType.ByteString, eventId.value);
|
|
270
|
-
// xx var branch = self; console.log("MMMMMMMMrenewEventId branch " +
|
|
271
|
-
// branch.getBranchId().toString() + " eventId = " + branch.getEventId().toString("hex"));
|
|
272
|
-
return ret;
|
|
273
|
-
}
|
|
274
|
-
/**
|
|
275
|
-
* @method getEnabledState
|
|
276
|
-
* @return {Boolean}
|
|
277
|
-
*/
|
|
278
|
-
getEnabledState() {
|
|
279
|
-
return this._get_twoStateVariable("enabledState");
|
|
280
|
-
}
|
|
281
|
-
/**
|
|
282
|
-
* @method setEnabledState
|
|
283
|
-
* @param value {Boolean}
|
|
284
|
-
* @return void
|
|
285
|
-
*/
|
|
286
|
-
setEnabledState(value) {
|
|
287
|
-
return this._set_twoStateVariable("enabledState", value);
|
|
288
|
-
}
|
|
289
|
-
/**
|
|
290
|
-
* @method getEnabledStateAsString
|
|
291
|
-
* @return {String}
|
|
292
|
-
*/
|
|
293
|
-
getEnabledStateAsString() {
|
|
294
|
-
return this._get_var("enabledState").text;
|
|
295
|
-
}
|
|
296
|
-
/**
|
|
297
|
-
* @method getComment
|
|
298
|
-
* @return {LocalizedText}
|
|
299
|
-
*/
|
|
300
|
-
getComment() {
|
|
301
|
-
return this._get_var("comment");
|
|
302
|
-
}
|
|
303
|
-
/**
|
|
304
|
-
* Set condition comment
|
|
305
|
-
*
|
|
306
|
-
* Comment contains the last comment provided for a certain state (ConditionBranch). It may
|
|
307
|
-
* have been provided by an AddComment Method, some other Method or in some other
|
|
308
|
-
* manner. The initial value of this Variable is null, unless it is provided in some other manner. If
|
|
309
|
-
* a Method provides as an option the ability to set a Comment, then the value of this Variable is
|
|
310
|
-
* reset to null if an optional comment is not provided.
|
|
311
|
-
*
|
|
312
|
-
* @method setComment
|
|
313
|
-
* @param txtMessage {LocalizedText}
|
|
314
|
-
*/
|
|
315
|
-
setComment(txtMessage) {
|
|
316
|
-
const txtMessage1 = (0, node_opcua_data_model_1.coerceLocalizedText)(txtMessage);
|
|
317
|
-
this._set_var("comment", node_opcua_variant_1.DataType.LocalizedText, txtMessage1);
|
|
318
|
-
}
|
|
319
|
-
/**
|
|
320
|
-
*
|
|
321
|
-
* @method setMessage
|
|
322
|
-
* @param txtMessage {LocalizedText}
|
|
323
|
-
*/
|
|
324
|
-
setMessage(txtMessage) {
|
|
325
|
-
const txtMessage1 = (0, node_opcua_data_model_1.coerceLocalizedText)(txtMessage);
|
|
326
|
-
return this._set_var("message", node_opcua_variant_1.DataType.LocalizedText, txtMessage1);
|
|
327
|
-
}
|
|
328
|
-
/**
|
|
329
|
-
* @method setClientUserId
|
|
330
|
-
* @param userIdentity {String}
|
|
331
|
-
*/
|
|
332
|
-
setClientUserId(userIdentity) {
|
|
333
|
-
return this._set_var("clientUserId", node_opcua_variant_1.DataType.String, userIdentity.toString());
|
|
334
|
-
}
|
|
335
|
-
/*
|
|
336
|
-
*
|
|
337
|
-
*
|
|
338
|
-
* as per spec 1.0.3 - Part 9
|
|
339
|
-
*
|
|
340
|
-
* Quality reveals the status of process values or other resources that this Condition instance is
|
|
341
|
-
* based upon. If, for example, a process value is “Uncertain”, the associated “LevelAlarm”
|
|
342
|
-
* Condition is also questionable. Values for the Quality can be any of the OPC StatusCodes
|
|
343
|
-
* defined in Part 8 as well as Good, Uncertain and Bad as defined in Part 4. These
|
|
344
|
-
* StatusCodes are similar to but slightly more generic than the description of data quality in the
|
|
345
|
-
* various field bus specifications. It is the responsibility of the Server to map internal status
|
|
346
|
-
* information to these codes. A Server which supports no quality information shall return Good.
|
|
347
|
-
* This quality can also reflect the communication status associated with the system that this
|
|
348
|
-
* value or resource is based on and from which this Alarm was received. For communication
|
|
349
|
-
* errors to the underlying system, especially those that result in some unavailable Event fields,
|
|
350
|
-
* the quality shall be BadNoCommunication error.
|
|
351
|
-
*
|
|
352
|
-
* Quality refers to the quality of the data value(s) upon which this Condition is based. Since a
|
|
353
|
-
* Condition is usually based on one or more Variables, the Condition inherits the quality of
|
|
354
|
-
* these Variables. E.g., if the process value is “Uncertain”, the “LevelAlarm” Condition is also
|
|
355
|
-
* questionable. If more than one variable is represented by a given condition or if the condition
|
|
356
|
-
* is from an underlining system and no direct mapping to a variable is available, it is up to the
|
|
357
|
-
* application to determine what quality is displayed as part of the condition.
|
|
358
|
-
*/
|
|
359
|
-
/**
|
|
360
|
-
* set the condition quality
|
|
361
|
-
* @method setQuality
|
|
362
|
-
* @param quality {StatusCode}
|
|
363
|
-
*/
|
|
364
|
-
setQuality(quality) {
|
|
365
|
-
this._set_var("quality", node_opcua_variant_1.DataType.StatusCode, quality);
|
|
366
|
-
}
|
|
367
|
-
/**
|
|
368
|
-
* @method getQuality
|
|
369
|
-
* @return {StatusCode}
|
|
370
|
-
*/
|
|
371
|
-
getQuality() {
|
|
372
|
-
return this._get_var("quality");
|
|
373
|
-
}
|
|
374
|
-
/*
|
|
375
|
-
* as per spec 1.0.3 - Part 9
|
|
376
|
-
* The Severity of a Condition is inherited from the base Event model defined in Part 5. It
|
|
377
|
-
* indicates the urgency of the Condition and is also commonly called ‘priority’, especially in
|
|
378
|
-
* relation to Alarms in the ProcessConditionClass.
|
|
379
|
-
*
|
|
380
|
-
* as per spec 1.0.3 - PArt 5
|
|
381
|
-
* Severity is an indication of the urgency of the Event. This is also commonly called “priority”.
|
|
382
|
-
* Values will range from 1 to 1 000, with 1 being the lowest severity and 1 000 being the highest.
|
|
383
|
-
* Typically, a severity of 1 would indicate an Event which is informational in nature, while a value
|
|
384
|
-
* of 1 000 would indicate an Event of catastrophic nature, which could potentially result in severe
|
|
385
|
-
* financial loss or loss of life.
|
|
386
|
-
* It is expected that very few Server implementations will support 1 000 distinct severity levels.
|
|
387
|
-
* Therefore, Server developers are responsible for distributing their severity levels across the
|
|
388
|
-
* 1 to 1 000 range in such a manner that clients can assume a linear distribution. For example, a
|
|
389
|
-
* client wishing to present five severity levels to a user should be able to do the following
|
|
390
|
-
* mapping:
|
|
391
|
-
* Client Severity OPC Severity
|
|
392
|
-
* HIGH 801 – 1 000
|
|
393
|
-
* MEDIUM HIGH 601 – 800
|
|
394
|
-
* MEDIUM 401 – 600
|
|
395
|
-
* MEDIUM LOW 201 – 400
|
|
396
|
-
* LOW 1 – 200
|
|
397
|
-
* In many cases a strict linear mapping of underlying source severities to the OPC Severity range
|
|
398
|
-
* is not appropriate. The Server developer will instead intelligently map the underlying source
|
|
399
|
-
* severities to the 1 to 1 000 OPC Severity range in some other fashion. In particular, it is
|
|
400
|
-
* recommended that Server developers map Events of high urgency into the OPC severity range
|
|
401
|
-
* of 667 to 1 000, Events of medium urgency into the OPC severity range of 334 to 666 and
|
|
402
|
-
* Events of low urgency into OPC severities of 1 to 333.
|
|
403
|
-
*/
|
|
404
|
-
/**
|
|
405
|
-
* @method setSeverity
|
|
406
|
-
* @param severity {UInt16}
|
|
407
|
-
*/
|
|
408
|
-
setSeverity(severity) {
|
|
409
|
-
(0, node_opcua_assert_1.assert)(isFinite(severity), "expecting a UInt16");
|
|
410
|
-
// record automatically last severity
|
|
411
|
-
const lastSeverity = this.getSeverity();
|
|
412
|
-
this.setLastSeverity(lastSeverity);
|
|
413
|
-
this._set_var("severity", node_opcua_variant_1.DataType.UInt16, severity);
|
|
414
|
-
}
|
|
415
|
-
/**
|
|
416
|
-
* @method getSeverity
|
|
417
|
-
* @return {UInt16}
|
|
418
|
-
*/
|
|
419
|
-
getSeverity() {
|
|
420
|
-
const c = this.condition;
|
|
421
|
-
(0, node_opcua_assert_1.assert)(c.getEnabledState(), "condition must be enabled");
|
|
422
|
-
const value = this._get_var("severity");
|
|
423
|
-
return +value;
|
|
424
|
-
}
|
|
425
|
-
/*
|
|
426
|
-
* as per spec 1.0.3 - part 9:
|
|
427
|
-
* LastSeverity provides the previous severity of the ConditionBranch. Initially this Variable
|
|
428
|
-
* contains a zero value; it will return a value only after a severity change. The new severity is
|
|
429
|
-
* supplied via the Severity Property which is inherited from the BaseEventType.
|
|
430
|
-
*
|
|
431
|
-
*/
|
|
432
|
-
/**
|
|
433
|
-
* @method setLastSeverity
|
|
434
|
-
* @param severity {UInt16}
|
|
435
|
-
*/
|
|
436
|
-
setLastSeverity(severity) {
|
|
437
|
-
severity = +severity;
|
|
438
|
-
return this._set_var("lastSeverity", node_opcua_variant_1.DataType.UInt16, severity);
|
|
439
|
-
}
|
|
440
|
-
/**
|
|
441
|
-
* @method getLastSeverity
|
|
442
|
-
* @return {UInt16}
|
|
443
|
-
*/
|
|
444
|
-
getLastSeverity() {
|
|
445
|
-
const value = this._get_var("lastSeverity");
|
|
446
|
-
return +value;
|
|
447
|
-
}
|
|
448
|
-
/**
|
|
449
|
-
* setReceiveTime
|
|
450
|
-
*
|
|
451
|
-
* (as per OPCUA 1.0.3 part 5)
|
|
452
|
-
*
|
|
453
|
-
* ReceiveTime provides the time the OPC UA Server received the Event from the underlying
|
|
454
|
-
* device of another Server.
|
|
455
|
-
*
|
|
456
|
-
* ReceiveTime is analogous to ServerTimestamp defined in Part 4, i.e.
|
|
457
|
-
* in the case where the OPC UA Server gets an Event from another OPC UA Server, each Server
|
|
458
|
-
* applies its own ReceiveTime. That implies that a Client may get the same Event, having the
|
|
459
|
-
* same EventId, from different Servers having different values of the ReceiveTime.
|
|
460
|
-
*
|
|
461
|
-
* The ReceiveTime shall always be returned as value and the Server is not allowed to return a
|
|
462
|
-
* StatusCode for the ReceiveTime indicating an error.
|
|
463
|
-
*
|
|
464
|
-
* @method setReceiveTime
|
|
465
|
-
* @param time {Date} : UTCTime
|
|
466
|
-
*/
|
|
467
|
-
setReceiveTime(time) {
|
|
468
|
-
(0, node_opcua_assert_1.assert)(time instanceof Date);
|
|
469
|
-
return this._set_var("receiveTime", node_opcua_variant_1.DataType.DateTime, time);
|
|
470
|
-
}
|
|
471
|
-
/**
|
|
472
|
-
* (as per OPCUA 1.0.3 part 5)
|
|
473
|
-
* Time provides the time the Event occurred. This value is set as close to the event generator as
|
|
474
|
-
* possible. It often comes from the underlying system or device. Once set, intermediate OPC UA
|
|
475
|
-
* Servers shall not alter the value.
|
|
476
|
-
*
|
|
477
|
-
* @method setTime
|
|
478
|
-
* @param time {Date}
|
|
479
|
-
*/
|
|
480
|
-
setTime(time) {
|
|
481
|
-
(0, node_opcua_assert_1.assert)(time instanceof Date);
|
|
482
|
-
return this._set_var("time", node_opcua_variant_1.DataType.DateTime, time);
|
|
483
|
-
}
|
|
484
|
-
/**
|
|
485
|
-
* LocalTime is a structure containing the Offset and the DaylightSavingInOffset flag. The Offset
|
|
486
|
-
* specifies the time difference (in minutes) between the Time Property and the time at the location
|
|
487
|
-
* in which the event was issued. If DaylightSavingInOffset is TRUE, then Standard/Daylight
|
|
488
|
-
* savings time (DST) at the originating location is in effect and Offset includes the DST c orrection.
|
|
489
|
-
* If FALSE then the Offset does not include DST correction and DST may or may not have been
|
|
490
|
-
* in effect.
|
|
491
|
-
* @method setLocalTime
|
|
492
|
-
* @param localTime {TimeZone}
|
|
493
|
-
*/
|
|
494
|
-
setLocalTime(localTime) {
|
|
495
|
-
(0, node_opcua_assert_1.assert)(localTime instanceof node_opcua_types_1.TimeZoneDataType);
|
|
496
|
-
return this._set_var("localTime", node_opcua_variant_1.DataType.ExtensionObject, new node_opcua_types_1.TimeZoneDataType(localTime));
|
|
497
|
-
}
|
|
498
|
-
// read only !
|
|
499
|
-
getSourceName() {
|
|
500
|
-
return this._get_var("sourceName");
|
|
501
|
-
}
|
|
502
|
-
/**
|
|
503
|
-
* @method getSourceNode
|
|
504
|
-
* return {NodeId}
|
|
505
|
-
*/
|
|
506
|
-
getSourceNode() {
|
|
507
|
-
return this._get_var("sourceNode");
|
|
508
|
-
}
|
|
509
|
-
/**
|
|
510
|
-
* @method getEventType
|
|
511
|
-
* return {NodeId}
|
|
512
|
-
*/
|
|
513
|
-
getEventType() {
|
|
514
|
-
return this._get_var("eventType");
|
|
515
|
-
}
|
|
516
|
-
getMessage() {
|
|
517
|
-
return this._get_var("message");
|
|
518
|
-
}
|
|
519
|
-
isCurrentBranch() {
|
|
520
|
-
return (0, node_opcua_nodeid_1.sameNodeId)(this._get_var("branchId"), node_opcua_nodeid_1.NodeId.nullNodeId);
|
|
521
|
-
}
|
|
522
|
-
// -- ACKNOWLEDGEABLE -------------------------------------------------------------------
|
|
523
|
-
getAckedState() {
|
|
524
|
-
const acknowledgeableCondition = this.condition;
|
|
525
|
-
if (!acknowledgeableCondition.ackedState) {
|
|
526
|
-
throw new Error("Node " +
|
|
527
|
-
acknowledgeableCondition.browseName.toString() +
|
|
528
|
-
" of type " +
|
|
529
|
-
acknowledgeableCondition.typeDefinitionObj.browseName.toString() +
|
|
530
|
-
" has no AckedState");
|
|
531
|
-
}
|
|
532
|
-
return this._get_twoStateVariable("ackedState");
|
|
533
|
-
}
|
|
534
|
-
setAckedState(ackedState) {
|
|
535
|
-
ackedState = !!ackedState;
|
|
536
|
-
return (0, condition_1._setAckedState)(this, ackedState);
|
|
537
|
-
}
|
|
538
|
-
getConfirmedState() {
|
|
539
|
-
const acknowledgeableCondition = this.condition;
|
|
540
|
-
(0, node_opcua_assert_1.assert)(acknowledgeableCondition.confirmedState, "Must have a confirmed state");
|
|
541
|
-
return this._get_twoStateVariable("confirmedState");
|
|
542
|
-
}
|
|
543
|
-
setConfirmedStateIfExists(confirmedState) {
|
|
544
|
-
confirmedState = !!confirmedState;
|
|
545
|
-
const acknowledgeableCondition = this.condition;
|
|
546
|
-
if (!acknowledgeableCondition.confirmedState) {
|
|
547
|
-
// no condition node has been defined (this is valid)
|
|
548
|
-
// confirm state cannot be set
|
|
549
|
-
return;
|
|
550
|
-
}
|
|
551
|
-
// todo deal with Error code BadConditionBranchAlreadyConfirmed
|
|
552
|
-
return this._set_twoStateVariable("confirmedState", confirmedState);
|
|
553
|
-
}
|
|
554
|
-
setConfirmedState(confirmedState) {
|
|
555
|
-
const acknowledgeableCondition = this.condition;
|
|
556
|
-
(0, node_opcua_assert_1.assert)(acknowledgeableCondition.confirmedState, "Must have a confirmed state. Add ConfirmedState to the optionals");
|
|
557
|
-
return this.setConfirmedStateIfExists(confirmedState);
|
|
558
|
-
}
|
|
559
|
-
// ---- Shelving
|
|
560
|
-
/**
|
|
561
|
-
* @class ConditionSnapshot
|
|
562
|
-
*/
|
|
563
|
-
/**
|
|
564
|
-
* @method getSuppressedState
|
|
565
|
-
* @return {Boolean}
|
|
566
|
-
*/
|
|
567
|
-
getSuppressedState() {
|
|
568
|
-
return this._get_twoStateVariable("suppressedState");
|
|
569
|
-
}
|
|
570
|
-
/**
|
|
571
|
-
* @method setSuppressedState
|
|
572
|
-
* @param suppressed {Boolean}
|
|
573
|
-
*/
|
|
574
|
-
setSuppressedState(suppressed) {
|
|
575
|
-
suppressed = !!suppressed;
|
|
576
|
-
this._set_twoStateVariable("suppressedState", suppressed);
|
|
577
|
-
}
|
|
578
|
-
getActiveState() {
|
|
579
|
-
return this._get_twoStateVariable("activeState");
|
|
580
|
-
}
|
|
581
|
-
setActiveState(newActiveState) {
|
|
582
|
-
// xx var activeState = self.getActiveState();
|
|
583
|
-
// xx if (activeState === newActiveState) {
|
|
584
|
-
// xx return StatusCodes.Bad;
|
|
585
|
-
// xx }
|
|
586
|
-
this._set_twoStateVariable("activeState", newActiveState);
|
|
587
|
-
return node_opcua_status_code_1.StatusCodes.Good;
|
|
588
|
-
}
|
|
589
|
-
// tslint:disable:no-empty
|
|
590
|
-
setShelvingState() {
|
|
591
|
-
// todo
|
|
592
|
-
}
|
|
593
|
-
toString() {
|
|
594
|
-
// public condition: any = null;
|
|
595
|
-
// public eventData: any = null;
|
|
596
|
-
// public branchId: NodeId | null = null;
|
|
597
|
-
const t = this.condition.addressSpace.findNode(this.condition.typeDefinition);
|
|
598
|
-
return ("" +
|
|
599
|
-
"condition: " +
|
|
600
|
-
(this.condition.browseName.toString() + " " + this.condition.nodeId.toString()) +
|
|
601
|
-
", type: " +
|
|
602
|
-
(t.browseName.toString() + " " + t.nodeId.toString()) +
|
|
603
|
-
", branchId: " +
|
|
604
|
-
(this.branchId ? this.branchId.toString() : "<null>") +
|
|
605
|
-
", acked: " +
|
|
606
|
-
this.getAckedState() +
|
|
607
|
-
", confirmed: " +
|
|
608
|
-
this.getConfirmedState() +
|
|
609
|
-
", activeState: " +
|
|
610
|
-
this.getActiveState() +
|
|
611
|
-
// + ", suppressed: " + this.getSuppressedState()
|
|
612
|
-
", retain: " +
|
|
613
|
-
this.getRetain() +
|
|
614
|
-
", message: " +
|
|
615
|
-
this.getMessage() +
|
|
616
|
-
", comment: " +
|
|
617
|
-
this.getComment());
|
|
618
|
-
}
|
|
619
|
-
/**
|
|
620
|
-
* @class ConditionSnapshot
|
|
621
|
-
* @param varName
|
|
622
|
-
* @param value
|
|
623
|
-
* @private
|
|
624
|
-
*/
|
|
625
|
-
_set_twoStateVariable(varName, value) {
|
|
626
|
-
value = !!value;
|
|
627
|
-
const hrKey = ConditionSnapshot.normalizeName(varName);
|
|
628
|
-
const idKey = ConditionSnapshot.normalizeName(varName) + ".id";
|
|
629
|
-
const variant = new node_opcua_variant_1.Variant({ dataType: node_opcua_variant_1.DataType.Boolean, value });
|
|
630
|
-
this._map[idKey] = variant;
|
|
631
|
-
// also change varName with human readable text
|
|
632
|
-
const twoStateNode = this._node_index[hrKey];
|
|
633
|
-
if (!twoStateNode) {
|
|
634
|
-
throw new Error("Cannot find twoState Variable with name " + varName);
|
|
635
|
-
}
|
|
636
|
-
if (!(twoStateNode instanceof ua_two_state_variable_1.UATwoStateVariableImpl)) {
|
|
637
|
-
throw new Error("Cannot find twoState Variable with name " + varName + " " + twoStateNode);
|
|
638
|
-
}
|
|
639
|
-
const hrValue = new node_opcua_variant_1.Variant({
|
|
640
|
-
dataType: node_opcua_variant_1.DataType.LocalizedText,
|
|
641
|
-
value: value ? twoStateNode.getTrueState() : twoStateNode.getFalseState()
|
|
642
|
-
});
|
|
643
|
-
this._map[hrKey] = hrValue;
|
|
644
|
-
const node = this._node_index[idKey];
|
|
645
|
-
// also change ConditionNode if we are on currentBranch
|
|
646
|
-
if (this.isCurrentBranch()) {
|
|
647
|
-
(0, node_opcua_assert_1.assert)(twoStateNode instanceof ua_two_state_variable_1.UATwoStateVariableImpl);
|
|
648
|
-
twoStateNode.setValue(value);
|
|
649
|
-
// xx console.log("Is current branch", twoStateNode.toString(),variant.toString());
|
|
650
|
-
// xx console.log(" = ",twoStateNode.getValue());
|
|
651
|
-
}
|
|
652
|
-
this.emit("value_changed", node, variant);
|
|
653
|
-
}
|
|
654
|
-
_get_twoStateVariable(varName) {
|
|
655
|
-
const key = ConditionSnapshot.normalizeName(varName) + ".id";
|
|
656
|
-
const variant = this._map[key];
|
|
657
|
-
// istanbul ignore next
|
|
658
|
-
if (!variant) {
|
|
659
|
-
return "???";
|
|
660
|
-
// throw new Error("Cannot find TwoStateVariable with name " + varName);
|
|
661
|
-
}
|
|
662
|
-
return variant.value;
|
|
663
|
-
}
|
|
664
|
-
}
|
|
665
|
-
exports.ConditionSnapshot = ConditionSnapshot;
|
|
666
|
-
ConditionSnapshot.normalizeName = normalizeName;
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.ConditionSnapshot = void 0;
|
|
4
|
+
/**
|
|
5
|
+
* @module node-opcua-address-space.AlarmsAndConditions
|
|
6
|
+
*/
|
|
7
|
+
const events_1 = require("events");
|
|
8
|
+
const node_opcua_assert_1 = require("node-opcua-assert");
|
|
9
|
+
const node_opcua_data_model_1 = require("node-opcua-data-model");
|
|
10
|
+
const node_opcua_debug_1 = require("node-opcua-debug");
|
|
11
|
+
const node_opcua_nodeid_1 = require("node-opcua-nodeid");
|
|
12
|
+
const node_opcua_status_code_1 = require("node-opcua-status-code");
|
|
13
|
+
const node_opcua_types_1 = require("node-opcua-types");
|
|
14
|
+
const utils = require("node-opcua-utils");
|
|
15
|
+
const node_opcua_variant_1 = require("node-opcua-variant");
|
|
16
|
+
const event_data_1 = require("../event_data");
|
|
17
|
+
const ua_two_state_variable_1 = require("../state_machine/ua_two_state_variable");
|
|
18
|
+
const condition_1 = require("./condition");
|
|
19
|
+
const ua_condition_impl_1 = require("./ua_condition_impl");
|
|
20
|
+
const debugLog = (0, node_opcua_debug_1.make_debugLog)(__filename);
|
|
21
|
+
const doDebug = (0, node_opcua_debug_1.checkDebugFlag)(__filename);
|
|
22
|
+
function normalizeName(str) {
|
|
23
|
+
return str.split(".").map(utils.lowerFirstLetter).join(".");
|
|
24
|
+
}
|
|
25
|
+
function _visit(self, node, prefix) {
|
|
26
|
+
const aggregates = node.getAggregates();
|
|
27
|
+
for (const aggregate of aggregates) {
|
|
28
|
+
if (aggregate.nodeClass === node_opcua_data_model_1.NodeClass.Variable) {
|
|
29
|
+
let name = aggregate.browseName.toString();
|
|
30
|
+
name = utils.lowerFirstLetter(name);
|
|
31
|
+
const key = prefix + name;
|
|
32
|
+
// istanbul ignore next
|
|
33
|
+
if (doDebug) {
|
|
34
|
+
debugLog("adding key =", key);
|
|
35
|
+
}
|
|
36
|
+
const aggregateVariable = aggregate;
|
|
37
|
+
self._map[key] = aggregateVariable.readValue().value;
|
|
38
|
+
self._node_index[key] = aggregateVariable;
|
|
39
|
+
_visit(self, aggregate, prefix + name + ".");
|
|
40
|
+
}
|
|
41
|
+
}
|
|
42
|
+
}
|
|
43
|
+
function _record_condition_state(self, condition) {
|
|
44
|
+
self._map = {};
|
|
45
|
+
self._node_index = {};
|
|
46
|
+
(0, node_opcua_assert_1.assert)(condition instanceof ua_condition_impl_1.UAConditionImpl);
|
|
47
|
+
_visit(self, condition, "");
|
|
48
|
+
}
|
|
49
|
+
function _installOnChangeEventHandlers(self, node, prefix) {
|
|
50
|
+
const aggregates = node.getAggregates();
|
|
51
|
+
for (const aggregate of aggregates) {
|
|
52
|
+
if (aggregate.nodeClass === node_opcua_data_model_1.NodeClass.Variable) {
|
|
53
|
+
let name = aggregate.browseName.toString();
|
|
54
|
+
name = utils.lowerFirstLetter(name);
|
|
55
|
+
const key = prefix + name;
|
|
56
|
+
// istanbul ignore next
|
|
57
|
+
if (doDebug) {
|
|
58
|
+
debugLog("adding key =", key);
|
|
59
|
+
}
|
|
60
|
+
aggregate.on("value_changed", (newDataValue) => {
|
|
61
|
+
self._map[key] = newDataValue.value;
|
|
62
|
+
self._node_index[key] = aggregate;
|
|
63
|
+
});
|
|
64
|
+
_installOnChangeEventHandlers(self, aggregate, prefix + name + ".");
|
|
65
|
+
}
|
|
66
|
+
}
|
|
67
|
+
}
|
|
68
|
+
function _ensure_condition_values_correctness(self, node, prefix, error) {
|
|
69
|
+
const displayError = !!error;
|
|
70
|
+
error = error || [];
|
|
71
|
+
const aggregates = node.getAggregates();
|
|
72
|
+
for (const aggregate of aggregates) {
|
|
73
|
+
if (aggregate.nodeClass === node_opcua_data_model_1.NodeClass.Variable) {
|
|
74
|
+
let name = aggregate.browseName.toString();
|
|
75
|
+
name = utils.lowerFirstLetter(name);
|
|
76
|
+
const key = prefix + name;
|
|
77
|
+
const snapshot_value = self._map[key].toString();
|
|
78
|
+
const aggregateVariable = aggregate;
|
|
79
|
+
const condition_value = aggregateVariable.readValue().value.toString();
|
|
80
|
+
if (snapshot_value !== condition_value) {
|
|
81
|
+
error.push(" Condition Branch0 is not in sync with node values for " +
|
|
82
|
+
key +
|
|
83
|
+
"\n v1= " +
|
|
84
|
+
snapshot_value +
|
|
85
|
+
"\n v2= " +
|
|
86
|
+
condition_value);
|
|
87
|
+
}
|
|
88
|
+
self._node_index[key] = aggregate;
|
|
89
|
+
_ensure_condition_values_correctness(self, aggregate, prefix + name + ".", error);
|
|
90
|
+
}
|
|
91
|
+
}
|
|
92
|
+
if (displayError && error.length) {
|
|
93
|
+
throw new Error(error.join("\n"));
|
|
94
|
+
}
|
|
95
|
+
}
|
|
96
|
+
const disabledVar = new node_opcua_variant_1.Variant({
|
|
97
|
+
dataType: "StatusCode",
|
|
98
|
+
value: node_opcua_status_code_1.StatusCodes.BadConditionDisabled
|
|
99
|
+
});
|
|
100
|
+
// list of Condition variables that should not be published as BadConditionDisabled when the condition
|
|
101
|
+
// is in a disabled state.
|
|
102
|
+
const _varTable = {
|
|
103
|
+
branchId: 1,
|
|
104
|
+
conditionClassId: 1,
|
|
105
|
+
conditionClassName: 1,
|
|
106
|
+
conditionName: 1,
|
|
107
|
+
enabledState: 1,
|
|
108
|
+
"enabledState.effectiveDisplayName": 1,
|
|
109
|
+
"enabledState.id": 1,
|
|
110
|
+
"enabledState.transitionTime": 1,
|
|
111
|
+
eventId: 1,
|
|
112
|
+
eventType: 1,
|
|
113
|
+
localTime: 1,
|
|
114
|
+
sourceName: 1,
|
|
115
|
+
sourceNode: 1,
|
|
116
|
+
time: 1
|
|
117
|
+
};
|
|
118
|
+
class ConditionSnapshot extends events_1.EventEmitter {
|
|
119
|
+
/**
|
|
120
|
+
* @class ConditionSnapshot
|
|
121
|
+
* @extends EventEmitter
|
|
122
|
+
* @param condition
|
|
123
|
+
* @param branchId
|
|
124
|
+
* @constructor
|
|
125
|
+
*/
|
|
126
|
+
constructor(condition, branchId) {
|
|
127
|
+
super();
|
|
128
|
+
this.eventData = null;
|
|
129
|
+
this.branchId = null;
|
|
130
|
+
this._map = {};
|
|
131
|
+
this._node_index = {};
|
|
132
|
+
(0, node_opcua_assert_1.assert)(branchId instanceof node_opcua_nodeid_1.NodeId);
|
|
133
|
+
// xx self.branchId = branchId;
|
|
134
|
+
this.condition = condition;
|
|
135
|
+
this.eventData = new event_data_1.EventData(condition);
|
|
136
|
+
// a nodeId/Variant map
|
|
137
|
+
_record_condition_state(this, condition);
|
|
138
|
+
if ((0, node_opcua_nodeid_1.sameNodeId)(branchId, node_opcua_nodeid_1.NodeId.nullNodeId)) {
|
|
139
|
+
_installOnChangeEventHandlers(this, condition, "");
|
|
140
|
+
}
|
|
141
|
+
this._set_var("branchId", node_opcua_variant_1.DataType.NodeId, branchId);
|
|
142
|
+
}
|
|
143
|
+
_constructEventData() {
|
|
144
|
+
if (this.branchId && (0, node_opcua_nodeid_1.sameNodeId)(this.branchId, node_opcua_nodeid_1.NodeId.nullNodeId)) {
|
|
145
|
+
_ensure_condition_values_correctness(this, this.condition, "", []);
|
|
146
|
+
}
|
|
147
|
+
const c = this.condition;
|
|
148
|
+
const isDisabled = !c.getEnabledState();
|
|
149
|
+
const eventData = new event_data_1.EventData(this.condition);
|
|
150
|
+
for (const key of Object.keys(this._map)) {
|
|
151
|
+
const node = this._node_index[key];
|
|
152
|
+
if (!node) {
|
|
153
|
+
debugLog("cannot node for find key", key);
|
|
154
|
+
continue;
|
|
155
|
+
}
|
|
156
|
+
if (isDisabled && !Object.prototype.hasOwnProperty.call(_varTable, key)) {
|
|
157
|
+
eventData.setValue(key, node, disabledVar);
|
|
158
|
+
}
|
|
159
|
+
else {
|
|
160
|
+
eventData.setValue(key, node, this._map[key]);
|
|
161
|
+
}
|
|
162
|
+
}
|
|
163
|
+
return eventData;
|
|
164
|
+
}
|
|
165
|
+
/**
|
|
166
|
+
* @method resolveSelectClause
|
|
167
|
+
* @param selectClause {SelectClause}
|
|
168
|
+
*/
|
|
169
|
+
resolveSelectClause(selectClause) {
|
|
170
|
+
var _a;
|
|
171
|
+
return ((_a = this.eventData) === null || _a === void 0 ? void 0 : _a.resolveSelectClause(selectClause)) || null;
|
|
172
|
+
}
|
|
173
|
+
/**
|
|
174
|
+
*
|
|
175
|
+
*/
|
|
176
|
+
readValue(sessionContext, nodeId, selectClause) {
|
|
177
|
+
var _a;
|
|
178
|
+
const c = this.condition;
|
|
179
|
+
const isDisabled = !c.getEnabledState();
|
|
180
|
+
if (isDisabled) {
|
|
181
|
+
return disabledVar;
|
|
182
|
+
}
|
|
183
|
+
const key = nodeId.toString();
|
|
184
|
+
const variant = this._map[key];
|
|
185
|
+
if (!variant) {
|
|
186
|
+
// the value is not handled by us .. let's delegate
|
|
187
|
+
// to the eventData helper object
|
|
188
|
+
return ((_a = this.eventData) === null || _a === void 0 ? void 0 : _a.readValue(sessionContext, nodeId, selectClause)) || disabledVar;
|
|
189
|
+
}
|
|
190
|
+
return variant;
|
|
191
|
+
}
|
|
192
|
+
_get_var(varName) {
|
|
193
|
+
const c = this.condition;
|
|
194
|
+
if (!c.getEnabledState() && !Object.prototype.hasOwnProperty.call(_varTable, varName)) {
|
|
195
|
+
// xx console.log("ConditionSnapshot#_get_var condition enabled =", self.condition.getEnabledState());
|
|
196
|
+
return disabledVar;
|
|
197
|
+
}
|
|
198
|
+
const key = normalizeName(varName);
|
|
199
|
+
const variant = this._map[key];
|
|
200
|
+
return variant.value;
|
|
201
|
+
}
|
|
202
|
+
_set_var(varName, dataType, value) {
|
|
203
|
+
const key = normalizeName(varName);
|
|
204
|
+
// istanbul ignore next
|
|
205
|
+
if (!Object.prototype.hasOwnProperty.call(this._map, key)) {
|
|
206
|
+
if (doDebug) {
|
|
207
|
+
debugLog(" cannot find node " + varName);
|
|
208
|
+
debugLog(" map=", Object.keys(this._map).join(" "));
|
|
209
|
+
}
|
|
210
|
+
}
|
|
211
|
+
this._map[key] = new node_opcua_variant_1.Variant({
|
|
212
|
+
dataType,
|
|
213
|
+
value
|
|
214
|
+
});
|
|
215
|
+
if (this._map[key + ".sourceTimestamp"]) {
|
|
216
|
+
this._map[key + ".sourceTimestamp"] = new node_opcua_variant_1.Variant({
|
|
217
|
+
dataType: node_opcua_variant_1.DataType.DateTime,
|
|
218
|
+
value: new Date()
|
|
219
|
+
});
|
|
220
|
+
}
|
|
221
|
+
const variant = this._map[key];
|
|
222
|
+
const node = this._node_index[key];
|
|
223
|
+
if (!node) {
|
|
224
|
+
// for instance localTime is optional
|
|
225
|
+
debugLog("Cannot serVar " + varName + " dataType " + node_opcua_variant_1.DataType[dataType]);
|
|
226
|
+
return;
|
|
227
|
+
}
|
|
228
|
+
(0, node_opcua_assert_1.assert)(node.nodeClass === node_opcua_data_model_1.NodeClass.Variable);
|
|
229
|
+
this.emit("value_changed", node, variant);
|
|
230
|
+
}
|
|
231
|
+
/**
|
|
232
|
+
* @method getBrandId
|
|
233
|
+
* @return {NodeId}
|
|
234
|
+
*/
|
|
235
|
+
getBranchId() {
|
|
236
|
+
return this._get_var("branchId");
|
|
237
|
+
}
|
|
238
|
+
/**
|
|
239
|
+
* @method getEventId
|
|
240
|
+
* @return {ByteString}
|
|
241
|
+
*/
|
|
242
|
+
getEventId() {
|
|
243
|
+
return this._get_var("eventId");
|
|
244
|
+
}
|
|
245
|
+
/**
|
|
246
|
+
* @method getRetain
|
|
247
|
+
* @return {Boolean}
|
|
248
|
+
*/
|
|
249
|
+
getRetain() {
|
|
250
|
+
return this._get_var("retain");
|
|
251
|
+
}
|
|
252
|
+
/**
|
|
253
|
+
*
|
|
254
|
+
* @method setRetain
|
|
255
|
+
* @param retainFlag {Boolean}
|
|
256
|
+
*/
|
|
257
|
+
setRetain(retainFlag) {
|
|
258
|
+
retainFlag = !!retainFlag;
|
|
259
|
+
return this._set_var("retain", node_opcua_variant_1.DataType.Boolean, retainFlag);
|
|
260
|
+
}
|
|
261
|
+
/**
|
|
262
|
+
* @method renewEventId
|
|
263
|
+
*
|
|
264
|
+
*/
|
|
265
|
+
renewEventId() {
|
|
266
|
+
const addressSpace = this.condition.addressSpace;
|
|
267
|
+
// create a new event Id for this new condition
|
|
268
|
+
const eventId = addressSpace.generateEventId();
|
|
269
|
+
const ret = this._set_var("eventId", node_opcua_variant_1.DataType.ByteString, eventId.value);
|
|
270
|
+
// xx var branch = self; console.log("MMMMMMMMrenewEventId branch " +
|
|
271
|
+
// branch.getBranchId().toString() + " eventId = " + branch.getEventId().toString("hex"));
|
|
272
|
+
return ret;
|
|
273
|
+
}
|
|
274
|
+
/**
|
|
275
|
+
* @method getEnabledState
|
|
276
|
+
* @return {Boolean}
|
|
277
|
+
*/
|
|
278
|
+
getEnabledState() {
|
|
279
|
+
return this._get_twoStateVariable("enabledState");
|
|
280
|
+
}
|
|
281
|
+
/**
|
|
282
|
+
* @method setEnabledState
|
|
283
|
+
* @param value {Boolean}
|
|
284
|
+
* @return void
|
|
285
|
+
*/
|
|
286
|
+
setEnabledState(value) {
|
|
287
|
+
return this._set_twoStateVariable("enabledState", value);
|
|
288
|
+
}
|
|
289
|
+
/**
|
|
290
|
+
* @method getEnabledStateAsString
|
|
291
|
+
* @return {String}
|
|
292
|
+
*/
|
|
293
|
+
getEnabledStateAsString() {
|
|
294
|
+
return this._get_var("enabledState").text;
|
|
295
|
+
}
|
|
296
|
+
/**
|
|
297
|
+
* @method getComment
|
|
298
|
+
* @return {LocalizedText}
|
|
299
|
+
*/
|
|
300
|
+
getComment() {
|
|
301
|
+
return this._get_var("comment");
|
|
302
|
+
}
|
|
303
|
+
/**
|
|
304
|
+
* Set condition comment
|
|
305
|
+
*
|
|
306
|
+
* Comment contains the last comment provided for a certain state (ConditionBranch). It may
|
|
307
|
+
* have been provided by an AddComment Method, some other Method or in some other
|
|
308
|
+
* manner. The initial value of this Variable is null, unless it is provided in some other manner. If
|
|
309
|
+
* a Method provides as an option the ability to set a Comment, then the value of this Variable is
|
|
310
|
+
* reset to null if an optional comment is not provided.
|
|
311
|
+
*
|
|
312
|
+
* @method setComment
|
|
313
|
+
* @param txtMessage {LocalizedText}
|
|
314
|
+
*/
|
|
315
|
+
setComment(txtMessage) {
|
|
316
|
+
const txtMessage1 = (0, node_opcua_data_model_1.coerceLocalizedText)(txtMessage);
|
|
317
|
+
this._set_var("comment", node_opcua_variant_1.DataType.LocalizedText, txtMessage1);
|
|
318
|
+
}
|
|
319
|
+
/**
|
|
320
|
+
*
|
|
321
|
+
* @method setMessage
|
|
322
|
+
* @param txtMessage {LocalizedText}
|
|
323
|
+
*/
|
|
324
|
+
setMessage(txtMessage) {
|
|
325
|
+
const txtMessage1 = (0, node_opcua_data_model_1.coerceLocalizedText)(txtMessage);
|
|
326
|
+
return this._set_var("message", node_opcua_variant_1.DataType.LocalizedText, txtMessage1);
|
|
327
|
+
}
|
|
328
|
+
/**
|
|
329
|
+
* @method setClientUserId
|
|
330
|
+
* @param userIdentity {String}
|
|
331
|
+
*/
|
|
332
|
+
setClientUserId(userIdentity) {
|
|
333
|
+
return this._set_var("clientUserId", node_opcua_variant_1.DataType.String, userIdentity.toString());
|
|
334
|
+
}
|
|
335
|
+
/*
|
|
336
|
+
*
|
|
337
|
+
*
|
|
338
|
+
* as per spec 1.0.3 - Part 9
|
|
339
|
+
*
|
|
340
|
+
* Quality reveals the status of process values or other resources that this Condition instance is
|
|
341
|
+
* based upon. If, for example, a process value is “Uncertain”, the associated “LevelAlarm”
|
|
342
|
+
* Condition is also questionable. Values for the Quality can be any of the OPC StatusCodes
|
|
343
|
+
* defined in Part 8 as well as Good, Uncertain and Bad as defined in Part 4. These
|
|
344
|
+
* StatusCodes are similar to but slightly more generic than the description of data quality in the
|
|
345
|
+
* various field bus specifications. It is the responsibility of the Server to map internal status
|
|
346
|
+
* information to these codes. A Server which supports no quality information shall return Good.
|
|
347
|
+
* This quality can also reflect the communication status associated with the system that this
|
|
348
|
+
* value or resource is based on and from which this Alarm was received. For communication
|
|
349
|
+
* errors to the underlying system, especially those that result in some unavailable Event fields,
|
|
350
|
+
* the quality shall be BadNoCommunication error.
|
|
351
|
+
*
|
|
352
|
+
* Quality refers to the quality of the data value(s) upon which this Condition is based. Since a
|
|
353
|
+
* Condition is usually based on one or more Variables, the Condition inherits the quality of
|
|
354
|
+
* these Variables. E.g., if the process value is “Uncertain”, the “LevelAlarm” Condition is also
|
|
355
|
+
* questionable. If more than one variable is represented by a given condition or if the condition
|
|
356
|
+
* is from an underlining system and no direct mapping to a variable is available, it is up to the
|
|
357
|
+
* application to determine what quality is displayed as part of the condition.
|
|
358
|
+
*/
|
|
359
|
+
/**
|
|
360
|
+
* set the condition quality
|
|
361
|
+
* @method setQuality
|
|
362
|
+
* @param quality {StatusCode}
|
|
363
|
+
*/
|
|
364
|
+
setQuality(quality) {
|
|
365
|
+
this._set_var("quality", node_opcua_variant_1.DataType.StatusCode, quality);
|
|
366
|
+
}
|
|
367
|
+
/**
|
|
368
|
+
* @method getQuality
|
|
369
|
+
* @return {StatusCode}
|
|
370
|
+
*/
|
|
371
|
+
getQuality() {
|
|
372
|
+
return this._get_var("quality");
|
|
373
|
+
}
|
|
374
|
+
/*
|
|
375
|
+
* as per spec 1.0.3 - Part 9
|
|
376
|
+
* The Severity of a Condition is inherited from the base Event model defined in Part 5. It
|
|
377
|
+
* indicates the urgency of the Condition and is also commonly called ‘priority’, especially in
|
|
378
|
+
* relation to Alarms in the ProcessConditionClass.
|
|
379
|
+
*
|
|
380
|
+
* as per spec 1.0.3 - PArt 5
|
|
381
|
+
* Severity is an indication of the urgency of the Event. This is also commonly called “priority”.
|
|
382
|
+
* Values will range from 1 to 1 000, with 1 being the lowest severity and 1 000 being the highest.
|
|
383
|
+
* Typically, a severity of 1 would indicate an Event which is informational in nature, while a value
|
|
384
|
+
* of 1 000 would indicate an Event of catastrophic nature, which could potentially result in severe
|
|
385
|
+
* financial loss or loss of life.
|
|
386
|
+
* It is expected that very few Server implementations will support 1 000 distinct severity levels.
|
|
387
|
+
* Therefore, Server developers are responsible for distributing their severity levels across the
|
|
388
|
+
* 1 to 1 000 range in such a manner that clients can assume a linear distribution. For example, a
|
|
389
|
+
* client wishing to present five severity levels to a user should be able to do the following
|
|
390
|
+
* mapping:
|
|
391
|
+
* Client Severity OPC Severity
|
|
392
|
+
* HIGH 801 – 1 000
|
|
393
|
+
* MEDIUM HIGH 601 – 800
|
|
394
|
+
* MEDIUM 401 – 600
|
|
395
|
+
* MEDIUM LOW 201 – 400
|
|
396
|
+
* LOW 1 – 200
|
|
397
|
+
* In many cases a strict linear mapping of underlying source severities to the OPC Severity range
|
|
398
|
+
* is not appropriate. The Server developer will instead intelligently map the underlying source
|
|
399
|
+
* severities to the 1 to 1 000 OPC Severity range in some other fashion. In particular, it is
|
|
400
|
+
* recommended that Server developers map Events of high urgency into the OPC severity range
|
|
401
|
+
* of 667 to 1 000, Events of medium urgency into the OPC severity range of 334 to 666 and
|
|
402
|
+
* Events of low urgency into OPC severities of 1 to 333.
|
|
403
|
+
*/
|
|
404
|
+
/**
|
|
405
|
+
* @method setSeverity
|
|
406
|
+
* @param severity {UInt16}
|
|
407
|
+
*/
|
|
408
|
+
setSeverity(severity) {
|
|
409
|
+
(0, node_opcua_assert_1.assert)(isFinite(severity), "expecting a UInt16");
|
|
410
|
+
// record automatically last severity
|
|
411
|
+
const lastSeverity = this.getSeverity();
|
|
412
|
+
this.setLastSeverity(lastSeverity);
|
|
413
|
+
this._set_var("severity", node_opcua_variant_1.DataType.UInt16, severity);
|
|
414
|
+
}
|
|
415
|
+
/**
|
|
416
|
+
* @method getSeverity
|
|
417
|
+
* @return {UInt16}
|
|
418
|
+
*/
|
|
419
|
+
getSeverity() {
|
|
420
|
+
const c = this.condition;
|
|
421
|
+
(0, node_opcua_assert_1.assert)(c.getEnabledState(), "condition must be enabled");
|
|
422
|
+
const value = this._get_var("severity");
|
|
423
|
+
return +value;
|
|
424
|
+
}
|
|
425
|
+
/*
|
|
426
|
+
* as per spec 1.0.3 - part 9:
|
|
427
|
+
* LastSeverity provides the previous severity of the ConditionBranch. Initially this Variable
|
|
428
|
+
* contains a zero value; it will return a value only after a severity change. The new severity is
|
|
429
|
+
* supplied via the Severity Property which is inherited from the BaseEventType.
|
|
430
|
+
*
|
|
431
|
+
*/
|
|
432
|
+
/**
|
|
433
|
+
* @method setLastSeverity
|
|
434
|
+
* @param severity {UInt16}
|
|
435
|
+
*/
|
|
436
|
+
setLastSeverity(severity) {
|
|
437
|
+
severity = +severity;
|
|
438
|
+
return this._set_var("lastSeverity", node_opcua_variant_1.DataType.UInt16, severity);
|
|
439
|
+
}
|
|
440
|
+
/**
|
|
441
|
+
* @method getLastSeverity
|
|
442
|
+
* @return {UInt16}
|
|
443
|
+
*/
|
|
444
|
+
getLastSeverity() {
|
|
445
|
+
const value = this._get_var("lastSeverity");
|
|
446
|
+
return +value;
|
|
447
|
+
}
|
|
448
|
+
/**
|
|
449
|
+
* setReceiveTime
|
|
450
|
+
*
|
|
451
|
+
* (as per OPCUA 1.0.3 part 5)
|
|
452
|
+
*
|
|
453
|
+
* ReceiveTime provides the time the OPC UA Server received the Event from the underlying
|
|
454
|
+
* device of another Server.
|
|
455
|
+
*
|
|
456
|
+
* ReceiveTime is analogous to ServerTimestamp defined in Part 4, i.e.
|
|
457
|
+
* in the case where the OPC UA Server gets an Event from another OPC UA Server, each Server
|
|
458
|
+
* applies its own ReceiveTime. That implies that a Client may get the same Event, having the
|
|
459
|
+
* same EventId, from different Servers having different values of the ReceiveTime.
|
|
460
|
+
*
|
|
461
|
+
* The ReceiveTime shall always be returned as value and the Server is not allowed to return a
|
|
462
|
+
* StatusCode for the ReceiveTime indicating an error.
|
|
463
|
+
*
|
|
464
|
+
* @method setReceiveTime
|
|
465
|
+
* @param time {Date} : UTCTime
|
|
466
|
+
*/
|
|
467
|
+
setReceiveTime(time) {
|
|
468
|
+
(0, node_opcua_assert_1.assert)(time instanceof Date);
|
|
469
|
+
return this._set_var("receiveTime", node_opcua_variant_1.DataType.DateTime, time);
|
|
470
|
+
}
|
|
471
|
+
/**
|
|
472
|
+
* (as per OPCUA 1.0.3 part 5)
|
|
473
|
+
* Time provides the time the Event occurred. This value is set as close to the event generator as
|
|
474
|
+
* possible. It often comes from the underlying system or device. Once set, intermediate OPC UA
|
|
475
|
+
* Servers shall not alter the value.
|
|
476
|
+
*
|
|
477
|
+
* @method setTime
|
|
478
|
+
* @param time {Date}
|
|
479
|
+
*/
|
|
480
|
+
setTime(time) {
|
|
481
|
+
(0, node_opcua_assert_1.assert)(time instanceof Date);
|
|
482
|
+
return this._set_var("time", node_opcua_variant_1.DataType.DateTime, time);
|
|
483
|
+
}
|
|
484
|
+
/**
|
|
485
|
+
* LocalTime is a structure containing the Offset and the DaylightSavingInOffset flag. The Offset
|
|
486
|
+
* specifies the time difference (in minutes) between the Time Property and the time at the location
|
|
487
|
+
* in which the event was issued. If DaylightSavingInOffset is TRUE, then Standard/Daylight
|
|
488
|
+
* savings time (DST) at the originating location is in effect and Offset includes the DST c orrection.
|
|
489
|
+
* If FALSE then the Offset does not include DST correction and DST may or may not have been
|
|
490
|
+
* in effect.
|
|
491
|
+
* @method setLocalTime
|
|
492
|
+
* @param localTime {TimeZone}
|
|
493
|
+
*/
|
|
494
|
+
setLocalTime(localTime) {
|
|
495
|
+
(0, node_opcua_assert_1.assert)(localTime instanceof node_opcua_types_1.TimeZoneDataType);
|
|
496
|
+
return this._set_var("localTime", node_opcua_variant_1.DataType.ExtensionObject, new node_opcua_types_1.TimeZoneDataType(localTime));
|
|
497
|
+
}
|
|
498
|
+
// read only !
|
|
499
|
+
getSourceName() {
|
|
500
|
+
return this._get_var("sourceName");
|
|
501
|
+
}
|
|
502
|
+
/**
|
|
503
|
+
* @method getSourceNode
|
|
504
|
+
* return {NodeId}
|
|
505
|
+
*/
|
|
506
|
+
getSourceNode() {
|
|
507
|
+
return this._get_var("sourceNode");
|
|
508
|
+
}
|
|
509
|
+
/**
|
|
510
|
+
* @method getEventType
|
|
511
|
+
* return {NodeId}
|
|
512
|
+
*/
|
|
513
|
+
getEventType() {
|
|
514
|
+
return this._get_var("eventType");
|
|
515
|
+
}
|
|
516
|
+
getMessage() {
|
|
517
|
+
return this._get_var("message");
|
|
518
|
+
}
|
|
519
|
+
isCurrentBranch() {
|
|
520
|
+
return (0, node_opcua_nodeid_1.sameNodeId)(this._get_var("branchId"), node_opcua_nodeid_1.NodeId.nullNodeId);
|
|
521
|
+
}
|
|
522
|
+
// -- ACKNOWLEDGEABLE -------------------------------------------------------------------
|
|
523
|
+
getAckedState() {
|
|
524
|
+
const acknowledgeableCondition = this.condition;
|
|
525
|
+
if (!acknowledgeableCondition.ackedState) {
|
|
526
|
+
throw new Error("Node " +
|
|
527
|
+
acknowledgeableCondition.browseName.toString() +
|
|
528
|
+
" of type " +
|
|
529
|
+
acknowledgeableCondition.typeDefinitionObj.browseName.toString() +
|
|
530
|
+
" has no AckedState");
|
|
531
|
+
}
|
|
532
|
+
return this._get_twoStateVariable("ackedState");
|
|
533
|
+
}
|
|
534
|
+
setAckedState(ackedState) {
|
|
535
|
+
ackedState = !!ackedState;
|
|
536
|
+
return (0, condition_1._setAckedState)(this, ackedState);
|
|
537
|
+
}
|
|
538
|
+
getConfirmedState() {
|
|
539
|
+
const acknowledgeableCondition = this.condition;
|
|
540
|
+
(0, node_opcua_assert_1.assert)(acknowledgeableCondition.confirmedState, "Must have a confirmed state");
|
|
541
|
+
return this._get_twoStateVariable("confirmedState");
|
|
542
|
+
}
|
|
543
|
+
setConfirmedStateIfExists(confirmedState) {
|
|
544
|
+
confirmedState = !!confirmedState;
|
|
545
|
+
const acknowledgeableCondition = this.condition;
|
|
546
|
+
if (!acknowledgeableCondition.confirmedState) {
|
|
547
|
+
// no condition node has been defined (this is valid)
|
|
548
|
+
// confirm state cannot be set
|
|
549
|
+
return;
|
|
550
|
+
}
|
|
551
|
+
// todo deal with Error code BadConditionBranchAlreadyConfirmed
|
|
552
|
+
return this._set_twoStateVariable("confirmedState", confirmedState);
|
|
553
|
+
}
|
|
554
|
+
setConfirmedState(confirmedState) {
|
|
555
|
+
const acknowledgeableCondition = this.condition;
|
|
556
|
+
(0, node_opcua_assert_1.assert)(acknowledgeableCondition.confirmedState, "Must have a confirmed state. Add ConfirmedState to the optionals");
|
|
557
|
+
return this.setConfirmedStateIfExists(confirmedState);
|
|
558
|
+
}
|
|
559
|
+
// ---- Shelving
|
|
560
|
+
/**
|
|
561
|
+
* @class ConditionSnapshot
|
|
562
|
+
*/
|
|
563
|
+
/**
|
|
564
|
+
* @method getSuppressedState
|
|
565
|
+
* @return {Boolean}
|
|
566
|
+
*/
|
|
567
|
+
getSuppressedState() {
|
|
568
|
+
return this._get_twoStateVariable("suppressedState");
|
|
569
|
+
}
|
|
570
|
+
/**
|
|
571
|
+
* @method setSuppressedState
|
|
572
|
+
* @param suppressed {Boolean}
|
|
573
|
+
*/
|
|
574
|
+
setSuppressedState(suppressed) {
|
|
575
|
+
suppressed = !!suppressed;
|
|
576
|
+
this._set_twoStateVariable("suppressedState", suppressed);
|
|
577
|
+
}
|
|
578
|
+
getActiveState() {
|
|
579
|
+
return this._get_twoStateVariable("activeState");
|
|
580
|
+
}
|
|
581
|
+
setActiveState(newActiveState) {
|
|
582
|
+
// xx var activeState = self.getActiveState();
|
|
583
|
+
// xx if (activeState === newActiveState) {
|
|
584
|
+
// xx return StatusCodes.Bad;
|
|
585
|
+
// xx }
|
|
586
|
+
this._set_twoStateVariable("activeState", newActiveState);
|
|
587
|
+
return node_opcua_status_code_1.StatusCodes.Good;
|
|
588
|
+
}
|
|
589
|
+
// tslint:disable:no-empty
|
|
590
|
+
setShelvingState() {
|
|
591
|
+
// todo
|
|
592
|
+
}
|
|
593
|
+
toString() {
|
|
594
|
+
// public condition: any = null;
|
|
595
|
+
// public eventData: any = null;
|
|
596
|
+
// public branchId: NodeId | null = null;
|
|
597
|
+
const t = this.condition.addressSpace.findNode(this.condition.typeDefinition);
|
|
598
|
+
return ("" +
|
|
599
|
+
"condition: " +
|
|
600
|
+
(this.condition.browseName.toString() + " " + this.condition.nodeId.toString()) +
|
|
601
|
+
", type: " +
|
|
602
|
+
(t.browseName.toString() + " " + t.nodeId.toString()) +
|
|
603
|
+
", branchId: " +
|
|
604
|
+
(this.branchId ? this.branchId.toString() : "<null>") +
|
|
605
|
+
", acked: " +
|
|
606
|
+
this.getAckedState() +
|
|
607
|
+
", confirmed: " +
|
|
608
|
+
this.getConfirmedState() +
|
|
609
|
+
", activeState: " +
|
|
610
|
+
this.getActiveState() +
|
|
611
|
+
// + ", suppressed: " + this.getSuppressedState()
|
|
612
|
+
", retain: " +
|
|
613
|
+
this.getRetain() +
|
|
614
|
+
", message: " +
|
|
615
|
+
this.getMessage() +
|
|
616
|
+
", comment: " +
|
|
617
|
+
this.getComment());
|
|
618
|
+
}
|
|
619
|
+
/**
|
|
620
|
+
* @class ConditionSnapshot
|
|
621
|
+
* @param varName
|
|
622
|
+
* @param value
|
|
623
|
+
* @private
|
|
624
|
+
*/
|
|
625
|
+
_set_twoStateVariable(varName, value) {
|
|
626
|
+
value = !!value;
|
|
627
|
+
const hrKey = ConditionSnapshot.normalizeName(varName);
|
|
628
|
+
const idKey = ConditionSnapshot.normalizeName(varName) + ".id";
|
|
629
|
+
const variant = new node_opcua_variant_1.Variant({ dataType: node_opcua_variant_1.DataType.Boolean, value });
|
|
630
|
+
this._map[idKey] = variant;
|
|
631
|
+
// also change varName with human readable text
|
|
632
|
+
const twoStateNode = this._node_index[hrKey];
|
|
633
|
+
if (!twoStateNode) {
|
|
634
|
+
throw new Error("Cannot find twoState Variable with name " + varName);
|
|
635
|
+
}
|
|
636
|
+
if (!(twoStateNode instanceof ua_two_state_variable_1.UATwoStateVariableImpl)) {
|
|
637
|
+
throw new Error("Cannot find twoState Variable with name " + varName + " " + twoStateNode);
|
|
638
|
+
}
|
|
639
|
+
const hrValue = new node_opcua_variant_1.Variant({
|
|
640
|
+
dataType: node_opcua_variant_1.DataType.LocalizedText,
|
|
641
|
+
value: value ? twoStateNode.getTrueState() : twoStateNode.getFalseState()
|
|
642
|
+
});
|
|
643
|
+
this._map[hrKey] = hrValue;
|
|
644
|
+
const node = this._node_index[idKey];
|
|
645
|
+
// also change ConditionNode if we are on currentBranch
|
|
646
|
+
if (this.isCurrentBranch()) {
|
|
647
|
+
(0, node_opcua_assert_1.assert)(twoStateNode instanceof ua_two_state_variable_1.UATwoStateVariableImpl);
|
|
648
|
+
twoStateNode.setValue(value);
|
|
649
|
+
// xx console.log("Is current branch", twoStateNode.toString(),variant.toString());
|
|
650
|
+
// xx console.log(" = ",twoStateNode.getValue());
|
|
651
|
+
}
|
|
652
|
+
this.emit("value_changed", node, variant);
|
|
653
|
+
}
|
|
654
|
+
_get_twoStateVariable(varName) {
|
|
655
|
+
const key = ConditionSnapshot.normalizeName(varName) + ".id";
|
|
656
|
+
const variant = this._map[key];
|
|
657
|
+
// istanbul ignore next
|
|
658
|
+
if (!variant) {
|
|
659
|
+
return "???";
|
|
660
|
+
// throw new Error("Cannot find TwoStateVariable with name " + varName);
|
|
661
|
+
}
|
|
662
|
+
return variant.value;
|
|
663
|
+
}
|
|
664
|
+
}
|
|
665
|
+
exports.ConditionSnapshot = ConditionSnapshot;
|
|
666
|
+
ConditionSnapshot.normalizeName = normalizeName;
|
|
667
667
|
//# sourceMappingURL=condition_snapshot.js.map
|