Application module: Kinematic structure ISO/TS 10303-1797: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 definitions
   4.5 ARM function definitions
5 Module interpreted model
   5.1 Mapping specification
   5.2 MIM EXPRESS short listing

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 N9364 - ISO/TS 10303-1797 Kinematic structure - EXPRESS ARM
Supersedes ISO/TC 184/SC 4/WG 12 N7909
*)



SCHEMA Kinematic_structure_arm;

USE FROM Kinematic_topology_arm;    -- ISO/TS 10303-1799

USE FROM Basic_curve_arm;    -- ISO/TS 10303-1651

USE FROM Assembly_structure_arm;    -- ISO/TS 10303-1026

USE FROM Geometric_model_relationship_arm;    -- ISO/TS 10303-1403

USE FROM Composite_surface_arm;    -- ISO/TS 10303-1525

USE FROM Shape_property_assignment_arm;    -- ISO/TS 10303-1032

REFERENCE FROM Kinematic_topology_arm   -- ISO/TS 10303-1799
  (get_kinematic_joints_from_oriented_joints,
   get_kinematic_joints_from_kinematic_loops);

REFERENCE FROM Foundation_representation_arm   -- ISO/TS 10303-1006
  (using_representations);


TYPE actuated_direction = ENUMERATION OF
   (bidirectional,
    positive_only,
    negative_only,
    not_actuated);
END_TYPE;

TYPE kinematic_link_representation_items = SELECT
   (Curve,
    Cartesian_point,
    rigid_placement,
    Surface);
END_TYPE;

TYPE ks_additional_application_domain_enumeration = ENUMERATION BASED_ON additional_application_domain_enumeration WITH
   (kinematic_mechanism);
END_TYPE;

TYPE ks_geometric_representation_select = EXTENSIBLE GENERIC_ENTITY SELECT BASED_ON geometric_representation_select WITH
   (Kinematic_link_representation);
END_TYPE;

TYPE ks_property_assignment_select = SELECT BASED_ON property_assignment_select WITH
   (Assembly_component_relationship);
END_TYPE;

TYPE rigid_placement = SELECT
   (Axis_placement_3d,
    Su_parameters);
END_TYPE;

ENTITY Actuated_kinematic_pair
  SUBTYPE OF (Kinematic_pair);
  t_x : OPTIONAL actuated_direction;
  t_y : OPTIONAL actuated_direction;
  t_z : OPTIONAL actuated_direction;
  r_x : OPTIONAL actuated_direction;
  r_y : OPTIONAL actuated_direction;
  r_z : OPTIONAL actuated_direction;
END_ENTITY;

ENTITY Context_dependent_kinematic_link_representation;
  representation_relation : Kinematic_link_representation_association;
  represented_product_relation : Product_definition_relationship_kinematics;
END_ENTITY;

ENTITY Cylindrical_pair
  SUBTYPE OF (Low_order_kinematic_pair);
DERIVE
  SELF\Low_order_kinematic_pair.t_x : BOOLEAN := FALSE;
  SELF\Low_order_kinematic_pair.t_y : BOOLEAN := FALSE;
  SELF\Low_order_kinematic_pair.t_z : BOOLEAN := TRUE;
  SELF\Low_order_kinematic_pair.r_x : BOOLEAN := FALSE;
  SELF\Low_order_kinematic_pair.r_y : BOOLEAN := FALSE;
  SELF\Low_order_kinematic_pair.r_z : BOOLEAN := TRUE;
END_ENTITY;

ENTITY Cylindrical_pair_with_range
  SUBTYPE OF (Cylindrical_pair);
  lower_limit_actual_translation : OPTIONAL length_measure;
  upper_limit_actual_translation : OPTIONAL length_measure;
  lower_limit_actual_rotation : OPTIONAL plane_angle_measure;
  upper_limit_actual_rotation : OPTIONAL plane_angle_measure;
WHERE
  WR1: (NOT EXISTS(lower_limit_actual_translation) OR NOT EXISTS(upper_limit_actual_translation)) XOR (lower_limit_actual_translation < upper_limit_actual_translation);
  WR2: (NOT EXISTS(lower_limit_actual_rotation) OR NOT EXISTS(upper_limit_actual_rotation)) XOR (lower_limit_actual_rotation < upper_limit_actual_rotation);
END_ENTITY;

ENTITY Fully_constrained_pair
  SUBTYPE OF (Low_order_kinematic_pair);
DERIVE
  SELF\Low_order_kinematic_pair.t_x : BOOLEAN := FALSE;
  SELF\Low_order_kinematic_pair.t_y : BOOLEAN := FALSE;
  SELF\Low_order_kinematic_pair.t_z : BOOLEAN := FALSE;
  SELF\Low_order_kinematic_pair.r_x : BOOLEAN := FALSE;
  SELF\Low_order_kinematic_pair.r_y : BOOLEAN := FALSE;
  SELF\Low_order_kinematic_pair.r_z : BOOLEAN := FALSE;
