You are on page 1of 11

Mestrado Integrado em

Engenharia Electrotécnica e de Computadores

Automação
Ramos de Automação e Energia

Guião de trabalho prático:

Projecto de sistema de controlo de
parque de estacionamento
baseado no software
FEUPAutom

José António Faria – jfaria@fe.up.pt
Armando Jorge Sousa – asousa@fe.up.pt

Apresentação Depois de. pelo que poderá instalá-lo no seu computador ou trabalhar no laboratório. Automação 2007/8 2 / 11 . programável com a linguagem Structured Text (ST). O EMail a enviar deve ter o título [Auto] TP2 Turma xxx Grupo yyy e deve ter anexo os 2 PDFs. O software ser-lhe-á apresentado nas aulas teóricas e estará disponível para “download” nos conteúdos da disciplina.o Simulador “3D Park” onde é simulado o funcionamento do sistema a controlar (neste caso o parque de estacionamento) A preparação deste TP consiste nos seguintes pontos: • leitura prévia de todo o guião • familiarização com a linguagem de programação ST • executar os programas de teste Cada grupo deve enviar. ao respectivo professor das aulas práticas as impressões para PDF geradas pelo FEUPAutom do código produzido para cada um dos trabalhos do parque (partes 2 e 3). O software contém dois elementos principais: . Apenas no final da segunda aula é que as funcionalidades implementadas serão conferidas e o desempenho do grupo ao longo das duas aulas será avaliado. por EMail. no final da segunda aula. vai agora projectar dois sistemas de controlo idênticos recorrendo ao software FEUPAutom que implementa um controlador baseado em PC. ter realizado o projecto do sistema de controlo de um parque de estacionamento com base em lógica discreta.o Editor “FEUPAutom” através do qual desenvolve o seu programa de controlo em linguagem ST . o texto do email deve conter a turma. nas aulas anteriores. o grupo e o nome dos autores do trabalho (substituir xxx pela turma e yyy pelo nº grupo). Este trabalho prático (TP) durará duas aulas.

Relativamente ao editor: • Não é possível alterar código durante a sua execução • Utilize ctrl space para chamar o menu de “completion” – este menu lista variáveis e keywords frequentes da linguagem (não todas!) • Tenha em atenção a colorização do código à medida que o vai introduzindo Automação 2007/8 3 / 11 . ex. chegue o código 2 espaços para a direita. Este documento contém informação de interesse e deve ser consultado sempre que surgirem perguntas ao funcionamento do FEUPAutom. Especial cuidado com IFs e NOTs. após cada ENF_IF.Parte 1: Familiarização com o FEUPAutom Arranque o editor do FEUPAutom. Relativamente à programação no FEUPAutom em linguagem ST: • Atribuições com := • Comparações = • Não distingue maiúsculas e minúsculas • Os blocos de IF têm THEN e END_IF obrigatoriamente e ELSE opcionalmente • Nas expressões booleanas é obrigatório por (parêntesis) entre todas as expressões elementares. p. A linguagem de programação utilizada é o ST. parte da norma 61131 de programação de dispositivos automáticos e descende do pascal. reponha o código 2 espaços antes (ver exemplo). Apesar da norma ST mencionar apenas (* comentários *). ciclo esse que não é representado explicitamente no código do utilizador (consulte o help para mais detalhes). Todos os programas do FEUPAutom funcionam em ciclo.: IF ((X=Y) AND ((NOT Z)=W)) THEN Escreva código legível: • Utilize uma instrução por linha • Inicie o código na margem esquerda • Utilize indentação correcta: após cada IF (ou outra instrução de bloco). Confira que a tecla F1 arranca o Help do FEUPAutom. o FEUPAutom permite ainda // comentários. • Utilize nomes descritivos adequados para cada variável – exemplo: SensorEntrada • Utilize comentários adequados.

isto é. Automação 2007/8 4 / 11 . Examine a variável mw0 passando o cursor do rato por cima: o valor é apresentado na barra de estado.Word Introduza o seguinte programa: mw0 := mw0 + 1. etc a variável Q0. A variável m0 é uma variável auxiliar de memória do tipo bit. Q0 representa a primeira saída do sistema. A atribuição é feita com o operador := . Escolha menu Program -> Run Once ou prima F8 para perceber o funcionamento do FEUPAutom. A variável chama-se mw0. a luz estaria acesa. println (m0). Programa de Teste 2 – Variável Booleana na memória Introduza o seguinte programa: m0 := not m0. O valor de mw0 é impresso a cada ciclo executado. Deve observar aproximadamente uma onda quadrada. Programa de Teste 3 . Prima Run F9 e logo de seguida Stop F10. isto é. o programa pode comandar esta variável e esta variável está associada a um actuador. No modo Run não são impressos valores mas é possível ver o valor das variáveis movimentando continuamente o rato por cima da variável. println (mw0). Abra a janela IO Leds (menu window -> IO Leds ou prima F6). seria possível associar uma luz à variável Q0 e quando Q0 estivesse activo.Saídas Introduza o seguinte programa: q0 := not q0. True (1) ou False (0). O código deste programa comuta continuamente True -> False -> True. Este programa incrementa um variável de memória do tipo WORD (um inteiro) a cada ciclo executado. que armazena um valor booleano. Abra a janela de log (menu windo -> Log -> Trace ou prima F7). por exemplo. Prima repetidamente F8 para observar o funcionamento do programa e inspeccione o valor de m0.Programas de Teste Programa de Teste 1 – Variável Inteira na memória . Escolha menu Program -> Run ou prima F9. Assinale com um visto a opção Q0 para ver o traçado temporal desta variável.

