# Tutorial: Working with Model Hierarchy and Parameterization

Learn how to add a PID controller and dynamics to a water tank model. Learn how to parameterize the model with context variables and mask super blocks to hide details of the model hierarchy.

## Files for This Tutorial

Watertank.scm

`<installation_directory>`/tutorial_models/.

## Overview of a Watertank Problem

In a water tank model, a PID controller is added to regulate the flow of water into the tank.

The following flow equations represent the water tank model:

By controlling the inflow rate q_{in} of water into the tank, the water level
`h` can be reached within a given time. The given system model has only one
input and one output, q_{in} and q_{out}, and therefore requires the addition
of a classic PID controller to control the flow rate of water.

The PID controller is implemented as a super block that is comprised of basic arithmetic and integration blocks. The coefficients of the Proportional, Integral and Derivative terms of the PID controller are defined as context variables, which you can edit with OML commands.

The controller in the super block is masked and looks like a regular Activate block. Though the mask hides the implementation details of the super block, the PID parameters are accessible by double-clicking the super block.

## Constructing a PID Controller

Create a model with a PID controller to regulate water flow.

## Modeling the Water Tank Dynamics

Construct the dynamics of a water tank based on three flow equations.

## Defining Context Variables

On the Context tab of the Diagram dialog, enter values for the main and local context variables.

## Masking the Super Block

Mask the Controller super block and tune the `P`,
`I`, and `D` parameters.