END_ENTITY;

ENTITY Gear_pair
  SUBTYPE OF (Low_order_kinematic_pair_with_motion_coupling);
  radius_first_link : length_measure;
  radius_second_link : length_measure;
  bevel : plane_angle_measure;
  helical_angle : plane_angle_measure;
  gear_ratio : REAL;
WHERE
  WR1: SIZEOF( QUERY(lr <* SELF\Kinematic_pair.associated_link_representations_1 | NOT('KINEMATIC_STRUCTURE_ARM.RIGID_LINK_REPRESENTATION' IN TYPEOF(lr)))) = 0;
END_ENTITY;

ENTITY Gear_pair_with_range
  SUBTYPE OF (Gear_pair);
  lower_limit_actual_rotation_1 : OPTIONAL plane_angle_measure;
  upper_limit_actual_rotation_1 : OPTIONAL plane_angle_measure;
WHERE
  WR1: (NOT EXISTS(lower_limit_actual_rotation_1) OR NOT EXISTS(upper_limit_actual_rotation_1)) XOR (lower_limit_actual_rotation_1 < upper_limit_actual_rotation_1);
END_ENTITY;

ENTITY High_order_kinematic_pair
  ABSTRACT SUPERTYPE OF (ONEOF (Linear_flexible_and_planar_curve_pair,
                                Point_on_surface_pair,
                                Point_on_planar_curve_pair,
                                Planar_curve_pair,
                                Surface_pair))
  SUBTYPE OF (Kinematic_pair);
WHERE
  WR1: SIZEOF( QUERY(lr <* SELF\Kinematic_pair.associated_link_representations_2 | NOT('KINEMATIC_STRUCTURE_ARM.RIGID_LINK_REPRESENTATION' IN TYPEOF(lr)))) = 0;
END_ENTITY;

ENTITY Homokinetic_pair
  SUBTYPE OF (Universal_pair);
WHERE
  WR1: NOT EXISTS(SELF.input_skew_angle);
END_ENTITY;

ENTITY Kinematic_link_representation
  ABSTRACT SUPERTYPE OF (ONEOF (Linear_flexible_link_representation,
                                Rigid_link_representation))
  SUBTYPE OF (Representation);
  SELF\Representation.context_of_items : Geometric_coordinate_space;
  SELF\Representation.items : SET[1:?] OF kinematic_link_representation_items;
  represented_link : Kinematic_link;
INVERSE
  associated_shape_representation : SET[0:1] OF Kinematic_link_representation_association FOR rep_1;
END_ENTITY;

ENTITY Kinematic_link_representation_association
  SUBTYPE OF (Representation_relationship);
  SELF\Representation_relationship.rep_1 : Kinematic_link_representation;
  SELF\Representation_relationship.rep_2 : Geometric_model;
WHERE
  WR1: (SELF\Representation_relationship.rep_2.context_of_items :=: SELF\Representation_relationship.rep_1.context_of_items) OR ('CONTEXTUAL_SHAPE_POSITIONING_ARM.GEOMETRIC_MODEL_RELATIONSHIP_WITH_TRANSFORMATION' IN TYPEOF(SELF));
END_ENTITY;

ENTITY Kinematic_pair
  ABSTRACT SUPERTYPE OF (ONEOF (High_order_kinematic_pair,
                                Low_order_kinematic_pair_with_motion_coupling,
                                Low_order_kinematic_pair)
                        ANDOR Actuated_kinematic_pair)
  SUBTYPE OF (Detailed_geometric_model_element);
  joint : Kinematic_joint;
  transform_item_1 : rigid_placement;
  transform_item_2 : rigid_placement;
DERIVE
  associated_link_representations_1 : SET[1:?] OF Kinematic_link_representation := sort_link_associations(link_representation_associations, TRUE);
  associated_link_representations_2 : SET[1:?] OF Kinematic_link_representation := sort_link_associations(link_representation_associations, FALSE);
INVERSE
  link_representation_associations : SET[1:?] OF Pair_representation_relationship FOR transformation_operator;
END_ENTITY;

ENTITY Kinematic_property_mechanism_representation
  SUBTYPE OF (Kinematic_property_definition_representation);
  SELF\Property_definition_representation.used_representation : Mechanism_representation;
  base : Kinematic_link_representation;
WHERE
  WR1: SIZEOF( QUERY( i <* used_representation.items | (base :=: i\Representation_relationship.rep_1) OR (base :=: i\Representation_relationship.rep_2))) > 0;