Para testar o programa. A entrada I0 é uma variável associada a um sensor externo. Isto é dizer ao programa para ligar I0 fazendo “batota” . A função booleana XOR é utilizada para obter a funcionalidade de comutação. Programa de teste 4 – Operadores de flanco Introduza o seguinte programa: q0 := (RE i0) xor q0. OR. seria possível a variável I0 estar associada a um botão e nessa altura sempre que o botão estivesse premido. Não é possível o programa atribuir valores a variáveis de entrada. Operadores Booleanos: NOT. AND. A função especial RE (Rising Edge) fica activa apenas se no ciclo anterior do autómato a variável em causa estava a False (0) e no presente ciclo está a True (1). Se o programa estiver a ser executado correctamente. o led Q0 acompanhará o I0. Faça experiências.Programa de Teste 3 – Entradas e forçagens Introduza o seguinte programa: q0 := i0. XOR Operadores de Flanco: RE (rising edge) e FE (falling edge) Automação 2007/8 5 / 11 . prima Run F9. por exemplo. Na janela de IO Leds seleccione forçar a primeira entrada que se chama I0. a variável teria o valor “true”. a variável Q0 é trocada. Force I0 a true (ou 1) e verá o led acender (figura ao lado).através desta noção de forçar consegue-se por I0 a ser comandada pelo utilizador. e teste o funcionamento: a cada flanco ascendente (de 0 para 1) da variável I0. Execute com Run F9.

// inicio da contagem do tempo t1. para um temporizador no modo TOn.mode := TOn. que é listado de seguida para facilidade de consulta: (**************************************************************) (* TimerSimple2.P décimos de segundo *) (* Modo TOff: Liga logo e desliga após xxx. premir CTRL+SHIFT+R if sw0 = 0 then // inicializações t0.faproj .Exemplo de Timers *) (* Modo TOn: Liga após xxx.P := 10. Estude o código e as formas de onda acima apresentadas. // tempo de activação em décimos de segundo start t0. xxx.Programa de teste 5 – Temporizadores Utilize o menu Project -> open para abrir.Q é o bit associado ao temporizador xxx. para o modo TOff. // modo de atraso à desactivação t1. if t0. start t1.P décimas de segundo.faproj.P := 5. end_if. q0 := not q0.mode := TOff.q then start t0. Obs: Os temporizadores do FEUPAutom nunca param e o comando START marca o instante do início da contagem de tempo Automação 2007/8 6 / 11 . dentro do directório help. o ficheiro com o nome TimerSimple2. este bit fica False passado passado xxx.P décimas de segundo. Tente seguir o funcionamento do programa para se aperceber do funcionamento dos temporizadores do FEUP Autom. // modo de atraso à activação t0. start t1. end_if. este bit fica True passado xxx.P décimos de seg *) (* Pisca Q0 1 seg on e 1 seg off *) (**************************************************************) // Obs: a word de sistema 0 (SW0) conta o número de ciclos executados // e pode ser utilizada para inicializações // IMPORTANTE: para repor sw0:=0.

activa para a saída seguinte: q0. Programa Livre 5 Crie um programa que ligue Q0 quando I0 estiver activo mas Q0 só pode ficar activo durante um tempo máximo de 1 segundo. q1. Automação 2007/8 7 / 11 . Programa Livre 2 Acrescente ao enunciado anterior a funcionalidade de ligar a saída Q1 quando pelo menos uma das saídas I2 e I3 ou I4 estiverem activas. … Programa Livre 4 Crie um programa que ligue Q0 quando I0 estiver activo um tempo superior a 1 segundo. Programa Livre 1 Crie um programa que apenas liga a saída Q0 quando I0 e I1 estiverem ambas ligadas. q2. q0. Programa Livre 3 Crie um programa que a cada flanco descendente da variável i0.Programas Livres Os seguintes programas livres são opcionais e destinam-se apenas a dar prática de programação sob FEUPAutom e consolidar conceitos.

