HTC
Ada Source for ControlH Operator MAIN


-- link to the built-in ControlH data types 
with controlh_types; use controlh_types;

-- link to the operator and process context types 
with ch_context; use ch_context;

-- derived from operator main 
-- component: original 

procedure ch_op_main_1_1
  (ch_vr_output_vector : out CONTROLH_TYPES.REAL_MATRIX_TYPE;
   CONTEXT : in out ch_op_main_1_CONTEXT_TYPE;
   ch_vr_acmd : in CONTROLH_TYPES.REAL_TYPE);

-- link to the built-in ControlH data types 
with controlh_types; use controlh_types;

-- link to the operator and process context types 
with ch_context; use ch_context;

-- link to the services of the MetaH kernel 
with KERNEL;

-- links to other hierarchical operators 
with ch_op_integral_scaled_1_1;
with ch_op_actuator_1_1;
with ch_op_model_1_1;

-- links to global variables blocks 
with ch_gv_var;


-- Original textual ControlH specification: 
-- MODULE main IS 
--   INPUTS  : real(1, 1) : acmd; 
--   OUTPUTS : real(1, 10) : output_vector; 
-- BEGIN 
--   real(1, 1) : deltac; 
--   real(1, 1) : alpha; 
--   real(1, 1) : q; 
--   real(1, 1) : gamma; 
--   real(1, 1) : theta; 
--   GCH_tmp0 = alpha * rtod; 
--   GCH_tmp1 = q * rtod; 
--   GCH_tmp2 = GCH_tmp8 * rtod; 
--   GCH_tmp3 = deltac * rtod; 
--   GCH_tmp4 = gamma * rtod; 
--   GCH_tmp5 = theta * rtod; 
--   first = GCH_tmp0; 
--   second = GCH_tmp1; 
--   third = GCH_tmp2; 
--   fourth = GCH_tmp3; 
--   sixth = GCH_tmp5; 
--   seventh = var.ameas; 
--   fifth = GCH_tmp4; 
--   eighth = acmd; 
--   nineth = GCH_tmp6; 
--   sim_time = GCH_tmp7; 
--   output_vector = [first, second, third, fourth, fifth, sixth, 
--     seventh, eighth, nineth, sim_time]; 
--   deltac = slow.controller(acmd, q); 
--   GCH_tmp6 = -var.ameas + acmd; 
--   GCH_tmp8 = fast.actuator(deltac); 
--   (alpha, q, gamma, theta) = fast.model(GCH_tmp8); 
--   GCH_tmp7 = integral_scaled(1.0); 
--   rtod = 57.29; 
-- END main; 

-- derived from operator main 
-- component: original 

procedure ch_op_main_1_1
  (ch_vr_output_vector : out CONTROLH_TYPES.REAL_MATRIX_TYPE;
   CONTEXT : in out ch_op_main_1_CONTEXT_TYPE;
   ch_vr_acmd : in CONTROLH_TYPES.REAL_TYPE)
 is

   -- declarations of temporary internal variables 
   ch_tmp_ch_tmp_var_ch_vr_ameas : CONTROLH_TYPES.REAL_TYPE;
   ch_tmp_2 : CONTROLH_TYPES.REAL_TYPE;
   ch_vr_alpha : CONTROLH_TYPES.REAL_TYPE;
   ch_vr_eighth : CONTROLH_TYPES.REAL_TYPE;
   ch_vr_fifth : CONTROLH_TYPES.REAL_TYPE;
   ch_vr_first : CONTROLH_TYPES.REAL_TYPE;
   ch_vr_fourth : CONTROLH_TYPES.REAL_TYPE;
   ch_vr_gamma : CONTROLH_TYPES.REAL_TYPE;
   ch_vr_gch_tmp0 : CONTROLH_TYPES.REAL_TYPE;
   ch_vr_gch_tmp1 : CONTROLH_TYPES.REAL_TYPE;
   ch_vr_gch_tmp2 : CONTROLH_TYPES.REAL_TYPE;
   ch_vr_gch_tmp3 : CONTROLH_TYPES.REAL_TYPE;
   ch_vr_gch_tmp4 : CONTROLH_TYPES.REAL_TYPE;
   ch_vr_gch_tmp5 : CONTROLH_TYPES.REAL_TYPE;
   ch_vr_gch_tmp6 : CONTROLH_TYPES.REAL_TYPE;
   ch_vr_gch_tmp7 : CONTROLH_TYPES.REAL_TYPE;
   ch_vr_gch_tmp8 : CONTROLH_TYPES.REAL_TYPE;
   ch_vr_nineth : CONTROLH_TYPES.REAL_TYPE;
   ch_vr_second : CONTROLH_TYPES.REAL_TYPE;
   ch_vr_seventh : CONTROLH_TYPES.REAL_TYPE;
   ch_vr_sim_time : CONTROLH_TYPES.REAL_TYPE;
   ch_vr_sixth : CONTROLH_TYPES.REAL_TYPE;
   ch_vr_theta : CONTROLH_TYPES.REAL_TYPE;
   ch_vr_third : CONTROLH_TYPES.REAL_TYPE;

