Академический Документы
Профессиональный Документы
Культура Документы
FICHA TCNICA
2012. Todos os direitos reservados.
ISBN 978-989-96460-2-5
proibida a duplicao ou reproduo deste volume, no todo ou em parte, sob quaisquer formas ou
por quaisquer meios (eletrnicos, mecnicos, gravao, fotocpia, distribuio na Web e outros),
sem autorizao prvia e escrita da editora.
Reservados todos os direitos de publicao
REAL GAMES LDA.
Rua Elsio de Melo, 39 - Piso 3
4000-196 Porto, Portugal
Email: info@realgames.pt
Internet: http://www.realgames.pt
Capa: Bruno Vigrio e Nuno Silva, REAL GAMES LDA.
TERMO DE DESRESPONSABILIZAO
Os problemas apresentados neste livro e as respetivas solues tm unicamente propsitos
didticos. Em particular, o treino da programao de Controladores Lgicos Programveis (PLCs)
com recurso plataforma ITS PLC. Embora o autor e o editor creiam que as informaes
apresentadas esto corretas, em caso algum podem ser responsabilizados pela utilizao dos
programas fornecidos, ou de outros neles baseados, em aplicaes das quais possam resultar danos
ou prejuzos em pessoas ou bens.
Ao
Joo Rodrigo e ao Jos Diogo
que tanto gostam de engenhocas...
ndice
15PREFCIO
17PARTE
1 - APRESENTAO
19O Jogo
21Os Jogadores
22O Equipamento
23PARTE
2 - OS PROBLEMAS
3 - AS SOLUES
133Resoluo da Tarefa 5
136Resoluo da Tarefa 6
140Resoluo da Tarefa 7
144Resoluo da Tarefa 8
148Resoluo da Tarefa 9
153Resoluo da Tarefa 10
159Resoluo da Tarefa 11
166Resoluo da Tarefa 12
175Misso 2: Automatizao de uma estao de produo de tinta
180Resoluo da Tarefa 1
183Resoluo da Tarefa 2
184Resoluo da Tarefa 3
188Resoluo da Tarefa 4
192Resoluo da Tarefa 5
198Resoluo da Tarefa 6
201Resoluo da Tarefa 7
206Resoluo da Tarefa 8
210Resoluo da Tarefa 9
218Resoluo da Tarefa 10
226Resoluo da Tarefa 11
234Resoluo da Tarefa 12
245Misso 3: Automatizao de um paletizador elevado
248Resoluo da Tarefa 1
250Resoluo da Tarefa 2
253Resoluo da Tarefa 3
256Resoluo da Tarefa 4
260Resoluo da Tarefa 5
263Resoluo da Tarefa 6
268Resoluo da Tarefa 7
274Resoluo da Tarefa 8
280Resoluo da Tarefa 9
284Resoluo da Tarefa 10
289Resoluo da Tarefa 11
295Resoluo da Tarefa 12
301Misso 4: Comando de um manipulador incremental em tarefas pick and place
305Resoluo da Tarefa 1
306Resoluo da Tarefa 2
308Resoluo da Tarefa 3
309Resoluo da Tarefa 4
311Resoluo da Tarefa 5
314Resoluo da Tarefa 6
321Resoluo da Tarefa 7
328Resoluo da Tarefa 8
334Resoluo da Tarefa 9
340Resoluo da Tarefa 10
346Resoluo da Tarefa 11
353Resoluo da Tarefa 12
363Misso 5: Armazenamento automtico de mercadorias
366Resoluo da Tarefa 1
368Resoluo da Tarefa 2
371Resoluo da Tarefa 3
374Resoluo da Tarefa 4
377Resoluo da Tarefa 5
381Resoluo da Tarefa 6
385Resoluo da Tarefa 7
391Resoluo da Tarefa 8
398Resoluo da Tarefa 9
403Resoluo da Tarefa 10
408Resoluo da Tarefa 11
414Resoluo da Tarefa 12
421PARTE
4 - EPLOGO
PREFCIO
16
Prefcio
obviamente que as potencialidades do ITS PLC no se esgotam nessas tradues e, muito menos,
nas propostas contidas neste texto. Haver sempre espao para o prazer e o desejo de descobrir
novos problemas e novas solues; ou seja, para novos jogos e formas de jogar o ITS PLC. Saibam,
formadores e formandos, partilhar esses prazeres.
PARTE 1
APRESENTAO
ste livro prope um conjunto de exerccios para o software educacional ITS PLC, Interative
Training System for Programmable Logic Controllers, produzido pela Real Games Lda. O seu
principal propsito rentabilizar o ambiente de treino oferecido por este produto, sugerindo planos
de trabalho capazes de proporcionar uma aprendizagem aplicada, slida, progressiva e coerente de
tcnicas de controlo lgico e correspondente programao de controladores lgicos programveis
vulgarmente designados PLCs, conservando a sigla anglo-saxnica.
Embora as propostas aqui apresentadas estejam naturalmente centradas nos ambientes virtuais
proporcionados pelo software ITS PLC, pretende-se que delas resultem ensinamentos cujo interesse
e aplicao prtica extravasem o mais possvel esses mesmos ambientes. Assim, se no seu lado mais
abrangente e vistoso, as instalaes ITS PLC servem de mote a problemas lgicos razoavelmente
latos e um tanto avanados na esfera da automao industrial, na sua vertente mais fundamental
e prtica so um timo pretexto para introduzir e discutir questes pontuais e elementares que
vo ao encontro dos erros, dvidas e dificuldades mais comuns de quem se inicia, ou pretende
evoluir, no controlo de sistemas de eventos discretos e na programao de PLCs. Para a definio,
apresentao, tratamento e encadeamento lgico destes problemas, em muito contribuiu a
experincia relativamente longa do autor no ensino da programao de PLCs, uma atividade sempre
apoiada tanto em sistemas reais como virtuais.
Conquanto o principal desafio do conjunto de exerccios propostos seja especificar e desenvolver
um programa para controlar correta e elegantemente cada instalao ITS PLC, excelente que
tal feito seja, simultaneamente, um ponto de partida para o desenvolvimento de aplicaes mais
abrangentes e elaboradas no domnio da automao industrial. Por exemplo, aplicaes que integrem
consolas de interface homem-mquina (Human-Machine Interface HMIs), sistemas de superviso,
controlo distribudo ou gesto de informao. Extremamente til tambm procurar solues mais
robustas e capazes de lidar com situaes de falha ou insegurana. Propostas de trabalho orientadas
em ambos os sentidos so includas neste texto. Tm em mente nveis de educao e treino mais
elevados, devendo por isso os formadores adaptar tais linhas orientadoras aos objetivos dos seus
cursos, equipamentos disponveis e nveis de conhecimentos dos seus formandos.
Considerando unicamente os exerccios que tm como pano de fundo o controlo por PLC das
cinco instalaes virtuais ITS PLC, este livro prope um total de sessenta problemas: doze por cada
instalao. Para cada problema proposto fornecida a respetiva soluo na forma de um programa
de PLC, devidamente comentado. Nos casos mais simples, os programas so antecedidos de uma
explicao relativamente curta e informal; nos mais complexos, a soluo fundamentada numa
especificao em linguagem GRAFCET1 e de acordo com a norma IEC 60848, segunda edio.
1
Seguindo a tendncia da literatura especializada, o texto adota o termo GRAFCET para designar a linguagem de especificao
GRAphe Fonctionnel de Commande tape Transition e o vocbulo grafcet para designar um esquema grfico que utiliza a
linguagem GRAFCET.
17
18
Parte 1: Apresentao
Parte 1: Apresentao
19
O Jogo
Bem-vindo ao jogo ITS PLC! Se no encontrou este livro absolutamente por acaso, sabe que o ITS
PLC um pacote de software desenvolvido pela Real Games Lda. que emula instalaes industriais
a controlar por PLC. Informaes sobre este produto esto disponveis no stio www.realgames.pt.
pois importante que, antes de continuar esta leitura, se familiarize minimamente com o software
em causa, compreendendo perfeitamente os seus objetivos e potencialidades, assim como as
funcionalidades e os meios de comando e de sensorizao das instalaes emuladas. Uma verso
gratuita, no licenciada, serve para este primeiro contacto. Pode obt-la no stio da Real Games
Lda., assim como o respetivo manual de utilizao.
O principal objetivo deste texto ajud-lo a dar vida a cada um dos cinco cenrios que compem
o ITS PLC. Para isso, o leitor, que como quem diz, o jogador, ter de interligar um PLC ao
computador onde tem instalado o ITS PLC e program-lo corretamente. Conhecendo a aplicao,
facilmente o leitor depreender que este jogo lhe prope cinco misses. Em lato senso, elas so:
Automatizar uma instalao de Sorting;
Automatizar uma instalao de Batching;
Automatizar um Paletizador;
Automatizar uma instalao Pick and Place;
Automatizar um Armazm Automtico.
O interesse prtico e os objetivos exatos de cada misso sero revelados oportunamente. Para j,
importa dizer que cada misso composta por um conjunto de doze tarefas, a realizar pela ordem
20
Parte 1: Apresentao
Parte 1: Apresentao
21
Os Jogadores
O software de treino ITS PLC uma plataforma didtica de programao de PLCs que, quando
limitada a problemas simples, pode e deve ser utilizada por formandos que do os primeiros passos
nesta matria. Porm, programar um PLC para comandar e dotar os cinco sistemas includos
no pacote ITS PLC de funcionalidades um tanto elaboradas, uma tarefa que exige um leque
relativamente amplo de conhecimentos e competncias. Concretamente, nas seguintes matrias:
Sistemas lgicos: variveis binrias e cdigos binrios; sistema de numerao binrio, octal
e hexadecimal; operadores lgicos e lgebra de Boole; elementos de memria; operaes de
set e reset; operaes sobre registos; operaes aritmticas, de rotao e de deslocamento;
Especificao: representao funcional em diagramas temporais, diagramas de estado e
GRAFCET;
PLCs: modelo de funcionamento de um PLC; afetao e cablagem de entradas e sadas;
registos e organizao interna da memria; temporizadores e contadores; experincia
mnima em programao de PLCs e na utilizao de ferramentas de desenvolvimento e
teste associadas; facilidade em ler e compreender o manual de um PLC.
Se tudo isto lhe relativamente familiar, ento considere-se apto a comear o jogo. E, se os seus
conhecimentos destas matrias forem bastante razoveis, acabar certamente por lev-lo at ao
fim sem dificuldades de maior. Mas, se pelo contrrio, no conhece ou no domina minimamente
grande parte destes temas, ento deve procurar melhorar um pouco os seus conhecimentos antes de
aceitar os desafios que aqui se lanam. H um infindvel rol de literatura sobre estes assuntos. O seu
formador saber, seguramente, indicar-lhe a bibliografia mais adequada aos seus conhecimentos.
Para quem se prepara para comear a jogar, o conselho mais bvio o de que, tal como nos
jogos de computador, evite a batota. Ter dificuldades em encontrar uma soluo e t-la ao virar
da pgina, pode no ser o melhor estmulo perseverana. Mas, sempre que tiver a tentao de
espreitar a resoluo, lembre-se que perder a oportunidade de descobrir a sua prpria soluo que,
quem sabe, seria at mais interessante do que a proposta no o melhor contributo para uma boa
aprendizagem.
Procure, pois, encontrar sempre as suas prprias solues. Verificar que, desse modo, os seus
conhecimentos evoluem e solidificam de uma forma muito natural e irreversvel. Se optar por
espreitar sistematicamente a soluo sentir que, na maioria dos casos, pouco tempo depois, j no
se lembrar do truque da soluo, concluindo que, afinal, no aprendeu tanto quanto desejaria.
Talvez nem tenha compreendido que a programao de PLCs vive da lgica e no de truques!
22
Parte 1: Apresentao
O Equipamento
Certamente tem a noo exata do equipamento que necessita para comear o jogo: um computador
com o ITS PLC instalado e devidamente licenciado, e um PLC com um nmero mnimo de entradas
e sadas. Verifique que tipo de entradas e sadas tem o seu PLC e certifique-se de que as ligou
corretamente placa de I/O que acompanha o produto. Consulte o manual de utilizao do ITS
PLC sobre esta questo. Tenha, alis, este manual sempre por perto, pois vai precisar de consultar
frequentemente o mapa de entradas e sadas das instalaes a controlar.
Por perto dever ter tambm o manual do seu PLC e do software de desenvolvimento associado. A
ajuda em linha nem sempre suficiente. Ter tambm mo um ou outro livro sobre sistemas lgicos
e especificao em GRAFCET (de preferncia, a segunda edio da norma IEC 60848) tambm
uma boa ideia.
Mesmo um PLC relativamente modesto tem capacidade para controlar as instalaes apresentadas.
Mas, se tem um PLC relativamente sofisticado, no deixe de explorar as suas potencialidades,
inventando novos exerccios ou outras formas de os resolver que as empreguem.
Se tem possibilidade de ligar dois monitores ao seu computador, deve faz-lo. Use um para
visualizar o ambiente ITS PLC e outro para analisar online toda a informao relativa execuo
do programa no PLC recorrendo a uma ferramenta de debugging. Rapidamente compreender os
benefcios desta estratgia.
Por ltimo, se uma pessoa que gosta de jogos de computador e se entusiasma facilmente com
problemas lgicos, aconselhvel fazer-se acompanhar de uma garrafa trmica com o seu chazinho
preferido. Talvez o dia, ou a noite, seja longo(a)...
Exposto o essencial sobre o ambiente do jogo ITS PLC, tempo de avanar para a mquina de
jogos!
PARTE 2
OS PROBLEMAS
25
26
Parte 2: Os Problemas
27
Objetivo:
Estado Inicial:
Sinais de I/O:
Entradas: sensores 0 e 3.
Sadas: atuador 1.
Procedimentos
Manuais:
Dicas:
28
Parte 2: Os Problemas
Objetivo:
Estado Inicial:
Sinais de I/O:
Procedimentos
Manuais:
Dicas:
109
Objetivo:
Estado Inicial:
Sinais de I/O:
Procedimentos
Manuais:
Dicas:
110
Parte 2: Os Problemas
111
PARTE 3
AS SOLUES
uito provavelmente, o secreto desejo do leitor, de que as solues lhe fossem fornecidas
na linguagem de programao do seu PLC, no se concretizar. Mas, com tantas marcas e
modelos de PLCs, a probabilidade de tal acontecer era, de facto, muito baixa!
Na impossibilidade de apresentar as solues na linguagem preferida de cada utilizador, optou-se por
faz-lo numa linguagem muito eficiente, de crescente aceitao, facilmente compreensvel mesmo
para quem jamais contactou com ela, facilmente traduzvel noutras linguagens de programao
de PLCs e extremamente expressiva e reveladora dos algoritmos de controlo empregues: o Texto
Estruturado.
114
Parte 3: As Solues
foram porque tambm subscrevemos a mxima de que o Texto Estruturado a forma mais clara,
simples e eficiente de expor um programa de PLC, sobretudo quando h que faz-lo para um pblico
heterogneo.
A norma IEC 61131-3 inclui a linguagem grfica SFC, Sequential Function Chart, com o propsito
de estruturar, sequenciar e desenvolver um programa de controlo. Da que o SFC no seja, s por si,
uma alternativa ao Texto Estruturado ou a qualquer uma das outras linguagens previstas na norma.
Contudo, a linguagem de programao SFC um dos recursos mais interessantes e importantes da
norma IEC 61131-3, sendo muitas vezes confundida com a linguagem de especificao GRAFCET,
tal como definida na primeira verso da norma IEC 60848, em virtude da semelhana semntica e
grfica destas. O facto do GRAFCET ser uma importante porta de acesso compreenso de alguns
aspetos da norma IEC 61131-3, nomeadamente em termos de organizao de cdigo, mais uma
razo para a sua ampla utilizao neste texto em detrimento de outras ferramentas e metodologias
de especificao.
Se o PLC que utiliza minimamente compatvel com a norma IEC 61131-3 mas s suporta as
linguagens mais clssicas, ou se, de qualquer modo, as pretende continuar a utilizar, ento tem
nestes exerccios um outro ponto de interesse: a traduo das solues apresentadas para a sua
linguagem de programao, mas usando a semntica e simbologia prevista na norma IEC 61131-3.
H, afinal, muitos motivos de interesse neste livro de exerccios!
Por ltimo, se adepto do Texto Estruturado e desenvolve habitualmente a sua programao de
acordo com a norma IEC 61131-3, vai certamente considerar os programas apresentados deselegantes,
ineficientes e at algo desconformes com o esprito da norma. Concordando em absoluto que o
Texto Estruturado e a norma IEC 61131-3 permitem solues bem mais interessantes do que as
apresentadas por exemplo, usando enumerated data types para lidar com evolues de mquinas
de estados, ou encapsulando e reutilizando sistematicamente cdigo do utilizador em funes e
blocos funcionais h que dizer que tais abordagens lanariam, por certo, grandes confuses nos
desconhecedores da norma e da linguagem de programao utilizada. E as solues apresentadas
pretendem ter dois mritos: primeiro, e mais fundamental, serem compreensveis para qualquer
programador de PLCs, mesmo que s minimamente habilitado; segundo, proporcionarem a cada
leitor o exerccio complementar de as traduzirem ou otimizarem para a(s) sua(s) linguagem(ns) de
interesse. Consequentemente, se f do Texto Estruturado, encare as solues apresentadas como
pedaos de cdigo a otimizar de acordo com a norma IEC 61131-3 e, j agora, tambm com a norma
IEC 61499.
Parte 3: As Solues
115
Tem a designao IEC 61131-3. apresentada, discutida e exemplificada em diversos livros. Entre
eles, destacam-se os seguintes:
Robert W. Lewis Programming Industrial Control Systems Using IEC 1131-3 (IEE
Control Engineering Series), 1998, ISBN: 0-85296-950-3;
Karl-Heinz John IEC 61131-3: Programming Industrial Automation Systems: Concepts
and Programming Languages, Requirements for Programming Systems, Aids to DecisionMaking Tools. 1995, Springer Verlag. ISBN 3-540-67752-6. Parte deste livro est
disponvel na Internet a partir da pgina pessoal do autor: http://www.fen-net.de/karlheinz.
john/.
Um stio obrigatrio em matria de normas e PLCs o da PLCOPEN www.plcopen.org.
Mltiplas informaes teis podem aqui ser encontradas.
Uma consulta ao Google, ou a qualquer outro motor de busca, sobre o tema structured text
programming conduz a uma lista infindvel de stios e artigos interessantes. Entre eles, o texto
Automating Manufacturing Systems with PLCs por Hugh Jack, cuja leitura absolutamente
recomendada e disponvel, data desta publicao, no stio claymore.engineer.gvsu.edu/~jackh/
books/plcs.
Se no possui um PLC compatvel com a norma IEC 61131-3, mas gostaria de experimentar a
programao em Texto Estruturado, ento sugere-se uma viagem ao mundo dos Soft PLCs. Muitos
destes pacotes de software so totalmente compatveis com a norma IEC 61131-3. Tm um custo
elevado, mas os seus fabricantes disponibilizam verses de demonstrao gratuitas, muito bem
documentadas e exemplificadas, que, embora naturalmente limitadas, constituem timos pontos
de partida para a programao segundo a norma IEC 61131-3. Sugere-se que conhea os seguintes
produtos e fabricantes:
ISaGRAF http://www.isagraf.com;
MULTIPROG http://www.kw-software.com;
CoDeSys http://www.3s-software.com;
TwinCAT PLC http://www.beckhoff.com.
Se no conhece os Soft PLCs, ento este um excelente pretexto para, finalmente, contactar com
este interessantssimo meio de controlo de muitas das modernas instalaes industriais. Mais um
ponto de interesse deste livro de exerccios!
116
Parte 3: As Solues
117
Parte 3: As Solues
Como nota final, importa sublinhar, mais uma vez, que as solues apresentadas so apenas
solues possveis e, de forma alguma, as nicas ou as melhores. Sugere-se, por isso, que o
leitor as compare com as suas, tentando listar vantagens e inconvenientes relativos. A elaborao de
um caderno de notas refletindo as concluses pessoais sobre a resoluo de cada tarefa a ltima
proposta deste livro de exerccios e, sem dvida, uma das mais importantes para formadores e
formandos.
AT
AT
AT
AT
%IX0.0
%IX0.1
%IX0.2
%IX0.3
:
:
:
:
BOOL;
BOOL;
BOOL;
BOOL;
(*
(*
(*
(*
Sensor
Sensor
Sensor
Sensor
0
1
2
3
*)
*)
*)
*)
118
Parte 3: As Solues
In_4 AT %IX0.4 : BOOL; (* Sensor 4 *)
In_5 AT %IX0.5 : BOOL; (* Sensor 5 *)
In_6 AT %IX0.6 : BOOL; (* Sensor 6 *)
In_7 AT %IX0.7 : BOOL; (* Sensor 7 *)
In_8 AT %IX1.0 : BOOL; (* Sensor 8 *)
In_9 AT %IX1.1 : BOOL; (* Sensor 9 *)
In_10 AT %IX1.2 : BOOL; (* Sensor 10 *)
In_11 AT %IX1.3 : BOOL; (* Seletor de Modo Manual/Automtico *)
In_12 AT %IX1.4 : BOOL; (* Botoneira Iniciar *)
In_13 AT %IX1.5 : BOOL; (* Botoneira Parar *)
In_14 AT %IX1.6 : BOOL; (* Botoneira Reiniciar *)
In_15 AT %IX1.7 : BOOL; (* Botoneira Emergncia *)
END_VAR
VAR_OUTPUT
Out_0
Out_1
Out_2
Out_3
Out_4
Out_5
Out_6
Out_7
Out_8
Out_9
AT
AT
AT
AT
AT
AT
AT
AT
AT
AT
%QX0.0
%QX0.1
%QX0.2
%QX0.3
%QX0.4
%QX0.5
%QX0.6
%QX0.7
%QX1.0
%QX1.1
:
:
:
:
:
:
:
:
:
:
BOOL;
BOOL;
BOOL;
BOOL;
BOOL;
BOOL;
BOOL;
BOOL;
BOOL;
BOOL;
(*
(*
(*
(*
(*
(*
(*
(*
(*
(*
Atuador 0 *)
Atuador 1 *)
Atuador 2 *)
Atuador 3 *)
Atuador 4 *)
Atuador 5 *)
Atuador 6 *)
Atuador 7 *)
Luz da botoneira Iniciar *)
Luz da botoneira Reiniciar *)
END_VAR
(*****************************************************
Fim da declarao
*****************************************************)
Parte 3: As Solues
119
cada tarefa de cada misso corresponde um programa que emprega um conjunto de variveis
e instncias de blocos funcionais, cuja declarao exigida pela norma IEC 61131-3. Porm,
apresentar as solues das diferentes tarefas seguindo este princpio, levaria a que o cdigo de cada
programa fosse antecedido de uma lista de variveis e instncias de blocos funcionais, por vezes
extensa, com muitas delas j introduzidas e explicadas nas solues de tarefas anteriores.
Para evitar sucessivas e fastidiosas declaraes, que em pouco ou nada contribuiriam para uma
melhor compreenso dos sucessivos programas e assim aligeirar o documento, optou-se por
apresentar uma nica declarao por misso, a qual rene todas as variveis e instncias de blocos
funcionais usadas nos doze programas da misso em causa. Essa declarao conjunta, que abre a
apresentao das solues de cada misso, feita em conformidade com a norma IEC 61131-3 e
deve ser tomada em devida conta na apreciao do cdigo correspondente soluo de cada tarefa.
Em particular, de especial importncia a observao do valor inicial atribudo a cada varivel.
De acordo com a norma IEC 61131-3, a definio do valor inicial de uma varivel permite atribuirlhe um valor diferente daquele que seria o seu valor inicial por defeito, o qual funo do tipo de
varivel; por exemplo, variveis booleanas, inteiras e reais iniciam-se, por defeito, em 0. Parecer
pois estranho que, na declarao de algumas variveis, lhes sejam atribudos os valores que teriam
por defeito; por exemplo, possvel observar que muitas variveis booleanas so inicializadas em
FALSE. Tal redundncia tem o propsito de revelar explicitamente o valor inicial de algumas
variveis particularmente importantes. Por exemplo, no caso de uma varivel de estado, o seu valor
inicial deve tipicamente refletir uma condio inicial prevista no cenrio em que a tarefa se desenrola;
logo, tem de ser inicializada com TRUE ou FALSE, em conformidade. Se essa inicializao for bem
explcita, tanto melhor...
Assim, e muito concretamente, optou-se por inicializar explicitamente mesmo aquelas variveis
que implicitamente seriam inicializadas com os valores de interesse porque, mostra a experincia,
quando a inicializao de uma varivel no explcita, alguns leitores tm tendncia a deduzir que
o valor inicial dessa varivel indiferente, no tomando desse modo conscincia da importncia do
valor inicial que, por defeito, lhe atribudo. Em coerncia com este princpio, entendeu-se por bem
inicializar explicitamente todas as variveis aquando da sua declarao, exceto aquelas cujo valor
inicial , de facto, irrelevante.
Os casos em que a mesma varivel deve ser inicializada com valores distintos em diferentes
tarefas so devidamente salientados nos comentrios que acompanham a respetiva declarao.
Tambm so salientados os casos em que os valores iniciais so apenas exemplificativos; por
121
122
Parte 3: As Solues
2-3,
In_0
1-12
In_3
4-12
5-12 *)
*)
*)
*)
*)
123
124
Parte 3: As Solues
(* Temporizadores *)
125
END_VAR
(********************************************************
Fim da declarao
********************************************************)
Resoluo da Tarefa 1
De acordo com o enunciado, o tapete de entrada deve movimentar-se quando nele existe uma
palete. Ento, admitindo que possvel representar o estado do tapete por uma varivel binria (ou
memria), Mem_1, tal que Mem_1 = TRUE se existe uma palete no tapete, o comando deste
transportador passa simplesmente pela expresso Out_1 = Mem_1.
Dado que no existe um sensor que indique se o tapete tem ou no uma palete, o valor lgico de
Mem_1 ter de ser deduzido; concretamente, com base na observao da entrada e sada de paletes
no tapete. Assim, a entrada de uma palete deve fazer Mem_1 = TRUE ou seja, o set de Mem_1;
a sada de uma palete deve fazer Mem_1 = FALSE ou seja, o reset de Mem_1. Mem_1 deve ser
inicializada em FALSE uma vez que dito que inicialmente no h paletes no tapete de entrada.
Em termos lgicos, a entrada e sada de paletes no tapete refletem-se na transio ascendente de
In_0 (In_0 = 1) e na transio descendente de In_3 (In_3 = 1), respetivamente. O set e o reset de
Mem_1 devem pois ser motivados por estas transies.
O programa correspondente presente tarefa o seguinte:
(*****************************************
Misso 1 - Tarefa 1
*****************************************)
(**** DETEO DE EVENTOS RELEVANTES ****)
R_In_0 (CLK := In_0);
(* R_In_0.Q 1 quando In_0 tem uma transio ascendente. Sinaliza que uma palete
chegou ao tapete de entrada *)
F_In_3 (CLK := In_3);
(* F_In_3.Q 1 quando In_3 tem uma transio descendente. Sinaliza que uma palete
abandonou o tapete de entrada *)
(**** COMANDO DO TAPETE DE ENTRADA ****)
(* Definio da varivel de estado, Mem_1, em funo dos sinais de entrada *)
IF R_In_0.Q THEN (* Quando chega uma palete *)
126
Parte 3: As Solues
Mem_1 := TRUE; (* Set de Mem_1 *)
END_IF;
IF F_In_3.Q THEN (* Quando sai uma palete *)
Mem_1 := FALSE; (* Reset de Mem_1 *)
END_IF;
(* Definio da varivel de sada, Out_1, em funo do estado do tapete de entrada *)
Out_1 := Mem_1;
(*****************************************
Fim do Programa
*****************************************)
Resoluo da Tarefa 2
Este problema bastante simples, mas encerra ideias de importncia fundamental para a
generalidade das tarefas da presente misso na realidade, para a generalidade dos problemas de
transporte de mercadorias em passadeiras.
muito importante notar que o transporte de uma palete tem trs fases. Veja-se para o caso do
tapete de entrada:
A carga da palete requer o movimento simultneo do alimentador e do tapete de entrada.
Inicia-se quando a palete detetada pelo sensor 0 e termina quando o mesmo sensor deixa
de a detetar. Assim, durante esta fase, o valor lgico de In_0 1;
O transporte, propriamente dito requer unicamente o movimento do tapete de entrada.
Durante esta fase, a palete no detetada pelos sensores colocados nos extremos do tapete,
pelo que In_0 = In_3 = 0;
A descarga da palete requer o movimento simultneo do tapete de entrada e dos rolos da
mesa rotativa. Inicia-se quando a palete detetada pelo sensor 3 e termina quando o mesmo
sensor deixa de a detetar. Assim, durante esta fase, o valor lgico de In_3 1.
Porque a carga do tapete de entrada corresponde descarga do alimentador tal como a descarga
do tapete de entrada corresponde carga da mesa rotativa ento, estando o tapete de entrada
indisponvel, isto , transportando ele uma palete, o alimentador no pode descarregar. Ou seja, o
alimentador no pode passar uma palete para alm da posio do sensor 0. S o poder fazer quando
o tapete de entrada ficar disponvel, isto , quando nele no existir qualquer palete.
Uma soluo genrica, para problemas deste tipo, aceitar que um tapete A gera o sinal Busy_A =
1 quando, por qualquer razo, est indisponvel para receber paletes. Ao ler este sinal, um tapete B,
que alimente A, fica a saber que no deve movimentar paletes para alm do seu limite. S o poder
fazer quando o tapete A produzir o sinal Busy_A = 0.
127
128
Parte 3: As Solues
In_0 forem ambos verdadeiros, Mem_1 fica com o valor lgico TRUE que entregar sada
Out_1. Isso garante que o tapete de entrada continua em movimento, sem transies a
zero, caso j exista uma palete sada do alimentador quando a anterior abandona o
tapete de entrada **)
(* Definio da sada Out_1 como na Tarefa 1 *)
Out_1 := Mem_1;
(**** COMANDO DO ALIMENTADOR ****)
(* Alimentador no est em movimento se tapete de entrada ocupado e h uma palete no
final do alimentador *)
Out_0 := NOT Busy_1 OR NOT In_0;
(* O mesmo que: Out_0 := NOT (Busy_1 AND In_0) *)
(*****************************************
Fim do Programa
*****************************************)
Resoluo da Tarefa 3
As diferenas a introduzir no comando do tapete de entrada so muito poucas relativamente
Tarefa 2. Concretamente:
Mem_1 s vai a 0 quando uma palete descarregada e o tapete fica vazio;
Busy_1 s vai a 1 quando passa a haver duas paletes no tapete.
O alimentador continua a ser comandado como na Tarefa 2.
Para saber quantas paletes existem em cada momento no tapete de entrada necessrio um contador
crescente/decrescente. A esmagadora maioria dos PLCs inclui blocos de contagem deste tipo
normalmente designados CTUD que, se capazes de sinalizar, de algum modo, os dois valores de
interesse, 0 (tapete vazio) e 2 (lotao do tapete completa), servem os interesses da presente tarefa.
Outra hiptese construir um contador medida da aplicao. Neste caso, faz sentido e verse- mais frente porqu , construir um contador muito peculiar: um contador em anel. Por
definio, incrementar um contador em anel traduz-se em rodar o seu contedo uma posio para a
esquerda; decrement-lo sinnimo de o rodar uma posio para a direita.
No presente caso, o contador em anel ser materializado num registo de 16 bits que a extenso
tpica dos registos dos PLCs denominado Count. O cdigo do nmero 0 corresponde, por
conveno, palavra que tem o bit mais a esquerda a 1 e todos os outros a 0. Assim, o contedo
do registo Count denotar uma contagem com a evoluo representada na Figura M1T3, pese
embora, nesta tarefa, s evolua entre 0 e 2, a que correspondem os cdigos 16#8000 e 16#0002,
129
respetivamente o prefixo 16# significa que se est a usar notao hexadecimal. A rotao para a
esquerda, incremento, obtida pela instruo ROL (Count, 1). A rotao para a direita, decremento,
obtida pela instruo ROR (Count, 1).
b15
b0
15 0
b15
b0
b0
Count
130
Parte 3: As Solues
F_In_3(CLK := In_3);
(**** COMANDO DO TAPETE DE ENTRADA ****)
(* Se tem pelo menos uma palete: Mem_1 = TRUE Se tem duas paletes: Busy_1 = TRUE *)
IF F_In_0.Q THEN (* Quando carregada uma palete *)
Count := ROL(Count, 1); (* Contador incrementado *)
IF (Count = WORD#16#2) THEN (* Se Contador em 2 *)
Busy_1 := TRUE; (* Set de Busy_1 *)
END_IF;
END_IF;
IF F_In_3.Q THEN (* Quando descarregada uma palete *)
Busy_1 := FALSE; (* Reset de Busy_1 *)
Count := ROR(Count, 1); (* Contador decrementado *)
IF (Count = WORD#16#8000) THEN (* Se Contador em 0 *)
Mem_1 := FALSE; (* Reset de Mem_1 *)
END_IF;
END_IF;
IF In_0 THEN (* Quando h palete no fim do alimentador *)
Mem_1 := TRUE; (* Set de Mem_1 *)
END_IF;
Out_1 := Mem_1;
(**** COMANDO DO ALIMENTADOR ****)
(* Como na Tarefa 2 *)
Out_0 := NOT Busy_1 OR NOT In_0;
(*****************************************
Fim do Programa
*****************************************)
Resoluo da Tarefa 4
O grafcet apresentado na Figura M1T4 mostra as cinco etapas (ou estados) a considerar no
comando da mesa rotativa. Correspondem seguinte evoluo:
Inicialmente a mesa est Livre, isto , apta a receber uma palete;
Estando Livre e havendo uma palete no final do tapete de entrada (In_3 = 1) transita para
131
Carrega;
Quando a palete est devidamente posicionada na mesa rotativa (In_6 = 1), transita de
Carrega para Roda carregada;
De Roda carregada transita para Descarrega quando a mesa atinge a posio de
descarga (In_5 = 1);
De Descarrega transita para Roda descarregada quando a palete abandona a mesa
rotativa (In_7 = 1);
De Roda descarregada volta a Livre quando a mesa atinge a posio de carga (In_4 =
1).
1
Sensor 3
Atuador 2
Sensor 6
Atuador 4
Sensor 5
Atuador 3
Atuador 4
Sensor 7
5
Sensor 4
1 Livre
2 Carrega
3 Roda carregada
4 Descarrega
5 Roda descarregada
132
Parte 3: As Solues
133
Carrega := TRUE;
END_IF;
IF Carrega AND In_6 THEN (* Carrega -> Roda carregada *)
Carrega := FALSE;
Roda_carregada := TRUE;
END_IF;
IF Roda_carregada AND In_5 THEN (* Roda carregada -> Descarrega *)
Roda_carregada := FALSE;
Descarrega := TRUE;
END_IF;
IF Descarrega AND F_In_7.Q THEN (* Descarrega -> Roda descarregada *)
Descarrega := FALSE;
Roda_descarregada := TRUE;
END_IF;
IF Roda_descarregada AND In_4 THEN (* Roda descarregada -> Livre *)
Roda_descarregada := FALSE;
Livre := TRUE;
END_IF;
(* Nota importante:
A varivel de estado Livre inicializada em TRUE dado que denota uma etapa inicial.
Todas as outras variveis de estado so inicializadas em FALSE. Conferir na declara
o das variveis *)
(* Definio das sadas (aes) em funo das etapas ativas *)
Out_2 := Carrega;
Out_3 := Descarrega;
Out_4 := Roda_carregada OR Descarrega;
(*****************************************
Fim do Programa
*****************************************)
Resoluo da Tarefa 5
O tapete de sada tem capacidade para transferir paletes a uma cadncia superior da mesa
rotativa. Logo, em condies normais, est sempre pronto a receber uma palete que a mesa rotativa
lhe queira enviar e nunca transporta mais do que uma palete em simultneo. Assim, o comando do
tapete de entrada desenvolvido na Tarefa 1 pode ser transposto para o comando do tapete de sada.
Por seu turno, a sincronizao do tapete de entrada com a mesa rotativa passa pelos princpios
134
Parte 3: As Solues
:=
:=
:=
:=
In_0);
In_3);
In_7);
In_9); (* Palete abandona tapete de sada da direita *)
135
136
Parte 3: As Solues
IF (Count = WORD#16#8000) THEN
Mem_1 := FALSE;
END_IF;
END_IF;
IF In_0 THEN
Mem_1 := TRUE;
END_IF;
(* Redefinio de Out_1: tapete de entrada ligado se tem pelo menos uma palete e pode
moviment-la *)
Out_1 := Mem_1 AND (NOT Busy_2 OR NOT In_3);
(**** COMANDO DO ALIMENTADOR ****)
(* Como na Tarefa 2 *)
Out_0 := NOT Busy_1 OR NOT In_0;
(*****************************************
Fim do Programa
*****************************************)
Resoluo da Tarefa 6
As solues das Tarefas 1 e 5 permitem definir sem dificuldades o comando do tapete de sada da
esquerda.
J permitir que a mesa rotativa descarregue para a direita ou para a esquerda tem naturalmente
reflexos no seu comando. O grafcet da Figura M1T6, que cobre este novo cenrio, revela exatamente
quais:
A recetividade da transio 4/5 passa a ser a disjuno de dois eventos;
As expresses das sadas Out_2 e Out_3 passam a incluir o sentido de descarga.
A primeira modificao trivial de programar. A segunda passa pelo seguinte:
Uma vez que s existem dois tapetes de descarga, o sentido de descarga pode ser representado por
uma varivel binria. Chamemos-lhe Sentido_descarga e assuma-se que Sentido_descarga = 0
significa descarga para o tapete da direita.
Nesta base, as expresses de sada para o comando da mesa rotativa passam a ser as seguintes:
Out_2 = 1 se Carrega OR Descarrega AND Sentido_descarga;
137
1
Sensor 3
Atuador 2
Sensor 6
Atuador 4
Sensor 5
Descarga
para a esquerda
Atuador 2
Descarga
para a direita
Atuador 3
Atuador 4
Sensor 7 OR Sensor 8
5
Sensor 4
1 Livre
2 Carrega
3 Roda carregada
4 Descarrega
5 Roda descarregada
138
Parte 3: As Solues
F_In_0(CLK := In_0);
F_In_3(CLK := In_3);
F_In_7(CLK := In_7);
F_In_8(CLK := In_8); (* Palete abandona mesa rotativa pela esquerda *)
F_In_9(CLK := In_9);
F_In_10(CLK := In_10); (* Palete abandona tapete de sada da esquerda *)
139
140
Parte 3: As Solues
Busy_1 := FALSE;
Count := ROR(Count, 1);
IF (Count = WORD#16#8000) THEN
Mem_1 := FALSE;
END_IF;
END_IF;
IF In_0 THEN
Mem_1 := TRUE;
END_IF;
Out_1 := Mem_1 AND (NOT Busy_2 OR NOT In_3);
(**** COMANDO DO ALIMENTADOR ****)
(* Como na Tarefa 2 *)
Out_0 := NOT Busy_1 OR NOT In_0;
(*****************************************
Fim do Programa
*****************************************)
Resoluo da Tarefa 7
A indisponibilidade dos elevadores em situao de alarme (isto , quando In_15 = 0, j que a
botoneira normalmente fechada) reflete-se sobre o comando dos tapetes de sada como um sinal de
entrada do tipo Busy, no sentido em que os informa de que no devem movimentar paletes para
alm da posio dos seus sensores avanados.
Por outro lado, pretender-se que um tapete de sada no transporte mais do que uma palete em
simultneo, obriga o respetivo comando a gerar um sinal do tipo Busy a ser lido pelo controlador
da mesa rotativa.
Assim, ao comando desenvolvido anteriormente para cada tapete de sada, tem de ser acrescentado
o suporte ao sinal de alarme e a gerao de um sinal Busy.
Por seu turno, a mesa rotativa passa a s poder descarregar se o tapete de destino estiver disponvel.
Tal introduz uma pequena alterao ao grafcet da Figura M1T6: as aes Atuador 2 e Atuador 3, que
na etapa 4 da Figura M1T6 estavam apenas condicionadas ao sentido de descarga, passam a estar
tambm condicionadas disponibilidade do tapete de destino ver Figura M1T7.
141
Atuador 2
Atuador 3
Atuador 4
142
Parte 3: As Solues
143
144
Parte 3: As Solues
(*****************************************
Fim do Programa
*****************************************)
Resoluo da Tarefa 8
Relativamente Tarefa 7, o problema passa apenas por atualizar a varivel Sentido_descarga,
no alternadamente, mas sim em funo da altura da palete que entra na mesa rotativa. Tudo o resto
se mantm.
A informao sobre a altura de uma palete dada pelo valor lgico de In_2 no instante em que
esta carregada no tapete de entrada, ou seja, quando In_0 tem uma transio descendente. Porm,
sendo a informao sobre a altura de uma palete adquirida quando esta entra no tapete de entrada,
mas s utilizada para definir Sentido_descarga quando a mesma descarregada na mesa rotativa, tal
informao, que corresponde a um simples bit, tem de ser devidamente armazenada.
Permitir o transporte simultneo de vrias paletes no tapete de entrada, obriga existncia de
outros tantos bits para armazenamento das respetivas alturas. Gerir devidamente a utilizao desses
bits o problema a resolver.
Uma forma muito simples de manter a informao relativa s alturas das paletes em trnsito no
tapete de entrada devidamente atualizada e ordenada, guard-la num registo denominado Fila e
proceder do seguinte modo:
Sempre que uma palete entra no tapete de entrada, o contedo de Fila deslocado para a esquerda
uma posio, colocando-se no bit mais direita a informao sobre a altura da palete que chegou:
1 se alta, 0 se baixa. Tal procedimento pode ser conseguido com a instruo SHL(Fila, 1) que
desloca o registo Fila para a esquerda uma posio colocando um 0 no bit mais direita forando
depois o bit mais direita a 1 se a caixa que entrou alta.
O facto do contador Count ter sido materializado por um contador em anel tambm deslocado
para a esquerda (embora, na realidade, fosse rodado) sempre que uma caixa carregada no tapete
de entrada , revela agora o seu verdadeiro interesse: para contagens diferentes de zero, a posio
do 1 no registo Count corresponde posio em que, no registo Fila, se encontra a informao
da altura da caixa mais antiga no tapete de entrada. Consequentemente, o resultado da operao
lgica Count AND Fila executada quando uma palete descarregada, (mas antes de decrementar
Count), revela a sua altura. Repare-se:
Tendo Count o seu bit k a 1 e todos os outros a zero, ento da operao Count AND Fila resulta
uma palavra que tem zeros em todos os bits diferentes de k, surgindo neste o valor lgico situado
na posio k de Fila. Logo, se da operao Count AND Fila resultar um valor diferente de zero, a
palete mais antiga alta. Nesta operao lgica o valor de Count funciona como uma mscara que
apenas deixa ver o bit k de Fila. Foi para conseguir esta mscara da forma mais simples possvel que
145
b0
b15
1 Fila
1 Count
b0
1 Fila
0 Count
146
Parte 3: As Solues
Busy_5 := TRUE;
END_IF;
IF In_8 THEN
Mem_5 := TRUE;
END_IF;
Out_5 := Mem_5 AND (NOT In_10 OR In_15);
(**** COMANDO DO TAPETE DE SADA DA DIREITA ****)
(* Como na Tarefa 7 *)
IF F_In_9.Q THEN
Mem_6 := FALSE;
Busy_6 := FALSE;
END_IF;
IF F_In_7.Q THEN
Busy_6 := TRUE;
END_IF;
IF In_7 THEN
Mem_6 := TRUE;
END_IF;
Out_6 := Mem_6 AND (NOT In_9 OR In_15);
(**** COMANDO DA MESA ROTATIVA ****)
(* Como na Tarefa 7 *)
IF Livre AND In_3 THEN
Livre := FALSE;
Carrega := TRUE;
END_IF;
IF Carrega AND In_6 THEN
Carrega := FALSE;
Roda_carregada := TRUE;
END_IF;
IF Roda_carregada AND In_5 THEN
Roda_carregada := FALSE;
Descarrega := TRUE;
END_IF;
IF Descarrega AND (F_In_7.Q OR F_In_8.Q) THEN
Descarrega := FALSE;
147
148
Parte 3: As Solues
(* seno, para a direita *)
END_IF;
Count := ROR(Count, 1); (* O contador agora decrementado *)
IF (Count = WORD#16#8000) THEN
Mem_1 := FALSE;
END_IF;
END_IF;
IF In_0 THEN
Mem_1 := TRUE;
END_IF;
Out_1 := Mem_1 AND (NOT Busy_2 OR NOT In_3);
(**** COMANDO DO ALIMENTADOR ****)
(* Como na Tarefa 2 *)
Out_0 := NOT Busy_1 OR NOT In_0;
(*****************************************
Fim do Programa
*****************************************)
Resoluo da Tarefa 9
Permitir que o tapete de entrada possa transportar tantas paletes quantas as possveis, significa
deixar de ter o sinal Busy_1 dependente do contador. Porm, este sinal no pode ser simplesmente
retirado, dado que o tapete de entrada nem sempre est em condies de receber paletes do
alimentador. Concretamente, no o pode fazer quando na sua posio mais avanada tem uma palete
que a mesa rotativa no est em condies de receber, j que nessa situao tem necessariamente de
suspender o seu movimento.
Da que Busy_1 seja agora formulado da seguinte forma:
Busy_1 = Busy_2 AND In_3;
Esta pequena alterao suposta responder aos objetivos da presente tarefa, melhorando bastante
a eficincia da instalao. Porm, se o leitor a experimentar, verificar que duas paletes podem
agora encostar-se no tapete de entrada, sendo percebidas como uma s pelo sensor 3 e resultando
da problemas srios durante a rotao da mesa rotativa.
O problema acontece quando o tapete de entrada forado a suspender o seu movimento, ficando
uma palete marginalmente para l do sensor 0. Uma vez que o alimentador pode avanar uma palete
149
at ao sensor 0, esta vai ficar muito prxima da que se encontra no tapete de entrada. Iniciando o
alimentador e o tapete de entrada os seus movimentos em simultneo, as paletes acabam por se
encostar.
Este problema parcialmente resolvido de uma forma muito simples: caso exista uma palete no
incio do tapete de entrada quando Busy_2 retorna a zero, ento o retorno a zero do sinal Busy_1
ser atrasado at que essa palete avance para l da posio definida pelo sensor 1. H, finalmente,
uma utilidade para o sensor 1! Faa-se ento o set de sinal Busy_1 para Busy_2 AND In_3 e o seu
reset para NOT Busy_2 AND NOT In_1.
Mas, experimentando repetidamente esta soluo, verifica-se que um outro problema subsiste:
pode acontecer que o tapete de entrada fique indisponvel durante a carga de uma palete, ficando esta
numa posio em que j detetada pelo sensor 1, mas ainda suficientemente apoiada no alimentador
a ponto de requerer o movimento deste para abandonar a posio em que ficou parada. Neste
cenrio, a estratgia pensada no resulta: se o movimento do tapete de entrada desacompanhado do
do alimentador no suficiente para remover a palete da sua posio, ento o sensor 1 no deixa
de detetar a palete, pelo que o sinal Busy_1 no volta a zero, impedindo que o alimentador inicie o
seu movimento.
A situao resolve-se recorrendo a um sinal de timeout; ou seja, se um dado tempo aps a transio
a zero de Busy_2, o sensor 1 continua a detetar uma palete, ento ser forada a transio a zero do
sinal Busy_1. O cdigo que se apresenta de seguida mostra como isso pode ser feito. Foi utilizada
uma temporizao de 5 segundos para a gerao do sinal de timeout que se verificou adequada ao
fim em vista.
(*****************************************
Misso 1 - Tarefa 9
*****************************************)
(**** DETEO DE EVENTOS RELEVANTES ****)
F_In_0(CLK := In_0);
F_In_3(CLK := In_3);
F_In_7(CLK := In_7);
F_In_8(CLK := In_8);
F_In_9(CLK := In_9);
F_In_10(CLK := In_10);
(**** COMANDO DO TAPETE DE SADA DA ESQUERDA ****)
(* Como na Tarefa 7 *)
IF F_In_10.Q THEN
Mem_5 := FALSE;
Busy_5 := FALSE;
END_IF;
150
Parte 3: As Solues
IF F_In_8.Q THEN
Busy_5 := TRUE;
END_IF;
IF In_8 THEN
Mem_5 := TRUE;
END_IF;
Out_5 := Mem_5 AND (NOT In_10 OR In_15);
(**** COMANDO DO TAPETE DE SADA DA DIREITA ****)
(* Como na Tarefa 7 *)
IF F_In_9.Q THEN
Mem_6 := FALSE;
Busy_6 := FALSE;
END_IF;
IF F_In_7.Q THEN
Busy_6 := TRUE;
END_IF;
IF In_7 THEN
Mem_6 := TRUE;
END_IF;
Out_6 := Mem_6 AND (NOT In_9 OR In_15);
(**** COMANDO DA MESA ROTATIVA ****)
(* Como na Tarefa 7 *)
IF Livre AND In_3 THEN
Livre := FALSE;
Carrega := TRUE;
END_IF;
IF Carrega AND In_6 THEN
Carrega := FALSE;
Roda_carregada := TRUE;
END_IF;
IF Roda_carregada AND In_5 THEN
Roda_carregada := FALSE;
Descarrega := TRUE;
END_IF;
Descarrega := FALSE;
Roda_descarregada := TRUE;
END_IF;
IF Roda_descarregada AND In_4 THEN
Roda_descarregada := FALSE;
Livre := TRUE;
END_IF;
IF F_In_3.Q THEN
Busy_2 := TRUE;
END_IF;
IF Livre THEN
Busy_2 := FALSE;
END_IF;
Out_2 := Carrega OR Descarrega AND Sentido_descarga AND NOT Busy_5;
Out_3 := Descarrega AND NOT Sentido_descarga AND NOT Busy_6;
Out_4 := Roda_carregada OR Descarrega;
(**** COMANDO DO TAPETE DE ENTRADA ****)
IF F_In_0.Q THEN
IF In_2 THEN
END_IF;
END_IF;
IF F_In_3.Q THEN
Sentido_descarga := TRUE;
ELSE
Sentido_descarga := FALSE;
END_IF;
Mem_1 := FALSE;
END_IF;
END_IF;
151
152
Parte 3: As Solues
IF In_0 THEN
Mem_1 := TRUE;
END_IF;
(* Gerao do Sinal Busy_1 *)
IF Busy_2 AND In_3 THEN (* Se no pode movimentar paletes fica indisponvel para
receber *)
END_IF;
(* Se a mesa rotativa est disponvel e o tapete de entrada no tem uma palete no
sensor 1, ou o Timer_1 chegou ao fim, ento pode voltar a receber paletes do
alimentador *)
IF NOT Busy_2 AND NOT In_1 OR Timer_1.Q THEN
END_IF;
(* Se no puder ficar disponvel ao mesmo tempo que a mesa rotativa por existir uma
palete no incio do tapete de entrada... *)
IF NOT Busy_2 AND Busy_1 THEN
Mem_timer := TRUE;
END_IF;
(* ...Lana um Timer de 5 segundos para limitar o atraso do movimento do alimentador
em relao ao do tapete de entrada *)
Timer_1(IN := Mem_timer, PT := T#5s);
IF In_0 THEN
Mem_1 := TRUE;
END_IF;
Out_1 := Mem_1 AND (NOT Busy_2 OR NOT In_3);
(**** COMANDO DO ALIMENTADOR ****)
(* Como na Tarefa 2 *)
Out_0 := NOT Busy_1 OR NOT In_0;
(*****************************************
Fim do Programa
*****************************************)
153
Resoluo da Tarefa 10
A instalao passou a ter trs estados (ou fases) possveis, cuja evoluo est representada no
grafcet da Figura M1T10a:
Automtico Funcionamento contnuo como na Tarefa 9;
Encerramento Alimentador no fornece paletes e os demais transportadores transferem
as paletes ainda em trnsito;
Pronto A instalao no funciona por escassez de paletes.
O curioso deste funcionamento que, excetuando o alimentador, todos os transportadores, em
todos dos modos, se comportam da forma descrita na Tarefa 9! por simples escassez de paletes
ou seja, pelo facto do alimentador deixar de fornecer paletes que a instalao entra na fase
de encerramento, acabando depois inativa. Fazer a instalao regressar ao modo automtico,
permitir que o alimentador volte a fornecer paletes que os diferentes transportadores encaminham
devidamente.
10
Botoneira parar
11
Botoneira
iniciar
Pisca
encerramento
Instalao parada
12
Luz
botoneira inciar
Botoneira iniciar
10 Automtico
11 Encerramento
12 Pronto
154
Parte 3: As Solues
Ou, equivalentemente:
Out_0 = (NOT In_0 OR NOT Busy_1) AND (In_0 OR Automatico);
Timer_2
TON
Cond
IN
T_off
TON
Q
IN
T_on
PT
PT
Cond
T_off
T_off
Timer_1.Q
T_on
Timer_2.Q
T_on
Timer_1.IN
ta
tb
tc
tz
155
o pisca, est a 0. Isso faz com que as entradas e sadas dos temporizadores estejam tambm em 0.
O primeiro temporizador, Timer_1, armado ao tempo ta, ou seja, quando a condio Cond
no caso desta tarefa ser a varivel Encerramento toma o valor lgico 1. Mantendo-se Cond
a 1, a sada de Timer_1 vai a 1 ao tempo tb = ta + T_off, fazendo Timer_2 iniciar a respetiva
temporizao. Consequentemente, mantendo-se Cond a 1, a sada do segundo temporizador vai
a 1 ao tempo tc = tb + T_on, ou seja, um tempo T_on aps o primeiro, desarmando-o. O desarme
do primeiro temporizador desarma o segundo que, por sua vez, rearma o primeiro. Significa isto
que, ao tempo tc retomam-se as condies observadas em ta, pelo que o ciclo se repetir com uma
periodicidade T = T_on + T_off.
Assim, a sada do primeiro temporizador alternar com um perodo T = T_off + T_on e um duty
cycle = T_on/T at ao tempo tz, instante em que a varivel de interesse, Cond, passa a exibir o valor
lgico 0.
Assumindo-se que, no caso da presente tarefa, o pisca ser realizado por dois temporizadores
designados por Pisca_encerramento_1 e Pisca_encerramento_2, ento a sinalizao do estado da
instalao atravs da luz da botoneira Iniciar feita pela seguinte instruo:
Out_8 = Parada OR Pisca_encerramento_1.Q;
156
Parte 3: As Solues
Pronto := TRUE;
Encerramento := FALSE;
END_IF;
IF In_12 THEN (* Quando a Botoneira Iniciar premida *)
Automatico := TRUE; (* Encerramento ou Pronto -> Automtico *)
Encerramento := FALSE;
Pronto := FALSE;
END_IF;
(* Deteo de instalao inativa *)
Parada := NOT Mem_1 AND Livre AND NOT Mem_5 AND NOT Mem_6;
(* Materializao do Pisca de Encerramento *)
Pisca_encerramento_1(IN := Encerramento AND NOT Pisca_encerramento_2.Q, PT := T#1s);
Pisca_encerramento_2(IN := Pisca_encerramento_1.Q, PT := T#1s);
(* Sinalizao do Modo *)
Out_8 := Pronto OR Pisca_encerramento_1.Q;
(**** COMANDO DO TAPETE DE SADA DA ESQUERDA ****)
(* Como na Tarefa 7 *)
IF F_In_10.Q THEN
Mem_5 := FALSE;
Busy_5 := FALSE;
END_IF;
IF F_In_8.Q THEN
Busy_5 := TRUE;
END_IF;
IF In_8 THEN
Mem_5 := TRUE;
END_IF;
Out_5 := Mem_5 AND (NOT In_10 OR In_15);
(**** COMANDO DO TAPETE DE SADA DA DIREITA ****)
(* Como na Tarefa 7 *)
IF F_In_9.Q THEN
Mem_6 := FALSE;
Busy_6 := FALSE;
END_IF;
IF F_In_7.Q THEN
157