Skip to content

Condições de guarda ​

Uma guarda é uma condição que precisa ser verdadeira para a transição disparar. Ela se soma às exigências normais: mesmo com todas as fichas disponíveis, se a guarda for falsa, nada acontece.

Como se escreve ​

Uma expressão que resulta em verdadeiro ou falso:

#Fila < 3
#Vagas > 0
#Servidor = 0

#NomeDoLugar é a quantidade de fichas naquele lugar naquele instante — não uma média. A guarda é avaliada continuamente, e a transição passa a poder disparar assim que a condição vira verdadeira.

O que dá para comparar ​

OperadorSignifica
> >=maior, maior ou igual
< <=menor, menor ou igual
=igual
!=diferente

E dá para combinar condições:

OperadorSignifica
ANDas duas precisam valer
ORao menos uma precisa valer
NOTinverte

Use parênteses quando misturar:

(#Fila > 0) AND (#Servidor = 0)
(#Vagas > 0) AND NOT (#Manutencao > 0)

Você também pode comparar com um parâmetro, em vez de um número fixo:

#Fila < LIMITE_DA_FILA

Assim o limite vira algo que você consegue variar entre cenários.

Quando usar ​

Condições que envolvem mais de um lugar. É o caso principal. Um arco inibidor observa um lugar só; uma guarda combina quantos você precisar.

(#Fila > 0) AND (#EnergiaOk > 0) AND (#Manutencao = 0)

Limiares que não são "vazio". Disparar só quando a fila passar de um mínimo, por exemplo, para representar processamento em lote:

#Fila >= TAMANHO_DO_LOTE

Escolha entre caminhos. Duas transições saindo do mesmo lugar, com guardas complementares, encaminham as fichas conforme o estado:

transição A:  #Fila > 10      (caminho de sobrecarga)
transição B:  #Fila <= 10     (caminho normal)

Quando não usar ​

Para um limite simples num lugar só, prefira o arco inibidor. Ele dá o mesmo resultado e aparece no desenho — uma guarda fica escondida dentro da transição, e é fácil esquecer que existe ao revisar o modelo. Veja Arcos e inibidores.

Cuidados ​

Guardas complementares precisam cobrir tudo

Se duas transições dividem caminhos por guarda, verifique se toda situação cai em alguma delas. #Fila > 10 e #Fila < 10 deixam o caso = 10 sem saída — e a ficha fica parada para sempre, sem nenhum erro aparecer.

O sintoma é a vazão ficar abaixo do esperado, com fichas acumulando num lugar do meio do modelo.

Guarda não substitui capacidade

Uma guarda impede o disparo, mas não representa espaço ocupado. Se você quer modelar uma sala de espera com 20 lugares, o lugar de capacidade é mais fiel: ele mostra quantas vagas restam, e permite medir a porcentagem de tempo lotado. Veja Limitando capacidade.

Escreva o que você diria em voz alta ​

Uma guarda boa se lê como a regra do negócio:

#Vagas > 0                      "só aceita se tiver vaga"
(#Fila > 0) AND (#Caixa2Aberto > 0)   "só usa o caixa 2 se ele estiver aberto"

Se a expressão ficou difícil de ler, provavelmente o modelo está tentando fazer numa transição o que seria mais claro em duas.