Defining a Target that Represents an Upper or Lower Limit

In many cases, the goal of a feedback control system is to control the process variable (e.g., volume in a tank) around a particular target level, with that target level being far from the lower and upper bounds (e.g., zero volume or the capacity of the tank). Hence, the value can approach the target from both directions (above or below), and the goal is to keep the value close to the target.

Although this is a common objective (e.g., a thermostat does this), it is also quite common for feedback control systems to be used to control the behavior of a system as it approaches an upper or lower limit from one direction. For example, there may be a hard (or sometimes soft) limit below which we cannot allow the process variable to go. As we approach the target from above, we want to control the outflow specifically trying to prevent it from going below the specified target (and additionally, perhaps required it to smoothly approach the target in a gradual way). For example, as the volume of water in a tank decreases toward some lower limit (the target), some outflows may slowly decrease (“throttle down”). Or perhaps, an outflow is turned off when the volume reaches that target.

This type of behavior can be readily represented using a Controller by simply setting the target to the upper or lower limit. To illustrate this, consider first an example in which a pond starts at a volume of 2100 m3, there is a “noisy” inflow of water to a pond that changes daily (with a mean of 50 m3/day) , and a Deadband Controller is an Outflow Controller (i.e., an outflow is turned on and off). The Flow Capacity is set to 75 m3/day (more than enough to make up for the inflow). In this case, the target is set as the bottom of the deadband (at 2000 m3). The deaband thickness is 25 m3, so the top of the deadband is 2025 m3. The results here include unscheduled updates Timesteps that are inserted automatically by GoldSim during a simulation and are not directly specified by the user prior to running the model.:

As can be seen, the volume drops linearly to the lower bound and then “bounces” between the lower bound and the top of the deadband (2025 m3). The amount of oscillation is a function of the size of the deadband and the Flow Capacity (a smaller deadband and a higher Flow Capacity will result in more oscillations).

Here is a similar model that utilizes a Proportional Controller. Again, the Flow Capacity for the Controller is assumed to be 75 m3/day (i.e., that is the highest it can pump), but that rate is “throttled” downward by the Controller based on the volume as it approaches the target:

In this case, the volume drops more smoothly down to the target (i.e., the flow rate is “throttled” down by the Proportional Controller, and then stays fairly close to the target.

Note that the volume actually drops below the target. That is because in this case, there is no Lower Bound for the pond (i.e., the target is a “soft” limit). If we define the Lower Bound for the pond to be the target (i.e., make the target a “hard” limit), the behavior looks like this:

In this case, the outflow (the output of the Controller) is further constrained by the Pool A stock element that integrates and conserves flows of materials. A Pool is a more powerful version of a Reservoir (it has additional features to more easily accommodate multiple inflows and outflows). outflow logic (which ensures that when the Pool is at the Lower Bound, the outflows cannot exceed the inflows).

The example model above which illustrates defining a target that represents a lower bound (TargetAtLowerBound.gsm) can be found in the General Examples/Controllers folder in your GoldSim directory (accessed by selecting File | Open Example... from the main menu).