Você está na página 1de 29

;------------------------- SEM PILOTO --------------------------

(defrule analiza_valvulas_solenoide_tabelas

(declare (salience +1))

(object (is-a SistemaHidraulico)

(name [SH])

(pressaoOperacao ?po) ; pressao operacao po

(vazaoOperacao ?qo) ; vazao operacao qo

(tipoAcionamento solenoide)

(tipoCentro ?centro)

(object (is-a Bomba)

(name ?bomba)

(podeUsar nao)

(tipoBomba ?tp)

(pressao ?p1);

(vazao ?q1);

(acionamento solenoide)

(centro ?centrov)

;---- testar tipo de centro---

(test (eq ?centro ?centrov))

;----testar Se a pressao e vazao sao admitidos

(test

(and (< ?po ?p1) (< ?qo ?q1))

)
?f <- (cont ?x)

=>

;determinar parametros maximos de operacao

(send ?bomba put-podeUsar sim) ;seta no objeto da bomba que ela pode ser usada

(retract ?f)

(assert (cont (+ ?x 1)))

(printout t crlf " Tamanho(s) de valvula(s): " ?tp " pt" ?po ?p1 crlf)

(printout t crlf " c = " ?x crlf)

(assert (fim))

;XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
XXX

; ACHO Q NAO PRECISA

;XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
XXXX

;---------------------------------------------------------

;-----------SELECIONAR TIPO DE CENTRO---------------------

(defrule seleciona_deslocamento_fixo
?f <- (selecionar deslocamento)

(not (df)) ;para no repetir

(object (is-a SistemaHidraulico) (variacaoVel nao))

=>

(assert (deslocamento fixo))

(assert (df))

(retract ?f)

(printout t crlf crlf "deslocamento fixo" crlf)

(defrule seleciona_deslocamento_variavel

?f <- (selecionar deslocamento)

(not (dv)) ;para no repetir

(object (is-a SistemaHidraulico) (variacaoVel sim))

=>

(assert (deslocamento variavel))

(assert (dv))

(retract ?f)

(printout t crlf crlf "deslocamento vari vel" crlf)

(defrule conflito_deslocamento

(selecionar deslocamento)

(and (df) (dv))

=>

(printout t crlf crlf "Conflito: impossvel definir deslocamento - As respostas fornecidas

so contraditorias" crlf)
(assert (fim))

-;UNIVERSIDADE FEDERAL DE SANTA CATARINA

;CENTRO TECNOLOGICO
;PROGRAMA DE POS-GRADUACAO EM ENGENHARIA DE PRODUCAO

;MESTRANDO: Diego Paul Mise Cruz

;DISCIPLINA: SISTEMAS ESPECIALISTA

;PROFESOR: Prof. Jonny Carlos da Silva, Dr.

;TITULO DO TRABALHO:

; "Desenvolvimento de um Sistema Especialista Prottipo para

; especificacao da uma valvula hidraulica direccional 4/3. "

;Florianopolis 2016

;XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
XXX

; CLASSES DO SISTEMA

;XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
XXXX

;----------------------- COMPONENDE [ DE USER ] ------------------------

(defclass Componente (is-a USER) ;esta (super)classe define qualquer componente de um


sistema

(slot nome (create-accessor read-write) (visibility public)) ;Nome da valvula (ex:


M10)

(slot descricao (create-accessor read-write) (visibility public)) ;Descricao Opcional

;----------------------- VALVULA [ DE COMPONENTE ] ----------------------


(defclass Bomba (is-a Componente) (role concrete) (pattern-match reactive)

(slot nome (default "Bomba"))

(slot tipoBomba (create-accessor read-write))

(slot deslocamento (create-accessor read-write) (visibility public)) ;(fixo ou variavel)

;(slot pressaoMin (create-accessor read-write) (visibility public))

;(slot pressaoMax (create-accessor read-write) (visibility public))

;(slot vazaoMin (create-accessor read-write) (visibility public))

;(slot vazaoMax (create-accessor read-write) (visibility public))

(slot podeUsar (create-accessor read-write) (visibility public)) ;se a bomba pode ser
utilizada de acordo com a vazao, pressao, desloc...

(slot textoExplicacao (create-accessor read-write) (visibility public))

(slot escolhida (create-accessor read-write) (visibility public)) ; se a bomba foi a


escolhida

;...........novos slots

;...........dados en tabelas

(multislot pressao (create-accessor read-write) (visibility public)

(type INTEGER)

(multislot vazao (create-accessor read-write) (visibility public)

(type INTEGER)

;------ dados requeridos para figuras ------

;------- dados para o ponto 1 [Pi,Qi] -------

(slot pressaoInf (create-accessor read-write) (visibility public)

(type INTEGER))

(slot vazaoInf (create-accessor read-write) (visibility public)

(type INTEGER))

;------- dados para o ponto 1 [Ps,Qs] -------


(slot pressaoSup (create-accessor read-write) (visibility public)

(type INTEGER))

(slot vazaoSup (create-accessor read-write) (visibility public)

(type INTEGER))

(slot dados (create-accessor read-write) (visibility public)) ;os dados estao


em tabelas ou figura

;-----------

(slot prioridade (create-accessor read-write) (visibility public)) ; para selecionar

(slot centro (create-accessor read-write) (visibility public)) ; para


selecionar

(slot acionamento (create-accessor read-write) (visibility public)) ; para


selecionar

;-------------------- SISTEMA HIDRAULICO [ DE USER ] ------------------

(defclass SistemaHidraulico (is-a USER) (role concrete) (pattern-match reactive)

(slot tipoAcionamento (create-accessor read-write) (visibility public)) ;slot que


recabe o tipo de acionamento

(slot tipoCentro (create-accessor read-write) (visibility public)) ;slot que recebe o


tipo de centro

(slot pressaoOperacao (create-accessor read-write) (visibility public) ;slot que


recebe a pressao de oprecao

(type INTEGER)

(slot vazaoOperacao (create-accessor read-write) (visibility public) ;slot que recebe


a vazao de oprecao

(type INTEGER)

)
)

;------------------------- EXPLICACAO [ DE USER ] -----------------------

; classe e responsavel pela apresentacao da esplicacao ao final da execucao (Mecanismo de


Explicacao)

(defclass Explicacao (is-a USER) (role concrete) (pattern-match reactive)

(slot textoExplicacao (create-accessor read-write) (visibility public)) ;texto da


explicacao

(slot imagem (create-accessor read-write) (visibility public)) ;imagem apresentada no


arquivo HTML

(slot tipoBomba (create-accessor read-write) (visibility public)) ;bomba a esplicar

; (slot acumulador (create-accessor read-write) (visibility public)) ;se tem acumulador


ou nao

;---------------------- OBJETOINTERFACE [ DE USER ] -------------------------

(defclass ObjetoInterface (is-a USER) (role concrete)

(slot textoEntrada (create-accessor read-write) (visibility public))

(slot resposta (create-accessor read-write) (visibility public))

;XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
XXX

; REGRAS PARA HTML

;XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
XXXX
(defmessage-handler Explicacao print-html ()

(open "saida.html" out "w")

(printout out

"

<!DOCTYPE HTML PUBLIC \" -//W3C//DTD HTML 3.2//EN \" >

<HTML>

<HEAD>

<TITLE></TITLE>

</HEAD>

<BODY TEXT= \"#000000\" BGCOLOR=\"#FFFFFF\" LINK=\"#0000FF\"


VLINK=\"#9F000F\"ALINK=\"#000000\">

<CENTER>

<H2><FONT COLOR= \"#0000FF\" SIZE=+3>Selecao da Valvula para o Sistema


Hidraulico</FONT>

<BR><FONT COLOR= \"#0000FF\" > Arquivo de Saida</FONT></H2>

</CENTER>

<HR>

<H2>Valvula Selecionada: " ?self:tipoBomba "</H2>

<TABLE BORDER=5 WIDTH= \" 100% \" height=\"211\">

<TR>

<TD WIDTH= \" 30% \"><B>Simbolo</B></TD>

<TD><B>Explicacao</B></TD></TD>

</TR>

<TR>

<TD>

<CENTER>

<CENTER>
<IMG = \" #circuito \" SRC=" ?self:imagem " BORDER =0>

</CENTER>

</TD>

<TD VALIGN=middle>

<P><b>" ?self:textoExplicacao"</b></P>

</TD>

</TR>

</TABLE>

<P>

<P><HR WIDTH= \" 100% \"><p>

<HR>

<P><center><FONT SIZE=-1>Florianopolis - 2016 </FONT></center></P>

</BODY>

</HTML>

"

(close out)

;XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
XXX

; MENSAGENS PARA VALIDAR DADOS

;XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
XXXX

;----------------------- MESSAGE APRESENTAR TEXTO ----------------------


(defmessage-handler ObjetoInterface apresentarTexto () ;apresenta o texto de abertura do
prototipo

(printout t ?self:textoEntrada crlf crlf)

;---------------- MESSAGE VALIDAR DADOS DA PERGUNTA ---------------------

;---------- VERIFICAR SE OS SIMBOLOS INGRESADOS SAO ADMISIVEIS ----------

(defmessage-handler ObjetoInterface ask_question (?question $?allowed-values) ;Retirado do


trabalho do Macelo

(printout t ?question)

(bind ?answer (read))

(if (lexemep ?answer) then (bind ?answer (lowcase ?answer)))

(while (not (member ?answer $?allowed-values)) do

(printout t "----Valor nao permitido, ingrese de novo----" crlf)

(printout t ?question crlf)

(bind ?answer (read))

(if (lexemep ?answer) then (bind ?answer (lowcase ?answer)))

(send ?self put-resposta ?answer)

;------------------- MESSAGE VALIDAR DADOS DA PERGUNTA 2 -------------------

;------------------- VERIFICAR VALOR DENTRO DA FAIXA -------------------

(defmessage-handler ObjetoInterface ask_question2 (?question ?min ?max) ;Retirado do


trabalho do Macelo
(printout t ?question)

(bind ?answer (read))

(if (lexemep ?answer) then (bind ?answer (lowcase ?answer)))

(while (not (and (> ?answer ?min) (< ?answer ?max))) do

(printout t "Erro: ..." crlf"Responda dentro do intervalo:" ?min " - "?max crlf
crlf)

(printout t ?question crlf)

(bind ?answer (read))

(if (lexemep ?answer) then (bind ?answer (lowcase ?answer)))

(send ?self put-resposta ?answer)

;XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
XXX

; MESSAGE PARA INGRESO DE DADOS

;XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
XXXX

(defmessage-handler ObjetoInterface obtenDados () ;faz as perguntas para obter dados sobre


o SH

;------------------------------------- Primeira pergunta / tipo de acionamento ----------------------------

(printout t crlf "......................................................................." crlf)

(send ?self ask_question "Tipo de acionamento de la valvula (m/s) ?

m = manual

s = solenoide
R: " m s)

(if (eq ?self:resposta m) then

(send [SH] put-tipoAcionamento manual)

(if (eq ?self:resposta s) then

(send [SH] put-tipoAcionamento solenoide)

;------------------------------------- Segunda pergunta / variacao vel ----------------------------

(printout t crlf "......................................................................." crlf)

(send ?self ask_question "Tipo de centro da valvula(f/t)?

f - fechado

t - tandem

R: " f t)

(if (eq ?self:resposta f) then

(send [SH] put-tipoCentro fechado)

(if (eq ?self:resposta t) then

(send [SH] put-tipoCentro tandem)

;--------------------------------------Tercera pergunta / pressao -------------------------------

(printout t crlf "......................................................................." crlf)

(send ?self ask_question2 "Qual a pressao de operao da valvula? [10 a 350] (em bar)

R: " 10 350)

(send [SH] put-pressaoOperacao ?self:resposta)


;-------------------------------------- Quarta pergunta / vazao ----------------------------------

(printout t crlf "......................................................................." crlf)

(send ?self ask_question2 "Qual a vazao de operao da valvula (em lpm)?

Recomendacao:

- Acionamento manual [1 a 450] (em lpm)

- Acionamento por solenoide [1 a 1000] (em lpm)

R: " 1 450)

(send [SH] put-vazaoOperacao ?self:resposta)

;)

;XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
XXX

; REGRAS DE CONTROLE EXECUCAO

;XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
XXXX

(defrule aquisicao_informacoes

(initial-fact)

=>

(load-instances bombas.dat)

(send [Interface] apresentarTexto)

(send [Interface] obtenDados)


(assert (fim questoes))

(assert (selecionar deslocamento))

(assert (cont 0))

;XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
XXX

; CRIACAO DOS OBJETOS

;XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
XXXX

(definstances Objetos

(SH of SistemaHidraulico)

(Interface of ObjetoInterface

(textoEntrada "

********************************************************

Sistema Especialista Prototipo para Auxilio para

especificar una valvula direcional 4/3

Diego Mise

Universidade Federal de Santa Catarina - PPEPS

Florianopolis - 2016

********************************************************

")

(resposta 0)

(Explic of Explicacao)

)
;XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
XXX

; REGRAS PARA ESTABELECER VALVULA ADMISIVEIS

;XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
XXXX

;------------------ SELECIONAR TAMANHO DE VALVULA ------------------

;------------------ ACIONAMENTO MANUAL ------------------

;--------------------- CONDICOES EM TABELA ---------------------

(defrule analiza_valvulas_tabelas

(declare (salience +1))

(object (is-a SistemaHidraulico)

(name [SH])

(pressaoOperacao ?po) ; pressao operacao po

(vazaoOperacao ?qo) ; vazao operacao qo

(tipoAcionamento manual)

(tipoCentro ?centro)

(object (is-a Bomba)

(name ?bomba)

(podeUsar nao)
(tipoBomba ?tp)

(pressao ?p1 ?p2 ?p3 ?p4);

(vazao ?q1 ?q2 ?q3 ?q4);

(acionamento manual)

(centro ?centrov)

;---- testar tipo de centro---

(test (eq ?centro ?centrov))

;----testar Se a pressao e vazao sao admitidos

(test

(or

(and (< ?po ?p1) (< ?qo ?q1))

(and (< ?po ?p2) (< ?qo ?q2))

(and (< ?po ?p3) (< ?qo ?q3))

(and (< ?po ?p4) (< ?qo ?q4))

?f <- (cont ?x)

=>

;determinar parametros maximos de operacao

(send ?bomba put-podeUsar sim) ;seta no objeto da bomba que ela pode ser usada

(retract ?f)

(assert (cont (+ ?x 1)))

(printout t crlf " Tamanho(s) de valvula(s): " ?tp " pt" ?po ?p1 crlf)

(printout t crlf " c = " ?x crlf)


)

;------------------ CONDICOES EM GRAFICA ---------------------

(deffunction reta

(?pi ?ps ?qi ?qs ?qo)

(+ (/ (* (- ?qo ?qi)(- ?pi ?ps)) (- ?qs ?qi)) ?ps)

(defrule analiza_valvulas_figuras

(declare (salience +1))

(object (is-a SistemaHidraulico)

(name [SH])

(pressaoOperacao ?po) ; pressao operacao po

(vazaoOperacao ?qo) ; vazao operacao qo

(tipoAcionamento manual)

(tipoCentro ?centro)

(object (is-a Bomba)

(name ?bomba)

(podeUsar nao)

(tipoBomba ?tp)

(pressaoInf ?pi) ; pressaon inferior

(pressaoSup ?ps) ; pressaon superior

(vazaoInf ?qi) ; vazao inferior

(vazaoSup ?qs) ; vazao superior

(acionamento manual)
(centro ?centrov)

(test (eq ?centro ?centrov))

; testar Se a pressao e vazao sao admitidos

(test

(or

(and (< ?po ?pi) (< ?qo ?qi))

(and (< ?po ?ps) (< ?qo ?qi))

(and (< ?po ?pi) (< ?qo ?qs))

(and (< ?po ?ps) (< ?qo ?qs) (< ?po (reta ?pi ?ps ?qi ?qs ?qo)))

?f <- (cont ?x)

=>

(assert (cont (+ ?x 1)))

(send ?bomba put-podeUsar sim) ;seta no objeto da bomba que ela pode ser usada

(retract ?f)

(printout t crlf " Tamanho(s) de valvula(s): " ?tp " pt" ?po ?pi crlf)

(printout t crlf " pmax " (reta ?pi ?ps ?qi ?qs ?qo) crlf)

(printout t crlf " c = " ?x crlf)

;-------------- SELECIONAR TAMANHO DE VALVULA ------------------

;-------------- ACIONAMENTO POR SOLENOIDE ------------------


(defrule analiza_valvulas_solenoide_piloto_tabelas

(declare (salience +1))

(object (is-a SistemaHidraulico)

(name [SH])

(pressaoOperacao ?po) ; pressao operacao po

(vazaoOperacao ?qo) ; vazao operacao qo

(tipoAcionamento solenoide)

(tipoCentro ?centro)

(object (is-a Bomba)

(name ?bomba)

(podeUsar nao)

(tipoBomba ?tp)

(pressao ?p1 ?p2 ?p3 ?p4 ?p5);

(vazao ?q1 ?q2 ?q3 ?q4 ?q5);

(acionamento solenoide)

(centro ?centrov)

;..... Testar tipo de centro

(test (eq ?centro ?centrov))

;..... Testar Se a pressao e vazao sao admitidos

(test

(or

(and (< ?po ?p1) (< ?qo ?q1))

(and (< ?po ?p2) (< ?qo ?q2))

(and (< ?po ?p3) (< ?qo ?q3))


(and (< ?po ?p4) (< ?qo ?q4))

(and (< ?po ?p5) (< ?qo ?q5))

?f <- (cont ?x)

=>

;determinar parametros maximos de operacao

(send ?bomba put-podeUsar sim) ;seta no objeto da bomba que ela pode ser usada

(retract ?f)

(assert (cont (+ ?x 1)))

(printout t crlf " Tamanho(s) de valvula(s): " ?tp " pt" ?po ?p1 crlf)

(printout t crlf " c = " ?x crlf)

(assert (fim))

;XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
XXX

; SE NAO TEM NENHUMA VALVULA ADMISIVEL

;XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
XXXX

;----------Nao tem valvula selecionada

(defrule inicia_segunda_fase
(declare (salience -1))

;(deslocamento ?d)

(cont ?x)

(test (eq ?x 0))

=>

(assert (fim))

(assert (selecionar bomba))

(printout t "NAO TEM VALVULA * " ?x crlf) ;ELIMIAR

; -----explica si nao tem

(defrule nenhuma_bomba_possivel1

(selecionar bomba)

(object (is-a SistemaHidraulico)

(tipoAcionamento ?aciona)

(cont 0)

=>

(assert (nenhuma bomba))

(bind ?t (str-cat "Nenhuma valvula adequa-se as caracteristicas de pressao (" (send


[SH] get-pressaoOperacao) "bar)

e vazao (" (send [SH] get-vazaoOperacao) "lpm) do sistema apresentado, com


acionamento " (send [SH] get-tipoAcionamento)

" e tipo de centro " (send [SH] get-tipoCentro))

(send [Explic] put-textoExplicacao ?t)


(printout t "NAO TE VALVULA **" crlf ) ; ELIMINAR ESTO

;XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
XXX

; REGRAS PARA SELECIONAR A MELHOR VALVULA DAS ADMISIVEIS

;XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
XXXX

;------------------- SE SOMENTE TEM UMA VALVULA ADMISIVEL ---------------

(defrule so_uma_valvula_qualquer ;so uma bomba qualquer

(cont 1)

(object (is-a Bomba)

(name ?bomba)

(tipoBomba ?tb)

(podeUsar sim)

(prioridade 3)

;(acionamento manual)

(centro ?centrov)

(object (is-a SistemaHidraulico)

(name [SH])

(pressaoOperacao ?p)

(vazaoOperacao ?v)

;(tipoAcionamento manual)

(tipoCentro ?centro)
)

;---- testar tipo de centro---

(test (eq ?centro ?centrov))

=>

(send ?bomba put-escolhida sim)

(send ?bomba put-textoExplicacao (str-cat

"Este tamanho recomendavel, adequa-se as caracteristicas de pressao (" (send [SH]


get-pressaoOperacao) "bar),

vazao (" (send [SH] get-vazaoOperacao) "lpm) do sistema. A utilizao

de qualquer outro tipo de valvula nao seria recomendable para

trabalhar com estes valores de presso e vazo." )

(assert (bomba escolhida))

;---------------------- SE TEM DUAS VALVULAS ADMISIVEIS ------------------

(defrule duas_valvulas ;so uma bomba qualquer

(cont 2)

(object (is-a Bomba)

(name ?bomba)

(tipoBomba ?tb)

(podeUsar sim)

(prioridade 2)

(acionamento manual)

(centro ?centrov)

)
(object (is-a SistemaHidraulico)

(name [SH])

(pressaoOperacao ?p)

(vazaoOperacao ?v)

(tipoAcionamento manual)

(tipoCentro ?centro)

;---- testar tipo de centro---

(test (eq ?centro ?centrov))

=>

(send ?bomba put-escolhida sim)

(send ?bomba put-textoExplicacao (str-cat

"Este tamanho recomendavel, adequa-se as caracteristicas de pressao (" (send [SH]


get-pressaoOperacao) "bar),

vazao (" (send [SH] get-vazaoOperacao) "lpm) do sistema. A utilizao

de qualquer outro tipo de valvula nao seria recomendable para

trabalhar com estes valores de presso e vazo." )

(assert (bomba escolhida))

;------------------------ SE TEM TRES VALVULAS ADMISIVEIS ----------------

(defrule tres_valvulas ;so uma bomba qualquer

(cont 3)

(object (is-a Bomba)

(name ?bomba)
(tipoBomba ?tb)

(podeUsar sim)

(prioridade 1)

(acionamento manual)

(centro ?centrov)

(object (is-a SistemaHidraulico)

(name [SH])

(pressaoOperacao ?p)

(vazaoOperacao ?v)

(tipoAcionamento manual)

(tipoCentro ?centro)

;---- testar tipo de centro---

(test (eq ?centro ?centrov))

=>

(send ?bomba put-escolhida sim)

(send ?bomba put-textoExplicacao (str-cat

"Este tamanho recomendavel, adequa-se as caracteristicas de pressao (" (send [SH]


get-pressaoOperacao) "bar) e

vazao (" (send [SH] get-vazaoOperacao) "lpm) do sistema, com acionamento manual e
centro "(send [SH] get-tipoCentro) " . A utilizao

de uma valvula de mayor ficaria sobredimensionada." )

(assert (bomba escolhida))

)
;XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
XXX

; REGRAS PARA ESTABELECER A SAIDA DE DADOS

;XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
XXXX

;--------------------------- SE TEM RESULTADOS ------------------------

(defrule mostrar_resultado

(bomba escolhida)

(object (is-a Bomba)

(name ?bomba)

(tipoBomba ?tb)

(acionamento ?aciona)

(escolhida sim) ; CONDICAO Q DISPARA LA VALVULA SELECIONADA

(textoExplicacao ?te) ; explicacao da seleccao

(centro ?centrov)

=>

(printout t crlf "------------" crlf "Recomenda-se utilizar: " ?tb " com acionamento "
?aciona " e centro " ?centrov crlf)

(printout t ?te crlf crlf "Abra o arquivo saida.htm para mais detalhes (nao esquea de
clicar

o botao atualizar)" crlf)

(send [Explic] put-textoExplicacao ?te)

(send [Explic] put-tipoBomba ?tb)

(if (eq ?tb "Tamanho da vlvula M25 ") then

(send [Explic] put-imagem "m25.jpg")

)
(if (eq ?tb "Tamanho da vlvula M16 ") then

(send [Explic] put-imagem "m16.jpg")

(if (eq ?tb "Tamanho da vlvula M10 ") then

(send [Explic] put-imagem "m10.jpg")

(send [Explic] print-html)

(assert (fim))

;--------------------------- SE NAO TEM RESULTADOS ----------------------

(defrule mostrar_resultado_sem_bomba

(nenhuma bomba)

=>

(printout t crlf "------------" crlf "Nenhuma bomba encontrada" crlf)

(printout t (send [Explic] get-textoExplicacao) crlf crlf "Abra o arquivo saida.htm para
mais detalhes (nao esquea de clicar

o botao atualizar)" crlf)

(send [Explic] put-tipoBomba "nenhuma")

(send [Explic] put-imagem "sembomb.jpg")

(send [Explic] print-html)

(assert (fim))

Você também pode gostar