END_ENTITY;

ENTITY Linear_flexible_and_pinion_pair
  SUBTYPE OF (Low_order_kinematic_pair_with_motion_coupling);
  pinion_radius : length_measure;
WHERE
  WR1: SIZEOF( QUERY(lr <* SELF\Kinematic_pair.associated_link_representations_1 | NOT('KINEMATIC_STRUCTURE_ARM.LINEAR_FLEXIBLE_LINK_REPRESENTATION' IN TYPEOF(lr)))) = 0;
END_ENTITY;

ENTITY Linear_flexible_and_planar_curve_pair
  SUBTYPE OF (High_order_kinematic_pair);
  pair_curve : Curve;
  orientation : BOOLEAN;
WHERE
  WR1: SIZEOF( QUERY(r <* SELF\Kinematic_pair.associated_link_representations_1 | NOT(pair_curve IN r.items))) = 0;
  WR2: SIZEOF( QUERY(lr <* SELF\Kinematic_pair.associated_link_representations_1 | NOT('KINEMATIC_STRUCTURE_ARM.LINEAR_FLEXIBLE_LINK_REPRESENTATION' IN TYPEOF(lr)))) = 0;
END_ENTITY;

ENTITY Linear_flexible_link_representation
  SUBTYPE OF (Kinematic_link_representation);
END_ENTITY;

ENTITY Low_order_kinematic_pair
  SUPERTYPE OF (ONEOF (Revolute_pair,
                       Cylindrical_pair,
                       Spherical_pair,
                       Spherical_pair_with_pin,
                       Planar_pair,
                       Unconstrained_pair,
                       Fully_constrained_pair,
                       Prismatic_pair,
                       Universal_pair))
  SUBTYPE OF (Kinematic_pair);
  t_x : BOOLEAN;
  t_y : BOOLEAN;
  t_z : BOOLEAN;
  r_x : BOOLEAN;
  r_y : BOOLEAN;
  r_z : BOOLEAN;
WHERE
  WR1: SIZEOF( QUERY(lr <* SELF\Kinematic_pair.associated_link_representations_1 | NOT('KINEMATIC_STRUCTURE_ARM.RIGID_LINK_REPRESENTATION' IN TYPEOF(lr)))) = 0;
  WR2: SIZEOF( QUERY(lr <* SELF\Kinematic_pair.associated_link_representations_2 | NOT('KINEMATIC_STRUCTURE_ARM.RIGID_LINK_REPRESENTATION' IN TYPEOF(lr)))) = 0;
END_ENTITY;

ENTITY Low_order_kinematic_pair_with_motion_coupling
  ABSTRACT SUPERTYPE OF (ONEOF (Gear_pair,
                                Linear_flexible_and_pinion_pair,
                                Rack_and_pinion_pair,
                                Screw_pair))
  SUBTYPE OF (Kinematic_pair);
WHERE
  WR1: SIZEOF( QUERY(lr <* SELF\Kinematic_pair.associated_link_representations_2 | NOT('KINEMATIC_STRUCTURE_ARM.RIGID_LINK_REPRESENTATION' IN TYPEOF(lr)))) = 0;
END_ENTITY;

ENTITY Mechanism_representation
  SUBTYPE OF (Representation);
  SELF\Representation.context_of_items : Geometric_coordinate_space;
  SELF\Representation.items : SET[1:?] OF Pair_representation_relationship;
  represented_topology : kinematic_topology_representation_select;
DERIVE
  represented_joints : SET[1:?] OF Kinematic_joint := collect_joints(items);
WHERE
  WR1: (('KINEMATIC_TOPOLOGY_ARM.KINEMATIC_TOPOLOGY_STRUCTURE' IN TYPEOF(represented_topology)) AND (represented_joints :=: represented_topology.items)) OR (('KINEMATIC_TOPOLOGY_ARM.KINEMATIC_TOPOLOGY_DIRECTED_STRUCTURE' IN TYPEOF(represented_topology)) AND (represented_joints :=: get_kinematic_joints_from_oriented_joints(represented_topology.items))) OR (('KINEMATIC_TOPOLOGY_ARM.KINEMATIC_TOPOLOGY_NETWORK_STRUCTURE' IN TYPEOF(represented_topology)) AND (represented_joints :=: get_kinematic_joints_from_kinematic_loops(represented_topology.items)));
END_ENTITY;

ENTITY Pair_representation_relationship
  SUBTYPE OF (Detailed_geometric_model_element, Geometric_model_relationship);
  SELF\Representation_relationship.rep_1 : Kinematic_link_representation;
  SELF\Representation_relationship.rep_2 : Kinematic_link_representation;
  transformation_operator : Kinematic_pair;