Automação 2007/8 8 / 11 .O Simulador 3D Park Operações sobre o simulador de parque: • Prima do lado direita da cancela ou premir o botão “Car Arrive” para fazer entrar um carro • Prima do lado esquerdo da cancela ou premir o botão “Car Exit” para fazer entrar um carro • Se forem enviados comando incoerentes. Os sensores da simulação tal como as células de entrada serão entradas no FEUPAutom e os actuadores tal como o motor da barreira são saídas do FEUPAutom. As ligações dos sensores e actuadores estão listadas nas especificações de cada uma dos trabalhos. Esta situação de avaria é representada através de chamas na caixa da barreira – para a simulação voltar a funcionar. é possível “estragar” a barreira. é necessário premir “Fix Barrier” Obs: Estas opções estão também disponíveis no menu de contexto do rato – premir o botão do lado direito do rato sobre a imagem O simulador pode funcionar no modo em que barreira é instantânea ou no modo em que o motor vai abrindo / fechando a barreira.

simplificadamente. uma localizada antes da cancela e a outro depois. o a cancela fecha depois do carro deixar de ser detectado pela célula 2 (e não após um tempo fixo como. e no caso de haver lugares disponíveis: o a cancela abre para o carro entrar. agora. Desenvolva o programa de controlo do parque nesta nova situação considerando a seguinte lista de atribuições: Entradas celula1 I1 celula2 I2 celulaSaida I3 Célula2 Saídas abrirCancela Q1 fecharCancela Q2 semaforoVerde Q3 semaforoVermelho Q4 Célula1 • Utilize o FEUPAutom com o “Target” Simple Park. Automação 2007/8 9 / 11 . se admitia no trabalho anterior). na versão “Instant Barrrier” • Utilize a janela Window -> Variables do FEUPAutom para definir o nome das variáveis e seus mapeamentos de acordo com a tabela acima mostrada. Quando um novo carro chega à entrada do parque. conforme representado na figura seguinte.Parte 2: Trabalho do Parque – Especificação base Considere um parque de estacionamento idêntico ao considerado no trabalho anterior mas. no posto de entrada do parque existem duas células fotoeléctricos.

o motor forçaria a cancela para além da sua posição limite) Para o fecho da cancela deve considerar uma especificação semelhante. Se. for detectado a presença de um novo carro pela célula2.Parte 3: Trabalho do parque – Especificação completa Relativamente à situação anterior considere agora as seguintes especificações adicionais: Existem dois novos fim-de-curso designados por cancelaAberta e cancelaFechada que estão activos quando a cancela está completamente aberta ou fechada. isto é. a ordem de abertura da cancela deve passar a estar activa apenas enquanto o fim-de- curso cancelaAberta não estiver activo (caso contrário. a cancela deve abrir imediatamente. Como anteriormente. antes da cancela estar completamente fechada. respectivamente. Desenvolva o programa de controlo para esta nova situação considerando a seguinte lista de atribuições: Entradas celula1 I1 ligarSirene desligarSirene celula2 I2 celulaSaida I3 cancelaAberta I4 cancelaAberta cancelaFechada I5 desligarSirene I6 Saídas abrirCancela Q1 Célula2 fecharCancela Q2 semaforoVerde Q3 semaforoVermelho Q4 ligarSirene Q5 cancelaFechada Célula1 Automação 2007/8 10 / 11 . por uma questão de segurança. Assim. a ordem de fecho só deve estar activa 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 detectado pela célula2.

ao respectivo professor das aulas práticas as impressões para PDF geradas pelo FEUPAutom do código produzido para cada um dos trabalhos do parque (partes 2 e 3). No entanto. for detectado a presença de um novo carro pela célula2. no final da segunda aula. na versão “Moving Barrrier” • Utilize a janela Window -> Variables do FEUPAutom para definir o nome das variáveis e seus mapeamentos de acordo com a tabela acima mostrada. o grupo e o nome dos autores do trabalho (substituir xxx pela turma e yyy pelo nº grupo). a cancela deve abrir imediatamente. antes da cancela estar completamente fechada. por uma questão de segurança. O EMail a enviar deve ter o título [Auto] TP2 Turma xxx Grupo yyy e deve ter anexo os 2 PDFs. Relatório Final No final da segunda aula serão avaliadas as funcionalidades implementadas e o desempenho do grupo ao longo das duas aulas será avaliado Cada grupo deve enviar. o texto do email deve conter a turma. • Utilize o FEUPAutom com o “Target” Simple Park. Bom Trabalho ☺ ! Automação 2007/8 11 / 11 . deverá ser accionada uma sirene. como esta situação corresponde a uma entrada ilegítima de um novo carro. considere ainda a especificação adicional: Tal como referido anteriormente. a qual permanecerá ligada até que o botão desligarSirene seja premido.Para valorização de nota. se. por EMail.