Você está na página 1de 50

Manual de Programao ST MasterTool Extended Edition MT8000

Rev. C 08/2010 Cd. Doc.: MP399003

altus

Condies Gerais de Fornecimento Nenhuma parte deste documento pode ser copiada ou reproduzida sem o consentimento prvio e por escrito da Altus Sistemas de Informtica S.A., que se reserva o direito de efetuar alteraes sem prvio comunicado. Conforme o Cdigo de Defesa do Consumidor vigente no Brasil, informamos, a seguir, aos clientes que utilizam nossos produtos aspectos relacionados com a segurana de pessoas e instalaes. Os equipamentos de automao industrial fabricados pela Altus so robustos e confiveis devido ao rgido controle de qualidade a que so submetidos. No entanto, equipamentos eletrnicos de controle industrial (controladores programveis, comandos numricos, etc.) podem causar danos s mquinas ou processos por eles controlados em caso de defeito em suas partes e peas ou de erros de programao ou instalao, podendo inclusive colocar em risco vidas humanas. O usurio deve analisar as possveis consequncias destes defeitos e providenciar instalaes adicionais externas de segurana que, em caso de necessidade, sirvam para preservar a segurana do sistema, principalmente nos casos da instalao inicial e de testes. Os equipamentos fabricados pela Altus no trazem riscos ambientais diretos, no emitindo nenhum tipo de poluente durante sua utilizao. No entanto, no que se refere ao descarte dos equipamentos, importante salientar que quaisquer componentes eletrnicos incorporados em produtos contm materiais nocivos natureza quando descartados de forma inadequada. Recomenda-se, portanto, que quando da inutilizao deste tipo de produto, o mesmo seja encaminhado para usinas de reciclagem que deem o devido tratamento para os resduos. imprescindvel a leitura completa dos manuais e/ou caractersticas tcnicas do produto antes da instalao ou utilizao do mesmo. Os exemplos e figuras deste documento so apresentados apenas para fins ilustrativos. Devido s possveis atualizaes e melhorias que os produtos possam incorrer, a Altus no assume a responsabilidade pelo uso destes exemplos e figuras em aplicaes reais. Os mesmos devem ser utilizados apenas para auxiliar na familiarizao e treinamento do usurio com os produtos e suas caractersticas. A Altus garante os seus equipamentos conforme descrito nas Condies Gerais de Fornecimento, anexada s propostas comerciais. A Altus garante que seus equipamentos funcionam de acordo com as descries contidas explicitamente em seus manuais e/ou caractersticas tcnicas, no garantindo a satisfao de algum tipo particular de aplicao dos equipamentos. A Altus desconsiderar qualquer outra garantia, direta ou implcita, principalmente quando se tratar de fornecimento de terceiros. Os pedidos de informaes adicionais sobre o fornecimento e/ou caractersticas dos equipamentos e servios Altus devem ser feitos por escrito. A Altus no se responsabiliza por informaes fornecidas sobre seus equipamentos sem registro formal. DIREITOS AUTORAIS Srie Ponto, MasterTool, Quark, ALNET e WebPLC so marcas registradas da Altus Sistemas de Informtica S.A. Windows, Windows NT e Windows Vista so marcas registradas da Microsoft Corporation.

Sumrio

Sumrio
1. INTRODUO ................................................................................................................................................. 1 Lite, Professional e Advanced .......................................................................................................................... 2 Documentos Relacionados a este Manual........................................................................................................ 2 Inspeo Visual .................................................................................................................................................. 3 Suporte Tcnico ................................................................................................................................................. 3 Mensagens de Advertncia Utilizadas neste Manual ..................................................................................... 3 2. DESCRIO TCNICA .................................................................................................................................. 4 Caractersticas de Software .............................................................................................................................. 4 Tipos de Dados ............................................................................................................................................ 4 Limites de Software .................................................................................................................................... 4 Operandos do CP......................................................................................................................................... 4 Operadores .................................................................................................................................................. 5 Comandos .................................................................................................................................................... 5 Itens no Implementados da Norma IEC 61131-3 ...................................................................................... 6 3. PROCEDIMENTOS ......................................................................................................................................... 7 Criando um Mdulo P ou F em Linguagem ST.............................................................................................. 7 Declarando Variveis Globais .......................................................................................................................... 8 Criando uma Funo para Implementar um Filtro ....................................................................................... 8 Escrevendo o Cdigo Principal PROGRAM para um Mdulo P ........................................................... 9 Escrevendo o Cdigo Principal PROGRAM para um Mdulo F ........................................................... 9 Operandos de Diagnstico ................................................................................................................................ 9 Operandos Temporrios ................................................................................................................................. 10 Verificando o Cdigo....................................................................................................................................... 11 Salvando o Cdigo ........................................................................................................................................... 11 Utilizando um Mdulo em ST ........................................................................................................................ 11 4. PROGRAMAO .......................................................................................................................................... 12 Estrutura de um Mdulo em Linguagem ST ................................................................................................ 12 Elementos da Linguagem ST .......................................................................................................................... 12 Identificadores ........................................................................................................................................... 13 Espao em Branco ..................................................................................................................................... 13 Comentrios .............................................................................................................................................. 13 Constantes Numricas ............................................................................................................................... 14 Constantes Booleanas................................................................................................................................ 15 Tipos de Dados ................................................................................................................................................. 15 Tipos de Dados Bsicos ............................................................................................................................ 15 Classificao dos Dados ............................................................................................................................ 15 Converso de Tipos ................................................................................................................................... 16 Variveis ........................................................................................................................................................... 19 Declarao de Variveis ............................................................................................................................ 19 Variveis Somente-Leitura........................................................................................................................ 19 Declarao de Vetores............................................................................................................................... 20 Iniciando as Variveis ............................................................................................................................... 20 Mapeando Variveis em Operandos Simples e Tabela ............................................................................. 20
ii

Sumrio Mapeando Vetores em Operandos Simples e Tabela ................................................................................ 21 Funes ............................................................................................................................................................. 22 Programa.......................................................................................................................................................... 23 Passagem de Parmetros ........................................................................................................................... 24 Passagem de Parmetros para um Mdulo F............................................................................................. 26 Sinais de Entrada e Sada do Mdulo........................................................................................................ 26 Varivel Interna de Controle ..................................................................................................................... 27 Regras de Escopo e Tempo de Vida ............................................................................................................... 28 Comandos ......................................................................................................................................................... 28 Expresses ................................................................................................................................................. 28 Constantes de Inteiros ............................................................................................................................... 31 Comando de Atribuio ............................................................................................................................ 31 Comando de Controle de Programa .......................................................................................................... 31 Comandos de seleo ................................................................................................................................ 31 Comandos de Repetio ou Iterao ......................................................................................................... 32 5. DEPURAO ................................................................................................................................................. 35 Mtodos de Depurao .................................................................................................................................... 35 Modo Ciclado ............................................................................................................................................ 35 Mquinas de estado ................................................................................................................................... 35 Erros em Tempo de Verificao ..................................................................................................................... 36 Erros em Tempo de Execuo ........................................................................................................................ 37 6. EXEMPLOS DE UTILIZAO ................................................................................................................... 40 Buffer de eventos ............................................................................................................................................. 40 Converso de valores....................................................................................................................................... 41 7. APNDICES .................................................................................................................................................... 43 Palavras Reservadas........................................................................................................................................ 43 8. GLOSSRIO ................................................................................................................................................... 44 Glossrio Geral ................................................................................................................................................ 44

iii

1. Introduo

1. Introduo
A linguagem ST (Structured Text) uma linguagem textual estruturada, de alto nvel, com recursos semelhantes s linguagens C e Pascal. Com ela pode-se escrever programas com os comandos IF, THEN, ELSE, laos FOR e WHILE, criar variveis locais e vetores, criar e chamar sub-rotinas, etc. Com possibilidade de acesso aos operandos do CP, tida como uma alternativa ao uso da linguagem grfica Ladder. Esta facilidade, programao em linguagem ST, fornecida com MasterTool XE Advanced, sendo disponibilizada para uso com a UCP AL-2004, bem como para as UCPs da Srie Ponto. Atravs desta linguagem possvel a criao de mdulos procedimento (mdulo P) e mdulos funo (mdulo F), conforme definido pela norma IEC-1131-3. Aps a criao, os mdulos ST possuem as mesmas caractersticas dos demais mdulos F ou P j existentes. O nmero de parmetros de entrada e sada pode ser configurado. A chamada do novo mdulo ST deve ser feita no programa aplicativo Ladder com a instruo CHF ou CHP, tal como j feita para os demais mdulos F e mdulos P. O mdulo criado em linguagem ST ainda pode ser lido de volta do CP para o micro. Neste caso, o programa fonte ST restaurado normalmente, inclusive com os comentrios. Existem senhas de proteo contra leitura e/ou modificao no autorizada, protegendo a tecnologia do desenvolvedor. O MasterTool XE implementa um subconjunto da Linguagem ST, sendo que engloba a maioria dos comandos e estruturas de dados e comandos definidos pela IEC-61131-3. O desempenho de execuo no CP de um mdulo ST melhor que um mdulo equivalente em ladder, pois o mdulo ST verificado como um todo, enquanto que em ladder ele dividido em vrias chamadas de instrues. Os principais benefcios da utilizao da linguagem ST so: Outra opo de linguagem de programao, padronizada por norma internacional Possibilidade da criao de algoritmos mais complexos e utilizao de software estruturado Linguagem textual em vez de grfica: pode-se usar copia/cola/substitui ou macros de editores de texto tradicionais Menor tempo de desenvolvimento, implicando em menor custo de engenharia Melhor desempenho de execuo A figura, a seguir, traz um exemplo de utilizao da Linguagem ST no MasterTool XE:

1. Introduo

Figura 1-1. Exemplo de utilizao da linguagem ST

Lite, Professional e Advanced


O software MasterTool XE, possui trs verses de distribuio, cada uma com um perfil otimizado de acordo com a necessidade. So elas: Lite: software programador especfico para pequenas aplicaes. Esta verso no suporta ST. Professional: software programador contendo as ferramentas necessrias para todas as linhas de CPs da Altus. Advanced: software programador com ferramentas para aplicaes de grande porte.

Cada uma destas verses possui caractersticas, finalidades e funcionalidades especficas para cada propsito. O detalhamento sobre as diferenas entre as verses pode ser visto no Manual de Utilizao do MasterTool XE.

Documentos Relacionados a este Manual


Para obter informaes adicionais sobre o uso da Linguagem ST podem ser consultados outros documentos (manuais e caractersticas tcnicas) alm deste. Estes documentos encontram-se disponveis em sua ltima reviso em www.altus.com.br. Cada produto possui um documento denominado Caracterstica Tcnica (CT), onde se encontram as caractersticas do produto em questo. Adicionalmente o produto pode possuir Manuais de Utilizao (os cdigos dos manuais so citados nas CTs). Aconselhamos os seguintes documentos como fonte de informao adicional: Caractersticas Tcnicas MT8000 Manual de Utilizao do MasterTool XE Manual de Programao do MasterTool XE
2

1. Introduo

Inspeo Visual
Antes de proceder instalao, recomendvel fazer uma inspeo visual cuidadosa dos produtos, verificando se no h danos causados pelo transporte. Deve ser verificado se todos os componentes de seu pedido esto em perfeito estado. Em caso de defeitos, informe a companhia transportadora e o representante ou distribuidor Altus mais prximo. importante registrar o nmero de srie de cada produto recebido, bem como as revises de software, caso existentes. Essas informaes sero necessrias caso se necessite contatar o Suporte Tcnico da Altus.

Suporte Tcnico
Para entrar em contato com o Suporte Tcnico da Altus em So Leopoldo, RS, ligue para +55-513589-9500. Para conhecer os centros de Suporte Tcnico da Altus existentes em outras localidades, consulte nosso site (www.altus.com.br) ou envie um e-mail para altus@altus.com.br. Se o equipamento j estiver instalado, tenha em mos as seguintes informaes ao solicitar assistncia: Os modelos dos equipamentos utilizados e a configurao do sistema instalado. O nmero de srie da UCP. A reviso do equipamento e a verso do software executivo, constantes na etiqueta afixada na lateral do produto. Informaes sobre o modo de operao da UCP, obtidas atravs do programador MasterTool. O contedo do programa aplicativo (mdulos), obtido atravs do programador MasterTool. A verso do programador utilizado.

