You are on page 1of 9

Departamento de Cincias Bsicas e Computacionais

Curso de Engenharia de Sistemas de Energias Renovveis Disciplina de Sistemas de Automao


Ano Letivo de 2011/2012

Relatrio Controlo de Parque de Estacionamento


Elaborado por Cndida Ferreira n 7627 Entregue em 27 de Novembro de 2011

Sistemas de Automao 2 Controlo de Parque de Estacionamento

ndice
Introduo.3 Objetivos....3 Cdigo4 Concluso9

Sistemas de Automao 3 Controlo de Parque de Estacionamento

ntroduo
Este trabalho elaborado no mbito da disciplina de Sistemas de Automao visa desenvolver um programa para controlo de um parque de estacionamento utilizando o programa FeupAutom em conjunto com o Simple Park. O FeupAutom um programa que utiliza linguagem Structured Text (ST), descendente do PASCAL e parecida com a linguagem C. Esta linguagem muito similar a linguagens de alto nvel, ou seja, basicamente o programa estruturado em um conjunto de condies (IF...THEN...ELSE), bem como operaes de comparao e operaes matemticas associados a comandos especficos para controlo de processos (SET... RESET). Devido sua flexibilidade, muito utilizada por profissionais com formao na rea de sistemas de informao e/ou computao. Para testarmos as funcionalidades do nosso cdigo recorremos ao simulador Simple Park. Visto ser uma nova linguagem tivemos de recorrer ao tutorial, introduo FeupAutom tal como ao manual de ajuda do programa.

Objetivos
Os objetivos do trabalho so desenvolver um programa no FeupAutom que cumpra os seguintes parmetros: A abertura da cancela para o carro entrar, faz-se quando detetado pela clula 1; Os dois fim-de-curso designados por cancelaAberta e cancelaFechada fiquem ativos quando a cancela est completamente aberta ou fechada, respetivamente, de modo a que a ordem de abertura da cancela passe a estar ativa apenas enquanto o fim-de-curso cancelaAberta no estiver ativo (caso contrrio, o motor foraria a cancela para alm da sua posio limite); O fecho da cancela deve considerar uma especificao semelhante anterior, isto , a ordem de fecho s deve estar ativa at o fim-de-curso cancelaFechada indicar que a cancela j est completamente fechada; A cancela fecha quando o carro que entrou deixar de ser detetado pela clula2. Se, antes de a cancela estar completamente fechada, a clula2 detetar a presena de um novo carro ento, por uma questo de segurana, a cancela deve abrir imediatamente; Se ocorrer a situao anterior, esta corresponde entrada ilegtima de um novo carro, devendo ser acionada uma sirene, que permanecer ligada at o boto desligarSirene ser premido;

Sistemas de Automao 4 Controlo de Parque de Estacionamento Se o carro estiver mais de 3 segundos a interromper a clula 1, deve-se ativar a sirene que se ir desligar aps o avano do carro; O parque dever ter um limite mximo de 5 carros, pelo que se o limite for atingido, a barreira no deve abrir e a duas luzes do semforo devero piscar alternadamente num intervalo de 1seg. O programa de controlo dever executar o controlo dos semforos e o controlo das luzes da barreira;

Codigo
Comeamos por declarar as variveis. Para simplificar a anlise do cdigo ao professor optamos por todos declararmos as variveis principais com os mesmos nomes. As restantes variveis introduzidas no cdigo sero explicadas mais frente.

Fig1. Esquema com as variveis a ter em conta no trabalho.

Fig3. Tabela com todas as variveis mencionadas no programa. Fig2. Tabela com as variveis principais.

