815 lines
38 KiB
Plaintext
815 lines
38 KiB
Plaintext
|
INTRODUCTION
|
||
|
|
||
|
Temperature control is widely used in various processes. These
|
||
|
processes, no matter it is a process of large industrial plant,
|
||
|
or a process in home appliance, share several unfavorable
|
||
|
features such as non-linearness, interference, dead time, and
|
||
|
external disturbance, etc. Conventional control approaches
|
||
|
usually cannot achieve satisfactory results for this kind of
|
||
|
processes.
|
||
|
|
||
|
The following example is third in series using fuzzy logic to
|
||
|
control temperature. By using pressure as an input variable, we
|
||
|
develop a sophisticated temperature controller. This example is
|
||
|
developed with FIDE, an integrated fuzzy system development
|
||
|
environment from Aptronix.
|
||
|
|
||
|
FUZZY TEMPERATURE CONTROLLER FOR REACTOR
|
||
|
|
||
|
A film manufacture equipment is shown in Figure 1. Gas in a
|
||
|
reactor is drained out and a little argon gas is input. Imposing
|
||
|
high frequency voltage, electricity would be discharged between
|
||
|
the electrode and the base. Dissociated argon ions crash onto the
|
||
|
target and make atoms split out so that a film will be generated
|
||
|
on the base. Because base temperature is critical in the process
|
||
|
of film generation, temperature control becomes very important.
|
||
|
|
||
|
Figure 1 shows the system diagram of a fuzzy temperature
|
||
|
controller used in this kind of reactor. Inputs to the controller
|
||
|
are desired base temperature, measured base temperature, measured
|
||
|
pressure in the reactor. Pressure is used because it has a large
|
||
|
influence on base temperature to be controlled. High pressure
|
||
|
results in high temperature. Output signals of the controller
|
||
|
adjust the heater and the electromagnetic valve for the cooling
|
||
|
water in the reactor.
|
||
|
|
||
|
|
||
|
Figure 2 shows the fuzzy controller that has three input
|
||
|
variables and two output variables. Inputs can be prepared from
|
||
|
feedback signals from sensors. The first input variable is the
|
||
|
difference between desired temperature and measured temperature,
|
||
|
the second input variable is the variation between current temperature
|
||
|
difference and previous temperature difference, the third
|
||
|
input variable is current pressure p. Two output variables
|
||
|
are control signals to hte heater and the cooling valve.
|
||
|
|
||
|
|
||
|
Advantages of Fuzzy Controller
|
||
|
|
||
|
A conventional single loop control system adjusts controlled
|
||
|
output temperature only by the feedback signal from a temperature
|
||
|
sensor. Pressure changes in the reactor are regarded as noises to
|
||
|
this system. To design a conventional controller for this kind of
|
||
|
system is difficult and time consuming. However, using a fuzzy
|
||
|
controller, we can deal with this problem simply by taking
|
||
|
factors(such as pressure), which have influence on the output,
|
||
|
into account when designing the controller. To create a fuzzy
|
||
|
controller for the above system, what we need to do is to
|
||
|
write rules that contain not only temperature but also
|
||
|
pressure in their antecedents. This design process is much
|
||
|
easier compared with that of conventional controllers
|
||
|
because we can write rules using commonsense knowledge and
|
||
|
know-how from experts. Rules are English like sentences and
|
||
|
intuitive. No mathematical model of the process is needed
|
||
|
as in the case of conventional control.
|
||
|
|
||
|
Using FIDE to Design a Fuzzy Controller
|
||
|
|
||
|
FIDE is a product of Aptronix(see attached company information at
|
||
|
the end of this note) which provides powerful integrated
|
||
|
development environment for fuzzy logic based systems.
|
||
|
|
||
|
The process of designing a fuzzy controller can be summarized as:
|
||
|
|
||
|
Define input/output variables. This process includes definition
|
||
|
of labels and membership functions for each variable.
|
||
|
|
||
|
Create rules that are represented as if-then English like sentences.
|
||
|
|
||
|
Simulate and tune.
|
||
|
|
||
|
The input/output variables are given in Figure 2. In the
|
||
|
following, we give definitions of labels and membership
|
||
|
functions for each variable and then provide the rules for the
|
||
|
controller in a FIU (Fuzzy Inference Unit) source code.
|
||
|
|
||
|
Definitions of Input/Output Variables
|
||
|
|
||
|
Labels and membership functions of input variables are defined in
|
||
|
Figure 3 and Figure 4. Those of output variables are in Figure 5.
|
||
|
For membership functions whose shapes are simple, such as
|
||
|
triangles, they are easy to be defined in a FIU source code. For
|
||
|
example, for label P_Large in Figure 3, the definition can be
|
||
|
written as (@0.6, 0, @1.0, 1), and for label Zero, the definition
|
||
|
can be written as (@-0.3, 0, @0.0, 1, @0.3, 0), and so on. For
|
||
|
more details on the definition of membership functions, please
|
||
|
see Fide User's Manual and Reference Manual.
|
||
|
Note that all values of variables here are normalized into the
|
||
|
range of [-1,1] or [0,1].
|
||
|
|
||
|
Figure 3 Labels and Membership Functions of Input Variables
|
||
|
Error and Var_Error
|
||
|
|
||
|
|
||
|
Figure 4 Labels and Membership Functions of Input Variable
|
||
|
Pressure
|
||
|
|
||
|
|
||
|
Figure 5 Labels and Membership Functions of Output Variables
|
||
|
Var_Heater and Var_Cooling
|
||
|
|
||
|
|
||
|
FIU Source Code
|
||
|
|
||
|
$ FILENAME: temp/temp3.fil
|
||
|
$ DATE: 09/18/1992
|
||
|
$ UPDATE: 09/23/1992
|
||
|
|
||
|
$ Temperature Controller : Three inputs, two outputs
|
||
|
$ INPUT(S): Error, Var(iationOf)_Error, Pressure
|
||
|
$ OUTPUT(S): Var(iationOf)_Heater, Var(iationOf)_Cooling(Valve)
|
||
|
|
||
|
$ FIU HEADER
|
||
|
|
||
|
fiu tvfi (min max) *8;
|
||
|
|
||
|
$ DEFINITION OF INPUT VARIABLE(S)
|
||
|
|
||
|
invar Error " " : -1.0 () 1.0 [
|
||
|
P_Large (@0.6, 0, @1.0, 1),
|
||
|
P_Medium (@0.3, 0, @0.6, 1, @1.0, 0),
|
||
|
P_Small (@0.0, 0, @0.3, 1, @0.6, 0),
|
||
|
Zero (@-0.3, 0, @0.0, 1, @0.3, 0),
|
||
|
N_Small (@-0.6, 0, @-0.3, 1, @0.0, 0),
|
||
|
N_Medium (@-1.0, 0, @-0.6, 1, @-0.3, 0),
|
||
|
N_Large (@-1.0, 1, @-0.6, 0)
|
||
|
];
|
||
|
|
||
|
invar Var_Error " " : -1.0 () 1.0 [
|
||
|
P_Large (@0.6, 0, @1.0, 1),
|
||
|
P_Medium (@0.3, 0, @0.6, 1, @1.0, 0),
|
||
|
P_Small (@0.0, 0, @0.3, 1, @0.6, 0),
|
||
|
Zero (@-0.3, 0, @0.0, 1, @0.3, 0),
|
||
|
N_Small (@-0.6, 0, @-0.3, 1, @0.0, 0),
|
||
|
N_Medium (@-1.0, 0, @-0.6, 1, @-0.3, 0),
|
||
|
N_Large (@-1.0, 1, @-0.6, 0)
|
||
|
];
|
||
|
|
||
|
invar Pressure " " : 0.0 () 1.0 [
|
||
|
Large (@0.5, 0, @1.0, 1),
|
||
|
Medium (@0.0, 0, @0.5, 1, @1.0, 0),
|
||
|
Small (@0.0, 1, @0.5, 0)
|
||
|
];
|
||
|
|
||
|
$ DEFINITION OF OUTPUT VARIABLE(S)
|
||
|
|
||
|
outvar Var_Heater " " : -1.0 () 1.0 * (
|
||
|
P_Large = 0.8,
|
||
|
P_Medium = 0.4,
|
||
|
P_Small = 0.2,
|
||
|
Zero = 0.0,
|
||
|
N_Small = -0.2,
|
||
|
N_Medium = -0.4,
|
||
|
N_Large = -0.8
|
||
|
);
|
||
|
|
||
|
outvar Var_Cooling " " : -1.0 () 1.0 * (
|
||
|
P_Large = 0.8,
|
||
|
P_Medium = 0.4,
|
||
|
P_Small = 0.2,
|
||
|
Zero = 0.0,
|
||
|
N_Small = -0.2,
|
||
|
N_Medium = -0.4,
|
||
|
N_Large = -0.8
|
||
|
);
|
||
|
|
||
|
$ RULES
|
||
|
|
||
|
if Error is P_Large and Var_Error is N_Large and Pressure is Large
|
||
|
then Var_Heater is Zero;
|
||
|
if Error is P_Large and Var_Error is N_Large and Pressure is Large
|
||
|
then Var_Cooling is N_Small;
|
||
|
if Error is P_Large and Var_Error is N_Medium and Pressure is Large
|
||
|
then Var_Heater is P_Small;
|
||
|
if Error is P_Large and Var_Error is N_Medium and Pressure is Large
|
||
|
then Var_Cooling is N_Medium;
|
||
|
if Error is P_Large and Var_Error is N_Small and Pressure is Large
|
||
|
then Var_Heater is P_Medium;
|
||
|
if Error is P_Large and Var_Error is N_Small and Pressure is Large
|
||
|
then Var_Cooling is N_Large;
|
||
|
if Error is P_Large and Var_Error is N_Large and Pressure is Medium
|
||
|
then Var_Heater is P_Small;
|
||
|
if Error is P_Large and Var_Error is N_Large and Pressure is Medium
|
||
|
then Var_Cooling is N_Small;
|
||
|
if Error is P_Large and Var_Error is N_Medium and Pressure is Medium
|
||
|
then Var_Heater is P_Medium;
|
||
|
if Error is P_Large and Var_Error is N_Medium and Pressure is Medium
|
||
|
then Var_Cooling is N_Medium;
|
||
|
if Error is P_Large and Var_Error is N_Small and Pressure is Medium
|
||
|
then Var_Heater is P_Large;
|
||
|
if Error is P_Large and Var_Error is N_Small and Pressure is Medium
|
||
|
then Var_Cooling is N_Large;
|
||
|
if Error is P_Large and Var_Error is N_Large and Pressure is Small
|
||
|
then Var_Heater is P_Medium;
|
||
|
if Error is P_Large and Var_Error is N_Large and Pressure is Small
|
||
|
then Var_Cooling is N_Small;
|
||
|
if Error is P_Large and Var_Error is N_Medium and Pressure is Small
|
||
|
then Var_Heater is P_Large;
|
||
|
if Error is P_Large and Var_Error is N_Medium and Pressure is Small
|
||
|
then Var_Cooling is N_Medium;
|
||
|
if Error is P_Large and Var_Error is N_Small and Pressure is Small
|
||
|
then Var_Heater is P_Large;
|
||
|
if Error is P_Large and Var_Error is N_Small and Pressure is Small
|
||
|
then Var_Cooling is N_Large;
|
||
|
|
||
|
if Error is P_Medium and Var_Error is N_Large and Pressure is Large
|
||
|
then Var_Heater is N_Small;
|
||
|
if Error is P_Medium and Var_Error is N_Large and Pressure is Large
|
||
|
then Var_Cooling is Zero;
|
||
|
if Error is P_Medium and Var_Error is N_Medium and Pressure is Large
|
||
|
then Var_Heater is Zero;
|
||
|
if Error is P_Medium and Var_Error is N_Medium and Pressure is Large
|
||
|
then Var_Cooling is Zero;
|
||
|
if Error is P_Medium and Var_Error is N_Small and Pressure is Large
|
||
|
then Var_Heater is P_Small;
|
||
|
if Error is P_Medium and Var_Error is N_Small and Pressure is Large
|
||
|
then Var_Cooling is N_Medium;
|
||
|
if Error is P_Medium and Var_Error is N_Large and Pressure is Medium
|
||
|
then Var_Heater is Zero;
|
||
|
if Error is P_Medium and Var_Error is N_Large and Pressure is Medium
|
||
|
then Var_Cooling is Zero;
|
||
|
if Error is P_Medium and Var_Error is N_Medium and Pressure is Medium
|
||
|
then Var_Heater is P_Small;
|
||
|
if Error is P_Medium and Var_Error is N_Medium and Pressure is Medium
|
||
|
then Var_Cooling is Zero;
|
||
|
if Error is P_Medium and Var_Error is N_Small and Pressure is Medium
|
||
|
then Var_Heater is P_Medium;
|
||
|
if Error is P_Medium and Var_Error is N_Small and Pressure is Medium
|
||
|
then Var_Cooling is N_Medium;
|
||
|
if Error is P_Medium and Var_Error is N_Large and Pressure is Small
|
||
|
then Var_Heater is P_Small;
|
||
|
if Error is P_Medium and Var_Error is N_Large and Pressure is Small
|
||
|
then Var_Cooling is Zero;
|
||
|
if Error is P_Medium and Var_Error is N_Medium and Pressure is Small
|
||
|
then Var_Heater is P_Medium;
|
||
|
if Error is P_Medium and Var_Error is N_Medium and Pressure is Small
|
||
|
then Var_Cooling is Zero;
|
||
|
if Error is P_Medium and Var_Error is N_Small and Pressure is Small
|
||
|
then Var_Heater is P_Large;
|
||
|
if Error is P_Medium and Var_Error is N_Small and Pressure is Small
|
||
|
then Var_Cooling is N_Medium;
|
||
|
|
||
|
if Error is P_Small and Var_Error is N_Large and Pressure is Large
|
||
|
then Var_Heater is N_Medium;
|
||
|
if Error is P_Small and Var_Error is N_Large and Pressure is Large
|
||
|
then Var_Cooling is Zero;
|
||
|
if Error is P_Small and Var_Error is N_Medium and Pressure is Large
|
||
|
then Var_Heater is N_Medium;
|
||
|
if Error is P_Small and Var_Error is N_Medium and Pressure is Large
|
||
|
then Var_Cooling is Zero;
|
||
|
if Error is P_Small and Var_Error is N_Small and Pressure is Large
|
||
|
then Var_Heater is N_Small;
|
||
|
if Error is P_Small and Var_Error is N_Small and Pressure is Large
|
||
|
then Var_Cooling is Zero;
|
||
|
if Error is P_Small and Var_Error is N_Large and Pressure is Medium
|
||
|
then Var_Heater is N_Small;
|
||
|
if Error is P_Small and Var_Error is N_Large and Pressure is Medium
|
||
|
then Var_Cooling is Zero;
|
||
|
if Error is P_Small and Var_Error is N_Medium and Pressure is Medium
|
||
|
then Var_Heater is N_Small;
|
||
|
if Error is P_Small and Var_Error is N_Medium and Pressure is Medium
|
||
|
then Var_Cooling is Zero;
|
||
|
if Error is P_Small and Var_Error is N_Small and Pressure is Medium
|
||
|
then Var_Heater is Zero;
|
||
|
if Error is P_Small and Var_Error is N_Small and Pressure is Medium
|
||
|
then Var_Cooling is Zero;
|
||
|
if Error is P_Small and Var_Error is N_Large and Pressure is Small
|
||
|
then Var_Heater is Zero;
|
||
|
if Error is P_Small and Var_Error is N_Large and Pressure is Small
|
||
|
then Var_Cooling is Zero;
|
||
|
if Error is P_Small and Var_Error is N_Medium and Pressure is Small
|
||
|
then Var_Heater is Zero;
|
||
|
if Error is P_Small and Var_Error is N_Medium and Pressure is Small
|
||
|
then Var_Cooling is Zero;
|
||
|
if Error is P_Small and Var_Error is N_Small and Pressure is Small
|
||
|
then Var_Heater is P_Small;
|
||
|
if Error is P_Small and Var_Error is N_Small and Pressure is Small
|
||
|
then Var_Cooling is Zero;
|
||
|
|
||
|
if Error is Zero and Var_Error is N_Large and Pressure is Large
|
||
|
then Var_Heater is N_Large;
|
||
|
if Error is Zero and Var_Error is N_Large and Pressure is Large
|
||
|
then Var_Cooling is P_Medium;
|
||
|
if Error is Zero and Var_Error is N_Medium and Pressure is Large
|
||
|
then Var_Heater is N_Medium;
|
||
|
if Error is Zero and Var_Error is N_Medium and Pressure is Large
|
||
|
then Var_Cooling is P_Small;
|
||
|
if Error is Zero and Var_Error is N_Small and Pressure is Large
|
||
|
then Var_Heater is N_Medium;
|
||
|
if Error is Zero and Var_Error is N_Small and Pressure is Large
|
||
|
then Var_Cooling is Zero;
|
||
|
if Error is Zero and Var_Error is N_Large and Pressure is Medium
|
||
|
then Var_Heater is N_Medium;
|
||
|
if Error is Zero and Var_Error is N_Large and Pressure is Medium
|
||
|
then Var_Cooling is P_Medium;
|
||
|
if Error is Zero and Var_Error is N_Medium and Pressure is Medium
|
||
|
then Var_Heater is N_Small;
|
||
|
if Error is Zero and Var_Error is N_Medium and Pressure is Medium
|
||
|
then Var_Cooling is P_Small;
|
||
|
if Error is Zero and Var_Error is N_Small and Pressure is Medium
|
||
|
then Var_Heater is N_Small;
|
||
|
if Error is Zero and Var_Error is N_Small and Pressure is Medium
|
||
|
then Var_Cooling is Zero;
|
||
|
if Error is Zero and Var_Error is N_Large and Pressure is Small
|
||
|
then Var_Heater is N_Small;
|
||
|
if Error is Zero and Var_Error is N_Large and Pressure is Small
|
||
|
then Var_Cooling is P_Medium;
|
||
|
if Error is Zero and Var_Error is N_Medium and Pressure is Small
|
||
|
then Var_Heater is Zero;
|
||
|
if Error is Zero and Var_Error is N_Medium and Pressure is Small
|
||
|
then Var_Cooling is P_Small;
|
||
|
if Error is Zero and Var_Error is N_Small and Pressure is Small
|
||
|
then Var_Heater is Zero;
|
||
|
if Error is Zero and Var_Error is N_Small and Pressure is Small
|
||
|
then Var_Cooling is Zero;
|
||
|
|
||
|
if Error is N_Small and Var_Error is N_Large and Pressure is Large
|
||
|
then Var_Heater is N_Large;
|
||
|
if Error is N_Small and Var_Error is N_Large and Pressure is Large
|
||
|
then Var_Cooling is P_Large;
|
||
|
if Error is N_Small and Var_Error is N_Medium and Pressure is Large
|
||
|
then Var_Heater is N_Medium;
|
||
|
if Error is N_Small and Var_Error is N_Medium and Pressure is Large
|
||
|
then Var_Cooling is P_Medium;
|
||
|
if Error is N_Small and Var_Error is N_Small and Pressure is Large
|
||
|
then Var_Heater is N_Small;
|
||
|
if Error is N_Small and Var_Error is N_Small and Pressure is Large
|
||
|
then Var_Cooling is P_Medium;
|
||
|
if Error is N_Small and Var_Error is N_Large and Pressure is Medium
|
||
|
then Var_Heater is N_Large;
|
||
|
if Error is N_Small and Var_Error is N_Large and Pressure is Medium
|
||
|
then Var_Cooling is P_Medium;
|
||
|
if Error is N_Small and Var_Error is N_Medium and Pressure is Medium
|
||
|
then Var_Heater is N_Medium;
|
||
|
if Error is N_Small and Var_Error is N_Medium and Pressure is Medium
|
||
|
then Var_Cooling is P_Small;
|
||
|
if Error is N_Small and Var_Error is N_Small and Pressure is Medium
|
||
|
then Var_Heater is N_Small;
|
||
|
if Error is N_Small and Var_Error is N_Small and Pressure is Medium
|
||
|
then Var_Cooling is P_Small;
|
||
|
if Error is N_Small and Var_Error is N_Large and Pressure is Small
|
||
|
then Var_Heater is N_Medium;
|
||
|
if Error is N_Small and Var_Error is N_Large and Pressure is Small
|
||
|
then Var_Cooling is P_Medium;
|
||
|
if Error is N_Small and Var_Error is N_Medium and Pressure is Small
|
||
|
then Var_Heater is N_Small;
|
||
|
if Error is N_Small and Var_Error is N_Medium and Pressure is Small
|
||
|
then Var_Cooling is P_Small;
|
||
|
if Error is N_Small and Var_Error is N_Small and Pressure is Small
|
||
|
then Var_Heater is Zero;
|
||
|
if Error is N_Small and Var_Error is N_Small and Pressure is Small
|
||
|
then Var_Cooling is P_Small;
|
||
|
|
||
|
if Error is N_Medium and Var_Error is N_Large and Pressure is Large
|
||
|
then Var_Heater is N_Large;
|
||
|
if Error is N_Medium and Var_Error is N_Large and Pressure is Large
|
||
|
then Var_Cooling is P_Large;
|
||
|
if Error is N_Medium and Var_Error is N_Medium and Pressure is Large
|
||
|
then Var_Heater is N_Large;
|
||
|
if Error is N_Medium and Var_Error is N_Medium and Pressure is Large
|
||
|
then Var_Cooling is P_Large;
|
||
|
if Error is N_Medium and Var_Error is N_Small and Pressure is Large
|
||
|
then Var_Heater is N_Large;
|
||
|
if Error is N_Medium and Var_Error is N_Small and Pressure is Large
|
||
|
then Var_Cooling is P_Medium;
|
||
|
if Error is N_Medium and Var_Error is N_Large and Pressure is Medium
|
||
|
then Var_Heater is N_Large;
|
||
|
if Error is N_Medium and Var_Error is N_Large and Pressure is Medium
|
||
|
then Var_Cooling is P_Large;
|
||
|
if Error is N_Medium and Var_Error is N_Medium and Pressure is Medium
|
||
|
then Var_Heater is N_Large;
|
||
|
if Error is N_Medium and Var_Error is N_Medium and Pressure is Medium
|
||
|
then Var_Cooling is P_Medium;
|
||
|
if Error is N_Medium and Var_Error is N_Small and Pressure is Medium
|
||
|
then Var_Heater is N_Medium;
|
||
|
if Error is N_Medium and Var_Error is N_Small and Pressure is Medium
|
||
|
then Var_Cooling is P_Medium;
|
||
|
if Error is N_Medium and Var_Error is N_Large and Pressure is Small
|
||
|
then Var_Heater is N_Medium;
|
||
|
if Error is N_Medium and Var_Error is N_Large and Pressure is Small
|
||
|
then Var_Cooling is P_Large;
|
||
|
if Error is N_Medium and Var_Error is N_Medium and Pressure is Small
|
||
|
then Var_Heater is N_Medium;
|
||
|
if Error is N_Medium and Var_Error is N_Medium and Pressure is Small
|
||
|
then Var_Cooling is P_Medium;
|
||
|
if Error is N_Medium and Var_Error is N_Small and Pressure is Small
|
||
|
then Var_Heater is N_Small;
|
||
|
if Error is N_Medium and Var_Error is N_Small and Pressure is Small
|
||
|
then Var_Cooling is P_Medium;
|
||
|
|
||
|
if Error is N_Large and Var_Error is N_Large and Pressure is Large
|
||
|
then Var_Heater is N_Large;
|
||
|
if Error is N_Large and Var_Error is N_Large and Pressure is Large
|
||
|
then Var_Cooling is P_Large;
|
||
|
if Error is N_Large and Var_Error is N_Medium and Pressure is Large
|
||
|
then Var_Heater is N_Large;
|
||
|
if Error is N_Large and Var_Error is N_Medium and Pressure is Large
|
||
|
then Var_Cooling is P_Large;
|
||
|
if Error is N_Large and Var_Error is N_Small and Pressure is Large
|
||
|
then Var_Heater is N_Large;
|
||
|
if Error is N_Large and Var_Error is N_Small and Pressure is Large
|
||
|
then Var_Cooling is P_Large;
|
||
|
if Error is N_Large and Var_Error is N_Large and Pressure is Medium
|
||
|
then Var_Heater is N_Large;
|
||
|
if Error is N_Large and Var_Error is N_Large and Pressure is Medium
|
||
|
then Var_Cooling is P_Large;
|
||
|
if Error is N_Large and Var_Error is N_Medium and Pressure is Medium
|
||
|
then Var_Heater is N_Large;
|
||
|
if Error is N_Large and Var_Error is N_Medium and Pressure is Medium
|
||
|
then Var_Cooling is P_Large;
|
||
|
if Error is N_Large and Var_Error is N_Small and Pressure is Medium
|
||
|
then Var_Heater is N_Large;
|
||
|
if Error is N_Large and Var_Error is N_Small and Pressure is Medium
|
||
|
then Var_Cooling is P_Large;
|
||
|
if Error is N_Large and Var_Error is N_Large and Pressure is Small
|
||
|
then Var_Heater is N_Medium;
|
||
|
if Error is N_Large and Var_Error is N_Large and Pressure is Small
|
||
|
then Var_Cooling is P_Large;
|
||
|
if Error is N_Large and Var_Error is N_Medium and Pressure is Small
|
||
|
then Var_Heater is N_Medium;
|
||
|
if Error is N_Large and Var_Error is N_Medium and Pressure is Small
|
||
|
then Var_Cooling is P_Large;
|
||
|
if Error is N_Large and Var_Error is N_Small and Pressure is Small
|
||
|
then Var_Heater is N_Medium;
|
||
|
if Error is N_Large and Var_Error is N_Small and Pressure is Small
|
||
|
then Var_Cooling is P_Large;
|
||
|
|
||
|
if Error is N_Large and Var_Error is P_Large and Pressure is Large
|
||
|
then Var_Heater is N_Medium;
|
||
|
if Error is N_Large and Var_Error is P_Large and Pressure is Large
|
||
|
then Var_Cooling is P_Small;
|
||
|
if Error is N_Large and Var_Error is P_Medium and Pressure is Large
|
||
|
then Var_Heater is N_Large;
|
||
|
if Error is N_Large and Var_Error is P_Medium and Pressure is Large
|
||
|
then Var_Cooling is P_Medium;
|
||
|
if Error is N_Large and Var_Error is P_Small and Pressure is Large
|
||
|
then Var_Heater is N_Large;
|
||
|
if Error is N_Large and Var_Error is P_Small and Pressure is Large
|
||
|
then Var_Cooling is P_Large;
|
||
|
if Error is N_Large and Var_Error is P_Large and Pressure is Medium
|
||
|
then Var_Heater is N_Small;
|
||
|
if Error is N_Large and Var_Error is P_Large and Pressure is Medium
|
||
|
then Var_Cooling is P_Small;
|
||
|
if Error is N_Large and Var_Error is P_Medium and Pressure is Medium
|
||
|
then Var_Heater is N_Medium;
|
||
|
if Error is N_Large and Var_Error is P_Medium and Pressure is Medium
|
||
|
then Var_Cooling is P_Medium;
|
||
|
if Error is N_Large and Var_Error is P_Small and Pressure is Medium
|
||
|
then Var_Heater is N_Large;
|
||
|
if Error is N_Large and Var_Error is P_Small and Pressure is Medium
|
||
|
then Var_Cooling is P_Large;
|
||
|
if Error is N_Large and Var_Error is P_Large and Pressure is Small
|
||
|
then Var_Heater is Zero;
|
||
|
if Error is N_Large and Var_Error is P_Large and Pressure is Small
|
||
|
then Var_Cooling is P_Small;
|
||
|
if Error is N_Large and Var_Error is P_Medium and Pressure is Small
|
||
|
then Var_Heater is N_Small;
|
||
|
if Error is N_Large and Var_Error is P_Medium and Pressure is Small
|
||
|
then Var_Cooling is P_Medium;
|
||
|
if Error is N_Large and Var_Error is P_Small and Pressure is Small
|
||
|
then Var_Heater is N_Medium;
|
||
|
if Error is N_Large and Var_Error is P__Small and Pressure is Small
|
||
|
then Var_Cooling is P_Large;
|
||
|
|
||
|
if Error is N_Medium and Var_Error is P_Large and Pressure is Large
|
||
|
then Var_Heater is N_Medium;
|
||
|
if Error is N_Medium and Var_Error is P_Large and Pressure is Large
|
||
|
then Var_Cooling is Zero;
|
||
|
if Error is N_Medium and Var_Error is P_Medium and Pressure is Large
|
||
|
then Var_Heater is N_Large;
|
||
|
if Error is N_Medium and Var_Error is P_Medium and Pressure is Large
|
||
|
then Var_Cooling is Zero;
|
||
|
if Error is N_Medium and Var_Error is P_Small and Pressure is Large
|
||
|
then Var_Heater is N_Large;
|
||
|
if Error is N_Medium and Var_Error is P_Small and Pressure is Large
|
||
|
then Var_Cooling is P_Small;
|
||
|
if Error is N_Medium and Var_Error is P_Large and Pressure is Medium
|
||
|
then Var_Heater is N_Small;
|
||
|
if Error is N_Medium and Var_Error is P_Large and Pressure is Medium
|
||
|
then Var_Cooling is Zero;
|
||
|
if Error is N_Medium and Var_Error is P_Medium and Pressure is Medium
|
||
|
then Var_Heater is N_Medium;
|
||
|
if Error is N_Medium and Var_Error is P_Medium and Pressure is Medium
|
||
|
then Var_Cooling is Zero;
|
||
|
if Error is N_Medium and Var_Error is P_Small and Pressure is Medium
|
||
|
then Var_Heater is N_Medium;
|
||
|
if Error is N_Medium and Var_Error is P_Small and Pressure is Medium
|
||
|
then Var_Cooling is P_Small;
|
||
|
if Error is N_Medium and Var_Error is P_Large and Pressure is Small
|
||
|
then Var_Heater is Zero;
|
||
|
if Error is N_Medium and Var_Error is P_Large and Pressure is Small
|
||
|
then Var_Cooling is Zero;
|
||
|
if Error is N_Medium and Var_Error is P_Medium and Pressure is Small
|
||
|
then Var_Heater is N_Small;
|
||
|
if Error is N_Medium and Var_Error is P_Medium and Pressure is Small
|
||
|
then Var_Cooling is Zero;
|
||
|
if Error is N_Medium and Var_Error is P_Small and Pressure is Small
|
||
|
then Var_Heater is N_Small;
|
||
|
if Error is N_Medium and Var_Error is P_Small and Pressure is Small
|
||
|
then Var_Cooling is P_Small;
|
||
|
|
||
|
if Error is N_Small and Var_Error is P_Large and Pressure is Large
|
||
|
then Var_Heater is Zero;
|
||
|
if Error is N_Small and Var_Error is P_Large and Pressure is Large
|
||
|
then Var_Cooling is Zero;
|
||
|
if Error is N_Small and Var_Error is P_Medium and Pressure is Large
|
||
|
then Var_Heater is N_Small;
|
||
|
if Error is N_Small and Var_Error is P_Medium and Pressure is Large
|
||
|
then Var_Cooling is Zero;
|
||
|
if Error is N_Small and Var_Error is P_Small and Pressure is Large
|
||
|
then Var_Heater is N_Medium;
|
||
|
if Error is N_Small and Var_Error is P_Small and Pressure is Large
|
||
|
then Var_Cooling is Zero;
|
||
|
if Error is N_Small and Var_Error is P_Large and Pressure is Medium
|
||
|
then Var_Heater is P_Small;
|
||
|
if Error is N_Small and Var_Error is P_Large and Pressure is Medium
|
||
|
then Var_Cooling is Zero;
|
||
|
if Error is N_Small and Var_Error is P_Medium and Pressure is Medium
|
||
|
then Var_Heater is Zero;
|
||
|
if Error is N_Small and Var_Error is P_Medium and Pressure is Medium
|
||
|
then Var_Cooling is Zero;
|
||
|
if Error is N_Small and Var_Error is P_Small and Pressure is Medium
|
||
|
then Var_Heater is N_Small;
|
||
|
if Error is N_Small and Var_Error is P_Small and Pressure is Medium
|
||
|
then Var_Cooling is Zero;
|
||
|
if Error is N_Small and Var_Error is P_Large and Pressure is Small
|
||
|
then Var_Heater is P_Medium;
|
||
|
if Error is N_Small and Var_Error is P_Large and Pressure is Small
|
||
|
then Var_Cooling is Zero;
|
||
|
if Error is N_Small and Var_Error is P_Medium and Pressure is Small
|
||
|
then Var_Heater is P_Small;
|
||
|
if Error is N_Small and Var_Error is P_Medium and Pressure is Small
|
||
|
then Var_Cooling is Zero;
|
||
|
if Error is N_Small and Var_Error is P_Small and Pressure is Small
|
||
|
then Var_Heater is Zero;
|
||
|
if Error is N_Small and Var_Error is P_Small and Pressure is Small
|
||
|
then Var_Cooling is Zero;
|
||
|
|
||
|
if Error is Zero and Var_Error is P_Large and Pressure is Large
|
||
|
then Var_Heater is P_Medium;
|
||
|
if Error is Zero and Var_Error is P_Large and Pressure is Large
|
||
|
then Var_Cooling is N_Small;
|
||
|
if Error is Zero and Var_Error is P_Medium and Pressure is Large
|
||
|
then Var_Heater is P_Small;
|
||
|
if Error is Zero and Var_Error is P_Medium and Pressure is Large
|
||
|
then Var_Cooling is N_Small;
|
||
|
if Error is Zero and Var_Error is P_Small and Pressure is Large
|
||
|
then Var_Heater is Zero;
|
||
|
if Error is Zero and Var_Error is P_Small and Pressure is Large
|
||
|
then Var_Cooling is N_Small;
|
||
|
if Error is Zero and Var_Error is P_Large and Pressure is Medium
|
||
|
then Var_Heater is P_Large;
|
||
|
if Error is Zero and Var_Error is P_Large and Pressure is Medium
|
||
|
then Var_Cooling is N_Small;
|
||
|
if Error is Zero and Var_Error is P_Medium and Pressure is Medium
|
||
|
then Var_Heater is P_Medium;
|
||
|
if Error is Zero and Var_Error is P_Medium and Pressure is Medium
|
||
|
then Var_Cooling is N_Small;
|
||
|
if Error is Zero and Var_Error is P_Small and Pressure is Medium
|
||
|
then Var_Heater is P_Small;
|
||
|
if Error is Zero and Var_Error is P_Small and Pressure is Medium
|
||
|
then Var_Cooling is N_Small;
|
||
|
if Error is Zero and Var_Error is P_Large and Pressure is Small
|
||
|
then Var_Heater is P_Large;
|
||
|
if Error is Zero and Var_Error is P_Large and Pressure is Small
|
||
|
then Var_Cooling is N_Medium;
|
||
|
if Error is Zero and Var_Error is P_Medium and Pressure is Small
|
||
|
then Var_Heater is P_Large;
|
||
|
if Error is Zero and Var_Error is P_Medium and Pressure is Small
|
||
|
then Var_Cooling is N_Small;
|
||
|
if Error is Zero and Var_Error is P_Small and Pressure is Small
|
||
|
then Var_Heater is P_Medium;
|
||
|
if Error is Zero and Var_Error is P_Small and Pressure is Small
|
||
|
then Var_Cooling is N_Small;
|
||
|
|
||
|
if Error is P_Small and Var_Error is P_Large and Pressure is Large
|
||
|
then Var_Heater is P_Medium;
|
||
|
if Error is P_Small and Var_Error is P_Large and Pressure is Large
|
||
|
then Var_Cooling is N_Medium;
|
||
|
if Error is P_Small and Var_Error is P_Medium and Pressure is Large
|
||
|
then Var_Heater is P_Small;
|
||
|
if Error is P_Small and Var_Error is P_Medium and Pressure is Large
|
||
|
then Var_Cooling is N_Medium;
|
||
|
if Error is P_Small and Var_Error is P_Small and Pressure is Large
|
||
|
then Var_Heater is P_Small;
|
||
|
if Error is P_Small and Var_Error is P_Small and Pressure is Large
|
||
|
then Var_Cooling is N_Small;
|
||
|
if Error is P_Small and Var_Error is P_Large and Pressure is Medium
|
||
|
then Var_Heater is P_Large;
|
||
|
if Error is P_Small and Var_Error is P_Large and Pressure is Medium
|
||
|
then Var_Cooling is N_Medium;
|
||
|
if Error is P_Small and Var_Error is P_Medium and Pressure is Medium
|
||
|
then Var_Heater is P_Medium;
|
||
|
if Error is P_Small and Var_Error is P_Medium and Pressure is Medium
|
||
|
then Var_Cooling is N_Medium;
|
||
|
if Error is P_Small and Var_Error is P_Small and Pressure is Medium
|
||
|
then Var_Heater is P_Medium;
|
||
|
if Error is P_Small and Var_Error is P_Small and Pressure is Medium
|
||
|
then Var_Cooling is N_Small;
|
||
|
if Error is P_Small and Var_Error is P_Large and Pressure is Small
|
||
|
then Var_Heater is P_Large;
|
||
|
if Error is P_Small and Var_Error is P_Large and Pressure is Small
|
||
|
then Var_Cooling is N_Large;
|
||
|
if Error is P_Small and Var_Error is P_Medium and Pressure is Small
|
||
|
then Var_Heater is P_Large;
|
||
|
if Error is P_Small and Var_Error is P_Medium and Pressure is Small
|
||
|
then Var_Cooling is N_Medium;
|
||
|
if Error is P_Small and Var_Error is P_Small and Pressure is Small
|
||
|
then Var_Heater is P_Large;
|
||
|
if Error is P_Small and Var_Error is P_Small and Pressure is Small
|
||
|
then Var_Cooling is N_Small;
|
||
|
|
||
|
if Error is P_Medium and Var_Error is P_Large and Pressure is Large
|
||
|
then Var_Heater is P_Medium;
|
||
|
if Error is P_Medium and Var_Error is P_Large and Pressure is Large
|
||
|
then Var_Cooling is N_Large;
|
||
|
if Error is P_Medium and Var_Error is P_Medium and Pressure is Large
|
||
|
then Var_Heater is P_Medium;
|
||
|
if Error is P_Medium and Var_Error is P_Medium and Pressure is Large
|
||
|
then Var_Cooling is N_Medium;
|
||
|
if Error is P_Medium and Var_Error is P_Small and Pressure is Large
|
||
|
then Var_Heater is P_Small;
|
||
|
if Error is P_Medium and Var_Error is P_Small and Pressure is Large
|
||
|
then Var_Cooling is N_Medium;
|
||
|
if Error is P_Medium and Var_Error is P_Large and Pressure is Medium
|
||
|
then Var_Heater is P_Large;
|
||
|
if Error is P_Medium and Var_Error is P_Large and Pressure is Medium
|
||
|
then Var_Cooling is N_Large;
|
||
|
if Error is P_Medium and Var_Error is P_Medium and Pressure is Medium
|
||
|
then Var_Heater is P_Large;
|
||
|
if Error is P_Medium and Var_Error is P_Medium and Pressure is Medium
|
||
|
then Var_Cooling is N_Medium;
|
||
|
if Error is P_Medium and Var_Error is P_Small and Pressure is Medium
|
||
|
then Var_Heater is P_Medium;
|
||
|
if Error is P_Medium and Var_Error is P_Small and Pressure is Medium
|
||
|
then Var_Cooling is N_Medium;
|
||
|
if Error is P_Medium and Var_Error is P_Large and Pressure is Small
|
||
|
then Var_Heater is P_Large;
|
||
|
if Error is P_Medium and Var_Error is P_Large and Pressure is Small
|
||
|
then Var_Cooling is N_Large;
|
||
|
if Error is P_Medium and Var_Error is P_Medium and Pressure is Small
|
||
|
then Var_Heater is P_Large;
|
||
|
if Error is P_Medium and Var_Error is P_Medium and Pressure is Small
|
||
|
then Var_Cooling is N_Large;
|
||
|
if Error is P_Medium and Var_Error is P_Small and Pressure is Small
|
||
|
then Var_Heater is P_Large;
|
||
|
if Error is P_Medium and Var_Error is P_Small and Pressure is Small
|
||
|
then Var_Cooling is N_Medium;
|
||
|
|
||
|
if Error is P_Large and Var_Error is P_Large and Pressure is Large
|
||
|
then Var_Heater is P_Medium;
|
||
|
if Error is P_Large and Var_Error is P_Large and Pressure is Large
|
||
|
then Var_Cooling is N_Large;
|
||
|
if Error is P_Large and Var_Error is P_Medium and Pressure is Large
|
||
|
then Var_Heater is P_Medium;
|
||
|
if Error is P_Large and Var_Error is P_Medium and Pressure is Large
|
||
|
then Var_Cooling is N_Large;
|
||
|
if Error is P_Large and Var_Error is P_Small and Pressure is Large
|
||
|
then Var_Heater is P_Medium;
|
||
|
if Error is P_Large and Var_Error is P_Small and Pressure is Large
|
||
|
then Var_Cooling is N_Large;
|
||
|
if Error is P_Large and Var_Error is P_Large and Pressure is Medium
|
||
|
then Var_Heater is P_Large;
|
||
|
if Error is P_Large and Var_Error is P_Large and Pressure is Medium
|
||
|
then Var_Cooling is N_Large;
|
||
|
if Error is P_Large and Var_Error is P_Medium and Pressure is Medium
|
||
|
then Var_Heater is P_Large;
|
||
|
if Error is P_Large and Var_Error is P_Medium and Pressure is Medium
|
||
|
then Var_Cooling is N_Large;
|
||
|
if Error is P_Large and Var_Error is P_Small and Pressure is Medium
|
||
|
then Var_Heater is P_Large;
|
||
|
if Error is P_Large and Var_Error is P_Small and Pressure is Medium
|
||
|
then Var_Cooling is N_Large;
|
||
|
if Error is P_Large and Var_Error is P_Large and Pressure is Small
|
||
|
then Var_Heater is P_Large;
|
||
|
if Error is P_Large and Var_Error is P_Large and Pressure is Small
|
||
|
then Var_Cooling is N_Large;
|
||
|
if Error is P_Large and Var_Error is P_Medium and Pressure is Small
|
||
|
then Var_Heater is P_Large;
|
||
|
if Error is P_Large and Var_Error is P_Medium and Pressure is Small
|
||
|
then Var_Cooling is N_Large;
|
||
|
if Error is P_Large and Var_Error is P_Small and Pressure is Small
|
||
|
then Var_Heater is P_Large;
|
||
|
if Error is P_Large and Var_Error is P_Small and Pressure is Small
|
||
|
then Var_Cooling is N_Large
|
||
|
|
||
|
end
|
||
|
|
||
|
|
||
|
Input/Output Response
|
||
|
|
||
|
FIDE provides several powerful debugging and analyzing tools for
|
||
|
system development. Figure 6, 7, 8 show input/output response
|
||
|
surfaces of the controller defined above, which are obtained by
|
||
|
Analyzer in FIDE.
|
||
|
|
||
|
The output in these three figures is Var_Heater. Figure 6 gives
|
||
|
the result when pressure is 0.00; Figure 7 when 0.50 and Figure 8
|
||
|
when 1.00. We can see that the output Var_Heater becomes larger
|
||
|
when pressure gets smaller. This is what we want because lower
|
||
|
pressure results in lower temperature so larger heater output is
|
||
|
needed.
|
||
|
|
||
|
Figure 9 shows input/output response surface of Var_Cooling. Note
|
||
|
that surface in Figure 9 is opposite to that in Figure 7.
|
||
|
|
||
|
|
||
|
Figure 6 Input/Output Surface of Var_Heater when
|
||
|
Pressure=0.00(Small)
|
||
|
|
||
|
|
||
|
Figure 7 Input/Output Surface of Var_Heater when
|
||
|
Pressure=0.50(Medium)
|
||
|
|
||
|
|
||
|
Figure 8 Input/Output Surface of Var_Heater when
|
||
|
Pressure=1.00(Large)
|
||
|
|
||
|
|
||
|
Figure 9 Input/Output Surface of Var_Cooling when
|
||
|
Pressure=0.50(Medium)
|
||
|
|
||
|
|
||
|
COMMENTS
|
||
|
|
||
|
In a fuzzy logic based control system, we can take many factors
|
||
|
into account when creating the controller, some of these factors
|
||
|
are considered to be noises in a conventional control system and
|
||
|
make controller design a very hard work. Using fuzzy logic, it is
|
||
|
much easier to design a controller with better performance in
|
||
|
this kind of situation.
|
||
|
|
||
|
(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-WindowsTM 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.
|
||
|
|
||
|
|
||
|
FIDE Application Notes Available:
|
||
|
|
||
|
#001
|
||
|
Washing Machine
|
||
|
Decision Making, Determining Wash Time
|
||
|
|
||
|
#002
|
||
|
Automatic Focusing System
|
||
|
Decision Making, Determining Focus
|
||
|
|
||
|
#003
|
||
|
Servo Motor Force Control
|
||
|
Servo Control, Grasping Object
|
||
|
|
||
|
#004
|
||
|
Temperature Control(1)
|
||
|
Process Control, Glass Melting Furnace
|
||
|
|
||
|
#005
|
||
|
Temperature Control(2)
|
||
|
Process Control, Air Conditioner
|
||
|
|
||
|
#006
|
||
|
Temperature Control(3)
|
||
|
Process Control, Reactor
|
||
|
|
||
|
|
||
|
|
||
|
FIDE Application Note 006-920914 Aptronix Inc., 1992
|
||
|
|
||
|
Temperature Control (3)
|
||
|
|
||
|
|
||
|
|
||
|
|
||
|
|
||
|
|
||
|
|
||
|
|
||
|
|