SCHEMA Milling_Schema;

(* Version 19 date: 2002-02-06  
 * Author: ISO TC184/SC1/WG7 
 *) 
 
	(* ************************************************************ *) 
	(* Types from machining_schema                   ISO 14649-10   *) 
	(* ************************************************************ *) 
 
REFERENCE FROM machining_schema( 
	bounded_curve, 
	cartesian_point, 
	direction, 
	identifier, 
	label, 
	length_measure, 
	nc_function, 
	machine_functions, 
	machining_operation, 
	machining_tool, 
	material, 
	plane_angle_measure, 
	positive_ratio_measure, 
	pressure_measure, 
	property_parameter, 
	rot_direction, 
	rot_speed_measure, 
	speed_measure, 
	technology, 
	time_measure, 
	toolpath_list, 
	tool_direction); 
 
	(* ************************************************************ *) 
	(* ************************************************************ *) 
	(*                                                              *) 
	(* Types from tools for milling                  ISO 14649-111  *) 
	(*                                                              *) 
	(* ************************************************************ *) 
	(* ************************************************************ *) 
 
ENTITY milling_cutting_tool (* m0 *) 
SUBTYPE OF (cutting_tool); 
direction_for_spindle_orientation:  
                             OPTIONAL direction; 
tool_holder_diameter_for_spindle_orientation: 
                             OPTIONAL length_measure; 
END_ENTITY; 
 
(* ************************************************************ *) 
(* Milling tool body                                            *) 
(* ************************************************************ *)  
     
ENTITY milling_tool_body (* m0 *) 
ABSTRACT SUPERTYPE OF (ONEOF(center_drill, countersink, drill, milling_cutter, 
	tap, milling_threading_tool, counterbore, reamer, boring_tool, 
	user_defined_tool)) 
SUBTYPE OF (tool_body); 
dimension:                   milling_tool_dimension; 
number_of_teeth:             OPTIONAL INTEGER; 
hand_of_cut:                 OPTIONAL hand; 
coolant_through_tool:        OPTIONAL BOOLEAN; 
pilot_length:                OPTIONAL length_measure;
END_ENTITY; 
         
	(* ************************************************************ *) 
	(* Milling tool dimension                                       *) 
	(* ************************************************************ *)  
 
ENTITY milling_tool_dimension; (* m0 *) 
diameter:                    length_measure; 
tool_top_angle:              OPTIONAL plane_angle_measure; 
tool_circumference_angle:    OPTIONAL plane_angle_measure; 
cutting_edge_length:         OPTIONAL length_measure; 
edge_radius:                 OPTIONAL length_measure; 
edge_center_vertical:        OPTIONAL length_measure; 
edge_center_horizontal:      OPTIONAL length_measure; 
END_ENTITY; 
 
TYPE hand = ENUMERATION OF(left, right, neutral); 
END_TYPE; 
 
ENTITY center_drill (* m0 *) 
SUBTYPE OF (milling_tool_body); 
END_ENTITY; 
 
ENTITY countersink (* m0 *) 
SUPERTYPE OF (backside_countersink) 
SUBTYPE OF (milling_tool_body); 
countersink_radius:    OPTIONAL length_measure;  
END_ENTITY; 
 
ENTITY backside_countersink (* m0 *) 
SUBTYPE OF (countersink); 
END_ENTITY;      
 
ENTITY drill      (* m0 *) 
ABSTRACT SUPERTYPE OF (ONEOF(twist_drill, spade_drill)) 
SUBTYPE OF (milling_tool_body); 
END_ENTITY;         
 
ENTITY twist_drill (* m0 *) 
SUPERTYPE OF (tapered_drill) 
SUBTYPE OF (drill); 
END_ENTITY; 
 
ENTITY tapered_drill (* m0 *) 
SUBTYPE OF (twist_drill); 
taper_angle:                 OPTIONAL plane_angle_measure; 
END_ENTITY; 
 
ENTITY spade_drill (* m0 *) 
SUBTYPE OF (drill); 
END_ENTITY; 
 
ENTITY milling_cutter (* m0 *) 
ABSTRACT SUPERTYPE OF (ONEOF(facemill, endmill, t_slot_mill, dovetail_mill, 
woodruff_keyseat_mill, side_mill, thread_mill)) 
SUBTYPE OF (milling_tool_body);     
END_ENTITY; 
 
