# Grafcet

Grafcet (acrónimo do francês Graphe Fonctionnel de Commande, Étapes Transitions) é uma metodologia que surge com a necessidade do desenvolvimento de programas para controle de processos sequenciais.
Corria o ano de 1977 quando a AFCET ("Association Française pour la Cybernétique Economique et Technique") juntamente com a ADEPA ("Agence nationale pour le Developpement de la Production Automatisée") definiram o Grafcet como uma representação gráfica que traduz a evolução do ciclo de um automatismo sequencial. Mais tarde em 1987 o Grafcet foi adoptado como um standard internacional, pela norma IEC 848. A norma foi substítuida em 2002 pela norma IEC 60848 e foi atualizada em 2013.
É importante observar que, devido à natureza semiformal da IEC 60848, as especificações criadas com Grafcet podem, por vezes, ser interpretadas de maneira ambígua. Embora essas ambiguidades tenham sido parcialmente tratadas na literatura especializada, elas foram resolvidas de diferentes maneiras.
O diagrama funcional Grafcet permite descrever os comportamentos de um automatismo em função das informações que recebe. O Grafcet não pretende minimizar as funções lógicas que representam a dinâmica do sistema, pelo contrario o seu potencial reside na imposição de um funcionamento rigoroso, evitando desta forma incoerências, bloqueios ou conflitos durante o funcionamento do mesmo.
As suas principais características são:
* Claridade, legibilidade e apresentação sintética.
* Oferece uma metodologia de programação estruturada, "Top-Down" (de forma descendente) que permite o desenvolvimento conceptual do geral para o particular.
* Introduz um conceito "tarefa" de forma hierarquizada.
A linguagem de programação denominada por SFC "Sequential Function Chart" é derivada de Grafcet, e apesar de certas diferenças com o padrão Grafcet, muita das vezes o SFC é referido como Grafcet.

## Definições de elementos gráficos

Um Branzelo é um diagrama funcional que descreve graficamente os diferentes comportamentos de um automatismo sequencial e é constituído por:
* Etapas que estão associadas às ações.
* As transições que estão associadas às receptividades.
* Linhas orientadas que ligam as etapas com as transições e as transições com etapas.
Para representar o Grafcet usam-se os seguintes símbolos gráficos:

### Etapa

Uma etapa é definida como a situação do sistema que representa um estado invariante no que diz respeito às entradas e saídas do automatismo. Num determinado momento e de acordo com a evolução do sistema, uma etapa pode estar ativa ou inativa. Diz-se que a etapa está ativa, quando são executadas sobre o processo as tarefas elementares programadas.
Graficamente é simbolizada por um retângulo com uma numeração no seu interior, dando desta maneira uma sequencialidade das etapas representadas. A entrada e a saída de uma etapa aparecem na parte superior e inferior, respectivamente, de cada símbolo.
As etapas podem ser de duas classes:

#### Etapa inicial

No caso de ser uma etapa inicial esta deve activar-se automaticamente no início da execução do algoritmo de controle. Num diagrama Grafcet deve haver pelo menos uma etapa inicial que é representada por um rectângulo de linha dupla.

#### Etapa normal

Encontra-se sempre ligada tanto a uma transição de entrada como de saída. Activa-se quando, estando activa a etapa anterior são cumpridas as condições de transição entre as duas.

### Acção associada à etapa

