Tema
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
| Operador | Significa |
|---|---|
> >= | maior, maior ou igual |
< <= | menor, menor ou igual |
= | igual |
!= | diferente |
E dá para combinar condições:
| Operador | Significa |
|---|---|
AND | as duas precisam valer |
OR | ao menos uma precisa valer |
NOT | inverte |
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_FILAAssim 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_LOTEEscolha 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.