Mensagens de Advertncia Utilizadas neste Manual


Neste manual, as mensagens de advertncia apresentaro os seguintes formatos e significados: PERIGO: Relatam causas potenciais, que se no observadas, levam a danos integridade fsica e sade, patrimnio, meio ambiente e perda da produo.

CUIDADO: Relatam detalhes de configurao, aplicao e instalao que devem ser seguidos para evitar condies que possam levar a falha do sistema e suas conseqncias relacionadas.

ATENO: Indicam detalhes importantes de configurao, aplicao ou instalao para obteno da mxima performance operacional do sistema.

2. Descrio Tcnica

2. Descrio Tcnica
Esta seo apresenta as caractersticas tcnicas do produto Editor ST.

Caractersticas de Software
Tipos de Dados Os tipos de dados disponveis so mostrados na tabela a seguir:
Descrio BOOL BYTE WORD DWORD USINT INT DINT REAL Booleano Seqncia de 8 bits Seqncia de 16 bits Seqncia de 32 bits Inteiro curto no sinalizado Inteiro Inteiro longo Real Bits 1 8 16 32 8 16 32 32 Operando do CP Associado Bit de %A, %E, %S ou %M Operando %A, %E ou %S Operando %M ou %TM Operando %I ou %TI Operando %A, %E ou %S Operando %M ou %TM Operando %I ou %TI Operando %F ou %TF

Tabela 2-1. Tipos de dados Uma varivel uma rea de memria que armazena um valor definido pelo seu tipo de dado. Todas as variveis devem ser declaradas antes de serem utilizadas. Seu escopo limitado funo ou ao programa em que foram declarados, permitindo que os nomes possam ser reutilizados em outras partes do software, sem que ocorra nenhum conflito. As variveis declaradas podem estar associadas a operandos do controlador programvel, possibilitando, assim, a criao de algoritmos para execuo do controle do processo industrial desejado. Limites de Software
Descrio Chamadas aninhadas de funes Tamanho do mdulo P ou F rea de dados para variveis Quantidade de funes 16 chamadas de funo At 32KB At 3KB1 O nmero de funes limitado pelo tamanho do mdulo.

Tabela 2-2. Limites de software Operandos do CP Um mdulo desenvolvido utilizando a Linguagem ST pode acessar os operandos do CP. A tabela, a seguir, apresenta os operandos do CP, bem como sua compatibilidade com a linguagem ST:

Para variveis declaradas entre VAR..END_VAR que no esto associadas a operandos do CP, e para variaveis internas alocadas automaticamente pelo MasterTool XE e utilizadas em operaes temporrias.
4

2. Descrio Tcnica
Tipo de Operando %A, %E e %S %M e %TM %I e %TI %F e %TF %D e %TD Pode ser acessado no ST ? Sim Sim Sim Sim No

Tabela 2-3. Tipos de operandos As variveis utilizadas nos mdulos ST devem estar declaradas antes de serem utilizadas. No se pode utilizar operandos do CP diretamente na funo ST, mas possvel mapear estes endereos nas variveis declaradas da funo. Operadores Os operadores de expresses aritmticas e lgicas em ST so semelhantes aos de outras linguagens, conforme mostra na tabela a seguir:
Tipo Matemticos Operadores + * / MOD Lgicos & AND OR XOR NOT Comparao < > <= >= Igualdade = <> Operao OU Operao OU exclusive Operao NO Menor que Maior que Menor ou igual Maior ou igual Igualdade Diferena Soma Subtrao Multiplicao Diviso Resto Operao E

Tabela 2-4. Operandos e expresses aritmticas Comandos A tabela, a seguir, apresenta os comandos da linguagem ST:
Tipo Repetio Comandos WHILE REPEAT FOR Seleo IF CASE

Tabela 2-5. Comandos da linguagem ST

2. Descrio Tcnica Itens no Implementados da Norma IEC 61131-3 Os itens listados, a seguir, fazem parte das definies existentes na norma IEC 61131-3 e no esto implementados neste produto: Tipos de dado SINT, UINT, UDINT, LREAL Tipos de dado TIME, DATE e STRING Enumerated, Sub-Range Arrays de mais de uma dimenso (matrizes) Structs Function Blocks Resource, Tasks, Configurations

3. Procedimentos

3. Procedimentos
Nesta seo apresentado exemplos de como gerar um mdulo procedimento ou um mdulo funo com o Editor ST. Em ambos, sero utilizados um programa de filtro digital que deve ser aplicado sobre trs operandos de entrada.

Criando um Mdulo P ou F em Linguagem ST


Depois de aberto o Master Tool XE e criado um novo projeto deve ser selecionada a opo no menu Mdulo /Novo. A seguinte tela ser mostrada.

Figura 3-1. Criando um mdulo ST Selecione uma das seguintes opes em "Tipo de Mdulo": Mdulo Funo ou Mdulo Procedimento. Na caixa de seleo "Linguagem" selecione "ST". O Editor ST ser executado e estar pronto para a edio do mdulo escolhido aps a seleo do boto OK. A seguir, um exemplo de uma possvel configurao para um novo mdulo de Funo na Linguagem ST:

3. Procedimentos

Figura 3-2. Criando um novo mdulo ST

Declarando Variveis Globais


Maiores detalhes sobre a declarao e os tipos de variveis podem ser encontrados na seo Programao, no captulo Variveis. Neste exemplo, so declaradas as constantes do filtro como constantes de uso global.
VAR CONSTANT TEMPO_FILTRO: TEMPO_AMOSTRAGEM: END_VAR REAL:=0.1; REAL:=0.02; (*Constante de tempo do filtro*) (*Perodo de amostragem*)

Criando uma Funo para Implementar um Filtro


Neste exemplo, so filtrados mais de um valor de entrada e para tanto se torna necessrio o uso de uma funo. O papel dessa funo aplicar um filtro cuja constante de tempo e o tempo de amostragem esto definidos como variveis globais. Trata-se de um filtro recursivo e, portanto, alm do valor de entrada (ENTRADA), necessrio um parmetro com o ltimo valor filtrado (SAIDA_ANTERIOR).
VAR CONSTANT TEMPO_FILTRO: TEMPO_AMOSTRAGEM: END_VAR FUNCTION FILTRAR: VAR_INPUT ENTRADA: SAIDA_ANTERIOR: END_VAR VAR FATOR_FILTRO: END_VAR (*Guarda a razo do tempo de amostragem pela constante de tempo do*) (*filtro em uma varivel local*) FATOR_FILTRO := TEMPO_AMOSTRAGEM/TEMPO_FILTRO; (*Aplica o filtro sobre a entrada*) FILTRAR := SAIDA_ANTERIOR + (ENTRADA - SAIDA_ANTERIOR)*FATOR_FILTRO; END_FUNCTION REAL; (*Varivel local para o fator do filtro*) REAL:=0.1; REAL:=0.02; REAL INT; REAL; (*Dado de entrada a ser filtrado*) (*Resultado anterior da filtragem*) (*Constante de tempo do filtro*) (*Perodo de amostragem*)

3. Procedimentos

Escrevendo o Cdigo Principal PROGRAM para um Mdulo P


O objetivo deste cdigo aplicar o filtro definido pelo funo FILTRAR sobre trs operandos de entrada (%M200, %M201 e %M202). Para tanto necessrio guardar os resultados obtidos na ltima filtragem e, como o resultado de cada chamada do filtro ser o resultado anterior na chamada seguinte, podem ser os mesmos operandos (%F0, %F1 e %F2).
PROGRAM FILTRO VAR ENTRADA_0 ENTRADA_1 ENTRADA_2 ULTIMO_RESULTADO_0 ULTIMO_RESULTADO_1 ULTIMO_RESULTADO_2 RESULTADO_0 RESULTADO_1 RESULTADO_2 END_VAR AT %M200: AT %M201: AT %M202: AT %F0: AT %F1: AT %F2: AT %F0: AT %F1: AT %F2: INT; INT; INT; REAL; REAL; REAL; REAL; REAL; REAL;

(*Aplica filtro sobre as entradas*) RESULTADO_0:=FILTRAR(ENTRADA_0, ULTIMO_RESULTADO_0); RESULTADO_1:=FILTRAR(ENTRADA_1, ULTIMO_RESULTADO_1); RESULTADO_2:=FILTRAR(ENTRADA_2, ULTIMO_RESULTADO_2); END_PROGRAM

Escrevendo o Cdigo Principal PROGRAM para um Mdulo F


No caso de mdulo F, pode-se declarar os operandos de entrada e sada atravs dos parmetros de entrada. Neste exemplo so 6 parmetros de entrada (%M200, %M201, %M202, %F0, %F1, %F2). Aqui surge uma caracterstica importante da passagem de parmetros, onde os trs primeiros operandos so operandos exclusivamente de entrada, mas os trs ltimos so operandos de entrada e sada porque, tratando-se de um filtro recursivo, o ltimo resultado ser utilizado como entrada da iterao seguinte. Todos devero ser declarados na rea de entrada da CHF e discriminados em entrada e/ou entrada e sada na respectiva declarao no mdulo ST. Para maiores detalhes vide o captulo Passagem de Parmetros para um Mdulo F na seo Programao.
PROGRAM FILTRO VAR_INPUT OP_ENTRADA_0: OP_ENTRADA_1: OP_ENTRADA_2: END_VAR VAR_IN_OUT OP_ENTRADA_SAIDA_0: OP_ENTRADA_SAIDA_1: OP_ENTRADA_SAIDA_2: END_VAR INT; INT; INT;

REAL; REAL; REAL;

(*Aplica filtro sobre as entradas*) OP_ENTRADA_SAIDA_0:=FILTRAR(OP_ENTRADA_0, OP_ENTRADA_SAIDA_0); OP_ENTRADA_SAIDA_1:=FILTRAR(OP_ENTRADA_0, OP_ENTRADA_SAIDA_1); OP_ENTRADA_SAIDA_2:=FILTRAR(OP_ENTRADA_0, OP_ENTRADA_SAIDA_2); END_PROGRAM

Operandos de Diagnstico
Os operandos de diagnsticos so utilizados para reportar ao usurio os erros em tempo de execuo. Os operandos podem ser configurados atravs do menu Mdulo / Operandos / Diagnstico. Caso os operandos no sejam configurados gerado erro de compilao. Os cdigos dos erros podem ser vistos na seo Erros em Tempo de Execuo. Para poder configurar os Operandos Temporrios, o mdulo ST deve estar aberto e ativo (o cursor deve estar ativo no mdulo).

3. Procedimentos

Figura 3-3. Janela de configurao dos operandos de diagnsticos Os operandos de diagnsticos podem ser os mesmos para todos mdulos ST.

Operandos Temporrios
Operandos temporrios so necessrios para resolver algumas operaes que utilizem variveis do tipo DINT e REAL. Sua configurao no obrigatria, mas se o compilador necessitar destes operandos ser gerado erro de compilao. Os operandos podem ser configurados atravs do menu Mdulo / Operandos / Temporrios. A quantidade mxima de operandos, se requerida, de 4 operandos. Para poder configurar os Operandos Temporrios, o mdulo ST deve estar aberto e ativo (o cursor deve estar ativo no mdulo).

Figura 3-4. Janela de configurao dos operandos temporrios Os operandos temporrios podem ser os mesmos para todos mdulos ST.

10

3. Procedimentos

Verificando o Cdigo
Antes de enviar o mdulo ao CP, o usurio deve verificar o programa, isto , certificar-se de que no existem erros de programao no mdulo. Para tanto deve utilizar o comando verificar do menu mdulo. Caso existam erros, estes sero mostrados na parte inferior da janela.

