Application module: Printed physical layout template ISO/TS 10303-1737:2021(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 definitions
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
     5.2.3 MIM subtype constraint definition

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 N10998 - ISO/TS 10303-1737 Printed physical layout template - EXPRESS ARM
Supersedes ISO/TC 184/SC 4/WG 12 N9467
*)



SCHEMA Printed_physical_layout_template_arm;

USE FROM Functional_usage_view_arm;    -- ISO/TS 10303-1705

USE FROM Layered_interconnect_complex_template_arm;    -- ISO/TS 10303-1716

REFERENCE FROM Support_resource_arm   -- ISO/TS 10303-1800
  (bag_to_set);


TYPE pplt_usage_concept = SELECT BASED_ON usage_concept WITH
   (Printed_part_template_terminal);
END_TYPE;

TYPE printed_part_template_terminal_class = ENUMERATION OF
   (curve_edge_segment,
    surface_point,
    area_edge_segment,
    surface_area);
END_TYPE;

ENTITY Basic_multi_stratum_printed_part_template
  SUBTYPE OF (Printed_part_template);
  material_stack : Library_stack_model;
  reference_template : Stratum_feature_template;
END_ENTITY;

ENTITY Functional_usage_view_to_printed_part_template_terminal_assignment;
  physical_usage_view_terminal : Printed_part_template_terminal;
  functional_usage_view_terminal : Scalar_terminal_definition;
UNIQUE
  UR1: functional_usage_view_terminal, physical_usage_view_terminal;
END_ENTITY;

ENTITY Multi_stratum_printed_part_template
  SUBTYPE OF (Structured_printed_part_template, Multi_stratum_structured_template);
END_ENTITY;

ENTITY Non_conductive_cross_section_template
  SUBTYPE OF (Template_definition);
  template_technology : OPTIONAL SET[1:?] OF Stratum_technology;
  nominal_width : Length_data_element;
WHERE
  WR1: NOT EXISTS(SELF\Product_view_definition.name);
END_ENTITY;

ENTITY Printed_connector_template
  SUBTYPE OF (Printed_part_template);
INVERSE
  characterized_connector_terminal_relationship : SET[1:?] OF Printed_connector_template_terminal_relationship FOR connector;
END_ENTITY;

ENTITY Printed_connector_template_terminal_relationship;
  join_terminal : Printed_part_template_join_terminal;
  interface_terminal : Printed_part_template_interface_terminal;
  connector : Printed_connector_template;
UNIQUE
  UR1: join_terminal;
WHERE
  WR1: join_terminal\Shape_element.associated_definition :=: connector;
  WR2: interface_terminal\Printed_part_template_interface_terminal.associated_definition :=: connector;
END_ENTITY;

ENTITY Printed_part_cross_section_template
  SUBTYPE OF (Printed_part_template);
  horizontal_material_link : OPTIONAL SET[1:?] OF Printed_part_template_material_link;
  vertical_material_link : OPTIONAL SET[1:?] OF Printed_part_template_material_link;
  transmission_line_model : Analytical_model_definition;
  maximum_transmission_line_characteristic : OPTIONAL SET[1:?] OF Analytical_model_application;
  minimum_transmission_line_characteristic : OPTIONAL SET[1:?] OF Analytical_model_application;
  width : Length_tolerance_characteristic;
  unit_length : Length_data_element;
INVERSE
  SELF\Printed_part_template.access_mechanisms : SET[1:?] OF Printed_part_cross_section_template_terminal FOR associated_definition;
WHERE
  WR1: SIZEOF(QUERY(hml <* horizontal_material_link | NOT (hml.precedent_material\Shape_element.element_name IN ['right']))) = 0;
  WR2: SIZEOF(QUERY(hml <* horizontal_material_link | NOT (hml.subsequent_material\Shape_element.element_name IN ['left']))) = 0;
  WR3: SIZEOF(QUERY(hml <* vertical_material_link | NOT (hml.precedent_material\Shape_element.element_name IN ['bottom']))) = 0;
  WR4: SIZEOF(QUERY(hml <* vertical_material_link | NOT (hml.precedent_material\Shape_element.element_name IN ['top']))) = 0;
  WR5: SIZEOF(QUERY(hml <* horizontal_material_link | (SIZEOF(QUERY(vml <* vertical_material_link | (vml :=: hml) )) > 0) )) = 0;
  WR6: NOT EXISTS(SELF\Product_view_definition.name);
  WR7: EXISTS(horizontal_material_link) OR EXISTS(vertical_material_link);
  WR8: NOT ('PRINTED_PHYSICAL_LAYOUT_TEMPLATE_ARM.PRINTED_CONNECTOR_TEMPLATE' IN TYPEOF(SELF));
