Exemplo de Código-Fonte em LCE

Home Page

SimuPLC

Help SimuPLC

Download

Comentários

Blog

In English


 

Exemplo de programa de controle codificado na Linguagem de Comandos Elétricos - LCE:

 

clp Elevador_3_Pavimentos // Esboço de controle automático de um elevador em prédio com 2 andares e térreo. (Atenção: controles que envolvem diretamente a vida humana, como em elevadores, caldeiras, oleodutos, veículos, etc., podendo colocá-la em risco no caso de mau funcionamento, devem ser implementados no mundo real com especial rigor, além de ter que atender legislação específica, testes rigorosíssimos, aprovação por órgãos certificadores, etc. Normalmente são adquiridos em pacotes de software embutidos nos equipamentos controlados. O presente controle aqui esboçado tem caráter meramente de exemplificação e introdução ao estudo do interessante e complexo campo dos controles de elevadores e afins.)

var I0.0 chama2ºAndar,

I0.1 chamaSobe1ºAndar,

I0.2 chamaDesce1ºAndar,

I0.3 chamaTérreo,

I0.4 portaAberta2ºAndar,

I0.5 portaAberta1ºAndar,

I0.6 portaAbertaTérreo,

I0.7 cabineFechada,

I1.0 cabineAberta,

T0 tempoMínAbertoTérreo,

T1 tempoMínAberto1ºAndar,

T2 tempoMínAberto2ºAndar,

I1.1 botãoCab2ºAndar,

I1.2 botãoCab1ºAndar,

I1.3 botãoCabTérreo,

I1.4 cabineEstá2ºAndar,

I1.5 cabineEstá1ºAndar,

I1.6 cabineEstáTérreo,

I1.7 Fotocélula,

I2.0 obstáculoPorta,

Q0.0 motorSobeCabine,

Q0.1 motorDesceCabine,

Q0.2 motorAbreCabine,

Q0.3 motorFechaCabine,

Q0.4 destravaPorta2ºAndar,

Q0.5 destravaPorta1ºAndar,

Q0.6 destravaPortaTérreo,

Q0.7 VentilaIlumina,

I2.1 botãoEmergência,

Q1.0 alarmeEmergência,

I2.2 ExcessoPeso,

Q1.1 alarmePeso,

Q1.2 cabineEstáSubindo,

Q1.3 cabineEstáDescendo,

M0.0 problemaFechaCabine;

rede 0 // Inicia o controle na seq. esperaTér (O sistema deve ser sempre iniciado com a cabine no térreo e com a sua porta aberta, por meio de acionamentos manuais dos motores após queda de energia elétrica ou manutenção).

se (imed botãoEmergência) {

aciona imed alarmeEmergência;

}

se (não imed Fotocélula ou imed ExcessoPeso ou imed obstáculoPorta ou imed botãoEmergência)

{

aciona problemaFechaCabine; // Indica algo errado que impede o fechamento da cabine

}

enquanto (imed ExcessoPeso)

{

se (não imed alarmePeso) // Aciona imediatamente o alarme enquanto perdurar o excesso de peso

{

aciona imed alarmePeso;

}

}

se (não VarAux)

{

aciona Início; // Gera um pulso na variável Início quando do início da operação (1º ciclo)

ou (VarAux)

{

aciona VarAux;

}

}

se (Início)

{

liga esperandoTérreo; // Ativa a seqüência inicial quando do início da operação

}

//**************** Início seqüência esperandoTérreo ****************

rede 1 // Seq. esperandoTérreo: cabine parada no térreo aguardando chamadas/usuários

seqüência esperandoTérreo

rede 2 // Destrava porta do térreo para permitir entrada dos usuários.

se (não imed destravaPortaTérreo) {

liga imed destravaPortaTérreo;

reset tempoMínAbertoTérreo;

}

quando (destravaPortaTérreo) temporiza tempoMínAbertoTérreo 3 s;

