He pensado que una buena manera de empezar es con unas nociones generales de este lenguaje, puesto que será uno de los idiomas que hablemos aquí. Realmente no es complicado, pese a lo que pueda parecer, en un principio y cuando hablamos de ciertas operaciones con palabras resulta ser la mejor opción.
Hay ciertas diferencias en función de la marca pero los principios son los mismos. En esta primera entrada haré un repaso rápido para ver un poco las posibilidades. Los ejemplos están realizados con PLC CONTROL de beckhoff. Este software es gratuito y esta basado en CoDeSys. Lo podeis descargar desde aquí. Este software cumple la norma IEC 61131-3 de programación. Para este caso he declarado todas las variables como globales.
VAR_GLOBAL
Var1:BOOL;
Var2:BOOL;
OutSerie:BOOL;
OutParalelo:BOOL;
(* Ejemplos marcha paro *)
Pmarcha:BOOL;
Pparo:BOOL;
Motor:BOOL;
(* Ejemplo termostato *)
TempCam1:INT;
SetPoint:INT;
SetPointAlto:INT;
Termostato:BOOL;
(* Ejemplo de media *)
Matriz: ARRAY[0..9] OF INT;
Indice: INT;
i:INT;
Suma:INT;
Valor:INT;
Media:INT;
END_VAR
Red serie:
OutSerie := Var1 AND Var2;
Red paralelo:
OutParalelo := Var1 OR Var2;
Marcha paro con pulsador:
Motor := Pparo AND (Pmarcha OR Motor);
Comparaciones. Una funcion termostato:
Termostato := TempCam > SetPoint AND (TempCam > SetPoint + 20 OR Termostato);
La misma función con IF THEN ELSE
IF TemCam > SetPoint +20 THEN Termostato := TRUE;
IF TemCam < SetPoint THEN Termostato := FALSE;
Media de un valor:
Y aquí empieza a cobrar sentido este lenguaje de programación. Cada ciclo de scan almacenamos el valor actual en una matriz de manera que se mantengan los diez últimos. La media, claro esta, será la suma de todos los elementos de la matriz dividido entre el número de registros.
(* Sumamos 1 al índice para avanzar el registro de la matriz a escribir *)
Indice := Indice +1;
(* es importante poner limites a los índices para evitar un error. Tambien nos sirve para volver al registro 0 de la matriz cundo la recorremos por completo *)
IF Indice < 0 THEN Indice := 0;END_IF;
IF Indice > 9 THEN Indice := 0;END_IF;
(*Asignamos a la matriz el valor actual en el registro actual *)
Matriz[Indice] := Valor;
(* Ponemos a 0 la variable suma para volver a calcular la suma *)
Suma:= 0;
(* Recorremos la matriz para calcular la suma de todos los registros *)
FOR i := 0 TO 9 DO
Suma:= Suma + Matriz[i];
END_FOR;
(* Calculamos la media procurando no dividir nunca el valor 0 *)
IF Suma = 0 THEN Media := 0; ELSE Media:= Suma / 10;END_IF;
Condicional CASE:
(*Ejemplo CASE*)
(* Activar tres resistencias en función de la diferencia entre la temperatura y el setpoint *)
Error := TempCam1 – SetPoint;
IF Error < 0 THEN Error := 0;END_IF;
CASE Error OF
0: Resistencia1:= FALSE;
Resistencia2:= FALSE;
Resistencia3 :=FALSE;
1..3: Resistencia1:= TRUE;
Resistencia2:= FALSE;
Resistencia3 :=FALSE;
4..6: Resistencia1:= TRUE;
Resistencia2:= TRUE;
Resistencia3 :=FALSE;
ELSE; Resistencia1:= TRUE;
Resistencia2:= TRUE;
Resistencia3 :=TRUE;
END_CASE;
Aquí podeis descargar el programa con los ejemplos. Para programar PLC según la norma IEC 61131-3 es importante tener un conocimiento básico de éste.
Un saludo y hasta la próxima. !Ah¡ y espero algún comentario.
Editado 23-Enero.
Aquí dejo una recopilación de manuales.



Hola David!
Muchas felicitaciones por tu Blog, buenísimo tus aportes.
Necesito consultar respecto al programa Graficar Log Trane.
Tienes msn ??
Saludos
Te paso mi correo, un saludo.