Salvando o Cdigo
Sempre que um cdigo escrito na linguagem ST for salvo em disco, ele ser verificado. O cdigo fonte sempre salvo no mdulo, mas se a verificao acusar erros nenhum cdigo executvel adicionado ao mdulo. ATENO: O MasterTool XE s permite enviar mdulos sem erros para o CP. Porm, nas verses anteriores ao MasterTool XE no executam esta consistncia, neste caso um mdulo com erro poder ser enviado para o CP. Todavia, devido ao erro de verificao, o mdulo no executar e ser gerado um erro em tempo de execuo.

Utilizando um Mdulo em ST
O mdulo ST utilizado da mesma forma que outro mdulo em ladder. Deve ser chamada a partir de outro mdulo ladder utilizando as instrues CHP (para mdulos P) ou as instrues CHF (para mdulos F).

Figura 3-5. Chamada do mdulo P escrito em ST

11

4. Programao

4. Programao
Este captulo descreve as regras para escrever um programa em linguagem ST, apresentando a sua sintaxe, regras semnticas e a estrutura do cdigo fonte.

Estrutura de um Mdulo em Linguagem ST


Um mdulo em linguagem ST composto por: Variveis globais (no obrigatria) Funes (no obrigatria) Programa principal

Sua estrutura bsica deve assumir a seguinte forma:

INCIO DO TEXTO

O programa ST pode ter vrias declaraes de variveis globais, ou nenhuma declarao.

VAR...END_VAR

O programa ST pode ter vrias funes, ou nenhuma funo. FUNCTION...END_FUNCTION

obrigatrio ter uma declarao de programa. Este o cdigo que ser executado quando o mdulo for chamado pelo ladder.

PROGRAM...END_PROGRAM

FIM DO TEXTO

Figura 4-1. Estrutura de um programa em linguagem ST

Elementos da Linguagem ST
Os elementos da Linguagem ST so todos os smbolos, nmeros, operadores e outras pontuaes utilizadas pela linguagem e que no podem ser textualmente divididos. Os elementos da linguagem ST so: Identificadores Constantes numricas
12

4. Programao Constantes booleanas Espao em branco Comentrios Operadores e outros sinais de pontuao

A tabela, a seguir, mostra algumas notaes utilizados para definir os elementos;


Letra Digito digito binrio digito octal digito hexadecimal qualquer letra de a a z, maiscula ou minscula qualquer digito de 0 a 9 qualquer digito de 0 a 1 qualquer digito de 0 a 7 qualquer digito de 0 a 9, ou qualquer letra a a f, maiscula ou minscula

Tabela 4-1. Notaes para representar valores e dados Identificadores Um identificador usado para nomear diferentes elementos dentro da linguagem, sendo um elemento nico dentro do seu escopo. formado por letras, nmeros e pelo caractere subscrito (_). Deve comear por letra ou pelo caractere subscrito, mas no pode ter dois caracteres de subscrito consecutivos e tambm no pode terminar com o caractere de subscrito. Apenas os primeiros 32 caracteres da seqncia tero significado os demais sero ignorados. O uso de letras maisculas ou minsculas no tem significado no identificador, ou seja, Nivel_Vaso1, nivel_vaso1 ou Nivel_vaso1 so identificadores considerados iguais. A tabela, a seguir, traz alguns exemplos de indicadores vlidos e invlidos:
Identificadores vlidos

Identificadores invlidos

EstadoBomba ALM_PresaoAlta B1_ATIVADA _1001_1 testePressao __Teste Bomba__B3214 Valvula-125201 154_Ligar Pressao_

Tabela 4-2. Identificadores ATENO: Um identificador pode ter at 32 caracteres. Os caracteres acima deste limite sero desconsiderados, ou seja, no so significativos. O nome do identificador no sensvel a letras maisculas e minsculas. Espao em Branco Os caracteres de espao, tabulao e quebra de linha so considerados espao em branco, ou seja, podem ser utilizados livremente entre os demais elementos da Linguagem ST. Comentrios Comentrios no cdigo fonte devem ser feitos entre (* e *). Podem ser comentadas vrias linhas com o mesmo bloco. Contudo no permitido o uso de comentrios aninhados como: "(* ... (* ... *) ... *)".
13

4. Programao Constantes Numricas Existem dois tipos de constantes: inteiras e reais. Em ambos os casos, um nmero pode conter diversos caracteres de subscritos dentro dele. Este caractere no possui significado, servindo apenas para tornar o nmero mais legvel. Porm o caractere de subscrito no poder iniciar e nem terminar um nmero, sendo que tambm no permitido o uso de dois caracteres de subscritos juntos.
Um nmero inteiro tambm pode ser expresso em base binria, octal ou hexadecimal. Para isto deve ser utilizado um dos prefixos 2#, 8# e 16# antes do nmero, conforme pode ser visto nos exemplos abaixo: 2#0000_1001 2#1111_1111 8#457 16#00AA 16#8000 (* (* (* (* (* Constante Constante Constante Constante Constante binria igual a 9 *) binria igual a 255 *) octal igual a 303 *) hexadecimal igual a 170 *) hexadecimal igual a 32768 *)

A tabela, a seguir, traz alguns exemplos de literais numricos vlidos e invlidos:


Exemplo
Literais numricos vlidos

Valor em decimal 12547 10531 -1532 6978 9 76 1 303 3244 1165405007 2550840909 4294967295

Literais numricos invlidos

12547 10_531 -1_532 6978 2#0000_1001 2#01001100 2#001 8#457 8#6254 16#4576_ab4f 16#980ABE4D 16#FFFF_ffff _1546 4578_ -_5447 10__135 #0010001 2#4577_0158#00159 16#_1789 16#4587_

Tabela 4-3. Literais numricos Literais numricos reais contm o ponto decimal . entre a parte inteira e fracionria. Opcionalmente, pode-se especificar o expoente da base 10 utilizando os prefixos E ou e. Caso isto no seja informado, ser ento considerado o valor 0 (zero). A tabela abaixo traz exemplos destes literais numricos:
Literais numricos vlidos

Literais numricos invlidos

-1.34E-2 1.0e+6 1.234E6 1_254.4879 1.34E-2.10 e +6 _254.4879

Tabela 4-4. Literais numricos com base decimal

14

4. Programao Constantes Booleanas Para constantes booleanos podem ser usadas as palavras reservadas TRUE ou FALSE; ou seus equivalentes numricos 1 ou 0.

Tipos de Dados
O tipo de dados define a forma que os dados podem ser armazenados na memria do CP. Esta seo define os tipos de dados possveis e tambm as funes de converso aplicveis de um tipo para outro. Tipos de Dados Bsicos A linguagem ST utiliza os tipos definidos pela tabela a seguir:
Tipo BOOL BYTE WORD DWORD USINT INT DINT REAL Descrio Booleano Seqncia de 8 bits Seqncia de 16 bits Seqncia de 32 bits Short integer Integer Double integer Real Bytes 1 1 2 4 1 2 4 4 Faixa FALSE, TRUE, 1 ou 0. Nota 1 Nota 1 Nota 1 0 .. 255 - 32.768 .. 32.767 -2.147.483.648 .. 2.147.483.647 10 38 Nota 2

Tabela 4-5. Tipos bsicos de dados


Nota 1: Faixa numrica no aplicvel para os tipos BYTE, WORD e DWORD. Nota 2: O ponto flutuante com preciso simples definido pela norma IEC 559 (IEEE 754).

Classificao dos Dados Os diversos tipos de dados so classificados em grupos e respeitando uma hierarquia. Mais adiante ser visto que o uso de operadores normalmente estar limitado para determinados tipos de um mesmo grupo.

Figura 4-2. Classificao dos dados

15

4. Programao Converso de Tipos As variveis podem ser convertidas para outro formato atravs das funes de converso de tipo. As converses de um tipo para outro podem ocorrer de maneira implcita, onde o verificador insere a funo de converso automaticamente; ou de maneira explcita, onde o usurio deve inserir a funo de converso. As funes de converso de tipo utilizam o formato:
<tipo origem>_TO_<tipo destino>( <valor para converter> )

As converses implcitas entre tipos so possveis desde que no ocorra risco de perda de informao e que haja uma compatibilidade entre os tipos. A figura, a seguir, apresenta todas as converses implcitas possveis entre dois tipos:

Figura 4-3. Converses implcitas A tabela, a seguir, demonstra as operaes realizadas na converso de tipos. Observa-se que mesmo as converses implcitas possuem funes de converso para o caso de converso antes de uma operao matemtica cujo resultado requeira maior resoluo numrica.

16

4. Programao
Origem Destino BYTE WORD DWORD BOOL USINT INT DINT REAL BOOL Se a origem for igual a zero o destino ser FALSE, caso contrrio ser TRUE. O destino receber o valor na faixa de 0 a 255. Se origem for TRUE o destino ser igual a 1. Se origem igual FALSE o destino ser igual a 0. Comentrio Converso Explcita Explcita Explcita Explcita Explcita Explcita Explcita Explcita Funo BOOL_TO_BYTE BOOL_TO_WORD BOOL_TO_DWORD BOOL_TO_USINT BOOL_TO_INT BOOL_TO_DINT BOOL_TO_REAL BYTE_TO_BOOL

USINT BYTE WORD DWORD INT DINT REAL BOOL BYTE WORD USINT INT DWORD DINT REAL BOOL BYTE USINT DWORD WORD INT DINT

Explcita Implcita

BYTE_TO_USINT BYTE_TO_WORD BYTE_TO_DWORD BYTE_TO_INT BYTE_TO_DINT BYTE_TO_REAL WORD_TO_BOOL WORD_TO_BYTE WORD_TO_USINT WORD_TO_INT WORD_TO_DWORD WORD_TO_DINT WORD_TO_REAL DWORD_TO_BOOL DWORD_TO_BYTE DWORD_TO_USINT DWORD_TO_WORD DWORD_TO_INT DWORD_TO_DINT

Converte o valor absoluto da origem para formato do destino. Os valores permanecero inalterados.

Implcita Explcita Explcita Explcita

Se a origem for igual a zero o destino ser FALSE, caso contrrio ser TRUE. O destino receber o byte menos significativo da origem. O destino receber o valor na faixa de 32768 a 32767, podendo assumir valores negativos. Converte o valor absoluto da origem para formato do destino. Os valores permanecero os mesmos. Se a origem for igual a zero o destino ser FALSE, caso contrrio ser TRUE. O destino receber o byte menos significativo da origem. O destino receber o word menos significativo da origem O destino receber a forma binria da origem, podendo assumir valores negativos. A converso para REAL ocorre com perda de resoluo numrica (apenas para valores com mdulo maior que 16777215) Se a origem for igual a zero o destino ser FALSE, caso contrrio ser TRUE. O destino recebe a forma binria da origem. Converte o valor absoluto da origem para formato do destino. Os valores permanecero os mesmos. Se a origem for igual a zero o destino ser FALSE, caso contrrio ser TRUE. O destino receber o byte menos significativo da origem.

Explcita Explcita Explcita Explcita Implcita Explcita Explcita Explcita Explcita Explcita Explcita Explcita Explcita

REAL

Explcita

DWORD_TO_REAL

BOOL BYTE USINT WORD DWORD INT DINT REAL BOOL INT BYTE USINT

Explcita Explcita Explcita Explcita Implcita Implcita Explcita Explcita Explcita Explcita

USINT_TO_BOOL USINT_TO_BYTE USINT_TO_WORD USINT_TO_DWORD USINT_TO_INT USINT_TO_DINT USINT_TO_REAL INT_TO_BOOL INT_TO_BYTE INT_TO_USINT

17