ENTITY facemill  (* m0 *) 
SUBTYPE OF (milling_cutter); 
END_ENTITY; 
 
ENTITY endmill  (* m0 *) 
SUPERTYPE OF (ONEOF(tapered_endmill, ball_endmill, bullnose_endmill)) 
SUBTYPE OF (milling_cutter); 
END_ENTITY; 
 
ENTITY tapered_endmill (* m0 *) 
SUBTYPE OF (endmill); 
taper_angle:           OPTIONAL plane_angle_measure; 
END_ENTITY; 
 
ENTITY ball_endmill (* m0 *) 
SUBTYPE OF (endmill); 
WHERE 
WR1: (NOT EXISTS(SELF.dimension.edge_center_horizontal)) 
     OR ((EXISTS(SELF.dimension.edge_center_horizontal)) AND 
     (SELF.dimension.edge_center_horizontal = 0)); 
WR2: (NOT EXISTS(SELF.dimension.edge_center_vertical)) 
     OR ((EXISTS(SELF.dimension.edge_center_vertical)) AND 
     (SELF.dimension. edge_center_vertical = SELF.dimension.diameter/2)); 
WR3: (NOT EXISTS(SELF.dimension.edge_radius)) 
     OR ((EXISTS(SELF.dimension. edge_radius)) AND 
     (SELF.dimension.edge_radius = SELF.dimension.diameter/2)); 
WR4: (NOT EXISTS(SELF.dimension.tool_top_angle)) 
     OR ((EXISTS(SELF.dimension.tool_top_angle)) AND 
     (SELF.dimension.tool_top_angle = 0)); 
WR5: (NOT EXISTS(SELF.dimension.tool_circumference_angle)) 
     OR ((EXISTS(SELF.dimension.tool_circumference_angle)) AND 
     (SELF.dimension.tool_circumference_angle = 0)); 
END_ENTITY; 
 
ENTITY bullnose_endmill (* m0 *) 
SUBTYPE OF (endmill); 
WHERE 
WR1: (NOT EXISTS(SELF.dimension.tool_top_angle)) 
     OR ((EXISTS(SELF.dimension.tool_top_angle)) AND 
     (SELF.dimension.tool_top_angle = 0)); 
WR2: (NOT EXISTS(SELF.dimension.tool_circumference_angle)) 
     OR ((EXISTS(SELF.dimension.tool_circumference_angle)) AND 
     (SELF.dimension.tool_circumference_angle = 0)); 
END_ENTITY; 
 
 ENTITY t_slot_mill (* m0 *) 
SUBTYPE OF (milling_cutter); 
cutting_thickness:     OPTIONAL length_measure; 
END_ENTITY; 
 
ENTITY dovetail_mill (* m0 *) 
SUBTYPE OF (milling_cutter); 
included_angle:        OPTIONAL plane_angle_measure; 
END_ENTITY; 
 
ENTITY woodruff_keyseat_mill (* m0 *) 
SUBTYPE OF (milling_cutter); 
cutter_width:          OPTIONAL length_measure; 
END_ENTITY; 
 
ENTITY side_mill  (* m0 *) 
SUBTYPE OF (milling_cutter); 
cutter_width:          OPTIONAL length_measure; 
END_ENTITY; 
 
ENTITY thread_mill (* m0 *) 
SUBTYPE OF (milling_cutter); 
END_ENTITY; 
 
ENTITY tap  (* m0 *) 
SUPERTYPE OF (ONEOF(tapered_tap, combined_drill_and_tap)) 
SUBTYPE OF (milling_tool_body); 
END_ENTITY; 
 
ENTITY tapered_tap (* m0 *) 
SUBTYPE OF (tap); 
taper_angle:           OPTIONAL plane_angle_measure; 
END_ENTITY; 
 
ENTITY combined_drill_and_tap (* m0 *) 
SUBTYPE OF (tap); 
drill_length:          OPTIONAL length_measure;  
END_ENTITY; 
 
ENTITY milling_threading_tool (* m0 *) 
SUBTYPE OF (milling_tool_body); 
END_ENTITY; 
 
