blob: 16a4bbd0abe250ea53038fb4e4aab9340e13dc74 (
plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
|
FUNCTION_BLOCK
VAR_INPUT
X: REAL;
END_VAR
VAR_OUTPUT
Ramps: REAL;
Sigmoids: REAL;
ZSShapes: REAL;
Concaves: REAL;
END_VAR
FUZZIFY X
RANGE := (-10.000 .. 10.000);
TERM small := Bell -10.000 5.000 3.000;
TERM medium := Bell 0.000 5.000 3.000;
TERM large := Bell 10.000 5.000 3.000;
END_FUZZIFY
DEFUZZIFY Ramps
RANGE := (0.000 .. 1.000);
TERM b := Ramp 0.600 0.400;
TERM a := Ramp 0.000 0.250;
TERM c := Ramp 0.700 1.000;
METHOD : COGS;
DEFAULT := nan;
END_DEFUZZIFY
DEFUZZIFY Sigmoids
RANGE := (0.020 .. 1.000);
TERM b := Sigmoid 0.500 -30.000;
TERM a := Sigmoid 0.130 30.000;
TERM c := Sigmoid 0.830 30.000;
METHOD : COGS;
DEFAULT := nan;
END_DEFUZZIFY
DEFUZZIFY ZSShapes
RANGE := (0.000 .. 1.000);
TERM b := ZShape 0.300 0.600;
TERM a := SShape 0.000 0.250;
TERM c := SShape 0.700 1.000;
METHOD : COGS;
DEFAULT := nan;
END_DEFUZZIFY
DEFUZZIFY Concaves
RANGE := (0.000 .. 1.000);
TERM b := Concave 0.500 0.400;
TERM a := Concave 0.240 0.250;
TERM c := Concave 0.900 1.000;
METHOD : COGS;
DEFAULT := nan;
END_DEFUZZIFY
RULEBLOCK
RULE 1 : if X is small then Ramps is a and Sigmoids is a and ZSShapes is a and Concaves is a
RULE 2 : if X is medium then Ramps is b and Sigmoids is b and ZSShapes is b and Concaves is b
RULE 3 : if X is large then Ramps is c and Sigmoids is c and ZSShapes is c and Concaves is c
END_RULEBLOCK
END_FUNCTION_BLOCK
|