Programa-Exemplo em LCE de Controle de um Semáforo

Top 



No programa de controle abaixo, dois conjuntos de lâmpadas, cada qual em um semáforo de dois tempos, são acesas alternadamente de acordo com a seqüência de ativação padrão, com possibilidade de alterarem-se os tempos em que cada seqüência torna-se ativa, por meio das variáveis AIW0, AIW1 e AIW2; e também desativar o semáforo, por meio do ponto de entrada I0.0, quando então as luzes amarelas ficarão piscando.



clp Semáforo // Controle de semáforo com dois conjuntos de luzes sinalizadoras (cruzamento simples) e sinalização de desativado: piscando amarelas

var
Q0.0   Vermelha1,      // Luz vermelha do primeiro conjunto ...
   
Q0.1   Amarela1,
   
Q0.2   Verde1,
   
Q1.0   Vermelha2,
   
Q1.1   Amarela2,
   
Q1.2   Verde2,

   
AIW0   TmpVerde1,      // Tempo em que a luz verde fica acesa no conjunto 1
   
AIW1   TmpAmarela1,
   
AIW2   TmpVermelha1,

   
T0   DeuTmpVerde,   // Var. de tempo que indica que tempo da luz verde foi alcançado
   
T1   DeuTmpAmarela1,
   
T2   DeuTmpAmarela2,
   
T3   DeuTmpVermelha,

   
T4   TmpLig,   // Tempo em que as luzes amarelas ficam acesas quando semáforo inativo
   
T5   TmpDeslig,   // ... idem apagadas
   
I0.0 PiscaAmarelas;   // Indica semáforo inativo, com as luzes amarelas piscando

rede
0 // Inicia o controle na seqüência Verd1Verm2 e configura temporização padrão se tempos de operação não fornecidos nas variáveis AIW0, AIW1 e AIW2

se (não VarAux){
aciona Inicio; // Gera um pulso em Inicio quando do início da operação (1º ciclo)
ou (VarAux){
aciona VarAux;
}
}

se (Inicio){
liga Verd1Verm2; // Ativa a seqüência inicial quando do início da operação
}

se (TmpVerde1 <= 0) { // Se tempo não fornecido ...
TmpVerde1 := 10; // ... recebe valor padrão
}

se (TmpAmarela1 <= 0) {
TmpAmarela1 := 3; // Idem
}

se (TmpVermelha1 <= 0) {
TmpVermelha1 := 10; // Idem
}

//**************************************************

rede
1 // Na seqüência Verd1Verm2 abaixo acendem-se as luzes Verde1 e Vermelha2
seqüência Verd1Verm2

rede
2 // Controle das ligações e desligamentos e temporização
se ( não imediato Verde1 ou não imediato Vermelha2 ) {
liga imediato Verde1;
liga imediato Vermelha2;
desliga imediato Vermelha1;
desliga imediato Amarela1;
desliga imediato Amarela2;
desliga imediato Verde2;
reset DeuTmpVerde;
}

quando ( Verde1 ) temporiza    DeuTmpVerde    TmpVerde1 s;

fim_circuito_seqüência

rede
3 // Transfere execução para a próxima seqüência
se (imediato PiscaAmarelas) {
desliga imediato Verde1;
desliga imediato Vermelha2;
liga imediato Amarela1;
liga imediato Amarela2;
transfere_seqüência Amar1Amar2;
}

se ( DeuTmpVerde e não imediato PiscaAmarelas) { transfere_seqüência Amar1Verm2;}

rede
4 // Fim da seqüência Verd1Verm2
fim_seqüência;

//**************************************************

rede
5 // Na seqüência Amar1Verm2 acendem-se as luzes Amarela1 e Vermelha2
seqüência Amar1Verm2

rede
6 // Controle das ligações e desligamentos e temporização
se ( não imediato Amarela1 ou não imediato Vermelha2 ) {
liga imediato Amarela1;
liga imediato Vermelha2;
desliga imediato Vermelha1;
desliga imediato Amarela2;
desliga imediato Verde1;
desliga imediato Verde2;
reset DeuTmpAmarela1;
}

quando ( Amarela1 ) temporiza    DeuTmpAmarela1    TmpAmarela1 s;

fim_circuito_seqüência

rede
7 // Transfere execução para a próxima seqüência
se (imediato PiscaAmarelas) {
desliga imediato Vermelha2;
liga imediato Amarela2;
transfere_seqüência Amar1Amar2;
}

se ( DeuTmpAmarela1 e não imediato PiscaAmarelas ) { transfere_seqüência Verm1Verd2; }

rede
8 // Fim da seqüência Amar1Verm2
fim_seqüência;

//**************************************************

rede
9 // Na seqüência Verm1Verd2 acendem-se as luzes Vermelha1 e Verde2
seqüência Verm1Verd2

rede
10 // // Controle das ligações e desligamentos e temporização
se ( não imediato Vermelha1 ou não imediato Verde2 ) {
liga imediato Vermelha1;
liga imediato Verde2;
desliga imediato Amarela1;
desliga imediato Amarela2;
desliga imediato Verde1;
desliga imediato Vermelha2;
reset DeuTmpVermelha;
}