END_ENTITY;

ENTITY Printed_part_cross_section_template_terminal
  SUBTYPE OF (Printed_part_template_terminal);
  SELF\Shape_element.associated_definition : Printed_part_cross_section_template;
  material_to_left_of_terminal : OPTIONAL Printed_part_template_material_link;
  material_to_right_of_terminal : OPTIONAL Printed_part_template_material_link;
  material_to_top_of_terminal : OPTIONAL Printed_part_template_material_link;
  material_to_bottom_of_terminal : OPTIONAL Printed_part_template_material_link;
UNIQUE
  UR1: associated_definition, material_to_left_of_terminal, material_to_right_of_terminal, material_to_top_of_terminal, material_to_bottom_of_terminal;
WHERE
  WR1: (SELF\Printed_part_template_terminal.connection_zone_category = curve_edge_segment) OR (SELF\Printed_part_template_terminal.connection_zone_category = area_edge_segment);
  WR2: NOT (EXISTS(material_to_left_of_terminal) AND EXISTS(material_to_right_of_terminal)) OR (material_to_left_of_terminal :<>: material_to_right_of_terminal);
  WR3: NOT (EXISTS(material_to_left_of_terminal) AND EXISTS(material_to_top_of_terminal)) OR (material_to_left_of_terminal :<>: material_to_top_of_terminal);
  WR4: NOT (EXISTS(material_to_left_of_terminal) AND EXISTS(material_to_bottom_of_terminal)) OR (material_to_left_of_terminal :<>: material_to_bottom_of_terminal);
  WR5: NOT (EXISTS(material_to_right_of_terminal) AND EXISTS(material_to_top_of_terminal)) OR (material_to_right_of_terminal :<>: material_to_top_of_terminal);
  WR6: NOT (EXISTS(material_to_right_of_terminal) AND EXISTS(material_to_bottom_of_terminal)) OR (material_to_right_of_terminal :<>: material_to_bottom_of_terminal);
  WR7: NOT (EXISTS(material_to_top_of_terminal) AND EXISTS(material_to_bottom_of_terminal)) OR (material_to_top_of_terminal :<>: material_to_bottom_of_terminal);
  WR8: NOT EXISTS(material_to_left_of_terminal) OR (material_to_left_of_terminal\Printed_part_template_material_link.precedent_material\Shape_element.element_name = 'right');
  WR9: NOT EXISTS(material_to_right_of_terminal) OR (material_to_right_of_terminal\Printed_part_template_material_link.subsequent_material\Shape_element.element_name = 'left');
  WR10: NOT EXISTS(material_to_bottom_of_terminal) OR (material_to_bottom_of_terminal\Printed_part_template_material_link.subsequent_material\Shape_element.element_name = 'top');
  WR11: NOT EXISTS(material_to_top_of_terminal) OR (material_to_top_of_terminal\Printed_part_template_material_link.precedent_material\Shape_element.element_name = 'bottom');
END_ENTITY;

ENTITY Printed_part_template
  ABSTRACT SUPERTYPE OF (ONEOF (Basic_multi_stratum_printed_part_template,
                                Structured_printed_part_template,
                                Printed_part_cross_section_template)
                        ANDOR Printed_connector_template)
  SUBTYPE OF (Template_definition);
  implemented_function : OPTIONAL Functional_unit_usage_view;
INVERSE
  access_mechanisms : SET[1:?] OF Printed_part_template_terminal FOR associated_definition;
WHERE
  WR1: NOT EXISTS(SELF\Product_view_definition.name);
END_ENTITY;

ENTITY Printed_part_template_connected_terminals_definition;
  name : STRING;
  connected_terminals : SET[2:?] OF Printed_part_template_terminal;
DERIVE
  scope : Printed_part_template := connected_terminals[1].associated_definition;
UNIQUE
  UR1: name, scope;
WHERE
  WR1: SIZEOF(QUERY(t <* connected_terminals | t.associated_definition :<>: scope)) = 0;