se (imed portaAbertaTérreo ou não imed Fotocélula ou imed obstáculoPorta) { // A cabine só é fechada após permanecer um tempo mínimo com sua porta aberta e, se entrou alguém, após a entrada do último usuário, ou, se obstruída, após ser desobstruída.

reset tempoMínAbertoTérreo;

}

fim_circuito_seqüência

rede 3 // Quando alguém entra e aciona botão para subir, ou algum usuário chama a cabine em andar superior, o PLC trava a porta do térreo e transfere para seq. fechandoTér, desde que a porta da cabine não seja aberta, o botão "Emergência" não tenha sido pressionado, não haja excesso de peso nem alguém na linha da porta da cabine, o que é indicado pela ausência de luz na fotocélula, e nem obstáculo impedindo seu fechamento. A cabine só é fechada após permanecer um tempo mínimo com sua porta aberta após a entrada do último usuário.

se (imed botãoCab1ºAndar ou imed botãoCab2ºAndar ou imed chamaSobe1ºAndar ou imed chamaDesce1ºAndar ou imed chama2ºAndar)

{

liga imed cabineEstáSubindo;

liga imed VentilaIlumina;

}

se (cabineEstáSubindo e não imed portaAbertaTérreo e tempoMínAbertoTérreo e não problemaFechaCabine)

{

desliga imed destravaPortaTérreo; // Trava a porta de acesso à cabine

transfere_seqüência fechandoTérreo;

}

rede 4 // Fim da Seqüência esperandoTérreo

fim_seqüência;

//**************** Fim seqüência esperandoTérreo *******************

//**************** Início seqüência esperando1ºAndar ****************

rede 5 // Seq. esperando1ºAndar: cabine parada no 1º Andar aguardando chamadas/usuários

seqüência esperando1ºAndar

rede 6 // Destrava porta do 1º andar para permitir entrada dos usuários.

se (não imed destravaPorta1ºAndar) {

liga imed destravaPorta1ºAndar;

reset tempoMínAberto1ºAndar;

}

quando (destravaPorta1ºAndar) temporiza tempoMínAberto1ºAndar 3 s;

se (imed portaAberta1ºAndar ou não imed Fotocélula ou imed obstáculoPorta) {

reset tempoMínAberto1ºAndar;

}

fim_circuito_seqüência

rede 7 // Quando alguém entra e aciona botão para subir, ou algum usuário chama a cabine em andar superior, o PLC trava a porta do 1ºAndar e transfere para seq. fechando1ºAndar, desde que a porta da cabine não seja aberta, o botão "Emergência" não tenha sido pressionado, não haja excesso de peso nem alguém na linha da porta da cabine, o que é indicado pela ausência de luz na fotocélula, e nem obstáculo impedindo seu fechamento. A cabine só é fechada após permanecer um tempo mínimo com sua porta aberta após a entrada do último usuário.

se (não imed cabineEstáDescendo e (imed botãoCab2ºAndar ou imed chama2ºAndar))

{

liga imed cabineEstáSubindo;

liga imed VentilaIlumina;

}

se (não imed cabineEstáSubindo e (imed botãoCabTérreo ou imed chamaTérreo))

{

liga imed cabineEstáDescendo;

liga imed VentilaIlumina;

}

se (não imed botãoCab2ºAndar e não imed chama2ºAndar e não imed botãoCabTérreo e não imed chamaTérreo)

{

desliga imed cabineEstáSubindo;

desliga imed cabineEstáDescendo;

desliga imed VentilaIlumina;

}

se ((cabineEstáSubindo ou cabineEstáDescendo) e não imed portaAberta1ºAndar e tempoMínAberto1ºAndar e não problemaFechaCabine)

{

desliga imed destravaPorta1ºAndar;

transfere_seqüência fechando1ºAndar;

}

rede 8 // Fim da Seqüência esperando1ºAndar

fim_seqüência;

//**************** Fim seqüência esperando1ºAndar ****************

//**************** Início seqüência esperando2ºAndar ****************

rede 9 // Seq. esperando2ºAndar: cabine parada no 2ºAndar aguardando chamadas/usuários