WHERE
  WR1: transformation_operator.transform_item_1 IN rep_1.items;
  WR2: transformation_operator.transform_item_2 IN rep_2.items;
  WR3: rep_1\kinematic_link_representation.represented_link = transformation_operator\kinematic_pair.joint.edge_start;
  WR4: rep_2\kinematic_link_representation.represented_link = transformation_operator\kinematic_pair.joint.edge_end;
END_ENTITY;

ENTITY Planar_curve_pair
  SUPERTYPE OF (ONEOF (Sliding_curve_pair,
                       Rolling_curve_pair)
               ANDOR Planar_curve_pair_range)
  SUBTYPE OF (High_order_kinematic_pair);
  curve_1 : Curve;
  curve_2 : Curve;
  orientation : BOOLEAN;
WHERE
  WR1: SIZEOF( QUERY(r <* SELF\Kinematic_pair.associated_link_representations_1 | NOT(curve_1 IN r.items))) = 0;
  WR2: SIZEOF( QUERY(r <* SELF\Kinematic_pair.associated_link_representations_2 | NOT(curve_2 IN r.items))) = 0;
  WR3: SIZEOF( QUERY(lr <* SELF\Kinematic_pair.associated_link_representations_1 | NOT('KINEMATIC_STRUCTURE_ARM.RIGID_LINK_REPRESENTATION' IN TYPEOF(lr)))) = 0;
END_ENTITY;

ENTITY Planar_curve_pair_range
  SUBTYPE OF (Planar_curve_pair);
  range_on_curve_1 : Trimmed_curve;
  range_on_curve_2 : Trimmed_curve;
WHERE
  WR1: SELF\Planar_curve_pair.curve_1 :=: range_on_curve_1.basis_curve;
  WR2: SELF\Planar_curve_pair.curve_2 :=: range_on_curve_2.basis_curve;
  WR3: SIZEOF( QUERY(r <* SELF\Kinematic_pair.associated_link_representations_1 | NOT(range_on_curve_1 IN r.items))) = 0;
  WR4: SIZEOF( QUERY(r <* SELF\Kinematic_pair.associated_link_representations_2 | NOT(range_on_curve_2 IN r.items))) = 0;
END_ENTITY;

ENTITY Planar_pair
  SUBTYPE OF (Low_order_kinematic_pair);
DERIVE
  SELF\Low_order_kinematic_pair.t_x : BOOLEAN := TRUE;
  SELF\Low_order_kinematic_pair.t_y : BOOLEAN := TRUE;
  SELF\Low_order_kinematic_pair.t_z : BOOLEAN := FALSE;
  SELF\Low_order_kinematic_pair.r_x : BOOLEAN := FALSE;
  SELF\Low_order_kinematic_pair.r_y : BOOLEAN := FALSE;
  SELF\Low_order_kinematic_pair.r_z : BOOLEAN := TRUE;
END_ENTITY;

ENTITY Planar_pair_with_range
  SUBTYPE OF (Planar_pair);
  lower_limit_actual_rotation : OPTIONAL plane_angle_measure;
  upper_limit_actual_rotation : OPTIONAL plane_angle_measure;
  lower_limit_actual_translation_x : OPTIONAL length_measure;
  upper_limit_actual_translation_x : OPTIONAL length_measure;
  lower_limit_actual_translation_y : OPTIONAL length_measure;
  upper_limit_actual_translation_y : OPTIONAL length_measure;
WHERE
  WR1: (NOT EXISTS(lower_limit_actual_rotation) OR NOT EXISTS(upper_limit_actual_rotation)) XOR (lower_limit_actual_rotation < upper_limit_actual_rotation);
  WR2: (NOT EXISTS(lower_limit_actual_translation_x) OR NOT EXISTS(upper_limit_actual_translation_x)) XOR (lower_limit_actual_translation_x < upper_limit_actual_translation_x);
  WR3: (NOT EXISTS(lower_limit_actual_translation_y) OR NOT EXISTS(upper_limit_actual_translation_y)) XOR (lower_limit_actual_translation_y < upper_limit_actual_translation_y);
END_ENTITY;

ENTITY Point_on_planar_curve_pair
  SUBTYPE OF (High_order_kinematic_pair);
  pair_curve : Curve;
  orientation : BOOLEAN;
WHERE
  WR1: SIZEOF( QUERY(r <* SELF\Kinematic_pair.associated_link_representations_1 | NOT(pair_curve IN r.items))) = 0;
  WR2: SIZEOF( QUERY(lr <* SELF\Kinematic_pair.associated_link_representations_1 | NOT('KINEMATIC_STRUCTURE_ARM.RIGID_LINK_REPRESENTATION' IN TYPEOF(lr)))) = 0;
