download file
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE domainModel SYSTEM "model.dtd">
<domainModel name="satellite2">
<documentation>This is a hierarchical version of the IPC satellite domain.</documentation>
<sortDefinition name="instrument"/>
<sortDefinition name="satellite"/>
<sortDefinition name="mode"/>
<sortDefinition name="calib_direction">
<documentation>
These directions are used for instrument calibration only.
</documentation>
</sortDefinition>
<sortDefinition name="image_direction"/>
<sortDefinition name="direction" type="abstract">
<documentation>
Directions are all kinds of phenomenons and targets to which the satellite
and its instruments can be directed.
</documentation>
<subSortStatement subsort="calib_direction"/>
<subSortStatement subsort="image_direction"/>
</sortDefinition>
<relationDeclaration name="on_board" type="rigid">
<sortExpression name="instrument"/>
<sortExpression name="satellite"/>
</relationDeclaration>
<relationDeclaration name="supports" type="rigid">
<sortExpression name="instrument"/>
<sortExpression name="mode"/>
</relationDeclaration>
<relationDeclaration name="pointing" type="flexible">
<sortExpression name="satellite"/>
<sortExpression name="direction"/>
</relationDeclaration>
<relationDeclaration name="power_avail" type="flexible">
<sortExpression name="satellite"/>
</relationDeclaration>
<relationDeclaration name="power_on" type="flexible">
<sortExpression name="instrument"/>
</relationDeclaration>
<relationDeclaration name="calibrated" type="flexible">
<sortExpression name="instrument"/>
</relationDeclaration>
<relationDeclaration name="have_image" type="flexible">
<sortExpression name="image_direction"/>
<sortExpression name="mode"/>
</relationDeclaration>
<relationDeclaration name="calibration_target" type="rigid">
<documentation>
This relation models targets that are used for calibrating a specific instrument.
</documentation>
<sortExpression name="instrument"/>
<sortExpression name="calib_direction"/>
</relationDeclaration>
<taskDeclaration name="turn_to" type="primitive">
<documentation>
The parameters of turning are:
1. the satellite that is turning
2. the direction the satellite is pointing to after turning
3. the direction the satellite is pointing to before turning
</documentation>
<varDeclaration name="t_s" sort="satellite"/>
<varDeclaration name="t_d_new" sort="direction"/>
<varDeclaration name="t_d_prev" sort="direction"/>
<atomic name="pointing">
<variable name="t_s"/>
<variable name="t_d_prev"/>
</atomic>
<and>
<atomic name="pointing">
<variable name="t_s"/>
<variable name="t_d_new"/>
</atomic>
<not>
<atomic name="pointing">
<variable name="t_s"/>
<variable name="t_d_prev"/>
</atomic>
</not>
</and>
</taskDeclaration>
<taskDeclaration name="switch_on" type="primitive">
<documentation>
This action turns on the power supply for a satellite's instrument.
Please note that switching on an on-board unit de-calibrates it and
allocates all energy resources on the satellite.
</documentation>
<varDeclaration name="so_i" sort="instrument"/>
<varDeclaration name="so_s" sort="satellite"/>
<and>
<atomic name="on_board">
<variable name="so_i"/>
<variable name="so_s"/>
</atomic>
<atomic name="power_avail">
<variable name="so_s"/>
</atomic>
</and>
<and>
<atomic name="power_on">
<variable name="so_i"/>
</atomic>
<not>
<atomic name="calibrated">
<variable name="so_i"/>
</atomic>
</not>
<not>
<atomic name="power_avail">
<variable name="so_s"/>
</atomic>
</not>
</and>
</taskDeclaration>
<taskDeclaration name="switch_off" type="primitive">
<documentation>
This action turns off the power supply for a satellite's instrument. Switching off an
on-board unit makes all energy resources on the satellite available again.
</documentation>
<varDeclaration name="sof_i" sort="instrument"/>
<varDeclaration name="sof_s" sort="satellite"/>
<and>
<atomic name="on_board">
<variable name="sof_i"/>
<variable name="sof_s"/>
</atomic>
<atomic name="power_on">
<variable name="sof_i"/>
</atomic>
</and>
<and>
<not>
<atomic name="power_on">
<variable name="sof_i"/>
</atomic>
</not>
<atomic name="power_avail">
<variable name="sof_s"/>
</atomic>
</and>
</taskDeclaration>
<taskDeclaration name="calibrate" type="primitive">
<varDeclaration name="c_s" sort="satellite"/>
<varDeclaration name="c_i" sort="instrument"/>
<varDeclaration name="c_d" sort="calib_direction"/>
<and>
<atomic name="on_board">
<variable name="c_i"/>
<variable name="c_s"/>
</atomic>
<atomic name="calibration_target">
<variable name="c_i"/>
<variable name="c_d"/>
</atomic>
<atomic name="pointing">
<variable name="c_s"/>
<variable name="c_d"/>
</atomic>
<atomic name="power_on">
<variable name="c_i"/>
</atomic>
</and>
<and>
<atomic name="calibrated">
<variable name="c_i"/>
</atomic>
</and>
</taskDeclaration>
<taskDeclaration name="take_image" type="primitive">
<varDeclaration name="ti_s" sort="satellite"/>
<varDeclaration name="ti_d" sort="image_direction"/>
<varDeclaration name="ti_i" sort="instrument"/>
<varDeclaration name="ti_m" sort="mode"/>
<and>
<atomic name="calibrated">
<variable name="ti_i"/>
</atomic>
<atomic name="pointing">
<variable name="ti_s"/>
<variable name="ti_d"/>
</atomic>
<atomic name="on_board">
<variable name="ti_i"/>
<variable name="ti_s"/>
</atomic>
<atomic name="power_on">
<variable name="ti_i"/>
</atomic>
<atomic name="supports">
<variable name="ti_i"/>
<variable name="ti_m"/>
</atomic>
</and>
<atomic name="have_image">
<variable name="ti_d"/>
<variable name="ti_m"/>
</atomic>
</taskDeclaration>
<taskDeclaration name="do_observation" type="complex">
<varDeclaration name="do_d" sort="image_direction"/>
<varDeclaration name="do_m" sort="mode"/>
<truthValue name="true"/>
<atomic name="have_image">
<variable name="do_d"/>
<variable name="do_m"/>
</atomic>
</taskDeclaration>
<taskDeclaration name="activate_instrument" type="complex">
<documentation>
Activating an instrument optionally includes turning off other
instruments on the same satellite in order to provide energy,
followed by turning on the instrument.
</documentation>
<varDeclaration name="ai_s" sort="satellite"/>
<varDeclaration name="ai_i" sort="instrument"/>
<atomic name="on_board">
<variable name="ai_i"/>
<variable name="ai_s"/>
</atomic>
<atomic name="power_on">
<variable name="ai_i"/>
</atomic>
</taskDeclaration>
<taskDeclaration name="auto_calibrate" type="complex">
<documentation>
Manages the calibration of the given instrument. This may include turning
the satellite's instrument to the calibration target first.
</documentation>
<varDeclaration name="ac_s" sort="satellite"/>
<varDeclaration name="ac_i" sort="instrument"/>
<and>
<atomic name="on_board">
<variable name="ac_i"/>
<variable name="ac_s"/>
</atomic>
<atomic name="power_on">
<variable name="ac_i"/>
</atomic>
</and>
<atomic name="calibrated">
<variable name="ac_i"/>
</atomic>
</taskDeclaration>
<methodDeclaration name="method_do_observation_ai_tt_ti" taskRef="do_observation">
<documentation>
Performs an observation task in three steps: it activates the instrument
(must support the specified mode), then turns the satellite into desired image
direction and finally takes the image.
Doing an observation depends on two parameters: the phenomenon to be observed
and the mode in which the image of the phenomenon is to be taken.
Regarding the ordering between instrument activation and the turning operation:
Instrument activation is a complex task, a causal link will therefore not imply
an ordering immediately.
Regarding the sort restriction: This constraint is not really necessary, because
the value restriction already implies the co-typing. We added this for plausibility.
</documentation>
<varDeclaration name="mdoatt_d" sort="image_direction"/>
<varDeclaration name="mdoatt_m" sort="mode"/>
<taskNode name="mdoatt_activate_instrument" taskRef="activate_instrument">
<varDeclaration name="mdoatt_ai_s" sort="satellite"/>
<varDeclaration name="mdoatt_ai_i" sort="instrument"/>
</taskNode>
<taskNode name="mdoatt_turn_to" taskRef="turn_to">
<varDeclaration name="mdoatt_t_s" sort="satellite"/>
<varDeclaration name="mdoatt_t_d_new" sort="direction"/>
<varDeclaration name="mdoatt_t_d_prev" sort="direction"/>
</taskNode>
<taskNode name="mdoatt_take_image" taskRef="take_image">
<varDeclaration name="mdoatt_ti_s" sort="satellite"/>
<varDeclaration name="mdoatt_ti_d" sort="image_direction"/>
<varDeclaration name="mdoatt_ti_i" sort="instrument"/>
<varDeclaration name="mdoatt_ti_m" sort="mode"/>
</taskNode>
<orderingConstraint predecessor="mdoatt_activate_instrument" successor="mdoatt_turn_to"/>
<orderingConstraint predecessor="mdoatt_turn_to" successor="mdoatt_take_image"/>
<valueRestriction type="eq" variable="mdoatt_d">
<variable name="mdoatt_t_d_new"/>
</valueRestriction>
<valueRestriction type="eq" variable="mdoatt_d">
<variable name="mdoatt_ti_d"/>
</valueRestriction>
<valueRestriction type="eq" variable="mdoatt_m">
<variable name="mdoatt_ti_m"/>
</valueRestriction>
<sortRestriction type="eq" variable="mdoatt_t_d_new" sort="image_direction"/>
<valueRestriction type="eq" variable="mdoatt_ai_s">
<variable name="mdoatt_ti_s"/>
</valueRestriction>
<valueRestriction type="eq" variable="mdoatt_ai_s">
<variable name="mdoatt_t_s"/>
</valueRestriction>
<valueRestriction type="eq" variable="mdoatt_ai_i">
<variable name="mdoatt_ti_i"/>
</valueRestriction>
<valueRestriction type="neq" variable="mdoatt_t_d_new">
<variable name="mdoatt_t_d_prev"/>
</valueRestriction>
<causalLink producer="mdoatt_activate_instrument" consumer="mdoatt_take_image">
<atomic name="power_on">
<variable name="mdoatt_ai_i"/>
</atomic>
</causalLink>
<causalLink producer="mdoatt_turn_to" consumer="mdoatt_take_image">
<atomic name="pointing">
<variable name="mdoatt_t_s"/>
<variable name="mdoatt_t_d_new"/>
</atomic>
</causalLink>
</methodDeclaration>
<methodDeclaration name="method_do_observation_tt_ti" taskRef="do_observation">
<varDeclaration name="mdott_d" sort="image_direction"/>
<varDeclaration name="mdott_m" sort="mode"/>
<taskNode name="mdott_turn_to" taskRef="turn_to">
<varDeclaration name="mdott_t_s" sort="satellite"/>
<varDeclaration name="mdott_t_d_new" sort="direction"/>
<varDeclaration name="mdott_t_d_prev" sort="direction"/>
</taskNode>
<taskNode name="mdott_take_image" taskRef="take_image">
<varDeclaration name="mdott_ti_s" sort="satellite"/>
<varDeclaration name="mdott_ti_d" sort="image_direction"/>
<varDeclaration name="mdott_ti_i" sort="instrument"/>
<varDeclaration name="mdott_ti_m" sort="mode"/>
</taskNode>
<orderingConstraint predecessor="mdott_turn_to" successor="mdott_take_image"/>
<valueRestriction type="eq" variable="mdott_d">
<variable name="mdott_t_d_new"/>
</valueRestriction>
<valueRestriction type="eq" variable="mdott_d">
<variable name="mdott_ti_d"/>
</valueRestriction>
<valueRestriction type="eq" variable="mdott_m">
<variable name="mdott_ti_m"/>
</valueRestriction>
<sortRestriction type="eq" variable="mdott_t_d_new" sort="image_direction"/>
<valueRestriction type="eq" variable="mdott_ti_s">
<variable name="mdott_t_s"/>
</valueRestriction>
<valueRestriction type="neq" variable="mdott_t_d_new">
<variable name="mdott_t_d_prev"/>
</valueRestriction>
<causalLink producer="mdott_turn_to" consumer="mdott_take_image">
<atomic name="pointing">
<variable name="mdott_t_s"/>
<variable name="mdott_t_d_new"/>
</atomic>
</causalLink>
</methodDeclaration>
<methodDeclaration name="method_do_observation_ai_ti" taskRef="do_observation">
<varDeclaration name="mdoat_d" sort="image_direction"/>
<varDeclaration name="mdoat_m" sort="mode"/>
<taskNode name="mdoat_activate_instrument" taskRef="activate_instrument">
<varDeclaration name="mdoat_ai_s" sort="satellite"/>
<varDeclaration name="mdoat_ai_i" sort="instrument"/>
</taskNode>
<taskNode name="mdoat_take_image" taskRef="take_image">
<varDeclaration name="mdoat_ti_s" sort="satellite"/>
<varDeclaration name="mdoat_ti_d" sort="image_direction"/>
<varDeclaration name="mdoat_ti_i" sort="instrument"/>
<varDeclaration name="mdoat_ti_m" sort="mode"/>
</taskNode>
<orderingConstraint predecessor="mdoat_activate_instrument" successor="mdoat_take_image"/>
<valueRestriction type="eq" variable="mdoat_d">
<variable name="mdoat_ti_d"/>
</valueRestriction>
<valueRestriction type="eq" variable="mdoat_m">
<variable name="mdoat_ti_m"/>
</valueRestriction>
<valueRestriction type="eq" variable="mdoat_ai_s">
<variable name="mdoat_ti_s"/>
</valueRestriction>
<valueRestriction type="eq" variable="mdoat_ai_i">
<variable name="mdoat_ti_i"/>
</valueRestriction>
<causalLink producer="mdoat_activate_instrument" consumer="mdoat_take_image">
<atomic name="power_on">
<variable name="mdoat_ai_i"/>
</atomic>
</causalLink>
</methodDeclaration>
<methodDeclaration name="method_do_observation_ti" taskRef="do_observation">
<varDeclaration name="mdot_d" sort="image_direction"/>
<varDeclaration name="mdot_m" sort="mode"/>
<taskNode name="mdot_take_image" taskRef="take_image">
<varDeclaration name="mdot_ti_s" sort="satellite"/>
<varDeclaration name="mdot_ti_d" sort="image_direction"/>
<varDeclaration name="mdot_ti_i" sort="instrument"/>
<varDeclaration name="mdot_ti_m" sort="mode"/>
</taskNode>
<valueRestriction type="eq" variable="mdot_d">
<variable name="mdot_ti_d"/>
</valueRestriction>
<valueRestriction type="eq" variable="mdot_m">
<variable name="mdot_ti_m"/>
</valueRestriction>
</methodDeclaration>
<methodDeclaration name="method_activate_instrument_soff_son_ac" taskRef="activate_instrument">
<varDeclaration name="maissa_s" sort="satellite"/>
<varDeclaration name="maissa_i" sort="instrument"/>
<taskNode name="maissa_switch_off" taskRef="switch_off">
<varDeclaration name="maissa_sof_i" sort="instrument"/>
<varDeclaration name="maissa_sof_s" sort="satellite"/>
</taskNode>
<taskNode name="maissa_switch_on" taskRef="switch_on">
<varDeclaration name="maissa_son_i" sort="instrument"/>
<varDeclaration name="maissa_son_s" sort="satellite"/>
</taskNode>
<taskNode name="maissa_auto_calibrate" taskRef="auto_calibrate">
<varDeclaration name="maissa_ac_s" sort="satellite"/>
<varDeclaration name="maissa_ac_i" sort="instrument"/>
</taskNode>
<orderingConstraint predecessor="maissa_switch_off" successor="maissa_switch_on"/>
<orderingConstraint predecessor="maissa_switch_on" successor="maissa_auto_calibrate"/>
<valueRestriction type="eq" variable="maissa_s">
<variable name="maissa_sof_s"/>
</valueRestriction>
<valueRestriction type="eq" variable="maissa_s">
<variable name="maissa_son_s"/>
</valueRestriction>
<valueRestriction type="eq" variable="maissa_i">
<variable name="maissa_son_i"/>
</valueRestriction>
<valueRestriction type="eq" variable="maissa_s">
<variable name="maissa_ac_s"/>
</valueRestriction>
<valueRestriction type="eq" variable="maissa_i">
<variable name="maissa_ac_i"/>
</valueRestriction>
<valueRestriction type="neq" variable="maissa_sof_i">
<variable name="maissa_son_i"/>
</valueRestriction>
<causalLink producer="maissa_switch_off" consumer="maissa_switch_on">
<atomic name="power_avail">
<variable name="maissa_sof_s"/>
</atomic>
</causalLink>
<causalLink producer="maissa_switch_on" consumer="maissa_auto_calibrate">
<atomic name="power_on">
<variable name="maissa_son_i"/>
</atomic>
</causalLink>
</methodDeclaration>
<methodDeclaration name="method_activate_instrument_son_ac" taskRef="activate_instrument">
<varDeclaration name="maisa_s" sort="satellite"/>
<varDeclaration name="maisa_i" sort="instrument"/>
<taskNode name="maisa_switch_on" taskRef="switch_on">
<varDeclaration name="maisa_son_i" sort="instrument"/>
<varDeclaration name="maisa_son_s" sort="satellite"/>
</taskNode>
<taskNode name="maisa_auto_calibrate" taskRef="auto_calibrate">
<varDeclaration name="maisa_ac_s" sort="satellite"/>
<varDeclaration name="maisa_ac_i" sort="instrument"/>
</taskNode>
<orderingConstraint predecessor="maisa_switch_on" successor="maisa_auto_calibrate"/>
<valueRestriction type="eq" variable="maisa_s">
<variable name="maisa_son_s"/>
</valueRestriction>
<valueRestriction type="eq" variable="maisa_i">
<variable name="maisa_son_i"/>
</valueRestriction>
<valueRestriction type="eq" variable="maisa_s">
<variable name="maisa_ac_s"/>
</valueRestriction>
<valueRestriction type="eq" variable="maisa_i">
<variable name="maisa_ac_i"/>
</valueRestriction>
<causalLink producer="maisa_switch_on" consumer="maisa_auto_calibrate">
<atomic name="power_on">
<variable name="maisa_son_i"/>
</atomic>
</causalLink>
</methodDeclaration>
<methodDeclaration name="method_auto_calibrate_tt_cal" taskRef="auto_calibrate">
<varDeclaration name="mactc_s" sort="satellite"/>
<varDeclaration name="mactc_i" sort="instrument"/>
<taskNode name="mactc_turn_to" taskRef="turn_to">
<varDeclaration name="mactc_tt_s" sort="satellite"/>
<varDeclaration name="mactc_tt_d_new" sort="direction"/>
<varDeclaration name="mactc_tt_d_prev" sort="direction"/>
</taskNode>
<taskNode name="mactc_calibrate" taskRef="calibrate">
<varDeclaration name="mactc_c_s" sort="satellite"/>
<varDeclaration name="mactc_c_i" sort="instrument"/>
<varDeclaration name="mactc_c_d" sort="calib_direction"/>
</taskNode>
<orderingConstraint predecessor="mactc_turn_to" successor="mactc_calibrate"/>
<valueRestriction type="eq" variable="mactc_s">
<variable name="mactc_tt_s"/>
</valueRestriction>
<valueRestriction type="eq" variable="mactc_s">
<variable name="mactc_c_s"/>
</valueRestriction>
<valueRestriction type="eq" variable="mactc_i">
<variable name="mactc_c_i"/>
</valueRestriction>
<sortRestriction type="eq" variable="mactc_tt_d_new" sort="calib_direction"/>
<valueRestriction type="eq" variable="mactc_tt_d_new">
<variable name="mactc_c_d"/>
</valueRestriction>
<valueRestriction type="neq" variable="mactc_tt_d_new">
<variable name="mactc_tt_d_prev"/>
</valueRestriction>
<causalLink producer="mactc_turn_to" consumer="mactc_calibrate">
<atomic name="pointing">
<variable name="mactc_tt_s"/>
<variable name="mactc_tt_d_new"/>
</atomic>
</causalLink>
</methodDeclaration>
<methodDeclaration name="method_auto_calibrate_cal" taskRef="auto_calibrate">
<varDeclaration name="macc_s" sort="satellite"/>
<varDeclaration name="macc_i" sort="instrument"/>
<taskNode name="macc_calibrate" taskRef="calibrate">
<varDeclaration name="macc_c_s" sort="satellite"/>
<varDeclaration name="macc_c_i" sort="instrument"/>
<varDeclaration name="macc_c_d" sort="calib_direction"/>
</taskNode>
<valueRestriction type="eq" variable="macc_s">
<variable name="macc_c_s"/>
</valueRestriction>
<valueRestriction type="eq" variable="macc_i">
<variable name="macc_c_i"/>
</valueRestriction>
</methodDeclaration>
</domainModel>
download file