miércoles, 6 de noviembre de 2013

LENGUAJES DE PROGRAMACIÓN

El tema de hoy va dedicado a los lenguajes de programación que contempla el IEC61131-3, siempre más centrado en los que tienen utilidad dentro de CodeSys. Hoy sólo se trata de una breve introducción en cada uno de los lenguajes de programación, poco a poco iremos ahondando en cada uno de ellos. 
Los lenguajes de programación disponibles son los siguientes:


  Lista de instrucciones (IL o AWL)
(*comentario*): siempre va al final de la línea.
Modificadores
C en JMP, CAL, RET: instrucción sólo se ejecuta si el resultado en la expresión anterior es TRUE.
N en JMPC, CALC, RETC: ídem pero cuando el resultado es FALSE.
N en el resto: negación del operando (no del acumulador).
Operadores
Operador
Modificadores
Significado
LD
N
Establecer resultado actual igual al operando
TE
N
Guardar resultado actual en la posición del operando
S

Ajustar el operando de BOOL en TRUE cuando el resultado es TRUE (set)
R

Reset
AND
N, (
AND por bits
OR
N, (
OR por bits
XOR
(
OR exclusivo por bits
ADD
(
Suma
SUB
(
Resta
MUL
(
Multiplicación
DIV
(
División
GT
(
> (Mayor que)
EQ
(
= (Igual que)
NE
(
<> (Diferente)
LE
(
<= (Menor igual)
LT
(
< (Menor que)
JMP
C, N
Saltar a la marca
CAL
C, N
Llamar a FB
RET
C, N
Volver de la llamada a un FB
)

Evaluar operación de respuesta


v  Texto estructurado (ST)
Instrucciones que se pueden ejecutar de forma condicionada (“IF…THEN…ELSE”) o en bucles secuenciales (WHILE…DO).
Expresiones: construcción que devuelve un valor después de su evaluación.
Evaluación de expresiones: ejecución de los operadores según determinadas reglas de enlace. Los operadores que tengan la misma fuerza se leen de izquierda a derecha.




Operación
Símbolo

Entre paréntesis
(expresión)
Más fuerte
Llamada a funciones
Nombre de la función (lista de parámetros)
Potenciar
**
Negar
-
Formación de complemento
NOT
Multiplicar
*
Dividir
/
Módulo
MOD
Sumar
+
Restar
-
Comparar
<,>,<=,>=
Igualdad
=
Desigualdad
<> 
Bool AND
AND
Bool XOR
XOR
Bool OR
OR
Más débil
      Instrucción (tipo) en ST y ejemplo:
-          Asignación: A:=B; CV:=CV+1; C:=SIN(X);
-          Llamada a un FB y uso de la salida FB:
CMD_TMR (IN:=%(X5,PT:=300);
A:=CMD_TMR.Q;
-          RETURN:                       RETURN
-          IF:                                    IF D:=B*B;
IF D<0.0     THEN C:=A;
ELSEIF D=0.0            THEN C:=B;
ELSE C:=D;
END_IF
-          CASE:                             CASE     INT1OF1:
BOOL:=TRUE; 2:BOOL2:= TRUE;
ELSE BOOL1:=FALSE; BOOL2:=FALSE;
END_CASE
-          FOR:                               FOR J:=10;
FOR I:=1 TO 100 BY 2 DO IF ARR[I]=70 THEN J:=I;
EXIT;
END_IF;
END_FOR:
-          WHILE:                          WHILE J<=100 AND ARR[J]<>70 DO J:=J+2;
END_WHILE
-          REPEAT:                        REPEAT                J:=J+2;
UNTIL J=101 OR ARR[J]=70
                                               END_REPEAT
-          EXIT:                               EXIT;
-          Instrucción vacía:      ;
      Distintas estructuras en lenguaje ST:
-          Operador de asignación: :=
-          Llamada a FB: escribir el nombre de la instancia del FB y asignando a continuación, y entre paréntesis, los valores que desee de los parámetros.
-          Instrucción RETURN: para terminar una función que, por ejemplo, es dependiente de una condición.
-          Instrucción IF: Comprobar condición y ejecutar instrucciones.
-          Instrucción CASE: Reunir varias instrucciones condicionadas con la misma variable de condición en una sola construcción.
-          Bucle FOR: Programar procesos repetidos.
-          Bucle WHILE: Se puede utilizar igual que FOR, con la diferencia de que la condición de cancelación puede ser cualquier expresión BOOL.
-          Bucle REPEAT: Comprueba la condición al final, por lo que se ejecuta al menos una vez.
-          Instrucción EXIT: en el interior de un bucle secuencial lo finaliza, independientemente de la condición de cancelación.
¡EVITAR BUCLE INFINITO! Para ello hay que modificar una condición en la parte de instrucción del bucle secuencial (por ejemplo aumentando o reduciendo el conteo)
Si el número de pasos está claro se recomienda utilizar el bucle FOR.
v  Diagrama secuencial de funciones (SFC o FUP)
Lenguaje orientado a gráficos que permite describir el desarrollo en el tiempo de distintas acciones dentro de un programa. Se compone de una serie de pasos representados por cajas rectangulares conectadas entre sí por líneas verticales, que representan una transición.
v  Diagrama de bloques funcionales (FBD o FBS)
Lenguaje de programación orientado a gráficos. Trabaja con una lista de redes, cada una de las cuales contiene una estructura que representa una expresión lógica o aritmética, la llamada a un FB, un salto o una instrucción Return.
v  Planos de funciones (CFC)
Trabaja con elementos que se pueden colocar donde se desee. Esto permite, por ejemplo, retroacoplamientos.
v  Planos de contactos (LD o KOP)
Lenguaje de programación orientado a gráficos. Se compone de una secuencia de redes.
Una red se limita en los lados izquierdo y derecho con una línea de corriente vertical izquierda y derecha. Entre ellas se encuentra un esquema de conexiones compuesto de contactos, bobinas y líneas de conexión.
El lado izquierdo de cada red está formado por una secuencia de contactos que transmiten de izquierda a derecha el estado de “ON” u “OFF”; que corresponden a los valores de Bool TRUE y FALSE. A cada contacto le corresponde una variable de Bool. Si esta variable es TRUE, el estado se transmite a través de la línea de conexión de izquierda a derecha; de lo contrario, la conexión derecha recibe el valor OFF.
      Contacto
El lado izquierdo de cada red en lenguaje LD está compuesto por una red de contactos que transmiten de izquierda a derecha el estado “ON” u “OFF”, que corresponden a los valores de Bool TRUE y FALSE.
Los contactos pueden estar conectados en paralelo o en serie, correspondiéndose con una conexión eléctrica en paralelo o en serie.
Contacto se representa por ||, y un contacto cerrado (normalmente cerrado) se representa por |/|.
Con un contacto NC el valor de la línea se transmite si la variable es FALSE.
      Bobina
Se encuentran en el lado derecho de una red en lenguaje LD. Sólo se pueden conectar en paralelo. Transmite el valor de las conexiones de izquierda a derecha y lo copia en la variable de Bool correspondiente. En la línea de entrada puede existir el valor ON (TRUE) o el valor OFF (FALSE).
Bobina se representa por ( ), y una bobina negada (normalmente cerrada) por (/). Una bobina NC sólo realiza la conexión cuando la correspondiente variable de Bool es FALSE.
      Bloque de funciones en el plano de contactos
Deben tener en la red una entrada y una salida con valores de Bool y se pueden utilizar en las mismas posiciones que los contactos, es decir, en el lado izquierdo de la red LD.
      Bobinas Set/Reset
Bobina Set (S) no sobreescribe nunca el valor TRUE en la correspondiente variable de Bool, una vez que la variable se haya ajustado en TRUE, permanece invariable.
Bobina Reset (R) no sobreescribe nunca el valor FALSE en la correspondiente variable de Bool, una vez que la variable se haya ajustado en FALSE, permanece sin alterar.

No hay comentarios:

Publicar un comentario