Escolar Documentos
Profissional Documentos
Cultura Documentos
LINGUAGEM SCL
Sumário
INTRODUÇÃO A LINGUAGEM SCL (Structured Control Language) ................................................... 5
Elementos da linguagem ............................................................................................................ 5
Controle de programa ................................................................................................................ 5
Aplicação ................................................................................................................................... 5
Funcionalidades do editor S7-SCL ............................................................................................... 6
Regras........................................................................................................................................ 6
INSERINDO UMA FUNÇÃO EM SCL ................................................................................................. 7
Visão geral da janela de programação ........................................................................................ 8
Configurando a fonte, tamanho e cor ......................................................................................... 9
Configurando o espaçamento das abas .................................................................................... 10
Mostrar números de linha ........................................................................................................ 10
Mostrar ou ocultar os operandos absolutos ............................................................................. 10
USANDO BOOKMARKS (MARCADORES) ....................................................................................... 11
Definir marcadores .................................................................................................................. 12
Navegando entre marcadores .................................................................................................. 13
Apagando marcadores ............................................................................................................. 14
Excluindo marcadores individuais ............................................................................................ 14
Excluindo todos os marcadores do bloco .................................................................................. 14
INICIANDO INSTRUÇÕES SCL ........................................................................................................ 15
Regras para instruções SCL ....................................................................................................... 15
Iniciando instruções SCL - Manualmente .................................................................................. 16
Inserindo instruções SCL usando a barra de tarefa "Instructions" ............................................. 17
INSERINDO COMENTÁRIOS .......................................................................................................... 18
Comentários em linhas de código do programa ........................................................................ 18
TRABALHANDO COM REGIÕES (REGION) ..................................................................................... 19
Usando regiões ........................................................................................................................ 19
Sintaxe ..................................................................................................................................... 21
Navegando nas regiões ............................................................................................................ 22
EXPRESSÕES................................................................................................................................. 23
Descrição ................................................................................................................................. 23
Ordem de avaliação ................................................................................................................. 23
Tipos de expressões ................................................................................................................. 23
Como as expressões são usadas ............................................................................................... 23
EXPRESSÕES ARITMÉTICAS........................................................................................................... 24
Descrição ................................................................................................................................. 24
Elementos da linguagem
O SCL também contém linguagens de programação mais altas, além dos elementos típicos do
PLC, como entradas, saídas, temporizadores ou bits de memória.
● Expressões
● Atribuições de valor
● Operadores
Controle de programa
O SCL fornece instruções práticas para controlar o programa permitindo, por exemplo, criar
ramos, loops ou saltos de programas.
Aplicação
• Áreas completas de código de programa pode ser ativado / desativado com apenas um
clique
• Loops e comentários de várias linhas podem ser expandidos e recolhidos
• Favoritos
• Exportação do código SCL
• Acesso rápido a tag (bit, byte, palavra ...) com o "fatiamento"
• Os valores de todas as tags são mostrados claramente em linha
• Blocos SCL podem ser utilizados em outras linguagens do Step 7
• Ideal para blocos de funções definidos pelo usuário para bibliotecas
• Blocos SCL formam a base para o código de programa de compartilhamento entre S7-1200,
S7-300, S7-400 e WinAC
• Economia de tempo considerável em comparação com a programação em LAD / FBD / STL
Regras
A linguagem SCL está disponível para os blocos do tipo Função (FC) ou para os Blocos de Funções
(FB). Ao criar o novo bloco, é necessário que se faça a seleção da linguagem para SCL. Após a
criação do bloco, não é possível que a linguagem seja alterada.
4
3
1
2
Após o bloco ser criado e aberto para edição, será mostrado na área de trabalho, o editor de
SCL.
6
5
2
4
Para fornecer uma melhor visão geral do programa, as linhas são recuadas de acordo com a
sintaxe. Defina a profundidade do recuo com o espaçamento das abas.
Você pode mostrar a atribuição de operandos simbólicos e absolutos em uma tabela ao lado do
código do programa, se necessário.
Para ocultar ou mostrar a exibição dos operandos absolutos, siga estas etapas:
Você pode usar marcadores para marcar locais de programas em programas extensivos para
que você possa encontrá-los rapidamente mais tarde, se eles precisam ser revisados. Os
marcadores são exibidos na barra lateral da janela de programação. Você pode navegar entre
vários marcadores dentro de um bloco usando os comandos do menu.
Os marcadores são salvos com o projeto e, portanto, estão disponíveis para qualquer pessoa
que queira editar o bloco. No entanto, eles não são carregados em um dispositivo.
Os marcadores não são avaliados quando os blocos são comparados.
- Inserir marcador
- Próximo marcador
- Marcador anterior
Linhas marcadas
Definir marcadores
Requerimento:
O bloco SCL deve estar aberto.
Procedimento:
Para definir um marcador, siga uma das etapas abaixo:
Resultado:
Um marcador é colocado no código do programa.
Requerimento:
Vários marcadores configurados em um bloco.
Procedimento:
Para navegar entre marcadores, siga os passos a seguir:
Resultado:
A linha com o marcador é destacada.
Apagando marcadores
1. Clique com o botão direito do mouse na barra lateral na linha na qual você deseja
excluir o marcador.
2. Selecione o comando "Bookmarks > Remove" no menu de atalho.
Ou
1. Clique na linha na qual você deseja excluir o marcador.
2. No menu "Edit", selecione o comando "Bookmarks > Remove".
Ou:
1. Clique na linha na qual você deseja excluir o marcador.
2. Clique no botão "Set/delete bookmark"" na barra de ferramentas.
Instruções em SCL
● atribuições de valor
As atribuições de valor são usadas para atribuir um tag a um valor constante, o resultado de
uma expressão ou o valor de outro tag.
● instruções para o controle do programa
As instruções para o controle do programa são usadas para implementar ramificações, loops ou
saltos do programa.
● instruções adicionais na barra de instruções "Instructions"
A barra de tarefa "Instruções" oferece uma ampla seleção de instruções padrão que você pode
usar em seu programa SCL.
● bloquear chamadas
As chamadas em bloco são usadas para chamar sub-rotinas que foram colocadas em outros
blocos e para processar seus resultados.
Requerimento:
O bloco SCL deve estar aberto.
Procedimento:
Para entrar nas instruções SCL, siga estas etapas:
Nota
Você também pode arrastar e soltar um operando definido da tabela de tags do PLC ou da
interface do bloco para o programa. Posicionando o mouse sobre o tag ou operando, será
mostrado ume em amarelo uma descrição do tag como seu endereço e também uma breve
descrição do que o operando faz.
Outra opção para inserir manualmente um tag ou operando, utilize as teclas, simultaneamente,
<Ctrl> + <Space> e será listado todos os itens possíveis a serem utilizados.
Resultado:
A instrução está inserida.
O editor de programação executa uma verificação de sintaxe. As entradas incorretas
são exibidas em vermelho e em itálico. Além disso, você também recebe uma
mensagem de erro detalhada na janela do inspetor.
A barra de tarefa "Instructions" oferece uma ampla seleção de instruções que você pode usar
no seu programa SCL. As instruções específicas do SCL para o controle do programa estão
disponíveis na barra de tarefas "Instructions".
Requerimento:
O bloco SCL deve estar aberto.
Procedimento:
Para inserir instruções SCL em um programa usando a barra de
tarefas "Instructions", siga estas etapas:
1. Abra a barra de tarefas "Instructions".
2. Para inserir as instruções, selecione uma das seguintes
etapas:
- Navegue até a instrução SCL que deseja inserir e arraste e solte
na linha desejada no código do programa. O local de inserção é
realçado por um retângulo verde.
- Selecione a localização no código do programa onde deseja
inserir as instruções e em seguida, clique duas vezes nas
instruções que deseja inserir.
3. Substitua este espaço reservado por um operando. Você também pode arrastar uma etiqueta
da interface ou da tabela de tags do PLC com arrastar e soltar para o espaço reservado.
4. Use a tecla <TAB> para navegar para todos os outros espaços reservados e substituí-los por
operandos.
Resultado:
A instrução está inserida.
O editor de programação executa uma verificação de sintaxe. As entradas incorretas
são exibidas em vermelho e em itálico. Além disso, você também recebe uma
mensagem de erro detalhada na janela do inspetor.
INSERINDO COMENTÁRIOS
● Seção de comentários
Uma seção de comentários é iniciada com "(*” e finalizado por “*) ".
Ele pode abranger várias linhas.
● Comentário de linha
Um comentário de linha começa com "//" e se estende até o final da linha.
Seção de comentários
Comentário da linha
Nota
Todos os comentários inseridos no programa são transferidos e armazenados na CPU.
Usando regiões
No SCL, você pode estruturar seu código de programa em regiões. Isso melhora a clareza do seu
programa porque você combina partes relacionadas do programa e pode expandir e esconder
as regiões conforme necessário. Uma visão geral da região está disponível para navegação
rápida nas regiões. A visão geral da região aparece ao lado da janela do programa e pode ser
exibida ou escondida conforme necessário.
A figura a seguir mostra a visão geral da região e a janela de programação:
A visão geral da região também mostra as regiões nas quais existem erros de sintaxe. Isso
permite que você navegue rapidamente para posições de código defeituosas e corrija erros.
Para resumir uma parte do programa em uma região, coloque-a com as palavras-chave
"REGION" e "END_REGION". Dependendo das suas configurações no destaque da palavra-
chave, a notação das palavras-chave também pode ser "region" e "end_region" ou "Region" e
"End_Region". As palavras-chave são convertidas automaticamente para a notação que
corresponde à configuração atual. Para encontrar palavras-chave "REGION" e "END_REGION"
que pertençam juntas, clique em "REGION" ou "END_REGION". Ambas as palavras-chave são
destacadas em cores como resultado.
Você pode dar a cada região um nome. Isto tem as seguintes vantagens:
● o nome também está visível quando uma região é escondida. Isso permite que você mantenha
uma visão geral do código do seu programa.
● você pode identificar as regiões na visão geral da região mais facilmente e navegar até
Regiões.
Nota
Especificar um nome é opcional.
Sintaxe
O exemplo a seguir mostra o uso permitido de regiões dentro de uma instrução CASE:
Você pode usar a visão geral da região para navegar rapidamente nas regiões. A visão geral da
região exibe todas as regiões que existem no código do seu programa. Além disso, oferece as
seguintes funções:
1
2
EXPRESSÕES
Descrição
Ordem de avaliação
A avaliação da expressão ocorre em uma ordem específica que é definida pelos seguintes
fatores:
● Prioridade dos operadores envolvidos
● Ordem de esquerda para a direita
● Brackets (conchetes)
Tipos de expressões
● Expressões aritméticas
As expressões aritméticas consistem em um valor numérico ou combinam dois valores
ou expressões com operadores aritméticos.
● Expressões relacionais
As expressões relacionais comparam os valores de dois operandos e produzem um
valor booleano. O resultado é TRUE se a comparação for verdadeira e FALSE se não for
atendida.
● Expressões lógicas
As expressões lógicas combinam dois operandos com operadores lógicos (AND, OR,
XOR) ou negando operandos (NOT).
EXPRESSÕES ARITMÉTICAS
Descrição
● se ambos os operandos são inteiros com sinal e têm comprimentos diferentes, o resultado
recebe o tipo de dados do inteiro mais longo (por exemplo, INT + DINT = DINT).
● se ambos os operandos são inteiros sem sinal e têm comprimentos diferentes, o resultado
recebe o tipo de dados do inteiro mais longo (por exemplo, USINT + UDINT = UDINT).
● se um operando é um número inteiro com sinal e o outro inteiro é um operando sem sinal, o
resultado recebe o próximo tipo de dados maior com sinal que cobre o inteiro sem sinal (por
exemplo, SINT + USINT = INT).
Você só pode executar uma operação com tais operandos se a verificação IEC não estiver
configurada.
Descrição
● com os seguintes tipos de dados / grupos de dados, apenas os tags do mesmo tipo
podem ser comparados:
- TIME, LTIME
- Data e hora
- Tipos de dados do PLC
- ARRAY
- STRUCT
- Tag ao qual ANY está sendo utilizado
- Tag para o qual VARIANT está sendo utilizado
● os tags S5TIME não são permitidas como operandos de comparação. É necessária uma
conversão explícita de S5TIME para TIME ou LTIME.
Os caracteres individuais são comparados por meio de seu código (por exemplo, 'a' é maior do
que 'A') durante a comparação das strings. A comparação é realizada da esquerda para a direita.
Você também pode comparar caracteres individuais de uma string. O número do caractere a
ser comparado é especificado entre colchetes ao lado do nome do operando. "MyString [2]",
por exemplo, compara o segundo caractere da string "MyString".
Nem todos os tempos podem ser comparados diretamente entre si, como S5TIME. Nesse caso,
eles são implicitamente convertidos em outro tempo para que possam ser comparados, por
exemplo, para TIME.
Se você quiser comparar datas e horários de diferentes tipos de dados, o valor do tipo de dados
de data ou hora menor é convertido implicitamente no tipo de dados de data ou hora maiores.
Isso significa que os dois tipos de dados de data e hora DATE e DTL, por exemplo, são
comparados com base em DTL.
Comparando tags do tipo de dados WORD com as tags do tipo de dados S5TIME
Ambas as tags são convertidas para o tipo de dados TIME ao comparar uma tag do tipo de dados
WORD com uma tag do tipo de dados S5TIME.
A tag WORD é interpretado como um valor S5TIME. Se uma das duas tags não pode ser
convertida, a comparação não é realizada e o resultado é FALSO. Se a conversão for bem-
sucedida, a comparação é realizada com base nas instruções de comparação selecionadas.
Exemplos
EXPRESSÕES LÓGICAS
Descrição
Expressões lógicas combinam dois operandos com operadores lógicos AND OR XOR ou negando
operandos NOT.
Os operadores lógicos podem processar os tipos de dados permitidos na CPU em uso. O
resultado de uma expressão lógica é do tipo de dados BOOL, se ambos os operandos são de tipo
de dados BOOL. Se pelo menos um dos dois operandos for uma sequência de bits, o resultado
também é uma sequência de bits e é determinado pelo tipo de operando mais alto. Por
exemplo, quando você liga um operando de tipo BYTE a um operando de tipo WORD, o
resultado é digitar WORD.
Para vincular um operando de tipo BOOL com uma sequência de bits, você deve primeiro
explicitamente convertê-lo em uma sequência de bits.
Exemplos
ATRIBUIÇÃO DE VALORES
Definição
Você pode usar uma atribuição de valor para mover o valor de uma expressão a um tag.
No lado esquerdo da linha SCL está o tag que recebe o valor da expressão à direita.
A expressão poderá conter variáveis e/ou constantes.
O nome de uma função também pode ser especificado como uma expressão. A função é
chamada pela atribuição do valor e retorna seu valor de função para o tag à esquerda.
O tipo de dados de atribuição de valor é definido pelo tipo de dados do tag à esquerda. O tipo
de dados da expressão à direita deve corresponder a este tipo.
No caso de atribuições de múltiplos valores, várias atribuições podem ser executadas com
uma instrução.
No caso de atribuições de valores combinados, você pode combinar os operadores "+", "-",
"*" e "/" com o operador de atribuição:
Atribuições de valor para o tipo de dados STRUCT ou os tipos de dados do PLC (PLC Data Type)
Toda estrutura pode ser atribuída a outra se as estruturas estiverem organizadas de forma
idêntica e os tipos de dados, bem como os nomes dos componentes estruturais, coincidem.
Você pode atribuir um tag, uma expressão ou outro elemento estrutural a um elemento
estrutural individual.
Um ARRAY inteiro pode ser atribuído a outro ARRAY se ambos os tipos de dados dos elementos
ARRAY, bem como os limites ARRAY correspondem.
Você pode atribuir uma tag, uma expressão ou outro elemento ARRAY a um elemento ARRAY
individual.
EXEMPLOS DE SINTAXE
Todas as variáveis podem receber valores, sejam booleanos, inteiros, real, etc.
A sintaxe para atribuição de valores é “:=”, e sempre a linha é finalizada com ponto e vírgula (;)
Operações matemáticas
A variável é lida e comparada aos valores abaixo da instrução. Caso o valor seja correspondido
a linha correspondente é executada.
COMPILANDO O PROGRAMA
Após o desenvolvimento do programa o bloco deve ser transferido para a CPU e essa operação
apenas é possível se não houver erros de programa. Antes de descarregar o bloco o sistema faz
uma compilação onde verifica se erros de sintaxe existem. Caso apresente algum erro ele é
apresentado na janela inspetor.
A compilação também pode ser realizada a qualquer momento através do comando manual
Compile.
Resultado da compilação –
sem erros
O resultado da compilação informa quantos erros foram encontrados, a linha onde o erro se
encontra e o tipo de erro.
Ao clicar sobre a linha do resultado com erro, automaticamente, será aberto o bloco e
selecionado a linha onde está o erro. No exemplo acima, está faltando o ponto e vírgula ao final
da instrução.
Habilita/Desabilita o
status do programa
Resultado da condição
ENDEREÇAMENTO INDIRETO
Uma das vantagens em se trabalhar com a linguagem SCL é poder manipular os endereços
indiretamente, de uma forma simples e ágil. Com isso, é possível ler e escrever em diversas
variáveis com uma grande economia de linhas de instruções, facilitando o desenvolvimento e
economizando uma grande quantidade de memória.
Áreas de memórias que foram declaradas com tipo de dados ARRAY, podem ser manipuladas
através do índice do ARRAY, que é inserido dentro dos colchetes “[“ e “]”. Normalmente o valor
inserido é uma constante, mas em muitos casos pode ser substituído por uma variável e esta
variável ser controlada/alterada pelo programa em tempo real.
Array[1..31]
Array[1..12]
No exemplo acima, o dia 25 do mês 5 recebera o valor da entrada analógica. Desta forma, caso
seja necessário alterar o dia ou mesmo o mês, o programa deverá ser alterado e transferido
novamente para o CLP.
Leitura do relógio
Número retirado do
dia atual do relógio
Número retirado do
mês atual do relógio
Através das instruções PEEK e POKE é possível ler e escrever em variáveis do CLP. Estas variáveis
podem ser do tipo:
• Input
• Output
• Bit memory
• DB
• Output periferia (somente S7-1500)
PEEK
A instrução PEEK tem como função ler informações de uma variável de forma indireta, seja
booleana ou não. A instrução permite que seja selecionado o tipo de elemento a ser lido
(Input,Output,Bit memory, DB, Input periferia).
A instrução PEEK é usada para ler um endereço de memória de uma área de memória padrão
sem especificar um tipo de dados. Utilizando a instrução PEEK_* (e o tipo de variável) é possível
realizar a leitura de um tipo especifico de formato numérico.
Observe que não existe a instrução PEEK_REAL. Para a leitura de valor em formato REAL é
necessário que seja feita a conversão de DWORD para REAL.
POKE
A instrução POKE tem como função escrever informações em uma variável de forma indireta,
seja booleana ou não. A instrução permite que seja selecionado o tipo de elemento a ser escrito
(Input,Output,Bit memory, DB, Output periferia).
POKE BLK
A instrução POKE_BLK tem como função copiar uma área de dados para outra do mesmo tipo
(Input,Output,Bit memory, DB) de forma indireta.
No exemplo abaixo, é copiado valores de memórias a partir do byte 500 para o byte 600 em um
total de 100 bytes.
Nota
Em todas as instruções mostradas acima, PEEK e POKE, as constantes podem ser alteradas por
variáveis, fazendo com que fique tudo de forma indireta.
INSTRUÇÕES SCL
As principais instruções utilizadas na linguagem SCL já estão em destaque para uso na barra de
ferramentas, na parte superior do editor. Neste capitulo, iremos aprender e exercitar o uso das
mais utilizadas.
A instrução "IF" ramifica o fluxo do programa dependendo de uma condição. A condição é uma
expressão com valor Booleano (VERDADEIRO ou FALSO). Expressões lógicas ou expressões
comparativas podem ser declaradas como condições.
• IF
Se a condição for satisfeita, as instruções programadas após o THEN são executadas. Se a
condição não for satisfeita, a execução do programa continua com a próxima instrução após o
END_IF.
Exemplos
• IF e ELSE
Se a condição for satisfeita, as instruções programadas após o THEN são executadas. Se a
condição não estiver satisfeita, as instruções programadas após o ELSE são executadas. Em
seguida, a execução do programa continua com a próxima instrução após o END_IF.
Exemplos
Se nenhuma das condições estiverem preenchidas, as instruções (<Instruções0>) após ELSE são
executadas, seguido da execução do programa após END_IF.
Você pode utilizar quantas combinações de ELSIF e THEN quiser na instrução IF. A programação
do uso do ELSE é opcional.
Exemplo
Enquanto o operador IF é utilizado para verificar apenas uma condição com poucos elementos,
o operador CASE é utilizado para condições que possuam muitos elementos.
A instrução CASE executa uma das várias sequências de instruções dependendo do valor de uma
expressão numérica.
O valor da expressão deve ser um número inteiro. Quando a instrução é executada, o valor da
expressão é comparado com os valores de várias constantes. Se o valor da expressão concordar
com o valor de uma constante, as instruções programadas diretamente após essa constante são
executadas. As constantes podem assumir os seguintes valores:
CASE <Tag> OF
<Constante1>: <Instruções1>;
< Constante2>: < Instruções2>;
< Constantex>: < InstruçõesX>; // X >= 3
ELSE < Instruções0>;
END_CASE;
Exemplo
A instrução "FOR" faz com que a execução repetida de um ciclo de programa atinja uma variável
de loop dentro de um intervalo de valores especificado.
Os loops de programas também podem ser agrupados. Dentro de um loop de programa, você
pode programar loops de programas adicionais com outras variáveis de loop.
A execução contínua atual de um loop de programa pode ser encerrada pela instrução "Concluir
condição de loop" (CONTINUE). A instrução "Sair do loop imediatamente" (EXIT) termina a
execução do loop inteiro.
A instrução "WHILE" faz com que um ciclo de programa seja repetidamente executado até que
a condição de implementação seja satisfeita. A condição é uma expressão com valor Booleano
(VERDADEIRO ou FALSO). Expressões lógicas ou expressões comparativas podem ser declaradas
como condições.
Exemplo
Neste capitulo iremos utilizar instruções Step 7 em SCL, como detecção de bordas,
temporizadores, contadores, etc. A maioria das instruções necessita de memórias locais (DB
Instance).
Operações Binárias
Com as instruções R_TRIG e F_TRIG é possível realizar a detecção da borda de sinal digital,
positivo ou negativo, respectivamente.
R_TRIG
Com a instrução "R_TRIG", você pode detectar uma mudança de estado de "0" para "1" na
entrada CLK. A instrução compara o valor atual na entrada CLK com o estado da consulta
anterior (bit de memória de borda) que é salvo na instância especificada. Se a instrução detecta
uma mudança de estado na entrada CLK de "0" para "1", uma borda de sinal positivo é gerada
na saída Q, isto é, a saída tem o valor TRUE ou "1" para exatamente um ciclo.
Em todos os outros casos, o estado do sinal na saída da instrução é "0".
F_TRIG
A instrução F_TRIG muda em relação a R_TRIG apenas que a saída Q é acionada quando o CLK
detecta a mudança de estado de 1 para 0.
Temporizadores
Os mesmos temporizadores IEC utilizados nas linguagens LAD e FBD também podem ser
acessados através da linguagem SCL.
Chamando um temporizador
Ao chamar um temporizador IEC (TP, TON, TOF ou TONR) sempre será questionado a forma que
o editor irá estanciar as variáveis necessárias para o funcionamento dos temporizadores. Três
opções de criação das variáveis estarão disponíveis.
Nota:
As instruções dos temporizadores podem ser utilizadas em conjunto com as demais instruções
SCL, como por exemplo dentro de um elemento IF.
PRESET_TIMER
Com a instrução PRESET_TIMER você pode alterar o valor de PRESET dos temporizadores IEC.
Contadores
Os mesmos contadores IEC utilizados nas linguagens LAD e FBD também podem ser acessados
através da linguagem SCL.
Chamando um contador
Ao chamar um contador IEC (CTU, CTD, ou CTUD) sempre será questionado a forma que o editor
irá estanciar as variáveis necessárias para o funcionamento dos contadores. Três opções de
criação das variáveis estarão disponíveis.
Nota:
As instruções dos contadores podem ser utilizadas em conjunto com as demais instruções SCL,
como por exemplo dentro de um elemento IF.