Prévia do material em texto
CONTROLADORES LÓGICOS PROGRAMÁVEIS AULA 3 Prof.ª Carla Eduarda Orlando de Moraes de Lara CONVERSA INICIAL Nesta etapa, vamos discutir um assunto extremamente importante quando nos referimos aos controladores lógicos programáveis, a sua programação. Portanto, durante nossos estudos vamos conhecer e analisar as cinco linguagens de programação de CLP padronizadas. Antes de começarmos, precisamos entender como e por que ocorreu essa padronização. Após a criação do CLP, ocorreu uma vasta aplicação desse dispositivo na automação industrial, sendo assim, seu mercado de desenvolvimento e fabricação estava muito aquecido. Várias empresas começaram a fabricar modelos de CLP, porém, cada uma desenvolvia o dispositivo e não existia uma padronização, o que gerava diversos modelos com diferentes formas de programá-los e incompatibilidade entre os sistemas. Além disso, exigia que os usuários tivessem conhecimento de diferentes linguagens e informações sobre cada modelo. Isso gerava diversos problemas, como desperdício de recursos humanos em diferentes treinamentos para entender como utilizar e programar os modelos de CLP, além de, como já mencionado, a existência de incompatibilidade entre os sistemas. Nesse cenário, foi percebida a necessidade de uma padronização desses dispositivos, então, a Comissão Eletromecânica Internacional (do inglês International Electrotechnical Commission – IEC) reuniu uma força-tarefa para criar uma norma que padronizasse o CLP, que é chamada de IEC 61131, e é destinada ao projeto completo do CLP, definindo desde seu hardware até suas especificações e testes, conforme pode ser visto no Quadro 1 a seguir. Nesta etapa, vamos discutir a respeito da terceira parte dessa norma, que é dedicada à padronização das linguagens de programação. Quadro 1 – Norma IEC 61131 Parte Título Parte 1 Informações gerais Parte 2 Requisitos de equipamentos e testes Parte 3 Linguagens de programação Parte 4 Orientações ao usuário Parte 5 Comunicações Parte 6 Comunicação via fieldbus Parte 7 Programação de controle FUZZY Parte 8 Orientações para implementação das linguagens de programação 3 Fonte: Elaborado por Lara, 2022 com base em Silva, 2016. Conforme apresentado e discutindo por Silva (2016), a parte 3 da norma IEC 61131 apresenta e define cinco linguagens de programação que visam cobrir uma variedade de aplicações, sendo essas linguagens divididas entre gráficas e textuais. Ainda, segundo esse mesmo autor, essa padronização culminou em vantagens como: • possibilidade de programação empregando a melhor linguagem para cada parte da planta, conforme suas necessidades; • economia no tempo de processamento; • qualidade na programação, sendo possível empregar todas as linguagens em uma mesma planta. Entre as linguagens gráficas estão o diagrama de blocos funcionais, o sequenciamento gráfico de funções e o diagrama ladder; já entre as textuais se encontram o texto estruturado e a lista de instruções. Cada linguagem tem características próprias e são indicadas para diferentes processos, sendo assim, em cada tópico desta etapa abordaremos uma dessas linguagens. TEMA 1 – TEXTO ESTRUTURADO A linguagem texto estruturado, do inglês structured text (ST), é uma das duas linguagens textuais definidas pela norma IEC 61131-3, conforme já discutimos. Podemos considerar que as instruções sobre o processo serão inseridas no programa de instruções por meio de statements, que são palavras que apresentam significados de funções e sub-rotinas que alterarão variáveis do programa. Outra característica dessa linguagem é que ela é lida de maneira simplificada, com estruturas de laços de repetição, contadores e lógicas condicionais, como if, then e for. A linguagem ST teve origem nas linguagens de programação Pascal e C, e como já mencionado, ela possibilita a utilização de laços condicionais e de iterações, transformando-a em uma boa opção quando se deseja implementar lógicas rápidas e personalizadas dentro de determinada aplicação. Ainda, essa linguagem é considerada a mais robusta entre as cinco padronizadas, isso porque todo programa desenvolvido nas demais linguagens é convertido para ST por meio da compilação. Isso ocorre porque a linguagem ST é muito próxima 4 a da linguagem de máquina, portanto, ela é facilmente compreendida pela unidade central de processamento do CLP. Para compreendermos com mais detalhes essa linguagem, nas próximas subseções vamos discutir seus elementos, suas instruções, além dos seus comandos. 1.1 Elementos característicos do texto estruturado Cada linha do programa de instruções desenvolvido em ST trabalha com expressões formadas por operadores e operandos responsáveis por retornar valores quando executados (Silva, 2016). Quando falamos em elementos, precisamos discutir a respeito de alguns itens como atribuição, expressões, operandos e operadores. Quando desejarmos atribuir valores a uma variável, empregamos o operador “:=”, que pode ser usado tanto para atribuir um valor de uma variável a outra como o retorno de uma função. Na Quadro 2 a seguir, temos alguns exemplos de atribuições. Quadro 2 – Exemplos de atribuições em ST Atribuição Exemplo Atribuindo valor literal a uma variável X:= 25 Atribuindo valor de uma variável a outra variável X:=Y Atribuindo valor de uma operação para uma variável Y:=(X-K*V)/Z Atribuindo valor de uma função para uma variável Z:=MOD(X,Y) Fonte: Lara, 2022. Além da atribuição, a linguagem ST trabalha com expressões, as quais são formadas por operadores e operandos que retornam um valor ao serem executados. Após a execução de uma expressão, o valor atual de uma variável é substituído pelo resultado da avaliação da expressão. Podemos definir uma expressão como uma especificação da variável do lado esquerdo seguida pelo operador de atribuição e pela expressão a ser validada (Silva, 2016). Outra observação importante é que as expressões devem trabalhar com variáveis do mesmo tipo em ambos os lados. Um operando pode ser um endereço, um valor literal, uma variável, ou ainda, uma chamada de função ou bloco funcional (Silva, 2016). Seguindo a mesma regra que mencionamos anteriormente, os tipos de dados dos operandos envolvidos em uma instrução devem ser sempre iguais. 5 Já os operadores pedem um símbolo de operação aritmética, uma operação lógica, ou ainda, uma função a ser executada. Além disso, os operadores são adaptáveis aos tipos de dados dos operandos, bem como são executados seguindo a sequência de prioridade de execução. 1.2 Instruções As instruções podem ser aplicadas em diferentes situações. Nesta seção, vamos discutir duas instruções, sendo elas: • IF...THEN...END_IF; • IF...THEN...ELSE...END_IF. A instrução IF...THEN...END_IF pode ser definida como a determinação para que uma instrução ou um grupo de instruções seja executado caso a expressão booleana que rege a condição estiver em nível lógico alto (verdadeiro). Caso a condição esteja em nível lógico baixo (falso), a instrução ou o grupo não será executado. Nessa situação, a instrução identifica o fim da condição, sendo que a instrução END_IF finaliza a instrução como um todo. Outra possibilidade é a instrução IF...THEN...ELSE...END_IF, na qual existe a instrução ELSE após a instrução. Nesse caso, a instrução IF é executada caso as expressões associadas às instruções anteriores forem verdadeiras, ou, caso sejam falsas, a instrução não será executada. Um exemplo de uso dessa instrução é dado na Figura 1 a seguir, que consiste na implementação de uma partida direta por meio de um CLP. Figura 1 – Chave de partida direta com instrução ELSE Fonte: Elaborada por Lara, 2022 com base em Silva, 2016. 6 1.3 Comando condicional CASE Outra possibilidade de instrução é o comando condicional CASE,que é destinado a expressões que envolvam dados do tipo INT, além de lista de grupo de instruções. Basicamente, podemos descrever o seu funcionamento com a função CASE contendo ações a serem realizadas caso a condição seja atingida, e em alguns casos sendo implementado uma função ELSE dentro dessa instrução para executar ações caso a expressão do CASE não seja atendida. Na Figura 2 a seguir, ilustramos a estrutura do comando condicional CASE. Figura 2 – Comando condicional CASE Fonte: Elaborada por Lara, 2022 com base em Silva, 2016. 1.4 Comando de repetição Quando falamos em comandos de repetição, estamos nos referindo a instruções que possibilitam implementar ações que serão executadas por uma determinada quantidade de vezes, ou então, enquanto alguma condição for atendida. Seguindo esse conceito, vamos discutir a respeito de dois comandos de repetição, sendo eles, FOR...DO e WHILE...DO...END_WHILE. Quanto ao emprego do comando FOR...DO, ele pode ser utilizado sempre que o número de ocorrência pode ser determinado. Nesse caso, uma sequência de instruções é executada até que o comando do valor final END_FOR seja acionado. O número de ocorrência depende do valor inicial, valor final e da variável de controle, sendo que todos devem ser do mesmo tipo. A variável de controle sobre incrementos é de um valor inicial até o final, sendo o padrão o incremento unitário, porém, é possível definir valores de incremento diferentes de 1. O laço é repetido até que a variável de controle assuma o valor final, sendo um exemplo de uso desse comando dado na Figura 3 a seguir. 7 Figura 3 – Comando de repetição FOR...DO Fonte: Elaborada por Lara, 2022 com base em Silva, 2016. Quando a sequência de instruções precisa ser executada repetidamente até que a sua expressão não seja mais verdadeira, é preciso empregar o comando de repetição WHILE...DO...END_WHILE. Portanto, podemos definir o funcionamento desse comando como executar uma sequência de instruções enquanto for atendida determinada condição; a partir do momento que não for mais atendida, ocorre a instrução END_WHILE, que finaliza o laço de repetição. Na Figura 4 a seguir, apresentamos um exemplo de uso do comando WHILE...DO...END_WHILE. Figura 4 – Comando de repetição WHILE...DO...END_WHILE Fonte: Elaborada por Lara, 2022 com base em Silva, 2016. TEMA 2 – DIAGRAMA DE BLOCOS FUNCIONAIS A primeira linguagem de programação de CLP gráfica que estudaremos é o diagrama de blocos funcionais, do inglês functional block diagram (FBD). Essa linguagem é semelhante à eletrônica digital, por isso, acaba sendo a preferida dos profissionais com experiência em eletrônica. Outro fato interessante é que os blocos funcionais também existem e são utilizados dentro das demais linguagens de programação de CLP, como a linguagem ladder. Essa linguagem faz uso de diagramas de circuitos que representam blocos e são interconectados por linhas de fluxo de sinal, formando assim o programa de instruções. Ainda, podemos definir um bloco como um elemento que apresenta entradas, realiza um processamento específico, e então realiza a alteração das saídas com o resultado obtido (Silva, 2016). Basicamente, 8 podemos dividir os blocos em dois tipos, sendo estes funções e blocos funcionais. As funções executam suas ações e encerram a execução, não sendo mantida nenhuma informação além do resultado da saída. Além disso, as funções podem ser provenientes do sistema, como os temporizadores e contados, ou então implementadas pelo usuário. Já os blocos funcionais têm como característica permanência de dados, sendo necessário especificá-los, e ainda, podem conter diferentes ciclos de execução. Conforme discutido por Silva (2016), o uso da linguagem FBD agrega diversos benefícios como simplificação da representação do programa, facilidade na depuração do aplicativo e redução no número de códigos gerados. Ademais, as saídas de um bloco funcional podem ser conectadas às entradas de outros blocos funcionais, sendo cada ligação responsável por indicar que determinado parâmetro de entrada de um bloco obtém o valor de um parâmetro específico da saída do bloco anterior. Para desenvolver programas na linguagem FBD, é necessário seguir algumas regras, que são: • acesso externo apenas aos parâmetros de entrada e de saída do bloco; • execução do bloco, em caso de este fazer parte de uma rede de blocos; • as instâncias de um bloco funcional podem ser empregadas na definição de outros blocos e programas; • as instâncias de um bloco funcional declarado como global são acessíveis em qualquer parte do recurso ou configuração (Silva, 2016). Nas seções a seguir, vamos discutir os blocos funcionais padrões que existem nos CLPs e as funções elementares. Além disso, finalizaremos nosso tópico analisando um exemplo de programa de instruções desenvolvido na linguagem FBD. 2.1 Bloco funcional padrão Quando falamos em bloco funcional padrão, estamos nos referindo a elementos que os fabricantes de CLPs criam agrupando em bibliotecas que acompanham os softwares. Esses blocos são básicos e destinados a programação de lógicas e algoritmos mais complexos. Além desses blocos considerados padrões, o usuário também poderá criar blocos funcionais, que 9 serão armazenados em uma outra biblioteca. Embora exista a possibilidade de criação de blocos, é recomendado que sejam utilizados os blocos padrões da norma IEC 61131-3, para ter uma maior facilidade em caso de portabilidade. Os primeiros blocos funcionais padronizados que vamos discutir são os blocos set e reset, que também são chamados de “blocos biestáveis”, que são utilizados como memórias SR e RS, respectivamente. Uma representação para o bloco set pode ser verificada na Figura 5 a seguir. Nesse bloco, a função set domina, ou seja, se os sinais de set e reset são ambos verdadeiros em suas entradas (S1 e R), a saída Q1 será verdadeira. Ainda, na Figura 5, podemos observar uma representação do bloco set por meio de blocos lógicos. Figura 5 – Representação para o bloco set Fonte: Elaborada por Lara, 2022 com base em Moraes, 2015. Já para o bloco reset, temos uma representação dada na Figura 6 a seguir. Nesse bloco, a função que domina é a reset, ou seja, se os sinais de set e reset são ambos verdadeiros em suas entradas (S e R1), a saída Q1 será falsa. Ainda, na Figura 6, podemos observar uma representação do bloco reset por meio de blocos lógicos. Figura 6 – Representação para o bloco reset Fonte: Elaborada por Lara, 2022 com base em Moraes, 2015. Ainda, conforme estudamos em momento anterior, existem os blocos de contagem e de temporização. Nos blocos de contadores, a saída será do tipo bit para contagem, enquanto nos blocos temporizadores a saída será do tipo bit para tempo. Como já discutimos anteriormente sobre os tipos de contadores e de temporizadores, nesta etapa abordaremos apenas suas representações 10 dentro da linguagem FBD. Sendo assim, na Figura 7 a seguir trazemos as representações para os blocos contadores padrões e, na Figura 8, as representações para os temporizadores padrões. O bloco contador crescente (CTU) é apresentado na Figura 7 (a) e o contador decrescente é apresentado na Figura 7 (b). Além disso, o bloco temporizador com atraso na ligação (TON) é apresentado na Figura 8 (a) e o bloco temporizador com atraso no desligamento (TOF) é apresentado na Figura 8 (b). Figura 7 – Representação para os blocos contadores Fonte: Elaborada por Lara, 2022 com base em Silva, 2016. Figura 8 – Representação para os blocos temporizadores Fonte: Elaborada por Lara, 2022 com base em Silva, 2016. 2.2 Função elementar Conforme já discutimos, as funções elementares não apresentam estados internos, sendo assim, os valores de entrada são os mesmos e o valor de saída também será o mesmo todavez que a função for executada. Graficamente, uma função elementar é representada por um bloco com entradas e saídas, sendo que as entradas serão sempre representadas à esquerda, enquanto as saídas 11 sempre ficarão à direita do bloco. Além disso, o nome da função, que também indicará seu tipo, é apresentado no centro do bloco. Ainda, o número de execução será apresentado à direita do tipo de função. As funções elementares mais comuns para os CLPs são as operações lógicas, como as lógicas AND, OR, NOT e XOR, que também estudamos em momento anterior. As funções lógicas AND e NOR estão representadas a seguir na Figura 9 (a) e (b), respectivamente. Já as funções lógicas OR e XOR são apresentadas na Figura 10 (a) e (b), respectivamente. Figura 9 – Representação para as funções AND e NOT Fonte: Elaborada por Lara, 2022 com base em Silva, 2016. Figura 10 – Representação para as funções OR e XOR Fonte: Elaborada por Lara, 2022 com base em Silva, 2016. 2.3 Exemplo de programa empregando FBD O exemplo de programa de instruções desenvolvido na linguagem FBD que estudaremos se trata da chave de partida direta de um motor elétrico empregado no acionamento de uma esteira. O motor é ligado pelo botão B1 e desligado pelo botão B0, além de que o sistema conta com proteção térmica do relé térmico RT1. O sistema apresenta sinalização para o funcionamento do motor; a lâmpada L1 indica que o motor está desligado e a lâmpada L2 indica motor ligado. O motor é acionado pelo contator C1. O FBD para a chave de 12 partida direta pode ser observado na Figura 11 a seguir, que ilustra a conexão dos blocos de funções para formar a lógica de acionamento. Figura 11 – FDB da chave de partida direta Fonte: Elaborada por Lara, 2022 com base em Silva, 2016. TEMA 3 – LISTA DE INSTRUÇÕES A outra linguagem textual definida pela norma IEC 61131-3 é a lista de instruções, do inglês instruction list (IL). Essa linguagem faz uso de mnemônicas para a construção das instruções do programa que comandará os processos no CLP. Além disso, é considerada semelhante à linguagem de máquina, portanto, é muito eficiente. Outra característica dessa linguagem é que ela é semelhante à linguagem Assembly. Em razão das características já mencionadas, essa linguagem é preferida por profissionais que tenham experiência com linguagens de programação. A linguagem IL faz uso de instruções que são inseridas de modo a construir a sequência de operações do programa de instruções. Cada instrução começa em uma linha do código, e deve conter um operador com modificadores opcionais (Silva, 2016). Ainda, é possível inserir um ou mais operando separados por vírgulas, os quais serão empregados no uso de funções ou blocos de funções. Cada linha deve conter uma estrutura formada por rótulo, operador e modificador 13 operando e comentário, nessa sequência, sendo uma representação dessa configuração dada na Figura 12 a seguir. Figura 12 – Configuração de uma linha de instrução em IL Fonte: Lara, 2022. Entre as instruções mais comuns, estão a load (LD) e a store (ST), responsáveis por carregar um operando para o acumulador e por armazenar o conteúdo do acumulador no local especificado pelo operando, respectivamente. As funções e os blocos de funções podem ser inseridos no código por meio da chamada desses elementos pelo nome, conforme podemos observar no exemplo disposto na Figura 13 a seguir, que ilustra um bloco temporizador sendo inserido no código. Figura 13 – Exemplo de chamada de bloco temporizador em IL Fonte: Elaborada por Lara, 2022 com base em Silva, 2016. Retomando o conceito das mnemônicas utilizadas na linguagem IL, estas representam os operadores, que podem ter modificadores, em alguns casos. Os modificadores influenciarão na execução dos operadores, por exemplo, é possível tornar inverso um operador empregando o modificador N. No Quadro 3 a seguir, são apresentados os principais operadores, relacionando estes com seus modificadores (caso existam) e seu significado. 14 Tabela 3 – Exemplos de mnemônicas empregadas na IL Operador Modificador Significado LD N Carrega operando no acumulador ST N Guarda o resultado no operando S Seta operando para 1 R Reseta operando para 0 AND N, ( Lógica E OR N, ( Lógica OU XOR N, ( Lógica OU exclusivo NOT N, ( Lógica negativa ADD ( Adição SUB ( Subtração MUL ( Multiplicação DIV ( Divisão MOD ( Módulo da divisão GT ( Maior que: > GE ( Maior que ou igual: >= EQ ( Igual: = NE ( Diferente: ≠ LE ( Menor que ou igual: <= LT ( Menor que: < CAL C, N Chamada de bloco funcional RET C, N Retorno de função ou floco funcional ) Executa o último operador adiado Fonte: Lara, 2022. Ainda falando sobre os modificadores, eles podem ser tipo: N, C e “(“. Caso seja N, ele servirá para inverter o valor do operando ou negar um valor, pode ser empregado por exemplo juntamente com os operadores AND e OR para gerar as funções lógicas NAND e NOR. O modificador C tem como função dar uma condição, portanto, sempre que se desejar condicionar algum operador é preciso utilizá-lo. Caso sejam combinados os modificadores C e N (CN), a instrução será executada somente se o valor do acumulador for um booleano falso. Por fim, o parêntese é empregado quando se deseja mover a avaliação do operando (Silva, 2016). Além de todos os conceitos que abordamos a respeito da linguagem IL, temos que discutir a respeito da inserção de comentários no código, que são fundamentais para futuras alterações dele, principalmente se estas não forem realizadas pelo desenvolvedor inicial do código. Para inserir comentário na linguagem IL, é preciso começá-los com a sequência de caracteres “(*” e finalizar com a sequência “*)”, por exemplo, (*comentários*). 15 3.1 Exemplo de programa em IL A fim de entendermos melhor a implementação de programas de instrução na linguagem IL, vamos analisar um exemplo prático. Nosso exemplo consiste em uma esteira comandada por um motor elétrico, M1, que é ligado pela botoeira B1 e desligado pela botoeira B0. Além disso, os circuitos contam com um relé térmico para proteção (RT1) e a sinalização dada pelas lâmpadas L1 (indicando motor desligado) e L2 (indicando motor ligado). O acionamento de M1 fará com que a esteira seja movimentada, portanto, foi implementada uma chave de partida direta para acionar M1, o que é comum com motores de baixa potência (Silva, 2016). Os diagramas de força e de comando são apresentados na Figura 14 a seguir, que representam as ligações realizadas por meio de comandos elétricos implementados com os componentes eletromecânicos. Figura 14 – Diagramas de força e comando da chave de partida direta Fonte: Elaborada por Lara, 2022 com base em Silva, 2016. 16 Caso o acionamento do motor seja implementado por meio de um CLP, este poderá ser controlador por meio de um programa de instruções, que é apresentado na linguagem IL por meio do código dado na Figura 15 a seguir. Figura 15 – Programa de instruções para chave de partida direta em IL Fonte: Elaborada por Lara, 2022 com base em Silva, 2016. Como podemos observar, o programa apresentado na Figura 15 anterior é equivalente aos circuitos de força e comando apresentados precedentemente. Ainda, como o código é comentado, podemos verificar o que cada instrução realiza. TEMA 4 – SEQUENCIAMENTO GRÁFICO DE FUNÇÕES A segunda linguagem de programação de CLPs gráfica que estudaremos nesta etapa é o sequenciamento gráfico de funções, do inglês sequential flow chart (SFC), que pode ser definida como um método gráfico estruturado para o desenvolvimento de programas de instruções para controle sequencial ou dependentes de tempo, empregando uma sequência de etapas e transições (Silva, 2016). Outra informação importante a respeito da linguagem SFC é que ela teve comobase as redes Petri e o Graphe Fountionnel de Command Etape-Transition (Grafcet), por isso, também é comumente chamada de Grafcet. Além disso, é uma das linguagens de programação aceitas pela maioria dos CLPs. Entre as características do SFC, se configuram a facilidade de interpretação, a modelagem do sequenciamento e a modelagem de funções (Silva, 2016). Conforme abordado por Moraes (2015), a linguagem SFC é formada por passos, transições, arcos, ações qualificadas e expressões booleanas, além de ser graficamente desenhada na vertical. Cada passo caracteriza um estado particular do sistema descrito e é simbolizado por um retângulo. Já a transição é 17 o elemento que existe entre os passos, e está vinculada a uma condição, que caso seja satisfeita avança de um passo para o próximo. Quando analisamos o comportamento sequencial, este tem como objetivos: • descrever o comportamento sequencial de um sistema; • apresentar linguagem de estruturação de ações de um programa segundo um modelo top-down; • descrever o comportamento de baixo nível de um processo sequencial; • representar um processo de comunicação de dados; • ser aplicado na estruturação de programas, não importando a linguagem (Silva, 2016). Agora que já contextualizamos essa linguagem, vamos abordar nas seções a seguir os detalhes dela, como os elementos estruturais e as regras de evolução para o SFC, além de um exemplo de programa de instrução desenvolvido nessa linguagem, que é responsável pela implementação do controle de uma chave de partida direta, ou seja, o mesmo exemplo que estamos estudando nas demais linguagens abordadas nesta etapa. 4.1 Elementos estruturais do SFC De acordo com o que já discutimos, o SFC faz uso de elementos para criar a programa de controle, sendo assim, esses elementos são chamados de “elementos estruturais”. Nesse cenário, passaremos agora a analisar cada um deles de forma detalhada, com a intenção de entender como se relacionam e formam os programas de controle. No Quadro 4 a seguir, abordamos as simbologias adotadas para os elementos estruturais. 18 Tabela 4 – Símbolos gráficos dos elementos do SFC Fonte: Elaborada por Lara, 2022 com base em Silva, 2016. O passo representa um possível estado operacional do sistema, contendo um nome e sendo representado por um retângulo. Ainda, quando um passo se encontra ativo, ele é assinalado por meio de uma marca, chamada de token. Um passo se torna ativo quando a transição do passo anterior é satisfeita, fazendo com que o programa avance para o passo atual. Seguindo essa mesma lógica, podemos dizer que esse mesmo passo será desativado quando a transição para o próximo passo for satisfeita. Além disso, a cada passo podem ser associados blocos de ações, ou ainda, nenhuma ação, sendo nesse caso chamado de “passo de espera”. Cada passo recebe um único nome e deve aparecer apenas uma vez no diagrama do SFC. O passo inicial tem uma simbologia diferente, conforme mostrado no Quadro 4 anterior. A cada passo são designadas uma ou mais ações, caso não seja um passo de passo de espera. Essas ações são listadas em uma etiqueta retangular à direta do símbolo do passo, além disso, elas podem ser de diferentes tipos padronizados, chamados de “qualificadores de ações”. Os qualificadores de ações definidos pela norma IEC 61131-3 são apresentados no Quadro 5 a 19 seguir. Os qualificadores influenciam a ordem em que as diferentes ações designadas em um mesmo passo serão executadas. Tabela 5 – Qualificadores de ações Qualificador Descrição N Ação simples S/R Ação de set/reset L Ação com tempo limitado D Ação de entrada retardada SD Ação de entrada com retardo prefixado P Ação pulsada DS Ação retardada e setada SL Ação setada com tempo limitado Fonte: Lara, 2022. A transição é representada graficamente pela barra que corta a ligação entre dois passos sucessivos (conforme pode ser observado no Quadro 4 anterior), simbolizando uma barreira que precisa ser alcançada para que a execução do programa avance do passo atual para o próximo. A cada transição, podem ser atribuídas uma ou mais condições, e a execução só avança de um passo para outro quando são satisfeitas todas as condições associadas àquela transição. 4.2 Regras de evolução do SFC Quando falamos em regras de evolução do SFC, estamos nos referindo à dinâmica envolvida na execução e no trânsito de informações no diagrama. Em outras palavras, estamos nos referindo à forma e às regras que governam a localização e o trânsito da execução. A seguir, vamos discutir a respeito dessas regras conforme abordado por Moraes (2015). • Simultaneidade: é empregada quando vários passos procedem ou sucedem uma mesma transição, sendo necessário utilizar duas linhas em paralelo para representar na conexão. • OU divergente: duas transições são saídas de um mesmo passo, sem simultaneidade. • OU convergente: duas transições têm passos distintos de entrada e um mesmo passo de saída. • E divergente: a transição é sucedida por dois ou mais passos e existe um traço duplo de simultaneidade. 20 • E convergente: a transição é precedida por dois ou mais passos, sendo marcada com um traço duplo de simultaneidade. Quando desenvolvemos um diagrama em SFC, precisamos nos atentar a essas características, pois, conforme discutimos, elas influenciarão a ordem de execução dos passos. 4.3 Exemplo de programa em SFC De acordo com o que já havíamos mencionado, nosso exemplo de programa de instrução em SFC consiste na chave de partida direta, sendo que o sistema apresenta o mesmo diagrama de força e comando que foi apresentado na Figura 14 anterior. Os componentes do sistema são os mesmos dos exemplos dos tópicos anteriores, aqui só mudaremos a linguagem empregada no programa de instruções. Portanto, na Figura 16 a seguir é apresentado o programa em SFC desenvolvido para a chave de partida direta. Figura 16 – Diagrama em SFC para a chave de partida direta Fonte: Elaborada por Lara, 2022 com base em Silva, 2016. 21 TEMA 5 – LINGUAGEM LADDER Neste tópico, estudaremos a linguagem de programação de CLP mais utilizada, considerada pela norma IEC 61131-3 como uma linguagem gráfica chamada de “linguagem ladder”, ou ainda, “diagrama ladder”. De acordo com Silva (2016), essa linguagem foi a primeira a ser utilizada pelos fabricantes, além de ser a mais aceita pelos programadores de CLP ao redor do mundo. Ainda, temos que essa linguagem está presente em praticamente todos os CLPs disponíveis no mercado de tecnologia para automação industrial. Mas afinal, o que fez dessa linguagem a preferida e mais utilizada na programação de CLP? Para responder a essa pergunta, precisamos refletir sobre dois aspectos importantes: em primeiro lugar, é o fato dessa linguagem ser muito semelhante à lógica de comandos elétricos, por contar com praticamente os mesmos elementos, mudando apenas a forma como os representamos; o segundo fato é o de que o CLP substituiu os painéis eletromecânicos em diversas aplicações, e as lógicas de comandos destes empregava comandos elétricos. Portanto, considerando que essa linguagem é muito parecida com os diagramas de força e comandos que já eram empregados, ela se tornou a preferida dos programadores por ser possível aproveitar sua experiência com o desenvolvimento das lógicas de comandos. O diagrama desenvolvido em ladder é formado de três componentes principais: contatos, bobinas e blocos de funções. Os contatos podem ser de dois tipos, o normalmente fechado (NA) e o normalmente aberto (NA), sendo estes associados às entradas ou às saídas do CLP conforme a lógica de acionamento. Já as bobinas são associadas sempre às saídas do CLP. Os blocos de funções apresentam as configurações já estudadas anteriormente, e são inseridos para otimizar e tornar as operações mais fáceisdentro da lógica desenvolvida em ladder. A simbologia adotada para os elementos do ladder é apresentada na Figura 17 a seguir; além disso, nessa mesma figura é feito uma analogia entre eles e os elementos empregados em comandos elétricos. Como podemos observar na Figura 17 a seguir, os elementos são os mesmos, porém, sua simbologia é diferente. Isso se deve também ao fato de os diagramas em comandos serem desenvolvidos na vertical e de cima para baixo. Já um diagrama em ladder é formado por duas linhas de alimentação verticais unidas por linhas de código empregando os elementos da Figura 17 em um 22 arranjo horizontal. Esse formato do diagrama inclusive está relacionado a seu nome, pois a palavra ladder é significa “escada” em inglês, por isso, essa linguagem recebeu esse nome, pois o diagrama é semelhante a uma escada, sendo cada degrau correspondente a uma linha do código. Os contatos NA têm seu estado natural normalmente aberto, e quando a variável associada a eles é acionada, ou seja, passa a ter nível lógico alto, eles são acionados também, mudando seu estado original para normalmente fechados. Já um contato NF tem seu estado natural como fechado, e quando o elemento associado a ele é energizado, ele se abrirá. As bobinas são sempre o último elemento da linha, além disso, são sempre associadas às saídas do CLP, portanto, para energizar uma determinada saída é necessário energizar a bobina associada a ela. Figura 17 – Simbologia dos elementos em ladder e em comandos elétricos Fonte: Lara, 2022. Além da bobina apresentada na Figura 17 anterior, temos outros dois tipos de bobinas que podem ser empregadas nos diagramas desenvolvidos em ladder, chamadas de bobinas de set e reset. A bobina de set tem como função acionar a saída em que ela foi associada; já a bobina de reset tem como função desligar a saída a ela associada. Essas bobinas diferentes, chamadas de “bobinas biestáveis”, tem a simbologia ilustrada na Figura 18 (a) a seguir. 23 Figura 18 – Simbologia das bobinas de set/reset e exemplo de uso Fonte: Lara, 2022. Ainda analisando a Figura 18 anterior, temos um exemplo de uso das bobinas dado na Figura 18 (b), sendo a entrada I.1 responsável por “setar” a saída Q.0, enquanto a entrada I.0 é responsável por resetar essa mesma saída. Quando empregamos bobinas de set e reset, é sempre importante inserir inicialmente no código a bobina de set e, na sequência, a bobina de reset. Além disso, cada bobina associada à saída somente pode aparecer uma vez no código, e isso também se aplica a bobinas comuns. Outro fato a ser considerado no desenvolvimento de diagramas em ladder é a associação de contados, pois, por meio dessas associações, podemos implementar condições de acionamentos, por exemplo, as operações lógicas que já estudamos. As bobinas podem ser acionadas apenas em paralelo, ou seja, jamais podemos associar duas bobinas em série, pois cada linha do diagrama deve ter apenas uma bobina. Além de tudo o que já discutimos a respeito da linguagem ladder, precisamos entender como são feitos os endereçamentos e como funcionam os blocos funcionais dentro dessa linguagem. Nas seções a seguir, abordaremos esses conceitos. 5.1 Endereçamento Cada instrução, seja ela de entrada ou de saída do CLP, precisa estar associada a um endereço, que indica sua localização na memória do equipamento. Cada símbolo empregado no diagrama (seja contatos NA, NF ou bobinas) é associado a um operando, que pode ser identificado por letra, número ou nome. A norma IEC 61131 não especifica essa identificação, que muda de fabricante para fabricante, portanto, é necessário consultar o manual do CLP a 24 ser utilizado. O que temos definido na norma é que as entradas serão associadas à letra I; as saídas, à letra Q, e as memórias, à letra M. Na Figura 19 a seguir, apresentamos um exemplo de endereçamento de um CLP. Figura 19 – Exemplo de representação de endereços de um CLP Fonte: Lara, 2022. Analisando a Figura 19 anterior, o modelo de CLP representado tem como entradas I1, I2, I3 e I4; já para saídas, temos Q0, Q1, Q2 e Q3. A quantidade de entradas e saídas depende do tamanho do CLP, conforme estudado em momento anterior. Além disso, as memórias são utilizadas apenas no diagrama ladder, não sendo representadas no CLP. Para o exemplo apresentado na Figura 19 anterior, na entrada I1 do CLP foi conectada a botoeira B1, e na entrada I2, a botoeira B0. Além disso, na saída Q0 temos a lâmpada L1 conectada. Todas as vezes que as botoeiras forem acionadas ocorrerá uma mudança no sinal nas entradas I1 e I2, o que mudará a posição dos contados associados a elas. Em contrapartida, quando a saída Q0 for acionada, a lâmpada L1 também será, pois está conectada a essa saída, e será desligada quando a saída for desativada. É importante mencionar que, no ladder, não deve aparecer os nomes de B1, B0 ou L1, pois os dispositivos conectados às entradas e saídas não são identificados pelo CLP, e sim os sinais que eles oferecem aos módulos de entrada e saída. Na Figura 20 a seguir, ilustramos um exemplo de código em ladder para acionamento da lâmpada L1 sempre que a botoeira B1 for acionada, além do desligamento dessa lâmpada quando a botoeira B0 é acionada. O diagrama dado na Figura 20 faz uso do artifício de contato de selo, que consiste em associar um contato NA da saída em paralelo com a entrada que é acionada, 25 assim, com apenas um pulso na entrada de acionamento é possível manter a saída energizada. Figura 20 – Exemplo de diagrama em ladder considerando endereçamento Fonte: Lara, 2022. 5.2 Blocos funcionais Outros elementos comuns dentro da construção de programas em ladder são os blocos funcionais, os quais já estudamos anteriormente. Esses blocos podem ser tanto já definidos e de funções básicas, como as operações lógicas, os temporizadores e os contadores, quanto blocos com fins específicos desenvolvidos pelo usuário e salvos na memória do CLP. Os blocos funcionais são inseridos nas linhas do código, sendo apenas definidos quais serão seus parâmetros de entrada e quais elementos serão acionados por suas saídas. Na Figura 21 a seguir, é apresentado um exemplo de uso de blocos funcionais, no caso temporizador e contador, dentro de um programa desenvolvido em ladder. Conforme podemos verificar, o funcionamento do programa consiste em acionar a saída Q.0 quando a entrada I.0 é ativada; além disso, a saída será desligada por duas situações, seja quando a entrada I.1 for acionada ou então ao final da contagem pelo bloco CTU. Já na segunda linha, a entrada I.2 é responsável por incrementar a contagem a cada vez que é acionada. Quando é atingido o valor de 12 pulsos nessa entrada, a saída Q do bloco é ativada, desligando Q.0, ligando Q.1 e iniciando o processo de contagem de tempo do temporizador. Ao final da contagem de tempo pelo bloco TON, a saída Q.1 é desligada, pois existe um contato NF da saída desse bloco na linha que acionada essa saída. 26 Figura 21 – Exemplo de uso de blocos funcionais em ladder Fonte: Lara, 2022. FINALIZANDO Ao longo desta etapa, estudamos as cinco linguagens definidas pela norma IEC 61131-3, bem como verificamos que existem diferentes tipos destas, portanto, sempre haverá uma linguagem que o profissional que programará o CLP terá uma maior identificação. Ainda, é importante mencionar que um programa de instruções para CLP pode empregar mais de uma linguagem no seu desenvolvimento, e as linguagens possíveis de serrem utilizadas dependerão do modelo de CLP adotado. Cada linguagem é indicada para um tipo de processo, sendo assim, apresentamos na Tabela 6 a seguir algumas das indicações de emprego de cada uma das linguagens (Groover, 2011). 27 Tabela 6 – Características das linguagens de CLP padronizadas pela normaIEC 61131 Linguagem Aplicações em que melhor se enquadram Linguagem ladder Controle discreto Diagrama de blocos funcionais Controle contínuo Sequenciamento gráfico de funções Sequenciamento Lista de instruções Controle discreto Texto estruturado Lógica complexa, cálculos etc. Fonte: Elaborada por Lara, 2022 com base em Groover, 2011. A linguagem mais empregada na programação de CLP é a ladder em razão da semelhança com as lógicas desenvolvidas em comandos elétricos, porém, cada linguagem apresenta características que as tornam mais indicadas para determinadas aplicações. É sempre importante verificar quais as linguagens disponíveis no CLP que será utilizado, inclusive, este é um fator a ser analisado já na especificação de um modelo para a aplicação, juntamente com outros elementos como quantidade de entradas e saídas, estrutura, entre outros. Outro aliado na programação de CLP é o manual do modelo que é fornecido pelo fabricante, pois é nesse material que encontraremos informações essenciais para sua programação, conforme discutimos nesta etapa. Portanto, o processo de programação começa com o estudo das informações destinadas a esse tema contidas no manual. 28 REFERÊNCIAS GROOVER, M. Automação industrial e sistemas de manufatura. 3. ed. São Paulo: Pearson Prentice Hall, 2011. MORAES, C. C. de. Engenharia de automação industrial. 2. ed. Rio de Janeiro: LTC, 2015. SILVA, E. A. da. Introdução às linguagens de programação para CLP. São Paulo: Blucher, 2016.