Vous êtes sur la page 1sur 61

Programao

CoDeSys.

avanada

em

ambiente

Proibida a reproduo total ou parcial deste material, por


qualquer meio ou processo sem expressa autorizao por escrito
da EATON Ltda. Electrical Diviso Electrical PDO.
A violao dos direitos autorais crime, podendo cominar em
pena de priso e/ou multa, conjuntamente com busca e
apreenso do material, sem prejuzo das indenizaes civis (de
acordo com o artigo 184 e pargrafos do Cdigo Penal Brasileiro
c/c a Lei n 9.610/98, Lei dos Direitos Autorais).
As informaes contidas nesta apostila correspondem ao estado
atual da tcnica e esto sujeitas a alteraes sem aviso prvio.
Os programas de exemplo contidos nesta apostila so para
efeitos didticos, a EATON no se responsabiliza por quaisquer
danos e/ou acidentes que a utilizao indevida destes softwares
venha a causar.
A participao e/ou aquisio do treinamento no d nenhum
direito ao participante sobre os softwares utilizados durante o
treinamento, incluindo cpias, verses de demonstrao e/ou
verses originais.
O treinamento tem como base a utilizao de produtos EATON.
A EATON no se responsabiliza por quaisquer adaptaes,
converses e/ou utilizao dos conceitos contidos nesta apostila
com produtos de outra fabricao.

10 de outubro de 2012
Pgina: 2

www.eaton.com

Pgina 2