ENTITY counterbore (* m0 *) 
SUPERTYPE OF (backside_counterbore) 
SUBTYPE OF (milling_tool_body); 
END_ENTITY; 
 
ENTITY backside_counterbore (* m0 *) 
SUBTYPE OF (counterbore); 
END_ENTITY; 
 
ENTITY reamer  (* m0 *) 
SUPERTYPE OF (ONEOF(tapered_reamer, combined_drill_and_reamer)) 
SUBTYPE OF (milling_tool_body); 
END_ENTITY; 
 
ENTITY tapered_reamer (* m0 *) 
SUBTYPE OF (reamer); 
taper_angle:           OPTIONAL plane_angle_measure; 
END_ENTITY; 
 
ENTITY combined_drill_and_reamer (* m0 *) 
SUBTYPE OF (reamer); 
drill_length:          OPTIONAL length_measure; 
END_ENTITY; 
 
ENTITY boring_tool (* m0 *) 
SUBTYPE OF (milling_tool_body); 
END_ENTITY;     
 
ENTITY user_defined_tool (* m0 *) 
SUBTYPE OF (milling_tool_body); 
identifier:   label; 
END_ENTITY; 
 

	(* ************************************************************ *) 
	(* ************************************************************ *) 
	(*                                                              *) 
	(* Types defined in process data for milling     ISO 14649-11   *) 
	(*                                                              *) 
	(* ************************************************************ *) 
	(* ************************************************************ *) 
 
	(* ************************************************************ *) 
	(* NC functions for milling                                     *) 
	(* ************************************************************ *) 
 
ENTITY exchange_pallet (* m0 *) 
SUBTYPE OF (nc_function); 
END_ENTITY; 
 
ENTITY index_pallet (* m0 *) 
SUBTYPE OF (nc_function); 
its_index:             INTEGER; 
END_ENTITY; 
 
ENTITY index_table (* m0 *) 
SUBTYPE OF (nc_function); 
its_index:             INTEGER; 
END_ENTITY; 
 
ENTITY load_tool  (* m0 *) 
SUBTYPE OF (nc_function); 
its_tool:              machining_tool; 
END_ENTITY; 
 
ENTITY unload_tool (* m0 *) 
SUBTYPE OF (nc_function); 
its_tool:              OPTIONAL machining_tool; 
END_ENTITY; 
 
	(* ************************************************************ *) 
	(* Technology-specific Tool direction select                    *) 
	(* ************************************************************ *) 
 
ENTITY tool_direction_for_milling (* m0 *) 
  ABSTRACT SUPERTYPE OF (ONEOF(three_axes_tilted_tool, five_axes_var_tilt_yaw, 
five_axes_const_tilt_yaw)) 
  SUBTYPE OF (tool_direction); 
END_ENTITY; 
 
ENTITY three_axes_tilted_tool (* m0 *) 
SUBTYPE OF (tool_direction_for_milling); 
its_tool_direction: direction; 
END_ENTITY;  
 
ENTITY five_axes_var_tilt_yaw (* m1 *) 
SUBTYPE OF (tool_direction_for_milling); 
END_ENTITY; 
 
ENTITY five_axes_const_tilt_yaw (* m0 *) 
SUBTYPE OF (tool_direction_for_milling); 
tilt_angle : plane_angle_measure; 
yaw_angle  : plane_angle_measure;  
END_ENTITY; 
 
	(* ************************************************************ *) 
	(* Base class for technology specific operation and strategy    *) 
	(* ************************************************************ *) 
 
ENTITY milling_machining_operation (* m0 *) 
   ABSTRACT SUPERTYPE OF (ONEOF(milling_type_operation, 
drilling_type_operation)) 
   SUBTYPE OF (machining_operation); 
overcut_length: OPTIONAL length_measure; 
WHERE 
    WR1: (EXISTS(SELF.its_technology.feedrate_per_tooth) AND 
          EXISTS(SELF.its_tool.its_tool_body.number_of_teeth)) 
          OR(NOT(EXISTS(SELF.its_technology.feedrate_per_tooth))); 
END_ENTITY; 
 
 
	(* ************************************************************ *) 
	(* Milling technology                                           *) 
	(* ************************************************************ *) 
 
