FUNCTION_BLOCK container_crane (* annex C *) VAR_INPUT distance: REAL; angle: REAL; END_VAR VAR_OUTPUT power: REAL; END_VAR FUZZIFY distance TERM too_far := (-5, 1) ( 0, 0); TERM zero := (-5, 0) ( 0, 1) ( 5,0); TERM close := ( 0, 0) ( 5, 1) (10,0); TERM medium := ( 5, 0) (10, 1) (22,0); TERM far := (10, 0) (22,1); END_FUZZIFY FUZZIFY angle TERM neg_big := (-50, 1) (-5, 0); TERM neg_small := (-50, 0) (-5, 1) ( 0,0); TERM zero := ( -5, 0) ( 0, 1) ( 5,0); TERM pos_small := ( 0, 0) ( 5, 1) (50,0); TERM pos_big := ( 5, 0) (50, 1); END_FUZZIFY DEFUZZIFY power TERM neg_high := -27; TERM neg_medium := -12; TERM zero := 0; TERM pos_medium := 12; TERM pos_high := 27; ACCU: MAX; METHOD : COGS; DEFAULT := 0; END_DEFUZZIFY RULEBLOCK No1 AND : MIN; RULE 1: IF distance IS far AND angle IS zero THEN power IS pos_medium; RULE 2: IF distance IS far AND angle IS neg_small THEN power IS pos_high; RULE 3: IF distance IS far AND angle IS neg_big THEN power IS pos_medium; RULE 4: IF distance IS medium AND angle IS neg_small THEN power IS neg_medium; RULE 5: IF distance IS close AND angle IS pos_small THEN power IS pos_medium; RULE 6: IF distance IS zero AND angle IS zero THEN power IS zero; END_RULEBLOCK END_FUNCTION_BLOCK