Sistemas de Automao 5 Controlo de Parque de Estacionamento Agora iremos proceder anlise do cdigo. O cdigo encontra-se a azul e os comentrios a preto. O simulador comea por mostrar o semforo a vermelho e s depois do carro interromper a clula 1 que o semforo passa a verde, caso o parque esteja desocupado. semaforoverde:=false; semaforovermelho:=true; Quando o carro detetado pela clula 1 ns demos ordem para que a cancela abrisse. IF RE celula1 THEN Se o carro est a passar na clula 1 (Rising Edge*) abrirCancela := TRUE; fecharCancela := FALSE; END_IF; *Rising Edge uma funo especial que fica ativa durante um ciclo do autmato apenas se a varivel em causa estava a False (0) no ciclo anterior e agora est a True (1). Depois de a abrir, o carro passa na clula 2 e a cancela ser fechada. IF FE celula2=true THEN Se o carro acabou de ser detetado pela clula 2 (Falling Edge*) abrirCancela := FALSE; fecharCancela := TRUE; END_IF; *Falling Edge uma funo especial que fica ativa durante um ciclo do autmato apenas se a varivel em causa estava a True (1) e passou a False (0). Caso a clula 1 seja acionada e a clula 2 fica inativa, isto , um carro intersete a clula 1 e no haja nenhum a intersetar a clula 2, so dadas ordens para abrir a cancela e para o semforo passar a verde. IF (celula1=true) AND (celula2=false) THEN abrirCancela := TRUE; fecharCancela := FALSE; semaforoverde:=true; semaforovermelho:=false; END_IF; Esta instruo permite que o motor no seja forado. Neste caso, utilizei o input CancelaAberta que para o caso do output AbrirCancela estar ativo fazia com que a cancela no pudesse subir mais que o limite. IF cancelaaberta=true THEN abrircancela:=false; END_IF; Esta instruo permite que o motor no seja forado. Neste caso, utilizei o input CancelaFechada que para o caso do output FecharCancela estar ativo fazia com que a cancela no pudesse descer mais que o limite. IF cancelafechada=true THEN

Sistemas de Automao 6 Controlo de Parque de Estacionamento fecharcancela:=false; END_IF; Caso no haja nenhum carro a intersectar a clula 1 e a clula 2 dada a ordem para que a cancela feche. IF (celula1=false) AND (celula2=false) THEN abrirCancela := FALSE; fecharCancela := TRUE; END_IF; (1) Se um carro acabou de passar na clula 1 (Falling Edge) tem de ser incrementado de modo a que o programa saiba que h mais um carro dentro do parque. Para isso criamos uma varivel auxiliar responsvel pela contagem dos carros no parque com o nome de contador. (2) Se o carro acabou de passar na clula 1 e no est a passar na clula 2 ento dada a ordem para a cancela fechar e decrementado o carro que tinha sido incrementado anteriormente. Isto , se o carro chegar celula1 a barreira abre mas se por algum motivo o carro desistir de entrar no parque e faa macha atras ou seja no detetado na celula2 quando deixa de ser detetado na celula1, a barreira fecha imediatamente e o carro no contabilizado como tendo entrado no parque. (1)IF FE celula1 THEN contador:=contador+1; (2)IF celula2=false THEN abrircancela:=false; fecharcancela:=true; contador:=contador-1; END_IF; END_IF; (1) Caso comece a ser detetado um carro na clula de sada (Rising Edge) este tem de ser decrementado de modo a que o programa saiba que h menos um carro no parque. (2) Se o nmero de carros no parque for menor que 5 e a sirene no estiver ativa a auxiliar1 ativada. Esta varivel auxiliar responsvel por permitir ou no a entrada de carros no parque. Caso auxiliar1=0-podem entrar carros no parque, caso auxiliar1=1-no podem entrar carros no parque. (1) IF RE celulasaida THEN contador:=contador-1; (2) IF contador<5 THEN IF ligarsirene=false THEN auxiliar1:=0; END_IF; END_IF; END_IF;

