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 nÆo 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 nÆo 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: impossível definir deslocamento - As respostas fornecidas

são 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 Protótipo 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)) em tabelas ou figura

;os dados estao

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

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

; para selecionar

(slot centro (create-accessor read-write) (visibility public)) selecionar

; para

(slot acionamento (create-accessor read-write) (visibility public)) selecionar

; para

)

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

SISTEMA HIDRAULICO

[ DE USER ]

------------------

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

 

(slot tipoAcionamento (create-accessor read-write) (visibility public)) recabe o tipo de acionamento

;slot que

(slot tipoCentro (create-accessor read-write) (visibility public)) tipo de centro

;slot que recebe o

(slot pressaoOperacao (create-accessor read-write) (visibility public) recebe a pressao de oprecao

;slot que

(type INTEGER)

)

(slot vazaoOperacao (create-accessor read-write) (visibility public) a vazao de oprecao

(type INTEGER)

;slot que recebe

)

;------------------------- 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 operação 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 operação 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

(tipoAcionamento manual)

(tipoCentro ?centro)

)

(object (is-a Bomba)

(name ?bomba)

(podeUsar nao)

qo

(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

(tipoAcionamento manual)

(tipoCentro ?centro)

)

(object (is-a Bomba)

(name ?bomba)

(podeUsar nao)

(tipoBomba ?tp)

qo

(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 utilização

de qualquer outro tipo de valvula nao seria recomendable para

trabalhar com estes valores de pressão e vazão." )

)

(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 utilização

de qualquer outro tipo de valvula nao seria recomendable para

trabalhar com estes valores de pressão e vazão." )

)

(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 utilização

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 esqueça de

clicar

o botao atualizar)" crlf)

(send [Explic] put-textoExplicacao ?te)

(send [Explic] put-tipoBomba ?tb)

(if (eq ?tb "Tamanho da válvula M25 ") then

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

)

(if (eq ?tb "Tamanho da válvula M16 ") then

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

)

(if (eq ?tb "Tamanho da válvula 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 esqueça de clicar

o botao atualizar)" crlf)

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

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

(send [Explic] print-html)

(assert (fim))