Control Maintenance Plan
Overview
A maintenance plan is a type of work plan in which the work tasks that are planned are specifically related the assets that are to be maintained. That is, the maintenance plan will provide a listing of all the maintenance tasks that must be undertaken and the period that can elapse between successive performances of the same task. A maintenance plan does not identify the actual dates on which work should be undertaken. This is the function of a maintenance schedule which is described in fp_control_maintenance_schedule.
Additionally, a maintenance plan may define required resources to perform tasks in terms of the skills or capabilities required. It is not expected that a maintenance plan will identify actors by name.
For instance, the shaft bearings of a pump impeller may require lubrication once each year with the work being undertaken by a Class 1 Lubrication Specialist. This is a work description that can form the basis of a maintenance plan.
For a maintenance plan, the following information will be needed:
The maintenance tasks that are to be undertaken with, for each task:
Identity of the task (using the general form of identification or breakdown structure adopted for the project)
The name of the taks (i.e. how it will be shown in a chart)
Any further useful description (which may be provided if required).
Indication that this is not a milestone task (note that a task is required to be identified as to whether or not it is a milestone; this is not considered to be appropriate for a maintenance plan and the value should therefore be set to FALSE by default.
The assets on which the work is done
For each task on a particular asset, the period of time between occasions when the work is carried out.
Suggested modifications to IFC model and documentation
? IfcTimeMeasure is specified as a real value that is normally measured in seconds. Many time measures may be measured in much larger units (months/years for a typical building or building component). This fact has to be either dealt with in software (currently as indicated) or an alternative approach to measuring time measure determined for IFC.
? To deal with periods between tasks in a work plan, a property set (Pset_WorkPlanPeriod) is introduced. Tis should be considered to act as a placeholder for a more serious reconsideration of the time series capability. The property set has two properties. The first is a time measure property which measures the basic unit (day, week, month, year). The second value is an integer value that specifies how many units of time measure are to pass between planned tasks being done. Thus, for work planned to be done on a quarterly basis, the PlanUnitTimeMeasure would be 'MONTH' and the PlanTaskPeriod would be 3
Results
Maintenance plan is established in which all maintenance tasks are defined for assets that are to be maintained and the period at which they should be undertaken is indicated.
| Information Needed | Entity/Pset/Functional Part | MAN | REC | OPT | |
|---|---|---|---|---|---|
| CONCEPT: Establish a maintenance plan defining the maintenance work to be undertaken on a selection of assets. Note that whilst it would be possible to look at the maintenance of products, it is assumed that such products are grouped together within an asset for the purposes of maintenance. Individual elements of the asset are identifiable within the asset group through the general grouping mechanism. |
|||||
| Determine the maintenance tasks to be undertaken. Perform the following actions for each task to be included in the maintenance plan. | |||||
Assert general attributes for the task |
|||||
Set the global unique identifier |
IfcTask.GlobalId::fcGloballyUniqueId | |
|||
Assert the owner history of the task |
IfcTask.OwnerHistory::fp_apply_owner_history | |
|||
Specify a name for the task Note that this is the primary presentation of the task; it is the text entry in a plan or schedule. This attribute must be asserted for a task |
IfcTask.Name::IfcLabel | |
|||
Specify a description for the task Specification of a description is optional but can provide valuable further information |
IfcTask.Description::IfcLabel | |
|||
| Special information about the task | |||||
Assert special information that may relate to a task Examples that may be used include fixed duration, fixed unit, fixed work etc. |
IfcTask.ObjectType::IfcLabel | |
|||
| Assert specific task related attributes that are relevant to the maintenance plan Note that certain attributes of a task are relevant only to use of a task within a schedule and therefore should not be used for a maintenance plan |
|||||
Set the value of the Task identifier.
|
IfcTask.TaskId ::IfcIdentifier | |
|||
Identify if the task is a milestone. Although this value must be asserted, it is not relevant to the maintenance plan. To ensure that it is taken completely out of consideration in this context, it is a RULE that the value must be asserted as FALSE for a maintenance plan. |
IfcTask.IsMilestone::BOOLEAN = FALSE | |
|||
Set the current status of the task This is not relevant for a maintenance plan and therefore MUST not be asserted |
IfcTask.Status ::IfcLabel | X | X | X | |
Specify the method of work to be used in carrying out the task This is not relevant for a maintenance plan and therefore MUST not be asserted |
IfcTask.WorkMethod ::IfcLabel | X | X | X | |
Set the relative priority of the task (in comparison to the priorities of other tasks). This is not relevant for a maintenance plan and therefore MUST not be asserted |
IfcTask.Priority::INTEGER | X | X | X | |
| A task may nest other tasks, only the parent task being related to the asset. For each sub-task, the procedure for assertion of attributes as defined above must be followed. Once the tasks are defined, they can be brought together into a nesting relationship. Note that whilst the possibility of nested tasks is allowed for, it is not expected that this capability will be widely used in developing a maintenance plan |
fp_nests (IfcTask) | ||||
| Define the period between planned work actions | |||||
Set the unit time measure to be applied to the task
|
Pset_WorkPlanPeriod.PlanUnitTimeMeasure::IfcPropertyEnumeratedValue::IfcLabel | |
|||
Set the number of units of the time measure that specifies the period between recurring occurrences of the task |
Pset_WorkPlanPeriod.PlanTaskPeriod::IfcPropertySingleValue::IfcInteger | ||||
| Define the property set for the task | |||||
|
fp_define_by_properties | ||||
| Define resources that may be associated with a task in a work plan | |||||
|
fp_assign_construction_resource_to_task | ||||
|
fp_assign_construction_resource_to_task (IfcConstructionEquipmentResource) |
||||
|
fp_assign_construction_resource_to_task (IfcConstructionMaterialResource) |
||||
|
fp_assign_construction_resource_to_task (IfcConstructionProductResource) |
||||
|
fp_assign_construction_resource_to_task (IfcCrewResource) |
||||
|
fp_assign_construction_resource_to_task (IfcLaborResource) |
||||
|
fp_assign_construction_resource_to_task (IfcSubContractResource) |
||||
| Identify the asset | |||||
|
fp_model_asset | ||||
| Associate the asset with the task _In this functional part, the asset is assigned to the task rather than vice versa. This is done because the asset is a group rather than a product. Note also that the identification of the asset is not specifically referenced by the work control. Reference to the asset is considered to be implicit through the task_ |
|||||
|
IfcRelAssignsToProcess.RelatingProcess::IfcTask | ||||
|
IfcRelAssignsToProcess.RelatedObjects::IfcAsset | ||||
|
IfcRelAssignsToProcess.QuantityInProcess::IfcMeasureWithUnit | X | X | X | |
|
IfcRelAssignsToProcess.GlobalId::IfcGloballyUniqueId | ||||
|
IfcRelAssignsToProcess.OwnerHistory::fp_apply_owner_history | ||||
|
IfcRelAssignsToProcess.Name::IfcLabel | ||||
|
IfcRelAssignsToProcess.Description::IfcLabel | ||||
| Define the work plan to which the tasks will be assigned | |||||
|
IfcWorkPlan.GlobalId::IfcGloballyUniqueId | ||||
|
IfcWorkPlan.OwnerHistory::fp_apply_owner_history | ||||
|
IfcWorkPlan.Name::IfcLabel | ||||
|
IfcWorkPlan.Description::IfcLabel | ||||
|
IfcWorkPlan.Identifier::IfcIdentifier | ||||
|
IfcWorkPlan.CreationDate::fp_select_date_time | ||||
|
IfcWorkPlan.Creators::fp_select_actor | ||||
|
IfcWorkPlan.Purpose::IfcLabel | ||||
|
IfcWorkPlan.Duration::IfcTimeMeasure | X | X | X | |
|
IfcWorkPlan.TotalFloat::IfcTimeMeasure | X | X | X | |
|
IfcWorkPlan.StartTime::fp_select_date_time | X | X | X | |
|
IfcWorkPlan.FinishTime::fp_select_date_time | X | X | X | |
|
IfcWorkPlan.WorkControlType ::IfcWorkControlTypeEnum |
||||
|
IfcWorkPlan.UserDefinedControlType::IfcLabel | ||||
| Assign the task to the work plan | |||||
|
|||||
|
IfcRelAssignsTasks.RelatedObjects::IfcTask | ||||
|
IfcRelAssignsTasks.RelatedObjectsType::IfcObjectTypeEnum = 'PROCESS' | ||||
|
IfcRelAssignsTasks.TimeForTask::IfcScheduleTimeControl | X | X | X | |
|
IfcRelAssignsTasks.GlobalId::IfcGloballyUniqueId | ||||
|
IfcRelAssignsTasks.OwnerHistory::fp_apply_owner_history | ||||
|
IfcRelAssignsTasks.Name::IfcLabel | ||||
|
IfcRelAssignsTasks.Description::IfcLabel |
IFC Entities Required
- IfcControl
- IfcGroup
- IfcObject
- IfcObjectDefinition
- IfcProcess
- IfcProduct
- IfcRelationship
- IfcRelAssigns
- IfcRelAssignsTasks
- IfcRelAssignsToControl
- IfcRelAssignsToProcess
- IfcRoot
- IfcScheduleTimeControl
- IfcTask
- IfcWorkControl
- IfcWorkPlan
IFC Datatypes Required
- IfcGloballyUniqueId
- IfcIdentifier
- IfcLabel
- IfcObjectTypeEnum
- IfcPositiveRatioMeasure
- IfcRatioMeasure
- IfcText
- IfcTimeMeasure
- IfcWorkControlTypeEnum
IFC Functions Required
- -
IFC Property Sets Required
- Pset_WorkPlanPeriod
IDM Functional Parts Required
- fp_apply_owner_history;
- fp_assign_construction_resource_to_task
- fp_define_by_properties;
- fp_measure_with_unit;
- fp_model_asset
- fp_nests
- fp_place_object;
- fp_represent_product;
- fp_select_date_time;
EXPRESS Schema
SCHEMA FP_CONTROL_MAINTENANCE_PLAN;
TYPE IfcGloballyUniqueId = STRING (22) FIXED;
END_TYPE;
TYPE IfcIdentifier = STRING;
END_TYPE;
TYPE IfcLabel = STRING;
END_TYPE;
TYPE IfcRatioMeasure = REAL;
END_TYPE;
TYPE IfcPositiveRatioMeasure = IfcRatioMeasure;
WHERE
WR1 : SELF > 0;
END_TYPE;
TYPE IfcText = STRING;
END_TYPE;
TYPE IfcTimeMeasure = REAL;
END_TYPE;
TYPE IfcObjectTypeEnum = ENUMERATION OF
(PRODUCT,
PROCESS,
CONTROL,
RESOURCE,
ACTOR,
GROUP,
PROJECT,
NOTDEFINED);
END_TYPE;
TYPE IfcWorkControlTypeEnum = ENUMERATION OF
(ACTUAL,
BASELINE,
PLANNED,
USERDEFINED,
NOTDEFINED);
END_TYPE;
ENTITY IfcProduct
ABSTRACT SUPERTYPE
SUBTYPE OF(IfcObject);
Representation : OPTIONAL fp_represent_product;
ObjectPlacement : OPTIONAL fp_place_object;
WHERE
WR1 : (EXISTS(Representation) AND EXISTS(ObjectPlacement))
OR (EXISTS(Representation) AND
(NOT('IFC2X2_FINAL.IFCPRODUCTDEFINITIONSHAPE' IN TYPEOF(Representation))))
OR (NOT(EXISTS(Representation)));
END_ENTITY;
ENTITY IfcObject
ABSTRACT SUPERTYPE OF (ONEOF(IfcControl, IfcProcess, IfcProduct))
SUBTYPE OF(IfcObjectDefinition);
ObjectType : OPTIONAL IfcLabel;
WHERE
WR1 : SIZEOF(QUERY(temp <\* IsDefinedBy \| 'IFC2X2_FINAL.IFCRELDEFINESBYTYPE' IN TYPEOF(temp))) <= 1;
END_ENTITY;
ENTITY IfcObjectDefinition
SUBTYPE OF(IfcRoot);
INVERSE
HasAssignments : SET OF IfcRelAssigns FOR RelatedObjects;
END_ENTITY;
ENTITY IfcRoot
ABSTRACT SUPERTYPE OF (ONEOF(IfcRelationship, IfcObjectDefinition));
GlobalId : IfcGloballyUniqueId;
Name : OPTIONAL IfcLabel;
Description : OPTIONAL IfcText;
OwnerHistory : fp_apply_owner_history;
UNIQUE
UR1 : GlobalId;
END_ENTITY;
ENTITY IfcRelationship
ABSTRACT SUPERTYPE
SUBTYPE OF(IfcRoot);
END_ENTITY;
ENTITY IfcRelAssigns
ABSTRACT SUPERTYPE OF (ONEOF(IfcRelAssignsToControl, IfcRelAssignsToProcess))
SUBTYPE OF(IfcRelationship);
RelatedObjects : SET [1:?] OF IfcObject;
RelatedObjectsType : OPTIONAL IfcObjectTypeEnum;
WHERE
WR1 : IfcCorrectObjectAssignment(RelatedObjectsType, RelatedObjects);
END_ENTITY;
ENTITY IfcRelAssignsToControl
SUBTYPE OF(IfcRelAssigns);
RelatingControl : IfcControl;
WHERE
WR1 : SIZEOF(QUERY(Temp <\* SELF\IfcRelAssigns.RelatedObjects \| RelatingControl :=: Temp)) = 0;
END_ENTITY;
ENTITY IfcRelAssignsTasks
SUBTYPE OF(IfcRelAssignsToControl);
TimeForTask : OPTIONAL IfcScheduleTimeControl;
WHERE
WR1 : HIINDEX(SELF\IfcRelAssigns.RelatedObjects) = 1;
WR2 : 'IFC2X2_FINAL.IFCTASK' IN TYPEOF(SELF\IfcRelAssigns.RelatedObjects[1]);
WR3 : 'IFC2X2_FINAL.IFCWORKCONTROL' IN TYPEOF(SELF\IfcRelAssignsToControl.RelatingControl);
END_ENTITY;
ENTITY IfcScheduleTimeControl
SUBTYPE OF(IfcControl);
ActualStart : OPTIONAL fp_select_date_time;
EarlyStart : OPTIONAL fp_select_date_time;
LateStart : OPTIONAL fp_select_date_time;
ScheduleStart : OPTIONAL fp_select_date_time;
ActualFinish : OPTIONAL fp_select_date_time;
EarlyFinish : OPTIONAL fp_select_date_time;
LateFinish : OPTIONAL fp_select_date_time;
ScheduledFinish : OPTIONAL fp_select_date_time;
ScheduleDuration : OPTIONAL IfcTimeMeasure;
ActualDuration : OPTIONAL IfcTimeMeasure;
RemainingTime : OPTIONAL IfcTimeMeasure;
FreeFloat : OPTIONAL IfcTimeMeasure;
TotalFloat : OPTIONAL IfcTimeMeasure;
IsCritical : OPTIONAL BOOLEAN;
StatusTime : OPTIONAL fp_select_date_time;
StartFloat : OPTIONAL IfcTimeMeasure;
FinishFloat : OPTIONAL IfcTimeMeasure;
Completion : OPTIONAL IfcPositiveRatioMeasure;
INVERSE
ScheduleTimeControlAssigned : IfcRelAssignsTasks FOR TimeForTask;
END_ENTITY;
ENTITY IfcControl
ABSTRACT SUPERTYPE OF (ONEOF(IfcScheduleTimeControl, IfcWorkControl))
SUBTYPE OF(IfcObject);
INVERSE
Controls : SET OF IfcRelAssignsToControl FOR RelatingControl;
END_ENTITY;
ENTITY IfcWorkControl
ABSTRACT SUPERTYPE
SUBTYPE OF(IfcControl);
Identifier : IfcIdentifier;
CreationDate : fp_select_date_time;
Purpose : OPTIONAL IfcLabel;
Duration : OPTIONAL IfcTimeMeasure;
TotalFloat : OPTIONAL IfcTimeMeasure;
StartTime : fp_select_date_time;
FinishTime\_ : fp_select_date_time;
WorkControlType : OPTIONAL IfcWorkControlTypeEnum;
UserDefinedControlType : OPTIONAL IfcLabel;
WHERE
WR1 : (WorkControlType <> IfcWorkControlTypeEnum.USERDEFINED) OR
((WorkControlType = IfcWorkControlTypeEnum.USERDEFINED) AND EXISTS(SELF\IfcWorkControl.UserDefinedControlType));
END_ENTITY;
ENTITY IfcWorkPlan
SUBTYPE OF(IfcWorkControl);
END_ENTITY;
ENTITY IfcRelAssignsToProcess
SUBTYPE OF(IfcRelAssigns);
RelatingProcess : IfcProcess;
QuantityInProcess : fp_measure_with_unit;
WHERE
WR1 : SIZEOF(QUERY(Temp <\* SELF\IfcRelAssigns.RelatedObjects \| RelatingProcess :=: Temp)) = 0;
END_ENTITY;
ENTITY IfcProcess
ABSTRACT SUPERTYPE
SUBTYPE OF(IfcObject);
END_ENTITY;
ENTITY IfcTask
SUBTYPE OF(IfcProcess);
TaskId : IfcIdentifier;
Status : OPTIONAL IfcLabel;
WorkMethod : OPTIONAL IfcLabel;
IsMilestone : BOOLEAN;
Priority : OPTIONAL INTEGER;
WHERE
WR1 : SIZEOF(QUERY(temp <\* SELF\IfcObject.Decomposes \| NOT('IFC2X2_FINAL.IFCRELNESTS' IN TYPEOF(temp)))) = 0;
WR2 : SIZEOF(QUERY(temp <\* SELF\IfcObject.IsDecomposedBy \| NOT('IFC2X2_FINAL.IFCRELNESTS' IN TYPEOF(temp)))) = 0;
WR3 : EXISTS(SELF\IfcRoot.Name);
END_ENTITY;
ENTITY fp_apply_owner_history;
END_ENTITY;
ENTITY fp_assign_construction_resource_to_task;
END_ENTITY;
ENTITY fp_define_by_properties;
END_ENTITY;
ENTITY fp_measure_with_unit;
END_ENTITY;
ENTITY fp_model_asset;
END_ENTITY;
ENTITY fp_nests;
END_ENTITY;
ENTITY fp_place_object;
END_ENTITY;
ENTITY fp_represent_product;
END_ENTITY;
ENTITY fp_select_date_time;
END_ENTITY;
END_SCHEMA;