4. Programao
Origem Destino WORD Comentrio O destino recebe a forma binria da origem. O destino recebe a forma binria da origem. Caso a origem seja um nmero negativo o word mais significativo receber o valor 0xFFFF. Converte o valor absoluto da origem para formato do destino. Os valores permanecero os mesmos. Se a origem for igual a zero o destino ser FALSE, caso contrrio ser TRUE. O destino receber o byte menos significativo da origem. O destino recebe a forma binria do word menos significativo da origem. O destino recebe a forma binria da origem. O destino receber o valor inteiro da origem. REAL A converso para REAL ocorre com perda de resoluo numrica para valores com mdulo maior que 16777215. Se a origem for igual a zero o destino ser FALSE, caso contrrio ser TRUE. A origem passa por uma converso intermediria para DINT. WORD Vide converso de DINT para os demais tipos. Converte o valor absoluto da origem para o destino. INT Valores fora da faixa numrica sero saturados nos limites numricos do INT (-32768 a 32767). O destino receber o valor inteiro da origem. DINT Valores fora da faixa numrica sero saturados nos limites numricos do DINT (-2147483648 a 2147483647). Explcita REAL _TO_DINT Explcita REAL _TO_INT Explcita REAL _TO_WORD Explcita DINT_TO_REAL Converso Explcita Funo INT_TO_WORD

DWORD

Explcita

INT_TO_DWORD

DINT REAL BOOL BYTE USINT WORD DINT INT DWORD

Implcita Implcita Explcita Explcita Explcita Explcita Explcita Explcita

INT_TO_DINT INT_TO_REAL DINT_TO_BOOL DINT_TO_BYTE DINT_TO_USINT DINT_TO_WORD DINT_TO_INT DINT_TO_DWORD

BOOL

Explcita

REAL_TO_BOOL

REAL

Tabela 4-6. Operaes realizadas nas converses de tipos Paralelamente a essas operaes de converses ainda existem funes capazes de converter qualquer tipo de entrada para um tipo especifico. Estas funes de converso de tipo utilizam o formato:
ANY_TO_<tipo destino>( <valor para converter> )

ATENO: A converso de varveis do tipo REAL para qualquer varivel do tipo ANY_INT utilizando as funes de converso de tipo, sempre ser passado a parte inteira da varivel REAL. Estas funes no realizam arredondamento.

18

4. Programao

Variveis
Uma varivel uma rea de memria que armazena um tipo de dado da linguagem, estes dados so definidos como Tipos de Dados Bsicos. Todas as variveis devem ser declaradas antes de serem utilizadas. Declarao de Variveis Toda declarao de variveis deve ser feita entre as palavras reservadas VAR e END_VAR. Cada declarao pode conter diversas variveis, separadas por vrgula. Neste caso, todas sero de um mesmo tipo.
VAR <Var1>, <Var2>, ... , <VarM> : <tipo1>; <VarN>, <VarO>, ... , <VarZ> : <tipoN>; END_VAR

As variveis so sempre iniciadas automaticamente com o valor padro, conforme a tabela a seguir. Somente as variveis mapeadas em operandos do CP no so iniciadas automaticamente.
Tipo de dado BOOL USINT, INT, DINT BYTE, WORD, DWORD REAL Valor inicial padro FALSE ou 0 0 0 0.0

Tabela 4-7. Valor de inicial das variveis Variveis Somente-Leitura Uma varivel declarada como somente leitura s aceita atribuio de valor na sua declarao. Qualquer outra atribuio durante o cdigo ir gerar erro em tempo de verificao. A declarao de variveis somente-leitura, tambm conhecidas como variveis constantes, so feitas atravs da clusula CONSTANT, conforme mostrado abaixo:
VAR CONSTANT <Var1>, <Var2>, ... , <VarM> : <tipo1>; <VarN>, <VarP>, ... , <VarZ> : <tipoN>; END_VAR

A aplicao destas variveis ocorre quando se torna necessrio mapear uma varivel do CP dentro do mdulo ST e que no possa sofrer operaes de escrita dentro destes. Outra aplicao ocorre quando se deseja substituir constantes numricas por smbolos e concentrar em um s lugar os valores associados a eles. O exemplo, a seguir, mostra uma simples aplicao de variveis do tipo CONSTANT:
VAR CONSTANT INI : INT := 1; FIM : INT := 100; END_VAR VAR VETOR NIVEL AT %F0030 I END_VAR FOR I := INI TO FIM DO VETOR[ I ] := REAL_TO_INT( NIVEL * 100); END_FOR; : ARRAY[1..100] OF INT; : REAL; : INT;

19

4. Programao Declarao de Vetores Vetores so declarados usando-se a clusula ARRAY. Os limites inferiores e superiores podem ser livremente especificados. Isto , possvel a definio de um vetor de 10 elementos, sendo que o primeiro elemento acessado pelo ndice 14 e o ltimo por 23, por exemplo. Estes vetores podem ser indexados atravs de qualquer expresso do tipo USINT, INT ou DINT, desde que seja positivo. O nmero mximo de elementos est limitado apenas pelo tamanho da rea de dados (3 Kbytes).
VAR <vetor1> : ARRAY [ <limite_inferior> .. <limite_superior> ] OF <tipo>; <vetor2> : ARRAY [ <limite_inferior> .. <limite_superior> ] OF <tipo>; END_VAR

Uma declarao de vetor onde o limite superior seja menor que o limite inferior ou onde o limite inferior seja menor que zero ir causar um erro de verificao. Iniciando as Variveis Variveis podem ser iniciadas com um valor diferente do padro colocando este valor depois do tipo como mostrado a seguir:
VAR <nome da varivel> : <tipo> := <valor inicial>; END_VAR

Um vetor tambm pode ser iniciado na declarao. Neste caso, os valores so escritos em seqncia e devem ser separados por vrgula.
VAR Vetor : ARRAY [1..10] OF INT := [ 11, 12, 13, 0, 0, 0, 0, 18, 19, 20 ]; END_VAR

Isto equivale a:
Vetor[ Vetor[ Vetor[ Vetor[ Vetor[ Vetor[ Vetor[ Vetor[ Vetor[ Vetor[ 1 ] := 11; 2 ] := 12; 3 ] := 13; 4 ] := 0; 5 ] := 0; 6 ] := 0; 7 ] := 0; 8 ] := 18; 9 ] := 19; 10 ] := 20;

Mapeando Variveis em Operandos Simples e Tabela Todas as variveis so alocadas pelo verificador em uma rea de dados reservada para o uso de mdulos P e F. Como esta rea de memria destruda no final da chamada do mdulo todos os valores das variveis tambm so. O mapeamento de variveis em operandos %M permite manter o valor da varivel entre as chamadas do mdulo. Da mesma forma, permite acessar os operandos dentro do CP utilizados por outros mdulos. possvel mapear operandos %E, %S, %A, %M, %F, %I, %TM, %TF e %TI. Todo mapeamento feito na declarao de variveis com a clusula AT. Por mapear um endereo global para todos os mdulos de programao do CP, esta operao tem as seguintes restries: S poder ser usado dentro de VAR. Variveis declaradas com mapeamento de operandos no so automaticamente iniciadas com seu valor padro, mas podem ser iniciadas explicitamente. O uso da palavra reservada CONSTANT ser permitido, e serve para indicar que a varivel no ser modificada no decorrer do programa. obrigatrio o uso do sinal % antes do operando.
20

4. Programao Abaixo segue a sintaxe da declarao:


VAR <varivel> AT <operando_CP> : <tipo> ; END_VAR

Os tipos permitidos na declarao devem ser compatveis com os operandos. A tabela, a seguir, demonstra as possveis associaes entre operandos e tipos:
Operando %M.x, %A.x, %E.x e %S.x %A, %E e %S %M ou %TM %I ou %TI %F ou %TF Tipos permitidos BOOL USINT ou BYTE INT ou WORD DINT ou DWORD REAL

Tabela 4-8. Associao de tipos com operandos do CP Tambm possvel associar bit de operando para uma varivel do tipo BOOL. Os operandos permitidos so: %E, %S, %A e %M. Neste caso o mapeamento feito para um operando do tipo BOOL. A seguir, so mostrados alguns exemplos de mapeamentos permitidos: Mapeamentos para BOOL:
VAR PRESSAO_ALTA DIPARA_ECR ENTRADA SAIDA END_VAR AT AT AT AT %M0006.6 %A0006.6 %E0010.5 %S0008.7 : : : : BOOL; BOOL := FALSE; BOOL; BOOL;

Mapeamentos para INT e WORD:


VAR NIVEL TEMPERATURA ALARMES END_VAR AT %M0123: INT; AT %TM010[15]: INT; AT %M1432: WORD;

Todos os mapeamentos de operandos sero verificados durante a execuo do mdulo para que se tenha certeza de que este operando foi declarado no mdulo C. Caso ele no exista, gerado um erro em tempo de execuo, conforme descrito na Tabela 5-2. Mapeando Vetores em Operandos Simples e Tabela Tambm possvel mapear vetores para operandos do CP utilizando conjuntamente as clusulas AT e ARRAY. Podem ser mapeados blocos de operandos simples, operandos tabela inteiros ou partes de operandos tabela. Como no mapeamento de variveis, no mapeamento de vetores o tipo do vetor deve ser compatvel com o tipo do operando conforme a Tabela 4-5. A seguir so citados exemplos de diferentes mapeamentos de vetores em operandos:
VAR (*Declarando um vetor de 150 posies no bloco de operandos M1000 a M1149*) ALARMES AT %M1000 : ARRAY[ 1..150 ] OF WORD; (*Declarando um vetor de 100 posies no bloco de operandos %TM200[000] a %TM200[099]. obrigatrio fornecer a posio inicial da tabela. *) PRESSOES AT %TM200[000] : ARRAY[ 1..100 ] OF INT; (*Declarando um vetor de 50 posies no bloco de operandos %TM030[050] a %TM030[099]. *)

21

4. Programao
SILOS AT %TM030[050] : ARRAY[ 1..50 ] OF INT; END_VAR

Nos mapeamentos de operandos, todo o bloco deve estar declarado no mdulo C do CP. Da mesma forma um vetor mapeado em operando tabela deve estar totalmente contido no operando tabela mapeado. Caso alguma destas condies seja falsa gerado um erro em tempo de execuo. Observao: Vetores mapeados em operandos no podem ser do tipo BOOL.

Funes
Uma funo uma rotina que pode ser executada diversas vezes. A utilizao principal das funes permitir uma maior modularidade para um programa. Uma funo declarada da seguinte forma:
INCIO DO TEXTO

A declarao da funo deve conter um nome e o tipo de retorno. FUNCTION <Nome> : <Tipo> A funo deve conter pelo menos um parmetro de entrada declarado dentro do bloco VAR_INPUT...END_VA R A funo pode ter vrias declaraes de variveis internas, ou nenhuma declarao.

VAR_INPUT...END_VAR

VAR...END_VAR

obrigatrio ter pelo menos um comando no cdigo da funo.

Comandos

END_FUNCTION

FIM DO TEXTO

Figura 4-4. Estrutura do texto para definir uma funo Antes que a funo retorne rotina que a chamou, deve ser configurado um valor de retorno. Esta operao pode ser feita atribuindo-se um valor para o nome da funo. O valor de retorno pode ser atribudo em diversas partes dentro do bloco de comandos e pode ser feito mais de uma vez.
FUNCTION FUNCAO1 : INT VAR_INPUT A : INT; END_VAR

22

4. Programao
FUNCAO1 := A * 2; END_FUNCTION

Os parmetros de entrada devem ser especificados entre as palavras reservadas VAR_INPUT e END_VAR. A ordem que os parmetros forem especificados determina a ordem em que estes devem ser passados para a funo. Os parmetros de entrada no podem ser mapeados em operandos do CP ou serem definidos como vetores. Uma funo pode chamar outras funes definidas pelo usurio. Porm, a chamada da mesma funo recursivamente no permitida e gera um erro em tempo de verificao. O limite de chamadas aninhadas de funes de 16 chamadas, ou seja, a partir do programa principal, somente podem ser chamadas 16 funes conforme mostrado na figura a seguir:

Figura 4-5. Limite de chamadas aninhadas de funes

Programa
O programa a rotina de cdigo onde comea a execuo do mdulo. Um programa pode acessar todas as variveis globais e funes definidas no mdulo. declarado da seguinte forma:

23

4. Programao
INCIO DO TEXTO

A declarao da funo deve conter um. PROGRAM <Nome>

O programa pode conter um ou mais parmetros de entrada declarada dentro do bloco VAR_INPUT...END_VAR. O programa pode conter um ou mais parmetros de entrada e sada declarado dentro do bloco VAR_IN_OUT...END_VAR. O programa pode conter um ou mais parmetros de sada declarada dentro do bloco VAR_OUTPUT... END_VAR.