Sistemas de Automao 7 Controlo de Parque de Estacionamento Caso contador=5 (indica que o parque est cheio) e caso a cancela esteja fechada so dadas ordens para que a cancela permanea fechada e a varivel auxiliar1 no deixa entrar carros no parque. IF contador=5 THEN IF cancelafechada=true THEN abrircancela:=false; fecharcancela:=true; auxiliar1:=1; END_IF; END_IF; Este IF diz respeito s entradas ilegais. Caso a cancela esteja fechada e um carro esteja a passar pela clula2 ento acionada a sirene e dada a ordem para a cancela abrir para no causar danos no carro. criada uma varivel auxiliar que informa que houve uma entrada ilegal. IF fecharcancela=true THEN IF celula2=true THEN ligarsirene:=true; fecharcancela:=false; abrircancela:=true; ilegal:= TRUE; END_IF; END_IF; Este IF para no caso da entrada ser ilegal a sirene s ser desligada quando carregarmos no boto Siren Off. Note que caso o carro que est a entrar no parque seja o quinto carro, o que faz atingir o limite de carros no parque, caso haja uma ou mais entradas indevidas, a cancela manter-se- aberta para que esses carros entrem, mesmo ultrapassando o limite de carros do parque. Mas, aps o fecho da cancela, enquanto no sarem os carros necessrios para que o parque deixe de estar lotado, no entra mais nenhum carro. IF (desligarsirene=true) AND (ilegal=true) THEN ligarsirene:=false; ilegal:=false; END_IF; Se um carro permanecer mais de 3 segundos na clula 1 a sirene ser ativada e s desativada quando o carro deixar de intersetar a clula 1. IF RE celula1 THEN tempo.mode:=ton; -modo DO temporizador tempo.p:=30; -preset dcimas de segundo START tempo; -inicio da contagem END_IF; IF tempo.q THEN -bit activo no final da temporizao ligarsirene:=true; END_IF; IF celula1=false THEN

Sistemas de Automao 8 Controlo de Parque de Estacionamento ligarsirene:=false; END_IF; Fim do temporizador Quando o nmero de carros superior ou igual a 5 e a varivel pisca falsa iniciado um timer nos mesmo moldes que o anterior, alterando-se o tempo que passar a ser de 1 segundo. atribudo o valor true varivel tempo1.q e atravs do comando NOT, indicamos que o semforo verde e vermelho devem alterar o seu estado para o contrrio do que se encontravam, ou seja, se o semforo verde estava ligado e o vermelho desligado, deve desligar-se o verde e o vermelho ligar-se. Ao fim disto, atribudo o valor true varivel tempo1.q, terminando o ciclo. Sempre que a varivel tempo1.q for verdadeira, a varivel pisca2 falsa, pelo que o ciclo se repete. Como a varivel tempo1.q verdadeira sempre que houver 5 carros no parque, o ciclo vai estar em contnua repetio at a lotao do parque deixar de estar lotada. IF (contador>=5) THEN IF (pisca=false) THEN tempo1.mode:=Ton; tempo1.p:=10; START tempo1; Semaforoverde:= NOT (Semaforoverde); Semaforovermelho:= NOT (Semaforovermelho); pisca:=true; END_IF; IF (tempo1.q=true) THEN pisca:=false; END_IF; END_IF; Em anexo com o relatrio envio o cdigo em ficheiro *.faproj, o qual foi realizado por mim (Cndida Ferreira) e pela aluna Sara Biscaia.

Sistemas de Automao 9 Controlo de Parque de Estacionamento

Concluso
Com este trabalho adquirimos conhecimentos para trabalhar com uma nova ferramenta: FeupAutom. Aprendemos a programar numa nova linguagem, a linguagem estruturada, bem como nos enriqueceu numa pequena introduo aos autmatos. As principais dificuldades foram temporizar os semforos, pois envolvia mais conhecimentos. A consulta do manual Help do FeupAutom bem como a do manual de introduo a este novo programa foi essencial para a elaborao do trabalho.

You might also like