349 lines
13 KiB
Prolog
349 lines
13 KiB
Prolog
|
|
|||
|
INTRODUCTION
|
|||
|
|
|||
|
Temperature control is widely used in various processes. These
|
|||
|
processes, no matter if it is in a large industrial plant, or in
|
|||
|
a home appliance, share several unfavorable features. These
|
|||
|
include non-linearity, interference, dead time, and external
|
|||
|
disturbances, among others. Conventional approaches usually do
|
|||
|
not result in satisfactory temperature control.
|
|||
|
|
|||
|
In this Application Note we provide examples of fuzzy logic used
|
|||
|
to control temperature in several different situations. These
|
|||
|
examples are developed using FIDE, an integrated fuzzy inference
|
|||
|
development environment.
|
|||
|
|
|||
|
FUZZY CONTROL IN A GLASS MELTING FURNACE
|
|||
|
|
|||
|
A glass melting furnace has two rooms, a melter and a refiner.
|
|||
|
Raw materials are melted into glass at high temperature in the
|
|||
|
melter. The temperature of the melted glass is adjusted to a
|
|||
|
suitable temperature for the glass forming process to follow. It
|
|||
|
takes a long time to change the temperature in the furnace, which
|
|||
|
is an example of dead-time in this process. The flow of melted
|
|||
|
glass is not uniform, especially at the bottom of the furnace. In
|
|||
|
addition to temperature, other factors also contribute to the
|
|||
|
thermal characteristics of melted glass. Raw material mixing
|
|||
|
procedure, glass color, and the amount of the glass are some of
|
|||
|
the factors. Because there are many variables and the procedure
|
|||
|
complex, it is very difficult to design an effective temperature
|
|||
|
controller for this application using conventional control
|
|||
|
approaches.
|
|||
|
|
|||
|
|
|||
|
Control Objective
|
|||
|
|
|||
|
Control temperature in a dead time process such as in a glass
|
|||
|
melting furnace.
|
|||
|
|
|||
|
Fuzzy Control System
|
|||
|
|
|||
|
The control block diagram for a glass melting furnace is shown in
|
|||
|
Figure 1. Control value u is applied to the
|
|||
|
process to adjust the temperature. This value is changed by two
|
|||
|
compensators. The variation of u can be written
|
|||
|
as u = ud + ue where ud is the output of
|
|||
|
the dead time compensator, and ue is the output
|
|||
|
of the error compensator. The dead time compensator is used to
|
|||
|
reduce the effect dead time has on the process. Its output
|
|||
|
(ud), an incremental change in control value, is
|
|||
|
derived from the change in the current and previous control value
|
|||
|
(u) and the time differential of output
|
|||
|
temperature (y). The error compensator is used
|
|||
|
to reduce the difference between the desired temperature and the
|
|||
|
actual temperture of hte furnace. Its outpu (ue), also an
|
|||
|
incremental change in control value, is inferred from the
|
|||
|
difference(error) e and its time differential <20>. ud and ue are
|
|||
|
combined to change the control value u.
|
|||
|
|
|||
|
|
|||
|
Input/Output Variables of the Dead Time Compensator
|
|||
|
|
|||
|
Labels and membership functions of input/output variables of the
|
|||
|
dead time compensator are shown in Figure 2a, 2b, 2c. The
|
|||
|
membership functions can be created by using the MF editor in
|
|||
|
FIDE.
|
|||
|
|
|||
|
|
|||
|
FIU Source Code for the Dead Time Compensator
|
|||
|
|
|||
|
The following is the source code for the dead time compensator
|
|||
|
written in FIL, the fuzzy inference language provided in FIDE.
|
|||
|
|
|||
|
$ FILENAME: temp/temp1_dt.fil
|
|||
|
$ DATE: 08/31/1992
|
|||
|
$ UPDATE: 09/02/1992
|
|||
|
|
|||
|
$ Temperature Controller : Part 1 : dead time compensator
|
|||
|
$ Two inputs, one output
|
|||
|
$ INPUT(S): Prev(ious)_Var(iationOf)_Ctrl, TimeDiff(erentialOf)_Output
|
|||
|
$ OUTPUT(S): Var(iationOf)_Ctrl
|
|||
|
|
|||
|
$ FIU HEADER
|
|||
|
|
|||
|
fiu tvfi (min max) *8;
|
|||
|
|
|||
|
$ DEFINITION OF INPUT VARIABLE(S)
|
|||
|
|
|||
|
invar Prev_Var_Ctrl " " : -1 () 1 [
|
|||
|
P_Large (@0.45, 0, @0.75, 1, @1.00, 1),
|
|||
|
P_Medium (@0.15, 0, @0.45, 1, @0.75, 0),
|
|||
|
P_Small (@-0.15, 0, @0.15, 1, @0.45, 0),
|
|||
|
N_Small (@-0.45, 0, @-0.15, 1, @0.15, 0),
|
|||
|
N_Medium (@-0.75, 0, @-0.45, 1, @-0.15, 0),
|
|||
|
N_Large (@-1.00, 1, @-0.75, 1, @-0.45, 0)
|
|||
|
];
|
|||
|
|
|||
|
invar TimeDiff_Output " " : -90 () 90 [
|
|||
|
P_Large (@20, 0, @60, 1, @90, 1),
|
|||
|
P_Small (@-20, 0, @20, 1, @60, 0),
|
|||
|
N_Small (@-60, 0, @-20, 1, @20, 0),
|
|||
|
N_Large (@-90, 1, @-60, 1, @-20, 0)
|
|||
|
];
|
|||
|
|
|||
|
$ DEFINITION OF OUTPUT VARIABLE(S)
|
|||
|
|
|||
|
outvar Var_Ctrl " " : -1 () 1 * (
|
|||
|
P_Large = 0.80,
|
|||
|
P_Medium = 0.40,
|
|||
|
P_Small = 0.20,
|
|||
|
Zero = 0.00,
|
|||
|
N_Small = -0.20,
|
|||
|
N_Medium = -0.40,
|
|||
|
N_Large = -0.80
|
|||
|
);
|
|||
|
|
|||
|
$ RULES
|
|||
|
|
|||
|
if Prev_Var_Ctrl is P_Large and TimeDiff_Output is P_Large then
|
|||
|
Var_Ctrl is N_Large;
|
|||
|
if Prev_Var_Ctrl is P_Large and TimeDiff_Output is P_Small then
|
|||
|
Var_Ctrl is N_Medium;
|
|||
|
if Prev_Var_Ctrl is P_Large and TimeDiff_Output is N_Small then
|
|||
|
Var_Ctrl is N_Small;
|
|||
|
if Prev_Var_Ctrl is P_Large and TimeDiff_Output is N_Large then
|
|||
|
Var_Ctrl is Zero;
|
|||
|
|
|||
|
if Prev_Var_Ctrl is P_Medium and TimeDiff_Output is P_Large then
|
|||
|
Var_Ctrl is N_Medium;
|
|||
|
if Prev_Var_Ctrl is P_Medium and TimeDiff_Output is P_Small then
|
|||
|
Var_Ctrl is N_Small;
|
|||
|
if Prev_Var_Ctrl is P_Medium and TimeDiff_Output is N_Small then
|
|||
|
Var_Ctrl is Zero;
|
|||
|
if Prev_Var_Ctrl is P_Medium and TimeDiff_Output is N_Large then
|
|||
|
Var_Ctrl is Zero;
|
|||
|
|
|||
|
if Prev_Var_Ctrl is P_Small and TimeDiff_Output is P_Large then
|
|||
|
Var_Ctrl is N_Small;
|
|||
|
if Prev_Var_Ctrl is P_Small and TimeDiff_Output is P_Small then
|
|||
|
Var_Ctrl is Zero;
|
|||
|
if Prev_Var_Ctrl is P_Small and TimeDiff_Output is N_Small then
|
|||
|
Var_Ctrl is Zero;
|
|||
|
if Prev_Var_Ctrl is P_Small and TimeDiff_Output is N_Large then
|
|||
|
Var_Ctrl is Zero;
|
|||
|
|
|||
|
if Prev_Var_Ctrl is N_Small and TimeDiff_Output is P_Large then
|
|||
|
Var_Ctrl is Zero;
|
|||
|
if Prev_Var_Ctrl is N_Small and TimeDiff_Output is P_Small then
|
|||
|
Var_Ctrl is Zero;
|
|||
|
if Prev_Var_Ctrl is N_Small and TimeDiff_Output is N_Small then
|
|||
|
Var_Ctrl is Zero;
|
|||
|
if Prev_Var_Ctrl is N_Small and TimeDiff_Output is N_Large then
|
|||
|
Var_Ctrl is P_Small;
|
|||
|
|
|||
|
if Prev_Var_Ctrl is N_Medium and TimeDiff_Output is P_Large then
|
|||
|
Var_Ctrl is Zero;
|
|||
|
if Prev_Var_Ctrl is N_Medium and TimeDiff_Output is P_Small then
|
|||
|
Var_Ctrl is Zero;
|
|||
|
if Prev_Var_Ctrl is N_Medium and TimeDiff_Output is N_Small then
|
|||
|
Var_Ctrl is P_Small;
|
|||
|
if Prev_Var_Ctrl is N_Medium and TimeDiff_Output is N_Large then
|
|||
|
Var_Ctrl is P_Medium;
|
|||
|
|
|||
|
if Prev_Var_Ctrl is N_Large and TimeDiff_Output is P_Large then
|
|||
|
Var_Ctrl is Zero;
|
|||
|
if Prev_Var_Ctrl is N_Large and TimeDiff_Output is P_Small then
|
|||
|
Var_Ctrl is P_Small;
|
|||
|
if Prev_Var_Ctrl is N_Large and TimeDiff_Output is N_Small then
|
|||
|
Var_Ctrl is P_Medium;
|
|||
|
if Prev_Var_Ctrl is N_Large and TimeDiff_Output is N_Large then
|
|||
|
Var_Ctrl is P_Large
|
|||
|
|
|||
|
end
|
|||
|
|
|||
|
|
|||
|
Input/Output Response of the Dead Time Compensator
|
|||
|
|
|||
|
Figure 3 shows the response surface of the dead time compensator.
|
|||
|
This surface can be obtained by using the Analyzer tool provided
|
|||
|
in FIDE.
|
|||
|
|
|||
|
|
|||
|
Input/Output Variables of the Error Compensator
|
|||
|
|
|||
|
Labels and membership functions of input/output variables of the
|
|||
|
Error Compensator are shown in Figure 4a, 4b, 4c.
|
|||
|
|
|||
|
|
|||
|
FIU Source Code of Error Compensator
|
|||
|
|
|||
|
$ FILENAME: temp/temp1_er.fil
|
|||
|
$ DATE: 09/02/1992
|
|||
|
$ UPDATE: 09/03/1992
|
|||
|
|
|||
|
$ Temperature Controller : Part 2 : error compensator
|
|||
|
$ Two inputs, one output
|
|||
|
$ INPUT(S): Error, TimeDiff(erentialOf)_Error
|
|||
|
$ OUTPUT(S): Var(iationOf)_Ctrl
|
|||
|
|
|||
|
$ FIU HEADER
|
|||
|
|
|||
|
fiu tvfi (min max) *8;
|
|||
|
|
|||
|
$ DEFINITION OF INPUT VARIABLE(S)
|
|||
|
|
|||
|
invar Error " " : -100 () 100 [
|
|||
|
P_Large (@50, 0, @80, 1, @100, 1),
|
|||
|
P_Medium (@20, 0, @50, 1, @80, 0),
|
|||
|
P_Small (@0, 0, @20, 1, @50, 0),
|
|||
|
Zero (@-20, 0, @0, 1, @20, 0),
|
|||
|
N_Small (@-50, 0, @-20, 1, @0, 0),
|
|||
|
N_Medium (@-80, 0, @-50, 1, @-20, 0),
|
|||
|
N_Large (@-100,1, @-80, 1, @-50, 0)
|
|||
|
];
|
|||
|
|
|||
|
invar TimeDiff_Error " " : -90 () 90 [
|
|||
|
P_Large (@50, 0, @70, 1, @90, 1),
|
|||
|
P_Medium (@30, 0, @50, 1, @70, 0),
|
|||
|
P_Small (@0, 0, @30, 1, @50, 0),
|
|||
|
Zero (@-30, 0, @0, 1, @30, 0),
|
|||
|
N_Small (@-50, 0, @-30, 1, @0, 0),
|
|||
|
N_Medium (@-70, 0, @-50, 1, @-30, 0),
|
|||
|
N_Large (@-90, 1, @-70, 1, @-50, 0)
|
|||
|
];
|
|||
|
|
|||
|
|
|||
|
$ DEFINITION OF OUTPUT VARIABLE(S)
|
|||
|
|
|||
|
outvar Var_Ctrl " " : -1 () 1 * (
|
|||
|
P_Large = 0.80,
|
|||
|
P_Medium = 0.40,
|
|||
|
P_Small = 0.20,
|
|||
|
Zero = 0.00,
|
|||
|
N_Small = -0.20,
|
|||
|
N_Medium = -0.40,
|
|||
|
N_Large = -0.80
|
|||
|
);
|
|||
|
|
|||
|
|
|||
|
$ RULES
|
|||
|
|
|||
|
if Error is Zero and TimeDiff_Error is P_Large then Var_Ctrl is
|
|||
|
P_Large;
|
|||
|
if Error is Zero and TimeDiff_Error is P_Medium then Var_Ctrl is
|
|||
|
P_Medium;
|
|||
|
if Error is Zero and TimeDiff_Error is P_Small then Var_Ctrl is
|
|||
|
Zero;
|
|||
|
if Error is Zero and TimeDiff_Error is Zero then Var_Ctrl is
|
|||
|
Zero;
|
|||
|
if Error is Zero and TimeDiff_Error is N_Small then Var_Ctrl is
|
|||
|
Zero;
|
|||
|
if Error is Zero and TimeDiff_Error is N_Medium then Var_Ctrl is
|
|||
|
N_Medium;
|
|||
|
if Error is Zero and TimeDiff_Error is N_Large then Var_Ctrl is
|
|||
|
N_Large;
|
|||
|
|
|||
|
if Error is P_Large and TimeDiff_Error is Zero then Var_Ctrl is
|
|||
|
P_Large;
|
|||
|
if Error is P_Medium and TimeDiff_Error is Zero then Var_Ctrl is
|
|||
|
P_Medium;
|
|||
|
if Error is P_Small and TimeDiff_Error is Zero then Var_Ctrl is
|
|||
|
Zero;
|
|||
|
if Error is N_Small and TimeDiff_Error is Zero then Var_Ctrl is
|
|||
|
Zero;
|
|||
|
if Error is N_Medium and TimeDiff_Error is Zero then Var_Ctrl is
|
|||
|
N_Medium;
|
|||
|
if Error is N_Large and TimeDiff_Error is Zero then Var_Ctrl is
|
|||
|
N_Large;
|
|||
|
|
|||
|
if Error is P_Medium and TimeDiff_Error is P_Medium then Var_Ctrl is
|
|||
|
P_Large;
|
|||
|
if Error is P_Small and TimeDiff_Error is P_Small then Var_Ctrl is
|
|||
|
Zero;
|
|||
|
if Error is P_Medium and TimeDiff_Error is N_Medium then Var_Ctrl is
|
|||
|
Zero;
|
|||
|
if Error is P_Small and TimeDiff_Error is N_Large then Var_Ctrl is
|
|||
|
N_Medium;
|
|||
|
if Error is N_Small and TimeDiff_Error is P_Large then Var_Ctrl is
|
|||
|
P_Medium;
|
|||
|
if Error is N_Medium and TimeDiff_Error is P_Medium then Var_Ctrl is
|
|||
|
Zero;
|
|||
|
if Error is N_Small and TimeDiff_Error is N_Small then Var_Ctrl is
|
|||
|
Zero;
|
|||
|
if Error is N_Medium and TimeDiff_Error is N_Medium then Var_Ctrl is
|
|||
|
N_Large
|
|||
|
|
|||
|
end
|
|||
|
|
|||
|
|
|||
|
Input/Output Response of Error Compensator
|
|||
|
|
|||
|
Figure 5 shows the response surface of the error compensator.
|
|||
|
|
|||
|
|
|||
|
COMMENTS
|
|||
|
|
|||
|
Temperature control systems, using fuzzy controllers as shown
|
|||
|
above, have been put into operation and provide performance
|
|||
|
better than conventional control systems. Fuzzy controllers also
|
|||
|
show robust response in the handling of dead time behavior in the
|
|||
|
process.
|
|||
|
|
|||
|
(Weijing Zhang, Applications Engineer, Aptronix Inc.)
|
|||
|
|
|||
|
|
|||
|
|
|||
|
For Further Information Please Contact:
|
|||
|
|
|||
|
Aptronix Incorporated
|
|||
|
2150 North First Street #300
|
|||
|
San Jose, CA 95131
|
|||
|
Tel (408) 428-1888
|
|||
|
Fax (408) 428-1884
|
|||
|
FuzzyNet (408) 428-1883 data 8/N/1
|
|||
|
|
|||
|
|
|||
|
|
|||
|
Aptronix Company Overview
|
|||
|
|
|||
|
Headquartered in San Jose, California, Aptronix develops and
|
|||
|
markets fuzzy logic-based software, systems and development
|
|||
|
tools for a complete range of commercial applications. The
|
|||
|
company was founded in 1989 and has been responsible for a
|
|||
|
number of important innovations in fuzzy technology.
|
|||
|
|
|||
|
Aptronix's product Fide (Fuzzy Inference Development
|
|||
|
Environment) -- is a complete environment for the development of
|
|||
|
fuzzy logic-based systems. Fide provides system engineers with
|
|||
|
the most effective fuzzy tools in the industry and runs in
|
|||
|
MS-Windows(TM) on 386/486 hardware. The price for Fide is $1495 and
|
|||
|
can be ordered from any authorized Motorola distributor. For a
|
|||
|
list of authorized distributors or more information, please
|
|||
|
call Aptronix. The software package comes with complete
|
|||
|
documentation on how to develop fuzzy logic based applications,
|
|||
|
free telephone support for 90 days and access to the Aptronix
|
|||
|
FuzzyNet information exchange.
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
Temperature Control
|
|||
|
|
|||
|
FIDE Application Note 004-080992
|
|||
|
Aptronix Inc., 1992
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|