ENTITY milling_technology (* m0 *) 
SUBTYPE OF (technology);  
cutspeed:                      OPTIONAL speed_measure; 
spindle:                       OPTIONAL rot_speed_measure; 
feedrate_per_tooth:            OPTIONAL length_measure; 
synchronize_spindle_with_feed: BOOLEAN; 
inhibit_feedrate_override:     BOOLEAN; 
inhibit_spindle_override:      BOOLEAN; 
its_adaptive_control:          OPTIONAL adaptive_control; 
WHERE 
WR1: (EXISTS(cutspeed) AND NOT EXISTS(spindle)) 
OR (EXISTS(spindle) AND NOT EXISTS(cutspeed)) 
OR (EXISTS(its_adaptive_control)); 
WR2: (EXISTS(SELF.feedrate) AND NOT EXISTS(feedrate_per_tooth)) 
OR (EXISTS(feedrate_per_tooth) AND NOT EXISTS(SELF.feedrate)) 
OR (EXISTS(its_adaptive_control)); 
END_ENTITY; 
 
ENTITY adaptive_control; (* m1 *) 
END_ENTITY; 
 
	(* ************************************************************ *) 
	(* Milling machine functions                                    *) 
	(* ************************************************************ *) 
 
 ENTITY milling_machine_functions (* m0 *) 
SUBTYPE OF (machine_functions); 
coolant             :       BOOLEAN; 
coolant_pressure    :       OPTIONAL pressure_measure; 
mist                :       OPTIONAL BOOLEAN; 
through_spindle_coolant:    BOOLEAN; 
through_pressure:           OPTIONAL pressure_measure;  
axis_clamping       :       LIST [0:?] OF identifier;  
chip_removal        :       BOOLEAN; 
oriented_spindle_stop:      OPTIONAL direction; 
its_process_model:          OPTIONAL process_model_list; 
other_functions     :       SET [0:?] OF property_parameter; 
END_ENTITY; 
 
ENTITY process_model_list; (* m1 *) 
its_list: LIST [1:?] OF process_model; 
END_ENTITY; 
 
ENTITY process_model; (* m1 *) 
ini_data_file:  label; 
its_type:       label; 
END_ENTITY; 
 
	(* ************************************************************ *) 
	(* Milling type operation                                       *) 
	(* ************************************************************ *) 
 
ENTITY milling_type_operation (* m0 *) 
ABSTRACT SUPERTYPE OF (ONEOF(freeform_operation, two5D_milling_operation)) 
SUBTYPE OF (milling_machining_operation); 
approach:         OPTIONAL approach_retract_strategy; 
retract:          OPTIONAL approach_retract_strategy; 
END_ENTITY; 
 
	(* ************************************************************ *) 
	(* approach retract strategy                                    *) 
	(* ************************************************************ *) 
 
ENTITY approach_retract_strategy (* m1 *) 
ABSTRACT SUPERTYPE OF (ONEOF (plunge_strategy, air_strategy, along_path)); 
tool_orientation: OPTIONAL direction; 
END_ENTITY; 
 
ENTITY plunge_strategy (* m1 *) 
ABSTRACT SUPERTYPE OF (ONEOF (plunge_toolaxis, plunge_ramp, plunge_helix, 
plunge_zigzag)) 
SUBTYPE OF (approach_retract_strategy); 
END_ENTITY; 
 
ENTITY plunge_toolaxis (* m1 *) 
SUBTYPE OF (plunge_strategy); 
END_ENTITY; 
 
ENTITY plunge_ramp (* m1 *) 
SUBTYPE OF (plunge_strategy); 
angle: plane_angle_measure; 
END_ENTITY; 
 
ENTITY plunge_helix (* m1 *) 
SUBTYPE OF (plunge_strategy); 
radius  :   length_measure; 
angle   :   plane_angle_measure; 
END_ENTITY;  
 
ENTITY plunge_zigzag (* m1 *) 
SUBTYPE OF (plunge_strategy); 
angle: plane_angle_measure; 
width: length_measure; 
END_ENTITY; 
 
ENTITY air_strategy (* m1 *) 
ABSTRACT SUPERTYPE OF (ONEOF (ap_retract_angle, ap_retract_tangent)) 
SUBTYPE OF (approach_retract_strategy); 
END_ENTITY; 
 