quando ( Vermelha1 ) temporiza DeuTmpVermelha TmpVermelha1 s;

fim_circuito_seqüência

rede
11 // Transfere execução para a próxima seqüência
se (imediato PiscaAmarelas) {
desliga imediato Verde2;
desliga imediato Vermelha1;
liga imediato Amarela1;
liga imediato Amarela2;
transfere_seqüência Amar1Amar2;
}

se ( DeuTmpVermelha e não imediato PiscaAmarelas ) { transfere_seqüência Verm1Amar2; }

rede
12 // Fim da seqüência Amar1Verm2
fim_seqüência;

//**************************************************

rede
13 // Na seqüência Verm1Amar2 acendem-se as luzes Vermelha1 e Amarela2
seqüência Verm1Amar2

rede
14 // // Controle das ligações e desligamentos e temporização
se ( não imediato Amarela2 ou não imediato Vermelha1 ) {
liga imediato Vermelha1;
liga imediato Amarela2;
desliga imediato Amarela1;
desliga imediato Verde1;
desliga imediato Verde2;
desliga imediato Vermelha2;
reset DeuTmpAmarela2;
}

quando ( Amarela2 ) temporiza    DeuTmpAmarela2    TmpAmarela1 s;

fim_circuito_seqüência

rede
15 // Transfere execução para a próxima seqüência
se (imediato PiscaAmarelas) {
desliga imediato Vermelha1;
liga imediato Amarela1;
transfere_seqüência Amar1Amar2;
}

se ( DeuTmpAmarela2 e não imediato PiscaAmarelas ) { transfere_seqüência Verd1Verm2; }

rede
16 // Fim da seqüência Verm1Amar2
fim_seqüência;

//**************************************************

rede
17 // Desativa semáforo e pisca amarelas, indicando a desativação
destino Desativa:

//**************************************************

rede
18 // Na seqüência Amar1Amar2 as luzes amarelas piscando nos dois conjuntos indicam semáforo desativado
seqüência Amar1Amar2

rede
19 // // Controle das ligações e desligamentos e temporização
se (PiscaAmarelas){
desliga imediato Verde1;
desliga imediato Verde2;
desliga imediato Vermelha1;
desliga imediato Vermelha2;
}

quando ( não imediato Amarela1 ) temporiza    TmpDeslig    500 ms;

se ( TmpDeslig ) {
liga imediato Amarela1;
liga imediato Amarela2;
}

quando ( imediato Amarela1 ) temporiza    TmpLig    500 ms;

se ( TmpLig ) {
desliga imediato Amarela1;
desliga imediato Amarela2;
}

fim_circuito_seqüência

rede
20 // Transfere execução para a próxima seqüência
se (não imediato PiscaAmarelas ) {
desliga imediato Amarela1;
desliga imediato Amarela2;
transfere_seqüência Verd1Verm2;
}

rede
21 // Fim da seqüência Amar1Amar2
fim_seqüência;

fim




Como resultado da compilação do programa Semáforo acima, o SimuPLC 4.1.0 gerou, exatamente, o seguinte código, emLista de Instruções - IL :



// CLP    Semáforo
// Controle de semáforo com dois conjuntos de luzes sinalizadoras (cruzamento simples) e sinalização de desativado: piscando amarelas

//
=VAR
   Q0.0   Vermelha1
//
=VAR
   Q0.1   Amarela1
//
=VAR
   Q0.2   Verde1
//
=VAR
   Q1.0   Vermelha2
//
=VAR
   Q1.1   Amarela2
//
=VAR
   Q1.2   Verde2
//
=VAR
   AIW0   TmpVerde1
//
=VAR
   AIW1   TmpAmarela1
//
=VAR
   AIW2   TmpVermelha1
//
=VAR
   T0   DeuTmpVerde
//
=VAR
   T1   DeuTmpAmarela1
//
=VAR
   T2   DeuTmpAmarela2
//
=VAR
   T3   DeuTmpVermelha
//
=VAR
   T4   TmpLig
//
=VAR
   T5   TmpDeslig
//
=VAR
   I0.0   PiscaAmarelas
// Indica semáforo inativo, com as luzes amarelas piscando

NETWORK
   0 // Inicia o controle na seqüência Verd1Verm2 e configura temporização padrão se tempos de operação não fornecidos nas variáveis AIW0, AIW1 e AIW2

LDN
   VarAux
=
   Inicio
// Gera um punho em Inicio quando do início da operação (1º ciclo)
O
   VarAux
=
   VarAux

LD
   Inicio
S
   Verd1Verm2,   1
// Ativa a seqüência inicial quando do início da operação

LDD<=
   AIW0,   0
// Se tempo não fornecido ...
MOVD
   10,   AIW0
// ... recebe valor padrão

LDD<=
   AIW1,   0
MOVD
   3,   AIW1
// Idem

LDD<=
   AIW2,   0
MOVD
   10,   AIW2
// Idem
//**************************************************