END_ENTITY;

ENTITY Point_on_planar_curve_pair_with_range
  SUBTYPE OF (Point_on_planar_curve_pair);
  range_on_pair_curve : Trimmed_curve;
  lower_limit_yaw : OPTIONAL plane_angle_measure;
  upper_limit_yaw : OPTIONAL plane_angle_measure;
  lower_limit_pitch : OPTIONAL plane_angle_measure;
  upper_limit_pitch : OPTIONAL plane_angle_measure;
  lower_limit_roll : OPTIONAL plane_angle_measure;
  upper_limit_roll : OPTIONAL plane_angle_measure;
WHERE
  WR1: (NOT EXISTS(lower_limit_pitch) OR NOT EXISTS(upper_limit_pitch)) XOR (lower_limit_pitch < upper_limit_pitch);
  WR2: (NOT EXISTS(lower_limit_yaw) OR NOT EXISTS(upper_limit_yaw)) XOR (lower_limit_yaw < upper_limit_yaw);
  WR3: (NOT EXISTS(lower_limit_roll) OR NOT EXISTS(upper_limit_roll)) XOR (lower_limit_roll < upper_limit_roll);
  WR4: SIZEOF( QUERY(r <* SELF\Kinematic_pair.associated_link_representations_1 | NOT(range_on_pair_curve IN r.items))) = 0;
END_ENTITY;

ENTITY Point_on_surface_pair
  SUBTYPE OF (High_order_kinematic_pair);
  pair_surface : Surface;
WHERE
  WR1: SIZEOF( QUERY(r <* SELF\Kinematic_pair.associated_link_representations_1 | NOT(pair_surface IN r.items))) = 0;
  WR2: SIZEOF( QUERY(lr <* SELF\Kinematic_pair.associated_link_representations_1 | NOT('KINEMATIC_STRUCTURE_ARM.RIGID_LINK_REPRESENTATION' IN TYPEOF(lr)))) = 0;
END_ENTITY;

ENTITY Point_on_surface_pair_with_range
  SUBTYPE OF (Point_on_surface_pair);
  range_on_pair_surface : Trimmed_surface;
  lower_limit_yaw : OPTIONAL plane_angle_measure;
  upper_limit_yaw : OPTIONAL plane_angle_measure;
  lower_limit_pitch : OPTIONAL plane_angle_measure;
  upper_limit_pitch : OPTIONAL plane_angle_measure;
  lower_limit_roll : OPTIONAL plane_angle_measure;
  upper_limit_roll : OPTIONAL plane_angle_measure;
WHERE
  WR1: (NOT EXISTS(lower_limit_pitch) OR NOT EXISTS(upper_limit_pitch)) XOR (lower_limit_pitch < upper_limit_pitch);
  WR2: (NOT EXISTS(lower_limit_yaw) OR NOT EXISTS(upper_limit_yaw)) XOR (lower_limit_yaw < upper_limit_yaw);
  WR3: (NOT EXISTS(lower_limit_roll) OR NOT EXISTS(upper_limit_roll)) XOR (lower_limit_roll < upper_limit_roll);
  WR4: SIZEOF( QUERY(r <* SELF\Kinematic_pair.associated_link_representations_1 | NOT(range_on_pair_surface IN r.items))) = 0;
END_ENTITY;

ENTITY Prismatic_pair
  SUBTYPE OF (Low_order_kinematic_pair);
DERIVE
  SELF\Low_order_kinematic_pair.t_x : BOOLEAN := TRUE;
  SELF\Low_order_kinematic_pair.t_y : BOOLEAN := FALSE;
  SELF\Low_order_kinematic_pair.t_z : BOOLEAN := FALSE;
  SELF\Low_order_kinematic_pair.r_x : BOOLEAN := FALSE;
  SELF\Low_order_kinematic_pair.r_y : BOOLEAN := FALSE;
  SELF\Low_order_kinematic_pair.r_z : BOOLEAN := FALSE;
END_ENTITY;

ENTITY Prismatic_pair_with_range
  SUBTYPE OF (Prismatic_pair);
  lower_limit_actual_translation : OPTIONAL length_measure;
  upper_limit_actual_translation : OPTIONAL length_measure;
WHERE
  WR1: (NOT EXISTS(lower_limit_actual_translation) OR NOT EXISTS(upper_limit_actual_translation)) XOR (lower_limit_actual_translation < upper_limit_actual_translation);
END_ENTITY;

ENTITY Product_definition_relationship_kinematics
  SUBTYPE OF (Assigned_property);
  SELF\Assigned_property.described_element : Assembly_component_relationship;
UNIQUE
  UR1: described_element;
END_ENTITY;