ENTITY ap_retract_angle (* m1 *) 
SUBTYPE OF (air_strategy); 
angle:         plane_angle_measure; 
travel_length: length_measure; 
END_ENTITY; 
 
ENTITY ap_retract_tangent (* m1 *) 
SUBTYPE OF (air_strategy); 
radius: length_measure; 
END_ENTITY; 
 
ENTITY along_path (* m1 *) 
SUBTYPE OF (approach_retract_strategy); 
path: toolpath_list; 
END_ENTITY; 
 
	(* ************************************************************ *) 
	(* Freeform operation                                           *) 
	(* ************************************************************ *) 
 
ENTITY freeform_operation (* m0 *) 
SUBTYPE OF (milling_type_operation); 
its_machining_strategy: OPTIONAL freeform_strategy; 
END_ENTITY; 
 
	(* ************************************************************ *) 
	(* Freeform strategy                                            *) 
	(* ************************************************************ *) 
 
ENTITY freeform_strategy (* m1 *) 
ABSTRACT SUPERTYPE OF (ONEOF(uv_strategy, plane_cc_strategy, 
plane_cl_strategy, leading_line_strategy)); 
pathmode:               pathmode_type; 
cutmode:                cutmode_type; 
its_milling_tolerances: tolerances; 
stepover:               OPTIONAL length_measure; 
END_ENTITY; 
 
TYPE pathmode_type = ENUMERATION OF( 
forward, 
zigzag 
); 
END_TYPE; 
 
TYPE cutmode_type = ENUMERATION OF( 
climb, 
conventional 
); 
END_TYPE; 
 
ENTITY tolerances; (* m1 *) 
chordal_tolerance : length_measure; 
scallop_height    : length_measure; 
END_ENTITY; 
 
ENTITY uv_strategy (* m1 *) 
SUBTYPE OF (freeform_strategy); 
forward_direction:      direction; 
sideward_direction:     direction; 
END_ENTITY; 
 
ENTITY plane_cc_strategy (* m1 *) 
SUBTYPE OF (freeform_strategy); 
its_plane_normal: direction; 
END_ENTITY; 
 
ENTITY plane_cl_strategy (* m1 *) 
SUBTYPE OF (freeform_strategy); 
its_plane_normal: direction; 
END_ENTITY; 
 
ENTITY leading_line_strategy (* m1 *) 
SUBTYPE OF (freeform_strategy); 
its_line : bounded_curve; 
END_ENTITY; 
 
	(* ************************************************************ *) 
	(* two5D milling operation                                      *) 
	(* ************************************************************ *) 
 
ENTITY two5D_milling_operation (* m0 *) 
ABSTRACT SUPERTYPE OF (ONEOF(plane_milling, side_milling, 
bottom_and_side_milling)) 
SUBTYPE OF (milling_type_operation); 
its_machining_strategy: OPTIONAL two5D_milling_strategy; 
END_ENTITY; 
 
	(* ************************************************************ *) 
	(* two5D_milling_strategy                                       *) 
	(* ************************************************************ *) 
 
ENTITY two5D_milling_strategy (* m1 *) 
ABSTRACT SUPERTYPE OF (ONEOF (unidirectional_milling, bidirectional_milling, 
contour_parallel, bidirectional_contour, contour_bidirectional, 
contour_spiral, center_milling, explicit_strategy)); 
overlap:                OPTIONAL positive_ratio_measure; 
allow_multiple_passes:  OPTIONAL BOOLEAN; 
END_ENTITY; 
 
ENTITY unidirectional_milling (* m1 *) 
SUBTYPE OF (two5D_milling_strategy); 
feed_direction:        OPTIONAL direction; 
cutmode:                OPTIONAL cutmode_type; 
END_ENTITY; 
 
ENTITY bidirectional_milling (* m1 *) 
SUBTYPE OF (two5D_milling_strategy); 
feed_direction:        OPTIONAL direction; 
stepover_direction:       OPTIONAL left_or_right; 
its_stroke_connection_strategy: OPTIONAL stroke_connection_strategy; 
END_ENTITY; 
 
TYPE left_or_right = ENUMERATION OF (left, right); 
END_TYPE; 
 
TYPE stroke_connection_strategy = ENUMERATION OF  
(straghtline, lift_shift_plunge, degouge, loop_back); 
END_TYPE; 
 