NETWORK
   1 // Na seqüência Verd1Verm2 abaixo acendem-se as luzes Verde1 e Vermelha2

LSCR
   Verd1Verm2

NETWORK
   2 // Controle das ligações e desligamentos e temporização

LDNI
   Q0.2
ONI
   Q1.0
SI
   Q0.2,   1
SI
   Q1.0,   1
RI
   Q0.0,   1
RI
   Q0.1,   1
RI
   Q1.1,   1
RI
   Q1.2,   1
R
   T0,   1

LD
   Q0.2
*
D
   1000,   AIW0
TON
   T0,   AIW0

NETWORK
   3 // Transfere execução para a próxima seqüência

LDI
   I0.0
RI
   Q0.2,   1
RI
   Q1.0,   1
SI
   Q0.1,   1
SI
   Q1.1,   1

SCRT
   Amar1Amar2

LD
   T0
ANI
   I0.0

SCRT
   Amar1Verm2

NETWORK
   4 // Fim da seqüência Verd1Verm2

SCRE

//**************************************************

NETWORK
   5 // Na seqüência Amar1Verm2 acendem-se as luzes Amarela1 e Vermelha2

LSCR
   Amar1Verm2

NETWORK
   6 // Controle das ligações e desligamentos e temporização

LDNI
   Q0.1
ONI
   Q1.0
SI
   Q0.1,   1
SI
   Q1.0,   1
RI
   Q0.0,   1
RI
   Q1.1,   1
RI
   Q0.2,   1
RI
   Q1.2,   1
R
   T1,   1

LD
   Q0.1
*
D
   1000,   AIW1
TON
   T1,   AIW1

NETWORK
   7 // Transfere execução para a próxima seqüência

LDI
   I0.0
RI
   Q1.0,   1
SI
   Q1.1,   1

SCRT
   Amar1Amar2

LD
   T1
ANI
   I0.0

SCRT
   Verm1Verd2

NETWORK
   8 // Fim da seqüência Amar1Verm2

SCRE

//**************************************************

NETWORK
   9 // Na seqüência Verm1Verd2 acendem-se as luzes Vermelha1 e Verde2

LSCR
   Verm1Verd2

NETWORK
   10 // // Controle das ligações e desligamentos e temporização

LDNI
   Q0.0
ONI
   Q1.2
SI
   Q0.0,   1
SI
   Q1.2,   1
RI
   Q0.1,   1
RI
   Q1.1,   1
RI
   Q0.2,   1
RI
   Q1.0,   1
R
   T3,   1

LD
   Q0.0
*
D
   1000,   AIW2
TON
   T3,   AIW2

NETWORK
   11 // Transfere execução para a próxima seqüência

LDI
   I0.0
RI
   Q1.2,   1
RI
   Q0.0,   1
SI
   Q0.1,   1
SI
   Q1.1,   1

SCRT
   Amar1Amar2

LD
   T3
ANI
   I0.0

SCRT
   Verm1Amar2

NETWORK
   12 // Fim da seqüência Amar1Verm2

SCRE

//**************************************************

NETWORK
   13 // Na seqüência Verm1Amar2 acendem-se as luzes Vermelha1 e Amarela2

LSCR
   Verm1Amar2

NETWORK
   14 // // Controle das ligações e desligamentos e temporização

LDNI
   Q1.1
ONI
   Q0.0
SI
   Q0.0,   1
SI
   Q1.1,   1
RI
   Q0.1,   1
RI
   Q0.2,   1
RI
   Q1.2,   1
RI
   Q1.0,   1
R
   T2,   1

LD
   Q1.1
*
D
   1000,   AIW1
TON
   T2,   AIW1

NETWORK
   15 // Transfere execução para a próxima seqüência

LDI
   I0.0
RI
   Q0.0,   1
SI
   Q0.1,   1

SCRT
   Amar1Amar2

LD
   T2
ANI
   I0.0

SCRT
   Verd1Verm2

NETWORK
   16 // Fim da seqüência Verm1Amar2

SCRE

//**************************************************

NETWORK
   17 // Desativa semáforo e pisca amarelas, indicando a desativação

LBL
   Desativa
//**************************************************

NETWORK
   18 // Na seqüência Amar1Amar2 as luzes amarelas piscando nos dois conjuntos indicam semáforo desativado

LSCR
   Amar1Amar2

NETWORK
   19 // // Controle das ligações e desligamentos e temporização

LD
   I0.0
RI
   Q0.2,   1
RI
   Q1.2,   1
RI
   Q0.0,   1
RI
   Q1.0,   1

LDNI
   Q0.1
TON
   T5,   500

LD
   T5
SI
   Q0.1,   1
SI
   Q1.1,   1

LDI
   Q0.1
TON
   T4,   500

LD
   T4
RI
   Q0.1,   1
RI
   Q1.1,   1

NETWORK
   20 // Transfere execução para a próxima seqüência

LDNI
   I0.0
RI
   Q0.1,   1
RI
   Q1.1,   1

SCRT
   Verd1Verm2

NETWORK
   21 // Fim da seqüência Amar1Amar2

SCRE