Um controlador lógico programável (PLC) é um pequeno computador modular de estado sólido com instruções personalizadas para realizar uma determinada tarefa. Os PLCs, que são usados em sistemas de controle industrial (ICS) para uma grande variedade de indústrias, substituíram em grande parte relés mecânicos, seqüenciadores de tambor e temporizadores de came.
PLCs são ferramentas úteis para processos repetíveis, pois não possuem peças mecânicas e podem reunir informações. Cada unidade processadora central (CPU) faz um loop contínuo através de um scan de entrada, scan de programa, scan de saída e modo Housekeeping, realizando repetitivamente uma única tarefa enquanto monitoriza as condições. As informações que o controlador reúne podem ser usadas como feedback para orientar as alterações e melhorias necessárias nos processos, algumas das quais podem ser realizadas automaticamente de acordo com a codificação do dispositivo.
PLCs ocupam menos espaço, realizam tarefas mais complexas e são mais personalizáveis do que as tecnologias mecânicas que substituíram. Eles são conhecidos por sua capacidade de operar continuamente sem manutenção e tiveram um grande impacto na digitalização de um grande número de indústrias, particularmente a de manufatura. O primeiro CLP, por exemplo, foi inventado por Dick Morley em 1969 para a General Motors e realizado ininterruptamente durante 20 anos antes de ser aposentado.
Linguagens de programação são usadas para codificar CLPs, conforme especificado pela International Electrotechnical Commission (IEC) 61131. Elas são Lógica Ladder, Diagrama de Bloco de Funções (FBD), Texto Estruturado (ST), Lista de Instrução (IL) e Gráfico Sequencial de Funções (SFC). Caso sejam necessárias mudanças significativas de código e a memória do PLC esteja embutida, o controlador pode ser recodificado no lugar. Quando a memória do PLC não está embutida na placa de circuito e são necessárias mudanças significativas de código, a memória pode ser removida de um slot externo do PLC e substituída sem a ajuda de um programador no local.