ENTITY Rack_and_pinion_pair
  SUBTYPE OF (Low_order_kinematic_pair_with_motion_coupling);
  pinion_radius : length_measure;
WHERE
  WR1: SIZEOF( QUERY(lr <* SELF\Kinematic_pair.associated_link_representations_1 | NOT('KINEMATIC_STRUCTURE_ARM.RIGID_LINK_REPRESENTATION' IN TYPEOF(lr)))) = 0;
END_ENTITY;

ENTITY Rack_and_pinion_pair_with_range
  SUBTYPE OF (Rack_and_pinion_pair);
  lower_limit_rack_displacement : OPTIONAL length_measure;
  upper_limit_rack_displacement : OPTIONAL length_measure;
WHERE
  WR1: (NOT EXISTS(lower_limit_rack_displacement) OR NOT EXISTS(upper_limit_rack_displacement)) XOR (lower_limit_rack_displacement < upper_limit_rack_displacement);
END_ENTITY;

ENTITY Revolute_pair
  SUBTYPE OF (Low_order_kinematic_pair);
DERIVE
  SELF\Low_order_kinematic_pair.t_x : BOOLEAN := FALSE;
  SELF\Low_order_kinematic_pair.t_y : BOOLEAN := FALSE;
  SELF\Low_order_kinematic_pair.t_z : BOOLEAN := FALSE;
  SELF\Low_order_kinematic_pair.r_x : BOOLEAN := FALSE;
  SELF\Low_order_kinematic_pair.r_y : BOOLEAN := FALSE;
  SELF\Low_order_kinematic_pair.r_z : BOOLEAN := TRUE;
END_ENTITY;

ENTITY Revolute_pair_with_range
  SUBTYPE OF (Revolute_pair);
  lower_limit_actual_rotation : OPTIONAL plane_angle_measure;
  upper_limit_actual_rotation : OPTIONAL plane_angle_measure;
WHERE
  WR1: (NOT EXISTS(lower_limit_actual_rotation) OR NOT EXISTS(upper_limit_actual_rotation)) XOR (lower_limit_actual_rotation < upper_limit_actual_rotation);
END_ENTITY;

ENTITY Rigid_link_representation
  SUBTYPE OF (Kinematic_link_representation);
END_ENTITY;

ENTITY Rolling_curve_pair
  SUBTYPE OF (Planar_curve_pair);
END_ENTITY;

ENTITY Rolling_surface_pair
  SUBTYPE OF (Surface_pair);
END_ENTITY;

ENTITY Screw_pair
  SUBTYPE OF (Low_order_kinematic_pair_with_motion_coupling);
  pitch : length_measure;
WHERE
  WR1: SIZEOF( QUERY(lr <* SELF\Kinematic_pair.associated_link_representations_1 | NOT('KINEMATIC_STRUCTURE_ARM.RIGID_LINK_REPRESENTATION' IN TYPEOF(lr)))) = 0;
END_ENTITY;

ENTITY Screw_pair_with_range
  SUBTYPE OF (Screw_pair);
  lower_limit_actual_rotation : OPTIONAL plane_angle_measure;
  upper_limit_actual_rotation : OPTIONAL plane_angle_measure;
WHERE
  WR1: (NOT EXISTS(lower_limit_actual_rotation) OR NOT EXISTS(upper_limit_actual_rotation)) XOR (lower_limit_actual_rotation < upper_limit_actual_rotation);
END_ENTITY;

ENTITY Sliding_curve_pair
  SUBTYPE OF (Planar_curve_pair);
END_ENTITY;

ENTITY Sliding_surface_pair
  SUBTYPE OF (Surface_pair);
END_ENTITY;

ENTITY Spherical_pair
  SUBTYPE OF (Low_order_kinematic_pair);
DERIVE
  SELF\Low_order_kinematic_pair.t_x : BOOLEAN := FALSE;
  SELF\Low_order_kinematic_pair.t_y : BOOLEAN := FALSE;
  SELF\Low_order_kinematic_pair.t_z : BOOLEAN := FALSE;
  SELF\Low_order_kinematic_pair.r_x : BOOLEAN := TRUE;
  SELF\Low_order_kinematic_pair.r_y : BOOLEAN := TRUE;
  SELF\Low_order_kinematic_pair.r_z : BOOLEAN := TRUE;
END_ENTITY;

ENTITY Spherical_pair_with_pin
  SUBTYPE OF (Low_order_kinematic_pair);
DERIVE
  SELF\Low_order_kinematic_pair.t_x : BOOLEAN := FALSE;
  SELF\Low_order_kinematic_pair.t_y : BOOLEAN := FALSE;
  SELF\Low_order_kinematic_pair.t_z : BOOLEAN := FALSE;
  SELF\Low_order_kinematic_pair.r_x : BOOLEAN := FALSE;
  SELF\Low_order_kinematic_pair.r_y : BOOLEAN := TRUE;
  SELF\Low_order_kinematic_pair.r_z : BOOLEAN := TRUE;
