繁体   English   中英

如何在jess中比较Java类中的两个变量并执行规则?

[英]How to compare two variables from a java class in jess and execute a rule?

我是杰西的初学者。 我正在尝试比较Jess中Java类中的两个变量,并尝试执行一条规则。

我已经从一个名为CurrentSignal的java类中导入了cTNumbermeasuredCurrent (均为整数)。 类似地,导入的vTNumbermeasuredVoltage组成一个Java类DERSignal 现在,我想制定一个规则,如果cTNumber等于vTNumber则将measuredCurrentmeasuredVoltage相乘(均是双measuredVoltage )以计算功率。

我正在尝试这种方式。

(import signals.*)
(deftemplate CurrentSignal (declare (from-class CurrentSignal)))
(deftemplate DERSignal (declare (from-class DERSignal)))

(defglobal ?*CTnumber* = 0)
(defglobal ?*VTnumber* = 0)
(defglobal ?*VTnumberDER* = 0)

(defglobal ?*measuredCurrent* = 0)
(defglobal ?*measuredVoltage* = 0)
(defglobal ?*measuredVoltageDER* = 0)


(defrule Get-CT-Number

   (CurrentSignal (cTNumber ?m)) 
   (CurrentSignal (measuredCurrent ?c))

=>
    (bind ?*measuredCurrent* ?c)
      (printout t "Measured Current : " ?*measuredCurrent*" Amps"crlf)
    (bind ?*CTnumber* ?m)
      (printout t ?*CTnumber* crlf)
)


(defrule Get-DER-Number

   (DERSignal (vTNumber ?o)) 
   (DERSignal (measuredVoltage ?V))

=>
     (bind ?*measuredVoltageDER* ?V)
       (printout t "Measured Voltage : " ?*measuredVoltageDER* " V" crlf)
    (bind ?*VTnumberDER* ?o)
       (printout t ?*VTnumberDER* crlf)
)


(defrule Power-Calculation-DER-signal

    "Power calculation of DER Bay"

    (test (= ?*CTnumber* ?*VTnumberDER* ))
    =>

  (printout t "Total Generation : " (* ?*measuredCurrent* ?*measuredVoltageDER*) crlf)
)

但是Total Generation显示为0。但是我尝试用Java计算并显示了一个数字。 谁能帮我解决这个问题。 谢谢。

为什么不按一条规则完成所有操作?

(defrule Power-Calculation-DER-signal
  (CurrentSignal (cTNumber ?m)(measuredCurrent ?c))
  (DERSignal {vTNumber == ?m} (measuredVoltage ?V))
=>
  (printout t "Total Generation : " (* ?c ?V) crlf)
)

使用全局方法不是一个好主意。 更改不会影响规则。 请参阅有关全局变量的Jess手册。

以后添加

(reset)
(deftemplate CurrentSignal (slot cTNumber)(slot measuredCurrent))
(deftemplate DERSignal (slot vTNumber)(slot measuredVoltage))
(assert (CurrentSignal (cTNumber 12)(measuredCurrent 10)))
(assert (DERSignal (vTNumber 12) (measuredVoltage 13)))

(defrule Power-Calculation-DER-signal
  (CurrentSignal (cTNumber ?m)(measuredCurrent ?c))
  (DERSignal {vTNumber == ?m} (measuredVoltage ?V))
=>
  (printout t "Total Generation : " (* ?c ?V) crlf)
)
(run)

Jess> (batch voltage.clp )
Total Generation : 130
1

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM