Programa-Exemplo em LCE de Controle de um Sistema de 4 Bombas em um Sumidouro de Esgotos

Top 



No programa de controle abaixo, quatro bombas de sucção são ligadas de forma escalonada e em rodízio para esvaziamento de um sumidouro de esgotos.



clp
Bombas_Sumidouro // Controla 4 bombas de um sumidouro de esgotos, ligadas de forma escalonada, de acordo com o nível atingido pelo material no sumidouro, e em rodízio, para depreciação equilibrada das mesmas por uso em intensidade similar. Permite detecção de problemas de funcionamento ou falhas de partida nas bombas, com conseqüente ajuste automático no escalonamento de ligação das mesmas.

// Obs.: nas variáveis abaixo, os cardinais 1, 2, 3 e 4 referem-se às bombas fisicamente, mas os ordinais 1ª, 2ª, 3ª e 4ª referem-se às bombas na ordem em que serão ligadas, que muda de acordo com o ciclo em que o sistema estiver operando (para implementação do rodízio), indicado pelo valor presente na variável Ciclo:


// Ciclo = 1: B1 - 1ª, B2 - 2ª, B3 - 3ª, B4 - 4ª

// Ciclo = 2: B2 - 1ª, B3 - 2ª, B4 - 3ª, B1 - 4ª

// Ciclo = 3: B3 - 1ª, B4 - 2ª, B1 - 3ª, B2 - 4ª

// Ciclo = 4: B4 - 1ª, B1 - 2ª, B2 - 3ª, B3 - 4ª


// Cada vez que o sumidouro é esvaziado, a variável Ciclo altera-se: 1, 2, 3, 4, 1, 2, 3, ...


// Após a compilação, verifique o funcionamento virtual acionando o menu: Plantas Virtuais -> Tanques de Líquidos Simulados -> Liga SimuPLC


var
   I0.0   Desliga_Bombas,
   
I0.1
   Zera_Relógios,
   
I0.2
   Reseta_Falhas,

   
AIW0
Nível_Esgoto,
   
I0.3
    Bóia_NívelMáximo,
   
I0.4
    Bóia_NívelMínimo,

   
Q0.1
   Bomba1,
   
Q0.2
   Bomba2,
   
Q0.3
   Bomba3,
   
Q0.4
   Bomba4,

   
I5.1
   FinalPartida_B1,
   
I5.2
   FinalPartida_B2,
   
I5.3
   FinalPartida_B3,
   
I5.4
   FinalPartida_B4,

   
M0.1
   Bomba1ª_FinalPartida,
   
M0.2
   Bomba2ª_FinalPartida,
   
M0.3
   Bomba3ª_FinalPartida,
   
M0.4
   Bomba4ª_FinalPartida,

   
I1.1
   Sem_Falha1_B1,
   
I2.1
   Sem_Falha2_B1,
   
I3.1
   Sem_Falha3_B1,
   
I4.1
   Sem_Falha4_B1,

   
I1.2
   Sem_Falha1_B2,
   
I2.2
   Sem_Falha2_B2,
   
I3.2
   Sem_Falha3_B2,
   
I4.2
   Sem_Falha4_B2,

   
I1.3
   Sem_Falha1_B3,
   
I2.3
   Sem_Falha2_B3,
   
I3.3
   Sem_Falha3_B3,
   
I4.3
   Sem_Falha4_B3,

   
I1.4
   Sem_Falha1_B4,
   
I2.4
   Sem_Falha2_B4,
   
I3.4
   Sem_Falha3_B4,
   
I4.4
   Sem_Falha4_B4,

   
T0
   TempoFunc_B1,
   
T1
   TempoFunc_B2,
   
T2
   TempoFunc_B3,
   
T3
   TempoFunc_B4,

   
AQW1
TempoFunc_B1_min,
   
AQW2
TempoFunc_B2_min,
   
AQW3
TempoFunc_B3_min,
   
AQW4
TempoFunc_B4_min,

   
Q1.1
   B1_Falha,
   
Q1.2
   B2_Falha,
   
Q1.3
   B3_Falha,
   
Q1.4
   B4_Falha,

   
M1.1
   Falha_B1ª,
   
M1.2
   Falha_B2ª,
   
M1.3
   Falha_B3ª,
   
M1.4
   Falha_B4ª,

   
VB0
   Ciclo,
   
C0
   Qtde_Resets_Tempo,

   
I7.0
   Simula_Sumid,
   
I7.1
   Simula_FalhaB1,
   
I7.2
   Simula_FalhaB2,
   
I7.3
   Simula_FalhaB3,
   
I7.4
   Simula_FalhaB4;

rede
1 // Lógica de desligamento das bombas, se sumidouro está vazio ou se acionada chave de desligamento geral, e controle do ciclo de funcionamento em rodízio.

se
(Nível_Esgoto <= 6400 ou imediato Desliga_Bombas)
{
desliga
imediato Bomba1;
desliga
imediato Bomba2;
desliga
imediato Bomba3;
desliga
imediato Bomba4;

desliga
Bomba1ª_FinalPartida;
desliga
Bomba2ª_FinalPartida;
desliga
Bomba3ª_FinalPartida;
desliga
Bomba4ª_FinalPartida;

incrementa
B Ciclo;    // Faz com que Ciclo varie de 1 a 4 alternadamente, para ligação em
Ciclo
B-:= (Ciclo B/ 4) B* 4; // rodízio de cada uma das bombas, evitando que os seus tempos de              // funcionamento fiquem muito diferentes ao longo do tempo.
}

se
(Ciclo = 0) { // Se ciclo não foi inicializado, força-o ao ciclo de nº 1
Ciclo
B:= 1;
}

rede
2 // Lógica de ligação escalonada das bombas. Reparem que quando uma bomba é ligada, a mesma só é desligada quando do esvaziamento completo do sumidouro.

se
( não imediato Desliga_Bombas e
(
Nível_Esgoto
> 19200 ou (Nível_Esgoto > 6400 e Falha_B2ª e Falha_B3ª e Falha_B4ª)) )
{
se
(não Falha_B1ª) {
se
(Ciclo = 1) {
liga
imediato Bomba1;
}
se
(Ciclo = 2) {
liga
imediato Bomba2;
}
se
(Ciclo = 3) {
liga
imediato Bomba3;
}
se
(Ciclo = 4) {
liga
imediato Bomba4;
}
}
}

se
(não imediato Desliga_Bombas e
( (
Nível_Esgoto
> 32000 e Bomba1ª_FinalPartida)
ou
(Nível_Esgoto > 19200 e Falha_B1ª)
ou
(Nível_Esgoto > 6400 e Falha_B1ª e Falha_B3ª e Falha_B4ª) ) )
{
se
(não Falha_B2ª) {
se
(Ciclo = 1) {
liga
imediato Bomba2;
}
se
(Ciclo = 2) {
liga
imediato Bomba3;
}
se
(Ciclo = 3) {
liga
imediato Bomba4;
}
se
(Ciclo = 4) {
liga
imediato Bomba1;
}
}
}

se
(não imediato Desliga_Bombas e
( (
Nível_Esgoto
> 44800 e Bomba2ª_FinalPartida)
ou
(Nível_Esgoto > 19200 e Falha_B1ª e Falha_B2ª)
ou
(Nível_Esgoto > 32000 e (Falha_B1ª ou Falha_B2ª))
ou
(Nível_Esgoto > 6400 e Falha_B1ª e Falha_B2ª e Falha_B4ª) ) )
{
se
(não Falha_B3ª) {
se
(Ciclo = 1) {
liga
imediato Bomba3;
}
se
(Ciclo = 2) {
liga
imediato Bomba4;
}
se
(Ciclo = 3) {
liga
imediato Bomba1;
}
se
(Ciclo = 4) {
liga
imediato Bomba2;
}
}
}

se
(não imediato Desliga_Bombas e
( (
Nível_Esgoto
> 51200 e Bomba3ª_FinalPartida)
ou
(Nível_Esgoto > 19200 e Falha_B1ª e Falha_B2ª e Falha_B3ª)
ou
(Nível_Esgoto > 32000
e
( (Falha_B1ª e Falha_B2ª)
ou
(Falha_B1ª e Falha_B3ª)
ou
(Falha_B2ª e Falha_B3ª) ) )
ou
(Nível_Esgoto > 44800 e (Falha_B1ª ou Falha_B2ª ou Falha_B3ª))
ou
(Nível_Esgoto > 6400 e Falha_B1ª e Falha_B2ª e Falha_B3ª) ) )
{
se
(não Falha_B4ª) {
se
(Ciclo = 1) {
liga
imediato Bomba4;
}
se
(Ciclo = 2) {
liga
imediato Bomba1;
}
se
(Ciclo = 3) {
liga
imediato Bomba2;
}
se
(Ciclo = 4) {
liga
imediato Bomba3;
}
}
}

rede
3 // Detecta acionamento da bóia de segurança, quando de falha no sensor de nível.

se
( Bóia_NívelMáximo ) {
Nível_Esgoto
:= 64000;
}

se
( Bóia_NívelMínimo ) {
Nível_Esgoto
:= 6400;
}

rede
4 // Detecta falhas em quaisquer das quatro bombas.

se
( não Sem_Falha1_B1 ou não Sem_Falha2_B1 ou não Sem_Falha3_B1 ou não Sem_Falha4_B1 ) {
desliga
imediato Bomba1;
liga
imediato B1_Falha;

se
(Ciclo = 1) {
liga
Falha_B1ª;
}
se
(Ciclo = 2) {
liga
Falha_B2ª;
}
se
(Ciclo = 3) {
liga
Falha_B3ª;
}
se
(Ciclo = 4) {
liga
Falha_B4ª;
}
}

se
(não Sem_Falha1_B2 ou não Sem_Falha2_B2 ou não Sem_Falha3_B2 ou não Sem_Falha4_B2 ) {
desliga
imediato Bomba2;
liga
imediato B2_Falha;

se
(Ciclo = 1) {
liga
Falha_B4ª;
}
se
(Ciclo = 2) {
liga
Falha_B1ª;
}
se
(Ciclo = 3) {
liga
Falha_B2ª;
}
se
(Ciclo = 4) {
liga
Falha_B3ª;
}
}

se
(não Sem_Falha1_B3 ou não Sem_Falha2_B3 ou não Sem_Falha3_B3 ou não Sem_Falha4_B3 ) {
desliga
imediato Bomba3;
liga
imediato B3_Falha;

se
(Ciclo = 1) {
liga
Falha_B3ª;
}
se
(Ciclo = 2) {
liga
Falha_B4ª;
}
se
(Ciclo = 3) {
liga
Falha_B1ª;
}
se
(Ciclo = 4) {
liga
Falha_B2ª;
}
}

se
( não imediato Sem_Falha1_B4 ou não imediato Sem_Falha2_B4 ou não imediato Sem_Falha3_B4 ou não imediato Sem_Falha4_B4 ) {
desliga
imediato Bomba4;
liga
imediato B4_Falha;

se
(Ciclo = 1) {
liga
Falha_B2ª;
}
se
(Ciclo = 2) {
liga
Falha_B3ª;
}
se
(Ciclo = 3) {
liga
Falha_B4ª;
}
se
(Ciclo = 4) {
liga
Falha_B1ª;
}
}

rede
5 // Reseta as falhas depois das manutenções corretivas.

se
(Reseta_Falhas) {
desliga
Falha_B1ª;
desliga
Falha_B2ª;
desliga
Falha_B3ª;
desliga
Falha_B4ª;

desliga
B1_Falha;
desliga
B2_Falha;
desliga
B3_Falha;
desliga
B4_Falha;
}

rede
6 // Marca tempo de funcionamento das bombas (550 horas é aproximadamente o tempo máximo que pode ser acumulado nos nossos temporizadores; quando alguma bomba o atinge, todos os tempos são zerados e inicia-se nova temporização).

quando
(imediato Bomba1) temporiza_acumula TempoFunc_B1 550 h;
quando
(imediato Bomba2) temporiza_acumula TempoFunc_B2 550 h;
quando
(imediato Bomba3) temporiza_acumula TempoFunc_B3 550 h;
quando
(imediato Bomba4) temporiza_acumula TempoFunc_B4 550 h;

se
(não imediato Desliga_Bombas) {
// Converte tempos de funcionamento das bombas, de milissegundos para ...

// ... minutos, e os mostra para fins de controle operacional:


TempoFunc_B1_min
:= TempoFunc_B1 / 60000;
TempoFunc_B2_min
:= TempoFunc_B2 / 60000;
TempoFunc_B3_min
:= TempoFunc_B3 / 60000;
TempoFunc_B4_min
:= TempoFunc_B4 / 60000;
}

rede
7 // Reseta todos os tempos de funcionamento das bombas ao mesmo tempo, quando acionado comando de zera relógios ou excedido temporização máxima de qualquer bomba (máximo permitido pelo equipamento CLP utilizado; no nosso simulador, 550 h)

se
(TempoFunc_B1 ou TempoFunc_B2 ou TempoFunc_B3 ou TempoFunc_B4 ou Zera_Relógios) {
reset
TempoFunc_B1;
reset
TempoFunc_B2;
reset
TempoFunc_B3;
reset
TempoFunc_B4;
}

conta
(TempoFunc_B1 ou TempoFunc_B2 ou TempoFunc_B3 ou TempoFunc_B4) reset_quando (Zera_Relógios) em Qtde_Resets_Tempo referência 32000;

rede
8 // Detecta fim de partida das bombas

se
(imediato FinalPartida_B1) {
se
(Ciclo = 1) {
liga
Bomba1ª_FinalPartida;
}
se
(Ciclo = 2) {
liga
Bomba2ª_FinalPartida;
}
se
(Ciclo = 3) {
liga
Bomba3ª_FinalPartida;
}
se
(Ciclo = 4) {
liga
Bomba4ª_FinalPartida;
}
}

se
(imediato FinalPartida_B2) {
se
(Ciclo = 1) {
liga
Bomba2ª_FinalPartida;
}
se
(Ciclo = 2) {
liga
Bomba1ª_FinalPartida;
}
se
(Ciclo = 3) {
liga
Bomba4ª_FinalPartida;
}
se
(Ciclo = 4) {
liga
Bomba3ª_FinalPartida;
}
}

se
(imediato FinalPartida_B3) {
se
(Ciclo = 1) {
liga
Bomba3ª_FinalPartida;
}
se
(Ciclo = 2) {
liga
Bomba2ª_FinalPartida;
}
se
(Ciclo = 3) {
liga
Bomba1ª_FinalPartida;
}
se
(Ciclo = 4) {
liga
Bomba4ª_FinalPartida;
}
}

se
(imediato FinalPartida_B4) {
se
(Ciclo = 1) {
liga
Bomba4ª_FinalPartida;
}
se
(Ciclo = 2) {
liga
Bomba3ª_FinalPartida;
}
se
(Ciclo = 3) {
liga
Bomba2ª_FinalPartida;
}
se
(Ciclo = 4) {
liga
Bomba1ª_FinalPartida;
}
}

fim




Como resultado da compilação do programa
Bombas_Sumidouro acima, o SimuPLC 4.1.0 gerou, exatamente, o seguinte código, em Lista de Instruções - IL:



// CLP    Bombas_Sumidouro
// Controla 4 bombas de um sumidouro de esgotos, ligadas de forma escalonada, de acordo com o nível atingido pelo material no sumidouro, e em rodízio, para depreciação equilibrada das mesmas por uso em intensidade similar. Permite detecção de problemas de funcionamento ou falhas de partida nas bombas, com conseqüente ajuste automático no escalonamento de ligação das mesmas.
// Obs.: nas variáveis abaixo, os cardinais 1, 2, 3 e 4 referem-se às bombas fisicamente, mas os ordinais 1ª, 2ª, 3ª e 4ª referem-se às bombas na ordem em que serão ligadas, que muda de acordo com o ciclo em que o sistema estiver operando (para implementação do rodízio), indicado pelo valor presente na variável Ciclo:
// Ciclo = 1: B1 - 1ª, B2 - 2ª, B3 - 3ª, B4 - 4ª
// Ciclo = 2: B2 - 1ª, B3 - 2ª, B4 - 3ª, B1 - 4ª
// Ciclo = 3: B3 - 1ª, B4 - 2ª, B1 - 3ª, B2 - 4ª
// Ciclo = 4: B4 - 1ª, B1 - 2ª, B2 - 3ª, B3 - 4ª
// Cada vez que o sumidouro é esvaziado, a variável Ciclo altera-se: 1, 2, 3, 4, 1, 2, 3, ...
// Após a compilação, verifique o funcionamento virtual acionando o menu: Plantas Virtuais -> Tanques de Líquidos Simulados -> Liga SimuPLC

//
=VAR   I0.0   Desliga_Bombas
//
=VAR   I0.1   Zera_Relógios
//
=VAR   I0.2   Reseta_Falhas
//
=VAR   AIW0   Nível_Esgoto
//
=VAR   I0.3   Bóia_NívelMáximo
//
=VAR   I0.4   Bóia_NívelMínimo
//
=VAR   Q0.1   Bomba1
//
=VAR   Q0.2   Bomba2
//
=VAR   Q0.3   Bomba3
//
=VAR   Q0.4   Bomba4
//
=VAR   I5.1   FinalPartida_B1
//
=VAR   I5.2   FinalPartida_B2
//
=VAR   I5.3   FinalPartida_B3
//
=VAR   I5.4   FinalPartida_B4
//
=VAR   M0.1   Bomba1ª_FinalPartida
//
=VAR   M0.2   Bomba2ª_FinalPartida
//
=VAR   M0.3   Bomba3ª_FinalPartida
//
=VAR   M0.4   Bomba4ª_FinalPartida
//
=VAR   I1.1   Sem_Falha1_B1
//
=VAR   I2.1   Sem_Falha2_B1
//
=VAR   I3.1   Sem_Falha3_B1
//
=VAR   I4.1   Sem_Falha4_B1
//
=VAR   I1.2   Sem_Falha1_B2
//
=VAR   I2.2   Sem_Falha2_B2
//
=VAR   I3.2   Sem_Falha3_B2
//
=VAR   I4.2   Sem_Falha4_B2
//
=VAR   I1.3   Sem_Falha1_B3
//
=VAR   I2.3   Sem_Falha2_B3
//
=VAR   I3.3   Sem_Falha3_B3
//
=VAR   I4.3   Sem_Falha4_B3
//
=VAR   I1.4   Sem_Falha1_B4
//
=VAR   I2.4   Sem_Falha2_B4
//
=VAR   I3.4   Sem_Falha3_B4
//
=VAR   I4.4   Sem_Falha4_B4
//
=VAR   T0   TempoFunc_B1
//
=VAR   T1   TempoFunc_B2
//
=VAR   T2   TempoFunc_B3
//
=VAR   T3   TempoFunc_B4
//
=VAR   AQW1   TempoFunc_B1_min
//
=VAR   AQW2   TempoFunc_B2_min
//
=VAR   AQW3   TempoFunc_B3_min
//
=VAR   AQW4   TempoFunc_B4_min
//
=VAR   Q1.1   B1_Falha
//
=VAR   Q1.2   B2_Falha
//
=VAR   Q1.3   B3_Falha
//
=VAR   Q1.4   B4_Falha
//
=VAR   M1.1   Falha_B1ª
//
=VAR   M1.2   Falha_B2ª
//
=VAR   M1.3   Falha_B3ª
//
=VAR   M1.4   Falha_B4ª
//
=VAR   VB0   Ciclo
//
=VAR   C0   Qtde_Resets_Tempo
//
=VAR   I7.0   Simula_Sumid
//
=VAR   I7.1   Simula_FalhaB1
//
=VAR   I7.2   Simula_FalhaB2
//
=VAR   I7.3   Simula_FalhaB3
//
=VAR   I7.4   Simula_FalhaB4

NETWORK    1 // Lógica de desligamento das bombas, se sumidouro está vazio ou se acionada chave de desligamento geral, e controle do ciclo de funcionamento em rodízio.

LDD<=   AIW0,   6400
OI   I0.0
RI    Q0.1,   1
RI    Q0.2,   1
RI    Q0.3,   1
RI    Q0.4,   1
R   M0.1,   1
R   M0.2,   1
R   M0.3,   1
R   M0.4,   1
INCB   VB0
// Faz com que Ciclo varie de 1 a 4 alternadamente, para ligação em
MOVB   VB0,   Ve1
/
I   4,   Ve1
*
I   4,   Ve1
-I   Ve1,   VB0
// rodízio de cada uma das bombas, evitando que os seus tempos de              // funcionamento fiquem muito diferentes ao longo do tempo.

LDD=   VB0,   0
// Se ciclo não foi inicializado, força-o ao ciclo de nº 1
MOVB    1,   VB0

NETWORK    2 // Lógica de ligação escalonada das bombas. Reparem que quando uma bomba é ligada, a mesma só é desligada quando do esvaziamento completo do sumidouro.

LDNI    I0.0

LDD>   AIW0,   19200

LDD>   AIW0,   6400
A    M1.2
A    M1.3
A    M1.4
OLD
ALD

LDN   M1.1
ALD
LPS

LDD=   VB0,   1
ALD
SI    Q0.1,   1
LRD

LDD=   VB0,   2
ALD
SI    Q0.2,   1
LRD

LDD=   VB0,   3
ALD
SI    Q0.3,   1
LPP

LDD=   VB0,   4
ALD
SI    Q0.4,   1

LDNI    I0.0

LDD>   AIW0,   32000
A    M0.1

LDD>   AIW0,   19200
A    M1.1
OLD

LDD>   AIW0,   6400
A    M1.1
A    M1.3
A    M1.4
OLD
ALD

LDN   M1.2
ALD
LPS

LDD=   VB0,   1
ALD
SI    Q0.2,   1
LRD

LDD=   VB0,   2
ALD
SI    Q0.3,   1
LRD

LDD=   VB0,   3
ALD
SI    Q0.4,   1
LPP

LDD=   VB0,   4
ALD
SI    Q0.1,   1

LDNI    I0.0

LDD>   AIW0,   44800
A    M0.2

LDD>   AIW0,   19200
A    M1.1
A    M1.2
OLD

LDD>   AIW0,   32000

LD   M1.1
O    M1.2
ALD
OLD

LDD>   AIW0,   6400
A    M1.1
A    M1.2
A    M1.4
OLD
ALD

LDN   M1.3
ALD
LPS

LDD=   VB0,   1
ALD
SI    Q0.3,   1
LRD

LDD=   VB0,   2
ALD
SI    Q0.4,   1
LRD

LDD=   VB0,   3
ALD
SI    Q0.1,   1
LPP

LDD=   VB0,   4
ALD
SI    Q0.2,   1

LDNI    I0.0

LDD>   AIW0,   51200
A    M0.3

LDD>   AIW0,   19200
A    M1.1
A    M1.2
A    M1.3
OLD

LDD>   AIW0,   32000

LD   M1.1
A    M1.2

LD   M1.1
A    M1.3
OLD

LD   M1.2
A    M1.3
OLD
ALD
OLD

LDD>   AIW0,   44800

LD   M1.1
O    M1.2
O    M1.3
ALD
OLD

LDD>   AIW0,   6400
A    M1.1
A    M1.2
A    M1.3
OLD
ALD

LDN   M1.4
ALD
LPS

LDD=   VB0,   1
ALD
SI    Q0.4,   1
LRD

LDD=   VB0,   2
ALD
SI    Q0.1,   1
LRD

LDD=   VB0,   3
ALD
SI    Q0.2,   1
LPP

LDD=   VB0,   4
ALD
SI    Q0.3,   1

NETWORK    3 // Detecta acionamento da bóia de segurança, quando de falha no sensor de nível.

LD   I0.3
MOVD   64000,   AIW0

LD   I0.4
MOVD   6400,   AIW0

NETWORK    4 // Detecta falhas em quaisquer das quatro bombas.

LDN   I1.1
ON   I2.1
ON   I3.1
ON   I4.1
RI    Q0.1,   1
SI    Q1.1,   1
LPS

LDD=   VB0,   1
ALD
S   M1.1,   1
LRD

LDD=   VB0,   2
ALD
S   M1.2,   1
LRD

LDD=   VB0,   3
ALD
S   M1.3,   1
LPP

LDD=   VB0,   4
ALD
S   M1.4,   1

LDN   I1.2
ON   I2.2
ON   I3.2
ON   I4.2
RI    Q0.2,   1
SI    Q1.2,   1
LPS

LDD=   VB0,   1
ALD
S   M1.4,   1
LRD

LDD=   VB0,   2
ALD
S   M1.1,   1
LRD

LDD=   VB0,   3
ALD
S   M1.2,   1
LPP