As acções associadas definem uma acção ou acções elementares a realizar durante uma etapa, por exemplo acender uma lâmpada ou activar um temporizador. As acções associadas a uma etapa apenas podem ser executadas no caso da etapa correspondente estiver activa.
Representam-se graficamente por rectângulos (etiquetas) conectados a etapas correspondentes e situadas à direita das mesmas.
As acções associadas podem ser classificadas como:
* Reais: acções concretas que se produzem no automatismo
** Internas: acções que se produzem no interior do dispositivo de controlo, tais como temporizadores.
** Externas: acções que se produzem sobre o processo em si, tais como abrir/fechar uma válvula ou arrancar/parar um motor.
* Virtuais: não é realizada nenhuma acção sobre o sistema, são utilizadas em situações de espera a que se produzem determinados eventos (activação de determinados sinais) que permitem a evolução do processo
* Incondicionais: acções que se produzem com apenas uma activação da etapa correspondente.
* Condicionais: acções que requerem o cumprimento de uma condição adicional para além da activação da etapa correspondente.
* Continuas: acções cuja execução tem início e fim, respectivamente, com a activação e desactivação da etapa associada.
* Sustentadas: Acções cuja execução é prolongada durante duas ou mais etapas consecutivas.
* Retardadas: Acções cuja execução é iniciada com um tempo de atraso no que diz respeito ao momento de activação da etapa associada. Se o tempo de atraso é maior que a duração da etapa associada, a acção não é executada.
* Limitadas: Acções cuja execução é iniciada com a activação da sua etapa associada, contudo é executada apenas durante um tempo pré-estabelecido. Se o tempo estabelecido é maior que a duração da etapa activa, a execução de este tipo de acções termina com a desactivação da sua etapa associada.
* Pontuais: Acções condicionadas cuja execução está limitada a um tempo de execução muito curto, determinado pelo flanco ascendente ou descendente da condição associada.
* Memorizadas: Acções cuja execução é prolongada durante duas ou mais etapas consecutivas, para o qual são utilizadas as instruções SET e RESET.
* Temporizadas: Quando a condicionante da activação, desactivação ou duração de determinadas acções é a variavel tempo.
* Combinadas: Acções condicionadas cuja execução depende simultaneamente de qualquer das condições simples consideradas anteriormente.
Pode haver diferentes tipos de acções associadas a uma mesma etapa. O estado de activação de uma etapa é indicado graficamente pela colocação de um token no interior da etapa.
O token vai avançando pelas etapas de acordo com a execução do automatismo. Uma etapa não activa pode ser por sua vez activável ou inactivável dependendo se a etapa precedente está activa ou não.

### Transição e receptividade

O conceito da transição esta associado à barreira da zona existente entre duas etapas consecutivas (2) e cuja activação torna possível a evolução lógica do automatismo. A sua representação gráfica consiste numa barra perpendicular à linha orientada associada.
A toda a transição é correspondida uma receptividade, que é a condição lógica necessária para que se execute uma acção da etapa seguinte, se bem que esta será executada sempre que a etapa precedente está activa. A condição lógica vem expressa mediante uma função lógica booleana.
Uma transição tem vários estados:
   * Uma transição pode estar validada ou não validada. Diz-se validada quando todas as etapas de entrada à transição estão activas.
   * Uma Transição diz-se disparada quando, estando validada, a condição (função de receptividade) que lhe está associada é verdadeira.
   * O disparo de uma transição provoca a activação de todas as etapas de saída dessa transição e simultaneamente a desactivação de todas as etapas de entrada da mesma.

#### Transição fonte

Transição que não tem associada etapa de entrada, apenas tem etapas de saída.

#### Transição poço

Transição que não possui etapa de saída. Utiliza-se tipicamente para terminar com uma evolução.

#### Transição temporizada

A evolução do processo está condicionada à variável tempo. A receptividade torna-se verdadeira quando termina o tempo pré-estabelecido no início da temporização.

#### Transição incondicional

A receptividade é sempre verdadeira e desta forma a transição é sempre disparada.

#### Transição com receptividades múltiplas

A receptividade está definida por uma equação lógica em que intervêm várias variáveis.

#### Transição por flancos

Se a transição está validada, a transição é disparada quando na receptividade associada é produzido um flanco ascendente (estado lógico passa de falso para verdadeiro) ou um flanco descendente (estado lógico passa de verdadeiro para falso).

### Ligação orientada (Arco)

Uma ligação orientada ou arco é um segmento de recta que une uma transição com uma etapa ou vice-versa, mas nunca elementos homónimos entre si.

### Traços paralelos

A sua utilização surge com a representação de várias etapas cuja evolução está condicionada pela mesma transição.

## Estruturas do Grafcet
### Estruturas básicas

Permitem a realização de analises do sistema por meio da sua decomposição em sub processos.

### Sequência única vs sequência paralela

* A sequência estará activa, se uma das suas etapas estiver também activa.
* Sequência única de um Grafcet
* Sequência paralela de um Grafcet
* Sequências paralelas são as sequências únicas que são activadas de forma simultânea por uma mesma transição.

### Estruturas lógicas
#### Divergência OR

A divergência OR permite-nos optar, em função das variáveis particulares do processo, por sequências alternativas quando o automatismo assim o exige.
* A etapa n passa a estar activa se, estando activa a etapa n-1 se satisfaz a receptividade da transição a.
* A etapa n+1 passa a estar activa se, estando activa a etapa n-1 se satisfaz a receptividade da transição b.

#### Convergência OR

Utiliza-se na situação de execução simultânea de duas ou mais sequências e se chega a uma mesma etapa.
* A etapa n passa a estar activa se, estando activa a etapa n-1 se satisfaz a receptividade da transição c ou estando activa a etapa n-2 se satisfaz a receptividade da transição d.

#### Divergência AND