END_ENTITY;

ENTITY Printed_part_template_interface_terminal
  SUBTYPE OF (Printed_part_template_terminal);
  SELF\Shape_element.associated_definition : Printed_connector_template;
INVERSE
  external_connector_function : SET[1:?] OF Printed_connector_template_terminal_relationship FOR interface_terminal;
END_ENTITY;

ENTITY Printed_part_template_join_terminal
  SUBTYPE OF (Printed_part_template_terminal);
INVERSE
  internal_connector_function : SET[0:1] OF Printed_connector_template_terminal_relationship FOR join_terminal;
END_ENTITY;

ENTITY Printed_part_template_material;
  width : Length_tolerance_characteristic;
  required_material : Stratum_technology;
INVERSE
  boundary : SET[0:4] OF Template_material_cross_section_boundary FOR associated_definition2;
WHERE
  WR1: SIZEOF(QUERY(temp <* (USEDIN(SELF, 'PRINTED_PHYSICAL_LAYOUT_TEMPLATE_ARM.TEMPLATE_MATERIAL_CROSS_SECTION_BOUNDARY.' + 'ASSOCIATED_DEFINITION2')) | temp\Shape_element.element_name = 'top')) <= 1;
  WR2: SIZEOF(QUERY(temp <* (USEDIN(SELF, 'PRINTED_PHYSICAL_LAYOUT_TEMPLATE_ARM.TEMPLATE_MATERIAL_CROSS_SECTION_BOUNDARY.' + 'ASSOCIATED_DEFINITION2')) | temp\Shape_element.element_name = 'bottom')) <= 1;
  WR3: SIZEOF(QUERY(temp <* (USEDIN(SELF, 'PRINTED_PHYSICAL_LAYOUT_TEMPLATE_ARM.TEMPLATE_MATERIAL_CROSS_SECTION_BOUNDARY.' + 'ASSOCIATED_DEFINITION2')) | temp\Shape_element.element_name = 'left')) <= 1;
  WR4: SIZEOF(QUERY(temp <* (USEDIN(SELF, 'PRINTED_PHYSICAL_LAYOUT_TEMPLATE_ARM.TEMPLATE_MATERIAL_CROSS_SECTION_BOUNDARY.' + 'ASSOCIATED_DEFINITION2')) | temp\Shape_element.element_name = 'right')) <= 1;
END_ENTITY;

ENTITY Printed_part_template_material_link;
  precedent_material : Template_material_cross_section_boundary;
  subsequent_material : Template_material_cross_section_boundary;
UNIQUE
  UR1: precedent_material, subsequent_material;
WHERE
  WR1: precedent_material :<>: subsequent_material;
  WR2: precedent_material\Shape_element.element_name IN ['bottom', 'right'];
  WR3: subsequent_material\Shape_element.element_name IN ['top', 'left'];
  WR4: NOT((precedent_material\Shape_element.element_name IN ['bottom']) XOR (subsequent_material\Shape_element.element_name IN ['top']));
  WR5: NOT((precedent_material\Shape_element.element_name IN ['right']) XOR (subsequent_material\Shape_element.element_name IN ['left']));
  WR6: acyclic_printed_part_template_material_link(SELF, [subsequent_material], 'PRINTED_PHYSICAL_LAYOUT_TEMPLATE_ARM.PRINTED_PART_TEMPLATE_MATERIAL_LINK');
END_ENTITY;

ENTITY Printed_part_template_terminal
  ABSTRACT SUPERTYPE OF ((ONEOF (Printed_part_template_join_terminal,
                                 Printed_part_template_interface_terminal)
                        ANDOR Printed_part_cross_section_template_terminal)
                       ANDOR Structured_printed_part_template_terminal)
  SUBTYPE OF (General_part_feature);
  SELF\Shape_element.associated_definition : Printed_part_template;
  connection_zone_category : printed_part_template_terminal_class;
  connection_area : OPTIONAL SET[1:?] OF Connection_zone_in_layout_template;
INVERSE
  connection_requirement : SET[0:1] OF Printed_part_template_connected_terminals_definition FOR connected_terminals;
  functional_usage_view_terminal : SET[0:1] OF Functional_usage_view_to_printed_part_template_terminal_assignment FOR physical_usage_view_terminal;
UNIQUE
  UR1: SELF\Shape_element.element_name, associated_definition;