ENTITY contour_parallel (* m1 *) 
SUBTYPE OF (two5D_milling_strategy); 
rotation_direction:     OPTIONAL rot_direction; 
cutmode:                OPTIONAL cutmode_type; 
END_ENTITY; 
 
ENTITY bidirectional_contour (* m1 *) 
SUBTYPE OF (two5D_milling_strategy); 
feed_direction:        OPTIONAL direction; 
stepover_direction:       OPTIONAL left_or_right; 
rotation_direction:     OPTIONAL rot_direction; 
spiral_cutmode:         OPTIONAL cutmode_type; 
END_ENTITY; 
 
ENTITY contour_bidirectional (* m1 *) 
SUBTYPE OF (two5D_milling_strategy); 
feed_direction:        OPTIONAL direction; 
stepover_direction:       OPTIONAL left_or_right; 
rotation_direction:     OPTIONAL rot_direction; 
spiral_cutmode:         OPTIONAL cutmode_type; 
END_ENTITY; 
 
ENTITY contour_spiral (* m1 *) 
SUBTYPE OF (two5D_milling_strategy); 
rotation_direction:     OPTIONAL rot_direction; 
cutmode:                OPTIONAL cutmode_type; 
END_ENTITY; 
 
ENTITY center_milling (* m1 *) 
SUBTYPE OF (two5D_milling_strategy); 
END_ENTITY; 
 
ENTITY explicit_strategy (* m1 *) 
SUBTYPE OF (two5D_milling_strategy); 
END_ENTITY; 
 
	(* ************************************************************ *) 
	(* plane_milling, side_milling, bottom_and_side_milling         *) 
	(* ************************************************************ *) 
 
ENTITY plane_milling (* m0 *) 
ABSTRACT SUPERTYPE OF (ONEOF(plane_rough_milling, plane_finish_milling)) 
SUBTYPE OF (two5D_milling_operation); 
axial_cutting_depth:        OPTIONAL length_measure;  
allowance_bottom:           OPTIONAL length_measure; 
END_ENTITY; 
 
ENTITY plane_rough_milling (* m0 *) 
SUBTYPE OF (plane_milling); 
WHERE 
WR1: EXISTS(SELF.allowance_bottom) AND (SELF.allowance_bottom>=0.0); 
END_ENTITY; 
 
ENTITY plane_finish_milling (* m0 *) 
SUBTYPE OF (plane_milling); 
END_ENTITY; 
 
ENTITY side_milling (* m0 *) 
ABSTRACT SUPERTYPE OF (ONEOF(side_rough_milling, side_finish_milling)) 
SUBTYPE OF (two5D_milling_operation); 
axial_cutting_depth:    OPTIONAL length_measure; 
radial_cutting_depth:   OPTIONAL length_measure; 
allowance_side:         OPTIONAL length_measure; 
END_ENTITY; 
 
ENTITY side_rough_milling (* m0 *) 
SUBTYPE OF (side_milling); 
WHERE 
WR1: EXISTS(SELF.allowance_side) AND (SELF.allowance_side>=0.0); 
END_ENTITY; 
 
ENTITY side_finish_milling (* m0 *) 
SUBTYPE OF (side_milling); 
END_ENTITY; 
 
ENTITY bottom_and_side_milling (* m0 *) 
ABSTRACT SUPERTYPE OF (ONEOF(bottom_and_side_rough_milling, 
bottom_and_side_finish_milling)) 
SUBTYPE OF (two5D_milling_operation); 
axial_cutting_depth:    OPTIONAL length_measure; 
radial_cutting_depth:   OPTIONAL length_measure; 
allowance_side:         OPTIONAL length_measure; 
allowance_bottom:       OPTIONAL length_measure;END_ENTITY; 
 
ENTITY bottom_and_side_rough_milling (* m0 *) 
SUBTYPE OF (bottom_and_side_milling); 
WHERE 
  WR1: EXISTS(SELF.allowance_side) AND (SELF.allowance_side>=0.0); 
  WR2: EXISTS(SELF.allowance_bottom) AND (SELF.allowance_bottom>=0.0); 
END_ENTITY; 
 