Utiliza-se para os casos onde se pretende activar simultaneamente duas ou mais sequências paralelas.
* As etapas n+1 e n+2 passam ao estado activo se, estando activa a etapa n é satisfeita a receptividade da transição f.

#### Convergência AND

Permite a convergência de duas ou mais sequências paralelas.
* A etapa n passa ao estado activo se, estando as etapas n-1 e n-2 activas, é satisfeita a receptividade associada à transição f. No caso contrario, isto é, a variável apresenta nível lógico 1 é prosseguida a sequência normal: n,n+1,n+2, etc.
* Quando são executadas várias sequências simultaneamente contudo com tempos de duração distintos, para se estabelecer a condição de convergência AND torna-se necessário utilizar uma ou várias etapas sem nenhuma acção associada, chamadas etapas de espera.

#### Saltos condicionais

* Saltos condicionais
Para o Grafcet à direita e enquanto a variável D tenha nível lógico 0, as etapas n, n+1, n+2, n+3 serão repetidas.

#### Macro etapa

* Um conjunto de etapas cuja execução pode repetir-se ao longo de um diagrama, o Grafcet permite a sua representação mediante uma macro etapa. Desta forma a so há a necessidade de declarar a sequência uma vez.
* Uma macro etapa é representada por meio de um rectângulo com bordos verticais de traço duplo, contendo no seu interior os números da etapa inicial e final da sequência.

## Regras de evolução

* A dinâmica evolutiva de um Grafcet é dada por um conjunto de regras que nos permitem estabelecer um seguimento dos sinais de token, através do diagrama funcional.
* Uma etapa pode estar activa, inactiva ou activável e a sua evolução é demonstrada pela seguinte figura:
* Regras de evolução
** A etapa inicial é activada de forma incondicional.
** O disparo de uma transição, tem como consequência a activação de a/as etapa(s) seguinte(s) e a inactivação da(s) etapa(s) precedente(s).
** Transições conectadas em paralelo em condições de serem disparadas, são disparadas de forma simultânea se são cumpridas as respectivas condições de disparo.
** Se uma etapa é activada e desactivada simultaneamente, esta permanecerá activada.
** Uma transição é definida como validada se, todas as etapas que a precedem estão activas.
** Uma etapa é definida como activável se, a transição precedente encontra-se validada.
** Uma transição pode se encontrar: validada, não validada e disparada.

## Exemplos práticos
### Máquina de bebidas quentes

Considere uma hipotética máquina automática de venda de bebidas quentes, nomeadamente café e chocolate.
Existem duas ranhuras para moedas e é através da introdução de uma moeda na ranhura apropriada que se escolhe a bebida que pretendida, uma m_cafe para um café e uma m_choc para um chocolate.
Após a introdução da moeda, é necessário ligar o motor que deposita um COPO até que o sensor de copo_presente indique que essa operação está completa. Seguidamente é necessário abrir a válvula do CAFÉ ou CHOCOLATE durante 5 segundos, enchendo assim o copo.
O copo está protegido por uma porta e utiliza-se um TRINCO (actuador impulsional) para abrir a porta. Para assinalar este facto faz-se piscar uma LUZ, que alterna um segundo ligado e outro segundo desligado.
O processo encerra quando o copo desaparece mas a máquina só poderá ser utilizada 10 segundos depois dessa ocorrência.
Para manter as bebidas quentes existem dois sensores chocolate_frio e café_frio que assinalam a necessidade de ligar durante um minuto o sistema AQUECE_CHOC e AQUECE_CAFÉ, respectivamente.
Desenhe um diagrama Grafcet que comande o funcionamento desta máquina.
* «Solução possível do problema» (PDF)

## Referências bibliográficas

* «Le GRAFCET norme NF EN 60848»
* «SFCEDIT : Grafcet Editor»
* «Sistemas Industriais - FEUP» (PDF)
* «Grafcet home page»
* ↑ Mroß, Robin; Schnakenbeck, Aron; Völker, Marcus; Fay, Alexander; Kowalewski, Stefan (12 de setembro de 2023). «Unambiguous Interpretation of IEC 60848 GRAFCET based on a Literature Review». IEEE: 1–8. ISBN 979-8-3503-3991-8. doi:10.1109/ETFA54631.2023.10275504. Consultado em 10 de julho de 2024
* ↑ Julius, Robert; Schürenberg, Max; Schumacher, Frank; Fay, Alexander (julho de 2017). «Transformation of GRAFCET to PLC code including hierarchical structures». Control Engineering Practice (em inglês): 173–194. doi:10.1016/j.conengprac.2017.03.012. Consultado em 10 de julho de 2024