seqüência esperando2ºAndar

rede 10 // Destrava porta do 2º andar para permitir entrada dos usuários.

se (não imed destravaPorta2ºAndar) {

liga imed destravaPorta2ºAndar;

reset tempoMínAberto2ºAndar;

}

quando (destravaPorta2ºAndar) temporiza tempoMínAberto2ºAndar 3 s;

se (imed portaAberta2ºAndar ou não imed Fotocélula ou imed obstáculoPorta)

{

reset tempoMínAberto2ºAndar;

}

fim_circuito_seqüência

rede 11 // Quando alguém entra e aciona botão para descer, ou algum usuário chama a cabine em andar inferior, o PLC trava a porta do 2ºAndar e transfere para seq. fechando2ºAndar, desde que a porta da cabine não seja aberta, o botão "Emergência" não tenha sido pressionado, não haja excesso de peso nem alguém na linha da porta da cabine, o que é indicado pela ausência de luz na fotocélula, e nem obstáculo impedindo seu fechamento. A cabine só é fechada após permanecer um tempo mínimo com sua porta aberta após a entrada do último usuário.

se (imed botãoCabTérreo ou imed botãoCab1ºAndar ou imed chamaSobe1ºAndar ou imed chamaDesce1ºAndar ou imed chamaTérreo)

{

liga imed cabineEstáDescendo;

liga imed VentilaIlumina;

}

se (cabineEstáDescendo e não imed portaAberta2ºAndar e tempoMínAberto2ºAndar e não problemaFechaCabine)

{

desliga imed destravaPorta2ºAndar;

transfere_seqüência fechando2ºAndar;

}

rede 12 // Fim da Seqüência esperando2ºAndar

fim_seqüência;

//**************** Fim seqüência esperando2ºAndar ****************

//**************** Início seqüência fechandoTérreo ****************

rede 13 // Seq. fechandoTérreo: cabine parada no térreo e fechando sua porta

seqüência fechandoTérreo

rede 14 // Fecha porta da cabine.

se (não imed motorFechaCabine) {

liga imed motorFechaCabine;

}

fim_circuito_seqüência

rede 15 // No momento do fechamento da cabine, se alguém abrir sua porta, interromper a luz na fotocélula, acionar o botão de emergência, ou segurar sua porta ou colocar algum obstáculo impedindo o seu fechamento, o controle, por medida de segurança, transfere para a seqüência de operação "abrindo térreo".

se (imed portaAbertaTérreo ou não imed Fotocélula ou imed botãoEmergência ou imed obstáculoPorta)

{

desliga imed motorFechaCabine;

transfere_seqüência abrindoTérreo;

}

senão

{

se (imed cabineFechada)

{

desliga imed motorFechaCabine;

transfere_seqüência subindoTérreo;

}

}

rede 16 // Fim da Seqüência fechandoTérreo

fim_seqüência;

//**************** Fim seqüência fechandoTérreo ****************

//**************** Início seqüência fechando1ºAndar ****************

rede 17 // Seq. fechando1ºAndar: cabine parada no 1ºAndar e fechando sua porta

seqüência fechando1ºAndar

rede 18 // Fecha porta da cabine.

se (não imed motorFechaCabine) {

liga imed motorFechaCabine;

}

fim_circuito_seqüência

rede 19 // No momento do fechamento da cabine, se alguém abrir sua porta, interromper a luz na fotocélula, acionar o botão de emergência, ou segurar sua porta ou colocar algum obstáculo impedindo o seu fechamento, o controle, por medida de segurança, transfere para a seqüência de operação "abrindo andar tal".

se (imed portaAberta1ºAndar ou não imed Fotocélula ou imed obstáculoPorta ou imed botãoEmergência)

{

desliga imed motorFechaCabine;

transfere_seqüência abrindo1ºAndar;

}

senão

{

se (imed cabineFechada)

{

desliga imed motorFechaCabine;

se (cabineEstáSubindo)

{

transfere_seqüência subindo1ºAndar;

}

se (cabineEstáDescendo)

{

transfere_seqüência descendo1ºAndar;

}

}

}