ENTITY bottom_and_side_finish_milling (* m0 *) 
SUBTYPE OF (bottom_and_side_milling); 
END_ENTITY; 
 
	(* ************************************************************ *) 
	(* Drilling type operation                                      *) 
	(* ************************************************************ *) 
 
ENTITY drilling_type_operation (* m0 *) 
ABSTRACT SUPERTYPE OF (ONEOF(drilling_operation, boring_operation, 
back_boring, tapping, thread_drilling)) 
SUBTYPE OF (milling_machining_operation); 
cutting_depth:              OPTIONAL length_measure; 
previous_diameter:          OPTIONAL length_measure; 
dwell_time_bottom:          OPTIONAL time_measure; 
feed_on_retract:            OPTIONAL positive_ratio_measure; 
its_machining_strategy:     OPTIONAL drilling_type_strategy; 
END_ENTITY; 
 
	(* ************************************************************ *) 
	(* Drilling type strategy                                       *) 
	(* ************************************************************ *) 
 
ENTITY drilling_type_strategy; (* m0 *) 
reduced_cut_at_start:       OPTIONAL positive_ratio_measure; 
reduced_feed_at_start:      OPTIONAL positive_ratio_measure; 
depth_of_start:             OPTIONAL length_measure; 
reduced_cut_at_end:         OPTIONAL positive_ratio_measure; 
reduced_feed_at_end:        OPTIONAL positive_ratio_measure; 
depth_of_end:               OPTIONAL length_measure; 
WHERE 
WR1: EXISTS(depth_of_start) OR NOT (EXISTS(reduced_cut_at_start) OR 
EXISTS(reduced_feed_at_start)); 
WR2: EXISTS(depth_of_end) OR NOT (EXISTS(reduced_cut_at_end) OR 
EXISTS(reduced_feed_at_end)); 
END_ENTITY; 
 
	(* ************************************************************ *) 
	(* Drilling operation                                           *) 
	(* ************************************************************ *) 
 
ENTITY drilling_operation (* m0 *) 
ABSTRACT SUPERTYPE OF (ONEOF(drilling, center_drilling, counter_sinking, 
multistep_drilling)) 
SUBTYPE OF (drilling_type_operation); 
END_ENTITY; 
 
ENTITY drilling  (* m0 *) 
SUBTYPE OF (drilling_operation); 
END_ENTITY; 
 
ENTITY center_drilling (* m0 *) 
SUBTYPE OF (drilling_operation); 
END_ENTITY; 
 
ENTITY counter_sinking (* m0 *) 
SUBTYPE OF (drilling_operation); 
END_ENTITY; 
 
ENTITY multistep_drilling (* m0 *) 
SUBTYPE OF (drilling_operation); 
retract_distance:       length_measure; 
first_depth:            length_measure; 
depth_of_step:          length_measure; 
dwell_time_step:        OPTIONAL time_measure; 
END_ENTITY; 
 
	(* ************************************************************ *) 
	(* Boring operation                                             *) 
	(* ************************************************************ *) 
 
ENTITY boring_operation (* m0 *) 
ABSTRACT SUPERTYPE OF (ONEOF(boring, reaming)) 
SUBTYPE OF (drilling_type_operation); 
spindle_stop_at_bottom:         BOOLEAN; 
depth_of_testcut:               OPTIONAL length_measure; 
waiting_position:               OPTIONAL cartesian_point; 
END_ENTITY; 
 
 ENTITY boring  (* m0 *) 
SUBTYPE OF (boring_operation); 
END_ENTITY; 
 
ENTITY reaming  (* m0 *) 
 SUBTYPE OF (boring_operation); 
END_ENTITY; 
 
ENTITY back_boring (* m0 *) 
SUBTYPE OF (drilling_type_operation); 
WHERE 
 WR1:  EXISTS(SELF.its_machine_functions.oriented_spindle_stop); 
END_ENTITY; 
 
ENTITY tapping  (* m0 *) 
SUBTYPE OF (drilling_type_operation); 
compensation_chuck:             BOOLEAN; 
END_ENTITY; 
 
ENTITY thread_drilling (* m0 *) 
SUBTYPE OF (drilling_type_operation); 
helical_movement_on_forward:    BOOLEAN; 
END_ENTITY; 

END_SCHEMA;