Introducción | Básico | Avanzado | Varios GRAFCETs | GEMMA | Implementación | Inicio

Método simplificado de implementación de GRAFCETs

El método general que se ha presentado es muy potente pero implica la creación de programas largos. En muchos casos los programas que hay que hacer son suficientemente sencillos como para que dicho método resulte largo y pesado. Por estos motivos proponemos este segundo método que permite realizar una implementación más sencilla si se cumplen las condiciones de aplicabilidad.

Este método está pensado para el caso de que tengamos un único GRAFCET conexo y que, por tanto, no haya forzados. En el caso de que haya macroetapas, se supone que se han integrado dentro del propio GRAFCET y que, consecuentemente, se puede considerar que no hay. Para que se pueda aplicar el método, todas las receptividades habrán de ser booleanas. En caso de que las receptividades no sean booleanas, puede hacerse un cambio como ya hemos visto.

En el caso de que haya receptividades condicionadas por tiempo, sólo lo serán por el tiempo de activación de la etapa precedente y si hay acciones condicionadas por tiempo, sólo lo serán por el tiempo de activación de la propia etapa. No habrá acciones impulsionales.

No debe haber etapas de duración nula o, dicho de otra manera, todas las situaciones deberán ser estables. Es pues conveniente que el diseñador haga el GRAFCET de tal forma que la receptividad de salida de una etapa no pueda ser cierta antes de su activación, ya sea no permitiendo la activación de la etapa en esta circunstancia o bien saltando la etapa si se da el caso. En caso de que, por error, una etapa haya de tener duración nula, el programa activará la etapa (y sus acciones asociadas) durante un ciclo.

Para describir el método usaremos un ejemplo, concretamente el GRAFCET de la figura que corresponde al automatismo para una puerta de garaje. La relación de entradas y salidas es la siguiente:

Vamos a definir varios vectores de variables booleanas. Vamos a utilizar uno de estos vectores para la situación de actividad de cada etapa. Llamaremos X a este vector; por lo tanto cuando la etapa 4 esté activa, lo estará X[4].

También usaremos otro vector para saber si las receptividades son ciertas o no. Le llamaremos R; por tanto cuando la transición 3 tenga cierta su receptividad, estará activo R[3]. De forma parecida, el vector V tendrá sus componentes activas cuando las transiciones que les correspondan estén validadas.

El vector T contiene el tiempo transcurrido desde la última activación de cada una de las etapas. Los vectores I y Q contienen las entradas (I) y salidas (Q) físicas mientras que los vectores E y S guardan los estados de las entradas (E) y salidas (S) hasta que se acaba un ciclo.

Una vez definidos los bits necesarios, comenzamos el programa de implementación. Se puede consultar también el listado del programa sin los comentarios

Las primeras líneas contienen la inicialización del GRAFCET. Al inicializar hay que activar todas las etapas iniciales y desactivar las otras. También desactivamos todas las salidas.

Para i = 1 hasta long(X) hacer

X[i] = 0

FinPara

X[0] = 1

Para i = 1 hasta long(Q) hacer

S[i] = 0

FinPara

En cada ciclo de programa deben copiarse las entradas físicas sobre el vector de entradas. El ciclo de programa se debe repetir indefinidamente.

Repetir

Para i = 1 hasta long(I) hacer

E[i] = I[i]

FinPara

Seguidamente programamos las desactivaciones de etapas. Cuando una transición es válida y la receptividad correspondiente es cierta se deben desactivar todas las etapas precedentes.

Si (R[0]·V[0]) entonces X[0] = 0 FinSi

Si (R[1]·V[1]) entonces X[1] = 0 FinSi

Si (R[2]·V[2]) entonces X[2] = 0 FinSi

Si ((R[3]·V[3])+ (R[4]·V[4])) entonces X[3] = 0 FinSi

Si (R[5]·V[5]) entonces X[4] = 0 FinSi

Y, a continuación, las activaciones. Cuando una transición es válida y la receptividad es cierta se deben activar todas las etapas posteriores.

Si (R[3]·V[3]) entonces X[0] = 1 FinSi

Si ((R[0]·V[0])+ (R[5]·V[5])) entonces X[1] = 1 FinSi

Si (R[1]·V[1]) entonces X[2] = 1 FinSi

Si (R[2]·V[2]) entonces X[3] = 1 FinSi

Si (R[4]·V[4]) entonces X[4] = 1 FinSi

Continuamos con las condiciones de transición.

R[0] = E[1]

R[1] = E[2]

R[2] = (T[2] > 20)

R[3] = E[3]·(/(E[1]+E[4]))

R[4] = E[1]+E[4]

R[5] = (T[4] > 0.5)

Ahora vamos a validar las transiciones. Una transición es válida cuando todas las etapas inmediatamente anteriores son activas.

V[0] = X[0]

V[1] = X[1]

V[2] = X[2]

V[3] = X[3]

V[4] = X[3]

V[5] = X[4]

Después programaremos las acciones asociadas a las etapas.

S[1] = X[1]

S[2] = X[3]

S[3] = X[1]+X[3]

Para finalizar el ciclo de programa, copiamos las salidas.

Para i = 1 hasta long(Q) hacer

Q[i] = S[i]

FinPara

HastaQue PasoAStop