rede 20 // Fim da Seqüência fechando1ºAndar

fim_seqüência;

//**************** Fim seqüência fechando1ºAndar ****************

//**************** Início seqüência fechando2ºAndar ****************

rede 21 // Seq. fechando2ºAndar: cabine parada no 2ºAndar e fechando sua porta

seqüência fechando2ºAndar

rede 22 // Fecha porta da cabine.

se (não imed motorFechaCabine) {

liga imed motorFechaCabine;

}

fim_circuito_seqüência

rede 23 // No momento do fechamento da cabine, se alguém abrir sua porta, interromper a luz na fotocélula, acionar o botão de emergência, ou segurar sua porta ou colocar algum obstáculo impedindo o seu fechamento, o controle, por medida de segurança, transfere para a seqüência de operação "abrindo andar tal".

se (imed portaAberta2ºAndar ou não imed Fotocélula ou imed obstáculoPorta ou imed botãoEmergência)

{

desliga imed motorFechaCabine;

transfere_seqüência abrindo2ºAndar;

}

senão

{

se (imed cabineFechada)

{

desliga imed motorFechaCabine;

transfere_seqüência descendo2ºAndar;

}

}

rede 24 // Fim da Seqüência fechando2ºAndar

fim_seqüência;

//**************** Fim seqüência fechando2ºAndar ****************

//**************** Início seqüência abrindoTérreo****************

rede 25 // Seq. abrindoTérreo: cabine parada no térreo e abrindo sua porta

seqüência abrindoTérreo

rede 26 // Aciona abertura da porta da cabine.

se (não imed motorAbreCabine) {

liga imed motorAbreCabine;

}

fim_circuito_seqüência

rede 27 // Quando a cabine estiver aberta, fica esperando chamadas ou usuários.

se (imed cabineAberta) {

desliga imed motorAbreCabine;

desliga imed cabineEstáDescendo;

desliga imed VentilaIlumina;

transfere_seqüência esperandoTérreo;

}

rede 28 // Fim da Seqüência abrindoTérreo

fim_seqüência;

//**************** Fim seqüência abrindoTérreo****************

//**************** Início seqüência abrindo1ºAndar ****************

rede 29 // Seq. abrindo1ºAndar: cabine parada no 1ºAndar e abrindo sua porta

seqüência abrindo1ºAndar

rede 30 // Aciona abertura da porta da cabine.

se (não imed motorAbreCabine) {

liga imed motorAbreCabine;

}

fim_circuito_seqüência

rede 31 // Quando a cabine estiver aberta, fica esperando chamadas ou usuários.

se (imed cabineAberta)

{

desliga imed motorAbreCabine;

transfere_seqüência esperando1ºAndar;

}

rede 32 // Fim da Seqüência abrindo1ºAndar

fim_seqüência;

//**************** Fim seqüência abrindo1ºAndar ****************

//**************** Início seqüência abrindo2ºAndar ****************

rede 33 // Seq. abrindo2ºAndar: cabine parada no 2ºAndar e abrindo sua porta

seqüência abrindo2ºAndar

rede 34 // Aciona abertura da porta da cabine.

se (não imed motorAbreCabine)

{

liga imed motorAbreCabine;

}

fim_circuito_seqüência

rede 35 // Quando a cabine estiver aberta, fica esperando chamadas ou usuários.

se (imed cabineAberta)

{

desliga imed motorAbreCabine;

desliga imed cabineEstáSubindo;

desliga imed VentilaIlumina;

transfere_seqüência esperando2ºAndar;

}

rede 36 // Fim da Seqüência abrindo2ºAndar

fim_seqüência;

//**************** Fim seqüência abrindo2ºAndar ****************

//**************** Início seqüência subindoTérreo****************

rede 37 // Seq. subindoTérreo: cabine subindo do térreo para o 1º andar.

seqüência subindoTérreo

rede 38 // Liga motor para subida da cabine.

