summaryrefslogtreecommitdiff
path: root/examples/tsukamoto/tsukamoto.fcl
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