begin

   -- copying formal inputs to context 
   CONTEXT.ch_vr_acmd.VALUE := ch_vr_acmd;

   KERNEL.LOCK_SEMAPHORE(KERNEL.ch_gv_var);
   ch_tmp_var_ch_vr_ameas := ch_gv_var.ch_vr_ameas;
   KERNEL.UNLOCK_SEMAPHORE(KERNEL.ch_gv_var);
   ch_vr_seventh := ch_tmp_var_ch_vr_ameas;
   ch_vr_eighth := CONTEXT.ch_vr_acmd.VALUE;
   KERNEL.LOCK_SEMAPHORE(KERNEL.ch_gv_var);
   ch_tmp_var_ch_vr_ameas := ch_gv_var.ch_vr_ameas;
   KERNEL.UNLOCK_SEMAPHORE(KERNEL.ch_gv_var);
   ch_tmp_2 := -(ch_tmp_var_ch_vr_ameas);
   ch_vr_gch_tmp6 := ch_tmp_2 + CONTEXT.ch_vr_acmd.VALUE;
   ch_op_integral_scaled_1_1(ch_vr_gch_tmp7, CONTEXT.ch_op_integral_scaled_1, 1.0);
   ch_vr_nineth := ch_vr_gch_tmp6;
   ch_vr_sim_time := ch_vr_gch_tmp7;
   ch_vr_gch_tmp3 := (CONTEXT.ch_vr_deltac.VALUE * 5.72900000000000E+01);
   ch_vr_fourth := ch_vr_gch_tmp3;
   ch_op_actuator_1_1(ch_vr_gch_tmp8, CONTEXT.ch_op_actuator_1, CONTEXT.ch_vr_deltac.VALUE);
   ch_op_model_1_1(ch_vr_alpha, CONTEXT.ch_vr_q.VALUE, ch_vr_gamma, ch_vr_theta, CONTEXT.ch_op_model_1, ch_vr_gch_tmp8);
   ch_vr_gch_tmp0 := (ch_vr_alpha * 5.72900000000000E+01);
   ch_vr_gch_tmp1 := (CONTEXT.ch_vr_q.VALUE * 5.72900000000000E+01);
   ch_vr_gch_tmp2 := (ch_vr_gch_tmp8 * 5.72900000000000E+01);
   ch_vr_gch_tmp4 := (ch_vr_gamma * 5.72900000000000E+01);
   ch_vr_gch_tmp5 := (ch_vr_theta * 5.72900000000000E+01);
   ch_vr_first := ch_vr_gch_tmp0;
   ch_vr_second := ch_vr_gch_tmp1;
   ch_vr_third := ch_vr_gch_tmp2;
   ch_vr_sixth := ch_vr_gch_tmp5;
   ch_vr_fifth := ch_vr_gch_tmp4;
   ch_vr_output_vector(1,1) := ch_vr_first;
   ch_vr_output_vector(1,2) := ch_vr_second;
   ch_vr_output_vector(1,3) := ch_vr_third;
   ch_vr_output_vector(1,4) := ch_vr_fourth;
   ch_vr_output_vector(1,5) := ch_vr_fifth;
   ch_vr_output_vector(1,6) := ch_vr_sixth;
   ch_vr_output_vector(1,7) := ch_vr_seventh;
   ch_vr_output_vector(1,8) := ch_vr_eighth;
   ch_vr_output_vector(1,9) := ch_vr_nineth;
   ch_vr_output_vector(1,10) := ch_vr_sim_time;

end ch_op_main_1_1;
DSSA for GN&C Missile Pitch Axis Example Page