Application module: Network functional design view ISO/TS 10303-1704:2018-11(E)
© ISO

Cover page
Table of contents
Copyright
Foreword
Introduction
1 Scope
2 Normative references
3 Terms, definitions and abbreviated terms
    3.1 Terms and definitions
    3.2 Abbreviated terms

4 Information requirements
   4.1 Required AM ARMs
   4.2 ARM type definitions
   4.3 ARM entity definitions
   4.4 ARM subtype constraint definition
   4.5 ARM function definition
5 Module interpreted model
   5.1 Mapping specification
   5.2 MIM EXPRESS short listing
     5.2.1 MIM type definition
     5.2.2 MIM entity definitions

A MIM short names
B Information object registration
C ARM EXPRESS-G   EXPRESS-G
D MIM EXPRESS-G   EXPRESS-G
E Computer interpretable listings
F Change history
Bibliography
Index

(*
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