VAR_INPUT...END_VAR

VAR_IN_OUT...END_VAR

VAR_OUTPUT...END_VAR

O programa pode ter vrias declaraes de variveis internas, ou nenhuma declarao. obrigatrio ter pelo menos um comando no cdigo do programa.

VAR...END_VAR

Comandos

END_PROGRAM

FIM DO TEXTO

Figura 4-6. Estrutura do texto para definir uma funo Passagem de Parmetros Sempre que se estiver programando um mdulo F, possvel a passagem de parmetros de entrada e sada. Estes so passados pela instruo de ladder e esto limitadas as quantidades de parmetros permitidas pela instruo, sendo um total de 10 parmetros de entrada para entrada e/ou entrada-sada e mais 10 parmetros de sada.

24

4. Programao
Declarao VAR_INPUT VAR_IN_OUT VAR_OUTPUT Descrio Parmetros de entrada. Podem apenas ser lidos. Parmetros de entrada e sada. Podem ser lidos e escritos. Parmetros de sada. Podem ser apenas escritos. CHF - Chamada de mdulo F Os primeiros n parmetros de entrada. Os ltimos n parmetros de entrada. Os parmetros de sada.

Tabela 4-9. Tipos de parmetros A figura, a seguir, demonstra a associao entre as variveis de entrada e sada de uma CHF com os tipos de variveis utilizadas no mdulo ST.

Figura 4-7. Relao entre entradas e sadas da CHF com operandos do mdulo ST Todos os parmetros so passados por valor, podendo estes ser operandos tabela, blocos de operandos simples. As regras para consistncia das passagens de parmetros so mostradas a seguir e qualquer violao ir gerar um erro em tempo de execuo: Os parmetros devem ser passados para tipos equivalentes conforme a Tabela 4-8. Operandos constantes, %KM, %KI e %KF, s podem estar relacionados VAR_INPUT e somente para variveis simples, no podendo ser vetor. No pode ser passado subdiviso de operandos como bit, nible, byte ou word. Operandos tabela podem estar relacionados somente a vetor. Um vetor deve estar relacionado a um operando tabela ou a um bloco de operandos simples, onde a primeira posio do vetor o operando passado na CHF. Todos os operandos passados por parmetros devem estar declarados. Todos os operandos relacionados a vetor devem estar declarados, sendo que isto inclui o tamanho completo do vetor. A Tabela 4-9 representa a declarao dos operandos de entrada e sada para a seguinte declarao de variveis em um mdulo ST.
(*Lembrando que este exemplo possvel somente de ser executado em mdulos F, pois este permite variveis de entrada. Se for executado em mdulos P apresentar erros de verificao.*) PROGRAM TESTE VAR_INPUT OP_INPUT0: OP_INPUT1: OP_INPUT2: END_VAR VAR_IN_OUT OP_IN_OUT0: OP_IN_OUT1: OP_IN_OUT2: END_VAR VAR_OUTPUT OP_OUTPUT0: OP_OUTPUT1: OP_OUTPUT2: OP_OUTPUT3: OP_OUTPUT4: OP_OUTPUT5:

ARRAY[ 1..100 ] OF INT; INT; INT;

REAL; REAL; REAL;

ARRAY[ 1..10 ] OF INT; INT; INT; REAL; REAL; REAL;

25

4. Programao
END_VAR ; END_PROGRAM

Passagem de Parmetros para um Mdulo F Um mdulo F programado em linguagem ST possibilita a passagem de parmetros dos tipos VAR_INPUT, VAR_IN_OUT e VAR_OUT. As variveis do tipo VAR_INPUT e VAR_IN_OUT so declaradas no campo Entrada... enquanto que as variveis do tipo VAR_OUT so declaradas no campo Sada..., da CHF. A distino entre variveis de entrada e variveis de entrada e sada feita no momento da declarao das variveis no mdulo ST. O exemplo abaixo descreve a declarao das variveis de um mdulo F com trs variveis de entrada, duas variveis de entrada e sada e duas variveis de sada. Neste caso, devem ser declaradas na CHF cinco variveis no campo Entrada e duas variveis no campo Sada.
PROGRAM <nome VAR VAR_0: VAR_1: VAR_2: END_VAR do programa> INT; INT; INT;

VAR_IN_OUT VAR_IN_OUT_0: VAR_IN_OUT_1: END_VAR VAR_OUTPUT VAR_OUT_0: VAR_OUT_1: END_VAR <corpo do programa> END_PROGRAM

REAL; REAL;

INT; INT;

No final da execuo do mdulo ST os operandos do tipo VAR_IN_OUT so copiados para seus respectivos operandos de origem. ATENO: Somente parmetros do tipo VAR_INPUT podem ser associados operandos constantes (%KM, %KI, %KF) atravs dos parmetros de entrada da CHF. Sinais de Entrada e Sada do Mdulo Dentro do escopo de PROGRAM, existem at seis variveis do tipo BOOL pr-declaradas referentes aos sinais de entrada e sada das instrues CHF e CHP. A figura, a seguir, apresenta esta associao:

Figura 4-8. Sinais de entrada e sada dos mdulos As variveis INPUT1, INPUT2 e INPUT3 so somente leitura. O valor de cada varivel corresponde ao valor da entrada da instruo CHF ou CHP no ladder.

26

4. Programao ATENO: Para o programa ser executado necessrio que a primeira entrada da instruo CHF e CHP esteja habilitada. J as variveis OUTPUT1, OUTPUT2 e OUTPUT3 so somente escrita. A varivel OUPUT1 iniciada com TRUE enquanto as demais so iniciadas com FALSE. Caso ocorra um erro em tempo de execuo, a varivel OUTPUT1 colocada em FALSE, independente do que o usurio j tenha escrito nela.
PROGRAM SOMADOR VAR_INPUT I ,J : INT; END_VAR VAR Soma : INT; END_VAR (* Entrada 2 da funo define se a soma deve ser duplicada ou quadruplicada *) IF INPUT2 THEN Soma := (I + J) * 2; ELSE Soma := (I + J) * 4; END_IF; (* A sada da funo ser desenergizada se houver um estouro nas operaes acima *) IF INTERNAL_OVERFLOW THEN OUTPUT1 := FALSE; ELSE OUTPUT1 := TRUE; END_IF; END_PROGRAM

Varivel Interna de Controle INTERNAL_OVERFLOW Indica que ocorreu um estouro positivo ou negativo da na ltima operao aritmtica do tipo soma, subtrao, multiplicao, negao ou da funo EXPT.
PROGRAM SOMADOR VAR_INPUT I ,J, K : INT; END_VAR VAR TEMP ,SOMA : INT; END_VAR TEMP := I + J; IF INTERNAL_OVERFLOW THEN OUTPUT1 := FALSE; RETURN; END_IF; SOMA := TEMP + K; IF INTERNAL_OVERFLOW THEN OUTPUT1 := FALSE; END_IF; END_PROGRAM

Quando ocorrer um estouro o resultado da operao estar limitado aos limites do tipo utilizado na operao. Por exemplo, somar duas variveis do tipo INT cujos valores sejam 15_000 e 25_000, o resultado ser 32_767.

27

4. Programao

Regras de Escopo e Tempo de Vida


Os nomes utilizados para identificar as variveis, funes e o programa podem ser declarados em escopo global ou local. No escopo global, o nome visvel a todas as funes e ao programa. Todas as funes e o programa so declarados no escopo global, j as variveis, somente so globais aquelas variveis declaradas fora das funes e do programa, no incio do cdigo. O escopo local o escopo dentro das funes e do programa. As variveis declaradas dentro deste escopo so visveis apenas s funes em que foram declaradas. No permitido declarar duas vezes o mesmo nome dentro do mesmo escopo. Contudo, quando o nome de uma varivel local coincidir com um nome global ser sempre utilizado o nome declarado no escopo global. O tempo de vida das variveis depender do local em que foram declaradas. Para variveis dentro de funes, os valores destas so variveis so destrudos no final da chamada da funo. Os valores das variveis declaradas no escopo global so destrudos no final da chamada do mdulo, quando o programa retorna para o ladder. Exceo so as variveis mapeadas em operandos que mantm o seu valor entre as chamadas do mdulo.

Comandos
Um programa escrito em ST composto por uma seqncia de comandos. Os tipos de comandos so: Comandos de atribuio Comando de chamada de funo Comandos de controle de programa Comandos de seleo Comandos de repetio

Alm dos comandos, o verificador da Linguagem ST capaz de avaliar expresses matemticas para o clculo de valores. Expresses Expresses so usadas para calcular ou avaliar valores. Uma expresso composta por diversos operandos e operadores, sendo que estes podem ser variveis, literais ou chamadas de funes. Os operadores podem utilizar um ou dois operandos. Quando utilizam apenas um operador so chamados de unrios. Neste caso, sempre se localizam antes do operando. Quando utilizam dois operandos, so chamados de binrios. Neste caso o operador dever estar entre os operandos. Os dois operadores usados em operaes binrias, na maioria das operaes, devem ser do mesmo tipo. Quando forem utilizados operadores de tipos diferentes, dever ser utilizada uma funo de converso, conforme descrito na seo Converso de Tipos. Operadores Matemticos Estes operadores realizam operaes matemticas entre dois operandos. Os operandos podem ser qualquer ANY_NUM, mas no podem ser diferentes entre si. O operador matemtico sempre retorna o mesmo tipo dos operandos usados.

28

4. Programao
Operador + Adio Subtrao Negao (menos unrio) Descrio Aplicao ANY_NUM + ANY_NUM ANY_NUM ANY_NUM - REAL * / MOD Multiplicao Diviso Resto da diviso inteira DINT INT Sim No No Muda INTERNAL_OVERFLOW Sim Sim Sim

ANY_NUM * ANY_NUM ANY_NUM / ANY_NUM ANY_INT MOD ANY_INT

Tabela 4-10. Operadores matemticos bsicos


A operao Var1 MOD 0 ir retorna 0 (zero). Esta operao no ir gerar erro de diviso por zero.

Operadores Relacionais Os operadores relacionais executam uma comparao entre dois tipos numricos conforme descrito na Tabela 4-11. Os operandos devem ser do mesmo tipo e a operao retorna sempre em um tipo BOOL.
Operador < > <= >= = <> Descrio Menos que Mais que Menor ou igual Maior ou igual Igual Diferente Aplicao ANY_NUM < ANY_NUM ANY_NUM > ANY_NUM ANY_NUM <= ANY_NUM ANY_NUM >= ANY_NUM ANY = ANY ANY <> ANY

Tabela 4-11. Operadores relacionais Operadores Lgicos e Bit-a-Bbit Estes operadores executam duas operaes diferentes: lgica booleana e lgica bit-a-bit. A seleo da operao feita de acordo com os tipos dos operandos usados. Operaes de lgica booleana so executadas entre operandos do tipo BOOL. A Tabela 4-12 representa o resulta de uma operao booleana. O resultado sempre ser do tipo BOOL.
Operando A FALSE FALSE TRUE TRUE Operando B FALSE TRUE FALSE TRUE AND, & FALSE FALSE FALSE TRUE OR FALSE TRUE TRUE TRUE XOR FALSE TRUE TRUE FALSE

Tabela 4-12. Operadores lgicos Operaes lgicas bit-a-bit so executadas quando os operandos so BYTE, WORD e DWORD, sendo que os dois operandos devem ser do mesmo tipo. A operao de bit-a-bit realiza uma operao booleana para cada bit dos operandos, conforme descrito na Tabela 4-13. Estas operaes retornam o mesmo tipo dos operandos usados.
PROGRAM SOMADOR VAR Entradas Filtros Alarmes END_VAR Entradas := 2#0011_1001; Filtros := 2#0001_1100; (* Entradas, do tipo BYTE *) (* Filtros, do tipo BYTE *) do tipo BYTE *) : BYTE ; : BYTE ; : BYTE ;