se (não imed motorSobeCabine) {

liga imed motorSobeCabine;

}

fim_circuito_seqüência

rede 39 // Quando a cabine chega ao 1º andar, verifica se deve parar ou continuar.

se (imed cabineEstá1ºAndar e não imed botãoCab2ºAndar e não imed chama2ºAndar)

{

desliga imed cabineEstáSubindo;

desliga imed VentilaIlumina;

}

se (imed cabineEstá1ºAndar e (imed botãoCab1ºAndar ou imed chamaSobe1ºAndar

ou (imed chamaDesce1ºAndar e não imed cabineEstáSubindo) )

ou imed botãoEmergência)

{

desliga imed motorSobeCabine;

transfere_seqüência abrindo1ºAndar;

}

senão

{

se (imed cabineEstá1ºAndar)

{

transfere_seqüência subindo1ºAndar;

}

}

rede 40 // Fim da Seqüência subindoTérreo

fim_seqüência;

//**************** Fim seqüência subindoTérreo ****************

//**************** Início seqüência subindo1ºAndar ****************

rede 41 // Seq. subindo1ºAndar: cabine subindo do 1º para o 2º andar.

seqüência subindo1ºAndar

rede 42 // Liga motor para subida da cabine.

se (não imed motorSobeCabine) {

liga imed motorSobeCabine;

}

fim_circuito_seqüência

rede 43 // Quando a cabine chega no 2º andar, desliga o motor.

se (imed cabineEstá2ºAndar)

{

desliga imed motorSobeCabine;

desliga imed cabineEstáSubindo;

desliga imed VentilaIlumina;

transfere_seqüência abrindo2ºAndar;

}

rede 44 // Fim da Seqüência subindo1ºAndar

fim_seqüência;

//**************** Fim seqüência subindo1ºAndar ****************

//**************** Início seqüência descendo1ºAndar ****************

rede 45 // Seq. descendo1ºAndar: cabine descendo do 1º andar para o Térreo.

seqüência descendo1ºAndar

rede 46 // Liga motor para descida da cabine.

se (não imed motorDesceCabine) {

liga imed motorDesceCabine;

}

fim_circuito_seqüência

rede 47 // Quando a cabine chega no Térreo, desliga o motor.

se (imed cabineEstáTérreo)

{

desliga imed motorDesceCabine;

desliga imed cabineEstáDescendo;

desliga imed VentilaIlumina;

transfere_seqüência abrindoTérreo;

}

rede 48 // Fim da Seqüência descendo1ºAndar

fim_seqüência;

//**************** Fim seqüência descendo1ºAndar ****************

//**************** Início seqüência descendo2ºAndar ****************

rede 49 // Seq. descendo2ºAndar: cabine descendo do 2º andar para o 1º andar.

seqüência descendo2ºAndar

rede 50 // Liga motor para descida da cabine.

se (não imed motorDesceCabine) {

liga imed motorDesceCabine;

}

fim_circuito_seqüência

rede 51 // Quando a cabine chega no 1º andar, verifica se deve parar ou continuar.

se (imed cabineEstá1ºAndar e não imed botãoCabTérreo e não imed chamaTérreo)

{

desliga imed cabineEstáDescendo;

desliga imed VentilaIlumina;

}

se (imed cabineEstá1ºAndar e (imed botãoCab1ºAndar ou imed chamaDesce1ºAndar

ou (imed chamaSobe1ºAndar e não imed cabineEstáDescendo) )

ou imed botãoEmergência)

{

desliga imed motorDesceCabine;

transfere_seqüência abrindo1ºAndar;

}

senão

{

se (imed cabineEstá1ºAndar)

{

transfere_seqüência descendo1ºAndar;

}

}

rede 52 // Fim da Seqüência descendo2ºAndar

fim_seqüência;

//**************** Fim seqüência descendo2ºAndar ****************

fim

 


Copyright © 2002   André Luiz Barbosa   Todos os direitos reservados.
Atualizado: 09-set-2004