|There are many ways to implement the PID algorithm digitally. Two will be discussed
here. In each case, there will be a section of code (in structured Basic, easily
convertible to any other language) that will be executed by the processor every second.
(some other scan rate may be used, change the constant 60 to the number of times per
minute it is executed.) In each code sample there is an IF statement to execute most of
the code if the loop is in the auto mode. If the loop is in manual mode only a few lines
are executed in order to allow for bumpless transfer to auto. Also, while the control loop
is in manual, the output (variable OutP) will be operator adjustable using the operator
The code shown here and on the next page can be translated into any
computer language. For information about process control programming in Visual Basic and
C#, some very good information can be found at HT Services site
Simple PID code
One method of handling the integration and bumpless transfer to automatic mode is an
algorithm that calculates the change in output from one pass to the next using the
derivative of the PID algorithm, or:
dOut/dt = gain x (dError/dt + ResetRate x Error + Derivative x
derivative of output = gain x (derivative of error + reset rate x error +
second derivative of error)
This program is run every second. If the control loop is in manual, the output is
adjusted by the operator through the operator interface software. If the control loop is
in Automatic, the output is computed by the PID algorithm.
Each pass the output is changed by adding the change in output to the previous pass
output. That change is the sum of:
- the change in error (Err-ErrLast)
- the error multiplied by the reset rate, and
- the second derivative of the error (Err-2*ErrLast+ErrLastLast) times the derivative.
The total is then multiplied by the gain.
This simple version of the PID controller work well in most cases, and can be tuned by
the standard PID tuning methods (some of which are discussed later). It has
Parallel rather than Series reset and derivative, and derivative
is applied to the error rather than the input only.
Input Process input
InputLast Process input from last
pass, used in deriv. calc.
between input and set point
ErrLast Error from last pass
ErrLastLast Error from next to last
OutP Output of PID algorithm
Mode value is
AUTO if loop is in automatic
Action value is
DIRECT if loop is direct acting
Derivative value in
Reset reset rate in repeats
Set Point, set by
String, set to
"AUTO" or "Manual" by operator
String, set to
"REVERSE" or "DIRECT" during configuration