LSR/worker.fcl
2020-06-04 19:21:01 +02:00

59 lines
1.4 KiB
Plaintext

FUNCTION_BLOCK worker
VAR_INPUT
form1: REAL;
form2: REAL;
points: REAL;
END_VAR
VAR_OUTPUT
result: REAL;
END_VAR
FUZZIFY form1
RANGE := (0.000 .. 5.000);
TERM bad := (1,1)(3,0);
TERM avg := (1,0)(2,1)(3,1)(4,0);
TERM great := (3,0)(5,1);
END_FUZZIFY
FUZZIFY form2
RANGE := (0.000 .. 5.000);
TERM bad := (1,1)(3,0);
TERM avg := (1,0)(2,1)(3,1)(4,0);
TERM great := (3,0)(5,1);
END_FUZZIFY
FUZZIFY points
RANGE := (-30.000 .. 30.000);
TERM low := (-20,1)(-5,0);
TERM avg := (-10,0)(-3,1)(3,1)(10,0);
TERM high := (10,0)(20,1);
END_FUZZIFY
DEFUZZIFY result
RANGE := (-1.000 .. 1.000);
TERM home := (-1,1) (0,0);
TERM draw := (-0.5,0) (0,1) (0.5,1);
TERM away := (0,0) (1,1);
METHOD : COG;
// ACCU : MAX;
DEFAULT := 0
END_DEFUZZIFY
RULEBLOCK
AND : MIN;
ACCU : MAX;
ACT : MIN;
RULE 1 : if form1 is great and form2 is bad then result is home
RULE 2 : if form1 is bad and form2 is great then result is away
RULE 3 : if form1 is avg and form2 is avg then result is draw
RULE 4 : if form1 is great and form2 is great and points is low then result is draw
RULE 5 : if form1 is great and form2 is avg and points is avg then result is away
RULE 6 : if form1 is avg and form2 is avg and points is high then result is home
RULE 7 : if form1 is avg and form2 is avg and points is low then result is away
RULE 8 : if points is avg then result is away
END_RULEBLOCK
END_FUNCTION_BLOCK