Couldn’t resolve reference to JvmConstructor ‘Engine’
rule " fuzzy logic"
when
Item PMV changed or
Item Temperature_thermistor changed
then
var Number PMV_value=(PMV.state as DecimalType)
var Number Tout_value=(Temperature_thermistor.state as DecimalType)
var Engine engine = new Engine()
engine.setName(“PMV-Controller v3”)
var InputVariable inputVariable1 = new InputVariable();
inputVariable1.setEnabled(true)
inputVariable1.setName(“PMVvalue”)
inputVariable1.setRange(-3.000, 3.000)
inputVariable1.addTerm(new Trapezoid(“NE”, -9.350, -5.150, -2.500, -1.650))
inputVariable1.addTerm(new Trapezoid(“SNE”, -2.850, -1.850, -0.850, -0.150))
inputVariable1.addTerm(new Trapezoid(“ZERO”, -1.350, -0.400, 0.400, 1.350))
inputVariable1.addTerm(new Trapezoid(“SPO”, 0.150, 0.850, 1.850, 2.850))
inputVariable1.addTerm(new Trapezoid(“PO”, 1.650, 2.850, 3.150, 4.350))
engine.addInputVariable(inputVariable1);
var InputVariable inputVariable2 = new InputVariable();
inputVariable2.setEnabled(true);
inputVariable2.setName(“Tout”);
inputVariable2.setRange(0.000, 40.000);
inputVariable2.addTerm(new Trapezoid(“VCOLD”, -9.000, 0.000, 9.000, 15.000));
inputVariable2.addTerm(new Trapezoid(“MCOLD”, 10.000, 13.000, 18.000, 20.000));
inputVariable2.addTerm(new Trapezoid(“OK”, 17.000, 20.000, 24.000, 26.000));
inputVariable2.addTerm(new Trapezoid(“MHOT”, 23.000, 25.000, 28.000, 30.000));
inputVariable2.addTerm(new Trapezoid(“VHOT”, 28.000, 29.000, 40.000, 60.000));
engine.addInputVariable(inputVariable2);
var OutputVariable outputVariable1 = new OutputVariable()
outputVariable1.setEnabled(true)
outputVariable1.setName(“HVACSETPOINTCHANGE”)
outputVariable1.setRange(-3.000, 3.000)
outputVariable1.fuzzyOutput().setAccumulation(new Maximum())
outputVariable1.setDefuzzifier(new Centroid(200))
outputVariable1.setDefaultValue(Double.NaN)
outputVariable1.setLockValidOutput(false)
outputVariable1.setLockOutputRange(false)
outputVariable1.addTerm(new Trapezoid(“NE”, -4.000, -3.000, -2.000, -1.500))
outputVariable1.addTerm(new Trapezoid(“SNE”, -2.000, -1.500, -0.750, 0.000))
outputVariable1.addTerm(new Trapezoid(“ZERO”, -1.000, -0.500, 0.500, 1.000))
outputVariable1.addTerm(new Trapezoid(“SPO”, 0.000, 0.750, 1.500, 2.000))
outputVariable1.addTerm(new Trapezoid(“PO”, 1.500, 2.000, 3.000, 4.000))
engine.addOutputVariable(outputVariable1)
var OutputVariable outputVariable2 = new OutputVariable()
outputVariable2.setEnabled(true)
outputVariable2.setName(“Mechanicalventilationchange”)
outputVariable2.setRange(-100.000, 100.000)
outputVariable2.fuzzyOutput().setAccumulation(new Maximum())
outputVariable2.setDefuzzifier(new Centroid(200))
outputVariable2.setDefaultValue(Double.NaN)
outputVariable2.setLockValidOutput(false)
outputVariable2.setLockOutputRange(false)
outputVariable2.addTerm(new Trapezoid(“NE”, -150.000, -100.000, -80.000, -60.000))
outputVariable2.addTerm(new Trapezoid(“SNE”, -60.000, -50.000, -30.000, -10.000))
outputVariable2.addTerm(new Trapezoid(“ZERO”, -20.000, -10.000, 10.000, 20.000))
outputVariable2.addTerm(new Trapezoid(“SPO”, 10.000, 30.000, 50.000, 60.000))
outputVariable2.addTerm(new Trapezoid(“PO”, 60.000, 80.000, 100.000, 150.000))
engine.addOutputVariable(outputVariable2)
var RuleBlock ruleBlock = new RuleBlock()
ruleBlock.setEnabled(true)
ruleBlock.setName("")
ruleBlock.setConjunction(new Minimum())
ruleBlock.setDisjunction(new Maximum())
ruleBlock.setActivation(new Minimum())
ruleBlock.addRule(Rule.parse(“if PMVvalue is NE and Tout is VCOLD then HVACSETPOINTCHANGE is PO and Mechanicalventilationchange is NE”, engine))
ruleBlock.addRule(Rule.parse(“if PMVvalue is NE and Tout is MCOLD then HVACSETPOINTCHANGE is SPO and Mechanicalventilationchange is SNE”, engine))
ruleBlock.addRule(Rule.parse(“if PMVvalue is NE and Tout is OK then HVACSETPOINTCHANGE is SPO and Mechanicalventilationchange is SPO”, engine))
ruleBlock.addRule(Rule.parse(“if PMVvalue is NE and Tout is MHOT then HVACSETPOINTCHANGE is ZERO and Mechanicalventilationchange is PO”, engine))
ruleBlock.addRule(Rule.parse(“if PMVvalue is NE and Tout is VHOT then HVACSETPOINTCHANGE is ZERO and Mechanicalventilationchange is PO”, engine))
ruleBlock.addRule(Rule.parse(“if PMVvalue is SNE and Tout is VCOLD then HVACSETPOINTCHANGE is SPO and Mechanicalventilationchange is SNE”, engine))
ruleBlock.addRule(Rule.parse(“if PMVvalue is SNE and Tout is MCOLD then HVACSETPOINTCHANGE is SPO and Mechanicalventilationchange is ZERO”, engine))
ruleBlock.addRule(Rule.parse(“if PMVvalue is SNE and Tout is MHOT then HVACSETPOINTCHANGE is ZERO and Mechanicalventilationchange is SPO”, engine))
ruleBlock.addRule(Rule.parse(“if PMVvalue is ZERO then HVACSETPOINTCHANGE is ZERO and Mechanicalventilationchange is ZERO”, engine))
ruleBlock.addRule(Rule.parse(“if PMVvalue is SPO and Tout is VCOLD then HVACSETPOINTCHANGE is ZERO and Mechanicalventilationchange is SPO”, engine))
ruleBlock.addRule(Rule.parse(“if PMVvalue is SPO and Tout is OK then HVACSETPOINTCHANGE is SNE and Mechanicalventilationchange is ZERO”, engine))
ruleBlock.addRule(Rule.parse(“if PMVvalue is SPO and Tout is MHOT then HVACSETPOINTCHANGE is SNE and Mechanicalventilationchange is SNE”, engine))
ruleBlock.addRule(Rule.parse(“if PMVvalue is SPO and Tout is VHOT then HVACSETPOINTCHANGE is NE and Mechanicalventilationchange is NE”, engine))
ruleBlock.addRule(Rule.parse(“if PMVvalue is PO and Tout is VCOLD then HVACSETPOINTCHANGE is NE and Mechanicalventilationchange is PO”, engine))
ruleBlock.addRule(Rule.parse(“if PMVvalue is PO and Tout is MCOLD then HVACSETPOINTCHANGE is SNE and Mechanicalventilationchange is PO”, engine))
ruleBlock.addRule(Rule.parse(“if PMVvalue is PO and Tout is OK then HVACSETPOINTCHANGE is SNE and Mechanicalventilationchange is SNE”, engine))
ruleBlock.addRule(Rule.parse(“if PMVvalue is PO and Tout is MHOT then HVACSETPOINTCHANGE is SNE and Mechanicalventilationchange is NE”, engine))
ruleBlock.addRule(Rule.parse(“if PMVvalue is PO and Tout is VHOT then HVACSETPOINTCHANGE is NE and Mechanicalventilationchange is NE”, engine))
engine.addRuleBlock(ruleBlock)
inputVariable1.setInputValue(PMV_value.doubleValue)
inputVariable2.setInputValue(Tout_value.doubleValue);
engine.process();
postUpdate(HVACSETPOINTCHANGE,Op.str(outputVariable1.getOutputValue()))
postUpdate(Mechanicalventilationchange,Op.str(outputVariable2.getOutputValue()))
end