Carregando o progresso local…
PLC Gym
Início do PLC GymNível 1, 0 XP · seu progresso
TIA Portal V20

Siemens SCL

Testado no simulador

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.

Tipos de dados e blocos de função do CLP

Agrupe os dados do equipamento e reutilize um bloco de controle testado

Testado no simulador
  • 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.

Tipo de dados do CLP · documento TYPE
TYPE
    PumpStatus : STRUCT
        Running : BOOL;
        Starts : DINT;
    END_STRUCT;
END_TYPE
FB PumpControl · interface
NomeSeçãoTipo de dado
StartEntradaBOOL
StopEntradaBOOL
PermitEntradaBOOL
FaultEntradaBOOL
RunningOutputBOOL
StatusInOutPumpStatus
LatchStaticBOOL
WasRunningStaticBOOL
Corpo do FB (SCL)
#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;
Duas instâncias chamadas a partir de a rotina principal
#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.

  1. Inspecione o UDT e a definição do bloco, e depois as duas instâncias com nomes diferentes.
  2. 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.
  3. Solte o Start. O selo mantém a bomba em operação funcionando. Ligue a reserva; a contagem de partidas dela é independente.
  4. 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.
  5. 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