WHERE
  WR1: NOT EXISTS(SELF\Shape_element.description);
END_ENTITY;

ENTITY Printed_tiebar_template
  SUBTYPE OF (Structured_printed_part_template);
DERIVE
  terminal_location : SET[0:?] OF Axis_placement_2d := pplt_get_tl_ap2d(SELF);
  passage_component_location : SET[0:?] OF Axis_placement_2d := pplt_get_pcl_ap2d(SELF);
  tiebar_shape_model : SET[0:?] OF Geometric_model := pplt_get_gm(SELF);
WHERE
  WR1: SIZEOF(['PRINTED_PHYSICAL_LAYOUT_TEMPLATE_ARM.PRINTED_CONNECTOR_TEMPLATE', 'PRINTED_PHYSICAL_LAYOUT_TEMPLATE_ARM.NON_CONDUCTIVE_CROSS_SECTION_TEMPLATE', 'PRINTED_PHYSICAL_LAYOUT_TEMPLATE_ARM.PRINTED_PART_CROSS_SECTION_TEMPLATE'] * TYPEOF(SELF)) = 0;
  WR2: SIZEOF(QUERY(am <* SELF\Printed_part_template.access_mechanisms | NOT('PRINTED_PHYSICAL_LAYOUT_TEMPLATE_ARM.PRINTED_PART_TEMPLATE_JOIN_TERMINAL' IN TYPEOF(am)) )) = 0;
  WR3: (SIZEOF(passage_component_location) = 0) OR (SIZEOF(QUERY(pcl <* passage_component_location | (SIZEOF(QUERY(tsm <* tiebar_shape_model | (ap2d_geometrically_in_tiebar(pcl,tsm)))) > 0) )) = SIZEOF(passage_component_location));
  WR4: SIZEOF(QUERY(t <* SELF\Structured_template.templates | 'LAYERED_INTERCONNECT_SIMPLE_TEMPLATE_ARM.STRATUM_FEATURE_TEMPLATE' IN TYPEOF(t\Template_location_in_structured_template.template))) > 0;
  WR5: SIZEOF(QUERY(spptt <* SELF\Printed_part_template.access_mechanisms | NOT(SIZEOF(USEDIN(spptt,'PRINTED_PHYSICAL_LAYOUT_TEMPLATE_ARM.' + 'PRINTED_PART_TEMPLATE_CONNECTED_TERMINALS_DEFINITION.CONNECTED_TERMINALS')) = 1) )) = 0;
  WR6: SIZEOF(QUERY(spptt1 <* SELF\Printed_part_template.access_mechanisms | NOT(SIZEOF(QUERY(spptt2 <* SELF\Printed_part_template.access_mechanisms | (bag_to_set(USEDIN(spptt1,'PRINTED_PHYSICAL_LAYOUT_TEMPLATE_ARM.' + 'PRINTED_PART_TEMPLATE_CONNECTED_TERMINALS_DEFINITION.CONNECTED_TERMINALS')) = bag_to_set(USEDIN(spptt2,'PRINTED_PHYSICAL_LAYOUT_TEMPLATE_ARM.' + 'PRINTED_PART_TEMPLATE_CONNECTED_TERMINALS_DEFINITION.CONNECTED_TERMINALS'))))) = SIZEOF(SELF\Printed_part_template.access_mechanisms)))) = 0;
  WR7: SIZEOF(QUERY(tl <* terminal_location | (SIZEOF(QUERY(pcl <* passage_component_location | ((tl :=: pcl) OR (SIZEOF(QUERY(tsm <* tiebar_shape_model | (ap2d_geometrically_in_tiebar(tl,tsm)))) > 0)))) > 0) )) = SIZEOF(terminal_location);
END_ENTITY;

ENTITY Single_stratum_printed_part_template
  SUBTYPE OF (Structured_printed_part_template, Single_stratum_structured_template);
END_ENTITY;

ENTITY Structured_printed_part_template
  ABSTRACT SUPERTYPE OF (ONEOF (Single_stratum_printed_part_template,
                                Multi_stratum_printed_part_template))
  SUBTYPE OF (Printed_part_template, Structured_template);
WHERE
  WR1: SIZEOF(QUERY(t <* access_mechanisms | NOT ('PRINTED_PHYSICAL_LAYOUT_TEMPLATE_ARM.STRUCTURED_PRINTED_PART_TEMPLATE_TERMINAL' IN TYPEOF(t)))) = 0;
  WR2: SIZEOF(QUERY(t <* SELF\Structured_template.templates | 'LAYERED_INTERCONNECT_COMPLEX_TEMPLATE_ARM.STRUCTURED_TEMPLATE' IN TYPEOF(t.template))) = 0;
END_ENTITY;

ENTITY Structured_printed_part_template_terminal
  SUBTYPE OF (Printed_part_template_terminal);
  SELF\Shape_element.associated_definition : Structured_printed_part_template;
  associated_composition_relationship : Template_location_in_structured_template;
WHERE
  WR1: associated_composition_relationship\Template_location_in_structured_template.assembly :=: associated_definition;
  WR2: TYPEOF(SELF) <> ['PRINTED_PHYSICAL_LAYOUT_TEMPLATE_ARM.STRUCTURED_PRINTED_PART_TEMPLATE_TERMINAL', 'PRINTED_PHYSICAL_LAYOUT_TEMPLATE_ARM.PRINTED_PART_TEMPLATE_TERMINAL', 'FEATURE_AND_CONNECTION_ZONE_ARM.DEFINITIONAL_SHAPE_ELEMENT', 'SHAPE_PROPERTY_ASSIGNMENT_ARM.SHAPE_ELEMENT'];
END_ENTITY;

ENTITY Template_material_cross_section_boundary
  SUBTYPE OF (Non_feature_shape_element);
  associated_definition2 : Printed_part_template_material;
UNIQUE
  UR1: associated_definition2, SELF\Shape_element.element_name;
WHERE
  WR1: SELF\Shape_element.element_name IN ['top', 'bottom', 'left', 'right'];
END_ENTITY;

SUBTYPE_CONSTRAINT pplt_template_definition_subtypes FOR Template_definition;
  ONEOF (Printed_part_template,
         Non_conductive_cross_section_template);
END_SUBTYPE_CONSTRAINT;

FUNCTION acyclic_printed_part_template_material_link
 (relation : Printed_part_template_material_link; relatives : SET[1:?] OF Template_material_cross_section_boundary; specific_relation : STRING) : BOOLEAN;
LOCAL
     x : SET OF Printed_part_template_material_link := [];
  END_LOCAL;

    IF relation.precedent_material IN relatives THEN
      RETURN (FALSE);
    END_IF;
    x := QUERY(pd <* bag_to_set(USEDIN(relation.precedent_material,
      'PRINTED_PHYSICAL_LAYOUT_TEMPLATE_ARM.' +
      'PRINTED_PART_TEMPLATE_MATERIAL_LINK.' +
      'SUBSEQUENT_MATERIAL')) | specific_relation IN TYPEOF(pd));
    REPEAT i := 1 TO HIINDEX(x);
      IF NOT acyclic_printed_part_template_material_link(x[i], relatives +
        relation.precedent_material, specific_relation) THEN
        RETURN (FALSE);
      END_IF;
    END_REPEAT;
    RETURN (TRUE);
END_FUNCTION;

FUNCTION ap2d_geometrically_in_tiebar
 (input_1 : Axis_placement_2d; input_2 : Geometric_model) : LOGICAL;
RETURN(TRUE);
END_FUNCTION;

FUNCTION pplt_get_gm
 (input : Printed_tiebar_template) : SET[0:?] OF Geometric_model;
LOCAL
	  gm : SET OF Geometric_model := [];  --this gives us access to the information base
    END_LOCAL;
	RETURN(gm);
END_FUNCTION;

FUNCTION pplt_get_pcl_ap2d
 (input : Printed_tiebar_template) : SET[0:?] OF Axis_placement_2d;
LOCAL
	  ap2d : SET OF Axis_placement_2d := [];  --this gives us access to the information base
    END_LOCAL;
	RETURN(ap2d);
END_FUNCTION;

FUNCTION pplt_get_tl_ap2d
 (input : Printed_tiebar_template) : SET[0:?] OF Axis_placement_2d;
LOCAL
	  ap2d : SET OF Axis_placement_2d := [];  --this gives us access to the information base
    END_LOCAL;
	RETURN(ap2d);
END_FUNCTION;

END_SCHEMA;  -- Printed_physical_layout_template_arm


© ISO 2021 — All rights reserved