/* Model of the ROSACE case study v1 in Giotto. Giotto is a programming language for embedded control system. The Giotto Toolkit has been developed at the University of California, Berkeley (http://embedded.eecs.berkeley.edu/giotto/). The ROSACE case study is proposed by the french aerospace lab ONERA (http://sites.onera.fr/schedmcore/ROSACE). Author: P.-E. Hladik (pehladik@laas.fr) Date: November 2015 */ /********************************************/ /*************** Sensor ports ***************/ /********************************************/ sensor double sensor_vac uses getSensorVAC; double sensor_hc uses getSensorHC; /*********************************************/ /*************** Actuator port ***************/ /*********************************************/ /*************************************************/ /*************** Task output ports ***************/ /*************************************************/ output double output_h_filter_hf := InitOuputHF; double output_az_filter_azf := InitOuputAZF; double output_vz_filter_vzf := InitOuputVZF; double output_q_filter_qf := InitOuputQF; double output_va_filter_vaf := InitOuputVAF; double output_va_control_delta_thc := InitOutputVAControl; double output_altitude_hold_vzc := InitOuputVZC; double output_vz_control_delta_ec := InitOutputVZControl; double output_engine_T := InitOutputEngineT; double output_elevator_delta_e := InitOutputElevatorDeltaE; AircraftDynamicsOutput output_aircraft_dynamics_values := InitOutputAircraftValues; /*************************************************/ /*************** Task declarations ***************/ /*************************************************/ /*************** h_filter task ***************/ task h_filter(double input_h_filter_h) output (output_h_filter_hf) state () { schedule h_filter_100(input_h_filter_h, output_h_filter_hf) } /*************** az_filter task ***************/ task az_filter(double input_az) output (output_az_filter_azf) state () { schedule az_filter_100(input_az, output_az_filter_azf) } /*************** vz_filter task ***************/ task vz_filter(double input_vz) output (output_vz_filter_vzf) state () { schedule vz_filter_100(input_vz, output_vz_filter_vzf) } /*************** q_filter task ***************/ task q_filter(double input_q) output (output_q_filter_qf) state () { schedule q_filter_100(input_q, output_q_filter_qf) } /*************** va_filter task ***************/ task va_filter(double input_va) output (output_va_filter_vaf) state () { schedule va_filter_100(input_va, output_va_filter_vaf) } /*************** va_control task ***************/ task va_control(VaControlInput input_va_control) output (output_va_control_delta_thc) state () { schedule va_control_50(input_va_control, output_va_control_delta_thc) } /*************** altitude_hold task ***************/ task altitude_hold(AltitudeHoldInput input_altitude_hold) output (output_altitude_hold_vzc) state () { schedule altitude_hold_50(input_altitude_hold, output_altitude_hold_vzc) } /*************** vz_control task ***************/ task vz_control(VzControlInput input_vz_control) output (output_vz_control_delta_ec) state () { schedule vz_control_200(input_vz_control, output_vz_control_delta_ec) } /*************** engine task ***************/ task engine(double input_engine_delta_thc) output (output_engine_T) state () { schedule engine(input_engine_delta_thc, output_engine_T) } /*************** elevator task ***************/ task elevator(double input_elevator_delta_ec) output (output_elevator_delta_e) state () { schedule elevator(input_elevator_delta_ec, output_elevator_delta_e) } /*************** aircraft_dynamics task ***************/ task aircraft_dynamics(AircraftDynamicsInput input_aircraft_dynamics) output (output_aircraft_dynamics_values) state () { schedule aircraft_dynamics(input_aircraft_dynamics, output_aircraft_dynamics_values) } /***************************************************/ /*************** Driver declarations ***************/ /***************************************************/ /*************** Input driver for h_filter task ***************/ driver driverInputHFilter (output_aircraft_dynamics_values) output (double input_h_filter_h) { if c_true() then cp_h(output_aircraft_dynamics_values, input_h_filter_h) } /*************** Input driver for az_filter task ***************/ driver driverInputAZFilter (output_aircraft_dynamics_values) output (double input_az) { if c_true() then cp_az(output_aircraft_dynamics_values, input_az) } /*************** Input driver for vz_filter task ***************/ driver driverInputVZFilter (output_aircraft_dynamics_values) output (double input_vz) { if c_true() then cp_vz(output_aircraft_dynamics_values, input_vz) } /*************** Input driver for q_filter task ***************/ driver driverInputQFilter (output_aircraft_dynamics_values) output (double input_q) { if c_true() then cp_q(output_aircraft_dynamics_values, input_q) } /*************** Input driver for va_filter task ***************/ driver driverInputVAFilter (output_aircraft_dynamics_values) output (double input_va) { if c_true() then cp_va(output_aircraft_dynamics_values, input_va) } /*************** Input driver for va_control task ***************/ driver driverInputVAControl (output_vz_filter_vzf, output_va_filter_vaf, output_q_filter_qf, sensor_vac) output (VaControlInput input_va_control) { if c_true() then cp_values_to_VaControlInput(output_vz_filter_vzf, output_va_filter_vaf, output_q_filter_qf, sensor_vac, input_va_control) } /*************** Input driver for altitude_hold task ***************/ // Input driver for altitude_hold task driver driverInputAltitudeHold (output_h_filter_hf, sensor_hc) output (AltitudeHoldInput input_altitude_hold) { if c_true() then cp_values_to_AltitudeHoldInput(output_h_filter_hf,sensor_hc, input_altitude_hold) } /*************** Input driver for vz_control task ***************/ // Input driver for vz_control task driver driverInputVZControl (output_altitude_hold_vzc, output_az_filter_azf, output_vz_filter_vzf, output_q_filter_qf) output (VzControlInput input_vz_control) { if c_true() then cp_values_to_VzControlInput(output_altitude_hold_vzc, output_az_filter_azf, output_vz_filter_vzf, output_q_filter_qf, input_vz_control) } /*************** Input driver for engine task ***************/ // Input driver for engine task driver driverInputEngine (output_va_control_delta_thc) output (double input_engine_delta_thc) { if c_true() then cp_double_to_double(output_va_control_delta_thc, input_engine_delta_thc) } /*************** Input driver for elevator task ***************/ // Input driver for elevator task driver driverInputElevator (output_vz_control_delta_ec) output (double input_elevator_delta_ec) { if c_true() then cp_double_to_double(output_vz_control_delta_ec, input_elevator_delta_ec) } /*************** Input driver for va_filter task ***************/ // Input driver for aircarft_dynamics task driver driverInputAircraftDynamics (output_engine_T, output_elevator_delta_e) output (AircraftDynamicsInput input_aircraft_dynamics) { if c_true() then cp_values_to_AircraftDynamicsInput(output_engine_T, output_elevator_delta_e, input_aircraft_dynamics) } start normal { mode normal() period 200 { taskfreq 2 do h_filter(driverInputHFilter); taskfreq 2 do az_filter(driverInputAZFilter); taskfreq 2 do vz_filter(driverInputVZFilter); taskfreq 2 do va_filter(driverInputVAFilter); taskfreq 2 do q_filter(driverInputQFilter); taskfreq 1 do va_control(driverInputVAControl); taskfreq 1 do altitude_hold(driverInputAltitudeHold); taskfreq 1 do vz_control(driverInputVZControl); taskfreq 4 do engine(driverInputEngine); taskfreq 4 do elevator(driverInputElevator); taskfreq 4 do aircraft_dynamics(driverInputAircraftDynamics); } }