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
(* Ejemplos lógica *)
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;
(* Ejemplo CASE *)
Error := INT;
Resistencia1:BOOL;
Resistencia2:BOOL;
Resistencia3:BOOL;
END_VAR
Red serie:
OutSerie := Var1 AND Var2;

1.1. Ejemplo de red serie en leader
Red paralelo:
OutParalelo := Var1 OR Var2;

1.2. Ejemplo red paralelo en leader
Marcha paro con pulsador:
Motor := Pparo AND (Pmarcha OR Motor);

1.3. Ejemplo de secuencia marcha paro en leader
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;

1.4. Ejemplo funcion termostato en leader
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.