END_ENTITY;

ENTITY Spherical_pair_with_pin_and_range
  SUBTYPE OF (Spherical_pair_with_pin);
  lower_limit_yaw : OPTIONAL plane_angle_measure;
  upper_limit_yaw : OPTIONAL plane_angle_measure;
  lower_limit_roll : OPTIONAL plane_angle_measure;
  upper_limit_roll : OPTIONAL plane_angle_measure;
WHERE
  WR1: (NOT EXISTS(lower_limit_yaw) OR NOT EXISTS(upper_limit_yaw)) XOR (lower_limit_yaw < upper_limit_yaw);
  WR2: (NOT EXISTS(lower_limit_roll) OR NOT EXISTS(upper_limit_roll)) XOR (lower_limit_roll < upper_limit_roll);
END_ENTITY;

ENTITY Spherical_pair_with_range
  SUBTYPE OF (Spherical_pair);
  lower_limit_yaw : OPTIONAL plane_angle_measure;
  upper_limit_yaw : OPTIONAL plane_angle_measure;
  lower_limit_pitch : OPTIONAL plane_angle_measure;
  upper_limit_pitch : OPTIONAL plane_angle_measure;
  lower_limit_roll : OPTIONAL plane_angle_measure;
  upper_limit_roll : OPTIONAL plane_angle_measure;
WHERE
  WR1: (NOT EXISTS(lower_limit_yaw) OR NOT EXISTS(upper_limit_yaw)) XOR (lower_limit_yaw < upper_limit_yaw);
  WR2: (NOT EXISTS(lower_limit_pitch) OR NOT EXISTS(upper_limit_pitch)) XOR (lower_limit_pitch < upper_limit_pitch);
  WR3: (NOT EXISTS(lower_limit_roll) OR NOT EXISTS(upper_limit_roll)) XOR (lower_limit_roll < upper_limit_roll);
END_ENTITY;

ENTITY Su_parameters
  SUBTYPE OF (Detailed_geometric_model_element);
  a : length_measure;
  alpha : plane_angle_measure;
  b : length_measure;
  beta : plane_angle_measure;
  c : length_measure;
  gamma : plane_angle_measure;
END_ENTITY;

ENTITY Surface_pair
  ABSTRACT SUPERTYPE OF (ONEOF (Sliding_surface_pair,
                                Rolling_surface_pair)
                        ANDOR Surface_pair_with_range)
  SUBTYPE OF (High_order_kinematic_pair);
  surface_1 : Surface;
  surface_2 : Surface;
  orientation : BOOLEAN;
WHERE
  WR1: SIZEOF( QUERY(r <* SELF\Kinematic_pair.associated_link_representations_1 | NOT(surface_1 IN r.items))) = 0;
  WR2: SIZEOF( QUERY(r <* SELF\Kinematic_pair.associated_link_representations_2 | NOT(surface_2 IN r.items))) = 0;
  WR3: SIZEOF( QUERY(lr <* SELF\Kinematic_pair.associated_link_representations_1 | NOT('KINEMATIC_STRUCTURE_ARM.RIGID_LINK_REPRESENTATION' IN TYPEOF(lr)))) = 0;
END_ENTITY;

ENTITY Surface_pair_with_range
  SUBTYPE OF (Surface_pair);
  range_on_surface_1 : Trimmed_surface;
  range_on_surface_2 : Trimmed_surface;
  lower_limit_actual_rotation : OPTIONAL plane_angle_measure;
  upper_limit_actual_rotation : OPTIONAL plane_angle_measure;
WHERE
  WR1: SELF\Surface_pair.surface_1 :=: range_on_surface_1.basis_surface;
  WR2: SELF\Surface_pair.surface_2 :=: range_on_surface_2.basis_surface;
  WR3: (NOT EXISTS(lower_limit_actual_rotation) OR NOT EXISTS(upper_limit_actual_rotation)) XOR (lower_limit_actual_rotation < upper_limit_actual_rotation);
  WR4: SIZEOF( QUERY(r <* SELF\Kinematic_pair.associated_link_representations_1 | NOT(range_on_surface_1 IN r.items))) = 0;
  WR5: SIZEOF( QUERY(r <* SELF\Kinematic_pair.associated_link_representations_2 | NOT(range_on_surface_2 IN r.items))) = 0;
END_ENTITY;

ENTITY Tool_attachment_point_frame
  SUBTYPE OF (Axis_placement_3d);
DERIVE
  SELF\Representation_item.name : label := ?;
