Escolar Documentos
Profissional Documentos
Cultura Documentos
dos Controladores
Logix5000™
1756-Lx, 1769-Lx, 1789-Lx, 1794-Lx,
PowerFlex 700S
Manual de Referência
Informações Importantes Por causa da diversidade de usos dos produtos descritos nesta
publicação, os responsáveis pela aplicação e usos deste equipamento
ao Usuário de controle devem certificar-se de que todas as etapas necessárias
foram tomadas para garantir que cada aplicação e uso cumpram todos
os requisitos de desempenho e segurança, incluindo todas as leis,
regulamentações, códigos e padrões aplicáveis. Em nenhum momento
a Rockwell Automation (Allen-Bradley) será responsável por danos
indiretos ou que possam vir acontecer como resultado do uso ou a
aplicação destes produtos.
As ilustrações, gráficos, exemplos de programas e de layout mostrados
neste manual são apenas para fins ilustrativos. Visto que há diversas
variáveis e requisitos associados a qualquer instalação em especial, a
Rockwell Automation/Allen-Bradley não assume a responsabilidade
(incluindo a responsabilidade por propriedade intelectual) pelo uso real
baseado nos exemplos mostrados nesta publicação.
A publicação SGI-1.1, Diretrizes de Segurança para Aplicação,
Instalação e Manutenção dos Dispositivos de Controle Eletrônico
(disponível no escritório local da Rockwell Automation/Allen-Bradley),
descreve algumas diferenças importantes entre os equipamentos
eletrônicos e dispositivos eletromecânicos, que devem ser levadas em
consideração ao utilizar produtos como os descritos nesta publicação.
É proibida a reprodução, parcial ou total, deste manual sem a
permissão por escrito da Rockwell Automation.
Ao longo deste manual, usamos observações a fim de chamar a sua
atenção para algumas considerações de segurança. As anotações a
seguir acompanham declarações que ajudam você a identificar, evitar
um perigo potencial e a reconhecer as suas conseqüências:
!
IMPORTANTE Identifica as informações críticas para aplicação e
compreensão bem-sucedidas do produto.
Allen-Bradley, ControlLogix, DH+, Logix5000, Logix5550, CLP-2, CLP-3, CLP-5 RSLinx, RSLogix 5000, RSNetWorx e SLC são
marcas da Rockwell Automation
Ethernet é uma marca registrada da Digital Equipment Corporation, Intel e Xerox Corporation.
Suporte da Rockwell Antes de entrar em contato com a Rockwell Automation para
assistência técnica, sugerimos que você revise as informações sobre
Automation as localizações de falhas contidas nesta primeira publicação.
Caso o problema persista, telefone para o representante local da
Rockwell Automation ou entre em contato com a Rockwell
Automation por:
Alteração: Consulte o
capítulo:
As instruções BAND, BOR, BXOR e BNOT foram adicionadas a este 6
manual para que o bitwise e as instruções de lógica estejam no
mesmo manual. Elas foram removidas do Logix5000 Controllers
Process Control and Drives Instruction Set Reference Manual,
publicação 1756-RM006.
A fonte para uma instrução SIZE pode ser um tag do array. Você não 7
precisa mais especificar o primeiro elemento no array.
Adição da instrução JXR que somente era compatível com os 10
controladores SoftLogix5800
Adição das instruções EOT, SFP e 10
SFR
O Apêndice A contém informações extras sobre retenção de IREFs e A
OREFs. IREFs e OREFs podem usar o mesmo nome de tag sem alterar
os valores de IREFs para um scan.
Um novo apêndice explica como programar em texto estruturado. C
Notas:
Onde Encontrar uma Use este localizador para encontrar detalhes de referência sobre as
instruções do Logix (as instruções em cinza estão disponíveis em
Instrução outros manuais). Este localizador também lista as linguagens de
programação que estão disponíveis para as instruções.
Notas:
Tarefa/Meta: Documentos:
Programação do controlador para aplicações Logix5000 Controllers General Instructions Reference Manual, publicação
seqüenciais 1756-RM003
Você está aqui
Programação do controlador para aplicações Manual de Referência do Conjunto de Instruções dos Inversores e Controle de
de processo ou inversores Processo dos Controladores Logix5000 , publicação 1756-RM006
Programação do controlador para aplicações Logix5000 Controllers Motion Instructions Set Reference Manual,
de posicionamento (motion) publicação 1756-RM007
Importação de um arquivo de texto ou tags Logix5000 Controllers Import/Export Reference Manual, publicação 1756-RM084
em um projeto
Exportação de um projeto ou tags para um
arquivo texto
Conversão de uma aplicação CLP-5 ou Logix5550 Controller Converting PLC-5 ou SLC 500 Logic to Logix5550 Logic Reference
SLC 500 para uma aplicação Logix5000 Manual, publicação 1756-RM085
Quem Deve Utilizar este Este documento fornece ao programador detalhes sobre cada
instrução disponível para um controlador baseado em Logix. Você já
Manual deve estar familiarizado sobre como o controlador baseado em Logix
armazena e processa dados.
Objetivo do Manual Este manual fornece uma descrição de cada instrução neste formato.
texto estruturado
bloco de funções
condição da condição da
entrada da linha saída da linha
Notas:
Capítulo 1
Instruções Binárias Introdução . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1-1
(XIC, XIO, OTE, OTL, OTU, ONS, Examinar Se Energizado (XIC) . . . . . . . . . . . . . . . . . . . . . . 1-2
OSR, OSF, OSRI, OSFI) Examinar Se Desenergizado (XIO) . . . . . . . . . . . . . . . . . . . 1-4
Energizar Saída (OTE) . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1-6
Energizar Saída com Retenção (OTL) . . . . . . . . . . . . . . . . . 1-7
Desenergizar Saída com Retenção (OTU) . . . . . . . . . . . . . . 1-9
Monoestável (ONS) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1-11
Monoestável Sensível à Borda de Subida (OSR) . . . . . . . . . 1-14
Monoestável Sensível à Borda de Descida (OSF) . . . . . . . . 1-16
Monoestável Sensível à Borda de Subida com
Entrada (OSRI) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1-18
Monoestável Sensível à Borda de Descida com
Entrada (OSFI) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1-20
Capítulo 2
Instruções de Temporizador e Introdução . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 2-1
Contador Temporizador na Energização (TON). . . . . . . . . . . . . . . . . 2-2
(TON, TOF, RTO, TONR, TOFR, Temporizador na Desenergização (TOF) . . . . . . . . . . . . . . 2-5
RTOR, CTU, CTD, CTUD, RES) Temporizador Retentivo (RTO) . . . . . . . . . . . . . . . . . . . . . 2-9
Temporizador na Energização com Reset (TONR) . . . . . . . 2-13
Temporizador na Desenergização com Reset (TOFR) . . . . . 2-16
Temporizador Retentivo com Reset (RTOR) . . . . . . . . . . . . 2-19
Contador Crescente (CTU). . . . . . . . . . . . . . . . . . . . . . . . . 2-22
Contagem Decrescente (CTD) . . . . . . . . . . . . . . . . . . . . . . 2-25
Contagem Crescente/Decrescente (CTUD) . . . . . . . . . . . . . 2-29
Reset (RES) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 2-33
Capítulo 3
Instruções de Entrada/Saída Introdução . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3-1
(MSG, GSV, SSV) Mensagem (MSG) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3-2
Códigos de Erro MSG . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3-7
Códigos de Erro. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3-8
Códigos de Erro Estendido . . . . . . . . . . . . . . . . . . . . . . 3-9
Códigos de Erro do CLP e do SLC (.ERR) . . . . . . . . . . . 3-11
Códigos de Erro de Block-transfer . . . . . . . . . . . . . . . . 3-12
Especificação dos Detalhes da Configuração . . . . . . . . . . . 3-13
Especificação das Mensagens de Leitura e Escrita
da Tabela de Dados CIP. . . . . . . . . . . . . . . . . . . . . . . . 3-14
Reconfiguração de um Módulo de E/S . . . . . . . . . . . . . 3-14
Especificar Mensagens CIP Generic. . . . . . . . . . . . . . . . 3-16
Especificação das mensagens do CLP-5. . . . . . . . . . . . . 3-17
Especificação das Mensagens do SLC . . . . . . . . . . . . . . 3-18
Especificação das Mensagens Block-transfer . . . . . . . . . 3-18
Especificação de Mensagens do CLP-3 . . . . . . . . . . . . . 3-19
Especificação das mensagens do CLP-2. . . . . . . . . . . . . 3-20
Exemplos de Configuração MSG . . . . . . . . . . . . . . . . . . . . 3-21
Especificação de Detalhes de Comunicação . . . . . . . . . . . . 3-22
Especificar um caminho . . . . . . . . . . . . . . . . . . . . . . . . 3-22
Capítulo 4
Instruções de Comparação Introdução . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 4-1
(CMP, EQU, GEQ, GRT, LEQ, LES, Comparação (CMP) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 4-2
LIM, MEQ, NEQ) Expressões CMP . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 4-4
Operadores válidos . . . . . . . . . . . . . . . . . . . . . . . . . . . 4-4
Formatação de expressões . . . . . . . . . . . . . . . . . . . . . . 4-4
Determinação da seqüência da operação . . . . . . . . . . . 4-5
Uso de strings em uma expressão. . . . . . . . . . . . . . . . . 4-5
Igual (EQU) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 4-7
Maior ou Igual a (GEQ). . . . . . . . . . . . . . . . . . . . . . . . . . . 4-10
Maior que (GRT). . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 4-14
Menor ou Igual a (LEQ) . . . . . . . . . . . . . . . . . . . . . . . . . . 4-18
Menor Que (LES) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 4-22
Limite (LIM) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 4-26
Máscara Igual a (MEQ) . . . . . . . . . . . . . . . . . . . . . . . . . . . 4-32
Inserção de um valor de máscara imediato . . . . . . . . . . 4-33
Diferente de (NEQ) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 4-37
Capítulo 5
Instruções de Introdução . . . . . . . . . . . . . . . .......... . . . . . . . . . . . 5-1
Cálculo/Matemáticas Cálculo (CPT) . . . . . . . . . . . . . .......... . . . . . . . . . . . 5-2
(CPT, ADD, SUB, MUL, DIV, MOD, Operadores válidos . . . . . . .......... . . . . . . . . . . . 5-3
Formatação de expressões . .......... . . . . . . . . . . . 5-4
SQR, SQRT, NEG, ABS)
Determinação da seqüência da operação . . . . . . . . . . . 5-4
Adição (ADD) . . . . . . . . . . . . . .......... . . . . . . . . . . . 5-5
Subtração (SUB) . . . . . . . . . . . .......... . . . . . . . . . . . 5-8
Capítulo 6
Instruções de Introdução . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 6-1
Movimentação/Lógica Movimentação (MOV) . . . . . . . . . . . . . . . . . . . . . . . . . . . . 6-3
(MOV, MVM, BTD, MVMT, BTDT, Movimento com Máscara (MVM) . . . . . . . . . . . . . . . . . . . . 6-5
Inserção de um valor de máscara imediato . . . . . . . . . . 6-6
CLR, SWPB, AND, OR, XOR, NOT,
Movimentação com Máscara Com Arquivo-Alvo (MVMT) . . 6-8
BAND, BOR, BXOR, BNOT) Distribuição de Bits (BTD). . . . . . . . . . . . . . . . . . . . . . . . . 6-11
Distribuição de Bits com Arquivo-alvo (BTDT) . . . . . . . . . . 6-14
Zeramento (CLR). . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 6-17
Swap (inversão) de Byte (SWPB) . . . . . . . . . . . . . . . . . . . . 6-18
AND (E) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 6-21
OR (OU). . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 6-24
Ou Exclusivo (XOR) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 6-27
Complementação (NOT) . . . . . . . . . . . . . . . . . . . . . . . . . . 6-30
E Booleano (BAND) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 6-33
(OU) Booleano (BOR) . . . . . . . . . . . . . . . . . . . . . . . . . . . 6-35
(Ou Exclusivo) Booleano (BXOR) . . . . . . . . . . . . . . . . . . . 6-38
NOT Booleano (BNOT). . . . . . . . . . . . . . . . . . . . . . . . . . . 6-40
Capítulo 7
InstruçõesInstruções de Array Introdução . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 7-1
(Arquivo)/Miscelânea Seleção do Modo de Operação . . . . . . . . . . . . . . . . . . . . . 7-2
(FAL, FSC, COP, CPS, FLL, AVE, Modo ALL . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 7-2
Modo Numerical . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 7-3
SRT, STD, SIZE)
Modo Incremental . . . . . . . . . . . . . . . . . . . . . . . . . . . . 7-4
Aritmética de Arquivos (FAL). . . . . . . . . . . . . . . . . . . . . . . 7-6
expressões FAL . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 7-15
Operadores válidos . . . . . . . . . . . . . . . . . . . . . . . . . . . 7-15
Formatação de expressões . . . . . . . . . . . . . . . . . . . . . . 7-16
Determinação da seqüência da operação . . . . . . . . . . . 7-16
Comparação e Busca de Arquivo (FSC) . . . . . . . . . . . . . . . 7-17
Expressões FSC . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 7-21
Operadores válidos . . . . . . . . . . . . . . . . . . . . . . . . . . . 7-22
Formatação de expressões . . . . . . . . . . . . . . . . . . . . . . 7-22
Determinação da seqüência da operação . . . . . . . . . . . 7-23
Uso de strings em uma expressão. . . . . . . . . . . . . . . . . 7-23
Cópia de Arquivo (COP) Arquivo de Cópia Síncrono (CPS). 7-25
Preenchimento de Arquivo (FLL) . . . . . . . . . . . . . . . . . . . . 7-31
Média de Arquivo (AVE) . . . . . . . . . . . . . . . . . . . . . . . . . . 7-35
Classificação de Arquivo (SRT) . . . . . . . . . . . . . . . . . . . . . 7-40
Desvio Padrão do Arquivo (STD) . . . . . . . . . . . . . . . . . . . 7-45
Tamanho em Elementos (SIZE) . . . . . . . . . . . . . . . . . . . . . 7-50
Capítulo 8
Instruções de Array Introdução . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 8-1
(Arquivo)/Deslocamento Deslocamento de Bit para a Esquerda (BSL). . . . . . . . . . . . 8-2
(BSL, BSR, FFL, FFU, LFL, LFU) Deslocamento de Bit para a Direita (BSR) . . . . . . . . . . . . . 8-5
Carga FIFO (FFL) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 8-8
Descarga FIFO (FFU) . . . . . . . . . . . . . . . . . . . . . . . . . . . . 8-14
Carga LIFO (LFL). . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 8-20
Descarga LIFO (LFU). . . . . . . . . . . . . . . . . . . . . . . . . . . . . 8-26
Capítulo 9
Instruções do Seqüenciador Introdução . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 9-1
(SQI, SQO, SQL) Entrada do Seqüenciador (SQI) . . . . . . . . . . . . . . . . . . . . . 9-2
Inserção de um valor de máscara imediato . . . . . . . . . . 9-3
Uso de SQI sem SQO. . . . . . . . . . . . . . . . . . . . . . . . . . 9-5
Saída do Seqüenciador (SQO) . . . . . . . . . . . . . . . . . . . . . . 9-6
Inserção de um valor de máscara imediato . . . . . . . . . . 9-7
Uso de SQI com SQO . . . . . . . . . . . . . . . . . . . . . . . . . 9-9
Reset da posição de SQO . . . . . . . . . . . . . . . . . . . . . . . 9-9
Carga do Seqüenciador (SQL) . . . . . . . . . . . . . . . . . . . . . . 9-10
Capítulo 10
Instruções de Controle do Introdução . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 10-1
Programa Salto para Label (JMP)
(JMP, LBL, JSR, RET, SBR, JXR, Label (LBL) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 10-2
Salto para Sub-rotina (JSR)
TND, MCR, UID, UIE, AFI,
Sub-rotina (SBR)
NOP, EOT, SFP, SFR) Retorno da Sub-rotina (RET) . . . . . . . . . . . . . . . . . . . . . . . 10-4
Salto para a Rotina Externa (JXR) . . . . . . . . . . . . . . . . . . . 10-13
Fim Temporário (TND) . . . . . . . . . . . . . . . . . . . . . . . . . . 10-16
Rearme do Controle Mestre (MCR). . . . . . . . . . . . . . . . . . 10-18
Interrupção Desabilitada (UID) Interrupção
Habilitada (UIE) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 10-20
Instrução Sempre Falsa (AFI) . . . . . . . . . . . . . . . . . . . . . . 10-22
Sem Operação (NOP) . . . . . . . . . . . . . . . . . . . . . . . . . . . 10-23
Fim da Transição (EOT) . . . . . . . . . . . . . . . . . . . . . . . . . 10-24
Pausa de SFC (SFP) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 10-26
Reset de SFC (SFR) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 10-28
Capítulo 11
Instruções For/Break Introdução . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 11-1
(FOR, FOR...DO, BRK, EXIT, RET) De... (FOR) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 11-2
Break (BRK) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 11-5
Return (RET). . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 11-6
Capítulo 12
Instruções Especiais Introdução . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 12-1
(FBC, DDT, DTR, PID) Comparação Entre os Bits de Arquivo (FBC) . . . . . . . . . . . 12-2
Seleção do modo de busca. . . . . . . . . . . . . . . . . . . . . . 12-3
Capítulo 13
Instruções Trigonométricas Introdução . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 13-1
(SIN, COS, TAN, ASN, ASIN, ACS, Seno (SIN) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 13-2
ACOS, ATN, ATAN) Co-seno (COS) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 13-4
Tangente (TAN) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 13-6
Arco Seno (ASN) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 13-8
Arco Co-seno (ACS) . . . . . . . . . . . . . . . . . . . . . . . . . . . . 13-10
Arco Tangente (ATN) . . . . . . . . . . . . . . . . . . . . . . . . . . . 13-12
Capítulo 14
Instruções de Matemática Introdução . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 14-1
Avançada Log Neperiano (LN) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 14-2
(LN, LOG, XPY) Log Base 10 (LOG) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 14-4
X Elevado a Y (XPY). . . . . . . . . . . . . . . . . . . . . . . . . . . . . 14-6
Capítulo 15
Instruções de Conversão Introdução . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 15-1
Matemática Graus (DEG). . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 15-2
(DEG, RAD, TOD, FRD, TRN, Radianos (RAD) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 15-4
Conversão para BCD (TOD) . . . . . . . . . . . . . . . . . . . . . . . 15-6
TRUNC)
Conversão em Inteiro (FRD) . . . . . . . . . . . . . . . . . . . . . . . 15-9
Truncar (TRN). . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 15-11
Capítulo 16
Instruções da Porta Serial ASCII Introdução . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 16-1
(ABL, ACB, ACL, AHL, ARD, ARL, Execução da Instrução . . . . . . . . . . . . . . . . . . . . . . . . . 16-2
AWA, AWT) Códigos de Erro ASCII . . . . . . . . . . . . . . . . . . . . . . . . . 16-4
Tipos de Dados da String . . . . . . . . . . . . . . . . . . . . . . . 16-4
Teste ASCII Para Linha do Buffer (ABL) . . . . . . . . . . . . . . . 16-5
Caracteres ASCII no Buffer (ACB) . . . . . . . . . . . . . . . . . . . 16-8
Limpeza do Buffer ASCII (ACL) . . . . . . . . . . . . . . . . . . . . 16-10
Linhas de Handshake ASCII (AHL). . . . . . . . . . . . . . . . . . 16-12
Leitura ASCII (ARD) . . . . . . . . . . . . . . . . . . . . . . . . . . . . 16-15
Linha de Leitura ASCII (ARL) . . . . . . . . . . . . . . . . . . . . . . 16-18
Anexar Leitura ASCII (AWA) . . . . . . . . . . . . . . . . . . . . . . 16-22
Escrita ASCII (AWT) . . . . . . . . . . . . . . . . . . . . . . . . . . . . 16-26
Capítulo 17
Instruções de String ASCII Introdução . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 17-1
(CONCAT, DELETE, FIND, INSERT, Tipos de Dados da String . . . . . . . . . . . . . . . . . . . . . . . 17-2
MID) Concatenação de String (CONCAT) . . . . . . . . . . . . . . . . . . 17-3
Exclusão de String (DELETE) . . . . . . . . . . . . . . . . . . . . . . . 17-5
Localização de String (FIND) . . . . . . . . . . . . . . . . . . . . . . . 17-7
Inserção de String (INSERT). . . . . . . . . . . . . . . . . . . . . . . . 17-9
String Média (MID) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 17-11
Capítulo 18
Instruções de Conversão ASCII Introdução . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 18-1
(STOD, STOR, DTOS, RTOS, UPPER, Tipos de Dados da String . . . . . . . . . . . . . . . . . . . . . . . 18-2
LOWER) String Para DINT (STOD) . . . . . . . . . . . . . . . . . . . . . . . . . 18-3
String Para REAL (STOR) . . . . . . . . . . . . . . . . . . . . . . . . . . 18-5
DINT Para String (DTOS) . . . . . . . . . . . . . . . . . . . . . . . . . 18-7
REAL Para String (RTOS) . . . . . . . . . . . . . . . . . . . . . . . . . . 18-9
Letra Maiúscula (UPPER) . . . . . . . . . . . . . . . . . . . . . . . . . 18-11
Letra Minúscula (LOWER) . . . . . . . . . . . . . . . . . . . . . . . . 18-13
Apêndice A
Atributos Comuns Introdução . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . A-1
Valores Imediatos . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . A-1
Conversões de Dados . . . . . . . . . . . . . . . . . . . . . . . . . . . . A-1
SINT ou INT para DINT . . . . . . . . . . . . . . . . . . . . . . . . A-3
Inteiro para REAL. . . . . . . . . . . . . . . . . . . . . . . . . . . . . A-4
DINT para SINT ou INT . . . . . . . . . . . . . . . . . . . . . . . . A-5
REAL para um inteiro . . . . . . . . . . . . . . . . . . . . . . . . . . A-5
Apêndice B
Atributos do Bloco de Funções Introdução . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . B-1
Lançamento de Dados. . . . . . . . . . . . . . . . . . . . . . . . . . . . B-2
Seqüência de Execução . . . . . . . . . . . . . . . . . . . . . . . . . . . B-3
Respostas do Bloco de Funções para as Condições
de Overflow . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . B-5
Modos de Temporização . . . . . . . . . . . . . . . . . . . . . . . . . . B-5
Parâmetros de instrução comum para os modos de
temporização . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . B-7
Características Gerais dos modos de temporização . . . . B-9
Controle de Program/Operator . . . . . . . . . . . . . . . . . . . . B-10
Apêndice C
Programação de Texto Introdução . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . C-1
Estruturado Sintaxe do Texto Estruturado. . . . . . . . . . . . . . . . . . . . . . . C-1
Atributos. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . C-2
Especificação de um atributo não retentivo . . . . . . . . . . C-3
Atribuição de um caractere ASCII para um string. . . . . . C-3
Expressões . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . C-4
Use os operadores e funções aritméticas . . . . . . . . . . . . C-5
Uso dos operadores relacionados . . . . . . . . . . . . . . . . . C-6
Uso dos operadores lógicos . . . . . . . . . . . . . . . . . . . . . C-8
Uso de operadores bitwise . . . . . . . . . . . . . . . . . . . . . . C-9
Determinação da seqüência de execução . . . . . . . . . . . C-9
Instruções . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . C-10
Construções . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . C-11
IF...THEN . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . C-12
CASE...OF . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . C-15
FOR…DO. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . C-17
WHILE…DO . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . C-20
REPEAT…UNTIL . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . C-22
Comentários . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . C-24
Index
Códigos do Caractere ASCII
Instruções Binárias
(XIC, XIO, OTE, OTL, OTU, ONS, OSR, OSF, OSRI, OSFI)
Introdução Use as instruções binárias (tipo com relé) para monitorar e controlar o
status dos bits.
Examinar Se Energizado A instrução XIC examina o bit de dados para verificar se ele está
energizado.
(XIC)
Operandos:
Lógica Ladder
Texto Estruturado
IF data_bit THEN
<statement>;
END_IF;
Descrição: A instrução XIC examina o bit de dados para verificar se ele está
energizado.
Execução:
Condição: Ação da Lógica Ladder:
prescan A saída da condição da linha é definida como falsa.
entrada da condição da linha é falsa A saída da condição da linha é definida como falsa.
entrada da condição da linha é verdadeira
bit de dados = 1
fim
Lógica Ladder
Texto Estruturado
IF limit_switch THEN
<statement>;
END_IF;
Exemplo 2: Se S:V está energizado (indica que um overflow ocorreu), isso habilita
a próxima instrução (a saída da condição da linha é verdadeira).
Lógica Ladder
Texto Estruturado
IF S:V THEN
<statement>;
END_IF;
Examinar Se A instrução XIO examina o bit de dados para verificar se ele está
desenergizado.
Desenergizado (XIO)
Operandos:
Lógica Ladder
Texto Estruturado
Descrição: A instrução XIO examina o bit de dados para verificar se ele está
desenergizado.
Execução:
Condição: Ação da Lógica Ladder:
prescan A saída da condição da linha é definida como falsa.
entrada da condição da linha é falsa A saída da condição da linha é definida como falsa.
bit de dados = 1
fim
Lógica Ladder
Texto Estruturado
Exemplo 2: Se S:V está desenergizado (indica que um overflow não ocorreu), isso
habilita a próxima instrução (a saída da condição da linha é
verdadeira).
Lógica Ladder
Texto Estruturado
Texto Estruturado
Execução:
Lógica Ladder
Texto Estruturado
Lógica Ladder
Texto Estruturado
IF bool_expression THEN
data_bit := 1;
END_IF;
Execução:
Lógica Ladder
Texto Estruturado
IF BOOL_expression THEN
light_2 := 1;
END_IF;
Desenergizar Saída com A instrução OTU desenergiza (não retém) o bit de dados.
Retenção (OTU)
Operandos:
Lógica Ladder
Texto Estruturado
IF bool_expression THEN
data_bit := 0;
END_IF;
Execução:
Lógica Ladder
Texto Estruturado
IF bool_expression THEN
light_2 := 0;
END_IF;
Operandos:
Lógica Ladder
Texto Estruturado
Execução:
bit de armazenamento é
bit de armazenamento = 0 energizado
saída da condição da linha
examinar o bit de é definida como
armazenamento verdadeira
bit de armazenamento = 1
o bit de armazenamento
permanece energizado
saída da condição da linha
é definida como falsa
fim
Lógica Ladder
Texto Estruturado
Operandos:
Lógica Ladder
entrada da condição da
linha
bit de armazenamento
bit de saída
Execução:
bit de armazenamento = 1
o bit de armazenamento
permanece energizado
bit de saída é desenergizado.
saída da condição da linha é
definida como verdadeira
fim
Operandos:
entrada da
condição da linha
bit de
armazenamento
bit de saída
Execução:
o bit de armazenamento
bit de permanece desenergizado
examinar o bit de armazenamento = 0 bit de saída é
armazenamento desenergizado.
saída da condição da linha é
definida como falsa
bit de armazenamento = 1
bit de armazenamento é
desenergizado.
bit de saída é energizado
saída da condição da linha
é definida como falsa
fim
Monoestável Sensível à A instrução OSRI energiza o bit de saída para um ciclo de execução
quando o bit de entrada alternar de desenergizado para energizado.
Borda de Subida com Esta instrução está disponível em lógica ladder como OSR, consulte a
Entrada (OSRI) página 1-14.
Operandos:
Bloco de Funções
Estrutura FBD_ONESHOT
InputBit
InputBitn-1
OutputBit
Execução:
Texto Estruturado
OSRI_01.InputBit := limit_switch1;
OSRI(OSRI_01);
State := OSRI_01.OutputBit;
Bloco de Funções
Operandos:
Bloco de Funções
Estrutura FBD_ONESHOT
InputBit
InputBit n-1
OutputBit
Execução:
Texto Estruturado
OSFI_01.InputBit := limit_switch1;
OSFI(OSFI_01);
Output_state := OSFI_01.OutputBit;
Bloco de Funções
Notas:
Se você quiser: Use esta instrução: Disponível nestas linguagens: Consulte página:
saber por quanto tempo o temporizador está TON lógica ladder 2-2
habilitado
saber por quanto tempo o temporizador está TOF lógica ladder 2-5
desabilitado
acumular o tempo RTO lógica ladder 2-9
saber por quanto tempo o temporizador está TONR texto estruturado 2-13
habilitado com o reset incorporado no bloco de bloco de funções
funções
saber por quanto tempo o temporizador está TOFR texto estrutural 2-16
desabilitado com o reset integrado em um bloco de funções
bloco de funções
acumular o tempo com o reset incorporado no RTOR texto estruturado 2-19
bloco de funções bloco de funções
fazer a contagem crescente CTU lógica ladder 2-22
fazer a contagem decrescente CTD lógica ladder 2-25
fazer a contagem crescente e decrescente no CTUD texto estruturado 2-29
bloco de funções bloco de funções
resetar um temporizador ou um contador RES lógica ladder 2-33
Operandos:
Lógica Ladder
Estrutura TIMER
Condições de Falha:
Execução
Condição: Ação da Lógica Ladder:
prescan Os bits .EN, .TT e .DN estão desenergizados.
O valor de .ACC é removido.
A saída da condição da linha é definida como falsa.
entrada da condição da linha é falsa Os bits .EN, .TT e .DN estão desenergizados.
O valor de .ACC é removido.
A saída da condição da linha é definida como falsa.
entrada da condição da linha é verdadeira
bit .DN = 1
examinar bit .DN
bit .DN = 0
bit .EN = 1
.ACC = 2,147,483,647
fim
Operandos:
Lógica Ladder
Estrutura TIMER
preset
Condições de Falha:
Execução
bit .DN = 0
examinar bit .DN
bit .DN = 1
bit .EN = 0
.ACC ≥ .PRE
examinar .ACC
bit .TT é energizado.
.ACC = .ACC + (current_time - last_time)
last_time = current_time
o valor de não
.ACC
ultrapassa
.ACC = 2,147,483,647
fim
entrada da condição da linha é verdadeira Os bits .EN, .TT, e .DN estão energizados.
O valor de .ACC está desenergizado.
A saída da condição da linha é definida como verdadeira.
postscan A saída da condição da linha é definida como falsa.
Operandos:
Lógica Ladder
Estrutura TIMER
Descrição: A instrução RTO acumula os tempos até que ela seja desabilitada.
Quando a instrução RTO é desabilitada, os seus valores de .ACC são
retidos. Você deve remover o valor de .ACC, geralmente, com uma
instrução RES referenciando a mesma estrutura TIMER.
preset
16651
valor acumulado do temporizador (.ACC)
0
o temporizador não alcançou o valor .PRE
Condições de Falha:
Execução
bit .DN = 1
examinar bit .DN
bit .DN = 0
bit .EN = 1
.ACC = 2,147,483,647
fim
Operandos:
TONR(TONR_tag);
Texto Estruturado
Bloco de Funções
Estrutura FBD_TIMER
TimerEnable
Execução
Condição: Ação do Bloco de Funções : Ação de Texto Estruturado:
prescan Nenhuma ação tomada. Nenhuma ação tomada.
primeiro scan da instrução EN, TT e DN estão desenergizados. EN, TT e DN estão desenergizados.
O valor de ACC é ajustado em zero. o valor ACC é definido como zero.
primeira execução da EN, TT e DN estão desenergizados. EN, TT e DN estão desligados.
instrução O valor ACC é ajustado em zero. o valor ACC é definido como zero.
EnableIn está O EnableOut é desenergizado, a instrução não faz na
desenergizado nada e as saídas não são atualizadas.
EnableIn está energizado Quando EnableIn muda de desenergizado para EnableIn é sempre energizado
energizado, a instrução inicializa conforme descrito A instrução executa.
no primeiro scan da instrução.
A instrução executa.
EnableOut está energizado.
Texto Estruturado
TONR_01.Preset := 500;
TONR_01.Reset : = reset;
TONR_O1.TimerEnable := limit_switch1;
TONR(TONR_01);
timer_state := TONR_01.DN;
Operandos:
Estrutura FBD_TIMER
Preset
Execução
Texto Estruturado
TOFR_01.Preset := 500
TOFR_01.Reset := reset;
TOFR_O1.TimerEnable := limit_switch1;
TOFR(TOFR_01);
timer_state2 := TOFR_01.DN;
Bloco de Funções
Operandos:
FBD_TIMER Structure
Descrição A instrução RTOR acumula os tempos até que ela seja desabilitada.
Quando a instrução RTOR é desabilitada, os seus valores de .ACC são
retidos. Você deve desligar o valor de .ACC usando a entrada Reset.
TimerEnable
Reset
Preset
16651
valor acumulado do temporizador (ACC)
0
o temporizador não atingiu o valor de .PRE
Execução:
Texto Estruturado
RTOR_01.Preset := 500
RTOR_01.Reset := reset;
RTOR_O1.TimerEnable := limit_switch1;
RTOR(RTOR_01);
timer_state3 := RTOR_01.DN;
Bloco de Funções
Operandos:
Lógica Ladder
Estrutura COUNTER
Preset
Execução
bit .UN é
desenergizado. bit .UN = 1
bit .DN é examinar o bit .UN
desenergizado.
bit .OV é desenergizado.
bit .UN = 0
.ACC ≥ .PRE
examinar .ACC
fim
Operandos:
Lógica Ladder
Estrutura COUNTER
Preset
16637
Execução
bit .OV = 0
.ACC ≥ .PRE
examinar .ACC
fim
Exemplo: Uma transportadora traz peças para uma zona de buffer. Cada vez que
uma peça entra, limit_switch_1 é habilitado e counter_1 incrementa
em 1. Cada vez que uma peça sai, limit_switch_2 é habilitado e
counter_1 decrementa em 1. Se houver 100 peças na zona de buffer
(counter_1.dn está energizado), conveyor_a liga e impede que a
transportadora traga mais peças até que o buffer tenha espaço.
Operandos:
Bloco de Funções
Estrutura FBD_COUNTER
Contagem crescente
CUEnable
preset
Contagem decrescente
CDEnable
preset
16637
Execução
Texto Estruturado
CTUD_01.Preset := 500;
CTUD_01.Reset := Restart;
CTUD_O1.CUEnable := limit_switch1;
CTUD(CTUD_01);
counter_state := CTUD_01.DN;
Bloco de Funções
Reset (RES) A instrução RES reseta uma estrutura TIMER, COUNTER ou CONTROL.
Operandos:
Lógica Ladder
!
Flags de Status Aritmético: não afetados
Execução
Exemplos:
Exemplo: Descrição:
Quando habilitado, reseta timer_3.
Instruções de Entrada/Saída
(MSG, GSV, SSV)
Operandos:
Lógica Ladder
Texto Estruturado
MSG(MessageControl);
Os operandos são os mesmos, como aqueles da instrução MSG da
lógica ladder.
Estrutura MESSAGE
bit .EN
bit .EW
bit .ST
41382
1 2 3 4 5 6 7
Execução
Condição: Ação da Lógica Ladder: Ação de Texto Estruturado:
prescan A saída da condição da linha é definida como falsa. Nenhuma ação tomada.
bit .EW = 1
examinar o bit
.EW
bit .EW = 0
bit .ST = 1
examinar o bit .ST
bit .ST = 0
bit .DN = 1
examinar bit .DN
bit .DN = 0
não sim
bit .DN = 1
examinar bit .DN sim conexão do não
módulo em
operação
bit .DN = 0 bit .EN é desenergizado. executar pedido de
mensagem
bit .ER = 1
examinar bit .ER bit .EW está energizado bit .ER é energizado
bit .ER = 0
saída da condição da
linha é definida como
fim
execução da instrução
bit .EN = 1 bit .EN = 0
examinar bit .EN
não sim
fim
postscan A saída da condição da linha é definida como falsa. Nenhuma ação tomada.
Códigos de Erro
Especificação dos Detalhes Depois de inserir a instrução MSG e especificar a estrutura MESSAGE,
use a caixa de diálogo Message Configuration para especificar os
da Configuração detalhes da mensagem.
42976
• Se você selecionar um tipo de mensagem de escrita, Source Tag é o primeiro elemento do tag que
você quer enviar para o dispositivo alvo.
Number of Elements O número de elementos que você lê/escreve depende do tipo de dados que está sendo usado. Um elemento
se refere a um "fragmento" dos dados relacionados. Por exemplo, o tag timer1 é um elemento composto por
uma estrutura de controle do temporizador.
Destination Element • Se você selecionar um tipo de mensagem de leitura, o Destination Element é o primeiro elemento do
tag no controlador Logix5000 no qual você quer armazenar os dados que você lê a partir do dispositivo
alvo.
Lógica Ladder
Texto Estruturado
Tabela 3.1 Tipos de dados para mensagens PLC5 Typed Read e Typed Write
1 1 1 2 1
2 2 2 4 3
3 3 3
4 4 4
Os comandos de tipo mantêm o valor e a estrutura dos dados. Os comandos de faixa de palavra preenchem o tag de destino de forma
contínua. O valor e a estrutura dos dados são modificados dependendo
do tipo de dado de destino.
Para este tipo de dados do SLC ou Use este tipo de dados do Logix5000:
MicroLogix:
F REAL
L (controladores MicroLogix 1200 e 1500) DINT
N INT
1 1 1 2 1
2 2 2 4 3
3 3 3
4 4 4
Os comandos de tipo mantêm o valor e a estrutura dos dados. Os comandos de faixa de palavra preenchem o tag de destino de forma
contínua. O valor e a estrutura dos dados são modificados dependendo
do tipo de dado de destino.
Especificação de Detalhes Ao configurar uma instrução MSG, você especifica estes detalhes na
guia Communication.
de Comunicação
43008
Especificar um caminho
− I/O Configuration
peer_controller
local_module,port,address,port,address
Onde: Para: É:
port backplane de qualquer controlador ou módulo 1756 1
Porta DF1 de um controlador Logix5000 2
a porta ControlNet de um módulo 1756-CNB
Porta Ethernet de um módulo 1756-ENBx ou -ENET
Porta DH+ em um canal A de um módulo 1756-DHRIO
Porta DH+ em um canal B de um módulo 1756-DHRIO 3
address backplane ControlLogix número do slot
rede DF1 endereço da estação (0-254)
rede ControlNet número do nó (1-99 decimal)
rede DH+ 8# seguido pelo número do nó (1-77 octal)
Por exemplo, para especificar o endereço do nó octal de
37, tipo 8#37.
Rede EtherNet/IP Você pode especificar um módulo em uma rede
EtherNet/IP usando qualquer um destes formatos:
− I/O Configuration
Mensagem
Percurso: peer_controller
Onde:
peer_controller é o nome do controlador que recebe a mensagem.
− I/O Configuration
Mensagem
switch
Percurso: Local_ENB,2,127.127.127.12
Onde: É:
Local_ENB nome do módulo 1756-ENBx no chassi local
2 porta da Ethernet do módulo 1756-ENBx no chassi local
127.127.127.12 endereço IP do controlador SLC 5/05
− I/O Configuration
Mensagem
rede DH+
Percurso: Local_DHRIO
Onde:
Local_DHRIO é o nome no módulo 1756-DHRIO no mesmo chassi como o controlador
que envia a mensagem.
Esse tipo de mensagem: Usando esse método de Usa uma Que você
comunicação: conexão: pode colocar
no cache:
leitura ou escrita da tabela de dados CIP CIP ✓ ✓
CLP2, CLP3, CLP5 ou SLC (todos os tipos) CIP
CIP com Source ID
DH+ ✓ ✓
CIP generic N/A ✓1 ✓2
leitura ou escrita em block-transfer N/A ✓ ✓
1
Somente certos tipos de módulo alvo requisitam uma conexão.
2
Considere como cache somente se o módulo alvo requisitar uma
conexão.
Se: Então:
sim A. Limpe a caixa de verificação Cache Connection .
B. Pule a etapa 2.
não Vá para etapa 2.
Se: Então:
sim Deixe a caixa de verificação Cache Connection
selecionada.
não Limpe a caixa de verificação Cache Connection .
Se: Então:
sim Deixe a caixa de verificação Cache Connection
selecionada.
não Limpe a caixa de verificação Cache Connection .
Lógica Ladder
Texto Estruturado
GSV(ClassName,InstanceName,AttributeName,Dest);
SSV(ClassName,InstanceName,AttributeName,Source);
atributo para cada instrução. Para a instrução GSV, você pode obter
valores para todos os atributos disponíveis. Para a instrução SSV, o
software exibe somente aqueles atributos, cuja configuração é
permitida
! pessoais.
Condições de Falha:
Execução
Condição: Ação da Lógica Ladder: Ação de Texto Estruturado:
prescan A saída da condição da linha é definida como falsa. Nenhuma ação tomada.
entrada da condição da A saída da condição da linha é definida como falsa. na
linha é falsa
entrada da condição da A instrução executa. na
linha é verdadeira A saída da condição da linha é definida como
verdadeira.
EnableIn está energizado na EnableIn é sempre energizado
A instrução executa.
a instrução executa Obtenha ou configure o valor especificado. Obtenha ou configure o valor especificado.
postscan A saída da condição da linha é definida como falsa. Nenhuma ação tomada.
Objetos GSV/SSV Ao inserir uma instrução GSV/SSV, você especifica o objeto e atributo
que você acessará. Em alguns casos, haverá mais do que um exemplo
do mesmo tipo de objeto, de forma que você também possa
ProductRev INT GSV Identifica a revisão atual do produto. O display deve ser
hexadecimal.
O byte menos significativo contém a revisão principal; o byte
mais significativo contém a revisão principal.
SerialNumber DINT GSV Número serial do dispositivo.
O número serial é atribuído quando o dispositivo é construído.
Onde: É:
msg_1 mensagem cujo atributo você quer alterar
msg_1_type tag que armazena o valor do atributo MessageType
tag_a tag que armazena um 0.
msg_1_path tag do array que armazena o novo caminho da conexão para mensagem
Lógica Ladder
SSV SSV
Set System Value Set System Value
Class name MESSAGE Class name MESSAGE
Instance name msg_1 Instance name msg_1
Attribute Name ConnectionPath Attribute Name MessageType
Source msg_1_path[0] Source msg_1_type
6 2
msg_1.EN MSG
1 / Type - CIP Data Table Write EN
Message Control msg_1 ... DN
ER
Texto Estruturado
IF msg_path THEN
GSV(MESSAGE,msg_1,MessageType,msg_1_type);
SSV(MESSAGE,msg_1,MessageType,tag_a);
SSV(MESSAGE,msg_1,ConnectionPath,msg_1_path[0]);
SSV(MESSAGE,msg_1,MessageType,msg_1_type);
END_IF;
IF NOT msg_1.EN THEN
MSG(msg_1);
END_IF;
Lógica Ladder
Texto Estruturado
GSV(MODULE,disc_in_2,FaultCode,disc_in_2_info.FaultCode);
GSV(MODULE,disc_in_2,FaultInfo,disc_in_2_info.FaultInfo);
GSV(MODULE,disc_in_2,Mode,disc_in_2info.Mode);
Lógica Ladder
Texto Estruturado
GSV(PROGRAM,DISCRETE,LASTSCANTIME,
discrete_info.LastScanTime);
GSV(PROGRAM,DISCRETE,MAXSCANTIME,discrete_info.MaxScanTime);
Lógica Ladder
Texto Estruturado
GSV(TASK,IO_TEST,LASTSCANTIME,io_test_info.LastScanTime);
GSV(TASK,IO_TEST,MAXSCANTIME,io_test_info.MaxScanTime);
GSV(TASK,IO_TEST,WATCHDOG,io_test_info.WatchDog);
Lógica Ladder
Texto Estruturado
IF SW.1 THEN
discrete_prog_flag := enable_prog;
ELSE
discrete_prog_flag := disable_prog;
END_IF;
SSV(PROGRAM,DISCRETE,DISABLEFLAG,discrete_prog_flag);
Instruções de Comparação
(CMP, EQU, GEQ, GRT, LEQ, LES, LIM, MEQ, NEQ)
Comparação (CMP) A instrução CMP realiza uma comparação nas operações aritméticas
especificadas na expressão.
Operandos:
Lógica Ladder
Texto Estruturado
IF BOOL_expression THEN
<statement>;
END_IF;
Flags de Status Aritmético: A instrução CMP afeta apenas os flags de status aritmético se a
expressão contiver um operador (ex: +, −, *, /) que os afete.
Execução
a expressão é
verdadeira saída da condição da
linha é definida como
avaliar a expressão verdadeira
a expressão é falsa
fim
Expressões CMP
Operadores válidos
Formatação de expressões
Seqüência: Operação:
1. ()
2. ABS, ACS, ASN, ATN, COS, DEG, FRD, LN, LOG, RAD, SIN,
SQR, TAN, TOD, TRN
3. **
4. − (negativo), NOT
5. *, /, MOD
6. <, <=, >, >=, =
7. − (subtração), +
8. AND
9. XOR
10. OR
Operador: Descrição:
= igual
< menor que
<= menor ou igual a
> maior que
>= maior ou igual a
<> diferente de
Operandos:
Lógica Ladder
Texto Estruturado
IF sourceA = sourceB THEN Use um sinal igual “=” como um operador em uma expressão. Esta
<statements>; expressão avalia se sourceA é igual a sourceB.
Bloco de Funções
estrutura FBD_COMPARE
Descrição: Use a instrução EQU para comparar dois números ou duas strings de
caracteres ASCII. Quando comparar strings:
Execução
Lógica Ladder
Condição: Ação:
prescan A saída da condição da linha é definida como falsa.
entrada da condição da linha é falsa A saída da condição da linha é definida como falsa.
entrada da condição da linha é verdadeira
não
saída da condição da
linha é definida como
falsa
fim
Bloco de Funções
Condição: Ação:
prescan Nenhuma ação tomada.
primeiro scan da instrução Nenhuma ação tomada.
primeira execução da instrução Nenhuma ação tomada.
EnableIn está desenergizado EnableOut está desenergizado.
EnableIn está energizado A instrução executa.
EnableOut está energizado.
postscan Nenhuma ação tomada.
Exemplo: Se value_1 for igual a value_2, energize light_a. Se value_1 não for
igual a value_2, desligue light_a.
Lógica Ladder
Texto Estruturado
Bloco de Funções
Maior ou Igual a (GEQ) A instrução GEQ testa se Source A é maior ou igual a Source B.
Operandos:
Lógica Ladder
Texto Estruturado
IF sourceA >= sourceB THEN Use sinais 'maior que', adjacentes e iguais “>=” como operador em
<statements>; uma expressão. Esta expressão avalia se sourceA é maior ou igual a
sourceB.
Bloco de Funções
Estrutura FBD_COMPARE
Execução
Lógica Ladder
Condição: Ação:
prescan A saída da condição da linha é definida como falsa.
entrada da condição da linha é falsa A saída da condição da linha é definida como falsa.
entrada da condição da linha é verdadeira
não
saída da condição da
linha é definida como
falsa
fim
Bloco de Funções
Condição: Ação:
prescan Nenhuma ação tomada.
primeiro scan da instrução Nenhuma ação tomada.
primeira execução da instrução Nenhuma ação tomada.
EnableIn está desenergizado EnableOut está desenergizado.
EnableIn está energizado A instrução executa.
EnableOut está energizado.
postscan Nenhuma ação tomada.
Lógica Ladder
Texto Estruturado
Bloco de Funções
Maior que (GRT) A instrução GRT testa se Source A é maior que Source B.
Operandos:
Lógica Ladder
Texto Estruturado
IF sourceA > sourceB THEN Use o sinal maior que ">" como um operador em uma expressão. Esta
<statements>; expressão avalia se sourceA é maior que sourceB.
Bloco de Funções
estrutura FBD_COMPARE
Ao comparar strings:
Execução
Lógica Ladder
Condição: Ação:
prescan A saída da condição da linha é definida como falsa.
entrada da condição da linha é falsa A saída da condição da linha é definida como falsa.
entrada da condição da linha é verdadeira
saída da condição da
sim linha é definida como
Source A * Source B
verdadeira
não
saída da condição da
linha é definida como
falsa
fim
Bloco de Funções
Condição: Ação:
prescan Nenhuma ação tomada.
primeiro scan da instrução Nenhuma ação tomada.
primeira execução da instrução Nenhuma ação tomada.
EnableIn está desenergizado EnableOut está desenergizado.
EnableIn está energizado A instrução executa.
EnableOut está energizado.
postscan Nenhuma ação tomada.
Exemplo: Se value_1 for maior que value_2, energize light_1. Se value_1 for
menor ou igual a value_2, desligue light_1.
Lógica Ladder
Texto Estruturado
Bloco de Funções
Menor ou Igual a (LEQ) A instrução LEQ testa se Source A é menor ou igual a Source B.
Operandos:
Lógica Ladder
Texto Estruturado
IF sourceA <= sourceB THEN Use sinais 'menor que', adjacentes e iguais “<=" como operadores em
<statements>; uma expressão. Esta expressão avalia se sourceA é menor ou igual a
sourceB.
Bloco de Funções
estrutura FBD_COMPARE
Execução
Lógica Ladder
Condição: Ação:
prescan A saída da condição da linha é definida como falsa.
entrada da condição da linha é falsa A saída da condição da linha é definida como falsa.
entrada da condição da linha é verdadeira
saída da condição da
sim linha é definida como
Source A * Source B
verdadeira
não
fim
Bloco de Funções
Condição: Ação:
prescan Nenhuma ação tomada.
primeiro scan da instrução Nenhuma ação tomada.
primeira execução da instrução Nenhuma ação tomada.
EnableIn está desenergizado EnableOut está desenergizado.
EnableIn está energizado A instrução executa.
EnableOut está energizado.
postscan Nenhuma ação tomada.
Lógica Ladder
Texto Estruturado
Bloco de Funções
Menor Que (LES) A instrução LES testa se Source A é menor que Source B.
Operandos:
Lógica Ladder
Texto Estruturado
IF sourceA < sourceB THEN Use o sinal menor que "<" como um operador em uma expressão.
<statements>; Esta expressão avalia se sourceA é menor que sourceB.
Bloco de Funções
Estrutura FBD_COMPARE
Execução
Lógica Ladder
Condição: Ação:
prescan A saída da condição da linha é definida como falsa.
entrada da condição da linha é falsa A saída da condição da linha é definida como falsa.
entrada da condição da linha é verdadeira
não
saída da condição da
linha é definida como
falsa
fim
Bloco de Funções
Condição: Ação:
prescan Nenhuma ação tomada.
primeiro scan da instrução Nenhuma ação tomada.
primeira execução da instrução Nenhuma ação tomada.
EnableIn é falso EnableOut é desenergizado.
EnableIn é verdadeiro A instrução executa.
EnableOut está energizado.
postscan Nenhuma ação tomada.
Exemplo: Se value_1 for menor que value_2, energize light_3. Se value_1 for
maior ou igual a value_2, desenergize light_3.
Lógica Ladder
Texto Estruturado
Bloco de Funções
Limite (LIM) A instrução LIM testa se o valor de teste está dentro da faixa de Limite
Inferior a Limite Superior.
Operandos:
Lógica Ladder
Texto Estruturado
Texto estruturado não tem uma instrução LIM, mas é possível obter os
mesmos resultados usando texto estruturado.
END_IF;
Bloco de Funções
Estrutura FBD_LIMIT
Descrição: A instrução LIM testa se o valor de Test está dentro da faixa do Limite
Inferior ao Limite Superior.
0
0
−1 +1
−1 +1
limite inferior
limite superior
limite superior
limite inferior
−(n+1) +n
−(n+1) +n
n = valor máximo n = valor máximo
Execução
Lógica Ladder
Condição: Ação:
prescan A saída da condição da linha é definida como falsa.
entrada da condição da linha é falsa A saída da condição da linha é definida como falsa.
entrada da condição da linha é verdadeira
a comparação é
verdadeira saída da condição da linha é
avalia limite
definida como verdadeira
a comparação é falsa
saída da condição da
linha é definida como
falsa
fim
Bloco de Funções
Condição: Ação:
prescan Nenhuma ação tomada.
primeiro scan da instrução Nenhuma ação tomada.
primeira execução da instrução Nenhuma ação tomada.
EnableIn está desenergizado O EnableOut é desenergizado, a instrução não faz nada e as saídas não são atualizadas.
EnableIn está energizado A instrução executa.
EnableOut está energizado.
postscan Nenhuma ação tomada.
Lógica Ladder
Texto Estruturado
END_IF;
Bloco de Funções
Lógica Ladder
Texto Estruturado
END_IF;
Bloco de Funções
Máscara Igual a (MEQ) A instrução MEQ passa os valores de Source e Compare através de
uma Máscara e compara os resultados.
Operandos:
Lógica Ladder
Texto Estruturado
Texto estruturado não tem uma instrução MEQ, mas é possível obter
os mesmos resultados usando texto estruturado.
Bloco de Funções
estrutura FBD_MASK_EQUAL
Descrição: “1“ na máscara significa que o bit de dados passou. “0“ na máscara
significa que o bit de dados foi bloqueado. Geralmente, os valores
Source, Mask e Compare são todos do mesmo tipo de dados.
Prefixo: Descrição:
16# hexadecimal
por exemplo: 16#0F0F
8# octal
por exemplo: 8#16
2# binário
por exemplo: 2#00110011
Execução
Lógica Ladder
Condição: Ação:
prescan A saída da condição da linha é definida como falsa.
entrada da condição da linha é falsa A saída da condição da linha é definida como falsa.
entrada da condição da linha é verdadeira
não
saída da condição da
linha é definida como
falsa
fim
Bloco de Funções
Condição: Ação:
prescan Nenhuma ação tomada.
primeiro scan da instrução Nenhuma ação tomada.
primeira execução da instrução Nenhuma ação tomada.
EnableIn está desenergizado O EnableOut é desenergizado, a instrução não faz nada e as saídas não são atualizadas.
EnableIn está energizado A instrução executa.
EnableOut está energizado.
postscan Nenhuma ação tomada.
value_1 0 1 0 1 0 1 0 1 1 1 1 1 1 1 1 1 value_2 0 1 0 1 0 1 0 1 1 1 1 1 0 0 0 0
mask_1 1 1 1 1 1 1 1 1 1 1 1 1 0 0 0 0 mask_1 1 1 1 1 1 1 1 1 1 1 1 1 0 0 0 0
Lógica Ladder
Texto Estruturado
Bloco de Funções
value_1 0 1 0 1 0 1 0 1 1 1 1 1 1 1 1 1 value_2 0 1 0 1 0 1 0 1 1 1 1 1 0 0 0 0
mask_1 0 0 0 0 0 0 0 0 0 0 0 0 1 1 1 1 mask_1 0 0 0 0 0 0 0 0 0 0 0 0 1 1 1 1
Lógica Ladder
Texto Estruturado
Bloco de Funções
Operandos:
Lógica Ladder
Texto Estruturado
IF sourceA <> sourceB THEN Use os sinais maior que e menor que “<>“ juntos como operador em
<statements>; uma expressão. Esta expressão avalia se sourceA é diferente de
sourceB.
Bloco de Funções
estrutura FBD_COMPARE
Execução
Lógica Ladder
Condição: Ação:
prescan A saída da condição da linha é definida como falsa.
entrada da condição da linha é falsa A saída da condição da linha é definida como falsa.
entrada da condição da linha é verdadeira
saída da condição da
sim linha é definida como
Source A = Source B; verdadeira
não
saída da condição da
linha é definida como
falsa
fim
Bloco de Funções
Condição: Ação:
prescan Nenhuma ação tomada.
primeiro scan da instrução Nenhuma ação tomada.
primeira execução da instrução Nenhuma ação tomada.
EnableIn está desenergizado EnableOut está desenergizado.
EnableIn está energizado A instrução executa.
EnableOut está energizado.
postscan Nenhuma ação tomada.
Exemplo: Se value_1 não for igual a value_2, energize light_4. Se value_1 for
igual a value_2, desenergize light_4.
Lógica Ladder
Texto Estruturado
Bloco de Funções
Operandos:
Lógica Ladder
Texto Estruturado
destination := numeric_expresion;
Execução:
Operadores válidos
Operadores: Descrição: Ótimo: Operadores: Descrição: Ótimo:
+ adição DINT, REAL LN log neperiano REAL
- subtração/negativo DINT, REAL LOG log base 10 REAL
* multiplicação DINT, REAL MOD módulo DINT, REAL
/ divisão DINT, REAL NOT complementação DINT
** expoente (x elevado a y) DINT, REAL OR OR (OU) DINT
ABS valor absoluto DINT, REAL RAD graus em radianos DINT, REAL
ACS arco co-seno REAL SIN seno REAL
AND AND (E) DINT SQR raiz quadrada DINT, REAL
ASN arco seno REAL TAN tangente REAL
ATN arco tangente REAL TOD inteiro para BCD DINT
COS co-seno REAL TRN truncamento DINT, REAL
DEG radianos em graus DINT, REAL XOR OR exclusivo DINT
FRD BCD para inteiro DINT
Formatação de expressões
Seqüência: Operação:
1. ()
2. ABS, ACS, ASN, ATN, COS, DEG, FRD, LN, LOG, RAD, SIN, SQR,
TAN, TOD, TRN
3. **
4. − (negativo), NOT
5. *, /, MOD
6. − (subtração), +
7. AND
8. XOR
9. OR
Operandos:
Lógica Ladder
Texto Estruturado
dest := sourceA + sourceB; Use o sinal mais “+” como um operador em uma expressão. Essa
expressão adiciona sourceA a sourceB e armazena o resultado em
dest.
Bloco de Funções
Estrutura FBD_MATH
Execução:
Lógica Ladder
Condição: Ação:
prescan A saída da condição da linha é definida como falsa.
entrada da condição da linha é falsa A saída da condição da linha é definida como falsa.
entrada da condição da linha é verdadeira Destination = Source A + Source B
A saída da condição da linha é definida como verdadeira.
postscan A saída da condição da linha é definida como falsa.
Bloco de Funções
Condição: Ação:
prescan Nenhuma ação tomada.
primeiro scan da instrução Nenhuma ação tomada.
primeira execução da instrução Nenhuma ação tomada.
EnableIn está desenergizado EnableOut está desenergizado.
EnableIn está energizado A instrução executa.
EnableOut está energizado.
postscan Nenhuma ação tomada.
Lógica Ladder
Texto Estruturado
Bloco de Funções
Operandos:
Lógica Ladder
Texto Estruturado
dest := sourceA - sourceB; Use o sinal de menos (“−”) como um operador em uma expressão.
Essa expressão subtrai sourceA da sourceB e armazena o resultado em
dest.
Bloco de Funções
Estrutura FBD_MATH
Execução:
Lógica Ladder
Condição: Ação:
prescan A saída da condição da linha é definida como falsa.
entrada da condição da linha é falsa A saída da condição da linha é definida como falsa.
entrada da condição da linha é verdadeira Destination = Source B - Source A
A saída da condição da linha é definida como verdadeira.
postscan A saída da condição da linha é definida como falsa.
Bloco de Funções
Condição: Ação:
prescan Nenhuma ação tomada.
primeiro scan da instrução Nenhuma ação tomada.
primeira execução da instrução Nenhuma ação tomada.
EnableIn está desenergizado EnableOut está desenergizado.
EnableIn está energizado A instrução executa.
EnableOut está energizado.
postscan Nenhuma ação tomada.
Lógica Ladder
Texto Estruturado
Bloco de Funções
Operandos:
Lógica Ladder
Texto Estruturado
dest := sourceA * sourceB; Use o sinal de multiplicar (“∗”) como um operador em uma
expressão. Essa expressão multiplica sourceA por sourceB e
armazena o resultado em dest.
Bloco de Funções
Estrutura FBD_MATH
Execução:
Lógica Ladder
Condição: Ação:
prescan A saída da condição da linha é definida como falsa.
entrada da condição da linha é falsa A saída da condição da linha é definida como falsa.
entrada da condição da linha é verdadeira Destination = Source B x Source A
A saída da condição da linha é definida como verdadeira.
postscan A saída da condição da linha é definida como falsa.
Bloco de Funções
Condição: Ação:
prescan Nenhuma ação tomada.
primeiro scan da instrução Nenhuma ação tomada.
primeira execução da instrução Nenhuma ação tomada.
EnableIn está desenergizado EnableOut está desenergizado.
EnableIn está energizado A instrução executa.
EnableOut está energizado.
postscan Nenhuma ação tomada.
Lógica Ladder
Texto Estruturado
Bloco de Funções
Divisão (DIV) A instrução DIV divide Source A por Source B e coloca o resultado em
Destination.
Operandos:
Lógica Ladder
Texto Estruturado
dest := sourceA / sourceB; Use o sinal de dividir (“/”) como um operador em uma expressão.
Essa expressão divide sourceA por sourceB e armazena o resultado
em dest.
Bloco de Funções
Estrutura FBD_MATH
Se Source B for zero e: E o Destination for um: E o resultado for: Então Destination será definido
em:
todos os operandos são inteiros Source A
(SINT, INT ou DINT)
pelo menos um operando é um REAL SINT, INT ou DINT positivo -1
negativo 0
REAL positivo 1.$ (infinito positivo)
negativo -1.$ (infinito negativo)
Para detectar uma divisão por zero possível, examine o bit de falha de
advertência (S:MINOR). Consulte Logix5000 Controllers Common
Procedures, publicação 1756-PM001.
Condições de Falha:
Execução:
Lógica Ladder
Condição: Ação:
prescan A saída da condição da linha é definida como falsa.
entrada da condição da linha é falsa A saída da condição da linha é definida como falsa.
entrada da condição da linha é verdadeira Destination = Source A / Source B
A saída da condição da linha é definida como verdadeira.
postscan A saída da condição da linha é definida como falsa.
Bloco de Funções
Condição: Ação:
prescan Nenhuma ação tomada.
primeiro scan da instrução Nenhuma ação tomada.
primeira execução da instrução Nenhuma ação tomada.
EnableIn está desenergizado EnableOut está desenergizado.
EnableIn está energizado A instrução executa.
EnableOut está energizado.
postscan Nenhuma ação tomada.
Lógica Ladder
Texto Estruturado
Bloco de Funções
Exemplo 2: As instruções DIV e MOV trabalham juntas para dividir dois inteiros,
arredondar o resultado e colocá-lo em um tag inteiro:
• A instrução DIV divide dint_a por dint_b.
• Para arredondar o resultado, o Destination é um tag REAL. (Se o
destino fosse um tag inteiro (SINT, INT ou DINT), a instrução
truncaria o resultado.)
• A instrução MOV muda o resultado arredondado (real_temp) de
DIV para divide_result_rounded.
• Como divide_result_rounded é um tag DINT o valor de
real_temp é arredondado e colocado no DINT destino.
Lógica Ladder
43009
Módulo (MOD) A instrução MOD divide Source A por Source B e coloca o resto em
Destination
Operandos:
Lógica Ladder
Texto Estruturado
dest := sourceA MOD
Use MOD como um operador em uma expressão. Essa expressão
sourceB;
divide sourceA por sourceB e armazena o restante em dest.
Bloco de Funções
Estrutura FBD_MATH
Se Source B for zero e: E o destino for um: E o resultado for: Então o destino será definido em:
todos os operandos são inteiros Source A
(SINT, INT ou DINT)
pelo menos um operando é um REAL SINT, INT ou DINT positivo -1
negativo 0
REAL positivo 1.$ (infinito positivo)
negativo -1.$ (infinito negativo)
Para detectar uma divisão por zero possível, examine o bit de falha de
advertência (S:MINOR). Consulte Logix5000 Controllers Common
Procedures, publicação 1756-PM001.
Condições de Falha:
Execução:
Lógica Ladder
Condição: Ação:
prescan A saída da condição da linha é definida como falsa.
entrada da condição da linha é falsa A saída da condição da linha é definida como falsa.
entrada da condição da linha é verdadeira Destination = Source A – ( TRN ( Source A / Source B ) * Source B )
A saída da condição da linha é definida como verdadeira.
postscan A saída da condição da linha é definida como falsa.
Bloco de Funções
Condição: Ação:
prescan Nenhuma ação tomada.
primeiro scan da instrução Nenhuma ação tomada.
primeira execução da instrução Nenhuma ação tomada.
EnableIn está desenergizado EnableOut está desenergizado.
postscan Nenhuma ação tomada.
Lógica Ladder
Texto Estruturado
Bloco de Funções
Raiz Quadrada (SQR) A instrução SQR calcula a raiz quadrada de Source e coloca o
resultado em Destination.
Operandos:
Lógica Ladder
Texto Estruturado
dest := SQRT(source); Use SQRT como uma função. Esta expressão calcula a raiz quadrada
de source e armazena o resultado em dest.
Bloco de Funções
Estrutura FBD_MATH_ADVANCED
Execução:
Lógica Ladder
Condição: Ação:
prescan A saída da condição da linha é definida como falsa.
entrada da condição da linha é falsa A saída da condição da linha é definida como falsa.
entrada da condição da linha é verdadeira
Destination = Source
A saída da condição da linha é definida como verdadeira.
postscan A saída da condição da linha é definida como falsa.
Bloco de Funções
Condição: Ação:
prescan Nenhuma ação tomada.
primeiro scan da instrução Nenhuma ação tomada.
primeira execução da instrução Nenhuma ação tomada.
EnableIn está desenergizado EnableOut está desenergizado.
EnableIn está energizado A instrução executa.
EnableOut está energizado.
postscan Nenhuma ação tomada.
Lógica Ladder
Texto Estruturado
multiply_result := SQRT(value_1);
Bloco de Funções
Operandos:
Lógica Ladder
Texto Estruturado
dest := -source; Use o sinal menos (“−”) como um operador em uma expressão. Esta
expressão altera o sinal de source e armazena o resultado em dest.
Bloco de Funções
Estrutura FBD_MATH
Execução:
Lógica Ladder
Condição: Ação:
prescan A saída da condição da linha é definida como falsa.
entrada da condição da linha é falsa A saída da condição da linha é definida como falsa.
entrada da condição da linha é verdadeira Destination = 0 − Source
A saída da condição da linha é definida como verdadeira.
postscan A saída da condição da linha é definida como falsa.
Bloco de Funções
Condição: Ação:
prescan Nenhuma ação tomada.
primeiro scan da instrução Nenhuma ação tomada.
primeira execução da instrução Nenhuma ação tomada.
EnableIn está desenergizado EnableOut está desenergizado.
EnableIn está energizado A instrução executa.
EnableOut está energizado.
postscan Nenhuma ação tomada.
Lógica Ladder
Texto Estruturado
negate_result := -value_1;
Bloco de Funções
Valor Absoluto (ABS) A instrução ABS retira o valor absoluto de Source e coloca o resultado
em Destination.
Operandos:
Lógica Ladder
Texto Estruturado
dest := ABS(source); Use ABS como uma função. Esta expressão calcula o valor absoluto
de source e armazena o resultado em dest.
Bloco de Funções
Estrutura FBD_MATH_ADVANCED
Execução:
Lógica Ladder
Condição: Ação:
prescan A saída da condição da linha é definida como falsa.
entrada da condição da linha é falsa A saída da condição da linha é definida como falsa.
entrada da condição da linha é verdadeira Destination = | Source |
A saída da condição da linha é definida como verdadeira.
postscan A saída da condição da linha é definida como falsa.
Bloco de Funções
Condição: Ação:
prescan Nenhuma ação tomada.
primeiro scan da instrução Nenhuma ação tomada.
primeira execução da instrução Nenhuma ação tomada.
EnableIn está desenergizado EnableOut está desenergizado.
EnableIn está energizado A instrução executa.
EnableOut está energizado.
postscan Nenhuma ação tomada.
Lógica Ladder
Texto Estruturado
value_1_absolute := ABS(value_1);
Bloco de Funções
Instruções de Movimentação/Lógica
(MOV, MVM, BTD, MVMT, BTDT, CLR, SWPB, AND, OR, XOR, NOT, BAND,
BOR, BXOR, BNOT)
Operandos:
Lógica Ladder
Texto Estruturado
dest := source; Use um atributo “:=” com uma expressão. Este atributo movimenta o
valor em source para dest.
Execução:
Lógica Ladder
Texto Estruturado
value_2 := value_1
Movimento com Máscara A instrução MVM copia Source em Destination e permite que parte
dos dados sejam mascarados.
(MVM)
Essa instrução está disponível no texto estruturado e bloco de funções
como MVMT, consulte a página 6-8.
Operandos:
Lógica Ladder
Texto Estruturado
dest := (Dest AND NOT
Esta instrução está disponível no texto estruturado como MVMT. Ou
(Mask)
você combina a lógica bitwise em uma expressão e atribui o resultado
OR (Source AND Mask);
ao destino. Esta expressão realiza um movimento com máscara em
Source.
Descrição: A instrução MVM usa Mask para passar ou bloquear os bits de dados
Source. Um “1“ na máscara significa que o bit de dados passou. Um
“0“ na máscara significa que o bit de dados foi bloqueado.
Prefixo: Descrição:
16# hexadecimal
por exemplo; 16#0F0F
8# octal
por exemplo; 8#16
2# binário
por exemplo; 2#00110011
Execução:
1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1
0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1
1 1 1 1 0 0 0 0 1 1 1 1 0 0 0 0 1 1 1 1 0 0 0 0 1 1 1 1 0 0 0 0
0 1 0 1 1 1 1 1 0 1 0 1 1 1 1 1 0 1 0 1 1 1 1 1 0 1 0 1 1 1 1 1
Lógica Ladder
Texto Estruturado
Operandos:
Bloco de Funções
Estrutura FBD_MASKED_MOVE
Prefixo: Descrição:
16# hexadecimal
por exemplo; 16#0F0F
8# octal
por exemplo; 8#16
2# binário
por exemplo; 2#00110011
Execução:
Target 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1
Dest 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1
Source 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1
Mask1 1 1 1 1 0 0 0 0 1 1 1 1 0 0 0 0 1 1 1 1 0 0 0 0 1 1 1 1 0 0 0 0
Dest 0 1 0 1 1 1 1 1 0 1 0 1 1 1 1 1 0 1 0 1 1 1 1 1 0 1 0 1 1 1 1 1
Texto Estruturado
MVMT_01.Source := value_1;
MVMT_01.Mask := mask1;
MVMT_01.Target := target;
MVMT(MVMT_01);
value_masked := MVMT_01.Dest;
Bloco de Funções
Distribuição de Bits (BTD) A instrução BTD copia os bits especificados de Source, muda os bits
para a posição adequada e escreve os bits em Destination.
Operandos:
Lógica Ladder
Execução:
source bit
value_1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1
destination bit
Distribuição de Bits com A instrução BTDT primeiro copia Target para Destination. Em seguida,
copia os bits específicos de Source, muda os bits para a posição
Arquivo-alvo (BTDT) apropriada e os escreve os bits em Destination. Target e Source se
mantêm inalterados.
Operandos:
Bloco de Funções
Estrutura FBD_BIT_FIELD_DISTRIBUTE
Execução:
Target 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 0 0 0 0 0 0 0 0 0 0 0
Dest 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 0 0 0 0 0 0 0 0 0 0 0
Source 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 0 0 0 0 0 0 0 0 0 0 0
Dest 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
Texto Estruturado
BTDT_01.Source := source
BTDT_01.SourceBit := source_bit;
BTDT_01.Length := length;
BTDT_01.DestBit := dest_bit;
BTDT_01.Target := target
BTDT(BTDT_01);
distributed_value := BTDT_01.Dest;
Bloco de Funções
Operandos:
Lógica Ladder
Execução:
Lógica Ladder
Texto Estruturado
value := 0;
Lógica Ladder
Texto Estruturado
SWPB(Source,OrderMode,Dest);
Os operandos são os mesmos que aqueles para a instrução de lógica
ladder SWPB. Se você selecionar o modo HIGH/LOW, insira-o como
HIGHLOW ou HIGH_LOW (sem slash).
Descrição: A instrução SWPB redistribui a seqüência de bytes do Source. Ele
coloca o resultado em Destination.
Quando você lê ou escreve os caracteres ASCII, geralmente, você não
precisa trocar os caracteres. As instruções de leitura e escrita ASCII
(ARD, ARL, AWA, AWT) troca os caracteres automaticamente,
conforme mostrado abaixo.
leitor do código de barras
BA
Nome do Tag Valor Estilo Tipo
bar_code[0] AB ASCII INT
42969
42968
AB
Execução:
Lógica Ladder
Texto Estruturado
SWPB(DINT_1,REVERSE,DINT_1_reverse);
SWPB(DINT_1,WORD,DINT_1_swap_word);
SWPB(DINT_1,HIGHLOW,DINT_1_swap_high_low);
Lógica Ladder
Inicie os tags.
Reverta os bytes.
Texto Estruturado
index := 0;
SIZE (array[0],0,array_length);
REPEAT
SWPB(array[index],REVERSE,array_bytes_reverse[index]);
index := index + 1;
UNTIL(index >= array_length)END_REPEAT;
AND (E) A instrução AND realiza uma operação AND usando os bits em Source
A e Source B e coloca o resultado em Destination.
Operandos:
Lógica Ladder
Texto Estruturado
dest := sourceA AND
sourceB
Use AND ou o sinal “&” como um operador dentro de uma
expressão. Esta expressão avalia sourceA E sourceB.
Bloco de Funções
Estrutura FBD_LOGICAL
Execução:
Lógica Ladder
Condição: Ação:
prescan A saída da condição da linha é definida como falsa.
entrada da condição da linha é falsa A saída da condição da linha é definida como falsa.
entrada da condição da linha é verdadeira A instrução realiza uma operação AND.
A saída da condição da linha é definida como verdadeira.
postscan A saída da condição da linha é definida como falsa.
Bloco de Funções
Condição: Ação:
prescan Nenhuma ação tomada.
primeiro scan da instrução Nenhuma ação tomada.
primeira execução da instrução Nenhuma ação tomada.
EnableIn está desenergizado EnableOut está desenergizado.
EnableIn está energizado A instrução executa.
EnableOut está energizado.
postscan Nenhuma ação tomada.
SourceA 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 1 0 1 0 1 0 1 0 1 1 1 1 1 1 1 1 1
SourceB 0 0 0 0 0 0 0 0 0 0 0 0 1 1 1 1 1 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0
Dest 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 1 0 1 0 1 0 0 0 0 0 0 0 0 0 0 0 0
Lógica Ladder
Texto Estruturado
Bloco de Funções
Operandos:
Lógica Ladder
Texto Estruturado
dest := sourceA OR sourceB
Use OR como um operador dentro de uma expressão. Esta expressão
avalia sourceA OU sourceB.
Bloco de Funções
Estrutura FBD_LOGICAL
Execução:
Lógica Ladder
Condição: Ação:
prescan A saída da condição da linha é definida como falsa.
entrada da condição da linha é falsa A saída da condição da linha é definida como falsa.
entrada da condição da linha é verdadeira A instrução realiza uma operação OR.
A saída da condição da linha é definida como verdadeira.
postscan A saída da condição da linha é definida como falsa.
Bloco de Funções
Condição: Ação:
prescan Nenhuma ação tomada.
primeiro scan da instrução Nenhuma ação tomada.
primeira execução da instrução Nenhuma ação tomada.
EnableIn está desenergizado EnableOut está desenergizado.
EnableIn está energizado A instrução executa.
EnableOut está energizado.
postscan Nenhuma ação tomada.
SourceA 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 1 0 1 0 1 0 1 0 1 1 1 1 1 1 1 1 1
SourceB 0 0 0 0 0 0 0 0 0 0 0 0 1 1 1 1 1 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0
Dest 0 0 0 0 0 0 0 0 0 0 0 0 1 1 1 1 1 1 1 1 0 1 0 1 1 1 1 1 1 1 1 1
Lógica Ladder
Texto Estruturado
Bloco de Funções
Ou Exclusivo (XOR) A instrução XOR realiza uma operação XOR usando os bits em Source
A e Source B e coloca o resultado em Destination.
Operandos:
Lógica Ladder
Texto Estruturado
dest := sourceA XOR
Use XOR como um operador dentro de uma expressão. Esta
expressão avalia sourceA XOR sourceB.
Bloco de Funções
Estrutura FBD_LOGICAL
Execução:
Lógica Ladder
Condição: Ação:
prescan A saída da condição da linha é definida como falsa.
entrada da condição da linha é falsa A saída da condição da linha é definida como falsa.
entrada da condição da linha é verdadeira A instrução realiza uma operação OR.
A saída da condição da linha é definida como verdadeira.
postscan A saída da condição da linha é definida como falsa.
Bloco de Funções
Condição: Ação:
prescan Nenhuma ação tomada.
primeiro scan da instrução Nenhuma ação tomada.
primeira execução da instrução Nenhuma ação tomada.
EnableIn está desenergizado EnableOut está desenergizado.
EnableIn está energizado A instrução executa.
EnableOut está energizado.
postscan Nenhuma ação tomada.
value_1 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 1 0 1 0 1 0 1 0 1 1 1 1 1 1 1 1 1
value_2 0 0 0 0 0 0 0 0 0 0 0 0 1 1 1 1 1 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0
value_result_xor 0 0 0 0 0 0 0 0 0 0 0 0 1 0 1 0 1 0 1 0 0 1 0 1 1 1 1 1 1 1 1 1
Lógica Ladder
Texto Estruturado
Bloco de Funções
Complementação (NOT) A instrução NOT realiza uma operação NOT usando os bits em Source
e coloca o resultado em Destination.
Operandos:
Lógica Ladder
Texto Estruturado
dest := NOT source
Use NOT como um operador dentro de uma expressão. Esta
expressão avalia NOT source.
Bloco de Funções
Estrutura FBD_LOGICAL
Execução:
Lógica Ladder
Condição: Ação:
prescan A saída da condição da linha é definida como falsa.
entrada da condição da linha é falsa A saída da condição da linha é definida como falsa.
entrada da condição da linha é verdadeira A instrução realiza uma operação NOT.
A saída da condição da linha é definida como verdadeira.
postscan A saída da condição da linha é definida como falsa.
Bloco de Funções
Condição: Ação:
prescan Nenhuma ação tomada.
primeiro scan da instrução Nenhuma ação tomada.
primeira execução da instrução Nenhuma ação tomada.
EnableIn está desenergizado EnableOut é desenergizado.
EnableIn está energizado A instrução executa.
EnableOut está energizado.
postscan Nenhuma ação tomada.
Exemplo: Quando habilitada, a instrução NOT realiza uma operação NOT sobre
Source e coloca o resultado em Dest.
value_1 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 1 0 1 0 1 0 1 0 1 1 1 1 1 1 1 1 1
value_result_not 1 1 1 1 1 1 1 1 1 1 1 1 1 0 1 0 1 0 1 0 1 0 1 0 0 0 0 0 0 0 0 0
Lógica Ladder
Texto Estruturado
Bloco de Funções
E Booleano (BAND) A instrução BAND utiliza de forma lógica até 8 entradas booleanas.
Operandos:
Texto Estruturado
IF operandA AND operandB
THEN
Use AND ou o sinal “&” como um operador dentro de uma
expressão. Os operandos devem ser valores BOOL ou expressões que
<statement>; avaliem valores BOOL. Esta expressão avalia se operandA e operandB
estão energizados (verdadeiro).
Bloco de Funções
Estrutura FBD_BOOLEAN_AND
Texto Estruturado
Bloco de Funções
Texto Estruturado
IF bool_in1 AND bool_in2 THEN
light1 := 1;
ELSE
light1 := 0;
END_IF;
(OU) Booleano (BOR) A instrução BOR possui oito entradas lógicas ORs booleanas
possíveis.
Operandos:
Texto Estruturado
IF operandA OR operandB
THEN
Use OR como um operador dentro de uma expressão. Os operandos
devem ser valores BOOL ou expressões que avaliem em valores
<statement>; BOOL. Esta expressão avalia se operandA ou operandB ou ambos
END_IF; estão energizados (verdadeiro).
Bloco de Funções
Estrutura FBD_BOOLEAN_OR
Texto Estruturado
Bloco de Funções
Texto Estruturado
Operandos:
Texto Estruturado
IF operandA XOR operandB
THEN
Use XOR como um operador dentro de uma expressão. Os operandos
devem ser valores BOOL ou expressões que avaliem em valores
<statement>; BOOL. Esta expressão avalia se somente operandA ou somente
END_IF; operandB está energizado (verdadeiro).
Bloco de Funções
Estrutura FBD_BOOLEAN_XOR
Execução:
Texto Estruturado
Bloco de Funções
Texto Estruturado
Operandos:
Texto Estruturado
IF NOT operand THEN
Use OR como um operador dentro de uma expressão. O operando
<statement>; deve ser valores BOOL ou expressões que avaliem em valores BOOL.
END_IF; Esta expressão avalia se operand está desenergizado (falso).
Bloco de Funções
Estrutura FBD_BOOLEAN_NOT
Out = NOT In
nenhuma
Execução:
Texto Estruturado
Bloco de Funções
Texto Estruturado
Notas:
InstruçõesInstruções de Array
(Arquivo)/Miscelânea
(FAL, FSC, COP, CPS, FLL, AVE, SRT, STD, SIZE)
Seleção do Modo de Para as instruções FAL e FSC, o modo informa o controlador sobre
como distribuir a operação de array
Operação
Se você quiser: Selecione este modo:
operar em todos os elementos especificados em um array All (Todos)
antes de prosseguir para a próxima instrução
distribuir a operação de array em vários scans Numerical (Numérico)
inserir o número de elementos para operar por scan
(1-2147483647)
manipular um elemento do array cada vez que a entrada da Incremental (Incremento)
condição da linha passa de falsa para verdadeira
Modo ALL
16639
um scan
bit .EN
bit DN
zera os bits de status e zera o
valor .POS
scan da instrução
Modo Numerical
um scan
segundo scan
próximo scan
16641
bit .EN
bit .DN
scan da instrução
Modo Incremental
16643
um scan
bit .EN
bit DN
Lógica Ladder
Texto Estruturado
SIZE(destination,0,length-1);
FOR position = 0 TO length DO
destination[position] := numeric_expression;
END_FOR;
Estrutura CONTROL
Condições de Falha:
Execução:
.POS = .POS + 1
sim
.LEN = 0
não
sim
.POS = 0
não
não .POS < .LEN
não
modo .LEN >
bit .DN é energizado.
bit .EN é energizado
sim
modo .LEN>
bit .DN é energizado.
bit .EN é
desenergizado.
modo
numérico
página 7-12
fim
não não
examinar bit .DN .LEN = 0 modo INC modo ALL
loop_count =
loop_count - 1
não
loop_count < 0 .POS = .POS + 1
sim
avaliar a expressão
não
examine S:V
sim
não
.POS = .LEN
sim
fim
modo
INC
bit .EN = 1
examinar bit .EN
bit .EN = 0
bit = 1
examinar .POS = .POS + 1
bit interno
bit = 0
sim sim
.POS ≥ .LEN .POS = 0
não não
fim
modo
ALL
sim sim
.POS ≥ .LEN .POS = 0
não não
modo
numérico
bit .EN = 1
examinar bit .EN
bit .EN = 0
.POS = .POS + 1
bit = 1
examinar
bit interno
bit = 0
sim sim
.POS ≥ .LEN .POS = 0
não não
sim
bit .DN é energizado. saída da condição da linha é
bit .EN é energizado bit .EN é energizado definida como verdadeira
loop_count = .LEN - .POS
.POS = .POS -1
fim
modo ≥ sim
loop_count comum
página 7-9
não
Expressão: Destination
array_2[control_2.pos] array_1[control_2.pos]
Expressão: Destination
value_1 array_2[0,control_2.pos]
Exemplo 3: Cada vez que a instrução FAL é habilitada, ela copia o valor atual de
array_1 para value_1. A instrução FAL usa o modo incremento,
portanto, somente um valor de array é copiado a cada hora em que a
instrução é habilitada. Na próxima vez em que a instrução é
habilitada, ela sobrescreve value_1 sobre o próximo valor em array_1.
cópia de array para elemento
Expressão: Destination
array_1[control_1.pos] value_1
Expressão: Destination
value_1 + value_2 array_1[control_1.pos]
Expressão: Destination
array_2[control_2.pos] / array_3[control_2.pos] array_1[control_2.pos]
Expressão: Destination
array_1[control_1.pos] + value_1 array_3[control_1.pos]
Exemplo 7: Cada vez que a instrução FAL é habilitada, ela adiciona value_1 para o
valor atual de array_1 e armazena o resultado em value_2. A
instrução FAL usa o modo incremento, portanto, somente um valor de
array é adicionado a value_1 cada hora que a instrução é habilitada.
A próxima vez que a instrução é habilitada, a instrução sobrescreve
value_2.
operação aritmética:(elemento + array) para elemento
Expressão Destination
value_1 + array_1[control_1.pos] value_2
Expressão: Destination:
array_1[control_1.pos] * array_3[control_1.pos] value_1
expressões FAL
Operadores válidos
Formatação de expressões
Seqüência: Operação:
1. ()
2. ABS, ACS, ASN, ATN, COS, DEG, FRD, LN, LOG,
RAD, SIN, SQR, TAN, TOD, TRN
3. **
4. − (negativo), NOT
5. *, /, MOD
6. − (subtração), +
7. AND
8. XOR
9. OR
Lógica Ladder
Estrutura CONTROL
Condições de Falha:
Execução:
.POS = .POS + 1
sim
.LEN = 0
não
sim
.POS = 0
não
não .POS < .LEN
não
modo .LEN >
bit .DN é energizado.
bit .EN é energizado
sim
modo .LEN>
bit .DN é energizado.
bit .EN é
desenergizado.
modo
numérico
página 7-12
saída da condição da linha é
definida como falsa
fim
não não
examinar bit .IN .LEN = 0 modo INC modo ALL
bit .DN = 1
bit .IN = 0 sim sim sim
bit .DN = 0
loop_count =
loop_count - 1
não
loop_count < 0 .POS = .POS + 1
sim
avaliar comparação
não
correspondência
sim
não
.POS = .LEN
sim
fim
00000000000000000000000000000000 00000000000000000000000000000000 0
00000000000000000000000000000000 00000000000000000000000000000000 1
00000000000000000000000000000000 00000000000000000000000000000000 2
00000000000000000000000000000000 00000000000000000000000000000000 3 A instrução FSC descobre que esses elementos não
são iguais. A instrução energiza os bits .FD e .IN. O
00000000000000001111111111111111 11111111111111110000000000000000 4 valor .POS (4) indica a posição dos elementos que
são diferentes. Para continuar a realizar a
11111111111111111111111111111111 11111111111111111111111111111111 5 comparação no restante do array, zere o bit .IN.
11111111111111111111111111111111 11111111111111111111111111111111 6
11111111111111111111111111111111 11111111111111111111111111111111 7
11111111111111111111111111111111 11111111111111111111111111111111 8
11111111111111111111111111111111 11111111111111111111111111111111 9
00000000000000000000000000000000 0
00000000000000000000000000000000 1
00000000000000000000000000000000 2
00000000000000000000000000000000 3
A instrução FSC descobre que esse elemento do
11111111111111110000000000000000 11111111111111110000000000000000 4 array é igual a MySearchKey. A instrução energiza
os bits .FD e .IN. O valor .POS (4) indica a posição
11111111111111111111111111111111 5 dos elementos iguais. Para continuar a realizar a
11111111111111111111111111111111 6 comparação no restante do array, zere o bit .IN.
11111111111111111111111111111111 7
11111111111111111111111111111111 8
11111111111111111111111111111111 9
AFG 0
BEH 1
HUO 2
SAK 3
A instrução FSC acha que este elemento de array é
SAM SAM 4 igual a code. A instrução energiza os bits .FD e .IN.
O valor .POS (4) indica a posição dos elementos
FQG 5 iguais. Para continuar a realizar a comparação no
CLE 6 restante do array, zere o bit .IN.
CAK 7
DET 8
BWG 9
Expressões FSC
Operadores válidos
Formatação de expressões
Seqüência: Operação:
1. ()
2. ABS, ACS, ASN, ATN, COS, DEG, FRD, LN, LOG, RAD, SIN,
SQR, TAN, TOD, TRN
3. **
4. − (negativo), NOT
5. *, /, MOD
6. <, <=, >, >=, =
7. − (subtração), +
8. AND
9. XOR
10. OR
Operador: Descrição:
= igual
< menor que
<= menor ou igual a
> maior que
>= maior ou igual a
<> diferente de
Cópia de Arquivo (COP) As instruções COP e CPS copiam o(s) valor(es) em Source para
Destination. Source permanece inalterado.
Arquivo de Cópia Síncrono
(CPS)
Operandos:
Lógica Ladder
Texto Estruturado
COP(Source,Dest,Length);
Os operandos são os mesmos que aqueles para as instruções de
CPS(Source,Dest,Length);
lógica ladder COP e CPS.
!
As instruções COP e CPS operam na memória de dados contígua e
realizam uma cópia de memória byte por byte, o que requisita um
entendimento do layout da memória do controlador.
Execução:
não
source_address = Source
destination_address = sim
end_address
não
fim
destination_address =
destination_address + 1
postscan A saída da condição da linha é definida como falsa. Nenhuma ação tomada.
Exemplo 1: Tanto array_4 como array_5 são o mesmo tipo de dados. Quando
habilitada, a instrução COP copia os primeiros 10 elementos de
array_4 nos primeiros 10 elementos de array_5.
Lógica Ladder
Texto Estruturado:
COP(array_4[0],array_5[0],10);
Lógica Ladder
Texto Estruturado:
COP(timer_1,array_timer[5],1);
Lógica Ladder
Texto Estruturado:
CPS(project_data[0],produced_array[0],100);
Lógica Ladder
Texto Estruturado:
CPS(Local:0:I.Data[0],input_buffer[0],20);
array_timer[4]
•
•
•
array_timer[9] Finalmente, a instrução copia os valores
timer[9] em timer[10]
array_timer[10]
Lógica Ladder
Texto Estruturado:
IF S:FS THEN
array_timer[0].pre := 500;
array_timer[0].acc := 0;
COP(array_timer[0],array_timer[1],10);
END_IF;
Lógica Ladder
Texto Estruturado
SIZE(destination,0,length);
FOR position = 0 TO length-1 DO
destination[position] := source;
END_FOR;
Execução:
não
source_address = Source
destination_address = sim
end_address
não
fim
Lógica Ladder
Texto Estruturado:
dest_1 := value_1;
Operandos:
Lógica Ladder
Texto Estruturado
SIZE(array,0,length);
sum := 0;
FOR position = 0 TO length DO-1
sum := sum + array[position];
END_FOR;
Destination = sum / length;
estrutura CONTROL
Condições de Falha:
Execução:
bit .DN = 0
examinar bit .DN
bit .DN = 1
fim
entrada da condição da linha for verdadeira A instrução AVE calcula a média, adicionando todos os elementos especificados no
array e dividindo pelo número de elementos.
Internamente, a instrução usa uma instrução FAL para calcular a média.
Expressão = cálculo da média
Modo = ALL
Para obter detalhes sobre como a instrução FAL executa, consulte a página 7-8.
postscan A saída da condição da linha é definida como falsa.
dimensão 1
su
bs
c
0 1 2 3 4
rit
os
AVE = 19
0 20 19 18 17 16 + 14 + 9 + 4- = 46
------------------------------------ ------ = 11.5
4 4
1 15 14 13 12 11
dimensão 0
dint_ave = 12
2 10 9 8 7 6
3 5 4 3 2 1
Lógica Ladder
Texto Estruturado:
SIZE(array_dint,0,length);
sum := 0;
FOR position = 0 TO (length-1) DO
sum := sum + array_dint[position];
END_FOR;
dint_ave := sum / length;
su
bs dimensão 1
cri
0 1 2 3 4
t
os
AVE = 5
0 20 19 18 17 16 + 4 + 3 + 2 + 1- = 15
--------------------------------------- ------ = 3
5 5
1 15 14 13 12 11
dimensão 0
dint_ave = 3
2 10 9 8 7 6
3 5 4 3 2 1
Lógica Ladder
Texto Estruturado:
SIZE(array_dint,1,length);
sum := 0;
FOR position = 0 TO length-1 DO
sum := sum + array_dint[position];
END_FOR;
dint_ave = sum / length;
Lógica Ladder
Texto Estruturado
SRT(Array,Dimtovary,
Control); Os operandos são os mesmos que aqueles para a instrução de lógica
ladder SRT. Entretanto, pode-se especificar os valores de Length e
Position ao acessar os membros .LEN e .POS da estrutura CONTROL,
ou ao incluir os valores na lista de operando.
Estrutura CONTROL
Condições de Falha:
Execução:
bit .DN = 0
examinar bit .DN
bit .DN = 1
fim
Antes Depois
dimensão 1 dimensão 1
su
su
bs
bs
c
0 1 2 3 4
cr i
0 1 2 3 4
rit
to
os
s
0 20 19 18 17 16 0 20 19 3 17 16
1 15 14 13 12 11 1 15 14 8 12 11
dimensão 0 dimensão 0
2 10 9 8 7 6 2 10 9 13 7 6
3 5 4 3 2 1 3 5 4 18 2 1
Lógica Ladder
Texto Estruturado:
control_1.LEN := 4;
control_1.POS := 0;
SRT(int_array[0,2],0,control_1);
Antes Depois
dimensão 1 dimensão 1
su
su
bs
bs
c
0 1 2 3 4
c
0 1 2 3 4
rit
rit
o
os
s
0 20 19 18 17 16 0 20 19 18 17 16
1 15 14 13 12 11 1 15 14 13 12 11
dimensão 0 dimensão 0
2 10 9 8 7 6 2 6 7 8 9 10
3 5 4 3 2 1 3 5 4 3 2 1
Lógica Ladder
Texto Estruturado
control_1.POS := 5;
control_1.pos = 0;
SRT(int_array[2,0],1,control_1);
Desvio Padrão do Arquivo A instrução STD calcula o desvio padrão de um conjunto de valores
em uma dimensão do Array e armazena o resultado em Destination.
(STD)
Operandos:
Lógica Ladder
estrutura CONTROL
Texto Estruturado
SIZE(destination,0,length);
sum := 0;
FOR position = 0 TO length-1 DO
sum := sum + array[position];
END_FOR;
average := sum / length;
sum := 0;
FOR position = 0 TO length-1 DO
sum := sum + ((array[position] - average)**2);
END_FOR;
destination := SQRT(sum /(length-1));
N
2
∑
[ 〈 X ( start + i ) – AVE〉 ]
Desvio Padrão = i = 1
--------------------------------------------------------------------
(N – 1)
Onde:
• start = subscrito dimension-to-vary do operando array
• xi = elemento do tag no array
• N = número de elementos especificados no array
• AVE = N
x ( start + i )
∑
i = 1
-----------------------------------------
N
Condições de Falha:
Execução:
bit .DN = 0
examinar bit .DN
bit .DN = 1
fim
entrada da condição da linha é verdadeira A instrução STD calcula o desvio padrão dos elementos especificados.
Internamente, a instrução usa uma instrução FAL para calcular a média.
Expressão = cálculo do desvio padrão
Modo = ALL
Para obter detalhes sobre como a instrução FAL executa, consulte a página 7-8.
postscan A saída da condição da linha é definida como falsa.
su
bs
0 1 2 3 4
c
rit
os
0 20 19 18 17 16
1 15 14 13 12 11
dimensão 0
AVE = 16
+ 11 + 6 + 1- = 34 10 9 8 7 6
------------------------------------ ------ = 8.5 2
4 4
3 5 4 3 2 1
2 2 2 2
〈 16 – 8.5〉 + 〈 11 – 8.5〉 + 〈 6 – 8.5〉 + 〈 1 – 8.5〉 - = 6.454972
STD = --------------------------------------------------------------------------------------------------------------------------
〈 4 – 1〉
real_std = 6.454972
Lógica Ladder
Texto Estruturado
SIZE(dint_array,0,length);
sum := 0;
FOR position = 0 TO (length-1) DO
sum := sum + dint_array[position];
END_FOR;
average := sum / length;
sum := 0;
FOR position = 0 TO (length-1) DO
sum := sum + ((dint_array[position] - average)**2);
END_FOR;
real_std := SQRT(sum /(length-1));
su
bs
0 1 2 3 4
c
rit
os
0 20 19 18 17 16
1 15 14 13 12 11
dimensão 0
2 10 9 8 7 6
AVE = 20
+ 19 + 18 + 17 + 16- = 90
------------------------------------------------------ ------ = 18
5 5 3 5 4 3 2 1
2 2 2 2 2
〈 20 – 18〉 + 〈 19 – 18〉 + 〈 18 – 18〉 + 〈 17 – 18〉 + 〈 16 – 18〉
STD = -----------------------------------------------------------------------------------------------------------------------------------------------------------
- = 1.581139
〈 5 – 1〉
real_std = 1.581139
Lógica Ladder
Texto Estruturado
SIZE(dint_array,1,length);
sum := 0;
FOR position = 0 TO (length-1) DO
sum := sum + array_dint[position];
END_FOR;
average := sum / length;
sum := 0;
FOR position = 0 TO (length-1) DO
sum := sum + ((array[position] - average)**2);
END_FOR;
real_std = SQRT(sum /(length-1));
Lógica Ladder
Texto Estruturado
SIZE(Source,Dimtovary,Size);
Os operandos são os mesmos que aqueles para a instrução da lógica
ladder SIZE.
Execução:
Lógica Ladder
SIZE
Size in Elements
Source array_a[0]
255
Dim. To Vary 0
Size array_a_size
10
Texto Estruturado
SIZE(array_a,0,array_a_size);
Lógica Ladder
SIZE
Size in Elements
Source string_1.DATA[0]
'$00'
Dim. To Vary 0
Size string_1_size
82
Texto Estruturado
SIZE(string_1.DATA[0],0,string_1_size);
Lógica Ladder
SIZE
Size in Elements
Source strings_a[0].DATA[0]
'$00'
Dim. To Vary 0
Size data_size_a
24
Texto Estruturado
SIZE(strings_a[0].DATA[0],0,data_size_a);
Deslocamento de Bit para a A instrução BSL desloca os bits especificados dentro do Array uma
posição para a esquerda.
Esquerda (BSL)
Operandos:
Lógica Ladder
Estrutura CONTROL
Execução
bit .EN = 1
examinar bit .EN
bit .EN = 0
sim
.LEN = 0 bit .DN é energizado.
não
.source bit = 0
não
bit .UL é energizado
deslocar array da esquerda uma posição para a
esquerda
bit
bit .UL array
source
fim
9 8 7 6 5 4 3 2 1 0
array_dint[0] 1 1 1 1 0 0 0 0 1 1 1 1 0 0 0 0 1 1 1 1 0 0 0 0 1 1 1 1 0 0 0 0
antes do
deslocamento
1
0 esses bits foram deslocados à
esquerda input_1
bit .UL
9 8 7 6 5 4 3 2 1 0
array_dint[0]dep 0 1 1 1 1 0 0 0 0 1
ois do
deslocamento
31 0
array_dint[0] 1 1 1 1 0 0 0 0 1 1 1 1 0 0 0 0 1 1 1 1 0 0 0 0 1 1 1 1 0 0 0 0
1
esses bits foram deslocados para a esquerda
input_1
31 0
array_dint[1] 0 0 1 1 1 1 0 0 0 0 1 1 1 1 0 0 0 0 1 1 1 1 0 0 0 0
bit .UL
Deslocamento de Bit para a A instrução BSR desloca os bits especificados dentro do Array uma
posição para a direita.
Direita (BSR)
Operandos:
Lógica Ladder
Estrutura CONTROL
Execução
bit .EN = 1
examinar bit .EN
bit .EN = 0
sim
.LEN = 0 bit .DN é energizado.
não
bit .UL permanece
.source bit = 1 energizado
examinar bit source
sim
.LEN < 0 bit .ER é
.source bit = 0
não
bit .UL é energizado
deslocar array da esquerda uma posição para a
esquerda
fim
9 8 7 6 5 4 3 2 1 0
array_dint[0] 1 1 1 1 0 0 0 0 1 1 1 1 0 0 0 0 1 1 1 1 0 0 0 0 1 1 1 1 0 0 0 0
antes do
deslocamento
0
1 esses bits foram deslocados para a direita
bit .UL
input_1
9 8 7 6 5 4 3 2 1 0
array_dint[0]dep 1 0 0 1 1 1 1 0 0 0
ois do
deslocamento
31 0
array_dint[0] 1 1 1 1 0 0 0 0 1 1 1 1 0 0 0 0 1 1 1 1 0 0 0 0 1 1 1 1 0 0 0 0
0
esses bits foram deslocados para a direita
bit .UL
31 0
array_dint[1] 0 0 1 1 1 1 0 0 0 0 1 1 1 1 0 0 0 0 1 1 1 1 0 0 0 0
input_1
Carga FIFO (FFL) A instrução FFL copia o valor Source para FIFO.
Operandos:
Lógica Ladder
Se você usar uma estrutura definida pelo usuário como tipo de dados
para o operando Source ou FIFO, use a mesma estrutura para os dois
operandos.
estrutura CONTROL
Descrição: Use a instrução FFL com a instrução FFU para armazenar e recuperar
dados na seqüência primeiro a entrar, primeiro a sair. Quando usada
em pares, as instruções FFL e FFU estabelecem um registro de
deslocamento assíncrono.
Condições de Falha:
Execução
sim
.LEN < 0
não
sim
.POS < 0
não
sim
.POS = 0 .EM é energizado
não
sim
.POS ≥ .LEN .DN é energizado
não
fim
sim
.LEN < 0
não
sim
.POS < 0
não
sim
.POS = 0 .EM é energizado
não
sim
.POS ≥ .LEN .DN é energizado
não
fim
.EN = 0 sim
examinar bit .EN bit .EN é energizado .LEN < 0
.EN = 1 não
sim sim
.LEN < 0 .POS < 0
não não
não
bit .EM é energizado
bit .EM é desenergizado. .DN é energizado
bit .DN é desenergizado. sim
.POS ≥ .LEN bit .DN é energizado.
não
sim
.POS = 0 bit .EM é energizado
sim
.POS ou .LEN > falha grave
não tamanho do
array
não
sim
.POS ≥ .LEN bit .DN é energizado.
sim
não .POS > .LEN .POS = .POS -1
não
FIFO[.POS - 1] = source
fim
Descarga FIFO (FFU) A instrução FFU descarrega o valor da posição 0 (primeira posição) de
FIFO e armazena esse valor em Destination. Os dados restantes em
FIFO se deslocam uma posição para baixo.
Operandos:
Lógica Ladder
Se você usar uma estrutura definida pelo usuário como tipo de dados
para o operando FIFO ou Destination, use a mesma estrutura para os
dois operandos.
estrutura CONTROL
Descrição: Use a instrução FFU com a instrução FFL para armazenar e recuperar
dados na seqüência primeiro a entrar, primeiro a sair (FIFO).
Condições de Falha:
Execução
prescan
sim
.LEN < 0
não
sim
.POS < 0
não
sim
.POS = 0 .EM é energizado
não
sim
.POS ≥ .LEN .DN é energizado
não
fim
sim
.LEN < 0
não
sim
.POS < 0
não
sim
.POS = 0 .EM é energizado
não
sim
.POS ≥ .LEN .DN é energizado
não
fim
.EU = 0 sim
examinar bit .EU bit .EU é energizado .LEN < 0
.EU = 1 não
sim sim
.LEN < 0 .POS < 0
não não
não
bit .EM é energizado
.DN é energizado .LEN > sim
bit .EM é desenergizado. tamanho do falha grave
bit .DN é desenergizado. array
não
sim
.POS = 0 bit .EM é energizado sim
.POS ≤ 1 bit .EM é energizado
não
não
sim
sim .POS < 1 Destination = 0
.POS ≥ .LEN bit .DN é energizado.
não
não
.POS = .POS -1
Destination = FIFO[0]
i=1
FIFO[i - 1] = FIFO[i]
i = i +1
sim
i < .LEN
não
saída da condição da linha é
definida como verdadeira
fim
11111 22222
22222 33333
33333 44444
44444 55555
array_dint[5] 55555 00000 control_1.pos = 5
00000 control_1.pos = 6 00000 value_2 = 00000
00000 00000
00000 00000
00000 00000
Carga LIFO (LFL) A instrução LFL copia o valor Source para LIFO.
Operandos:
Lógica Ladder
Se você usar uma estrutura definida pelo usuário como tipo de dados
para o operando Source ou LIFO, use a mesma estrutura para os dois
operandos.
estrutura CONTROL
Descrição: Use a instrução LFL com a instrução LFU para armazenar e recuperar
dados na seqüência último a entrar, primeiro a sair. Quando usada em
pares, as instruções LFL e LFU estabelecem um registro de
deslocamento assíncrono.
Condições de Falha:
Execução
prescan
sim
.LEN < 0
não
sim
.POS < 0
não
sim
.POS = 0 .EM é energizado
não
sim
.POS ≥ .LEN .DN é energizado
não
fim
sim
.LEN < 0
não
sim
.POS < 0
não
sim
.POS = 0 .EM é energizado
não
sim
.POS ≥ .LEN .DN é energizado
não
fim
.EN = 0 sim
examinar bit .EN bit .EN é energizado .LEN < 0
.EN = 1 não
sim sim
.LEN < 0 .POS < 0
não não
não
bit .EM é energizado
.DN é energizado
bit .EM é desenergizado.
bit .DN é desenergizado. sim
.POS ≥ .LEN bit .DN é energizado.
não
sim
.POS = 0 bit .EM é energizado
não
sim
.POS ≥ .LEN bit .DN é energizado.
sim
não .POS > .LEN .POS = .POS -1
não
LIFO[.POS - 1] = source
fim
Descarga LIFO (LFU) A instrução LFU descarrega o valor em .POS de LIFO e armazena 0
naquele local.
Operandos:
Lógica Ladder
Se você usar uma estrutura definida pelo usuário como tipo de dados
para o operando LIFO ou Destination, use a mesma estrutura para os
dois operandos.
estrutura CONTROL
Descrição: Use a instrução LFU com a instrução LFL para armazenar e recuperar
dados na seqüência último a entrar, primeiro a sair (LIFO).
Condições de Falha:
Execução
prescan
sim
.LEN < 0
não
sim
.POS < 0
não
sim
.POS = 0 .EM é energizado
não
sim
.POS ≥ .LEN .DN é energizado
não
fim
sim
.LEN < 0
não
sim
.POS < 0
não
sim
.POS = 0 .EM é energizado
não
sim
.POS ≥ .LEN .DN é energizado
não
fim
.EU = 0 sim
examinar bit .EU bit .EU é energizado .LEN < 0
.EU = 1 não
sim sim
.LEN < 0 .POS < 0
não não
não
bit .EM é energizado
bit .EM é desenergizado. .DN é energizado sim
bit .DN é desenergizado. .POS ≤ 1 bit .EM é energizado
não
sim sim
.POS = 0 bit .EM é energizado .POS < 1 Destination = 0
não não
sim
.POS > .LEN .POS = .LEN
sim
.POS ≥ .LEN bit .DN é energizado.
não
não
.POS = .POS -1
não
Destination = LIFO[control.POS]
LIFO[control.POS) = 0
fim
11111 11111
22222 22222
33333 33333
44444 44444
array_dint[5] 55555 00000 control_1.pos = 5
00000 control_1.pos = 6 00000 value_2 = 55555
00000 00000
00000 00000
00000 00000
Notas:
Instruções do Seqüenciador
(SQI, SQO, SQL)
Entrada do Seqüenciador A instrução SQI detecta quando uma etapa é concluída em um par de
seqüência de instruções SQO/SQI.
(SQI)
Operandos:
Lógica Ladder
Estrutura CONTROL
Prefixo: Descrição:
16# hexadecimal
por exemplo; 16#0F0F
8# octal
por exemplo; 8#16
2# binário
por exemplo; 2#00110011
Execução:
.LEN ≤ 0
.POS < 0 não
ou bit .ER é desenergizado.
.POS > .LEN
sim
sim
fim
Se usar a instrução SQI sem uma instrução SQO em par, você precisa
incrementar externamente o array do seqüenciador.
Saída do Seqüenciador A instrução SQO define as condições de saída para a próxima etapa
de um par de seqüência das instruções SQO/SQI.
(SQO)
Operandos:
Lógica Ladder
Estrutura CONTROL
Prefixo: Descrição:
16# hexadecimal
por exemplo; 16#0F0F
8# octal
por exemplo; 8#16
2# binário
por exemplo; 2#00110011
Execução:
não sim
.POS = .LEN .POS ≥ .LEN .POS = 1
sim não
não
sim
.POS = .LEN bit .DN é energizado.
não
não
.POS > .LEN
sim
erro
fim
Lógica Ladder
Estrutura CONTROL
Condições de Falha:
Execução:
não sim
.POS = .LEN .POS ≥ .LEN .POS = 1
sim não
não
sim
.POS = .LEN bit .DN é energizado.
não
não
.POS > .LEN
sim
.LEN > sim
tamanho do
erro array
não
falha grave
fim
Notas:
Salto para Label (JMP) As instruções JMP e LBL ignoram as partes da lógica de diagrama
ladder.
Label (LBL)
Operandos:
Lógica Ladder
!
A instrução LBL está no alvo da instrução JMP que tem o mesmo
nome do label. Certifique-se de que a instrução LBL é a primeira
instrução na linha.
Condições de Falha:
Execução:
Salto para Sub-rotina (JSR) A instrução JSR salta a execução para uma rotina diferente. As
instruções SBR e RET são instruções opcionais que trocam dados com
Sub-rotina (SBR) a instrução JSR.
Retorno da Sub-rotina (RET)
Operandos JSR:
Lógica Ladder
Texto Estruturado
JSR(RoutineName,InputCount,
InputPar,ReturnPar); Operando: Tipo: Formato: Descrição:
Routine ROUTINE nome rotina a ser executada (ou seja, sub-rotina)
name
Input count SINT imediato número de parâmetros de entrada
INT
DINT
REAL
Input BOOL imediato dados desta rotina que você quer copiar para
parameter SINT tag um tag na sub-rotina
INT tag do array • Os parâmetros de entrada são
DINT opcionais.
REAL • Insira múltiplos parâmetros de
structure entrada, se necessário.
Return BOOL tag tag nesta rotina que você quer copiar um
parameter SINT tag do array resultado da sub-rotina
INT • Os parâmetros de retorno são
DINT opcionais.
REAL • Insira múltiplos parâmetros de
structure retorno, se necessário.
bloco de funções
Parâmetros de Entrada Parâmetro de Retorno
❇ ❇
Operandos SBR: A instrução SBR deve ser a primeira instrução em uma rotina de texto
estruturado ou lógica ladder.
Lógica Ladder
Bloco de Funções
Parâmetros
❇
Operandos RET:
Lógica Ladder
Bloco de Funções
Parâmetros
❇
rotina principal
SBR SBR SBR
action_1
JSR
action_2 action_3
JSR JSR
Condições de Falha:
Execução:
não
não não
sim
fim da sub-rotina
não
saída da condição da linha é definida
como verdadeira
saída da condição da linha é a execução da lógica retorna para JSR
definida como falsa
continua a executar a rotina
fim
postscan Mesma ação que o prescan descrita anteriormente. Mesma ação que o prescan descrita anteriormente.
Bloco de Funções
Condição: Ação:
prescan Nenhuma ação tomada.
primeiro scan da instrução Nenhuma ação tomada.
primeira execução da instrução Nenhuma ação tomada.
execução normal 1. Se a rotina contém uma instrução SBR, o controlador primeiro executa a instrução SBR.
2. O controlador trava todos os valores de dados em IREFs.
3. O controlador executa os outros blocos de função no pedido que é determinado pela sua fiação.
Isto inclui outras instruções JSR.
4. O controlador escreve as saídas em OREFs.
5. Se a rotina contiver uma instrução RET, o controlador executa a instrução RET por último.
postscan A sub-rotina é chamada.
Se a rotina é uma rotina SFC, ela inicializada é a mesma do prescan.
Lógica Ladder
Rotina: Programa:
Rotina principal (Main routine)
Sub-rotina (Subroutine)
Texto Estruturado
Rotina: Programa:
Rotina Principal JSR(routine_1,2,value_1,value_2,float_value_1);
Sub-rotina SBR(value_a,value_b);
<statements>;
RET(float_a);
Exemplo 2:
Lógica Ladder
Rotina Principal
Quando abc estiver energizado, subroutine_1 executa, calcula o número de cookies e coloca um valor em cookies_1.
Subroutine_1
Quando def estiver energizado, a instrução RET retorna value_1 para o parâmetro JSR cookies_1e o restante da sub-rotina não é varrido.
Quando def estiver desenergizado (linha anterior) e ghi estiver energizado, a instrução RET retorna value_2 para o parâmetro cookies_1 de JSR e o restante da
sub-rotina não é varrido.
Quando def e ghi estiverem desenergizados (linhas anteriores) a instrução RET retorna value_3 para o parâmetro cookies_1 de JSR.
Exemplo 3:
Bloco de Funções
42972
42973
6. As instruções ADD adicionam as Input_A, Input_B e Input_C além de colocar o resultado em Sum_A_B_C.
Salto para a Rotina Externa A instrução JXR executa uma rotina externa. Esta instrução é somente
suportada pelos controladores SoftLogix5800.
(JXR)
Operandos:
Lógica Ladder
Estrutura EXT_ROUTINE_CONTROL
Descrição: Use a instrução Salto para a Rotina Externa (JXR) para chamar a rotina
externa de uma rotina de lógica ladder no projeto. A instrução JXR
suporta múltiplos parâmetros para que você possa passar os valores
entre a rotina de lógica ladder e a rotina externa.
Condições de Falha:
Operandos:
nenhuma
nenhum
Execução:
Lógica Ladder
Texto Estruturado
TND
Rearme do Controle Mestre A instrução MCR, usada em pares, cria uma zona de programa que
pode desabilitar todas as linhas dentro das instruções MCR.
(MCR)
Operandos:
Lógica Ladder
nenhuma
Descrição: Quando a zona MCR estiver habilitada, um scan nas linhas da zona
MCR é realizada para verificar as condições normais de verdadeiro e
falso. Quando desabilitada, o controlador ainda realiza o scan nas
linhas que estão dentro de uma zona MCR, mas o tempo de scan é
reduzido porque as saídas não retentivas na zona estão desabilitadas.
A entrada da condição da linha é falsa para todas as instruções que
estão dentro da zona MCR desabilitada.
Execução:
Interrupção Desabilitada A instrução UID e a instrução UIE trabalham juntas para evitar que um
número pequeno de linhas críticas sejam interrompidas por outras
(UID) Interrupção tarefas.
Habilitada (UIE)
Operandos:
Lógica Ladder
nenhuma
Execução:
Lógica Ladder
UID
error_bit FSC
File Search/Compare EN
Control error_check DN
Length 10 ER
Position 8
Mode ALL
Expression error_code=error_list[error_check.POS]
error_check.FD alarm
UIE
Texto Estruturado
UID
<statements>
UIE
Instrução Sempre Falsa A instrução AFI configura a sua saída da condição da linha como falsa.
(AFI)
Operandos:
Lógica Ladder
nenhuma
Descrição: A instrução AFI configura a sua saída da condição da linha como falsa.
Execução:
Operandos:
Lógica Ladder
nenhuma
Execução:
Fim da Transição (EOT) A instrução EOT retorna um estado booleano para uma transição SFC.
Operandos:
Lógica Ladder
Execução:
Lógica Ladder
Texto Estruturado
IF timer_1.DN THEN
EOT(estado);
END_IF;
Operandos:
Lógica Ladder
Texto Estruturado
SFP(SFCRoutineName,
TargetState); Os operandos são os mesmos que aqueles para a instrução SFP de
lógica ladder.
Condições de Falha:
Execução:
Lógica Ladder
Texto Estruturado
Reset de SFC (SFR) A instrução SFR rearma a execução de uma rotina SFC em uma etapa
especificada.
Operandos:
Texto Estruturado
SFR(SFCRoutineName,StepName);
Os operandos são os mesmos que aqueles para a instrução de lógica
ladder SFR.
Condições de Falha:
Execução:
Lógica Ladder
Texto Estruturado
IF shutdown THEN
SFR(mySFC,initialize);
END_IF;
Notas:
Instruções For/Break
(FOR, FOR...DO, BRK, EXIT, RET)
Introdução Use a instrução FOR para chamar repetidamente uma sub-rotina. Use
a instrução BRK para interromper a execução de uma sub-rotina.
Operandos:
Lógica Ladder
Texto Estruturado
FOR count:= initial_value
TO final_value BY Use a construção FOR...DO. Consulte o ApêndiceC para informações
increment DO sobre as construções de texto estruturado.
<statement>;
END_FOR;
Descrição:
Tome cuidado para não realizar uma malha várias vezes em um único
scan. Um número excessivo de repetições pode fazer com que o
temporizador do watchdog do controlador expire e cause uma falha
grave.
Condições de Falha:
Execução
Condição: Ação da Lógica Ladder:
prescan A saída da condição da linha é definida como falsa.
O controlador executa a sub-rotina uma vez.
Caso haja instruções FOR recorrentes na mesma sub-rotina, um prescan é realizada
somente na primeira vez na sub-rotina. Caso haja várias instruções FOR (não
recorrentes) na mesma sub-rotina, realiza-se um prescan na sub-rotina todas as vezes.
entrada da condição da linha é falsa A saída da condição da linha é definida como falsa.
index = initial_value
não
step size < 0
sim
não
ir para o índice valor terminal
fim
executar rotina
index =(index + step_size) saída da condição da linha é
definida como verdadeira
fim
Break (BRK) A instrução BRK interrompe a execução de uma rotina que foi
chamada por uma instrução FOR.
Operandos:
Lógica Ladder
nenhuma
Texto Estruturado
EXIT;
Execução
Return (RET) A instrução RET retorna para a instrução FOR que está chamando.
Operandos:
Lógica Ladder
nenhuma
Descrição:
Condições de Falha:
Execução
Notas:
Instruções Especiais
(FBC, DDT, DTR, PID)
Comparação Entre os Bits A instrução FBC compara os bits em um array Source ao array
Reference.
de Arquivo (FBC)
Operandos:
Lógica Ladder
Estrutura COMPARE
Estrutura RESULT
Condições de Falha:
Execução
pré-varredura
compare.DN = 1
o bit compare.DN é
desenergizado
o valor de compare.POS é
removido
o bit result.DN é desenergizado
o valor de result.POS é removido
fim
compare.DN = 1
o bit compare.DN é
desenergizado
o valor de compare.POS é
removido
o bit result.DN é desenergizado
o valor de result.POS é removido
fim
compare.EN = 0
compare.DN = 0
não
sim
compare.POS < 0
saída
comparação vá para
a saída
fim
página 12-7
comparação
não
result.DN = 1
o bit result.DN é
source[compare.POS] = não o bit compare.FD é desenergizado
examine o bit
reference[compare.POS] energizado result.DN o valor de result.POS é
removido
sim result.DN = 0
compare.POS =
compare.POS + 1
sim
result.POS < 0
não
sim
result.LEN ≤ 0
sim
Result.POS > que o vá para
falha grave tamanho do array Result a saída
página 12-6
não
result[result.POS] = compare.POS
result.POS = result.POS + 1
sim
fonte array_dint1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
referênciaarray_din 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 1 0 0 0
t2
resultado 5 3
array_dint3
Detecção de Diagnóstico A instrução DDT compara os bits em um array Source aos bits em um
array Reference para determinar as mudanças de estado.
(DDT)
Operandos:
Lógica Ladder
Estrutura COMPARE
Estrutura RESULT
Condições de Falha:
Execução
pré-varredura
compare.DN = 1
o bit compare.DN é
desenergizado
o valor de compare.POS é
removido
o bit result.DN é desenergizado
o valor de result.POS é removido
fim
compare.DN = 1
o bit compare.DN é
desenergizado
o valor de compare.POS é
removido
o bit result.DN é desenergizado
o valor de result.POS é removido
fim
compare.EN = 0
bit compare.DN = 0
não
sim
compare.POS < 0
saída
fim
página 12-14
Comparação
não
result.DN = 1
o bit compare.FD é o bit result.DN é
source[compare.POS] = não energizado desenergizado
examine o bit o valor de result.POS é
reference[compare.POS] reference[compare.POS] = result.DN
source[compare.POS] removido
sim result.DN = 0
compare.POS =
compare.POS + 1
sim
result.POS < 0
não
sim
result.LEN ≤ 0
sim
Result.POS > que o vá para
falha grave tamanho do array Result a saída
página 12-6
não
result[result.POS] = compare.POS
result.POS = result.POS + 1
não result.POS ≥
result.LEN
sim
0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
fonte
array_dint1
resultado 5 3
array_dint3
Dados Transacionais (DTR) A instrução DTR passa o valor de Source através de Mask e compara o
resultado ao valor de Reference.
Operandos:
Lógica Ladder
Prefixo: Descrição:
16# hexadecimal
por exemplo 16#0F0F
8# octal
por exemplo 8#16
2# binário
por exemplo 2#00110011
Execução
sim
saída da condição da
linha é definida como
falsa
fim
Exemplo: Quando habilitada, a instrução DTR mascara value_1. Caso haja uma
diferença nos dois valores, a saída da condição da linha é definida
como verdadeira.
exemplo 1 exemplo 2
Source
value_1
7 1 8 3 9 1 8 7
mask = 0FFF
0000111111111111 0000111111111111
referência
value_2
varredura atual 0 1 8 3 0 1 8 7 varredura atual
A linha permanece falsa enquanto o valor de A linha permanece verdadeira por uma varredura
entrada não mudar. quando uma alteração for detectada.
13385
Instrução PID (PID) A instrução PID controla uma variável do processo como fluxo,
pressão, temperatura ou nível.
Operandos:
Lógica Ladder
Texto Estruturado
PID(PID,ProcessVariable,
Tieback,ControlVariable,
Os operandos são os mesmo que os da instrução PID da lógica
PIDMasterLoop,InholdBit, ladder. Entretanto, você especifica o Setpoint, Process Variable e
InHoldValue); Output % acessando o membros .SP, .PV. e .OUT da estrutura PID, ao
invés de incluir valores na lista de operandos.
Estrutura PID
bit .EN
estado da linha
execução da instrução PID
Condições de Falha:
Execução
Condição: Ação: Ação:
pré-varredura A saída da condição da linha é definida como falsa. Nenhuma ação tomada.
entrada da condição da A saída da condição da linha é definida como falsa. na
linha é falsa
entrada da condição da A instrução executa. na
linha é verdadeira A saída da condição da linha é definida como verdadeira.
EnableIn está energizado na EnableIn está sempre energizado
A instrução executa.
execução da instrução A instrução executa a malha PID. A instrução executa a malha PID.
pós-varredura A saída da condição da linha é definida como falsa. Nenhuma ação tomada.
Configuração de uma Após inserir a instrução PID e especificar a estrutura PID, você usa as
guias de configuração para especificar como a instrução PID deve
Instrução PID funcionar.
Especificação de ajuste
No campo: Especifique:
Setpoint (SP) Insira um valor de setpoint (.SP).
Set output % Insira uma porcentagem de saídas energizadas (.SO).
No modo manual do software, este valor é usado para a saída.
No modo automático, este valor exibe a % de saída.
Output bias Insira a porcentagem de bias de saída (.BIAS).
Proportional gain (Kp) Insira o ganho proporcional (.KP).
Para ganhos independentes, é o ganho proporcional (sem unidade).
Para ganhos dependentes, é o ganho do controlador (sem unidade).
Integral gain (Ki) Insira o ganho integral (.KI).
Para ganhos independentes, este é o ganho integral (1/seg).
Para ganhos dependentes, este é o tempo de reset (minutos por repetição).
Derivative time (Kd) Insira o ganho derivativo (.KD).
Para ganhos independentes, este é o ganho derivativo (segundos).
Para ganhos dependentes, esta é o tempo da taxa (minutos).
Manual mode Selecione o modo manual (.MO) ou o modo manual de software (.SWM).
O modo manual cancela o modo manual de software se ambos forem selecionados.
Especificação de configuração
No campo: Especifique:
PID equation Selecione ganhos independentes ou dependentes (.PE).
Use independente quando quiser que os três ganhos (P, I e D) operem de forma independente. Use
dependente quando quiser que o ganho geral do controlador afete os três itens (P, I e D).
Control action Selecione E=PV-SP ou E=SP-PV para a ação de controle (.CA).
Derivative of Selecione PV ou erro (.DOE).
Use a derivativa de PV para eliminar os impulsos de saída resultantes das alterações do setpoint. Use a
derivativa de erro para respostas rápidas para as alterações de setpoint quando o algoritmo pode
tolerar excedentes.
Loop update time Insira o tempo de atualização (.UPD) para a instrução.
CV high limit Insira um limite alto para a variável de controle (.MAXO).
CV low limit Insira um limite baixo para a variável de controle (.MINO).
Deadband value Insira um valor de zona morta (.DB).
No derivative smoothing Habilite ou desabilite esta seleção (.NDF).
No bias calculation Habilite ou desabilite esta seleção (.NOBC).
No zero crossing in deadband Habilite ou desabilite esta seleção (.NOZC).
PV tracking Habilite ou desabilite esta seleção (.PVT).
Cascade loop Habilite ou desabilite esta seleção (.CL).
Cascade type Se a malha em cascata estiver habilitada, selecione escravo ou mestre (.CT).
Especificação de alarmes
No campo: Especifique:
PV high Insira um valor de alarme alto de PV (.PVH).
PV low Insira um valor de alarme baixo de PV (.PVL).
PV deadband Insira um valor de alarme de zona morta de PV (.PVDB).
positive deviation Insira um valor de desvio positivo (.DVP).
negative deviation Insira um valor de desvio negativo (.DVN).
deviation deadband Insira um valor de alarme de zona morta de desvio (.DVDB).
No campo: Especifique:
PV unscaled maximum Insira um valor máximo de PV (.MAXI) que seja igual ao valor máximo sem escala
recebido de um canal de entrada analógica no valor de PV.
PV unscaled minimum Insira um valor mínimo de PV (.MINI) que seja igual ao valor mínimo sem escala
recebido de um canal de entrada analógica no valor de PV.
PV engineering units maximum Insira as unidades máximas de engenharia correspondentes a .MAXI (.MAXS)
PV engineering units minimum Insira as unidades mínimas de engenharia correspondentes a .MINI (.MINS)
CV maximum Insira um valor máximo de CV correspondente a 100% (.MAXCV).
CV minimum Insira um valor mínimo de CV correspondente a 0% (.MINCV).
Tieback maximum Insira um valor máximo de tieback (.MAXTIE) que seja igual ao valor máximo sem escala
recebido de um canal de entrada analógica no valor de tieback.
Tieback minimum Insira um valor mínimo de tieback (.MINTIE) que seja igual ao valor mínimo sem escala
recebido de um canal de entrada analógica no valor de tieback.
PID Initialized Se alterar as constantes de conversão de escala durante o modo Run, desligue-as para
reinicializar os valores internos de remoção (.INI).
Uso das Instruções PID O controle de malha fechada PID mantém uma variável de processo
em um setpoint desejado. A figura a seguir mostra um exemplo do
nível de taxa de fluxo/fluido:
Setpoint - erro
equação PID
+
taxa de fluxo
variável de processo variável de controle
detector de nível
14271
E = PV - SP
t
1 dPV
CV = K C E + ---- ∫ Edt + T d ----------- + BIAS
Ti dt
0
E = PV - SP
t
dPV
CV = K P E + K i ∫ Edt + Kd ----------- + BIAS
dt
0
Onde:
Variável: Descrição:
KP ganho proporcional (sem unidade)
Kp = Kc (sem unidade)
Ki ganho integral (segundos -1)
Para converter Ki (ganho integral) e Ti (tempo de reset), use:
KC
K i = ----------
-
60T i
Variável: Descrição:
Ti tempo de reset (minutos/repetição)
Td tempo da taxa (minutos)
SP setpoint
PV variável de processo
E erro [(SP-PV) ou (PV-SP)]
BIAS feedforward ou bias
CV variável de controle
dt tempo de atualização da malha
Como a instrução PID usa uma base de tempo em seu cálculo, você
precisa sincronizar a execução desta instrução com a amostragem da
variável do processo (PV).
Lógica Ladder
Texto Estruturado
PID(TIC101,Local:0:I.Ch0Data,Local:0:I.Ch1Data,
Local:1:O.Ch4Data,0,Local:1:I.Ch4InHold,
Local:1:I.Ch4Data);
Lógica Ladder
Texto Estruturado
PID_timer.pre := 1000
TONR(PID_timer);
IF PID_timer.DN THEN
PID(TIC101,Local:0:I.Ch0Data,Local:0:I.Ch1Data,
Local:1:O.Ch0Data,0,Local:1:I.Ch0InHold,
Local:1:I.Ch0Data);
END_IF;
Lógica Ladder
Texto Estruturado
IF (Local:0:I.Ch0Fault) THEN
TIC101.SWM [:=] 1;
ELES
TIC101.SWM := 0;
END_IF;
IF (Local:0:I.RollingTimestamp<>PreviousTimestamp) OR
(Local:0:I.Ch0Fault) THEN
PreviousTimestamp := Local:0:I.RollingTimestamp;
PID(TIC101,Local:0:I.Ch0Data,Local:0:I.Ch1Data,
Local:1:O.Ch0Data,0,Local:1:I.Ch0InHold,
Local:1:I.Ch0Data);
END_IF;
Insira o tag do bit de status InHold como o parâmetro do bit InHold da instrução PID. Insira
o tag do valor de Data readback como o parâmetro Inhold Value.
Quando o bit Inhold se torna verdadeiro, a instrução PID muda Inhold Value na saída da
variável de controle e reinicializa para ajudar um reinício sem interrupção no valor.
Quando o módulo de saída analógica recebe este valor de volta do controlador, ele
desabilita o bit de status InHold que permite que a instrução PID inicie o controle
normalmente.
Suavização do derivativo
A zona morta ajustável permite que você selecione uma faixa de erro
acima e abaixo do setpoint em que a saída não altera enquanto o erro
permanece dentro desta faixa. Esta zona morta permite que você
controle melhor como a variável de processo corresponde ao setpoint
+ zona morta
- zona morta
tempo 41026
Malhas em cascata
Lógica Ladder
Texto Estruturado
PID(master,pv_master,0,cv_master,0,0,0);
PID (slave,pv_slave,0,cv_slave,master,0,0);
Lógica Ladder
Texto Estruturado
Teoria PID As figuras a seguir mostram o fluxo do processo para uma instrução
PID.
processo PID
SP Erro Exibido
Exibido como EUs
como EUs
Software A/M
OU Bias de
A/M Station Mode Ação de Saída %
Controle
Software % de Saídas
Auto SP-PV A/M Mode Energizadas
Converte Unidades A/M Station
(Erro) em % (Out%) Auto Mode
+ Cálculo PID +
- Erro X 100 Auto Converte % em Unidades CV
SP Manual -1
PV-SP maxs-mins Limitação CV
PVT Manual de Saída CV%(maxcv-mincv)
+ mincv
não % de Saídas Manual 100
Energizadas
PV
Exibido Saída (CV)
sim como EUs Exibida como %
da Escala EU
Converte Binário em Unidades Converte Unidades de
de Engenharia Tieback em %
(PV-min)(maxs-mins) + mins tieback-mintie
maxi-mini x 100
maxtie-mintie
PV
Malha
Mestre Software A/M % de Bias
OU de Saída
A/M Station Mode Ação de Controle
Software A/M % de
Auto SP-PV Mode A/M Station Saídas
Converte
(Erro) Unidades em % (Out%) Auto Mode
+ Cálculo PID +
-
SP -1 Erro X 100 Auto
Manual (Master.Out)
PV-SP maxs-mins Limitação
PVT % de Saídas Manual de Saída
não Energizadas Manual
Software
sim A/M Mode
Auto
Converte Binário em Converte
Unidades de Engenharia SP Unidades em % Manual
(PV-min)(maxs-mins) Erro X 100 Manual Os itens mencionados nesta caixa
+ mins PV são parâmetros, unidades e modos já
maxi-mini maxs-mins
que pertencem a uma determinada
malha Escrava.
PV
Malha
Escrava Bias de
Ação de Controle Saída %
% de
Software A/M saídas
Converte % em (SP) SP-PV Converte Mode A/M Station
(Master.Out) Unidades de Auto Mode
+ Unidades em % Cálculo PID +
X (maxs-mins) -
+ mins -1 Erro X 100 Auto
100 Converte % em Unidades CV
PV-SP maxs-mins Limitação
Manual de Saída CV%(maxcv-mincv)
% de Saídas + mincv
Converte Binário em Manual 100
Energizadas
Unidades de Engenharia
(PV-min)(maxs-mins)
+ mins Converte Unidades de
maxi-mini
Tieback em %
tieback-mintie x 100
maxtie-mintie
PV
Notas:
Instruções Trigonométricas
(SIN, COS, TAN, ASN, ASIN, ACS, ACOS, ATN, ATAN)
Seno (SIN) A instrução SIN calcula o seno de Source (em radianos) e armazena o
resultado em Destination.
Operandos:
Lógica Ladder
Texto Estruturado
dest := SIN(source); Use SIN como uma função. Esta função calcula o seno de source e
armazena o resultado em dest.
Bloco de Funções
Estrutura FBD_MATH_ADVANCED
Descrição: Source deve ser maior ou igual a -205887,4 (-2πx215) e menor ou igual
a 205887,4 (2πx215). O valor resultante em Destination é sempre
superior a ou igual a -1 e inferior a ou igual a 1.
Execução:
Lógica Ladder
Condição: Ação:
prescan A saída da condição da linha é definida como falsa.
entrada da condição da linha é falsa A saída da condição da linha é definida como falsa.
entrada da condição da linha é verdadeira O controlador calcula o seno de Source e coloca o resultado em Destination.
A saída da condição da linha é definida como verdadeira.
postscan A saída da condição da linha é definida como falsa.
Bloco de Funções
Condição: Ação:
prescan Nenhuma ação tomada.
primeiro scan da instrução Nenhuma ação tomada.
primeira execução da instrução Nenhuma ação tomada.
EnableIn está desenergizado EnableOut é desenergizado.
EnableIn está energizado A instrução executa.
EnableOut é energizado.
postscan Nenhuma ação tomada.
Lógica Ladder
Texto Estruturado
result := SIN(value);
Bloco de Funções
Operandos:
Lógica Ladder
Texto Estruturado
dest := COS(source); Use COS como uma função. Esta função calcula o co-seno de source e
armazena o resultado em dest.
Bloco de Funções
Estrutura FBD_MATH_ADVANCED
Descrição: Source deve ser maior ou igual a -205887,4 (-2πx215) e menor ou igual
a 205887,4 (2πx215). O valor resultante em Destination é sempre
superior a ou igual a -1 e inferior a ou igual a 1.
Execução
Lógica Ladder
Condição: Ação:
prescan A saída da condição da linha é definida como falsa.
entrada da condição da linha é falsa A saída da condição da linha é definida como falsa.
entrada da condição da linha é verdadeira O controlador calcula o co-seno de Source e coloca o resultado em Destination.
A saída da condição da linha é definida como verdadeira.
postscan A saída da condição da linha é definida como falsa.
Bloco de Funções
Condição: Ação:
prescan Nenhuma ação tomada.
primeiro scan da instrução Nenhuma ação tomada.
primeira execução da instrução Nenhuma ação tomada.
EnableIn está desenergizado EnableOut é desenergizado.
EnableIn está energizado A instrução executa.
EnableOut é energizado.
postscan Nenhuma ação tomada.
Lógica Ladder
Texto Estruturado
result := COS(value);
Bloco de Funções
Operandos:
Lógica Ladder
Texto Estruturado
dest := TAN(source); Use TAN como uma função. Esta função calcula a tangente de source
e armazena o resultado em dest.
Bloco de Funções
Estrutura FBD_MATH_ADVANCED
Descrição: Source deve ser maior ou igual a -102943,7 (-2πx214) e menor ou igual
a 102943,7 (2πx214).
Execução
Lógica Ladder
Condição: Ação:
prescan A saída da condição da linha é definida como falsa.
entrada da condição da linha é falsa A saída da condição da linha é definida como falsa.
entrada da condição da linha é verdadeira O controlador calcula a tangente de Source e coloca o resultado em Destination.
A saída da condição da linha é definida como verdadeira.
postscan A saída da condição da linha é definida como falsa.
Bloco de Funções
Condição: Ação:
prescan Nenhuma ação tomada.
primeiro scan da instrução Nenhuma ação tomada.
primeira execução da instrução Nenhuma ação tomada.
EnableIn está desenergizado EnableOut é desenergizado.
EnableIn está energizado A instrução executa.
EnableOut é energizado.
postscan Nenhuma ação tomada.
Lógica Ladder
Texto Estruturado
result := TAN(value);
Bloco de Funções
Arco Seno (ASN) A instrução ASN calcula o arco seno de Source (em radianos) e
armazena o resultado em Destination (em radianos).
Operandos:
Lógica Ladder
Texto Estruturado
dest := ASIN(source); Use ASIN como uma função. Esta função calcula o arco seno de
source e armazena o resultado em dest.
Bloco de Funções
Estrutura FBD_MATH_ADVANCED
Execução
Lógica Ladder
Condição: Ação:
prescan A saída da condição da linha é definida como falsa.
entrada da condição da linha é falsa A saída da condição da linha é definida como falsa.
entrada da condição da linha é verdadeira O controlador calcula o arco seno de Source e coloca o resultado em Destination.
A saída da condição da linha é definida como verdadeira.
postscan A saída da condição da linha é definida como falsa.
Bloco de Funções
Condição: Ação:
prescan Nenhuma ação tomada.
primeiro scan da instrução Nenhuma ação tomada.
primeira execução da instrução Nenhuma ação tomada.
EnableIn está desenergizado EnableOut é desenergizado.
EnableIn está energizado A instrução executa.
EnableOut é energizado.
postscan Nenhuma ação tomada.
Lógica Ladder
Texto Estruturado
result := ASIN(value);
Bloco de Funções
Arco Co-seno (ACS) A instrução ACS retira o arco co-seno de Source (em radianos) e
armazena o resultado em Destination (em radianos).
Operandos:
Lógica Ladder
Texto Estruturado
dest := ACOS(source); Use ACOS como uma função. Esta função calcula o arco co-seno de
source e armazena o resultado em dest.
Bloco de Funções
Estrutura FBD_MATH_ADVANCED
Execução:
Lógica Ladder
Condição: Ação:
prescan A saída da condição da linha é definida como falsa.
entrada da condição da linha é falsa A saída da condição da linha é definida como falsa.
entrada da condição da linha é verdadeira O controlador calcula o arco co-seno de Source e coloca o resultado em Destination.
A saída da condição da linha é definida como verdadeira.
postscan A saída da condição da linha é definida como falsa.
Bloco de Funções
Condição: Ação:
prescan Nenhuma ação tomada.
primeiro scan da instrução Nenhuma ação tomada.
primeira execução da instrução Nenhuma ação tomada.
EnableIn está desenergizado EnableOut é desenergizado.
EnableIn está energizado A instrução executa.
EnableOut é energizado.
postscan Nenhuma ação tomada.
Lógica Ladder
Texto Estruturado
result := ACOS(value);
Bloco de Funções
Arco Tangente (ATN) A instrução ATN calcula o arco tangente de Source (em radianos) e
armazena o resultado em Destination (em radianos).
Operandos:
Lógica Ladder
Texto Estruturado
dest := ATAN(source); Use ATAN como uma função. Esta função calcula o arco tangente de
source e armazena o resultado em dest.
Bloco de Funções
Estrutura FBD_MATH_ADVANCED
Execução:
Lógica Ladder
Condição: Ação:
prescan A saída da condição da linha é definida como falsa.
entrada da condição da linha é falsa A saída da condição da linha é definida como falsa.
entrada da condição da linha é verdadeira O controlador calcula o arco tangente de Source e coloca o resultado em Destination.
A saída da condição da linha é definida como verdadeira.
postscan A saída da condição da linha é definida como falsa.
Bloco de Funções
Condição: Ação:
prescan Nenhuma ação tomada.
primeiro scan da instrução Nenhuma ação tomada.
primeira execução da instrução Nenhuma ação tomada.
EnableIn está desenergizado EnableOut é desenergizado.
EnableIn está energizado A instrução executa.
EnableOut é energizado.
postscan Nenhuma ação tomada.
Lógica Ladder
Texto Estruturado
result := ATAN(value);
Bloco de Funções
Notas:
Log Neperiano (LN) A instrução LN calcula o log neperiano de Source e coloca o resultado
em Destination.
Operandos:
Lógica Ladder
Texto Estruturado
dest := LN(source); Use LN como uma função. Esta função calcula o log neperiano
desource e armazena o resultado em dest.
Bloco de Funções
estrutura FBD_MATH_ADVANCED
Descrição: Source deve ser maior que zero, caso contrário o bit de status de
overflow (S:V) está energizado. Destination resultante é maior ou
igual a -87.33655 e menor ou igual a 88.72284.
Execução
Lógica Ladder
Condição: Ação:
prescan A saída da condição da linha é definida como falsa.
entrada da condição da linha é falsa A saída da condição da linha é definida como falsa.
entrada da condição da linha é verdadeira O controlador calcula o log neperiano de Source e coloca o resultado em Destination.
A saída da condição da linha é definida como verdadeira.
postscan A saída da condição da linha é definida como falsa.
Bloco de Funções
Condição: Ação:
prescan Nenhuma ação tomada.
primeiro scan da instrução Nenhuma ação tomada.
primeira execução da instrução Nenhuma ação tomada.
EnableIn está desenergizado EnableOut está desenergizado.
EnableIn está energizado A instrução executa.
EnableOut está energizado.
postscan Nenhuma ação tomada.
Texto Estruturado
result := LN(value);
Bloco de Funções
Log Base 10 (LOG) A instrução LOG calcula o log de base 10 de Source e coloca o
resultado em Destination.
Operandos:
Lógica Ladder
Texto Estruturado
dest := LOG(source); Use LOG como uma função. Esta função calcula o log desource e
armazena o resultado em dest.
Bloco de Funções
Estrutura FBD_MATH_ADVANCED
Descrição: Source deve ser maior que zero, caso contrário o bit de status de
overflow (S:V) está energizado. Destination resultante é maior ou
igual a -37.92978 e menor ou igual a 38.53184.
Execução
Lógica Ladder
Condição: Ação:
prescan A saída da condição da linha é definida como falsa.
entrada da condição da linha é falsa A saída da condição da linha é definida como falsa.
entrada da condição da linha é verdadeira O controlador calcula o log de Source e coloca o resultado em Destination.
A saída da condição da linha é definida como verdadeira.
postscan A saída da condição da linha é definida como falsa.
Bloco de Funções
Condição: Ação:
prescan Nenhuma ação tomada.
primeiro scan da instrução Nenhuma ação tomada.
primeira execução da instrução Nenhuma ação tomada.
EnableIn está desenergizado EnableOut está desenergizado.
EnableIn está energizado A instrução executa.
EnableOut está energizado.
postscan Nenhuma ação tomada.
Lógica Ladder
Texto Estruturado
result := LOG(value);
Bloco de Funções
X Elevado a Y (XPY) A instrução XPY calcula Source A (X) para a alimentação de Source B
(Y) e armazena o resultado em Destination.
Operandos:
Lógica Ladder
Texto Estruturado
dest := sourceX ** Use dois sinais de multiplicação adjacentes “∗∗” como um operador
sourceY; dentro de uma expressão. Esta expressão retira sourceX para a
alimentação de sourceY e armazena o resultado em dest.
Bloco de Funções
Estrutura FBD_MATH
Descrição: Se Source X for negativo, Source Y deve ser um valor inteiro ou uma
falha de advertência ocorrerá.
Condições de Falha:
Execução
Lógica Ladder
Condição: Ação:
prescan A saída da condição da linha é definida como falsa.
entrada da condição da linha é falsa A saída da condição da linha é definida como falsa.
entrada da condição da linha é verdadeira O controlador calcula Source X elevado a Source Y e coloca o resultado em Destination.
A saída da condição da linha é definida como verdadeira.
postscan A saída da condição da linha é definida como falsa.
Bloco de Funções
Condição: Ação:
prescan Nenhuma ação tomada.
primeiro scan da instrução Nenhuma ação tomada.
primeira execução da instrução Nenhuma ação tomada.
EnableIn está desenergizado EnableOut está desenergizado.
EnableIn está energizado A instrução executa.
EnableOut está energizado.
postscan Nenhuma ação tomada.
Lógica Ladder
Texto Estruturado
Bloco de Funções
Graus (DEG) A instrução DEG converte Source (em radianos) em graus e armazena
o resultado em Destination.
Operandos:
Lógica Ladder
Texto Estruturado
dest := DEG(source); Use DEG como uma função. Esta função converte source em graus e
armazena o resultado em dest.
Bloco de Funções
Estrutura FBD_MATH_ADVANCED
Execução
Lógica Ladder
Condição: Ação:
prescan A saída da condição da linha é definida como falsa.
entrada da condição da linha é falsa A saída da condição da linha é definida como falsa.
entrada da condição da linha é verdadeira O controlador converte Source em graus e coloca o resultado em Destination.
A saída da condição da linha é definida como verdadeira.
postscan A saída da condição da linha é definida como falsa.
Bloco de Funções
Condição: Ação:
prescan Nenhuma ação tomada.
primeiro scan da instrução Nenhuma ação tomada.
primeira execução da instrução Nenhuma ação tomada.
EnableIn está desenergizado EnableOut está desenergizado.
EnableIn está energizado A instrução executa.
EnableOut está energizado.
postscan Nenhuma ação tomada.
Lógica Ladder
Texto Estruturado
result := DEG(value);
Bloco de Funções
Radianos (RAD) A instrução RAD converte Source (em graus) em radianos e armazena
o resultado em Destination.
Operandos:
Lógica Ladder
Texto Estruturado
dest := RAD(source); Use RAD como uma função. Esta função converte source em radianos
e armazena o resultado em dest.
Bloco de Funções
Estrutura FBD_MATH_ADVANCED
Execução
Lógica Ladder
Condição: Ação:
prescan A saída da condição da linha é definida como falsa.
entrada da condição da linha é falsa A saída da condição da linha é definida como falsa.
entrada da condição da linha é verdadeira O controlador converte Source em radianos e coloca o resultado em Destination.
A saída da condição da linha é definida como verdadeira.
postscan A saída da condição da linha é definida como falsa.
Bloco de Funções
Condição: Ação:
prescan Nenhuma ação tomada.
primeiro scan da instrução Nenhuma ação tomada.
primeira execução da instrução Nenhuma ação tomada.
EnableIn está desenergizado EnableOut está desenergizado.
EnableIn está energizado A instrução executa.
EnableOut está energizado.
postscan Nenhuma ação tomada.
Lógica Ladder
Texto Estruturado
result := RAD(value);
Bloco de Funções
Conversão para BCD (TOD) A instrução TOD converte um valor decimal (0 ≤ Source ≤ 99,999,999) em
um valor BCD e armazena o resultado em Destination.
Operandos:
Lógica Ladder
Bloco de Funções
estrutura FBD_CONVERT
Condições de Falha:
Execução
Lógica Ladder
Condição: Ação:
prescan A saída da condição da linha é definida como falsa.
entrada da condição da linha é falsa A saída da condição da linha é definida como falsa.
entrada da condição da linha é verdadeira
não não
Source < 0 source > 99,999,999 converte source em BCD
sim sim
fim
entrada da condição da linha é verdadeira O controlador converte Source em BCD e coloca o resultado em Destination.
A saída da condição da linha é definida como verdadeira.
postscan A saída da condição da linha é definida como falsa.
Bloco de Funções
Condição: Ação:
prescan Nenhuma ação tomada.
primeiro scan da instrução Nenhuma ação tomada.
primeira execução da instrução Nenhuma ação tomada.
EnableIn está desenergizado EnableOut está desenergizado.
EnableIn está energizado A instrução executa.
EnableOut está energizado.
postscan Nenhuma ação tomada.
Lógica Ladder
Bloco de Funções
Conversão em Inteiro (FRD) A instrução FRD converte um valor BCD (Source) em um valor
decimal e armazena o resultado em Destination.
Operandos:
Lógica Ladder
Bloco de Funções
estrutura FBD_CONVERT
Execução
Lógica Ladder
Condição: Ação:
prescan A saída da condição da linha é definida como falsa.
entrada da condição da linha é falsa A saída da condição da linha é definida como falsa.
entrada da condição da linha é verdadeira O controlador converte Source em um valor decimal e coloca o resultado em
Destination.
A saída da condição da linha é definida como verdadeira.
postscan A saída da condição da linha é definida como falsa.
Bloco de Funções
Condição: Ação:
prescan Nenhuma ação tomada.
primeiro scan da instrução Nenhuma ação tomada.
primeira execução da instrução Nenhuma ação tomada.
EnableIn está desenergizado EnableOut é desenergizado.
EnableIn está energizado A instrução executa.
EnableOut é energizado.
postscan Nenhuma ação tomada.
Lógica Ladder
Bloco de Funções
Operandos:
Lógica Ladder
Texto Estruturado
dest := TRUNC(source); Use TRUNC como uma função. Esta função trunca source e armazena
o resultado em dest.
Bloco de Funções
Estrutura FBD_TRUNCATE
Execução
Lógica Ladder
Condição: Ação:
prescan A saída da condição da linha é definida como falsa.
entrada da condição da linha é falsa A saída da condição da linha é definida como falsa.
entrada da condição da linha é verdadeira O controlador remove a parte fracionária de Source e coloca o resultado em Destination.
A saída da condição da linha é definida como verdadeira.
postscan A saída da condição da linha é definida como falsa.
Bloco de Funções
Condição: Ação:
prescan Nenhuma ação tomada.
primeiro scan da instrução Nenhuma ação tomada.
primeira execução da instrução Nenhuma ação tomada.
EnableIn está desenergizado EnableOut está desenergizado.
EnableIn está energizado A instrução executa.
EnableOut está energizado.
postscan Nenhuma ação tomada.
Lógica Ladder
Texto Estruturado
float_value_1_truncated := TRUNC(float_value_1);
Bloco de Funções
Execução da Instrução
Instrução 3
Instrução 4
Os dados fluem entre
A instrução entra na fila a tarefa e o buffer.
ASCII.
Cada instrução da porta serial ASCII (exceto ACL) usa uma estrutura
SERIAL_PORT_CONTROL para executar as seguintes funções:
.EU off on
A fila ASCII suporta até 16 instruções. Quando a fila está cheia, uma
.EN off on
.EU off on
entra na fila
• Você pode criar novos tipos de dados de string que armazenem menos ou
mais caracteres.
Teste ASCII Para Linha do A instrução ABL conta os caracteres no buffer até e, incluindo, o
primeiro caractere de terminação
Buffer (ABL)
Operandos:
Lógica Ladder
Texto Estruturado
ABL(Channel Os operandos são os mesmos que aqueles para a instrução de lógica
SerialPortControl);
ladder ABL. Você acessa o valor Character Count através do membro
.POS da estrutura SERIAL_PORT_CONTROL.
Estrutura SERIAL_PORT_CONTROL
Execução:
Lógica Ladder
MV_line.EN ABL
/ ASCII Test For Buffer Line EN
Channel 0 DN
SerialPort Control MV_line ER
Character Count 0
Texto Estruturado
ABL(0,MV_line);
Lógica Ladder
Texto Estruturado
ACB(Channel Os operandos são os mesmos que aqueles para a instrução de lógica
SerialPortControl);
ladder ACB. Entretanto, você especifica o valor de Contagem do
Caractere ao acessar o membro .POS da estrutura
SERIAL_PORT_CONTROL ou ao incluir o valor na lista de operandos.
Estrutura SERIAL_PORT_CONTROL
Execução:
Lógica Ladder
bar_code_count.EN ACB
/ ASCII Chars in Buffer EN
Channel 0 DN
SerialPort Control bar_code_count ER
Character Count 0
Texto Estruturado
ACB(0,bar_code_count);
Lógica Ladder
Texto Estruturado
ACL(Channel, Os operandos são os mesmos que aqueles para a instrução de lógica
ClearSerialPortRead,
ladder ACL.
ClearSerialPortWrite);
Execução:
Lógica Ladder
S:FS ACL
ASCII Clear Buffer
Channel 0
Clear Serial Port Read 1
Clear Serial Port Write 1
Texto Estruturado
OSRI_1.InputBit := S:FS;
OSRI(osri_1);
SE (osri_1.OutputBit) ENTÃO
ACL(0,0,1);
END_IF;
Linhas de Handshake ASCII A instrução AHL obtém o status de linhas de controle e acende ou
apaga os sinais DTR e RTS.
(AHL)
Operandos:
Lógica Ladder
AHL
ASCII Handshake Lines EN
Channel ?
AND Mask ? DN
??
OR Mask ? ER
??
SerialPort Control ?
Channel Status(Decimal) ?
Texto Estruturado
AHL(Channel,ANDMask,ORMask, Os operandos são os mesmos que aqueles para a instrução de lógica
SerialPortControl);
ladder AHL. Entretanto, você especifica o valor de Channel Status ao
acessar o membro .POS da estrutura SERIAL_PORT_CONTROL ou ao
incluir o valor na lista de operandos.
Estrutura SERIAL_PORT_CONTROL
Condições de Falha:
Execução:
Lógica Ladder
get_control_line_status AHL
ASCII Handshake Lines EN
Channel 0
AND Mask 0 DN
OR Mask 0 ER
Texto Estruturado
osri_1.InputBit := get_control_line_status;
OSRI(osri_1);
SE (osri_1.OutputBit) ENTÃO
AHL(0,0,0,serial_port);
END_IF;
Operandos:
Lógica Ladder
ARD
ASCII Read EN
Channel ?
Destination ? DN
??
SerialPort Control ? ER
SerialPort Control Length ?
Characters Read ?
Texto Estruturado
ARD(Channel,Destination, Os operandos são os mesmos que aqueles para a instrução ARD de
SerialPortControl);
lógica ladder. Entretanto, você especifica os valores de Serial Port
Control Length e de Characteres Read ao acessar os membros .LEN e
.POS da estrutura SERIAL_PORT_CONTROL ou ao incluir os valores
na lista de operandos.
Estrutura SERIAL_PORT_CONTROL
Execução:
Condição: Ação da Lógica Ladder: Ação do Texto Estruturado:
prescan A saída da condição da linha é definida como falsa. Nenhuma ação tomada.
entrada da condição da A saída da condição da linha é definida como falsa. na
linha é falsa
entrada da condição da A instrução executa quando a entrada da condição na
linha é verdadeira de linha alterna de desenergizada para energizada.
A saída da condição da linha é definida como
verdadeira.
EnableIn está energizado na EnableIn está sempre energizado
A instrução executa.
execução da instrução A instrução remove os caracteres do buffer e armazena-os em Destination.
O bit .EN é energizado.
Os bits de status restantes, exceto .UL, são desenergizados.
A instrução tenta entrar na fila ASCII.
postscan A saída da condição da linha é definida como falsa. Nenhuma ação tomada.
Lógica Ladder
bar_code_count.EN ACB
/ ASCII Chars in Buffer EN
Channel 0 DN
SerialPort Control bar_code_count ER
Character Count 0
GEQ ARD
Grtr Than or Eql (A>=B) ASCII Read EN
Source A bar_code_count.pos Channel 0
0 Destination bag_bar_code DN
Source B 24 ''
SerialPort Control bar_code_read ER
SerialPort Control Length 24
Characters Read 0
Texto Estruturado
ACB(0,bar_code_count);
IF bar_code_count.POS >= 24 THEN
bar_code_read.LEN := 24;
ARD(0,bag_bar_code,bar_code_read);
END_IF;
Lógica Ladder
ARL
ASCII Read Line EN
Channel ?
Destination ? DN
??
SerialPort Control ? ER
SerialPort Control Length ?
Characters Read ?
Texto Estruturado
ARL(Channel,Destination, Os operandos são os mesmos que aqueles para a instrução de lógica
SerialPortControl);
ladder ARL. Entretanto, você especifica os valores do Serial Port
Control Length e de Characters Read ao acessar os membros .LEN e
.POS da estrutura SERIAL_PORT_CONTROL ou ao incluir os valores
na lista de operandos.
Estrutura SERIAL_PORT_CONTROL
Execução:
Lógica Ladder
MV_line.EN ABL
/ ASCII Test For Buffer Line EN
Channel 0 DN
SerialPort Control MV_line ER
Character Count 0
MV_line.FD ARL
ASCII Read Line EN
Channel 0
Destination MV_msg DN
''
SerialPort Control MV_read ER
SerialPort Control Length 12
Characters Read 0
Texto Estruturado
ABL(0,MV_line);
osri_1.InputBit := MVLine.FD;
OSRI(osri_1);
SE (osri_1.OutputBit) ENTÃO
mv_read.LEN := 12;
ARL(0,MV_msg,MV_read);
END_IF;
Anexar Leitura ASCII A instrução AWA envia um número específico de caracteres do tag
Source para um dispositivo serial e anexa um ou dois caracteres
(AWA) pré-definidos.
Operandos:
Lógica Ladder
AWA
ASCII Write Append EN
Channel ?
Source ? DN
??
SerialPort Control ? ER
SerialPort Control Length ?
Characters Sent ?
Texto Estruturado
AWA(Channel,Source, Os operandos são os mesmos que aqueles para a instrução de lógica
SerialPortControl);
ladder AWA. Entretanto, você especifica os valores do Serial Port
Control Length e Characters Sent ao acessar os membros .LEN e .POS
da estrutura SERIAL_PORT_CONTROL ou ao incluir os valores na lista
de operandos.
Estrutura SERIAL_PORT_CONTROL
Se: Então:
sim Selecione modo User
não Selecione ou o modo System ou User
Se: Então:
Sim Em Serial Port Control Length, insira o número de caracteres a serem enviados.
Não Antes de executar a instrução, defina o membro LEN do tag Source para o
membro LEN do tag Serial Port Control.
Execução:
Lógica Ladder
temp_high AWA
ASCII Write Append EN
Channel 0
Source string[1] DN
'$1425\1'
SerialPort Control temp_high_write ER
SerialPort Control Length 5
Characters Sent 6
Texto Estruturado
SE temp_high ENTÃO
temp_high_write.LEN := 5;
AWA(0,string[1],temp_high_write);
temp_high := 0;
END_IF;
Lógica Ladder
Texto Estruturado
osri_1.InputBit := alarm;
OSRI(osri_1);
SE (osri_1.OutputBit) ENTÃO
alarm_write.LEN := alarm_msg.LEN;
AWA(0,alarm_msg,alarm_write);
END_IF;
Escrita ASCII (AWT) A instrução AWT envia um número específico de caracteres do tag
Source para um dispositivo serial.
Operandos:
Lógica Ladder
AWT
ASCII Write EN
Channel ?
Source ? DN
??
SerialPort Control ? ER
SerialPort Control Length ?
Characters Sent ?
Texto Estruturado
AWT(Channel,Source, Os operandos são os mesmos que aqueles para a instrução de lógica
SerialPortControl);
ladder AWT. Entretanto, você especifica os valores do Serial Port
Control Length e de Characters Sent ao acessar os membros .LEN e
.POS da estrutura SERIAL_PORT_CONTROL ou ao incluir os valores
na lista de operandos.
Estrutura SERIAL_PORT_CONTROL
Se: Então:
sim Em Serial Port Control Length, insira o número de caracteres a serem
enviados.
não Antes de executar a instrução, mude o membro LEN do tag Source
para o membro LEN do tag Serial Port Control.
Execução:
Lógica Ladder
temp_low AWT
ASCII Write EN
Channel 0
Source string[2] DN
'$142224\01$r'
SerialPort Control temp_low_write ER
SerialPort Control Length 9
Characters Sent 9
Texto Estruturado
osri_1.InputBit := temp_low;
OSRI(osri_1);
SE (osri_1.OutputBit) ENTÃO
temp_low_write.LEN := 9;
AWT(0,string[2],temp_low_write);
END_IF;
Lógica Ladder
Texto Estruturado
osri_1.InputBit := MV_update;
OSRI(osri_1);
IF (osri_1.OutputBit) THEN
MV_write.LEN := Mv_msg.LEN;
AWT(0,MV_msg,MV_write);
END_IF;
Notas:
You store ASCII characters in tags that use a string data type.
• You can use the default STRING data type. It stores up to 82
characters.
• You can create a new string data type that stores less or more
characters.
The LEN shows the length of the current string. The DATA member may contain
additional, old characters, which are not included in the LEN count.
DATA SINT array ASCII characters of • To access the characters of the string, address the name of the tag.
the string For example, to access the characters of the string_1 tag, enter string_1.
• You can create new string data types that store less or more characters.
Concatenação de String A instrução CONCAT adiciona caracteres ASCII ao final de uma string.
(CONCAT)
Operandos:
Lógica Ladder
CONCAT
String Concatenate
Source A ?
??
Source B ?
??
Dest ?
??
Texto Estruturado
CONCAT(SourceA,SourceB, Os operandos são os mesmos que os da instrução CONCAT da lógica
Dest);
ladder.
Condições de Falha:
Execução
Lógica Ladder
add_node CONCAT
String Concatenate
Source A string_1
'$1423\'
Source B node_num_ascii
'1'
Dest msg
'$1423\1'
Texto Estruturado
IF add_node THEN
CONCAT(string_1,node_num_ascii,msg);
add_node := 0;
END_IF;
Lógica Ladder
DELETE
String Delete
Source ?
??
Qty ?
??
Start ?
??
Dest ?
??
Texto Estruturado
DELETE(Source,Qty,Start, Os operandos são os mesmos que os da instrução DELETE da lógica
Dest);
ladder.
Condições de Falha:
Execução
Lógica Ladder
term_read.EM DELETE
String Delete
Source term_input
'$0655'
Qty 1
Start 1
Dest term_text
'55'
Texto Estruturado
IF term_read.EM THEN
DELETE(term_input,1,1,term_text);
term_read.EM := 0;
END_IF;
Localização de String A instrução FIND localiza a posição inicial de uma string específica
dentro de outra string
(FIND)
Operandos:
Lógica Ladder
FIND
Find String
Source ?
??
Search ?
??
Start ?
??
Result ?
??
Texto Estruturado
FIND(Source,Search,Start, Os operandos são os mesmos que os da instrução FIND da lógica
Result);
ladder descrita acima.
Condições de Falha:
Execução
Lógica Ladder
MV_read.EM FIND
Find String
Source MV_msg
'$06324\12\1\$r'
Search find
'\'
Start 1
Result find_pos
5
Texto Estruturado
IF MV_read.EM THEN
FIND(MV_msg,find,1,find_pos);
MV_read.EM := 0;
END_IF;
Inserção de String (INSERT) A instrução INSERT adiciona caracteres ASCII a um local específico
dentro de uma string.
Operandos:
Lógica Ladder
INSERT
Insert String
Source A ?
??
Source B ?
??
Start ?
??
Dest ?
??
Texto Estruturado
INSERT(SourceA,SourceB, Os operandos são os mesmos que os da instrução INSERT da lógica
Start,Dest);
ladder.
Condições de Falha:
Execução
Lógica Ladder
temp_high INSERT
Insert String
Source A string_1
'AD'
Source B string_2
'BC'
Start 2
Dest string_3
'ABCD'
Texto Estruturado
IF temp_high THEN
INSERT(string_1,string_2,2,string_3);
temp_high := 0;
END_IF;
String Média (MID) A instrução MID copia um número específico de caracteres ASCII de
uma string e os armazena em outra string.
Operandos:
Lógica Ladder
MID
Middle String
Source ?
??
Qty ?
??
Start ?
??
Dest ?
??
Texto Estruturado
MID(Source,Qty,Start, Os operandos são os mesmos que os da instrução MID da lógica
Dest);
ladder.
Condições de Falha:
Execução
Lógica Ladder
bag_read.EM MID
Middle String
Source bag_barcode
'NWA HOP 5058 AMS 01'
Qty 9
Start 9
Dest bag_flt_and_dest
'5058 AMS '
Texto Estruturado
IF bag_read.EM THEN
MID(bar_barcode,9,9,bag_flt_and_dest);
bag_read.EM := 0;
END_IF;
String Para DINT (STOD) A instrução STOD converte a representação ASCII de um inteiro para
um valor inteiro ou REAL.
Operandos:
Lógica Ladder
STOD
String To DINT
Source ?
??
Dest ?
??
STOD(Source,Dest);
Texto Estruturado
Condições de Falha:
Execução
Lógica Ladder
MV_read.EM STOD
String To DINT
Source MV_msg
'$06324\12\1\$r'
Dest MV_msg_nmbr
324
Texto Estruturado
IF MV_read.EM THEN
STOD(MV_msg,MV_msg_nmbr);
MV_read.EM := 0;
END_IF;
String Para REAL (STOR) A instrução STOR converte a representação ASCII de um valor de
ponto flutuante para um valor REAL.
Operandos:
STOR(Source,Dest);
Texto Estruturado
Condições de Falha:
Execução
Lógica Ladder
weight_read.EM STOR
String to Real
Source weight_ascii
'428.259'
Dest weight
428.259
Texto Estruturado
IF weight_read.EM THEN
STOR(weight_ascii,weight);
weight_read.EM := 0;
END_IF;
DINT Para String (DTOS) A instrução DTOS produz a representação ASCII de um valor.
Operandos:
Lógica Ladder
DTOS
DINT to String
Source ?
??
Dest ?
??
DTOS(Source,Dest);
Texto Estruturado
Condições de Falha:
Execução
Lógica Ladder
temp_high DTOS
DINT to String
Source msg_num
23
Dest msg_num_ascii
'23'
Texto Estruturado
IF temp_high THEN
DTOS(msg_num,msg_num_ascii);
temp_high := 0;
END_IF;
REAL Para String (RTOS) A instrução RTOS produz a representação ASCII de um valor REAL.
Operandos:
Lógica Ladder
RTOS
Real to String
Source ?
??
Dest ?
??
RTOS(Source,Dest);
Texto Estruturado
Condições de Falha:
Execução
Lógica Ladder
send_data RTOS
Real to String
Source data_1
15.3001
Dest data_1_ascii
'15.3001003'
Texto Estruturado
IF send_data THEN
RTOS(data_1,data_1_ascii);
send_data := 0;
END_IF;
Letra Maiúscula (UPPER) A instrução UPPER converte os caracteres alfabéticos em uma string
para caracteres de letras maiúsculas.
Operandos:
Lógica Ladder
UPPER(Source,Dest);
Texto Estruturado
Execução
Lógica Ladder
Texto Estruturado
IF terminal_read.EM THEN
UPPER(catalog_number,catalog_number_upper_case);
terminal_read.EM := 0;
END_IF;
Letra Minúscula (LOWER) A instrução LOWER converte os caracteres alfabéticos em uma string
em caracteres de letras minúsculas.
Operandos:
Lógica Ladder
LOWER(Source,Dest);
Texto Estruturado
Execução
Lógica Ladder
Texto Estruturado
IF terminal_read.EM THEN
LOWER(item_number,item_number_lower_case);
terminal_read.EM := 0;
END_IF;
Atributos Comuns
Valores Imediatos Sempre que inserir um valor imediato (constante) no formato decimal
(ex., -2, 3) o controlador armazena o valor usando 32 bits. Caso insira
um valor em uma base diferente da decimal, como uma base binária
ou hexadecimal e não especifique todos os 32 bits, o controlador
coloca um zero nos bits que você não especificar (preenchimento
com zeros).
EQU
Equal
Source A remote_rack_1:I.Data[0]
2#1111_1111_1111_1111
Source B 2#1111_1111_1111_1111
42093
• Criar um tag para cada operando e usar o mesmo tipo por toda
a instrução. Para atribuir um valor constante:
EQU
Equal
Source A remote_rack_1:I.Data[0]
2#1111_1111_1111_1111
Source B int_0
2#1111_1111_1111_1111
42093
MOV EQU
Move Equal
Source 2#1111_1111_1111_1111 Source A remote_rack_1:I.Data[0]
2#1111_1111_1111_1111
Dest int_0 Source B int_0
2#1111_1111_1111_1111 2#1111_1111_1111_1111
42093
– Um valor REAL usa até 24 bits para o valor base (23 bits
armazenados mais um bit “escondido”).
– Um valor DINT usa até 32 bits para o valor (um para cada
sinal e 31 bits para o valor).
– Se o valor DINT precisar de mais de 24 bits significativos, ele
pode não converter o mesmo valor REAL. Caso contrário, o
controlador migra para o valor REAL mais próximo usando 24
bits significativos.
Introdução Este apêndice descreve os tópicos que são únicos com as instruções
do bloco de funções. Revise as informações nesse apêndice para
certificar-se de que entendeu como as rotinas do bloco de funções
operarão.
Lançamento de Dados Caso use um IREF para especificar os dados de entrada para uma
instrução do bloco de funções, os dados no IREF são lançados para o
scan da rotina do bloco de funções. O IREF lança os dados dos tags
da área de programa e área do controlador. O controlador atualiza
todos os dados IREF no início de cada scan.
IREF
tagA
Block_02
tagA
Block_02
tagA
1 2 3
1 3 5
2 4 6
1 2 3
fio de realimentação
localizado
DEDT NTCH
DERV PI
HPF PIDE
INTG RLIM
LDLG SCRV
LDL2 SOC
LPF TOT
Modo de Descrição:
Temporização:
periódico No modo periódico, o tempo delta (DeltaT) usado pela instrução é a taxa de scan da tarefa quando a instrução é
executada na tarefa periódica. Se a instrução é executada em uma tarefa contínua, o DeltaT é igual ao tempo
decorrido desde a execução anterior.
A atualização da entrada do processo precisa estar sincronizada com a execução da tarefa ou amostrada 5-10
vezes mais rápido que a execução da tarefa para minimizar o erro de amostragem entre a entrada e a instrução.
oversample No modo oversample, o tempo delta (DeltaT) usado pela instrução é o valor escrito no parâmetro OversampleDT
da instrução. Use esse modo quando a instrução for executada em uma tarefa contínua e a entrada do processo
não possuir um registro de data e hora associado a sua atualização. Se a entrada do processo possuir um valor de
registro de data e hora, use então o modo de amostragem em tempo real.
Adicione lógica ao seu programa para controlar quando a instrução é executada. Por exemplo, é possível usar um
ajuste do temporizador para o valor OversampleDeltaT para controlar a execução ao usar uma entrada EnableIn
da instrução.
A entrada do processo precisa ser amostrada 5-10 vezes mais rápido que a execução da instrução para minimizar
o erro de amostragem entre a entrada e a instrução.
amostragem em No modo de amostragem em tempo real, o tempo delta (DeltaT) usado pela instrução é a diferença entre os dois
tempo real valores de registro de data e hora que correspondem as atualizações da entrada do processo. Use esse modo
quando a instrução for executada em uma tarefa contínua e a entrada do processo possuir um registro de data e
hora associado a sua atualização.
O valor do registro de data e hora é lido do nome do tag inserido para o parâmetro RTSTimeStamp da instrução.
Normalmente, esse nome do tag é um parâmetro no módulo de entrada associado à entrada do processo.
A instrução compara o valor de RTSTime configurado (período de atualização esperado) contra o DeltaT calculado
para determinar se toda a atualização da entrada do processo está sendo lida pela instrução. Se DeltaT não
estiver em 1 milissegundo do tempo de configuração, a instrução define o bit de status do RTSMissed para indicar
que existe um problema na leitura da atualização para a entrada no módulo.
Parâmetros de entrada
válido = 0 a 2
valor inicial = 0
Parâmetros de saída
Periódico: DeltaT = taxa de scan da tarefa se a tarefa for Periódica, DeltaT = tempo decorrido
como na execução da instrução anterior se a tarefa for tarefa Contínua
Se DeltaT < 0 ou DeltaT > 4194,303 seg. Se DeltaT > 0, a instrução executa.
a instrução define DeltaT = 0,0 e
energiza o bit apropriado em Status. Se |RTSTIME - DeltaT| > 1, a instrução energiza o bit
RTSMissed em Status.
Se DeltaT > 0, a instrução é executada.
Determina o tipo de
tarefa
Entradas: Descrição:
.ProgProgReq Um programa que pede para ir para controle Program.
.ProgOperReq Um programa que pede para ir para controle Operator.
.OperProgReq Um operador que pede para ir para controle Program.
.OperOperReq Um operador que pede para ir para controle Operator.
Quando StartupSequenceActive
é energizado, a instrução PIDE é
colocada em controle Program e
modo Manual. O valor
StartupCV é usado como a saída
da malha.
somente um pedido para ir para Auto toda vez que o botão for
pressionado.
Quando o Botão TIC101AutoReq é pressionado, trave um monoestável ProgAutoReq para a instrução PIDE
TIC101. TIC101 foi configurado com a entrada ProgValueReset energizada, para quando a instrução PIDE for
executada, automaticamente desenergizar ProgAutoReq.
Notas:
Introdução Este apêndice descreve os tópicos que são únicos com a programação
de texto estruturado. Revise as informações nesse apêndice para
certificar-se de que entendeu como será executada a programação de
texto estruturado.
Sintaxe do Texto O texto estruturado é uma linguagem de programação textual que usa
as declarações para definir o que executar. O texto estruturado não é
Estruturado sensível ao contexto. O texto estruturado pode conter esses
componentes:
tag := expression ;
onde:
Componente: Descrição:
tag representa o tag que está obtendo o novo valor
o tag deve ser BOOL, SINT, INT, DINT ou REAL
:= é o símbolo de atribuição
expression representa o novo valor para atribuir ao tag
Se otag for deste tipo de dados: Use esse tipo de expressão:
BOOL expressão BOOL
SINT expressão numérica
INT
DINT
REAL
; termina o atributo
O tag retém o valor atribuído até que uma outra atribuição altere o
valor.
onde:
Componente: Descrição:
tag representa o tag que está obtendo o novo valor
o tag deve ser BOOL, SINT, INT, DINT ou REAL
[:=] é um símbolo de atribuição não retentiva
expression representa o novo valor para atribuir ao tag
Se otag for deste tipo de dados: Use esse tipo de expressão:
BOOL expressão BOOL
SINT expressão numérica
INT
DINT
REAL
; termina a atribuição
Por exemplo:
Por exemplo:
Por exemplo:
Por exemplo:
Seqüência: Operação:
1. ()
2. função (…)
3. **
4. − (negação)
5. NOT
6. *, /, MOD
7. +, - (subtração)
8. <, <=, >, >=
9. =, <>
10. &, AND
11. XOR
12. OR
END_IF;
osri_1.InputBit := tag_xic;
OSRI(osri_1);
IF (osri_1.OutputBit) THEN
ABL(0,serial_control);
END_IF;
Operandos:
Texto Estruturado
IF bool_expression THEN
Operando: Tipo: Formato: Insira:
<statement>;
END_IF; bool_ BOOL tag tag BOOL ou a expressão que avalie para
expression expressão um valor BOOL (expressão BOOL)
Descrição: A sintaxe é:
IF bool_expression THEN
<statement >; declarações a serem executadas
quando bool_expression1 for
. verdadeiro
.
.
ELSIF bool_expression2 THEN
opcional
<statement >; declarações a serem executadas
quando bool_expression2 for
. verdadeiro
.
.
ELSE
opcional
<statement >; declarações a serem executadas
quando as expressões forem
. falsas
.
.
END_IF;
Exemplo 1: IF…THEN
Exemplo 2: IF…THEN…ELSE
Exemplo 3: IF…THEN…ELSIF
Exemplo 4: IF…THEN…ELSIF…ELSE
CASE...OF Use CASE para selecionar o que fazer baseado em um valor numérico.
Operandos:
Texto Estruturado
CASE numeric_expression OF
Operando: Tipo: Formato: Insira:
selector1: statement;
selectorN: statement; numeric_ SINT tag tag ou a expressão que avalie para um
Expressão INT Expressão número (expressão numérica)
ELSE DINT
statement; REAL
END_CASE; selector SINT imediato o mesmo tipo que
INT numeric_expression
DINT
REAL
Descrição: A sintaxe é:
CASE numeric_expression OF
selector1 : <statement>; declarações a serem executadas
. quando numeric_expression =
. selector1
.
selector2 : <statement>; declarações a serem executadas
especifica os valores quando numeric_expression =
possíveis do seletor .
selector2
alternativo (caminhos) à .
medida que você precisar .
selector3 : <statement>; declarações a serem executadas
. quando numeric_expression =
selector3
.
.
ELSE
<statement>; declarações a serem executadas
opcional . quando numeric_expression ≠
qulaquer seletor
.
.
END_CASE;
EXEMPLO
FOR…DO Use a malha FOR…DO para fazer algo com um número específico de
vezes antes de fazer algo mais.
Operandos:
Texto Estruturado
FOR count:= initial_value TO
final_value BY increment DO Operando: Tipo: Formato: Descrição:
<statement>; count SINT tag tag para armazenar a posição de
END_FOR; INT contagem quando executar FOR…DO
DINT
initial_ SINT tag deve avaliar em um número
value INT expressão especifica o valor inicial para contagem
DINT imediato
final_ SINT tag especifica o valor final para contagem, o
value INT expressão que determina quando sair da malha
DINT imediato
increment SINT tag (opcional) quantidade para incrementar a
INT expressão contagem cada vez através da malha
DINT imediato
Se não especificar um incremento, a
contagem incrementa pelo 1.
Descrição: A sintaxe é:
não não
declaração 1 declaração 1
declaração 2 declaração 2
declaração 3 declaração 3
declaração 4 declaração 4
… … sim
Sair ?
resto da rotina
não
resto da rotina
A malha FOR…DO executa um número Para parar a malha antes que a contagem alcance o
específico de vezes. último valor, use uma declaração EXIT.
Exemplo 1:
Exemplo 2:
Operandos:
Texto Estruturado
WHILE bool_expression DO
Operando: Tipo: Formato: Insira:
<statement>;
END_WHILE; bool_ BOOL tag tag BOOL ou a expressão que avalie para um
expression Expressão valor BOOL
Descrição: A sintaxe é:
WHILE bool_expression DO
<statement>; declarações para serem executadas
enquanto bool_expression1 é verdadeiro
IF bool_expression2 THEN
EXIT; Se houver condições quando quiser sair da
opcional malha antes, use outras declarações, como
END_IF; uma construção IF...THEN, para a condição
de uma declaração EXIT.
END_WHILE;
Enquanto bool_expression for verdadeira, o Para parar a malha antes das condições serem
controlador executa somente as declarações na malha verdadeiras, use uma declaração EXIT.
WHILE…DO.
Exemplo 1:
Exemplo 2:
REPEAT…UNTIL Use a malha REPEAT…UNTIL para continuar a fazer algo até que as
condições sejam verdadeiras.
Operandos:
Texto Estruturado
REPEAT
Operando: Tipo: Formato: Insira:
<statement>;
UNTIL bool_expression bool_ BOOL tag tag BOOL ou a expressão que avalie para
expression expressão um valor BOOL (expressão BOOL)
END_REPEAT;
Descrição: A sintaxe é:
REPEAT
<statement>; declarações para serem executadas
enquanto bool_expression1 for falso
IF bool_expression2 THEN
EXIT; Se houver condições quando quiser sair da
opcional malha antes, use outras declarações, como
END_IF; a construção IF...THEN, para a condição de
uma declaração EXIT.
UNTIL bool_expression1
END_REPEAT;
resto da rotina
Enquanto bool_expression for falsa, o Para parar a malha antes das condições serem
controlador executa somente as declarações na malha falsas, use uma declaração EXIT.
REPEAT…UNTIL.
Exemplo 1:
Exemplo 2:
/*comment*/
que ocupe mais de uma linha (*start of comment . . . end of
comment*)
Por exemplo:
Formato: Exemplo:
//comment No início de uma linha
//Check conveyor belt direction
IF conveyor_direction THEN...
No final de uma linha
ELSE //If conveyor isn’t moving, set alarm light
light := 1;
END_IF;
(*comment*) Sugar.Inlet[:=]1;(*open the inlet*)
A controle de program/operator
adição 5-5 característica geral B-10
ajuste 12-24 conversão de escala 12-25
alarmes 12-25 conversão em inteiro 15-9
AND 6-21 conversão para BCD 15-6
anexar escrita ASCII 16-22 cópia 7-25
arco co-seno 13-10 cópia de síncrono 7-25
arco seno 13-8 co-seno 13-4
arco tangente 13-12
aritmética de arquivos 7-6 D
atributos dados transacionais 12-16
tipos de dados de conversão A-1 definição do valor do sistema 3-29
valores imediatos A-1 descarga FIFO 8-14
atributos comuns A-1 descarga LIFO 8-26
tipos de dados de conversão A-1 desenergizar saída com retenção 1-9
valores imediatos A-1 deslocamento de bit para a direita 8-5
deslocamento de bit para a esquerda 8-2
B desvio padrão 7-45
BAND 6-33 detecção de diagnóstico 12-9
bias de saída 12-34 diferente de 4-37
BNOT 6-40 DINT Para String 18-7
Boolean OR 6-35 distribuição de bits com arquivo-alvo
BOR 6-35 6-14
break 11-5 distribuição do campo do bit 6-11
busca de string 17-7 divisão 5-14
BXOR 6-38 divisão do módulo 5-18
C E
cálculo 5-2 E Booleano 6-33
caracteres ASCII no buffer 16-8 elementos
carga do seqüenciador 9-10 instrução SIZE 7-50
carga FIFO 8-8 energizar saída 1-6
carga LIFO 8-20 energizar saída com retenção 1-7
CASE C-15 entrada do seqüenciador 9-2
classificação 7-40 escrita ASCII 16-26
Códigos de Erro estrutura COMPARE 12-3, 12-10
ASCII 16-4 estrutura CONTROL 7-7, 7-17, 7-35,
instrução MSG 3-7 7-40, 7-45, 8-2, 8-5, 8-8, 8-14,
Comparação 4-2 8-20, 8-26, 9-2, 9-6, 9-10
comparação de instruções estrutura COUNTER 2-25
seqüência da operação 4-5, 7-23 estrutura de controle 10-14
comparação e busca de arquivo 7-17 estrutura do contador 2-22
comparação entre os bits de arquivo estrutura do temporizador 2-2, 2-9
12-2 estrutura FBD_BIT_FIELD_DISTRIBUTE
Concatenação de String 17-3 6-14
condições de overflow B-5 estrutura FBD_BOOLEAN_AND 6-33
configuração 3-13 estrutura FBD_BOOLEAN_NOT 6-40
instrução MSG 3-13 estrutura FBD_BOOLEAN_OR 6-35
instrução PID 12-23 estrutura FBD_BOOLEAN_XOR 6-38
contagem crescente 2-22 Estrutura FBD_COMPARE 4-8
contagem crescente/decrescente 2-29 estrutura FBD_COMPARE 4-11, 4-15,
contagem decrescente 2-25 4-19, 4-23, 4-38
estrutura FBD_CONVERT 15-6, 15-9
N retorno 10-4
negação 5-24 return 11-6
NOT 6-30
NOT Booleano 6-40 S
saída do seqüenciador 9-6
O salto 10-2
objeto CONTROLLER 3-31 salto para sub-rotina 10-4
objeto CONTROLLERDEVICE 3-32 sem operação 10-23
objeto CST 3-34 seno 13-2
objeto DF1 3-35 seqüência da operação 4-5, 7-23
objeto FAULTLOG 3-38 seqüência de execução B-3
objeto MESSAGE 3-39 seqüência de operação 5-4, 7-16
objeto MODULE 3-41 String Média 17-11
objeto MOTIONGROUP 3-42 String Para DINT 18-3, C-12
objeto PROGRAM 3-43 String Para REAL 18-5
objeto ROUTINE 3-44 sub-rotina 10-4
objeto SERIALPORT 3-44 subtração 5-8
objeto TASK 3-46 swap de byte 6-18
objeto WALLCLOCKTIME 3-46
objetos T
CONTROLLER 3-31 tamanho em elementos 7-50
CONTROLLERDEVICE 3-32 tangente 13-6
CST 3-34 temporizador na desenergização 2-5
DF1 3-35 temporizador na desenergização com
FAULTLOG 3-38 reset 2-16
Instrução GSV/SSV 3-30 temporizador na energização 2-2
MESSAGE 3-39 temporizador na energização com reset
MODULE 3-41 2-13
MOTIONGROUP 3-42 temporizador retentivo com reset 2-19
PROGRAM 3-43 temporizador retentivo ligado 2-9
ROUTINE 3-44 teste ASCII para linha buffer 16-5
SERIALPORT 3-44 texto estruturado
TASK 3-46 CASE C-15
WALLCLOCKTIME 3-46 tipo de dados da string 16-3, 17-2, 18-2
obtenção do valor do sistema 3-29 tipos de dados de combinação A-1
operadores 4-4, 5-3, 7-15, 7-22 tipos de dados de conversão A-1
OR 6-24 truncamento 15-11
Ou exclusivo 6-27
V
P valor absoluto 5-26
preenchimento de arquivo 7-31 valores imediatos A-1
proporcional, integral e derivativa
12-19
X
X elevado a Y 14-6
R
radianos 15-4
raiz quadrada 5-21 Z
REAL Para String 18-9 zeramento 6-17
rearme do controle mestre 10-18 zona morta 12-33
reset 2-33
Caractere Dec Hex Caractere Dec Hex Caractere Dec Hex Caractere Dec Hex
[ctrl-@] NUL 0 $ 00 & 38 $ 26 L 76 $ 4C R 114 $ 72
[ctrl-A] SOH 1 $ 01 ‘ 39 $ 27 M 77 $ 4D S 115 $ 73
[ctrl-B] STX 2 $ 02 ( 40 $ 28 N 78 $ 4E A 116 $ 74
[ctrl-C] ETX 3 $ 03 ) 41 $ 29 O 79 $ 4F U 117 $ 75
[ctrl-D] EOT 4 $ 04 * 42 $ 2A P 80 $ 50 V 118 $ 76
[ctrl-E] ENQ 5 $ 05 + 43 $ 2B Q 81 $ 51 W 119 $ 77
[ctrl-F] ACK 6 $ 06 , 44 $ 2C R 82 $ 52 x 120 $ 78
[ctrl-G] BEL 7 $ 07 - 45 $ 2D S 83 $ 53 Y 121 $ 79
[ctrl-H] BS 8 $ 08 . 46 $ 2E A 84 $ 54 Z 122 $ 7A
[ctrl-I] HT 9 $ 09 / 47 $ 2F U 85 $ 55 { 123 $ 7B
[ctrl-J] LF 10 $l ($0A) 0 48 $ 30 V 86 $ 56 | 124 $ 7C
[ctrl-K] VT 11 $0B 1 49 $ 31 W 87 $ 57 } 125 $ 7D
[ctrl-L] FF 12 $0C 2 50 $ 32 X 88 $ 58 ~ 126 $ 7E
[ctrl-M] CR 13 $r ($0D) 3 51 $ 33 Y 89 $ 59 DEL 127 $ 7F
[ctrl-N] SO 14 $ 0E 4 52 $ 34 Z 90 $ 5A
[ctrl-O] SI 15 $ 0F 5 53 $ 35 [ 91 $ 5B
[ctrl-P] DLE 16 $ 10 6 54 $ 36 \ 92 $ 5C
[ctrl-Q] DC1 17 $ 11 7 55 $ 37 ] 93 $ 5D
[ctrl-R] DC2 18 $ 12 8 56 $ 38 ^ 94 $ 5E
[ctrl-S] DC3 19 $ 13 9 57 $ 39 _ 95 $ 5F
[ctrl-T] DC4 20 $ 14 : 58 $ 3A ‘ 96 $ 60
[ctrl-U] NAK 21 $ 15 ; 59 $ 3B a 97 $ 61
[ctrl-V] SYN 22 $ 16 < 60 $ 3C B 98 $ 62
[ctrl-W] ETB 23 $ 17 = 61 $ 3D c 99 $ 63
[ctrl-X] CAN 24 $ 18 > 62 $ 3E D 100 $ 64
[ctrl-Y] EM 25 $ 19 ? 63 $ 3F e 101 $ 65
[ctrl-Z] SUB 26 $ 1A @ 64 $ 40 F 102 $ 66
ctrl-[ ESC 27 $ 1B A 65 $ 41 g 103 $ 67
[ctrl-\] FS 28 $ 1C B 66 $ 42 H 104 $ 68
ctrl-] GS 29 $ 1D C 67 $ 43 I 105 $ 69
[ctrl-^] RS 30 $ 1E D 68 $ 44 J 106 $ 6A
[ctrl-_] US 31 $ 1F E 69 $ 45 K 107 $ 6B
ESPAÇO 32 $ 20 F 70 $ 46 L 108 $ 6C
! 33 $ 21 g 71 $ 47 M 109 $ 6D
“ 34 $ 22 H 72 $ 48 N 110 $ 6E
# 35 $ 23 I 73 $ 49 O 111 $ 6F
$ 36 $ 24 J 74 $ 4A P 112 $ 70
% 37 $ 25 K 75 $ 4B Q 113 $ 71
Quarta Capa