INDEX:
Introduo ao curso. ........................................................................................................................... 4
Declarao de variveis. .................................................................................................................... 5
ARRAY. (Vetores e Matrizes.) ........................................................................................................ 5
Inicializao de variveis. ............................................................................................................... 8
Tipos de dados derivados............................................................................................................... 9
Enumeraes ........................................................................................................................... 10
Estruturas ................................................................................................................................ 11
Programao em ST (Texto Estruturado). ....................................................................................... 12
Atribuies e Expresses. ............................................................................................................ 12
Comando condicional. (IF, ELSIF e ELSE) .................................................................................. 14
Comando seletor (CASE) ............................................................................................................. 15
Comandos de repetio: ............................................................................................................... 15
(FOR) ....................................................................................................................................... 15
(WHILE) ................................................................................................................................... 16
(REPEAT) ................................................................................................................................ 17
(EXIT)....................................................................................................................................... 17
Chamando blocos de funo ........................................................................................................ 17
Programao em SFC (Sequential Function Chart) ........................................................................ 18
Atributos da Etapa. ....................................................................................................................... 20
Transies. ................................................................................................................................... 21
Chart sequencial. .......................................................................................................................... 22
Chart deciso ................................................................................................................................ 22
Chart paralelo. .............................................................................................................................. 23
Variveis implcitas. ...................................................................................................................... 23
Qualificadores de ao. ................................................................................................................ 24
Qualificador N (No Stored). ..................................................................................................... 24
Qualificadores S e R (SET // RESET) ..................................................................................... 25
Qualificador L (Limit <time>) ................................................................................................... 25
Qualificador D (Delay <time>) ................................................................................................. 26
Qualificador P (Pulse) .............................................................................................................. 26
Qualificador SD (Store and Delay <time>) .............................................................................. 27
Qualificador DS (Delay and Store <time>) .............................................................................. 27
Qualificador SL (Store Limited <time>) ................................................................................... 28
Criando aes. .............................................................................................................................. 28
Explorando os recursos avanados do CoDeSys. ........................................................................... 30
Watch / Recipe manager .............................................................................................................. 30
Watch / Receipt Manager em modo Offline............................................................................. 30
Watch and Receipt Manager no modo Online. ....................................................................... 31
LOG .............................................................................................................................................. 32
Export / Import tools. ..................................................................................................................... 34
Comparao de projetos. ............................................................................................................. 35
TASK Manager ............................................................................................................................. 36
Ferramentas de visualizao ........................................................................................................ 39
Placeholders ............................................................................................................................ 40
Contador Rpido 1CNT ................................................................................................................ 42
Contador Rpido 1 CNT comparao via Codesys...................................................................... 42
Contador Rpido 1 CNT comparao no hardware. .................................................................... 45
Comunicao Ethernet CLP com CLP ......................................................................................... 51
Comunicao CANopen CLP com CLP ....................................................................................... 55
PID Autotunig no Codesys ............................................................................................................ 58

10 de outubro de 2012
Pgina: 3

www.eaton.com

Pgina 3

Introduo ao curso.
Conforme explorado em treinamento anterior, alguns equipamentos EATON so
programveis atravs de uma ferramenta conhecida como CoDeSys que obedece a uma normal
europeia, a IEC 61131 captulo 3.
Esta norma regulamenta 5 linguagens de programao diferentes, duas textuais, ou seja,
sua programao simplesmente feita atravs de texto e trs grficas.

Structured Text
Texto Estruturado
(ST)
Instruction List
Lista de Instrues
(IL)
Function Block Diagram
Diagrama de Blocos de Funes
(FBD)
Ladder Diagram
Diagrama de Contatos
(LD)
Sequential Function Charts
(SFC)

10 de outubro de 2012
Pgina: 4

www.eaton.com

Linguagens
Textuais

Linguagens
Grficas

Pgina 4

Declarao de variveis.
ARRAY. (Vetores e Matrizes.)
O CoDeSys permite que suas variveis sejam declaradas em forma de vetores e matrizes,
que so variveis com a capacidade de armazenar vrios valores, de mesmo tipo, em seu interior.
So como caixas numeradas que so solicitadas conforme o nmero desejado.
O Vetor armazena os valores em seu interior de forma Unidimensional, ou seja, a
alocao feita atravs de um indexador.
J a matriz pode armazenar valores em seu interior atravs de dois indexadores, tipo linha
e coluna, ou trs indexadores, tipo linha, coluna e profundidade.
Exemplo de declarao de um vetor:
<NomeVariavel> AT <Endereo Fisico> : ARRAY[<I>..<N>] OF <Tipo>
Onde: <NomeVariavel> o nome da varivel que desjamos, o nome obedece as regras j
estudadas para a declarao de variveis.
<Endereo Fisico> se necessrio podemos especificar o endereo fsico DO
PRIMEIRO VALOR do vetor, automaticamente o CLP entende que os valores seguintes seguiro
nos endereos subsequentes.
<I> Valor inicial do vetor, normalmente utilizamos 0 ou 1.
<N> Valor final do vetor, quantas posies o vetor ter.
<Tipo> Tipo de valores a serem armazenados conforme IEC 61131-3.
Tomemos este exemplo de declarao:
Vetor1 AT %IB0 : ARRAY[0..3] OF BYTE;
Nosso Vetor se chama Vetor1, seu endereo inicial a entrada fsica IB0, ele possui 4
posies, comeando em 0 e terminando em 3 e todos os valores armazenados dentro deste vetor
so variveis do tipo BYTE!

10 de outubro de 2012
Pgina: 5

www.eaton.com

Pgina 5

Vejam agora este outro exemplo:


Armazenador : ARRAY[1..1500] OF REAL;
Neste caso o vetor se chama Armazenador, ele no possui endereo fsico definido, ou
seja, os valores sero alocados dentro da memria do CLP. Este vetor possui 1500 posies,
comeando na posio 1 e indo at a posio 1500, dentro deste vetor armazenamos variveis do
tipo REAL.
As matrizes possuem o mesmo princpio de funcionamento dos vetores, a nica diferena
que as matrizes possuem mais dimenses. Veja abaixo estes dois exemplos de declarao de
matrizes:
MatrizSimples
Matriz

: ARRAY[0..3,1..4] OF UINT;
: ARRAY[1..4,1..4,0..3] OF INT;

A MatrizSimples no tem endereo inicial definido e possui 16 valores em seu interior,


dispostos em 4 colunas, posies de 0 a 3, e 4 linhas, posies de 1 a 4. Neste exemplo
armazenamos valores do tipo UINT.
J a Matriz, no tem endereo inicial mas possui 64 valores em seu interior, dispostos
em 4 profundidades, posies de 1 a 4, 4 colunas, posies de 1 a 4 e 4 linhas, posies de 0 a 3.
Neste exemplo armazenamos valores do tipo INT.

Normalmente utilizamos estas variveis quando temos um grande volume de dados e


desejamos que o acesso aos valores no interior destas matrizes seja decidido por uma outra
varivel que ir apontar qual a posio desejada!
No programa IecAdv_MatrizesUtilizacao.pro tem um exemplo de um programa com
matrizes e vetores, veja:

10 de outubro de 2012
Pgina: 6

www.eaton.com

Pgina 6

Durante a simulao podemos ver que a Matriz chamada de Arr2, que aparece no Ladder
Network 1, est ligada a um bloco MOVE, o valor que estiver em Arr2 ser movido para a varivel
Resultado3. O valor que ser movido da Arr2 depende de duas variveis, so as variveis que
aparecem entre colchetes [Linha, Coluna], se as duas forem iguais a 0, ento o valor transferido
para Resultado3 ser 0. Porm, se Linha for igual a 1 e Coluna for igual a 2, ento 9 o valor
que ser enviado Resultado3.

O mesmo princpio vale para a gravao de valores, na Network 2 temos um contato


Grava habilitando um bloco MOVE, assim que este contato fecha, o valor da varivel Origem
copiado para a matriz Arr3 na posio indicada pelas variveis: Matriz, Linha e Coluna.
No exemplo abaixo, colocamos, Matriz=5, Linha=4 e Coluna=3, isto define a posio
dentro de Arr3. Foramos a varivel Origem=146 e acionamos o contato Grava.
Como resultado o valor 146, que est na varivel Origem gravado em Arr3[5,4,3].

10 de outubro de 2012
Pgina: 7

www.eaton.com

Pgina 7

Inicializao de variveis.
Conforme estudamos no treinamento bsico, as variveis podem ser inicializadas, ou seja,
antes do CLP rodar seu primeiro ciclo, estas variveis so carregadas com valores iniciais.
TemperaturaDesejada : UINT:=234;
Neste caso a varivel TemperaturaDesejada carregada com o valor 234 antes do
primeiro ciclo do CLP rodar. Com vetores e matrizes a filosofia a mesma:
Arr1 : ARRAY[0..4] OF USINT:=1,2,3,4,6,7;
Neste exemplo os valores 1, 2, 3, 4, 6 e 7 so carregados no vetor, a dvida surge quando
trabalhamos com vetores ou matrizes grandes. Veja o exemplo:
Arr2 : ARRAY[0..4,0..5] OF USINT:=2(0), 2(1), 4,1, 3, 4, 2(9);
Quando temos vetores e matrizes grandes e queremos inicializar o mesmo valor em vrias
posies em sequncia, colocamos um multiplicador na frente do nmero desejado entre
parnteses, como no exemplo acima, a matriz seria carregada como segue abaixo:

10 de outubro de 2012
Pgina: 8

www.eaton.com

Pgina 8

Arr2[0,0]=0 Arr2[1,0]=3
Arr2[0,1]=0 Arr2[1,1]=4
Arr2[0,2]=1 Arr2[1,2]=9
Arr2[0,3]=1 Arr2[1,3]=9
Arr2[0,4]=4 Arr2[1,4]= ....
Arr2[0,5]=1 .....

Arr2[4,5]=...

Observe que o zero, o um e o nove foram carregados duas vezes.


O sistema neste caso carrega os valores em sequencia, ou seja, escrevemos os valores a
serem carregados sem especificar a posio, o prprio sistema os arranja seguindo a seguinte
regra: Incrementa a posio da direita at o mximo definido pelo programador, ento incrementa
a posio da esquerda, e volta a incrementar a posio da direita at o fim. Veja exemplo:
Arr3 : ARRAY[1..3,1..3,1..3] OF USINT:=1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20;

Arr3[1,1,1]=1

Arr3[2,1,1]=10

Arr3[3,1,1]=19

Arr3[1,1,2]=2

Arr3[2,1,2]=11

Arr3[3,1,2]=20

Arr3[1,1,3]=3

Arr3[2,1,3]=12

Arr3[1,2,1]=4

Arr3[2,2,1=13

Arr3[1,2,2]=5

Arr3[2,2,2]=14

Arr3[1,2,3]=6

Arr3[2,2,3]=15

Arr3[1,3,1]=7

Arr3[2,3,1]=16

Arr3[1,3,2]=8

Arr3[2,3,2]=17

Arr3[1,3,3]=9

Arr3[2,3,3]=18

Tipos de dados derivados.


Tipos de dados derivados so variveis que ns Construmos. Imagine que em meu
programa vou utilizar vrias variveis tipo Matriz com 11 posies sendo que todas as posies
sempre sero iniciadas em 1.
Na aba Data Types do CoDeSys possvel criar estes dados derivados, veja o programa
IecAdvEstruturas.Pro para um exemplo prtico.

Neste caso eu criei um tipo de dados chamado Matriz este tipo de dado utilizado para
declarar variveis em meu programa. As minhas variveis declaradas ficaro assim:
Deposito1 : Matriz;
Deposito2 : Matriz;
Deposito3 : Matriz;

10 de outubro de 2012
Pgina: 9

www.eaton.com

Pgina 9

USINT;

Onde aparece : Matriz ; durante a compilao ser substitudo por : ARRAY[0..10] OF

Enumeraes
Servem para nomear diferentes status de uma varivel. Por exemplo eu quero criar uma
varivel cujo seu contedo no ser um valor, e sim um status, por exemplo Operando, Parado e
Fora de operao. Veja no programa IecAdvEstruturas.Pro alguns exemplos de enumeraes.

Na declarao de variveis, local ou global, eu simplesmente declaro:


Farol1 : Semaforo ;
A varivel Farol1, uma varivel do tipo Semforo, que possui trs status distintos:
Verde, Amarelo ou Vermelho. A grande vantagem da enumerao deixar o programa mais
fcil e claro.

Neste exemplo carregamos o status Amarelo para dentro de Farol1 e depois comparamos
se Farol1 igual a Amarelo.
Em inmeros programas, normal utilizarmos BYTES para definio de status, o
resultado que depois precisamos ter uma tabela debaixo do brao onde se l: Quando BYTE
estiver em zero a mquina est parada, em 1 a mquina est funcionando, em 2 a mquina parou,
em trs ela est em alarme e assim por diante. Com as enumeraes, ns podemos efetivamente
carregar o status na varivel.

10 de outubro de 2012
Pgina: 10

www.eaton.com

Pgina 10

Estruturas
Estruturas so como enumeraes, porm contm em seu interior vrios tipos tipos de
dados diferentes. Imagine que precisamos monitorar vrios tanques, cada tanque precisa de 4
variveis: Pressao, Nvel, Nome do produto que est armazenado e as ltimas 100 medidas de
temperatura. Agora imagine que temos 100 tanques para controlar, cada um deles com estas 4
variveis!
Com as estruturas ns criamos um padro em Data types:

Ns criamos uma estrutura chamada TanquePadrao, dentro desta estrutura temos quatro
variveis, Pressao, Nivel, LabelTanque e MedidasAnteriores que um array com 101
posies para armazenar medidas anteriores.
Em nossa declarao de variveis, local ou global, eu simplesmente crio a seguinte
varivel:
TanqueVariado : ARRAY[0..100] OF TanquePadrao;
Acabamos de criar toda a declarao necessria ao monitoramento dos 100 tanques. Se
colocarmos o programa IecAdv_ExemploEstruturas.pro em modo de simulao, poderemos abrir
toda a estrutura de dados, veja que cada posio do vetor TanqueVariado, possui dentro de si 4
variveis, sendo que uma destas variveis um outro vetor.

Obviamente possvel declarar as estruturas uma a uma:

10 de outubro de 2012
Pgina: 11

www.eaton.com

Pgina 11

Tanque1 : TanquePadrao ;
Ou seja a varivel Tanque1 uma varivel do tipo TanquePadrao.
A utilizao destas variveis extremamente simples. Colocamos o nome da varivel,
neste caso, Tanque1 e pressionarmos . logo em seguida, uma janela com todas as opes ir
aparecer:

Isso se quisermos acessar um dado dentro da estrutura, se quisermos copiar valores de


uma estrutura a outra deixamos somente o nome principal:

Neste exemplo, assim que o contato Copia ligar, todos os dados armazenados em
Tanque1 sero copiados para o vetor TanqueVariado na posio 2.

Programao em ST (Texto Estruturado).


A linguagem ST uma linguagem de programao textual, muito parecida com a
linguagem C e muito utilizada para: gerenciamento de dados, clculos complexos, vrios nveis de
deciso, etc...

Atribuies e Expresses.
Atribuio similar ao comando MOVE do Ladder, ele coloca uma constante, ou ento
uma varivel, dentro de outra varivel:
Resultado := 13;
Neste caso o valor 13 carregado para dentro da varivel Resultado. Sempre no final de
uma atribuio colocamos ; a indicao de que aquela linha lgica chegou ao fim. Se o
compilador no detectar o fim de linha, uma mensagem de erro ir aparecer durante a compilao
do programa.
Resultado1 := Valor_1;
Neste outro exemplo o valor da varivel Valor_1 copiado para dentro da varivel
Resultado1.
A execuo de expresses booleanas simples, basta inserir os operadores AND, OR,
NOT e XOR entre vrias variveis, veja os exemplos:
Resultado4:= NOT VarBOOLEANO1;
Resultado5:= VarBOOLEANO AND VarBOOLEANO2;

10 de outubro de 2012
Pgina: 12

www.eaton.com

Pgina 12

Resultado6:=Var1 OR NOT ((Var2 XOR Var3) AND Var4);


Neste ltimo exemplo os parnteses so resolvidos primeiro. Ou seja, primeiro ir
executar (Var2 XOR Var3), ou exclusivo, o resultado ser caculado com AND Var4, e o no final
este resultado ser negado e feito a operao com OR Var1.
A mesma regra vale para operaes aritmticas:
Resultado7:=34+VariavelNumerica2;
Resultado8:=VariavelNumerica2 VariavelNumerica3;
Quando necessria uma converso de tipos de dados:
Resultado9:=INT_TO_REAL(VariavelNumerica2);
Vrias operaes matemticas esto disponveis:
+(soma), - (subtrao), * (multiplicao) e / (diviso);
EXPT(base,potencia)
(potencia)
SIN(Variavel)
(seno)
COS(Variavel)
(coseno)
TAN(Variavel)
(Tangente)
ASIN(Variavel)
(Arc-seno)
ACOS(Variavel)
(Arc-coseno)
ATAN(Variavel)
(Arc-tangente)
EXP(Variavel)
(Exponencial)
SQRT(Variavel)
(Raiz quadrada)
LOG(Variavel)
(logaritmo)
LN(Variavel)
(logaritmo natural)
Da mesma forma podemos proceder comparaes, o resultado nestes casos ser
sempre um booleano. Um quando a expresso for verdadeira e 0 quando falsa.
Resultado16:=Var1>Var2; (* Se Var1 for maior que Var2 ento Resultado16 = 1*)
Veja abaixo os comparadores:
>
<
<>
<=
>=
=

Maior
Menor
Diferente
Menor ou igual
Maior ou igual
Igual

10 de outubro de 2012
Pgina: 13

www.eaton.com

Pgina 13

Comando condicional. (IF, ELSIF e ELSE)


O comando condicional executa uma ou mais linhas de comandos desde que uma
condio inicial seja satisfeita.
IF <EXPRESSO> THEN
<COMANDOS>;
END_IF;
Se a expresso retornar um valor verdadeiro, ento o programa ir executar os comandos
que esto aps o operador THEN, caso contrrio o programa ir pular os comandos at o
indicador de fim de comando, neste caso END_IF;
O comando condicional tambm pode ser montado desta forma:
IF <EXPRESSO> THEN
<COMANDOS>;
<COMANDOS>;
ELSE
<COMANDOS>;
<COMANDOS>;
END_IF;
Neste segundo exemplo, se a expresso retornar um valor verdadeiro, o programa ir
executar o que se encontra aps o operador THEN. Caso contrrio, ELSE, o programa ir
executar o que est aps o operador ELSE.
Outra forma de montar o comando condicional atravs dos comandos ELSIF:
IF <EXPRESSAO> THEN
<COMANDOS>;
<COMANDOS>;
ELSIF <EXPRESSAO>
<COMANDOS>;
<COMANDOS>;
ELSIF <EXPRESSAO>
<COMANDOS>;
<COMANDOS>;
ELSIF <EXPRESSAO>
<COMANDOS>;
...........
ELSE
<COMANDOS>;
<COMANDOS>;
END_IF;
Neste caso o programa ir executar os comandos que estiverem abaixo da Expresso que
for verdadeira. Se por acaso, duas expresso forem verdadeiras ao mesmo tempo, a que estiver
primeiro a que ser executada, se nenhuma expresso for verdadeira, ento os comandos que
aparecem abaixo do ELSE sero executados.

10 de outubro de 2012
Pgina: 14

www.eaton.com

Pgina 14

Comando seletor (CASE)


O comando seletor ideal para seleo de vrias possibilidades, veja:
CASE <Variavel Inteira> OF
<Valor1> :
<Comandos> ;
<Comandos>;
<Valor1> :
<Comandos> ;
<Valor1> :
<Comandos> ;
...
<ValorN>..(ValorM> : <Comandos> ;
ELSE
<Comandos>;
END_CASE:
Onde aparece <Variavel Inteira> colocamos uma varivel do tipo INT, UINT, USINT, SINT,
DINT ou UDINT.
O programa ir comparar vrios valores ou intervalos de valores com a varivel inteira e
ir executar os comandos que estiverem na linha correspondente.
CASE SeletorVelocidade OF
1:
Escolha:=100 ;
2:
Escolha:=1000 ;
3,4 :
Escolha:=10000 ;
5..100 : Escolha:=15000;
ELSE
Escolha:=0;
END_CASE:
No exemplo acima considere SeletorVelocidade como uma varivel do tipo UINT. Se
esta varivel for igual a 1 a variavel Escolha ser carregada com o valor 100. Se o
SeletorVelocidade for igual a 3 ou 4 ento Escolha ser igual a 10000. Se SeletorVelocidade
tiver um valor que est entre 5 e 100 ento Escolha ser igual a 15000.
Se nenhuma das opo previstas na estrutura CASE foi obedecida ento o comando
ELSE executado, ou seja, Escolha igual a 0.

Comandos de repetio:
(FOR)
Os comandos de repetio, ou comandos de loop, repetem as linhas de comando at
que uma determinada condio seja satisfeita. O mais utilizado o comando FOR.
FOR <InicializacaoDaVariavel> TO <ValorMaximoDeIncrementos> BY <ValorIncrementos> DO
<Comandos>;
<Comandos>;
END_FOR;
Este comando ir incrementar a varivel de iterao enquanto repete os comandos. Veja
um exemplo prtico abaixo:
FOR Contagem:=0 TO 10 BY 2 DO
<Comandos>;
<Comandos>;
END_FOR;
Assim que o programa chega nesta linha a varivel Contagem carregada com o valor
zero, todas as linhas de comando so executadas e a varivel Contagem incrementada por 2,

10 de outubro de 2012
Pgina: 15

www.eaton.com

Pgina 15

valor precedido pelo comando BY. Os comandos so executados novamentes e o ciclo se repete
at que a varivel contagem chegue a 10.
O comando BY opcional, a omisso do mesmo compreendida pelo programa como
incremento unitrio.
A varivel de iterao no deve ser utilizada fora da repetio pois seu valor depende da
implementao do comando.
Os comandos dentro da repetio no podem afetar a varivel de iterao.
Quando temos uma estrutura de repetio o programa fica para dentro desta repetio at
que as condies sejam satisfeitas, ou seja, o tempo de ciclo do programa sobe quando utilizamos
estas estruturas, um cuidado adicional deve ser tomado com estes comandos para evitar erros de
watchdog.
Veja outro exemplo abaixo:
FOR Index:=0 TO 100 DO
Vetor[Index]:=0;
END_FOR;
Neste exemplo, imagine a varivel Vetor como sendo um array unidimensional com 101
elementos (Vetor : ARRAY[0..100] OF UINT; ) quando o programa chegar no FOR a varivel
Index colocada em 0. A linha de comando ento executada, ou seja, a posio 0 do nosso
vetor carregada com o valor 0.
Logo em seguida a varivel Index incrementada por 1, comando BY omitido. Desta vez
a posio 1 do vetor carregada com 0.
O comando ir se repetir at que Index seja igual a 100, ou seja, todo o vetor
carregado com 0.

(WHILE)
Diferente do FOR a expresso WHILE no incrementa automaticamente a varivel de
iterao, ao invs disto ela repete os comandos at que a condio de repetio no seja mais
verdadeira. Vale a pena ressaltar que se a ExpressaoBooleana no for verdadeira na primeira
varredura, os comandos no so executados nem uma nica vez.
WHILE <ExpressaoBooleana> DO
<Comandos>;
<Comandos>;
END_WHILE;
Novamente, um cuidado adicional necessrio quando temos esta estrutura, o programa
fica parado dentro do LOOP at que a expresso booleana deixe de ser verdadeira, isto aumenta
o tempo de ciclo do CLP e pode provocar um erro de Watch Dog.
WHILE Ponte < PosicaoFinal DO
Movimento:=Movimento+1;
Ponte:=Movimento;
END_WHILE;

10 de outubro de 2012
Pgina: 16

www.eaton.com

Pgina 16

(REPEAT)
Diferente do FOR a expresso REPEAT no incrementa automaticamente a varivel de
iterao, ao invs disto ela repete os comandos at que a condio de repetio no seja mais
verdadeira. Vale a pena ressaltar que, diferente do WHILE, se a ExpressaoBooleana no for
verdadeira na primeira varredura, os comandos so executados uma nica vez.
REPEAT
<Comandos>;
<Comandos>;
UNTIL <ExpressaoBooleana>
END_REPEAT;

(EXIT)
O comando EXIT utilizado para.encerrar um LOOP. Independente de utilizarmos um
FOR, WHILE ou REPEAT, no instante que o programa encontra uma instruo EXIT o programa
sai do LOOP.
REPEAT
<Comandos>;
<Comandos>;
IF <ExpressaoBooleana> THEN
EXIT;
END_IF;
UNTIL <ExpressaoBooleana>
END_REPEAT;

Chamando blocos de funo


Blocos de funo iro aparecer com a seguinte estrutura:
<NomeDoBloco> ( <EntradaDoBloco>:= , <EntradaDoBloco>:= , <SaidaDoBloco>=> );
Na programao estruturada um cuidado especial deve ser tomado com blocos de
funes, devido aos loops, decises e seletores, algumas vezes a chamada do bloco pode ficar
em algum trecho do programa onde o mesmo no chamado, ou seja, suas sadas e entradas
no so atualizadas.
Veja o exemplo abaixo, considerando o bloco como sendo um TON:
IF Var1 THEN
Timer1 (IN:= Habilita, PT:= T#3S, Q=> Saida, ET=> TempoDecorrido);
END_IF;
Habilita:=TRUE;
SaidaDigital:=Saida;
Se a varivel Var1 no for verdadeira o temporizador nunca ir iniciar, mesmo com a
varivel Habilitar em 1.
O mesmo vale para a varivel Saida, se Var1 voltar para zero, mesmo que o tempo de
trs segundos chegue ao fim, a sada no ser habilitada enquanto o bloco no for chamado ao
menos uma vez.
extremamente recomendado que os blocos de funo tenham suas chamadas fora das
estruturas de decises e loops.

10 de outubro de 2012
Pgina: 17

www.eaton.com

Pgina 17

Programao em SFC (Sequential Function Chart)


Universidades francesas desenvolveram o Grafcet, que nada mais era do que uma
representao de processos sequenciais, baseado nas Redes de Petri. O Grafcet (Graphe
Fonctionnel de Command Etape Transition) virou padro europeu em 1988, com a edio da
IEC848.
Em 1992 a IEC1131-3 adotou o SFC como sendo a quinta linguagem de programao,
baseada na IEC 848. Em 1994 a IEC61131-3 introduziu algumas alteraes ao SFC.

Diferente das demais linguagens, o SFC extremamente recomendado para:


Descrever comportamentos sequenciais.
Mquinas sequenciais e/ou complexas.
Utilizado como linguagem de estruturao.

O SFC traz inmeras vantagens ao programador, veja abaixo algumas delas:

Facilidade para implementar lgicas que devam ocorrer em paralelo.


Flags para controle e status do programa.
Facilidade em estruturar programas complexos.
Facilidade em detectar falhas de processo e de programa.

A estrutura de um Chart relativamente simples, o programa baseado em Etapas e


Transies. Temos a Etapa Inicial, sempre que o CLp ligado pela primeira vez esta etapa inicia
ligada.
As transies na verdade so condies que ditam quando uma etapa anterior deve ser
desligada e quando uma etapa posterior deve ser ligada. Obrigatoriamente todos os Charts devem
ser montados respeitando-se a sequencia a seguir: Etapa-Transio-Etapa-Transio.....etc...
Sempre que inserirmos uma nova Etapa, automaticamente, o programa ir inserir uma
nova transio, e assim por diante.
Da mesma forma, no podemos apagar uma etapa isolada, sempre que quisermos apagar
um pedao do programa, teremos que apagar uma transio tambm.

10 de outubro de 2012
Pgina: 18

www.eaton.com

Pgina 18

O funcionamento extremamente simples para um SFC. Assim que ligamos o CLP a


Etapa Init acionada. Se houverem aes atreladas a esta etapa estas aes sero
executadas.
No momento em que a transio Trans1 ocorre, esta Transio tem que ser um valor
booleano, a Etapa Init desligada e a etapa Step1 se torna ativa.
A etapa Step1 permanece ativa enquanto a condio Trans2 no disparar. No instante
em que esta transio dispara o Step1 desligado e o Step2 se torna ativo.
No caso do CoDeSys existem 4 bibliotecas que precisamos importar para podermos
utilizar o SFC em sua totalidade, so elas:

Assim que iniciamos um programa novo no CoDesys em SFC, precisamos nos certificar
tambm que a opo Use IEC-Steps est ativa na parte superior da tela.

10 de outubro de 2012
Pgina: 19

www.eaton.com

Pgina 19

Atributos da Etapa.
Todas as Etapas podem ser programadas com tempo mximo, mnimo e um comentrio.

Alm de atribuir tempos e comentrios a cada Etapa, podemos tambm mudar a


visualizao do programa como um todo. Tanto a altura, largura das caixas e comentrios bem
como, qual informao desejamos ver ao lado de cada etapa.

10 de outubro de 2012
Pgina: 20

www.eaton.com

Pgina 20

Transies.
As transies, na verdade, contm uma varivel booleana, uma constante ou uma
equao cujo resultado um valor booleano.
Transies mais complexas podem conter lgicas internas. Estas lgicas podem ser
montadas em vrias linguagens diferentes. Para inserir uma lgica interna basta clicar duas vezes
sobre a transio.

Repare que quando trabalhamos com lgica interna para a transio, no importa a
linguagem escolhida, voc nunca ter uma sada propriamente dita, no h bobina no caso do
ladder, comando ST no caso da lista de instrues ou := no caso da programao estruturada. O
prprio compilador entende que a sada da lgica ser o disparo da transio.

10 de outubro de 2012
Pgina: 21

www.eaton.com

Pgina 21

Chart sequencial.
O Chart sequencial , como o nome j diz, um SFC escrito em apenas uma direo
possvel, ou seja, as etapas ocorrem uma aps a outra e no h caminhos alternativos.
Para inserir etapas e transies em srie utilizamos os botes:
para inserir etapas
e transies antes ou depois da etapa selecionada. Lembre-se sempre, como o SFC montado
respeitando-se a ordem: Etapa-transio-Etapa-transio...no h como inserir somente uma
etapa ou somente uma transio em srie.

Chart deciso
O Chart deciso aquele que possui vrios caminhos possveis durante sua execuo,
veja o exemplo abaixo:

Trans4.

Quando paramos no Step1 existem trs caminhos disponveis, via Trans2, Trans3 ou

Se ocorrer Trans2, ento o Step1 desligado e o Step5 acionado.


Porm se ocorrer o Trans3, o Step1 desligado e quem acionado o Step2.
Analogamente, se Trans4 dispara, ento Step1 desligado e o Step4 ligado.
Apenas um Step ser ligado, mesmo que as trs transies estejam em nvel 1 ao mesmo
tempo, a transio que vale a que est mais a esquerda do chart.
Para iserir transies de deciso utilizamos os botes:
esquerda ou direita da transio desejada!

10 de outubro de 2012
Pgina: 22

www.eaton.com

que inserem transies

Pgina 22

Chart paralelo.
O Chart Paralelo permite que vrias etapas sejam acionadas em paralelo. No exemplo
abaixo, assim que Trans1 ocorrer, a etapa Step1 ser desligada, e as trs etapas abaixo da
divergncia AND sero acionadas: Step2, Step3 e Step4.
Uma vez dentro da estrutura paralela, os disparos das transies so totalmente
independentes, podemos ter estruturas sequenciais, decisrias e paralelas dentro deste chart.
A sada do paralelismo no entanto depende de dois fatores, em primeiro lugar, todas as
etapas no final do paralelismo precisam estar ativas, neste exemplo: Step2, Step7 e Step8. A
transio que se encontra aps a Convergncia AND deve disparar, neste exemplo Trans6.
Assim que esta condio satisfeita, todas as etapas, Step2, Step7 e Step8 so
desligadas e a etapa seguinte, Step9, acionada.

Para inserir etapas em paralelismo utilizamos os botes:


paralelo, esquerda ou direita da etapa selecionada.

que inserem etapas em

Variveis implcitas.
Variveis implcitas so variveis declaradas no programa em SFC que possuem funes
pr-definidas. Estas variveis trazem recursos de controle e de monitoramentodo programa em
SFC.
Em qualquer lugar do programa em que escrevermos:
<NomeDoPasso>.t  Retorna um valor do tipo TIME relativo ao tempo que a etapa est
ligada.
<NomeDoPasso>.x  Retorna um valor do tipo BOOL. Indica se a etapa em questo est
ativa.
<NomeDoPasso>._x  Retorna um valor do tipo BOOL. Indica que a etapa ser ativa no
prximo ciclo.
Outras variveis so declaradas na rea de declarao de variveis do programa, neste
caso o nome da varivel se mantm e o compilador atribui uma funo especial a ela:

SFCTrans : BOOL ;  Vai para 1 sempre que alguma transio dispara.

10 de outubro de 2012
Pgina: 23

www.eaton.com

Pgina 23

SFCCurrentStep : String();  Armazena o nome da etapa que est ativa.


SFCEnableLimit : BOOL ;  Habilita o controle de timeout no grafcet.
SFCQuitError : BOOL;  Pra a execuo do grafcet enquanto a varivel estiver em 1,
assim que a mesma retorna a zero, os erros de timeout e os temporizadores das etapas
voltam a zero.
SFCErrorAnalyzationTable : ExpressionResult ;  Estrutura que, em caso de TimeOut,
carrega o nome da varivel, endereo fsico, comentrio e valor atual de at 16 variveis
da transio subseqente Etapa que gerou o erro.
SFCError : BOOL ;  Vai para 1 quando alguma etapa ultrapassou o tempo mximo.
SFCErrorStep : String ;  Carrega o nome da Etapa em que ocorreu o erro de TimeOut.
SFCErrorPou : String ;  Carrega o nome do POU em que ocorreu o erro de Timeout.
SFCInit: BOOL ;  Retorna o SFC Etapa inicial. Porm enquanto esta varivel
permanecer em 1 o Grafcet permanece parado na Etapa inicial.
SFCReset : BOOL;  Retorna o SFC Etapa Inicial porm ESTA ETAPA processada,
ou seja, uma ao dentro da etapa inicial pode levar o SFCReset de volta a zero por
exemplo.
SFCPause : BOOL ;  Pra a execuo do grafcet enquanto esta varivel for igual a
TRUE.
SFCTip, SFCTipMode : BOOL ;  Variveis para controle passo a passo do programa
SFC.
SFCTipMode bloqueia o disparo das transies enquanto estiver em 1.
SFCTip fora o disparo das transies independente das condies de disparo.

Qualificadores de ao.
Cada etapa recebe uma ao, esta ao pode ser uma varivel booleana ou um subprograma do tipo Action. O Qualificador aparece ao lado esquerdo do nome da ao conforme
podemos ver nos exemplos abaixo.

Qualificador N (No Stored).


Este qualificador indica que a ao ligada ao mesmo tempo em que a etapa ligada,
assim que a etapa desativada, esta ao executada uma ltima vez, mesmo com a etapa
desativada.

10 de outubro de 2012
Pgina: 24

www.eaton.com

Pgina 24

Qualificadores S e R (SET // RESET)


O qualificador S ativa a ao correspondente to logo a Etapa se torna ativa. A ao
permanece ativa, independente da etapa que a ativou, at que uma nova etapa com qualificador R
seja ativada. Neste ponto o programa executa a ao uma ltima vez antes de desliga-la.

Qualificador L (Limit <time>)


A ao comea a ser executada quando Step1 se torna ativo, todavia ela permanece ativa
pelo tempo determinado. Se o estado for desativado antes, a ao tambm interromper o
processamento antes.
A ao executada uma ltima vez, quando a etapa desativada, ou aps o tempo
expirar.

10 de outubro de 2012
Pgina: 25

www.eaton.com

Pgina 25

Qualificador D (Delay <time>)


A ao comea a ser executada aps um atraso determinado, a partir do instante de
ativao da etapa. Assim que a etapa desativada, a ao executada uma ltima vez antes de
ser desativada.
Caso a etapa seja desativada antes do tempo de atraso ento a ao no ser executada!

Qualificador P (Pulse)
A ao executada uma nica vez assim que a etapa ativada.

10 de outubro de 2012
Pgina: 26

www.eaton.com

Pgina 26

Qualificador SD (Store and Delay <time>)


A ao comea a ser executada aps um tempo de atraso INDEPENDENTE do tempo
que a etapa permaneceu ativa! E permanece ativa at que um qualificador de reset seja ativado
por StepN. A ao executada uma ltima vez assim que StepN fica ativo.

Qualificador DS (Delay and Store <time>)


Assim que Step1 ativo o tempo de atraso comea a ser computado. Assim que o tempo
expira a ao ativada e permanece ativada at que o qualificador R seja ativo pela StepN. A
ao executada uma ltima vez assim que StepN fica ativo.
Caso Step1 seja desativado antes do tempo de atraso, ento a ao no ser ativa.

10 de outubro de 2012
Pgina: 27

www.eaton.com

Pgina 27

Qualificador SL (Store Limited <time>)


Assim que Step1 ativo a ao tambm ativada e permanece ativa pelo tempo
estipulado independente da durao de Step1. A ao executada uma ltima vez assim que o
tempo esgota.
Caso um qualificador R seja ativado antes do fim deste tempo, a ao ser desativada.
Ele executada uma nica vez assim que StepN se torna ativo.

Criando aes.
As aes podem simples variveis booleanas, por exemplo, sadas digitais do CLP ou
podemos ter programas dentro destas aes.
Para adicionar aes basta clicar em uma etapa com o boto direito do mouse e
selecionar a opo : Associate Action. Uma vez associada uma ao uma etapa podemos
alterar o qualificador, que fica esquerda da ao, e selecionar a ao propriamente dita. Aqui
colocamos o nome da varivel, no caso de uma varivel booleana, ou ento o nome da ao.
Para inserirmos aes, clicamos com o boto direito no programa SFC em questo e
selecionamos a opo add action, o programa ir perguntar em que linguagem queremos criar
esta ao. Note que no h declarao de variveis na ao propriamente dita, a declarao
ficar sempre no programa, pois a ao fica abaixo do programa.

As aes podem chamar funes e blocos de funes em seu interior sem problemas.

10 de outubro de 2012
Pgina: 28

www.eaton.com

Pgina 28

As etapas podem chamar quantas aes forem necessrias para alcanar nossos
objetivos.

10 de outubro de 2012
Pgina: 29

www.eaton.com

Pgina 29

Explorando os recursos avanados do CoDeSys.


Watch / Recipe manager
Com a ajuda do Watch Recipe manager voc pode ver os valores das variveis
selecionadas. Este recurso torna possvel tambm o preset de valores nas variveis e a
transferncia dos mesmos como um grupo para o PLC ('Write Recipe'). Da mesma forma, os
valores atuais do PLC podem ser lidos para dentro do CoDeSys e armazenados dentro do PC
(Read Recipe). Estas funes so teis, por exemplo, para a inicializao dos parmetros de
controle.

Watch / Receipt Manager em modo Offline


No modo Offline, voc pode criar vrias listas diferentes, com variveis ou valores prdefinidos diferentes.
Voc pode inserir variveis nas listas atravs do Input assistant, tecla F2, ou escrevendo
as variveis diretamente.
<POUName>.<Variable Name>.

10 de outubro de 2012
Pgina: 30

www.eaton.com

Pgina 30

As variveis na lista podem ser carregadas com valores constants. Isto significa que no
modo Online podemos executar o comando 'Write Receipt' que escreve estes valores iniciais s
variveis em questo.
No exemplo mostrado na figura acima, a varivel Counter presetada com o valor 6.
Quando temos variveis do tipo array ou structure devemos enderear os elementos um a um. Por
exemplo uma estrutura chamada struvar com trs variveis dentro da mesa: a, b, c:
PLC_PRG.struvar.a:=<value>
PLC_PRG.struvar.b:=<value>
PLC_PRG.struvar.c:=<value>
No caso de arrays devemos indexar os elementos um a um:
PLC_PRG.arr_var[0]:=<value>
PLC_PRG.arr_var[1]:=<value>

Watch and Receipt Manager no modo Online.


No modo Online os valores so exibidos do lado das variveis. Arrays e estruturas
marcados com um sinal de + na lateral esquerda indicam que dentro daquela varivel existem
outros elementos.

Clicando com o boto direito do mouse no nome da Receita vemos vrias opes:

Onde:
New Watch List: Nos permite criar uma nova lista de visualizao.
Delete Watch List: Apaga a lista de visualizao selecionada.
Write Recipe: Carrega os valores presetados do Watch Recipe Manager para o CLP.
Read Recipe: Carrega os valores atuais do CLP para o Watch Recipe manager.
Save Watch List: Salva a lista atual em seu PC com todos os valores lidos do CLP.
Load Watch list: Carrega uma lista salva em seu PC com todos os valores presetados.
Rename Watch Lista: Renomeia a lista atual.

10 de outubro de 2012
Pgina: 31

www.eaton.com

Pgina 31

LOG
LOG uma ferramenta utilizada para registrar em ordem cronolgica toda a atividade que
realizamos com o CoDeSys, esta atividade armazenada no prprio computador e estes arquivos
podem ser salvos e abertos em outras ferramentas tais como os editores de texto.
Para habilitar o LOG devemos ir primeiro no menu Project- Options e habilitar a
ferramenta LOG. Assim que a mesma estiver habilitada e comearmos a trabalhar Online com o
CLP, realizando downloads, forando variveis, etc... o Log ir registrar tudo no computador.

10 de outubro de 2012
Pgina: 32

www.eaton.com

Pgina 32

10 de outubro de 2012
Pgina: 33

www.eaton.com

Pgina 33

Export / Import tools.


As ferramentas de importao e exportao so largamente utilizadas para aproveitar
pedaos de um projeto em outro projeto. Para exportarmos um pedao de um projeto utilizamos
a opo: Project Export no menu principal, o CoDeSys ir ento perguntar quais partes do
projeto desejamos exportar, assim que selecionamos estes pedaos, escolhemos o nome do
arquivo que desejamos gerar!
Quando queremos importar estes pedaos selecionamos a opo Project Import no
menu principal, todos os elementos exportados aparecero neste novo CoDeSys.

Quando trabalhamos com programas grandes esta ferramenta bastante til pois
podemos dividir as tarefas entre vrios programadores e depois importar os pedaos criados
separadamente.
Sempre recomendvel separar os pedaos atravs da criao de folders para garantir
um melhor reconhecimento das diversas partes.
Utilizamos variveis globais quando as variveis que declaramos devem ser acessadas
por todos os programadores, por exemplo, sadas fsicas do CLP, e as variveis locais para
variveis que utilizaremos dentro de nosso programa. Isso garante que, mesmo que diferentes
programadores criem variveis com os mesmos nomes, uma varivel local no afetar outra
varivel local.
Atualizaes em listas de variveis podem ser reenviadas ao time de programao que
simplesmente ir importar as atualizaes sem perder o que j est feito.
Assim que os pedaos estiverem prontos, os programadores exportam seus pedaos e o
coordenador de projetos junta tudo em um nico programa principal.

10 de outubro de 2012
Pgina: 34

www.eaton.com

Pgina 34

Comparao de projetos.
Inmeras vezes nos deparamos com vrias verses de um mesmo projeto, quer seja em
computadores diferentes, CLPs diferentes ou mesmo um programa que acabamos de realizar o
up-load e no sabemos o quanto o programa puxado est diferente do programa que consta em
nossa mquina.
Para estas situaes temos o recurso de comparao de programas. Abrimos um dos
programas em questo normalmente no CoDeSys. Ento selecionamos no menu principal a opo
Project Compare e escolhemos o arquivo que desejamos comparar:

Quando existem diferenas entre os objetos, os mesmos aparecem em vermelho nas


duas telas. Quando h objetos que existem em um projeto, e no existem no outro, o mesmo
aparece em verde no projeto que o contm e aparece um espao no projeto onde ele no existe.
Os demais objetos que existem nos dois projetos, e so iguais em ambos, aparecem em
preto ou em cinza.
Para ver as diferenas entre os objetos basta clicar duas vezes em um deles.

10 de outubro de 2012
Pgina: 35

www.eaton.com

Pgina 35

No caso acima a linha que est divergente aparecer em vermelho. As linhas azuis
indicam que so linhas novas, enquanto que as linhas marcadas em cinza no existem no outro
projeto.

TASK Manager
Em algumas situaes torna-se necessrio dividir o programa em vrias tarefas tasks
diferentes, seja para otimizao do tempo de ciclo, seja para dividir um programa muito extenso ou
s vezes at para melhorar o tempo de resposta da Ethernet.
Quando trabalhamos sem o task configuration, ou seja, temos simplesmente o
PLC_PRG, o prprio sistema executa este programa a cada 10mS independente do tamanho do
mesmo. Dependendo do tamanho do programa podemos ter um erro watchdog, ou ento
experimentar lentido nas respostas da ethernet.
Considere um programa que demora 4mS para ser executado, no exemplo citado acima,
PLC_PRG, o sistema tem ainda 6mS para gerenciar a Ethernet e solicitaes do CoDeSys quando
estamos monitorando o programa on-line.

Se o tempo de ciclo for aumentado para 9mS ento temos uma sobra de 1mS para que o
sistema cuide da Ethernet, webserver etc..

10 de outubro de 2012
Pgina: 36

www.eaton.com

Pgina 36

Nestas situaes uma boa sada a criao de tasks, ns passamos a escolher a janela
de tempo em que o programa ser chamado ciclicamente. Na opo TASK Configuration que fica
na aba Resource do CoDeSys podemos criar as tasks. Nesta situao o programa no pode mais
se chamar PLC_PRG, para trocar o nome de um programa clique sobre o mesmo com o boto
direito do mouse e escolha a opo Rename Object.
Em task configuration clique com o boto direito e escolha a opo append task:

Podemos criar vrias Tasks diferentes, nestas tasks ns configuramos alguns parmetros:

10 de outubro de 2012
Pgina: 37

www.eaton.com

Pgina 37

Name: Nome da Task.


Priority(0..31): prioridade da task em questo. Quando temos vrias tasks este nmero que
determina a prioridade entre elas. Ou seja, se estivermos executando o Task_A que tem
prioridade 1 e, devido ao tempo definido, o sistema precisa executar o Task_B, se esta Task tiver
uma prioridade com nmero menor, neste caso 0, ento a Task_A ser interrompida, a Task_B
executada e assim que esta terminar o processo volta Task_A. Se a Task_B tiver uma prioridade
com nmero maior, 2, 3, 4... ento o Task_A ir terminar a sua execuo e s ento a Task_B
ser executada.
Type: Tipo da task, normalmente selecionamos a opo cyclic e colocamos o intervalo que
queremos que a task seja chamada, aumentando este tempo para, por exemplo, 20mS um caso
citado anteriormente de tempo de execuo igual a 9mS deixaria 11mS livres para que o CLP
possa gerenciar a ethernet, web server, etc....
Watchdog: Determina o tempo que o sistema espera antes de sinalizar um erro de watchdog. Por
exemplo se tivermos um programa de 4mS e este programa chamado a cada 8mS teremos o
seguinte:

Imagine que devido a saltos, loops e outras lgicas internas o programa extrapola este
tempo de 4mS chegando a 12mS. Neste ponto temos outro parmetro chamado Sensitivity que
indica quantas vezes seguidas o sistema tolera estes ciclos altos:

Na situao acima, caso Sensivity seja regulado para 2, no ocorre erro pois o processo
entende que no houveram duas extrapolaes de tempo consecutivas.

J nesta situao, existe o erro de watchdog pois o sistema, por duas vezes seguidas,
extrapolou o tempo mximo definido.
Quando trabalhamos com vrias tasks temos a possibilidade de analizar o tempo geral,
para isso precisamos importar a biblioteca SysTaskInfo.lib quando estivermos on-line veremos a
seguinte tela no task Configuration:

Outra forma de analizar os tempos das tasks atravs do comando tsk no PLC browser:

10 de outubro de 2012
Pgina: 38

www.eaton.com

Pgina 38

Ferramentas de visualizao
Para habilitar a visualizao por WEB entramos na tela Target Settings e habilitamos a
funo Web visualization na aba Visualization.

rotina.

Na opo width e height selecionamos as dimenses da tela que utilizaremos durante a

Se vamos criar rotinas de alarmes nesta tela selecionamos tambm a opo


Alarmhandling in the PLC.
Na aba Visualizations clicamos com o boto direito e selecionamos Add object,
obrigatoriamente precisamos criar um primeiro objeto com o nome de PLC_VISU, esta tela a
primeira a ser aberta quando chamarmos o WEB visualization, outras telas podem ser chamadas
apartir desta.

10 de outubro de 2012
Pgina: 39

www.eaton.com

Pgina 39

Tenha sempre em mente que o WEB visu uma ferramenta que consome tempo de
processamento da CPU, ou seja, ela impacta diretamente na performance do processamento, no
recomendvel trabalhar com mltiplos acessos. (WEB + Programao + WEB....etc)
Para visualizar a tela precisamos ter instalado um internet browser em nosso
computador alm do software Java Machine. Em algumas situaes precisamos atualizar o
firmware da IHM (A famlia XC-CPU2xx-XV no necessita de atualizao).

Uma vez que o programa est colocado no CLP basta abrirmos o Browser e
selecionarmos este endereo:
http://<IP da IHM>:8080/webvisu.htm
Para maiores referncias sobre as ferramentas disponveis para a criao de telas favor
consulta o manual CoDeSys_Visu_V23_E.pdf

Placeholders
Uma das ferramentas mais teis que temos no que tange a criao de telas de
visualizao no CoDeSys o Placeholder. Esta ferramenta permite que se crie uma tela bsica,
ou uma sub tela, e que a mesma seja copiada inmeras vezes, sendo que para cada cpia, ns
atribumos um set de variveis nico. Em termos comparativos, seria um bloco de funo utilizado
para visualizao. Veja o exemplo:
Criamos uma tela pequena chamada PH_Motor na aba visualizao:

Para qualquer animao, boto ou varivel que quisermos utilizar nesta tela ns inserimos
$ <Nome da varivel> $.

10 de outubro de 2012
Pgina: 40

www.eaton.com

Pgina 40

Neste caso o boto de liga ter a funo Tap variable, ou seja, ele ser um boto do tipo
pulsante e a varivel atrelada a este boto a $Liga$. Todas as variveis utilizadas nesta tela
sero colocadas como $xxxx$.
Assim que criarmos nossa tela principal, utilizamos a opo
visualization. Clicamos e
arrastamos com o mouse na tela, assim que uma janela de dilogo aparece selecionamos a opo
PH_Motor, neste caso o nome da sub tela que criamos anteriormente.
Uma vez inserida a sub tela, clicamos duas vezes sobre a mesma e selecionamos a
opo Placeholder na aba visualizao:

A varivel $Liga$ ir aparecer, agora ligamos esta varivel varivel desejada em nosso
programa, se copiarmos a mesma tela 20 vezes, em cada uma delas podemos direcionar uma
varivel de programa diferente.

10 de outubro de 2012
Pgina: 41

www.eaton.com

Pgina 41

Contador Rpido 1CNT


Para o contador rpido 1CNT podemos utiliza-lo de duas formas para fazer as contagem
dos pulsos enviados por um encoder por exemplo, podemos fazer a leitura e comparao dos
valores no Codesys ou fazer esta comparao diretamente no hardware (Carto), que com isso
podemos ganhar um tempo de rede e deixar a resposta a alguma comparao <, >, ou = mais
rpida doque se fosse feita pelo CLP.
Abaixo iremos explicar os principais detalhes que devem ser considerados para fazer a
leitura do carto 1CNT dos dois modos, para isso vamos usar um Encoder incremental de 2 canais
A e B de 24Vdc.

Contador Rpido 1 CNT comparao via Codesys.


Depois que colocamos nossa rede mster na IHM ou CLP e nosso Gateway, devemos
entrar no I/O Assistant pelo Codesys e alterar alguns parmetros de acordo com a aplicao que
temos, conforme abaixo:

Selecione o carto no I/O Assistant e v na aba PlugIn l podemos configurar opes


como Modo de contagem, Configurar a sada digital, limit de contagem superior e inferior, entre
outras coisas que podem ser encontradas no manual MN05002012Z-EM, para uma aplicao de

10 de outubro de 2012
Pgina: 42

www.eaton.com

Pgina 42

encoder incremental com sinais A e B em 24Vdc, no precisaremos modificar nenhum parmetro,


depois de alterados os parmetros basta voltar para o Codesys.

Quando nossa configurao volta para o Codesys sempre temos que incluir o COBid das
Outputs, pois ele s trz o COBid de leitura do contador rpido que sem o COBid dos Outputs no
ir ler nada pois no mesmo temos que acionar alguns Bits para que as funes do carto
funcionem corretamente, abaixo podemos ver um passo a passo de como incluir o COBid das
Outputs.

Quando clicamos em cima do Gateway em nossa arquitetura de rede se abrir uma aba a
direita, devemos ir na opo Receive PDO-Mapping nesta aba temos duas janelas a da
esquerda temos as opes que podemos incluir no COBids, no caso temos que clicar na opo
ExtentibleObject_5808 e selecionar a opo EncoderControl_Generic XN-1CNT_0, depois de
selecionado devemo abrir a opo PDO 0x1400 que est na janela da direita ali temos vrios
espaes vazios para mover nosso objeto de extenso basta selecionar o primeito objeto vazio e
pressionar o boto

10 de outubro de 2012
Pgina: 43

que o mesmo ficarada seguinte forma:

www.eaton.com

Pgina 43

Depois que incluimos o nosso COBid das Outputs j podemos fazer nosso programa,
segue abaixo um exemplo:

Alem de habilitar a contagem no 1CNT podemos tambm habilitar algumas outras funes
utilizando o Byte de sada que foi criado conforme abaixo:
Bit 0 Habilita a leitura do 1CNT;
Bit 1 Habilita a funo de reset via Hardware atravs da entrada DI1 (Borne 14);
Bit 2 Reservado;
Bit 3 Habilita sada digital DO1 a funcionar;
Bit 4 Aciona a sada Digital DO1 (Borne 24);
Bit 5 Habilita sada virtual DO1 a funcionar;
Bit 6 Aciona a sada virtual DO1;
Bit 7 Reservado;
Para fazer o Reset da contagem via Hardware temos que fazer uma alterao no Service
Data Objects conforme a imagen abaixo:

10 de outubro de 2012
Pgina: 44

www.eaton.com

Pgina 44

Quando clicamos na aba Service Data Objects ir aparecer uma lista com algumas
funes, devemos encontrar o Index 5800sub1 e mudar o valor de 0 para 7168 que com isso
estaremos habilitando o reset quando acionarmos a entrada 14 do carto 1 CNT.

Contador Rpido 1 CNT comparao no hardware.


Tambm podemos fazer a comparao do valor adquirido no 1CNT diretamente no
carto(Hardware), neste caso feita uma comparao de um valor pr-determinado no carto que
tambm pode ser alterado no Codesys com o valor adquirido na entrada rpida do 1 CNT, essa
comparao pode ser <= ou >=, com isso conseguimos ter respostas mais rpidas mas s vai
funcionar no caso de quando o contador atingir um certo numero de pulsos ele ativa sua sada
digital.
Depois que colocamos nossa rede mster no Codesys para a IHM ou CLP e depois incluir
o Gateway, devemos entrar no I/O Assistant pelo Codesys e alterar alguns parmetros de acordo
com a aplicao que temos, conforme abaixo:

10 de outubro de 2012
Pgina: 45

www.eaton.com

Pgina 45

Selecione o carto no I/O Assistant e v na aba PlugIn e depois devemos colocar nosso I/O
Assistant Online com nosso Gateway para executar as alteraes necessrias para que o carto
1CNT possa realizar a comparao dos valores.
Depois que o Gateway ficar Online com o I/O Assistant devemos ir na Aba Process
Image e fazer as alteraes conforme a imagem abaixo:

10 de outubro de 2012
Pgina: 46

www.eaton.com

Pgina 46

Devemos colocar um valor de comparao pr determinado, esse valor poder ser


alterado depois pelo Codesys via COBid, ento s para ter uma base ou se o valor for sempre o
mesmo. Temos que mudar as duas opes da D01 pois ela vem com os valores em 0 devemos
mudar para 1 que a mesma estra apta a funcionar.
Depois de habilitar as sadas temos que habilitar as comparao que vem de fabrica como
0 e temos que mudar para 1.
Finalizado esta parte temos que ir na Aba Plug-In e fazer programaes conforme a
imagem abaixo:

10 de outubro de 2012
Pgina: 47

www.eaton.com

Pgina 47

Na aba PlugIn devem ser modificados os valores de referencia de comparao isso feito
na opo Refence Value 1, a funo da sada D01(Sada Fsica) e D02(Sada Virtual), tambm
deve ser modificada a opo substitute value D01 para 1, pois nessa opo que iremos escolher
se nossa sada comear com o valor 1 e comutar para 0 ou ao contrrio.
Depois destas configuraes terminadas s voltar para o Codesys no boto Close
Project

No Codesys no podemos nos esquecer de clicar na Opo Activete COB-Ids.


Agora vamos fazer um programa para podermos mudar o valor que setamos para a
comparao via Codesys, segue abaixo uma imagem do programa.

10 de outubro de 2012
Pgina: 48

www.eaton.com

Pgina 48

Na Imagem acima estamos ativando alguma memrias para Habilitar o encoder, abilitar o
reset pelo Hardware e habilitar a sada digital a funcionar.
Para modificarmos o valor de referencia de comparao da entrada rpida temos que criar
um function Block que tranforma uma DWORD em 4 BYTEs pois o bloco que acessa a SDO
referente ao valor de comparao s entende o valor por meio de BYTEs.

10 de outubro de 2012
Pgina: 49

www.eaton.com

Pgina 49

Agora que j convertemos o valor a ser alterado para um formato que o bloco que executa
a alterao do SDO entenda, temos que incluir esse bloco no programa o mesmo se chama
CanUser_SDOdownload abaixo temos uma imagem do mesmo j no programa.

Para sabermos qual o Endereo do SDO que temos que alterar s ir em PLC
Configuration depois clicar no Gateway e depois ir na Aba Service data Objects l encontraremos
a opo Cam1HightLimit_Generic XN_1CNT_0 que atende pelo Index 6B20sub1 esse o
endereo que usaremos para que o bloco CanUser_SDOdownload possa fazer a alterao do
valor de comparao diretamente no SDO do 1CNT.

10 de outubro de 2012
Pgina: 50

www.eaton.com

Pgina 50

Comunicao Ethernet CLP com CLP


A comunicao Ethernet entre dois CLPs uma comunicao muito simples pelo motivo
de ser uma comunicao direta que no precisa de Bloco de funo para ficar gerenciando dados
de envio/recebimento, a mesma feita simplesmente via Global Net Variables, e necessrio
uma ateno especial com relao ao endereamento dos COBids pois esses so utilizados para
envio e recebimento de pacotes de dados via Ethernet, abaixo veremos um passo a passo de
como fazer esta comunicao.
Quando estamos iniciando um projeto novo no Codesys passamos por algumas telas
escolhendo qual ser nosso CLP, qual ser nossa linguagem de programao mas quando
chegamos a tela Target Settings temos que marcar a opo Support network variables quando
marcamos essa opo se abrir uma lacuna onde devemos escolher qual ser nossa
comunicao no caso UDP para Ethernet, uma coisa que temos que ter ateno que esse UDP
tem que ser em letra maiscula, pois se no nossa comunicao no ir funcionar, segue abaixo
uma imagem desta configurao.

Esse processo dever ser repitido em todos os CLPs que forem ligados na rede Ethernet.
Agora temos que criar nossa Global Net Variables na aba Resources devemos clicar
com o boto direito do mouse em cima de Global Variables depis devemos adicionar um objeto,
conforme abaixo.

10 de outubro de 2012
Pgina: 51

www.eaton.com

Pgina 51

Depois de clicarmos em Add Object ir aparecer uma tela chamada Properties, nela
primeiramente devemos preencher o nome de nossa Global Net Variable depois devemos clicar
em Add Network.

Quando clicarmos em Add Netwaork a tela Properties ir se expandir neste momento


que devemos conferir alguns parmetros e acrescer outros, primeiramente temos que conferir se
em Network Type est a marcado UDP, depois temos que marcar que ser o COBid de inicio de
nossa mensagem, pois o COBid ir funcionar como um endereo de rede onde iremos armazenar
nossas variveis, cada COBid tem o tamanho de 2 Words, nosso pacote funcionar da seguinte
forma:
Se tivermos um Global net Variables que tenha 10 variveis do tipo WORD ento
estaremos utilizando 5 COBids na sequencia, portanto se determinarmos que nosso primeiro
COBid ser o 1 estaremos utilizando at o 5 para armazenarmos nossa mensagem.
Depois temos que preencher se nosso Global net Variable vai ser de escrita ou de
leitura, na figura abaixo estamos criando um de Leitura, por isso marcamos a opo Read, segue
abaixo duas imagens sendo uma de um Global net Variable de leitura e um de escrita, nele
podemos notar que estamos escrevendo em um CLP1 a partir do COBid 1 e lendo no CLP2 o
mesmo endereo.

10 de outubro de 2012
Pgina: 52

www.eaton.com

Pgina 52

No caso da Escrita podemos escolher tambm oque ir startar a atualizao da rede, que
pode ser uma comunicao siclica, esperar um evento que no caso o set de uma varivel ou
ento como est na imagem toda vez que olver a alterao de uma varivel dentro de um tempo
mnimo de 20ms.
No caso acima temos somente 2 CLPs em rede, mas podemos enfrentar casos com
vrios CLPs em rede trocando muitas inforaes, por isso que temos que nos atentar com relao
ao endereamento de nossos COBids, pois eles so os endereos de rede que firaram
armazenados nossas informaes.
Depois que terminarmos de criar nossas Clobal net Variable de escrita e leitura nos
nossos CLPs s fazer os programas e inserir as varaveis dentro delas, conforme abaixo.
CLP 1

10 de outubro de 2012
Pgina: 53

www.eaton.com

Pgina 53

10 de outubro de 2012
Pgina: 54

www.eaton.com

Pgina 54

CLP 2

Comunicao CANopen CLP com CLP


A Comunicao CANopen entre dois CLPs no difere muito da comunicao Ethernet que
vimos anteriormente. A comunicao tambm feita com base em troca de informaes via
Global net Variable e endereamento de COBids, a mesma tambm no precisa de bloco de
funo para gerenciamento e envio e resposta de variveis, somente da criao das Globals net
Variables. Segue abaixo as principais configuraes que se diferem da Ethernet.

10 de outubro de 2012
Pgina: 55

www.eaton.com

Pgina 55

Quando utilizamos a rede CANopen entre CLP e CLP no podemos nos esquecer de ir na
aba Network Functionality e preencher CAN em Names of supported network interfaces mas
esse CAN tem que ser maisculo pois se no no ir funcionar.
Uma coisa que no podemos nos esquecer tambm de incluir uma CanMaster na aba
PLC Configuration pois ela que ir gerenciar os endereos de rede conforme abaixo:

10 de outubro de 2012
Pgina: 56

www.eaton.com

Pgina 56

Cada elemento na rede tem que ter um CanMaster em sua aba PLC Configuratio e deve
ter um endereo de rede diferente. Pois se houver algum igual a rede no ir funcionar.
Quando criamos nossas Global Net Variables podemos perceber que diferentemente da
comunicao Ethernet na opo Network type agora trz a opo CAN, pois alteramos ela para
CAN na aba Terget Settings

CAN.

Com relao aos COBids de escrita e leitura no h diferena entre a rede Ethernet e

10 de outubro de 2012
Pgina: 57

www.eaton.com

Pgina 57

PID Autotunig no Codesys


O PID uma funo muito utilizada nos dias atuais por ser um mtodo de controle de
uma varivel baseado em um SET POINT que pode ser fixo ou varivel, seu controle se baseia
em uma funo de transferncia em malha fechada com 3 variveis KP ( Parte Proporcional), KI
(Parte Integral) e KD parte Derivativa) que podem ser alteradas manualmente ou automaticamente
por meio de um PID Autotuning.
Abaixo veremos como funciona e como parametrizar o bloco U_PID_autotuning_Controler.

Acima temos uma imagem do bloco de funo de PID Autotuning e como ele se apresenta
na programao Ladder do Codesys, Podemos ver que o nosso bloco possue varias entradas e
sadas segue abaixo oque deve ser parametrizado em cada uma delas:
Parametrizao das entradas do bloco.
Setpoint_value_12Bit_UINT Esse a entrada onde devemos colocar nosso valor de refenecia
que dever ser atingido pelo PID, deve ser declarado como UINT e tem resoluo de
12Bits(4096);
Actual_value_12Bit_UINT Essa a entrada de referencia da malha fechada, onde deveremos
entrar com o sinal do sensor de campo que nos dar o Fedback do processo, deve ser declarado
como UINT e tem resoluo de 12Bits(4096);
P_activate_BOOL Ativa parte KP (Proporcional) do bloco PID, essa tem como objetivo almentar
ou diminuir a velocidade instantnea de correo do valor de sada, deve ser uma varivel do tipo
BOOL.
I_activate_BOOL Ativa a parte KI (Integral) do Bloco PID, essa tem por objetivo estabilizar o
sinal de sada conforme o SetPoint informado, deve ser uma varivel do tipo BOOL.
D_activate_BOOL - Ativa a parte KD (Derivativa) do Bloco PID, essa tem por objetivo dar
velocidade na estabilizao do sinal de sada conforme o SetPoint informado, deve ser uma
varivel do tipo BOOL.
Accept_manual_manipulated_variable_BOOL Ativa o controle manual do PID, quando o
mesmo est em TRUE o PID desligado e enviado um valor pr definido diretamente na sada
do bloco, isso faz uma ponte entre o valor pr determinado e a sada do bloco.

10 de outubro de 2012
Pgina: 58

www.eaton.com

Pgina 58

Input_reset_time_s_BOOL Quando est em falso quer diser que a entrada


Derivate_action_time_10ths et em escala de ccimo de segundos, quando est em TRUE
significa que a entrada est em escala de segundos.
Setpoint_value_change_not_differentiate_BOOL Assa opo ativa a reverso da sada,
fazendo assim uma lgica inversa, no caso de termos que fazer uma correo com um sensor que
envie uma lgica inversa.
Proportional_rate_percent_UINT Nesta entrada inserimos o valor manual para a parte
KP(Proporcional) do nosso PID, por exemplo um valor calculado anteriormente, pois quando
ativamos a parte KP do nosso PID ele envira este valor para o calculo da sada do PID, a mesma
dever ser declarada como UINT.
Reset_time_10ths_or_s_UINT Nesta entrada inserimos o valor manual para a parte KI
(Integral) do nossp PID por exemplo um valor calculado anteriormente, pois quando ativamos a
parte KI do nosso PID ele envira este valor para o calculo da sada do PID, a mesma dever ser
declarada como UINT.
Derivate_action_time_10ths_UINT - Nesta entrada inserimos o valor manual para a parte KD
(Derivativa) do nossp PID por exemplo um valor calculado anteriormente, pois quando ativamos a
parte KD do nosso PID ele envira este valor para o calculo da sada do PID, a mesma dever ser
declarada como UINT.
Manual_manipulated_variable_12Bit_UINT nesta entrada que colocarmos o valor que
enviaramos
diretamente
para
a
sada
quando
acionarmos
a
entrada
Accept_manual_manipulated_variable_BOOL, a mesma dever ser declarada como UINT.
Autotuning_manipulated_variable_12Bit_UINT Esta varivel deve ser colocada no maximo de
resoluo utilizada na aplicao a ser realizada, pois quando o PID Autotuning foi iniciado ele ir
enviar de primeira este valor para que quando ele cruze com o Set-Point dee a primeira referecia,
matemtica para o calculo do PID.
Os parmetros abaixo sempre devem ser ativados ao mesmo tempo para que o PID
Autotuning seja iciniado, para que com isso ele mesmo fassa uma analise e encontre os
parmetros necessrios para que a correo da sada seja feita e executada a malha fechada,
geralmente utilizamos a mesma varivel para acionar todas juntas.
Autotuning_accept_parameters_BOOL Esta entrada serve para aceitar os valores calculados
pelo PID como parmetros do prprio, dever ser declacado como BOOL.
Autotuning_activate_BOOL Esta entrada ativa o PID a funcionar em modo Autotuning, dever
ser declacado como BOOL.
Autotuning_re_optimize_BOOL Esta entrada ativa a reotimizao do PID, siguinifica que ele
recalcular os valores de sada do PID, dever ser declacado como BOOL.
Autotuning_disturbance_optimization_BOOL Esta entrada tenta otimisar algum disturbio
gerado por algum tipo de interferencia, por exemplo uma temperature subindo linearmente e
recebe um vento frio, isso far com que essa subida linear passe a se parecer com um dente de
serra, dever ser declacado como BOOL.
Autotuning_overshoot_20_percent_BOOL Esta entrada tenta limitar o overshoot para at
20%, do valor calculado, dever ser declarado como BOOL.
Parametrizao das sadas do bloco.

10 de outubro de 2012
Pgina: 59

www.eaton.com

Pgina 59

Manipulated_variable_12Bit_UINT Sada de referencia do bloco PID, dever ser declarada


como UINT e tem resoluo de 12 Bits(4096).
Manipulated_variable_P_13Bit_INT Valor atual da componente KP (Proporcional) da varivel
de refreencia de sada.
Manipulated_variable_I_13Bit_INT - Valor atual da componente KI (Integral) da varivel de
refreencia de sada.
Manipulated_variable_D_13Bit_INT - Valor atual da componente KI (Integral) da varivel de
refreencia de sada.
Autotuning_active_BOOL Esta sada fica TRUE quando o Autotuning est ativado, esta sada
deve ser declarada como BOOL.
Autotuning_proportional_rate_percent_UINT
Calculado pelo bloco, para a correo do erro.

Valor

da

component

KP

(Proporcional)

Autotuning_reset_time_10ths_or_s_UINT Valor da component KI (Integral) Calculado pelo


bloco, para a correo do erro.
Autotuning_derivate_action_time_10ths_UINT Valor da component KD (Derivative) Calculado
pelo sistema.

10 de outubro de 2012
Pgina: 60

www.eaton.com

Pgina 60

So Paulo:
Tel: 11 4525-7000
Rua Diacono Josias de Souza, 270 Lote 30
ao 36 Loteamento Multivias Jundia So
Paulo
CEP: 13212-171

Paran:
Tel: 41 2107-9850
Rua Alexandre Gutierrez 990 Cj 18 - Agua
Verde - Curitiba PR
CEP: 80240-130

Minas Gerais, Centro-Oeste e Norte:


Tel: 31 2112-7070
Rua Juiz de Fora , 115 , sala 1110 - Barro
Preto , Belo Horizonte - MG
CEP 30180-060

Santa Catarina:
Tel: 47 3461-3179
Rua Joao Colin, 1285 Sl 3 - America Joinville
SC
CEP: 89204-001

Rio de Janeiro, Esprito Santo e Nordeste:


Tel: 21 3541-4401
Avenida Dom Hlder Cmara, 5200 Rio de
Janeiro RJ
CEP: 20771-004

Rio Grande do Sul:


Tel: 51 2117-7000
Rua Florncio Ygartua, 270 Sala 1209 Moinhos de Vento - Porto Alegre RS.
CEP: 90430-010

10 de outubro de 2012
Pgina: 61

www.eaton.com

Pgina 61