Linguagem ladder e outras linguagens de CLP: referência
O que cada perfil de Siemens, Rockwell e Beckhoff suporta aqui, as premissas que ele adota e onde ele difere das ferramentas do fabricante.
Siemens SCL
S7-1500 padrão · armazenamento otimizado de FB · tags locais # em SCL.
- Estrutura
- Interface tipada; atribuições, IF / ELSIF / ELSE, listas CASE com INT/DINT com sinal e REGION / END_REGION. Faixas de CASE ficam fora deste subconjunto.
- Expressões
- Lógica BOOL, aritmética numérica, comparações e parênteses. INT, DINT, REAL e TIME. & também significa AND. ABS, LIMIT, MIN, MAX, ROUND e TRUNC funcionam com números. Um REAL vira INT ou DINT por meio de ROUND ou TRUNC: o TIA Portal não converte sozinho. Os comentários são // até o fim da linha, (* ... *), ou (/* ... */) para um comentário que pode ser traduzido.
- Instruções com memória
- Temporizadores TON_TIME, TOF_TIME, TP_TIME e TONR_TIME; contadores IEC_COUNTER.CTU, CTD_INT e CTUD_INT com PV/CV INT; R_TRIG e F_TRIG. A lista abaixo traz cada um.
- Laços FOR e EXIT
- FOR counter := start TO end BY step DO … END_FOR; usa um contador INT/DINT, limites inclusivos e um BY opcional (padrão +1). Passos negativos funcionam. EXIT sai do laço mais interno. Mantenha o contador, o fim e os operandos de BY sem alteração dentro do corpo; um BY igual a zero é rejeitado.
- Arrays
- Declare ARRAY[0..9] OF REAL na interface do bloco; leia ou escreva #Samples[#Index]. Elementos BOOL, INT, DINT e REAL, inclusive com limites inferiores negativos.
- Tipos de dados e blocos de função do CLP
- Tipos de dados de CLP nomeados (tabela ou documento TYPE) e FBs reutilizáveis com Input, Output, InOut, Static e Temp. Declare as instâncias de FB em Static e chame #Instance(Input := …, Output => …).
- Limites de execução
- Arrays unidimensionais: até 256 elementos cada e 1.024 valores de armazenamento expandidos por programa. Cada elemento aparece em Tags monitoradas e no replay. Um índice fora da faixa interrompe a varredura mostrando o índice real e os limites permitidos. Os laços dividem o orçamento de 20.000 operações por varredura, mesmo com o corpo vazio. São limites da academia.
- Fora deste subconjunto
- WHILE / REPEAT, o operador de potência **, as outras funções matemáticas (SQRT, SIN e assim por diante), arrays multidimensionais, arrays de UDTs ou de instâncias, estruturas aninhadas anônimas, cópias de array inteiro, suas próprias funções com valores de retorno, endereçamento por ponteiro e arquivos de projeto nativos.
Temporizadores, contadores e selos
- TON
TON_TIME - Retardo na energização. Q liga quando IN ficou ligada por PT, e desliga com IN.
#Delay(IN := #Start, PT := T#2s);Siemens· página - TOF
TOF_TIME - Retardo na desenergização. Q liga com IN e continua ligada por PT depois que IN desliga.
#RunOn(IN := #Start, PT := T#2s);Siemens· página - TP
TP_TIME - Pulso. Q fica ligada por PT a cada borda de subida de IN, o que IN fizer depois. Uma nova borda enquanto o pulso corre é ignorada.
#Dose(IN := #Start, PT := T#2s);Siemens· página - TONR
TONR_TIME - Acumulador de tempo. ET soma o tempo em que IN está ligada e o mantém quando IN desliga. Q liga em PT e continua ligada. R zera ET e Q.
#RunTime(IN := #Running, R := #Clear, PT := T#1h);Siemens· página - CTU
IEC_COUNTER - Conta para cima. Cada borda de subida de CU soma 1 a CV. Q fica ligada quando CV é PV ou mais. R põe CV em 0.
#Bottles.CTU(CU := #Sensor, R := #Clear, PV := 6);Siemens· página - CTD
CTD_INT - Conta para baixo. LD carrega PV em CV. Cada borda de subida de CD tira 1. Q fica ligada quando CV é 0 ou menos.
#Left(CD := #Sensor, LD := #Refill, PV := 12);Siemens· página - CTUD
CTUD_INT - Conta para cima e para baixo. CU soma 1, CD tira 1, e os dois na mesma varredura deixam CV como está. R põe CV em 0 e LD carrega PV. QU fica ligada em PV ou mais, QD em 0 ou menos.
#Stock(CU := #In, CD := #Out, R := #Clear, LD := FALSE, PV := 10);Siemens· página
SR, RS e a bobina negada são caixas de LAD e FBD. Em SCL, escreva um latch com IF e um bit invertido com NOT.
Agrupe os dados do equipamento e reutilize um bloco de controle testado
- Um UDT descreve um grupo de valores relacionados. PumpStatus guarda o status de funcionamento e o total de partidas; ele não executa nenhuma lógica.
- PumpControl contém a lógica reutilizável. DutyControl e StandbyControl são instâncias separadas: elas compartilham a definição, mas cada uma guarda os seus próprios valores de Latch e WasRunning.
- As entradas são fornecidas na chamada. Running é copiado para a saída depois da execução. Status é um InOut estruturado que referencia a tag de status daquela bomba; escrever em Status.Starts atualiza os dados de quem chamou.
- Toda chamada roda na ordem do programa. Pular uma chamada mantém os valores da instância e das saídas; um IF em volta de uma chamada não é um comando de parada. Forneça a entrada de bloqueio/Stop e execute o bloco para desligar a bomba.
Declare PumpStatus como um tipo de dados de CLP e PumpControl como um FB. Declare DutyControl/StandbyControl em Static para chamadas multi-instância. O SCL usa tags locais com #, Input/InOut := e Output =>. Neste modelo didático otimizado, os dados Temp são limpos a cada chamada.
TYPE
PumpStatus : STRUCT
Running : BOOL;
Starts : DINT;
END_STRUCT;
END_TYPE| Nome | Seção | Tipo de dado |
|---|---|---|
Start | Entrada | BOOL |
Stop | Entrada | BOOL |
Permit | Entrada | BOOL |
Fault | Entrada | BOOL |
Running | Output | BOOL |
Status | InOut | PumpStatus |
Latch | Static | BOOL |
WasRunning | Static | BOOL |
#Latch := (#Start OR #Latch) AND NOT #Stop AND #Permit AND NOT #Fault;
IF #Latch AND NOT #WasRunning THEN
#Status.Starts := #Status.Starts + 1;
END_IF;
#Status.Running := #Latch;
#Running := #Latch;
#WasRunning := #Latch;#DutyControl(Start := #Start, Stop := #Stop, Permit := #Permit, Fault := #Fault, Running => #PumpOn, Status := #DutyStatus);
#StandbyControl(Start := #StandbyStart, Stop := #Stop, Permit := #Permit, Fault := #StandbyFault, Running => #StandbyPump, Status := #StandbyStatus);Experimente na bancada
Abra qualquer SCL missão e use as abas Tipos de dados do CLP e Blocos de função . Depois declare as instâncias em Interface do bloco.
- Inspecione o UDT e a definição do bloco, e depois as duas instâncias com nomes diferentes.
- Com a execução pausada, force Start TRUE na aba Entradas e avance várias varreduras: PumpOn continua ligado e DutyStatus.Starts aumenta uma vez.
- Solte o Start. O selo mantém a bomba em operação funcionando. Ligue a reserva; a contagem de partidas dela é independente.
- Coloque Fault em ON: a bomba em operação para na hora, enquanto a reserva continua funcionando. Aperte Stop durante a execução, ou force Stop TRUE na aba Entradas com a execução pausada: as duas param.
- Rebobine uma varredura gravada e compare as tags de status de quem chamou com o estado local do bloco e com as linhas executadas do bloco.
O contrato da simulação
- Tarefa virtual fixa de 20 ms. A velocidade de reprodução e a taxa de quadros do 3D não alteram os resultados.
- Cada cenário de teste começa com um controlador e um estado de planta novos.
- Editar interrompe a execução. Os resultados e o replay pertencem à revisão do programa que foi testada.
- REAL usa precisão de 32 bits. Um estouro de inteiro sem suporte gera um diagnóstico.
- Os contadores guardam valores INT. As outras larguras de contador (SINT, DINT e os tipos sem sinal) e os temporizadores LTIME não estão implementados aqui.
- Cálculos NORM_X/SCALE_X válidos são suportados em FBD. Faixas inválidas param com um diagnóstico; os resultados nativos de ENO/erro não são reproduzidos.
- Os gráficos usam um caminho ativo e ações Booleanas N/S/R. Ações temporizadas nativas, caminhos paralelos e opções de última varredura/reset ficam fora deste modelo.
- A divisão de inteiros descarta a parte fracionária: 7 / 2 é 3. As comparações decimais usam a precisão do operando; um valor REAL de 0.1 é igual a 0.1. Use um operando REAL para divisão fracionária.
- O SCL aceita constantes REAL tipadas, como REAL#2.0. Cálculos de ponto flutuante ambíguos usam a precisão dupla do S7-1500 antes de serem atribuídos a uma tag REAL.
- A retenção após desligar e ligar a energia, as E/S reais, a temporização de rede e o firmware do fabricante ficam fora do modelo.
Leia a documentação original
Esta academia ensina um subconjunto delimitado. A verificação nativa exige compilar e testar no software do fabricante indicado.
A correção da entrevista roda neste navegador. O fluxo presencial atual é um protótipo local, não um serviço seguro de avaliação remota. Os arquivos exportados estão em beta e precisam de verificações de importação e de comportamento no TIA Portal V20 ou no Studio 5000.
O comportamento básico foi revisado com base nos manuais oficiais do Logix, no manual do S7-1200 e na diretriz do S7-1200/1500. Os documentos da Siemens são anteriores à V20. O comportamento do TwinCAT segue as páginas de referência do Tc2_Standard da Beckhoff e o manual do CLP TwinCAT 3. Esta revisão não substitui o teste no controlador de destino, especialmente para a temporização de gráficos e para blocos reutilizáveis.
Siemens TIA Portal V20Studio 5000 v38Manual de blocos de função do LogixManual de SFC do LogixLinguagens do CLP TwinCAT 3TON do TwinCAT Tc2_StandardCTU do TwinCAT Tc2_Standard