Você está na página 1de 560

Instruções Gerais

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:

Identifica as informações sobre práticas ou


ATENÇÃO
circunstâncias que podem causar danos pessoais ou
a morte, danos à propriedade ou perdas econômicas.

!
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

ControlNet é uma marca registrada da ControlNet International, Ltda.

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:

Telefone Estados 1.440.646.5800


Unidos/Canadá
Outras Você pode obter o número do telefone em seu
Localidades país através da Internet:
1. Acesse o site http://www.ab.com
2. Clique em Product Support
(http://support.automation.rockwell.com)
3. Em Support Centers, clique em Contact
Information
Internet ⇒ 1. Acesse o site http://www.ab.com
2. Clique em Product Support
(http://support.automation.rockwell.com)
Notas:
Resumo das Alterações

Introdução A versão desse documento contém informações novas e atualizadas.

Informações Atualizadas Este documento contém as seguintes alterações:

• Agora, este documento inclui texto estruturado, além da lógica


ladder e bloco de funções.
• O início de cada capítulo lista as linguagens disponíveis para as
instruções descritas no capítulo.
• A tabela de execução de cada instrução inclui uma condição
postscan.

Este documento contém estas alterações específicas:

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

1 Publicação 1756-RM003F-PT-P - Maio 2002


2 Resumo das Alterações

Notas:

Publicação 1756-RM003F-PT-P - Maio 2002


Localizador de Instrução

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.

Se o localizador listar: A instrução está documentada em:


um número de página este manual
controle de processo Manual de Referência do Conjunto de Instruções dos Inversores e Controle de Processo dos
Controladores Logix5000, publicação 1756-RM006
controle de posicionamento (motion) Logix5000 Controllers Motion Instruction Set Reference Manual, publicação 1756-RM007

Instrução: Local: Linguagens: Instrução: Local: Linguagens:


ABL 16-5 lógica ladder ATAN 13-12 texto estruturado
texto estruturado
ATN 13-12 lógica ladder
ABS 5-26 lógica ladder bloco de funções
texto estruturado
bloco de funções AVE 7-35 lógica ladder

ACB 16-8 lógica ladder AWA 16-22 lógica ladder


texto estruturado texto estruturado

ACL 16-10 lógica ladder AWT 16-26 lógica ladder


texto estruturado texto estruturado

ACOS 13-10 texto estruturado BAND 6-33 texto estruturado


bloco de funções
ACS 13-10 lógica ladder
bloco de funções BNOT 6-40 texto estruturado
bloco de funções
ADD 5-5 lógica ladder
texto estruturado BOR 6-35 texto estruturado
bloco de funções bloco de funções

AFI 10-22 lógica ladder BRK 11-5 lógica ladder

AHL 16-12 lógica ladder BSL 8-2 lógica ladder


texto estruturado BSR 8-5 lógica ladder
ALM controle de texto estruturado BTD 6-11 lógica ladder
processo bloco de funções
BTDT 6-14 texto estruturado
AND 6-21 lógica ladder bloco de funções
texto estruturado
bloco de funções BTR (tipo MSG) 3-2 lógica ladder
texto estruturado
ARD 16-15 lógica ladder
texto estruturado BTW (tipo MSG) 3-2 lógica ladder
texto estruturado
ARL 16-18 lógica ladder
texto estruturado BXOR 6-38 texto estruturado
bloco de funções
ASIN 13-8 texto estruturado
CLR 6-17 lógica ladder
ASN 13-8 lógica ladder texto estruturado
bloco de funções

1 Publicação 1756-RM003F-PT-P - Maio 2002


2 Localizador de Instrução

Instrução: Local: Linguagens: Instrução: Local: Linguagens:


CMP 4-2 lógica ladder ESEL controle de texto estruturado
processo bloco de funções
CONCAT 17-3 lógica ladder
texto estruturado FAL 7-6 lógica ladder
COP 7-25 lógica ladder FBC 12-2 lógica ladder
texto estruturado
FFL 8-8 lógica ladder
COS 13-4 lógica ladder
texto estruturado FFU 8-14 lógica ladder
bloco de funções FGEN controle de texto estruturado
CPS 7-25 lógica ladder processo bloco de funções
texto estruturado FIND 17-7 lógica ladder
CPT 5-2 lógica ladder texto estruturado

CTD 2-25 lógica ladder FLL 7-31 lógica ladder

CTU 2-22 lógica ladder FOR 11-2 lógica ladder

CTUD 2-29 texto estruturado FRD 15-9 lógica ladder


bloco de funções bloco de funções

D2SD controle de texto estruturado FSC 7-17 lógica ladder


processo bloco de funções GEQ 4-10 lógica ladder
D3SD controle de texto estruturado texto estruturado
processo bloco de funções bloco de funções

DDT 12-9 lógica ladder GRT 4-14 lógica ladder


texto estruturado
DEDT controle de texto estruturado bloco de funções
processo bloco de funções
GSV 3-29 lógica ladder
DEG 15-2 lógica ladder texto estruturado
texto estruturado
bloco de funções HLL controle de texto estruturado
processo bloco de funções
DELETE 17-5 lógica ladder
texto estruturado HPF controle de texto estruturado
processo bloco de funções
DERV controle de texto estruturado
processo bloco de funções INSERT 17-9 lógica ladder
texto estruturado
DFF controle de texto estruturado
processo bloco de funções INTG controle de texto estruturado
processo bloco de funções
DIV 5-14 lógica ladder
texto estruturado JKFF controle de texto estruturado
bloco de funções processo bloco de funções

DTOS 18-7 lógica ladder JMP 10-2 lógica ladder


texto estruturado JSR 10-4 lógica ladder
DTR 12-16 lógica ladder texto estruturado
bloco de funções
EOT 10-24 lógica ladder
texto estruturado JXR 10-13 lógica ladder

EQU 4-7 lógica ladder LBL 10-2 lógica ladder


texto estruturado LDL2 controle de texto estruturado
bloco de funções processo bloco de funções

Publicação 1756-RM003F-PT-P - Maio 2002


Localizador de Instrução 3

Instrução: Local: Linguagens: Instrução: Local: Linguagens:


LDLG controle de texto estruturado MAS controle de lógica ladder
processo bloco de funções posicionamento texto estruturado
LEQ 4-18 lógica ladder MASD controle de lógica ladder
texto estruturado posicionamento texto estruturado
bloco de funções
MASR controle de lógica ladder
LES 4-22 lógica ladder posicionamento texto estruturado
texto estruturado
bloco de funções MATC controle de lógica ladder
posicionamento texto estruturado
LFL 8-20 lógica ladder
MAVE controle de texto estruturado
LFU 8-26 lógica ladder processo bloco de funções
LIM 4-26 lógica ladder MAW controle de lógica ladder
bloco de funções posicionamento texto estruturado
LN 14-2 lógica ladder MAXC controle de texto estruturado
texto estruturado processo bloco de funções
bloco de funções
MCCP controle de lógica ladder
LOG 14-4 lógica ladder posicionamento texto estruturado
texto estruturado
bloco de funções MCD controle de lógica ladder
posicionamento texto estruturado
LOWER 18-13 lógica ladder
texto estruturado MCR 10-18 lógica ladder

LPF controle de texto estruturado MDF controle de lógica ladder


processo bloco de funções posicionamento texto estruturado

MAAT controle de lógica ladder MDO controle de lógica ladder


posicionamento texto estruturado posicionamento texto estruturado
(motion) MDOC controle de lógica ladder
MAFR controle de lógica ladder posicionamento texto estruturado
posicionamento texto estruturado MDR controle de lógica ladder
MAG controle de lógica ladder posicionamento texto estruturado
posicionamento texto estruturado MDW controle de lógica ladder
MAH controle de lógica ladder posicionamento texto estruturado
posicionamento texto estruturado MEQ 4-32 lógica ladder
MAHD controle de lógica ladder texto estruturado
posicionamento texto estruturado bloco de funções

MAJ controle de lógica ladder MGS controle de lógica ladder


posicionamento texto estruturado posicionamento texto estruturado

MAM controle de lógica ladder MGSD controle de lógica ladder


posicionamento texto estruturado posicionamento texto estruturado

MAOC controle de lógica ladder MGSP controle de lógica ladder


posicionamento texto estruturado posicionamento texto estruturado

MAPC controle de lógica ladder MGSR controle de lógica ladder


posicionamento texto estruturado posicionamento texto estruturado

MAR controle de lógica ladder MID 17-11 lógica ladder


posicionamento texto estruturado texto estruturado

Publicação 1756-RM003F-PT-P - Maio 2002


4 Localizador de Instrução

Instrução: Local: Linguagens: Instrução: Local: Linguagens:


MINC controle de texto estruturado ONS 1-11 lógica ladder
processo bloco de funções
OR 6-24 lógica ladder
MOD 5-18 lógica ladder texto estruturado
texto estruturado bloco de funções
bloco de funções
OSF 1-16 lógica ladder
MOV 6-3 lógica ladder
OSFI 1-16 texto estruturado
MRAT controle de lógica ladder bloco de funções
posicionamento texto estruturado
OSR 1-14 lógica ladder
MRHD controle de lógica ladder
posicionamento texto estruturado OSRI 1-14 texto estruturado
bloco de funções
MRP controle de lógica ladder
controle de texto estruturado OTE 1-6 lógica ladder
posicionamento OTL 1-7 lógica ladder
MSF controle de lógica ladder OTU 1-9 lógica ladder
controle de texto estruturado
posicionamento PI controle de texto estruturado
processo bloco de funções
MSG 3-2 lógica ladder
texto estruturado PID 12-19 lógica ladder
texto estruturado
MSO controle de lógica ladder
controle de texto estruturado PIDE controle de texto estruturado
posicionamento processo bloco de funções
MSTD controle de texto estruturado PMUL controle de texto estruturado
processo bloco de funções processo bloco de funções
MUL 5-11 lógica ladder POSP controle de texto estruturado
texto estruturado processo bloco de funções
bloco de funções
RAD 15-4 lógica ladder
MUX controle de bloco de funções texto estruturado
processo bloco de funções
MVM 6-5 lógica ladder RES 2-33 lógica ladder
MVMT 6-8 texto estruturado RESD controle de texto estruturado
bloco de funções processo bloco de funções
NEG 5-24 lógica ladder RET 10-4 e 11-6 lógica ladder
texto estruturado texto estruturado
bloco de funções bloco de funções
NEQ 4-37 lógica ladder RLIM controle de texto estruturado
texto estruturado processo bloco de funções
bloco de funções
RMPS controle de texto estruturado
NOP 10-23 lógica ladder processo bloco de funções
NOT 6-30 lógica ladder RTO 2-9 lógica ladder
texto estruturado
RTOR 2-19 texto estruturado
bloco de funções
bloco de funções
NTCH controle de texto estruturado
processo bloco de funções RTOS 18-9 lógica ladder
texto estruturado

Publicação 1756-RM003F-PT-P - Maio 2002


Localizador de Instrução 5

Instrução: Local: Linguagens: Instrução: Local: Linguagens:


SBR 10-4 lógica ladder STOR 18-5 lógica ladder
texto estruturado texto estruturado
bloco de funções
SUB 5-8 lógica ladder
SCL controle de texto estruturado texto estruturado
processo bloco de funções bloco de funções
SCRV controle de texto estruturado SWPB 6-18 lógica ladder
processo bloco de funções texto estruturado
SEL controle de bloco de funções TAN 13-6 lógica ladder
processo texto estruturado
bloco de funções
SETD controle de texto estruturado
processo bloco de funções TND 10-16 lógica ladder
SFP 10-26 lógica ladder TOD 15-6 lógica ladder
texto estruturado bloco de funções
SFR 10-28 lógica ladder TOF 2-5 lógica ladder
texto estruturado
TOFR 2-16 texto estruturado
SIN 13-2 lógica ladder bloco de funções
texto estruturado
bloco de funções TON 2-2 lógica ladder

SIZE 7-50 lógica ladder TONR 2-13 texto estruturado


texto estruturado bloco de funções

SNEG controle de texto estruturado TOT controle de texto estruturado


processo bloco de funções processo bloco de funções

SOC controle de texto estruturado TRN 15-11 lógica ladder


processo bloco de funções bloco de funções

SQI 9-2 lógica ladder TRUNC 15-11 texto estruturado

SQL 9-10 lógica ladder UID 10-20 lógica ladder


texto estruturado
SQO 9-6 lógica ladder
UIE 10-20 lógica ladder
SQR 5-21 lógica ladder texto estruturado
bloco de funções
UPDN controle de texto estruturado
SQRT 5-21 texto estruturado processo bloco de funções
SRT 7-40 lógica ladder UPPER 18-11 lógica ladder
texto estruturado texto estruturado
SRTP controle de texto estruturado XIC 1-2 lógica ladder
processo bloco de funções
XIO 1-4 lógica ladder
SSUM controle de texto estruturado
processo bloco de funções XOR 6-27 lógica ladder
texto estruturado
SSV 3-29 lógica ladder bloco de funções
texto estruturado
XPY 14-6 lógica ladder
STD 7-45 lógica ladder texto estruturado
bloco de funções
STOD 18-3 lógica ladder
texto estruturado

Publicação 1756-RM003F-PT-P - Maio 2002


6 Localizador de Instrução

Notas:

Publicação 1756-RM003F-PT-P - Maio 2002


Prefácio

Introdução Este manual é um dos diversos documentos de instrução baseado em


Logix.

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.

Os programadores novos devem ler todos os detalhes sobre uma


instrução antes de usá-la. Já programadores mais experientes podem
consultar as informações sobre as instruções para verificar os detalhes.

1 Publicação 1756-RM003F-PT-P - Maio 2002


2 Prefácio

Objetivo do Manual Este manual fornece uma descrição de cada instrução neste formato.

Essa seção: Fornece este tipo de informação:


Nome da instrução identifica a instrução
define se a instrução é de entrada ou de saída
Operandos lista todos os operandos da instrução
se disponível em lógica ladder, descreve os operandos

se disponível em texto estruturado, descreve os operandos

se disponível em bloco de funções, descreve os operandos

Os pinos mostrados no bloco de funções padrão são somente pinos básicos. A


tabela de operandos lista todos os pinos possíveis para um bloco de funções.

Estrutura da instrução lista os valores e os bits de status de controle da instrução, se houver


Descrição descreve o uso da instrução
define quaisquer diferenças quando a instrução estiver habilitada e desabilitada, se apropriado
Flags de Status Aritmético: define se a instrução interfere ou não nos flags de status aritmético
consulte o apêndice Atributos Comuns
Condições de Falha: define se a instrução gera falhas graves ou de advertência
se necessário, define o código e o tipo da falha
Execução define a maneira como a instrução opera
EXEMPLO fornece pelo menos um exemplo de programação em cada linguagem de programação disponível
inclui uma descrição explicando cada exemplo

Os ícones a seguir ajudam a identificar as informações específicas da


linguagem:

Este ícone: Indica esta linguagem de


programação:
lógica ladder

texto estruturado

bloco de funções

Publicação 1756-RM003F-PT-P - Maio 2002


Prefácio 3

Informações Comuns para O conjunto de instruções do Logix5000 possui alguns atributos


comuns:
Todas as Instruções
Para obter esta informação: Consulte este apêndice:
atributos comuns apêndice Atributos Comuns define:
• flags de status aritmético:
• tipos de dados
• palavras-chaves
atributos do bloco de funções apêndice Atributos do Bloco de Funções define:
• controle do programa e operador
• modos de temporização

Convenções e Termos Energizar e desenergizar


Relacionados
Este manual usa energizar e desenergizar para definir o status de bits
(booleanos) e valores (não booleanos):

Este termo: Significa:


energizar o bit está energizado em 1 (ON)
um valor está energizado em um número diferente de
zero
desenergizar o bit está desenergizado em 0 (OFF)
todos os bits em um valor são desenergizados em 0

Se um operando ou parâmetro suporta mais do que um tipo de dados,


os tipos de dados em negrito indicam os tipos de dados ótimos. Uma
instrução executa mais rapidamente e requer menos memória se todos
os operandos da instrução usarem o mesmo tipo de dados ótimo,
geralmente, DINT ou REAL.

Condição de linha de lógica ladder

O controlador avalia as instruções de lógica ladder com base na


condição da linha que antecede a instrução (entrada da condição da
linha). Com base na entrada da condição da linha e na instrução, o
controlador define a condição da linha seguindo a instrução (saída da
condição da linha) que, por sua vez, afeta qualquer instrução
subseqüente.

instrução de entrada instrução de saída

condição da condição da
entrada da linha saída da linha

Publicação 1756-RM003F-PT-P - Maio 2002


4 Prefácio

Se a condição da entrada da linha para uma instrução de entrada for


verdadeira, o controlador avalia a instrução e energiza a condição da
saída da linha com base nos resultados da instrução. Se a instrução for
avaliada como verdadeira, a condição da saída da linha é verdadeira;
Se a instrução for avaliada como falsa, a condição da saída da linha é
falsa.

O controlador também efetua o prescan das instruções. O prescan é


um scan especial de todas as rotinas no controlador. O controlador
efetua o scan de todas as rotinas e sub-rotinas principais durante o
prescan, mas ignora os saltos que poderiam pular a execução das
instruções. O controlador executa todas as malhas FOR e chamadas
de sub-rotinas. Se uma sub-rotina for chamada mais do que uma vez,
ela é executada toda vez que é chamada. O controlador usa o prescan
de instruções de lógica ladder para resetar as E/S não retentivas e os
valores internos.

Durante o prescan, os valores de entrada não são atuais e as saídas


não são escritas. As condições a seguir geram a prescan:

• Passagem de modo de Programa para Operação


• Entrada automática no modo de Operação de uma condição de
energização.

A prescan não ocorre para um programa quando:

• O programa se torna determinado enquanto o controlador está


operando.
• O programa não é determinado quando o controlador entra no
modo Run.

Estados do bloco de funções

O controlador avalia as instruções do bloco de funções baseado no


estado de diferentes condições.

Condição Possível: Descrição:


prescan O prescan para as rotinas do bloco de funções é igual a das rotinas de lógica ladder. A
única diferença é que o parâmetro EnableIn para cada instrução do bloco de funções é
desenergizada durante a prescan.
primeiro scan da instrução O primeiro scan da instrução se refere à primeira vez que uma instrução é executada após o
prescan. O controlador usa o primeiro scan da instrução para ler as entradas em corrente e
determinar o estado apropriado em que se deve estar.
primeira execução da A primeira operação da instrução se refere a primeira vez que a instrução executa com uma
instrução nova instância de estrutura de dados. O controlador usa a primeira operação da instrução
para gerar coeficientes e outros armazenamentos de dados que não se alteram para um
bloco de funções após o descarregamento inicial.

Publicação 1756-RM003F-PT-P - Maio 2002


Prefácio 5

Toda instrução do bloco de funções também inclui os parâmetros


EnableIn e EnableOut:

• as instruções do bloco de funções executam normalmente


quando o EnableIn é energizado.

• Quando o EnableIn é desenergizado, a instrução do bloco de


funções executa a lógica da prescan, a lógica da postscan ou
apenas pula a execução do algoritmo normal.

• O EnableOut espelha o EnableIn, porém, se a execução do


bloco de funções detecta uma condição de overflow, o
EnableOut também é desenergizado.

• A execução do bloco de funções reinicia onde parou quando o


EnableIn passa de desenergizado para energizado. Porém
existem algumas instruções de bloco de funções que
especificam funcionalidade especial, como reinicialização,
quando o EnableIn passa de desenergizado para energizado.
Para instruções do bloco de funções com parâmetros baseados
no tempo, sempre quando o modo de temporização estiver no
Oversample, a instrução sempre reiniciará onde parou quando o
EnableIn passa de desenergizado para energizado.

Se o parâmetro EnableIn não estiver conectado, a instrução sempre


executa como normal e o EnableIn se mantém energizado. Se
desenergizar o EnableIn, este se alterará para energizar na próxima
vez que a instrução executar.

IMPORTANTE Ao programar o bloco de funções, limite a amplitude das unidades


de medida para +/-10+/-15 pois os cálculos de ponto flutuante
interno são feitos através de um único ponto flutuante de precisão.
As unidades de medida fora desta amplitude podem resultar em
perda de precisão se os resultados ficarem próximos às limitações
do único ponto flutuante de precisão (+/-10+/-38).

Publicação 1756-RM003F-PT-P - Maio 2002


6 Prefácio

Notas:

Publicação 1756-RM003F-PT-P - Maio 2002


Conteúdo

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

i Publicação 1756-RM003F-PT-P - Maio 2002


ii Conteúdo

Especificar um Módulo de Comunicação ou Endereço do


Módulo:. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3-26
Escolha de uma opção de cache: . . . . . . . . . . . . . . . . . 3-27
Obtenção do Valor do Sistema (GSV) e Definição
do Valor do Sistema (SSV) . . . . . . . . . . . . . . . . . . . . . . . . . 3-29
Objetos GSV/SSV . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3-30
Acesso ao objeto CONTROLLER . . . . . . . . . . . . . . . . . 3-31
Acesso ao objeto CONTROLLERDEVICE . . . . . . . . . . . . 3-32
Acesso ao objeto CST. . . . . . . . . . . . . . . . . . . . . . . . . . 3-34
Acesso ao objeto DF1 . . . . . . . . . . . . . . . . . . . . . . . . . 3-35
Acesso ao objeto FAULTLOG . . . . . . . . . . . . . . . . . . . . 3-38
Acesso ao objeto MESSAGE . . . . . . . . . . . . . . . . . . . . . 3-39
Acesso ao objeto MODULE . . . . . . . . . . . . . . . . . . . . . 3-41
Acesso ao objeto MOTIONGROUP . . . . . . . . . . . . . . . 3-42
Acesso ao objeto PROGRAM . . . . . . . . . . . . . . . . . . . . 3-43
Acesso ao objeto ROUTINE . . . . . . . . . . . . . . . . . . . . . 3-44
Acesso ao objeto SERIALPORT . . . . . . . . . . . . . . . . . . . 3-44
Acesso ao objeto TASK . . . . . . . . . . . . . . . . . . . . . . . . 3-46
Acesso ao objeto WALLCLOCKTIME . . . . . . . . . . . . . . . 3-46
Exemplo de Programação GSV/SSV . . . . . . . . . . . . . . . . . . 3-48
Obtenção de informações de falha . . . . . . . . . . . . . . . . 3-48
Configuração de flags de habilitação e desabilitação . . . 3-49

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

Publicação 1756-RM003F-PT-P - Maio 2002


Conteúdo iii

Multiplicação (MUL) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 5-11


Divisão (DIV) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 5-14
Módulo (MOD) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 5-18
Raiz Quadrada (SQR) . . . . . . . . . . . . . . . . . . . . . . . . . . . . 5-21
Negação (NEG). . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 5-24
Valor Absoluto (ABS) . . . . . . . . . . . . . . . . . . . . . . . . . . . . 5-26

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

Publicação 1756-RM003F-PT-P - Maio 2002


iv Conteúdo

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

Publicação 1756-RM003F-PT-P - Maio 2002


Conteúdo v

Detecção de Diagnóstico (DDT) . . . . . . . . . . . . . . . . . . . . 12-9


Seleção do modo de busca. . . . . . . . . . . . . . . . . . . . . 12-10
Dados Transacionais (DTR) . . . . . . . . . . . . . . . . . . . . . . . 12-16
Inserção de um valor de máscara imediato . . . . . . . . . 12-16
Instrução PID (PID) . . . . . . . . . . . . . . . . . . . . . . . . . . . . 12-19
Configuração de uma Instrução PID. . . . . . . . . . . . . . . . . 12-23
Especificação de ajuste. . . . . . . . . . . . . . . . . . . . . . . . 12-24
Especificação de configuração . . . . . . . . . . . . . . . . . . 12-24
Especificação de alarmes . . . . . . . . . . . . . . . . . . . . . . 12-25
Especificação de conversão de escala . . . . . . . . . . . . . 12-25
Uso das Instruções PID . . . . . . . . . . . . . . . . . . . . . . . . . . 12-26
Disparo anti-reset e transferência sem interrupção
de manual para automático . . . . . . . . . . . . . . . . . . . . 12-28
Temporização da instrução PID . . . . . . . . . . . . . . . . . 12-29
Reinícialização Sem Interrupção . . . . . . . . . . . . . . . . . 12-32
Suavização do derivativo . . . . . . . . . . . . . . . . . . . . . . 12-33
Definição da zona morta . . . . . . . . . . . . . . . . . . . . . . 12-33
Utilização da limitação de saída . . . . . . . . . . . . . . . . . 12-34
Feedforward ou bias de saída. . . . . . . . . . . . . . . . . . . 12-34
Malhas em cascata . . . . . . . . . . . . . . . . . . . . . . . . . . . 12-35
Controle de uma razão. . . . . . . . . . . . . . . . . . . . . . . . 12-35
Teoria PID . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 12-37
processo PID . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 12-37
Processo PID com malhas mestre/escravo. . . . . . . . . . 12-37

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

Publicação 1756-RM003F-PT-P - Maio 2002


vi Conteúdo

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

Publicação 1756-RM003F-PT-P - Maio 2002


Conteúdo vii

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

Publicação 1756-RM003F-PT-P - Maio 2002


viii Conteúdo

Publicação 1756-RM003F-PT-P - Maio 2002


Capítulo 1

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.

Se você quiser: Use esta instrução: Disponível nessas linguagens: Consulte


página:
habilitar as saídas quando um bit estiver XIC lógica ladder 1-2
energizado texto estruturado(1)
habilitar as saídas quando um bit estiver XIO lógica ladder 1-4
desenergizado texto estruturado(1)
energizar um bit OTE lógica ladder 1-6
texto estruturado(1)
energizar um bit (retentivo) OTL lógica ladder 1-7
texto estruturado(1)
desenergizar um bit (retentivo) OTU lógica ladder 1-9
texto estruturado(1)
habilitar as saídas para um scan toda vez que a ONS lógica ladder 1-11
linha tornar-se verdadeira texto estruturado(1)
energizar um bit para um scan toda vez que a OSR lógica ladder 1-14
linha tornar-se verdadeira
energizar um bit para um scan toda vez que a OSF lógica ladder 1-16
linha tornar-se falsa
energizar um bit para um scan toda vez que o OSRI texto estruturado 1-14
bit de entrada for verdadeiro no bloco de bloco de funções
funções
energizar um bit para um scan toda vez que o OSFI texto estruturado 1-16
bit de entrada estiver desenergizado no bloco bloco de funções
de funções
(1) Não há instrução de texto estruturado equivalente. Use outra programação de texto estruturado para obter o mesmo resultado. Veja a descrição para a instrução.

1 Publicação 1756-RM003F-PT-P - Maio 2002


1-2 Instruções Binárias (XIC, XIO, OTE, OTL, OTU, ONS, OSR, OSF, OSRI, OSFI)

Examinar Se Energizado A instrução XIC examina o bit de dados para verificar se ele está
energizado.
(XIC)
Operandos:

Lógica Ladder

Operando: Tipo: Formato: Descrição:


data bit BOOL tag bit a ser testado

Texto Estruturado

O texto estruturado não possui uma instrução XIC, mas é possível


obter os mesmos resultados usando uma construção IF...THEN.

IF data_bit THEN
<statement>;
END_IF;

Consulte ApêndiceC para informações sobre a sintaxe de construções


no texto estruturado.

Descrição: A instrução XIC examina o bit de dados para verificar se ele está
energizado.

Flags de Status Aritmético: não afetados

Condições de Falha: nenhuma

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 = 0 saída da condição da linha


examinar o bit de
dados é definida como falsa

bit de dados = 1

saída da condição da linha é


definida como verdadeira

fim

postscan A saída da condição da linha é definida como falsa.

Publicação 1756-RM003F-PT-P - Maio 2002


Instruções Binárias (XIC, XIO, OTE, OTL, OTU, ONS, OSR, OSF, OSRI, OSFI) 1-3

Exemplo 1: Se limit_switch_1 está energizado, isso habilita a próxima instrução (a


saída da condição da linha é verdadeira).

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;

Publicação 1756-RM003F-PT-P - Maio 2002


1-4 Instruções Binárias (XIC, XIO, OTE, OTL, OTU, ONS, OSR, OSF, OSRI, OSFI)

Examinar Se A instrução XIO examina o bit de dados para verificar se ele está
desenergizado.
Desenergizado (XIO)
Operandos:

Lógica Ladder

Operando: Tipo: Formato: Descrição:


data bit BOOL tag bit a ser testado

Texto Estruturado

O texto estruturado não possui uma instrução XIO, mas é possível


alcançar os mesmos resultados usando uma construção IF...THEN.

IF NOT data_bit THEN


<statement>;
END_IF;

Consulte ApêndiceC para informações sobre a sintaxe de construções


no texto estruturado.

Descrição: A instrução XIO examina o bit de dados para verificar se ele está
desenergizado.

Flags de Status Aritmético: não afetados

Condições de Falha: nenhuma

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 = 0 saída da condição da linha é


examinar o bit de dados
definida como verdadeira

bit de dados = 1

saída da condição da linha é


definida como falsa

fim

postscan A saída da condição da linha é definida como falsa.

Publicação 1756-RM003F-PT-P - Maio 2002


Instruções Binárias (XIC, XIO, OTE, OTL, OTU, ONS, OSR, OSF, OSRI, OSFI) 1-5

Exemplo 1: Se limit_switch_2 está desenergizado, isso habilita a próxima


instrução (a saída da condição da linha é verdadeira).

Lógica Ladder

Texto Estruturado

IF NOT limit_switch_2 THEN


<statement>;
END_IF;

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

IF NOT S:V THEN


<statement>;
END_IF;

Publicação 1756-RM003F-PT-P - Maio 2002


1-6 Instruções Binárias (XIC, XIO, OTE, OTL, OTU, ONS, OSR, OSF, OSRI, OSFI)

Energizar Saída (OTE) A instrução OTE energiza ou desenergiza o bit de dados.

Operandos: Lógica Ladder

Operando: Tipo: Formato: Descrição:


data bit BOOL tag bit a ser energizado ou desenergizado

Texto Estruturado

O texto estruturado não possui uma instrução OTE, mas é possível


obter os mesmos resultados usando um atributo não retentivo.

data_bit [:=] BOOL_expression;


Consulte ApêndiceC para informações sobre a sintaxe de atributos e
expressões no texto estruturado.
Descrição: Quando a instrução OTE está habilitada, o controlador energiza o bit
de dados. Quando a instrução OTE está desabilitada, o controlador
desenergiza o bit de dados.

Flags de Status Aritmético: não afetados


Condições de Falha: nenhuma

Execução:

Condição: Ação da Lógica Ladder:


prescan O bit de dados é desenergizado.
A saída da condição da linha é definida como falsa.
entrada da condição da linha é falsa O bit de dados é desenergizado.
A saída da condição da linha é definida como falsa.
entrada da condição da linha é verdadeira O bit de dados é energizado.
A saída da condição da linha é definida como verdadeira.
postscan O bit de dados é desenergizado.
A saída da condição da linha é definida como falsa.

Exemplo: Quando switch está energizado, a instrução OTE energiza (acende)


light_1. Quando switch é desenergizado, a instrução OTE desenergiza
(apaga) light_1.

Lógica Ladder

Texto Estruturado

light_1 [:=] switch;

Publicação 1756-RM003F-PT-P - Maio 2002


Instruções Binárias (XIC, XIO, OTE, OTL, OTU, ONS, OSR, OSF, OSRI, OSFI) 1-7

Energizar Saída com A instrução OTL energiza (retém) o bit de dados.


Retenção (OTL)
Operandos:

Lógica Ladder

Operando: Tipo: Formato: Descrição:


data bit BOOL tag bit a ser energizado

Texto Estruturado

O texto estruturado não possui uma instrução OTL, mas é possível


obter os mesmos resultados usando uma construção e um atributo
IF...THEN.

IF bool_expression THEN
data_bit := 1;
END_IF;

Consulte ApêndiceC para informações sobre a sintaxe de construções,


atributos e expressões no texto estruturado.

Descrição: Quando habilitada, a instrução OTL energiza o bit de dados. O bit de


dados permanece energizado até ser desenergizado, normalmente,
por uma instrução OTU. Quando desabilitada, a instrução OTL não
altera o status do bit de dados.

Flags de Status Aritmético: não afetados

Condições de Falha: nenhuma

Execução:

Condição: Ação da Lógica Ladder:


prescan O bit de dados não é modificado.
A saída da condição da linha é definida como falsa.
entrada da condição da linha é falsa O bit de dados não é modificado.
A saída da condição da linha é definida como falsa.
entrada da condição da linha é verdadeira O bit de dados é energizado.
A saída da condição da linha é definida como verdadeira.
postscan O bit de dados não é modificado.
A saída da condição da linha é definida como falsa.

Publicação 1756-RM003F-PT-P - Maio 2002


1-8 Instruções Binárias (XIC, XIO, OTE, OTL, OTU, ONS, OSR, OSF, OSRI, OSFI)

Exemplo: Quando habilitada, a instrução OTL energiza light_2. Esse bit


permanece energizado até ser desenergizado, normalmente, por uma
instrução OTU.

Lógica Ladder

Texto Estruturado

IF BOOL_expression THEN
light_2 := 1;
END_IF;

Publicação 1756-RM003F-PT-P - Maio 2002


Instruções Binárias (XIC, XIO, OTE, OTL, OTU, ONS, OSR, OSF, OSRI, OSFI) 1-9

Desenergizar Saída com A instrução OTU desenergiza (não retém) o bit de dados.
Retenção (OTU)
Operandos:

Lógica Ladder

Operando: Tipo: Formato: Descrição:


data bit BOOL tag bit a ser desenergizado

Texto Estruturado

O texto estruturado não possui uma instrução OTU, mas é possível


alcançar os mesmos resultados usando uma construção e um atributo
IF...THEN

IF bool_expression THEN
data_bit := 0;
END_IF;

Consulte ApêndiceC para informações sobre a sintaxe de construções,


atributos e expressões no texto estruturado.

Descrição: Quando habilitada, a instrução OTU desenergiza o bit de dados.


Quando desabilitada, a instrução OTU não altera o status do bit de
dados.

Flags de Status Aritmético: não afetados

Condições de Falha: nenhuma

Execução:

Condição: Ação da Lógica Ladder:


prescan O bit de dados não é modificado.
A saída da condição da linha é definida como falsa.
entrada da condição da linha é falsa O bit de dados não é modificado.
A saída da condição da linha é definida como falsa.
entrada da condição da linha é verdadeira O bit de dados é desenergizado.
A saída da condição da linha é definida como verdadeira.
postscan O bit de dados não é modificado.
A saída da condição da linha é definida como falsa.

Publicação 1756-RM003F-PT-P - Maio 2002


1-10 Instruções Binárias (XIC, XIO, OTE, OTL, OTU, ONS, OSR, OSF, OSRI, OSFI)

Exemplo: Quando habilitada, a instrução OTU desenergiza light_2.

Lógica Ladder

Texto Estruturado

IF bool_expression THEN
light_2 := 0;
END_IF;

Publicação 1756-RM003F-PT-P - Maio 2002


Instruções Binárias (XIC, XIO, OTE, OTL, OTU, ONS, OSR, OSF, OSRI, OSFI) 1-11

Monoestável (ONS) A instrução ONS habilita ou desabilita o resto da linha dependendo


do status do bit de armazenamento.

Operandos:

Lógica Ladder

Operando: Tipo: Formato: Descrição:


storage bit BOOL tag bit de armazenamento interno
armazena a entrada da condição da linha
desde a última vez que a instrução foi
executada

Texto Estruturado

O texto estruturado não possui uma instrução ONS, mas é possível


obter os mesmos resultados usando uma construção IF...THEN.

IF BOOL_expression AND NOT storage_bit THEN


<statement>;
END_IF;
storage_bit := BOOL_expression;

Consulte ApêndiceC para informações sobre a sintaxe de construções,


atributos e expressões no texto estruturado.

Descrição: Quando habilitada e o bit de armazenamento está desenergizado, a


instrução ONS habilita o resto da linha. Quando habilitada ou o bit de
armazenamento está energizado, a instrução ONS desabilita o resto da
linha.

Flags de Status Aritmético: não afetados

Condições de Falha: nenhuma

Publicação 1756-RM003F-PT-P - Maio 2002


1-12 Instruções Binárias (XIC, XIO, OTE, OTL, OTU, ONS, OSR, OSF, OSRI, OSFI)

Execução:

Condição: Ação da Lógica Ladder:


prescan O bit de armazenamento é energizado para evitar um disparo inválido durante o primeiro
scan.
A saída da condição da linha é definida como falsa.
entrada da condição da linha for falsa O bit de armazenamento é desenergizado.
A saída da condição da linha é definida como falsa.
entrada da condição da linha é verdadeira

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

postscan O bit de armazenamento é desenergizado.


A saída da condição da linha é definida como falsa.

Exemplo: Normalmente, uma instrução de entrada precede a instrução ONS,


pois você varre esta instrução quando ela está habilitada e quando é
desabilitada para que opere corretamente. Uma vez que a instrução
ONS é habilitada, a entrada da condição da linha deve desenergizar
ou o bit de armazenamento deve ser desenergizado para que a
instrução ONS seja habilitada novamente.

Publicação 1756-RM003F-PT-P - Maio 2002


Instruções Binárias (XIC, XIO, OTE, OTL, OTU, ONS, OSR, OSF, OSRI, OSFI) 1-13

Em qualquer scan cujo limit_switch_1 é desenergizado ou storage_1 é


energizado, essa linha não tem efeito. Em qualquer scan cujo
limit_switch_1 é energizado e storage_1 é desenergizado, a instrução
ONS energiza storage_1 e a instrução ADD incrementa sum por 1.
Enquanto limit_switch_1 permanecer energizado, sum fica com o
mesmo valor. O limit_switch_1 deve passar de desenergizado para
energizado novamente para que sum seja incrementado novamente.

Lógica Ladder

Texto Estruturado

IF limit_switch_1 AND NOT storage_1 THEN


sum := sum + 1;
END_IF;
storage_1 := limit_switch_1;

Publicação 1756-RM003F-PT-P - Maio 2002


1-14 Instruções Binárias (XIC, XIO, OTE, OTL, OTU, ONS, OSR, OSF, OSRI, OSFI)

Monoestável Sensível à A instrução OSR energiza ou desenergiza o bit de saída, dependendo


do status do bit de armazenamento.
Borda de Subida (OSR)
Essa instrução está disponível no texto estruturado e bloco de funções
como OSRI, consulte a página 1-14.

Operandos:

Lógica Ladder

Operando: Tipo: Formato: Descrição:


storage bit BOOL tag bit de armazenamento interno
armazena a entrada da condição da linha da
última vez que a instrução foi executada
output bit BOOL tag bit a ser energizado

Descrição: Quando habilitada e o bit de armazenamento está desenergizado, a


instrução OSR energiza o bit de saída. Quando habilitada e o bit de
armazenamento está energizado ou quando desabilitada, a instrução
OSR desenergiza o bit de saída

entrada da condição da
linha

bit de armazenamento

bit de saída

instrução é instrução reseta durante a


executada execução do próximo scan

Flags de Status Aritmético: não afetados

Condições de Falha: nenhuma

Publicação 1756-RM003F-PT-P - Maio 2002


Instruções Binárias (XIC, XIO, OTE, OTL, OTU, ONS, OSR, OSF, OSRI, OSFI) 1-15

Execução:

Condição: Ação da Lógica Ladder:


prescan O bit de armazenamento é energizado para evitar um disparo inválido durante o primeiro
scan.
O bit de saída é desenergizado.
A saída da condição da linha é definida como falsa.
entrada da condição da linha é falsa O bit de armazenamento é desenergizado.
O bit de saída não é modificado.
A saída da condição da linha é definida como falsa.
entrada da condição da linha é verdadeira

bit de bit de armazenamento é


armazenamento = 0 energizado
examinar o bit de bit de saída é energizado
armazenamento saída da condição da linha é
definida como verdadeira

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

postscan O bit de armazenamento é desenergizado.


O bit de saída não é modificado.
A saída da condição da linha é definida como falsa.

Exemplo: Cada vez que limit_switch_1 passar de desenergizado para


energizado, a instrução OSR energiza output_bit_1 e a instrução ADD
incrementa sum por 5. Enquanto limit_switch_1 estiver energizado,
sum permanece com o mesmo valor. O limit_switch_1 deve passar de
desenergizado para energizado novamente para sum ser
incrementado novamente. É possível usar output_bit_1 em linhas
múltiplas para disparar outras operações

Publicação 1756-RM003F-PT-P - Maio 2002


1-16 Instruções Binárias (XIC, XIO, OTE, OTL, OTU, ONS, OSR, OSF, OSRI, OSFI)

Monoestável Sensível à A instrução OSF energiza ou desenergiza o bit de saída dependendo


do status do bit de armazenamento.
Borda de Descida (OSF)
Essa instrução está disponível no texto estruturado e bloco de funções
como OSFI, consulte a página 1-16.

Operandos:

Operandos de Lógica Ladder

Operando: Tipo: Formato: Descrição:


storage bit BOOL tag bit de armazenamento interno
armazena a entrada da condição da linha
desde a última vez que a instrução foi
executada
output bit BOOL tag bit a ser energizado

Descrição: Quando desabilitada e o bit de armazenamento está energizado, a


instrução OSF energiza o bit de saída. Quando desabilitada e o bit de
armazenamento está desenergizado ou quando habilitada, a instrução
OSF desenergiza o bit de saída

entrada da
condição da linha

bit de
armazenamento

bit de saída

instrução é instrução reseta durante a


executada execução do próximo scan

Flags de Status Aritmético: não afetados

Condições de Falha: nenhuma

Publicação 1756-RM003F-PT-P - Maio 2002


Instruções Binárias (XIC, XIO, OTE, OTL, OTU, ONS, OSR, OSF, OSRI, OSFI) 1-17

Execução:

Condição: Ação da Lógica Ladder:


prescan O bit de armazenamento é desenergizado para evitar um disparo inválido durante o
primeiro scan.
O bit de saída é desenergizado.
A saída da condição da linha é definida como falsa.
entrada da condição da linha é falsa

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

entrada da condição da linha é verdadeira O bit de armazenamento é energizado.


O bit de saída é desenergizado.
A saída da condição da linha é definida como verdadeira.
postscan Veja se a entrada da condição da linha acima é falsa.

Exemplo: Cada vez que limit_switch_1 passa de energizado para desenergizado,


a instrução OSF energiza output_bit_2 e a instrução ADD incrementa
sum por 5. Enquanto limit_switch_1 estiver desenergizado, sum
permanece com o mesmo valor. O limit_switch_1 deve passar de
energizado para desenergizado novamente para que sum seja
incrementado novamente. É possível usar output_bit_2 em linhas
múltiplas para disparar outras operações

Publicação 1756-RM003F-PT-P - Maio 2002


1-18 Instruções Binárias (XIC, XIO, OTE, OTL, OTU, ONS, OSR, OSF, OSRI, OSFI)

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:

OSRI(OSRI_tag); Texto Estruturado

Operando: Tipo: Formato: Descrição:


OSRI tag FBD_ONESHOT estrutura estrutura OSR

Bloco de Funções

Operando: Tipo: Formato: Descrição:


OSRI tag FBD_ONESHOT estrutura estrutura OSR

Estrutura FBD_ONESHOT

Parâmetro de Entrada: Tipo de Dados: Descrição:


EnableIn BOOL Bloco de Funções
Se desenergizada, a instrução não executa e as saídas não são atualizadas.
Se energizada, a instrução executa.
O valor inicial é energizado
Texto Estruturado:
Sem efeito. A instrução executa.
InputBit BOOL Bit de entrada. Isto equivale à condição da linha para a instrução OSR de Lógica Ladder.
O valor inicial é desenergizado.
Parâmetro de Saída: Tipo de Dados: Descrição:
EnableOut BOOL A instrução produziu um resultado válido.
OutputBit BOOL Bit de saída

Descrição: Quando InputBit está energizado e InputBitn-1 está desenergizado, a


instrução OSRI energiza OutputBit. Quando InputBit é energizado ou
quando InputBit é desenergizado, a instrução OSRI desenergiza
OutputBit.

InputBit

InputBitn-1

OutputBit

instrução é instrução reseta durante a


executada execução do próximo scan 40048

Publicação 1756-RM003F-PT-P - Maio 2002


Instruções Binárias (XIC, XIO, OTE, OTL, OTU, ONS, OSR, OSF, OSRI, OSFI) 1-19

Flags de Status Aritmético: não afetados

Condições de Falha: nenhuma

Execução:

Condição: Ação do Bloco de Funções: Ação do Texto Estruturado:


prescan Nenhuma ação tomada. Nenhuma ação tomada.
primeiro scan da instrução InputBit n-1 é energizado. InputBit n-1 é energizado.
primeira execução da InputBit n-1 é energizado. InputBit n-1 é energizado.
instrução
EnableIn está EnableOut é desenergizado, a instrução não faz nada na
desenergizado e as saídas não são atualizadas.
EnableIn está energizado Em uma transição de InputBit de desenergizado para Em uma transição de InputBit de desenergizado para
energizado, a instrução energiza InputBit n-1. energizado, a instrução energiza InputBit n-1.
A instrução executa. EnableIn está sempre energizado
EnableOut está energizado. A instrução executa.
postscan Nenhuma ação tomada. Nenhuma ação tomada.

Exemplo: Quando limit_switch1 passa de desenergizado para energizado, a


instrução OSRI energiza OutputBit para um scan.

Texto Estruturado

OSRI_01.InputBit := limit_switch1;

OSRI(OSRI_01);

State := OSRI_01.OutputBit;

Bloco de Funções

Publicação 1756-RM003F-PT-P - Maio 2002


1-20 Instruções Binárias (XIC, XIO, OTE, OTL, OTU, ONS, OSR, OSF, OSRI, OSFI)

Monoestável Sensível à A instrução OSFI energiza o OutputBit para um ciclo de execução


quando InputBit alternar de energizado para desenergizado.
Borda de Descida com Esta instrução está disponível em lógica ladder como OSF, consulte a
Entrada (OSFI) página 1-16.

Operandos:

OSFI(OSFI_tag); Texto Estruturado

Operando: Tipo: Formato: Descrição:


OSFI tag FBD_ONESHOT estrutura estrutura OSFI

Bloco de Funções

Operando: Tipo: Formato: Descrição:


tag OSFI FBD_ONESHOT estrutura estrutura OSFI

Estrutura FBD_ONESHOT

Parâmetro de Tipo de Dados: Descrição:


Entrada:
EnableIn BOOL Bloco de Funções
Se desenergizada, a instrução não executa e as saídas não são atualizadas.
Se energizada, a instrução executa.
O valor inicial é energizado
Texto Estruturado:
Sem efeito. A instrução executa.
InputBit BOOL Bit de entrada. Isto equivale à condição da linha para a instrução OSF de lógica ladder.
O valor inicial é desenergizado.
Parâmetro de Saída: Tipo de Dados: Descrição:
EnableOut BOOL A instrução produziu um resultado válido.
OutputBit BOOL bit de saída

Descrição: Quando InputBit está desenergizado e InputBit n-1 está energizado, a


instrução OSFI energiza OutputBit. Quando InputBit n-1 está
desenergizado ou quando InputBit está energizado, a instrução OSFI
desenergiza OutputBit.

InputBit

InputBit n-1

OutputBit

instrução é instrução reseta durante a


executada execução do próximo scan 40047

Publicação 1756-RM003F-PT-P - Maio 2002


Instruções Binárias (XIC, XIO, OTE, OTL, OTU, ONS, OSR, OSF, OSRI, OSFI) 1-21

Flags de Status Aritmético: não afetados

Condições de Falha: nenhuma

Execução:

Condição: Ação do Bloco de Funções: Ação do Texto Estruturado:


prescan Nenhuma ação tomada. Nenhuma ação tomada.
primeiro scan da instrução InputBit n-1 é desenergizado. InputBit n-1 é desenergizado.
primeira execução da InputBit n-1 é desenergizado. InputBit n-1 é desenergizado.
instrução
EnableIn está EnableOut é desenergizado, a instrução não faz nada na
desenergizado e as saídas não são atualizadas.
EnableIn está energizado Em uma transição de InputBit de desenergizado para Em uma transição de InputBit de desenergizado para
energizado, a instrução desenergiza InputBit n-1. energizado, a instrução desenergiza InputBit n-1.
A instrução executa. EnableIn está sempre energizado
EnableOut está energizado. A instrução executa.
postscan Nenhuma ação tomada. Nenhuma ação tomada.

Exemplo: Quando limit_switch1 passa de energizado para desenergizado, a


instrução OSFI energiza OutputBit para um scan.

Texto Estruturado

OSFI_01.InputBit := limit_switch1;

OSFI(OSFI_01);

Output_state := OSFI_01.OutputBit;

Bloco de Funções

Publicação 1756-RM003F-PT-P - Maio 2002


1-22 Instruções Binárias (XIC, XIO, OTE, OTL, OTU, ONS, OSR, OSF, OSRI, OSFI)

Notas:

Publicação 1756-RM003F-PT-P - Maio 2002


Capítulo 2

Instruções de Temporizador e Contador


(TON, TOF, RTO, TONR, TOFR, RTOR, CTU, CTD, CTUD, RES)

Introdução As operações de temporizadores e contadores são baseadas no tempo


ou no número de eventos.

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

A base de tempo para todos os temporizadores é 1 mseg.

1 Publicação 1756-RM003F-PT-P - Maio 2002


2-2 Instruções de Temporizador e Contador (TON, TOF, RTO, TONR, TOFR, RTOR, CTU, CTD, CTUD, RES)

Temporizador na A instrução TON é um temporizador não retentivo que acumula


tempo quando a instrução está habilitada (entrada da condição da
Energização (TON) linha é verdadeira).
A instrução está disponível em texto estruturado e bloco de funções
como TONR, consulte a página 2-13.

Operandos:

Lógica Ladder

Operando: Tipo: Formato: Descrição:


Timer TIMER tag estrutura do temporizador
Preset DINT imediato quanto tempo atrasar (tempo acumulado)
Accum DINT imediato total de mseg que o temporizador contou
normalmente, valor inicial é 0

Estrutura TIMER

Mnemônico: Tipo de Dados: Descrição:


.EN BOOL O bit habilitado indica que a instrução TON está habilitada.
.TT BOOL O bit de temporização indica que uma operação de temporização está em execução
.DN BOOL O bit executado está energizado quando .ACC ≥ .PRE.
.PRE DINT O valor de preset especifica o valor (unidades de 1 mseg) que o valor acumulado deve atingir
antes que a instrução energize o bit .DN.
.ACC DINT O valor acumulado especifica o número de milissegundos que transcorreram desde que a
instrução TON foi habilitada.

Descrição: A instrução TON acumulou o tempo até:

• a instrução TON está desabilitada


• o .ACC ≥ .PRE

A base de tempo é sempre 1 mseg. Por exemplo, para um


temporizador de 2 segundos, digite 2000 para o valor de .PRE.

Quando a instrução TON é desabilitada, o valor de .ACC é removido.

entrada da condição da linha

bit habilitado do temporizador (.EN)

bit de temporização do temporizador (.TT)


atraso
na
bit executado do temporizador (.DN) ENER-
GIZA-
ÇÃO
preset
o temporizador não
alcançou o valor de .PRE
valor acumulado do temporizador (.ACC) 0 16649

Publicação 1756-RM003F-PT-P - Maio 2002


Instruções de Temporizador e Contador (TON, TOF, RTO, TONR, TOFR, RTOR, CTU, CTD, CTUD, RES) 2-3

Flags de Status Aritmético: não afetados

Condições de Falha:

Uma falha grave ocorrerá se: Tipo de falha: Código de falha:


.PRE < 0 4 34
.ACC < 0 4 34

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 é energizado


bit .EN = 0 bit .TT é energizado.
examinar bit .EN
last_time = current_time

bit .EN = 1

bit .TT é energizado. .ACC ≥ .PRE


examinar .ACC
.ACC = .ACC + (current_time - last_time)
last_time = current_time

.ACC < .PRE


.DN é energizado
bit .TT é
desenergizado.
bit .EN é energizado
o valor .ACC não
ultrapassa

sim saída da condição da linha é


definida como verdadeira

.ACC = 2,147,483,647

fim

postscan A saída da condição da linha é definida como falsa.

Publicação 1756-RM003F-PT-P - Maio 2002


2-4 Instruções de Temporizador e Contador (TON, TOF, RTO, TONR, TOFR, RTOR, CTU, CTD, CTUD, RES)

Exemplo: Quando limit_switch_1 é energizado, light_2 acende por 180 mseg


(timer_1 está temporizando). Quando timer_1.acc alcança 180, light_2
apaga e light_3 acende. Light_3 permanece aceso até que a instrução
TON seja desabilitada. Se limit_switch_1 for desenergizado enquanto
timer_1 estiver temporizando, light_2 desliga.

Publicação 1756-RM003F-PT-P - Maio 2002


Instruções de Temporizador e Contador (TON, TOF, RTO, TONR, TOFR, RTOR, CTU, CTD, CTUD, RES) 2-5

Temporizador na A instrução TOF é um temporizador não retentivo que acumula tempo


quando a instrução está habilitada (entrada da condição da linha é
Desenergização (TOF) falsa).

A instrução está disponível em texto estruturado e bloco de funções


como TOFR, consulte a página 2-16.

Operandos:

Lógica Ladder

Operando: Tipo: Formato: Descrição:


Timer TIMER tag estrutura do temporizador
Preset DINT imediato quanto tempo atrasar (tempo acumulado)
Accum DINT imediato total de mseg que o temporizador contou
normalmente, o valor inicial é 0

Estrutura TIMER

Mnemônico: Tipo de Dados: Descrição:


.EN BOOL O bit habilitado indica que a instrução TOF está habilitada.
.TT BOOL O bit de temporização indica que uma operação de temporização está em execução
.DN BOOL O bit executado é desenergizado quando .ACC ≥ .PRE.
.PRE DINT O valor preset especifica o valor (unidades de 1 mseg) que o valor acumulado deve atingir
antes que a instrução energize o bit .DN.
.ACC DINT O valor acumulado especifica o número de milissegundos que transcorreram desde que a
instrução TOF foi habilitada.

Descrição: A instrução TOF acumulou o tempo até:


• a instrução TOF está desabilitada
• a .ACC ≥ .PRE

A base de tempo é sempre 1 mseg. Por exemplo, para um


temporizador de 2 segundos, digite 2000 para o valor de .PRE.

Publicação 1756-RM003F-PT-P - Maio 2002


2-6 Instruções de Temporizador e Contador (TON, TOF, RTO, TONR, TOFR, RTOR, CTU, CTD, CTUD, RES)

Quando a instrução TOF está desativada, o valor de .ACC é


desenergizado.

entrada da condição da linha

bit habilitado do temporizador (.EN)

bit de temporização do temporizador (.TT)

bit executado do temporizador (.DN)


atraso na DESE-
NERGIZAÇÃO

preset

valor acumulado do temporizador (.ACC)


0 16650

o temporizador não atingiu o valor de .PRE

Flags de Status Aritmético: não afetados

Condições de Falha:

Uma falha grave ocorrerá se: Tipo de falha: Código de falha:


.PRE < 0 4 34
.ACC < 0 4 34

Publicação 1756-RM003F-PT-P - Maio 2002


Instruções de Temporizador e Contador (TON, TOF, RTO, TONR, TOFR, RTOR, CTU, CTD, CTUD, RES) 2-7

Execução

Condição: Ação da Lógica Ladder:


prescan Os bits .EN, .TT e .DN estão desenergizados.
O valor de .ACC é ajustado para ser igual ao valor de .PRE.
A saída da condição da linha é definida como falsa.

entrada da condição da linha é falsa

bit .DN = 0
examinar bit .DN

bit .DN = 1

bit .EN é desenergizado.


bit .EN = 1 bit .TT é energizado.
examinar bit .EN
last_time = current_time

bit .EN = 0

.ACC ≥ .PRE
examinar .ACC
bit .TT é energizado.
.ACC = .ACC + (current_time - last_time)
last_time = current_time

.ACC < .PRE


bit .DN é desenergizado.
bit .TT é desenergizado.
bit .EN é desenergizado.

o valor de não
.ACC
ultrapassa

sim saída da condição da linha é


definida como falsa

.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.

Publicação 1756-RM003F-PT-P - Maio 2002


2-8 Instruções de Temporizador e Contador (TON, TOF, RTO, TONR, TOFR, RTOR, CTU, CTD, CTUD, RES)

Exemplo: Quando limit_switch_2 é desenergizado, light_2 acende por 180 mseg


(timer_2 está temporizando). Quando timer_2.acc atinge 180, light_2
apaga e light_3 acende. Light_3 permanece aceso até que a instrução
TOF seja habilitada. Se limit_switch_2 for energizada enquanto
timer_2 estiver temporizando, light_2 apaga.

Publicação 1756-RM003F-PT-P - Maio 2002


Instruções de Temporizador e Contador (TON, TOF, RTO, TONR, TOFR, RTOR, CTU, CTD, CTUD, RES) 2-9

Temporizador Retentivo A instrução RTO é um temporizador retentivo que acumula tempo


quando a instrução é habilitada.
(RTO)
A instrução está disponível em texto estruturado e bloco de funções
como RTOR, consulte a página 2-19.

Operandos:

Lógica Ladder

Operando: Tipo: Formato: Descrição:


Timer TIMER tag estrutura do temporizador
Preset DINT imediato quanto tempo atrasar (tempo acumulado)
Accum DINT imediato número de mseg que o temporizador contou
normalmente, valor inicial é 0

Estrutura TIMER

Mnemônico: Tipo de Dados: Descrição:


.EN BOOL O bit habilitado indica que a instrução RTO está habilitada.
.TT BOOL O bit de temporização indica que uma operação de temporização está em execução
.DN BOOL O bit executado indica .ACC ≥ .PRE.
.PRE DINT O valor de preset especifica o valor (unidades de 1 mseg) que o valor acumulado deve atingir
antes que a instrução energize o bit .DN.
.ACC DINT O valor acumulado especifica o número de milissegundos que transcorreram desde que a
instrução RTO foi habilitada.

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.

Publicação 1756-RM003F-PT-P - Maio 2002


2-10 Instruções de Temporizador e Contador (TON, TOF, RTO, TONR, TOFR, RTOR, CTU, CTD, CTUD, RES)

A base de tempo é sempre 1 mseg. Por exemplo, para um


temporizador de 2 segundos, digite 2000 para o valor de .PRE.

entrada da condição da linha

bit habilitado do temporizador (.EN)

condição da linha que controla a instrução RES

bit de temporização do temporizador (.TT)

bit executado do temporizador (.DN)

preset

16651
valor acumulado do temporizador (.ACC)
0
o temporizador não alcançou o valor .PRE

Flags de Status Aritmético: não afetados

Condições de Falha:

Uma falha grave ocorrerá se: Tipo de falha: Código de falha:


.PRE < 0 4 34
.ACC < 0 4 34

Publicação 1756-RM003F-PT-P - Maio 2002


Instruções de Temporizador e Contador (TON, TOF, RTO, TONR, TOFR, RTOR, CTU, CTD, CTUD, RES) 2-11

Execução

Condição: Ação da Lógica Ladder:


prescan Os bits .EN, .TT e .DN estão desenergizados.
O valor de .ACC não é modificado.
A saída da condição da linha é definida como falsa.
entrada da condição da linha é falsa Os bits .EN e .TT estão desenergizados.
O bit .DN não é modificado.
O valor de .ACC não é modificado.
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 é energizado


bit .EN = 0 bit .TT é energizado.
examinar bit .EN
last_time = current_time

bit .EN = 1

bit .TT é energizado. .ACC ≥ .PRE


verificar .ACC
.ACC = .ACC + (current_time - last_time)
last_time = current_time

.ACC < .PRE


.DN é energizado
bit .TT é
desenergizado.
bit .EN é energizado

o valor de .ACC não


ultrapassa

saída da condição da linha é


sim definida como verdadeira

.ACC = 2,147,483,647

fim

postscan A saída da condição da linha é definida como falsa.

Exemplo: Quando limit_switch_1 é energizado, light_1 acende por 180 mseg


(timer_2 está temporizando). Quando timer_3.acc atinge 180, light_1
apaga e light_2 acende. Light_2 permanece aceso até que timer_3
seja energizado novamente. Se limit_switch_2 for desenergizada
enquanto timer_3 estiver temporizando, light_1 permanece ligado.
Quando limit_switch_2 está energizado, a instrução RES energiza
novamente timer_3 (energiza os bits de status e o valor de .ACC).

Publicação 1756-RM003F-PT-P - Maio 2002


2-12 Instruções de Temporizador e Contador (TON, TOF, RTO, TONR, TOFR, RTOR, CTU, CTD, CTUD, RES)

Publicação 1756-RM003F-PT-P - Maio 2002


Instruções de Temporizador e Contador (TON, TOF, RTO, TONR, TOFR, RTOR, CTU, CTD, CTUD, RES) 2-13

Temporizador na A instrução TONR é um temporizador retentivo que acumula tempos


quando TimerEnable está energizado.
Energização com Reset
(TONR) Esta instrução está disponível na lógica ladder como duas instruções
separadas: TON (consulte a página 2-2) e RES (consulte a
página 2-33).

Operandos:

TONR(TONR_tag);
Texto Estruturado

Variável: Tipo: Formato: Descrição:


TONR tag FBD_TIMER estrutura estrutura TONR

Bloco de Funções

Operando: Tipo: Formato: Descrição:


TONR tag FBD_TIMER estrutura estrutura TONR

Estrutura FBD_TIMER

Parâmetro de Tipo de Dados: Descrição:


Entrada:
EnableIn BOOL Bloco de Funções :
Se desenergizada, a instrução não é executada e as saídas não são atualizadas.
Se energizada, a instrução é executada.
Valor inicial está energizado
Texto Estruturado
Sem efeito. A instrução é executada.
TimerEnable BOOL Se estiver energizado, habilita o temporizador a executar e acumular tempos.
Valor inicial está desenergizado.
PRE DINT Valor de preset de temporizador. Este é o valor em unidades de 1 mseg que ACC deve atingir
antes que a temporização termine. Se for inválido, a instrução energiza o bit apropriado em
Status e o temporizador não executa.
Válido = 0 para o inteiro positivo máximo
Reset BOOL Solicitação para resetar o temporizador novamente. Quando energizado, o temporizador
reseta novamente.
Valor inicial está desenergizado.
Parâmetro de Saída: Tipo de Dados: Descrição:
EnableOut BOOL A instrução produziu um resultado válido.
ACC BOOL Tempo acumulado em milissegundos.
EN BOOL Saída do temporizador habilitada. Indica que a instrução do temporizador está habilitada.
TT BOOL Saída de temporização do temporizador. Quando energizada, uma operação de temporização
está em execução.
DN BOOL Saída de temporização executada. Indica quando o tempo acumulado é maior ou igual ao
valor de preset.

Publicação 1756-RM003F-PT-P - Maio 2002


2-14 Instruções de Temporizador e Contador (TON, TOF, RTO, TONR, TOFR, RTOR, CTU, CTD, CTUD, RES)

Parâmetro de Tipo de Dados: Descrição:


Entrada:
Status DINT Status do bloco de funções .
InstructFault (Status.0) BOOL A instrução detectou um dos seguintes erros de execução: Isto não é um controlador de erro
grave ou de advertência. Verifique os bits de status restantes para determinar o que ocorreu.
PresetInv (Status.1) BOOL O valor de preset é inválido.

Descrição: A instrução TONR acumula tempo até o:

• A instrução TONR está desabilitada


• ACC * PRE
A base de tempo é sempre 1 mseg. Por exemplo, para um
temporizador de 2 segundos, digite 2000 para o valor PRE.

TimerEnable

bit habilitado (EN)

bit de temporização do temporizador (TT)

bit de temporização executado (DN)


atraso
NO
Preset
16649
o temporizador não
valor acumulado do temporizador (ACC) atingiu o valor de PRE
0

Ajusta os parâmetros de entrada Reset para resetar a instrução. Se


TimerEnable for energizado quando Reset estiver energizado, a
instrução TONR começa a temporização novamente assim que Reset
for removido.

Flags de Status Aritmético: não afetados

Condições de Falha: nenhuma

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.

Publicação 1756-RM003F-PT-P - Maio 2002


Instruções de Temporizador e Contador (TON, TOF, RTO, TONR, TOFR, RTOR, CTU, CTD, CTUD, RES) 2-15

Condição: Ação do Bloco de Funções : Ação de Texto Estruturado:


Reset Quando o parâmetro de entrada Reset é energizado, Quando o parâmetro de entrada Reset é energizado,
a instrução desenergizado EN, TT e DN e energiza a instrução desliga EN, TT e DN e define
ACC = zero. ACC = zero.
postscan Nenhuma ação tomada. Nenhuma ação tomada.

Exemplo: A cada scan que limit_switch1 energiza, a instrução TONR incrementa


o tempo decorrido ao valor de ACC, até que ele atinja o valor de PRE.
Quando em ACC ≥ PRE, o parâmetro DN é energizado e timer_state é
energizado.

Texto Estruturado

TONR_01.Preset := 500;
TONR_01.Reset : = reset;
TONR_O1.TimerEnable := limit_switch1;

TONR(TONR_01);

timer_state := TONR_01.DN;

Exemplo de bloco de funções

Publicação 1756-RM003F-PT-P - Maio 2002


2-16 Instruções de Temporizador e Contador (TON, TOF, RTO, TONR, TOFR, RTOR, CTU, CTD, CTUD, RES)

Temporizador na A instrução TOFR é um temporizador retentivo que acumula tempos


quando TimerEnable é desenergizado.
Desenergização com Reset
(TOFR) Esta instrução está disponível na lógica ladder como duas instruções
separadas. TOF (consulte a página 2-5) e RES (consulte a
página 2-33).

Operandos:

TOFR(TOFR_tag); Texto Estruturado

Variável: Tipo: Formato: Descrição:


TOFR tag FBD_TIMER estrutura estrutura TOF

Operandos do bloco de funções

Operando: Tipo: Formato: Descrição:


TOFR tag FBD_TIMER estrutura estrutura TOF

Estrutura FBD_TIMER

Parâmetro de Tipo de Dados: Descrição:


Entrada
EnableIn BOOL Bloco de Funções :
Se desabilitada, a instrução não é executada e as saídas não são atualizadas.
Se energizada, a instrução é executada.
Valor inicial está energizado
Texto Estruturado
Sem efeito. A instrução executa.
TimerEnable BOOL Se estiver desenergizado, habilita o temporizador a executar e acumular tempos.
Valor inicial está desenergizado.
PRE DINT Valor de preset do temporizador. Este é o valor em unidades de 1 mseg que o ACC deve
atingir antes que a temporização termine. Se for inválido, as instruções energizam o bit
apropriado em Status e o temporizador não executa.
Válido = 0 para o inteiro positivo máximo
Reset BOOL Solicitação para resetar o temporizador. Quando energizado, o temporizador reseta.
Valor inicial está desenergizado.
Parâmetro de Saída: Tipo de Dados: Descrição:
EnableOut BOOL A instrução produziu um resultado válido.
ACC BOOL Tempo acumulado em milissegundos.
EN BOOL Saída habilitada de temporizador. Indica que a instrução temporizador está habilitada.
TT BOOL Saída de temporização do temporizador. Quando energizada, uma operação de
temporização está em progresso.
DN BOOL Saída de temporização executada. Indica quando o tempo acumulado é maior ou igual ao
valor de preset.

Publicação 1756-RM003F-PT-P - Maio 2002


Instruções de Temporizador e Contador (TON, TOF, RTO, TONR, TOFR, RTOR, CTU, CTD, CTUD, RES) 2-17

Parâmetro de Tipo de Dados: Descrição:


Entrada
Status DINT Status do bloco de funções .
InstructFault (Status.0) BOOL A instrução detectou um dos seguintes erros de execução: Isto não é um controlador de erro
grave ou de advertência. Verifique os bits de status restantes para determinar o que ocorreu.
PresetInv (Status.1) BOOL O valor de preset é inválido.

Descrição: A instrução TOFR acumula tempo até o:


• A instrução TOFR
está desabilitada
• ACC * PRE
A base de tempo é sempre 1 mseg. Por exemplo, para um
temporizador de 2 segundos, digite 2000 para o valor PRE.
TimerEnable

bit habilitado (EN)

bit de temporização do temporizador (TT)

bit do temporizador executado (DN)


atraso no estado
DESENERGIZADO

Preset

valor do temporizador acumulado (ACC)


0 16650

o temporizador não atingiu o valor de PRE

Define os parâmetros de entrada de Reset para rearmar a instrução. Se


o TimerEnable estiver desenergizado quando o Reset for energizado, a
instrução TOFR não começa temporização novamente quando o Reset
for desenergizado.

Flags de Status Aritmético: não afetados

Condições de Falha: nenhuma

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 ACC é definido em PRE. o valor ACC é definido em PRE.
primeira execução da EN, TT e DN estão desenergizados. EN, TT e DN estão desligados.
instrução o valor ACC é definido em PRE. o valor ACC é definido em PRE.
EnableIn está O EnableOut é desenergizado, a instrução não faz na
desenergizado nada e as saídas não são atualizadas.

Publicação 1756-RM003F-PT-P - Maio 2002


2-18 Instruções de Temporizador e Contador (TON, TOF, RTO, TONR, TOFR, RTOR, CTU, CTD, CTUD, RES)

Condição: Ação do Bloco de Funções : Ação de Texto Estruturado:


EnableIn está energizado Quando o EnableIn muda de desenergizado para EnableIn é sempre energizado
energizado, a instrução inicializa como descrito na A instrução executa.
instrução do primeiro scan.
A instrução executa.
EnableOut está energizado.
Reset Quando o parâmetro de entrada Reset é energizado, Quando o parâmetro de entrada Reset é energizado,
a instrução desliga EN, TT e DN e energiza a instrução desliga EN, TT e DN e energiza
ACC = PRE. Observe que é diferente de utilizar uma ACC = PRE
instrução RES em uma instrução TOF. é energizado
. Observe que é diferente de utilizar uma instrução
RES em uma instrução TOF.
postscan Nenhuma ação tomada. Nenhuma ação tomada.

Exemplo: A cada scan após limit_switch1 ser removido, a instrução TOFR


incrementa o valor de ACC através do tempo transcorrido até que ele
atinja o valor de PRE. Quando o parâmetro ACC ≥ PRE é removido e
timer_state2 é energizado.

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

Publicação 1756-RM003F-PT-P - Maio 2002


Instruções de Temporizador e Contador (TON, TOF, RTO, TONR, TOFR, RTOR, CTU, CTD, CTUD, RES) 2-19

Temporizador Retentivo A instrução RTOR é um temporizador retentivo que acumula tempos


quando TimerEnable é energizado.
com Reset (RTOR)
Esta instrução está disponível na lógica ladder como duas instruções
separadas: RTO (consulte a página 2-9) e RES (consulte a
página 2-33).

Operandos:

RTOR(RTOR_tag); Texto Estruturado

Variável: Tipo: Formato: Descrição:


RTOR tag FBD_TIMER estrutura estrutura RTOR

Operandos do bloco de funções

Operando: Tipo Formato Descrição:


RTOR tag FBD_TIMER estrutura estrutura RTOR

FBD_TIMER Structure

Parâmetro de Tipo de Dados: Descrição:


Entrada
EnableIn BOOL Bloco de Funções
Se desenergizada, a instrução não é executada e as saídas não são atualizadas.
Se energizada, a instrução é executada.
Valor inicial é energizado
Texto Estruturado
Sem efeito. A instrução executa.
TimerEnable BOOL Se estiver energizado, habilita o temporizador executar e acumular tempos.
Valor inicial é desenergizado.
PRE DINT Valor de preset do temporizador. Este é o valor em unidades de 1 mseg que ACC deve atingir
antes que a temporização termine. Se for inválido, a instrução energiza o bit apropriado em
Status e o temporizador não executa.
Válido = 0 para o inteiro positivo máximo
Reset BOOL Solicitação para resetar o temporizador novamente. Quando energizado, o temporizador
reseta.
Parâmetro de Saída: Tipo de Dados: Descrição:
EnableOut BOOL A instrução produziu um resultado válido.
ACC DINT Tempo acumulado em milissegundos. Este valor é retido mesmo enquanto a entrada
TimerEnable estiver desenergizada. Isto torna o comportamento deste bloco diferente do
bloco TONR.
EN BOOL Saída do temporizador habilitada. Indica que a instrução do temporizador está habilitada.
TT BOOL Saída de temporização do temporizador. Quando energizada, uma operação de temporização
está em execução.
DN BOOL Temporização da saída executada. Indica quando o tempo acumulado é maior ou igual ao
valor de preset.

Publicação 1756-RM003F-PT-P - Maio 2002


2-20 Instruções de Temporizador e Contador (TON, TOF, RTO, TONR, TOFR, RTOR, CTU, CTD, CTUD, RES)

Parâmetro de Tipo de Dados: Descrição:


Entrada
Status DINT Status do bloco de funções .
InstructFault (Status.0) BOOL A instrução detectou um dos seguintes erros de execução: Isto não é um controlador de erro
grave ou de advertência. Verifique os bits de status restantes para determinar o que ocorreu.
PresetInv (Status.1) BOOL O valor de preset é inválido.

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.

A base de tempo é sempre 1 mseg. Por exemplo, para um


temporizador de 2 segundos, digite 2000 para o valor PRE.

TimerEnable

bit habilitado (EN)

Reset

bit de temporização do temporizador (TT)

bit de temporização executado (DN)

Preset

16651
valor acumulado do temporizador (ACC)
0
o temporizador não atingiu o valor de .PRE

Define os parâmetros de entrada de Reset para resetar a instrução. Se


TimerEnable for energizado quando o Reset estiver energizado, a
instrução RTOR começa, novamente, a temporização quando o Reset
for desenergizado.

Flags de Status Aritmético: não afetados

Condições de Falha: nenhuma

Publicação 1756-RM003F-PT-P - Maio 2002


Instruções de Temporizador e Contador (TON, TOF, RTO, TONR, TOFR, RTOR, CTU, CTD, CTUD, RES) 2-21

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 não é modificado. O valor de .ACC não é modificado.
primeira execução da EN, TT e DN estão desenergizados. EN, TT e DN estão desenergizados.
instrução O valor de .ACC não é modificado. O valor de .ACC não é modificado.
EnableIn está EnableOut é desenergizado, a instrução não faz nada na
desenergizado e as saídas não são atualizadas.
EnableIn está energizado Bloco de Funções : EnableIn é sempre energizado
Quando o EnableIn muda de desenergizado para A instrução executa.
energizado, a instrução inicializa como descrito na
instrução do primeiro scan.
A instrução executa.
EnableOut está energizado.
Reset Quando o parâmetro de entrada Reset é energizado, Quando o parâmetro de entrada Reset é definido, a
a instrução desenergiza EN, TT e DN e energiza instrução desenergiza EN, TT e DN e energiza
ACC = zero. ACC = zero.
postscan Nenhuma ação tomada. Nenhuma ação tomada.

Exemplo: A cada scan que limit_switch1 energiza, a instrução RTOR incrementa


o tempo transcorrido ao valor de ACC, até que ele atinja o valor de
PRE. Quando em ACC ≥ PRE, o parâmetro DN é energizado e
timer_state3 é energizado.

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

Publicação 1756-RM003F-PT-P - Maio 2002


2-22 Instruções de Temporizador e Contador (TON, TOF, RTO, TONR, TOFR, RTOR, CTU, CTD, CTUD, RES)

Contador Crescente (CTU) A instrução CTU conta ascendente.


A instrução está disponível no texto estruturado e no bloco de
funções como CTUD, consulte a página 2-29.

Operandos:
Lógica Ladder

Operando: Tipo: Formato: Descrição:


Counter COUNTER tag estrutura do contador
Preset DINT imediato até quanto contar
Accum DINT imediato número de vezes que o contador contou
valor inicial é normalmente 0

Estrutura COUNTER

Mnemônico: Tipo de Dados: Descrição:


.CU BOOL O bit habilitado de contagem crescente indica que a instrução CTU está habilitada.
.DN BOOL O bit executado indica .ACC ≥ .PRE.
.OV BOOL O bit de overflow indica que o contador excedeu o limite superior de 2,147,483,647. O contador
então ultrapassa -2,147,483,648 e recomeça a contagem crescente.
.UN BOOL O bit de underflow indica que o contador excedeu o limite inferior de -2,147,483,648. O contador
então ultrapassa 2,147,483,647 e recomeça a contagem decrescente.
.PRE DINT O valor de preset especifica qual o valor que o valor acumulado deve atingir antes que a instrução
energize o bit .DN.
.ACC DINT O valor acumulado especifica o número de transições que a instrução contou.

Descrição: Quando habilitada e o bit .CU está desenergizado, a instrução CTU


incrementa o contador em um. Quando habilitada e o bit .CU está
energizado, ou quando desabilitada, a instrução CTU retém o seu
valor de .ACC.

entrada da condição da linha

bit de contagem crescente habilitado (.CU)

bit de contagem crescente executado (.DN)

Preset

valor acumulado do contador (.ACC)


16636

O valor acumulado continua incrementando mesmo depois que o bit


.DN está energizado. Para remover o valor acumulado, use a instrução
RES que referencia a estrutura do contador ou escreva 0 para o valor
acumulado.

Publicação 1756-RM003F-PT-P - Maio 2002


Instruções de Temporizador e Contador (TON, TOF, RTO, TONR, TOFR, RTOR, CTU, CTD, CTUD, RES) 2-23

Flags de Status Aritmético: não afetados

Condições de Falha: nenhuma

Execução

Condição: Ação da Lógica Ladder:


prescan O bit .CU é energizado para prevenir incrementos inválidos durante o primeiro scan do
programa.
A saída da condição da linha é definida como falsa.
entrada da condição da linha for falsa O bit .CU é desenergizado.
A saída da condição da linha é definida como falsa.

entrada da condição da linha é verdadeira

bit .CU = 0 bit .CU é energizado. sim


examinar o bit .CU .ACC = .ACC + 1 ultrapassa o valor
.ACC

bit .CU = 1 não

bit .UN é
desenergizado. bit .UN = 1
bit .DN é examinar o bit .UN
desenergizado.
bit .OV é desenergizado.

bit .UN = 0

bit .UN = 0 bit .OV = 0


verifique o bit .UN examinar o bit .OV

bit .OV é energizado.


bit .UN = 1 bit .OV = 1

.ACC ≥ .PRE
examinar .ACC

.ACC < .PRE


bit .DN é desenergizado.
bit .DN é energizado.

saída da condição da linha é


definida como verdadeira

fim

postscan A saída da condição da linha é definida como falsa.

Publicação 1756-RM003F-PT-P - Maio 2002


2-24 Instruções de Temporizador e Contador (TON, TOF, RTO, TONR, TOFR, RTOR, CTU, CTD, CTUD, RES)

Exemplo: Depois que limit_switch_1 passar de desabilitado para habilitado por


10 vezes, o bit .DN é energizado e light_1 acende. Se limit_switch_1
continuar a mudar de desabilitado para habilitado, counter_1 continua
a incrementar a sua contagem e o bit .DN permanece energizado.
Quando limit_switch_2 está habilitado, a instrução RES reseta
counter_1 (desenergiza os bits de status e o valor .ACC) e light_1
apaga.

Publicação 1756-RM003F-PT-P - Maio 2002


Instruções de Temporizador e Contador (TON, TOF, RTO, TONR, TOFR, RTOR, CTU, CTD, CTUD, RES) 2-25

Contagem Decrescente A instrução CTD conta de forma decrescente.


(CTD) A instrução está disponível em texto estruturado e bloco de funções
como CTUD, consulte a página 2-29.

Operandos:

Lógica Ladder

Operando: Tipo: Formato: Descrição:


Counter COUNTER tag estrutura do contador
Preset DINT imediato até onde contar
Accum DINT imediato número de vezes que o contador executou a contagem
normalmente o valor inicial é 0

Estrutura COUNTER

Mnemônico: Tipo de Dados: Descrição:


.CD BOOL O bit habilitado de contagem decrescente indica que a instrução CTD está habilitada.
.DN BOOL O bit executado indica que .ACC ≥ .PRE.
.OV BOOL O bit de overflow indica que o contador excedeu o limite superior de 2,147,483,647. O contador
então ultrapassa -2,147,483,648 e recomeça a contagem crescente.
.UN BOOL O bit de underflow indica que o contador excedeu o limite inferior de -2,147,483,648. O contador
então ultrapassa 2,147,483,647 e recomeça a contagem decrescente.
.PRE DINT O valor de preset especifica qual valor que o valor acumulado deve atingir antes que a instrução
energize o bit .DN.
.ACC DINT O valor acumulado especifica o número de transições que a instrução contou.

Descrição: A instrução CTD, geralmente, é usada com a instrução CTU que


referencia a mesma estrutura do contador.

Quando habilitada e o bit .CD está desenergizado, a instrução CTD


decrementa o contador em um. Quando habilitada e o bit .CD está
energizado, ou quando desabilitada, a instrução CTD retém o seu
valor .ACC.

entrada da condição da linha

bit habilitado da contagem decrescente (.CD)

bit executado da contagem decrescente (.DN)

valor acumulado do contador (.ACC)

Preset

16637

Publicação 1756-RM003F-PT-P - Maio 2002


2-26 Instruções de Temporizador e Contador (TON, TOF, RTO, TONR, TOFR, RTOR, CTU, CTD, CTUD, RES)

O valor acumulado continua decrementando mesmo depois que o bit


.DN é energizado. Para remover o valor acumulado, use a instrução
RES que referencia a estrutura do contador ou escreva 0 para o valor
acumulado.

Flags de Status Aritmético: não afetados

Condições de Falha: nenhuma

Execução

Publicação 1756-RM003F-PT-P - Maio 2002


Instruções de Temporizador e Contador (TON, TOF, RTO, TONR, TOFR, RTOR, CTU, CTD, CTUD, RES) 2-27

Condição: Ação da Lógica Ladder:


prescan O bit .CD é energizado para prevenir decrementos inválidos durante o primeiro scan do
programa.
A saída da condição da linha é definida como falsa.
entrada da condição da linha é falsa O bit .CD é desligado.
A saída da condição da linha é definida como falsa.

entrada da condição da linha é verdadeira

.CU bit = 0 o valor de sim


examinar o bit .CD bit .CD é energizado. .ACC
.ACC = .ACC - 1 ultrapassa

.CU bit = 1 não

bit .OV é desenergizado. bit .OV = 1


bit .DN é desenergizado. examinar o bit .OV
bit .UN é desenergizado.

bit .OV = 0

bit .UN = 0 bit .OV = 0


examinar o bit .UN examinar o bit .OV

bit .UN é energizado.


bit .UN = 1 bit .OV = 1

.ACC ≥ .PRE
examinar .ACC

.ACC < .PRE


bit .DN é desenergizado.
bit .DN é energizado.

saída da condição da linha é


definida como verdadeira

fim

postscan A saída da condição da linha é definida como falsa.

Publicação 1756-RM003F-PT-P - Maio 2002


2-28 Instruções de Temporizador e Contador (TON, TOF, RTO, TONR, TOFR, RTOR, CTU, CTD, CTUD, RES)

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.

Publicação 1756-RM003F-PT-P - Maio 2002


Instruções de Temporizador e Contador (TON, TOF, RTO, TONR, TOFR, RTOR, CTU, CTD, CTUD, RES) 2-29

Contagem A instrução CTUD conta de forma crescente de um em um quando as


transições CUEnable passa de desenergizado para energizado. A
Crescente/Decrescente instrução CTUD conta de forma decrescente de um em um quando
(CTUD) CDEnable muda de desenergizado para energizado.

Esta instrução está disponível na lógica ladder como três instruções


separadas. CTU (consulte a página 2-22), CTD (consulte a
página 2-25) e RES (consulte a página 2-33).

Operandos:

CTUD(CTUD_tag); Texto Estruturado

Variável: Tipo: Formato: Descrição:


CTUD tag FBD_COUNTER estrutura estrutura CTUD

Bloco de Funções

Operando: Tipo: Formato: Descrição:


CTUD tag FBD_COUNTER estrutura estrutura CTUD

Estrutura FBD_COUNTER

Parâmetro Tipo de Dados: Descrição:


de Entrada:
EnableIn BOOL Bloco de Funções :
Se desenergizado, a instrução não é executada e as saídas não são atualizadas.
Se energizado, a instrução é executada.
Valor inicial está energizado
Texto Estruturado
Sem efeito. A instrução executa.
CUEnable BOOL Habilita contagem crescente. Quando a entrada passa de desenergizado para energizado, o acumulador
conta de forma crescente de um em um.
Valor inicial está desenergizado.
CDEnable BOOL Habilita contagem decrescente. Quando a entrada passa de desenergizado para energizado, o
acumulador conta de forma decrescente de um em um.
Valor inicial está desenergizado.
PRE DINT Valor de preset do contador. Este é o valor que o valor acumulado deve atingir antes que DN seja
energizado.
Válido = qualquer inteiro
Valor inicial é 0.
Reset BOOL Solicitação para resetar o temporizador. Quando energizado, o temporizador reseta novamente.
Valor inicial está desenergizado.

Publicação 1756-RM003F-PT-P - Maio 2002


2-30 Instruções de Temporizador e Contador (TON, TOF, RTO, TONR, TOFR, RTOR, CTU, CTD, CTUD, RES)

Parâmetro de Saída: Tipo de Dados: Descrição:


EnableOut BOOL A instrução produziu um resultado válido.
ACC DINT Valor acumulado.
CU BOOL Contagem crescente habilitada.
CD BOOL Contagem decrescente habilitada.
DN BOOL Contagem executada. Define quando o valor acumulado é maior ou igual ao valor de preset.
OV BOOL Overflow do contador. Indica que o contador excedeu o limite superior de 2,147,483,647.
O contador então ultrapassa −2,147,483,648 e começa a contagem decrescente novamente.
UN BOOL Underflow do contador. Indica que o contador excedeu o limite inferior de −2,147,483,648.
O contador então ultrapassa 2,147,483,647 e recomeça a contagem decrescente.

Descrição: Quando habilitadas e a instrução CUEnable está energizada, as


instruções CTUD incrementam o contador em um. Quando habilitada
e a instrução CDEnable está energizada, a instrução CTUD
decrementa o contador em um.

Ambos os parâmetros de entrada CUEnable e CDEnable, podem ser


comutados durante o mesmo scan. A instrução executa a contagem
crescente antes da contagem decrescente.

Contagem crescente

CUEnable

bit de contagem crescente habilitado (CU)

bit de contagem crescente executado (DN)

preset

valor acumulado do contador (ACC)


16636

Publicação 1756-RM003F-PT-P - Maio 2002


Instruções de Temporizador e Contador (TON, TOF, RTO, TONR, TOFR, RTOR, CTU, CTD, CTUD, RES) 2-31

Contagem decrescente

CDEnable

bit de contagem decrescente habilitado (CD)

bit de contagem decrescente executado (DN)

valor acumulado do contador (ACC)

preset

16637

Quando desabilitada, a instrução CTUD retém o seu valor acumulado.


Define o parâmetro de entrada Reset da estrutura FBD_COUNTER
para resetar a instrução.

Flags de Status Aritmético: não afetados

Condições de Falha: nenhuma

Execução

Condição: Ação do Bloco de Funções : Ação de Texto Estruturado:


prescan Não é necessária a inicialização. Não é necessária a inicialização.
primeiro scan da instrução CUEnablen-1 e CDEnablen-1 estão energizados. CUEnablen-1 e CDEnablen-1 estão energizados.
primeira execução da CUEnablen-1 e CDEnablen-1 estão energizados. CUEnablen-1 e CDEnablen-1 estão energizados.
instrução
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 a instrução energiza CUEnablen-1 e CDEnablen-1. a instrução energiza CUEnablen-1 e CDEnablen-1.
De transição de energizado para energizado do EnableIn é sempre energizado
EnableIn: A instrução executa.
• A instrução executa.
• EnableOut está energizado.
Reset Quando energizada, a instrução desliga CUEnablen-1, Quando energizada, a instrução desliga CUEnablen-1,
CDEnablen-1, CU, CD, DN, OV e UN e energiza CDEnablen-1, CU, CD, DN, OV e UN e energiza
ACC = zero. ACC = zero.
postscan Nenhuma ação tomada. Nenhuma ação tomada.

Publicação 1756-RM003F-PT-P - Maio 2002


2-32 Instruções de Temporizador e Contador (TON, TOF, RTO, TONR, TOFR, RTOR, CTU, CTD, CTUD, RES)

Exemplo: Quando limit_switch1 passa de desenergizado para energizado,


CUEnable é definido como um scan e a instrução CTUD incrementa o
valor ACC em 1. Quando em ACC ≥ PRE, o parâmetro DN é
energizado, o que habilita a instrução bloco de funções CTUD.

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

Publicação 1756-RM003F-PT-P - Maio 2002


Instruções de Temporizador e Contador (TON, TOF, RTO, TONR, TOFR, RTOR, CTU, CTD, CTUD, RES) 2-33

Reset (RES) A instrução RES reseta uma estrutura TIMER, COUNTER ou CONTROL.

Operandos:

Lógica Ladder

Operando: Tipo: Formato: Descrição:


estrutura TIMER tag estrutura para reset
CONTROL
COUNTER

Descrição: Quando habilitada, a instrução RES desenergiza estes elementos:

Quando estiver usando a instrução


RES para um: A instrução desliga:
TIMER valor de .ACC
bits de controle de status
COUNTER valor de .ACC
bits de controle de status
CONTROL valor .POS
bits de controle de status

Desde que a instrução RES remova o valor de .ACC ,


ATENÇÃO
desenergize os bits .DN e .TT bit, não use a instrução
RES para resetar o temporizador TOF.

!
Flags de Status Aritmético: não afetados

Condições de Falha: nenhuma

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 A instrução RES rearma a estrutura especificada.
A saída da condição da linha está definida como verdadeira.
postscan A saída da condição da linha é definida como falsa.

Publicação 1756-RM003F-PT-P - Maio 2002


2-34 Instruções de Temporizador e Contador (TON, TOF, RTO, TONR, TOFR, RTOR, CTU, CTD, CTUD, RES)

Exemplos:

Exemplo: Descrição:
Quando habilitado, reseta timer_3.

Quando habilitado, reseta counter_1.

Quando habilitado, reseta control_1.

Publicação 1756-RM003F-PT-P - Maio 2002


Capítulo 3

Instruções de Entrada/Saída
(MSG, GSV, SSV)

Introdução As instruções de entrada/saída lêem ou escrevem dados a partir do


controlador ou para o controlador, ou lêem um bloco de dados a
partir de ou para um outro módulo, em uma outra rede.

Se você quiser: Use esta instrução: Disponível nestas linguagens: Consulte a


página:
enviar dados de/para outro módulo MSG lógica ladder 3-2
texto estruturado
obter informações de status do controlador GSV lógica ladder 3-29
texto estruturado
definir informações de status do controlador SSV lógica ladder 3-29
texto estruturado

1 Publicação 1756-RM003F-PT-P - Maio 2002


3-2 Instruções de Entrada/Saída (MSG, GSV, SSV)

Mensagem (MSG) A instrução MSG realiza a leitura ou escreve de forma assíncrona em


um bloco de dados para outro módulo em uma rede.

Operandos:

Lógica Ladder

Operando: Tipo: Formato: Descrição:


Controle de MESSAGE tag estrutura da mensagem
mensagem

Texto Estruturado
MSG(MessageControl);
Os operandos são os mesmos, como aqueles da instrução MSG da
lógica ladder.

Estrutura MESSAGE

Mnemônico: Tipo de Descrição:


Dados:
.FLAGS INT O membro .FLAGS fornece acesso aos membros de status (bits) em uma palavra de 16 bits.
Este bit: Corresponde a este membro:
2 .EW
4 .ER
5 .DN
6 .ST
7 .EN
8 .TO
9 .EN_CC
Importante: O reset de qualquer bit de status da MSG enquanto ela estiver habilitada pode
interromper as comunicações.
.ERR INT Se o bit .ER for energizado, a palavra de código de erro identifica os códigos de erro para a instrução
MSG.
.EXERR INT A palavra de código de erro estendido especifica as informações de código de erro adicionais para
alguns códigos de erro.
.REQ_LEN INT O comprimento requisitado especifica quantas palavras a instrução de mensagem tentará transferir.
.DN_LEN INT O comprimento executado identifica quantas palavras realmente foram transferidas.
.EW BOOL O bit de espera habilitado está energizado quando o controlador detecta a entrada de um pedido de
mensagem na fila. O controlador reseta o bit .EW quando o bit .ST estiver energizado.
.ER BOOL O bit de erro é energizado quando o controlador detecta uma falha na transferência. O bit .ER é
resetado na próxima vez que a entrada da condição da linha passar de falsa para verdadeira.
.DN BOOL O bit executado é energizado quando o último pacote de mensagens for transferido com sucesso. O
bit .DN é resetado na próxima vez que a entrada da condição da linha passar de falsa para verdadeira.
.ST BOOL O bit de partida é energizado quando o controlador começar a executar a instrução MSG. O bit .ST é
resetado quando o bit .DN ou o bit .ER for energizado.

Publicação 1756-RM003F-PT-P - Maio 2002


Instruções de Entrada/Saída (MSG, GSV, SSV) 3-3

Mnemônico: Tipo de Descrição:


Dados:
.EN BOOL O bit habilitado é energizado quando a entrada da condição da linha se tornar verdadeira e
permanecer energizada até o bit .DN ou .ER ser energizado e a entrada da condição da linha se tornar
falsa. Se a entrada da condição da linha se tornar falsa, mas os bits .DN e .ER forem desenergizados,
o bit .EN permanecerá energizado.
.TO BOOL Se você energizar o bit .TO manualmente, o controlador interrompe o processamento da mensagem e
energiza o bit .ER.
.EN_CC BOOL O bit habilitado de cache determina como controlar a conexão MSG. Consulte Escolha de uma opção
de cache: na página 3-27 As conexões para as instruções MSG que saem da porta serial não estão em
memória cache, mesmo que o bit .EN_CC esteja energizado.
.ERR_SRC SINT Usado pelo software RSLogix 5000 para apresentar o caminho de erro na caixa de seleção Message
Configuration
.DestinationLink INT Para mudar o Link Destination de um DH+ ou CIP com a mensagem Source ID, ajuste o membro para o
valor solicitado.
.DestinationNode INT Para mudar o Nó de Destino de um DH+ ou CIP com a mensagem Source ID, ajuste o membro para o
valor solicitado.
.SourceLink INT Para mudar o Link Source de um DH+ ou CIP com a mensagem Source ID, ajuste o membro para o
valor solicitado.
.Class INT Para mudar o parâmetro Class de uma mensagem CIP Generic, ajuste o membro para o valor
solicitado.
.Attribute INT Para mudar o parâmetro Attribute de uma mensagem CIP Generic, ajuste o membro para o valor
solicitado.
.Instance DINT Para mudar o parâmetro Instance de uma mensagem CIP Generic, ajuste o membro para o valor
solicitado.
.LocalIndex DINT Caso use um asterisco [*] para designar o número do elemento do array local, o LocalIndex fornece o
número do elemento. Para alterar o número do elemento, ajuste o membro para o valor solicitado.
Se a mensagem: Logo, o array local:
lê os dados o Elemento Destino
escreve os dados O Elemento Fonte
.Channel SINT Para enviar a mensagem de um outro canal diferente do módulo 1756-DHRIO, ajuste este membro
para o valor solicitado. Use o caracter ASCII A ou B.
.Rack SINT Para alterar o número do rack para uma mensagem de block-transfer, ajuste este membro para o
número do rack requisitado (octal).
.Group SINT Para alterar o número do grupo para uma mensagem de block-transfer, ajuste este membro para o
número de grupo requisitado (octal).
.Slot SINT Para alterar o número do slot para uma mensagem de block-transfer, ajuste este membro para o
número do slot requisitado (octal).
Se a mensagem Especifique o número do slot em:
passar direto pela
rede:
remote I/O octal
ControlNet decimal (0-15)
.Path STRING Para enviar a mensagem para um controlador diferente, ajuste este membro para um novo caminho.
• Insira o caminho como valores decimais.
• Omita as vírgulas [,]
Por exemplo, para um caminho de 1, 0, 2, 42, 1, 3, insira $01$00$02$2A$01$03.
Para navegar para um dispositivo e criar automaticamente uma parte ou toda uma nova string, clique
com o botão direito do mouse sobre o tag da string e selecione Go to Message Path Editor.

Publicação 1756-RM003F-PT-P - Maio 2002


3-4 Instruções de Entrada/Saída (MSG, GSV, SSV)

Mnemônico: Tipo de Descrição:


Dados:
.RemoteIndex DINT Caso use um asterisco [*] para designar o número do elemento do array local, o LocalIndex fornece o
número do elemento. Para alterar o número do elemento, ajuste o membro para o valor solicitado.
Se a mensagem: Logo, o array remoto é:
lê os dados O elemento Source
escreve os dados O elemento Destination
.RemoteElement STRING Para especificar um tag ou endereço diferente no controlador para o qual a mensagem é enviada,
ajuste este membro para o valor requisitado. Insira o tag ou endereço como caracteres ASCII.
Se a mensagem: Logo, o array remoto é:
lê os dados O elemento Source
escreve os dados O elemento Destination
.UnconnnectedTimeout DINT O timeout para mensagens desconectadas. O valor padrão é 30 segundos.
.ConnectionRate DINT O ConnectionRate vezes o TimeoutMultiplier produz o timeout para mensagens conectadas.
• O ConnectionRate padrão é 7,5 segundos.
.TimeoutMultiplier SINT • O TimeoutMultiplier padrão é 0 (que equivale a um fator de multiplicação por 4).
• O timeout padrão para as mensagens conectadas é 30 segundos (7,5 segundos x 4 = 30
segundos).
• Para alterar o timeout, altere o ConnectionRate e deixe o TimeoutMultiplier no valor padrão.

O controlador processa os bits .ST, .EW, .DN e .ER de uma


ATENÇÃO
maneira assíncrona a do scan. Para verificar estes bits em
lógica ladder, copie as palavras .FLAGS para um tag INT e

! verifique os bits a partir deste ponto. Caso contrário,


problemas de temporização podem invalidar a sua aplicação
com possíveis danos ao equipamento e ferimentos pessoais.

Descrição: A instrução MSG transfere os elementos dos dados.

Esta é uma instrução transicional:

• Na lógica ladder, comute a entrada da condição da linha de


desenergizada para energizada toda vez que a instrução tiver
que ser executada.
• Em texto estruturado, condicione a instrução de forma que só
seja executada em uma transição. Consulte o Apêndice C

Publicação 1756-RM003F-PT-P - Maio 2002


Instruções de Entrada/Saída (MSG, GSV, SSV) 3-5

O tamanho de cada elemento depende dos tipos de dados


especificados e do tipo de comando de mensagem usado.

conexão com .EN_CC = 1

entrada da condição da linha

bit .EN

bit .EW

conexão com .EN_CC = 0

bit .ST

bit .DN ou .ER

41382

1 2 3 4 5 6 7

Onde: Descrição: Onde: Descrição:


1 entrada da condição da linha é verdadeira 5 a mensagem é enviada
.EN está energizado .ST está energizado
.EW está energizado .EW é desenergizado.
a conexão está aberta*
2 a mensagem é enviada 6 a mensagem é executada ou está errada
.ST está energizado a entrada da condição da linha continua verdadeira
.EW está desenergizado. .DN ou .ER está energizado
.ST é desenergizado.
a conexão é fechada (se .EN_CC = 0)
3 a mensagem é executada ou está errada 7 a entrada da condição da linha se torna falsa e .DN
entrada da condição da linha é falsa ou .ER é energizado
.DN ou .ER está energizado .EN é desenergizado.
.ST é desenergizado.
a conexão é fechada (se .EN_CC = 0)
.EN está energizado(a entrada da condição da linha
é falsa)
4 entrada da condição da linha é verdadeira
.DN ou .ER foi energizado anteriormente
.EN está energizado
.EW está energizado
a conexão está aberta*
.DN ou .ER está desenergizado

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.

Publicação 1756-RM003F-PT-P - Maio 2002


3-6 Instruções de Entrada/Saída (MSG, GSV, SSV)

Condição: Ação da Lógica Ladder: Ação de Texto Estruturado:

entrada da condição da linha é falsa


(não se aplica a texto estruturado) bit .EN = 1
examinar bit .EN
bit .EN = 0

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

bit .ER = 1 bit .ER = 0 sim não


examinar bit .ER comando de caminho válido do
block-transfer módulo

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

entrada da condição da A instrução executa. na


linha é verdadeira A saída da condição da linha é definida como
verdadeira.

Condição: Ação da Lógica Ladder: Ação de Texto Estruturado:


EnableIn está energizado na EnableIn é sempre energizado
A instrução executa.

Publicação 1756-RM003F-PT-P - Maio 2002


Instruções de Entrada/Saída (MSG, GSV, SSV) 3-7

Condição: Ação da Lógica Ladder: Ação de Texto Estruturado:

execução da instrução
bit .EN = 1 bit .EN = 0
examinar bit .EN

bit .EW = 1 bit .EW = 1


examinar o bit examinar o bit
.EW .EW

bit .EW = 0 bit .EW = 0

bit .ST = 1 bit .ST = 1


examinar o bit .ST examinar o bit .ST

bit .ST = 0 bit .ST = 0

bits .EW, .ST, .TO, .DN e .ER são


bit .DN = 1 desenergizados
examinar bit .DN bit .EN é energizado

bit .DN = 0 bit .EN é energizado

bit .ER = 1 bit .ER = 0 sim não


examinar bit .ER comando de caminho válido do
block-transfer módulo

não sim

sim conexão do não


módulo em
operação
bits .EW, .ST, .TO, .DN e .ER são
desenergizados
bit .EN é energizado
executar pedido de mensagem
bit .EW está energizado
bit .ER é energizado

saída da condição da linha é


definida como falsa

fim

postscan A saída da condição da linha é definida como falsa. Nenhuma ação tomada.

Flags de Status Aritmético: não afetados

Condições de Falha: nenhuma

Códigos de Erro MSG Os códigos de erro dependem do tipo de instrução MSG.

Publicação 1756-RM003F-PT-P - Maio 2002


3-8 Instruções de Entrada/Saída (MSG, GSV, SSV)

Códigos de Erro

O software RSLogix 5000 nem sempre exibe a descrição completa.

Código de erro (hex): Descrição: Display do software:


0001 Falha de conexão (consulte os códigos de erro estendidos) igual à descrição
0002 Recurso insuficiente igual à descrição
0003 Valor inválido igual à descrição
0004 Erro de sintaxe IOI (consulte os códigos de erro estendidos) igual à descrição
0005 Destino desconhecido, classe não suportada, instância indefinida ou igual à descrição
elemento de estrutura indefinida (consulte os códigos de erro
estendidos)
0006 Espaço insuficiente no pacote igual à descrição
0007 Perda de conexão igual à descrição
0008 Serviço não suportado igual à descrição
0009 Erro no segmento de dados ou valor de atributo inválido igual à descrição
000A Erro na lista de atributo igual à descrição
000B Estado já existe igual à descrição
000C Conflito no modelo do objeto igual à descrição
000D Objeto já existe igual à descrição
000E Atributo não configurável igual à descrição
000F Permissão negada igual à descrição
0010 Conflito com o estado do dispositivo igual à descrição
0011 A resposta não será adequada igual à descrição
0012 Fragmento primitivo igual à descrição
0013 Dados de comando insuficientes igual à descrição
0014 Atributo não suportado igual à descrição
0015 Excesso de dados igual à descrição
001A Pedido de ponte muito grande igual à descrição
001B Resposta da ponte muito grande igual à descrição
001C Escassez de lista de atributos igual à descrição
001D Lista de atributos inválidos igual à descrição
001E Erro no serviço incorporado igual à descrição
001F Falha relacionada à conexão (consulte os códigos de erro igual à descrição
estendidos)
0022 Resposta recebida inválida igual à descrição
0025 Erro de segmento principal igual à descrição
0026 Erro de IOI inválido igual à descrição
0027 Atributo inesperado na lista igual à descrição
0028 Erro na DeviceNet - Identificação de membro inválido igual à descrição
0029 Erro na DeviceNet - membro não configurável igual à descrição
00D1 Módulo não está no estado de operação erro desconhecido

Publicação 1756-RM003F-PT-P - Maio 2002


Instruções de Entrada/Saída (MSG, GSV, SSV) 3-9

Código de erro (hex): Descrição: Display do software:


00FB Porta de mensagem não suportada erro desconhecido
00FC Tipo de dados não suportados pela mensagem erro desconhecido
00FD Mensagem não inicializada erro desconhecido
00FE timeout de mensagem erro desconhecido
00FF Erro geral (consulte os códigos de erro estendidos) erro desconhecido

Códigos de Erro Estendido

O software RSLogix 5000 não exibe texto para os códigos de erro


estendidos.

Estes são os códigos de erro estendidos para o código de erro 0001.

Código Descrição: Código Descrição:


de erro de erro
estendid estendid
o (hex): o (hex):
0100 Conexão em uso 011A Aplicação fora das conexões
0103 Transporte não suportado 0203 Timeout da conexão
0106 Conflito de Dispositivo de Armazenamento de 0204 Timeout de mensagem não conectada
Configuração
0205 Erro de parâmetro enviado não conectado
0107 Conexão não encontrada
0206 Mensagem muito grande
0108 Tipo de conexão inválida
0301 Sem espaço de memória no buffer
0109 Tamanho de conexão inválida
0302 Largura de faixa não disponível
0110 Módulo não configurado
0303 Não há disponibilidade de screeners
0111 EPR não suportado
0305 Correspondência de assinatura
0114 Módulo errado
0311 Porta não disponível
0115 Tipo de dispositivo errado
0312 Endereço de rede não disponível
0116 Revisão errada
0315 Tipo de segmento inválido
0118 Formato de configuração inválido
0317 Conexão não programada

Estes são os códigos de erro estendidos para o código de erro 001F.

Código de erro estendido (hex): Descrição:


0203 Timeout da conexão

Estes são os códigos de erro estendidos para os códigos de erro 0004


e 0005.

Código de erro estendido (hex): Descrição


0000 status estendido fora da memória
0001 status estendido fora dos exemplos

Publicação 1756-RM003F-PT-P - Maio 2002


3-10 Instruções de Entrada/Saída (MSG, GSV, SSV)

Estes são os códigos de erro estendidos para o código de erro 00FF.

Código Descrição: Código Descrição:


de erro de erro
estendid estendid
o (hex): o (hex):
2001 Excesso de IOI 2108 Controlador no modo de carga ou descarga
2002 Valor do parâmetro deficiente 2109 Tentativa de alterar o número das dimensões do
array
2018 Sinalização rejeitada
210A Nome inválido do símbolo
201B Tamanho muito pequeno
210B Símbolo não existe
201C Tamanho inválido
210E Busca apresentou falha
2100 Falha de privilégio
210F Tarefa não pode ser iniciada
2101 Posição da chave seletora de modo inválida
2110 Não há condições de escrita
2102 Senha inválida
2111 Não há condições de leitura
2103 Sem emissão de senha
2112 Rotina compartilhada que não pode ser editada
2104 Endereço fora da faixa
2113 Controlador no modo de falha
2105 Endereço e quantos estão fora da faixa
2114 Modo de operação inibido
2106 Dados em uso
2107 Tipo inválido ou não suportado

Publicação 1756-RM003F-PT-P - Maio 2002


Instruções de Entrada/Saída (MSG, GSV, SSV) 3-11

Códigos de Erro do CLP e do SLC (.ERR)

Para os códigos de erro do CLP e SLC, o software de programação não


exibe a descrição completa.

Código de Descrição: Código de Descrição:


erro (hex): erro (hex):
1000 Comando ilegal ou formato do controlador local F00D Pedido redundante
2000 Módulo de comunicação não está funcionando F00E Comando não pode ser executado
3000 Nó remoto está faltando, desconectado ou F00F Overflow; histograma de overflow
desligado
F010 Sem acesso
4000 Controlador conectado, mas com falha (hardware)
F011 Tipo de dados requisitados não corresponde aos
5000 Número de estação errado dados disponíveis
6000 Função requisitada não está disponível F012 Parâmetros de comando incorretos
7000 Controlador está no modo Program F013 Referência de endereço existe para uma área
apagada
8000 Arquivo de compatibilidade do controlador não
existe F014 Falha na execução do comando por motivo
desconhecido
9000 Nó remoto não consegue comandar o buffer Overflow do histograma do CLP-3
B000 Controlador está executando um download,
F015 Erro na conversão dos dados
portanto não pode ser acessado
F016 Scanner não está disponível para comunicação com
F001 Controlador converteu incorretamente o endereço um adaptador de rack 1771
F002 Endereço incompleto
F017 Adaptador não está disponível para comunicação
F003 Endereço incorreto com o módulo
F004 Formato ilegal do endereço - símbolo não F018 Resposta do módulo 1771 não foi válida
encontrado
F019 Etiqueta duplicada
F005 Formato ilegal do endereço - o símbolo tem o valor 0
F01A Controlador que armazena a configuração do
ou maior do que o número máximo de caracteres arquivo ativo - o arquivo está sendo usado
suportados pelo dispositivo
F01B Controlador que armazena a configuração do
F006 Arquivo de endereço não existe no controlador alvo.
programa ativo - alguém está fazendo o download
F007 Arquivo de destino é muito pequeno para o número de dados ou a edição on-line
de palavras solicitado.
F01C Arquivo do disco está protegido contra escrita ou
F008 Não consegue completar o pedido não pode ser acessado (somente off-line)
Situação alterada durante operação com vários F01D Arquivo do disco está sendo usado por outra
pacotes
aplicação
F009 Dados ou arquivo muito grande Atualização não realizada (somente off-line)
Memória não disponível
F00A Controlador alvo não consegue colocar as
informações requisitadas em pacotes
F00B Erro de privilégio; acesso negado
F00C Função requisitada não está disponível

Publicação 1756-RM003F-PT-P - Maio 2002


3-12 Instruções de Entrada/Saída (MSG, GSV, SSV)

Códigos de Erro de Block-transfer

Estes são os códigos de erros específicos de block-transfer no


Logix5000.

Código de erro Descrição: Display do software:


(hex):
00D0 O scanner não recebeu uma resposta de block-transfer do módulo de block-transfer dentro erro desconhecido
de 3,5 s do pedido
00D1 O checksum da resposta de leitura não corresponde ao checksum do conjunto de dados erro desconhecido
00D2 O scanner solicitou uma leitura ou escrita, mas o módulo de block-transfer forneceu uma erro desconhecido
resposta contrária.
00D3 O scanner solicitou um comprimento e o módulo de block-transfer respondeu com um erro desconhecido
comprimento diferente.
00D6 O scanner recebeu uma resposta do módulo de block-transfer, indicando que o pedido de erro desconhecido
escrita apresentou falha.
00EA O scanner não foi configurado para comunicar-se com o rack deste módulo de erro desconhecido
block-transfer
00EB O slot lógico específico não está disponível para o tamanho de rack determinado erro desconhecido
00EC No momento, há um pedido de block-transfer em andamento e uma resposta é solicitada erro desconhecido
antes que outro pedido possa ser iniciado
00ED O tamanho de pedido de block-transfer não está de acordo com os pedidos de tamanho erro desconhecido
válidos para block-transfer
00EE O tipo de pedido de block-transfer não está de acordo com o BT_READ ou BT_WRITE erro desconhecido
previsto
00EF O scanner não conseguiu encontrar um slot disponível na tabela de block-transfer para erro desconhecido
acomodar o pedido de block-transfer
00F0 O scanner recebeu um pedido para resetar os canais de E/S remota enquanto houvesse erro desconhecido
block-transfers em aberto.
00F3 As filas para block-transfers remotos estão cheias erro desconhecido
00F5 Nenhum canal de comunicação está configurado para o slot ou rack solicitado erro desconhecido
00F6 Nenhum canal de comunicação está configurado para E/S remota erro desconhecido
00F7 O timeout de block-transfer configurado na instrução encerrou a temporização antes da erro desconhecido
conclusão
00F8 Erro no protocolo de block-transfer - block-transfer não solicitado erro desconhecido
00F9 Os dados de block-transfer foram perdidos devido a um canal de comunicação em más erro desconhecido
condições
00FA O módulo de block-transfer solicitou um comprimento diferente daquele associado à erro desconhecido
instrução de block-transfer.
00FB O checksum dos dados de leitura do block-transfer estava errado erro desconhecido
00FC Houve uma transferência inválida dos dados de escrita de block-transfer entre o adaptador erro desconhecido
e o módulo de block-transfer
00FD O tamanho do block-transfer mais o tamanho do índice na tabela de dados de erro desconhecido
block-transfer era maior do que o tamanho do arquivo da tabela de dados de block-transfer

Publicação 1756-RM003F-PT-P - Maio 2002


Instruções de Entrada/Saída (MSG, GSV, SSV) 3-13

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.

Clique aqui para configurar a instrução MSG

Os detalhes de configuração dependem do tipo de mensagem


selecionado.

42976

Se o dispositivo alvo for um: Selecione um dos seguintes tipos de Consulte a


mensagens: página:
Controlador Logix5000 CIP Data Table Read 3-14
CIP Data Table Write
Módulo de E/S que você configura usando Module Reconfigure 3-14
o software RSLogix 5000
CIP Generic 3-16
Controlador CLP-5 PLC5 Typed Read 3-17
PLC5 Typed Write
PLC5 Word Range Read
PLC5 Word Range Write
Controlador SLC SLC Typed Read 3-18
Controlador MicroLogix
SLC Typed Write
Módulo de block-transfer Block-Transfer Read 3-18
Block-Transfer Write
Controlador CLP-3 PLC3 typed read 3-19
PLC3 typed write
PLC3 word range read
PLC3 word range write
Controlador CLP-2 PLC2 unprotected read 3-20
PLC2 unprotected write

Publicação 1756-RM003F-PT-P - Maio 2002


3-14 Instruções de Entrada/Saída (MSG, GSV, SSV)

Você deve especificar essa informação de configuração:

Para esta propriedade: Especifique


Source Element • Se você selecionar um tipo de mensagem de leitura, Source Element é o endereço de dados que você
quer ler no dispositivo alvo. Use a sintaxe de endereçamento do dispositivo alvo.

• 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.

• Se você selecionar o tipo de mensagem de escrita, o Destination Element é o endereço do local no


dispositivo alvo onde você escreverá os dados.

Especificação das Mensagens de Leitura e Escrita da Tabela de


Dados CIP

Os tipos de mensagens Leitura e Escrita da Tabela de Dados CIP


transferem dados entre os controladores Logix5000.

Selecione este comando: Se você quiser:


CIP Data Table Read ler os dados a partir de outro controlador.
Os tipos Source e Destination devem corresponder.
CIP Data Table Write escrever os dados em outro controlador.
Os tipos Source e Destination devem corresponder.

Reconfiguração de um Módulo de E/S

Use a mensagem Module Reconfigure para enviar as novas


informações de configuração para um módulo de E/S. Durante a
reconfiguração:
• Os módulos de entrada continuam a enviar dados de entrada
para o controlador.
• Os módulos de saída continuam a enviar para o controlador
seus dispositivos de saída.

Uma mensagem de Module Reconfigure solicita estas propriedades de


configuração:

Nesta propriedade: Selecione:


Message Type Module Reconfigure

Publicação 1756-RM003F-PT-P - Maio 2002


Instruções de Entrada/Saída (MSG, GSV, SSV) 3-15

Exemplo: Para reconfigurar um módulo de E/S:

1. Configure o membro requisitado do tag de configuração do


módulo para o novo valor.

2. Envie uma mensagem Module Reconfigure para o módulo.

Quando reconfigure[5] é energizado, ajusta o alarme em 60 para o


módulo local no slot 4. A mensagem Module Reconfigure envia o
novo valor de alarme para o módulo. A instrução de uma etapa
previne que a linha envie mensagens múltiplas para o módulo
enquanto o reconfigure[5] estiver ligado.

Lógica Ladder

Texto Estruturado

IF reconfigure[5] AND NOT reconfigure[6]THEN


Local:4:C.Ch0Config.HAlarmLimit := 60;
IF NOT change_Halarm.EN THEN
MSG(change_Halarm);
END_IF;
END_IF;
reconfigure[6] := reconfigure[5];

Publicação 1756-RM003F-PT-P - Maio 2002


3-16 Instruções de Entrada/Saída (MSG, GSV, SSV)

Especificar Mensagens CIP Generic

Uma mensagem CIP Generic realiza uma ação específica em um


módulo de E/S.

Se você quiser Nesta propriedade: Digite ou selecione:


Realizar um teste de pulso em um Message Type CIP Generic
módulo de saída digital
Service Type Pulse Test
Source tag_name do tipo INT [5]
Este array contém:
tag_name[0] máscara de bit dos pontos para teste (teste
somente um ponto de cada vez)
tag_name[1] reservado, deixe 0
tag_name[2] largura do pulso (centenas de µ segundos,
normalmente 20)
tag_name[3] atraso no cruzamento zero para ControlLogix
I/O (centenas deµsegundos, normalmente
40)
tag_name[4] verifique o atraso
Destination deixe em branco
Resetar os fusíveis eletrônicos em um Message Type CIP Generic
módulo de saída digital
Service Type Reset Electronic Fuse
Source tag_name do tipo DINT
Este tag representa uma máscara de bit dos pontos para resetar os
fusíveis para energizado.
Destination deixe em branco
Resetar diagnósticos travados em um Message Type CIP Generic
módulo de entrada digital
Service Type Reset Latched Diagnostics (I)
Source tag_name do tipo DINT
Esse tag representa uma máscara de bit dos pontos para resetar o
diagnóstico para energizado.
Resetar diagnósticos em um módulo de Message Type CIP Generic
saída digital
Service Type Reset Latched Diagnostics (O)
Source tag_name do tipo DINT
Esse tag representa uma máscara de bit dos pontos para resetar o
diagnóstico para energizado.
Destravar o alarme de um módulo de Message Type CIP Generic
entrada analógica
Service Type Selecione qual alarme você quer destravar:
• Unlatch All Alarms (I)
• Unlatch Analog High Alarm (I)
• Unlatch Analog High High Alarm (I)
• Unlatch Analog Low Alarm (I)
• Unlatch Analog Low Low Alarm (I)
• Unlatch Rate Alarm (I)
Instance O canal do alarme que você quer destravar

Publicação 1756-RM003F-PT-P - Maio 2002


Instruções de Entrada/Saída (MSG, GSV, SSV) 3-17

Se você quiser Nesta propriedade: Digite ou selecione:


Destravar o alarme de um módulo de Message Type CIP Generic
saída analógica
Service Type Selecione qual alarme você quer destravar:
• Unlatch All Alarms (O)
• Unlatch High Alarm (O)
• Unlatch Low Alarm (O)
• Unlatch Ramp Alarm (O)
Instance O canal do alarme que você quer destravar

Especificação das mensagens do CLP-5

Use os tipos de mensagem CLP-5 para comunicar-se com os


controladores CLP-5.

Selecione este comando: Se você quiser:


PLC5 Typed Read Ler o inteiro de 16 bits, ponto flutuante ou os dados do tipo da string e manter a integridade dos dados.
Veja a Tabela3.1 na página 3-17.
PLC5 Typed Write Escrever o inteiro de 16 bits, ponto flutuante ou os dados do tipo da string e manter a integridade dos
dados.Veja a Tabela3.1 na página 3-17
PLC5 Word Range Read Ler uma faixa contínua de palavras de 16 bits na memória do CLP-5, independente do tipo dos dados.
Este comando começa no endereço especificado como Source Element e realiza uma leitura seqüencial
das palavras de 16 bits solicitadas.
Os dados do Source Element são armazenados, iniciando no endereço especificado como Destination Tag.
PLC5 Word Range Write Escrever uma faixa contínua de palavras de 16 bits da memória do Logix5000, independente do tipo de
dados para a memória do CLP-5.
Este comando começa no endereço especificado como Source Tag e realiza uma leitura seqüencial das
palavras de 16 bits solicitadas.
Os dados de Source Tag são armazenados, iniciando no endereço especificado como Destination Element
no controlador CLP-5.

A tabela a seguir mostra os tipos de dados para usar com as


mensagens PLC5 Typed Read e PLC5 Typed Write.

Tabela 3.1 Tipos de dados para mensagens PLC5 Typed Read e Typed Write

Para este tipo de dados Use este tipo de dados do Logix5000:


do CLP-5:
B INT
F REAL
N INT
DINT (Escreve somente valores DINT para um controlador
CLP-5 se o valor for ≥ −32,768 e ≤ 32,767.)
S INT
ST STRING

Os comandos Typed Read e Typed Write também funcionam com os


controladores SLC 5/03 (OS303 e acima), controladores SLC 5/04
(OS402 e acima) e os controladores SLC 5/05.

Publicação 1756-RM003F-PT-P - Maio 2002


3-18 Instruções de Entrada/Saída (MSG, GSV, SSV)

Os diagramas a seguir mostram como os comandos de faixa de


palavra e de tipo são diferentes. O exemplo usa comandos de leitura
de um controlador CLP-5 para um controlador Logix5000.
Comando de leitura de tipo Comando de leitura da faixa de palavra

palavras de 16 bits no palavras de 32 bits no palavras de 16 bits no palavras de 32 bits no


controlador CLP-5 controlador Logix5000 controlador CLP-5 controlador Logix5000

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 das Mensagens do SLC

Use os tipos da mensagem SLC para comunicar-se com os


controladores SLC e MicroLogix. A tabela a seguir mostra quais os
tipos de dados a instrução permite que você acesse. A tabela também
mostra o tipo correspondente de dados do Logix5000.

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

Especificação das Mensagens Block-transfer

Os tipos de mensagem de block-transfer são usados para


comunicação com módulos de block-transfer em uma rede Universal
Remote I/O.

Se você quiser: Selecione este comando:


ler dados de um módulo de block-transfer. Block-Transfer Read
Este tipo de mensagem substitui a instrução BTR.
escrever dados em um módulo de block-transfer. Block-Transfer Write
Este tipo de mensagem substitui a instrução BTW.

Publicação 1756-RM003F-PT-P - Maio 2002


Instruções de Entrada/Saída (MSG, GSV, SSV) 3-19

Para configurar uma mensagem block-transfer, siga as orientações:

• Os tags de fonte (para BTW) e destino (para BTR) devem ter um


tamanho suficiente para aceitar os dados solicitados, exceto para
as estruturas MESSAGE, AXIS e MODULE.
• Especifique quantos inteiros de 16 bits (INT) enviar ou receber.
É possível especificar de 0 a 64 inteiros.

Se você quiser o: Especifique:


Módulo block-transfer para determinar quantos 0 para o número de
inteiros de 16 bits enviar (BTR). elementos
O controlador para enviar 64 inteiros (BTW).

Especificação de Mensagens do CLP-3

Os tipos de mensagem do CLP-3 são determinados para os


controladores CLP-3.

Selecione este comando: Se você quiser:


PLC3 Typed Read ler inteiros ou dados do tipo REAL .
Para inteiros, este comando lê inteiros de 16 bits a partir do controlador CLP-3 e armazena-os nos arrays
de dados SINT, INT ou DINT no controlador Logix5000 mantém a integridade dos dados.
Este comando também lê os dados do ponto flutuante do CLP-3 e armazena-os em um tag do tipo de
dados REAL no controlador Logix5000.
PLC3 Typed Write escrever de inteiros ou dados do tipo REAL.
Este comando escreve os dados SINT ou INT em um arquivo de inteiros do controlador CLP-3 e mantém a
integridade dos dados. É possível escrever dados DINT até onde eles se ajustem em um tipo de dados INT
(−32,768 ≥ data ≤ 32,767).
Este comando também escreve os dados do tipo REAL do controlador Logix5000 para um arquivo de ponto
flutuante do CLP-3.
PLC3 Word Range Read ler uma faixa contínua de palavras de 16 bits na memória do CLP-3, independente do tipo de dados.
Este comando começa no endereço especificado como Source Element e realiza uma leitura seqüencial
das palavras de 16 bits solicitadas.
Os dados do Source Element são armazenados, iniciando no endereço especificado como Destination Tag .
PLC3 Word Range Write Escrever uma faixa contínua de palavras de 16 bits da memória do Logix5000, independente do tipo de
dados para a memória do CLP-3.
Este comando começa no endereço especificado como Source Tag e realiza uma leitura seqüencial das
palavras de 16 bits solicitadas.
Os dados de Source Tag são armazenados, iniciando no endereço especificado como Destination Element
no controlador CLP-3.

Publicação 1756-RM003F-PT-P - Maio 2002


3-20 Instruções de Entrada/Saída (MSG, GSV, SSV)

Os diagramas a seguir mostram como os comandos de faixa de


palavra e de tipo são diferentes. O exemplo usa os comandos de
leitura de um controlador CLP-3 para um controlador Logix5000.

Comando de leitura de tipo Comando de leitura de faixa de palavra

palavras de 16 bits no palavras de 32 bits no palavras de 16 bits no palavras de 32 bits no


controlador CLP-3 controlador Logix5000 controlador CLP-3 controlador Logix5000

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 das mensagens do CLP-2

Os tipos de mensagem do CLP-2 são determinados para os


controladores CLP-2.

Selecione este comando: Se você quiser:


PLC2 Unprotected Read realizar a leitura de palavras de 16 bits de qualquer área da tabela de dados do CLP-2 ou
do arquivo de compatibilidade do CLP-2 de outro controlador.
PLC2 Unprotected Write escrever palavras de 16 bits para qualquer área da tabela de dados do CLP-2 ou do
arquivo de compatibilidade do CLP-2 de outro controlador.

A transferência da mensagem usa palavras de 16 bits, então,


certifique-se de que o tag do Logix5000 armazena adequadamente os
dados transferidos (normalmente como um array INT).

Publicação 1756-RM003F-PT-P - Maio 2002


Instruções de Entrada/Saída (MSG, GSV, SSV) 3-21

Exemplos de Configuração Os exemplos a seguir mostram os tags e elementos source e


destination para combinações de controladores diferentes.
MSG
Para instruções MSG originadas em um controlador Logix5000 e
escrevendo para um outro controlador:

Percurso da Mensagem: Exemplo de Fonte e Destino:


Logix5000 → Logix5000 tag da fonte array_1[0]
tag de destino array_2[0]
Você pode usar um tag alias para o tag fonte (no controlador Logix5000 original).
Você não pode usar um nome alternativo para o tag de destino. O destino deve ser um tag de base.
Logix5000 → PLC-5 tag da fonte array_1[0]
Logix5000 → SLC
elemento de destino N7:10
Você pode usar um tag alias para o tag fonte (no controlador Logix5000 original).
Logix5000 → PLC-2 tag da fonte array_1[0]
elemento de destino 010

Para instruções MSG originárias de um controlador Logix5000 e lidas


de um outro controlador:

Percurso da Mensagem: Exemplo de Fonte e Destino:


Logix5000 → Logix5000 tag da fonte array_1[0]
tag de destino array_2[0]
Você não pode usar um tag com nome alternativo para o tag de fonte. A fonte deve ser um tag de base.
Você pode usar um tag alias para o tag destino (no controlador Logix5000 original).
Logix5000 → PLC-5 elemento fonte N7:10
Logix5000 → SLC
tag de destino array_1[0]
Você pode usar um tag alias para o tag destino (no controlador Logix5000 original).
Logix5000 → PLC-2 elemento fonte 010
tag de destino array_1[0]

Publicação 1756-RM003F-PT-P - Maio 2002


3-22 Instruções de Entrada/Saída (MSG, GSV, SSV)

Especificação de Detalhes Ao configurar uma instrução MSG, você especifica estes detalhes na
guia Communication.
de Comunicação

43008

Especificar um caminho

O caminho descreve a rota que a mensagem pega para chegar ao


destino.

• Se você adicionar o módulo de comunicação local, o módulo de


comunicação remoto e o controlador ou dispositivo de destino à
configuração da E/S do controlador, o botão Browse permite
que você selecione o destino.

Message Path Browser


Path: peer_controller
peer_controller

− I/O Configuration

− [0] 1756-CNB/x Local_CNB

− 2 [0] 1756-CNB/x chassis_b

[1] 1756-L55/x peer_controller

peer_controller

Publicação 1756-RM003F-PT-P - Maio 2002


Instruções de Entrada/Saída (MSG, GSV, SSV) 3-23

• Alguns módulos ou dispositivos de comunicação não estão


disponíveis para a configuração da E/S do controlador. Para
aquelas situações, conclua o caminho conforme segue:

1. Use o botão Browse para selecionar o módulo de comunicação local.

2. Na caixa de texto Path, insira a porta pela qual a mensagem sai do


módulo.

3. Digite o endereço do próximo módulo pelo caminho até o


destino.

4. Digite combinações adicionais de portas e


endereços, se necessário.

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:

endereço IP (ex.: 130.130.130.5)


endereço IP:Porta (ex.: 130.130.130.5:24)
nome DNS (ex.: tanks)
nome DNS:Porta (ex.: tanks:24)

• Para mensagens block-transfer, adicione os seguintes módulos à


configuração da E/S do controlador:

Para block-transfers nesta Adicione estes módulos à configuração da E/S:


rede:
ControlNet • módulo de comunicação local (ex.: módulo 1756-CNB)
• módulo adaptador remoto (ex.: módulo 1771-ACN)
Remote I/O • módulo de comunicação local (ex.: módulo 1756-DHRIO)
• um módulo adaptador remoto (ex.: módulo 1771-ASB) para cada rack ou parte do rack no chassi
• módulo block-transfer (opcional)

Publicação 1756-RM003F-PT-P - Maio 2002


3-24 Instruções de Entrada/Saída (MSG, GSV, SSV)

As páginas seguintes mostram exemplos de caminhos:

• na ControlNet, página 3-24


• na EtherNet/IP, página 3-25
• para uma mensagem DH+, página 3-25

EXEMPLO Especificação de um caminho na ControlNet

− I/O Configuration

− [0] 1756-CNB/x Local_CNB

− 2 [0] 1756-CNB/x chassis_b

[3] 1756-L55/x peer_controller

Mensagem

rede ControlNet 42042

Percurso: peer_controller
Onde:
peer_controller é o nome do controlador que recebe a mensagem.

Publicação 1756-RM003F-PT-P - Maio 2002


Instruções de Entrada/Saída (MSG, GSV, SSV) 3-25

EXEMPLO Especificação de um caminho na EtherNet/IP

− I/O Configuration

− [1] 1756-ENBx Local_ENB

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

EXEMPLO Especificação de um caminho na DH+

− I/O Configuration

− [1] 1756-DHRIO Local_DHRIO

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.

Publicação 1756-RM003F-PT-P - Maio 2002


3-26 Instruções de Entrada/Saída (MSG, GSV, SSV)

Especificar um Módulo de Comunicação ou Endereço do Módulo:

Use a seguinte tabela para selecionar um método de comunicação ou


endereço de módulo para a mensagem.

Se o dispositivo de destino for um: Então selecione: E especifique:


Controlador Logix5000 CIP outras especificações não são necessárias
Controlador CLP-5 na rede
EtherNet/IP
Controlador CLP-5 na rede ControlNet
Controlador SLC 5/05
Controlador CLP-5 na rede DH+ DH+ Canal: Canal A ou B do módulo 1756-DHRIO que está
conectado à rede DH+
Controlador SLC na rede DH+ Source Link: Identificação da rede atribuída ao backplane do
controlador na tabela de roteamento do módulo
1756-DHRIO. (O source node na tabela de
roteamento corresponde automaticamente ao
número do slot do controlador.)
Controlador CLP-3 Destination Link Identificação da rede DH+ remota onde o
dispositivo alvo reside
Controlador CLP-2 Destination Endereço da estação do dispositivo alvo, em
Node: octal
Se houver somente um link DH+ e você não usou o software RSLinx
para configurar o módulo DH/RIO para os links remotos, especifique
0 para o Source Link e para o Destination Link.
Aplicação em uma estação de CIP com Fonte de ID Source Link: ID remota do tópico no software RSLinx
trabalho que está recebendo uma
Destination Link: Destination Link virtual configurado em RSLinx
mensagem não solicitada (Isto permite que a
encaminhada em uma rede aplicação receba dados de (0-65535)
EtherNet/IP ou ControlNet através do um controlador.) Destination Destination ID (0-77 octal) fornecido pela
RSLinx Node: aplicação ao RSLinx. Para um tópico DDE em
RSLinx, use 77.
O número do slot do controlador ControlLogix é usada como o Nó
Fonte.
módulo block-transfer na rede remota RIO Canal: Canal A ou B do módulo 1756-DHRIO que está
I/O conectado à rede RIO
Rack Número do rack (octal) do módulo
Group Número do grupo do módulo
Slot Número do slot que o módulo está
módulo de block-transfer em uma ControlNet Slot Número do slot em que o módulo está
rede ControlNet

Publicação 1756-RM003F-PT-P - Maio 2002


Instruções de Entrada/Saída (MSG, GSV, SSV) 3-27

Escolha de uma opção de cache:

Alguns tipos de mensagens usam uma conexão para enviar ou receber


dados. Alguns possibilitam duas opções: deixar a conexão aberta
(cache) ou fechar a conexão quando a transmissão da mensagem
terminar. A tabela a seguir mostra quais mensagens usam uma
conexão e se você pode ou não copiar no cache a conexão:

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.

Use o seguinte procedimento para escolher uma opção de cache para


uma mensagem que você pode gravar em cache.

1. Sua lógica altera o caminho de uma mensagem? (ou seja, uma


instrução MSG se comunica com mais de um dispositivo?)

Se: Então:
sim A. Limpe a caixa de verificação Cache Connection .
B. Pule a etapa 2.
não Vá para etapa 2.

Publicação 1756-RM003F-PT-P - Maio 2002


3-28 Instruções de Entrada/Saída (MSG, GSV, SSV)

2. Seleção de uma opção cache:

Se a mensagem for para um: Então:


controlador Para quantos controladores este controlador envia as mensagens para aquele que você pode gravar
em cache?
Se: Então:
16 ou menos Deixe a caixa verificação Cache Connection selecionada (marcada).
controladores
mais de 16 1. Selecione os 16 controladores que requisitem as mensagens mais
controladores freqüentes.
2. A mensagem é para um daqueles controladores?

Se: Então:
sim Deixe a caixa de verificação Cache Connection
selecionada.
não Limpe a caixa de verificação Cache Connection .

módulo de block-transfer Quantos dispositivos requerem as instruções block-transfer?


Se: Então:
16 ou menos Deixe a caixa verificação Cache Connection selecionada (verificada).
dispositivos
mais de 16 dispositivos 1. Selecione 16 dispositivos que requisitem as atualizações mais
recentes.
2. A mensagem é para um daqueles dispositivos?

Se: Então:
sim Deixe a caixa de verificação Cache Connection
selecionada.
não Limpe a caixa de verificação Cache Connection .

Publicação 1756-RM003F-PT-P - Maio 2002


Instruções de Entrada/Saída (MSG, GSV, SSV) 3-29

Obtenção do Valor do As instruções GSV/SSV obtêm e definem os dados do sistema do


controlador que estão armazenados nos objetos.
Sistema (GSV) e Definição
do Valor do Sistema (SSV)
Operandos:

Lógica Ladder

Operando: Tipo: Formato: Descrição:


Class name nome nome do objeto
Instance name nome nome do objeto específico, quando o objeto requisitar um
nome
Attribute Name nome atributo do objeto
tipo dos dados dependem do atributo que você seleciona
Destination (GSV) SINT tag destino para dados de atributo
INT
DINT
REAL
Source (SSV) SINT tag tag que contenha dados que você quer copiar para o
INT atributo
DINT
REAL

Texto Estruturado
GSV(ClassName,InstanceName,AttributeName,Dest);
SSV(ClassName,InstanceName,AttributeName,Source);

Os operandos são os mesmos que aqueles para as instruções GSV e SSV.

Descrição: As instruções GSV/SSV obtêm e definem os dados do sistema do


controlador que estão armazenados nos objetos. O controlador
armazena os dados do sistema nos objetos. Não há arquivo de status,
como no controlador CLP-5.

Quando habilitada, a instrução GSV recupera a informação específica


e a coloca no destino. Quando habilitada, a instrução SSV define o
atributo especificado com os dados da fonte.

Ao inserir uma instrução GSV/SSV, o software de programação exibe


as classes válidas de objeto, os nomes do objeto e os nomes de

Publicação 1756-RM003F-PT-P - Maio 2002


3-30 Instruções de Entrada/Saída (MSG, GSV, SSV)

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

Use as instruções GSV/SSV cuidadosamente. As


ATENÇÃO
alterações realizadas nos objetos podem causar
operação inesperada do controlador ou ferimentos

! pessoais.

Se o tamanho da Fonte ou Destino for muito pequeno, a instrução


não executa e uma falha de advertência é registrada. A seção a seguir,
Objetos GSV/SSV , define os atributos de cada objeto e seus tipos de
dados associados. Por exemplo, o atributo MajorFaultRecord do
objeto Programa requer um tipo de dado DINT[11].

Flags de Status Aritmético: não afetados

Condições de Falha:

Uma falha de advertência ocorrerá se: Tipo de falha: Código de falha:


endereço de objeto inválido 4 5
objeto especificado que não suporta GSV/SSV 4 6
atributo inválido 4 6
informações suficientes não foram fornecidas 4 6
para uma instrução SSV
o destino GSV não era grande o suficiente para 4 7
suportar os dados requisitados.

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

Publicação 1756-RM003F-PT-P - Maio 2002


Instruções de Entrada/Saída (MSG, GSV, SSV) 3-31

especificar o nome do objeto. Por exemplo, a sua aplicação pode ter


várias tarefas. Cada tarefa tem o seu próprio objeto TASK que é
acessado pelo nome da tarefa.

Para a instrução GSV, somente o tamanho


ATENÇÃO
especificado do dado é copiado para o destino. Por
exemplo, se o atributo for especificado como um

! SINT e o destino é um DINT, somente os 8 bits


menos significativos do destino DINT são
atualizados, sendo que os 24 bits restantes
permanecem inalterados.

É possível acessar estes objetos:

Para informações sobre este objeto: Consulte esta página ou a publicação:


AXIS ControlLogix Motion Module Setup and
Configuration Manual, publicação 1756-UM006
CONTROLLER 3-31
CONTROLLERDEVICE 3-32
CST 3-34
DF1 3-35
FAULTLOG 3-38
MESSAGE 3-39
MODULE 3-41
MOTIONGROUP 3-42
PROGRAM 3-43
ROUTINE 3-44
SERIALPORT 3-44
TASK 3-46
WALLCLOCKTIME 3-46

Acesso ao objeto CONTROLLER

O objeto CONTROLLER fornece as informações de status sobre a


execução do controlador.

Atributo: Tipo de Dados: Instrução: Descrição:


TimeSlice INT GSV Porcentagem de CPU disponível atribuída para a comunicação.
SSV Os valores válidos são 10-90. Este valor não pode ser alterado
quando a chave seletora de modo estiver posicionada em Run.

Publicação 1756-RM003F-PT-P - Maio 2002


3-32 Instruções de Entrada/Saída (MSG, GSV, SSV)

Acesso ao objeto CONTROLLERDEVICE

O objeto CONTROLLERDEVICE identifica o hardware do controlador.

Atributo: Tipo de Dados: Instrução: Descrição:


DeviceName SINT[33] GSV String ASCII que identifica o código de catálogo do controlador
e placa de memória.
O primeiro byte contém uma contagem do número de
caracteres ASCII que retornaram na string do array.
ProductCode INT GSV Identifica o tipo de controlador

Este código de Identifica este controlador


produto: Logix:
3 5550
15 5860
41 5433
42 5434
43 5320
50 5553
51 5555

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.

Publicação 1756-RM003F-PT-P - Maio 2002


Instruções de Entrada/Saída (MSG, GSV, SSV) 3-33

Atributo: Tipo de Dados: Instrução: Descrição:


Status INT GSV Os bits identificam o status:
Os bits 3-0 são reservados

Bits de Status do Dispositivo


Bits 7-4: Significado:
0000 reservado
0001 atualização flash em andamento
0010 reservado
0011 reservado
0100 flash está deficiente
0101 em falha
0110 operação
0111 programa

Bits de Status de Falha


Bits 11-8: Significado:
0001 falha de advertência recuperável
0010 falha de advertência não recuperável
0100 falha grave recuperável
1000 falha grave não recuperável

Bits de Status Específicos do Logix5000


Bits 13-12: Significado:
01 chave seletora em Run
10 chave seletora em Program
11 chave seletora em Remote
Bits 15-14: Significado:
01 controlador está alterando os modos
10 modo de depuração se o controlador
estiver no modo Run
Type INT GSV Identifica o dispositivo como um controlador.
Controlador = 14
Vendor INT GSV Identifica o fornecedor do dispositivo.
Allen-Bradley = 0001

Publicação 1756-RM003F-PT-P - Maio 2002


3-34 Instruções de Entrada/Saída (MSG, GSV, SSV)

Acesso ao objeto CST

O objeto CST (coordinated system time) fornece um tempo de sistema


coordenado para os dispositivos em um chassi.

Atributo: Tipo de Dados: Instrução: Descrição:


CurrentStatus INT GSV Status atual do tempo de sistema coordenado. Os bits identificam o
status:
Bit: Significado:
0 falha no hardware do temporizador: o hardware do
temporizador interno do dispositivo está em falha
1 rampa habilitada: o valor atual dos 16 bits menos
significativos do temporizador aumentam em rampa até o
valor requisitado, ao invés de permanecer no valor menor.
Estes bits são manipulados pelo método de sincronização
de seleção específica da rede.
2 mestre do tempo do sistema: o objeto CST é uma fonte de
tempo mestre no sistema ControlLogix
3 sincronizado: o CurrentValue de 64 bits do objeto CST é
sincronizado por um objeto CST mestre através de uma
atualização de tempo do sistema.
4 mestre da rede local: o objeto CST é a fonte de tempo
mestre da rede local
5 modo do relé de entrada: o objeto CST está agindo em um
modo de relé de tempo
6 detecção de mestre duplicado: um mestre de tempo
duplicado na rede local foi detectado. Este bit é sempre 0
para os nós que dependem do tempo.
7 não usado
8-9 00 = nó que depende do tempo
01 = nó do mestre de tempo
10 = nó do relé de tempo
11 = não usado
10-15 não usado
CurrentValue DINT[2] GSV Valor atual do temporizador. DINT[0] contém os bits 32 menos
significativos; DINT[1] contém os bits 32 mais significativos.
A fonte do temporizador é ajustada para corresponder ao valor
fornecido nos serviços de atualização e da sincronização da rede de
comunicação local. O ajuste pode ser tanto um aumento em rampa
até atingir o valor requisitado como uma configuração imediata no
valor requisitado, conforme definido no atributo CurrentStatus.

Publicação 1756-RM003F-PT-P - Maio 2002


Instruções de Entrada/Saída (MSG, GSV, SSV) 3-35

Acesso ao objeto DF1

O objeto DF1 fornece uma interface para o driver de comunicação


DF1 que pode ser configurada para a porta serial.

Atributo: Tipo de Instrução: Descrição:


Dados:
ACKTimeout := , DINT GSV Quantidade de tempo que se espera para se reconhecer uma
transmissão de mensagem (somente mestre e ponto-a-ponto)
Valor válido 0-32.767. Atraso nas contagens de períodos de 20
mseg. O valor inicial é de 50 (1 segundo).
DiagnosticCounters INT[19] GSV Série de contadores de diagnóstico para o driver de comunicação
DF1.
offset da palavra DF1 ponto-a-ponto DF1 escravo mestre
0 assinatura (0x0043) assinatura (0x0042)assinatura (0x0044)
1 bits do modem bits do modembits do modem
2 pacotes enviados pacotes enviadospacotes enviados
3 pacotes recebidos pacotes recebidospacotes recebidos
4 pacotes não entregues pacotes não entreguespacotes não entregues
5 não usado tentativas de mensagenstentativas de mensagens
6 NAKs recebidos NAKs recebidosnão usado
7 ENQs recebidos poll de pacotes recebidosnão usado
8 pacotes NAKed defeituosospacotes not ACKed defeituosospacotes não ACKed defeituosos
9 nenhuma memória enviou um NAKnenhuma memória não ACKednão usado
10 pacotes duplicados recebidospacotes duplicados recebidospacotes duplicados recebidos
11 caracteres defeituosos recebidosnão usadonão usado
12 contagem de recuperações DCDcontagem de recuperações DCDcontagem de recuperações DCD
13 contagem de modem perdidacontagem de modem perdidacontagem de modem perdida
14 não usado não usado prioridade do tempo máximo de scan
15 não usado não usado última prioridade do tempo de scan
16 não usado não usado tempo de scan normal máximo
17 não usado não usado último tempo normal de scan
18 ENQs enviados não usado não usado
DuplicateDetection SINT GSV Habilita a detecção de mensagem duplicada.
Valor: Significado:
0 detecção de mensagem duplicada desabilitada
diferente de zero detecção de mensagem duplicada desabilitada
EmbeddedResponseEnable SINT GSV Habilita funcionalidade de resposta incorporada (somente
ponto-a-ponto).
Valor: Significado:
0 iniciado somente depois que um é recebido
(padrão)
1 habilitado incondicionalmente
ENQTransmitLimit SINT GSV O número de pedidos (ENQs) a serem enviados após um timeout
ACK (somente ponto-a-ponto).
Valor válido 0-127. Ajuste inicial é 3.
EOTSuppression SINT GSV Habilita a supressão de transmissões EOT em resposta ao poll de
pacotes (somente escravo).
Valor: Significado:
0 supressão de EOT desabilitada (desabilitado)
diferente de zero supressão de EOT habilitada
ErrorDetection SINT GSV Especifica o esquema de detecção de erro.
Valor: Significado:
0 BCC (padrão)
1 CRC

Publicação 1756-RM003F-PT-P - Maio 2002


3-36 Instruções de Entrada/Saída (MSG, GSV, SSV)

Atributo: Tipo de Instrução: Descrição:


Dados:
MasterMessageTransmit SINT GSV Valor atual da transmissão de mensagem mestre (somente
mestre).
Valor: Significado:
0 entre os polls da estação
1 na seqüência do poll (no lugar do número da
estação do mestre)
Valor inicial é 0.
NAKReceiveLimit SINT GSV O número de NAKs recebidos em resposta a uma mensagem
antes da interrupção da transmissão (somente comunicação
ponto-a-ponto).
Valor válido 0-127. Ajuste inicial é 3.
NormalPollGroupSize INT GSV Número de estações para ser distribuído no array normal de nós
do poll, depois de realizar um polling de todas as estações no
array de nós de polling de prioridade (somente mestre).
Valor válido 0-255. Valor inicial é 0.
PollingMode SINT GSV Modo de polling atual (somente mestre).
Valor: Significado:
0 baseado em mensagem, mas não permite
escravos para iniciar as mensagens
1 baseado em mensagens, mas permite
escravos para iniciar as mensagens (padrão)
2 transferência padrão de uma única mensagem
por scan do nó
3 transferência padrão de várias mensagens por
scan do nó
O valor inicial é 1.
ReplyMessageWait DINT GSV O tempo (atuando como mestre) para esperar o recebimento de
um ACK antes de realizar um polling do escravo para uma
resposta (somente mestre).
Valor válido 0-65.535. Atraso nas contagens de períodos de 20 ms.
O valor inicial é de 5 períodos (100 ms).
StationAddress INT GSV Endereço atual da estação da porta serial.
Valor válido 0-254. O valor inicial é 0.
SlavePollTimeout DINT GSV A quantidade de tempo em mseg que o escravo espera pelo
mestre para realizar um polling, antes que o escravo declare que
não tem condições de transmitir porque o mestre está inativo
(somente escravo).
Valor válido 0-32.767. Atraso nas contagens de períodos de 20 ms.
O valor inicial é de 3000 períodos (1 minuto).
TransmitRetries SINT GSV Número de vezes para reenviar uma mensagem sem obter um
reconhecimento (somente mestre e escravo)
Valor válido 0-127. Ajuste inicial é 3.
PendingACKTimeout DINT SSV Valor pendente para o atributo ACKTimeout.
PendingDuplicateDetection SINT SSV Valor pendente para o atributo DuplicateDetection.
PendingEmbeddedResponse SINT SSV Valor pendente para o atributo EmbeddedResponse.
Enable
PendingENQTransmitLimit SINT SSV Valor pendente para o atributo ENQTransmitLimit.
PendingEOTSuppression SINT SSV Valor pendente para o atributo EOTSuppression.
PendingErrorDetection SINT SSV Valor pendente para o atributo ErrorDetection.
PendingNormalPollGroupSize INT SSV Valor pendente para o atributo NormalPollGroupSize.
PendingMasterMessage SINT SSV Valor pendente para o atributo MasterMessageTransmit.
Transmit

Publicação 1756-RM003F-PT-P - Maio 2002


Instruções de Entrada/Saída (MSG, GSV, SSV) 3-37

Atributo: Tipo de Instrução: Descrição:


Dados:
PendingNAKReceiveLimit SINT SSV Valor pendente para o atributo NAKReceiveLimit.
PendingPollingMode SINT SSV Valor pendente para o atributo PollingMode .
PendingReplyMessageWait DINT SSV Valor pendente para o atributo ReplyMessageWait.
PendingStationAddress INT SSV Valor pendente para o atributo StationAddress.
PendingSlavePollTimeout DINT SSV Valor pendente para o atributo SlavePollTimeout.
PendingTransmitRetries SINT SSV Valor pendente para o atributo TransmitRetries.

Para aplicar os valores para qualquer um dos atributos pendentes de


DF1:

1. Use uma instrução SSV para definir o valor para o atributo


pendente.

É possível definir a quantidade de atributos que desejar, usando


uma instrução SSV para cada atributo pendente.

2. Use uma instrução MSG para aplicar o valor. A instrução MSG se


aplica a todos atributos pendentes configurados. Configure a
instrução MSG da seguinte forma:

Guia MSG Configuration: Campo: Valor:


Configuration Message Type CIP Generic
Service Code 0d hex
Object Type a2
Object ID 1
Object Attribute deixe em branco
Source deixe em branco
Number of Elements 0
Destination deixe em branco
Communication Path percurso de comunicação
automático
( 1,s onde s = número do
slot do controlador)

Publicação 1756-RM003F-PT-P - Maio 2002


3-38 Instruções de Entrada/Saída (MSG, GSV, SSV)

Acesso ao objeto FAULTLOG

O objeto FAULTLOG fornece informações de falha sobre o


controlador.

Atributo: Tipo de Dados: Instrução: Descrição:


MajorEvents INT GSV Quantas falhas graves ocorreram desde a última vez que este
SSV contador foi resetado.
MinorEvents INT GSV Quantas falhas de advertência ocorreram desde a última vez
SSV que este contador foi resetado.
MajorFaultBits DINT GSV Os bits individuais indicam o motivo da falha grave atual.
SSV Bit: Significado:
1 perda de alimentação
3 E/S
4 execução da instrução (programa)
5 rotina de falhas
6 watchdog
7 stack
8 alteração de modo
11 movimento
MinorFaultBits DINT GSV Os bits individuais indicam o motivo da falha de advertência
SSV atual.
Bit: Significado:
4 execução da instrução (programa)
6 watchdog
9 porta serial
10 bateria

Publicação 1756-RM003F-PT-P - Maio 2002


Instruções de Entrada/Saída (MSG, GSV, SSV) 3-39

Acesso ao objeto MESSAGE

É possível acessar o objeto MESSAGE através das instruções GSV/SSV.


Especifique o nome do tag da mensagem para determinar qual objeto
MESSAGE você quer. O objeto MESSAGE fornece uma interface para
configuração e disparo das comunicações peer-to-peer. Este objeto
substitui o tipo de dados MG do controlador CLP-5.

Atributo: Tipo de Dados: Instrução: Descrição:


ConnectionPath SINT[130] GSV Dados para configuração do percurso de conexão. Os primeiros
SSV dois bytes (byte desenergizado e byte energizado) são o
comprimento em bytes do percurso de conexão.
ConnectionRate DINT GSV Taxa (velocidade) requisitada para o pacote da conexão.
SSV
MessageType SINT GSV Especifica o tipo de mensagem.
SSV Valor: Significado:
0 não inicializado
Port SINT GSV Indica por qual porta a mensagem deve ser enviada.
SSV Valor: Significado:
1 backplane
2 porta serial
TimeoutMultiplier SINT GSV Determina o término da temporização de uma conexão e quando
SSV deve ser fechada.
Valor: Significado:
0 conexão interromperá o timeout em 4 vezes a
taxa de atualização padrão)
1 conexão interromperá o timeout em 8 vezes a
taxa de atualização
2 conexão interromperá o timeout em 16 vezes a
taxa de atualização
UnconnectedTimeout DINT GSV Timeout em microssegundos para todas as mensagens não
SSV conectadas. O valor inicial é de 30.000.000 microssegundos (30
segundos).

Para alterar o atributo MESSAGE, siga essas etapas:

1. Use uma instrução GSV para obter o atributo MessageType e


salvá-lo em um tag.

2. Use uma instrução SSV para configurar MessageType em 0.

3. Use uma instrução SSV para configurar um atributo MESSAGE


que você deseja alterar.

4. Use uma instrução SSV para configurar o atributo MessageType


no valor original novamente obtido na etapa 1.

Exemplo: O seguinte exemplo a seguir muda o atributo ConnectionPath, de


forma que a mensagem vá para um controlador diferente.Quando
msg_path estiver energizado, configure o caminho da mensagem

Publicação 1756-RM003F-PT-P - Maio 2002


3-40 Instruções de Entrada/Saída (MSG, GSV, SSV)

msg_1 para o valor de msg_1_path. Isto envia a mensagem para um


controlador diferente.

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

msg_path GSV SSV


0 Get System Value Set System Value
Class name MESSAGE Class name MESSAGE
Instance name msg_1 Instance name msg_1
Attribute Name MessageType Attribute Name MessageType
Dest msg_1_type Source tag_a
2 0

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;

Publicação 1756-RM003F-PT-P - Maio 2002


Instruções de Entrada/Saída (MSG, GSV, SSV) 3-41

Acesso ao objeto MODULE

O objeto MODULE fornece as informações de status sobre um módulo.


Para selecionar um determinado objeto MODULE, configure o operando
Object Name da instrução GSV/SSV no nome do módulo. O módulo
especificado deve estar presente na seção I/O Configuration do
organizador do controlador e deve ter um nome de dispositivo.

Atributo: Tipo de Dados: Instrução: Descrição:


EntryStatus INT GSV Especifica o estado atual da entrada do mapa especificado. Os 12 bits menos
significativos devem ser filtrados pela máscara na execução de uma operação
de comparação. Somente os bits de 12 a 15 são válidos.
Valor: Significado:
16#0000 Standby: o controlador está energizando.
16#1000 Em Falha: quaisquer uma das conexões do objeto
MODULE com a falha do módulo associado. Este valor
não deve ser usado para determinar se o módulo
apresentou falha porque o objeto MODULE sai deste
estado periodicamente ao tentar reconectar-se ao
módulo. Ao invés disso, verifique Running state (16#4000).
Verifique se FaultCode não é igual a 0 para determinar
se um módulo apresenta falha.
Quando estiver na condição de Falha (Faulted), os
atributos FaultCode e FaultInfo
são válidos até que a condição de falha seja corrigida.
16#2000 Validação: o objeto MODULE está verificando a
integridade
do objeto MODULE antes de estabelecer as conexões
para o módulo.
16#3000 Conexão: o objeto MODULE está iniciando as
conexões para o módulo.
16#4000 Em Operação: todas as conexões com o módulo são
estabelecidas e os dados são transferidos com
sucesso.
16#5000 Desligamento: o objeto MODULE está
no processo de desligar todas as conexões para o
módulo.
16#6000 Inibido: o objeto MODULE está inibido (o
bit inibido no atributo Mode está energizado).
16#7000 Na Espera: o objeto-pai MODULE do qual este
objeto MODULE depende não está em operação.
FaultCode INT GSV Número que identifica uma falha no módulo, em caso de ocorrência.
FaultInfo DINT GSV Fornece informações específicas sobre o código de falha do objeto MODULE.
ForceStatus INT GSV Especifica o status dos pontos forçados.
Bit: Significado:
0 pontos forçados instalados (1=sim, 0-não)
1 pontos forçados habilitados (1=sim, 0=não)
2-15 não usado

Publicação 1756-RM003F-PT-P - Maio 2002


3-42 Instruções de Entrada/Saída (MSG, GSV, SSV)

Atributo: Tipo de Dados: Instrução: Descrição:


Instance DINT GSV Fornece o número de instância deste objeto MODULE.
LEDStatus INT GSV Especifica o estado atual do LED de E/S localizado na parte frontal do
controlador.
Valor: Significado:
0 LED desligado: Nenhum objeto MODULE foi
configurado para o controlador (não há módulos na
seção I/O Configuration do organizador do
controlador).
1 Vermelho piscando: Nenhum dos objetos MODULE
está em operação.
2 Verde piscando: Pelo menos um objeto MODULE não
está em operação.
3 Verde permanente: Todos os objetos MODULE estão
em operação.
Nota: Não é possível inserir um nome de objeto com este atributo porque este
atributo se aplica a todo o conjunto de módulos.
Mode INT GSV Especifica o modo atual do objeto MODULE.
SSV Bit: Significado:
0 Se configurado, causa uma falha grave se uma das
conexões do objeto MODULE apresentar falha
enquanto o controlador estiver no modo de operação.
2 Se configurado, faz com que o objeto MODULE seja
introduzido no estado Inibido depois de desligar todas
as conexões do módulo.

Acesso ao objeto MOTIONGROUP

O objeto MOTIONGROUP fornece as informações de status sobre um


grupo de eixos para o servo módulo. Especifique o nome do tag do
grupo de posicionamento (motion) para determinar qual objeto
MOTIONGROUP você quer.

Atributo: Tipo de Dados: Instrução: Descrição:


Instance DINT GSV Fornece o número de exemplo deste objeto MOTION_GROUP.

Publicação 1756-RM003F-PT-P - Maio 2002


Instruções de Entrada/Saída (MSG, GSV, SSV) 3-43

Acesso ao objeto PROGRAM

O objeto PROGRAM fornece as informações de status sobre um


programa. Especifique o nome do programa para determinar qual
objeto PROGRAM você quer.

Atributo: Tipo de Dados: Instrução: Descrição:


DisableFlag SINT GSV Controla essa execução do programa.
SSV Valor: Significado:
0 execução habilitada
1 execução desabilitada
Instance DINT GSV Fornece o número de instância deste objeto PROGRAM.
LastScanTime DINT GSV Tempo que a execução do programa demorou da última vez. O
SSV tempo está em microssegundos.
MajorFaultRecord DINT[11] GSV Registra as falhas graves para este programa
SSV Recomendamos que você crie uma estrutura definida pelo usuário
para simplificar o acesso ao atributo MajorFaultRecord:
Nome Tipo de Dados: Estilo: Descrição:
TimeLow DINT Decimal 32 bits menos significativos de valor de registro de data e hora da falha
TimeHIgh DINT Decimal 32 bits mais significativos de valor de registro de data e hora da falha
Type INT Decimal tipo de falha (programa, E/S etc.)
Code INT Decimal código exclusivo para a falha (depende do tipo de falha)
Info DINT[8] Hexadecimal informação específica sobre a falha (depende do tipo e do código de falha)
MaxScanTime DINT GSV Tempo máximo de execução registrado para este programa. O
SSV tempo está em microssegundos.
MinorFaultRecord DINT[11] GSV Registra as falhas de advertência para este programa
SSV Recomendamos que você crie uma estrutura definida pelo usuário
para simplificar o acesso ao atributo MinorFaultRecord:
Nome Tipo de Dados: Estilo: Descrição:
TimeLow DINT Decimal 32 bits menos significativos de valor de registro de data e hora da falha
TimeHIgh DINT Decimal 32 bits mais significativos de valor de registro de data e hora da falha
Type INT Decimal tipo de falha (programa, E/S etc.)
Code INT Decimal código exclusivo para a falha (depende do tipo de falha)
Info DINT[8] Hexadecimal informações específicas sobre a falha (depende do tipo e do código de falha)
SFCRestart INT GSV não usado - reservado para uso futuro
SSV

Publicação 1756-RM003F-PT-P - Maio 2002


3-44 Instruções de Entrada/Saída (MSG, GSV, SSV)

Acesso ao objeto ROUTINE

O objeto ROUTINE fornece as informações de status sobre uma


rotina. Especifique o nome da rotina para determinar qual objeto
ROUTINE você quer.

Atributo: Tipo de Dados: Instrução: Descrição:


Instance DINT GSV Fornece o número de instância deste objeto ROUTINE.
Valores válidos são 0-65.535.

Acesso ao objeto SERIALPORT

O objeto SERIALPORT fornece uma interface com a porta de


comunicação serial.

Atributo: Tipo de Dados: Instrução: Descrição:


BaudRate DINT GSV Especifica a taxa de transmissão.
Os valores válidos são 110, 300, 600, 1200, 2400, 4800, 9600 e
19200 (padrão).
DataBits SINT GSV Especifica o número de bits de dados por caracter.
Valor: Significado:
7 7 bits de dados (somente ASCII)
8 8 bits de dados (padrão)
Paridade SINT GSV Especifica a paridade.
Valor: Significado:
0 sem paridade (sem padrão)
1 paridade ímpar (somente ASCII)
2 paridade par
RTSOffDelay INT GSV Quantidade de tempo para retardar o desligamento da linha RTS
depois da transmissão do último caracter.
Valor válido 0-32.767. Atraso nas contagens de períodos de 20 ms.
O valor inicial é 0 ms.
RTSSendDelay INT GSV Quantidade de tempo para retardar a transmissão do primeiro
caracter de uma mensagem depois de se energizar a linha RTS.
Valor válido 0-32.767. Atraso nas contagens de períodos de 20 ms.
O valor inicial é 0 ms.
StopBits SINT GSV Especifica o número de bits de parada.
Valor: Significado:
1 1 bit de parada (padrão)
2 2 bits de parada (somente ASCII)
PendingBaudRate DINT SSV Valor pendente para o atributo BaudRate.
PendingDataBits SINT SSV Valor pendente para o atributo DataBits.
PendingParity SINT SSV Valor pendente para o atributo Parity.
PendingRTSOffDelay INT SSV Valor pendente para o atributo RTSOffDelay.
PendingRTSSendDelay INT SSV Valor pendente para o atributo RTSSendDelay.
PendingStopBits SINT SSV Valor pendente para o atributo StopBits.

Publicação 1756-RM003F-PT-P - Maio 2002


Instruções de Entrada/Saída (MSG, GSV, SSV) 3-45

Para aplicar os valores para qualquer um dos atributos pendentes


SERIALPORT:

1. Use uma instrução SSV para definir o valor para o atributo


pendente.

É possível definir a quantidade de atributos que desejar, usando


uma instrução SSV para cada atributo pendente.

2. Use uma instrução MSG para aplicar o valor. A instrução MSG se


aplica para cada atributo pendente configurado. Configure as
instruções MSG da seguinte forma:

Guia MSG Configuration: Campo: Valor:


Configuration Message Type CIP Generic
Service Code 0d hex
Object Type 6f hex
Object ID 1
Object Attribute deixe em branco
Source deixe em branco
Number of Elements 0
Destination deixe em branco
Communication Path percurso de comunicação automático (1,s
onde s = número do slot do controlador)

Publicação 1756-RM003F-PT-P - Maio 2002


3-46 Instruções de Entrada/Saída (MSG, GSV, SSV)

Acesso ao objeto TASK

O objeto TASK fornece as informações de status sobre uma tarefa.


Especifique o nome do programa para determinar qual objeto TASK
você quer.

Atributo: Tipo de Dados: Instrução: Descrição:


Instance DINT GSV Fornece o número de instância deste objeto TASK.
Valores válidos são 0-31.
LastScanTime DINT GSV Tempo que a execução desta tarefa demorou da última vez. O tempo está em
SSV microssegundos.
MaxInterval DINT[2] GSV O tempo máximo de intervalo entre as execuções sucessivas da tarefa. DINT[0]
SSV contém os bits 32 menos significativos do valor; DINT[1] contém os bits 32 mais
significativos do valor;
Um valor de 0 indica 1 ou menos execuções da tarefa.
MaxScanTime DINT GSV Tempo máximo de execução registrado para este programa. O tempo está em
SSV microssegundos.
MinInterval DINT[2] GSV O tempo mínimo de intervalo entre as execuções sucessivas da tarefa. DINT[0]
SSV contém os bits 32 menos significativos do valor; DINT[1] contém os bits 32 mais
significativos do valor;
Um valor de 0 indica 1 ou menos execuções da tarefa.
Priority INT GSV Prioridade relativa dessa tarefa comparada com outras tarefas.
Valores válidos são 0-15.
Rate DINT GSV O intervalo de tempo entre as execuções sucessivas da tarefa. O tempo está em
microssegundos.
StartTime DINT[2] GSV O valor de WALLCLOCKTIME quando a última execução da tarefa foi iniciada.
SSV DINT[0] contém os bits 32 menos significativos do valor; DINT[1] contém os 32 bits
32 mais significativos do valor;
Watchdog DINT GSV Limite de tempo para a execução de todos os programas associados a essa tarefa.
SSV O tempo está em microssegundos.
Se você inserir 0, estes valores serão atribuídos:
Tempo: Tipo de Tarefa:
0,5 s periódico
5,0 s contínuo

Acesso ao objeto WALLCLOCKTIME

O objeto WALLCLOCKTIME fornece um registro de data e hora que o


controlador pode usar para programação.

Publicação 1756-RM003F-PT-P - Maio 2002


Instruções de Entrada/Saída (MSG, GSV, SSV) 3-47

Atributo: Tipo de Dados: Instrução: Descrição:


CSTOffset DINT[2] GSV Desvio positivo do CurrentValue do objeto CST (tempo do sistema coordenado,
SSV consulte a página 3-34). DINT[0] contém os 32 bits menos significativos do
valor; DINT[1] contém os 32 bits mais significativos do valor;
Valor em µsegundos. O valor inicial é 0.
CurrentValue DINT[2] GSV O valor atual de WALLCLOCKTIME. DINT[0] contém os 32 bits menos
SSV significativos do valor; DINT[1] contém os 32 bits mais significativos do valor;
O valor é a quantidade de microssegundos que decorreram desde 0000 hs 1
janeiro de 1972.
Os objetos CST e WALLCLOCKTIME são relacionados matematicamente no
controlador. Por exemplo, se você acrescentar CST CurrentValue e
WALLCLOCKTIME CTSOffset, terá como resultado WALLCLOCKTIME
CurrentValue.
DateTime DINT[7] GSV Data e hora em formato que possibilita a leitura.
SSV DINT[0] ano
DINT[1] representação do mês através de inteiros (1-12)
DINT[2] representação do dia através de inteiros (1-31)
DINT[3] hora (0-23)
DINT[4] minuto (0-59)
DINT[5] segundos (0-59)
DINT[6] microssegundos (0-999.999)

Publicação 1756-RM003F-PT-P - Maio 2002


3-48 Instruções de Entrada/Saída (MSG, GSV, SSV)

Exemplo de Programação Obtenção de informações de falha


GSV/SSV
Os exemplos a seguir usam as instruções GSV para obter informações
de falha.

Exemplo 1: Neste exemplo, as informações de falha do módulo de E/S são obtidas


em disc_in_2 e colocadas nos dados em uma estrutura definida pelo
usuário em disc_in_2_info.

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);

Exemplo 2: Neste exemplo, as informações de status são obtidas sobre o


programa discrete e colocadas nos dados em uma estrutura definida
pelo usuário em discrete_info.

Lógica Ladder

Texto Estruturado

GSV(PROGRAM,DISCRETE,LASTSCANTIME,
discrete_info.LastScanTime);
GSV(PROGRAM,DISCRETE,MAXSCANTIME,discrete_info.MaxScanTime);

Publicação 1756-RM003F-PT-P - Maio 2002


Instruções de Entrada/Saída (MSG, GSV, SSV) 3-49

Exemplo 3: Neste exemplo, as informações de status são obtidas sobre a tarefa


IO_test e colocadas nos dados em uma estrutura definida pelo usuário
em io_test_info.

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);

Configuração de flags de habilitação e desabilitação

O exemplo a seguir usa a instrução SSV para habilitar ou desabilitar


um programa. É possível também, utilizar este método para habilitar
ou desabilitar um módulo E/S, o que é similar à utilização de bits
inibidos em um controlador CLP-5.

Exemplo: Com base no status de SW.1, coloque o valor apropriado no atributo


disableflag do programa discrete.

Lógica Ladder

Publicação 1756-RM003F-PT-P - Maio 2002


3-50 Instruções de Entrada/Saída (MSG, GSV, SSV)

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);

Publicação 1756-RM003F-PT-P - Maio 2002


Capítulo 4

Instruções de Comparação
(CMP, EQU, GEQ, GRT, LEQ, LES, LIM, MEQ, NEQ)

Introdução As instruções de comparação permitem a comparação de valores


através do uso de uma expressão ou uma instrução de comparação
específica.

Se você quiser: Use esta instrução: Disponível nestas linguagens: Consulte a


página:
comparar valores com base em uma expressão CMP lógica ladder 4-2
texto estruturado(1)
testar se dois valores são iguais EQU lógica ladder 4-7
texto estruturado(2)
bloco de funções
testar se um valor é maior ou igual a um segundo valor GEQ lógica ladder 4-10
texto estruturado(1)
bloco de funções
testar se um valor é maior que um segundo valor GRT lógica ladder 4-14
texto estruturado(1)
bloco de funções
testar se um valor é menor ou igual a um segundo valor LEQ lógica ladder 4-18
texto estruturado(1)
bloco de funções
testar se um valor é menor que um segundo valor LES lógica ladder 4-22
texto estruturado(1)
bloco de funções
testar se um valor está entre outros dois valores LIM lógica ladder 4-26
bloco de funções
texto estruturado(1)
passar dois valores por uma máscara e testar se são iguais MEQ lógica ladder 4-32
bloco de funções
texto estruturado(1)
testar se um valor é diferente a um segundo valor NEQ lógica ladder 4-37
texto estruturado(1)
bloco de funções
(1)
Não há instrução de texto estruturado equivalente. Use outra programação de texto estruturado para obter o mesmo resultado. Consulte a descrição da instrução.
(2)
Não há instrução de texto estruturado equivalente. Use o operador em uma expressão.

Você pode comparar valores de diferentes tipos de dados como, por


exemplo, ponto flutuante e inteiro.

Para instruções de lógica ladder, os tipos de dados em negrito


indicam tipos de dados ótimos. Uma instrução executa mais
rapidamente e requer menos memória, se todos os operandos da
instrução usarem o mesmo tipo de dados ótimos, geralmente DINT ou
REAL.

1 Publicação 1756-RM003F-PT-P - Maio 2002


4-2 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

Operando: Tipo: Formato: Descrição:


Expression SINT imediato uma expressão composta por tags e/ou
INT tag valores imediatos separados por operadores
DINT
REAL
string
Um tag SINT ou INT converte em um valor DINT pela extensão de sinal.

Texto Estruturado

O texto estruturado não tem um a instrução CMP, mas você pode


obter o mesmo resultado usando uma construção e expressão
IF...THEN.

IF BOOL_expression THEN
<statement>;
END_IF;

Consulte o Apêndice C para informações de sintaxe de atribuições e


expressões em textos estruturados.

Descrição: Define a expressão CMP usando operadores, tags e valores imediatos.


Use parênteses ( ) para definir as seções das expressões mais
complexas.

A execução de uma instrução CMP é um pouco mais lenta e usa mais


memória que a execução de outras instruções de comparação. A
vantagem da instrução CMP é que a mesma permite a inserção de
expressões complexas em uma instrução.

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.

Condições de Falha: nenhuma

Publicação 1756-RM003F-PT-P - Maio 2002


Instruções de Comparação (CMP, EQU, GEQ, GRT, LEQ, LES, LIM, MEQ, NEQ) 4-3

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

a expressão é
verdadeira saída da condição da
linha é definida como
avaliar a expressão verdadeira

a expressão é falsa

saída da condição da linha


é definida como falsa

fim

postscan A saída da condição da linha é definida como falsa.

Exemplos: Se a instrução CMP encontrar a expressão verdadeira, a saída da


condição da linha será verdadeira.

Caso uma expressão seja inserida sem um operador de comparação


como, por exemplo, value_1 + value_2 ou value_1, a instrução
avaliará a expressão como:

Se a expressão: A saída da condição da linha é definida em:


diferente de zero verdadeira
zero falsa

Publicação 1756-RM003F-PT-P - Maio 2002


4-4 Instruções de Comparação (CMP, EQU, GEQ, GRT, LEQ, LES, LIM, MEQ, NEQ)

Expressões CMP

As expressões das instruções CMP são programadas da mesma forma


que as expressões nas instruções FSC. Use as seções a seguir para
mais informações sobre operadores válidos, formato e seqüência de
operação que são comuns nas duas instruções.

Operadores válidos

Operador: Descrição: Ótimo: Operador: Descrição: Ótimo:


+ adição DINT, REAL DEG radianos em graus DINT, REAL
- subtração/negativo DINT, REAL FRD BCD para inteiro DINT
* multiplicação DINT, REAL LN log neperiano REAL
/ divisão DINT, REAL LOG log base 10 REAL
= igual DINT, REAL MOD módulo DINT, REAL
< menor que DINT, REAL NOT complementação DINT
<= menor ou igual a DINT, REAL OR OR DINT
> maior que DINT, REAL RAD graus em radianos DINT, REAL
<= maior ou igual a DINT, REAL SIN seno REAL
<> diferente de DINT, REAL SQR raiz quadrada DINT, REAL
** expoente (x elevado a DINT, REAL TAN tangente REAL
y)
TOD inteiro para BCD DINT
ABS valor absoluto DINT, REAL
TRN trancar DINT, REAL
ACS arcos co-seno
XOR XOR DINT
AND AND DINT
ASN arco seno
ATN arco tangente
COS co-seno

Formatação de expressões

Para cada operador utilizador, você deve fornecer um ou dois


operandos (tags ou valores imediatos). Use a tabela a seguir para
formatar os operadores e os operandos em uma expressão:

Para operadores Use este formato: Exemplos:


que operam em:
um operando operator(operand) ABS(tag_a)
dois operandos operand_a operator operand_b • tag_b + 5
• tag_c AND tag_d
• (tag_e ** 2) MOD
(tag_f / tag_g)

Publicação 1756-RM003F-PT-P - Maio 2002


Instruções de Comparação (CMP, EQU, GEQ, GRT, LEQ, LES, LIM, MEQ, NEQ) 4-5

Determinação da seqüência da operação

As operações que você escreve na expressão são executadas pela


instrução na seqüência prescrita e não, necessariamente, na ordem
que você as escreveu. É possível suprimir a seqüência da operação
agrupando-se os termos dentro de parênteses, forçando a instrução
para realizar uma operação dentro dos parênteses, antes de outras
operações.

As operações com a mesma seqüência são executadas da esquerda


para a direita.

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

Uso de strings em uma expressão

Use uma expressão em lógica ladder ou em texto estruturado para


comparar os tipos de dados da string. Para usar strings em uma
expressão, siga estas orientações:

• Uma expressão permite que você compare dois tags da string.


• Você não pode inserir caracteres ASCII em uma expressão
diretamente.
• Somente os operadores a seguir são permitidos

Operador: Descrição:
= igual
< menor que
<= menor ou igual a
> maior que
>= maior ou igual a
<> diferente de

Publicação 1756-RM003F-PT-P - Maio 2002


4-6 Instruções de Comparação (CMP, EQU, GEQ, GRT, LEQ, LES, LIM, MEQ, NEQ)

• As strings são iguais se os caracteres corresponderem.


• Os caracteres ASCII são sensíveis ao contexto. A letra “A” ($41)
maiúscula não é igual à letra "a" minúscula ($61).
• Os valores hexadecimais dos caracteres determinam se um
string é menor ou maior que outro. Para o código hexadecimal
de caractere, consulte a parte de trás deste manual.
• Quando duas strings são classificadas em um diretório de
telefones, a seqüência das strings determina qual é maior

Caracteres ASCII Códigos Hex


1ab $31$61$62
m m 1b $31$62
e ai
n or a $41
or q
q u AB $41$42 AB < B
u e
e B $42
a $61 a>B
ab $61$62

Publicação 1756-RM003F-PT-P - Maio 2002


Instruções de Comparação (CMP, EQU, GEQ, GRT, LEQ, LES, LIM, MEQ, NEQ) 4-7

Igual (EQU) A instrução EQU testa se Source A é igual a Source B.

Operandos:

Lógica Ladder

Operando: Tipo: Formato: Descrição:


Source A SINT imediato valor a ser testado em
INT tag relação Source B
DINT
REAL
string
Source B SINT imediato valor a ser testado em
INT tag relação Source A
DINT
REAL
string

• Se você inserir um tag SINT ou INT, o valor converte em um


valor DINT pelo sinal de extensão.
• Valores REAL raramente são absolutamente iguais. Caso seja
necessário determinar a igualdade de dois valores do tipo REAL,
use a instrução LIM.
• Os tipos de dados da string são:
– tipo de dados STRING padrão
– qualquer novo tipo de dados da string que você criar
• Para testar os caracteres de uma string, insira um tag da string
para Source A e Source B.

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.

Consulte o Apêndice C para informações sobre a sintaxe de


expressões de texto estruturado.

Bloco de Funções

Operando: Tipo: Formato: Descrição:


EQU tag FBD_COMPARE estrutura estrutura EQU

Publicação 1756-RM003F-PT-P - Maio 2002


4-8 Instruções de Comparação (CMP, EQU, GEQ, GRT, LEQ, LES, LIM, MEQ, NEQ)

estrutura FBD_COMPARE

Parâmetro de Entrada: Tipo de Dados: Descrição:


EnableIn BOOL Habilita entrada. Se desenergizada, a instrução não é executada e as saídas não são
atualizadas.
Valor inicial está energizado
SourceA REAL Valor para comparar com SourceB.
Válido = qualquer flutuante
SourceB REAL Valor para comparar com SourceA.
Válido = qualquer flutuante
Parâmetro de Saída: Tipo de Dados: Descrição:
EnableOut BOOL A instrução produziu um resultado válido.
Dest BOOL Resultado da instrução. Isto equivale à saída da condição da linha da instrução EQU da
lógica ladder.

Descrição: Use a instrução EQU para comparar dois números ou duas strings de
caracteres ASCII. Quando comparar strings:

• As strings são iguais se os caracteres corresponderem.


• Os caracteres ASCII são sensíveis ao contexto. O "A" maiúsculo
($41) não é igual ao "a" minúsculo ($61).

Flags de Status Aritmético: não afetados

Condições de Falha: nenhuma

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

sim saída da condição da


Source A = Source B; linha é definida como
verdadeira

não

saída da condição da
linha é definida como
falsa

fim

postscan A saída da condição da linha é definida como falsa.

Publicação 1756-RM003F-PT-P - Maio 2002


Instruções de Comparação (CMP, EQU, GEQ, GRT, LEQ, LES, LIM, MEQ, NEQ) 4-9

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

light_a := (value_1 = value_2);

Bloco de Funções

Publicação 1756-RM003F-PT-P - Maio 2002


4-10 Instruções de Comparação (CMP, EQU, GEQ, GRT, LEQ, LES, LIM, MEQ, NEQ)

Maior ou Igual a (GEQ) A instrução GEQ testa se Source A é maior ou igual a Source B.

Operandos:

Lógica Ladder

Operando: Tipo: Formato: Descrição:


Source A SINT imediato valor a ser testado em relação a Source B
INT tag
DINT
REAL
string
Source B SINT imediato valor a ser testado em relação a Source A
INT tag
DINT
REAL
string

• Se você inserir um tag SINT ou INT, o valor converte a um valor


DINT pelo sinal de extensão.
• Tipos de dados da string são:
– tipo de dados STRING padrão
– qualquer novo tipo de dados da string que você criar
• Para testar os caracteres de uma string, insira um tag da string
para Source A e Source B.

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.

Consulte o Apêndice C para informações sobre a sintaxe de


expressões de texto estruturado.

Bloco de Funções

Operando: Tipo: Formato: Descrição:


GEQ tag FBD_COMPARE estrutura estrutura GEQ

Publicação 1756-RM003F-PT-P - Maio 2002


Instruções de Comparação (CMP, EQU, GEQ, GRT, LEQ, LES, LIM, MEQ, NEQ) 4-11

Estrutura FBD_COMPARE

Parâmetro de Entrada: Tipo de Dados: Descrição:


EnableIn BOOL Habilita a entrada. Se desenergizada, a instrução não executa e as saídas não são
atualizadas.
Valor inicial está energizado
SourceA REAL Valor para comparar a SourceB.
Válido = qualquer flutuante
SourceB REAL Valor para comparar a SourceA.
Válido = qualquer flutuante
Parâmetro de Saída: Tipo de Dados: Descrição:
EnableOut BOOL A instrução produziu um resultado válido.
Dest BOOL Resultado da instrução. Isto é equivalente à saída da condição da linha para a instrução
GEQ da lógica ladder.

Descrição: A instrução GEQ testa se Source A é maior ou igual a Source B.

Quando comparar strings:

• Os valores hexadecimais dos caracteres determinam se uma


string é menor ou maior que outro. Para o código hexadecimal
de caractere, consulte a quarta capa deste manual.
• Quando duas strings estão classificadas como em um diretório
de telefone, a ordem das strings determina qual é o maior.

Caracteres ASCII Códigos


Hexadecimais
1ab $31$61$62
m m 1b $31$62
e ai
n or A $41
or q
q u AB $41$42 AB < B
u e
e B $42
a $61 a>B
ab $61$62

Flags de Status Aritmético: não afetados

Condições de Falha: nenhuma

Execução

Publicação 1756-RM003F-PT-P - Maio 2002


4-12 Instruções de Comparação (CMP, EQU, GEQ, GRT, LEQ, LES, LIM, MEQ, NEQ)

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

sim saída da condição da


Source A ≥ Source B linha é definida como
verdadeira

não

saída da condição da
linha é definida como
falsa

fim

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.

Publicação 1756-RM003F-PT-P - Maio 2002


Instruções de Comparação (CMP, EQU, GEQ, GRT, LEQ, LES, LIM, MEQ, NEQ) 4-13

Exemplo: Se value_1 for maior ou igual a value_2, energiza light_b. Se value_1


for menor que value_2, desligue light_a.

Lógica Ladder

Texto Estruturado

light_b := (value_1 >= value_2);

Bloco de Funções

Publicação 1756-RM003F-PT-P - Maio 2002


4-14 Instruções de Comparação (CMP, EQU, GEQ, GRT, LEQ, LES, LIM, MEQ, NEQ)

Maior que (GRT) A instrução GRT testa se Source A é maior que Source B.

Operandos:

Lógica Ladder

Operando: Tipo: Formato: Descrição:


Source A SINT imediato valor a ser testado em relação a Source B
INT tag
DINT
REAL
string
Source B SINT imediato valor a ser testado em relação a Source A
INT tag
DINT
REAL
string

• Se você inserir um tag SINT ou INT, o valor converte em um


valor DINT pelo sinal de extensão.
• Tipos de dados da string são:
– tipo de dados STRING padrão
– qualquer novo tipo de dados da string que você criar
• Para testar os caracteres de uma string, insira um tag da string
para Source A e Source B.

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.

Consulte o Apêndice C para informações sobre a sintaxe de


expressões de texto estruturado.

Bloco de Funções

Operando: Tipo: Formato: Descrição:


GRT tag FBD_COMPARE estrutura estrutura GRT

Publicação 1756-RM003F-PT-P - Maio 2002


Instruções de Comparação (CMP, EQU, GEQ, GRT, LEQ, LES, LIM, MEQ, NEQ) 4-15

estrutura FBD_COMPARE

Parâmetro de Entrada: Tipo de Dados: Descrição:


EnableIn BOOL Habilita entrada. Se desenergizada, a instrução não é executada e as saídas não são
atualizadas.
Valor inicial está energizado
SourceA REAL Valor para comparar com SourceB.
Válido = qualquer flutuante
SourceB REAL Valor para comparar com SourceA.
Válido = qualquer flutuante
Parâmetro de Saída: Tipo de Dados: Descrição:
EnableOut BOOL A instrução produziu um resultado válido.
Dest BOOL Resultado da instrução. Isto equivale à saída da condição da linha para instrução
GRT da lógica ladder.

Descrição: A instrução GRT testa se Source A é maior ou igual a Source B.

Ao comparar strings:

• Os valores hexadecimais dos caracteres determinam se uma


string é menor ou maior que outro. Para o código hexadecimal
de caractere, consulte a quarta capa deste manual.
• Quando duas strings estão classificadas como em um diretório
de telefone, a ordem dos strings determina qual é o maior.

Caracteres ASCII Códigos


Hexadecimais
1ab $31$61$62
m m 1b $31$62
e ai
n or A $41
or q
q u AB $41$42 AB < B
u e
e B $42
a $61 a>B
ab $61$62

Flags de Status Aritmético: não afetados

Condições de Falha: nenhuma

Execução

Publicação 1756-RM003F-PT-P - Maio 2002


4-16 Instruções de Comparação (CMP, EQU, GEQ, GRT, LEQ, LES, LIM, MEQ, NEQ)

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

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.

Publicação 1756-RM003F-PT-P - Maio 2002


Instruções de Comparação (CMP, EQU, GEQ, GRT, LEQ, LES, LIM, MEQ, NEQ) 4-17

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

light_1 := (value_1 > value_2);

Bloco de Funções

Publicação 1756-RM003F-PT-P - Maio 2002


4-18 Instruções de Comparação (CMP, EQU, GEQ, GRT, LEQ, LES, LIM, MEQ, NEQ)

Menor ou Igual a (LEQ) A instrução LEQ testa se Source A é menor ou igual a Source B.

Operandos:

Lógica Ladder

Operando: Tipo: Formato: Descrição:


Source A SINT imediato valor a ser testado em relação Source B
INT tag
DINT
REAL
string
Source B SINT imediato valor a ser testado em relação Source A
INT tag
DINT
REAL
string

• Se você inserir um tag SINT ou INT, o valor converte em um


valor DINT pelo sinal de extensão.
• Tipos de dados da string são:
– tipo de dados STRING padrão
– qualquer novo tipo de dados da string que você criar
• Para testar os caracteres de uma string, insira um tag da string
para Source A e Source B.

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.

Consulte o Apêndice C para informações sobre a sintaxe de


expressões de texto estruturado.

Bloco de Funções

Operando: Tipo: Formato: Descrição:


LEQ tag FBD_COMPARE estrutura estrutura LEQ

Publicação 1756-RM003F-PT-P - Maio 2002


Instruções de Comparação (CMP, EQU, GEQ, GRT, LEQ, LES, LIM, MEQ, NEQ) 4-19

estrutura FBD_COMPARE

Parâmetro de Entrada: Tipo de Dados: Descrição:


EnableIn BOOL Habilita entrada. Se desenergizada, a instrução não é executada e as saídas não são
atualizadas.
Valor inicial está energizado
SourceA REAL Valor para comparar a SourceB.
Válido = qualquer flutuante
SourceB REAL Valor para comparar a SourceA.
Válido = qualquer flutuante
Parâmetro de Saída: Tipo de Dados: Descrição:
EnableOut BOOL A instrução produziu um resultado válido.
Dest BOOL Resultado da instrução. Isto equivale à saída da condição da saída para a instrução
LEQ de lógica ladder.

Descrição: A instrução LEQ testa se Source A é menor ou igual a Source B.

Quando comparar strings:

• Os valores hexadecimais dos caracteres determinam se uma


string é menor ou maior que outra. Para o código hexadecimal
de caractere, consulte a quarta capa deste manual.
• Quando duas strings estão classificadas como em um diretório
de telefone, a ordem das strings determina qual é maior.

Caracteres ASCII Códigos


Hexadecimais
1ab $31$61$62
m m 1b $31$62
e ai
n or A $41
or q
q u AB $41$42 AB < B
u e
e B $42
a $61 a>B
ab $61$62

Flags de Status Aritmético: não afetados

Condições de Falha: nenhuma

Execução

Publicação 1756-RM003F-PT-P - Maio 2002


4-20 Instruções de Comparação (CMP, EQU, GEQ, GRT, LEQ, LES, LIM, MEQ, NEQ)

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

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.

Publicação 1756-RM003F-PT-P - Maio 2002


Instruções de Comparação (CMP, EQU, GEQ, GRT, LEQ, LES, LIM, MEQ, NEQ) 4-21

Exemplo: Se value_1 for menor ou igual a value_2, energize light_2. Se value_1


for maior que value_2, desenergize light_2.

Lógica Ladder

Texto Estruturado

light_2 := (value_1 <= value_2);

Bloco de Funções

Publicação 1756-RM003F-PT-P - Maio 2002


4-22 Instruções de Comparação (CMP, EQU, GEQ, GRT, LEQ, LES, LIM, MEQ, NEQ)

Menor Que (LES) A instrução LES testa se Source A é menor que Source B.

Operandos:

Lógica Ladder

Operando: Tipo: Formato: Descrição:


Source A SINT imediato valor a ser testado em relação a Source B
INT tag
DINT
REAL
string
Source B SINT imediato valor a ser testado em relação a Source A
INT tag
DINT
REAL
string

• Se você inserir um tag SINT ou INT, o valor converte em um


valor DINT pelo sinal de extensão.
• Tipos de dados da string são:
– tipo de dados STRING padrão
• qualquer novo tipo de dados da string que você criar
• Para testar os caracteres de uma string, insira um tag da string
para Source A e Source B.

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.

Consulte o Apêndice C para informações sobre a sintaxe de


expressões de texto estruturado.

Bloco de Funções

Operando: Tipo: Formato: Descrição:


LES tag FBD_COMPARE estrutura estrutura LES

Publicação 1756-RM003F-PT-P - Maio 2002


Instruções de Comparação (CMP, EQU, GEQ, GRT, LEQ, LES, LIM, MEQ, NEQ) 4-23

Estrutura FBD_COMPARE

Parâmetro de Entrada: Tipo de Dados: Descrição:


EnableIn BOOL Habilita entrada. Se desenergizada, a instrução não é executada e as saídas não são
atualizadas.
Valor inicial está energizado
SourceA REAL Valor para comparar a SourceB.
Válido = qualquer flutuante
SourceB REAL Valor para comparar com SourceA.
Válido = qualquer flutuante
Parâmetro de Saída: Tipo de Dados: Descrição:
EnableOut BOOL A instrução produziu um resultado válido.
Dest BOOL Resultado da instrução. Isto equivale à saída da condição da linha da instrução LES da
lógica ladder.

Descrição: A instrução LES testa se Source A é menor que Source B.

Quando comparar strings:

• Os valores hexadecimais dos caracteres determinam se uma


string é menor ou maior que outra. Para o código hexadecimal
de caractere, consulte a quarta capa deste manual.
• Quando duas strings estão classificadas como em um diretório
de telefone, a ordem das strings determina qual é maior.

Caracteres ASCII Códigos


Hexadecimais
1ab $31$61$62
m m 1b $31$62
e ai
n or A $41
or q
q u AB $41$42 AB < B
u e
e B $42
a $61 a>B
ab $61$62

Flags de Status Aritmético: não afetados

Condições de Falha: nenhuma

Execução

Publicação 1756-RM003F-PT-P - Maio 2002


4-24 Instruções de Comparação (CMP, EQU, GEQ, GRT, LEQ, LES, LIM, MEQ, NEQ)

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

sim saída da condição da


Source A * Source B linha é definida como
verdadeira

não

saída da condição da
linha é definida como
falsa

fim

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 é falso EnableOut é desenergizado.
EnableIn é verdadeiro A instrução executa.
EnableOut está energizado.
postscan Nenhuma ação tomada.

Publicação 1756-RM003F-PT-P - Maio 2002


Instruções de Comparação (CMP, EQU, GEQ, GRT, LEQ, LES, LIM, MEQ, NEQ) 4-25

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

light_3 := (value_1 < value_2);

Bloco de Funções

Publicação 1756-RM003F-PT-P - Maio 2002


4-26 Instruções de Comparação (CMP, EQU, GEQ, GRT, LEQ, LES, LIM, MEQ, NEQ)

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

Operando: Tipo: Formato: Descrição:


Low Limit SINT imediato valor do limite inferior
INT tag
DINT
REAL
Um tag SINT ou INT é convertido para um valor DINT pela extensão de
sinal.
Test SINT imediato valor de acordo com o teste
INT tag
DINT
REAL
Um tag SINT ou INT é convertido para um valor DINT pela extensão de
sinal.
High Limit SINT imediato valor do limite superior
INT tag
DINT
REAL
Um tag SINT ou INT é convertido para um valor DINT pela extensão de
sinal.

Texto Estruturado

Texto estruturado não tem uma instrução LIM, mas é possível obter os
mesmos resultados usando texto estruturado.

IF (LowLimit <= HighLimit AND


(Test >= LowLimit AND Test <= HighLimit)) OR
(LowLimit >= HighLimit AND
(Test <= LowLimit OR Test >= HighLimit)) THEN
<statement>;

END_IF;

Bloco de Funções

Operando: Tipo: Formato: Descrição:


LIM tag FBD_LIMIT estrutura estrutura LIM

Publicação 1756-RM003F-PT-P - Maio 2002


Instruções de Comparação (CMP, EQU, GEQ, GRT, LEQ, LES, LIM, MEQ, NEQ) 4-27

Estrutura FBD_LIMIT

Parâmetro de Entrada: Tipo de Dados: Descrição:


EnableIn BOOL Se desenergizada, a instrução não é executada e as saídas não são atualizadas.
Se energizada, a instrução é executada como descrito em Execution.
Valor inicial está energizado
LowLimit REAL Valor do limite inferior.
Válido = qualquer flutuante
Test REAL Valor para comparar aos limites
Válido = qualquer flutuante
Parâmetro de Saída: Tipo de Dados: Descrição:
EnableOut BOOL A instrução produziu um resultado válido.
Dest BOOL Resultado da instrução. Isto equivale à saída da condição da linha para a instrução
LIM da lógica ladder.
HighLimit REAL Valor do limite superior.
Válido = qualquer flutuante

Descrição: A instrução LIM testa se o valor de Test está dentro da faixa do Limite
Inferior ao Limite Superior.

Se o Limite E o valor de Teste for: A saída da condição da linha


Inferior: é definida em:
≤ limite superior igual a ou entre os limites verdadeira
diferente ou fora dos limites falsa
≥limite superior igual a ou fora dos limites verdadeira
diferente ou dentro dos limites falsa

Os inteiros com sinal mudam do número positivo máximo para o


número negativo máximo quando o bit mais significativo estiver
energizado. Por exemplo, em inteiros com 16 bits (tipo INT), o inteiro
positivo máximo é 32.767, que é representado em hexadecimal como
16#7FFF (bits 0 a 14 estão todos energizados). Se você incrementar esse
número em um, o resultado é 16#8000 (bit 15 está energizado). Para
inteiros com sinal, o hexadecimal 16#8000 é igual ao decimal -32.768.
Incremente a partir desse ponto até que todos os 16 bits estejam
energizados e terminem em 16#FFFF, que é igual ao decimal -1.

Publicação 1756-RM003F-PT-P - Maio 2002


4-28 Instruções de Comparação (CMP, EQU, GEQ, GRT, LEQ, LES, LIM, MEQ, NEQ)

Isto pode ser representado como uma linha de número circular


(consulte os seguintes diagramas). A instrução LIM começa no Limite
Inferior e incrementa no sentido horário até atingir o Limite Superior.
Qualquer valor de teste na faixa de sentido horário, desde o Limite
Inferior até o Limite Superior define a saída da condição da linha
como verdadeira. Qualquer valor de teste na faixa de sentido horário
desde o Limite Superior até o Limite Inferior define a saída da
condição da linha como falsa.
Limite Inferior ≤ Limite Superior Limite Inferior * Limite Superior
A instrução é verdadeira se o valor de teste A instrução é verdadeira se o valor de teste for
for igual ou situar-se entre os limites igual ou estiver fora da faixa entre os limites
superior e inferior. superior e inferior.

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

Flags de Status Aritmético: não afetados

Condições de Falha: nenhuma

Execução

Publicação 1756-RM003F-PT-P - Maio 2002


Instruções de Comparação (CMP, EQU, GEQ, GRT, LEQ, LES, LIM, MEQ, NEQ) 4-29

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

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 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.

Exemplo 1: Limite Inferior * Limite Superior


Quando 0 ≤ value ≥ 100, energiza light_1. Se value < 0 ou value >100,
desenergize light_1.

Lógica Ladder

Publicação 1756-RM003F-PT-P - Maio 2002


4-30 Instruções de Comparação (CMP, EQU, GEQ, GRT, LEQ, LES, LIM, MEQ, NEQ)

Texto Estruturado

IF (value <= 100 AND(value >= 0 AND value <= 100)) OR


(value >= 100 AND value <= 0 OR value >= 100)) THEN
light_1 := 1;
ELSE
light_1 := 0;

END_IF;

Bloco de Funções

Publicação 1756-RM003F-PT-P - Maio 2002


Instruções de Comparação (CMP, EQU, GEQ, GRT, LEQ, LES, LIM, MEQ, NEQ) 4-31

Exemplo 2: Limite Inferior ≥ Limite Superior


Quando value ≥ 0 ou value ≤ −100, energiza light_1. Se value < 0 ou
value >−100, desenergize light_1.

Lógica Ladder

Texto Estruturado

IF (0 <= -100 AND value >= 0 AND value <= -100)) OR


(0 >= -100 AND(value <= 0 OR value >= -100)) THEN
light_1 := 1;
ELSE
light_1 := 0;

END_IF;

Bloco de Funções

Publicação 1756-RM003F-PT-P - Maio 2002


4-32 Instruções de Comparação (CMP, EQU, GEQ, GRT, LEQ, LES, LIM, MEQ, NEQ)

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

Operando: Tipo: Formato: Descrição:


Source SINT imediato valor para ser testado comparando-se a
INT tag Compare
DINT
Um tag SINT ou INT é convertido para um valor DINT por preenchimento
com zero.
Mask SINT imediato define que bits são bloqueados ou os que
INT tag passam
DINT
Um tag SINT ou INT é convertido para um valor DINT por preenchimento
com zero.
Compare SINT imediato valor a ser testado em relação a Source
INT tag
DINT
Um tag SINT ou INT é convertido para um valor DINT por preenchimento
com zero.

Texto Estruturado

Texto estruturado não tem uma instrução MEQ, mas é possível obter
os mesmos resultados usando texto estruturado.

IF (Source AND Mask) = (Compare AND Mask) THEN


<statement>;
END_IF;

Bloco de Funções

Operando: Tipo: Formato: Descrição:


MEQ tag FBD_MASK_EQUAL estrutura estrutura MEQ

Publicação 1756-RM003F-PT-P - Maio 2002


Instruções de Comparação (CMP, EQU, GEQ, GRT, LEQ, LES, LIM, MEQ, NEQ) 4-33

estrutura FBD_MASK_EQUAL

Parâmetro de Entrada: Tipo de Dados: Descrição:


EnableIn BOOL Se desenergizado, a instrução não é executada e as saídas não são atualizadas.
Se energizado, a instrução é executada como descrito em Execution.
Valor inicial está energizado
Source DINT Valor para testar com Compare.
Válido = qualquer inteiro
Mask DINT Define quais bits bloquear (máscara).
Válido = qualquer inteiro
Compare DINT Comparação de valor.
válido = qualquer inteiro
Parâmetro de Saída: Tipo de Dados: Descrição:
EnableOut BOOL A instrução produziu um resultado válido.
Dest BOOL Resultado da instrução. Isto equivale à saída da condição da linha para a instrução
MEQ de lógica ladder.

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.

Se houver uma combinação dos tipos de dados de inteiros, a instrução


preencherá os bits mais significativos dos tipos de dados de inteiros
menores com 0s, de forma que fiquem com o mesmo tamanho dos
tipos de dados maiores.

Inserção de um valor de máscara imediato

Ao inserir uma máscara, o software de programação retorna ao


padrão dos valores decimais. Caso você queira inserir uma máscara
usando outro formato, coloque o prefixo correto antes do valor.

Prefixo: Descrição:
16# hexadecimal
por exemplo: 16#0F0F
8# octal
por exemplo: 8#16
2# binário
por exemplo: 2#00110011

Flags de Status Aritmético: não afetados

Condições de Falha: nenhuma

Execução

Publicação 1756-RM003F-PT-P - Maio 2002


4-34 Instruções de Comparação (CMP, EQU, GEQ, GRT, LEQ, LES, LIM, MEQ, NEQ)

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

sim saída da condição da


fonte mascarada = linha é definida como
comparação verdadeira
mascarada

não

saída da condição da
linha é definida como
falsa

fim

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 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.

Publicação 1756-RM003F-PT-P - Maio 2002


Instruções de Comparação (CMP, EQU, GEQ, GRT, LEQ, LES, LIM, MEQ, NEQ) 4-35

Exemplo 1: Se value_1 mascarado for igual a value_2 mascarado, energize


light_1. Se a value_1 mascarada não for igual a value_2 mascarada,
desligue light_1. Este exemplo mostra que os valores mascarados são
iguais. Um 0 na máscara impede que ela compare aquele bit
(mostrado por x no exemplo).

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

value_1 0 1 0 1 0 1 0 1 1 1 1 1 x x x x value_2 mascarado 0 1 0 1 0 1 0 1 1 1 1 1 x x x x


mascarado

Lógica Ladder

Texto Estruturado

light_1 := ((value_1 AND mask_1)=(value_2 AND mask_2));

Bloco de Funções

Publicação 1756-RM003F-PT-P - Maio 2002


4-36 Instruções de Comparação (CMP, EQU, GEQ, GRT, LEQ, LES, LIM, MEQ, NEQ)

Exemplo 2: Se value_1 mascarado for igual a value_2 mascarado, energize


light_1. Se value_1 mascarado não for igual a value_2 mascarado,
desligue light_1. Este exemplo mostra que os valores mascarados não
são iguais. Um 0 na máscara impede que ela compare aquele bit
(mostrado por x no exemplo).

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

value_1 x x x x x x x x x x x x 1 1 1 1 value_2 mascarado x x x x x x x x x x x x 0 0 0 0


mascarado

Lógica Ladder

Texto Estruturado

light_1 := ((value_1 AND mask_1)=(value_2 AND mask_2));

Bloco de Funções

Publicação 1756-RM003F-PT-P - Maio 2002


Instruções de Comparação (CMP, EQU, GEQ, GRT, LEQ, LES, LIM, MEQ, NEQ) 4-37

Diferente de (NEQ) A instrução NEQ testa se Source A é diferente de Source B.

Operandos:

Lógica Ladder

Operando: Tipo: Formato: Descrição:


Source A SINT imediato valor a ser testado em relação Source B
INT tag
DINT
REAL
string
Source B SINT imediato valor a ser testado em relação Source A
INT tag
DINT
REAL
string

• Se você inserir um tag SINT ou INT, o valor converte a um valor


DINT pelo sinal de extensão.
• Tipos de dados da string são:
– tipo de dados STRING padrão
– qualquer novo tipo de dados da string que você criar
• Para testar os caracteres de uma string, insira um tag da string
para Source A e Source B.

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.

Consulte o Apêndice C para informações sobre a sintaxe de


expressões de texto estruturado.

Bloco de Funções

Operando: Tipo: Formato: Descrição:


NEQ tag FBD_COMPARE estrutura estrutura NEQ

Publicação 1756-RM003F-PT-P - Maio 2002


4-38 Instruções de Comparação (CMP, EQU, GEQ, GRT, LEQ, LES, LIM, MEQ, NEQ)

estrutura FBD_COMPARE

Parâmetro de Entrada: Tipo de Dados: Descrição:


EnableIn BOOL Habilita entrada. Se desenergizada, a instrução não executa e as saídas não são
atualizadas.
Valor inicial está energizado
SourceA REAL Valor para comparar com SourceB.
Válido = qualquer flutuante
SourceB REAL Valor para comparar com SourceA.
Válido = qualquer flutuante
Parâmetro de Saída: Tipo de Dados: Descrição:
EnableOut BOOL A instrução produziu um resultado válido.
Dest BOOL Resultado da instrução. Isto equivale à saída da condição da linha para a instrução
NEQ de lógica ladder.

Descrição: A instrução NEQ testa se Source A é diferente de Source B.

Quando comparar strings:

• As strings são diferentes se algum caractere não corresponder.


• Os caracteres ASCII são sensíveis ao contexto. O "A" maiúsculo
($41) não é igual ao "a" minúsculo ($61).

Caracteres ASCII Códigos


Hexadecimais
1ab $31$61$62
m m 1b $31$62
e ai
n or A $41
or q
q u AB $41$42 AB < B
u e
e B $42
a $61 a>B
ab $61$62

Flags de Status Aritmético: não afetados

Condições de Falha: nenhuma

Execução

Publicação 1756-RM003F-PT-P - Maio 2002


Instruções de Comparação (CMP, EQU, GEQ, GRT, LEQ, LES, LIM, MEQ, NEQ) 4-39

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

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.

Publicação 1756-RM003F-PT-P - Maio 2002


4-40 Instruções de Comparação (CMP, EQU, GEQ, GRT, LEQ, LES, LIM, MEQ, NEQ)

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

light_4 := (value_1 <> value_2);

Bloco de Funções

Publicação 1756-RM003F-PT-P - Maio 2002


Capítulo 5
Instruções de Cálculo/Matemáticas
(CPT, ADD, SUB, MUL, DIV, MOD, SQR, SQRT, NEG, ABS)

Introdução As instruções de cálculo/matemáticas avaliam as operações aritméticas


usando uma expressão ou uma instrução aritmética específica.
Se você quiser: Use esta instrução: Disponível nessas linguagens: Consulte página:
avaliar uma expressão CPT lógica ladder 5-2
texto estruturado(1)
somar dois valores ADD lógica ladder 5-5
texto estruturado(2)
bloco de funções
subtrair dois valores SUB lógica ladder 5-8
texto estruturado(2)
bloco de funções
multiplicar dois valores MUL lógica ladder 5-11
texto estruturado(2)
bloco de funções
dividir dois valores DIV lógica ladder 5-14
texto estruturado(2)
bloco de funções
determinar o resto após a divisão de um MOD lógica ladder 5-18
valor por outro texto estruturado(2)
bloco de funções
calcular a raiz quadrada de um valor SQR lógica ladder 5-21
SQRT(3) texto estruturado
bloco de funções
considerar o sinal oposto de um valor NEG lógica ladder 5-24
texto estruturado(2)
bloco de funções
considerar o valor absoluto de um valor ABS lógica ladder 5-26
texto estruturado
bloco de funções
(1)
Não há instrução de texto estruturado equivalente. Use outra programação de texto estruturado para alcançar o mesmo resultado. Veja a descrição para a instrução.
(2)
Não há instrução de texto estruturado equivalente. Use o operador em uma expressão.
(3)
Texto estruturado somente.

É possível combinar tipos de dados, mas perda de precisão e erros de


arredondamentos podem ocorrer, bem como demora na execução da
instrução. Verifique o bit S:V para observar se o resultado foi
truncado.

Para instruções de lógica ladder, os tipos de dados em negrito


indicam tipos de dados otimizados. Uma instrução executa mais
rapidamente e requer menos memória se todos os operandos da
instrução usarem o mesmo tipo de dados otimizados, geralmente,
DINT ou REAL.

1 Publicação 1756-RM003F-PT-P - Maio 2002


5-2 Instruções de Cálculo/Matemáticas (CPT, ADD, SUB, MUL, DIV, MOD, SQR, SQRT, NEG, ABS)

Cálculo (CPT) A instrução CPT realiza as operações aritméticas definidas na expressão.

Operandos:

Lógica Ladder

Operando: Tipo: Formato: Descrição:


Destination SINT tag tag para armazenar o resultado
INT
DINT
REAL
Expression SINT imediato uma expressão composta por tags e/ou valores
INT tag imediatos separados por operadores
DINT
REAL
Um tag SINT ou INT é convertido para um valor DINT pela extensão de sinal.

Texto Estruturado

O texto estruturado não possui uma instrução CPT, mas é possível


alcançar os mesmos resultados usando um atributo e expressão.

destination := numeric_expresion;

Consulte ApêndiceC para informações sobre a sintaxe de atributos e


expressões no texto estruturado.

Descrição: A instrução CPT realiza as operações aritméticas definidas na


expressão. Quando habilitada, a instrução CPT avalia a expressão
específica e coloca o resultado em Destination.

A execução de uma instrução CPT é um pouco mais lenta e usa mais


memória do que a execução de outras instruções de
cálculo/matemáticas. A vantagem da instrução CPT é que a mesma
permite a inserção de expressões complexas em uma instrução.

DICA Não há limite para o comprimento de uma


expressão.

Flags de Status Aritmético: Os flags de status aritmético são afetados.

Condições de Falha: nenhuma

Publicação 1756-RM003F-PT-P - Maio 2002


Instruções de Cálculo/Matemáticas (CPT, ADD, SUB, MUL, DIV, MOD, SQR, SQRT, NEG, ABS) 5-3

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 A instrução avalia Expression 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.

Exemplo 1: Quando habilitada, a instrução CPT avalia o value_1 multiplicado por


5 e divide esse resultado pelo resultado do value_2 dividido por 7 e
coloca o resultado final em result_1.

Exemplo 2: Quando habilitada, a instrução CPT trunca float_value_1 e


float_value_2, eleva float_value_2 truncado ao quadrado, divide por
float_value_1 truncado pelo resultado e armazena o resto dessa
operação da divisão em float_value_result_cpt.

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

Publicação 1756-RM003F-PT-P - Maio 2002


5-4 Instruções de Cálculo/Matemáticas (CPT, ADD, SUB, MUL, DIV, MOD, SQR, SQRT, NEG, ABS)

Formatação de expressões

Para cada operador utilizador, você deve fornecer um ou dois


operandos (tags ou valores imediatos). Use a tabela a seguir para
formatar os operadores e os operandos em uma expressão:

Para operadores Use este formato: Exemplos:


que operam em:
um operando operator(operand) ABS(tag_a)
dois operandos operand_a operator operand_b • tag_b + 5
• tag_c AND tag_d
• (tag_e ** 2) MOD
(tag_f / tag_g)

Determinação da seqüência da operação

As operações que você escreve na expressão são executadas pela


instrução na seqüência prescrita e não, necessariamente, na ordem
que você as escreveu. É possível suprimir a seqüência da operação
agrupando-se os termos dentro de parênteses, forçando a instrução
para realizar uma operação dentro dos parênteses, antes de outras
operações.

As operações com a mesma seqüência são executadas da esquerda


para a direita.

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

Publicação 1756-RM003F-PT-P - Maio 2002


Instruções de Cálculo/Matemáticas (CPT, ADD, SUB, MUL, DIV, MOD, SQR, SQRT, NEG, ABS) 5-5

Adição (ADD) A instrução ADD soma Source A e Source B e coloca o resultado em


Destination

Operandos:

Lógica Ladder

Operando: Tipo: Formato: Descrição:


Source A SINT imediato valor a ser somado à Source B
INT tag
DINT
REAL
Um tag SINT ou INT é convertido para um valor DINT pela extensão de
sinal.
Source B SINT imediato valor a ser adicionado à Source A
INT tag
DINT
REAL
Um tag SINT ou INT é convertido para um valor DINT pela extensão de
sinal.
Destination SINT tag tag para armazenar o resultado
INT
DINT
REAL

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.

Consulte ApêndiceC para informações sobre a sintaxe de expressões


no texto estruturado.

Bloco de Funções

Operando: Tipo: Formato: Descrição:


tag ADD FBD_MATH estrutura estrutura ADD

Publicação 1756-RM003F-PT-P - Maio 2002


5-6 Instruções de Cálculo/Matemáticas (CPT, ADD, SUB, MUL, DIV, MOD, SQR, SQRT, NEG, ABS)

Estrutura FBD_MATH

Parâmetro de Entrada: Tipo de Dados: Descrição:


EnableIn BOOL Habilita entrada. Se desenergizada, a instrução não executa e as saídas não são
atualizadas.
Valor inicial é energizado
SourceA REAL Valor para adicionar a SourceB.
Válido = qualquer flutuante
SourceB REAL Valor para adicionar a SourceA.
Válido = qualquer flutuante
Parâmetro de Saída: Tipo de Dados: Descrição:
EnableOut BOOL A instrução produziu um resultado válido.
Dest REAL Resultado da instrução matemática. Os flags de status aritmético são energizados para
esta saída.

Descrição: A instrução ADD soma Source A e Source B e coloca o resultado em


Destination

Flags de Status Aritmético: Os flags de status aritmético são afetados.

Condições de Falha: nenhuma

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.

Publicação 1756-RM003F-PT-P - Maio 2002


Instruções de Cálculo/Matemáticas (CPT, ADD, SUB, MUL, DIV, MOD, SQR, SQRT, NEG, ABS) 5-7

Exemplo: Adicione float_value_1 a float_value_2 e coloque o resultado em


add_result.

Lógica Ladder

Texto Estruturado

add_result := float_value_1 + float_value_2;

Bloco de Funções

Publicação 1756-RM003F-PT-P - Maio 2002


5-8 Instruções de Cálculo/Matemáticas (CPT, ADD, SUB, MUL, DIV, MOD, SQR, SQRT, NEG, ABS)

Subtração (SUB) A instrução SUB subtrai Source B de Source A e coloca o resultado em


Destination

Operandos:

Lógica Ladder

Operando: Tipo: Formato: Descrição:


Source A SINT imediato valor a partir do qual se subtrai a FonteB
INT tag
DINT
REAL
Um tag SINT ou INT é convertido para um valor DINT pela extensão de
sinal.
Source B SINT imediato valor a ser subtraído de Source A
INT tag
DINT
REAL
Um tag SINT ou INT é convertido para um valor DINT pela extensão de
sinal.
Destination SINT tag tag para armazenar o resultado
INT
DINT
REAL

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.

Consulte ApêndiceC para informações sobre a sintaxe de expressões


no texto estruturado.

Bloco de Funções

Operando: Tipo: Formato: Descrição:


tag SUB FBD_MATH estrutura estrutura SUB

Publicação 1756-RM003F-PT-P - Maio 2002


Instruções de Cálculo/Matemáticas (CPT, ADD, SUB, MUL, DIV, MOD, SQR, SQRT, NEG, ABS) 5-9

Estrutura FBD_MATH

Parâmetro de Tipo de Dados: Descrição:


Entrada:
EnableIn BOOL Habilita entrada. Se desenergizado, a instrução não executa e as saídas não são atualizadas.
Valor inicial é energizado
SourceA REAL Valor do qual se subtrai SourceB.
Válido = qualquer flutuante
SourceB REAL Valor do qual se subtrai SourceA.
Válido = qualquer flutuante
Parâmetro de Saída: Tipo de Dados: Descrição:
EnableOut BOOL A instrução produziu um resultado válido.
Dest REAL Resultado da instrução matemática. Os flags de status aritmético são energizados para esta
saída.

Descrição: A instrução SUB subtrai Source B de Source A e coloca o resultado em


Destination

Flags de Status Aritmético: Os flags de status aritmético são afetados.

Condições de Falha: nenhuma

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.

Publicação 1756-RM003F-PT-P - Maio 2002


5-10 Instruções de Cálculo/Matemáticas (CPT, ADD, SUB, MUL, DIV, MOD, SQR, SQRT, NEG, ABS)

Exemplo: Subtraia float_value_2 de float_value_1 e coloque o resultado em


subtract_result.

Lógica Ladder

Texto Estruturado

subtract_result := float_value_1 - float_value_2;

Bloco de Funções

Publicação 1756-RM003F-PT-P - Maio 2002


Instruções de Cálculo/Matemáticas (CPT, ADD, SUB, MUL, DIV, MOD, SQR, SQRT, NEG, ABS) 5-11

Multiplicação (MUL) A instrução MUL multiplica Source A por Source B e coloca o


resultado em Destination

Operandos:

Lógica Ladder

Operando: Tipo: Formato: Descrição:


Source A SINT imediato valor do multiplicando
INT tag
DINT
REAL
Um tag SINT ou INT é convertido para um valor DINT pela extensão de
sinal.
Source B SINT imediato valor do multiplicador
INT tag
DINT
REAL
Um tag SINT ou INT é convertido para um valor DINT pela extensão de
sinal.
Destination SINT tag tag para armazenar o resultado
INT
DINT
REAL

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.

Consulte ApêndiceC para informações sobre a sintaxe de expressões


no texto estruturado.

Bloco de Funções

Operando: Tipo: Formato: Descrição:


tag MUL FBD_MATH estrutura estrutura MUL

Publicação 1756-RM003F-PT-P - Maio 2002


5-12 Instruções de Cálculo/Matemáticas (CPT, ADD, SUB, MUL, DIV, MOD, SQR, SQRT, NEG, ABS)

Estrutura FBD_MATH

Parâmetro de Entrada: Tipo de Dados: Descrição:


EnableIn BOOL Habilita entrada. Se desenergizado, a instrução não executa e as saídas não são
atualizadas.
Valor inicial é energizado
Source A REAL Valor do multiplicando.
Válido = qualquer flutuante
Source B REAL Valor do multiplicador.
Válido = qualquer flutuante
Parâmetro de Saída: Tipo de Dados: Descrição:
EnableOut BOOL A instrução produziu um resultado válido.
Dest REAL Resultado da instrução matemática. Os flags de status aritmético são energizados para
esta saída.

Descrição: A instrução MUL multiplica Source A por Source B e coloca o


resultado em Destination

Flags de Status Aritmético: Os flags de status aritmético são afetados.

Condições de Falha: nenhuma

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.

Publicação 1756-RM003F-PT-P - Maio 2002


Instruções de Cálculo/Matemáticas (CPT, ADD, SUB, MUL, DIV, MOD, SQR, SQRT, NEG, ABS) 5-13

Exemplo: Multiplique float_value_1 por float_value_2 e coloque o resultado em


multiply_result.

Lógica Ladder

Texto Estruturado

multiply_result := float_value_1 ∗ float_value_2;

Bloco de Funções

Publicação 1756-RM003F-PT-P - Maio 2002


5-14 Instruções de Cálculo/Matemáticas (CPT, ADD, SUB, MUL, DIV, MOD, SQR, SQRT, NEG, ABS)

Divisão (DIV) A instrução DIV divide Source A por Source B e coloca o resultado em
Destination.

Operandos:

Lógica Ladder

Operando: Tipo: Formato: Descrição:


Source A SINT imediato valor do dividendo
INT tag
DINT
REAL
Um tag SINT ou INT é convertido para um valor DINT pela extensão de
sinal.
Source B SINT imediato valor do divisor
INT tag
DINT
REAL
Um tag SINT ou INT é convertido para um valor DINT pela extensão de
sinal.
Destination SINT tag tag para armazenar o resultado
INT
DINT
REAL

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.

Consulte ApêndiceC para informações sobre a sintaxe de expressões


no texto estruturado.

Bloco de Funções

Operando: Tipo: Formato: Descrição:


tag DIV FBD_MATH estrutura estrutura DIV

Publicação 1756-RM003F-PT-P - Maio 2002


Instruções de Cálculo/Matemáticas (CPT, ADD, SUB, MUL, DIV, MOD, SQR, SQRT, NEG, ABS) 5-15

Estrutura FBD_MATH

Parâmetro de Entrada: Tipo de Dados: Descrição:


EnableIn BOOL Habilita entrada. Se desenergizado, a instrução não executa e as saídas não são
atualizadas.
Valor inicial é energizado
Source A REAL Valor do dividendo.
Válido = qualquer flutuante
Source B REAL Valor do divisor.
Válido = qualquer flutuante
Parâmetro de Saída: Tipo de Dados: Descrição:
EnableOut BOOL A instrução produziu um resultado válido.
Dest REAL Resultado da instrução matemática. Os flags de status aritmético são energizados
para esta saída.

Descrição: Se Destination não for REAL, a instrução trabalha com a porção


fracionária do resultado da seguinte forma:

Se Source A: Então a parte fracionária Exemplo:


do resultado:
e Source B não trunca Source A DINT 5
forem do tipo
Source B DINT 3
REAL
Destination DINT 1
ou Source B for do é arredondada Source A REAL 5.0
tipo REAL
Source B DINT 3
Destination DINT 2

Se Source B (o divisor) for zero:

• uma falha de advertência ocorre:


– Tipo 4: falha no programa
– Código 4: overflow aritimético
• Destination é definido conforme segue:

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.

Publicação 1756-RM003F-PT-P - Maio 2002


5-16 Instruções de Cálculo/Matemáticas (CPT, ADD, SUB, MUL, DIV, MOD, SQR, SQRT, NEG, ABS)

Flags de Status Aritmético: Os flags de status aritmético são afetados.

Condições de Falha:

Uma falha de advertência ocorrerá se: Tipo de falha: Código de falha:


o divisor for zero 4 4

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.

Exemplo 1: Divida float_value_1 por float_value_2 e coloque o resultado em


divide_result.

Lógica Ladder

Texto Estruturado

divide_result := float_value_1 / float_value_2;

Publicação 1756-RM003F-PT-P - Maio 2002


Instruções de Cálculo/Matemáticas (CPT, ADD, SUB, MUL, DIV, MOD, SQR, SQRT, NEG, ABS) 5-17

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

Publicação 1756-RM003F-PT-P - Maio 2002


5-18 Instruções de Cálculo/Matemáticas (CPT, ADD, SUB, MUL, DIV, MOD, SQR, SQRT, NEG, ABS)

Módulo (MOD) A instrução MOD divide Source A por Source B e coloca o resto em
Destination

Operandos:

Lógica Ladder

Operando: Tipo: Formato: Descrição:


Source A SINT imediato valor do dividendo
INT tag
DINT
REAL
Um tag SINT ou INT é convertido para um valor DINT pela extensão de sinal.
Source B SINT imediato valor do divisor
INT tag
DINT
REAL
Um tag SINT ou INT é convertido para um valor DINT pela extensão de sinal.
Destination SINT tag tag para armazenar o resultado
INT
DINT
REAL

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.

Consulte ApêndiceC para informações sobre a sintaxe de expressões


no texto estruturado.

Bloco de Funções

Operando: Tipo: Formato: Descrição:


tag MOD FBD_MATH estrutura estrutura MOD

Publicação 1756-RM003F-PT-P - Maio 2002


Instruções de Cálculo/Matemáticas (CPT, ADD, SUB, MUL, DIV, MOD, SQR, SQRT, NEG, ABS) 5-19

Estrutura FBD_MATH

Parâmetro de Entrada: Tipo de Dados: Descrição:


EnableIn BOOL Habilita entrada. Se desenergizado, a instrução não executa e as saídas não são
atualizadas.
Valor inicial é energizado.
Source A REAL Valor do dividendo.
Válido = qualquer flutuante
Source B REAL Valor do divisor.
Válido = qualquer flutuante
Parâmetro de Saída: Tipo de Dados: Descrição:
EnableOut BOOL A instrução produziu um resultado válido.
Dest REAL Resultado da instrução matemática. Os flags de status aritmético são energizados
para esta saída.

Descrição: Se Source B (o divisor) for zero:

• uma falha de advertência ocorre:


– Tipo 4: falha no programa
– Código 4: overflow aritimético
• o Destination é definido conforme segue:

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.

Flags de Status Aritmético: Os flags de status aritmético são afetados.

Condições de Falha:

Uma falha de advertência ocorrerá se: Tipo de falha: Código de falha:


o divisor é zero 4 4

Publicação 1756-RM003F-PT-P - Maio 2002


5-20 Instruções de Cálculo/Matemáticas (CPT, ADD, SUB, MUL, DIV, MOD, SQR, SQRT, NEG, ABS)

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.

Exemplo: Divide dividend por divisor e coloca o resto em remainder. Nesse


exemplo, 10 é dividido por 3, com um resto de um.

Lógica Ladder

Texto Estruturado

remainder := dividend MOD divisor;

Bloco de Funções

Publicação 1756-RM003F-PT-P - Maio 2002


Instruções de Cálculo/Matemáticas (CPT, ADD, SUB, MUL, DIV, MOD, SQR, SQRT, NEG, ABS) 5-21

Raiz Quadrada (SQR) A instrução SQR calcula a raiz quadrada de Source e coloca o
resultado em Destination.

Operandos:

Lógica Ladder

Operando: Tipo: Formato: Descrição:


Source SINT imediato calcula a raiz quadrada desse valor
INT tag
DINT
REAL
Um tag SINT ou INT é convertido para um valor DINT pela extensão de
sinal.
Destination SINT tag tag para armazenar o resultado
INT
DINT
REAL

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.

Consulte ApêndiceC para informações sobre a sintaxe de expressões


no texto estruturado.

Bloco de Funções

Operando: Tipo: Formato: Descrição:


SQR tag FBD_MATH_ADVANCED estrutura estrutura SQR

Estrutura FBD_MATH_ADVANCED

Parâmetro de Entrada: Tipo de Dados: Descrição:


EnableIn BOOL Habilita entrada. Se desenergizado, a instrução não executa e as saídas não são
atualizadas.
Valor inicial é energizado.
Source REAL Encontre a raiz quadrada deste valor.
Válido = qualquer flutuante
Parâmetro de Saída: Tipo de Dados: Descrição:
EnableOut BOOL A instrução produziu um resultado válido.
Dest REAL Resultado da instrução matemática. Os flags de status aritmético são energizados
para esta saída.

Publicação 1756-RM003F-PT-P - Maio 2002


5-22 Instruções de Cálculo/Matemáticas (CPT, ADD, SUB, MUL, DIV, MOD, SQR, SQRT, NEG, ABS)

Descrição: Se Destination não for REAL, a instrução trabalha com a porção


fracionária do resultado da seguinte forma:

Se Source for: Então a parte fracionária do Exemplo:


resultado:
diferente do trunca Source DINT 3
tipo REAL
Destination DINT 1
do tipo REAL é arredondada Source REAL 3,0
Destination DINT 2

Se Source for negativo, a instrução retira o valor absoluto de Source,


antes de calcular a raiz quadrada.

Flags de Status Aritmético: Os flags de status aritmético são afetados.

Condições de Falha: nenhuma

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.

Publicação 1756-RM003F-PT-P - Maio 2002


Instruções de Cálculo/Matemáticas (CPT, ADD, SUB, MUL, DIV, MOD, SQR, SQRT, NEG, ABS) 5-23

Exemplo: Calcule a raiz quadrada de value_1 e coloque o resultado em


sqr_result.

Lógica Ladder

Texto Estruturado

multiply_result := SQRT(value_1);

Bloco de Funções

Publicação 1756-RM003F-PT-P - Maio 2002


5-24 Instruções de Cálculo/Matemáticas (CPT, ADD, SUB, MUL, DIV, MOD, SQR, SQRT, NEG, ABS)

Negação (NEG) A instrução NEG altera o sinal de Source e coloca o resultado em


Destination.

Operandos:

Lógica Ladder

Operando: Tipo: Formato: Descrição:


Source SINT imediato valor a ser transformado em negativo
INT tag
DINT
REAL
Um tag SINT ou INT é convertido para um valor DINT pela extensão de
sinal.
Destination SINT tag tag para armazenar o resultado
INT
DINT
REAL

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.

Consulte ApêndiceC para informações sobre a sintaxe de expressões


no texto estruturado.

Bloco de Funções

Operando: Tipo: Formato: Descrição:


tag NEG FBD_MATH_ADVANCED estrutura estrutura NEG

Estrutura FBD_MATH

Parâmetro de Tipo de Dados: Descrição:


Entrada:
EnableIn BOOL Habilita entrada. Se desenergizado, a instrução não executa e as saídas não são atualizadas.
Valor inicial é energizado
Source REAL Valor para negar.
Válido = qualquer flutuante
Parâmetro de Saída: Tipo de Dados: Descrição:
EnableOut BOOL A instrução produziu um resultado válido.
Dest REAL Resultado da instrução matemática. Os flags de status aritmético são energizados para esta
saída.

Descrição: Se você tornar negativo um valor negativo, o resultado será positivo.


Se você tornar negativo um valor positivo, o resultado será negativo.

Publicação 1756-RM003F-PT-P - Maio 2002


Instruções de Cálculo/Matemáticas (CPT, ADD, SUB, MUL, DIV, MOD, SQR, SQRT, NEG, ABS) 5-25

Flags de Status Aritmético: Os flags de status aritmético são afetados.

Condições de Falha: nenhuma

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.

Exemplo: Altere o sinal de value_1 e coloque o resultado em negate_result.

Lógica Ladder

Texto Estruturado

negate_result := -value_1;

Bloco de Funções

Publicação 1756-RM003F-PT-P - Maio 2002


5-26 Instruções de Cálculo/Matemáticas (CPT, ADD, SUB, MUL, DIV, MOD, SQR, SQRT, NEG, ABS)

Valor Absoluto (ABS) A instrução ABS retira o valor absoluto de Source e coloca o resultado
em Destination.

Operandos:

Lógica Ladder

Operando: Tipo: Formato: Descrição:


Source SINT imediato valor do qual se tira o valor absoluto
INT tag
DINT
REAL
Um tag SINT ou INT é convertido para um valor DINT pela extensão de
sinal.
Destination SINT tag tag para armazenar o resultado
INT
DINT
REAL

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.

Consulte ApêndiceC para informações sobre a sintaxe de expressões


no texto estruturado.

Bloco de Funções

Operando: Tipo: Formato: Descrição:


tag ABS FBD_MATH_ADVANCED estrutura estrutura ABS

Estrutura FBD_MATH_ADVANCED

Parâmetro de Tipo de Dados: Descrição:


Entrada:
EnableIn BOOL Habilita entrada. Se desenergizado, a instrução não executa e as saídas não são atualizadas.
Valor inicial é energizado
Source REAL Valor do qual se tira o valor absoluto.
Válido = qualquer flutuante
Parâmetro de Saída: Tipo de Dados: Descrição:
EnableOut BOOL A instrução produziu um resultado válido.
Dest REAL Resultado da instrução matemática. Os flags de status aritmético são energizados para esta
saída.

Descrição: A instrução ABS retira o valor absoluto de Source e coloca o resultado


em Destination.

Publicação 1756-RM003F-PT-P - Maio 2002


Instruções de Cálculo/Matemáticas (CPT, ADD, SUB, MUL, DIV, MOD, SQR, SQRT, NEG, ABS) 5-27

Flags de Status Aritmético: Os flags de status aritmético são afetados.

Condições de Falha: nenhuma

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.

Exemplo: Coloque o valor absoluto de value_1 em value_1_absolute. Nesse


exemplo, o valor absoluto de quatro negativo é quatro positivo.

Lógica Ladder

Texto Estruturado

value_1_absolute := ABS(value_1);

Publicação 1756-RM003F-PT-P - Maio 2002


5-28 Instruções de Cálculo/Matemáticas (CPT, ADD, SUB, MUL, DIV, MOD, SQR, SQRT, NEG, ABS)

Bloco de Funções

Publicação 1756-RM003F-PT-P - Maio 2002


Capítulo 6

Instruções de Movimentação/Lógica
(MOV, MVM, BTD, MVMT, BTDT, CLR, SWPB, AND, OR, XOR, NOT, BAND,
BOR, BXOR, BNOT)

Introdução É possível combinar tipos de dados, mas perda de precisão e erros de


arredondamentos podem ocorrer, bem como demora na execução da
instrução. Verifique o bit S:V para observar se o resultado foi
truncado.

Para instruções de lógica ladder, os tipos de dados em negrito


indicam tipos de dados otimizados. Uma instrução executa mais
rapidamente e requer menos memória se todos os operandos da
instrução usam o mesmo tipo de dado otimizado, geralmente DINT
ou REAL.

As instruções de movimentação modificam e movimentam os bits.

Se você quiser: Use esta instrução: Disponível nessas linguagens: Consulte


página:
copiar um valor MOV lógica ladder 6-3
texto estruturado(1)
copiar uma parte específica de um inteiro MVM lógica ladder 6-5
copiar uma parte específica de um inteiro no bloco de MVMT texto estruturado 6-8
funções bloco de funções
mover bits dentro de um inteiro ou entre inteiros BTD lógica ladder 6-11
movimentar bits dentro de um inteiro ou entre inteiros BTDT texto estruturado 6-14
no bloco de funções bloco de funções
zerar um valor CLR texto estruturado(1) 6-17
lógica ladder
reorganizar os bytes de um tag INT, DINT ou REAL SWPB lógica ladder 6-18
texto estruturado
(1)
Não há instrução de texto estruturado equivalente. Use outra programação de texto estruturado para alcançar o mesmo resultado. Veja a descrição para a instrução.

1 Publicação 1756-RM003F-PT-P - Maio 2002


6-2 Instruções de Movimentação/Lógica (MOV, MVM, BTD, MVMT, BTDT, CLR, SWPB, AND, OR, XOR, NOT, BAND, BOR, BXOR, BNOT)

As instruções de lógica executam operações em bits.

Se você quiser: Use esta instrução: Disponível nessas linguagens: Consulte


página:
operação AND (E) AND lógica ladder 6-21
&(1) texto estruturado(2)
bloco de funções
operação OR (OU) OR lógica ladder 6-24
texto estruturado(2)
bloco de funções
operação XOR XOR lógica ladder 6-27
texto estruturado(2)
bloco de funções
operação NOT NOT lógica ladder 6-30
texto estruturado(2)
bloco de funções
AND logicamente com oito entradas booleanas. BAND texto estruturado(2) 6-33
bloco de funções
OR logicamente com oito entradas booleanas. BOR texto estruturado(2) 6-35
bloco de funções
executar uma XOR em duas entradas BXOR texto estruturado(2) 6-38
booleanas. bloco de funções
complementar uma entrada booleana. BNOT texto estruturado(2) 6-40
bloco de funções
(1)
Texto estruturado somente.
(2) No texto estruturado, as operações AND, OR, XOR e NOT podem ser de bitwise ou de lógica.

Publicação 1756-RM003F-PT-P - Maio 2002


Instruções de Movimentação/Lógica (MOV, MVM, BTD, MVMT, BTDT, CLR, SWPB, AND, OR, XOR, NOT, BAND, BOR, BXOR, BNOT) 6-3

Movimentação (MOV) A instrução MOV copia Source em Destination. Source permanece


inalterado.

Operandos:

Lógica Ladder

Operando: Tipo: Formato: Descrição:


Source SINT imediato valor a ser movido (copiar)
INT tag
DINT
REAL
Um tag SINT ou INT é convertido para um valor DINT pela extensão de sinal.
Destination SINT tag tag para armazenar o resultado
INT
DINT
REAL

Texto Estruturado

dest := source; Use um atributo “:=” com uma expressão. Este atributo movimenta o
valor em source para dest.

Consulte Apêndice C para informações sobre a sintaxe de expressões


e atributos no texto estruturado.

Descrição: A instrução MOV copia Source em Destination. Source permanece


inalterado.

Flags de Status Aritmético: Os flags de status aritmético são afetados.

Condições de Falha: nenhuma

Publicação 1756-RM003F-PT-P - Maio 2002


6-4 Instruções de Movimentação/Lógica (MOV, MVM, BTD, MVMT, BTDT, CLR, SWPB, AND, OR, XOR, NOT, BAND, BOR, BXOR, BNOT)

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 A instrução copia Source 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.

Exemplo: Movimenta os dados em value_1 para value_2.

Lógica Ladder

Texto Estruturado

value_2 := value_1

Publicação 1756-RM003F-PT-P - Maio 2002


Instruções de Movimentação/Lógica (MOV, MVM, BTD, MVMT, BTDT, CLR, SWPB, AND, OR, XOR, NOT, BAND, BOR, BXOR, BNOT) 6-5

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

Operando: Tipo: Formato: Descrição:


Source SINT imediato valor a ser movido
INT tag
DINT
Um tag SINT ou INT é convertido para um valor DINT por preenchimento
com zero.
Mask SINT imediato quais bits devem ser bloqueados ou podem passar
INT tag
DINT
Um tag SINT ou INT é convertido para um valor DINT por preenchimento
com zero.
Destination SINT tag tag para armazenar o resultado
INT
DINT

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.

Consulte Apêndice C para informações sobre a sintaxe de expressões


e atributos no texto estruturado.

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.

Se houver uma mistura dos tipos de dados de inteiros, a instrução


preenche os bits mais significativos dos tipos de dados de inteiros
menores com 0, de forma que fiquem com o mesmo tamanho dos
tipos de dados maiores.

Publicação 1756-RM003F-PT-P - Maio 2002


6-6 Instruções de Movimentação/Lógica (MOV, MVM, BTD, MVMT, BTDT, CLR, SWPB, AND, OR, XOR, NOT, BAND, BOR, BXOR, BNOT)

Inserção de um valor de máscara imediato

Ao inserir uma máscara, o software de programação retorna ao


padrão dos valores decimais. Caso você queira inserir uma máscara
usando outro formato, coloque o prefixo correto antes do valor.

Prefixo: Descrição:
16# hexadecimal
por exemplo; 16#0F0F
8# octal
por exemplo; 8#16
2# binário
por exemplo; 2#00110011

Flags de Status Aritmético: Os flags de status aritmético são afetados.

Condições de Falha: nenhuma

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 A instrução passa o valor de Source por Mask e copia o resultado em Destination. Os
bits não mascarados em Destination permanecem inalterados.
A saída da condição da linha é definida como verdadeira.
postscan A saída da condição da linha é definida como falsa.

Publicação 1756-RM003F-PT-P - Maio 2002


Instruções de Movimentação/Lógica (MOV, MVM, BTD, MVMT, BTDT, CLR, SWPB, AND, OR, XOR, NOT, BAND, BOR, BXOR, BNOT) 6-7

Exemplo: Copia os dados de value_a para value_b, enquanto permite que os


dados sejam mascarados ( 0 mascara os dados em value_a).

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

As caixas sombreadas mostram os bits alterados em value_b.

Lógica Ladder

Texto Estruturado

value_b := (value_b AND NOT (mask_2)) OR


(value_a AND mask_2);

Publicação 1756-RM003F-PT-P - Maio 2002


6-8 Instruções de Movimentação/Lógica (MOV, MVM, BTD, MVMT, BTDT, CLR, SWPB, AND, OR, XOR, NOT, BAND, BOR, BXOR, BNOT)

Movimentação com A instrução MVMT primeiro copia o Target para Destination. Em


seguida, a instrução compara Source mascarado com Destination e
Máscara Com Arquivo-Alvo efetua as alterações solicitadas para Destination. Target e Source
(MVMT) permanecem inalterados.

Esta instrução está disponível em lógica ladder como MVM, consulte a


página 6-5.

Operandos:

MVMT(MVMT_tag); Texto Estruturado

Variável: Tipo: Formato: Descrição:


MVMT tag FBD_MASKED_MOVE estrutura estrutura MVMT

Bloco de Funções

Operando: Tipo: Formato: Descrição:


tag MVMT FBD_MASKED_MOVE estrutura estrutura MVMT

Estrutura FBD_MASKED_MOVE

Parâmetro de Entrada: Tipo de Dados: Descrição:


EnableIn BOOL Bloco de Funções
Se desenergizado, a instrução não executa e as saídas não são atualizadas.
Se energizado, a instrução executa.
Valor inicial é energizado
Texto Estruturado
Sem efeito. A instrução executa.
Source DINT Insira o valor para movimentar para Destination baseado no valor de Mask.
Válido = qualquer inteiro
Mask DINT Mask de bits para movimentar de Source para Dest. Todos os bits energizados para um
fazer que os bits correspondentes se movimentem de Source para Dest. Todos os bits
energizados como zero fazem com que os bits correspondentes se movimentem de
Source para Dest.
Válido = qualquer inteiro
Target DINT Insira valor para movimentar para Dest antes de mover os bits Source através de Mask.
Válido = qualquer inteiro
Parâmetro de Saída: Tipo de Dados: Descrição:
EnableOut BOOL A instrução produziu um resultado válido.
Dest DINT Resultado da instrução de movimentação mascarada. Os flags de status aritmético são
energizados para esta saída.

Publicação 1756-RM003F-PT-P - Maio 2002


Instruções de Movimentação/Lógica (MOV, MVM, BTD, MVMT, BTDT, CLR, SWPB, AND, OR, XOR, NOT, BAND, BOR, BXOR, BNOT) 6-9

Descrição: Quando habilitada, a instrução MVMT 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.

Se houver uma combinação dos tipos de dados de inteiros, a instrução


preencherá os bits mais significativos dos tipos de dados de inteiros
menores com 0s, de forma que fiquem com o mesmo tamanho dos
tipos de dados maiores.

Inserção de um valor de máscara imediato usando uma Referência de


Entrada

Ao inserir uma máscara, o software de programação retorna os valores


decimais. Caso você queira inserir uma máscara usando outro
formato, coloque o prefixo correto antes do valor.

Prefixo: Descrição:
16# hexadecimal
por exemplo; 16#0F0F
8# octal
por exemplo; 8#16
2# binário
por exemplo; 2#00110011

Flags de Status Aritmético: Os flags de status aritmético são afetados.

Condições de Falha: nenhuma

Execução:

Condição: Ação do Bloco de Funções: Ação do Texto Estruturado:


prescan Nenhuma ação tomada. Nenhuma ação tomada.
primeiro scan da instrução Nenhuma ação tomada. Nenhuma ação tomada.
primeira execução da instrução Nenhuma ação tomada. Nenhuma ação tomada.
EnableIn está desenergizado EnableOut é desenergizado, a instrução não faz nada e as na
saídas não são atualizadas.
EnableIn está energizado A instrução executa. EnableIn está sempre energizado
EnableOut está energizado. A instrução executa.
postscan Nenhuma ação tomada. Nenhuma ação tomada.

Publicação 1756-RM003F-PT-P - Maio 2002


6-10 Instruções de Movimentação/Lógica (MOV, MVM, BTD, MVMT, BTDT, CLR, SWPB, AND, OR, XOR, NOT, BAND, BOR, BXOR, BNOT)

Exemplo: 1. Copia Target em Dest.

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

2. Mascara Source e compara a Dest. Não são feitas alterações


necessárias em Dest. O Source e o Target se mantêm
inalterados. Um 0 na máscara impede que a máscara compare
aquele bit (mostrado por x no exemplo).

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

As caixas sombreadas mostram os bits que foram alterados.

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

Publicação 1756-RM003F-PT-P - Maio 2002


Instruções de Movimentação/Lógica (MOV, MVM, BTD, MVMT, BTDT, CLR, SWPB, AND, OR, XOR, NOT, BAND, BOR, BXOR, BNOT) 6-11

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.

Essa instrução está disponível no texto estruturado e bloco de funções


como BTDTI, consulte a página 6-14.

Operandos:

Lógica Ladder

Operando: Tipo: Formato: Descrição:


Source SINT imediato tag que contém os bits a serem movimentados
INT tag
DINT
Um tag SINT ou INT é convertido para um valor DINT por preenchimento
com zero.
Source bit DINT imediato número do bit (número do bit menos significativo)
(0-31 DINT) a partir do qual a movimentação foi iniciada
(0-15 INT) deve estar dentro da faixa válida de tipos de
(0-7 SINT) dados Source
Destination SINT tag tag para onde os bits serão movidos
INT
DINT
Detination DINT imediato o número do bit (número de bit menos
bit (0-31 DINT) significativo) em que se inicia a cópia de bits
(0-15 INT) Source
(0-7 SINT) deve estar dentro da faixa válida de tipos de
dados Destination
Length DINT imediato número de bits a ser movido
(1-32)

Descrição: Quando habilitada, a instrução BTD copia um grupo de bits de Source


para Destination. O grupo de bits é identificado pelo bit Source
(número de bit menos significativo do grupo) e Length (número de
bits a serem copiados). O bit Destination identifica o número de bit
menos significativo para iniciar em Destination. Source permanece
inalterado.

Se o comprimento do campo do bit ultrapassar Destination, a


instrução não salvará os bits extras. Qualquer bit extra não dá
seqüência à próxima palavra.

Se houver uma combinação dos tipos de dados de inteiros, a instrução


preencherá os bits mais significativos dos tipos de dados de inteiros
menores com 0s, de forma que fiquem com o mesmo tamanho dos
tipos de dados maiores.

Flags de Status Aritmético: Os flags de status aritmético são afetados.

Condições de Falha: nenhuma

Publicação 1756-RM003F-PT-P - Maio 2002


6-12 Instruções de Movimentação/Lógica (MOV, MVM, BTD, MVMT, BTDT, CLR, SWPB, AND, OR, XOR, NOT, BAND, BOR, BXOR, BNOT)

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 A instrução copia e muda os bits de Source para Destination.
A saída da condição da linha é definida como verdadeira.
postscan A saída da condição da linha é definida como falsa.

Exemplo 1: Quando habilitada, a instrução BTD movimenta os bits dentro de


value_1.

Bit Destination Bit Source

value_1 antes da instrução BTD 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

value_1 depois da instrução 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


BTD

As caixas sombreadas mostram os bits alterados em value_1.

Publicação 1756-RM003F-PT-P - Maio 2002


Instruções de Movimentação/Lógica (MOV, MVM, BTD, MVMT, BTDT, CLR, SWPB, AND, OR, XOR, NOT, BAND, BOR, BXOR, BNOT) 6-13

Exemplo 2: Quando habilitada, a instrução BTD move 10 bits de value_1 para


value_2.

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

value_2 antes da instrução BTD 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

value_2 depois da instrução BTD 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 1 1 1 1 1 1 1 1 1 0 0 0 0 0

As caixas sombreadas mostram os bits que foram alterados em value_2.

Publicação 1756-RM003F-PT-P - Maio 2002


6-14 Instruções de Movimentação/Lógica (MOV, MVM, BTD, MVMT, BTDT, CLR, SWPB, AND, OR, XOR, NOT, BAND, BOR, BXOR, BNOT)

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.

Esta instrução está disponível em lógica ladder como BTD, consulte a


página 6-11.

Operandos:

BTDT(BTDT_tag); Texto Estruturado

Variável: Tipo: Formato: Descrição:


BTDT tag FBD_BIT_FIELD_DISTRIBUTE estrutura estrutura BTDT

Bloco de Funções

Operando: Tipo: Formato: Descrição:


tag BTDT FBD_BIT_FIELD_DISTRIBUTE estrutura estrutura BTDT

Estrutura FBD_BIT_FIELD_DISTRIBUTE

Parâmetro de Entrada: Tipo de Dados: Descrição:


EnableIn BOOL Bloco de Funções:
Se desenergizada, a instrução não executa e as saídas não são atualizadas.
Se energizada, a instrução executa.
Valor inicial é energizado
Texto Estruturado:
Sem efeito. A instrução executa.
Source DINT Insira o valor que contém os bits a serem movidos para Destination.
Válido = qualquer inteiro
SourceBit DINT A posição do bit em Source (menor número de bit a partir do qual s inicia a
movimentação).
Válido = 0-31
Length DINT Número de bits a movimentar
Válido = 1-32
DestBit DINT A posição do bit em Dest (menor número para iniciar a cópia dos bits).
Válido = 0-31
Target DINT Insira o valor para movimentar para Dest antes de movimentar bits de Source.
Válido = qualquer inteiro
Parâmetro de Saída: Tipo de Dados: Descrição:
EnableOut BOOL A instrução produziu um resultado válido.
Dest DINT Resultado da operação de movimentação do bit. Os flags de status aritmético são
energizados para esta saída.

Publicação 1756-RM003F-PT-P - Maio 2002


Instruções de Movimentação/Lógica (MOV, MVM, BTD, MVMT, BTDT, CLR, SWPB, AND, OR, XOR, NOT, BAND, BOR, BXOR, BNOT) 6-15

Descrição: Quando habilitada, a instrução BTD copia um grupo de bits de Source


para Destination. O grupo de bits é identificado pelo bit Source
(número de bit menos significativo do grupo) e Length (número de
bits a serem copiados). O bit Destination identifica o número de bit
menos significativo para iniciar em Destination. Source permanece
inalterado.

Se o comprimento do campo do bit ultrapassar Destination, a


instrução não salvará os bits extras. Qualquer bit extra não dá
seqüência à próxima palavra.

Flags de Status Aritmético: Os flags de status aritmético são afetados

Condições de Falha: nenhuma

Execução:

Condição: Ação do Bloco de Funções: Ação do Texto Estruturado:


prescan Nenhuma ação tomada. Nenhuma ação tomada.
primeiro scan da instrução Nenhuma ação tomada. Nenhuma ação tomada.
primeira execução da instrução Nenhuma ação tomada. Nenhuma ação tomada.
EnableIn está desenergizado EnableOut é desenergizado, a instrução não faz nada e na
as saídas não são atualizadas.
EnableIn está energizado A instrução executa. EnableIn está sempre energizado
EnableOut está energizado. A instrução executa.
postscan Nenhuma ação tomada. Nenhuma ação tomada.

Publicação 1756-RM003F-PT-P - Maio 2002


6-16 Instruções de Movimentação/Lógica (MOV, MVM, BTD, MVMT, BTDT, CLR, SWPB, AND, OR, XOR, NOT, BAND, BOR, BXOR, BNOT)

Exemplo: 1. O controlador copia Target para Dest.

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

2. SourceBit e Length especificam quais bits em Source devem ser


copiados em Dest, começando por DestBit. Source e Target se
mantêm inalterados.
DestBit SourceBit

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

As caixas sombreadas mostram os bits que foram alterados.

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

Publicação 1756-RM003F-PT-P - Maio 2002


Instruções de Movimentação/Lógica (MOV, MVM, BTD, MVMT, BTDT, CLR, SWPB, AND, OR, XOR, NOT, BAND, BOR, BXOR, BNOT) 6-17

Zeramento (CLR) A instrução CLR zera todos os bits de Destination.

Operandos:

Lógica Ladder

Operando: Tipo: Formato: Descrição:


Destination SINT tag tag a ser zerado
INT
DINT
REAL

dest := 0; Texto Estruturado

O texto estruturado não possui uma instrução CLR. Entretanto, atribui


0 ao tag que você quer desenergizar. Esta declaração de atributo
desenergiza dest.

Consulte Apêndice C para informações sobre a sintaxe declarações de


atributos no texto estruturado.

Descrição: A instrução CLR zera todos os bits de Destination.

Flags de Status Aritmético: Os flags de status aritmético são afetados.

Condições de Falha: nenhuma

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 A instrução zera Destination.
A saída da condição da linha é definida como verdadeira.
postscan A saída da condição da linha é definida como falsa.

Exemplo: Desenergiza todos os bits de value para 0.

Lógica Ladder

Texto Estruturado

value := 0;

Publicação 1756-RM003F-PT-P - Maio 2002


6-18 Instruções de Movimentação/Lógica (MOV, MVM, BTD, MVMT, BTDT, CLR, SWPB, AND, OR, XOR, NOT, BAND, BOR, BXOR, BNOT)

Swap (inversão) de Byte A instrução SWPB reorganiza os bytes de um valor.


(SWPB)
Operandos:

Lógica Ladder

Operando: Tipo: Formato: Insira:


Source INT tag tag que contém os bytes que você quer reorganizar
DINT
REAL
Order Mode Se o Source for E você quer alterar os bytes para este modelo Então selecione:
um: (cada letra representa um byte diferente):
INT n/a alguma das opções
DINT ABCD ⇒ DCBA REVERSE (ou insira 0)
REAL
ABCD ⇒ CDAB WORD (ou insira 1)
ABCD ⇒ BADC HIGH/LOW (ou insira 2)
Destination INT tag tag para armazenar os bytes em uma nova ordem
DINT
REAL Se Source for um: Destination deve ser um:
INT INT
DINT
DINT DINT
REAL REAL

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

Publicação 1756-RM003F-PT-P - Maio 2002


Instruções de Movimentação/Lógica (MOV, MVM, BTD, MVMT, BTDT, CLR, SWPB, AND, OR, XOR, NOT, BAND, BOR, BXOR, BNOT) 6-19

Flags de Status Aritmético: não afetados

Condições de Falha: nenhuma

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 linha é A saída da condição da linha é definida como falsa. na
falsa
entrada da condição da linha é A saída da condição da linha é definida como na
verdadeira verdadeira.
EnableIn está energizado na EnableIn está sempre energizado
A instrução executa.
Execução da instrução A instrução redistribui os bytes especificados. A instrução redistribui os bytes especificados.
postscan A saída da condição da linha é definida como falsa. Nenhuma ação tomada.

Exemplo 1: As três instruções SWPB reorganizam os bytes de DINT_1 de acordo


com um modo de ordem diferente. O estilo do display é ASCII e cada
caractere representa um byte. Cada instrução coloca os bytes, em uma
nova ordem, em um Destination diferente.

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);

Exemplo 2: O exemplo a seguir reverte os bytes em cada elemento de um array.


Para um projeto RSLogix 5000 que contém este exemplo, abra a pasta
RSLogix 5000\Projects\Samples, arquivo Swap_Bytes_in_Array.ACD.

1. Inicie os tags. A instrução SIZE encontra o número de elementos


em array e armazena aquele valor em array_length. Uma
instrução subseqüente usa esse valor para determinar quando a
rotina agiu sobre todos os elementos no array.

2. Reverta os bytes em um elemento do array.

Publicação 1756-RM003F-PT-P - Maio 2002


6-20 Instruções de Movimentação/Lógica (MOV, MVM, BTD, MVMT, BTDT, CLR, SWPB, AND, OR, XOR, NOT, BAND, BOR, BXOR, BNOT)

• A instrução SWPB reverte os bytes do número do elemento que


é indicado pelo valor de index. Por exemplo, quando index
igual a 0, a instrução SWPB age em array[0].
• A instrução ADD incrementa index. A próxima vez que a
instrução executar, a instrução SWPB age sobre o próximo
elemento em array.

3. Determine quando a instrução SWPB agiu sobre todos os


elementos no array.
• Se index for menor que o número de elementos no array
(array_length), continue com o próximo elemento no array.
• Se index for igual array_length, então SWPB agiu sobre todos
os elementos no array.

Lógica Ladder

Inicie os tags.

Reverta os bytes.

Determine se a instrução SWPB agiu sobre todos os elementos no array.

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;

Publicação 1756-RM003F-PT-P - Maio 2002


Instruções de Movimentação/Lógica (MOV, MVM, BTD, MVMT, BTDT, CLR, SWPB, AND, OR, XOR, NOT, BAND, BOR, BXOR, BNOT) 6-21

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.

Para realizar um AND de lógica, consulte a página 6-33.

Operandos:

Lógica Ladder

Operando: Tipo: Formato: Descrição:


Source A SINT imediato valor para AND com Source B
INT tag
DINT
Um tag SINT ou INT é convertido para um valor DINT por preenchimento
com zero.
Source B SINT imediato valor para AND com Source A
INT tag
DINT
Um tag SINT ou INT é convertido para um valor DINT por preenchimento
com zero.
Destination SINT tag armazena o resultado
INT
DINT

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.

Consulte Apêndice C para informações sobre a sintaxe de expressões


no texto estruturado.

Bloco de Funções

Operando: Tipo: Formato: Descrição:


tag AND FBD_LOGICAL estrutura estrutura AND

Publicação 1756-RM003F-PT-P - Maio 2002


6-22 Instruções de Movimentação/Lógica (MOV, MVM, BTD, MVMT, BTDT, CLR, SWPB, AND, OR, XOR, NOT, BAND, BOR, BXOR, BNOT)

Estrutura FBD_LOGICAL

Parâmetro de Tipo de Dados: Descrição:


Entrada:
EnableIn BOOL Habilita entrada. Se desenergizada, a instrução não executa e as saídas não são atualizadas.
Valor inicial é energizado
SourceA DINT Valor para AND com SourceB.
Válido = qualquer inteiro
SourceB DINT Valor para AND com SourceA.
Válido = qualquer inteiro
Parâmetro de Saída: Tipo de Dados: Descrição:
EnableOut BOOL A instrução produziu um resultado válido.
Dest DINT Resultado da instrução. Os flags de status aritmético são energizados para esta saída.

Descrição: Quando habilitada, a instrução avalia a operação AND


Se o bit em Source A for: E o bit em Source B for: O bit em Destination será:
0 0 0
0 1 0
1 0 0
1 1 1

Se houver combinação dos tipos de dados de inteiros, a instrução


preencherá os bits mais significativos dos tipos de dados de inteiros
menores com 0 de forma que fiquem com o mesmo tamanho dos
tipos de dados maiores.

Flags de Status Aritmético: Os flags de status aritmético são afetados.

Condições de Falha: nenhuma

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.

Publicação 1756-RM003F-PT-P - Maio 2002


Instruções de Movimentação/Lógica (MOV, MVM, BTD, MVMT, BTDT, CLR, SWPB, AND, OR, XOR, NOT, BAND, BOR, BXOR, BNOT) 6-23

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: Quando habilitada, a instrução AND realiza uma operação AND em


SourceA e SourceB e coloca o resultado em Dest.

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

value_result_and := value_1 AND value_2;

Bloco de Funções

Publicação 1756-RM003F-PT-P - Maio 2002


6-24 Instruções de Movimentação/Lógica (MOV, MVM, BTD, MVMT, BTDT, CLR, SWPB, AND, OR, XOR, NOT, BAND, BOR, BXOR, BNOT)

OR (OU) A instrução OR realiza uma operação OR usando os bits em Source A


e Source B e coloca o resultado em Destination.

Para realizar um OR lógico, consulte a página 6-35.

Operandos:

Lógica Ladder

Operando: Tipo: Formato: Descrição:


Source A SINT imediato valor para OR com Source B
INT tag
DINT
Um tag SINT ou INT é convertido para um valor DINT por preenchimento
com zero.
Source B SINT imediato valor para OR com Source A
INT tag
DINT
Um tag SINT ou INT é convertido para um valor DINT por preenchimento
com zero.
Destination SINT tag armazena o resultado
INT
DINT

Texto Estruturado
dest := sourceA OR sourceB
Use OR como um operador dentro de uma expressão. Esta expressão
avalia sourceA OU sourceB.

Consulte Apêndice C para informações sobre a sintaxe de expressões


no texto estruturado.

Bloco de Funções

Operando: Tipo: Formato: Descrição:


tag OR FBD_LOGICAL estrutura estrutura OR

Publicação 1756-RM003F-PT-P - Maio 2002


Instruções de Movimentação/Lógica (MOV, MVM, BTD, MVMT, BTDT, CLR, SWPB, AND, OR, XOR, NOT, BAND, BOR, BXOR, BNOT) 6-25

Estrutura FBD_LOGICAL

Parâmetro de Tipo de Dados: Descrição:


Entrada:
EnableIn BOOL Habilita entrada. Se desenergizada, a instrução não executa e as saídas não são atualizadas.
Valor inicial é energizado
SourceA DINT Valor para OR com SourceB.
Válido = qualquer inteiro
SourceB DINT Valor para OR com SourceA.
Válido = qualquer inteiro
Parâmetro de Saída: Tipo de Dados: Descrição:
EnableOut BOOL A instrução produziu um resultado válido.
Dest DINT Resultado da instrução. Os flags de status aritmético são energizados para esta saída.

Descrição: Quando habilitada, a instrução avalia a operação OR


Se o bit em Source A for: E o bit em Source B for: O bit em Destination será:
0 0 0
0 1 1
1 0 1
1 1 1

Se houver uma mistura dos tipos de dados de inteiros, a instrução


preencherá os bits mais significativos dos tipos de dados de inteiros
menores com 0, de forma que fiquem com o mesmo tamanho dos
tipos de dados maiores.

Flags de Status Aritmético: Os flags de status aritmético são afetados.

Condições de Falha: nenhuma

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.

Publicação 1756-RM003F-PT-P - Maio 2002


6-26 Instruções de Movimentação/Lógica (MOV, MVM, BTD, MVMT, BTDT, CLR, SWPB, AND, OR, XOR, NOT, BAND, BOR, BXOR, BNOT)

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: Quando habilitada, a instrução OR realiza uma operação OR em


SourceA e SourceB e coloca o resultado em Dest.

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

value_result_or := value_1 OR value_2;

Bloco de Funções

Publicação 1756-RM003F-PT-P - Maio 2002


Instruções de Movimentação/Lógica (MOV, MVM, BTD, MVMT, BTDT, CLR, SWPB, AND, OR, XOR, NOT, BAND, BOR, BXOR, BNOT) 6-27

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.

Para realizar um XOR de lógica, consulte a página 6-38.

Operandos:

Lógica Ladder

Operando: Tipo: Formato: Descrição:


Source A SINT imediato valor para XOR com Source B
INT tag
DINT
Um tag SINT ou INT é convertido para um valor DINT por preenchimento
com zero.
Source B SINT imediato valor para XOR com Source A
INT tag
DINT
Um tag SINT ou INT é convertido para um valor DINT por preenchimento
com zero.
Destination SINT tag armazena o resultado
INT
DINT

Texto Estruturado
dest := sourceA XOR
Use XOR como um operador dentro de uma expressão. Esta
expressão avalia sourceA XOR sourceB.

Consulte Apêndice C para informações sobre a sintaxe de expressões


no texto estruturado.

Bloco de Funções

Operando: Tipo: Formato: Descrição:


tag XOR FBD_LOGICAL estrutura estrutura XOR

Publicação 1756-RM003F-PT-P - Maio 2002


6-28 Instruções de Movimentação/Lógica (MOV, MVM, BTD, MVMT, BTDT, CLR, SWPB, AND, OR, XOR, NOT, BAND, BOR, BXOR, BNOT)

Estrutura FBD_LOGICAL

Parâmetro de Tipo de Dados: Descrição:


Entrada:
EnableIn BOOL Habilita entrada. Se desenergizada, a instrução não executa e as saídas não são atualizadas.
Valor inicial é energizado
SourceA DINT Valor para XOR com SourceB.
Válido = qualquer inteiro
SourceB DINT Valor para XOR com SourceA.
Válido = qualquer inteiro
Parâmetro de Saída: Tipo de Dados: Descrição:
EnableOut BOOL A instrução produziu um resultado válido.
Dest DINT Resultado da instrução. Os flags de status aritmético são energizados para esta saída.

Descrição: Quando habilitada, a instrução avalia a operação XOR:


Se o bit em Source A for: E o bit em Source B for: O bit em Destination será:
0 0 0
0 1 1
1 0 1
1 1 0

Se houver uma combinação dos tipos de dados de inteiros, a instrução


preencherá os bits mais significativos dos tipos de dados de inteiros
menores com 0, de forma que fiquem com o mesmo tamanho dos
tipos de dados maiores.

Flags de Status Aritmético: Os flags de status aritmético são afetados.

Condições de Falha: nenhuma

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.

Publicação 1756-RM003F-PT-P - Maio 2002


Instruções de Movimentação/Lógica (MOV, MVM, BTD, MVMT, BTDT, CLR, SWPB, AND, OR, XOR, NOT, BAND, BOR, BXOR, BNOT) 6-29

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: Quando habilitada, a instrução XOR realiza uma operação XOR em


SourceA e SourceB e coloca o resultado no tag Destination

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

value_result_xor := value_1 XOR value_2;

Bloco de Funções

Publicação 1756-RM003F-PT-P - Maio 2002


6-30 Instruções de Movimentação/Lógica (MOV, MVM, BTD, MVMT, BTDT, CLR, SWPB, AND, OR, XOR, NOT, BAND, BOR, BXOR, BNOT)

Complementação (NOT) A instrução NOT realiza uma operação NOT usando os bits em Source
e coloca o resultado em Destination.

Para realizar um NOT de lógica, consulte a página 6-40.

Operandos:

Lógica Ladder

Operando: Tipo: Formato: Descrição:


Source SINT imediato valor para NOT
INT tag
DINT
Um tag SINT ou INT é convertido para um valor DINT por preenchimento
com zero.
Destination SINT tag armazena o resultado
INT
DINT

Texto Estruturado
dest := NOT source
Use NOT como um operador dentro de uma expressão. Esta
expressão avalia NOT source.

Consulte Apêndice C para informações sobre a sintaxe de expressões


no texto estruturado.

Bloco de Funções

Operando: Tipo: Formato: Descrição:


tag NOT FBD_LOGICAL estrutura estrutura NOT

Estrutura FBD_LOGICAL

Parâmetro de Tipo de Dados: Descrição:


Entrada:
EnableIn BOOL Habilita entrada. Se desenergizada, a instrução não executa e as saídas não são atualizadas.
Valor inicial é energizado
Source DINT Valor para NOT.
Válido = qualquer inteiro
Parâmetro de Saída: Tipo de Dados: Descrição:
EnableOut BOOL A instrução produziu um resultado válido.
Dest DINT Resultado da instrução. Os flags de status aritmético são energizados para esta saída.

Publicação 1756-RM003F-PT-P - Maio 2002


Instruções de Movimentação/Lógica (MOV, MVM, BTD, MVMT, BTDT, CLR, SWPB, AND, OR, XOR, NOT, BAND, BOR, BXOR, BNOT) 6-31

Descrição: Quando habilitada, a instrução avalia a operação NOT

Se o bit em Source for: O bit em Destination será:


0 1
1 0

Se houver uma combinação dos tipos de dados de inteiros, a instrução


preencherá os bits mais significativos dos tipos de dados de inteiros
menores com 0, de forma que fiquem com o mesmo tamanho dos
tipos de dados maiores.

Flags de Status Aritmético: Os flags de status aritmético são afetados.

Condições de Falha: nenhuma

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

Publicação 1756-RM003F-PT-P - Maio 2002


6-32 Instruções de Movimentação/Lógica (MOV, MVM, BTD, MVMT, BTDT, CLR, SWPB, AND, OR, XOR, NOT, BAND, BOR, BXOR, BNOT)

Lógica Ladder

Texto Estruturado

value_result_not := NOT value_1;

Bloco de Funções

Publicação 1756-RM003F-PT-P - Maio 2002


Instruções de Movimentação/Lógica (MOV, MVM, BTD, MVMT, BTDT, CLR, SWPB, AND, OR, XOR, NOT, BAND, BOR, BXOR, BNOT) 6-33

E Booleano (BAND) A instrução BAND utiliza de forma lógica até 8 entradas booleanas.

Para realizar um bitwise AND, consulte a página 6-21.

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).

Consulte Apêndice C para informações sobre a sintaxe de expressões


no texto estruturado.

Bloco de Funções

Operando: Tipo: Formato: Descrição:


tag BAND FBD_BOOLEAN_AND estrutura estrutura BAND

Estrutura FBD_BOOLEAN_AND

Parâmetro de Tipo de Dados: Descrição:


Entrada:
EnableIn BOOL Habilita entrada. Se desenergizada, a instrução não executa e as saídas não são atualizadas.
Valor inicial é energizado
In1 BOOL Primeira entrada booleana.
Valor inicial é energizado
In2 BOOL Segunda entrada booleana.
Valor inicial é energizado
In3 BOOL Terceira entrada booleana.
Valor inicial é energizado
In4 BOOL Quarta entrada booleana.
Valor inicial é energizado
In5 BOOL Quinta entrada booleana.
Valor inicial é energizado
In6 BOOL Sexta entrada booleana.
Valor inicial é energizado
In7 BOOL Sétima entrada booleana.
Valor inicial é energizado
In8 BOOL Oitava entrada booleana.
Valor inicial é energizado
Parâmetro de Saída: Tipo de Dados: Descrição:
EnableOut BOOL Habilita saída.
Out BOOL A saída da instrução.

Publicação 1756-RM003F-PT-P - Maio 2002


6-34 Instruções de Movimentação/Lógica (MOV, MVM, BTD, MVMT, BTDT, CLR, SWPB, AND, OR, XOR, NOT, BAND, BOR, BXOR, BNOT)

Descrição: A instrução BAND possui oito entradas booleanas ANDs. Se uma


entrada não é usada, ela padroniza para energizada (1).
Out = In1 AND In2 AND In3 AND In4 AND In5 AND In6 AND In7
AND In8

Flags de Status Aritmético: não afetados


Condições de Falha: nenhuma
Execução:

Condição: Ação do Bloco de Funções:


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 1: Este exemplo ANDs bool_in1 e bool_in2 e coloca o resultado em


value_result_and.

Se bool_in1 for: Se bool_in2 for: Então value_result_and é:


0 0 0
0 1 0
1 0 0
1 1 1

Texto Estruturado

value_result_not := bool_in1 AND bool_in2;

Bloco de Funções

Exemplo 2: Se bool_in1 e bool_in2 estão energizados (verdadeiro), light1 é


energizado (aceso). Ou, light1 é desenergizado (apagado).

Texto Estruturado
IF bool_in1 AND bool_in2 THEN
light1 := 1;
ELSE
light1 := 0;
END_IF;

Publicação 1756-RM003F-PT-P - Maio 2002


Instruções de Movimentação/Lógica (MOV, MVM, BTD, MVMT, BTDT, CLR, SWPB, AND, OR, XOR, NOT, BAND, BOR, BXOR, BNOT) 6-35

(OU) Booleano (BOR) A instrução BOR possui oito entradas lógicas ORs booleanas
possíveis.

Para realizar uma operação OR, consulte a página 6-24.

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).

Consulte Apêndice C para informações sobre a sintaxe de expressões


no texto estruturado.

Bloco de Funções

Operando: Tipo: Formato: Descrição:


tag BOR FBD_BOOLEAN_OR estrutura estrutura BOR

Estrutura FBD_BOOLEAN_OR

Parâmetro de Tipo de Dados: Descrição:


Entrada:
EnableIn BOOL Habilita entrada. Se desenergizada, a instrução não executa e as saídas não são atualizadas.
Valor inicial é energizado
In1 BOOL Primeira entrada booleana.
Valor inicial é desenergizado.
In2 BOOL Segunda entrada booleana.
Valor inicial é desenergizado.
In3 BOOL Terceira entrada booleana.
Valor inicial é desenergizado.
In4 BOOL Quarta entrada booleana.
Valor inicial é desenergizado.
In5 BOOL Quinta entrada booleana.
Valor inicial é desenergizado.
In6 BOOL Sexta entrada booleana.
Valor inicial é desenergizado.
In7 BOOL Sétima entrada booleana.
Valor inicial é desenergizado.
In8 BOOL Oitava entrada booleana.
Valor inicial é desenergizado.
Parâmetro de Saída: Tipo de Dados: Descrição:
EnableOut BOOL Habilita saída.
Out BOOL A saída da instrução.

Publicação 1756-RM003F-PT-P - Maio 2002


6-36 Instruções de Movimentação/Lógica (MOV, MVM, BTD, MVMT, BTDT, CLR, SWPB, AND, OR, XOR, NOT, BAND, BOR, BXOR, BNOT)

Descrição: A instrução BOR l ORs possui oito entradas booleanas. Se uma


entrada não é usada, ela retorna para desenergizada (0).
Out = In1 OR In2 OR In3 OR In4 OR In5 OR In6 OR In7 OR In8

Flags de Status Aritmético: não afetados


Condições de Falha: nenhuma
Execução

Condição: Ação do Bloco de Funções:


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 1: Este exemplo ORs bool_in1 e bool_in2 e coloca o resultado em


value_result_or.

Se bool_in2 for: Se bool_in2 for: Então value_result_or é:


0 0 0
0 1 1
1 0 1
1 1 1

Texto Estruturado

value_result_not := bool_in1 OR bool_in2;

Bloco de Funções

Publicação 1756-RM003F-PT-P - Maio 2002


Instruções de Movimentação/Lógica (MOV, MVM, BTD, MVMT, BTDT, CLR, SWPB, AND, OR, XOR, NOT, BAND, BOR, BXOR, BNOT) 6-37

Exemplo 2: Nesse exemplo, light1 é energizado (aceso) se:


• somente bool_in1 estiver energizado (verdadeiro).
• somente bool_in2 estiver energizado (verdadeiro).
• bool_in1 e bool_in2 estiverem energizados (verdadeiro).

Ou, light1 é desenergizado (apagado).

Texto Estruturado

IF bool_in1 OR bool_in2 THEN


light1 := 1;
ELSE
light1 := 0;
END_IF;

Publicação 1756-RM003F-PT-P - Maio 2002


6-38 Instruções de Movimentação/Lógica (MOV, MVM, BTD, MVMT, BTDT, CLR, SWPB, AND, OR, XOR, NOT, BAND, BOR, BXOR, BNOT)

(Ou Exclusivo) Booleano A BXOR realiza um OR exclusivo em duas entradas booleanas.


(BXOR) Para realizar uma operação XOR, consulte a página 6-27.

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).

Consulte Apêndice C para informações sobre a sintaxe de expressões


no texto estruturado.

Bloco de Funções

Operando: Tipo: Formato: Descrição:


BXOR tag FBD_BOOLEAN_XOR estrutura estrutura BXOR

Estrutura FBD_BOOLEAN_XOR

Parâmetro de Tipo de Dados: Descrição:


Entrada:
EnableIn BOOL Habilita entrada. Se desenergizada, a instrução não executa e as saídas não são atualizadas.
Valor inicial é energizado
In1 BOOL Primeira entrada booleana.
Valor inicial é desenergizado.
In2 BOOL Segunda entrada booleana.
Valor inicial é desenergizado.
Parâmetro de Saída: Tipo de Dados: Descrição:
EnableOut BOOL Habilita saída.
Out BOOL A saída da instrução.

Descrição: A instrução BXOR realiza um OU exclusivo em duas entradas


booleanas.

Out = In1 XOR In2

Flags de Status Aritmético: não afetados

Condições de Falha: nenhuma

Publicação 1756-RM003F-PT-P - Maio 2002


Instruções de Movimentação/Lógica (MOV, MVM, BTD, MVMT, BTDT, CLR, SWPB, AND, OR, XOR, NOT, BAND, BOR, BXOR, BNOT) 6-39

Execução:

Condição: Ação do Bloco de Funções:


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 1: Este exemplo executa uma instrução XOR em bool_in1 e bool_in2 e


coloca o resultado em value_result_xor.

Se bool_in1 for: Se bool_in2 for: Então value_result_xor é:


0 0 0
0 1 1
1 0 1
1 1 0

Texto Estruturado

value_result_xor bool_in1 XOR bool_in2;

Bloco de Funções

Exemplo 2: Nesse exemplo, light1 é energizado (aceso) se:


• somente bool_in2 estiver energizado (verdadeiro).
• somente bool_in1 estiver energizado (verdadeiro).

Ou, light1 é desenergizado (apagado).

Texto Estruturado

IF bool_in1 XOR bool_in2 THEN


light1 := 1;
ELSE
light1 := 0;
END_IF;

Publicação 1756-RM003F-PT-P - Maio 2002


6-40 Instruções de Movimentação/Lógica (MOV, MVM, BTD, MVMT, BTDT, CLR, SWPB, AND, OR, XOR, NOT, BAND, BOR, BXOR, BNOT)

NOT Booleano (BNOT) A instrução BNOT complementa uma entrada booleana.

Para executar uma instrução NOT, consulte a página 6-30.

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).

Consulte Apêndice C para informações sobre a sintaxe de expressões


no texto estruturado.

Bloco de Funções

Operando: Tipo: Formato: Descrição:


tag BNOT FBD_BOOLEAN_NOT estrutura estrutura BNOT

Estrutura FBD_BOOLEAN_NOT

Parâmetro de Entrada: Tipo de Dados: Descrição:


EnableIn BOOL Habilita entrada. Se desenergizada, a instrução não executa e as saídas não são
atualizadas.
Valor inicial é energizado
In BOOL Entrada para a instrução.
Valor inicial é energizado
Parâmetro de Saída: Tipo de Dados: Descrição:
EnableOut BOOL Habilita saída.
Out BOOL A saída da instrução.

Descrição: A instrução BNOT complementa uma entrada booleana.

Out = NOT In

Flags de Status Aritmético: não afetados

WD1 Writer Designed tag 1Condições de Falha:

nenhuma

Publicação 1756-RM003F-PT-P - Maio 2002


Instruções de Movimentação/Lógica (MOV, MVM, BTD, MVMT, BTDT, CLR, SWPB, AND, OR, XOR, NOT, BAND, BOR, BXOR, BNOT) 6-41

Execução:

Condição: Ação do Bloco de Funções:


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 1: Este exemplo complementa bool_in1 e coloca o resultado em


value_result_not.

Se bool_in1 for: Então value_result_not é:


0 1
1 0

Texto Estruturado

value_result_not NOT bool_in1;

Bloco de Funções

Exemplo 2: Se bool_in1 é desenergizado, light1 é desenergizado (apagado). Ou,


light1 é energizado (aceso).

Texto Estruturado

IF NOT bool_in1 THEN


light1 := 0;
ELSE
light1 := 1;
END_IF;

Publicação 1756-RM003F-PT-P - Maio 2002


6-42 Instruções de Movimentação/Lógica (MOV, MVM, BTD, MVMT, BTDT, CLR, SWPB, AND, OR, XOR, NOT, BAND, BOR, BXOR, BNOT)

Notas:

Publicação 1756-RM003F-PT-P - Maio 2002


Capítulo 7

InstruçõesInstruções de Array
(Arquivo)/Miscelânea
(FAL, FSC, COP, CPS, FLL, AVE, SRT, STD, SIZE)

Introdução As instruções de arquivo/miscelânea nos arrays de dados.

Se você quiser: Use esta instrução: Disponível nessas linguagens: Consulte


página:
realizar operações de função, desvio, lógica e FAL lógica ladder 7-6
aritmética nos valores dos arrays texto estruturado(1)
buscar e comparar valores em arrays FSC lógica ladder 7-17
copiar o conteúdo de um array para outro array COP lógica ladder 7-25
texto estruturado
copiar o conteúdo de um array para outro array CPS lógica ladder 7-25
sem interrupção texto estruturado
preencher um array com dados específicos FLL lógica ladder 7-31
texto estruturado(1)
calcular a média de um array de valores AVE lógica ladder 7-35
texto estruturado(1)
classificar uma dimensão de dados do array em SRT lógica ladder 7-40
ordem crescente texto estruturado
calcular o desvio padrão de um array de valores STD lógica ladder 7-45
texto estruturado(1)
encontrar o tamanho de uma dimensão de um SIZE lógica ladder 7-50
array texto estruturado
(1)
Não há instrução de texto estruturado equivalente. Use outra programação de texto estruturado para alcançar o mesmo resultado. Veja a descrição para a instrução.

É possível combinar tipos de dados, mas a perda de precisão e erros


de arredondamentos podem ocorrer, bem como demora na execução
da instrução. Verifique o bit S:V para observar se o resultado foi
truncado.

Para instruções de lógica ladder, os tipos de dados em negrito


indicam tipos de dados otimizados. Uma instrução executa mais
rapidamente e requer menos memória se todos os operandos da
instrução usam o mesmo tipo de dados otimizados, geralmente DINT
ou REAL.

1 Publicação 1756-RM003F-PT-P - Maio 2002


7-2 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

No modo All, todos os elementos especificados no array são operados


antes de prosseguir para a próxima instrução. A operação começa
quando a entrada da condição da linha da instrução passa de falsa
para verdadeira. O valor de posição (.POS) na estrutura de controle
indica o elemento no array que a instrução está usando atualmente. A
operação pára quando o valor .POS for igual ao valor .LEN.

Array de dados um scan

16639

O diagrama de temporização a seguir mostra a relação entre os bits de


status e a operação da instrução. Quando a execução da instrução
estiver completa, o bit .DN será energizado. O bit .DN, o bit .EN e o
valor .POS são zerados quando a entrada da condição da linha se
torna falsa. Somente após isto é que outra execução da instrução

Publicação 1756-RM003F-PT-P - Maio 2002


InstruçõesInstruções de Array (Arquivo)/Miscelânea (FAL, FSC, COP, CPS, FLL, AVE, SRT, STD, SIZE)- 7-3

pode ser disparada por uma transição de falsa para verdadeira da


entrada da condição da linha.

um scan

entrada da condição da linha

bit .EN

bit DN
zera os bits de status e zera o
valor .POS

scan da instrução

operação completa nenhuma execução ocorre


40010

Modo Numerical

O modo Numerical distribui a operação de array em vários scans. Esse


modo é útil quando se trabalha com dados críticos não temporizados
ou um grande volume de dados. É necessário inserir o número de
elementos para operar para cada scan, o que mantém o tempo de
scan menor.

A execução é disparada quando a entrada da condição da linha passa


de falsa para verdadeira. Após o disparo, a instrução é executada cada
vez que se realiza o scan na mesma para o número de scans
necessários para completar a operação em todo o array. Após o
disparo, a entrada da condição da linha pode se alterar repetidamente
sem interromper a execução da instrução.

um scan

segundo scan

próximo scan

16641

Publicação 1756-RM003F-PT-P - Maio 2002


7-4 InstruçõesInstruções de Array (Arquivo)/Miscelânea (FAL, FSC, COP, CPS, FLL, AVE, SRT, STD, SIZE)-

IMPORTANTE Evite usar os resultados de uma instrução de arquivo


quando em modo numérico até que o bit .DN fique
energizado.

O diagrama de temporização a seguir mostra a relação entre os bits de


status e a operação da instrução. Quando a execução da instrução
estiver completa, o bit .DN será energizado.

a linha se torna verdadeira na conclusão a linha se torna falsa na conclusão

scans múltiplos scans múltiplos

entrada da condição da linha

bit .EN

bit .DN

scan da instrução

operação completa operação completa 40013

zera os bits de status e zera o zera os bits de status e


valor .POS zera o valor .POS

Se a entrada da condição da linha se tornar verdadeira na conclusão,


os bits .DN e .ER são energizados até que a entrada da condição da
linha se torne falsa. Quando a entrada da condição da linha se torna
falsa, esses bits são zerados e o valor .POS é desenergizado.
Se a entrada da condição da linha for falsa na conclusão, o bit .EN
será zerado imediatamente. Um scan depois que o bit .EN é
desenergizado, o bit .DN e o valor .POS são zerados.

Modo Incremental

O modo Incremental manipula um elemento do array cada vez que a


entrada da condição da linha da instrução passa de falsa para verdadeira.

1a. instrução habilitada


2a. instrução habilitada
3a. instrução habilitada

última instrução habilitada

16643

Publicação 1756-RM003F-PT-P - Maio 2002


InstruçõesInstruções de Array (Arquivo)/Miscelânea (FAL, FSC, COP, CPS, FLL, AVE, SRT, STD, SIZE)- 7-5

O diagrama de temporização a seguir mostra a relação entre os bits de


status e a operação da instrução. A execução ocorre somente em um
scan no qual a entrada da condição da linha passa de falsa para
verdadeira. Cada vez que isso ocorre, apenas um elemento do array é
manipulado. Se a entrada da condição da linha permanecer
verdadeira durante mais de um scan, a instrução executa somente
durante o primeiro scan.

um scan

entrada da condição da linha

bit .EN

bit DN

scan da instrução 40014

operação zera os bits de status e zera


completa o valor .POS

O bit .EN é energizado quando a entrada da condição da linha se


torna verdadeira. O bit .DN é energizado quando o último elemento
no array for manipulado. Quando o último elemento for manipulado
e a entrada da condição da linha se tornar falsa, o bit .EN, o bit .DN e
o valor .POS são removidos.

A diferença entre o modo Incremental e o modo Numerical a uma


taxa de um elemento por scan é:

• O modo Numerical com qualquer número de elementos por


scan requer somente uma transição de falsa para verdadeira da
entrada da condição da linha para iniciar a execução. A
instrução continua a executar o número especificado de
elementos a cada scan até a conclusão, independente do estado
da entrada da condição da linha.

• O modo Incremental requer que a entrada da condição da linha


da instrução passe de falsa para verdadeira para manipular um
elemento no array.

Publicação 1756-RM003F-PT-P - Maio 2002


7-6 InstruçõesInstruções de Array (Arquivo)/Miscelânea (FAL, FSC, COP, CPS, FLL, AVE, SRT, STD, SIZE)-

Aritmética de Arquivos A instrução FAL realiza as operações de cópia, aritmética, lógica e


função nos dados armazenados em um array.
(FAL)
Operandos:

Lógica Ladder

Operando: Tipo: Formato: Descrição:


Control CONTROL tag estrutura de controle para a operação
Length DINT imediato número de elementos no array a
serem manipulados
Position DINT imediato elemento atual no array
normalmente, o valor inicial é 0
Mode DINT imediato como distribuir a operação
seleccione INC, ALL ou insira um número
Destination SINTA tag tag para armazenar o resultado
INT
DINT
REAL
Expression SINT imediato uma expressão composta por tags e/ou valores
INT tag imediatos separados por operadores
DINT
REAL
Um tag SINT ou INT é convertido para um valor DINT pela extensão de
sinal.

Texto Estruturado

O texto estruturado não possui uma instrução FAL, mas é possível


alcançar os mesmos resultados usando uma instrução SIZE e uma
FOR...DO ou outra construção de malha.

SIZE(destination,0,length-1);
FOR position = 0 TO length DO
destination[position] := numeric_expression;
END_FOR;

Consulte página C- para informações sobre a sintaxe de construções


no texto estruturado.

Publicação 1756-RM003F-PT-P - Maio 2002


InstruçõesInstruções de Array (Arquivo)/Miscelânea (FAL, FSC, COP, CPS, FLL, AVE, SRT, STD, SIZE)- 7-7

Estrutura CONTROL

Mnemônico: Tipo de Dados: Descrição:


.EN BOOL O bit habilitado indica que a instrução FAL está habilitada.
.DN BOOL O bit executado é energizado quando a instrução operou no último elemento (.POS = .LEN).
.ER BOOL O bit de erro é energizado se a expressão gerar um overflow (S:V é energizado). A instrução pára a
execução até que o programa zere o bit .ER. O valor .POS contém a posição do elemento que provocou o
overflow.
.LEN DINT O comprimento especifica o número dos elementos no array no qual a instrução FAL opera.
.POS DINT A posição contém a posição do elemento atual que a instrução está acessando.

Descrição: A instrução FAL realiza as mesmas operações nos arrays conforme a


instrução CPT realiza as operações dos elementos.

Os exemplos que começam na página 7-13 mostram como usar o


valor .POS para entrar em um array. Se o subscrito na expressão de
Destination está fora da faixa, a instrução FAL gera uma falha grave
(tipo 4, código 20).

Flags de Status Aritmético: Os flags de status aritmético são afetados.

Condições de Falha:

Uma falha grave ocorrerá se: Tipo de falha: Código de falha:


subscrito estiver fora da faixa 4 20
.POS < 0 ou .LEN < 0 4 21

Publicação 1756-RM003F-PT-P - Maio 2002


7-8 InstruçõesInstruções de Array (Arquivo)/Miscelânea (FAL, FSC, COP, CPS, FLL, AVE, SRT, STD, SIZE)-

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

bit .DN = 0 não bit interno é


examinar bit .DN modo INC desenergizado

bit .DN = 1 sim

não .LEN < 0 ou sim


bit .EN é desenergizado. modo ALL falha grave
bit .EN é desenergizado. .POS < 0
bit .ER é desenergizado.
bit .DN é desenergizado.
valor .POS é desenergizado sim não

.POS = .POS + 1

sim
.LEN = 0

não
sim
.POS = 0

não
não .POS < .LEN

.POS = .POS -1 sim

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

Publicação 1756-RM003F-PT-P - Maio 2002


InstruçõesInstruções de Array (Arquivo)/Miscelânea (FAL, FSC, COP, CPS, FLL, AVE, SRT, STD, SIZE)- 7-9

Condição: Ação da Lógica Ladder:

entrada da condição da linha é verdadeira

.LEN < 0 ou sim página 7-12


.POS < 0 falha grave
bit .ER = 0 modo
examinar bit .ER numérico
não

bit .ER = 1 bit .DN = 0 não

não não
examinar bit .DN .LEN = 0 modo INC modo ALL

bit .DN = 1 sim sim sim

bit .DN é energizado.


bit .EN é energizado modo modo
INC ALL

página 7-10 página 7-11


comum

loop_count =
loop_count - 1

não
loop_count < 0 .POS = .POS + 1

sim
avaliar a expressão

não
examine S:V

sim

.POS = .POS + 1 bit .ER é energizado

não
.POS = .LEN

sim

bit .DN é energizado.


.POS = .POS + 1
bit .EN é energizado

saída da condição da linha é


definida como verdadeira

fim

Publicação 1756-RM003F-PT-P - Maio 2002


7-10 InstruçõesInstruções de Array (Arquivo)/Miscelânea (FAL, FSC, COP, CPS, FLL, AVE, SRT, STD, SIZE)-

Condição: Ação da Lógica Ladder:

modo
INC

bit .EN = 1
examinar bit .EN

bit .EN = 0

bit = 1
examinar .POS = .POS + 1
bit interno

bit = 0

bit interno é energizado

sim sim
.POS ≥ .LEN .POS = 0

não não

bit .EN é energizado .POS = .POS -1


loop_count = 1
.POS = .POS -1

bit .DN é energizado.


bit .EN é energizado

saída da condição da linha é


comum definida como verdadeira
página 7-9

fim

Publicação 1756-RM003F-PT-P - Maio 2002


InstruçõesInstruções de Array (Arquivo)/Miscelânea (FAL, FSC, COP, CPS, FLL, AVE, SRT, STD, SIZE)- 7-11

Condição: Ação da Lógica Ladder:

modo
ALL

bit .EN = 0 bit = 1


examinar
examinar bit .EN bit interno

bit .EN = 1 bit = 0

.POS = .POS + 1 bit .EN é energizado

sim sim
.POS ≥ .LEN .POS = 0

não não

loop_count = .LEN - .POS .POS = .POS -1


.POS = .POS -1

bit .DN é energizado. saída da condição da linha é


bit .EN é energizado definida como verdadeira
comum
página 7-9
fim

Publicação 1756-RM003F-PT-P - Maio 2002


7-12 InstruçõesInstruções de Array (Arquivo)/Miscelânea (FAL, FSC, COP, CPS, FLL, AVE, SRT, STD, SIZE)-

Condição: Ação da Lógica Ladder:

modo
numérico

bit .EN = 1
examinar bit .EN

bit .EN = 0

.POS = .POS + 1

bit = 1
examinar
bit interno

bit = 0

bit interno é energizado

sim sim
.POS ≥ .LEN .POS = 0

não não

não .POS = .POS -1


modo .LEN> modo .LEN ≥

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

bit .EN é energizado


modo loop_count

postscan A saída da condição da linha é definida como falsa.

Publicação 1756-RM003F-PT-P - Maio 2002


InstruçõesInstruções de Array (Arquivo)/Miscelânea (FAL, FSC, COP, CPS, FLL, AVE, SRT, STD, SIZE)- 7-13

Exemplo 1: Quando habilitada, a instrução FAL copia cada elemento de array_2


na mesma posição dentro de array_1.
cópia de array para array

Expressão: Destination
array_2[control_2.pos] array_1[control_2.pos]

Exemplo 2: Quando habilitada, a instrução FAL copia value_1 nas primeiras 10


posições da segunda dimensão de array_2.
cópia de elemento para array

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

Exemplo 4: Quando habilitada, a instrução FAL adiciona value_1 e value_2 e


armazena o resultado na posição atual de array_1.
operação aritmética:(elemento + elemento) para array

Expressão: Destination
value_1 + value_2 array_1[control_1.pos]

Publicação 1756-RM003F-PT-P - Maio 2002


7-14 InstruçõesInstruções de Array (Arquivo)/Miscelânea (FAL, FSC, COP, CPS, FLL, AVE, SRT, STD, SIZE)-

Exemplo 5: Quando habilitada, a instrução FAL divide o valor da posição atual de


array_2 pelo valor da posição atual de array_3 e armazena o
resultado na posição atual de array_1.
operação aritmética:(array / array) para array

Expressão: Destination
array_2[control_2.pos] / array_3[control_2.pos] array_1[control_2.pos]

Exemplo 6: Quando habilitada, a instrução FAL adiciona o valor na posição atual


em array_1 para value_1 e armazena o resultado na posição atual em
array_3. A instrução deve executar 10 para o array_1 inteiro e array_3
para ser manipulada.
operação aritmética:(array + elemento) para array

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

Publicação 1756-RM003F-PT-P - Maio 2002


InstruçõesInstruções de Array (Arquivo)/Miscelânea (FAL, FSC, COP, CPS, FLL, AVE, SRT, STD, SIZE)- 7-15

Exemplo 8: Quando habilitada, a instrução FAL multiplica o valor atual de array_1


pelo valor atual de array_3 e armazena o resultado em value_1. A
instrução FAL usa o modo incremento, então somente um par de
valores de array é multiplicado cada vez que a instrução é habilitada.
A próxima vez que a instrução é habilitada, a instrução sobrescreve
value_1.
operação aritmética:(array ∗ array) para elemento

Expressão: Destination:
array_1[control_1.pos] * array_3[control_1.pos] value_1

expressões FAL

As expressões das instruções FAL são programadas da mesma forma


que as expressões nas instruções CPT. Use as seções a seguir para
mais informações sobre operadores válidos, formato e seqüência de
operação que são comuns para as duas instruções.

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 DINT, REAL OR OR (OU) DINT
y)
RAD graus em radianos DINT, REAL
ABS valor absoluto DINT, REAL
SIN seno REAL
ACS arco co-seno REAL
SQR raiz quadrada DINT, REAL
AND AND (E) DINT
TAN tangente REAL
ASN arco seno REAL
TOD inteiro para BCD DINT
ATN arco tangente REAL
TRN truncamento DINT, REAL
COS co-seno REAL
XOR OR exclusivo DINT
DEG radianos em graus DINT, REAL
FRD BCD para inteiro DINT

Publicação 1756-RM003F-PT-P - Maio 2002


7-16 InstruçõesInstruções de Array (Arquivo)/Miscelânea (FAL, FSC, COP, CPS, FLL, AVE, SRT, STD, SIZE)-

Formatação de expressões

Para cada operador utilizador, você deve fornecer um ou dois


operandos (tags ou valores imediatos). Use a tabela a seguir para
formatar os operadores e os operandos em uma expressão:

Para operadores Use este formato: Exemplos:


que operam em:
um operando operator(operand) ABS(tag_a)
dois operandos operand_a operator operand_b • tag_b + 5
• tag_c AND tag_d
• (tag_e ** 2) MOD
(tag_f / tag_g)

Determinação da seqüência da operação

As operações que você escreve na expressão são executadas pela


instrução na seqüência prescrita e não, necessariamente, na ordem
que você as escreveu. É possível suprimir a seqüência da operação
agrupando-se os termos dentro de parênteses, forçando a instrução
para realizar uma operação dentro dos parênteses, antes de outras
operações.

As operações com a mesma seqüência são executadas da esquerda


para a direita.

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

Publicação 1756-RM003F-PT-P - Maio 2002


InstruçõesInstruções de Array (Arquivo)/Miscelânea (FAL, FSC, COP, CPS, FLL, AVE, SRT, STD, SIZE)- 7-17

Comparação e Busca de A instrução FSC compara valores em um array, elemento por


elemento.
Arquivo (FSC)
Operandos:

Lógica Ladder

Operando: Tipo: Formato: Descrição:


Control CONTROL tag estrutura de controle para a operação
Length DINT imediato número de elementos no array a
serem manipulados
Position DINT imediato offset no array
normalmente, valor inicial é 0

Estrutura CONTROL

Mnemônico: Tipo de Dados: Descrição:


.EN BOOL O bit habilitado indica que a instrução FSC está habilitada.
.DN BOOL O bit executado é energizado quando a instrução operou no último elemento
(.POS = .LEN).
.ER BOOL O bit de erro não é modificado.
.IN BOOL O bit inibido indica que a instrução FSC detectou uma comparação verdadeira. É necessário
zerar esse bit para continuar a operação de busca.
.FD BOOL O bit encontrado indica que a instrução FSC detectou uma comparação verdadeira.
.LEN DINT O comprimento especifica o número dos elementos no array na qual a instrução opera.
.POS DINT A posição contém a posição do elemento atual que a instrução está acessando.

Descrição: Quando a instrução FSC está habilitada e a comparação é verdadeira,


a instrução energiza o bit .FD e o bit .POS reflete a posição do array
onde a instrução encontrou a comparação verdadeira. A instrução
energiza o bit .IN para evitar outra busca.

Flags de Status Aritmético: Os flags de status aritmético são afetados.

Condições de Falha:

Uma falha grave ocorrerá se: Tipo de falha: Código de falha:


.POS < 0 ou .LEN < 0 4 21

Publicação 1756-RM003F-PT-P - Maio 2002


7-18 InstruçõesInstruções de Array (Arquivo)/Miscelânea (FAL, FSC, COP, CPS, FLL, AVE, SRT, STD, SIZE)-

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

bit .DN = 0 não bit interno é


examinar bit .DN modo INC desenergizado

bit .DN = 1 sim

bit .EN é não .LEN < 0 ou sim


bit .EN é desenergizado. desenergizado. modo ALL .POS < 0 falha grave
bit .ER é desenergizado.
bit .DN é desenergizado.
valor .POS é sim não
desenergizado

.POS = .POS + 1

sim
.LEN = 0

não
sim
.POS = 0

não
não .POS < .LEN

.POS = .POS -1 sim

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

Publicação 1756-RM003F-PT-P - Maio 2002


InstruçõesInstruções de Array (Arquivo)/Miscelânea (FAL, FSC, COP, CPS, FLL, AVE, SRT, STD, SIZE)- 7-19

Condição: Ação da Lógica Ladder:


entrada da condição da linha for verdadeira
sim página 7-12
.LEN < 0 ou
.POS < 0 falha grave
bit .ER = 0 modo
examinar bit .ER numérico
não

bit .ER = 1 bit .DN = 0 não

não não
examinar bit .IN .LEN = 0 modo INC modo ALL
bit .DN = 1
bit .IN = 0 sim sim sim

bit .DN é energizado.


bit .EN é energizado modo modo
INC ALL
examinar bit .DN
bit .DN = 1 página 7-10 página 7-11
comum

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

.POS = .POS + 1 bit .EN é energizado


bit .FD é energizado.
bit .IN é energizado

não
.POS = .LEN

sim

bit .DN é energizado.


bit .EN é energizado .POS = .POS + 1

saída da condição da linha é


definida como verdadeira

fim

postscan A saída da condição da linha é definida como falsa.

Publicação 1756-RM003F-PT-P - Maio 2002


7-20 InstruçõesInstruções de Array (Arquivo)/Miscelânea (FAL, FSC, COP, CPS, FLL, AVE, SRT, STD, SIZE)-

Exemplo 1: Buscar uma combinação entre dois arrays. Quando habilitada, a


instrução FSC compara cada um dos 10 primeiros elementos
em array_1 com os elementos correspondentes em array_2.

array_1 array_2 control_3.pos

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

Exemplo 2: Buscar uma combinação em um array. Quando habilitada, a instrução


FSC compara MySearchKey com 10 elementos em array_1.

MySearchKey referência control_3.pos

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

Publicação 1756-RM003F-PT-P - Maio 2002


InstruçõesInstruções de Array (Arquivo)/Miscelânea (FAL, FSC, COP, CPS, FLL, AVE, SRT, STD, SIZE)- 7-21

Exemplo 3: Buscar uma string em um array de strings. Quando habilitada, a


instrução FSC compara os caracteres em código para 10 elementos em
code_table.

code code_table code_table_search.POS

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

As expressões das instruções FSC são programadas da mesma forma


que as expressões nas instruções CMP. Use as seções a seguir para
mais informações sobre operadores válidos, formato e seqüência de
operação que são comuns nas duas instruções.

Publicação 1756-RM003F-PT-P - Maio 2002


7-22 InstruçõesInstruções de Array (Arquivo)/Miscelânea (FAL, FSC, COP, CPS, FLL, AVE, SRT, STD, SIZE)-

Operadores válidos

Operador: Descrição: Ótimo: Operador: Descrição: Ótimo:


+ adição DINT, REAL DEG radianos em graus DINT, REAL
- subtração/negativo DINT, REAL FRD BCD para inteiro DINT
* multiplicação DINT, REAL LN log neperiano REAL
/ divisão DINT, REAL LOG log base 10 REAL
= igual DINT, REAL MOD módulo DINT, REAL
< menor que DINT, REAL NOT complementação DINT
<= menor ou igual a DINT, REAL OR OR DINT
> maior que DINT, REAL RAD graus em radianos DINT, REAL
<= maior ou igual a DINT, REAL SIN seno REAL
<> diferente de DINT, REAL SQR raiz quadrada DINT, REAL
** expoente (x elevado a DINT, REAL TAN tangente REAL
y)
TOD inteiro para BCD DINT
ABS valor absoluto DINT, REAL
TRN trancar DINT, REAL
ACS arcos co-seno
XOR XOR DINT
AND AND DINT
ASN arco seno
ATN arco tangente
COS co-seno

Formatação de expressões

Para cada operador utilizador, você deve fornecer um ou dois


operandos (tags ou valores imediatos). Use a tabela a seguir para
formatar os operadores e os operandos em uma expressão:

Para operadores Use este formato: Exemplos:


que operam em:
um operando operator(operand) ABS(tag_a)
dois operandos operand_a operator operand_b • tag_b + 5
• tag_c AND tag_d
• (tag_e ** 2) MOD
(tag_f / tag_g)

Publicação 1756-RM003F-PT-P - Maio 2002


InstruçõesInstruções de Array (Arquivo)/Miscelânea (FAL, FSC, COP, CPS, FLL, AVE, SRT, STD, SIZE)- 7-23

Determinação da seqüência da operação

As operações que você escreve na expressão são executadas pela


instrução na seqüência prescrita e não, necessariamente, na ordem
que você as escreveu. É possível suprimir a seqüência da operação
agrupando-se os termos dentro de parênteses, forçando a instrução
para realizar uma operação dentro dos parênteses, antes de outras
operações.

As operações com a mesma seqüência são executadas da esquerda


para a direita.

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

Uso de strings em uma expressão

Use uma expressão em lógica ladder ou em texto estruturado para


comparar os tipos de dados da string. Para usar strings em uma
expressão, siga estas orientações:

• Uma expressão permite que você compare dois tags da string.


• Você não pode inserir caracteres ASCII em uma expressão
diretamente.
• Somente os operadores a seguir são permitidos

Operador: Descrição:
= igual
< menor que
<= menor ou igual a
> maior que
>= maior ou igual a
<> diferente de

Publicação 1756-RM003F-PT-P - Maio 2002


7-24 InstruçõesInstruções de Array (Arquivo)/Miscelânea (FAL, FSC, COP, CPS, FLL, AVE, SRT, STD, SIZE)-

• As strings são iguais se os caracteres corresponderem.


• Os caracteres ASCII são sensíveis ao contexto. A letra “A” ($41)
maiúscula não é igual à letra "a" minúscula ($61).
• Os valores hexadecimais dos caracteres determinam se um
string é menor ou maior que outro. Para o código hexadecimal
de caractere, consulte a parte de trás deste manual.
• Quando duas strings são classificadas em um diretório de
telefones, a seqüência das strings determina qual é maior

Caracteres ASCII Códigos Hex


1ab $31$61$62
m m 1b $31$62
e ai
n or a $41
or q
q u AB $41$42 AB < B
u e
e B $42
a $61 a>B
ab $61$62

Publicação 1756-RM003F-PT-P - Maio 2002


InstruçõesInstruções de Array (Arquivo)/Miscelânea (FAL, FSC, COP, CPS, FLL, AVE, SRT, STD, SIZE)- 7-25

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

Operando: Tipo: Formato: Descrição:


Source SINT tag elemento inicial para cópia
INT Importante: os operandos Source e Destination
DINT devem ter o mesmo tipo de dados ou podem
REAL ocorrer resultados inesperados.
string
estrutura
Destination SINT tag elemento inicial a ser sobrescrito por Source
INT Importante: os operandos Source e Destination
DINT devem ter o mesmo tipo de dados ou podem
REAL ocorrer resultados inesperados.
string
structure
Length DINT imediato número de elementos em Destination a
tag serem copiados

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.

Descrição: Durante a execução das instruções COP e CPS, outras ações do


controlador podem tentar interromper a operação de cópia e mudar
os dados de fonte ou destino:

Se a fonte ou destino for: E você quiser: Então Notas:


selecione:
• tag produzido prevenir que os dados mudem CPS • Tarefas que tentam interromper
• tag consumido durante a operação de cópia uma instrução CPS são atrasadas
• dados de E/S até que a instrução seja
• dados que outra tarefa pode concluída.
sobrescrever • Para estimar o tempo de execução
da instrução CPS, consulte
ControlLogix System User
Manual, publicação 1756-UM001.
permitir que os dados mudem COP
durante a operação de cópia
nenhum dos acima COP

O número de bytes copiados é:

Publicação 1756-RM003F-PT-P - Maio 2002


7-26 InstruçõesInstruções de Array (Arquivo)/Miscelânea (FAL, FSC, COP, CPS, FLL, AVE, SRT, STD, SIZE)-

Contagem de Byte = Comprimento ∗ (número de bytes no tipo de


dados de Destination)

Se a contagem de byte for maior do que o


ATENÇÃO
comprimento de Source, dados não previstos serão
copiados para os elementos restantes.

!
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.

As instruções COP e CPS não escrevem após o final do array. Se


Length for maior do que o número total de elementos no array
Destination, as instruções COP e CPS param no final do array.
Nenhuma falha grave é gerada.

Flags de Status Aritmético: não afetados

Condições de Falha: nenhuma

Publicação 1756-RM003F-PT-P - Maio 2002


InstruçõesInstruções de Array (Arquivo)/Miscelânea (FAL, FSC, COP, CPS, FLL, AVE, SRT, STD, SIZE)- 7-27

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. na
linha é verdadeira A saída da condição da linha está definida como
verdadeira.
EnableIn está energizado na EnableIn está sempre energizado
A instrução executa.

execução da instrução end_address = start_address + (Comprimento ∗


número de bytes em um elemento de destino)

end_address > fim do sim end_address = fim do array destination


array destination

não

source_address = Source

destination_address = sim
end_address

não

copiar os dados de source_address para


destination _address
saída da condição da linha é
definida como verdadeira

source_address = source _address + 1

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.

Publicação 1756-RM003F-PT-P - Maio 2002


7-28 InstruçõesInstruções de Array (Arquivo)/Miscelânea (FAL, FSC, COP, CPS, FLL, AVE, SRT, STD, SIZE)-

Lógica Ladder

Texto Estruturado:

COP(array_4[0],array_5[0],10);

Exemplo 2: Quando habilitada, a instrução COP copia a estrutura timer_1 no


elemento 5 de array_timer. A instrução copia somente uma estrutura
para um elemento do array.

Lógica Ladder

Texto Estruturado:

COP(timer_1,array_timer[5],1);

Exemplo 3: O array project_data (100 elementos) armazena uma variedade de


valores que mudam em momentos diferentes na aplicação. Para
enviar uma imagem completa de project_data a uma instância por vez
para outro controlador, a instrução CPS copia project_data para
produced_array.
• Enquanto a instrução CPS copia os dados, nenhuma atualização
de E/S ou outras tarefas podem mudar os dados.
• O tag produced_array produz os dados em uma rede
ControlNet para o consumo por outros controladores.
• Para usar a mesma imagem de dados (ou seja, fazer uma cópia
sincronizada de dados), o controlador consumidor usa uma
instrução CPS para copiar os dados de um tag consumido para
outro tag para uso na aplicação.

Publicação 1756-RM003F-PT-P - Maio 2002


InstruçõesInstruções de Array (Arquivo)/Miscelânea (FAL, FSC, COP, CPS, FLL, AVE, SRT, STD, SIZE)- 7-29

Lógica Ladder

Texto Estruturado:

CPS(project_data[0],produced_array[0],100);

Exemplo 4: Local:0:I.Data armazena os dados de entrada para a rede DeviceNet


que está conectada ao módulo 1756-DNB no slot 0. Para sincronizar
as entradas com a aplicação, a instrução CPS copia os dados de
entrada para input_buffer.
• Enquanto a instrução CPS copia os dados, nenhuma atualização
de E/S pode mudar os dados.
• Conforme a aplicação executa, ela usa os dados de entrada em
input_buffer para suas entradas.

Lógica Ladder

Texto Estruturado:

CPS(Local:0:I.Data[0],input_buffer[0],20);

Publicação 1756-RM003F-PT-P - Maio 2002


7-30 InstruçõesInstruções de Array (Arquivo)/Miscelânea (FAL, FSC, COP, CPS, FLL, AVE, SRT, STD, SIZE)-

Exemplo 5: Esse exemplo inicializa um array de estruturas de temporizador.


Quando habilitadas, as instruções MOV inicializam os valores .PRE e
.ACC do primeiro elemento array_timer. Quando habilitada, a
instrução COP copia um bloco contínuo de bytes, iniciando em
array_timer[0]. O comprimento é de nove estruturas de temporizador.
array_timer[0] Primeiro a instrução copia os valores
timer[0] em timer[1]

array_timer[1] Então, a instrução copia os valores


timer[1] em timer[2]

array_timer[2] Depois, a instrução copia os valores


timer[2] em timer[3]

array_timer[3] Então, a instrução copia os valores


timer[3] em timer[4]

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;

Publicação 1756-RM003F-PT-P - Maio 2002


InstruçõesInstruções de Array (Arquivo)/Miscelânea (FAL, FSC, COP, CPS, FLL, AVE, SRT, STD, SIZE)- 7-31

Preenchimento de Arquivo A instrução FLL preenche os elementos de um array com o valor


Source. Source permanece inalterado.
(FLL)
Operandos:

Lógica Ladder

Operando: Tipo: Formato: Descrição:


Source SINT imediato elemento para cópia
INT tag Importante: os operandos Source e
DINT Destination devem ter o mesmo tipo de
REAL dados ou podem ocorrer resultados
inesperados.
Destination SINT tag elemento inicial a ser sobrescrito por Source
INT Importante: os operandos Source e
DINT Destination devem ter o mesmo tipo de
REAL dados ou podem ocorrer resultados
structure inesperados.
O melhor jeito para inicializar uma estrutura
é usar a instrução COP.
Length DINT imediato número de elementos a serem preenchidos

Texto Estruturado

O texto estruturado não possui uma instrução FLL, mas é possível


alcançar os mesmos resultados usando uma instrução SIZE e uma
FOR...DO ou outra construção de malha.

SIZE(destination,0,length);
FOR position = 0 TO length-1 DO
destination[position] := source;
END_FOR;

Consulte página C- para informações sobre a sintaxe de construções


no texto estruturado.

Descrição: O número de bytes preenchidos é:

Contagem de Byte = Comprimento ∗ (número de bytes no tipo de


dados de Destination)

A instrução FLL opera na memória de dados contínua.

A instrução FLL não gravará logo após o final de um array. Se o


comprimento for maior do que o número total de elementos no array
Destination, a instrução COP pára no final do array. Nenhuma falha
grave é gerada.

Para obter resultados melhores, Source e Destination devem ser do


mesmo tipo. Se você quiser preencher uma estrutura, use a instrução
COP (consulte o exemplo 3 na página 7-28). Se você quiser combinar

Publicação 1756-RM003F-PT-P - Maio 2002


7-32 InstruçõesInstruções de Array (Arquivo)/Miscelânea (FAL, FSC, COP, CPS, FLL, AVE, SRT, STD, SIZE)-

os tipos de dados para Source e Destination, os elementos em


Destination são preenchidos com os valores convertidos de Source.

Se Source for: E Destination for: Source é convertido


para:
SINT, INT, DINT ou REAL SINT SINT
SINT, INT, DINT ou REAL INT INT
SINT, INT, DINT ou REAL DINT DINT
SINT, INT, DINT ou REAL REAL REAL
SINT structure SINT (não convertido)
INT structure INT (não convertido)
DINT structure DINT (não convertido)
REAL structure REAL (não convertido)

Flags de Status Aritmético: não afetados

Condições de Falha: nenhuma

Publicação 1756-RM003F-PT-P - Maio 2002


InstruçõesInstruções de Array (Arquivo)/Miscelânea (FAL, FSC, COP, CPS, FLL, AVE, SRT, STD, SIZE)- 7-33

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

end_address = start_address + (Comprimento ∗


número de bytes em um elemento de destino)

end_address > fim do sim end_address = fim do array destino


array destino

não

source_address = Source

destination_address = sim
end_address

não

copiar os dados de source_address para


destination _address

saída da condição da linha é


definida como verdadeira
destination_address =
destination_address + 1

fim

postscan A saída da condição da linha é definida como falsa.

Exemplo: A instrução FLL copia o valor em value_1 para dest_1

Publicação 1756-RM003F-PT-P - Maio 2002


7-34 InstruçõesInstruções de Array (Arquivo)/Miscelânea (FAL, FSC, COP, CPS, FLL, AVE, SRT, STD, SIZE)-

Lógica Ladder

Tipo de dados Valor (value_1) Destination Destination


(value_1) Source: Source: (dest_1) tipo de (dest_1) valor depois
dados: de FLL:
SINT 16#80 (-128) DINT 16#FFFF FF80 (-128)
DINT 16#1234 5678 SINT 16#78
SINT 16#01 REAL 1.0
REAL 2.0 INT 16#0002
SINT 16#01 TIMER 16#0101 0101
16#0101 0101
16#0101 0101
INT 16#0001 TIMER 16#0001 0001
16#0001 0001
16#0001 0001
DINT 16#0000 0001 TIMER 16#0000 0001
16#0000 0001
16#0000 0001

Texto Estruturado:

dest_1 := value_1;

Publicação 1756-RM003F-PT-P - Maio 2002


InstruçõesInstruções de Array (Arquivo)/Miscelânea (FAL, FSC, COP, CPS, FLL, AVE, SRT, STD, SIZE)- 7-35

Média de Arquivo (AVE) A instrução AVE calcula a média de um conjunto de valores.

Operandos:

Lógica Ladder

Operando: Tipo: Formato: Descrição:


Array SINT tag do array encontre a média dos valores nesse array
INT especifique o primeiro elemento do grupo de
DINT elementos para a média
REAL não use CONTROL.POS no subscrito
Dimension DINT imediato a dimensão a ser usada
to vary (0, 1, 2) depende do número de dimensões, a
seqüência é
array[dim_0,dim_1,dim_2]
array[dim_0,dim_1]
array[dim_0]
Destination SINT tag resultado da operação
INT
DINT
REAL
Control CONTROL tag estrutura de controle para a operação
Length DINT imediato número de elementos do array para a média
Position DINT imediato elemento atual no array
normalmente, valor inicial é 0

Texto Estruturado

O texto estruturado não possui uma instrução AVE, mas é possível


alcançar os mesmos resultados usando uma instrução SIZE e uma
FOR...DO ou outra construção de malha.

SIZE(array,0,length);
sum := 0;
FOR position = 0 TO length DO-1
sum := sum + array[position];
END_FOR;
Destination = sum / length;

Consulte página C- para informações sobre a sintaxe de construções


no texto estruturado.

estrutura CONTROL

Mnemônico: Tipo de Dados: Descrição:


.EN BOOL O bit habilitado indica que a instrução AVE está habilitada.
.DN BOOL O bit executado é energizado quando a instrução operou no último elemento no Array (.POS = .LEN).

Publicação 1756-RM003F-PT-P - Maio 2002


7-36 InstruçõesInstruções de Array (Arquivo)/Miscelânea (FAL, FSC, COP, CPS, FLL, AVE, SRT, STD, SIZE)-

Mnemônico: Tipo de Dados: Descrição:


.ER BOOL O bit de erro é energizado se a instrução gerar um overflow. A instrução pára a execução até que o
programa zere o bit .ER. A posição do elemento que provocou o overflow está armazenada no valor .POS.
.LEN DINT O comprimento especifica o número dos elementos no array no qual a instrução opera.
.POS DINT A posição contém a posição do elemento atual que a instrução está acessando.

Descrição: A instrução AVE calcula a média de um conjunto de valores.

IMPORTANTE Certifique-se de que Length não faça com que a


instrução exceda o operando Dimension to vary
especificado. Se isso ocorrer, Destination ficará
incorreto.

Flags de Status Aritmético: Os flags de status aritmético são afetados.

Condições de Falha:

Uma falha grave ocorrerá se: Tipo de falha: Código de falha:


.POS < 0 ou .LEN < 0 4 21
o operando Dimension to vary não existe 4 20
para o array especificado

Publicação 1756-RM003F-PT-P - Maio 2002


InstruçõesInstruções de Array (Arquivo)/Miscelânea (FAL, FSC, COP, CPS, FLL, AVE, SRT, STD, SIZE)- 7-37

Execução:

Condição: Ação da Lógica Ladder:


prescan O bit .EN é desenergizado.
O bit .DN é desenergizado.
O bit .ER é desenergizado.
A saída da condição da linha é definida como falsa.

entrada da condição da linha for falsa

bit .DN = 0
examinar bit .DN

bit .DN = 1

bit .EN é desenergizado.


bit .ER é desenergizado.
bit .DN é desenergizado.
valor .POS é desenergizado

saída da condição da linha é


definida como falsa

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.

Exemplo 1: Média array_dint, que é DINT[4,5].

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

Publicação 1756-RM003F-PT-P - Maio 2002


7-38 InstruçõesInstruções de Array (Arquivo)/Miscelânea (FAL, FSC, COP, CPS, FLL, AVE, SRT, STD, SIZE)-

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;

Publicação 1756-RM003F-PT-P - Maio 2002


InstruçõesInstruções de Array (Arquivo)/Miscelânea (FAL, FSC, COP, CPS, FLL, AVE, SRT, STD, SIZE)- 7-39

Exemplo 2: Média array_dint, que é DINT[4,5].

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;

Publicação 1756-RM003F-PT-P - Maio 2002


7-40 InstruçõesInstruções de Array (Arquivo)/Miscelânea (FAL, FSC, COP, CPS, FLL, AVE, SRT, STD, SIZE)-

Classificação de Arquivo A instrução SRT classifica um conjunto de valores em uma dimensão


(Dim to vary) do array em ordem crescente.
(SRT)
Operandos:

Lógica Ladder

Operando: Tipo: Formato: Descrição:


Array SINT tag do array array para classificação
INT especifique o primeiro elemento do grupo de
DINT elementos para classificação
REAL não use CONTROL.POS no subscrito
Dimension DINT imediato a dimensão a ser usada
to vary (0, 1, 2) depende do número de dimensões, a
seqüência é
array[dim_0,dim_1,dim_2]
array[dim_0,dim_1]
array[dim_0]
Control CONTROL tag estrutura de controle para a operação
Length DINT imediato número de elementos do array
para classificação
Position DINT imediato elemento atual no array
normalmente, valor inicial é 0

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

Mnemônico: Tipo de Dados: Descrição:


.EN BOOL O bit habilitado indica que a instrução SRT está habilitada.
.DN BOOL O bit executado é energizado quando os elementos especificados forem classificados.
.ER BOOL O bit de erro é energizado quando uma das condições .LEN < 0 ou .POS < 0 também gerar
uma falha grave.
.LEN DINT O comprimento especifica o número dos elementos no array no qual a instrução opera.
.POS DINT A posição contém a posição do elemento atual que a instrução está acessando.

Publicação 1756-RM003F-PT-P - Maio 2002


InstruçõesInstruções de Array (Arquivo)/Miscelânea (FAL, FSC, COP, CPS, FLL, AVE, SRT, STD, SIZE)- 7-41

Descrição: A instrução SRT classifica um conjunto de valores em uma dimensão


(Dim to vary) do array em ordem crescente.

IMPORTANTE Certifique-se de que Length não faça com que a


instrução exceda o operando Dimension to vary
especificado. Se isto acontecer, resultados
inesperados ocorrerão.

Essa é uma instrução transicional:


• Na lógica ladder, alterna-se a entrada da condição de linha de
desenergizado para energizado a cada hora que a instrução
deveria ser executada.
• No texto estruturado, condicione a instrução para que ela
somente execute em uma transição. Consulte página C-.

Flags de Status Aritmético: Os flags de status aritmético são afetados.

Condições de Falha:

Uma falha grave ocorrerá se: Tipo de falha: Código de falha:


.POS < 0 ou .LEN < 0 4 21
o operando Dimension to vary não existe 4 20
para o array especificado
A instrução tenta acessar os dados 4 20
localizados fora dos limites do array.

Publicação 1756-RM003F-PT-P - Maio 2002


7-42 InstruçõesInstruções de Array (Arquivo)/Miscelânea (FAL, FSC, COP, CPS, FLL, AVE, SRT, STD, SIZE)-

Execução:

Condição: Ação da Lógica Ladder: Ação do Texto Estruturado


prescan O bit .EN é desenergizado. O bit .EN é desenergizado.
O bit .DN é desenergizado. O bit .DN é desenergizado.
O bit .ER é desenergizado. O bit .ER é desenergizado.
A saída da condição da linha é definida como falsa.
na
entrada da condição da linha é falsa

bit .DN = 0
examinar bit .DN

bit .DN = 1

bit .EN é desenergizado.


bit .ER é desenergizado.
bit .DN é desenergizado.
valor .POS é desenergizado

saída da condição da linha é


definida como falsa

fim

entrada da condição da A instrução executa. na


linha é verdadeira A saída da condição da linha está definida como
verdadeira.
EnableIn está energizado na EnableIn está sempre energizado
A instrução executa.
Execução da Instrução A instrução escolhe os elementos especificados A instrução escolhe os elementos especificados
do array em ordem ascendente. do array em ordem ascendente.
postscan A saída da condição da linha é definida como falsa. Nenhuma ação tomada.

Publicação 1756-RM003F-PT-P - Maio 2002


InstruçõesInstruções de Array (Arquivo)/Miscelânea (FAL, FSC, COP, CPS, FLL, AVE, SRT, STD, SIZE)- 7-43

Exemplo 1: Classifique array_dint, que é DINT[4,5].

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);

Publicação 1756-RM003F-PT-P - Maio 2002


7-44 InstruçõesInstruções de Array (Arquivo)/Miscelânea (FAL, FSC, COP, CPS, FLL, AVE, SRT, STD, SIZE)-

Exemplo 2: Classifique int _array, que é DINT[4,5].

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);

Publicação 1756-RM003F-PT-P - Maio 2002


InstruçõesInstruções de Array (Arquivo)/Miscelânea (FAL, FSC, COP, CPS, FLL, AVE, SRT, STD, SIZE)- 7-45

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

Operando: Tipo: Formato: Descrição:


Array SINT tag do encontra o desvio padrão dos valores nesse array
INT array especifica o primeiro elemento do grupo de
DINT elementos a serem usados no cálculo do desvio
REAL padrão
não use CONTROL.POS no subscrito
Um tag SINT ou INT é convertido para um valor DINT pela extensão de sinal.
Dimension DINT imediato a dimensão a ser usada
to vary (0, 1, 2) depende do número de dimensões, a seqüência é
array[dim_0,dim_1,dim_2]
array[dim_0,dim_1]
array[dim_0]
Destination REAL tag resultado da operação
Control CONTROL tag estrutura de controle para a operação
Length DINT imediato número de elementos do array a serem usados no
cálculo do desvio padrão
Position DINT imediato elemento atual no array
normalmente, valor inicial é 0

estrutura CONTROL

Mnemônico: Tipo de Dados: Descrição:


.EN BOOL O bit habilitado indica que a instrução STD está habilitada.
.DN BOOL O bit executado é energizado quando o cálculo é concluído.
.ER BOOL O bit de erro é energizado quando a instrução gerar um overflow. A instrução pára a
execução até que o programa zere o bit .ER. A posição do elemento que provocou o overflow
está armazenada no valor .POS.
.LEN DINT O comprimento especifica o número dos elementos no array no qual a instrução opera.
.POS DINT A posição contém a posição do elemento atual que a instrução está acessando.

Texto Estruturado

O texto estruturado não possui uma instrução STD, mas é possível


alcançar os mesmos resultados usando uma instrução SIZE e uma
FOR...DO ou outra construção de malha.

SIZE(destination,0,length);
sum := 0;
FOR position = 0 TO length-1 DO
sum := sum + array[position];

Publicação 1756-RM003F-PT-P - Maio 2002


7-46 InstruçõesInstruções de Array (Arquivo)/Miscelânea (FAL, FSC, COP, CPS, FLL, AVE, SRT, STD, SIZE)-

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));

Consulte página C- para informações sobre a sintaxe de construções


no texto estruturado.

Descrição: O desvio padrão é calculado de acordo com esta fórmula:

 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

IMPORTANTE Certifique-se de que Length não faça com que a


instrução exceda o operando Dimension to vary
especificado. Se isso ocorrer, Destination ficará
incorreto.

Flags de Status Aritmético: Os flags de status aritmético são afetados.

Publicação 1756-RM003F-PT-P - Maio 2002


InstruçõesInstruções de Array (Arquivo)/Miscelânea (FAL, FSC, COP, CPS, FLL, AVE, SRT, STD, SIZE)- 7-47

Condições de Falha:

Uma falha grave ocorrerá se: Tipo de falha: Código de falha:


.POS < 0 ou .LEN < 0 4 21
o operando Dimension to vary não existe 4 20
para o array especificado

Execução:

Condição: Ação da Lógica Ladder:


prescan O bit .EN é desenergizado.
O bit .DN é desenergizado.
O bit .ER é desenergizado.
A saída da condição da linha é definida como falsa.

entrada da condição da linha for falsa

bit .DN = 0
examinar bit .DN

bit .DN = 1

bit .EN é desenergizado.


bit .ER é desenergizado.
bit .DN é desenergizado.
valor .POS é desenergizado

saída da condição da linha é


definida como falsa

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.

Publicação 1756-RM003F-PT-P - Maio 2002


7-48 InstruçõesInstruções de Array (Arquivo)/Miscelânea (FAL, FSC, COP, CPS, FLL, AVE, SRT, STD, SIZE)-

Exemplo 1: Calcular o desvio padrão de dint_array, que é DINT[4,5].


dimensão 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

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));

Publicação 1756-RM003F-PT-P - Maio 2002


InstruçõesInstruções de Array (Arquivo)/Miscelânea (FAL, FSC, COP, CPS, FLL, AVE, SRT, STD, SIZE)- 7-49

Exemplo 2: Calcular o desvio padrão de dint_array, que é DINT[4,5].


dimensão 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));

Publicação 1756-RM003F-PT-P - Maio 2002


7-50 InstruçõesInstruções de Array (Arquivo)/Miscelânea (FAL, FSC, COP, CPS, FLL, AVE, SRT, STD, SIZE)-

Tamanho em Elementos A instrução SIZE encontra o tamanho de uma dimensão de um array.


(SIZE)
Operandos:

Lógica Ladder

Operando: Tipo: Formato: Descrição:


Source SINT tag do array array no qual a instrução é operar
INT
DINT
REAL
structure
string
Dimension DINT imediato (0, dimensão a ser usada
to Vary 1, 2)
Para o tamanho da: Insira:
primeira dimensão 0
segunda dimensão 1
terceira dimensão 2

Size SINT tag tag para armazenar o número de elementos


INT na dimensão especificada do array
DINT
REAL

Texto Estruturado
SIZE(Source,Dimtovary,Size);
Os operandos são os mesmos que aqueles para a instrução da lógica
ladder SIZE.

Descrição: A instrução SIZE encontra o número de elementos (tamanho) na


dimensão determinada do array Source e coloca o resultado no
operando Size.
• A instrução encontra o tamanho de uma dimensão de um array.
• A instrução opera em:
– array
– array em uma estrutura
– array que é parte de um array maior

Flags de Status Aritmético: não afetados

Condições de Falha: nenhuma

Publicação 1756-RM003F-PT-P - Maio 2002


InstruçõesInstruções de Array (Arquivo)/Miscelânea (FAL, FSC, COP, CPS, FLL, AVE, SRT, STD, SIZE)- 7-51

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. 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 encontra o tamanho de uma dimensão. A instrução encontra o tamanho de uma dimensão.
postscan A saída da condição da linha é definida como falsa. Nenhuma ação tomada.

Exemplo 1: Encontrar o número de elementos na dimensão 0 (primeira dimensão)


de array_a. Armazene o tamanho em array_a_size. Neste exemplo, a
dimensão 0 de array_a tem 10 elementos.

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);

Exemplo 2: Encontrar o número de elementos no membro DATA de string_1 que


é uma string. Armazene o tamanho em string_1_size. Neste exemplo,
o membro DATA da string_1 tem 82 elementos. (A string usa o tipo de
dados STRING padrão.) Como cada elemento mantém um caracter,
string_1 pode conter até 82 caracteres.

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);

Publicação 1756-RM003F-PT-P - Maio 2002


7-52 InstruçõesInstruções de Array (Arquivo)/Miscelânea (FAL, FSC, COP, CPS, FLL, AVE, SRT, STD, SIZE)-

Exemplo 3: Strings_a é um array de estruturas da string. A instrução SIZE encontra


o número de elementos no membro DATA da estrutura da string e
armazena o tamanho em data_size_a. Neste exemplo, o membro
DATA tem 24 elementos. (A estrutura de string tem um comprimento
especificado pelo usuário de 24).

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);

Publicação 1756-RM003F-PT-P - Maio 2002


Capítulo 8

Instruções de Array (Arquivo)/Deslocamento


(BSL, BSR, FFL, FFU, LFL, LFU)

Introdução Use as instruções de array (arquivo)/deslocamento para modificar a


localização dos dados dentro dos arrays.

Se você quiser: Use esta instrução: Disponível nessas linguagens: Consulte


página:
carregar bits, deslocar bits e descarregar bits BSL lógica ladder 8-2
de um array de bits, um bit de cada vez.
BSR lógica ladder 8-5
carregar e descarregar os valores na FFL lógica ladder 8-8
mesma seqüência.
FFU lógica ladder 8-14
carregar e descarregar os valores em LFL lógica ladder 8-20
ordem reversa.
LFU lógica ladder 8-26

É possível misturar os tipos de dados, mas podem ocorrer perda de


precisão e erro de arredondamento.

Para instruções de lógica ladder, os tipos de dados em negrito


indicam tipos de dados otimizados. Uma instrução executa mais
rapidamente e requer menos memória se todos os operandos da
instrução usam o mesmo tipo de dados otimizados, geralmente, DINT
ou REAL.

1 Publicação 1756-RM003F-PT-P - Maio 2002


8-2 Instruções de Array (Arquivo)/Deslocamento (BSL, BSR, FFL, FFU, LFL, LFU)

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

Operando: Tipo: Formato: Descrição:


Array DINT tag do array array a ser modificado
especifique o primeiro elemento do grupo de
elementos
não use CONTROL.POS no subscrito
Control CONTROL tag estrutura de controle para a operação
Source bit BOOL tag bit a ser deslocado
Length DINT imediato número de bits do array a ser deslocado

Estrutura CONTROL

Mnemônico: Tipo de Dados: Descrição:


.EN BOOL O bit habilitado indica que a instrução BSL está habilitada.
.DN BOOL O bit executado é energizado para indicar que os bits foram deslocados uma posição para a
esquerda.
.UL BOOL O bit de descarga é a saída da instrução. O bit .UL armazena o status do bit que foi deslocado
fora da faixa dos bits.
.ER BOOL O bit de erro é energizado quando .LEN < 0.
.LEN DINT O comprimento especifica o número de bits no array a ser deslocado.

Descrição: Quando habilitada, a instrução descarrega o bit mais significativo dos


bits especificados para o bit .UL, desloca os bits restantes uma posição
para a esquerda e carrega o bit Source no bit 0 do Array.

A instrução BSL opera na memória de dados contínua.

Flags de Status Aritmético: não afetados

Condições de Falha: nenhuma

Publicação 1756-RM003F-PT-P - Maio 2002


Instruções de Array (Arquivo)/Deslocamento (BSL, BSR, FFL, FFU, LFL, LFU) 8-3

Execução

Condição: Ação da Lógica Ladder:


prescan O bit .EN é desenergizado.
O bit .DN é desenergizado.
O bit .ER é desenergizado.
O valor .POS é desenergizado.
A saída da condição da linha é definida como falsa.
entrada da condição da linha é falsa O bit .EN é desenergizado.
O bit .DN é desenergizado.
O bit .ER é desenergizado.
O valor .POS é desenergizado.
A saída da condição da linha é definida como falsa.

entrada da condição da linha é verdadeira

bit .EN = 1
examinar bit .EN

bit .EN = 0

bit .EN é energizado

sim
.LEN = 0 bit .DN é energizado.

não

.source bit = 1 bit .UL permanece


examinar bit source energizado
sim bit .ER é
.LEN < 0 energizado

.source bit = 0

não
bit .UL é energizado
deslocar array da esquerda uma posição para a
esquerda
bit
bit .UL array
source

saída da condição da linha é


definida como verdadeira
bit .DN é energizado.
.POS = .LEN

fim

postscan A saída da condição da linha é definida como falsa.

Publicação 1756-RM003F-PT-P - Maio 2002


8-4 Instruções de Array (Arquivo)/Deslocamento (BSL, BSR, FFL, FFU, LFL, LFU)

Exemplo 1: Quando habilitada, a instrução BSL começa no bit 0 em array_dint[0].


A instrução descarrega array_dint[0].9 no bit .UL, desloca os bits
remanescentes e carrega input_1 em array_dint[0].0. Os valores nos
bits remanescentes (10-31) são inválidos.

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

Exemplo 2: Quando habilitada, a instrução BSL começa no bit 0 em array_dint[0].


A instrução descarrega array_dint[1].25 no bit .UL, desloca os bits
remanescentes e carrega input_1 em array_dint[0].0. Os valores nos
bits remanescentes (31-26 em array_dint[1]) são inválidos. Observe
como array_dint[0].31 desloca-se através das palavras para
array_dint[1].0.

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

0 esses bits foram deslocados para a esquerda

bit .UL

Publicação 1756-RM003F-PT-P - Maio 2002


Instruções de Array (Arquivo)/Deslocamento (BSL, BSR, FFL, FFU, LFL, LFU) 8-5

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

Operando: Tipo: Formato: Descrição:


Array DINT tag do array array a ser modificado
especifica o elemento em que o
deslocamento deve começar
não use CONTROL.POS no subscrito
Control CONTROL tag estrutura de controle para a operação
Bit Source BOOL tag bit a ser deslocado
Length DINT imediato número de bits do array a ser deslocado

Estrutura CONTROL

Mnemônico: Tipo de Dados: Descrição:


.EN BOOL O bit habilitado indica que a instrução BSR está habilitada.
.DN BOOL O bit executado é energizado para indicar que os bits foram deslocados uma posição para a
direita.
.UL BOOL O bit de descarga é a saída da instrução. O bit .UL armazena o status do bit que foi deslocado
fora da faixa dos bits.
.ER BOOL O bit de erro é energizado quando .LEN < 0.
.LEN DINT O comprimento especifica o número de bits no array a ser deslocado.

Descrição: Quando habilitada, a instrução descarrega o valor do bit do Array para


o bit .UL, desloca os bits restantes uma posição para a direita e
carrega o bit Source no bit mais significativo dos bits especificados.

A instrução BSR opera na memória de dados contínua.

Flags de Status Aritmético: não afetados

Condições de Falha: nenhuma

Publicação 1756-RM003F-PT-P - Maio 2002


8-6 Instruções de Array (Arquivo)/Deslocamento (BSL, BSR, FFL, FFU, LFL, LFU)

Execução

Condição: Ação da Lógica Ladder:


prescan O bit .EN é desenergizado.
O bit .DN é desenergizado.
O bit .ER é desenergizado.
O valor .POS é desenergizado.
A saída da condição da linha é definida como falsa.
entrada da condição da linha for falsa O bit .EN é desenergizado.
O bit .DN é desenergizado.
O bit .ER é desenergizado.
O valor .POS é desenergizado.
A saída da condição da linha é definida como falsa.

entrada da condição da linha é verdadeira

bit .EN = 1
examinar bit .EN

bit .EN = 0

bit .EN é energizado

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

Bit array bit .UL


Source

saída da condição da linha é


definida como verdadeira
bit .DN é energizado.
.POS = .LEN

fim

postscan A saída da condição da linha é definida como falsa.

Publicação 1756-RM003F-PT-P - Maio 2002


Instruções de Array (Arquivo)/Deslocamento (BSL, BSR, FFL, FFU, LFL, LFU) 8-7

Exemplo 1: Quando habilitada, a instrução BSR começa no bit 9 em array_dint[0].


A instrução descarrega array_dint[0].0 no bit .UL, desloca os bits
remanescentes à direita e carrega input_1 em array_dint[0].9. Os
valores nos bits remanescentes (10-31) são inválidos.

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

Exemplo 2: Quando habilitada, a instrução BSR começa no bit 25 em array_dint[1].


A instrução descarrega array_dint[0].0 no bit .UL, desloca os bits
remanescentes à direita e carrega input_1 em array_dint[1].25. Os
valores nos bits remanescentes (31-26 em dint_array[1]) são inválidos.
Observe como array_dint[1].0 desloca-se através das palavras para
array_dint[1].31.

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

1 esses bits foram deslocados para a direita

input_1

Publicação 1756-RM003F-PT-P - Maio 2002


8-8 Instruções de Array (Arquivo)/Deslocamento (BSL, BSR, FFL, FFU, LFL, LFU)

Carga FIFO (FFL) A instrução FFL copia o valor Source para FIFO.

Operandos:

Lógica Ladder

Operando: Tipo: Formato: Descrição:


Source SINT imediato dados a serem armazenados em FIFO
INT tag
DINT
REAL
string
structure
Source converte ao tipo de dados do tag do array. Um inteiro menor
converte a um inteiro maior pela extensão do sinal.
FIFO SINT tag do array FIFO a ser modificado
INT especifique o primeiro elemento de FIFO
DINT não use CONTROL.POS no subscrito
REAL
string
estrutura
Control CONTROL tag estrutura de controle para a operação
geralmente, usa o mesmo CONTROL,
conforme associado a FFU
Length DINT imediato número máximo de elementos que FIFO pode
controlar de uma vez.
Position DINT imediato próxima localização em FIFO em que a
instrução carrega os dados.
normalmente, valor inicial é 0

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

Mnemônico: Tipo de Dados: Descrição:


.EN BOOL O bit habilitado indica que a instrução FFL está habilitada.
.DN BOOL O bit executado é energizado para indicar que FIFO está cheio (.POS=LEN). O bit .DN inibe a
carga FIFO até .POS < .LEN.
.EM BOOL O bit vazio indica que FIFO está vazio. Se .LEN ≤ 0 ou .POS < 0, o bit .EM e o bit .DN são
energizados.
.LEN DINT O comprimento especifica o número máximo de elementos que FIFO pode controlar de uma
vez.
.POS DINT A posição identifica a localização em FIFO em que a instrução carregará o próximo valor.

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.

Publicação 1756-RM003F-PT-P - Maio 2002


Instruções de Array (Arquivo)/Deslocamento (BSL, BSR, FFL, FFU, LFL, LFU) 8-9

Geralmente, Source e FIFO são do mesmo tipo de dados.

Quando habilitada, a instrução FFL carrega o valor Source na posição


FIFO identificada pelo valor .POS. A instrução carrega um valor cada
vez que a instrução é habilitada até que FIFO fique cheio.

A instrução FFL opera na memória de dados contínua.

Flags de Status Aritmético: não afetados

Condições de Falha:

Uma falha grave ocorrerá se: Tipo de falha: Código de falha:


(elemento de início + .POS) > tamanho do array de 4 20
FIFO

Publicação 1756-RM003F-PT-P - Maio 2002


8-10 Instruções de Array (Arquivo)/Deslocamento (BSL, BSR, FFL, FFU, LFL, LFU)

Execução

Condição: Ação da Lógica Ladder:


prescan

o bit .EN é energizado para evitar uma


carga falsa quando o scan começar

sim
.LEN < 0

não

sim
.POS < 0

não

.EM é desenergizado. .EM é energizado


bit .DN é desenergizado. .DN é energizado

sim
.POS = 0 .EM é energizado

não

sim
.POS ≥ .LEN .DN é energizado

não

saída da condição da linha é


definida como falsa

fim

Publicação 1756-RM003F-PT-P - Maio 2002


Instruções de Array (Arquivo)/Deslocamento (BSL, BSR, FFL, FFU, LFL, LFU) 8-11

Condição: Ação da Lógica Ladder:

entrada da condição da linha é falsa

bit .EN é desenergizado.

sim
.LEN < 0

não

sim
.POS < 0

não

.EM é desenergizado. .EM é energizado


bit .DN é desenergizado. .DN é energizado

sim
.POS = 0 .EM é energizado

não

sim
.POS ≥ .LEN .DN é energizado

não

saída da condição da linha é


definida como falsa

fim

Publicação 1756-RM003F-PT-P - Maio 2002


8-12 Instruções de Array (Arquivo)/Deslocamento (BSL, BSR, FFL, FFU, LFL, LFU)

Condição: Ação da Lógica Ladder:

entrada da condição da linha for verdadeira

.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

bit .EM é energizado


sim bit .EM é desenergizado. .DN é energizado
.POS < 0 bit .DN é desenergizado.
.POS = .POS + 1

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

saída da condição da linha é


definida como verdadeira

fim

postscan A saída da condição da linha é definida como falsa.

Publicação 1756-RM003F-PT-P - Maio 2002


Instruções de Array (Arquivo)/Deslocamento (BSL, BSR, FFL, FFU, LFL, LFU) 8-13

Exemplo: Quando habilitada, a instrução FFL carrega value_1 para a próxima


posição em FIFO, que é array_dint[5] nesse exemplo.

antes da carga FIFO depois da carga FIFO


array_dint[0] 00000 00000
11111 11111
22222 22222
33333 control_1.pos = 5 33333
44444 value_1 = 55555 44444
array_dint[5] 00000 55555

00000 00000 control_1.pos = 6


00000 00000
00000 00000
00000 00000

Publicação 1756-RM003F-PT-P - Maio 2002


8-14 Instruções de Array (Arquivo)/Deslocamento (BSL, BSR, FFL, FFU, LFL, LFU)

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

Operando: Tipo: Formato: Descrição:


FIFO SINT tag do array FIFO a ser modificado
INT especifique o primeiro elemento de FIFO
DINT não use CONTROL.POS no subscrito
REAL
string
structure
Destination SINT tag valor que saiu de FIFO
INT
DINT
REAL
string
structure
O valor de Destination converte no tipo de dados do tag Destination. Um
inteiro menor converte em um inteiro maior pela extensão do sinal.
Control CONTROL tag estrutura de controle para a operação
geralmente, usa o mesmo CONTROL como a
FFL associada
Length DINT imediato número máximo de elementos que FIFO pode
controlar de uma vez.
Position DINT imediato próxima localização em FIFO onde a instrução
descarrega os dados.
normalmente, valor inicial é 0

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

Mnemônico: Tipo de Dados: Descrição:


. EU BOOL O bit de descarga habilitado indica que a instrução FFU está habilitada. O bit .EU é
energizado para pré-programar uma descarga falsa quando o scan do programa inicia.
.DN BOOL O bit executado é energizado para indicar que FIFO está cheio (.POS=LEN).
.EM BOOL O bit vazio indica que FIFO está vazio. Se .LEN ≤ 0 ou .POS < 0, o bit .EM e o bit .DN são
definidos.
.LEN DINT O comprimento especifica o número máximo de elementos em FIFO.
.POS DINT A posição identifica o fim dos dados que foram carregados em FIFO.

Publicação 1756-RM003F-PT-P - Maio 2002


Instruções de Array (Arquivo)/Deslocamento (BSL, BSR, FFL, FFU, LFL, LFU) 8-15

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).

Quando habilitada, a instrução FFU descarrega os dados do primeiro


elemento de FIFO e coloca esse valor em Destination. A instrução
descarrega um valor cada vez que a instrução é habilitada, até que
FIFO fique vazio. Se FIFO estiver vazio, FFU retorna 0 para
Destination.

A instrução FFU opera na memória de dados contínua.

Flags de Status Aritmético: não afetados

Condições de Falha:

Uma falha grave ocorrerá se: Tipo de falha: Código de falha:


Length > FIFO tamanho do array 4 20

Publicação 1756-RM003F-PT-P - Maio 2002


8-16 Instruções de Array (Arquivo)/Deslocamento (BSL, BSR, FFL, FFU, LFL, LFU)

Execução

Condição: Ação da Lógica Ladder:

prescan

o bit .EU é energizado para evitar uma


descarga falsa quando o scan começar

sim
.LEN < 0

não

sim
.POS < 0

não

.EM é desenergizado. .EM é energizado


bit .DN é desenergizado. .DN é energizado

sim
.POS = 0 .EM é energizado

não

sim
.POS ≥ .LEN .DN é energizado

não

saída da condição da linha é


definida como falsa

fim

Publicação 1756-RM003F-PT-P - Maio 2002


Instruções de Array (Arquivo)/Deslocamento (BSL, BSR, FFL, FFU, LFL, LFU) 8-17

Condição: Ação da Lógica Ladder:

entrada da condição da linha é falsa

bit .EU é desenergizado.

sim
.LEN < 0

não

sim
.POS < 0

não

.EM é desenergizado. .EM é energizado


bit .DN é desenergizado. .DN é energizado

sim
.POS = 0 .EM é energizado

não

sim
.POS ≥ .LEN .DN é energizado

não

saída da condição da linha é


definida como falsa

fim

Publicação 1756-RM003F-PT-P - Maio 2002


8-18 Instruções de Array (Arquivo)/Deslocamento (BSL, BSR, FFL, FFU, LFL, LFU)

Condição: Ação da Lógica Ladder:


entrada da condição da linha for verdadeira

.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

bit .EM é desenergizado. bit .EM é energizado


sim bit .DN é desenergizado. .DN é energizado
.POS < 0

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

postscan A saída da condição da linha é definida como falsa.

Publicação 1756-RM003F-PT-P - Maio 2002


Instruções de Array (Arquivo)/Deslocamento (BSL, BSR, FFL, FFU, LFL, LFU) 8-19

Exemplo: Quando habilitada, a instrução FFU descarrega array_dint[0] em


value_2 e desloca os elementos restantes para array_dint.

antes da descarga FIFO depois da descarga FIFO


array_dint[0] 00000 11111

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

Publicação 1756-RM003F-PT-P - Maio 2002


8-20 Instruções de Array (Arquivo)/Deslocamento (BSL, BSR, FFL, FFU, LFL, LFU)

Carga LIFO (LFL) A instrução LFL copia o valor Source para LIFO.

Operandos:

Lógica Ladder

Operando: Tipo: Formato: Descrição:


Source SINT imediato dados a serem armazenados em LIFO
INT tag
DINT
REAL
string
structure
Source converte para o tipo de dados do tag do array. Um inteiro menor
converte para um inteiro maior pela extensão do sinal.
LIFO SINT tag do array LIFO a ser modificado
INT especifique o primeiro elemento de LIFO
DINT não use CONTROL.POS no subscrito
REAL
string
structure
Control CONTROL tag estrutura de controle para a operação
geralmente usa o mesmo CONTROL
conforme a LFU associada
Length DINT imediato número máximo de elementos que LIFO pode
controlar de uma vez.
Position DINT imediato próxima localização em LIFO em que a
instrução carrega os dados.
normalmente, valor inicial é 0

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

Mnemônico: Tipo de Dados: Descrição:


.EN BOOL O bit habilitado indica que a instrução LFL está habilitada.
.DN BOOL O bit executado é energizado para indicar que LIFO está cheio (.POS=LEN). O bit .DN inibe a carga
de LIFO até .POS < .LEN.
.EM BOOL O bit vazio indica que LIFO está vazio. Se .LEN ≤ 0 ou .POS < 0, o bit .EM e o bit .DN são energizados.
.LEN DINT O comprimento especifica o número máximo de elementos que LIFO pode controlar de uma vez.
.POS DINT A posição identifica a localização em LIFO em que a instrução carregará o próximo valor.

Publicação 1756-RM003F-PT-P - Maio 2002


Instruções de Array (Arquivo)/Deslocamento (BSL, BSR, FFL, FFU, LFL, LFU) 8-21

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.

Geralmente, Source e LIFO são do mesmo tipo de dados.

Quando habilitada, a instrução LFL carrega o valor Source na posição


LIFO identificada pelo valor .POS. A instrução carrega um valor cada
vez que a instrução é habilitada, até que LIFO fique cheia.

A instrução LFL opera na memória de dados contínua.

Flags de Status Aritmético: não afetados

Condições de Falha:

Uma falha grave ocorrerá se: Tipo de falha: Código de falha:


(elemento de início + .POS) > tamanho do array de 4 20
LIFO

Publicação 1756-RM003F-PT-P - Maio 2002


8-22 Instruções de Array (Arquivo)/Deslocamento (BSL, BSR, FFL, FFU, LFL, LFU)

Execução

Condição: Ação da Lógica Ladder:

prescan

o bit .EN é energizado para


evitar uma carga falsa

sim
.LEN < 0

não

sim
.POS < 0

não

.EM é desenergizado. .EM é energizado


bit .DN é desenergizado. .DN é energizado

sim
.POS = 0 .EM é energizado

não

sim
.POS ≥ .LEN .DN é energizado

não

saída da condição da linha é


definida como falsa

fim

Publicação 1756-RM003F-PT-P - Maio 2002


Instruções de Array (Arquivo)/Deslocamento (BSL, BSR, FFL, FFU, LFL, LFU) 8-23

Condição: Ação da Lógica Ladder:

entrada da condição da linha é falsa

bit .EN é desenergizado.

sim
.LEN < 0

não

sim
.POS < 0

não

.EM é desenergizado. .EM é energizado


bit .DN é desenergizado. .DN é energizado

sim
.POS = 0 .EM é energizado

não

sim
.POS ≥ .LEN .DN é energizado

não

saída da condição da linha é


definida como falsa

fim

Publicação 1756-RM003F-PT-P - Maio 2002


8-24 Instruções de Array (Arquivo)/Deslocamento (BSL, BSR, FFL, FFU, LFL, LFU)

Condição: Ação da Lógica Ladder:

entrada da condição da linha é verdadeira

.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

bit .EM é energizado


sim bit .EM é desenergizado. .DN é energizado
.POS < 0 bit .DN é desenergizado.
.POS = .POS + 1

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

.POS ou .LEN > sim 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

LIFO[.POS - 1] = source

saída da condição da linha é


definida como verdadeira

fim

postscan A saída da condição da linha é definida como falsa.

Publicação 1756-RM003F-PT-P - Maio 2002


Instruções de Array (Arquivo)/Deslocamento (BSL, BSR, FFL, FFU, LFL, LFU) 8-25

Exemplo: Quando habilitada, a instrução LFL carrega value_1 para a próxima


posição em LIFO, que é array_dint[5] nesse exemplo.

antes da carga LIFO depois da carga LIFO


array_dint[0] 00000 00000
11111 11111
22222 22222
33333 control_1.pos = 5 33333
44444 value_1 = 55555 44444
array_dint[5] 00000 55555

00000 00000 control_1.pos = 6


00000 00000
00000 00000
00000 00000

Publicação 1756-RM003F-PT-P - Maio 2002


8-26 Instruções de Array (Arquivo)/Deslocamento (BSL, BSR, FFL, FFU, LFL, LFU)

Descarga LIFO (LFU) A instrução LFU descarrega o valor em .POS de LIFO e armazena 0
naquele local.

Operandos:

Lógica Ladder

Operando: Tipo: Formato: Descrição:


LIFO SINT tag do array LIFO a ser modificado
INT especifique o primeiro elemento de LIFO
DINT não use CONTROL.POS no subscrito
REAL
string
structure
Destination SINT tag valor que saiu de LIFO
INT
DINT
REAL
string
structure
O valor de Destination converte para o tipo de dados do tag Destination.
Um inteiro menor converte para um inteiro maior pela extensão do sinal.
Control CONTROL tag estrutura de controle para a operação
geralmente usa o mesmo CONTROL
conforme a LFL associada
Length DINT imediato número máximo de elementos que LIFO pode
controlar de uma vez.
Position DINT imediato próxima localização em LIFO em que a
instrução descarrega os dados.
valor inicial é normalmente 0

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

Mnemônico: Tipo de Dados: Descrição:


. EU BOOL O bit de descarga habilitado indica que a instrução LFU está habilitada. O bit .EU é
energizado para pré-programar uma descarga falsa quando o scan do programa inicia.
.DN BOOL O bit executado é energizado para indicar que LIFO está cheio (.POS=LEN).
.EM BOOL O bit vazio indica que LIFO está vazio. Se .LEN ≤ 0 ou .POS < 0, o bit .EM e o bit .DN são
energizados.
.LEN DINT O comprimento especifica o número máximo de elementos que LIFO pode controlar de uma
vez.
.POS DINT A posição identifica o fim dos dados que foram carregados em LIFO.

Publicação 1756-RM003F-PT-P - Maio 2002


Instruções de Array (Arquivo)/Deslocamento (BSL, BSR, FFL, FFU, LFL, LFU) 8-27

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).

Quando habilitada, a instrução LFU descarrega o valor em .POS de


LIFO e o coloca em Destination. A instrução descarrega um valor e o
substitui com 0 cada vez que a instrução está habilitada até que LIFO
fique vazia. Se LIFO estiver vazia, LFU retorna 0 para Destination.

A instrução LFU opera na memória de dados contínua.

Flags de Status Aritmético: não afetados

Condições de Falha:

Uma falha grave ocorrerá se: Tipo de falha: Código de falha:


Length > LIFO tamanho do array 4 20

Publicação 1756-RM003F-PT-P - Maio 2002


8-28 Instruções de Array (Arquivo)/Deslocamento (BSL, BSR, FFL, FFU, LFL, LFU)

Execução

Condição: Ação da Lógica Ladder:

prescan

o bit .EU é energizado para evitar uma


descarga falsa quando o scan começar

sim
.LEN < 0

não

sim
.POS < 0

não

.EM é desenergizado. .EM é energizado


bit .DN é desenergizado. .DN é energizado

sim
.POS = 0 .EM é energizado

não

sim
.POS ≥ .LEN .DN é energizado

não

saída da condição da linha é


definida como falsa

fim

Publicação 1756-RM003F-PT-P - Maio 2002


Instruções de Array (Arquivo)/Deslocamento (BSL, BSR, FFL, FFU, LFL, LFU) 8-29

Condição: Ação da Lógica Ladder:

entrada da condição da linha é falsa

bit .EU é desenergizado.

sim
.LEN < 0

não

sim
.POS < 0

não

.EM é desenergizado. .EM é energizado


bit .DN é desenergizado. .DN é energizado

sim
.POS = 0 .EM é energizado

não

sim
.POS ≥ .LEN .DN é energizado

não

saída da condição da linha é


definida como falsa

fim

Publicação 1756-RM003F-PT-P - Maio 2002


8-30 Instruções de Array (Arquivo)/Deslocamento (BSL, BSR, FFL, FFU, LFL, LFU)

Condição: Ação da Lógica Ladder:


entrada da condição da linha é verdadeira

.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

bit .EM é bit .EM é energizado


sim desenergizado. .DN é energizado
.POS < 0 bit .DN é

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

.LEN > tamanho sim falha grave


do array

não

Destination = LIFO[control.POS]
LIFO[control.POS) = 0

saída da condição da linha é


definida como verdadeira

fim

postscan A saída da condição da linha é definida como falsa.

Publicação 1756-RM003F-PT-P - Maio 2002


Instruções de Array (Arquivo)/Deslocamento (BSL, BSR, FFL, FFU, LFL, LFU) 8-31

Exemplo: Quando habilitada, a instrução LFU descarrega array_dint[5] em


value_2.

antes da descarga LIFO depois da descarga LIFO


array_dint[0] 00000 00000

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

Publicação 1756-RM003F-PT-P - Maio 2002


8-32 Instruções de Array (Arquivo)/Deslocamento (BSL, BSR, FFL, FFU, LFL, LFU)

Notas:

Publicação 1756-RM003F-PT-P - Maio 2002


Capítulo 9

Instruções do Seqüenciador
(SQI, SQO, SQL)

Introdução Nenhuma ação tomada. As instruções do seqüenciador monitoram as


operações de forma consistente e repetida.

Se você quiser: Use esta instrução: Disponível nessas linguagens: Consulte


página:
Detectar quando uma etapa é concluída. SQI lógica ladder 9-2
Definir as condições de saída para a próxima SQO lógica ladder 9-6
etapa.
Carregar as condições de referência nos arrays SQL lógica ladder 9-10
do seqüenciador

Para instruções de lógica ladder, os tipos de dados em negrito


indicam tipos de dados otimizados. Uma instrução executa mais
rapidamente e requer menos memória se todos os operandos da
instrução usam o mesmo tipo de dado otimizado, geralmente DINT
ou REAL.

1 Publicação 1756-RM003F-PT-P - Maio 2002


9-2 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

Operando: Tipo: Formato: Descrição:


Array DINT tag do array array do seqüenciador
especifica o primeiro elemento de array do
seqüenciador
não use CONTROL.POS no subscrito
Mask SINT tag quais bits devem ser bloqueados ou podem
INT imediato passar
DINT
Um tag SINT ou INT é convertido para um valor DINT pela extensão de
sinal.
Source SINT tag dados de entrada para o array do seqüenciador
INT
DINT
Um tag SINT ou INT é convertido para um valor DINT pela extensão de
sinal.
Control CONTROL tag estrutura de controle para a operação
normalmente usa o mesmo CONTROL que as
instruções SQO e SQL
Length DINT imediato número de elementos no Array (tabela do
seqüenciador) para comparar
Position DINT imediato posição atual no array
normalmente, o valor inicial é 0

Estrutura CONTROL

Mnemônico: Tipo de Dados: Descrição:


.ER BOOL O bit de erro é energizado quando .LEN ≤ 0, .POS < 0, or .POS > .LEN.
.LEN DINT O comprimento especifica o número de etapas no array do seqüenciador.
.POS DINT A posição identifica o elemento que a instrução está comparando atualmente.

Descrição: Quando habilitada, a instrução SQI compara um elemento Source


através de um Mask para um elemento Array para igualdade.

Geralmente, usa a mesma estrutura CONTROL que as instruções SQO


e SQL

A instrução SQI opera na memória de dados contínua.

Publicação 1756-RM003F-PT-P - Maio 2002


Instruções do Seqüenciador (SQI, SQO, SQL) 9-3

Inserção de um valor de máscara imediato

Ao inserir uma máscara, o software de programação retorna ao


padrão dos valores decimais. Caso você queira inserir uma máscara
usando outro formato, coloque o prefixo correto antes do valor.

Prefixo: Descrição:
16# hexadecimal
por exemplo; 16#0F0F
8# octal
por exemplo; 8#16
2# binário
por exemplo; 2#00110011

Flags de Status Aritmético: não afetados

Condições de Falha: nenhuma

Publicação 1756-RM003F-PT-P - Maio 2002


9-4 Instruções do Seqüenciador (SQI, SQO, SQL)

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

.LEN ≤ 0
.POS < 0 não
ou bit .ER é desenergizado.
.POS > .LEN

sim

bit .ER é energizado

não Source mascarado =


Array[.POS] mascarado

sim

saída da condição da linha é saída da condição da linha é


definida como falsa definida como verdadeira

fim

postscan A saída da condição da linha é definida como falsa.

Publicação 1756-RM003F-PT-P - Maio 2002


Instruções do Seqüenciador (SQI, SQO, SQL) 9-5

Exemplo: Quando habilitada, a instrução SQI passa o value_2 através da


máscara para determinar se o resultado é igual ao elemento atual em
array_dint. A comparação mascarada é verdadeira, então, a saída da
condição de linha é verdadeira.

operando SQI Exemplo de valores (DINTs exibidos em binário):


Source xxxxxxxx xxxxxxxx xxxx0101 xxxx1010
Mask 00000000 00000000 00001111 00001111
Array xxxxxxxx xxxxxxxx xxxx0101 xxxx1010

Um 0 na máscara significa que o bit não é comparado (designado por


xxxx nesse exemplo).

Uso de SQI sem SQO

Se usar a instrução SQI sem uma instrução SQO em par, você precisa
incrementar externamente o array do seqüenciador.

A instrução SQI compara o valor da fonte. A instrução ADD


incrementa o array do seqüenciador. O GRT determinou se um outro
valor está disponível para examinar o array do seqüenciador. A
instrução MOV reseta, uma vez, o valor de posição após a conclusão
da etapa através do array do seqüenciador.

Publicação 1756-RM003F-PT-P - Maio 2002


9-6 Instruções do Seqüenciador (SQI, SQO, SQL)

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

Operando: Tipo: Formato: Descrição:


Array DINT tag do array array do seqüenciador
especifica o primeiro elemento de array do
seqüenciador
não use CONTROL.POS no subscrito
Mask SINT tag quais bits devem ser bloqueados ou podem
INT imediato passar
DINT
Um tag SINT ou INT é convertido em um valor DINT pela extensão de sinal.
Destination DINT tag dados de saída do array do seqüenciador
Control CONTROL tag estrutura de controle para a operação
normalmente, usa a mesma estrutura
CONTROL que as instruções SQI e SQL
Length DINT imediato número de elementos no Array (tabela do
seqüenciador) para saída
Position DINT imediato posição atual no array
normalmente, valor inicial é 0

Estrutura CONTROL

Mnemônico: Tipo de Dados: Descrição:


.EN BOOL O bit habilitado indica que a instrução SQO está habilitada.
.DN BOOL O bit feito é energizado quando todos os elementos moveram-se para Destination.
.ER BOOL O bit de erro é energizado quando .LEN ≤ 0, .POS < 0, or .POS > .LEN.
.LEN DINT O comprimento especifica o número de etapas no array do seqüenciador.
.POS DINT A posição identifica o elemento que o controlador está manipulando atualmente.

Descrição: Quando habilitada, a instrução SQO incrementa a posição, movimenta


os dados na posição através de Mask e armazena o resultado em
Destination. Se .POS > .LEN, a instrução volta para o início do array
do seqüenciador e continua com .POS = 1.

Normalmente, usa a mesma estrutura CONTROL que as instruções SQI


e SQL

A instrução SQO opera na memória de dados contínua.

Publicação 1756-RM003F-PT-P - Maio 2002


Instruções do Seqüenciador (SQI, SQO, SQL) 9-7

Inserção de um valor de máscara imediato

Ao inserir uma máscara, o software de programação retorna ao


padrão dos valores decimais. Caso você queira inserir uma máscara
usando outro formato, coloque o prefixo correto antes do valor.

Prefixo: Descrição:
16# hexadecimal
por exemplo; 16#0F0F
8# octal
por exemplo; 8#16
2# binário
por exemplo; 2#00110011

Flags de Status Aritmético: não afetados

Condições de Falha: nenhuma

Execução:

Condição: Ação da Lógica Ladder:


prescan O bit .EU é energizado para pré-programar uma descarga falsa quando o scan do
programa inicia.
A saída da condição da linha é definida como falsa.
entrada da condição da linha for falsa O bit .EN é desenergizado.
A saída da condição da linha é definida como falsa.

Publicação 1756-RM003F-PT-P - Maio 2002


9-8 Instruções do Seqüenciador (SQI, SQO, SQL)

Condição: Ação da Lógica Ladder:


entrada da condição da linha é verdadeira

bit .EN é energizado


.LEN ≤ 0 ou não .EN = 0 bit .ER é
.POS < 0 examinar bit .EN
desenergizado.
bit .DN é energizado.
sim .EN = 1

não sim
.POS = .LEN .POS ≥ .LEN .POS = 1

sim não

bit .DN é energizado. .POS = .POS + 1

inverter valor sim goto


.POS error

não

sim
.POS = .LEN bit .DN é energizado.

não

não
.POS > .LEN

sim

erro

bit .ER é energizado Destination = (Destination AND (NOT(Mask))) OR


(Array[control.POS] AND Mask)

saída da condição da linha é


definida como verdadeira

fim

postscan A saída da condição da linha é definida como falsa.

Publicação 1756-RM003F-PT-P - Maio 2002


Instruções do Seqüenciador (SQI, SQO, SQL) 9-9

Exemplo: Quando habilitada, a instrução SQO incrementa a posição, passa os


dados nessa posição em array_dint através da máscara e armazena o
resultado em value_1.

operando SQO: Exemplo de valores (usando INTs exibidos em binário):


Array xxxxxxxx xxxxxxxx xxxx0101 xxxx1010
Mask 00000000 00000000 00001111 00001111
Destination xxxxxxxx xxxxxxxx xxxx0101 xxxx1010

Um 0 na máscara significa que o bit não é comparado (designado por


xxxx nesse exemplo).

Uso de SQI com SQO

Se usar uma instrução SQI com uma instrução SQO, certifique-se de


que as instruções usam os mesmos valores de Control, Length e
Position.

Reset da posição de SQO

Cada vez que o controlador for do modo Program para Run, a


instrução SQO desenergiza (inicializa) o valor .POS. Para resetar .POS
para o valor de inicialização (.POS = 0), use uma instrução RES para
desenergizar o valor de posição. Esse exemplo usa o status do bit de
primeiro scan para desenergizar o valor .POS.

Publicação 1756-RM003F-PT-P - Maio 2002


9-10 Instruções do Seqüenciador (SQI, SQO, SQL)

Carga do Seqüenciador A instrução SQL carrega as condições de referência em um array do


seqüenciador.
(SQL)
Operandos:

Lógica Ladder

Operando: Tipo: Formato: Descrição:


Array DINT tag do array array do seqüenciador
especifica o primeiro elemento de array do
seqüenciador
não use CONTROL.POS no subscrito
Source SINT tag dados de entrada para carregar no array do
INT imediato seqüenciador
DINT
Um tag SINT ou INT é convertido em um valor DINT pela extensão de sinal.
Control CONTROL tag estrutura de controle para a operação
normalmente usa a mesma estrutura
CONTROL que as instruções SQO e SQL
Length DINT imediato número de elementos no Array (tabela do
seqüenciador) para carregar
Position DINT imediato posição atual no array
normalmente, valor inicial é 0

Estrutura CONTROL

Mnemônico: Tipo de Dados: Descrição:


.EN BOOL O bit habilitado indica que a instrução SQL está habilitada.
.DN BOOL O bit executado é energizado quando todos os elementos foram carregados em Array.
.ER BOOL O bit de erro é energizado quando .LEN ≤ 0, .POS < 0, ou .POS > .LEN.
.LEN DINT O comprimento especifica o número de etapas no seqüenciador do array.
.POS DINT A posição identifica o elemento que o controlador está manipulando atualmente.

Descrição: Quando habilitada, a instrução SQL incrementa para a próxima


posição no array do seqüenciador e carrega o valor Source naquela
posição. Se o bit .DN é energizado ou se .POS ≥ .LEN, a instrução
energiza .POS=1.

Geralmente, usa a mesma estrutura CONTROL que as instruções SQO


e SQI

A instrução SQL opera na memória de dados contínua.

Flags de Status Aritmético: não afetados

Publicação 1756-RM003F-PT-P - Maio 2002


Instruções do Seqüenciador (SQI, SQO, SQL) 9-11

Condições de Falha:

Uma falha grave ocorrerá se: Tipo de falha: Código de falha:


Length > tamanho de Array 4 20

Execução:

Condição: Ação da Lógica Ladder:


prescan O bit .EU é energizado para pré-programar uma descarga falsa quando o scan do
programa inicia.
A saída da condição da linha é definida como falsa.
entrada da condição da linha é falsa O bit .EN é desenergizado.
A saída da condição da linha é definida como falsa.

Publicação 1756-RM003F-PT-P - Maio 2002


9-12 Instruções do Seqüenciador (SQI, SQO, SQL)

Condição: Ação da Lógica Ladder:


entrada da condição da linha for verdadeira

bit .EN é energizado


.LEN ≤ 0 ou não .EN = 0 bit .ER é
examinar bit .EN
.POS < 0 desenergizado.
bit .DN é energizado.
sim .EN = 1

não sim
.POS = .LEN .POS ≥ .LEN .POS = 1

sim não

bit .DN é energizado. .POS = .POS + 1

inverter valor sim vá para


de .POS o erro

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

bit .ER é energizado Array[control.POS] = Source

saída da condição da linha é


definida como verdadeira

fim

postscan A saída da condição da linha é definida como falsa.

Publicação 1756-RM003F-PT-P - Maio 2002


Instruções do Seqüenciador (SQI, SQO, SQL) 9-13

Exemplo: Quando habilitada, a instrução SQL carrega value_3 para a próxima


posição do array seqüenciador que é array_dint[5] nesse exemplo.

antes de carregar após carregar


array_dint[0] 00000 00000
11111 11111
22222 22222
33333 control_1.pos = 5 33333
44444 value_3 = 55555 44444
array_dint[5] 00000 55555

00000 00000 control_1.pos = 6


00000 00000
00000 00000
00000 00000

Publicação 1756-RM003F-PT-P - Maio 2002


9-14 Instruções do Seqüenciador (SQI, SQO, SQL)

Notas:

Publicação 1756-RM003F-PT-P - Maio 2002


Capítulo 10

Instruções de Controle do Programa


(JMP, LBL, JSR, RET, SBR, JXR, TND, MCR, UID, UIE, AFI, NOP, EOT, SFP,
SFR)

Introdução Use as instruções de controle do programa para alterar o fluxo da


lógica.

Se você quiser: Use esta instrução: Disponível nessas linguagens: Consulte


página:
Saltar uma seção da lógica que nem sempre JMP lógica ladder 10-2
precisa ser executada. LBL
Saltar para uma rotina separada, passar dados JSR lógica ladder 10-4
para a rotina, executar a rotina e retornar os SBR texto estruturado
resultados. RET bloco de funções
Saltar para uma rotina externa (controlador JXR lógica ladder 10-13
SoftLogix5800 somente)
Marcar um fim temporário que interrompa a TND lógica ladder 10-16
execução da rotina. texto estruturado
Desabilitar todas as linhas em uma seção MCR lógica ladder 10-18
de lógica.
Desabilitar as tarefas do usuário. UID lógica ladder 10-20
texto estruturado
Habilitar as tarefas do usuário. UIE lógica ladder 10-20
texto estruturado
Desabilitar uma linha. AFI lógica ladder 10-22
Inserir um limiar na lógica. NOP lógica ladder 10-23
Terminar uma transição para um gráfico de EOT lógica ladder 10-24
função seqüencial. texto estruturado
Pausar um gráfico de função seqüencial. SFP lógica ladder 10-26
texto estruturado
Resetar um gráfico de função seqüencial. SFR lógica ladder 10-28
texto estruturado

1 Publicação 1756-RM003F-PT-P - Maio 2002


10-2 Instruções de Controle do Programa (JMP, LBL, JSR, RET, SBR, JXR, TND, MCR, UID, UIE, AFI, NOP, EOT, SFP, SFR)

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

Operando: Tipo: Formato: Descrição:


Instrução JMP
Label name; nome do insere o nome para a instrução LBL associada
label;
Instrução LBL
Label name; nome do a execução salta para a instrução LBL quando
label; o nome do label é citado

Descrição: Quando habilitada, a instrução JMP ignora a instrução LBL citada e o


controlador continua a executar a partir desse ponto. Quando
desabilitada, a instrução JMP não afeta a execução da lógica ladder.

A instrução JMP pode mover a execução da lógica ladder para frente e


para trás. O salto para frente para um label economiza tempo de scan
do programa, pois omite um segmento de lógica até que o mesmo
seja necessário. O salto para trás permite que o controlador repita a
lógica.

Recomenda-se não realizar muitos saltos para trás. O temporizador de


watchdog pode entrar em timeout porque o controlador nunca
alcança o fim da lógica que, por sua vez, coloca o controlador em
falha.

Não se realiza scan na lógica com salto. Coloque


ATENÇÃO
uma lógica crítica fora da zona de salto.

!
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.

Um nome do label deve ser único dentro de uma rotina. O nome


pode:
• ser composto por até 40 caracteres
• conter letras, números e underscores (_)

Flags de Status Aritmético: não afetados

Publicação 1756-RM003F-PT-P - Maio 2002


Instruções de Controle do Programa (JMP, LBL, JSR, RET, SBR, JXR, TND, MCR, UID, UIE, AFI, NOP, EOT, SFP, SFR) 10-3

Condições de Falha:

Uma falha grave ocorrerá se: Tipo de falha: Código de falha:


label não existe 4 42

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 A saída da condição da linha é definida como verdadeira.
A execução salta para a linha que contém a instrução LBL com o nome do
label referenciado.
postscan A saída da condição da linha é definida como falsa.

Exemplo: Quando a instrução JMP está habilitada, a execução salta linhas


sucessivas da lógica até alcançar a linha que contém a instrução LBL
com label_20.

[outras linhas de código]

Publicação 1756-RM003F-PT-P - Maio 2002


10-4 Instruções de Controle do Programa (JMP, LBL, JSR, RET, SBR, JXR, TND, MCR, UID, UIE, AFI, NOP, EOT, SFP, SFR)

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

Operando: Tipo: Formato: Descrição:


Routine ROUTINE nome rotina a ser executada (ou seja, sub-rotina)
name
Input BOOL imediato dados desta rotina que você quer copiar para
parameter SINT tag um tag no 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 da 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.

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.

(continuação dos operandos JSR na próxima página)

Publicação 1756-RM003F-PT-P - Maio 2002


Instruções de Controle do Programa (JMP, LBL, JSR, RET, SBR, JXR, TND, MCR, UID, UIE, AFI, NOP, EOT, SFP, SFR) 10-5

Operandos JSR (continuação)

bloco de funções
Parâmetros de Entrada Parâmetro de Retorno
❇ ❇

Os operandos são os mesmos que aqueles para a instrução de lógica


ladder JSR.

Para cada parâmetro em uma instrução SBR ou RET, use


ATENÇÃO
o mesmo tipo de dados (inclusive algumas dimensões
de array) conforme o parâmetro correspondente na

! instrução JSR. O uso de tipos de dados diferentes pode


produzir resultados inesperados.

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

Operando: Tipo: Formato: Descrição:


Input BOOL tag tag desta rotina na qual você quer copiar o
parameter SINT tag do array parâmetro de entrada correspondente da
INT instrução JSR
DINT
REAL
structure

SBR(InputPar); Texto Estruturado

Os operandos são os mesmos que aqueles para a instrução SBR de


lógica ladder.

Publicação 1756-RM003F-PT-P - Maio 2002


10-6 Instruções de Controle do Programa (JMP, LBL, JSR, RET, SBR, JXR, TND, MCR, UID, UIE, AFI, NOP, EOT, SFP, SFR)

Bloco de Funções
Parâmetros

Os operandos são os mesmos que aqueles para a instrução SBR de


lógica ladder.

Operandos RET:

Lógica Ladder

Operando: Tipo: Formato: Descrição:


Return BOOL imediato dados nesta rotina na qual você quer copiar o
parameter SINT tag parâmetro de retorno correspondente da
INT tag do array instrução JSR
DINT
REAL
structure

RET(ReturnPar); Texto Estruturado

Os operandos são os mesmos que aqueles para a instrução RET de


lógica ladder.

Bloco de Funções
Parâmetros

Os operandos são os mesmos que aqueles para a instrução RET de


lógica ladder.

Descrição: A instrução JSR inicia a execução da rotina especificada que está


definida como uma sub-rotina:
• A sub-rotina é executada uma vez.
• Depois que a sub-rotina executa, a execução da lógica retorna
para a rotina que contém a instrução JSR.

Publicação 1756-RM003F-PT-P - Maio 2002


Instruções de Controle do Programa (JMP, LBL, JSR, RET, SBR, JXR, TND, MCR, UID, UIE, AFI, NOP, EOT, SFP, SFR) 10-7

Para programar um salto para a sub-rotina, siga estas orientações:

IMPORTANTE Não use uma instrução JSR para chamar (executar) a


rotina principal.
• Você pode colocar uma instrução JSR na rotina
principal ou qualquer outra rotina.
• Se você usar uma instrução JSR para chamar a
rotina principal e colocar uma instrução RET na
rotina principal, uma falha grave ocorre (tipo 4,
código 31).

O diagrama a seguir ilustra como as instruções operam.


Chamar a Rotina Sub-rotina SBR

1. Se a instrução JSR tem um


SBR parâmetro de entrada, insira uma
JSR instrução SBR.
JSR
2. Coloque a instrução SBR como a
1. Se você quer copiar dados para
primeira instrução na rotina.
um tag na sub-rotina, insira um RET
parâmetro de entrada. 3. Para cada parâmetro de entrada na
instrução JSR, insira o tag no qual
2. Se você quer copiar um
você quer copiar os dados.
resultado da sub-rotina para um
RET
tag nesta sub-rotina, insira um
parâmetro de rotina.
42974
3. Insira parâmetros de entrada e
retorno conforme necessário. RET

1. Se a instrução JSR tem um parâmetro de retorno, insira uma instrução RET


2. Coloque a instrução RET como a última instrução na rotina.
3. Para cada parâmetro de retorno na instrução JSR, insira um parâmetro de
retorno para enviar para a instrução JSR.
4. Em uma rotina ladder, coloque instruções RET adicionais para sair da
sub-rotina baseada em condições de entrada diferentes, se necessário. (As
rotinas de bloco de funções somente permite uma instrução RET.)

Não há restrições, a não ser a memória do controlador, em relação ao


número de rotinas encadeadas que possam existir ou ao número de
parâmetros passados ou retornados.

nível 1 nível 2 nível 3


sub-rotina action_1 sub-rotina action_2 sub-rotina action_3

rotina principal
SBR SBR SBR
action_1
JSR
action_2 action_3
JSR JSR

RET RET RET

Publicação 1756-RM003F-PT-P - Maio 2002


10-8 Instruções de Controle do Programa (JMP, LBL, JSR, RET, SBR, JXR, TND, MCR, UID, UIE, AFI, NOP, EOT, SFP, SFR)

Flags de Status Aritmético: Os flags de status aritmético são afetados.

Condições de Falha:

Uma falha grave ocorrerá se: Tipo de falha: Código de falha:


a instrução JSR tem menos parâmetros de entrada do que a instrução SBR 4 31
a instrução JSR salta para a rotina de falha 4 ou fornecido pelo usuário 0 ou fornecido pelo usuário
a instrução RET tem menos parâmetros de retorno do que a instrução JSR 4 31
a rotina principal contém uma instrução RET 4 31

Execução:

Lógica Ladder e Texto Estruturado

Condição: Ação da Lógica Ladder: Ação do Texto Estruturado:


prescan O controlador executa todas as sub-rotinas independente da condição da linha. Para garantir que todas as
linhas na sub-rotina sejam pré-varridas, o controlador ignora as instruções RET. (Ou seja, as instruções RET
não fazem a sub-rotina sair).
• Versão 6.x e anterior, os parâmetros de entrada e retorno são passados.
• Versão 7.x e mais recente, os parâmetros de entrada e retorno não são passados.
Caso haja chamadas recorrentes para a mesma sub-rotina, o prescan é executada na sub-rotina somente na
primeira vez. Caso haja várias chamadas (não recorrentes) para a mesma sub-rotina, realiza-se um prescan
na sub-rotina todas as vezes.
A saída da condição de linha é definida falsa (lógica ladder somente).
a entrada da condição de A sub-rotina.não é executada. na
linha é falsa para a As saídas na sub-rotina permanecem em seus
instrução JSR últimos estados.
A saída da condição da linha é definida como falsa.
entrada da condição da A instrução executa. na
linha é verdadeira A saída da condição da linha está definida como
verdadeira.
EnableIn está energizado na EnableIn está sempre energizado
A instrução executa.

Publicação 1756-RM003F-PT-P - Maio 2002


Instruções de Controle do Programa (JMP, LBL, JSR, RET, SBR, JXR, TND, MCR, UID, UIE, AFI, NOP, EOT, SFP, SFR) 10-9

Condição: Ação da Lógica Ladder: Ação do Texto Estruturado:


execução da instrução

JSR copia os parâmetros de


sim entrada para os tags SBR
parâmetros de
entrada adequados

não

a execução da lógica começa na


rotina identificada por JSR

RET copia os parâmetros de


sim sim retorno para as variáveis JSR
Instrução RET parâmetros de apropriadas
retorno

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.

Exemplo 1: A instrução JSR passa value_1 e value_2 para routine_1.

Publicação 1756-RM003F-PT-P - Maio 2002


10-10 Instruções de Controle do Programa (JMP, LBL, JSR, RET, SBR, JXR, TND, MCR, UID, UIE, AFI, NOP, EOT, SFP, SFR)

A instrução SBR recebe value_1 e value_2 da instrução JSR e copia


esses valores em value_a e value_b, respectivamente. A execução da
lógica continua nessa rotina.

A instrução RET envia float_a para a instrução JSR. A instrução JSR


recebe float_a e copia o valor para float_value_1. A execução da
lógica continua com a próxima instrução seguindo a instrução JSR.

Lógica Ladder

Rotina: Programa:
Rotina principal (Main routine)

Sub-rotina (Subroutine)

[outras linhas de código]

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);

Publicação 1756-RM003F-PT-P - Maio 2002


Instruções de Controle do Programa (JMP, LBL, JSR, RET, SBR, JXR, TND, MCR, UID, UIE, AFI, NOP, EOT, SFP, SFR) 10-11

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.

Soma o valor em cookies_1 a cookies_2e armazena o resultado em total_cookies.

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.

Publicação 1756-RM003F-PT-P - Maio 2002


10-12 Instruções de Controle do Programa (JMP, LBL, JSR, RET, SBR, JXR, TND, MCR, UID, UIE, AFI, NOP, EOT, SFP, SFR)

Exemplo 3:

Bloco de Funções

A instrução JSR em Routine_A

42972

1. Os valores em 6. O valor de Sum_A_B_C é copiado


Add_Input_1, para Add_Three_Result.
Add_Input_2 e
Add_Input_3 são
copiados para Input_A,
Input_B e Input_C,
respectivamente.

Blocos de função da rotina Add_Three_Inputs

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.

Publicação 1756-RM003F-PT-P - Maio 2002


Instruções de Controle do Programa (JMP, LBL, JSR, RET, SBR, JXR, TND, MCR, UID, UIE, AFI, NOP, EOT, SFP, SFR) 10-13

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

Operando: Tipo: Formato: Descrição:


External routine ROUTINE nome rotina externa a ser executada
name
External routine EXT_ROUTINE_ tag estrutura de controle (consulte a próxima página)
control CONTROL
Parameter BOOL imediato dados desta rotina que você quer copiar para uma variável na rotina externa
SINT tag • Os parâmetros são opcionais.
INT tag do array • Insira múltiplos parâmetros, se necessário.
DINT • É possível ter 10 parâmetros.
REAL
estrutura
Return BOOL tag tag nesta rotina que você quer copiar um resultado da rotina externa
parameter SINT • O parâmetro de retorno é opcional.
INT • É possível ter somente parâmetro de retorno
DINT
REAL

Publicação 1756-RM003F-PT-P - Maio 2002


10-14 Instruções de Controle do Programa (JMP, LBL, JSR, RET, SBR, JXR, TND, MCR, UID, UIE, AFI, NOP, EOT, SFP, SFR)

Estrutura EXT_ROUTINE_CONTROL

Mnemônico: Tipo de Dados: Descrição: Implementação:


ErrorCode SINT Se um erro ocorrer, este valor identifica o erro. Não há códigos de erros pré-definidos. O
Os valores válidos são 0-255. criador da rotina externa deve fornecer os
códigos de erro.
NumParams SINT Este valor indica o número de parâmetros Apenas exibição - esta informação é derivada
associados a esta instrução. da entrada da instrução.
ParameterDefs EXT_ROUTINE_ Este array contém as definições de parâmetros Apenas exibição - esta informação é derivada
PARAMETERS[10] para passar para a rotina externa. A instrução da entrada da instrução.
pode passar 10 parâmetros possíveis.
ReturnParamDef EXT_ROUTIN_ Este valor contém as definições do parâmetro Apenas exibição - esta informação é derivada
PARAMETERS de retorno da rotina externa. Há somente um da entrada da instrução.
parâmetro de retorno.
EN BOOL Quando energizado, o bit habilitado indica que A rotina externa energiza este bit.
a instrução JXR está habilitada.
ReturnsValue BOOL Se energizado, este bit indica que um Apenas exibição - esta informação é derivada
parâmetro de retorno foi inserido para a da entrada da instrução.
instrução. Se desenergizado, este bit indica que
um parâmetro de retorno não foi inserido para a
instrução.
DN BOOL O bit executado é energizado quando a rotina A rotina externa energiza este bit.
externa executou uma vez para conclusão.
ER BOOL O bit de erro é energizado se um erro ocorrer. A A rotina externa energiza este bit.
instrução pára a execução até que o programa
remova o bit de erro
FirstScan BOOL Este bit identifica se esta é o primeiro scan O controlador energiza este bit para refletir o
após alternar o controlador para o modo Run. status de scan.
Use FirstScan para iniciar a rotina externa, se
necessário.
EnableOut BOOL Habilita saída. A rotina externa energiza este bit.
EnableIn BOOL Habilita entrada. O controlador energiza este bit para refletir a
entrada da condição de linha. A instrução
executa independentemente da condição de
linha. O criador da rotina externa deve
monitorar este status e agir de acordo.
User1 BOOL Esses bits são disponíveis para o usuário. O A rotina externa ou o programa do usuário
controlador não inicia esses bits. pode energizar esses bits.
User0 BOOL
ScanType1 BOOL Esses bits identificam o tipo de scan atual: O controlador energiza estes bits para refletir
Valores do Bit: Tipo de Scan: o status de scan.
ScanType0 BOOL
00 Normal
01 Prescan
10 Postscan (não
aplicável para os programas de lógica ladder)

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.

A instrução JXR é semelhante a instrução Salto para Sub-rotina (JSR).


A instrução JXR inicia a execução da rotina externa especificada:

Publicação 1756-RM003F-PT-P - Maio 2002


Instruções de Controle do Programa (JMP, LBL, JSR, RET, SBR, JXR, TND, MCR, UID, UIE, AFI, NOP, EOT, SFP, SFR) 10-15

• A rotina externa executa uma vez.


• Depois que a rotina externa executa, a execução da lógica
retorna para a rotina que contém a instrução JXR.

Flags de Status Aritmético: Os flags de status aritmético não são afetados.

Condições de Falha:

Uma falha grave ocorrerá se: Tipo de falha: Código de


falha:
• uma exceção ocorre na rotina externa DLL 4 88
• a DLL não pode ser carregada
• o ponto de entrada não foi encontrado na DLL

Execução: A JXR pode ser síncrona ou assíncrona dependendo da


implementação da DLL. O código na DLL determina também como
responder ao status do scan, status de entrada da condição de linha e
status de saída da condição de linha.

Para obter mais informações sobre o uso da instrução JXR e criar


rotinas externas, consulte SoftLogix5800 System User Manual,
publicação 1789-UM002.

Publicação 1756-RM003F-PT-P - Maio 2002


10-16 Instruções de Controle do Programa (JMP, LBL, JSR, RET, SBR, JXR, TND, MCR, UID, UIE, AFI, NOP, EOT, SFP, SFR)

Fim Temporário (TND) A instrução TND atua como um limite.

Operandos:

Operandos de Lógica Ladder

nenhuma

TND(); Texto Estruturado

nenhum

Você deve inserir os parênteses () depois da instrução mnemônica,


embora não haja operandos.

Descrição: Quando habilitada, a instrução TND permite que o controlador


execute a lógica somente até essa instrução.

Quando habilitada, a instrução TND atua como o final da rotina.


Quando o controlador realiza um scan em uma instrução TND, o
controlador se movimenta para o final da rotina atual. Se a instrução
TND estiver em uma sub-rotina, o controle retorna para a rotina que
está chamando. Se a instrução TND estiver em uma rotina principal, o
controle retorna para o próximo programa dentro da tarefa atual.

Flags de Status Aritmético: não afetados

Condições de Falha: nenhuma

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. 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 rotina atual termina. A rotina atual termina.
postscan A saída da condição da linha é definida como falsa. Nenhuma ação tomada.

Exemplo: É possível usar a instrução TND ao depurar ou localizar falhas para


executar a lógica até um determinado ponto. Progressivamente, mova
a instrução TND através da lógica à medida que se realiza a
depuração em cada seção nova.

Publicação 1756-RM003F-PT-P - Maio 2002


Instruções de Controle do Programa (JMP, LBL, JSR, RET, SBR, JXR, TND, MCR, UID, UIE, AFI, NOP, EOT, SFP, SFR) 10-17

Quando a instrução TND estiver habilitada, o controlador interrompe


o scan da rotina atual.

Lógica Ladder

Texto Estruturado

TND

Publicação 1756-RM003F-PT-P - Maio 2002


10-18 Instruções de Controle do Programa (JMP, LBL, JSR, RET, SBR, JXR, TND, MCR, UID, UIE, AFI, NOP, EOT, SFP, SFR)

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.

Ao programar uma zona MCR, observe o seguinte:


• Você deve finalizar a zona com uma instrução MCR
incondicional.
• Você não pode encadear zonas MCR entre si.
• Não realize um salto em uma zona MCR. Se a zona for falsa, o
salto na zona ativa a zona desde o ponto do salto até o fim da
mesma.
• Se uma zona MCR continuar até o fim da rotina, não é
necessário programar uma instrução MCR até o final da zona.

A instrução MCR não substitui a instalação de um relé de controle


mestre com capacidade para permitir uma parada de emergência.
Você deverá, ainda, instalar um relé de controle mestre para fornecer
o desligamento de emergência da alimentação de E/S .

Não sobreponha ou coloque as zonas MCR em


ATENÇÃO
cadeia. Cada zona MCR deve ser separada e
completa. Se houver sobreposição ou

! encadeamento, uma operação imprevisível de


máquina pode ocorrer com possíveis danos ao
equipamento ou ferimentos pessoais.
Coloque operações críticas fora da zona MCR. Se
você iniciar instruções como, por exemplo,
temporizadores em uma zona MCR, a execução da
instrução pára quando a zona é desabilitada e o
tempo for removido.

Flags de Status Aritmético: não afetados

Condições de Falha: nenhuma

Publicação 1756-RM003F-PT-P - Maio 2002


Instruções de Controle do Programa (JMP, LBL, JSR, RET, SBR, JXR, TND, MCR, UID, UIE, AFI, NOP, EOT, SFP, SFR) 10-19

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.
Realiza-se o scan nas instruções da zona, mas a entrada da condição da linha e as
saídas não retentivas na zona são desabilitadas.
entrada da condição da linha é verdadeira A saída da condição da linha é definida como verdadeira.
As instruções na zona são varridas normalmente.
postscan A saída da condição da linha é definida como falsa.

Exemplo: Quando a primeira instrução MCR estiver habilitada (input_1, input_2


e input_3 estão energizados), o controlador executa as linhas na zona
MCR (entre as duas instruções MCR) e energiza ou desenergiza as
saídas, dependendo das condições de saída.

Quando a primeira instrução MCR estiver desabilitada (input_1,


input_2 e input_3 não estão todos energizados), o controlador
executa as linhas na zona MCR (entre as duas instruções MCR) e a
entrada da condição da linha se torna falsa para todas as linhas na
zona MCR, independente das condições de entrada.

Publicação 1756-RM003F-PT-P - Maio 2002


10-20 Instruções de Controle do Programa (JMP, LBL, JSR, RET, SBR, JXR, TND, MCR, UID, UIE, AFI, NOP, EOT, SFP, SFR)

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

UID(); Texto Estruturado


UIE();
nenhuma

Embora não haja operandos, você deve inserir os parênteses () depois


da instrução mnemônica.

Descrição: Quando a entrada da condição de linha for verdadeira:

• a instrução UID evita que tarefas com prioridade mais alta


interrompam a tarefa atual, mas não desabilita a execução de
uma rotina de falha ou a Rotina de Falha do Controlador.
• a instrução UIE habilita outras tarefas a interromperem a tarefa
atual.

Para evitar que uma série de linhas sejam interrompidas:

1. Limite o número de linhas que você não quer que sejam


interrompidas no menor número possível. A desabilitação de
interrupções por um longo período de tempo pode produzir
perda de comunicação.

2. Acima da primeira linha que você não quer interromper, insira


uma linha e uma instrução UID.

3. Depois da última linha da série que você não quer interromper,


insira uma linha e uma instrução UIE.

4. Se preciso, você pode encadear pares das instruções UID/UIE.

Flags de Status Aritmético: não afetados

Condições de Falha: nenhuma

Publicação 1756-RM003F-PT-P - Maio 2002


Instruções de Controle do Programa (JMP, LBL, JSR, RET, SBR, JXR, TND, MCR, UID, UIE, AFI, NOP, EOT, SFP, SFR) 10-21

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 linha é A saída da condição da linha é definida como falsa. na
falsa
entrada da condição da linha é A instrução executa. na
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 UID evita a interrupção por tarefas de maior prioridade.
A instrução UIE habilita a interrupção por tarefas de maior prioridade.
postscan A saída da condição da linha é definida como falsa. Nenhuma ação tomada.

Exemplo: Quando um erro ocorre (error_bit está energizado), a instrução FSC


verifica o código do erro em relação a uma lista de erros críticos. Se a
instrução FSC encontra um erro que seja crítico (error_check.FD está
energizado), um alarme é acionado. As instruções UID e UIE evitam
que outras tarefas interrompam a verificação e o acionamento de
alarmes.

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

Publicação 1756-RM003F-PT-P - Maio 2002


10-22 Instruções de Controle do Programa (JMP, LBL, JSR, RET, SBR, JXR, TND, MCR, UID, UIE, AFI, NOP, EOT, SFP, SFR)

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.

Flags de Status Aritmético: não afetados

Condições de Falha: nenhuma

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 A saída da condição da linha é definida como falsa.
postscan A saída da condição da linha é definida como falsa.

Exemplo: Use a instrução AFI para desabilitar temporariamente uma linha,


enquanto estiver depurando um programa.

Quando habilitada, AFI desabilita todas as instruções nessa linha.

Publicação 1756-RM003F-PT-P - Maio 2002


Instruções de Controle do Programa (JMP, LBL, JSR, RET, SBR, JXR, TND, MCR, UID, UIE, AFI, NOP, EOT, SFP, SFR) 10-23

Sem Operação (NOP) A instrução NOP funciona como um limiar

Operandos:

Lógica Ladder

nenhuma

Descrição: É possível colocar a instrução NOP em qualquer ponto de uma linha.


Quando habilitada, a instrução NOP não realiza nenhuma operação.
Quando desabilitada, a instrução NOP não realiza nenhuma operação.

Flags de Status Aritmético: não afetados

Condições de Falha: nenhuma

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 A saída da condição da linha é definida como verdadeira.
postscan A saída da condição da linha é definida como falsa.

Exemplo: Essa instrução é útil para localizar ramificações incondicionais quando


se coloca a instrução NOP na ramificação.

A instrução NOP realiza bypass na instrução XIC para habilitar a saída.

Publicação 1756-RM003F-PT-P - Maio 2002


10-24 Instruções de Controle do Programa (JMP, LBL, JSR, RET, SBR, JXR, TND, MCR, UID, UIE, AFI, NOP, EOT, SFP, SFR)

Fim da Transição (EOT) A instrução EOT retorna um estado booleano para uma transição SFC.

Operandos:

Lógica Ladder

Operando: Tipo: Formato: Descrição:


data bit BOOL tag estado da transição
(0=em execução, 1=concluído)

EOT(data_bit); Texto Estruturado

Os operandos são os mesmos que aqueles para a instrução EOT de


lógica ladder.

Descrição: Como a instrução EOT retorna a um estado booleano, múltiplas


rotinas SFC podem dividir a mesma rotina que contenha a instrução
EOT. Se a rotina chamada não é uma transição, a instrução EOT age
como uma instrução TND (consulte a página 10-16).

A implementação Logix da instrução EOT diferencia-se daquela em


um controlador CLP-5. Em um controlador CLP-5, a instrução EOT
não possui parâmetros. Ao contrário, a instrução CLP-5 EOT retorna a
condição de linha como seu estado. Em um controlador Logix, o
parâmetro de retorno volta ao estado de transição, já que a condição
de linha não está disponível em todas as linguagens de programação
Logix.

Flags de Status Aritmético: não afetados

Condições de Falha: nenhuma

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. 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 retorna o valor de bit dos dados para a rotina que está chamando.
postscan A saída da condição da linha é definida como falsa. Nenhuma ação tomada.

Publicação 1756-RM003F-PT-P - Maio 2002


Instruções de Controle do Programa (JMP, LBL, JSR, RET, SBR, JXR, TND, MCR, UID, UIE, AFI, NOP, EOT, SFP, SFR) 10-25

Exemplo: Quando limit_switch1 e interlock_1 estão energizados, defina o


estado. Depois de concluir timer_1 , EOT retorna o valor de state para
a rotina que está chamando.

Lógica Ladder

Texto Estruturado

state := limit_switch1 AND interlock_1;

IF timer_1.DN THEN
EOT(estado);
END_IF;

Publicação 1756-RM003F-PT-P - Maio 2002


10-26 Instruções de Controle do Programa (JMP, LBL, JSR, RET, SBR, JXR, TND, MCR, UID, UIE, AFI, NOP, EOT, SFP, SFR)

Pausa de SFC (SFP) A instrução SFP interrompe uma rotina SFC.

Operandos:

Lógica Ladder

Operando: Tipo: Formato: Descrição:


SFCRoutine ROUTINE nome rotina SFC para pausar
Name
TargetState DINT imediato selecione um:
tag execução (ou insira 0)
pausado (ou insira 1)

Texto Estruturado
SFP(SFCRoutineName,
TargetState); Os operandos são os mesmos que aqueles para a instrução SFP de
lógica ladder.

Descrição: A instrução SFP permite a pausa de uma rotina SFC em execução. Se


uma rotina SFC está em estado pausado, use a instrução SFP
novamente para alterar o estado e recomeçar a execução da rotina.

Além disso, use a instrução SFP para recomeçar a execução de SFC


após usar uma instrução SFR (consulte a página 10-28) para resetar
uma rotina SFC.

Flags de Status Aritmético: não afetados

Condições de Falha:

Uma falha grave ocorrerá se: Tipo de falha: Código de falha:


o tipo de rotina não é uma rotina SFC 4 85

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. 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 interrompe ou recomeça a execução da rotina SFC especificada.
postscan A saída da condição da linha é definida como falsa. Nenhuma ação tomada.

Publicação 1756-RM003F-PT-P - Maio 2002


Instruções de Controle do Programa (JMP, LBL, JSR, RET, SBR, JXR, TND, MCR, UID, UIE, AFI, NOP, EOT, SFP, SFR) 10-27

Exemplo: Se sfc_en_p está energizado, pause a rotina SFC nomeada normal.


Reinicie SFC quando sfc_en_e estiver energizado.

Lógica Ladder

Pause a rotina SFC

Recomece a execução da rotina SFC.

Texto Estruturado

Pause a rotina SFC IF (sfp_en_p) THEN


SFP(normal,paused);
sfp_en_p := 0;
END_IF;

Recomece a execução da rotina IF (sfp_en_e) THEN


SFC: SFP(normal,executing);
sfp_en_e := 0;
END_IF;

Publicação 1756-RM003F-PT-P - Maio 2002


10-28 Instruções de Controle do Programa (JMP, LBL, JSR, RET, SBR, JXR, TND, MCR, UID, UIE, AFI, NOP, EOT, SFP, SFR)

Reset de SFC (SFR) A instrução SFR rearma a execução de uma rotina SFC em uma etapa
especificada.

Operandos:

Operandos de Lógica Ladder

Operando: Tipo: Formato: Descrição:


SFCRoutine ROUTINE nome rotina SFC para rearmar
Name
Step Name SFC_STEP tag etapa alvo quando recomeçar a execução

Texto Estruturado
SFR(SFCRoutineName,StepName);
Os operandos são os mesmos que aqueles para a instrução de lógica
ladder SFR.

Descrição: Quando a instrução SFR é habilitada, a SFC começa a execução na


etapa especificada.

Se a etapa alvo é 0, o gráfico será resetado para sua etapa inicial

A implementação Logix da instrução SFR diferencia-se daquela em um


controlador CLP-5. No controlador CLP-5, a SFR executou quando a
condição de linha era verdadeira. Após o reset, a instrução SFC
permanece pausada até que a linha que contém a SFR tornar-se falsa.
Isso permitiu que a execução seguisse um rearme a ser atrasado. Esse
recurso de pausa/não-pausa da instrução CLP-5 SFR desacoplou a
condição da linha e movimentou para a instrução SFP.

Flags de Status Aritmético: não afetados

Condições de Falha:

Uma falha grave ocorrerá se: Tipo de falha: Código de falha:


o tipo de rotina não é uma rotina SFC 4 85
a etapa alvo especificada não existe na rotina SFC 4 89

Publicação 1756-RM003F-PT-P - Maio 2002


Instruções de Controle do Programa (JMP, LBL, JSR, RET, SBR, JXR, TND, MCR, UID, UIE, AFI, NOP, EOT, SFP, SFR) 10-29

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. 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 reseta a rotina SFC especificada. A instrução rearma a rotina SFC especificada.
postscan Nenhuma ação tomada. Nenhuma ação tomada.

Exemplo: Se uma condição específica ocorrer (shutdown é energizado), reinicie


SFC na etapa initialize.

Lógica Ladder

Texto Estruturado

IF shutdown THEN
SFR(mySFC,initialize);
END_IF;

Publicação 1756-RM003F-PT-P - Maio 2002


10-30 Instruções de Controle do Programa (JMP, LBL, JSR, RET, SBR, JXR, TND, MCR, UID, UIE, AFI, NOP, EOT, SFP, SFR)

Notas:

Publicação 1756-RM003F-PT-P - Maio 2002


Capítulo 11

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.

Se você quiser: Use esta instrução: Disponível nessas linguagens: Consulte


página:
Executar repetidamente a rotina. FOR lógica ladder 11-2
FOR…DO(1) texto estruturado
Terminar a execução repetida de uma rotina. BRK lógica ladder 11-5
EXIT(1) texto estruturado
Retornar para a instrução FOR. RET lógica ladder 11-6
(1) Texto estruturado somente.

1 Publicação 1756-RM003F-PT-P - Maio 2002


11-2 Instruções For/Break (FOR, FOR...DO, BRK, EXIT, RET)

De... (FOR) A instrução FOR executa repetidamente uma sub-rotina.

Operandos:
Lógica Ladder

Operando: Tipo: Formato: Descrição:


Routine ROUTINE nome da rotina a ser executada
name rotina
Index DINT tag conta quantas vezes a rotina foi executada
Initial SINT imediato valor em que se inicia o índice
value INT tag
DINT
Terminal SINT imediato valor em que a execução da rotina pára
value INT tag
DINT
Step size SINT imediato quantidade a ser acrescentada ao índice cada
INT tag vez que a instrução FOR executar a rotina
DINT

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:

IMPORTANTE Não use a instrução FOR para chamar (executar) a


rotina principal.
• Você pode colocar uma instrução FOR na rotina
principal ou em qualquer outra rotina.
• Se você usar a instrução FOR para chamar a
rotina principal e, então, colocar uma instrução
RET na rotina principal, uma falha grave ocorre
(tipo 4, código 31).

Quando habilitada, a instrução FOR executa repetidamente Routine


até que o valor Index exceda o valor Terminal. Essa instrução não
passa parâmetros para a rotina.

Cada vez que a instrução FOR executa a rotina, a mesma adiciona o


Step size a Index.

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.

Publicação 1756-RM003F-PT-P - Maio 2002


Instruções For/Break (FOR, FOR...DO, BRK, EXIT, RET) 11-3

Flags de Status Aritmético: não afetados

Condições de Falha:

Uma falha grave ocorrerá se: Tipo de falha: Código de falha:


a rotina principal contém uma instrução RET 4 31

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.

entrada da condição da linha é verdadeira

index = initial_value

não
step size < 0

sim

não
ir para o índice valor terminal
fim

sim sim não


ir para fim
índice ≥ valor terminal o fim

executar rotina
index =(index + step_size) saída da condição da linha é
definida como verdadeira

fim

postscan A saída da condição da linha é definida como falsa.

Exemplo: Quando habilitada, a instrução FOR executa repetidamente routine_2


e incrementa value_2 em 1 todas as vezes. Quando value_2 for > 10

Publicação 1756-RM003F-PT-P - Maio 2002


11-4 Instruções For/Break (FOR, FOR...DO, BRK, EXIT, RET)

ou uma instrução BRK é habilitada, a instrução FOR não executa mais


a routine_2.

Publicação 1756-RM003F-PT-P - Maio 2002


Instruções For/Break (FOR, FOR...DO, BRK, EXIT, RET) 11-5

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;

Use a sentença EXIT em uma construção de malha. Consulte o


Programação de Texto Estruturado para informações sobre as
construções de texto estruturado.

Descrição: Quando habilitada, a instrução BRK sai da rotina e retorna o


controlador para a instrução que segue a FOR.

Se houver instruções FOR encadeadas, uma instrução BRK retornará o


controle para a instrução FOR mais profunda.

Flags de Status Aritmético: não afetados

Condições de Falha: nenhuma

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 A saída da condição da linha é definida como verdadeira.
A execução retorna para a instrução que segue a instrução FOR que está chamando.
postscan A saída da condição da linha é definida como falsa.

Exemplo: Quando habilitada, a instrução BRK pára de executar a rotina atual e


retorna para a instrução que segue a instrução FOR que está
chamando.

Publicação 1756-RM003F-PT-P - Maio 2002


11-6 Instruções For/Break (FOR, FOR...DO, BRK, EXIT, RET)

Return (RET) A instrução RET retorna para a instrução FOR que está chamando.

Operandos:

Lógica Ladder

nenhuma

Descrição:

IMPORTANTE Não coloque uma instrução RET na rotina principal.


Se você colocar uma instrução RET na rotina
principal, uma falha grave ocorre (tipo 4, código 31).

Quando habilitada, a instrução RTE retorna para a instrução FOR. A


instrução FOR incrementa o valor de Index pelo Step size e executa a
sub-rotina novamente. Se o valor de Index exceder o valor de
Terminal, a instrução FOR será concluída e a execução se
movimentará para a instrução que segue a instrução FOR.

A instrução FOR não usa parâmetros. A instrução FOR ignora os


parâmetros inseridos em uma instrução RET.

É possível usar também uma instrução TND para finalizar a execução


de uma sub-rotina.

Flags de Status Aritmético: não afetados

Condições de Falha:

Uma falha grave ocorrerá se: Tipo de falha: Código de falha:


a rotina principal contém uma instrução RET 4 31

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 Retorna os parâmetros especificados para a rotina que está chamando.
A saída da condição da linha é definida como verdadeira.
postscan A saída da condição da linha é definida como falsa.

Exemplo: A instrução FOR executa repetidamente routine_2 e incrementa


value_2 em 1 todas as vezes. Quando value_2 for > 10 ou uma
instrução BRK é habilitada, a instrução FOR não executa mais a
routine_2.

Publicação 1756-RM003F-PT-P - Maio 2002


Instruções For/Break (FOR, FOR...DO, BRK, EXIT, RET) 11-7

A instrução RET retorna para a instrução FOR que está chamando. A


instrução FOR executa a sub-rotina novamente e incrementa o valor
de Index por Step size ou se o valor Index exceder o valor de
Terminal, a instrução FOR é concluída e a execução se movimenta
para a instrução que segue a instrução FOR.

rotina que está chamando sub-rotina

Publicação 1756-RM003F-PT-P - Maio 2002


11-8 Instruções For/Break (FOR, FOR...DO, BRK, EXIT, RET)

Notas:

Publicação 1756-RM003F-PT-P - Maio 2002


Capítulo 12

Instruções Especiais
(FBC, DDT, DTR, PID)

Introdução As instruções especiais realizam operações específicas para a


aplicação.

Se você quiser: Use esta instrução: Disponível nestas linguagens: Consulte


página:
Comparar dados em relação a uma referência FBC lógica ladder 12-2
boa e conhecida e registrar todas as diferenças.
Comparar dados em relação a uma referência DDT lógica ladder 12-9
boa e conhecida, registrar todas as diferenças e
atualizar a referência para corresponder à
origem.
Passar os dados da fonte por uma máscara e DTR lógica ladder 12-16
comparar o resultado aos dados de referência.
Escrever a fonte na referência para a próxima
comparação.
Controlar uma malha PID. PID lógica ladder 12-19
texto estruturado

1 Publicação 1756-RM003F-PT-P - Maio 2002


12-2 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

Operando: Tipo: Formato: Descrição:


Source DINT tag do array array para comparar com a referência
não use CONTROL.POS no subscrito
Reference DINT tag do array array para comparar com a fonte
não use CONTROL.POS no subscrito
Result DINT tag do array tag para armazenar o resultado
não use CONTROL.POS nos subscritos
Cmp control CONTROL estrutura estrutura de controle para a comparação
Length DINT imediato número de bits a ser comparado
Position DINT imediato posição atual na fonte
normalmente, o valor inicial é 0
Result CONTROL estrutura estrutura de controle para os resultados
control
Length DINT imediato número de locais de armazenamento no
resultado
Position DINT imediato posição atual no resultado
normalmente, o valor inicial é 0

Use tags diferentes para estrutura de controle de


ATENÇÃO
comparação e a estrutura de controle do resultado.
Usar o mesmo tag para as duas estruturas pode

! causar uma operação inesperada que resultará em


danos ao equipamento e/ou ferimentos pessoais.

Publicação 1756-RM003F-PT-P - Maio 2002


Instruções Especiais (FBC, DDT, DTR, PID) 12-3

Estrutura COMPARE

Mnemônico: Tipo de Dados: Descrição:


.EN BOOL O bit habilitado indica que a instrução FBC está habilitada.
.DN BOOL O bit executado está energizado quando a instrução FBC compara o último bit nos arrays Source e
Reference.
.FD BOOL O bit encontrado é energizado cada vez que a instrução FBC registra uma não correspondência
(operação uma-por-vez) ou após registrar todas as não correspondências (operação
todas-por-varredura).
.IN BOOL O bit inibido indica o modo de busca de FBC.
0 = todos os modos
1 = uma não correspondência em um modo de tempo
.ER BOOL O bit de erro é energizado se as comparações forem .POS < 0 e LEN < 0 e os resultados .POS < 0 ou
.LEN < 0. A instrução interrompe a execução até que o programa remova o bit .ER.
.LEN DINT O valor de comprimento identifica o número de bits para comparação.
.POS DINT O valor de posição identifica o bit atual.

Estrutura RESULT

Mnemônico: Tipo de Dados: Descrição:


.DN BOOL O bit executado é energizado quando o array Result está cheio.
.LEN DINT O valor do comprimento identifica o número de locais de armazenamento no array Result.
.POS DINT O valor da posição identifica a posição atual no array Result.

Descrição: Quando habilitada, a instrução FBC compara os bits no array Source


aos bits no array Reference e registra o número do bit de cada não
correspondência no array Result.

A instrução FBC opera na memória de dados contínua.

A diferença entre as instruções DDT e FBC é que cada vez que a


instrução DDT encontra uma não correspondência, a instrução altera
o bit de referência para corresponder ao bit fonte. A instrução FBC
não altera o bit de referência.

Seleção do modo de busca

Se você quiser detectar: Selecione este modo:


Uma não correspondência Energize o bit .IN na estrutura CONTROL de comparação.
por vez Cada vez que a entrada da condição da linha passa de falsa para verdadeira, a instrução FBC procura pela
próxima não correspondência entre os arrays Source e Reference. Ao encontrar uma não correspondência, a
instrução energiza o bit .FD, registra a posição da não correspondência e interrompe a execução.
Todas as não Desenergize o bit .IN na estrutura CONTROL de comparação.
correspondências Cada vez que a entrada da condição da linha passa de falsa para verdadeira, a instrução FSC procura por
todas não correspondência entre os arrays Source e Reference.

Flags de Status Aritmético: não afetados

Publicação 1756-RM003F-PT-P - Maio 2002


12-4 Instruções Especiais (FBC, DDT, DTR, PID)

Condições de Falha:

Uma falha grave ocorrerá se: Tipo de falha: Código de falha:


Result.POS > que o tamanho do array 4 20
Result

Execução

Condição: Ação da Lógica Ladder:

pré-varredura

o bit compare.EN é desenergizado


o bit compare.FD é desenergizado

examine o bit compare.DN = 0


compare.DN

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

saída da condição da linha é


definida como falsa

fim

Publicação 1756-RM003F-PT-P - Maio 2002


Instruções Especiais (FBC, DDT, DTR, PID) 12-5

Condição: Ação da Lógica Ladder:

entrada da condição da linha é falsa

o bit compare.EN é desenergizado


o bit compare.FD é desenergizado

examine o bit compare.DN = 0


compare.DN

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

saída da condição da linha é


definida como falsa

fim

Publicação 1756-RM003F-PT-P - Maio 2002


12-6 Instruções Especiais (FBC, DDT, DTR, PID)

Condição: Ação da Lógica Ladder:

entrada da condição da linha é verdadeira

examine o bit compare.EN = 1 vá para


compare.EN
a saída

compare.EN = 0

examine o bit compare.DN = 1 vá para


o bit compare.EN é a saída
energizado compare.DN

compare.DN = 0

o bit compare.ER é sim


desenergizado compare.LEN ≤ 0
o bit compare.FD é
desenergizado

não

sim
compare.POS < 0
saída

o bit compare.ER é energizado


não

saída da condição da linha


é definida como verdadeira

comparação vá para
a saída
fim
página 12-7

Publicação 1756-RM003F-PT-P - Maio 2002


Instruções Especiais (FBC, DDT, DTR, PID) 12-7

Condição: Ação da Lógica Ladder:

comparação

compare.POS ≥ sim compare.POS = compare.LEN vá para


compare.LEN o bit compare.DN é energizado a saída
página 12-6

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

não o bit compare.ER é energizado

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

o bit result.DN é energizado

pós-varredura A saída da condição da linha é definida como falsa.

Publicação 1756-RM003F-PT-P - Maio 2002


12-8 Instruções Especiais (FBC, DDT, DTR, PID)

Exemplo: Quando habilitada, a instrução FBC compara array_dint1 da fonte a


array_dint2 da referência e armazena os locais de todas as não
correspondências no resultado de array_dint3.

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

Publicação 1756-RM003F-PT-P - Maio 2002


Instruções Especiais (FBC, DDT, DTR, PID) 12-9

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

Operando: Tipo: Formato: Descrição:


Source DINT tag do array array para comparar com a referência
não use CONTROL.POS no subscrito
Reference DINT tag do array array para comparar com a fonte
não use CONTROL.POS no subscrito
Result DINT tag do array array para armazenar os resultados
não use CONTROL.POS no subscrito
Cmp control CONTROL estrutura estrutura de controle para a comparação
Length DINT imediato número de bits a ser comparado
Position DINT imediato posição atual na fonte
normalmente, valor inicial é 0
Result CONTROL estrutura estrutura de controle para os resultados
control
Length DINT imediato número de locais de armazenamento no
resultado
Position DINT imediato posição atual no resultado
normalmente, valor inicial é 0

Use tags diferentes para estrutura de controle de


ATENÇÃO
comparação e a estrutura de controle do resultado.
Usar o mesmo tag para as duas estruturas pode

! causar uma operação inesperada que resultará em


danos ao equipamento e/ou ferimentos pessoais.

Publicação 1756-RM003F-PT-P - Maio 2002


12-10 Instruções Especiais (FBC, DDT, DTR, PID)

Estrutura COMPARE

Mnemônico: Tipo de Dados: Descrição:


.EN BOOL O bit habilitado indica que a instrução DDT está habilitada.
.DN BOOL O bit executado está energizado quando a instrução DDT compara o último bit nos arrays Source e
Reference.
.FD BOOL O bit encontrado é energizado cada vez que a instrução DDT registra uma não correspondência
(operação uma-por-vez) ou após registrar todas as não correspondências (operação
todas-por-varredura).
.IN BOOL O bit inibido indica o modo de busca de DDT.
0 = todos os modos
1 = uma não correspondência em um modo de tempo
.ER BOOL O bit de erro é energizado se as comparações forem .POS < 0 e LEN < 0 e os resultados .POS < 0 ou
.LEN < 0. A instrução interrompe a execução até que o programa remova o bit .ER.
.LEN DINT O valor do comprimento identifica o número de bits para comparação.
.POS DINT O valor de posição identifica o bit atual.

Estrutura RESULT

Mnemônico: Tipo de Dados: Descrição:


.DN BOOL O bit executado é energizado quando o array Result está cheio.
.LEN DINT O valor do comprimento identifica o número de locais de armazenamento no array Result.
.POS DINT O valor da posição identifica a posição atual no array Result.

Descrição: Quando habilitada, a instrução DDT compara os bits no array Source


aos bits no array Reference, registra o número do bit de cada não
correspondência no array Result e altera o valor do bit Reference para
que corresponda ao bit Source.

A instrução DDT opera na memória de dados contínua.

A diferença entre as instruções DDT e FBC é que cada vez que a


instrução DDT encontra uma não correspondência, a instrução DDT
altera o bit de referência para corresponder o bit da fonte. A instrução
FBC não altera o bit de referência.

Seleção do modo de busca

Se você quiser detectar: Selecione este modo:


Uma não correspondência Energize o bit .IN na estrutura CONTROL de comparação.
por vez Cada vez que a entrada da condição da linha passa de falsa para verdadeira, a instrução
DDT procura pela próxima não correspondência entre os arrays Source e Reference. Ao
encontrar uma não correspondência, a instrução energiza o bit .FD, registra a posição da
não correspondência e interrompe a execução.
Todas as não Desenergize o bit .IN na estrutura CONTROL de comparação.
correspondências Cada vez que a entrada da condição da linha passa de falsa para verdadeira, a instrução
DDT procura por todas não correspondência entre os arrays Source e Reference.

Publicação 1756-RM003F-PT-P - Maio 2002


Instruções Especiais (FBC, DDT, DTR, PID) 12-11

Flags de Status Aritmético: não afetados

Condições de Falha:

Uma falha grave ocorrerá se: Tipo de falha: Código de falha:


Result.POS > que o tamanho do array Result 4 20

Execução

Condição: Ação da Lógica Ladder:

pré-varredura

o bit compare.EN é desenergizado


o bit compare.FD é desenergizado

examine o bit compare.DN = 0


compare.DN

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

saída da condição da linha é


definida como falsa

fim

Publicação 1756-RM003F-PT-P - Maio 2002


12-12 Instruções Especiais (FBC, DDT, DTR, PID)

Condição: Ação da Lógica Ladder:

entrada da condição da linha é falsa

o bit compare.EN é desenergizado


o bit compare.FD é desenergizado

examine o bit compare.DN = 0


compare.DN

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

saída da condição da linha é


definida como falsa

fim

Publicação 1756-RM003F-PT-P - Maio 2002


Instruções Especiais (FBC, DDT, DTR, PID) 12-13

Condição: Ação da Lógica Ladder:

entrada da condição da linha é verdadeira

examine o bit compare.EN = 1 vá para


compare.EN a saída

compare.EN = 0

examine o bit bit compare.DN = 1 vá para a


o bit compare.EN é compare.DN saída
energizado

bit compare.DN = 0

o bit compare.ER é sim


desenergizado compare.LEN ≤ 0
o bit compare.FD é
desenergizado

não

sim
compare.POS < 0
saída

o bit compare.ER é energizado


não

saída da condição da linha


é definida como verdadeira
vá para a
comparação saída

fim
página 12-14

Publicação 1756-RM003F-PT-P - Maio 2002


12-14 Instruções Especiais (FBC, DDT, DTR, PID)

Condição: Ação da Lógica Ladder:

Comparação

compare.POS ≥ sim compare.POS = compare.LEN vá para


compare.LEN o bit compare.DN é energizado a saída
página 12-13

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

não o bit compare.ER é energizado

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

o bit result.DN é energizado

pós-varredura A saída da condição da linha é definida como falsa.

Exemplo: Quando habilitada, a instrução DDT compara array_dint1 da fonte a


array_dint2 da referência e armazena os locais de todas as não
correspondências em array_dint3 do resultado. O controlador também

Publicação 1756-RM003F-PT-P - Maio 2002


Instruções Especiais (FBC, DDT, DTR, PID) 12-15

altera os bits não correspondentes no array_dint2 de referência para


que corresponda ao array_dint1 da fonte.

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

referência (antes da comparação) 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


array_dint2

resultado 5 3
array_dint3

referência (após a comparação) 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


array_dint2

Publicação 1756-RM003F-PT-P - Maio 2002


12-16 Instruções Especiais (FBC, DDT, DTR, PID)

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

Operando: Tipo: Formato: Descrição:


Source DINT imediato array para comparar com a referência
tag
Mask DINT imediato quais bits devem ser bloqueados ou podem passar
tag
Reference DINT tag array para comparar com a fonte

Descrição: A instrução DTR passa o valor de Source através de Mask e compara o


resultado ao valor de Reference. A instrução DTR escreve o valor de
Source filtrado pela máscara dentro do valor de Reference para a
próxima comparação. Source permanece inalterado.

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.

Quando o Source filtrado pela máscara diferir de Reference, a saída da


condição da linha se torna verdadeira por uma varredura. Quando
Source filtrado pela máscara for o mesmo que Reference, a saída da
condição da linha é falsa.

A programação on-line com esta instrução pode ser


ATENÇÃO
perigosa. Caso o valor de Reference seja diferente do
valor Source, a saída da condição da linha se torna

! verdadeira. Seja cuidadoso ao inserir esta instrução


quando o controlador estiver nos modos Run ou
Remote Run.

Inserção de um valor de máscara imediato

Ao inserir uma máscara, o software de programação retorna ao


padrão dos valores decimais. Caso você queira inserir uma máscara
usando outro formato, coloque o prefixo correto antes do valor.

Prefixo: Descrição:
16# hexadecimal
por exemplo 16#0F0F
8# octal
por exemplo 8#16
2# binário
por exemplo 2#00110011

Publicação 1756-RM003F-PT-P - Maio 2002


Instruções Especiais (FBC, DDT, DTR, PID) 12-17

Flags de Status Aritmético: não afetados

Condições de Falha: nenhuma

Execução

Condição: Ação da Lógica Ladder:


pré-varredura Reference = Source E Mask.
A saída da condição da linha é definida como falsa.
entrada da condição da linha é falsa Reference = Source E Mask.
A saída da condição da linha é definida como falsa.
entrada da condição da linha é verdadeira

reference é definido como igual ao source filtrado


não pela máscara
source filtrado pela
máscara = reference saída da condição da linha é definida como
verdadeira

sim

saída da condição da
linha é definida como
falsa

fim

pós-varredura A saída da condição da linha é definida como falsa.

Publicação 1756-RM003F-PT-P - Maio 2002


12-18 Instruções Especiais (FBC, DDT, DTR, PID)

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

varredura anterior 0 1 8 3 0 1 8 3 varredura anterior

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

Um 0 na máscara deixa o bit inalterado.

Publicação 1756-RM003F-PT-P - Maio 2002


Instruções Especiais (FBC, DDT, DTR, PID) 12-19

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

Operando: Tipo: Formato: Descrição:


PID PID estrutura estrutura PID
Process SINT tag valor que você quer controlar
variable INT
DINT
REAL
Tieback SINT imediato (opcional) saída de uma estação de hardware manual/automática que coloca em bypass a
INT tag saída do controlador
DINT Insira 0 se não quiser usar este parâmetro.
REAL
Control SINT tag valor que vai para o dispositivo final de controle (válvula, comporta, etc.)
variable INT Se você estiver utilizando a zona morta, Control variable deve ser REAL ou o operando será
DINT forçado para 0 quando o erro estiver dentro da zona morta.
REAL
PID master PID estrutura (opcional) tag PID para o PID mestre
loop Se estiver realizando o controle em cascata e esta PID for uma malha escrava, insira o nome
do mestre PID. Insira 0 se não quiser usar este parâmetro.
Inhold bit BOOL tag (opcional) o status atual do bit inhold a partir de um canal de saída analógica 1756 para
auxílio de reinício initerrupto
Insira 0 se não quiser usar este parâmetro.
Inhold value SINT tag (opcional) valor de readback dos dados a partir de um canal de saída analógica 1756 para o
INT auxílio de reinício initerrupto
DINT Insira 0 se não quiser usar este parâmetro.
REAL
Setpoint exibe o valor atual do setpoint
Process exibe o valor atual de Process variable transportado
variable
Output % exibe o valor percentual atual da saída

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.

Publicação 1756-RM003F-PT-P - Maio 2002


12-20 Instruções Especiais (FBC, DDT, DTR, PID)

Estrutura PID

Mnemônico: Tipo de Dados: Descrição:


.CTL DINT O membro .CTL fornece acesso aos membros de status (bits) em uma palavra de 32 bits. A instrução
PID energiza os bits 07 -15.
Este bit: Corresponde a este membro:
31 .EN
30 .CT
29 .CL
28 .PVT
27 .DOE
26 .SWM
25 .CA
24 .MO
23 .PE
22 .NDF
21 .NOBC
20 .NOZC
Este bit: Este é o membro, que a instrução PID energiza:
15 .INI
14 .SPOR
13 .OLL
12 .OLH
11 .EWD
10 .DVNA
09 .DVPA
08 .PVLA
07 .PVHA
.SP REAL Setpoint
.KP REAL independente ganho proporcional (sem unidade)
dependente ganho do controlador (sem unidade)
.KI REAL independente ganho integral (1/seg)
dependente tempo de reset (minutos por repetição)
.KD REAL independente ganho derivativo (segundos)
dependente tempo da taxa (minutos)
.BIAS REAL % de feedforward ou bias
.MAXS REAL valor máximo da conversão de escala da unidade de engenharia
.MINS REAL valor mínimo da conversão de escala da unidade de engenharia
.DB REAL unidades de engenharia da zona morta
.SO REAL % de saídas energizadas
.MAXO REAL limite máximo de saída (% de saída)
.MINO REAL limite mínimo de saída (% de saída)

Publicação 1756-RM003F-PT-P - Maio 2002


Instruções Especiais (FBC, DDT, DTR, PID) 12-21

Mnemônico: Tipo de Dados: Descrição:


.UPD REAL tempo de atualização da malha (segundos)
.PV REAL valor PV redimensionado
.ERR REAL valor de erro redimensionado
.OUT REAL % de saída
.PVH REAL limite de alarme alto de variável de processo
.PVL REAL limite de alarme baixo de variável de processo
.DVP REAL limite de alarme de desvio positivo
.DVN REAL limite de alarme de desvio negativo
.PVDB REAL zona morta de alarme de processo variável
.DVDB REAL zona morte de alarme de desvio
.MAXI REAL valor máximo de PV (entrada sem escala)
.MINI REAL valor mínimo de PV (entrada sem escala)
.TIE REAL valor de tieback para controle manual
.MAXCV REAL valor máximo de CV (correspondente a 100%)
.MINCV REAL valor mínimo de CV (correspondente a 0%)
.MINTIE REAL valor mínimo de tieback (correspondente a 100%)
.MAXTIE REAL valor máximo de tieback (correspondente a 0%)
.DATA REAL[17] O membro .DATA armazena:
Elemento: Descrição:
.DATA[0] acúmulo integral
.DATA[1] valor temporário de suavização do derivativo
.DATA[2] valor anterior de .PV
.DATA[3] valor anterior de .ERR
.DATA[4] valor válido anterior de .SP
.DATA[5] constante de conversão de escala em porcentagem
.DATA[6] constante de conversão de escala de .PV
.DATA[7] constante de conversão de escala derivativa
.DATA[8] valor anterior de .KP
.DATA[9] valor anterior de .KI
.DATA[10] valor anterior de .KD
.DATA[11] .KP de ganho dependente
.DATA[12] .KI de ganho dependente
.DATA[13] .KD de ganho dependente
.DATA[14] valor anterior de .CV
.DATA[15] constante .CV para desfazer a conversão
.DATA[16] constante tieback para desfazer a conversão
.EN BOOL habilitado
.CT BOOL tipo em cascata (0=escravo; 1=mestre)
.CL BOOL malha em cascata (0=não; 1=sim)
.PVT BOOL rastreamento da variável do processo (0=não; 1=sim)

Publicação 1756-RM003F-PT-P - Maio 2002


12-22 Instruções Especiais (FBC, DDT, DTR, PID)

Mnemônico: Tipo de Dados: Descrição:


.DOE BOOL derivativa de (0=PV; 1=erro)
.SWM BOOL modo manual do software (0=no-automático; 1=yes- manual sw)
.CA BOOL ação de controle (0 significa E=SP-PV; 1 significa E=PV-SP)
.MO BOOL modo da estação (0=automático; 1=manual)
.PE BOOL equação PID (0=independente; 1=dependente)
.NDF BOOL sem suavização de derivativa
(0=filtro de suavização de derivativa habilitado; 1=filtro de suavização da derivativa desabilitado)
.NOBC BOOL sem cálculo de retorno do bias
(0=cálculo de retorno do bias habilitado; 1=cálculo de retorno de bias desabilitado)
.NOZC BOOL sem zona morta de cruzamento zero
(0=zona morta está no cruzamento zero; 1=zona morta não está no cruzamento zero)
.INI BOOL PID inicializada (0=não; 1=sim)
.SPOR BOOL setpoint fora da faixa (0=não; 1=sim)
.OLL BOOL CV está abaixo do limite mínimo de saída (0=não; 1=sim)
.OLH BOOL CV está acima do limite máximo de saída (0=não; 1=sim)
.EWD BOOL erro está dentro da zona morta (0=não; 1=sim)
.DVNA BOOL desvio está no alarme baixo (0=não; 1=sim)
.DVPA BOOL desvio está no alarme alto (0=não; 1=sim)
.PVLA BOOL PV está no alarme baixo (0=não; 1=sim)
.PVHA BOOL PV está no alarme alto (0=não; 1=sim)

Descrição: Normalmente, a instrução PID recebe a variável do processo (PV) d


um módulo de entrada analógica e modula uma saída de variável de
controle (CV) em um módulo de saída analógica para manter a
variável de processo no setpoint desejado.
O bit .EN indica o status da execução. O bit .EN está energizado
quando as transições de entrada da condição da linha passa de falsa
para verdadeira. O bit .EN está energizado quando a entrada da
condição da linha se torna falsa. A instrução PID não usa um bit .DN.
A instrução PID executa todas as varreduras enquanto a entrada da
condição da linha é verdadeira.

bit .EN

estado da linha
execução da instrução PID

Flags de Status Aritmético: não afetados

Publicação 1756-RM003F-PT-P - Maio 2002


Instruções Especiais (FBC, DDT, DTR, PID) 12-23

Condições de Falha:

IMPORTANTE Estas falhas eram falhas graves no controlador CLP-5.

Uma falha de advertência ocorrerá se: Tipo de falha: Código de falha:


.UPD ≤ 0 4 35
setpoint está fora da faixa 4 36

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.

Clique aqui para configurar a


instrução PID

Publicação 1756-RM003F-PT-P - Maio 2002


12-24 Instruções Especiais (FBC, DDT, DTR, PID)

Especificação de ajuste

Selecione a guia Tuning. As alterações têm efeito assim que você


clicar em outro campo, em OK, em Apply ou pressionar Enter.

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

Selecione a guia Configuration. Você deve clicar em OK ou em Apply


para que as alterações tenho efeito.

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).

Publicação 1756-RM003F-PT-P - Maio 2002


Instruções Especiais (FBC, DDT, DTR, PID) 12-25

Especificação de alarmes

Selecione a guia Alarms. Você deve clicar em OK ou em Apply para


que a alterações tenho efeito.

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).

Especificação de conversão de escala

Selecione a guia Scaling. Você deve clicar em OK ou em Apply para


que a alterações tenho efeito.

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).

Publicação 1756-RM003F-PT-P - Maio 2002


12-26 Instruções Especiais (FBC, DDT, DTR, PID)

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

No exemplo acima, o nível no tanque é comparado ao setpoint. Se o


nível estiver mais alto que o setpoint, a equação PID aumenta a
variável de controle e faz com que a válvula da tomada do tanque
abra; diminuindo assim o nível no tanque.

A equação PID utilizada na instrução PID é uma equação de forma


posicional com a opção de usar ganhos dependentes ou
independentes. Ao utilizar ganhos independentes, os ganhos
proporcionais, integrais e derivativos afetam apenas seus itens de
ganhos proporcionais, integrais e derivativos respectivamente. Ao
utilizar ganhos dependentes, o ganho proporcional é substituído por
um ganho de controlador que afeta os três itens. Você pode usar a
forma da equação para executar o mesmo tipo de controle. Os dois

Publicação 1756-RM003F-PT-P - Maio 2002


Instruções Especiais (FBC, DDT, DTR, PID) 12-27

tipos de equação são simplesmente para permitir que você utilize o


tipo de equação que lhe é mais familiar.

Opção de Ganhos: Derivativa de: Equação:


Ganhos dependentes error (E)
(Norma ISA) t
1 dE
CV = K C E + ---- ∫ Edt + T d ------- + BIAS
Ti dt
0

process variable (PV)


E = SP - PV
t
1 dPV
CV = K C E + ---- ∫ Edt – T d ----------- + BIAS
Ti dt
0

E = PV - SP
t
1 dPV
CV = K C E + ---- ∫ Edt + T d ----------- + BIAS
Ti dt
0

Ganhos independentes error (E)


t
dE
CV = K P E + K i ∫ Edt + Kd ------- + BIAS
dt
0

process variable (PV)


E = SP - PV
t
dPV
CV = K P E + Ki ∫ Edt – K d ----------- + BIAS
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

Kd ganho derivativo (segundos)


Para converter Kd (ganho derivativo) e Td (tempo da taxa), use:
Kd = Kc (Td) 60
KC ganho do controlador (sem unidade)

Publicação 1756-RM003F-PT-P - Maio 2002


12-28 Instruções Especiais (FBC, DDT, DTR, PID)

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

Se quiser utilizar um termo específico da equação PID, defina seu


ganho em zero. Por exemplo, se você não quiser nenhuma ação
derivativa, defina Kd ou Td igual a zero.

Disparo anti-reset e transferência sem interrupção de manual


para automático

A instrução PID evita, automaticamente, o disparo de reset, pois


previne que o termo integral acumule sempre que a saída CV alcançar
seus valores máximo ou mínimo, conforme definido em .MAXO e
.MINO. O termo integral acumulado permanece congelado até que a
saída CV caia abaixo de seu limite máximo ou aumente para acima de
seu limite mínimo. Logo, o acúmulo integral normal reinicia-se
automaticamente.

A instrução PID fornece os dois modos de controle:

Modo Manual de Controle: Descrição:


software manual (.SWM) também conhecida como modo de saída energizada
permite que o usuário defina a % de saídas a partir de seu software
O valor da saída energizada (.SO) é usado como uma saída da malha. O valor da saída energizada,
normalmente, vem de uma entrada de operação a partir de um dispositivo de interface de operação.
manual (.MO) pega o valor de tieback como uma entrada e ajusta suas variáveis internas para gerar o mesmo valor
na saída
A entrada de tieback para a instrução PID é convertida a 0-100% de acordo com os valores de .MINTIE
e .MAXTIE e é usada como a saída da malha. Normalmente, a entrada de tieback vem de uma saída
de estação de hardware manual/automática que está em bypass na saída do controlador.
Nota: O modo manual cancela o modo manual de software se os bits de modo estiverem energizados.

A instrução PID também fornece, automaticamente, transferências sem


interrupção do modo manual do software para o modo automático. A
instrução PID calcula novamente o retorno do valor do termo de
acúmulo integral necessário para o rastreamento da saída CV ou o
valor da saída energizada (.SO) no modo manual do software ou a
entrada de tieback no modo manual. Desta maneira, quando a malha
passa para o modo automático, a saída CV inicia a partir da saída
configurada ou do valor de tieback e nenhuma "interrupção" no valor
da saída ocorre.

Publicação 1756-RM003F-PT-P - Maio 2002


Instruções Especiais (FBC, DDT, DTR, PID) 12-29

Além disso, a instrução PID pode fornecer, de forma automática, uma


transferência sem interrupção do manual para o automático mesmo se
o controle integral não for usado (ou seja, Ki = 0). Neste caso, a
instrução modifica o termo .BIAS para fazer o rastreamento da saída
CV ou os valores de saída ou tieback definidos. Ao reiniciar o controle
automático, o termo .BIAS manterá seu último valor. Você pode
desabilitar o cálculo de retorno do termo .BIAS através da energização
do bit .NOBC na estrutura de dados PID. Esteja ciente que se você
definir .NOBC como verdadeiro, a instrução PID não fornece mais
uma transferência de manual para automático sem interrupção
quando o controle integral não for usado.

Temporização da instrução PID

A instrução PID e a amostragem da variável de processo precisam ser


atualizadas em uma taxa periódica. Este tempo de atualização está
relacionado ao processo físico que você está controlando. Para malhas
muito lentas, como malhas de temperatura, um tempo de atualização
de uma vez por segundo ou mais longo, normalmente, é suficiente
para obter um bom controle. As malhas mais rápidas, como malhas de
pressão e fluxo, podem precisam de um tempo de atualização como
uma vez a cada 250 milissegundos. Em alguns casos raros, como
controle de tensão em uma bobina desenroladora, requerem
atualizações de malha de 10 milissegundos ou mais rápidas.

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).

O meio mais fácil de executar a instrução PID é colocá-la em uma


tarefa periódica. Defina o tempo de atualização da malha (.UPD)
como igual à taxa de tarefa periódica e certifique-se de que a
instrução PID é executada em todas as varreduras da tarefa periódica

Lógica Ladder

Publicação 1756-RM003F-PT-P - Maio 2002


12-30 Instruções Especiais (FBC, DDT, DTR, PID)

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);

Ao utilizar uma tarefa periódica, certifique-se de que a entrada


analógica usada para a variável do processo é atualizada para o
controlador em uma taxa que seja significantivamente mais rápida que
a taxa da tarefa periódica. Teoricamente, a variável de processo deve
ser enviada ao controlador, pelo menos, cinco a dez vezes mais
rápido que a taxa de tarefa periódica. Isto minimiza a diferença de
tempo entre as amostras reais da variável de processo e a execução da
malha PID. Por exemplo, se a malha PID estiver em uma tarefa
periódica de 250 milissegundos, utilize um tempo de atualização de
250 milissegundos (.UPD = .25) e configure o módulo de entrada
analógica para produzir dados a cada 25 a 50 mseg.

Um outro método de execução da instrução PID, embora menos


preciso, é colocar a instrução em uma tarefa contínua e usar um bit
executado do temporizador para disparar a execução da instrução.

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;

Publicação 1756-RM003F-PT-P - Maio 2002


Instruções Especiais (FBC, DDT, DTR, PID) 12-31

Neste método, o tempo de atualização da malha da instrução PID


deve ser definido como igual ao preset do temporizador. Como no
caso de utilização de uma tarefa periódica, você deve configurar o
módulo de entrada analógica para produzir a variável do processo em
uma taxa significantemente mais rápida que o tempo de atualização
da malha. Você deve usar somente o método do temporizador de
execução de PID para malhas com tempos de atualização da malha
que sejam várias vezes maior que o pior tempo de execução para sua
tarefa contínua.

A maneira mais precisa de executar a instrução PID é usar o recurso


de amostragem de tempo real (RTS) dos módulos de entrada
analógica 1756. O módulo de entrada analógica pega como amostra
suas entradas na taxa de amostragem de tempo real que você
configurou ao configurar o módulo. Quando o período de amostra de
tempo real do módulo expira, ele atualiza suas entradas e os dados de
impressão de data e hora (representado pelo membro
.RollingTimestamp da estrutura de dados de entrada analógica)
produzido pelo módulo.

As faixas do registro de data e hora é de 0-32767 milissegundos.


Monitore este registro. Quando ele mudar, uma nova amostra de
variável do processo foi recebida. Toda vez que um registro de data e
hora mudar, execute a instrução PID uma vez. Como a amostra de
variável do processo é conduzida pelo módulo de entrada analógica,
tempo de amostra de entrada é muito preciso e o tempo de
atualização da malha usado pela instrução PID deve ser definida
como igual ao tempo RTS do módulo de entrada analógica.

Para garantir que não perderá amostras da variável de processo,


execute sua lógica em uma taxa mais rápida que o tempo de RTS. Por
exemplo, se o tempo de RTS for de 250 mseg, você pode colocar a
lógica PID em uma tarefa periódica que seja executada a cada 100
mseg para garantir que nunca perderá uma amostra. Você pode
colocar a lógica PID em uma tarefa contínua por quanto tempo você
garantir que a lógica seja atualizada mais que uma vez a cada 250
milissegundos.

Um exemplo do método RTS de execução é mostrado abaixo. A


execução da instrução PID depende do recebimento novos dados de
entrada analógica. Se o módulo de entrada analógica falhar ou for
removido, o controlador pára de receber os registros de data e hora
rolantes e a malha PID interrompe a execução. Você deve monitorar o
bit de status da entrada analógica PV e caso ele mostre um status
ruim, force a malha no modo manual de software e execute a malha
para todas as varreduras. Isto permite que o operador ainda altere
manualmente a saída da malha PID.

Publicação 1756-RM003F-PT-P - Maio 2002


12-32 Instruções Especiais (FBC, DDT, DTR, PID)

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;

Reinícialização Sem Interrupção

A instrução PID pode interagir com os módulos de saída analógica


para fornecer um reinício sem interrupção quando o controlador
passar do modo Program para o Run ou quando for energizado.

Quando o módulo de saída analógica 1756 perde a comunicação com


o controlador ou detecta que o controlador está no modo Program, o
módulo de saída analógica energiza suas saída para valores de
condição de falha que você especificou quando configurou o módulo.
Ao retornar ao modo Run ou restabelecer a comunicação com o
módulo de saída analógica, a instrução PID reseta, automaticamente,
sua saída de variável de controle para igual à saída analógica
utilizando o bit Inhold e os parâmetros Inhold Value na instrução PID.

Publicação 1756-RM003F-PT-P - Maio 2002


Instruções Especiais (FBC, DDT, DTR, PID) 12-33

Para configurar um reinício sem interrupção:

Faça isto: Detalhes:


Configure o canal do módulo de saída Selecione a caixa de verificação “hold for initialization” na página de propriedades para o
analógica 1756 que recebe a variável de canal específico do módulo.
controle da instrução PID
Isto informa o módulo de saída analógica que quando o controlador retornar ao modo Run
ou restabelecer a comunicação com o módulo, este deve manter a saída analógica em seu
valor atual até que o valor enviado pelo controlador corresponda (dentro de 0,1% da faixa)
ao valor atual usado pelo canal de saída. A saída do controlador irá acelerar em rampa até
o valor de saída mantido atualmente por meio do uso do termo .BIAS. Esta aceleração em
rampa é semelhante à transferência sem interrupção automática.
Insira o tag Inhold bit e o tag Inhold Value O módulo de saída analógica 1756 retorna dois valores para cada canal em sua estrutura
na instrução PID de dados de entrada. O bit de status InHold (.Ch2InHold, por exemplo), quando verdadeiro,
indica que o canal de saída analógica está mantendo seu valor. O valor de readback de
dados (.Ch2Data, por exemplo) mostra o valor atual da saída nas unidades de engenharia.

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

O cálculo de derivativo é aprimorado por um filtro de suavização de


derivativo. Este filtro digital de primeira ordem, passa baixa ajuda a
minimizar os impulsos do termo derivativo causados pelos ruídos na
PV. Esta suavização torna-se mais agressiva com valores maiores de
ganhos derivativos. Você pode desabilitar a suavização do derivativo
se seu processo requisitar valores muito altos de ganho derivativo
(Kd > 10, por exemplo). Para desabilitar a suavização do derivativo,
selecione a opção “No derivative smoothing” na guia Configuration ou
energize o bit .NDF na estrutura PID.

Definição da zona morta

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

Publicação 1756-RM003F-PT-P - Maio 2002


12-34 Instruções Especiais (FBC, DDT, DTR, PID)

sem alterar a saída. Além disso, a zona morta ajuda a minimizar o


desgaste e a ruptura em seu dispositivo de controle final.

+ zona morta

setpoint erro dentro da faixa de zona morta

- zona morta

tempo 41026

O cruzamento zero é o controle da zona morta que permite a


instrução usar o erro para fins de cálculo à medida que a variável de
processo cruza a zona morta até que a variável de processo cruze o
setpoint. Uma vez que a variável do processo cruza o setpoint (erro
cruza zero e muda o sinal) e enquanto a variável de processo
permanece na zona morta, a saída não mudará.

A zona morta aumenta para cima ou para baixo o setpoint através do


valor que você especifica. Insira zero para inibir a zona morta. A zona
morta tem as mesmas unidades de escala que o setpoint Você pode
usar a zona morta sem o recurso de cruzamento zero selecionando a
opção “no zero crossing for deadband” na guia Configuration ou
energizando o bit .NOZC na estrutura PID.

Se você estiver utilizando a zona morta, Control variable deve ser


REAL ou o operando será forçado para 0 quando o erro estiver dentro
da zona morta

Utilização da limitação de saída

Você pode definir um limite de saída (porcentagem de saída) na saída


de controle. Quando a instrução detecta que a saída alcançou um
limite, ela energiza o bit de alarme definido como um bit de alarme e
evita a saída do excedente do limite mais alto ou mais baixo.

Feedforward ou bias de saída

Você pode realizar o feedforward de um distúrbio do sistema através


da alimentação do valor .BIAS dentro de feedforward/bias da
instrução PID.

O valor de feedforward representa o distúrbio alimentado dentro da


instrução PID que tem uma chance de alteração da variável de
processo. O feedforward, normalmente, é usado em centros de
controle com um tag de transporte. Por exemplo, um valor de

Publicação 1756-RM003F-PT-P - Maio 2002


Instruções Especiais (FBC, DDT, DTR, PID) 12-35

representação do valor de “cold water poured into a warm mix” (água


fria jogada em uma mistura quente) pode ser elevado ao valor de
saída mais rápido que esperando pela variável de processo para
alterar como o resulto da mistura.

Um valor de bias, normalmente, é usado quando nenhum controle


integral é usado. Neste caso, o valor de bias pode ser ajustado para
manter a saída na faixa necessária para manter PV perto do setpoint.

Malhas em cascata

A PID coloca em cascata duas malhas através da atribuição da saída


em percentual da malha mestre para o setpoint da malha escrava. A
malha escrava converte automaticamente a saída da malha mestre nas
unidades de engenharia para o setpoint da malha escrava baseada os
valores da malha escrava para .MAXS e .MINS.

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);

Controle de uma razão

Você pode manter dois valores em uma razão através da utilização


destes parâmetros:
• valor não controlado
• valor controlado (o setpoint resultante a ser usado pela
instrução PID)
• razão entre estes dois valores

Publicação 1756-RM003F-PT-P - Maio 2002


12-36 Instruções Especiais (FBC, DDT, DTR, PID)

Lógica Ladder

Texto Estruturado

pid_2.sp := uncontrolled_flow * ratio


PID(pid_2,pv_2,tieback_2,cv_2,0,0,0);

Para este parâmetro de multiplicação: Insira este valor:


Destination valor controlado
Source A valor não controlado
Source B razão

Publicação 1756-RM003F-PT-P - Maio 2002


Instruções Especiais (FBC, DDT, DTR, PID) 12-37

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

Processo PID com malhas mestre/escravo

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

Publicação 1756-RM003F-PT-P - Maio 2002


12-38 Instruções Especiais (FBC, DDT, DTR, PID)

Notas:

Publicação 1756-RM003F-PT-P - Maio 2002


Capítulo 13

Instruções Trigonométricas
(SIN, COS, TAN, ASN, ASIN, ACS, ACOS, ATN, ATAN)

Introdução As instruções trigonométricas avaliam as operações aritméticas que


usam operações trigonométricas.

Se você quiser: Use esta instrução: Disponível nessas linguagens: Consulte


página:
Obter o seno de um valor. SIN lógica ladder 13-2
texto estruturado
bloco de funções
Obter o co-seno de um valor. COS lógica ladder 13-4
texto estruturado
bloco de funções
Obter a tangente de um valor. TAN lógica ladder 13-6
texto estruturado
bloco de funções
Obter o arco seno de um valor. ASN lógica ladder 13-8
ASIN(1) texto estruturado
bloco de funções
Obter o arco co-seno de um valor. ACS lógica ladder 13-10
ACOS(1) texto estruturado
bloco de funções
Obter o arco tangente de um valor. ATN lógica ladder 13-12
ATAN(1) texto estruturado
bloco de funções
(1) Texto estruturado somente.

É possível combinar tipos de dados, mas perda de precisão e erros de


arredondamentos podem ocorrer, bem como demora na execução da
instrução. Verifique o bit de status de overflow (S:V) para observar se
o resultado foi truncado.

Para instruções de lógica ladder, os tipos de dados em negrito


indicam tipos de dados otimizados. Uma instrução executa mais
rapidamente e requer menos memória se todos os operandos da
instrução usarem o mesmo tipo de dados otimizados, geralmente,
DINT ou REAL.

1 Publicação 1756-RM003F-PT-P - Maio 2002


13-2 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

Operando: Tipo: Formato: Descrição:


Source SINT imediato encontre o seno deste valor.
INT tag
DINT
REAL
Destination SINT tag tag para armazenar o resultado
INT
DINT
REAL

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.

Consulte ApêndiceC para informações sobre a sintaxe de expressões


no texto estruturado.

Bloco de Funções

Operando: Tipo: Formato: Descrição:


tag SIN FBD_MATH_ADVANCED estrutura estrutura SIN

Estrutura FBD_MATH_ADVANCED

Parâmetro de Tipo de Dados: Descrição:


Entrada:
EnableIn BOOL Habilita entrada. Se desenergizada, a instrução não executa e as saídas não são atualizadas.
Valor inicial é energizado
Source REAL Entrada para a instrução matemática.
Válido = qualquer flutuante
Parâmetro de Saída: Tipo de Dados: Descrição:
EnableOut BOOL A instrução produziu um resultado válido.
Dest REAL Resultado da instrução matemática. Os flags de status aritmético são energizados para esta
saída.

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.

Flags de Status Aritmético: Os flags de status aritmético são afetados.

Publicação 1756-RM003F-PT-P - Maio 2002


Instruções Trigonométricas (SIN, COS, TAN, ASN, ASIN, ACS, ACOS, ATN, ATAN) 13-3

Condições de Falha: nenhuma

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.

Exemplo: Calcule o seno de value e coloque o resultado em result.

Lógica Ladder

Texto Estruturado

result := SIN(value);

Bloco de Funções

Publicação 1756-RM003F-PT-P - Maio 2002


13-4 Instruções Trigonométricas (SIN, COS, TAN, ASN, ASIN, ACS, ACOS, ATN, ATAN)

Co-seno (COS) A instrução COS calcula o co-seno de Source (em radianos) e


armazena o resultado em Destination.

Operandos:

Lógica Ladder

Operando: Tipo: Formato: Descrição:


Source SINT imediato encontre o co-seno deste valor.
INT tag
DINT
REAL
Destination SINT tag tag para armazenar o resultado
INT
DINT
REAL

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.

Consulte ApêndiceC para informações sobre a sintaxe de expressões


no texto estruturado.

Bloco de Funções

Operando: Tipo: Formato: Descrição:


tag COS FBD_MATH_ADVANCED estrutura estrutura COS

Estrutura FBD_MATH_ADVANCED

Parâmetro de Tipo de Dados: Descrição:


Entrada:
EnableIn BOOL Habilita entrada. Se desenergizada, a instrução não executa e as saídas não são atualizadas.
Valor inicial é energizado
Source REAL Entrada para a instrução matemática.
Válido = qualquer flutuante
Parâmetro de Saída: Tipo de Dados: Descrição:
EnableOut BOOL A instrução produziu um resultado válido.
Dest REAL Resultado da instrução matemática. Os flags de status aritmético são energizados para esta saída.

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.

Flags de Status Aritmético: Os flags de status aritmético são afetados.

Publicação 1756-RM003F-PT-P - Maio 2002


Instruções Trigonométricas (SIN, COS, TAN, ASN, ASIN, ACS, ACOS, ATN, ATAN) 13-5

Condições de Falha: nenhuma

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.

Exemplo: Calcule o co-seno de value e coloque o resultado em result.

Lógica Ladder

Texto Estruturado

result := COS(value);

Bloco de Funções

Publicação 1756-RM003F-PT-P - Maio 2002


13-6 Instruções Trigonométricas (SIN, COS, TAN, ASN, ASIN, ACS, ACOS, ATN, ATAN)

Tangente (TAN) A instrução TAN calcula a tangente de Source (em radianos) e


armazena o resultado em Destination.

Operandos:

Lógica Ladder

Operando: Tipo: Formato: Descrição:


Source SINT imediato encontre a tangente deste valor.
INT tag
DINT
REAL
Destination SINT tag tag para armazenar o resultado
INT
DINT
REAL

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.

Consulte ApêndiceC para informações sobre a sintaxe de expressões


no texto estruturado.

Bloco de Funções

Operando: Tipo: Formato: Descrição:


tag TAN FBD_MATH_ADVANCED estrutura estrutura TAN

Estrutura FBD_MATH_ADVANCED

Parâmetro de Tipo de Dados: Descrição:


Entrada:
EnableIn BOOL Habilita entrada. Se desenergizada, a instrução não executa e as saídas não são atualizadas.
Valor inicial é energizado
Source REAL Entrada para a instrução matemática.
Válido = qualquer flutuante
Parâmetro de Saída: Tipo de Dados: Descrição:
EnableOut BOOL A instrução produziu um resultado válido.
Dest REAL Resultado da instrução matemática. Os flags de status aritmético são energizados para esta
saída.

Descrição: Source deve ser maior ou igual a -102943,7 (-2πx214) e menor ou igual
a 102943,7 (2πx214).

Flags de Status Aritmético: Os flags de status aritmético são afetados.

Publicação 1756-RM003F-PT-P - Maio 2002


Instruções Trigonométricas (SIN, COS, TAN, ASN, ASIN, ACS, ACOS, ATN, ATAN) 13-7

Condições de Falha: nenhuma

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.

Exemplo: Calcule a tangente de value e coloque o resultado em result.

Lógica Ladder

Texto Estruturado

result := TAN(value);

Bloco de Funções

Publicação 1756-RM003F-PT-P - Maio 2002


13-8 Instruções Trigonométricas (SIN, COS, TAN, ASN, ASIN, ACS, ACOS, ATN, ATAN)

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

Operando: Tipo: Formato: Descrição:


Source SINT imediato encontre o arco seno deste valor.
INT tag
DINT
REAL
Destination SINT tag tag para armazenar o resultado
INT
DINT
REAL

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.

Consulte ApêndiceC para informações sobre a sintaxe de expressões


no texto estruturado.

Bloco de Funções

Operando: Tipo: Formato: Descrição:


tag ASN FBD_MATH_ADVANCED estrutura estrutura ASN

Estrutura FBD_MATH_ADVANCED

Parâmetro de Tipo de Dados: Descrição:


Entrada:
EnableIn BOOL Habilita entrada. Se desenergizada, a instrução não executa e as saídas não são atualizadas.
Valor inicial é energizado
Source REAL Entrada para a instrução matemática.
Válido = qualquer flutuante
Parâmetro de Saída: Tipo de Dados: Descrição:
EnableOut BOOL A instrução produziu um resultado válido.
Dest REAL Resultado da instrução matemática. Os flags de status aritmético são energizados para esta
saída.

Descrição: Source deve ser maior ou igual a -1 e menor ou igual a 1. O valor


resultante em Destination é sempre superior a ou igual a -π/2 e
inferior a ou igual a π/2 (onde π = 3,141593).

Flags de Status Aritmético: Os flags de status aritmético são afetados.

Publicação 1756-RM003F-PT-P - Maio 2002


Instruções Trigonométricas (SIN, COS, TAN, ASN, ASIN, ACS, ACOS, ATN, ATAN) 13-9

Condições de Falha: nenhuma

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.

Exemplo: Calcule o arco seno de value e coloque o resultado em result.

Lógica Ladder

Texto Estruturado

result := ASIN(value);

Bloco de Funções

Publicação 1756-RM003F-PT-P - Maio 2002


13-10 Instruções Trigonométricas (SIN, COS, TAN, ASN, ASIN, ACS, ACOS, ATN, ATAN)

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

Operando: Tipo: Formato: Descrição:


Source SINT imediato encontre o arco co-seno deste valor.
INT tag
DINT
REAL
Destination SINT tag tag para armazenar o resultado
INT
DINT
REAL

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.

Consulte ApêndiceC para informações sobre a sintaxe de expressões


no texto estruturado.

Bloco de Funções

Operando: Tipo: Formato: Descrição:


tag ACS FBD_MATH_ADVANCED estrutura estrutura ACS

Estrutura FBD_MATH_ADVANCED

Parâmetro de Tipo de Dados: Descrição:


Entrada:
EnableIn BOOL Habilita entrada. Se desenergizada, a instrução não executa e as saídas não são atualizadas.
Valor inicial é energizado
Source REAL Entrada para a instrução matemática.
Válido = qualquer flutuante
Parâmetro de Saída: Tipo de Dados: Descrição:
EnableOut BOOL A instrução produziu um resultado válido.
Dest REAL Resultado da instrução matemática. Os flags de status aritmético são energizados para esta
saída.

Descrição: Source deve ser maior a ou igual a -1 e menor a ou igual a 1. O valor


resultante em Destination é sempre superior a ou igual a 0 ou menor
a ou igual a π(onde π = 3,141593).

Flags de Status Aritmético: Os flags de status aritmético são afetados.

Publicação 1756-RM003F-PT-P - Maio 2002


Instruções Trigonométricas (SIN, COS, TAN, ASN, ASIN, ACS, ACOS, ATN, ATAN) 13-11

Condições de Falha: nenhuma

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.

Exemplo: Calcule o arco co-seno de value e coloque o resultado em result.

Lógica Ladder

Texto Estruturado

result := ACOS(value);

Bloco de Funções

Publicação 1756-RM003F-PT-P - Maio 2002


13-12 Instruções Trigonométricas (SIN, COS, TAN, ASN, ASIN, ACS, ACOS, ATN, ATAN)

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

Operando: Tipo: Formato: Descrição:


Source SINT imediato encontre o arco tangente deste valor.
INT tag
DINT
REAL
Destination SINT tag tag para armazenar o resultado
INT
DINT
REAL

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.

Consulte ApêndiceC para informações sobre a sintaxe de expressões


no texto estruturado.

Bloco de Funções

Operando: Tipo: Formato: Descrição:


tag ATN FBD_MATH_ADVANCED estrutura estrutura ATN

Estrutura FBD_MATH_ADVANCED

Parâmetro de Tipo de Dados: Descrição:


Entrada:
EnableIn BOOL Habilita entrada. Se desenergizada, a instrução não executa e as saídas não são atualizadas.
Valor inicial é energizado
Source REAL Entrada para a instrução matemática.
Válido = qualquer flutuante
Parâmetro de Saída: Tipo de Dados: Descrição:
EnableOut BOOL A instrução produziu um resultado válido.
Dest REAL Resultado da instrução matemática. Os flags de status aritmético são energizados para esta
saída.

Descrição: O valor resultante em Destination é sempre maior ou igual a π/2 e


menor ou igual a π/2π(onde * =3,141593).

Flags de Status Aritmético: Os flags de status aritmético são afetados.

Publicação 1756-RM003F-PT-P - Maio 2002


Instruções Trigonométricas (SIN, COS, TAN, ASN, ASIN, ACS, ACOS, ATN, ATAN) 13-13

Condições de Falha: nenhuma

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.

Exemplo: Calcule o arco tangente de value e coloque o resultado em result.

Lógica Ladder

Texto Estruturado

result := ATAN(value);

Bloco de Funções

Publicação 1756-RM003F-PT-P - Maio 2002


13-14 Instruções Trigonométricas (SIN, COS, TAN, ASN, ASIN, ACS, ACOS, ATN, ATAN)

Notas:

Publicação 1756-RM003F-PT-P - Maio 2002


Capítulo 14

Instruções de Matemática Avançada


(LN, LOG, XPY)

Introdução As instruções de matemática avançada incluem estas instruções:

Se você quiser: Use esta instrução: Disponível nestas linguagens: Consulte


página:
Calcular o log neperiano de um valor LN lógica ladder 14-2
texto estruturado
bloco de funções
Calcular o log de base 10 de um valor LOG lógica ladder 14-4
texto estruturado
bloco de funções
Aumentar um valor para a potência de um outro valor. XPY lógica ladder 14-6
texto estruturado(1)
bloco de funções
(1)
Não há instrução de texto estruturado equivalente. Use o operador em uma expressão.

É possível combinar tipos de dados, mas perda de precisão e erros de


arredondamentos podem ocorrer, bem como demora na execução
da instrução. Verifique o bit S:V para observar se o resultado foi
truncado.

Para instruções de lógica ladder, os tipos de dados em negrito


indicam tipos de dados ótimos. Uma instrução executa mais
rapidamente e requer menos memória se todos os operandos da
instrução usarem o mesmo tipo de dados ótimo, geralmente, DINT ou
REAL.

1 Publicação 1756-RM003F-PT-P - Maio 2002


14-2 Instruções de Matemática Avançada (LN, LOG, XPY)

Log Neperiano (LN) A instrução LN calcula o log neperiano de Source e coloca o resultado
em Destination.

Operandos:

Lógica Ladder

Operando: Tipo: Formato: Descrição:


Source SINT imediato encontra o log neperiano deste valor
INT tag
DINT
REAL
Destination SINT tag tag para armazenar o resultado
INT
DINT
REAL

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.

Consulte o Apêndice C para informações sobre a sintaxe de


expressões de texto estruturado.

Bloco de Funções

Operando: Tipo: Formato: Descrição:


tag LN FBD_MATH_ADVANCED estrutura estrutura LN

estrutura FBD_MATH_ADVANCED

Parâmetro de Tipo de Dados: Descrição:


Entrada:
EnableIn BOOL Habilita entrada. Se desenergizada, a instrução não executa e as saídas não são atualizadas.
Valor inicial está energizado
Source REAL Entrada para a instrução matemática.
Válido = qualquer flutuante
Parâmetro de Saída: Tipo de Dados: Descrição:
EnableOut BOOL A instrução produziu um resultado válido.

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.

Flags de Status Aritmético: Os flags de status aritmético são afetados.

Condições de Falha: nenhuma

Publicação 1756-RM003F-PT-P - Maio 2002


Instruções de Matemática Avançada (LN, LOG, XPY) 14-3

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.

Exemplo: Calcule o log neperiano de value e coloque o resultado em result.

Exemplo de Lógica Ladder

Texto Estruturado

result := LN(value);

Bloco de Funções

Publicação 1756-RM003F-PT-P - Maio 2002


14-4 Instruções de Matemática Avançada (LN, LOG, XPY)

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

Operando: Tipo: Formato: Descrição:


Source SINT imediato encontra o log deste valor
INT tag
DINT
REAL
Destination SINT tag tag para armazenar o resultado
INT
DINT
REAL

Texto Estruturado

dest := LOG(source); Use LOG como uma função. Esta função calcula o log desource e
armazena o resultado em dest.

Consulte o Apêndice C para informações sobre a sintaxe de


expressões de texto estruturado.

Bloco de Funções

Operando: Tipo: Formato: Descrição:


tag LOG FBD_MATH_ADVANCED estrutura estrutura de LOG

Estrutura FBD_MATH_ADVANCED

Parâmetro de Tipo de Dados: Descrição:


Entrada:
EnableIn BOOL Habilita entrada. Se desenergizada, a instrução não executa e as saídas não são atualizadas.
Valor inicial está energizado
Source REAL Entrada para a instrução matemática.
Válido = qualquer flutuante
Parâmetro de Saída: Tipo de Dados: Descrição:
EnableOut BOOL A instrução produziu um resultado válido.
Dest REAL Resultado da instrução matemática. Os flags de status aritmético são energizados para esta
saída.

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.

Flags de Status Aritmético: Os flags de status aritmético são afetados.

Publicação 1756-RM003F-PT-P - Maio 2002


Instruções de Matemática Avançada (LN, LOG, XPY) 14-5

Condições de Falha: nenhuma

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.

Exemplo: Calcule o log de value e coloque o resultado em result.

Lógica Ladder

Texto Estruturado

result := LOG(value);

Bloco de Funções

Publicação 1756-RM003F-PT-P - Maio 2002


14-6 Instruções de Matemática Avançada (LN, LOG, XPY)

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

Operando: Tipo: Formato: Descrição:


Source X SINT imediato valor de base
INT tag
DINT
REAL
Source Y SINT imediato expoente
INT tag
DINT
REAL
Destination SINT tag tag para armazenar o resultado
INT
DINT
REAL

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.

Consulte o Apêndice C para informações sobre a sintaxe de


expressões de texto estruturado.

Bloco de Funções

Operando: Tipo: Formato: Descrição:


XPY tag FBD_MATH estrutura estrutura XPY

Publicação 1756-RM003F-PT-P - Maio 2002


Instruções de Matemática Avançada (LN, LOG, XPY) 14-7

Estrutura FBD_MATH

Parâmetro de Tipo de Dados: Descrição:


Entrada:
EnableIn BOOL Habilita entrada. Se desenergizada, a instrução não executa e as saídas não são atualizadas.
Valor inicial está energizado
Source X REAL valor de base
Válido = qualquer flutuante
Source Y REAL Expoente
Válido = qualquer flutuante
Parâmetro de Saída: Tipo de Dados: Descrição:
EnableOut BOOL A instrução produziu um resultado válido.
Dest REAL Resultado da instrução matemática. Os flags de status aritmético são energizados para esta
saída.

Descrição: Se Source X for negativo, Source Y deve ser um valor inteiro ou uma
falha de advertência ocorrerá.

A instrução XPY usa este algoritmo: Destination = X**Y

O controlador avalia x0=1 e 0x=0.

Flags de Status Aritmético: Os flags de status aritmético são afetados.

Condições de Falha:

Uma falha de advertência ocorrerá se: Tipo de falha: Código de falha:


Source X é negativo e Source Y não é um valor 4 4
inteiro

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.

Publicação 1756-RM003F-PT-P - Maio 2002


14-8 Instruções de Matemática Avançada (LN, LOG, XPY)

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: A instrução XPY calcula value_1 elevado a value_2 e coloca o


resultado em result.

Lógica Ladder

Texto Estruturado

result := (value_1 ∗∗ value_2);

Bloco de Funções

Publicação 1756-RM003F-PT-P - Maio 2002


Capítulo 15

Instruções de Conversão Matemática


(DEG, RAD, TOD, FRD, TRN, TRUNC)

Introdução As instruções de conversão matemática convertem valores.

Se você quiser: Use esta instrução: Disponível nestas linguagens: Consulte


página:
Converter radianos em graus. DEG lógica ladder 15-2
texto estruturado
bloco de funções
Converter graus em radianos. RAD lógica ladder 15-4
texto estruturado
bloco de funções
Converter um valor inteiro em um valor BCD. TOD lógica ladder 15-6
bloco de funções
Converter um valor BCD em um valor inteiro. FRD lógica ladder 15-9
bloco de funções
Remover a parte fracionária de um valor TRN lógica ladder 15-11
TRUNC(1) texto estruturado
bloco de funções
(1)
Somente texto estruturado.

É possível combinar tipos de dados, mas perda de precisão e erros de


arredondamentos podem ocorrer, bem como demora na execução da
instrução. Verifique o bit S:V para observar se o resultado foi
truncado.

Para instruções de lógica ladder, os tipos de dados em negrito


indicam tipos de dados ótimos. Uma instrução executa mais
rapidamente e requer menos memória se todos os operandos da
instrução usarem o mesmo tipo de dados ótimo, geralmente, DINT ou
REAL.

1 Publicação 1756-RM003F-PT-P - Maio 2002


15-2 Instruções de Conversão Matemática (DEG, RAD, TOD, FRD, TRN, TRUNC)

Graus (DEG) A instrução DEG converte Source (em radianos) em graus e armazena
o resultado em Destination.

Operandos:

Lógica Ladder

Operando: Tipo: Formato: Descrição:


Source SINT imediato valor a ser convertido em graus
INT tag
DINT
REAL
Destination SINT tag tag para armazenar o resultado
INT
DINT
REAL

Texto Estruturado

dest := DEG(source); Use DEG como uma função. Esta função converte source em graus e
armazena o resultado em dest.

Consulte o Apêndice C para informações sobre a sintaxe de


expressões de texto estruturado.

Bloco de Funções

Operando: Tipo: Formato: Descrição:


DEG tag FBD_MATH_ADVANCED estrutura estrutura de DEG

Estrutura FBD_MATH_ADVANCED

Parâmetro de Tipo de Dados: Descrição:


Entrada:
EnableIn BOOL Habilita entrada. Se desenergizada, a instrução não executa e as saídas não são atualizadas.
Valor inicial está energizado
Source REAL Entrada para a instrução de conversão.
Válido = qualquer flutuante
Parâmetro de Saída: Tipo de Dados: Descrição:
EnableOut BOOL A instrução produziu um resultado válido.
Dest REAL Resultado da instrução de conversão. Os flags de status aritmético são energizados para
esta saída.

Descrição: A instrução DEG usa este algoritmo:


Source*180/π (onde π = 3.141593)

Flags de Status Aritmético: Os flags de status aritmético são afetados.

Publicação 1756-RM003F-PT-P - Maio 2002


Instruções de Conversão Matemática (DEG, RAD, TOD, FRD, TRN, TRUNC) 15-3

Condições de Falha: nenhuma

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.

Exemplo: Converte value em graus e coloca o resultado em result.

Lógica Ladder

Texto Estruturado

result := DEG(value);

Bloco de Funções

Publicação 1756-RM003F-PT-P - Maio 2002


15-4 Instruções de Conversão Matemática (DEG, RAD, TOD, FRD, TRN, TRUNC)

Radianos (RAD) A instrução RAD converte Source (em graus) em radianos e armazena
o resultado em Destination.

Operandos:

Lógica Ladder

Operando: Tipo: Formato: Descrição:


Source SINT imediato valor a ser convertido em radianos
INT tag
DINT
REAL
Destination SINT tag tag para armazenar o resultado
INT
DINT
REAL

Texto Estruturado

dest := RAD(source); Use RAD como uma função. Esta função converte source em radianos
e armazena o resultado em dest.

Consulte o Apêndice C para informações sobre a sintaxe de


expressões de texto estruturado.

Bloco de Funções

Operando: Tipo: Formato: Descrição:


tag RAD FBD_MATH_ADVANCED estrutura estrutura de RAD

Estrutura FBD_MATH_ADVANCED

Parâmetro de Tipo de Dados: Descrição:


Entrada:
EnableIn BOOL Habilita entrada. Se desenergizada, a instrução não executa e as saídas não são atualizadas.
Valor inicial está energizado
Source REAL Entrada para a instrução de conversão.
Válido = qualquer flutuante
Parâmetro de Saída: Tipo de Dados: Descrição:
EnableOut BOOL A instrução produziu um resultado válido.
Dest REAL Resultado da instrução de conversão. Os flags de status aritmético são energizados para
esta saída.

Descrição: A instrução RAD usa este algoritmo:


Source*π/180 (onde π = 3.141593)

Flags de Status Aritmético: Os flags de status aritmético são afetados.

Publicação 1756-RM003F-PT-P - Maio 2002


Instruções de Conversão Matemática (DEG, RAD, TOD, FRD, TRN, TRUNC) 15-5

Condições de Falha: nenhuma

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.

Exemplo: Converte value em radianos e coloca o resultado em result.

Lógica Ladder

Texto Estruturado

result := RAD(value);

Bloco de Funções

Publicação 1756-RM003F-PT-P - Maio 2002


15-6 Instruções de Conversão Matemática (DEG, RAD, TOD, FRD, TRN, TRUNC)

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

Operando: Tipo: Formato: Descrição:


Source SINT imediato valor a ser convertido em decimal
INT tag
DINT
Um tag SINT ou INT é convertido para um valor DINT por preenchimento
com zero.
Destination SINT tag armazena o resultado
INT
DINT

Bloco de Funções

Operando: Tipo: Formato: Descrição:


tag TOD FBD_CONVERT estrutura estrutura de TOD

estrutura FBD_CONVERT

Parâmetro de Tipo de Dados: Descrição:


Entrada:
EnableIn BOOL Habilita entrada. Se desenergizada, a instrução não executa e as saídas não são atualizadas.
Valor inicial está energizado
Source DINT Entrada para a instrução de conversão.
Válido = qualquer inteiro
Parâmetro de Saída: Tipo de Dados: Descrição:
EnableOut BOOL A instrução produziu um resultado válido.
Dest DINT Resultado da instrução de conversão. Os flags de status aritmético são energizados para
esta saída.

Descrição: BCD é o sistema numérico Decimal Codificado em Binário que


expressa os dígitos decimais individuais (0-9) em uma notificação de
binário de 4 bits.

Se você inserir um Source negativo, a instrução gera uma falha de


advertência e remove o Destination.

Flags de Status Aritmético: Os flags de status aritmético são afetados.

Condições de Falha:

Uma falha de advertência ocorrerá se: Tipo de falha: Código de falha:


Source < 0 4 4

Publicação 1756-RM003F-PT-P - Maio 2002


Instruções de Conversão Matemática (DEG, RAD, TOD, FRD, TRN, TRUNC) 15-7

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

S:V é definido como 1

saída da condição da linha é


definida como verdadeira

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.

Publicação 1756-RM003F-PT-P - Maio 2002


15-8 Instruções de Conversão Matemática (DEG, RAD, TOD, FRD, TRN, TRUNC)

Exemplo: A instrução TOD converte value_1 em um valor BCD e coloca o


resultado em result_a.

Lógica Ladder

Bloco de Funções

Publicação 1756-RM003F-PT-P - Maio 2002


Instruções de Conversão Matemática (DEG, RAD, TOD, FRD, TRN, TRUNC) 15-9

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

Operando: Tipo: Formato: Descrição:


Source SINT imediato valor a ser convertido em decimal
INT tag
DINT
Um tag SINT ou INT é convertido para um valor DINT por preenchimento
com zero.
Destination SINT tag armazena o resultado
INT
DINT

Bloco de Funções

Operando: Tipo: Formato: Descrição:


tag FRD FBD_CONVERT estrutura estrutura de FRD

estrutura FBD_CONVERT

Parâmetro de Tipo de Dados: Descrição:


Entrada:
EnableIn BOOL Habilita entrada. Se desenergizada, a instrução não executa e as saídas não são atualizadas.
O padrão está energizado
Source DINT Entrada para a instrução de conversão.
Válido = qualquer inteiro
Parâmetro de Saída: Tipo de Dados: Descrição:
EnableOut BOOL A instrução produziu um resultado válido.
Dest DINT Resultado da instrução de conversão. Os flags de status aritmético são energizados para
esta saída.

Descrição: A instrução FRD converte um valor BCD (Source) em um valor


decimal e armazena o resultado em Destination.

Flags de Status Aritmético: Os flags de status aritmético são afetados.

Condições de Falha: nenhuma

Execução

Publicação 1756-RM003F-PT-P - Maio 2002


15-10 Instruções de Conversão Matemática (DEG, RAD, TOD, FRD, TRN, TRUNC)

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.

Exemplo: A instrução FRD converte value_1 em um valor decimal e coloca o


resultado em result_a.

Lógica Ladder

Bloco de Funções

Publicação 1756-RM003F-PT-P - Maio 2002


Instruções de Conversão Matemática (DEG, RAD, TOD, FRD, TRN, TRUNC) 15-11

Truncar (TRN) A instrução TRN remove (trunca) a parte fracionária de Source e


armazena o resultado em Destination.

Operandos:

Lógica Ladder

Operando: Tipo: Formato: Descrição:


Source REAL imediato valor a ser truncado
tag
Destination SINT tag tag para armazenar o resultado
INT
DINT
REAL

Texto Estruturado

dest := TRUNC(source); Use TRUNC como uma função. Esta função trunca source e armazena
o resultado em dest.

Consulte o Apêndice C para informações sobre a sintaxe de


expressões de texto estruturado.

Bloco de Funções

Operando: Tipo: Formato: Descrição:


tag TRN FBD_TRUNCATE estrutura estrutura de TRN

Estrutura FBD_TRUNCATE

Parâmetro de Tipo de Dados: Descrição:


Entrada:
EnableIn BOOL Habilita entrada. Se desenergizada, a instrução não executa e as saídas não são atualizadas.
Valor inicial está energizado
Source REAL Entrada para a instrução de conversão.
Válido = qualquer flutuante
Parâmetro de Saída: Tipo de Dados: Descrição:
EnableOut BOOL A instrução produziu um resultado válido.
Dest DINT Resultado da instrução de conversão. Os flags de status aritmético são energizados para
esta saída.

Descrição: O truncamento não arredonda valores; portanto, a parte não


fracionária permanece a mesma independente da parte fracionária.

Flags de Status Aritmético: Os flags de status aritmético são afetados.

Condições de Falha: nenhuma

Publicação 1756-RM003F-PT-P - Maio 2002


15-12 Instruções de Conversão Matemática (DEG, RAD, TOD, FRD, TRN, TRUNC)

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.

Exemplo: Remova a parte fracionária de float_value_1, mantendo a parte não


fracionária a mesma, e coloque o resultado em
float_value_1_truncated.

Lógica Ladder

Texto Estruturado

float_value_1_truncated := TRUNC(float_value_1);

Bloco de Funções

Publicação 1756-RM003F-PT-P - Maio 2002


Capítulo 16

Instruções da Porta Serial ASCII


(ABL, ACB, ACL, AHL, ARD, ARL, AWA, AWT)

Introdução Use as instruções de porta serial para ler e escrever os caracteres


ASCII.

Se você quiser: Por exemplo: Use esta Disponível nessas Consulte


instrução: linguagens: página:
determinar quando o buffer contém verificar os dados que contenham ABL lógica ladder 16-5
caracteres de terminação caracteres de terminação texto estruturado
contar os caracteres no buffer verificar o número solicitado dos ACB lógica ladder 16-8
caracteres antes de ler o buffer texto estruturado
remover o buffer • remover dados antigos do ACL lógica ladder 16-10
buffer no startup texto estruturado
remover as instruções da Porta Serial
• sincronizar o buffer com um
ASCII que estão executando
dispositivo
atualmente ou estão em uma fila.
obter o status das linhas de controle causar um modem para desligar AHL lógica ladder 16-12
da porta serial texto estruturado
ligar ou desligar o sinal DTR
ligar ou desligar o sinal RTS
ler um número fixo de caracteres ler dados a partir de um dispositivo ARD lógica ladder 16-15
que envia o mesmo número de texto estruturado
caracteres em cada transmissão
ler um número de caracteres variável, ler os dados a partir de um ARL lógica ladder 16-18
até e incluindo o primeiro conjunto de dispositivo que envia um número de texto estruturado
caracteres de terminação caracteres variável em cada
transmissão
enviar caracteres e, enviar mensagens que sempre usam AWA lógica ladder 16-22
automaticamente, acrescentar um ou o(s) mesmo(s) caracter(es) de texto estruturado
dois caracteres para marcar o fim dos terminação
dados
enviar caracteres enviar mensagens que usam vários AWT lógica ladder 16-26
caracteres de terminação texto estruturado

IMPORTANTE Para usar as instruções da porta serial ASCII, você


deve configurar a porta serial do controlador.
Consulte Logix5000 Controllers Common Procedures,
publicação 1756-PM001.

1 Publicação 1756-RM003F-PT-P - Maio 2002


16-2 Instruções da Porta Serial ASCII (ABL, ACB, ACL, AHL, ARD, ARL, AWA, AWT)

Execução da Instrução

As instruções da porta serial ASCII executam assíncronos para o scan


da lógica:

Lógica Fila ASCII Tarefa ASCII

Quando a entrada da Instrução 1 Instrução na parte superior


condição da linha passa da fila é executada.
de falsa para verdadeira
Instrução 2

Instrução 3

Instrução 4
Os dados fluem entre
A instrução entra na fila a tarefa e o buffer.
ASCII.

Os dados fluem entre o


buffer e a porta serial

Porta Serial Buffer

Cada instrução da porta serial ASCII (exceto ACL) usa uma estrutura
SERIAL_PORT_CONTROL para executar as seguintes funções:

• controlar a execução da instrução


• fornecer as informações de status sobre a instrução

Publicação 1756-RM003F-PT-P - Maio 2002


Instruções da Porta Serial ASCII (ABL, ACB, ACL, AHL, ARD, ARL, AWA, AWT) 16-3

O diagrama de temporização representa as mudanças nos bits de


status conforme uma instrução ARL testa o buffer quanto aos
caracteres de terminação
scan scan scan scan

entrada da condição falsa verdadeira falsa verdadeira falsa


da linha

.EN off on off on off

.EU off on

RN off on off on off

.DN ou .ER off on off on

.FD off on off on

.EM off on off on

entra na fila reseta os bits de status

executa quando efetuado o scan .DN


ou .ER forem energizados, o
bit .EM energiza
neste exemplo,
encontra os
caracteres de
terminação.

A fila ASCII suporta até 16 instruções. Quando a fila está cheia, uma

scan scan scan scan

entrada da condição falsa verdadeira falsa


da linha

.EN off on

.EU off on

tenta entrar na fila, mas a fila está cheia

entra na fila

instrução tenta entrar na fila em cada scan subseqüente da instrução,


conforme representado abaixo:

Publicação 1756-RM003F-PT-P - Maio 2002


16-4 Instruções da Porta Serial ASCII (ABL, ACB, ACL, AHL, ARD, ARL, AWA, AWT)

Códigos de Erro ASCII

Se uma instrução da porta serial ASCII falhar na execução, o membro


ERROR de sua estrutura SERIAL_PORT_CONTROL conterá um dos
seguintes códigos de erros decimais:

Este código Indica que:


hex:
16#2 o modem passou para o modo offline.
16#3 O sinal CTS foi perdido durante a comunicação.
16#4 A porta serial estava em modo de sistema.
16#A Antes da execução da instrução o bit .UL foi energizado. Isto evita a execução da instrução.
16#C O controlador mudou do modo Run para o modo Program. Ele pára a execução de uma instrução ASCII e elimina a fila.
16#D Na janela Properties do Controlador, guia User Protocol, o tamanho de buffer ou parâmetros de modo de eco são
mudados e aplicados. Ele pára a execução de uma instrução ASCII e elimina a fila.
16#E A instrução ACL foi executada.
16#F A configuração da porta serial passou do modo User para o modo System. Ele pára a execução de uma instrução da
porta serial ASCII e elimina a fila.
16#51 O valor LEN do tag da string é negativo ou maior que o tamanho de DATA do tag da string.
16#54 O Comprimento de Controle da Porta Serial é maior que o tamanho do buffer.
16#55 O Comprimento de Controle da Porta Serial ou é negativo ou é maior que o tamanho do Source ou Destination.

Tipos de Dados da String

Você armazena os caracteres ASCII em tags que usam um tipo de


dados da string.
• Você pode usar o tipo de dados STRING padrão. Ele armazena
até 82 caracteres.
• Você pode criar um novo tipo de dados de string que armazene
menos ou mais caracteres.

Para criar um novo tipo de dados da string, consulte Logix5000


Controllers Common Procedures, publicação 1756-PM001.

Publicação 1756-RM003F-PT-P - Maio 2002


Instruções da Porta Serial ASCII (ABL, ACB, ACL, AHL, ARD, ARL, AWA, AWT) 16-5

Cada tipo de dados de string contém os seguintes membros:

Nome Tipo de Descrição: Notas:


Dados:
LEN DINT número de caracteres A LEN atualiza a nova contagem de caracteres automaticamente sempre que você:
na string • usar a janela String Browser para inserir caracteres
• usar as instruções que leêm, convertem ou manipulam uma string

LEN mostra o comprimento da string atual. O membro DATA pode conter


caracteres adicionais, antigos, que não estão incluídos na contagem de LEN.
DATA array SINT caracteres ASCII da • Para acessar os caracteres da string, enderece o nome do tag.
string Por exemplo, para acessar os caracteres do tag da string_1, insira da
string_1.

• Cada elemento do array DATA contém um caracter.

• 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

ABL Operando: Tipo: Formato: Descrição:


ASCII Test For Buffer Line EN
Channel ? DN Channel: DINT imediato 0
SerialPort Control ? ER
Character Count ? tag
Porta Serial SERIAL_PORT_ tag tag que controla a operação
Control CONTROL
Character DINT imediato 0
Count
Durante a execução, exibe o número de
caracteres no buffer até e incluindo o
primeiro conjunto dos caracteres de
terminação.

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.

Publicação 1756-RM003F-PT-P - Maio 2002


16-6 Instruções da Porta Serial ASCII (ABL, ACB, ACL, AHL, ARD, ARL, AWA, AWT)

Estrutura SERIAL_PORT_CONTROL

Mnemônico: Tipo de Dados: Descrição:


.EN BOOL O bit habilitado indica que a instrução está habilitada.
.EU BOOL O bit da fila indica que a instrução entrou na fila ASCII.
.DN BOOL O bit executado indica quando a instrução está concluída, mas é assíncrono para o scan da lógica.
RN BOOL O bit de operação indica que a instrução está executando.
.EM BOOL O bit vazio indica que a instrução está concluída, mas é síncrono para o scan da lógica.
.ER BOOL O bit de erro indica quando a instrução falhar (erros).
.FD BOOL O bit encontrado indica que a instrução encontrou o(s) caracter(es) de terminação.
.POS DINT A posição determina o número de caracteres no buffer até e incluindo o primeiro conjunto de
caracteres de terminação. A instrução somente retorna a este número depois de encontrar o(s)
caracter(es) de terminação.
.ERROR. DINT O erro contém um valor hexadecimal que identifica a causa de um erro.

Descrição: A instrução ABL procura o buffer para o primeiro conjunto de


caracteres de terminação. Se a instrução encontra os caracteres de
terminação, ela:

• configura o bit .FD


• conta os caracteres no buffer até e, incluindo, o primeiro
conjunto de caracteres de terminação

A janela Controller Properties, guia User Protocol, define os caracteres


ASCII que a instrução considera como caracteres de terminação.

Para programar a instrução ABL, siga estas orientações:

1. Configure a porta serial do controlador para o modo do usuário


e defina os caracteres que servem como caracteres de
terminação.

2. Essa é uma instrução transicional:


• Na lógica ladder, alterne a entrada da condição de linha de
desenergizado para energizado toda vez que a instrução
deveria ser executada.
• No texto estruturado, condicione a instrução para que ela
somente execute em uma transição. Consulte o Apêndice C.

Flags de Status Aritmético: não afetados

Condições de Falha: nenhuma

Publicação 1756-RM003F-PT-P - Maio 2002


Instruções da Porta Serial ASCII (ABL, ACB, ACL, AHL, ARD, ARL, AWA, AWT) 16-7

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 de linha na
linha é verdadeira 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 conta os caracteres no buffer.
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.

Exemplo: Teste continuamente o buffer para os caracteres de terminaçã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);

Publicação 1756-RM003F-PT-P - Maio 2002


16-8 Instruções da Porta Serial ASCII (ABL, ACB, ACL, AHL, ARD, ARL, AWA, AWT)

Caracteres ASCII no Buffer A instrução ACB conta os caracteres no buffer.


(ACB)
Operandos:

Lógica Ladder

ACB Operando: Tipo: Formato: Insira:


ASCII Chars in Buffer EN
Channel ? DN Channel: DINT imediato 0
SerialPort Control ? ER
Character Count ? tag
Serial Port SERIAL_PORT_ tag tag que controla a operação
Control CONTROL
Character DINT imediato 0
Count
Durante a execução, exibe o número de
caracteres no buffer.

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

Mnemônico: Tipo de Dados: Descrição:


.EN BOOL O bit habilitado indica que a instrução está habilitada.
.EU BOOL O bit da fila indica que a instrução entrou na fila ASCII.
.DN BOOL O bit executado indica quando a instrução está concluída, mas é assíncrono para o scan da
lógica.
RN BOOL O bit de operação indica que a instrução está executando.
.EM BOOL O bit vazio indica que a instrução está concluída, mas é síncrono para o scan da lógica.
.ER BOOL O bit de erro indica quando a instrução falha (erros).
.FD BOOL O bit encontrado indica que a instrução encontrou um caractere.
.POS DINT A posição determina o número de caracteres no buffer até e, incluindo, o primeiro conjunto
de caracteres de terminação.
.ERROR. DINT O erro contém um valor hexadecimal que identifica a causa de um erro.

Descrição: A instrução ACB conta os caracteres no buffer.

Para programar a instrução ACB, siga estas orientações:

1. Configure a porta serial do controlador para modo de usuário.

2. Essa é uma instrução transicional:

Publicação 1756-RM003F-PT-P - Maio 2002


Instruções da Porta Serial ASCII (ABL, ACB, ACL, AHL, ARD, ARL, AWA, AWT) 16-9

• Na lógica ladder, alterne a entrada da condição de linha de


desenergizada para energizada a cada hora que a instrução
deve ser executada.
• No texto estruturado, condicione a instrução para que ela
somente execute em uma transição. Consulte Apêndice C.

Flags de Status Aritmético: não afetados

Condições de Falha: nenhuma

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 de linha na
linha é verdadeira 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 ACB conta os caracteres no buffer.
O bit .EN está 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.

Exemplo: Conte continuamente os caracteres no buffer

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);

Publicação 1756-RM003F-PT-P - Maio 2002


16-10 Instruções da Porta Serial ASCII (ABL, ACB, ACL, AHL, ARD, ARL, AWA, AWT)

Limpeza do Buffer ASCII A instrução ACL imediatamente limpa o buffer ASCII.


(ACL)
Operandos:

Lógica Ladder

ACL Operando: Tipo: Formato: Insira:


ASCII Clear Buffer
Channel ? Channel: DINT imediato 0
Clear Serial Port Read ?
Clear Serial Port Write ? tag
Clear Serial BOOL imediato Para esvaziar o buffer e remover as instruções ARD
Port Read tag e ARL da fila, digite Yes.
Clear Serial BOOL imediato Para remover as instruções AWA e AWT da fila,
Port Write tag digite Yes.

Texto Estruturado
ACL(Channel, Os operandos são os mesmos que aqueles para a instrução de lógica
ClearSerialPortRead,
ladder ACL.
ClearSerialPortWrite);

Descrição: A instrução ACL realiza imediatamente uma ou ambas as ações


seguintes:
• limpa o buffer de caracteres e remove a fila ASCII das instruções
de leitura
• remove a fila ASCII das instruções de escrita

Para programar a instrução ACL, siga estas orientações:

1. Configure a porta serial do controlador:

Se sua aplicação: Então:


usa as instruções ARD ou ARL Selecione modo User
não usa as instruções ARD ou ARL Selecione ou o modo System ou User

2. Para determinar se uma instrução foi removida da fila ou


abortada, examine as seguintes instruções apropriadas:
• bit .ER é energizado
• membro .ERROR.R é 16#E

Flags de Status Aritmético: não afetados

Condições de Falha: nenhuma

Publicação 1756-RM003F-PT-P - Maio 2002


Instruções da Porta Serial ASCII (ABL, ACB, ACL, AHL, ARD, ARL, AWA, AWT) 16-11

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. 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 remove as instruções específicas e o(s) buffer(s).
postscan A saída da condição da linha é definida como falsa. Nenhuma ação tomada.

Exemplo: Quando o controlador insere o modo Run, remova o buffer e a fila


ASCII.

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;

Publicação 1756-RM003F-PT-P - Maio 2002


16-12 Instruções da Porta Serial ASCII (ABL, ACB, ACL, AHL, ARD, ARL, AWA, AWT)

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) ?

Operando: Tipo: Formato: Insira:


Channel: DINT imediato 0
tag
ANDMask DINT imediato Consulte a descrição.
tag
ORMask DINT imediato
tag
Serial Port Control SERIAL_PORT_CONTROL tag tag que controla a operação
Channel Status (Decimal) DINT imediato 0

Durante a execução, exibe o status das linhas de controle.


Para o status desta linha de controle: Examine este bit:
CTS 0
RTS 1
DSR 2
DCD 3
DTR 4
Recebeu o caractere XOFF 5

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.

Publicação 1756-RM003F-PT-P - Maio 2002


Instruções da Porta Serial ASCII (ABL, ACB, ACL, AHL, ARD, ARL, AWA, AWT) 16-13

Estrutura SERIAL_PORT_CONTROL

Mnemônico: Tipo de Dados: Descrição:


.EN BOOL O bit habilitado indica que a instrução está habilitada.
.EU BOOL O bit da fila indica que a instrução entrou na fila ASCII.
.DN BOOL O bit executado indica que a instrução está concluída, mas é assíncrono para o scan da lógica.
RN BOOL O bit de operação indica que a instrução está executando.
.EM BOOL O bit vazio indica que a instrução está concluída, mas é síncrono para o scan da lógica.
.ER BOOL O bit de erro indica quando a instrução falha (erros).
.FD BOOL O bit encontrado não se aplica a esta instrução.
.POS DINT A posição armazena o status das linhas de controle.
.ERROR. DINT O erro contém um valor hexadecimal que identifica a causa de um erro.

Descrição: A instrução AHL pode:


• obter o status das linhas de controle da porta serial
• ligar ou desligar o sinal (DTR) pronto do terminal de dados
• ligar ou desligar o pedido para enviar o sinal (RTS)
Para programar a instrução AHL, siga estas orientações:
1. Configure a porta serial do controlador:

Se sua aplicação: Então:


usa as instruções ARD ou ARL Selecione modo User
não usa as instruções ARD ou ARL Selecione ou o modo System ou User

2. Use as tabelas a seguir para selecionar os valores corretos para


os operandos ANDMask e ORMask:

DTR: RTS: Digite este valor de E digite este valor de


ANDMask: ORMask:
off off 3 0
on 1 2
não mudado 1 0
on off 2 1
on 0 3
não mudado 0 1
não mudado off 2 0
on 0 2
não mudado 0 0

3. Essa é uma instrução transicional:


• Na lógica ladder, alterne a entrada da condição de linha de
desenergizada para energizada toda vez que a instrução deve
ser executada.
• No texto estruturado, condicione a instrução para que ela
somente execute em uma transição. Consulte Apêndice C.

Publicação 1756-RM003F-PT-P - Maio 2002


16-14 Instruções da Porta Serial ASCII (ABL, ACB, ACL, AHL, ARD, ARL, AWA, AWT)

Flags de Status Aritmético: não afetados

Condições de Falha:

Tipo: Código: Causa: Método de Recuperação:


4 57 A instrução AHL falhou ao ser executada porque a Ou:
porta serial não está configurada para handshake. • Alterar a Linha de Controle configurando a porta serial.
• Excluir a instrução AHL.

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 de linha na
linha é verdadeira alterna de desenergizado para energizado.
A saída da condição da linha é definida como verdadeira.
EnableIn está na EnableIn está sempre energizado
energizado A instrução executa.
execução da instrução A instrução obtém o status da linha de controle e acende ou apaga os sinais DTR e RTS.
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.

Exemplo: Quando get_control_line_status torna-se energizado, obtenha o status


das linhas de controle da porta serial e armazene o status no
operando Channel Status. Para visualizar o status de uma linha de
controle específica, monitore o tag SerialPortControl e expanda o
membro POS.

Lógica Ladder

get_control_line_status AHL
ASCII Handshake Lines EN
Channel 0
AND Mask 0 DN

OR Mask 0 ER

SerialPort Control serial_port


Channel Status(Decimal) 29

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;

Publicação 1756-RM003F-PT-P - Maio 2002


Instruções da Porta Serial ASCII (ABL, ACB, ACL, AHL, ARD, ARL, AWA, AWT) 16-15

Leitura ASCII (ARD) A instrução ARD remove os caracteres do buffer e armazena-os em


Destination.

Operandos:

Lógica Ladder

ARD
ASCII Read EN
Channel ?
Destination ? DN
??
SerialPort Control ? ER
SerialPort Control Length ?
Characters Read ?

Operando: Tipo: Formato: Insira: Notas:


Channel: DINT imediato 0
tag
Destination string tag tag no qual os caracteres são • Se você quiser comparar, converter ou
SINT movidos (leitura): manipular os caracteres, use um tipo de
INT • Para um tipo de dados da dados da string.
DINT string, insira o nome do • Tipos de dados da string são:
tag. • tipo de dados STRING padrão
• Para um array SINT, INT
• qualquer novo tipo de dados da
ou DINT, insira o primeiro
string que você criar
elemento do array.
Serial Portl SERIAL_PORT_ tag tag que controla a operação
Control CONTROL
Serial Port DINT imediato número de caracteres para • O Comprimento de Serial Port Control
Control Length mudar para o destination Length deve ser menor ou igual ao
(leitura) tamanho de Destination.
• Se você quer configurar o Serial Port
Control Length igual ao tamanho de
Destination, insira 0.
Characters Read DINT imediato 0 Durante a execução, exibe o número de
caracteres que foram lidos.

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.

Publicação 1756-RM003F-PT-P - Maio 2002


16-16 Instruções da Porta Serial ASCII (ABL, ACB, ACL, AHL, ARD, ARL, AWA, AWT)

Estrutura SERIAL_PORT_CONTROL

Mnemônico: Tipo de Dados: Descrição:


.EN BOOL O bit habilitado indica que a instrução está habilitada.
.EU BOOL O bit da fila indica que a instrução entrou na fila ASCII.
.DN BOOL O bit executado indica que a instrução está concluída, mas é assíncrono para o scan da
lógica.
RN BOOL O bit de operação indica que a instrução está executando.
.EM BOOL O bit vazio indica que a instrução está concluída, mas é síncrono para o scan da lógica.
.ER BOOL O bit de erro indica quando a instrução falha (erros).
.FD BOOL O bit encontrado não se aplica a esta instrução.
.LEN DINT O comprimento indica o número de caracteres para mudar para Destination (leitura).
.POS DINT A posição exibe o número de caracteres que foram lidos.
.ERROR. DINT O erro contém um valor hexadecimal que identifica a causa de um erro.

Descrição: A instrução ARD remove o número especificado de caracteres do


buffer e armazena-os em Destination.
• A instrução ARD continua a executar até que ela remova o
número especificado de caracteres (Serial Port Control Length).
• Enquanto a instrução ARD está sendo executada, nenhuma
instrução da porta serial ASCII é executada.

Para programar a instrução ARD, siga estas orientações:

1. Configure a porta serial do controlador para o modo User.

2. Use os resultados de uma instrução ACB para iniciar a instrução


ARD. Isto previne a instrução ARD de segurar a fila ASCII
enquanto ela espera o número de caracteres necessário.

3. Essa é uma instrução transicional:


• Na lógica ladder, alterne a entrada da condição de linha de
desenergizada para energizada toda vez que a instrução deve
ser executada.
• No texto estruturado, condicione a instrução para que ela
somente execute em uma transição. Consulte Apêndice C.

4. Para disparar a ação subseqüente quando a instrução for


concluída, examine o bit EM.

Flags de Status Aritmético: não afetados

Condições de Falha: nenhuma

Publicação 1756-RM003F-PT-P - Maio 2002


Instruções da Porta Serial ASCII (ABL, ACB, ACL, AHL, ARD, ARL, AWA, AWT) 16-17

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.

Exemplo: Um leitor de código de barras envia os códigos de barras para a porta


serial (canal 0) do controlador. Cada código de barra contém 24
caracteres. Para determinar quando o controlador recebe um código
de barra, a instrução ACB conta continuamente os caracteres no
buffer. Quando o buffer contiver pelo menos 24 caracteres, o
controlador recebeu um código de barras. A instrução ARD muda o
código de barras para o membro DATA do tag bag_bar_code que é
uma string.

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;

Publicação 1756-RM003F-PT-P - Maio 2002


16-18 Instruções da Porta Serial ASCII (ABL, ACB, ACL, AHL, ARD, ARL, AWA, AWT)

Linha de Leitura ASCII A instrução ARL remove os caracteres especificados do buffer e


armazena-os em Destination.
(ARL)
Operandos:

Lógica Ladder

ARL
ASCII Read Line EN
Channel ?
Destination ? DN
??
SerialPort Control ? ER
SerialPort Control Length ?
Characters Read ?

Operando: Tipo: Formato: Insira: Notas:


Channel: DINT imediato 0
tag
Destination string tag tag no qual os caracteres são • Se você quiser comparar, converter ou
SINT movidos (leitura): manipular os caracteres, use um tipo de
INT • Para um tipo de dados da dados da string.
DINT string, insira o nome do • Tipos de dados da string são:
tag. • tipo de dados STRING padrão
• Para um array SINT, INT • qualquer novo tipo de dados da
ou DINT, insira o primeiro
string que você criar
elemento do array.
Serial Port SERIAL_PORT_ tag tag que controla a operação
Control CONTROL
Serial Port DINT imediato número máximo de caracteres • Insira o número máximo de caracteres
Control Length para ler se nenhum caractere de que qualquer mensagem conterá (ou
terminação for encontrado seja, quando parar a leitura se nenhum
caractere de terminação é encontrado).

Por exemplo, se as faixas de mensagens


de 3 a 6 caracteres no comprimento,
insira 6.

• O Serial Port Control Length da Porta


Serial deve ser menor ou igual ao
tamanho de Destination.
• Se você quer configurar Serial Port
Control Length igual ao tamanho de
Destination, insira 0.
Characters Read DINT imediato 0 Durante a execução, exibe o número de
caracteres que foram lidos.

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.

Publicação 1756-RM003F-PT-P - Maio 2002


Instruções da Porta Serial ASCII (ABL, ACB, ACL, AHL, ARD, ARL, AWA, AWT) 16-19

Estrutura SERIAL_PORT_CONTROL

Mnemônico: Tipo de Dados: Descrição:


.EN BOOL O bit habilitado indica que a instrução está habilitada.
.EU BOOL O bit da fila indica que a instrução entrou na fila ASCII.
.DN BOOL O bit executado indica quando a instrução está concluída, mas é assíncrono para o scan da
lógica.
RN BOOL O bit de operação indica que a instrução está executando.
.EM BOOL O bit vazio indica que a instrução está concluída, mas é síncrono para o scan da lógica.
.ER BOOL O bit de erro indica quando a instrução falha (erros).
.FD BOOL O bit encontrado não se aplica a esta instrução.
.LEN DINT O comprimento indica o número máximo de caracteres que mudar para Destination (ou seja,
quando parar a leitura se nenhum caractere de terminação for encontrado).
.POS DINT A posição exibe o número de caracteres que foram lidos.
.ERROR. DINT O erro contém um valor hexadecimal que identifica a causa de um erro.

Descrição: A instrução ARL remove os caracteres do buffer e armazena-os em


Destination conforme se segue.
• A instrução ARL continua a ser executada até remover ou:
– primeiro conjunto de caracteres de terminação
– número específico de caracteres (Serial Port Control Length)
• Enquanto a instrução ARL está sendo executada, nenhuma
instrução da porta serial ASCII é executada.

Para programar a instrução ARL, siga estas orientações:

1. Configure a porta serial do controlador:

a. Selecione modo User


b. Defina os caracteres que servem como caracteres de
terminação.

2. Use os resultados de uma instrução ABL para iniciar a instrução


ARL. Isto previne a instrução ARL de segurar a fila ASCII
enquanto espera pelos caracteres de terminação.

3. Essa é uma instrução transicional:


• Na lógica ladder, alterne a entrada da condição de linha de
desenergizada para energizada toda vez que a instrução deve
ser executada.
• No texto estruturado, condicione a instrução para que ela
somente execute em uma transição. Consulte Apêndice C.

4. Para disparar a ação subseqüente quando a instrução for


concluída, examine o bit EM.

Flags de Status Aritmético: não afetados

Publicação 1756-RM003F-PT-P - Maio 2002


16-20 Instruções da Porta Serial ASCII (ABL, ACB, ACL, AHL, ARD, ARL, AWA, AWT)

Condições de Falha: nenhuma

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 de linha na
linha é verdadeira 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 especificados 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.

Exemplo: Teste continuamente o buffer para uma mensagem de um terminal


MessageView. Como cada mensagem termina com um caractere $r,
este caractere é configurado como o caractere de terminação na janela
Controller Properties, guia User Protocol. Quando a ABL encontra um
caractere $r, ela energiza o bit FD.

Quando a instrução ABL encontra um $r (MV_line.FD é energizado) o


controlador recebeu uma mensagem completa. A instrução ARL
remove os caracteres do buffer até e, incluindo, o caractere $r e
coloca-os no membro DATA do tag MV_msg que é uma string.

Publicação 1756-RM003F-PT-P - Maio 2002


Instruções da Porta Serial ASCII (ABL, ACB, ACL, AHL, ARD, ARL, AWA, AWT) 16-21

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;

Publicação 1756-RM003F-PT-P - Maio 2002


16-22 Instruções da Porta Serial ASCII (ABL, ACB, ACL, AHL, ARD, ARL, AWA, AWT)

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 ?

Operando: Tipo: Formato: Insira: Notas:


Channel: DINT imediato 0
tag
Source string tag tag que contém os caracteres • Se você quiser comparar, converter ou
SINT para enviar: manipular os caracteres, use um tipo de
INT • Para um tipo de dados da dados da string.
DINT string, insira o nome do • Tipos de dados da string são:
tag. • tipo de dados STRING padrão
• Para um array SINT, INT • qualquer novo tipo de dados da
ou DINT, insira o primeiro
string que você criar
elemento do array.
Serial Port SERIAL_PORT_ tag tag que controla a operação
Control CONTROL
Serial Port DINT imediato número de caracteres para • O Serial Port Control Length deve ser
Control Length enviar menor ou igual ao tamanho de Source.
• Se você quer configurar Serial Port
Control Length igual ao número de
caracteres no Source, insira 0.
Characters Sent DINT imediato 0 Durante a execução, exibe o número de
caracteres que foram enviados.

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.

Publicação 1756-RM003F-PT-P - Maio 2002


Instruções da Porta Serial ASCII (ABL, ACB, ACL, AHL, ARD, ARL, AWA, AWT) 16-23

Estrutura SERIAL_PORT_CONTROL

Mnemônico: Tipo de Dados: Descrição:


.EN BOOL O bit habilitado indica que a instrução está habilitada.
.EU BOOL O bit da fila indica que a instrução entrou na fila ASCII.
.DN BOOL O bit executado indica quando a instrução está concluída, mas é assíncrono para o scan da
lógica.
RN BOOL O bit de operação indica que a instrução está executando.
.EM BOOL O bit vazio indica que a instrução está concluída, mas é síncrono para o scan da lógica.
.ER BOOL O bit de erro indica quando a instrução falha (erros).
.FD BOOL O bit encontrado não se aplica a esta instrução.
.LEN DINT O comprimento indica o número de caracteres a serem enviados.
.POS DINT A posição exibe o número de caracteres que foram enviados.
.ERROR. DINT O erro contém um valor hexadecimal que identifica a causa de um erro.

Descrição: A instrução AWA:


• envia o número de caracteres especificado (Serial Port Control
Length) do tag Source para o dispositivo que está conectado à
porta serial do controlador
• adiciona (anexa) ao fim dos caracteres um ou dois caracteres
que são definidos na caixa de diálogo Controller Properties, guia
User Protocol
Para programar a instrução AWA, siga estas orientações:
1. Configure a porta serial do controlador:
a. Sua aplicação também inclui as instruções ARD ou ARL?

Se: Então:
sim Selecione modo User
não Selecione ou o modo System ou User

b. Defina os caracteres para anexar os dados.

2. Essa é uma instrução transicional:


• Na lógica ladder, alterna a entrada da condição de linha de
desenergizada para energizada toda vez que a instrução deve
ser executada.
• No texto estruturado, condicione a instrução para que ela
execute somente em uma transição. Consulte Apêndice C.

3. Cada vez que a instrução é executada, você sempre envia o


mesmo número de caracteres?

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.

Publicação 1756-RM003F-PT-P - Maio 2002


16-24 Instruções da Porta Serial ASCII (ABL, ACB, ACL, AHL, ARD, ARL, AWA, AWT)

Flags de Status Aritmético: não afetados

Condições de Falha: nenhuma

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 de linha na
linha é verdadeira 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 envia um número especificado de caracteres e anexa um ou dois caracteres pré-definidos.
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.

Exemplo 1: Quando a temperatura excede o limite elevado (temp_high é


energizado), a instrução AWA envia uma mensagem para um terminal
MessageView que está conectado à porta serial do controlador. A
mensagem contém cinco caracteres do membro DATA do tag string[1]
que é uma string. O $14 é contado como um caractere. (Ele é o
código hexadecimal para o caractere Ctrl-T.) A instrução também
envia (anexos) os caracteres definidos nas propriedades do
controlador. Neste exemplo, a instrução AWA envia um caractere $0D
que marca o fim da mensagem

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;

Publicação 1756-RM003F-PT-P - Maio 2002


Instruções da Porta Serial ASCII (ABL, ACB, ACL, AHL, ARD, ARL, AWA, AWT) 16-25

Exemplo 2: Quando alarm é energizado, a instrução AWA envia o número


especificado de caracteres em alarm_msg e anexa um caractere de
terminação. Como o número de caracteres em alarm_msg varia, a
linha move primeiro o comprimento da string (alarm_msg.LEN) para
Serial Port Control Length da instrução AWA (alarm_write.LEN). Em
alarm_msg, o $14 é contado como um caractere. Ele é o código
hexadecimal para o caractere Ctrl-T.

Lógica Ladder

alarm MOV AWA


Move ASCII Write Append EN
Source alarm_msg.LEN Channel 0
5 Source alarm_msg DN
Dest alarm_write.LEN '$1425\1'
5 SerialPort Control alarm_write ER
SerialPort Control Length 5
Characters Sent 6

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;

Publicação 1756-RM003F-PT-P - Maio 2002


16-26 Instruções da Porta Serial ASCII (ABL, ACB, ACL, AHL, ARD, ARL, AWA, AWT)

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 ?

Operando: Tipo: Formato: Insira: Notas:


Channel: DINT imediato 0
tag
Source string tag tag que contém os • Se você quiser comparar, converter ou
SINT caracteres para enviar:s manipular os caracteres, use um tipo de
INT • Para um tipo de dados da string.
DINT dados da string, • Tipos de dados da string são:
insira o nome do • tipo de dados STRING padrão
tag.
• qualquer novo tipo de dados da
• Para um array SINT,
string que você criar
INT ou DINT, insira
o primeiro elemento
do array.
Porta Serial SERIAL_PORT_ tag tag que controla a
Control CONTROL operação
Serial Port DINT imediato número de caracteres para • O Serial Port Control Length deve ser
Control Length enviar menor ou igual ao tamanho de Source.
• Se você quer configurar o Serial Port
Control Length igual ao número de
caracteres em Source, insira 0.
Characters Sent DINT imediato 0 Durante a execução, exibe o número de
caracteres que foram enviados.

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.

Publicação 1756-RM003F-PT-P - Maio 2002


Instruções da Porta Serial ASCII (ABL, ACB, ACL, AHL, ARD, ARL, AWA, AWT) 16-27

Estrutura SERIAL_PORT_CONTROL

Mnemônico: Tipo de Dados: Descrição:


.EN BOOL O bit habilitado indica que a instrução está habilitada.
.EU BOOL O bit da fila indica que a instrução entrou na fila ASCII.
.DN BOOL O bit executado indica quando a instrução está concluída, mas é assíncrono para o scan da
lógica.
RN BOOL O bit de operação indica que a instrução está executando.
.EM BOOL O bit vazio indica que a instrução está concluída, mas é síncrono para o scan da lógica.
.ER BOOL O bit de erro indica quando a instrução falha (erros).
.FD BOOL O bit encontrado não se aplica a esta instrução.
.LEN DINT O comprimento indica o número de caracteres a serem enviados.
.POS DINT A posição exibe o número de caracteres que foram enviados.
.ERROR. DINT O erro contém um valor hexadecimal que identifica a causa de um erro.

Descrição: A instrução AWT envia o número de caracteres especificado (Serial


Port Control Length) do tag Source para o dispositivo que está
conectado à porta serial do controlador

Para programar a instrução AWT, siga estas orientações:

1. Configure a porta serial do controlador:

Se sua aplicação: Então:


usa as instruções ARD or ARL Selecione modo User
não usa as instruções ARD ou ARL Selecione ou o modo System ou User

2. Essa é uma instrução transicional:


• Na lógica ladder, alterne a entrada da condição de linha de
desenergizado para energizado toda vez que a instrução deve
ser executada.
• No texto estruturado, condicione a instrução para que ela
somente execute em uma transição. Consulte Apêndice C.

3. Cada vez que a instrução é executada, você sempre envia o


mesmo número de caracteres?

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.

Flags de Status Aritmético: não afetados

Condições de Falha: nenhuma

Publicação 1756-RM003F-PT-P - Maio 2002


16-28 Instruções da Porta Serial ASCII (ABL, ACB, ACL, AHL, ARD, ARL, AWA, AWT)

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 de linha na
linha é verdadeira 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 envia um número especificado de caracteres.
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.

Exemplo 1: Quando a temperatura alcança o limite inferior (temp_low é


energizado), a instrução AWT envia uma mensagem para o terminal
MessageView que está conectado à porta serial do controlador. A
mensagem contém nove caracteres do membro DATA do tag string[2]
que é uma string. O $14 é contado como um caractere. (Ele é o
código hexadecimal para o caractere Ctrl-T.) O último caractere é um
$r, que marca o fim da mensagem.

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;

Publicação 1756-RM003F-PT-P - Maio 2002


Instruções da Porta Serial ASCII (ABL, ACB, ACL, AHL, ARD, ARL, AWA, AWT) 16-29

Exemplo 2: Quando MV_update é energizado, a instrução AWT envia os


caracteres em MV_msg. Como o número de caracteres em MV_msg
varia, a linha move primeiro o comprimento da string (MV_msg.LEN)
para Serial Port Control Length da instrução AWT (MV_write.LEN). Em
MV_msg, o $16 é contado como um caractere. Ele é o código
hexadecimal para o caractere Ctrl-V.

Lógica Ladder

MV_update MOV AWT


Move ASCII Write EN
Source MV_msg.LEN Channel 0
10 Source MV_msg DN
Dest MV_write.LEN '$161365\8\1$r'
10 SerialPort Control MV_write ER
SerialPort Control Length 10
Characters Sent 10

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;

Publicação 1756-RM003F-PT-P - Maio 2002


16-30 Instruções da Porta Serial ASCII (ABL, ACB, ACL, AHL, ARD, ARL, AWA, AWT)

Notas:

Publicação 1756-RM003F-PT-P - Maio 2002


Capítulo 17

Instruções de String ASCII


(CONCAT, DELETE, FIND, INSERT, MID)

Introdução Use as instruções de string ASCII para modificar e criar strings de


caracteres ASCII.

Se você quiser: Por exemplo: Use esta Disponível nestas Consulte


instrução: linguagens: página:
adicionar caracteres ao final de uma adicionar caracteres de terminação CONCAT lógica ladder 17-3
string ou delimitadores a uma string texto estruturado
excluir caracteres de uma string remover caracteres de cabeçalho ou DELETE lógica ladder 17-5
controle de uma string texto estruturado
determinar o caractere inicial de uma localizar um grupo de caracteres FIND lógica ladder 17-7
sub-string dentro de uma string texto estruturado
inserir caracteres em uma string criar uma string que usa variáveis INSERT lógica ladder 17-9
texto estruturado
extrair caracteres de uma string extrair informações de um código de MID lógica ladder 17-11
barras texto estruturado

Você também pode usar as seguintes instruções para comparar ou


converter caracteres ASCII:

Se você quiser: Use esta instrução: Consulte página:


comparar uma string com uma outra string CMP 4-2
verificar se os caracteres são iguais a caracteres específicos EQU 4-7
verificar se os caracteres não são iguais a caracteres específicos NEQ 4-37
verificar se os caracteres são iguais ou maiores que caracteres específicos GEQ 4-10
verificar se os caracteres são maiores que caracteres específicos GRT 4-14
verificar se os caracteres são iguais ou menores que caracteres específicos LEQ 4-18
verificar se os caracteres são menores que caracteres específicos LES 4-22
reorganizar os bytes de um tag INT, DINT ou REAL SWPB 6-18
encontrar uma string em um array de strings FSC 7-17
converter caracteres para um valor SINT, INT, DINT ou REAL STOD 18-3
converter caracteres para um valor REAL STOR 18-5
converter um valor SINT, INT, DINT ou REAL para uma string de caracteres ASCII DTOS 18-7
converter um valor REAL para uma string de caracteres ASCII RTOS 18-9

1 Publicação 1756-RM003F-PT-P - Maio 2002


17-2 Instruções de String ASCII (CONCAT, DELETE, FIND, INSERT, MID)

Tipos de Dados da String

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.

To create a new string data type, see Logix5000 Controllers Common


Procedures, publicação 1756-PM001.

Each string data type contains the following members:

Name: Data Type: Description: Notes:


LEN DINT number of characters The LEN automatically updates to the new count of characters whenever you:
in the string • use the String Browser dialog box to enter characters
• use instructions that read, convert, or manipulate a string

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.

• Each element of the DATA array contains one character.

• You can create new string data types that store less or more characters.

Publicação 1756-RM003F-PT-P - Maio 2002


Instruções de String ASCII (CONCAT, DELETE, FIND, INSERT, MID) 17-3

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 ?
??

Operando: Tipo: Formato: Insira: Notas:


Source A string tag tag que contém os caracteres Tipos de dados da string são:
iniciais • tipo de dados STRING padrão
• qualquer novo tipo de dados da string
Source B string tag tag que contém os caracteres finais
que você criar
Destination string tag tag para armazenar o resultado

Texto Estruturado
CONCAT(SourceA,SourceB, Os operandos são os mesmos que os da instrução CONCAT da lógica
Dest);
ladder.

Descrição: A instrução CONCAT combina os caracteres em Source A com os


caracteres em Source B e coloca o resultado em Destination.
• Os caracteres de Source A são os primeiros, seguidos dos
caracteres de Source B.
• A menos que Source A e Destination sejam o mesmo tag, Source
A permanece inalterado.

Flags de Status Aritmético: não afetados

Condições de Falha:

Tipo: Código: Causa: Método de Recuperação:


4 51 O valor LEN do tag da string é maior que 1. Verifique se nenhuma instrução está escrevendo para o membro
o tamanho de DATA do tag da string. LEN do tag da string.
2. No valor de LEN, insira o número de caracteres que a string contém.

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.

Publicação 1756-RM003F-PT-P - Maio 2002


17-4 Instruções de String ASCII (CONCAT, DELETE, FIND, INSERT, MID)

Condição: Ação da Lógica Ladder: Ação de Texto Estruturado:


EnableIn está energizado na EnableIn está sempre energizado
A instrução executa.
execução da instrução A instrução concatena as strings.
postscan A saída da condição da linha é definida como falsa. Nenhuma ação tomada.

Exemplo: Para disparar uma mensagem em um terminal MessageView, o


controlador deve enviar uma string ASCII que contenha um número
de mensagem e um número de nó. String_1 contém o número da
mensagem. Quando add_node está energizado, a instrução CONCAT
adiciona os caracteres em node_num_ascii (número do nó) ao final
dos caracteres em string_1 e armazena o resultado em msg.

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;

Publicação 1756-RM003F-PT-P - Maio 2002


Instruções de String ASCII (CONCAT, DELETE, FIND, INSERT, MID) 17-5

Exclusão de String A instrução DELETE remove os caracteres ASCII de uma string.


(DELETE)
Operandos:

Lógica Ladder
DELETE
String Delete
Source ?
??
Qty ?
??
Start ?
??
Dest ?
??

Operando: Tipo: Formato: Insira: Notas:


Source string tag o tag que contém a string Tipos de dados da string são:
da qual você quer excluir • tipo de dados STRING padrão
caracteres • qualquer novo tipo de dados da string que você criar
Quantity SINT imediato número de caracteres a Start mais Quantity deve ser menor ou igual ao tamanho de
INT tag serem excluídos DATA de Source.
DINT
Start SINT imediato posição do primeiro Insira um número entre 1 e o tamanho de DATA de Source.
INT tag caractere a ser excluído
DINT
Destination string tag tag para armazenar o
resultado

Texto Estruturado
DELETE(Source,Qty,Start, Os operandos são os mesmos que os da instrução DELETE da lógica
Dest);
ladder.

Descrição: A instrução DELETE exclui (remove) um grupo de caracteres de


Source e coloca os caracteres restantes em Destination.
• A posição de Start e Quantity definem os caracteres a serem
removidos.
• A menos que Source e Destination sejam o mesmo tag, Source
permanece inalterado.

Flags de Status Aritmético: não afetados

Condições de Falha:

Tipo: Código: Causa: Método de Recuperação:


4 51 O valor LEN do tag da string é maior 1. Verifique se nenhuma instrução está escrevendo para o membro
que o tamanho de DATA do tag da LEN do tag da string.
string. 2. No valor de LEN, insira o número de caracteres que a string contém.
4 56 O valor de Start ou de Quantity é 1. Verifique se o valor de Start está entre 1 e o tamanho de DATA de
inválido. Source.
2. Verifique se o valor de Start mais o valor de Quantity é menor ou
igual ao tamanho de DATA de Source.

Publicação 1756-RM003F-PT-P - Maio 2002


17-6 Instruções de String ASCII (CONCAT, DELETE, FIND, INSERT, MID)

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 está definida como verdadeira.
EnableIn está energizado na EnableIn está sempre energizado
A instrução executa.
execução da instrução A instrução exclui os caracteres especificados.
postscan A saída da condição da linha é definida como falsa. Nenhuma ação tomada.

Exemplo: As informações ASCII de um terminal contêm um caractere de


cabeçalho. Depois que o controlador lê os dados (term_read.EM está
energizado) a instrução DELETE remove o caractere do cabeçalho.

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;

Publicação 1756-RM003F-PT-P - Maio 2002


Instruções de String ASCII (CONCAT, DELETE, FIND, INSERT, MID) 17-7

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 ?
??

Operando: Tipo: Formato: Insira: Notas:


Source string tag string a ser procurado Tipos de dados da string são:
• tipo de dados STRING padrão
Search string tag string a ser encontrada
• qualquer novo tipo de dados da string
que você criar
Start SINT imediato posição em Source para Insira um número entre 1 e o tamanho de DATA
INT tag iniciar a busca de Source.
DINT
Result: SINT tag tag que armazena a
INT posição inicial da string a
DINT ser encontrada

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.

Descrição: A instrução FIND procura a string Source para a string Search. Se a


instrução encontrar a string Search, Result mostra a posição inicial da
string Search dentro da string Source.

Flags de Status Aritmético: não afetados

Condições de Falha:

Tipo: Código: Causa: Método de Recuperação:


4 51 O valor LEN do tag da string é maior 1. Verifique se nenhuma instrução está escrevendo para o membro
que o tamanho de DATA do tag da LEN do tag da string.
string. 2. No valor de LEN, insira o número de caracteres que a string contém.
4 56 O valor de Start é inválido. Verifique se o valor de Start está entre 1 e o tamanho de DATA de Source.

Publicação 1756-RM003F-PT-P - Maio 2002


17-8 Instruções de String ASCII (CONCAT, DELETE, FIND, INSERT, MID)

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 está sempre energizado
A instrução executa.
execução da instrução A instrução procura por caracteres específicos.
postscan A saída da condição da linha é definida como falsa. Nenhuma ação tomada.

Exemplo: A mensagem de um terminal MessageView contém várias


informações. O caractere de barra [ \ ] separa cada parte das
informações. Para localizar uma informação, a instrução FIND procura
pelo caractere de barra (\) e grava sua posição em find_pos.

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;

Publicação 1756-RM003F-PT-P - Maio 2002


Instruções de String ASCII (CONCAT, DELETE, FIND, INSERT, MID) 17-9

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 ?
??

Operando: Tipo: Formato: Insira: Notas:


Source A string tag string para a qual adicionar os Tipos de dados da string são:
caracteres • tipo de dados STRING padrão
• qualquer novo tipo de dados da string
Source B string tag string contendo os caracteres a que você criar
serem adicionados
Start SINT imediato posição em Source A na qual Insira um número entre 1 e o tamanho de DATA
INT tag adicionar os caracteres de Source.
DINT
Result: string tag string para armazenar o resultado

Texto Estruturado
INSERT(SourceA,SourceB, Os operandos são os mesmos que os da instrução INSERT da lógica
Start,Dest);
ladder.

Descrição: A instrução INSERT adiciona os caracteres em Source B a uma posição


determinada dentro de Source A e coloca o resultado em Destination:
• O Start define onde adicionar Source B em Source A.
• A menos que SourceA e Destination sejam o mesmo tag, Source
A permanece inalterado.

Flags de Status Aritmético: não afetados

Condições de Falha:

Tipo: Código: Causa: Método de Recuperação:


4 51 O valor LEN do tag da string é maior 1. Verifique se nenhuma instrução está escrevendo para o membro
que o tamanho de DATA do tag da LEN do tag da string.
string. 2. No valor de LEN, insira o número de caracteres que a string contém.
4 56 O valor de Start é inválido. Verifique se o valor de Start está entre 1 e o tamanho de DATA de Source.

Publicação 1756-RM003F-PT-P - Maio 2002


17-10 Instruções de String ASCII (CONCAT, DELETE, FIND, INSERT, MID)

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 está sempre energizado
A instrução executa.
execução da instrução A instrução insere os caracteres especificados.
postscan A saída da condição da linha é definida como falsa. Nenhuma ação tomada.

Exemplo: Quando temp_high está energizado, a instrução INSERT adiciona os


caracteres em string_2 à posição 2 em string_1 e coloca o resultado
em string_3:

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;

Publicação 1756-RM003F-PT-P - Maio 2002


Instruções de String ASCII (CONCAT, DELETE, FIND, INSERT, MID) 17-11

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 ?
??

Operando: Tipo: Formato: Insira: Notas:


Source string tag string da qual os caracteres Tipos de dados da string são:
são copiados • tipo de dados STRING padrão
• qualquer novo tipo de dados da string
que você criar
Quantity SINT imediato número de caracteres a Start mais Quantity deve ser menor ou igual ao
INT tag serem copiados tamanho de DATA de Source.
DINT
Start SINT imediato posição do primeiro Insira um número entre 1 e o tamanho de DATA
INT tag caractere a ser copiado de Source.
DINT
Destination string tag string para a qual os
caracteres são copiados

Texto Estruturado
MID(Source,Qty,Start, Os operandos são os mesmos que os da instrução MID da lógica
Dest);
ladder.

Descrição: A instrução MID copia um grupo de caracteres de Source e coloca o


resultado em Destination.
• A posição de Start e Quantity definem os caracteres a serem
copiados.
• A menos que Source e Destination sejam o mesmo tag, Source
permanece inalterado.

Flags de Status Aritmético: não afetados

Condições de Falha:

Tipo: Código: Causa: Método de Recuperação:


4 51 O valor LEN do tag da string é maior 1. Verifique se nenhuma instrução está escrevendo para o membro
que o tamanho de DATA do tag da LEN do tag da string.
string. 2. No valor de LEN, insira o número de caracteres que a string contém.
4 56 O valor de Start ou Quantity é 1. Verifique se o valor de Start está entre 1 e o tamanho de DATA de
inválido. Source.
2. Verifique se o valor de Start mais o valor de Quantity é menor ou
igual ao tamanho de DATA de Source.

Publicação 1756-RM003F-PT-P - Maio 2002


17-12 Instruções de String ASCII (CONCAT, DELETE, FIND, INSERT, MID)

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 está sempre energizado
A instrução executa.
execução da instrução A instrução copia os caracteres especificados de uma string e armazena em outra.
postscan A saída da condição da linha é definida como falsa. Nenhuma ação tomada.

Exemplo: Em uma esteira de manipulação de bagagens de um aeroporto, cada


mala possui um código de barras. Os caracteres de 9 a 17 do código
de barras são o número do vôo e o aeroporto destino da mala. Após a
leitura do código de barras (bag_read.EM está energizado), a
instrução MID copia o número do vôo e o aeroporto destino para a
string bag_flt_and_dest.

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;

Publicação 1756-RM003F-PT-P - Maio 2002


Capítulo 18

Instruções de Conversão ASCII


(STOD, STOR, DTOS, RTOS, UPPER, LOWER)

Introdução Use as instruções de conversão ASCII para alterar o formato dos


dados.

Se você quiser: Por exemplo: Use esta Disponível nestas Consulte


instrução: linguagens: página:
converter a representação ASCII de converter um valor de uma balança ou outro STOD lógica ladder 18-3
um valor inteiro para um valor SINT, dispositivo ASCII para um inteiro, de forma texto estruturado
INT, DINT ou REAL você o use em sua lógica
converter a representação do ASCII converter um valor de uma balança ou outro STOR lógica ladder 18-5
de um valor de ponto flutuante para dispositivo ASCII para um valor REAL, de texto estruturado
um valor REAL forma que você possa usá-lo em sua lógica
converter um valor SINT, INT, DINT ou converter uma variável para uma string DTOS lógica ladder 18-7
REAL para uma string de caracteres ASCII, de forma que você possa enviá-la texto estruturado
ASCII para um terminal MessageView
converter um valor REAL para uma converter uma variável para uma string RTOS lógica ladder 18-9
string de caracteres ASCII ASCII, de forma que você possa enviá-la texto estruturado
para um terminal MessageView
converter as letras em uma string de converter uma entrada feita por um UPPER lógica ladder 18-11
caracteres ASCII para letras operador para letras maiúsculas, você pode texto estruturado
maiúsculas procurar por ela em um array
converter as letras em uma string de converter uma entrada feita por um LOWER lógica ladder 18-13
caracteres ASCII para letras operador para letras minúsculas, de forma texto estruturado
minúsculas que você possa procurar por ela em um
array

1 Publicação 1756-RM003F-PT-P - Maio 2002


18-2 Instruções de Conversão ASCII (STOD, STOR, DTOS, RTOS, UPPER, LOWER)

Você também pode usar as seguintes instruções para comparar ou


manipular caracteres ASCII:

Se você quiser: Use esta instrução: Consulte página:


adicionar caracteres ao final de uma string CONCAT 17-3
remover caracteres de uma string DELETE 17-5
determinar o caractere inicial de uma sub-string FIND 17-7
inserir caracteres em uma string INSERT 17-9
extrair caracteres de uma string MID 17-11
reorganizar os bytes de um tag INT, DINT ou REAL SWPB 6-18
comparar uma string com uma outra string CMP 4-2
verificar se os caracteres são iguais a caracteres específicos EQU 4-7
verificar se os caracteres não são iguais a caracteres específicos NEQ 4-37
verificar se os caracteres são iguais ou maiores que caracteres específicos GEQ 4-10
verificar se os caracteres são maiores que caracteres específicos GRT 4-14
verificar se os caracteres são iguais ou menores que caracteres específicos LEQ 4-18
verificar se os caracteres são menores que caracteres específicos LES 4-22
localizar uma string em um array de strings FSC 7-17

Tipos de Dados da String

Você armazena caracteres ASCII em tags que usam um tipo de dados


da string.
• Você pode usar o tipo de dados STRING padrão. É possível
armazenar até 82 caracteres.
• Você pode criar um novo tipo de dados de string que armazene
mais ou menos caracteres.

Para criar um novo tipo de dados da string, consulte Logix5000


Controllers Common Procedures, publicação 1756-PM001.

Cada tipo de dados da string contém os seguintes membros:

Nome: Tipo de Descrição: Observações:


Dados:
LEN DINT número de caracteres A LEN atualiza a nova contagem de caracteres automaticamente sempre que você:
na string • utiliza a caixa de diálogo String Browser para inserir caracteres
• usa instruções que leêm, convertem ou manipulam uma string

LEN mostra o comprimento da string atual. O membro DATA pode conter


caracteres adicionais e velhos que não estão inclusos na contagem de LEN.
DATA array SINT caracteres ASCII da • Para acessar os caracteres da string, enderesse o nome do tag.
string Por exemplo, para acessar caracteres do tag string_1, insira string_1.
• Cada elemento do array DATA contém um caracter.
• Você pode criar novos tipos de dados de string que armazenem mais ou
menos caracteres.

Publicação 1756-RM003F-PT-P - Maio 2002


Instruções de Conversão ASCII (STOD, STOR, DTOS, RTOS, UPPER, LOWER) 18-3

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 ?
??

Operando: Tipo: Formato: Insira: Notas:


Source string tag tag que contém o valor em Tipos de dados da string são:
ASCII • tipo de dados STRING padrão
• qualquer novo tipo de dados da string
que você criar
Destination SINT tag tag para armazenar o valor Se o valor de Source for um número de ponto
INT inteiro flutuante, a instrução converte apenas a parte
DINT não fracionária do número (independente do
REAL tipo de dados de destino).

STOD(Source,Dest);
Texto Estruturado

Os operandos são os mesmos que os da instrução STOD da lógica


ladder.

Descrição: O STOD converte Source em um inteiro e coloca o resultado em


Destination.
• A instrução converte números positivos e negativos.
• Se a string Source contiver caracteres não numéricos, a instrução
STOD converte o primeiro conjunto de números contínuos:
– A instrução salta os caracteres de controle iniciais ou não
numéricos (exceto sinal de menos em frente a um número).
– Se a string contiver múltiplos grupos de números que estão
separados por delimitadores (ex.: / ), a instrução converte
somente o primeiro grupo de números.

Flags de Status Aritmético: Os flags de status aritmético são afetados.

Condições de Falha:

Tipo: Código: Causa: Método de Recuperação:


4 51 O valor LEN do tag da string é maior que o tamanho de 1. Verifique se nenhuma instrução está escrevendo
DATA do tag da string. para o membro LEN do tag da string.
2. No valor de LEN, insira o número de caracteres
que a string contém.
4 53 O número de saída está além dos limites do tipo de Ou:
dados de destino. • Reduza o tamanho do valor ASCII.
• Use um tipo de dados maior para Destination.

Publicação 1756-RM003F-PT-P - Maio 2002


18-4 Instruções de Conversão ASCII (STOD, STOR, DTOS, RTOS, UPPER, LOWER)

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 está definida como verdadeira.
EnableIn está energizado na EnableIn está sempre energizado
A instrução executa.
execução da instrução S:C está energizado.
Destination é removido.
A instrução converte Source.
Se o resultado for zero, S:Z está energizado
postscan A saída da condição da linha é definida como falsa. Nenhuma ação tomada.

Exemplo: Quando MV_read.EM está energizado, a instrução STOD converte o


primeiro conjunto de caracteres em MV_msg para um valor inteiro. A
instrução salta o caractere de controle inicial ($06) e pára no
delimitador ( \ ).

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;

Publicação 1756-RM003F-PT-P - Maio 2002


Instruções de Conversão ASCII (STOD, STOR, DTOS, RTOS, UPPER, LOWER) 18-5

String Para REAL (STOR) A instrução STOR converte a representação ASCII de um valor de
ponto flutuante para um valor REAL.

Operandos:

Operandos de Lógica Ladder


STOR
String to Real
Source ?
??
Dest ?
??

Operando: Tipo: Formato: Insira: Notas:


Source string tag tag que contém o valor em ASCII Tipos de dados da string são:
• tipo de dados STRING padrão
• qualquer novo tipo de dados da string que você criar
Destination REAL tag tag para armazenar o valor REAL

STOR(Source,Dest);
Texto Estruturado

Os operandos são os mesmos que os da instrução STOR da lógica


ladder.

Descrição: A STOR converte Source em um valor REAL e coloca o resultado em


Destination.
• A instrução converte números positivos e negativos.
• Se a string Source contiver caracteres não numéricos, a STOR
converte o primeiro conjunto de caracteres contíguos, inclusive
o ponto decimal [ . ]:
– A instrução salta os caracteres de controle iniciais ou não
numéricos (exceto sinal de menos em frente a um número).
– Se a string contiver múltiplos grupos de números que estão
separados por delimitadores (ex.: / ), a instrução converte
somente o primeiro grupo de números.

Flags de Status Aritmético: Os flags de status aritmético são afetados.

Condições de Falha:

Tipo: Código: Causa: Método de Recuperação:


4 51 O valor LEN do tag da string é maior que o tamanho de 1. Verifique se nenhuma instrução está escrevendo
DATA do tag da string. para o membro LEN do tag da string.
2. No valor de LEN, insira o número de caracteres
que a string contém.
4 53 O número de saída está além dos limites do tipo de Ou:
dados de destino. • Reduza o tamanho do valor ASCII.
• Use um tipo de dados maior para Destination.

Publicação 1756-RM003F-PT-P - Maio 2002


18-6 Instruções de Conversão ASCII (STOD, STOR, DTOS, RTOS, UPPER, LOWER)

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 este energizado na EnableIn está sempre energizado
A instrução executa.
execução da instrução S:C está energizado.
Destination é removido.
A instrução converte Source.
Se o resultado for zero, S:Z está energizado
postscan A saída da condição da linha é definida como falsa. Nenhuma ação tomada.

Exemplo: Após ler o peso de uma balança (weight_read.EM está energizado), a


instrução STOR converte os caracteres numéricos em weight_ascii em
uma valor REAL.

Você pode observar uma pequena diferença entre as partes


fracionárias de Source e Destination.

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;

Publicação 1756-RM003F-PT-P - Maio 2002


Instruções de Conversão ASCII (STOD, STOR, DTOS, RTOS, UPPER, LOWER) 18-7

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 ?
??

Operando: Tipo: Formato: Insira: Notas:


Source SINT tag tag que contém o valor Se Source for REAL, a instrução converte-o para
INT um valor DINT. Consulte REAL para um inteiro
DINT na página A-5.
REAL
Destination string tag tag para armazenar o valor Tipos de dados da string são:
ASCII • tipo de dados STRING padrão
• qualquer novo tipo de dados da string
que você criar

DTOS(Source,Dest);
Texto Estruturado

Os operandos são os mesmos que os da instrução DTOS da lógica


ladder.

Descrição: A DTOS converte Source em uma string de caracteres ASCII e coloca


o resultado em Destination.

Flags de Status Aritmético: não afetados

Condições de Falha:

Tipo: Código: Causa: Método de Recuperação:


4 51 O valor LEN do tag da string é maior que o tamanho de 1. Verifique se nenhuma instrução está escrevendo
DATA do tag da string. para o membro LEN do tag da string.
2. No valor de LEN, insira o número de caracteres
que a string contém.
4 52 A string de saída é maior que o destino. Crie um novo tipo de dados da string que seja grande o
suficiente para a string de saída. Use o novo tipo de
dados de string para o Destination.

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.

Publicação 1756-RM003F-PT-P - Maio 2002


18-8 Instruções de Conversão ASCII (STOD, STOR, DTOS, RTOS, UPPER, LOWER)

Condição: Ação da Lógica Ladder: Ação de Texto Estruturado:


EnableIn está energizado na EnableIn está sempre energizado
A instrução executa.
execução da instrução A instrução converte Source.
postscan A saída da condição da linha é definida como falsa. Nenhuma ação tomada.

Exemplo: Quando temp_high está energizado, a instrução DTOS converte o


valor em msg_num em uma string de caracteres ASCII e coloca o
resultado em msg_num_ascii. As linhas subseqüentes inserem ou
concatenam msg_num_ascii com outras strings para produzir uma
mensagem completa para um terminal de display.

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;

Publicação 1756-RM003F-PT-P - Maio 2002


Instruções de Conversão ASCII (STOD, STOR, DTOS, RTOS, UPPER, LOWER) 18-9

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 ?
??

Operando: Tipo: Formato: Insira: Notas:


Source REAL tag tag que contém o valor
REAL
Destination string tag tag para armazenar o valor Tipos de dados da string são:
ASCII • tipo de dados STRING padrão
• qualquer novo tipo de dados da string que você criar

RTOS(Source,Dest);
Texto Estruturado

Os operandos são os mesmos que os da instrução RTOS da lógica


ladder.

Descrição: A RTOS converte Source em uma string de caracteres ASCII e coloca o


resultado em Destination.

Flags de Status Aritmético: não afetados

Condições de Falha:

Tipo: Código: Causa: Método de Recuperação:


4 51 O valor LEN do tag da string é maior que o tamanho de 1. Verifique se nenhuma instrução está escrevendo
DATA do tag da string. para o membro LEN do tag da string.
2. No valor de LEN, insira o número de caracteres
que a string contém.
4 52 A string de saída é maior que Destination. Crie um novo tipo de dados da string que seja grande o
suficiente para a string de saída. Use o novo tipo de
dados de string para o destino.

Publicação 1756-RM003F-PT-P - Maio 2002


18-10 Instruções de Conversão ASCII (STOD, STOR, DTOS, RTOS, UPPER, LOWER)

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 está sempre energizado
A instrução executa.
execução da instrução A instrução converte Source.
postscan A saída da condição da linha é definida como falsa. Nenhuma ação tomada.

Exemplo: Quando send_data está energizado, a instrução RTOS converte o


valor em data_1 em uma string de caracteres ASCII e coloca o
resultado em data_1_ascii. As linhas subseqüentes inserem ou
concatenam data_1_ascii com outras strings para produzir uma
mensagem completa para um terminal de display.

Você pode observar uma pequena diferença entre as partes


fracionárias de Source e Destination.

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;

Publicação 1756-RM003F-PT-P - Maio 2002


Instruções de Conversão ASCII (STOD, STOR, DTOS, RTOS, UPPER, LOWER) 18-11

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

Operando: Tipo: Formato: Descrição:


Source string tag o tag que contém os caracteres que você quer
converter em letras maiúsculas
Destination string tag tag para armazenar os caracteres em letra
maiúsculas

UPPER(Source,Dest);
Texto Estruturado

Os operandos são os mesmos que os da instrução UPPER da lógica


ladder.

Descrição: A instrução UPPER converte em maiúsculas todas as letras em Source


e coloca o resultado em Destination.
• Os caracteres ASCII são sensíveis ao contexto. O "A" maiúsculo
($41) não é igual ao "a" minúsculo ($61).
• Se os operadores inserirem diretamente os caracteres ASCII,
converta todos os caracteres em letras maiúsculas ou minúsculas
antes de compará-los.

Qualquer caractere na string Source que não for letra permanece


inalterado.

Flags de Status Aritmético: não afetados

Condições de Falha: nenhuma

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 está sempre energizado
A instrução executa.
execução da instrução A instrução converte Source em letra maiúscula.
postscan A saída da condição da linha é definida como falsa. Nenhuma ação tomada.

Publicação 1756-RM003F-PT-P - Maio 2002


18-12 Instruções de Conversão ASCII (STOD, STOR, DTOS, RTOS, UPPER, LOWER)

Exemplo: Para encontrar informações sobre um item específico, um operador


insere o código de catálogo do item em um terminal ASCII. Depois
que o controlador lê a entrada de um terminal (terminal_read.EM está
energizado), a instrução UPPER converte os caracteres em
catalog_number em todos os caracteres maiúsculos e armazena o
resultado em <F>>catalog_number_upper_case<<F> Uma linha
subseqüente busca um array para caracteres que correspondam com
aqueles em catalog_number_upper_case.

Lógica Ladder

Texto Estruturado

IF terminal_read.EM THEN
UPPER(catalog_number,catalog_number_upper_case);
terminal_read.EM := 0;
END_IF;

Publicação 1756-RM003F-PT-P - Maio 2002


Instruções de Conversão ASCII (STOD, STOR, DTOS, RTOS, UPPER, LOWER) 18-13

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

Operando: Tipo: Formato: Descrição:


Source string tag o tag que contém os caracteres que você
quer converter em letras minúsculas
Destination string tag tag para armazenar os caracteres em letra
minúsculas

LOWER(Source,Dest);
Texto Estruturado

Os operandos são os mesmos que os da instrução LOWER da lógica


ladder.

Descrição: A instrução LOWER converte em minúsculas todas as letras em Source


e coloca o resultado em Destination.
• Os caracteres ASCII são sensíveis ao contexto. O "A" maiúsculo
($41) não é igual ao "a" minúsculo ($61).
• Se os operadores inserirem diretamente os caracteres ASCII,
converta todos os caracteres em letras maiúsculas ou minúsculas
antes de compará-los.

Qualquer caractere na string Source que não for letra permanece


inalterado.

Flags de Status Aritmético: não afetados

Condições de Falha: nenhuma

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 for falsa
entrada da condição da A instrução executa. na
linha for verdadeira A saída da condição da linha está definida como verdadeira.
EnableIn está energizado na EnableIn está sempre energizado
A instrução executa.
Execução da Instrução A instrução converte Source em letra minúscula.
postscan A saída da condição da linha é definida como falsa. Nenhuma ação tomada.

Publicação 1756-RM003F-PT-P - Maio 2002


18-14 Instruções de Conversão ASCII (STOD, STOR, DTOS, RTOS, UPPER, LOWER)

Exemplo: Para encontrar informações sobre um item específico, um operador


insere o código de catálogo do item em terminal ASCII. Depois que o
controlador lê a entrada de um terminal (terminal_read.EM está
energizado), a instrução LOWER converte os caracteres em
item_number em todos os caracteres minúsculos e armazena o
resultado em item_number_lower_case . Uma linha subseqüente
busca um array para caracteres que combinem com aqueles em
item_number_lower_case.

Lógica Ladder

Texto Estruturado

IF terminal_read.EM THEN
LOWER(item_number,item_number_lower_case);
terminal_read.EM := 0;
END_IF;

Publicação 1756-RM003F-PT-P - Maio 2002


Apêndice A

Atributos Comuns

Introdução Este apêndice descreve os atributos que são comuns para as


instruções do Logix.

Para informações sobre: Consulte a página:


Valores Imediatos A-1
Conversões de Dados A-1

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).

EXEMPLO Preenchimento com zero de valores imediatos

Caso insira: O controlador armazena:


-1 16#ffff ffff (-1)
16#ffff (-1) 16#0000 ffff (65535)
8#1234 (668) 16#0000 029c (668)
2#1010 (10) 16#0000 000a (10)

Conversões de Dados As conversões de dados ocorrem ao combinar os tipos de dados em


sua programação

Quando programar em: As conversões podem ocorrer quando:


lógica ladder combinar os tipos de dados para os parâmetros em uma
instrução
bloco de funções ligar dois parâmetros que possuem tipos de dados
diferentes

1 Publicação 1756-RM003D-PT-P - Maio 2002


2 Atributos Comuns

As instruções executam de forma mais rápida e requerem menos


memória se todos os operandos da instrução usarem:

• o mesmo tipo de dados

• um tipo de dados otimizados:

– Na coluna “Operands” de cada instrução nesse manual, um


tipo de dados em negrito indica um tipo de dados
otimizados.
– Os tipos de dados DINT e REAL são tipicamente os tipos de
dados otimizados.
– A principal instrução do bloco de funções somente suporta
um tipo de dados (o tipo de dados otimizados) para seus
operandos.

Se você combinar os tipos de dados e usar os tags que não são do


tipo de dados otimizados, o controlador converte os dados de acordo
com essas regras

• Todos os operandos são um valor REAL?

Se: Então os operandos de entrada (ex., source, tag em uma expressão,


limit) convertem-se em:
sim REALs
não DINTs

• Após a execução da instrução, o resultado (um valor DINT ou


REAL) converte-se no tipo de dados Destination, se necessário.

Não é possível especificar um tag BOOL em uma instrução que opere


em um inteiro ou em tipos de dados REAL.

Como a conversão de dados leva um tempo adicional e memória, é


possível aumentar a eficiência de seus programas ao:

• usar o mesmo tipo de dados por toda a instrução


• minimizar o uso dos tipos de dados SINT ou INT

Em outras palavras, use todos os tags DINT ou todos os tags REAL,


junto com os valores imediatos, em suas instruções.

As colunas a seguir explicam como os dados são convertidos ao usar


os tags SINT ou INT ou ao combinar os tipos de dados.

Publicação 1756-RM003D-PT-P - Maio 2002


Atributos Comuns 3

SINT ou INT para DINT

Para aquelas instruções que convertem os valores SINT ou INT em


valores DINT, as colunas “Operands” nesse manual identificam o
método de conversão.

Este método de conversão: Converte os dados ao colocar:


extensão do sinal o valor do bit esquerdo principal (o sinal do valor) em
cada posição de bit à esquerda dos bits existentes até
haver 32 bits.
preenchimento com zero o zero à esquerda dos bits existentes até haver 32 bits

O exemplo a seguir mostra os resultados da conversão de um valor


usando a extensão do sinal e o preenchimento com zero.

Este valor 2#1111_1111_1111_1111 (-1)


Converte-se para este 2#1111_1111_1111_1111_1111_1111_1111_1111 (-1)
valor pela extensão do
sinal
Converte-se para este 2#0000_0000_0000_0000_1111_1111_1111_1111 (65535)
valor pelo preenchimento
com zero

Como os valores imediatos são sempre preenchidos com zero, a


conversão de um valor SINT ou INT pode produzir resultados
inesperados. No exemplo seguinte, a comparação é falsa porque
Source A, um INT, converte-se pela extensão do sinal; enquanto
Source B, um valor imediato, é preenchido com zero.
der Logic Listing - Total number of rungs: 3

EQU
Equal
Source A remote_rack_1:I.Data[0]
2#1111_1111_1111_1111
Source B 2#1111_1111_1111_1111
42093

Caso utilize um tag SINT ou INT e um valor imediato em uma


instrução que converta os dados pela extensão do sinal, utilize um
desses métodos para manusear os valores imediatos:

• Especificar qualquer valor imediato na base decimal

• Caso esteja inserindo o valor em outra base diferente da


decimal, especifique todos os 32 bits do valor imediato. Para
fazer isso, insira o valor do bit mais a esquerda em cada posição
de bit a sua esquerda até haver 32 bits.

• Criar um tag para cada operando e usar o mesmo tipo por toda
a instrução. Para atribuir um valor constante:

– Insira-o em um dos tags


– Adicione uma instrução MOV que movimente o valor em um
dos tags.

Publicação 1756-RM003D-PT-P - Maio 2002


4 Atributos Comuns

• Use uma instrução MEQ para verificar somente os bits


necessários

Os exemplos seguintes mostram duas formas de combinar um valor


imediato com um tag INT. Os exemplos verificam os bits de um
módulo de E/S 1771 para determinar se todos os bits estão
energizados. Como a palavra dos dados de entrada de um módulo de
E/S 1771 é um tag INT, é mais fácil usar um valor constante de 16 bits.

EXEMPLO Combinação de um tag INT com um valor imediato


Como o remote_rack_1:I.Data[0] é um tag INT, o
valor para compará-lo também é inserido como um
tag INT.

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

EXEMPLO Combinação de um tag INT com um valor imediato


Como remote_rack_1:I.Data[0] é um tag INT, o valor
para compará-lo, primeiro muda para int_0, que
também é um tag INT. A instrução EQU compara
ambos os tags.
2#1111_1111_1111_1111

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

Inteiro para REAL

O controlador armazena os valores REAL em precisão simples IEEE,


com formato de número em ponto flutuante. Ele usa um bit para o
sinal do valor, 23 bits para o valor base e oito bits para o expoente (32
bits totais). Caso combine um tag inteiro (SINT, INT ou DINT) e um
tag REAL como entradas na mesma instrução, o controlador converte
o valor inteiro para um valor REAL antes que a instrução se realize.

• Um valor SINT ou INT sempre se converte para o mesmo valor


REAL.

• Um valor DINT pode não se converter para o mesmo valor


REAL:

– Um valor REAL usa até 24 bits para o valor base (23 bits
armazenados mais um bit “escondido”).

Publicação 1756-RM003D-PT-P - Maio 2002


Atributos Comuns 5

– 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.

DINT para SINT ou INT

Para converter um valor DINT para um valor SINT ou INT, o


controlador trunca a parte superior de DINT e energiza o flag de
status do overflow, se necessário. O exemplo a seguir mostra o
resultado de uma conversão de DINT para SINT ou INT.

EXEMPLO Conversão de um DINT para um INT e um SINT

Este valor DINT: Converte-se para este valor menor:


16#0001_0081 (65.665) INT: 16#0081 (129)
SINT: 16#81 (-127)

REAL para um inteiro

Para converter um valor REAL em um valor inteiro, o controlador


circula
a parte fracionária e trunca a parte superior de uma parte não
fracionária. Se o dado for perdido, o controlador energiza o flag de
status do overflow. Os números migram de acordo com:

• Os números diferentes de x.5 migram para o número inteiro


mais próximo.
• X.5 migram para o mesmo número mais próximo.

Publicação 1756-RM003D-PT-P - Maio 2002


6 Atributos Comuns

O exemplo a seguir mostra o resultado da conversão de valores REAL


para valores DINT.

EXEMPLO Conversão de valores REAL em valores DINT

Este valor REAL: Converte-se para este valor DINT:


-2,5 -2
-1,6 -2
-1,5 -2
-1,4 -1
1,4 1
1,5 2
1,6 2
2,5 2

IMPORTANTE Os flags de status aritmético são definidos baseados


nos valores que são armazenados. As instruções que
normalmente não afetam as palavras-chave do status
aritmético podem aparecer para fazer isso se a
conversão do tipo ocorrer por causa dos tipos de
dados combinados para os parâmetros da instrução.
O processo de conversão do tipo define as
palavras-chave do status aritmético.

Publicação 1756-RM003D-PT-P - Maio 2002


Apêndice B

Atributos do Bloco de Funções

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.

IMPORTANTE Ao programar o bloco de funções, limite a faixa das unidades de


medida para +/-10+/-15 pois os cálculos de ponto flutuante interno
são feitos através de um único ponto flutuante de precisão. Se os
resultados ficarem próximos às limitações do único ponto flutuante
de precisão (+/-10+/-38), as unidades de medida fora desta faixas
podem resultar na perda de precisão.

1 Publicação 1756-RM003F-PT-P - Maio 2002


2 Atributos do Bloco de Funções

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

Nesse exemplo, o valor de tagA é armazenado no início da execução


da rotina. O valor armazenado é usado quando Block_01 for
executado. O mesmo valor armazenado é também usado quando
Blcock_02 é executado. Se o valor de tagA alterar durante a execução
da rotina, o valor armazenado de tagA no IREF não altera até a
próxima execução da rotina.
Block_01

tagA

Block_02

Este exemplo é o mesmo que o descrito anteriormente. O valor de


tagA é armazenado somente uma vez no início da execução da rotina.
A rotina usa este valor armazenado por toda a rotina.
Block_01

tagA

Block_02

tagA

Publicação 1756-RM003F-PT-P - Maio 2002


Atributos do Bloco de Funções 3

Ao iniciar com o software RSLogix 5000, versão 11, é possível usar o


mesmo tag em IREFs múltiplos e um OREF na mesma rotina. Como os
valores de tags nos IREFs são lançados em toda o scan através da
rotina, todos os IREFs usarão o mesmo valor, mesmo se um OREF
obtém um valor de tag diferente durante a execução da rotina. Neste
exemplo, se tagA possui um valor de 25,4 quando a rotina inicia a
execução do scan e Block_01 altera o valor de tagA para 50,9, o
segundo IREF conectado ao Block_02 usará ainda um valor de 25,4
quando Block_02 executar esse scan. O novo valor de tagA de 50,9
não será usado por nenhum IREFs nessa rotina até o início do
próximo scan.

Seqüência de Execução O software de programação RSLogix 5000 determina automaticamente


a seqüência de execução para os blocos de função em uma rotina
quando você:

• verificar uma rotina do bloco de funções


• verificar um projeto que contenha uma rotina do bloco de
funções
• fizer o download de um projeto que contenha uma rotina do
bloco de funções

Você define a seqüência de execução ao conectar os blocos de função


juntos e indicar quaisquer fios de realimentação localizados, se
necessário.

Se os blocos de função não forem conectados juntos, não há


seqüência de execução para determinar.

Publicação 1756-RM003F-PT-P - Maio 2002


4 Atributos do Bloco de Funções

Se conectar os blocos seqüencialmente, a seqüência de execução


movimenta-se da entrada para a saída. As entradas de um bloco
devem estar disponíveis antes que o controlador possa executar o
bloco. Por exemplo, o bloco 2 tem que ser executado antes do bloco
3 porque as saídas do bloco 2 alimentam as entradas do bloco 3.

1 2 3

A seqüência de execução é somente relativa aos blocos que são


conectados juntos. A figura a seguir é um bom exemplo, pois os dois
grupos de blocos não estão conectados juntos. Os blocos em um
grupo específico executam na seqüência apropriada em relação aos
blocos no grupo.

1 3 5

2 4 6

Se um grupo de blocos estão em uma malha, o controlador não pode


determinar que entradas devem estar disponíveis primeiro. Use um fio
de realimentação localizado para determinar que entradas devem
estar disponíveis primeiro. Se um conector de entrada é conectado a
um fio de realimentação localizado, a entrada não tem que estar
disponível antes que o bloco possa ser executado. Nesse exemplo, o
bloco 1 usa a saída do bloco 3 que foi produzido na execução
anterior da rotina.

1 2 3

fio de realimentação
localizado

Publicação 1756-RM003F-PT-P - Maio 2002


Atributos do Bloco de Funções 5

Em resumo, uma rotina do bloco de funções executa nessa seqüência:

1. O controlador retém todos os valores de dados em IREFs.

2. O controlador executa os outros blocos de função na seqüência


determinada pela sua fiação.

3. O controlador escreve as saídas em OREFs.

Respostas do Bloco de Em geral, as instruções do bloco de funções que mantêm o histórico


não atualizam o histórico com os valores ±NAN ou ±INF quando um
Funções para as Condições overflow ocorre. Cada instrução possui uma dessas respostas para
de Overflow uma condição de overflow:

Resposta 1: Resposta 2: Resposta 3:


Os blocos executam seu algoritmo e Os blocos com limitação de saída executam A condição de overflow não se aplica.
verificam o resultado para ±NAN ou ±INF. seu algoritmo e verificam o resultado para Normalmente, essas instruções possuem
Se ±NAN ou ±INF, o bloco emite ±NAN ou ±NAN ou ±INF. Os limites de saída são uma saída booleana.
±INF. definidos pelos parâmetros de entrada
HighLimit e LowLimit. Se ±INF, o bloco
emite um resultado limitado. Se ±NAN, os
limites de saída não são usados e o bloco
emite ±NAN.
ALM NTCH HLL BAND OSRI
DEDT PMUL INTG BNOT RESD
DERV POSP PI BOR RTOR
ESEL RLIM PIDE BXOR SETD
FGEN RMPS SCL CUTD TOFR
HPF SCRV SOC D2SD TONR
LDL2 SEL D3SD
LDLG SNEG DFF
LPF SRTP JKFF
MAVE SSUM OSFI
MAXC TOT
MINC UPDN
MSTD
MUX

Modos de Temporização Esse processo controla e direciona as instruções que suportam


diferentes modos de temporização.

DEDT NTCH
DERV PI
HPF PIDE
INTG RLIM
LDLG SCRV
LDL2 SOC
LPF TOT

Publicação 1756-RM003F-PT-P - Maio 2002


6 Atributos do Bloco de Funções

Há três diferentes modos de temporização:

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.

As instruções com base no tempo requerem um valor constante para


DeltaT para que o algoritmo de controle calcule de forma adequada a
saída do processo. Se DeltaT variar, ocorre uma descontinuidade na
saída do processo. A severidade da descontinuidade depende da
instrução e faixa sobre a qual DeltaT variar. A descontinuidade ocorre
se:

• a instrução não foi executada durante um scan.


• a instrução foi executada em tempos múltiplos durante uma
tarefa.
• a tarefa está em operação e a taxa de scan da tarefa ou tempo
de amostra da entrada do processo alterar.
• o usuário alterar o modo com base no tempo enquanto a tarefa
está em operação.
• O parâmetro Order é alterado em um bloco de filtro enquanto a
tarefa está em operação. Ao alterar o parâmetro Order selecione
um algoritmo de controle diferente na instrução.

Publicação 1756-RM003F-PT-P - Maio 2002


Atributos do Bloco de Funções 7

Parâmetros de instrução comum para os modos de temporização

As instruções que suportam os modos com base no tempo possuem


esses parâmetros de entrada e saída:

Parâmetros de entrada

Parâmetro de Tipo de Dados: Descrição:


Entrada:
TimingMode DINT Seleciona o modo de execução de temporização.
Valor:Descrição:
0 modo periódico
1 modo oversample
2 modo de amostragem em tempo real

válido = 0 a 2
valor inicial = 0

Quando TimingMode = 0 e a tarefa for periódica, a temporização periódica é habilitada e


DeltaT é definido para a taxa de scan da tarefa. Quando TimingMode = 0 e a tarefa é
contínua, a temporização periódica é habilitada e DeltaT é definido igual ao span do tempo
decorrido como a última vez que a instrução foi executada.

Quando TimingMode = 1, a temporização oversample é habilitada e DeltaT é definido para o


valor do parâmetro OversampleDT.

Quando TimingMode = 2, a temporização de amostragem em tempo real é habilitada e


DeltaT é a diferença entre os valores da corrente e o registro de data e hora lido,
anteriormente, do módulo associado à entrada.

Se TimingMode é inválido, a instrução energiza o bit apropriado em Status.


OversampleDT REAL Tempo de execução para a temporização oversample. O valor usado para DeltaT está em
segundos. Se TimingMode = 1, então OversampleDT = 0,0 desabilita a execução do
algoritmo de controle. Se inválido, a instrução define DeltaT = 0,0 e energiza o bit apropriado
em Status.
válido = 0 a 4194.303 segundos
valor inicial = 0,0
RTSTime DINT Período de atualização do módulo para a temporização de amostragem em tempo real. O
período de atualização esperado de DeltaT está em milissegundos. O período de
atualização,normalmente, é o valor usado para configurar o tempo de atualização do módulo.
Se inválido, a instrução energiza o bit apropriado em Status e desabilita a verificação
RTSMissed..
válido = 1 a 32,767 ms
valor inicial = 1
RTSTimeStamp DINT Valor do registro de data e hora do módulo para a temporização de amostragem em tempo
real. O valor de registro de data e hora que corresponde à última atualização do sinal de
entrada. Esse valor é usado para calcular DeltaT. Se inválido, a instrução energiza o bit
apropriado em Status, desabilita a execução do algoritmo de controle e desabilita a
verificação de RTSMissed.

válido =1 a 32.767ms (wraps de 32767 a 0)


1 contagem = 1 milissegundo
valor inicial = 0

Publicação 1756-RM003F-PT-P - Maio 2002


8 Atributos do Bloco de Funções

Parâmetros de saída

Parâmetro de Saída: Tipo de Dados: Descrição:


DeltaT REAL Tempo decorrido entre as atualizações. Esse é o tempo decorrido em segundos usado pelo
algoritmo de controle para calcular a saída do processo.

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

Oversample: DeltaT = OversampleDT

Amostragem em Tempo RealDeltaT = (RTSTimeStampn - RTSTimeStampn-1)


Status DINT Status do bloco de funções.
TimingModeInv BOOL Valor de TimingMode inválido.
(Status.27)
RTSMissed (Status.28) BOOL Somente usado no modo de amostragem em tempo real. Definido quando ABS | DeltaT -
RTSTime | > 1 (,001 segundo).
RTSTimeInv BOOL Valor de RTSTime inválido.
(Status.29)
RTSTimeStampInv BOOL Valor de RTSTimeStamp inválido.
(Status.30)
DeltaTInv (Status.31) BOOL Valor de DeltaT inválido.

Publicação 1756-RM003F-PT-P - Maio 2002


Atributos do Bloco de Funções 9

Características Gerais dos modos de temporização

O diagrama a seguir mostra como uma instrução determina o modo


adequado de temporização.

Determina o modo com base


no tempo

TimingMode = 0 TimingMode = 1 TimingMode = 2

Temporização Periódica Temporização Oversample Temporização em tempo real

DeltaT = OversampleDT DeltaT = RTSTimeStampn - RTSTimeStampn-1

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

Tarefa periódica Tarefa não periódica

DeltaT = tempo de scan da tarefa DeltaT = tempo decorrido como na última


execução
Se DeltaT > 0, a instrução executa.
Se DeltaT > 0, a instrução executa.

Publicação 1756-RM003F-PT-P - Maio 2002


10 Atributos do Bloco de Funções

Controle de Muitas instruções suportam o conceito de controle de


Programa/Operator. Essas instruções incluem:
Program/Operator
• Seleção Aprimorada (ESEL)
• Totalizador (TOT)
• PID Aperfeiçoada (PIDE)
• Ramp/Soak (RMPS)
• Dispositivo Discreto em 2 Estados (D2SD)
• Dispositivo Discreto em 3 Estados (D3SD)

O controle Program/Operator permite controlar essas instruções


simultaneamente do programa do usuário e de um dispositivo de
interface de operação. Quando no controle Program, a instrução é
controlada pelas entradas do Program para a instrução; quando no
controle Operator, a instrução é controlada pelas entradas do
Operator para a instrução;

O controle Program ou Operator é determinado ao usar essas


entradas:

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.

Para determinar se uma instrução está um controle Program ou


Control, examine a saída ProgOper. Se ProgOper estiver energizado, a
instrução está em controle Program; Se ProgOper estiver
desenergizado, a instrução está em controle Operator;

O controle Operator é mais indicado que o controle Program se os


bits de pedido de entrada estiverem energizados. Por exemplo, se
ProgProgReq e ProgOperReq estiverem energizados, a instrução vai
para o controle Operator.

Publicação 1756-RM003F-PT-P - Maio 2002


Atributos do Bloco de Funções 11

As entradas do pedido Program são preferíveis às entradas do pedido


Operator. Isso fornece a capacidade de usar as entradas ProgProgReq
e ProgOperReq para “travar” uma instrução em um controle desejado.
Por exemplo, vamos supor que uma instrução Totalizer sempre será
usada em controle Operator e o programa do usuário nunca
controlará a operação ou interrupção do Totalizer. Nesse caso, seria
possível conectar um valor literal de 1 em ProgOperReq. Isso evitaria
o operador de colocar o Totalizer no controle Program ao definir o
OperProgReq de um dispositivo de interface de operação.

Como a entrada ProgOperReq é


sempre energizada, não há efeito se
pressionar o botão “Program” na
placa frontal (que define a entrada
OperProgReg). Normalmente, a
definição de OperProgReq coloca o
TOT no controle Program.

Conectar um “1” em ProgOperReq


significa que o programa do usuário
sempre quer que TOT esteja no
controle Operator

Igualmente, a definição constante do ProgProgReq pode “travar” a


instrução no controle Program. Isso é muito usado para as seqüências
de start-up automático quando se quer o programa para controlar a
ação da instrução sem se preocupar que um operador assuma de
forma inadvertida o controle da instrução. Nesse exemplo, você
possui a definição do programa da entrada ProgProgReq durante o
start-up e desenergiza a entrada ProgProgReq uma vez que o start-up
foi concluído. Uma vez que a entrada ProgProgReq é desenergizada, a
instrução permanece em controle Program até que ela receba um
pedido para ser alterada. Por exemplo, o operador poderia definir a
entrada OperOperReq de uma placa frontal para assumir o controle

Publicação 1756-RM003F-PT-P - Maio 2002


12 Atributos do Bloco de Funções

da instrução. O exemplo a seguir mostra como travar uma instrução


no controle Program.

Quando StartupSequenceActive
é energizado, a instrução PIDE é
colocada em controle Program e
modo Manual. O valor
StartupCV é usado como a saída
da malha.

As entradas de pedido de operação para uma instrução sempre são


desenergizadas pela instrução quando ela é executada. Isso permite
que as interfaces de operação funcionem com essas instruções ao
definir o bit de pedido do modo desejado. Não precisa programar a
interface de operação para zerar os bits de pedido. Por exemplo, se
uma interface de operação energiza a entrada OperAutoReq para uma
instrução PIDE, quando a instrução PIDE é executada, ela determina
que resposta adequada deveria ser e desenergiza OperAutoReq.

As entradas do pedido de Program, normalmente, não são


desenergizadas pela instrução porque são conectadas como entradas
na instrução. Se a instrução desenergizar essas entradas, a entrada
consegue apenas energizar novamente pela entrada conectada. Deve
haver situações em que se quer usar outra lógica para definir os
pedidos de Program de forma que você queira que os pedidos de
Program sejam desenergizados pela instrução. Nesse caso, é possível
energizar a entrada ProgValueReset e a instrução sempre
desenergizará as entradas do pedido do modo Program quando ela
for executada.

Nesse exemplo, uma linha de lógica ladder em uma outra rotina é


usada para uma trava monoestável de um ProgAutoReq para uma
instrução PIDE quando um botão é empurrado. Como a instrução
PIDE automaticamente desenergiza os pedidos do modo Program,
você não precisa escrever nenhuma lógica ladder para desenergizar o
ProgAutoReq após a rotina ser executada e a instrução PIDE receberá

Publicação 1756-RM003F-PT-P - Maio 2002


Atributos do Bloco de Funções 13

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.

Publicação 1756-RM003F-PT-P - Maio 2002


14 Atributos do Bloco de Funções

Notas:

Publicação 1756-RM003F-PT-P - Maio 2002


Apêndice C

Programação de Texto Estruturado

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.

Para informações sobre: Consulte página:


Sintaxe do Texto Estruturado C-1
Atributos C-2
Expressões C-4
Instruções C-10
Construções C-11
Comentários C-24

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:

Termo: Definição: Exemplos:


atributo Use uma declaração de atribuição para atribuir os valores aos tags. tag := expression;
(consulte a página O operador := é um operador de atribuição.
C-2) Termine a atribuição com um ponto e vírgula “;”.
expressão Uma expressão é parte de uma atribuição completa ou declaração de
(consulte a página construção. Uma expressão avalia para um número (expressão numérica)
C-4) ou para um estado verdadeiro ou falso (expressão BOOL).

Uma expressão contém:


tags Uma área nomeada da memória em que os dados são value1
armazenados (BOOL, SINT,INT,DINT, REAL, string).
imediatos Um valor constante. 4
operadores Um símbolo ou mnemônico que especifica uma tag1 + tag2
operação em uma expressão. tag1 >= value1
funções Quando executada, uma função produz um valor. Use function(tag1)
parênteses para conter o operando de uma função.

Embora sua sintaxe seja similar, as funções


diferenciam-se das instruções em que as funções
possam somente ser usadas em expressões. As
instruções não podem ser usadas em expressões.

1 Publicação 1756-RM003F-PT-P - Maio 2002


2 Programação de Texto Estruturado

Termo: Definição: Exemplos:


instrução Uma instrução é uma declaração independente. instruction();
(consulte a página Uma instrução usa parênteses para conter seus operandos.
C-10) Dependendo da instrução, pode haver zero, um ou múltiplos operandos. instruction(operand);
Quando executada, uma instrução produz um ou mais valores que são parte
de uma estrutura de dados. instruction(operand1,
Termine a instrução com um ponto e vírgula “;”. operand2,operand3);

Embora sua sintaxe seja similar, as funções diferenciam-se das funções em


que as instruções não possam ser usadas em expressões. As funções
podem ser usadas somente em expressões.
construção Uma declaração condicional usada para iniciar o código de texto IF...THEN
(consulte a página estruturado (isto é, outras declarações). CASE
C-11) Termine a construção com um ponto e vírgula “;”. FOR…DO
WHILE…DO
REPEAT…UNTIL
EXIT
comentário O texto que explica ou esclarece o que uma coluna de texto estruturado //comment
(consulte a faz.
página C24). • Use os comentários para interpretar o texto estruturado de forma (*start of comment. . .
mais fácil. end of comment*)
• Os comentários não afetam a execução do texto estruturado.
• Os comentários podem aparecer em qualquer lugar no texto /*start of comment. . .
estruturado. end of comment*/

Atributos Use um atributo para alterar o valor armazenado em um tag. Um


atributo possui essa sintaxe:

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.

A expressão pode ser simples, como um valor imediato ou um outro


nome de tag ou a expressão pode ser complexa e incluir muitos
operadores e / ou funções. Consulte a próxima coluna “Expressões“
na página C-4 para detalhes.

Publicação 1756-RM003F-PT-P - Maio 2002


Programação de Texto Estruturado 3

Especificação de um atributo não retentivo

O atributo não retentivo é diferente da atribuição regular descrita


acima em que o tag em uma atribuição não retentiva é rearmado para
resetar em zero toda vez que o controlador:
• entrar o modo RUN
• sair da etapa de um SFC caso configure o SFC para Automatic
reset (Isso se aplica somente se você embutiu a atribuição na
ação da etapa ou se usar a ação para chamar uma rotina de
texto estruturado através de uma instrução JSR.)

Uma atribuição não retentiva possui essa sintaxe:

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
[:=] é 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

Atribuição de um caractere ASCII para um string

Use o operador de atribuição para atribuir um caractere ASCII a um


elemento do membro DATA de um tag da string. Para atribuir um
caractere, especifique o valor do caractere ou especifique o nome do
tag, membro DATA e o elemento do caractere. Por exemplo:

Esse está OK: Esse não está OK.


string1.DATA[0]:= 65; string1.DATA[0] := A;
string1.DATA[0]:= string2.DATA[0]; string1 := string2;

Para adicionar ou inserir um string de caracteres a um tag da string,


use uma dessas instruções da string ASCII:

Para: Use esta instrução:


adicionar caracteres ao final de uma string CONCAT
inserir caracteres em uma string INSERT

Publicação 1756-RM003F-PT-P - Maio 2002


4 Programação de Texto Estruturado

Expressões Uma expressão é um nome do tag, equação ou comparação. Para


escrever uma expressão, use:
• o nome do tag que armazena o valor (variável)
• o número inserido diretamente na expressão (valor imediato)
• funções, como: ABS, TRUNC
• operadores, como: +, -, <, >, And, Or

Assim que escrever as expressões, siga essas regras gerais:

• Use qualquer combinação de letra maiúscula e minúscula. Por


exemplo, essas três variações de "AND" são aceitáveis: AND,
And, and.
• Para especificações mais complexas, use os parênteses para
agrupar as expressões dentro de expressões. Isso torna a
expressão inteira mais fácil de ser lida e assegura que a
expressão seja executada na seqüência desejada. Consulte
“Determinação da seqüência de execução“ na página C9.

No texto estruturado, são usados dois tipos de expressões:

expressão BOOL: Uma expressão que produz o valor BOOL de 1


(verdadeiro) ou 0 (falso).

• Uma expressão BOOL usa os tags BOOL, operadores


relacionados e operadores lógicos para comparar os valores ou
verificar se as condições são verdadeiras ou falsas. Por exemplo,
tag1>65.
• Uma expressão BOOL simples pode ser um único tag BOOL.
• Geralmente, usam-se expressões BOOL para condicionar a
execução de outra lógica.

Expressão Numérica: Uma expressão que calcula um valor inteiro


ou de ponto flutuante.

• Uma expressão numérica usa operadores aritméticos, funções


aritméticas e operadores bitwise. Por exemplo, tag1+5.
• Geralmente, você encadeia uma expressão numérica em uma
expressão BOOL. Por exemplo, (tag1+5)>65.

Use a tabela a seguir para escolher os operadores para as expressões:

Se você quiser: Então:


Calcular um valor aritmético “Use os operadores e funções aritméticas“ na página C-5.
Comparar dois valores ou strings “Uso dos operadores relacionados“ na página C-6.
Verificar se as condições são verdadeiras ou falsas “Uso dos operadores lógicos“ na página C-8.
Comparar os bits nos valores “Uso de operadores bitwise“ na página C-9.

Publicação 1756-RM003F-PT-P - Maio 2002


Programação de Texto Estruturado 5

Use os operadores e funções aritméticas

É possível combinar operadores múltiplos e funções em expressões


aritméticas.

Os operadores aritméticos calculam os novos valores.

Para: Use este operador: Tipo de dados otimizados:


adição + DINT, REAL
subtração/negação - DINT, REAL
multiplicação * DINT, REAL
expoente (x elevado a y) ** DINT, REAL
divisão / DINT, REAL
módulo-divisão MOD DINT, REAL

As funções aritméticas realizam operações matemáticas. Especifique uma


constante, um tag não booleano ou uma expressão para a função.

Para: Use esta função: Tipo de dados


otimizados:
valor absoluto ABS (numeric_expression) DINT, REAL
arco co-seno ACOS (numeric_expression) REAL
arco seno ASIN (numeric_expression) REAL
arco tangente ATAN (numeric_expression) REAL
co-seno COS (numeric_expression) REAL
radianos para graus DEG (numeric_expression) DINT, REAL
log neperiano LN (numeric_expression) REAL
log de base 10 LOG (numeric_expression) REAL
graus para radianos RAD (numeric_expression) DINT, REAL
seno SIN (numeric_expression) REAL
raiz quadrada SQRT (numeric_expression) DINT, REAL
tangente TAN (numeric_expression) REAL
truncado TRUNC (numeric_expression) DINT, REAL

Publicação 1756-RM003F-PT-P - Maio 2002


6 Programação de Texto Estruturado

Por exemplo:

Use esse formato: Exemplo:


Para essa situação: Você escreveria:
value1 operator value2 Se gain_4 e gain_4_adj são tags DINT e a especificação diz: gain_4_adj :=
"Acrescente 15 a gain_4 e armazene o resultado em gain_4+15;
gain_4_adj."
operator value1 Se alarme e high_alarm são tags DINT e a especificação diz: alarm:=
“Subtraia high_alarm e armazenar o resultado em alarm.” -high_alarm;
function(numeric_expression) Se overtravel e overtravel_POS são tags DINT e a overtravel_POS
especificação diz: “Calcule o valor absoluto de overtravel e :=
armazene o resultado em overtravel_POS.” ABS(overtravel);
value1 operator Se adjustment e position são tags DINT e sensor1 e sensor2 position :=
(function((value2+value3)/2) são tags REAL e a especificação diz: “Encontre o valor absoluto adjustment +
da média de sensor1 e de sensor2, acrescente adjustment e ABS((sensor1 +
armazene o resultado em position.” sensor2)/2);

Uso dos operadores relacionados

Os operadores relacionados comparam dois valores ou strings para


fornecer um resultado verdadeiro ou falso. O resultado de uma
operação relacionada é um valor BOOL:

Se a comparação for: O resultado é:


verdadeira 1
falsa 0

Use os operadores relacionados a seguir:

Para essa comparação: Use este operador: Tipo de dados otimizados:


igual = DINT, REAL, string
menor que < DINT, REAL, string
menor ou igual a <= DINT, REAL, string
maior que > DINT, REAL, string
maior ou igual a >= DINT, REAL, string
diferente de <> DINT, REAL, string

Publicação 1756-RM003F-PT-P - Maio 2002


Programação de Texto Estruturado 7

Por exemplo:

Use esse formato: Exemplo:


Para essa situação: Você escreveria:
valor1 operador valor2 Se temp é um tag DINT e a especificação diz: Se IF temp<100 THEN...
temp for menor que 100° então…”
stringtag1 operator Se bar_code e dest são tags da string e a IF bar_code=dest THEN...
stringtag2 especificação diz: Se bar_code for igual a dest
então…”
char1 operator char2 Se bar_code é um tag da string e a especificação IF bar_code.DATA[0]=65
diz: "Se bar_code.DATA[0] igual a ’A’ então…” THEN...
Para inserir um caractere ASCII diretamente
na expressão, insira o valor decimal do
caractere.
bool_tag := Se count e length são tags DINT, done é um tag done := (count >= length);
bool_expressions BOOL e a especificação diz ”Se count maior ou
igual a length, você concluiu a contagem.”

Como as Strings São Avaliados

Os valores hexadecimais dos caracteres ASCII determinam se uma


string é menor ou maior que outra.

• Quando duas strings estão classificadas como em um diretório


de telefone, a ordem das strings determina qual é maior.

Caracteres ASCII Códigos


Hexadecimais
1ab $31$61$62
m m 1b $31$62
e ai
A $41
n o
o r AB $41$42 AB < B
r q
q u
B $42
u e a $61 a>B
ab $61$62

• As strings são iguais se os caracteres corresponderem.


• Os caracteres são sensíveis ao contexto. O "A" maiúsculo ($41)
não é igual ao "a" minúsculo ($61).

Para o valor decimal e código hexadecimal de um caractere, consulte


a quarta capa deste manual.

Publicação 1756-RM003F-PT-P - Maio 2002


8 Programação de Texto Estruturado

Uso dos operadores lógicos

Os operadores lógicos permitem verificar se múltiplas condições são


verdadeiras ou falsas. O resultado de uma operação lógica é um valor
BOOL:

Se a comparação for: O resultado é:


verdadeira 1
falsa 0

Use os operadores lógicos a seguir:

Para: Use este operador: Tipo de Dados:


lógica AND &, AND BOOL
lógica OR OR BOOL
lógica XOR XOR BOOL
lógica NOT NOT BOOL

Por exemplo:

Use esse formato: Exemplo:


Para essa situação: Você escreveria:
BOOLtag Se photoeye é um tag BOOL e a especificação diz: IF photoeye THEN...
Se photoeye_1 estiver energizado então…”
NOT BOOLtag Se photoeye é um tag BOOL e a especificação diz: IF NOT photoeye THEN...
“Se photoeye estiver desenergizado então…”
expression1 & expression2 Se photoeye é um tag BOOL, temp é um tag DINT e IF photoeye & (temp<100)
a especificação diz: "Se photoeye estiver THEN...
energizado e temp for menor que 100° então…”.
expression1 OR expression2 Se photoeye é um tag BOOL, temp é um tag DINT e IF photoeye OR (temp<100)
a especificação diz: Se photoeye estiver THEN...
energizado ou temp for menor que 100° então…”.
expression1 XOR expression2 Se photoeye1 e photoeye2 são tags BOOL e a IF photoeye1 XOR photoeye2
especificação diz: “Se: THEN...
• photoeye1 estiver energizado enquanto
photoeye2 estiver desenergizado ou
• photoeye1 estiver desenergizado
enquanto photoeye2 estiver energizado
então..."
BOOLtag := expression1 & Se photoeye1 e photoeye2 são tags BOOL, open é open := photoeye1 &
expression2 um tag BOOL e a especificação diz: “Se photoeye1 photoeye2;
e photoeye2 estiverem energizado, define open
como verdadeiro”.

Publicação 1756-RM003F-PT-P - Maio 2002


Programação de Texto Estruturado 9

Uso de operadores bitwise

Os operadores bitwise manipulam os bits em um valor baseado em


dois valores.

Para: Use este operador: Tipo de dados otimizados:


AND (E) &, AND DINT
OR (OU) OR DINT
XOR XOR DINT
NOT NOT DINT

Por exemplo:

Use esse formato: Exemplo:


Para essa situação: Você escreveria:
value1 operator value2 Se input1, input2 e result1 são tags DINT e a result1 := input1 AND
especificação diz: “Calcule o resultado de input1 e input2;
input2. Armazene o resultado em result1.”

Determinação da seqüência de execução

As operações escritas em uma expressão são realizadas em uma


seqüência prescrita, não necessariamente da esquerda para a direita.
• Operações com seqüência igual são realizadas da esquerda para
a direita.
• Se uma expressão contiver múltiplos operadores ou funções,
agrupe as condições em parênteses "( )" . Isso assegura a
seqüência correta de execução e facilita a leitura da expressão.

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

Publicação 1756-RM003F-PT-P - Maio 2002


10 Programação de Texto Estruturado

Instruções As declarações do texto estruturado podem ser também instruções.


Consulte a Tabela de Localização no início desse manual para uma
lista de instruções disponíveis no texto estruturado. Uma instrução de
texto estruturado executa toda vez que é varrida. Uma instrução de
texto estruturado com uma construção executa toda vez que as
condições de construção forem verdadeiras. Se as condições de
construção forem falsas, as declarações na construção não são
varridas. Não há condição de linha ou transição de estado que inicie a
execução.

Isso difere das instruções do bloco de funções que usam EnableIn


para iniciar a execução. As instruções de texto estruturado executadas
se EnableIn estiver sempre energizado.

Isso difere também das instruções de lógica ladder que usam a


entrada da condição de linha para iniciar a execução. Algumas
instruções da lógica ladder somente são executadas quando a entrada
da condição de linha alterna de falso para verdadeiro. Essas são
instruções de lógica ladder são transicionais. No texto estruturado, as
instruções serão executadas toda vez que forem varridas a menos que
você pré-condicione a execução da instrução de texto estruturado.

Por exemplo, a instrução ABL é uma instrução transicional na lógica


ladder. Nesse exemplo, a instrução ABL é executada somente em um
scan quando as transiçõestag_xic forem de desenergizado para
energizado. A instrução ABL não é executada quando tag_xic fica
energizado ou quando tag_xic está desenergizado.

No texto estruturado, se você escrever este exemplo como:

IF tag_xic THEN ABL(0,serial_control);

END_IF;

A instrução ABL será executada a cada scan em que tag_xic estiver


energizado, não apenas quando as transições tag_xic forem de
desenergizado para energizado.

Publicação 1756-RM003F-PT-P - Maio 2002


Programação de Texto Estruturado 11

Se você quiser que a instrução ABL execute somente quando as


transições de tag_xic forem de desenergizado para energizado,
precisará condicionar a instrução de texto estruturado. Use um
monoestável para iniciar a execução.

osri_1.InputBit := tag_xic;
OSRI(osri_1);

IF (osri_1.OutputBit) THEN
ABL(0,serial_control);
END_IF;

Construções As construções podem ser programadas uma a uma ou encadeadas


em outras construções.

Se você quiser: Use esta construção: Disponível nessas linguagens: Consulte a


página:
fazer algo se ou quando as condições específicas ocorrerem IF...THEN texto estruturado C-12
selecionar o que fazer com base em um valor numérico CASE...OF texto estruturado C-15
fazer algo um número vezes determinadas antes de fazer FOR…DO texto estruturado C-17
mais alguma coisa
continuar a fazer algo enquanto certas condições são WHILE…DO texto estruturado C-20
verdadeiras
continuar a fazer algo até que uma condição seja verdadeira REPEAT…UNTIL texto estruturado C-22

Publicação 1756-RM003F-PT-P - Maio 2002


12 Programação de Texto Estruturado

IF...THEN Use IF…THEN para fazer algo se ou quando as condições específicas


ocorrerem.

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;

Para usar ELSIF ou ELSE, siga as orientações:

1. Para selecionar diversos grupos possíveis de declarações,


adicione uma ou mais declarações ELSIF.

• Cada ELSIF representa um caminho alternativo.


• Especifique quantos caminhos ELSIF possíveis você precisar.
• O controlador executa o primeiro IF ou ELSIF verdadeiro e
pula o resto dos ELSIFs e ELSE.

2. Para fazer algo quando todas as condições de IF ou ELSIF forem


falsas, adicione uma declaração ELSE.

Publicação 1756-RM003F-PT-P - Maio 2002


Programação de Texto Estruturado 13

A tabela a seguir resume as combinações diferentes de IF, THEN,


ELSIF e ELSE.

Se você quiser: E Então use esta construção


fazer algo se ou quando as condições nada fizer se as condições forem falsas IF...THEN
forem verdadeiras
fazer mais alguma coisa se as condições IF…THEN…ESLE
forem falsas
escolher as declarações alternativas fazer nada se as condições forem falsas IF…THEN…ELSIF
(ou grupos de declarações) baseadas
nas condições de entrada atribuir declarações padrão se todas as IF…THEN…ELSIF…ELSE
condições forem falsas

Exemplo 1: IF…THEN

Se você quiser isso: Insira este texto estruturado:


IF rejects > 3 then IF rejects > 3 then
transportador = off (0) conveyor := 0;
alarme = on (1) alarm:= 1;
END_IF;

Exemplo 2: IF…THEN…ELSE

Se você quiser isso: Insira este texto estruturado:


Se o contato de direção do transportador = siga (1) então IF conveyor_direction THEN
light = apaga light := 0;
Ou light = acende ELSE
light [:=] 1;
END_IF;

O [:=] pede ao controlador para apagar light quando o controlador:


• entrar o modo RUN
• sair da etapa de um SFC caso configure o SFC para Automatic
Reset (Isso se aplica somente se você embutiu a atribuição na
ação da etapa ou usar a ação para chamar uma rotina de texto
estruturado através de uma instrução JSR.)

Publicação 1756-RM003F-PT-P - Maio 2002


14 Programação de Texto Estruturado

Exemplo 3: IF…THEN…ELSIF

Se você quiser isso: Insira este texto estruturado:


Se sugar low limit switch = low (energizada) e sugar high IF Sugar.Low & Sugar.High THEN
limit switch = not high (energizada) então
válvula de entrada = aberta (energizada) Sugar.Inlet [:=] 1;
Até sugar high limit switch = high (desenergizada) ELSIF NOT(Sugar.High) THEN
Sugar.Inlet := 0;
END_IF;

O [:=] pede para o controlador desenergizar Sugar.Inlet sempre que o


controlador:
• entrar no modo RUN
• sair da etapa de um SFC caso configure o SFC para Automatic
reset (Isso se aplica somente se você embutiu a atribuição na
ação da etapa ou usar a ação para chamar uma rotina de texto
estruturado através de uma instrução JSR.)

Exemplo 4: IF…THEN…ELSIF…ELSE

Se você quiser isso: Insira este texto estruturado:


Se a temperatura do tanque for > 100 IF tank.temp > 200 THEN
então a bomba = devagar pump.fast :=1; pump.slow :=0; pump.off :=0;
Se a temperatura do tanque for > 200 ELSIF tank.temp > 100 THEN
então a bomba = rápido pump.fast :=0; pump.slow :=1; pump.off :=0;
ou a bomba = desenergizada ELSE
pump.fast :=0; pump.slow :=0; pump.off :=1;
END_IF;

Publicação 1756-RM003F-PT-P - Maio 2002


Programação de Texto Estruturado 15

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

IMPORTANTE Se usar valores REAL, use uma faixa de valores para


um seletor porque um valor REAL é mais provável
que esteja em uma faixa de valores que uma
combinação exata de um valor específico.

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;

Consulte a tabela na página seguinte para validar os valores do


seletor.

Publicação 1756-RM003F-PT-P - Maio 2002


16 Programação de Texto Estruturado

A sintaxe para inserção dos valores do seletor é:

Quando o seletor for: Insira:


um valor Valor:statement
múltiplo, com valores distintos value1, value2, valueN : <statement>

Use uma vírgula (,) para separar cada valor.


uma faixa de valores value1..valueN : <statement>

Use dois pontos (..) para identificar a faixa.


valores distintos mais uma faixa de valores valuea, valueb, value1..valueN : <statement>

EXEMPLO

Se você quiser isso: Insira este texto estruturado:


Se o número receptor = 1 então CASE recipe_number OF
Ingrediente A saída 1 = aberta (1) 1: Ingredient_A.Outlet_1 :=1;
Ingrediente B saída 4 = aberta (1) Ingredient_B.Outlet_4 :=1;
Se o número receptor = 2 ou 3 então 2,3: Ingredient_A.Outlet_4 :=1;
Ingrediente A saída 4 = aberta (1) Ingredient_B.Outlet_2 :=1;
Ingrediente B saída 2 = aberta (1)
Se o número receptor = 4, 5, 6 ou 7 então 4..7: Ingredient_A.Outlet_4 :=1;
Ingrediente A saída 4 = aberta (1) Ingredient_B.Outlet_2 :=1;
Ingrediente B saída 2 = aberta (1)
Se o número receptor = 8, 11, 12 ou 13 então 8,11-13 Ingredient_A.Outlet_1 :=1;
Ingrediente A saída 1 = aberta (1) Ingredient_B.Outlet_4 :=1;
Ingrediente B saída 4 = aberta (1)
Ou todas as saídas = fechada (0) ELSE
Ingredient_A.Outlet_1 [:=]0;
Ingredient_A.Outlet_4 [:=]0;
Ingredient_B.Outlet_2 [:=]0;
Ingredient_B.Outlet_4 [:=]0;
END_CASE;

O [:=] pede ao controlador para também desenergizar os tags de saída


sempre que o controlador:
• inserir o modo RUN
• sair da etapa de um SFC caso configure o SFC para Automatic
reset (Isso se aplica somente se você embutiu a atribuição na
ação da etapa ou usar a ação para chamar uma rotina de texto
estruturado através de uma instrução JSR.)

Publicação 1756-RM003F-PT-P - Maio 2002


Programação de Texto Estruturado 17

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.

IMPORTANTE Certifique-se de não repetir a malha muitas vezes em um único


scan.
• O controlador não executa nenhuma outra declaração na rotina
até concluir a malha.
• Se o tempo que ele levar para concluir a malha for superior ao
temporizador watchdog para a tarefa, ocorre uma falha grave.
• Considere o uso de uma construção diferente, como IF...THEN.

Descrição: A sintaxe é:

FOR count:= initial_value


TO final_value
opcional { BY incremento Se não especificar um incremento, a malha
incrementa pelo 1.
DO
<statement>;
IF bool_expression 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.
END_FOR;

Publicação 1756-RM003F-PT-P - Maio 2002


18 Programação de Texto Estruturado

Os diagramas a seguir mostram como uma malha FOR...DO executa e


como uma declaração EXIT deixa a malha mais cedo.

executado x sim Executado x sim


número de vezes? número de vezes?

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:

Se você quiser: Insira este texto estruturado:


Desenergizar os bits 0 - 31 em um array de BOOLs: For subscript:=0 to 31 by 1 do
1. Inicie o tag subscript para 0. array[subscript] := 0;
2. Desenergize array[ subscript ] . Por exemplo, quando subscript = 5,
desenergize array[5]. End_for;
3. Adicione 1 a subscript.
4. Se subscript for ≤ que 31, repita 2 e 3.
Caso contrário, pare.

Publicação 1756-RM003F-PT-P - Maio 2002


Programação de Texto Estruturado 19

Exemplo 2:

Se você quiser isso: Insira este texto estruturado:


Um tipo de dados definido pelo usuário (estrutura) armazena as SIZE(Inventory,0,Inventory_Items);
seguintes informações sobre um item no seu estoque:
• ID do código de barras do item (tipo de dados da string) For position:=0 to Inventory_Items - 1 do
• Quantidade do item em estoque (tipo de dados DINT) If Barcode = Inventory[position].ID
Um array da estrutura acima contém um elemento para cada
item diferente no seu estoque. Você quer procurar o array para Quantity := Inventory[position].Qty;
um produto específico (use seu código de barras) e determinar a EXIT;
quantidade que há em estoque.
END_IF;
1. Obter o tamanho (número de items) do array Inventory
e armazene o resultado Inventory_Items (tag DINT). End_for;
2. Inicie o tag position em 0.
3. Se Barcode corresponder à ID do item no array, então:
a. Ajuste o tag Quantity = Inventory[position].Qty. Isso
produz a quantidade no estoque do item.
b. Pare.
Barcode é um tag da string que armazena o código de
barras do item para o que você estiver procurando. Por
exemplo, quando position = 5, compare Barcode ao
Inventory[5].ID.
4. Adicione 1 para position.
5. Se position for ≤ para (Inventory_Items -1), repita 3 e
4. Como os números do elemento começam no 0, o
último elemento é 1 menor que o número de
elementos no array.
Caso contrário, pare.

Publicação 1756-RM003F-PT-P - Maio 2002


20 Programação de Texto Estruturado

WHILE…DO Use a malha WHILE…DO para continuar algo enquanto certas


condições forem verdadeiras.

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

IMPORTANTE Certifique-se de não repetir a malha muitas vezes em um único


scan.
• O controlador não executa nenhuma outra declaração na rotina
até concluir a malha.
• Se o tempo que ele levar para concluir a malha for superior ao
temporizador watchdog para a tarefa, uma falha grave ocorre.
• Considere o uso de uma construção diferente, como IF...THEN.

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;

Os diagramas a seguir mostram como uma malha WHILE...DO se


executa e como uma declaração EXIT deixa a malha mais cedo.
falsa falsa
expressão BOOL expressão BOOL
verdadeira verdadeira
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

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.

Publicação 1756-RM003F-PT-P - Maio 2002


Programação de Texto Estruturado 21

Exemplo 1:

Se você quiser isso: Insira este texto estruturado:


A malha WHILE...DO avalia primeiro suas condições. Se as pos := 0;
condições forem verdadeiras, o controlador executa então as
While ((pos <= 100) & structarray[pos].value
declarações na malha.
<> targetvalue)) do
Isto diferencia-se da malha REPEAT...UNTIL porque a malha
REPEAT...UNTIL executa as declarações na construção e então pos := pos + 2;
determina se as condições são verdadeiras antes de executar as String_tag.DATA[pos] := SINT_array[pos];
declarações novamente. As declarações em uma malha
REPEAT...UNTIL são sempre executadas pelo menos uma vez. As end_while;
declarações em uma malha WHILE...DO nuca podem ser
executadas.

Exemplo 2:

Se você quiser isso: Insira este texto estruturado:


Movimente os caracteres ASCII de um array SINT para um tag element_number := 0;
da string. (Em um array SINT, cada elemento suporta um
caractere.) Pare quando alcançar o mecanismo de retorno. SIZE(SINT_array, 0, SINT_array_size);
1. Inicie Element_number para 0. While SINT_array[element_number] <> 13 do
2. Conte o número de elementos em SINT_array (array String_tag.DATA[element_number] :=
que contém os caracteres ASCII) e armazena o
resultado em SINT_array_size (tag DINT). SINT_array[element_number];
3. Se o caractere em SINT_array[element_number] = 13 element_number := element_number + 1;
(valor decimal do mecanismo de retorno), então pare.
String_tag.LEN := element_number;
4. Defina String_tag[element_number] = caractere em
SINT_array[element_number]. If element_number = SINT_array_size then
5. Adicione 1 para element_number. Isto permite que o
controlador verifique o SINT_array. exit;
6. Defina o membro Length de String_tag = end_if;
element_number. (Isto registra o número de caracteres
em String_tag mais distante.) end_while;
7. Se element_number = SINT_array_size, então pare.
(Você está no final do array e ele não contém um
mecanismo de retorno.)
8. Vá para 3.

Publicação 1756-RM003F-PT-P - Maio 2002


22 Programação de Texto Estruturado

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;

IMPORTANTE Certifique-se de não repetir a malha muitas vezes em um único


scan.
• O controlador não executa nenhuma outra declaração na rotina
até concluir a malha.
• Se o tempo que ele levar para concluir a malha for superior ao
temporizador watchdog para a tarefa, ocorre uma falha grave.
• Considere o uso de uma construção diferente, como IF...THEN.

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;

Publicação 1756-RM003F-PT-P - Maio 2002


Programação de Texto Estruturado 23

Os diagramas a seguir mostram como uma malha REPEAT...UNTIL se


executa e como uma declaração EXIT deixa a malha mais cedo.
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
verdadeira
expressão BOOL Sair ?
não
falsa
verdadeira
expressão BOOL
resto da rotina
falsa

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:

Se você quiser isso: Insira este texto estruturado:


A malha REPEAT...UNTIL executa as declarações na construção pos := -1;
e então determina se as condições são verdadeiras antes da
execução das declarações novamente. REPEAT

Isto diferencia-se da malha WHILE...DO porque a malha pos := pos + 2;


WHILE...DO avalia primeiro as suas condições. Se as condições UNTIL ((pos = 101) OR (structarray[pos].value
forem verdadeiras, o controlador executa então as declarações = targetvalue))
na malha. As declarações em uma malha REPEAT...UNTIL são
sempre executadas pelo menos uma vez. As declarações em END_REPEAT;
uma malha WHILE...DO nunca podem ser executadas.

Exemplo 2:

Se você quiser isso: Insira este texto estruturado:


Movimente os caracteres ASCII de um array SINT para um tag element_number := 0;
da string. (Em um array SINT, cada elemento holds um
SIZE(SINT_array, 0, SINT_array_size);
caractere.) Pare quando alcançar o mecanismo de retorno.
1. Inicie Element_number para 0. REPEAT
2. Conte o número de elementos em SINT_array (array String_tag.DATA[element_number] :=
que contém os caracteres ASCII) e armazena o SINT_array[element_number];
resultado emSINT_array_size (tag DINT).
3. Defina String_tag[element_number] = o caractere em element_number := element_number + 1;
SINT_array[element_number].
4. Adicione 1 a element_number. Isto permite que o String_tag.LEN := element_number;
controlador verifique o SINT_array. If element_number = SINT_array_size then
5. Defina o membro Length de String_tag =
element_number. (Isto registra o número de caracteres exit;
em String_tag até agora.) end_if;
6. Se element_number = SINT_array_size, então pare.
(Você está no final do array e ele não contém um Until SINT_array[element_number] = 13
mecanismo de retorno.)
end_repeat;
7. Se o caractere em SINT_array[element_number] = 13
(valor decimal do mecanismo de retorno), então pare.
Caso contrário, vá para 3.

Publicação 1756-RM003F-PT-P - Maio 2002


24 Programação de Texto Estruturado

Comentários Para interpretar o texto estruturado de forma mais fácil, adicione


comentários a ele.
• Os comentários permitem que você use uma linguagem simples
para descrever como seu texto estruturado trabalha.
• Os comentários não afetam a execução do texto estruturado.

Para acrescentar comentários ao texto estruturado:

Para acrescentar um Use um desses formatos:


comentário:
em uma única linha //comment
ao final de uma linha do texto
(*comment*)
estruturado
/*comment*/
em uma linha do texto estruturado (*comment*)

/*comment*/
que ocupe mais de uma linha (*start of comment . . . end of
comment*)

/*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*)

IF Sugar.Low (*low level LS*)& Sugar.High (*high level


LS*)THEN...

(* Controla a velocidade de recirculação da bomba. A


velocidade depende da temperatura no tanque.*)
IF tank.temp > 200 THEN...
/*comment*/ Sugar.Inlet:=0;/*close the inlet*/

IF bar_code=65 /*A*/ THEN...

/* Obtém o número de elementos no array Inventory e


armazena o valor do tag Inventory_Items tag */
SIZE(Inventory,0,Inventory_Items);

Publicação 1756-RM003F-PT-P - Maio 2002


Índice

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

Publicação 1756-RM003F-PT-P - Maio 2002


2 Índice

Estrutura FBD_COUNTER 2-29 PID 12-20


estrutura FBD_LIMIT 4-27 RESULT 12-3, 12-10
estrutura FBD_LOGICAL 6-22, 6-25, SERIAL_PORT_CONTROL 16-2, 16-4,
6-28, 6-30 16-6, 16-8, 16-13, 16-16,
estrutura FBD_MASK_EQUAL 4-33 16-19, 16-23, 16-27
estrutura FBD_MASKED_MOVE 6-8 STRING 16-3, 17-2, 18-2
estrutura FBD_MATH 5-6, 5-9, 5-12, string 16-3, 17-2, 18-2
5-15, 5-19, 5-24, 14-7 TIMER 2-2, 2-5, 2-9
estrutura FBD_MATH_ADVANCED 5-21, examinar se desenergizado 1-4
5-26, 13-2, 13-4, 13-6, 13-8, Exclusão de String 17-5
13-10, 13-12, 14-2, 14-4, exponencial 14-6
15-2, 15-4 expressões
estrutura FBD_ONESHOT 1-18, 1-20 formato 4-4, 5-4, 7-16, 7-22
estrutura FBD_TIMER 2-13, 2-16, 2-19 Operadores válidos 5-3, 7-15
estrutura FBD_TRUNCATE 15-11 operadores válidos 4-4, 7-22
Estrutura MESSAGE 3-2 seqüência da operação 4-5, 7-23
estrutura PID 12-20 seqüência de operação 5-4, 7-16
estrutura RESULT 12-3, 12-10
Estrutura SERIAL_PORT_CONTROL
F
16-2, 16-4, 16-6, 16-8, 16-13,
16-16, 16-19, 16-23, 16-27 feedforward 12-34
estrutura STRING 16-3, 17-2, 18-2 fim temporário 10-16
estrutura TIMER 2-5 flags de status aritmético
estruturas
COMPARE 12-3, 12-10 overflow B-5
Contador 2-22
CONTROL 7-7, 7-17, 7-35, 7-40, G
7-45, 8-2, 8-5, 8-8, 8-14, grau 15-2
8-20, 8-26, 9-2, 9-6, 9-10
COUNTER 2-25
FBD_BIT_FIELD_DISTRIBUTE 6-14 I
FBD_BOOLEAN_AND 6-33 igual 4-7
FBD_BOOLEAN_NOT 6-40 Inserção de String 17-9
FBD_BOOLEAN_OR 6-35 instrução ABL 16-5
FBD_BOOLEAN_XOR 6-38 instrução ABS 5-26
FBD_COMPARE 4-8, 4-11, 4-15, instrução ACB 16-8
4-19, 4-23, 4-38 instrução ACL 16-10
FBD_CONVERT 15-6, 15-9 instrução ACS 13-10
FBD_COUNTER 2-29 instrução ADD 5-5
FBD_LIMIT 4-27 instrução AFI 10-22
FBD_LOGICAL 6-22, 6-25, 6-28, 6-30 instrução AHL 16-12
FBD_MASK_EQUAL 4-33 instrução AND 6-21
FBD_MASKED_MOVE 6-8 instrução ARD 16-15
FBD_MATH 5-6, 5-9, 5-12, 5-15, instrução ARL 16-18
5-19, 5-24, 14-7 instrução ASN 13-8
FBD_MATH_ADVANCED 5-21, 5-26, instrução ATN 13-12
13-2, 13-4, 13-6, 13-8, instrução AVE 7-35
13-10, 13-12, 14-2, 14-4, instrução AWA 16-22
15-2, 15-4 instrução AWT 16-26
FBD_ONESHOT 1-18, 1-20 instrução BRK 11-5
FBD_TIMER 2-13, 2-16, 2-19 instrução BSL 8-2
FBD_TRUNCATE 15-11 instrução BSR 8-5
Instrução RES 2-33 instrução BTD 6-11
MESSAGE 3-2 instrução BTDT 6-14

Publicação 1756-RM003F-PT-P - Maio 2002


Índice 3

instrução CLR 6-17 instrução LIM 4-26


instrução CMP 4-2 instrução LN 14-2
instrução CONCAT 17-3 instrução LOG 14-4
instrução COP 7-25 instrução LOWER 18-13
instrução COS 13-4 instrução MCR 10-18
instrução CPS 7-25 instrução MEQ 4-32
instrução CPT 5-2 instrução MID 17-11
Instrução CTD 2-25 instrução MOD 5-18
Instrução CTU 2-22 instrução MOV 6-3
Instrução CTUD 2-29 instrução MSG 3-13
instrução DDT Códigos de Erro 3-7
modo de busca 12-10 estrutura 3-2
operandos 12-9 método de comunicação 3-26
instrução de pausa de SFC 10-26 operando 3-2
instrução de reset SFC 10-28 instrução MUL 5-11
instrução DEG 15-2 instrução MVM 6-5
instrução DELETE 17-5 instrução MVMT 6-8
instrução DIV 5-14 instrução NEG 5-24
instrução do final da transição 10-24 instrução NEQ 4-37
instrução DTOS 18-7 instrução NOP 10-23
instrução DTR 12-16 instrução NOT 6-30
instrução EOT 10-24 instrução ONS 1-11
instrução EQU 4-7 instrução OR 6-24
instrução FAL instrução OSF 1-16
modo de operação 7-2 instrução OSFI 1-20
operandos 7-6 instrução OSR 1-14
instrução FBC instrução OSRI 1-18
modo de busca 12-3 instrução OTE 1-6
operandos 12-2 instrução OTL 1-7
instrução FFL 8-8 instrução OTU 1-9
instrução FFU 8-14 instrução PID
instrução FIND 17-7 ajuste 12-24
instrução FLL 7-31 alarmes 12-25
instrução FOR 11-2 bias de saída 12-34
instrução FRD 15-9 configuração 12-23
instrução FSC conversão de escala 12-25
modo de operação 7-2 feedforward 12-34
operandos 7-17 operandos 12-19
instrução GEQ 4-10 zona morta 12-33
instrução GRT 4-14 instrução RAD 15-4
Instrução GSV Instrução RES 2-33
objetos 3-30 Instrução RET 10-4, 11-6
Operandos Instrução RTO 2-9
3-29 Instrução RTOR 2-19
instrução INSERT 17-9 instrução RTOS 18-9
instrução JMP 10-2 instrução SBR 10-4
instrução JSR 10-4 instrução sempre falsa 10-22
instrução JXR instrução SFP 10-26
estrutura de controle 10-14 instrução SFR 10-28
Instrução LBL 10-2 instrução SIN 13-2
instrução LEQ 4-18 instrução SIZE 7-50
instrução LES 4-22 instrução SQI 9-2
instrução LFL 8-20 instrução SQL 9-10
instrução LFU 8-26 instrução SQR 5-21

Publicação 1756-RM003F-PT-P - Maio 2002


4 Índice

instrução SRT 7-40 ARD 16-15


instrução SSV ARL 16-18
objetos 3-30 AWA 16-22
operandos AWT 16-26
3-29 CONCAT 17-3
instrução STOD 18-3, C-12 DELETE 17-5
instrução STOR 18-5 DTOS 18-7
instrução SUB 5-8 FIND 17-7
instrução SWPB 6-18 INSERT 17-9
instrução TAN 13-6 LOWER 18-13
instrução TND 10-16 MID 17-11
instrução TOD 15-6 RTOS 18-9
instrução TOF 2-5 STOD 18-3, C-12
Instrução TOFR 2-16 STOR 18-5
instrução TON 2-2 SWPB 6-18
Instrução TONR 2-13 UPPER 18-11
instrução TRN 15-11 instruções binárias
instrução UID 10-20 introdução 1-1
instrução UIE 10-20 ONS 1-11
instrução UPPER 18-11 OSF 1-16
instrução XIO 1-4 OSFI 1-20
instrução XOR 6-27 OSR 1-14
instrução XPY 14-6 OSRI 1-18
Instruções OTE 1-6
for/break 11-1 OTL 1-7
seqüenciador 9-1 OTU 1-9
instruções XIO 1-4
array instruções da porta serial
bit 1-1 ABL 16-5
cálculo 5-1 ACB 16-8
Comparação 4-1 ACL 16-10
contador 2-1 AHL 16-12
controle do programa 10-1 ARD 16-15
conversão 15-1 ARL 16-18
conversão de ASCII 18-1 AWA 16-22
conversão de string 18-1 AWT 16-26
conversão matemática 15-1 introdução 16-1
deslocamento 8-1 instruções de arquivo. Veja as
entrada/saída 3-1 instruções de array
especiais 12-1 instruções de array
lógica 6-1 arquivo/miscelânea 7-1
manipulação de string 17-1 AVE 7-35
manipulação de string ASCII 17-1 BSL 8-2
matemática avançada 14-1 BSR 8-5
movimentação 6-1 COP 7-25
porta serial 16-1 CPS 7-25
porta serial ASCII 16-1 DDT 12-9
TIMER 2-1 deslocamento 8-1
trigonométricas 13-1 FAL 7-6
instruções ASCII FBC 12-2
ABL 16-5 FFL 8-8
ACB 16-8 FFU 8-14
ACL 16-10 FLL 7-31
AHL 16-12 FSC 7-17

Publicação 1756-RM003F-PT-P - Maio 2002


Índice 5

LFL 8-20 RAD 15-4


LFU 8-26 TOD 15-6
modo de operação 7-2 TRN 15-11
seqüenciador 9-1 instruções de conversão da string
SIZE 7-50 STOD C-12
SQI 9-2 SWPB 6-18
SQL 9-10 instruções de conversão de string
SQO 9-6 DTOS 18-7
SRT 7-40 Introdução 18-1
STD 7-45 LOWER 18-13
instruções de cálculo RTOS 18-9
ABS 5-26 STOD 18-3
ADD 5-5 STOR 18-5
CPT 5-2 UPPER 18-11
DIV 5-14 instruções de conversão matemática
formato da expressão 5-4, 7-16 DEG 15-2
introdução 5-1 FRD 15-9
MOD 5-18 Introdução 15-1
MUL 5-11 RAD 15-4
NEG 5-24 TOD 15-6
Operadores válidos 5-3, 7-15 TRN 15-11
seqüência da operação 5-4, 7-16 instruções de deslocamento
SQR 5-21 BSL 8-2
SUB 5-8 BSR 8-5
instruções de comparação FFL 8-8
CMP 4-2 FFU 8-14
EQU 4-7 Introdução 8-1
GEQ 4-10 LFL 8-20
GRT 4-14 LFU 8-26
Introdução 4-1 instruções de entrada/saída
LEQ 4-18 GSV 3-29
LES 4-22 Introdução 3-1
LIM 4-26 MSG 3-2
MEQ 4-32 SSV 3-29
NEQ 4-37 instruções de lógica
operadores válidos 4-4, 7-22 AND 6-21
instruções de controle do programa introdução 6-1
AFI 10-22 NOT 6-30
EOT 10-24 OR 6-24
Introdução 10-1 XOR 6-27
JMP 10-2 instruções de manipulação de string
JSR 10-4 CONCAT 17-3
LBL 10-2 DELETE 17-5
MCR 10-18 FIND 17-7
NOP 10-23 INSERT 17-9
RET 10-4 introdução 17-1
SBR 10-4 MID 17-11
TND 10-16 instruções de matemática avançada
UID 10-20 introdução 14-1
UIE 10-20 LN 14-2
instruções de conversão LOG 14-4
DEG 15-2 XPY 14-6
FRD 15-9 instruções de movimentação
Introdução 15-1 BTD 6-11

Publicação 1756-RM003F-PT-P - Maio 2002


6 Índice

BTDT 6-14 SIN 13-2


CLR 6-17 TAN 13-6
introdução 6-1 interrupção desabilitada 10-20
MOV 6-3 interrupção habilitada 10-20
MVM 6-5
MVMT 6-8
L
instruções de movimentação/lógica
BAND 6-33 label 10-2
BNOT 6-40 lançamento de dados B-2
BOR 6-35 leitura ASCII 16-15
BXOR 6-38 letra maiúsculas 18-11
instruções do array letra minúscula 18-13
RES 2-33 limite 4-26
instruções do contador limpeza do buffer ASCII 16-10
CTD 2-25 linha de leitura ASCII 16-18
CTU 2-22 linhas handshake ASCII 16-12
CTUD 2-29 Localização de String 17-7
introdução 2-1 LOG
RES 2-33 base 10 14-4
instruções do seqüenciador natural 14-2
introdução 9-1 log neperiano 14-2
SQI 9-2 logaritmo de base de 10 14-4
SQL 9-10
SQO 9-6 M
instruções do temporizador maior ou igual a 4-10
introdução 2-1 maior que 4-14
RES 2-33 mascarado igual a 4-32
RTO 2-9 máscaras 12-16
RTOR 2-19 média 7-35
TOF 2-5 menor ou igual a 4-18
TOFR 2-16 menor que 4-22
TON 2-2 mensagem 3-2
TONR 2-13 modo ALL 7-2
instruções especiais modo de busca 12-3, 12-10
DDT 12-9 modo de operação 7-2
DTR 12-16 modo incremental 7-4
FBC 12-2 modo numerical 7-3
Introdução 12-1 modos de temporização B-5
PID 12-19 monoestável 1-11
SFP 10-26 monoestável sensível à borda de
SFR 10-28 descida 1-16
instruções for/break monoestável sensível à borda de
BRK 11-5 descida com entrada 1-20
FOR 11-2 monoestável sensível à borda de subida
introdução 11-1 1-14
RET 11-6 monoestável sensível à borda de subida
instruções SQO 9-6 com entrada 1-18
instruções STD 7-45 movimentação 6-3
instruções trigonométricas movimentação com máscara com
ACS 13-10 arquivo-alvo 6-8
ASN 13-8 movimento com máscara 6-5
ATN 13-12 multiplicação 5-11
COS 13-4
introdução 13-1

Publicação 1756-RM003F-PT-P - Maio 2002


Índice 7

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

Publicação 1756-RM003F-PT-P - Maio 2002


8 Índice

Publicação 1756-RM003F-PT-P - Maio 2002


Códigos do Caractere ASCII

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

Publicação 1756-RM003F-PT-P - Maio 2002 1 PN 957707-68


Substitui Publicação1756-RM003E-PT-P - Novembro de 2001 Copyright © 2002 Rockwell Automation. Todos os direitos reservados. Impresso nos E.U.A.

Você também pode gostar