| Application module: Network functional design view | ISO/TS 10303-1704:2018-11(E) © ISO | 
         (*
ISO/TC 184/SC 4/WG 12 N9502 - ISO/TS 10303-1704 Network functional design view - EXPRESS ARM
Supersedes 
         ISO/TC 184/SC 4/WG 12 N7741
*)
         
SCHEMA Network_functional_design_view_arm;
         USE FROM
         Assembly_structure_arm;
            -- ISO/TS 10303-1026
         USE FROM
         Functional_usage_view_arm;
            -- ISO/TS 10303-1705
         USE FROM
         Model_parameter_arm;
            -- ISO/TS 10303-1703
         USE FROM
         Requirement_assignment_arm;
            -- ISO/TS 10303-1233
TYPE bus_structural_definition_or_node =
         
         
         SELECT
            (Functional_unit_network_node_definition, 
    Bus_structural_definition);
         END_TYPE; 
         
TYPE nfdv_pa_or_parameter_assignment_override =
         
         
         SELECT
            (Parameter_assignment, 
    Parameter_assignment_override);
         END_TYPE; 
         
TYPE nfdw_requirement_assignment_item =
         
         
         SELECT
         BASED_ON
         requirement_assignment_item
         WITH 
         
            (Functional_unit);
         END_TYPE; 
         
ENTITY Bus_element_link;
           precedent_element : bus_structural_definition_or_node;
           subsequent_element : bus_structural_definition_or_node;
INVERSE
           composed_bus : Bus_structural_definition FOR composition;
UNIQUE
           UR1: precedent_element, subsequent_element;
WHERE
           WR1: precedent_element <> subsequent_element;
         
         END_ENTITY;
ENTITY Bus_structural_definition;
           bus_name : STRING;
           composition : SET[1:?] OF Bus_element_link;
INVERSE
           external_bus_access : SET[0:1] OF Functional_unit_network_terminal_definition_bus_assignment FOR connected_bus;
UNIQUE
           UR1: bus_name;
WHERE
           WR1: consistent_bus_structural_definition(composition);
         
         END_ENTITY;
ENTITY Functional_unit
           SUBTYPE OF (Product_view_definition);
           composed_network : Functional_unit_network_definition;
           definition : Functional_unit_definition;
           SELF\Product_view_definition.id RENAMED reference_designation : STRING;
           functional_property : 
         OPTIONAL 
         SET[1:?] OF nfdv_pa_or_parameter_assignment_override;
DERIVE
           SELF\Product_view_definition.defined_version : Functional_version := definition\Functional_unit_definition.defined_version;
INVERSE
           access_mechanisms : SET[1:?] OF Functional_unit_terminal FOR accessed_functional_unit;
UNIQUE
           UR1: reference_designation, composed_network;
         
         END_ENTITY;
ENTITY Functional_unit_network_definition
           SUBTYPE OF (Functional_unit_definition);
           usage_view : Functional_unit_usage_view;
         
         END_ENTITY;
ENTITY Functional_unit_network_node_definition
           SUBTYPE OF (Product_view_definition);
           associated_functional_unit_definition : Functional_unit_network_definition;
           SELF\Product_view_definition.additional_characterization RENAMED functional_unit_network_node_name : STRING;
DERIVE
           SELF\Product_view_definition.defined_version : Functional_version := associated_functional_unit_definition.defined_version;
           valid_conservative_node : LOGICAL := (( SIZEOF ( USEDIN ( SELF , 'NETWORK_FUNCTIONAL_DESIGN_VIEW_ARM.BUS_ELEMENT_LINK.PRECEDENT_ELEMENT' )) +
         SIZEOF ( USEDIN ( SELF , 'NETWORK_FUNCTIONAL_DESIGN_VIEW_ARM.BUS_ELEMENT_LINK.SUBSEQUENT_ELEMENT' )) +
         SIZEOF ( USEDIN ( SELF , 'NETWORK_FUNCTIONAL_DESIGN_VIEW_ARM.FUNCTIONAL_UNIT_TERMINAL_NODE_ASSIGNMENT.COMPOSED_NODE')) +
         SIZEOF ( external_node_access ) ) > 1 );
INVERSE
           external_node_access : SET[0:1] OF Functional_unit_network_terminal_definition_node_assignment FOR composed_node;
UNIQUE
           UR1: functional_unit_network_node_name, associated_functional_unit_definition;
WHERE
           WR1: EXISTS(valid_conservative_node);
         
         END_ENTITY;
ENTITY Functional_unit_network_terminal_definition_bus_assignment;
           connected_bus : Bus_structural_definition;
           connected_terminal : Functional_unit_usage_view_terminal_definition;
UNIQUE
           UR1: connected_bus, connected_terminal;
         
         END_ENTITY;
ENTITY Functional_unit_network_terminal_definition_node_assignment;
           composed_node : Functional_unit_network_node_definition;
           connected_terminal : Functional_unit_usage_view_terminal_definition;
UNIQUE
           UR1: composed_node, connected_terminal;
         
         END_ENTITY;
ENTITY Functional_unit_terminal;
           accessed_functional_unit : Functional_unit;
           definition : Functional_unit_usage_view_terminal_definition;
INVERSE
           bus_assignment : SET[0:1] OF Functional_unit_terminal_bus_assignment FOR connected_terminal;
           node_assignment : SET[0:1] OF Functional_unit_terminal_node_assignment FOR connected_terminal;
         
         END_ENTITY;
ENTITY Functional_unit_terminal_bus_assignment;
           connected_bus : Bus_structural_definition;
           connected_terminal : Functional_unit_terminal;
         
         END_ENTITY;
ENTITY Functional_unit_terminal_node_assignment;
           composed_node : Functional_unit_network_node_definition;
           connected_terminal : Functional_unit_terminal;
         
         END_ENTITY;
SUBTYPE_CONSTRAINT functional_unit_definition_subtypes FOR Functional_unit_definition;
           ONEOF (Functional_unit_network_definition,
         Functional_unit_usage_view);
      
         END_SUBTYPE_CONSTRAINT;
FUNCTION consistent_bus_structural_definition
 (input : SET[0:?] OF Bus_element_link) : BOOLEAN;
         LOCAL
      vertex        : SET OF bus_structural_definition_or_node := [];
      edge          : INTEGER := SIZEOF(input);
      vc            : INTEGER := 0;
      vertex_degree : INTEGER := 0;
    END_LOCAL;
    REPEAT i := 1 TO SIZEOF(input) BY 1;
      vertex := vertex + input[i].precedent_element;
      vertex := vertex + input[i].subsequent_element;
    END_REPEAT;
    vc := SIZEOF(vertex);
    IF (vc <> (edge + 1)) THEN
      RETURN(FALSE);
    END_IF;
    REPEAT i := 1 TO vc BY 1;
      vertex_degree := 0;
      REPEAT j := 1 TO SIZEOF(input) BY 1;
        IF input[j].precedent_element = vertex[i] THEN
          vertex_degree := vertex_degree + 1;
        END_IF;
        IF input[j].subsequent_element = vertex[i] THEN
          vertex_degree := vertex_degree + 1;
        END_IF;
      END_REPEAT;
      IF (vertex_degree > 2) THEN
        RETURN(FALSE);
      END_IF;
    END_REPEAT;
    RETURN(TRUE);
         END_FUNCTION;
         
         END_SCHEMA;  -- Network_functional_design_view_arm
© ISO 2018 — All rights reserved