Alarmes := Entradas AND Filtros; (* Alarmes,

29

4. Programao
(*Alarmes igual a 2#0001_1000 *) END_PROGRAM

Operador AND, & XOR OR NOT

Descrio Operao E Operao OU exclusivo booleano Operao OU booleano Complemento booleano

Aplicao ANY_BIT AND ANY_BIT ANY_BIT & ANY_BIT ANY_BIT XOR ANY_BIT ANY_BIT OR ANY_BIT NOT ANY_BIT

Tabela 4-13. Operadores bit-a-bit Precedncia de Operadores A avaliao da expresso feita de acordo com a precedncia dos operadores, conforme mostrado na Tabela 4-14. Operadores de maior precedncia so avaliados primeiro. Caso os operadores tenham a mesma precedncia, o que estiver mais a esquerda ser o primeiro a ser avaliado.
Precedncia 0 (maior) Operador ( ... ) funo ( ... ) NOT * 3 / MOD 4 5 6 7 8 9 (menor) + < , > , <= , >= = <> AND, & XOR OR Descrio Expresso entre parnteses Avaliao de funo Negao Complemento Multiplicao Diviso Resto Adio Subtrao Comparao Igualdade Desigualdade Operao E booleana Operao OU exclusivo booleana Operao OU booleana

Tabela 4-14. Precedncia de operaes Chamadas de Funo Uma funo pode ser chamada dentro de uma expresso. O valor a ser passado para cada parmetro escrito dentro dos parnteses e cada parmetro separado por vrgula. A ordem que os valores devem ser escritos deve ser a mesma ordem que os parmetros foram declarados na funo.
(* Chamada de funo: primeira forma *) nome_funcao ( expressao_1, expressao_2, ... , expressao_n )

Em uma expresso que tenha mais de uma funo, no possvel determinar qual funo ser executada primeira.

Funo de Potncia A funo de potncia retorna o resultado da operao (base expoente) , onde base pode ser ANY_INT ou REAL e expoente pode ser USINT. O tipo do resultado ser o mesmo tipo da base. Esta funo altera o valor de INTERNAL_OVERFLOW.
PROGRAM XXXXXX VAR base, resultado expoente END_VAR base expoente := := 4; 2; : INT; : USINT;

30

4. Programao
resultado := EXPT( base, expoente );

END_PROGRAM (* resultado igual a 16*)

Constantes de Inteiros As constantes de inteiros podem ser usadas em operaes com ANY_INT. Desde que o valor do literal no ultrapasse o limite do tipo do outro operando.
Faixa 0 a 255 32.768 a -1 0 a 32.767 0 a 65.535 -2.147.483.648 a 1 0 a 2.147.483.647 0 a 4.294.967.296 Tipos compatveis USINT, INT, DINT, BYTE, WORD e DWORD INT e DINT INT, DINT, WORD e DWORD DINT, WORD e DWORD DINT DINT e DWORD DWORD

Tabela 4-15. Constantes inteiras Os literais numricos reais s podem ser utilizados em operaes com variveis tambm do tipo REAL. Comando de Atribuio A atribuio usada para escrever um determinado valor em uma varivel.
<varivel> := <expresso>;

Comando de Controle de Programa Comando RETURN Uma funo sempre retorna para a rotina que a chamou aps a execuo da ltima afirmao. Porm, possvel retornar no meio do cdigo, atravs do uso da palavra reservada RETURN. No caso da palavra reservada RETURN ser usada no programa principal, o mesmo ser interrompido, retornando o controle da execuo do programa para o ladder. Comandos de seleo Um comando de seleo executa um dentre vrios blocos de afirmaes. A escolha do bloco definida por uma funo de avaliao expressa pelo no terminal <expresso_booleana>. Existem dois tipos de afirmaes de seleo: o comando IF e o comando CASE. Comando IF O comando IF executa as afirmaes aps o THEN se a <expresso_booleana> de teste for verdadeira. Opcionalmente possvel inserir outras condies de teste com a clausula ELSIF, sendo que, apenas o grupo de afirmaes onde o primeiro teste for verdadeiro que ser executado. Opcionalmente, possvel especificar um bloco de afirmaes para ser executado, caso todos os testes falhem, atravs da clausula ELSE.
IF <expresso_booleana> THEN <comandos> { ELSEIF <expresso_booleana> [ ELSE <comandos> ] END_IF; THEN <comandos> }

Exemplo:
31

4. Programao
PROGRAM XXXXXX VAR TESTE : INT; A, B, C, D, E: INT; END_VAR IF A = B THEN TESTE := 10; ELSEIF A = C THEN TESTE := 11; ELSEIF A = D THEN TESTE := 12; ELSEIF A = E THEN TESTE := 13; ELSE TESTE := 0; END_IF; END_PROGRAM

Comando CASE O comando CASE tambm executa apenas um bloco de afirmaes. A seleo do bloco feita pela comparao do valor inteiro de <expresso_inteira> com os valores escritos nos <casos>. Opcionalmente possvel especificar um bloco de afirmaes para ser executado caso todos os testes falhem atravs da clausula ELSE.
CASE <expresso_inteira> OF <casos> : <comandos> <comandos> }

{ <casos> :

[ ELSE <comandos> ] END_CASE;

<casos> indica lista de valores ou sub-faixa separados por vrgulas. Exemplo:


CASE Temperatura OF 0 : Bomba1 := 10; Bomba1 := 10;

1, 2, 5..10 : END_CASE;

Os valores testados devem ser compatveis com <expresso_inteira>.

Comandos de Repetio ou Iterao Um comando de iterao executa repetidamente um bloco de afirmaes. O nmero de vezes que executado depende do tipo de iterao, que pode ser: o comando WHILE, o comando FOR e o comando REPEAT. Para todos os comandos, possvel interromper o lao da iterao prematuramente atravs do comando EXIT. Este comando s pode ser usado dentro do lao da iterao. O uso do comando EXIT fora de uma afirmao de iterao causar um erro de verificao. Comando WHILE O comando WHILE executa um bloco de comandos enquanto a funo de avaliao <expresso_booleana> for verdadeira. O comando WHILE sempre testa a funo de avaliao antes
32

4. Programao de executar o bloco. Assim, se na primeira iterao o teste resultar em falso, o bloco de afirmaes no ser executado.
WHILE <expresso_booleana> DO <comandos> END_WHILE;

Exemplo:
PROGRAM XXXXXX (* Declarao de variaveis*) VAR i : INT ; (* Variavel de controle Vetor : ARRAY [1..10] OF INT ; INICIO_TABELA : INT; FIM_TABELA : INT; ACUMULADOR : INT; END_VAR INICIO_TABELA := 1; FIM_TABELA := 10; i := INICIO_TABELA; WHILE I <= FIM_TABELA DO ACUMULADOR := ACUMULADOR + Vetor[ I ]; I := I + 1; END_WHILE; END_PROGRAM

para o comando for *)

Comando REPEAT O comando REPEAT executa o bloco de comandos at que funo de avaliao <expresso_booleana> seja verdadeira. Diferente do comando WHILE, o comando REPEAT executa primeiro o bloco de afirmaes e depois testa a funo de avaliao. Assim o bloco de afirmaes executado pelo menos uma vez.
REPEAT <comandos> UNTIL <expresso_booleana> END_REPEAT;

Exemplo:
PROGRAM XXXXXX (* Declarao de variaveis*) VAR i : INT ; (* Variavel de controle Vetor : ARRAY [1..10] OF INT ; INICIO_TABELA : INT; FIM_TABELA : INT; ACUMULADOR : INT; END_VAR INICIO_TABELA := 1; FIM_TABELA := 10; i := INICIO_TABELA; REPEAT ACUMULADOR := ACUMULADOR + Vetor[ I ]; I := I + 1; UNTIL I > FIM_TABELA END_REPEAT;

para o comando for *)

33

4. Programao
END_PROGRAM

Comando FOR O comando FOR permite executar um bloco de comandos repetidas vezes. O nmero de repeties controlado por uma <varivel_controle>. Esta varivel deve ser do tipo USINT ou INT e no pode ser um operando da UCP do controlador programvel (%M por exemplo). Primeiramente, <varivel_controle> inicializada com o valor de <expr_inicial>. No inicio de cada repetio, verificado se o valor de <varivel_controle> excedeu o valor definido por <expr_final>. Se no excedeu, o bloco de comandos executado. Caso contrrio, o comando FOR encerrado. No fim da execuo do bloco, <varivel_controle> incrementada em 1, ou pelo valor definido por <expr_inc>. Tanto a <varivel_controle> como as expresses <expr_inicial>, <expr_inicial> e <expr_final> devem ser dados do mesmo tipo (USINT ou INT).
FOR <varivel_controle> := <expr_inicial> TO <expr_final> [ BY <expr_inc> ] DO <comandos> END_FOR;

ou
FOR <varivel_controle> := <expr_inicial> TO <expr_final> DO <comandos> END_FOR;

A <varivel_controle>, dentro do escopo do lao FOR, pode ser lida mas no pode ser escrita.

Durante as interaes, ser usado o valor de < expr_final > avaliado no inicio do FOR. Ou seja, esta expresso no reavaliada no decorrer do comando.

Exemplo:
PROGRAM XXXXXX (* Declarao de variaveis*) VAR i : INT ; (* Variavel de controle Vetor : ARRAY [1..10] OF INT ; INICIO_TABELA : INT; FIM_TABELA : INT; ACUMULADOR : INT; END_VAR INICIO_TABELA := 1; FIM_TABELA := 10; FOR I := INICIO_TABELA TO FIM_TABELA DO ACUMULADOR := ACUMULADOR + Vetor[ I ]; END_FOR; END_PROGRAM

para o comando for *)

34

5. Depurao

5. Depurao
Mtodos de Depurao
Este captulo descreve como deve ser efetuada a depurao de um mdulo criado em linguagem ST, de acordo com as orientaes do Captulo 4 - Programao. Alm do foramento e monitorao de variveis, existem outros recursos muito teis quando se deseja depurar uma aplicao, seja ela programada em ladder ou linguagem ST. Na seqncia so descritos dois mtodos de depurao. O primeiro utiliza-se do recurso de execuo em modo ciclado do controlador programvel, enquanto que o segundo utiliza mquinas de estados para implementar a depurao. Modo Ciclado Quando em modo ciclado, o controlador programvel no executa periodicamente o mdulo E001, permanecendo espera de comandos do programador MasterTool. Para maiores detalhes a respeito do modo ciclado deve ser consultado o Manual de Programao do MasterTool XE. Utilizando-se a depurao em modo ciclado, pode-se, entre um ciclo e outro, efetuar a verificao dos valores das variveis utilizadas e at mesmo se forar valores para verificar o comportamento da aplicao que est sendo depurada. Mquinas de estado Este mtodo de depurao consiste em criar uma seqncia definida de aes vinculadas a um ndice ou estado. Desta forma, pode-se executar o cdigo passo a passo, onde cada passo pode ser uma simples linha de cdigo ou um trecho de cdigo qualquer. Uma implementao simples desta mquina de estados pode ser obtida atravs do comando IF, conforme mostrado a seguir:
IF ESTADO = 1 THEN < comandos bloco 1> ESTADO := 0; END_IF; IF ESTADO = 2 THEN < comandos bloco 2> ESTADO := 0; END_IF; . . . IF ESTADO = n THEN < comandos bloco n> ESTADO := 0; END_IF;

Cada bloco de comandos do cdigo apresentado executado uma nica vez, visto que o ndice dos estados zerado no final da execuo do bloco. Incrementando-se a varivel do estado manualmente, pode-se executar diferentes partes do cdigo de forma controlada. Pode-se, entre um estado e outro, forar diferentes valores para que se verifique o comportamento do cdigo e os valores obtidos nas variveis envolvidas, por exemplo.

35

5. Depurao

Erros em Tempo de Verificao


Uma informao til a nvel de depurao dos cdigos fontes so os erros retornados pelo verificador ao se verificar o cdigo escrito. Esses erros apontam problemas de digitao, associaes invlidas e utilizao indevida de instrues, facilitando, assim, o processo de desenvolvimento do mdulo ST. O verificador da linguagem ST poder gerar os seguintes erros de um mdulo:
Descrio Caractere invlido Smbolo invlido Causa provvel O texto ou o caractere digitado no foi reconhecido pelo verificador. Indica que a notao lxica usada est incorreta. As notaes possveis esto listadas abaixo: Identificador: - Terminou com "_" - Possui dois "_" consecutivos. Literal numrico: - Terminou com "_" - Possui dois "_" consecutivos. - Ponto flutuante com expoente sem valor. - Digito invlido para base numrica.

Comentrio no encerrado com *) Era esperado <token 1> ao invs de <texto 2> No era esperado <texto 1> aps <texto 2> No era esperado <texto 1> O identificador <nome> j foi declarado neste escopo. Varivel <nome> no foi declarada. Array<nome> no foi declarado. Funo <nome> no foi declarada. Era esperada uma expresso inteira. Impossvel converter <tipo 1> para <tipo 2> No possvel realizar a operao <operacao> entre os tipos <tipo esquerda> e o tipo <tipo direita>. No possvel realizar a operao <operacao> com o <tipo direita>. Comando EXIT no pode ser executado fora de um lao WHILE, FOR ou REPEAT. Este trecho de cdigo nunca ser executado. Chamada recursiva da funo <nome> Um dos caminhos da funo <nome> no retorna valor. Funo <nome> foi chamada com parmetros a mais que o declarado. Funo <nome> foi chamada com parmetros a menos que o declarado. Smbolo <nome> no uma funo Smbolo <nome> no um vetor Smbolo <nome> no uma varivel Smbolo <nome> no um constante

O fim de arquivo foi encontrado antes do fim do comentrio. Erro de sintaxe. Provavelmente foi digitado um texto errado, ou falta um texto. Erro de sintaxe. Provavelmente foi digitado um texto errado, ou falta um texto.. Erro de sintaxe. Provavelmente foi digitado um texto errado, ou falta um texto. O identificador j foi declarado. Utilize outro nome.

A varivel no foi declarada. Declare a varivel antes de us-la. O array no foi declarado. Declare o array antes de us-lo. A funo no foi declarada. Declare a funo antes de us-la. O comando CASE esperam inteiras para test-las. A expresso fornecida no inteira. A converso entre os tipos no permitida. Tente utilizar uma funo de converso explicita. A operao no vlida para os tipos passados. Utilizar as funes de converso de tipos para ajustar ao tipo correto. A operao no vlida para o tipo passado. Utilizar as funes de converso de tipos para ajustar ao tipo correto. Comando EXIT no pode ser executado fora de um lao WHILE, FOR ou REPEAT. O trecho de cdigo foi escrito aps um comando de RETURN ou EXIT e portanto nunca ser executado. Uma funo no pode ser chamada recursivamente. Existe um caminho de cdigo que no retorna valor atravs do comando: Funo := valor;

Era esperado que o smbolo fosse uma funo. Era esperado que o smbolo fosse um vetor. Era esperado que o smbolo fosse uma varivel. Era esperado que o smbolo fosse uma constante.

36

5. Depurao
Smbolo <nome> no permite leitura Smbolo <nome> no permite escrita Constante <valor> j utilizada em outro caso. Varivel de controle do FOR <nome> no pode estar associada a operando do CP. Varivel de controle do FOR <nome> no ser escrita dentro do FOR Nmero incorreto de elementos para iniciar o vetor Operando <tipo operando> do CP incompatvel com <tipo varivel> <Tipo> no pode ser utilizado como parmetro de <nome funo ou programa> O mdulo F no pode ter mais de 10 parmetros VAR_INPUT e VAR_IN_OUT O mdulo F no pode ter mais de 10 parmetros VAR_OUTPUT Mdulo procedimento no permite parmetros FUNCTION no admite parmetros do tipo VAR_IN_OUT ou VAR_OUTPUT Valor <valor> fora dos limites Valor mnimo maior que valor mximo O operando <operando> no vlido O operando no foi corretamente digitado ou no suportado pela linguagem ST. Foi declarada uma ou mais variveis do tipo VAR_IN_OUT ou VAR_OUTPUT no escopo de uma FUNCTION. O tipo declarado no pode ser utilizado como parmetro. As funes no suportam vetores e programas no suporta o tipo BOOL e vetor de BOOL O nmero de parmetros declarados em VAR_INPUT e VAR_IN_OUT no pode ser maior que 10 parmetros. O nmero de parmetros declarados em VAR_OUTPUT no pode ser maior que 10 parmetros. A constante inteira fornecida em um caso j foi utilizada em outro caso do mesmo comando CASE.

Nmero de variveis excede o limite UCP <nome> no suportada pelo compilador ST Quantidade insufuciente de operandos <tipo do operando> temporrios. Mnimo <valor> operandos. Nmero de elementos do array invlido. Mximo de <quantidade> elementos. Falha na montagem do mdulo Houve uma falha na montagem do mdulo. Entrar em contato com suporte da Altus. A UCP indicada no suportada mdulos ST pelo compilador ST. No possvel gerar mdulos ST para esta UCP. Verifique se o operando temporrio est habilitado e se a quantidade de operandos maior ou igual ao valor indicado na mensagem. Atualmente suficiente configurar apenas 04 operandos.

Tabela 5-1. Erros em tempo de verificao

Erros em Tempo de Execuo


Sempre que o mdulo ST executar uma operao ilegal, como por exemplo uma diviso por zero ou mesmo um acesso a operandos no declarados, a execuo do cdigo imediatamente interrompida e a execuo do ladder passa para o mdulo ladder com a instruo CHP ou CHF que chamou o mdulo ST. Para indicar o erro encontrado so utilizados os operandos de diagnsticos, conforme definidos na seo Operandos de Diagnstico. Alm de indicar o erro nos operandos, se houver um erro de tempo de execuo a sada OUTPUT1 da instruo CHP/CHF zerada.

37

5. Depurao So utilizados 5 operandos %M para indicar o motivo do erro, conforme a tabela a seguir:
Operando %M+0 Descrio Linha onde ocorreu o erro: Linha = -1: indica que um erro foi encontrado no incio do mdulo, antes da primeira linha de cdigo. Linha = -32.768 ou bit15 em 1: nenhum erro foi encontrado, os demais operandos so zerados. Cdigo do erro. Consulte a tabela a seguir. Primeira informao complementar ao erro. Segunda informao complementar ao erro. Terceira informao complementar ao erro.

%M+1 %M+2 %M+3 %M+4

Tabela 5-2. Erros em tempo de execuo A tabela, a seguir, apresenta uma descrio detalhada dos possveis erros em tempo de execuo:
Cdigo 2000 Descrio Acesso a operando simples no declarado. Causa provvel O operando no foi declarado no mdulo C. Comp 1 Tipo do operando: 0: %M 8: %E/S 9: %A 4: %F 1: %I 2001 Operando tabela no declarado O operando tabela no foi declarado no mdulo C. Tipo do operando: 0: %M 4: %F 1: %I 2002 Posio da tabela no declarada A tabela no foi declarada no mdulo C com o nmero de posies utilizado pelo programa. O operando passado por parmetro de entrada na CHF no compatvel com o tipo declarado. O operando passado por parmetro de sada na CHF no compatvel com o tipo declarado. O operando passado por parmetro de entrada na CHF no foi declarado no mdulo C do CP. Ou os operandos do vetor no foram declarados no mdulo C do CP. O operando passado por parmetro de sada na CHF no foi declarado no mdulo C do CP. Ou os operandos do vetor no foram declarados no mdulo C do CP. O valor da constante utilizada excede o tamanho do parmetro da CHF Tipo do operando: 0: %M 4: %F 1: %I 2003 Parmetro de entrada incorreto. Nmero do parmetro de entrada. No usado No usado Corrigir o operando na instruo CHF. Endereo da tabela Posio da tabela Declarar o operando no mdulo C. Endereo da tabela No usado Declarar o operando no mdulo C. Comp 2 Endereo do operando Comp 3 No usado Correo Declarar o operando no mdulo C.

2004

Parmetro de sada incorreto.

Nmero do parmetro de sada.

No usado

No usado

Corrigir o operando na instruo CHF.

2005

Operando do parmetro de entrada no declarado.

Nmero do parmetro de entrada.

No usado

No usado

Declarar o operando no mdulo C ou corrigir o operando na instruo CHF.

2006

Operando do parmetro de sada no declarado.

Nmero do parmetro de sada.

No usado

No usado

Declarar o operando no mdulo C ou corrigir o operando na instruo CHF.

2008

Valor invlido para operando constante

Nmero do parmetro de entrada ou de sada.

No usado

No usado

Corrigir o valor da constante utilizada.

38

5. Depurao
Cdigo 2009 Descrio Nmero de parmetros de entrada incorreto. Nmero de parmetros de sada incorreto. Parmetro de entrada do tipo array com quantidade insuficiente de posies. Parmetro de sada do tipo array com quantidade insuficiente de posies. ndice para vetor invalido. Causa provvel A quantidade de parmetros de entrada declarada na CHF est incorreta. A quantidade de parmetros de sada declarada na CHF est incorreta. Operandos do tipo tabela com nmero de posies insuficientes. Comp 1 No usado Comp 2 No usado Comp 3 No usado Correo Verificar o nmero correto de parmetros de entrada utilizados na instruo CHF. Verificar o nmero correto de parmetros de sada utilizados na instruo CHF. Verificar o nmero correto de posies utilizadas no respectivo parmetro de entrada.

2010

No usado

No usado

No usado

2011

Nmero do parmetro de entrada ou de sada.

No usado

No usado

2012

Operandos do tipo tabela com nmero de posies insuficientes.

Nmero do parmetro de sada.

No usado

No usado

Verificar o nmero correto de posies utilizadas no respectivo parmetro de sada.

2015

O ndice fornecido para acessar um vetor menor que seu limite inferior ou superior ao seu limite superior. Ocorreu uma diviso por zero.

No usado

No usado

No usado

Verificar os possveis valores que podem ser passados como ndice do vetor no programa. Verificar os possveis valores que podem ser utilizados como divisor na operao. Possivelmente uma instruo de lao como WHILE ou REPEAT foi executada infinitamente. No possvel chamar o mdulo ST dentro da E018. O mdulo gerado em ST no pode ser executado em verses inferiores do executivo. O mdulo foi salvo e enviado ao CP com erros de verificao. Garantir que as chamadas aninhadas no excedam seu limite. Vide Limites de Software.

2020

Diviso por zero.

No usado

No usado

No usado

2030

Tempo de execuo excedido.

O tempo de execuo permitido para o mdulo foi excedido.

No usado

No usado

No usado

2031

Execuo dentro da E018 Verso de executivo

O mdulo esta sendo executado dentro da E018, o que proibido. A verso do executivo menor que o esperado pela funo.

No usado

No usado

No usado

2032

Verso mnima do executivo (em decimal)

No usado

No usado

2040

Mdulo salvo com erro

O mdulo foi salvo com erros de verificao gerando um programa em branco. O nmero de chamadas de funes em seqncia excedeu o seu limite.

No usado

No usado

No usado

2050

Limite de chamadas aninhadas excedido

No usado

No usado

No usado

Tabela 5-3. Descrio dos erros em tempo de execuo

39

6. Exemplos de Utilizao

6. Exemplos de Utilizao
Este captulo apresenta exemplos de programas escritos em ST.

Buffer de eventos
O mdulo F-EVT.030 insere um evento em no buffer de eventos implementado no operando %TM0010. Cada evento ocupa 3 posies no buffer. A primeira posio armazena o valor do minuto no byte alto e de segundo no byte baixo. A segunda posio armazena a hora. J a terceira posio armazena o cdigo do evento.
(* Armazena eventos em uma TM. Cada evento armazenado em 3 posies. byte alto byte baixo pos 0 minuto segundo pos 1 hora pos 2 evento O cdigo de evento passado por parmetro da CHF. *) (* Variveis globais ----------------------------------------------------------------- *) (* Buffer de eventos *) VAR BUFFER AT %TM0010[000] :ARRAY[ 1..120 ] OF INT;(* Buffer eventos *) BUFFER_IN AT %M0000 :INT; (* Entrada no buffer *) BUFFER_OUT AT %M0001 :INT; (* Sada do buffer *) BUFFER_NUM_EVENTOS AT %M0002 :INT; (* Nmero de eventos armazenados *) BUFFER_OVERFLOW AT %A0001.0 :BOOL; (* Indica overflow *) END_VAR (* Constantes *) VAR CONSTANT BUFFER_INF BUFFER_SUP BUFFER_LIMITE END_VAR

: INT := 1; : INT := 120; : INT := 40;

(* Primeiro ndice do array *) (* ltimo ndice do array *) (* Nmero mximo de elementos no buffer *)

(* Funes --------------------------------------------------------------------------- *) (* Funo: InserirValor Insere um valor na prxima posio do buffer de eventos; Retorna TRUE se ocorreu overflow; *) FUNCTION INSERIR_VALOR : BOOL VAR_INPUT VALOR : INT; END_VAR (* Insere o valor na posio *) BUFFER[ BUFFER_IN ] := VALOR; (* Controla os limites do buffer *) IF BUFFER_IN = BUFFER_SUP THEN BUFFER_IN := BUFFER_SUP; ELSE BUFFER_IN := BUFFER_IN + 1; END_IF; (* Controla o overflow *) IF BUFFER_NUM_EVENTOS = BUFFER_LIMITE THEN INSERIR_VALOR := TRUE; ELSE BUFFER_NUM_EVENTOS := BUFFER_NUM_EVENTOS + 1; INSERIR_VALOR := FALSE; END_IF;

40

6. Exemplos de Utilizao
END_FUNCTION (* Programa -------------------------------------------------------------------------- *) PROGRAM F_EVT_030 (* Parmetros de entradas da CHF*) VAR_INPUT EVENTO : INT; (* Parmetro 1 da CHF*) HORA : INT; (* Parmetro 2 da CHF*) MINUTO : INT; (* Parmetro 3 da CHF*) SEGUNDO : INT; (* Parmetro 4 da CHF*) END_VAR (* Insere o evento *) INSERIR_VALOR( MINUTO*256 + SEGUNDO ); INSERIR_VALOR( HORA ); INSERIR_VALOR( EVENTO ); END_PROGRAM

Converso de valores
O mdulo P-CONV.040 converte os valores de uma tabela de graus Fahrenheit para graus Celsius, armazenando os valores em outra tabela.
(* Converte as temeperaturas de F para C *) (* Funes --------------------------------------------------------------------------- *) (* Funo: Converter Executa a converso de uma unidade para outra. Retorna o valor convertido. Realiza a operano utilizando o tipo REAL para obter perciso. *) FUNCTION CONVERTER : INT VAR_INPUT ENTRADA MAXIMO_ENTRADA MINIMO_ENTRADA MAXIMO_SAIDA MINIMO_SAIDA END_VAR

: : : : :

REAL; REAL; REAL; REAL; REAL;

(* Normaliza o valor de entrada*) CONVERTER := REAL_TO_INT( ENTRADA / (MAXIMO_ENTRADA - MINIMO_ENTRADA) * (MAXIMO_SAIDA - MINIMO_SAIDA) ); END_FUNCTION (* Programa -------------------------------------------------------------------------- *) PROGRAM P_CONV_040 (* Variveis *) VAR TEMPERATURAS_EM_CELSIUS TEMPERATURAS_EM_FAHRENHEIT I : INT; END_VAR (* Constantes *) VAR CONSTANT INICIO : INT := 1; FIM : INT := 100; END_VAR (* Converte as temperaturas de graus Celsius para graus Fahrenheit *) FOR I := INICIO TO FIM DO TEMPERATURAS_EM_FAHRENHEIT[ I ] := CONVERTER( TEMPERATURAS_EM_CELSIUS[ I ], 0, 100,

AT %TM0010[ 0 ]: ARRAY[ 1..100 ] OF INT; AT %TM0011[ 0 ]: ARRAY[ 1..100 ] OF INT;

41

6. Exemplos de Utilizao
32, 232 ); END_FOR; END_PROGRAM

42

7. Apndices

7. Apndices
Palavras Reservadas
Na seqncia apresentada a relao palavras reservadas pertencentes Linguagem ST. Nem todas so utilizadas atualmente pela linguagem ST, mas j foram reservadas para futuras implementaes.
AT ARRAY OF CASE OF ELSE END_CASE INPUT1 INPUT2 INPUT3 OUTPUT1 OUTPUT2 OUTPUT3 INTERNAL_* EXIT FALSE TRUE FOR TO BY DO END_FOR FUNCTION END_FUNCTION IF THEN ELSIF ELSE END_IF REPEAT UNTIL END_REPEAT RETURN CONSTANT VAR END_VAR VAR_INPUT END_VAR WHILE DO END_WHILE BOOL SINT USINT INT UINT REAL AND OR XOR NOT MOD *_TO__** (converso de tipos) EN ENO F_EDGE FUNCTION_BLOCK END_FUNCTION_BLOCK PROGRAM WITH PROGRAM END_PROGRAM R_EDGE READ_ONLY READ_WRITE RESOURCE ON END_REPEAT RETAIN STRUCT END_STRUCT TASK TYPE END_TYPE VAR_IN_OUT END_VAR VAR_OUTPUT END_VAR VAR_EXTERNAL END_VAR VAR_ACESS END_VAR WITH BYTE WORD DWORD LWORD DINT LINT UDINT U LINT LREAL TRUNC TIME DATE TIME_OF_DAY TOD DATE_AND_TIME DT ANY ANY_NUM ANY_REAL ANY_INT ANY_BIT STRING ANY_DATE ABS SQRT LN LOG EXP SIN COS TAN ASIN ACOS ATAN SEL MAX MIM LIMIT MUX LEFT RIGHT MID CONCAT INSERT DELETE REPLACE LEN FIND JMP CAL RET ADD MUL DIV EXPT MOVE SHL SHR ROR ROL GT GE EQ LE LT NE N R S L D P SD DS SL LD ST ACTION END_ACTION INITIAL_STEP END_STEP STEP END_STEP TRANSITION FROM TO END_TRANSITION

43

8. Glossrio

8. Glossrio
Glossrio Geral
Algoritmo Barramento Bit Byte Ciclo de varredura Circuito de co de guarda Cdigo comercial Controlador programvel CP Default Diagnstico Download E/S Entrada/sada Seqncia finita de instrues bem definidas, objetivando a resoluo de problemas. Conjunto de sinais eltricos agrupados logicamente com a funo de transferir informao e controle entre diferentes elementos de um subsistema. Unidade bsica de informao, podendo estar no estado 0 ou 1. Unidade de informao composta por oito bits. Uma execuo completa do programa aplicativo de um controlador programvel. Circuito eletrnico destinado a verificar a integridade do funcionamento de um equipamento. Cdigo do produto, formado pelas letras PO, seguidas por quatro nmeros. Tambm chamado de CP. Equipamento que realiza controle sob o comando de um programa aplicativo. composto de uma UCP, uma fonte de alimentao e uma estrutura de E/S. Veja controlador programvel. Valor predefinido para uma varivel, utilizado em caso de no haver definio. Procedimento utilizado para detectar e isolar falhas. tambm o conjunto de dados usados para tal determinao, que serve para a anlise e correo de problemas. Carga de programa ou configurao no CP. Veja entrada/sada. Tambm chamado de E/S. Dispositivos de E/S de dados de um sistema. No caso de CPs, correspondem tipicamente a mdulos digitais ou analgicos de entrada ou sada que monitoram ou acionam o dispositivo controlado. Equipamento ligado a uma rede de CPs ou instrumentao com a finalidade de monitorar ou controlar variveis de um processo. Equipamentos fsicos usados em processamento de dados onde normalmente so executados programas (software). Norma genrica para operao e utilizao de CPs. Antiga IEC 1131. Dispositivo que adapta eltrica e/ou logicamente a transferncia de sinais entre dois equipamentos. Evento com atendimento prioritrio que temporariamente suspende a execuo de um programa e desvia para uma rotina de atendimento especfica Unidade representativa de quantidade de memria. Representa 1024 bytes. Sigla para light emitting diode. um tipo de diodo semicondutor que emite luz quando estimulado por eletricidade. Utilizado como indicador luminoso. Linguagem de programao do microprocessador, tambm conhecida como linguagem de mquina. Um conjunto de regras e convenes utilizado para a elaborao de um programa. Conjunto de instrues e operandos que permitem a edio de um programa aplicativo para ser utilizado em um CP. Matriz grfica onde so inseridas as instrues de linguagem de um diagrama de rels que compe um programa aplicativo. Um conjunto de lgicas ordenadas seqencialmente constitui um mdulo de programa. Identifica o programa Altus para microcomputador, executvel em ambiente WINDOWS, que permite o desenvolvimento de aplicativos para os CPs das sries Ponto, Piccolo, AL-2000, AL-3000 e Quark. Ao longo do manual, este programa referido pela prpria sigla ou como programador MasterTool. Conjunto de opes disponveis e exibidas por um programa no vdeo e que podem ser selecionadas pelo usurio a fim de ativar ou executar uma determinada tarefa. Elemento bsico de um sistema completo que possui funes bem definidas. Normalmente ligado ao sistema por conectores, podendo ser facilmente substitudo. Parte de um programa aplicativo capaz de realizar uma funo especfica. Pode ser executado independentemente ou em conjunto com outros mdulos, trocando informaes atravs da passagem de parmetros. Veja mdulo de configurao. Tambm chamado de mdulo C. um mdulo nico em um programa de CP que contm diversos parmetros necessrios ao funcionamento do controlador, tais como a quantidade de operandos e a disposio dos mdulos de E/S no barramento. Mdulo pertencente ao subsistema de entradas e sadas. Veja mdulo execuo.

Estao de superviso Hardware IEC 61131 Interface Interrupo kbytes LED Linguagem Assembly Linguagem de programao Linguagem de rels e blocos Altus Lgica

MasterTool

Menu Mdulo (referindo-se a hardware) Mdulo (referindo-se a software) Mdulo C Mdulo de configurao

Mdulo de E/S Mdulo E

8. Glossrio
Mdulo execuo Mdulo que contm o programa aplicativo, podendo ser de trs tipos: E000, E001 e E018. O mdulo E000 executado uma nica vez, na energizao do CP ou na passagem de programao para execuo. O mdulo E001 contm o trecho principal do programa que executado ciclicamente, enquanto que o mdulo E018 acionado por interrupo de tempo. Veja mdulo funo. Mdulo de um programa de CP que chamado a partir do mdulo principal (mdulo E) ou a partir de outro mdulo funo ou procedimento, com passagem de parmetros e retorno de valores. Atua como uma subrotina. Veja mdulo procedimento. Mdulo de um programa de CP que chamado a partir do mdulo principal (mdulo E) ou a partir de outro mdulo procedimento ou funo, sem a passagem de parmetros. Unidade de informao composta por quatro bits. Conjunto de oito bits numerados de 0 a 7. Elementos sobre os quais as instrues atuam. Podem representar constantes, variveis ou um conjunto de variveis. Sigla para programmable controller. a abreviatura de controlador programvel em ingls. o programa carregado em um CP, que determina o funcionamento de uma mquina ou processo. Sistema operacional de um controlador programvel. Controla as funes bsicas do controlador e a execuo de programas aplicativos. Programas de computador, procedimentos e regras relacionadas operao de um sistema de processamento de dados. Conjunto de mdulos de E/S digitais ou analgicos e interfaces de um controlador programvel. Nome associado a um operando ou a uma lgica que permite uma identificao resumida de seu contedo. Sigla para unidade central de processamento. Controla o fluxo de informaes, interpreta e executa as instrues do programa e monitora os dispositivos do sistema. Sigla para co de guarda em ingls (watchdog). Veja circuito de co de guarda.

Mdulo F Mdulo funo

Mdulo P Mdulo procedimento Nibble Octeto Operandos PC Programa aplicativo Programa executivo Software Subsistema de E/S Tag UCP WD