首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >如何在jess中比较java类中的两个变量并执行规则?

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

Stack Overflow用户
提问于 2014-06-03 23:19:56
回答 1查看 272关注 0票数 0

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

我已经从一个名为CurrentSignal的java类导入了cTNumbermeasuredCurrent (两者都是整数)。类似地,导入的vTNumbermeasuredVoltage形成java类DERSignal。现在我想制定一条规则,如果cTNumber等于vTNumber,那么乘以measuredCurrentmeasuredVoltage (两者都是双精度)来计算幂。

我正试着用这种方式...

代码语言:javascript
复制
(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)
)

但总世代显示为0。但是我试着用Java计算,结果显示了一个数字。有人能帮我解决这个问题吗?谢谢。

EN

回答 1

Stack Overflow用户

发布于 2014-06-04 00:14:23

为什么你不在一条规则中做所有的事情呢?

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

更改不会影响规则。有关全局变量,请参阅Jess手册。

后来添加了的

代码语言:javascript
复制
(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
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/24018922

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档