END_ENTITY;

ENTITY Tool_centre_point_frame
  SUBTYPE OF (Axis_placement_3d);
DERIVE
  SELF\Representation_item.name : label := ?;
END_ENTITY;

ENTITY Unconstrained_pair
  SUBTYPE OF (Low_order_kinematic_pair);
DERIVE
  SELF\Low_order_kinematic_pair.t_x : BOOLEAN := TRUE;
  SELF\Low_order_kinematic_pair.t_y : BOOLEAN := TRUE;
  SELF\Low_order_kinematic_pair.t_z : BOOLEAN := TRUE;
  SELF\Low_order_kinematic_pair.r_x : BOOLEAN := TRUE;
  SELF\Low_order_kinematic_pair.r_y : BOOLEAN := TRUE;
  SELF\Low_order_kinematic_pair.r_z : BOOLEAN := TRUE;
END_ENTITY;

ENTITY Universal_pair
  SUBTYPE OF (Low_order_kinematic_pair);
  input_skew_angle : OPTIONAL plane_angle_measure;
DERIVE
  SELF\Low_order_kinematic_pair.t_x : BOOLEAN := FALSE;
  SELF\Low_order_kinematic_pair.t_y : BOOLEAN := FALSE;
  SELF\Low_order_kinematic_pair.t_z : BOOLEAN := FALSE;
  SELF\Low_order_kinematic_pair.r_x : BOOLEAN := TRUE;
  SELF\Low_order_kinematic_pair.r_y : BOOLEAN := FALSE;
  SELF\Low_order_kinematic_pair.r_z : BOOLEAN := TRUE;
  skew_angle : plane_angle_measure := NVL (input_skew_angle, 0.0);
END_ENTITY;

ENTITY Universal_pair_with_range
  SUBTYPE OF (Universal_pair);
  lower_limit_first_rotation : OPTIONAL plane_angle_measure;
  upper_limit_first_rotation : OPTIONAL plane_angle_measure;
  lower_limit_second_rotation : OPTIONAL plane_angle_measure;
  upper_limit_second_rotation : OPTIONAL plane_angle_measure;
WHERE
  WR1: (NOT EXISTS(lower_limit_first_rotation) OR NOT EXISTS(upper_limit_first_rotation)) XOR (lower_limit_first_rotation < upper_limit_first_rotation);
  WR2: (NOT EXISTS(lower_limit_second_rotation) OR NOT EXISTS(upper_limit_second_rotation)) XOR (lower_limit_second_rotation < upper_limit_second_rotation);
END_ENTITY;

SUBTYPE_CONSTRAINT kps_property_definition_subtypes FOR Assigned_property;
  ONEOF (Product_definition_kinematics,
         Product_definition_relationship_kinematics);
END_SUBTYPE_CONSTRAINT;

SUBTYPE_CONSTRAINT ks_axis_placement_3d_subtypes FOR Axis_placement_3d;
  ONEOF (Tool_attachment_point_frame,
         Tool_centre_point_frame);
END_SUBTYPE_CONSTRAINT;

SUBTYPE_CONSTRAINT kss_representation_subtypes FOR Representation;
  ONEOF (Kinematic_link_representation,
         Kinematic_topology_structure,
         Kinematic_topology_directed_structure,
         Kinematic_topology_network_structure,
         Mechanism_representation,
         Geometric_model);
END_SUBTYPE_CONSTRAINT;

FUNCTION collect_joints
 (items : SET[1:?] OF Pair_representation_relationship) : SET[0:?] OF Kinematic_joint;
LOCAL
  result : SET OF kinematic_joint := [];
END_LOCAL;
  REPEAT i := 1 TO HIINDEX(items);
    result := result + items[i].transformation_operator.joint;
  END_REPEAT;
  RETURN(result);
END_FUNCTION;

FUNCTION representation_of_link
 (link : Kinematic_link) : Kinematic_link_representation;
RETURN (?);
END_FUNCTION;

FUNCTION sort_link_associations
 (aprr : SET[1:?] OF Pair_representation_relationship; one_not_two : BOOLEAN) : SET[0:?] OF Kinematic_link_representation;
LOCAL
  result : SET OF Kinematic_link_representation := [];
END_LOCAL;
  IF one_not_two THEN
    REPEAT i := 1 TO HIINDEX(aprr);
      result := result + aprr[i].rep_1;
    END_REPEAT;
  ELSE  
    REPEAT i := 1 TO HIINDEX(aprr);
      result := result + aprr[i].rep_2;
    END_REPEAT;
  END_IF;
  RETURN(result);
END_FUNCTION;

END_SCHEMA;  -- Kinematic_structure_arm


© ISO 2018 — All rights reserved