LDD=   VB0,   4
ALD
S   M1.3,   1

LDN   I1.3
ON   I2.3
ON   I3.3
ON   I4.3
RI    Q0.3,   1
SI    Q1.3,   1
LPS

LDD=   VB0,   1
ALD
S   M1.3,   1
LRD

LDD=   VB0,   2
ALD
S   M1.4,   1
LRD

LDD=   VB0,   3
ALD
S   M1.1,   1
LPP

LDD=   VB0,   4
ALD
S   M1.2,   1

LDNI    I1.4
ONI    I2.4
ONI    I3.4
ONI    I4.4
RI    Q0.4,   1
SI    Q1.4,   1
LPS

LDD=   VB0,   1
ALD
S   M1.2,   1
LRD

LDD=   VB0,   2
ALD
S   M1.3,   1
LRD

LDD=   VB0,   3
ALD
S   M1.4,   1
LPP

LDD=   VB0,   4
ALD
S   M1.1,   1

NETWORK    5 // Reseta as falhas depois das manutenções corretivas.

LD   I0.2
R   M1.1,   1
R   M1.2,   1
R   M1.3,   1
R   M1.4,   1
R   Q1.1,   1
R   Q1.2,   1
R   Q1.3,   1
R   Q1.4,   1

NETWORK    6 // Marca tempo de funcionamento das bombas (550 horas é aproximadamente o tempo máximo que pode ser acumulado nos nossos temporizadores; quando alguma bomba o atinge, todos os tempos são zerados e inicia-se nova temporização).

LDI   Q0.1
TONR   T0,   1980000000

LDI   Q0.2
TONR   T1,   1980000000

LDI   Q0.3
TONR   T2,   1980000000

LDI   Q0.4
TONR   T3,   1980000000

LDNI    I0.0
// Converte tempos de funcionamento das bombas, de milissegundos para ...
// ... minutos, e os mostra para fins de controle operacional:
MOVD   T0,   Ve1
/
D   60000,   Ve1
MOVD   Ve1,   AQW1
MOVD   T1,   Ve1
/
D   60000,   Ve1
MOVD   Ve1,   AQW2
MOVD   T2,   Ve1
/
D   60000,   Ve1
MOVD   Ve1,   AQW3
MOVD   T3,   Ve1
/
D   60000,   Ve1
MOVD   Ve1,   AQW4

NETWORK    7 // Reseta todos os tempos de funcionamento das bombas ao mesmo tempo, quando acionado comando de zera relógios ou excedido temporização máxima de qualquer bomba (máximo permitido pelo equipamento CLP utilizado; no nosso simulador, 550 h)

LD   T0
O    T1
O    T2
O    T3
O    I0.1
R   T0,   1
R   T1,   1
R   T2,   1
R   T3,   1

LD   T0
O    T1
O    T2
O    T3

LD   I0.1
CTU   C0,   32000

NETWORK    8 // Detecta fim de partida das bombas

LDI   I5.1
LPS

LDD=   VB0,   1
ALD
S   M0.1,   1
LRD

LDD=   VB0,   2
ALD
S   M0.2,   1
LRD

LDD=   VB0,   3
ALD
S   M0.3,   1
LPP

LDD=   VB0,   4
ALD
S   M0.4,   1

LDI   I5.2
LPS

LDD=   VB0,   1
ALD
S   M0.2,   1
LRD

LDD=   VB0,   2
ALD
S   M0.1,   1
LRD

LDD=   VB0,   3
ALD
S   M0.4,   1
LPP

LDD=   VB0,   4
ALD
S   M0.3,   1

LDI   I5.3
LPS

LDD=   VB0,   1
ALD
S   M0.3,   1
LRD

LDD=   VB0,   2
ALD
S   M0.2,   1
LRD

LDD=   VB0,   3
ALD
S   M0.1,   1
LPP

LDD=   VB0,   4
ALD
S   M0.4,   1

LDI   I5.4
LPS

LDD=   VB0,   1
ALD
S   M0.4,   1
LRD

LDD=   VB0,   2
ALD
S   M0.3,   1
LRD

LDD=   VB0,   3
ALD
S   M0.2,   1
LPP

LDD=   VB0,   4
ALD
S   M0.1,   1