PIDassist: The process simulator

The process simulator will let you simulate a range of real-world processes, but not all. With sufficiently strong motivation (like a hint of an order for 10,000 SPLat boards) I can add more features.
You can have up to 3 cascaded time constants with different time constants for increasing (TauUp) and decreasing (Tdown) outputs. Stage 1 receives the output of the controller, then feeds into stage 2 which in turn feeds stage 3. You can bypass a stage by unchecking its Enable checkbox. The output of each stage can be limited between MinOut and MaxOut. As the stage gain is always 1 and the input to the chain (output of the controller) is limited to the range 0-1, it would make sense only to constrain the stage outputs to values within the same range, for example 0.2 to 0.76.
The output control lets you set the final gain of the process and also apply limits. It can be useful to set the final gain to slightly more or less than 1, so the red and green display graphs don’t overlap (gain change of 5-10% should have negligible effect on the PID control). The Offset adds a fixed amount to the output. This is useful for example where you are temperature controlling something, and you need to add ambient temperature to the “reading”. You can also use it to inject a disturbance into the process.
If your real process is inverting, i.e. if its output decreases for an increasing control input, you need to use a negative gain value and a positive output offset.
There is also a delay line. This is quite simply implemented as an array of numbers that are shifted bucket brigade style once per sample interval. You should use the delay line only if you are quite sure your process contains a true delay such as a pipe, a conveyor or an auger. The official term for such a delay is Dead Time.
The simulator is re-calculated at the same sampling interval as the controller. The K factors used are automatically adjusted to get the required time constant. However, any sampled system is only an approximation to a real-world continuous system, so try and keep the sampling time at least ten times faster than the shortest time constant in the simulator, to minimize errors.