node-opcua-address-space 2.76.1 → 2.76.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 +33 -33
- package/dist/source/helpers/argument_list.js +258 -258
- 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 -0
- package/dist/source/helpers/check_event_clause.js +53 -0
- package/dist/source/helpers/check_event_clause.js.map +1 -0
- 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 +75 -75
- 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 +56 -56
- package/dist/source/index.js +83 -83
- package/dist/source/interfaces/alarms_and_conditions/condition_info_i.d.ts +19 -19
- package/dist/source/interfaces/alarms_and_conditions/condition_info_i.js +2 -2
- package/dist/source/interfaces/alarms_and_conditions/condition_snapshot.d.ts +193 -193
- package/dist/source/interfaces/alarms_and_conditions/condition_snapshot.js +2 -2
- package/dist/source/interfaces/alarms_and_conditions/deviation_stuff.d.ts +12 -12
- package/dist/source/interfaces/alarms_and_conditions/deviation_stuff.js +2 -2
- package/dist/source/interfaces/alarms_and_conditions/install_setpoint_options.d.ts +10 -10
- package/dist/source/interfaces/alarms_and_conditions/install_setpoint_options.js +2 -2
- package/dist/source/interfaces/alarms_and_conditions/instantiate_alarm_condition_options.d.ts +7 -7
- package/dist/source/interfaces/alarms_and_conditions/instantiate_alarm_condition_options.js +2 -2
- package/dist/source/interfaces/alarms_and_conditions/instantiate_condition_options.d.ts +7 -7
- package/dist/source/interfaces/alarms_and_conditions/instantiate_condition_options.js +2 -2
- package/dist/source/interfaces/alarms_and_conditions/instantiate_exclusive_deviation_alarm_options.d.ts +4 -4
- package/dist/source/interfaces/alarms_and_conditions/instantiate_exclusive_deviation_alarm_options.js +2 -2
- package/dist/source/interfaces/alarms_and_conditions/instantiate_exclusive_limit_alarm_options.d.ts +4 -4
- package/dist/source/interfaces/alarms_and_conditions/instantiate_exclusive_limit_alarm_options.js +2 -2
- package/dist/source/interfaces/alarms_and_conditions/instantiate_limit_alarm_options.d.ts +9 -9
- package/dist/source/interfaces/alarms_and_conditions/instantiate_limit_alarm_options.js +2 -2
- package/dist/source/interfaces/alarms_and_conditions/instantiate_non_exclusive_deviation_alarm_options.d.ts +4 -4
- package/dist/source/interfaces/alarms_and_conditions/instantiate_non_exclusive_deviation_alarm_options.js +2 -2
- package/dist/source/interfaces/alarms_and_conditions/instantiate_non_exclusive_limit_alarm_options.d.ts +4 -4
- package/dist/source/interfaces/alarms_and_conditions/instantiate_non_exclusive_limit_alarm_options.js +2 -2
- package/dist/source/interfaces/alarms_and_conditions/instantiate_off_normal_alarm_options.d.ts +20 -20
- package/dist/source/interfaces/alarms_and_conditions/instantiate_off_normal_alarm_options.js +2 -2
- package/dist/source/interfaces/alarms_and_conditions/ua_acknowledgeable_condition_ex.d.ts +23 -23
- package/dist/source/interfaces/alarms_and_conditions/ua_acknowledgeable_condition_ex.js +2 -2
- package/dist/source/interfaces/alarms_and_conditions/ua_alarm_condition_ex.d.ts +32 -32
- package/dist/source/interfaces/alarms_and_conditions/ua_alarm_condition_ex.js +2 -2
- package/dist/source/interfaces/alarms_and_conditions/ua_certificate_expiration_alarm_ex.d.ts +19 -19
- package/dist/source/interfaces/alarms_and_conditions/ua_certificate_expiration_alarm_ex.js +2 -2
- package/dist/source/interfaces/alarms_and_conditions/ua_condition_ex.d.ts +42 -42
- package/dist/source/interfaces/alarms_and_conditions/ua_condition_ex.js +2 -2
- package/dist/source/interfaces/alarms_and_conditions/ua_discrete_alarm_ex.d.ts +7 -7
- package/dist/source/interfaces/alarms_and_conditions/ua_discrete_alarm_ex.js +25 -25
- package/dist/source/interfaces/alarms_and_conditions/ua_exclusive_deviation_alarm_ex.d.ts +5 -5
- package/dist/source/interfaces/alarms_and_conditions/ua_exclusive_deviation_alarm_ex.js +2 -2
- package/dist/source/interfaces/alarms_and_conditions/ua_exclusive_limit_alarm_ex.d.ts +20 -20
- package/dist/source/interfaces/alarms_and_conditions/ua_exclusive_limit_alarm_ex.js +2 -2
- package/dist/source/interfaces/alarms_and_conditions/ua_limit_alarm_ex.d.ts +26 -26
- package/dist/source/interfaces/alarms_and_conditions/ua_limit_alarm_ex.js +2 -2
- package/dist/source/interfaces/alarms_and_conditions/ua_non_exclusive_deviation_alarm_ex.d.ts +8 -8
- package/dist/source/interfaces/alarms_and_conditions/ua_non_exclusive_deviation_alarm_ex.js +2 -2
- package/dist/source/interfaces/alarms_and_conditions/ua_non_exclusive_limit_alarm_ex.d.ts +10 -10
- package/dist/source/interfaces/alarms_and_conditions/ua_non_exclusive_limit_alarm_ex.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_shelved_state_machine_ex.d.ts +30 -30
- package/dist/source/interfaces/state_machine/ua_shelved_state_machine_ex.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 +1461 -1461
- package/dist/source/loader/make_semver_compatible.d.ts +6 -6
- package/dist/source/loader/make_semver_compatible.js +25 -25
- package/dist/source/loader/make_xml_extension_object_parser.d.ts +28 -28
- package/dist/source/loader/make_xml_extension_object_parser.js +325 -325
- package/dist/source/loader/namespace_post_step.d.ts +10 -10
- package/dist/source/loader/namespace_post_step.js +61 -61
- package/dist/source/loader/register_node_promoter.d.ts +2 -2
- 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 +32 -32
- 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 +1392 -1392
- 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 -0
- package/dist/src/alarms_and_conditions/check_where_clause.js +110 -0
- package/dist/src/alarms_and_conditions/check_where_clause.js.map +1 -0
- package/dist/src/alarms_and_conditions/condition.d.ts +5 -5
- package/dist/src/alarms_and_conditions/condition.js +78 -78
- package/dist/src/alarms_and_conditions/condition_info.d.ts +27 -0
- package/dist/src/alarms_and_conditions/condition_info.js +55 -0
- package/dist/src/alarms_and_conditions/condition_info.js.map +1 -0
- package/dist/src/alarms_and_conditions/condition_info_impl.d.ts +26 -26
- package/dist/src/alarms_and_conditions/condition_info_impl.js +54 -54
- package/dist/src/alarms_and_conditions/condition_snapshot.d.ts +233 -0
- package/dist/src/alarms_and_conditions/condition_snapshot.js +667 -0
- package/dist/src/alarms_and_conditions/condition_snapshot.js.map +1 -0
- package/dist/src/alarms_and_conditions/condition_snapshot_impl.d.ts +222 -222
- package/dist/src/alarms_and_conditions/condition_snapshot_impl.js +657 -657
- package/dist/src/alarms_and_conditions/deviation_alarm_helper.d.ts +9 -9
- package/dist/src/alarms_and_conditions/deviation_alarm_helper.js +61 -61
- package/dist/src/alarms_and_conditions/extract_event_fields.d.ts +10 -0
- package/dist/src/alarms_and_conditions/extract_event_fields.js +90 -0
- package/dist/src/alarms_and_conditions/extract_event_fields.js.map +1 -0
- package/dist/src/alarms_and_conditions/index.d.ts +16 -16
- package/dist/src/alarms_and_conditions/index.js +32 -32
- package/dist/src/alarms_and_conditions/ua_acknowledgeable_condition_impl.d.ts +44 -44
- package/dist/src/alarms_and_conditions/ua_acknowledgeable_condition_impl.js +244 -244
- package/dist/src/alarms_and_conditions/ua_alarm_condition_impl.d.ts +93 -93
- package/dist/src/alarms_and_conditions/ua_alarm_condition_impl.js +419 -419
- package/dist/src/alarms_and_conditions/ua_base_event_impl.d.ts +26 -26
- 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 +44 -44
- package/dist/src/alarms_and_conditions/ua_certificate_expiration_alarm_impl.js +183 -183
- package/dist/src/alarms_and_conditions/ua_condition_impl.d.ts +153 -153
- package/dist/src/alarms_and_conditions/ua_condition_impl.js +1028 -1028
- package/dist/src/alarms_and_conditions/ua_discrete_alarm_impl.d.ts +14 -14
- package/dist/src/alarms_and_conditions/ua_discrete_alarm_impl.js +34 -34
- package/dist/src/alarms_and_conditions/ua_exclusive_deviation_alarm_impl.d.ts +24 -24
- package/dist/src/alarms_and_conditions/ua_exclusive_deviation_alarm_impl.js +56 -56
- package/dist/src/alarms_and_conditions/ua_exclusive_level_alarm_impl.d.ts +11 -11
- package/dist/src/alarms_and_conditions/ua_exclusive_level_alarm_impl.js +11 -11
- package/dist/src/alarms_and_conditions/ua_exclusive_limit_alarm_impl.d.ts +23 -23
- package/dist/src/alarms_and_conditions/ua_exclusive_limit_alarm_impl.js +86 -86
- package/dist/src/alarms_and_conditions/ua_exclusive_rate_of_change_alarm_impl.d.ts +11 -11
- 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 +79 -79
- package/dist/src/alarms_and_conditions/ua_limit_alarm_impl.js +250 -250
- package/dist/src/alarms_and_conditions/ua_non_exclusive_deviation_alarm_impl.d.ts +24 -24
- package/dist/src/alarms_and_conditions/ua_non_exclusive_deviation_alarm_impl.js +50 -50
- package/dist/src/alarms_and_conditions/ua_non_exclusive_limit_alarm_impl.d.ts +19 -19
- package/dist/src/alarms_and_conditions/ua_non_exclusive_limit_alarm_impl.js +162 -162
- package/dist/src/alarms_and_conditions/ua_off_normal_alarm_impl.d.ts +46 -46
- package/dist/src/alarms_and_conditions/ua_off_normal_alarm_impl.js +166 -166
- package/dist/src/alarms_and_conditions/ua_system_off_normal_alarm_impl.d.ts +18 -18
- package/dist/src/alarms_and_conditions/ua_system_off_normal_alarm_impl.js +17 -17
- 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 -0
- package/dist/src/data_access/ua_multistate_value_discrete.js +250 -0
- package/dist/src/data_access/ua_multistate_value_discrete.js.map +1 -0
- package/dist/src/data_access/ua_multistate_value_discrete_impl.d.ts +51 -51
- package/dist/src/data_access/ua_multistate_value_discrete_impl.js +249 -249
- package/dist/src/data_access/ua_two_state_discrete.d.ts +25 -0
- package/dist/src/data_access/ua_two_state_discrete.js +154 -0
- package/dist/src/data_access/ua_two_state_discrete.js.map +1 -0
- package/dist/src/data_access/ua_two_state_discrete_impl.d.ts +25 -25
- package/dist/src/data_access/ua_two_state_discrete_impl.js +153 -153
- package/dist/src/event_data.d.ts +34 -34
- package/dist/src/event_data.js +64 -64
- 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 +43 -43
- package/dist/src/index_current.js +74 -74
- package/dist/src/namespace_impl.d.ts +461 -461
- package/dist/src/namespace_impl.js +1732 -1732
- 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 +1155 -1155
- 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 +38 -38
- 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 +371 -371
- 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 -35
- package/dist/src/ua_object_impl.js +161 -161
- 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 -19
- package/dist/src/ua_view_impl.js +43 -43
- package/distHelpers/add_event_generator_object.d.ts +3 -3
- package/distHelpers/add_event_generator_object.js +64 -64
- package/distHelpers/alarms_and_conditions_demo.d.ts +9 -9
- package/distHelpers/alarms_and_conditions_demo.js +115 -115
- 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 +36 -35
|
@@ -1,420 +1,420 @@
|
|
|
1
|
-
"use strict";
|
|
2
|
-
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
-
exports.UAAlarmConditionImpl = void 0;
|
|
4
|
-
/**
|
|
5
|
-
* @module node-opcua-address-space.AlarmsAndConditions
|
|
6
|
-
*/
|
|
7
|
-
const lodash_1 = require("lodash");
|
|
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_nodeid_1 = require("node-opcua-nodeid");
|
|
11
|
-
const node_opcua_status_code_1 = require("node-opcua-status-code");
|
|
12
|
-
const node_opcua_variant_1 = require("node-opcua-variant");
|
|
13
|
-
const ua_two_state_variable_1 = require("../state_machine/ua_two_state_variable");
|
|
14
|
-
const ua_shelving_state_machine_ex_1 = require("../state_machine/ua_shelving_state_machine_ex");
|
|
15
|
-
const condition_info_impl_1 = require("./condition_info_impl");
|
|
16
|
-
const ua_acknowledgeable_condition_impl_1 = require("./ua_acknowledgeable_condition_impl");
|
|
17
|
-
function _update_suppressedOrShelved(alarmNode) {
|
|
18
|
-
alarmNode.suppressedOrShelved.setValueFromSource({
|
|
19
|
-
dataType: node_opcua_variant_1.DataType.Boolean,
|
|
20
|
-
value: alarmNode.isSuppressedOrShelved()
|
|
21
|
-
});
|
|
22
|
-
}
|
|
23
|
-
class UAAlarmConditionImpl extends ua_acknowledgeable_condition_impl_1.UAAcknowledgeableConditionImpl {
|
|
24
|
-
static instantiate(namespace, alarmConditionTypeId, options, data) {
|
|
25
|
-
const addressSpace = namespace.addressSpace;
|
|
26
|
-
// xx assert(Object.prototype.hasOwnProperty.call(options,"conditionOf")); // must provide a conditionOf
|
|
27
|
-
(0, node_opcua_assert_1.assert)(Object.prototype.hasOwnProperty.call(options, "inputNode")); // must provide a inputNode
|
|
28
|
-
const alarmConditionType = addressSpace.findEventType(alarmConditionTypeId);
|
|
29
|
-
/* istanbul ignore next */
|
|
30
|
-
if (!alarmConditionType) {
|
|
31
|
-
throw new Error(" cannot find Alarm Condition Type for " + alarmConditionTypeId);
|
|
32
|
-
}
|
|
33
|
-
const alarmConditionTypeBase = addressSpace.findEventType("AlarmConditionType");
|
|
34
|
-
/* istanbul ignore next */
|
|
35
|
-
if (!alarmConditionTypeBase) {
|
|
36
|
-
throw new Error("cannot find AlarmConditionType");
|
|
37
|
-
}
|
|
38
|
-
options.optionals = options.optionals || [];
|
|
39
|
-
if (Object.prototype.hasOwnProperty.call(options, "maxTimeShelved")) {
|
|
40
|
-
options.optionals.push("MaxTimeShelved");
|
|
41
|
-
(0, node_opcua_assert_1.assert)(isFinite(options.maxTimeShelved));
|
|
42
|
-
}
|
|
43
|
-
(0, node_opcua_assert_1.assert)(alarmConditionTypeBase === alarmConditionType || alarmConditionType.isSupertypeOf(alarmConditionTypeBase));
|
|
44
|
-
const alarmNode = ua_acknowledgeable_condition_impl_1.UAAcknowledgeableConditionImpl.instantiate(namespace, alarmConditionTypeId, options, data);
|
|
45
|
-
Object.setPrototypeOf(alarmNode, UAAlarmConditionImpl.prototype);
|
|
46
|
-
// ----------------------- Install Alarm specifics
|
|
47
|
-
//
|
|
48
|
-
// Specs 1.03:
|
|
49
|
-
// ActiveState/Id when set to TRUE indicates that the situation the Condition is representing
|
|
50
|
-
// currently exists. When a Condition instance is in the inactive state (ActiveState/Id when set to
|
|
51
|
-
// FALSE) it is representing a situation that has returned to a normal state. The transitions of
|
|
52
|
-
// Conditions to the inactive and Active states are triggered by Server specific actions. Sub-
|
|
53
|
-
// Types of the AlarmConditionType specified later in this document will have sub-state models
|
|
54
|
-
// that further define the Active state. Recommended state names are described in Annex A.
|
|
55
|
-
// install activeState - Mandatory
|
|
56
|
-
/**
|
|
57
|
-
* @property activeState
|
|
58
|
-
* @type {UATwoStateVariable}
|
|
59
|
-
*/
|
|
60
|
-
(0, ua_two_state_variable_1._install_TwoStateVariable_machinery)(alarmNode.activeState, {
|
|
61
|
-
falseState: "Inactive",
|
|
62
|
-
trueState: "Active"
|
|
63
|
-
});
|
|
64
|
-
alarmNode.currentBranch().setActiveState(false);
|
|
65
|
-
// Specs 1.03:
|
|
66
|
-
/**
|
|
67
|
-
*
|
|
68
|
-
* SuppressState is used internally by a Server to automatically suppress Alarms due to system
|
|
69
|
-
* specific reasons. For example a system may be configured to suppress Alarms that are
|
|
70
|
-
* associated with machinery that is shutdown, such as a low level Alarm for a tank that is
|
|
71
|
-
* currently not in use.
|
|
72
|
-
*
|
|
73
|
-
* @property suppressedState
|
|
74
|
-
* @type UATwoStateVariable
|
|
75
|
-
*/
|
|
76
|
-
if (alarmNode.suppressedState) {
|
|
77
|
-
// install activeState - Optional
|
|
78
|
-
(0, ua_two_state_variable_1._install_TwoStateVariable_machinery)(alarmNode.suppressedState, {
|
|
79
|
-
falseState: "Unsuppressed",
|
|
80
|
-
trueState: "Suppressed"
|
|
81
|
-
});
|
|
82
|
-
}
|
|
83
|
-
// Specs 1.03:
|
|
84
|
-
/**
|
|
85
|
-
* ShelvingState suggests whether an Alarm shall (temporarily) be prevented from being
|
|
86
|
-
* displayed to the user. It is quite often used to block nuisance Alarms.
|
|
87
|
-
*
|
|
88
|
-
* @property shelvingState
|
|
89
|
-
* @type ShelvingStateMachine
|
|
90
|
-
*/
|
|
91
|
-
if (alarmNode.shelvingState) {
|
|
92
|
-
ua_shelving_state_machine_ex_1.UAShelvedStateMachineExImpl.promote(alarmNode.shelvingState);
|
|
93
|
-
}
|
|
94
|
-
// SuppressedOrShelved : Mandatory
|
|
95
|
-
// install suppressedOrShelved automatic detection
|
|
96
|
-
/**
|
|
97
|
-
* The SuppressedState and the ShelvingState together result in the SuppressedOrShelved status of the
|
|
98
|
-
* Condition. When an Alarm is in one of the states, the SuppressedOrShelved property will be set TRUE
|
|
99
|
-
* and this Alarm is then typically not displayed by the Client. State transitions associated with the
|
|
100
|
-
* Alarm do occur, but they are not typically displayed by the Clients as long as the Alarm remains in
|
|
101
|
-
* either the Suppressed or Shelved state.
|
|
102
|
-
* The dataType is Boolean.
|
|
103
|
-
* @property suppressedState
|
|
104
|
-
* @type UAVariable
|
|
105
|
-
*
|
|
106
|
-
*/
|
|
107
|
-
if (alarmNode.suppressedState) {
|
|
108
|
-
alarmNode.suppressedState.on("value_changed", (newDataValue) => {
|
|
109
|
-
_update_suppressedOrShelved(alarmNode);
|
|
110
|
-
});
|
|
111
|
-
}
|
|
112
|
-
if (alarmNode.shelvingState) {
|
|
113
|
-
alarmNode.shelvingState.currentState.on("value_changed", (newDataValue) => {
|
|
114
|
-
_update_suppressedOrShelved(alarmNode);
|
|
115
|
-
});
|
|
116
|
-
}
|
|
117
|
-
_update_suppressedOrShelved(alarmNode);
|
|
118
|
-
/**
|
|
119
|
-
* The optional Property MaxTimeShelved is used to set the maximum time that an Alarm Condition may be shelved.
|
|
120
|
-
* The value is expressed as duration. Systems can use this Property to prevent permanent Shelving of an Alarm.
|
|
121
|
-
* If this Property is present it will be an upper limit on the duration passed into a TimedShelve Method call.
|
|
122
|
-
* If a value that exceeds the value of this property is passed to the TimedShelve Method,
|
|
123
|
-
* than a BadShelvingTimeOutOfRange error code is returned on the call. If this Property is present it will
|
|
124
|
-
* also be enforced for the OneShotShelved state, in that an Alarm Condition will transition to the Unshelved
|
|
125
|
-
* state from the OneShotShelved state if the duration specified in this Property expires following a
|
|
126
|
-
* OneShotShelve operation without a change of any of the other items associated with the Condition.
|
|
127
|
-
*
|
|
128
|
-
* @property maxTimeShelved
|
|
129
|
-
* @type {UAVariable}
|
|
130
|
-
*/
|
|
131
|
-
if (alarmNode.maxTimeShelved) {
|
|
132
|
-
options.maxTimeShelved = options.maxTimeShelved || 60.0 * 1000; // 60 seconds
|
|
133
|
-
alarmNode.maxTimeShelved.setValueFromSource({
|
|
134
|
-
dataType: "Duration",
|
|
135
|
-
value: options.maxTimeShelved
|
|
136
|
-
});
|
|
137
|
-
}
|
|
138
|
-
// ---------- install inputNode
|
|
139
|
-
(0, node_opcua_assert_1.assert)(options.inputNode, " must provide options.inputNode (NodeId or BaseNode object)");
|
|
140
|
-
alarmNode.installInputNodeMonitoring(options.inputNode);
|
|
141
|
-
(0, node_opcua_assert_1.assert)(alarmNode instanceof ua_acknowledgeable_condition_impl_1.UAAcknowledgeableConditionImpl);
|
|
142
|
-
(0, node_opcua_assert_1.assert)(alarmNode instanceof UAAlarmConditionImpl);
|
|
143
|
-
return alarmNode;
|
|
144
|
-
}
|
|
145
|
-
dispose() {
|
|
146
|
-
if (this.shelvingState) {
|
|
147
|
-
(0, ua_shelving_state_machine_ex_1._clear_timer_if_any)(this.shelvingState);
|
|
148
|
-
}
|
|
149
|
-
super.dispose();
|
|
150
|
-
}
|
|
151
|
-
activateAlarm() {
|
|
152
|
-
// will set acknowledgeable to false and retain to true
|
|
153
|
-
const branch = this.currentBranch();
|
|
154
|
-
if (!branch) {
|
|
155
|
-
return;
|
|
156
|
-
}
|
|
157
|
-
branch.setRetain(true);
|
|
158
|
-
branch.setActiveState(true);
|
|
159
|
-
branch.setAckedState(false);
|
|
160
|
-
}
|
|
161
|
-
deactivateAlarm(retain) {
|
|
162
|
-
const branch = this.currentBranch();
|
|
163
|
-
branch.setRetain(retain === undefined ? true : retain);
|
|
164
|
-
branch.setActiveState(false);
|
|
165
|
-
}
|
|
166
|
-
/**
|
|
167
|
-
* @deprecated use deactivateAlarm instead (with no s after de-activate)
|
|
168
|
-
*/
|
|
169
|
-
desactivateAlarm() {
|
|
170
|
-
this.deactivateAlarm();
|
|
171
|
-
}
|
|
172
|
-
isSuppressedOrShelved() {
|
|
173
|
-
let suppressed = false;
|
|
174
|
-
if (this.suppressedState) {
|
|
175
|
-
suppressed = this.suppressedState.id.readValue().value.value;
|
|
176
|
-
}
|
|
177
|
-
let shelved = false;
|
|
178
|
-
if (this.shelvingState) {
|
|
179
|
-
const shelvedValue = this.shelvingState.currentState.readValue().value.value;
|
|
180
|
-
if (shelvedValue && shelvedValue.text !== "Unshelved") {
|
|
181
|
-
shelved = true;
|
|
182
|
-
}
|
|
183
|
-
// console.log("shelved = shelved",shelvedValue,shelved);
|
|
184
|
-
}
|
|
185
|
-
// xx console.log(" isSuppressedOrShelved ",suppressed,shelved);
|
|
186
|
-
return suppressed || shelved;
|
|
187
|
-
}
|
|
188
|
-
getSuppressedOrShelved() {
|
|
189
|
-
return this.suppressedOrShelved.readValue().value.value;
|
|
190
|
-
}
|
|
191
|
-
/**
|
|
192
|
-
*
|
|
193
|
-
* note: duration must be greater than 10ms and lesser than 2**31 ms
|
|
194
|
-
*/
|
|
195
|
-
setMaxTimeShelved(duration) {
|
|
196
|
-
var _a;
|
|
197
|
-
if (duration < 10 || duration >= Math.pow(2, 31)) {
|
|
198
|
-
throw new Error(" Invalid maxTimeShelved duration: " + duration + " must be [10,2**31] ");
|
|
199
|
-
}
|
|
200
|
-
(_a = this.maxTimeShelved) === null || _a === void 0 ? void 0 : _a.setValueFromSource({
|
|
201
|
-
dataType: "Duration",
|
|
202
|
-
value: duration
|
|
203
|
-
});
|
|
204
|
-
}
|
|
205
|
-
/**
|
|
206
|
-
* note: return a Duration
|
|
207
|
-
*/
|
|
208
|
-
getMaxTimeShelved() {
|
|
209
|
-
if (!this.maxTimeShelved) {
|
|
210
|
-
// if maxTimeShelved is not provided we assume MaxDuration
|
|
211
|
-
(0, node_opcua_assert_1.assert)(UAAlarmConditionImpl.MaxDuration <= 2147483648, "MaxDuration cannot be greater than 2**31");
|
|
212
|
-
return UAAlarmConditionImpl.MaxDuration;
|
|
213
|
-
}
|
|
214
|
-
const dataValue = this.maxTimeShelved.readValue();
|
|
215
|
-
(0, node_opcua_assert_1.assert)(dataValue.value.dataType === node_opcua_variant_1.DataType.Double); // Double <= Duration
|
|
216
|
-
return dataValue.value.value;
|
|
217
|
-
}
|
|
218
|
-
/**
|
|
219
|
-
* @method getInputNodeNode
|
|
220
|
-
* @return {BaseNode} return the node in the address space pointed by the inputNode value
|
|
221
|
-
*
|
|
222
|
-
* Note: please note the difference between alarm.inputNode
|
|
223
|
-
* * alarm.inputNode is a UAVariable property of the alarm object holding the nodeid of the input
|
|
224
|
-
* node in its value.
|
|
225
|
-
* * getInputNodeNode() is the UAVariable that contains the value that affects the state of the alarm and
|
|
226
|
-
* whose node id is stored in alarm.inputNode
|
|
227
|
-
*/
|
|
228
|
-
getInputNodeNode() {
|
|
229
|
-
const nodeId = this.inputNode.readValue().value.value;
|
|
230
|
-
(0, node_opcua_assert_1.assert)(nodeId instanceof node_opcua_nodeid_1.NodeId || nodeId === null);
|
|
231
|
-
return this.addressSpace.findNode(nodeId);
|
|
232
|
-
}
|
|
233
|
-
/**
|
|
234
|
-
* @method getInputNodeValue
|
|
235
|
-
* @return {*}
|
|
236
|
-
*/
|
|
237
|
-
getInputNodeValue() {
|
|
238
|
-
const node = this.getInputNodeNode();
|
|
239
|
-
if (!node) {
|
|
240
|
-
return null;
|
|
241
|
-
}
|
|
242
|
-
(0, node_opcua_assert_1.assert)(node.nodeClass === node_opcua_data_model_1.NodeClass.Variable);
|
|
243
|
-
return node.readValue().value.value;
|
|
244
|
-
}
|
|
245
|
-
updateState() {
|
|
246
|
-
const node = this.getInputNodeNode();
|
|
247
|
-
const dataValue = node.readValue();
|
|
248
|
-
this._onInputDataValueChange(dataValue);
|
|
249
|
-
}
|
|
250
|
-
_onInputDataValueChange(newValue) {
|
|
251
|
-
// xx console.log("class=",this.constructor.name,this.browseName.toString());
|
|
252
|
-
// xx throw new Error("_onInputDataValueChange must be overridden");
|
|
253
|
-
}
|
|
254
|
-
/**
|
|
255
|
-
* @method installInputNodeMonitoring
|
|
256
|
-
* install mechanism that listen to input node datavalue changes so that alarm status
|
|
257
|
-
* can be automatically updated appropriatly.
|
|
258
|
-
* @param inputNode {BaseNode}
|
|
259
|
-
* @return {void}
|
|
260
|
-
* @protected
|
|
261
|
-
*/
|
|
262
|
-
installInputNodeMonitoring(inputNode) {
|
|
263
|
-
/**
|
|
264
|
-
*
|
|
265
|
-
* The InputNode Property provides the NodeId of the Variable the Value of which is used as
|
|
266
|
-
* primary input in the calculation of the Alarm state. If this Variable is not in the Address Space,
|
|
267
|
-
* a Null NodeId shall be provided. In some systems, an Alarm may be calculated based on
|
|
268
|
-
* multiple Variables Values; it is up to the system to determine which Variable’s NodeId is used.
|
|
269
|
-
* dataType is DataType.NodeId
|
|
270
|
-
* @property inputNode
|
|
271
|
-
* @type UAVariable
|
|
272
|
-
*/
|
|
273
|
-
(0, node_opcua_assert_1.assert)(this.inputNode.nodeClass === node_opcua_data_model_1.NodeClass.Variable);
|
|
274
|
-
const addressSpace = this.addressSpace;
|
|
275
|
-
(0, node_opcua_assert_1.assert)(inputNode, " must provide options.inputNode (NodeId or BaseNode object)");
|
|
276
|
-
if (inputNode instanceof node_opcua_nodeid_1.NodeId) {
|
|
277
|
-
this.inputNode.setValueFromSource({
|
|
278
|
-
dataType: node_opcua_variant_1.DataType.NodeId,
|
|
279
|
-
value: inputNode
|
|
280
|
-
});
|
|
281
|
-
}
|
|
282
|
-
else {
|
|
283
|
-
this.inputNode.setValueFromSource({
|
|
284
|
-
dataType: "NodeId",
|
|
285
|
-
value: inputNode.nodeId
|
|
286
|
-
});
|
|
287
|
-
const _node = addressSpace._coerceNode(inputNode);
|
|
288
|
-
if (_node === null) {
|
|
289
|
-
// tslint:disable-next-line:no-console
|
|
290
|
-
console.log(" cannot find nodeId ", inputNode);
|
|
291
|
-
}
|
|
292
|
-
else {
|
|
293
|
-
(0, node_opcua_assert_1.assert)(_node, "Expecting a valid input node");
|
|
294
|
-
this.inputNode.setValueFromSource({
|
|
295
|
-
dataType: node_opcua_variant_1.DataType.NodeId,
|
|
296
|
-
value: _node.nodeId
|
|
297
|
-
});
|
|
298
|
-
}
|
|
299
|
-
const inputNode2 = this.getInputNodeNode();
|
|
300
|
-
if (!inputNode2 || inputNode2 === null) {
|
|
301
|
-
throw new Error("Invalid input node");
|
|
302
|
-
}
|
|
303
|
-
inputNode2.on("value_changed", (newDataValue /*, oldDataValue */) => {
|
|
304
|
-
if (!this.getEnabledState()) {
|
|
305
|
-
// disabled alarms shall ignored input node value change event
|
|
306
|
-
// (alarm shall be reevaluated when EnabledState goes back to true)
|
|
307
|
-
return;
|
|
308
|
-
}
|
|
309
|
-
this._onInputDataValueChange(newDataValue);
|
|
310
|
-
});
|
|
311
|
-
}
|
|
312
|
-
}
|
|
313
|
-
getCurrentConditionInfo() {
|
|
314
|
-
const oldSeverity = this.currentBranch().getSeverity();
|
|
315
|
-
const oldQuality = this.currentBranch().getQuality();
|
|
316
|
-
const oldMessage = this.currentBranch().getMessage();
|
|
317
|
-
const oldRetain = this.currentBranch().getRetain();
|
|
318
|
-
const oldConditionInfo = new condition_info_impl_1.ConditionInfoImpl({
|
|
319
|
-
message: oldMessage,
|
|
320
|
-
quality: oldQuality,
|
|
321
|
-
retain: oldRetain,
|
|
322
|
-
severity: oldSeverity
|
|
323
|
-
});
|
|
324
|
-
return oldConditionInfo;
|
|
325
|
-
}
|
|
326
|
-
/***
|
|
327
|
-
* @method _calculateConditionInfo
|
|
328
|
-
* @param stateData {Object} the new calculated state of the alarm
|
|
329
|
-
* @param isActive {Boolean}
|
|
330
|
-
* @param value {Number} the new value of the limit alarm
|
|
331
|
-
* @param oldCondition {ConditionInfo} given for information purpose
|
|
332
|
-
* @param oldCondition.severity
|
|
333
|
-
* @param oldCondition.quality
|
|
334
|
-
* @param oldCondition.message
|
|
335
|
-
* @param oldCondition.retain
|
|
336
|
-
* @return {ConditionInfo} the new condition info
|
|
337
|
-
*
|
|
338
|
-
* this method need to be overridden by the instantiate to allow custom message and severity
|
|
339
|
-
* to be set based on specific context of the alarm.
|
|
340
|
-
*
|
|
341
|
-
* @example
|
|
342
|
-
*
|
|
343
|
-
*
|
|
344
|
-
* var myAlarm = addressSpace.instantiateExclusiveLimitAlarm({...});
|
|
345
|
-
* myAlarm._calculateConditionInfo = function(stateName,value,oldCondition) {
|
|
346
|
-
* var percent = Math.ceil(value * 100);
|
|
347
|
-
* return new ConditionInfo({
|
|
348
|
-
* message: "Tank is almost " + percent + "% full",
|
|
349
|
-
* severity: 100,
|
|
350
|
-
* quality: StatusCodes.Good
|
|
351
|
-
* });
|
|
352
|
-
* };
|
|
353
|
-
*
|
|
354
|
-
*/
|
|
355
|
-
_calculateConditionInfo(stateData, isActive, value, oldCondition) {
|
|
356
|
-
if (!stateData) {
|
|
357
|
-
return new condition_info_impl_1.ConditionInfoImpl({
|
|
358
|
-
message: "Back to normal",
|
|
359
|
-
quality: node_opcua_status_code_1.StatusCodes.Good,
|
|
360
|
-
retain: true,
|
|
361
|
-
severity: 0
|
|
362
|
-
});
|
|
363
|
-
}
|
|
364
|
-
else {
|
|
365
|
-
return new condition_info_impl_1.ConditionInfoImpl({
|
|
366
|
-
message: "Condition is " + value + " and state is " + stateData,
|
|
367
|
-
quality: node_opcua_status_code_1.StatusCodes.Good,
|
|
368
|
-
retain: true,
|
|
369
|
-
severity: 150
|
|
370
|
-
});
|
|
371
|
-
}
|
|
372
|
-
}
|
|
373
|
-
_signalInitialCondition() {
|
|
374
|
-
this.currentBranch().setActiveState(false);
|
|
375
|
-
this.currentBranch().setAckedState(true);
|
|
376
|
-
}
|
|
377
|
-
_signalNewCondition(stateName, isActive, value) {
|
|
378
|
-
// xx if(stateName === null) {
|
|
379
|
-
// xx alarm.currentBranch().setActiveState(false);
|
|
380
|
-
// xx alarm.currentBranch().setAckedState(true);
|
|
381
|
-
// xx return;
|
|
382
|
-
// xx }
|
|
383
|
-
// disabled alarm shall not generate new condition events
|
|
384
|
-
(0, node_opcua_assert_1.assert)(this.getEnabledState() === true);
|
|
385
|
-
// xx assert(isActive !== alarm.activeState.getValue());
|
|
386
|
-
const oldConditionInfo = this.getCurrentConditionInfo();
|
|
387
|
-
const newConditionInfo = this._calculateConditionInfo(stateName, !!isActive, value, oldConditionInfo);
|
|
388
|
-
// detect potential internal bugs due to misused of _signalNewCondition
|
|
389
|
-
if ((0, lodash_1.isEqual)(oldConditionInfo, newConditionInfo)) {
|
|
390
|
-
// tslint:disable-next-line:no-console
|
|
391
|
-
console.log(oldConditionInfo);
|
|
392
|
-
throw new Error("condition values have not change, shall we really raise an event ? alarm " + this.browseName.toString());
|
|
393
|
-
}
|
|
394
|
-
(0, node_opcua_assert_1.assert)(!(0, lodash_1.isEqual)(oldConditionInfo, newConditionInfo), "condition values have not change, shall we really raise an event ?");
|
|
395
|
-
if (isActive) {
|
|
396
|
-
this.currentBranch().setActiveState(true);
|
|
397
|
-
this.currentBranch().setAckedState(false);
|
|
398
|
-
this.raiseNewCondition(newConditionInfo);
|
|
399
|
-
}
|
|
400
|
-
else {
|
|
401
|
-
if (this.currentBranch().getAckedState() === false) {
|
|
402
|
-
// prior state need acknowledgement
|
|
403
|
-
// note : TODO : timestamp of branch and new state of current branch must be identical
|
|
404
|
-
if (this.currentBranch().getRetain()) {
|
|
405
|
-
// we need to create a new branch so the previous state could be acknowledged
|
|
406
|
-
const newBranch = this.createBranch();
|
|
407
|
-
(0, node_opcua_assert_1.assert)(!(0, node_opcua_nodeid_1.sameNodeId)(newBranch.getBranchId(), node_opcua_nodeid_1.NodeId.nullNodeId));
|
|
408
|
-
// also raised a new Event for the new branch as branchId has changed
|
|
409
|
-
this.raiseNewBranchState(newBranch);
|
|
410
|
-
}
|
|
411
|
-
}
|
|
412
|
-
this.currentBranch().setActiveState(false);
|
|
413
|
-
this.currentBranch().setAckedState(true);
|
|
414
|
-
this.raiseNewCondition(newConditionInfo);
|
|
415
|
-
}
|
|
416
|
-
}
|
|
417
|
-
}
|
|
418
|
-
exports.UAAlarmConditionImpl = UAAlarmConditionImpl;
|
|
419
|
-
UAAlarmConditionImpl.MaxDuration = Math.pow(2, 31);
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.UAAlarmConditionImpl = void 0;
|
|
4
|
+
/**
|
|
5
|
+
* @module node-opcua-address-space.AlarmsAndConditions
|
|
6
|
+
*/
|
|
7
|
+
const lodash_1 = require("lodash");
|
|
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_nodeid_1 = require("node-opcua-nodeid");
|
|
11
|
+
const node_opcua_status_code_1 = require("node-opcua-status-code");
|
|
12
|
+
const node_opcua_variant_1 = require("node-opcua-variant");
|
|
13
|
+
const ua_two_state_variable_1 = require("../state_machine/ua_two_state_variable");
|
|
14
|
+
const ua_shelving_state_machine_ex_1 = require("../state_machine/ua_shelving_state_machine_ex");
|
|
15
|
+
const condition_info_impl_1 = require("./condition_info_impl");
|
|
16
|
+
const ua_acknowledgeable_condition_impl_1 = require("./ua_acknowledgeable_condition_impl");
|
|
17
|
+
function _update_suppressedOrShelved(alarmNode) {
|
|
18
|
+
alarmNode.suppressedOrShelved.setValueFromSource({
|
|
19
|
+
dataType: node_opcua_variant_1.DataType.Boolean,
|
|
20
|
+
value: alarmNode.isSuppressedOrShelved()
|
|
21
|
+
});
|
|
22
|
+
}
|
|
23
|
+
class UAAlarmConditionImpl extends ua_acknowledgeable_condition_impl_1.UAAcknowledgeableConditionImpl {
|
|
24
|
+
static instantiate(namespace, alarmConditionTypeId, options, data) {
|
|
25
|
+
const addressSpace = namespace.addressSpace;
|
|
26
|
+
// xx assert(Object.prototype.hasOwnProperty.call(options,"conditionOf")); // must provide a conditionOf
|
|
27
|
+
(0, node_opcua_assert_1.assert)(Object.prototype.hasOwnProperty.call(options, "inputNode")); // must provide a inputNode
|
|
28
|
+
const alarmConditionType = addressSpace.findEventType(alarmConditionTypeId);
|
|
29
|
+
/* istanbul ignore next */
|
|
30
|
+
if (!alarmConditionType) {
|
|
31
|
+
throw new Error(" cannot find Alarm Condition Type for " + alarmConditionTypeId);
|
|
32
|
+
}
|
|
33
|
+
const alarmConditionTypeBase = addressSpace.findEventType("AlarmConditionType");
|
|
34
|
+
/* istanbul ignore next */
|
|
35
|
+
if (!alarmConditionTypeBase) {
|
|
36
|
+
throw new Error("cannot find AlarmConditionType");
|
|
37
|
+
}
|
|
38
|
+
options.optionals = options.optionals || [];
|
|
39
|
+
if (Object.prototype.hasOwnProperty.call(options, "maxTimeShelved")) {
|
|
40
|
+
options.optionals.push("MaxTimeShelved");
|
|
41
|
+
(0, node_opcua_assert_1.assert)(isFinite(options.maxTimeShelved));
|
|
42
|
+
}
|
|
43
|
+
(0, node_opcua_assert_1.assert)(alarmConditionTypeBase === alarmConditionType || alarmConditionType.isSupertypeOf(alarmConditionTypeBase));
|
|
44
|
+
const alarmNode = ua_acknowledgeable_condition_impl_1.UAAcknowledgeableConditionImpl.instantiate(namespace, alarmConditionTypeId, options, data);
|
|
45
|
+
Object.setPrototypeOf(alarmNode, UAAlarmConditionImpl.prototype);
|
|
46
|
+
// ----------------------- Install Alarm specifics
|
|
47
|
+
//
|
|
48
|
+
// Specs 1.03:
|
|
49
|
+
// ActiveState/Id when set to TRUE indicates that the situation the Condition is representing
|
|
50
|
+
// currently exists. When a Condition instance is in the inactive state (ActiveState/Id when set to
|
|
51
|
+
// FALSE) it is representing a situation that has returned to a normal state. The transitions of
|
|
52
|
+
// Conditions to the inactive and Active states are triggered by Server specific actions. Sub-
|
|
53
|
+
// Types of the AlarmConditionType specified later in this document will have sub-state models
|
|
54
|
+
// that further define the Active state. Recommended state names are described in Annex A.
|
|
55
|
+
// install activeState - Mandatory
|
|
56
|
+
/**
|
|
57
|
+
* @property activeState
|
|
58
|
+
* @type {UATwoStateVariable}
|
|
59
|
+
*/
|
|
60
|
+
(0, ua_two_state_variable_1._install_TwoStateVariable_machinery)(alarmNode.activeState, {
|
|
61
|
+
falseState: "Inactive",
|
|
62
|
+
trueState: "Active"
|
|
63
|
+
});
|
|
64
|
+
alarmNode.currentBranch().setActiveState(false);
|
|
65
|
+
// Specs 1.03:
|
|
66
|
+
/**
|
|
67
|
+
*
|
|
68
|
+
* SuppressState is used internally by a Server to automatically suppress Alarms due to system
|
|
69
|
+
* specific reasons. For example a system may be configured to suppress Alarms that are
|
|
70
|
+
* associated with machinery that is shutdown, such as a low level Alarm for a tank that is
|
|
71
|
+
* currently not in use.
|
|
72
|
+
*
|
|
73
|
+
* @property suppressedState
|
|
74
|
+
* @type UATwoStateVariable
|
|
75
|
+
*/
|
|
76
|
+
if (alarmNode.suppressedState) {
|
|
77
|
+
// install activeState - Optional
|
|
78
|
+
(0, ua_two_state_variable_1._install_TwoStateVariable_machinery)(alarmNode.suppressedState, {
|
|
79
|
+
falseState: "Unsuppressed",
|
|
80
|
+
trueState: "Suppressed"
|
|
81
|
+
});
|
|
82
|
+
}
|
|
83
|
+
// Specs 1.03:
|
|
84
|
+
/**
|
|
85
|
+
* ShelvingState suggests whether an Alarm shall (temporarily) be prevented from being
|
|
86
|
+
* displayed to the user. It is quite often used to block nuisance Alarms.
|
|
87
|
+
*
|
|
88
|
+
* @property shelvingState
|
|
89
|
+
* @type ShelvingStateMachine
|
|
90
|
+
*/
|
|
91
|
+
if (alarmNode.shelvingState) {
|
|
92
|
+
ua_shelving_state_machine_ex_1.UAShelvedStateMachineExImpl.promote(alarmNode.shelvingState);
|
|
93
|
+
}
|
|
94
|
+
// SuppressedOrShelved : Mandatory
|
|
95
|
+
// install suppressedOrShelved automatic detection
|
|
96
|
+
/**
|
|
97
|
+
* The SuppressedState and the ShelvingState together result in the SuppressedOrShelved status of the
|
|
98
|
+
* Condition. When an Alarm is in one of the states, the SuppressedOrShelved property will be set TRUE
|
|
99
|
+
* and this Alarm is then typically not displayed by the Client. State transitions associated with the
|
|
100
|
+
* Alarm do occur, but they are not typically displayed by the Clients as long as the Alarm remains in
|
|
101
|
+
* either the Suppressed or Shelved state.
|
|
102
|
+
* The dataType is Boolean.
|
|
103
|
+
* @property suppressedState
|
|
104
|
+
* @type UAVariable
|
|
105
|
+
*
|
|
106
|
+
*/
|
|
107
|
+
if (alarmNode.suppressedState) {
|
|
108
|
+
alarmNode.suppressedState.on("value_changed", (newDataValue) => {
|
|
109
|
+
_update_suppressedOrShelved(alarmNode);
|
|
110
|
+
});
|
|
111
|
+
}
|
|
112
|
+
if (alarmNode.shelvingState) {
|
|
113
|
+
alarmNode.shelvingState.currentState.on("value_changed", (newDataValue) => {
|
|
114
|
+
_update_suppressedOrShelved(alarmNode);
|
|
115
|
+
});
|
|
116
|
+
}
|
|
117
|
+
_update_suppressedOrShelved(alarmNode);
|
|
118
|
+
/**
|
|
119
|
+
* The optional Property MaxTimeShelved is used to set the maximum time that an Alarm Condition may be shelved.
|
|
120
|
+
* The value is expressed as duration. Systems can use this Property to prevent permanent Shelving of an Alarm.
|
|
121
|
+
* If this Property is present it will be an upper limit on the duration passed into a TimedShelve Method call.
|
|
122
|
+
* If a value that exceeds the value of this property is passed to the TimedShelve Method,
|
|
123
|
+
* than a BadShelvingTimeOutOfRange error code is returned on the call. If this Property is present it will
|
|
124
|
+
* also be enforced for the OneShotShelved state, in that an Alarm Condition will transition to the Unshelved
|
|
125
|
+
* state from the OneShotShelved state if the duration specified in this Property expires following a
|
|
126
|
+
* OneShotShelve operation without a change of any of the other items associated with the Condition.
|
|
127
|
+
*
|
|
128
|
+
* @property maxTimeShelved
|
|
129
|
+
* @type {UAVariable}
|
|
130
|
+
*/
|
|
131
|
+
if (alarmNode.maxTimeShelved) {
|
|
132
|
+
options.maxTimeShelved = options.maxTimeShelved || 60.0 * 1000; // 60 seconds
|
|
133
|
+
alarmNode.maxTimeShelved.setValueFromSource({
|
|
134
|
+
dataType: "Duration",
|
|
135
|
+
value: options.maxTimeShelved
|
|
136
|
+
});
|
|
137
|
+
}
|
|
138
|
+
// ---------- install inputNode
|
|
139
|
+
(0, node_opcua_assert_1.assert)(options.inputNode, " must provide options.inputNode (NodeId or BaseNode object)");
|
|
140
|
+
alarmNode.installInputNodeMonitoring(options.inputNode);
|
|
141
|
+
(0, node_opcua_assert_1.assert)(alarmNode instanceof ua_acknowledgeable_condition_impl_1.UAAcknowledgeableConditionImpl);
|
|
142
|
+
(0, node_opcua_assert_1.assert)(alarmNode instanceof UAAlarmConditionImpl);
|
|
143
|
+
return alarmNode;
|
|
144
|
+
}
|
|
145
|
+
dispose() {
|
|
146
|
+
if (this.shelvingState) {
|
|
147
|
+
(0, ua_shelving_state_machine_ex_1._clear_timer_if_any)(this.shelvingState);
|
|
148
|
+
}
|
|
149
|
+
super.dispose();
|
|
150
|
+
}
|
|
151
|
+
activateAlarm() {
|
|
152
|
+
// will set acknowledgeable to false and retain to true
|
|
153
|
+
const branch = this.currentBranch();
|
|
154
|
+
if (!branch) {
|
|
155
|
+
return;
|
|
156
|
+
}
|
|
157
|
+
branch.setRetain(true);
|
|
158
|
+
branch.setActiveState(true);
|
|
159
|
+
branch.setAckedState(false);
|
|
160
|
+
}
|
|
161
|
+
deactivateAlarm(retain) {
|
|
162
|
+
const branch = this.currentBranch();
|
|
163
|
+
branch.setRetain(retain === undefined ? true : retain);
|
|
164
|
+
branch.setActiveState(false);
|
|
165
|
+
}
|
|
166
|
+
/**
|
|
167
|
+
* @deprecated use deactivateAlarm instead (with no s after de-activate)
|
|
168
|
+
*/
|
|
169
|
+
desactivateAlarm() {
|
|
170
|
+
this.deactivateAlarm();
|
|
171
|
+
}
|
|
172
|
+
isSuppressedOrShelved() {
|
|
173
|
+
let suppressed = false;
|
|
174
|
+
if (this.suppressedState) {
|
|
175
|
+
suppressed = this.suppressedState.id.readValue().value.value;
|
|
176
|
+
}
|
|
177
|
+
let shelved = false;
|
|
178
|
+
if (this.shelvingState) {
|
|
179
|
+
const shelvedValue = this.shelvingState.currentState.readValue().value.value;
|
|
180
|
+
if (shelvedValue && shelvedValue.text !== "Unshelved") {
|
|
181
|
+
shelved = true;
|
|
182
|
+
}
|
|
183
|
+
// console.log("shelved = shelved",shelvedValue,shelved);
|
|
184
|
+
}
|
|
185
|
+
// xx console.log(" isSuppressedOrShelved ",suppressed,shelved);
|
|
186
|
+
return suppressed || shelved;
|
|
187
|
+
}
|
|
188
|
+
getSuppressedOrShelved() {
|
|
189
|
+
return this.suppressedOrShelved.readValue().value.value;
|
|
190
|
+
}
|
|
191
|
+
/**
|
|
192
|
+
*
|
|
193
|
+
* note: duration must be greater than 10ms and lesser than 2**31 ms
|
|
194
|
+
*/
|
|
195
|
+
setMaxTimeShelved(duration) {
|
|
196
|
+
var _a;
|
|
197
|
+
if (duration < 10 || duration >= Math.pow(2, 31)) {
|
|
198
|
+
throw new Error(" Invalid maxTimeShelved duration: " + duration + " must be [10,2**31] ");
|
|
199
|
+
}
|
|
200
|
+
(_a = this.maxTimeShelved) === null || _a === void 0 ? void 0 : _a.setValueFromSource({
|
|
201
|
+
dataType: "Duration",
|
|
202
|
+
value: duration
|
|
203
|
+
});
|
|
204
|
+
}
|
|
205
|
+
/**
|
|
206
|
+
* note: return a Duration
|
|
207
|
+
*/
|
|
208
|
+
getMaxTimeShelved() {
|
|
209
|
+
if (!this.maxTimeShelved) {
|
|
210
|
+
// if maxTimeShelved is not provided we assume MaxDuration
|
|
211
|
+
(0, node_opcua_assert_1.assert)(UAAlarmConditionImpl.MaxDuration <= 2147483648, "MaxDuration cannot be greater than 2**31");
|
|
212
|
+
return UAAlarmConditionImpl.MaxDuration;
|
|
213
|
+
}
|
|
214
|
+
const dataValue = this.maxTimeShelved.readValue();
|
|
215
|
+
(0, node_opcua_assert_1.assert)(dataValue.value.dataType === node_opcua_variant_1.DataType.Double); // Double <= Duration
|
|
216
|
+
return dataValue.value.value;
|
|
217
|
+
}
|
|
218
|
+
/**
|
|
219
|
+
* @method getInputNodeNode
|
|
220
|
+
* @return {BaseNode} return the node in the address space pointed by the inputNode value
|
|
221
|
+
*
|
|
222
|
+
* Note: please note the difference between alarm.inputNode
|
|
223
|
+
* * alarm.inputNode is a UAVariable property of the alarm object holding the nodeid of the input
|
|
224
|
+
* node in its value.
|
|
225
|
+
* * getInputNodeNode() is the UAVariable that contains the value that affects the state of the alarm and
|
|
226
|
+
* whose node id is stored in alarm.inputNode
|
|
227
|
+
*/
|
|
228
|
+
getInputNodeNode() {
|
|
229
|
+
const nodeId = this.inputNode.readValue().value.value;
|
|
230
|
+
(0, node_opcua_assert_1.assert)(nodeId instanceof node_opcua_nodeid_1.NodeId || nodeId === null);
|
|
231
|
+
return this.addressSpace.findNode(nodeId);
|
|
232
|
+
}
|
|
233
|
+
/**
|
|
234
|
+
* @method getInputNodeValue
|
|
235
|
+
* @return {*}
|
|
236
|
+
*/
|
|
237
|
+
getInputNodeValue() {
|
|
238
|
+
const node = this.getInputNodeNode();
|
|
239
|
+
if (!node) {
|
|
240
|
+
return null;
|
|
241
|
+
}
|
|
242
|
+
(0, node_opcua_assert_1.assert)(node.nodeClass === node_opcua_data_model_1.NodeClass.Variable);
|
|
243
|
+
return node.readValue().value.value;
|
|
244
|
+
}
|
|
245
|
+
updateState() {
|
|
246
|
+
const node = this.getInputNodeNode();
|
|
247
|
+
const dataValue = node.readValue();
|
|
248
|
+
this._onInputDataValueChange(dataValue);
|
|
249
|
+
}
|
|
250
|
+
_onInputDataValueChange(newValue) {
|
|
251
|
+
// xx console.log("class=",this.constructor.name,this.browseName.toString());
|
|
252
|
+
// xx throw new Error("_onInputDataValueChange must be overridden");
|
|
253
|
+
}
|
|
254
|
+
/**
|
|
255
|
+
* @method installInputNodeMonitoring
|
|
256
|
+
* install mechanism that listen to input node datavalue changes so that alarm status
|
|
257
|
+
* can be automatically updated appropriatly.
|
|
258
|
+
* @param inputNode {BaseNode}
|
|
259
|
+
* @return {void}
|
|
260
|
+
* @protected
|
|
261
|
+
*/
|
|
262
|
+
installInputNodeMonitoring(inputNode) {
|
|
263
|
+
/**
|
|
264
|
+
*
|
|
265
|
+
* The InputNode Property provides the NodeId of the Variable the Value of which is used as
|
|
266
|
+
* primary input in the calculation of the Alarm state. If this Variable is not in the Address Space,
|
|
267
|
+
* a Null NodeId shall be provided. In some systems, an Alarm may be calculated based on
|
|
268
|
+
* multiple Variables Values; it is up to the system to determine which Variable’s NodeId is used.
|
|
269
|
+
* dataType is DataType.NodeId
|
|
270
|
+
* @property inputNode
|
|
271
|
+
* @type UAVariable
|
|
272
|
+
*/
|
|
273
|
+
(0, node_opcua_assert_1.assert)(this.inputNode.nodeClass === node_opcua_data_model_1.NodeClass.Variable);
|
|
274
|
+
const addressSpace = this.addressSpace;
|
|
275
|
+
(0, node_opcua_assert_1.assert)(inputNode, " must provide options.inputNode (NodeId or BaseNode object)");
|
|
276
|
+
if (inputNode instanceof node_opcua_nodeid_1.NodeId) {
|
|
277
|
+
this.inputNode.setValueFromSource({
|
|
278
|
+
dataType: node_opcua_variant_1.DataType.NodeId,
|
|
279
|
+
value: inputNode
|
|
280
|
+
});
|
|
281
|
+
}
|
|
282
|
+
else {
|
|
283
|
+
this.inputNode.setValueFromSource({
|
|
284
|
+
dataType: "NodeId",
|
|
285
|
+
value: inputNode.nodeId
|
|
286
|
+
});
|
|
287
|
+
const _node = addressSpace._coerceNode(inputNode);
|
|
288
|
+
if (_node === null) {
|
|
289
|
+
// tslint:disable-next-line:no-console
|
|
290
|
+
console.log(" cannot find nodeId ", inputNode);
|
|
291
|
+
}
|
|
292
|
+
else {
|
|
293
|
+
(0, node_opcua_assert_1.assert)(_node, "Expecting a valid input node");
|
|
294
|
+
this.inputNode.setValueFromSource({
|
|
295
|
+
dataType: node_opcua_variant_1.DataType.NodeId,
|
|
296
|
+
value: _node.nodeId
|
|
297
|
+
});
|
|
298
|
+
}
|
|
299
|
+
const inputNode2 = this.getInputNodeNode();
|
|
300
|
+
if (!inputNode2 || inputNode2 === null) {
|
|
301
|
+
throw new Error("Invalid input node");
|
|
302
|
+
}
|
|
303
|
+
inputNode2.on("value_changed", (newDataValue /*, oldDataValue */) => {
|
|
304
|
+
if (!this.getEnabledState()) {
|
|
305
|
+
// disabled alarms shall ignored input node value change event
|
|
306
|
+
// (alarm shall be reevaluated when EnabledState goes back to true)
|
|
307
|
+
return;
|
|
308
|
+
}
|
|
309
|
+
this._onInputDataValueChange(newDataValue);
|
|
310
|
+
});
|
|
311
|
+
}
|
|
312
|
+
}
|
|
313
|
+
getCurrentConditionInfo() {
|
|
314
|
+
const oldSeverity = this.currentBranch().getSeverity();
|
|
315
|
+
const oldQuality = this.currentBranch().getQuality();
|
|
316
|
+
const oldMessage = this.currentBranch().getMessage();
|
|
317
|
+
const oldRetain = this.currentBranch().getRetain();
|
|
318
|
+
const oldConditionInfo = new condition_info_impl_1.ConditionInfoImpl({
|
|
319
|
+
message: oldMessage,
|
|
320
|
+
quality: oldQuality,
|
|
321
|
+
retain: oldRetain,
|
|
322
|
+
severity: oldSeverity
|
|
323
|
+
});
|
|
324
|
+
return oldConditionInfo;
|
|
325
|
+
}
|
|
326
|
+
/***
|
|
327
|
+
* @method _calculateConditionInfo
|
|
328
|
+
* @param stateData {Object} the new calculated state of the alarm
|
|
329
|
+
* @param isActive {Boolean}
|
|
330
|
+
* @param value {Number} the new value of the limit alarm
|
|
331
|
+
* @param oldCondition {ConditionInfo} given for information purpose
|
|
332
|
+
* @param oldCondition.severity
|
|
333
|
+
* @param oldCondition.quality
|
|
334
|
+
* @param oldCondition.message
|
|
335
|
+
* @param oldCondition.retain
|
|
336
|
+
* @return {ConditionInfo} the new condition info
|
|
337
|
+
*
|
|
338
|
+
* this method need to be overridden by the instantiate to allow custom message and severity
|
|
339
|
+
* to be set based on specific context of the alarm.
|
|
340
|
+
*
|
|
341
|
+
* @example
|
|
342
|
+
*
|
|
343
|
+
*
|
|
344
|
+
* var myAlarm = addressSpace.instantiateExclusiveLimitAlarm({...});
|
|
345
|
+
* myAlarm._calculateConditionInfo = function(stateName,value,oldCondition) {
|
|
346
|
+
* var percent = Math.ceil(value * 100);
|
|
347
|
+
* return new ConditionInfo({
|
|
348
|
+
* message: "Tank is almost " + percent + "% full",
|
|
349
|
+
* severity: 100,
|
|
350
|
+
* quality: StatusCodes.Good
|
|
351
|
+
* });
|
|
352
|
+
* };
|
|
353
|
+
*
|
|
354
|
+
*/
|
|
355
|
+
_calculateConditionInfo(stateData, isActive, value, oldCondition) {
|
|
356
|
+
if (!stateData) {
|
|
357
|
+
return new condition_info_impl_1.ConditionInfoImpl({
|
|
358
|
+
message: "Back to normal",
|
|
359
|
+
quality: node_opcua_status_code_1.StatusCodes.Good,
|
|
360
|
+
retain: true,
|
|
361
|
+
severity: 0
|
|
362
|
+
});
|
|
363
|
+
}
|
|
364
|
+
else {
|
|
365
|
+
return new condition_info_impl_1.ConditionInfoImpl({
|
|
366
|
+
message: "Condition is " + value + " and state is " + stateData,
|
|
367
|
+
quality: node_opcua_status_code_1.StatusCodes.Good,
|
|
368
|
+
retain: true,
|
|
369
|
+
severity: 150
|
|
370
|
+
});
|
|
371
|
+
}
|
|
372
|
+
}
|
|
373
|
+
_signalInitialCondition() {
|
|
374
|
+
this.currentBranch().setActiveState(false);
|
|
375
|
+
this.currentBranch().setAckedState(true);
|
|
376
|
+
}
|
|
377
|
+
_signalNewCondition(stateName, isActive, value) {
|
|
378
|
+
// xx if(stateName === null) {
|
|
379
|
+
// xx alarm.currentBranch().setActiveState(false);
|
|
380
|
+
// xx alarm.currentBranch().setAckedState(true);
|
|
381
|
+
// xx return;
|
|
382
|
+
// xx }
|
|
383
|
+
// disabled alarm shall not generate new condition events
|
|
384
|
+
(0, node_opcua_assert_1.assert)(this.getEnabledState() === true);
|
|
385
|
+
// xx assert(isActive !== alarm.activeState.getValue());
|
|
386
|
+
const oldConditionInfo = this.getCurrentConditionInfo();
|
|
387
|
+
const newConditionInfo = this._calculateConditionInfo(stateName, !!isActive, value, oldConditionInfo);
|
|
388
|
+
// detect potential internal bugs due to misused of _signalNewCondition
|
|
389
|
+
if ((0, lodash_1.isEqual)(oldConditionInfo, newConditionInfo)) {
|
|
390
|
+
// tslint:disable-next-line:no-console
|
|
391
|
+
console.log(oldConditionInfo);
|
|
392
|
+
throw new Error("condition values have not change, shall we really raise an event ? alarm " + this.browseName.toString());
|
|
393
|
+
}
|
|
394
|
+
(0, node_opcua_assert_1.assert)(!(0, lodash_1.isEqual)(oldConditionInfo, newConditionInfo), "condition values have not change, shall we really raise an event ?");
|
|
395
|
+
if (isActive) {
|
|
396
|
+
this.currentBranch().setActiveState(true);
|
|
397
|
+
this.currentBranch().setAckedState(false);
|
|
398
|
+
this.raiseNewCondition(newConditionInfo);
|
|
399
|
+
}
|
|
400
|
+
else {
|
|
401
|
+
if (this.currentBranch().getAckedState() === false) {
|
|
402
|
+
// prior state need acknowledgement
|
|
403
|
+
// note : TODO : timestamp of branch and new state of current branch must be identical
|
|
404
|
+
if (this.currentBranch().getRetain()) {
|
|
405
|
+
// we need to create a new branch so the previous state could be acknowledged
|
|
406
|
+
const newBranch = this.createBranch();
|
|
407
|
+
(0, node_opcua_assert_1.assert)(!(0, node_opcua_nodeid_1.sameNodeId)(newBranch.getBranchId(), node_opcua_nodeid_1.NodeId.nullNodeId));
|
|
408
|
+
// also raised a new Event for the new branch as branchId has changed
|
|
409
|
+
this.raiseNewBranchState(newBranch);
|
|
410
|
+
}
|
|
411
|
+
}
|
|
412
|
+
this.currentBranch().setActiveState(false);
|
|
413
|
+
this.currentBranch().setAckedState(true);
|
|
414
|
+
this.raiseNewCondition(newConditionInfo);
|
|
415
|
+
}
|
|
416
|
+
}
|
|
417
|
+
}
|
|
418
|
+
exports.UAAlarmConditionImpl = UAAlarmConditionImpl;
|
|
419
|
+
UAAlarmConditionImpl.MaxDuration = Math.pow(2, 31);
|
|
420
420
|
//# sourceMappingURL=ua_alarm_condition_impl.js.map
|