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