Comando em lote ou grupo

Bom dia, qual o melhor método para acionamentos em grupo ou em lotes de saídas?
Estou usando “POINT LINKS” para isso, alguém saberia de uma outra forma?

Vlw.

Estudando um pouco, acredito que via SCRIPTING é a melhor opção!

Isso mesmo. De forma rápida eu costumo resumir assim:

  • Use a página “Scripting” para comandos em lote e para escrever valores predefinidos em data points.
  • Use Point Links para conversões numéricas e de escala entre data points
  • Use o Data Source Meta caso precise de variáveis calculadas com base no valor de outros data points
  • Use os “scripts para servidor” da Representação Gráfica apenas para gerar elementos visuais na tela gráfica
  • E por fim, caso precise executar um “Script” periodicamente, prefira usar um gatilho com evento agendado + tratador de eventos + Scripting do que usar um Data Source Meta
1 curtida

Como sempre nos ajudando com grandes ideias.
Tenho outro desafio no mesmo assunto, no codigo abaixo irei acionar um conjunto de válvulas pneumáticas e algumas obrigatóriamente precisarão estar fechadas, em todas terão fim de curso em seus atuadores para o scadabr saber quais abriram e quais estarão fechadas, tem como enxergar os sinais dos fim de curso pelo SCRIPTING?
Se sim, centraliso a lógica em um unico lugar, sem a nescessidade de ficar criando DATA POINT META?

//DATA POINTS AC01
//VERIFICA SE TODAS VÁLVULAS ESTÃO FECHADAS
dp.writeDataPoint(“DP_294158”, 0); //FV 01 SAÍDA TANQUE
dp.writeDataPoint(“DP_268459”, 0); //FV 02 ENTRADA BOMBA 01
dp.writeDataPoint(“DP_201902”, 0); //FV 03 SAÍDA BOMBA 01
dp.writeDataPoint(“DP_000678”, 0); //FV 04 ENTRADA BOMBA 02
dp.writeDataPoint(“DP_869632”, 0); //FV 05 SAÍDA BOMBA 02
dp.writeDataPoint(“DP_948150”, 0); //FV 06 ENTRADA TANQUE/RECIRCULAÇÃO
dp.writeDataPoint(“DP_216025”, 0); //FV 07 BALANÇA DE SOLVENTES
//dp.writeDataPoint(“DP_919358”, 0); //FV 08 RESERVA
dp.writeDataPoint(“DP_146430”, 0); //P 01 BOMBA 01
dp.writeDataPoint(“DP_955221”, 0); //P 02 BOMBA 02

// Função para aguardar 5000 milissegundos (5 segundos)
function aguardar(milliseconds) {
var start = new Date().getTime();
var end = start;
while (end < start + milliseconds) {
end = new Date().getTime();
}
}

aguardar(5000); // Aguarda 5000 milissegundos antes de acionar as válvulas

//LÓGICA DE CONTROLE PARA RECIRCULAÇÃO DO TANQUE
dp.writeDataPoint(“DP_268459”, 1); //FV 02 ENTRADA BOMBA 01
dp.writeDataPoint(“DP_201902”, 1); //FV 03 SAÍDA BOMBA 01
dp.writeDataPoint(“DP_000678”, 0); //FV 04 ENTRADA BOMBA 02
dp.writeDataPoint(“DP_869632”, 0); //FV 05 SAÍDA BOMBA 02
dp.writeDataPoint(“DP_948150”, 1); //FV 06 ENTRADA TANQUE/RECIRCULAÇÃO
dp.writeDataPoint(“DP_216025”, 0); //FV 07 BALANÇA DE SOLVENTES
//dp.writeDataPoint(“DP_919358”, 0); //FV 08 RESERVA
dp.writeDataPoint(“DP_294158”, 1); //FV 01 SAÍDA TANQUE

aguardar(2000); // Aguarda 2000 milissegundos antes de ligar a bomba

dp.writeDataPoint(“DP_146430”, 1); //P 01 BOMBA 01
dp.writeDataPoint(“DP_955221”, 0); //P 02 BOMBA 02

Para ler o valor atual de um data point, não se usa na verdade a função writeDataPoint, mas sim o recurso de adicionar pontos ao contexto. Depois disso, você consegue pegar o valor atual do data point através de “nome da variável criada + .value”. Na foto fica mais claro:


Última dica: você pode escrever a sua função aguardar() de uma forma muito mais reduzida e que mantém uma boa performance:

    function aguardar(milliseconds) {
        return java.lang.Thread.sleep(milliseconds);
    }

Aviso importante: o uso de java.lang.Thread.sleep() não funciona no Scada-LTS por padrão!

1 curtida

@Celso vlw pelas dicas
Fiz o codigo com os acionamento em lote, checagem das válvulas abertas e fechadas.
Testei e funcionou bem, código ficou um pouco grande mas irei otimiza-lo

//01 01 AC01_RECIRCULAÇÃO_P 01
//BOMBA 01

//VERIFICA SE TODAS VÁLVULAS ESTÃO FECHADAS
dp.writeDataPoint("DP_294158", 0); //FV 01 SAÍDA TANQUE
dp.writeDataPoint("DP_268459", 0); //FV 02 ENTRADA BOMBA 01
dp.writeDataPoint("DP_201902", 0); //FV 03 SAÍDA BOMBA 01
dp.writeDataPoint("DP_000678", 0); //FV 04 ENTRADA BOMBA 02
dp.writeDataPoint("DP_869632", 0); //FV 05 SAÍDA BOMBA 02
dp.writeDataPoint("DP_948150", 0); //FV 06 ENTRADA TANQUE/RECIRCULAÇÃO
dp.writeDataPoint("DP_216025", 0); //FV 07 BALANÇA DE SOLVENTES
//dp.writeDataPoint("DP_919358", 0); //FV 08 RESERVA
dp.writeDataPoint("DP_146430", 0); //P 01 BOMBA 01
dp.writeDataPoint("DP_955221", 0); //P 02 BOMBA 02

// Função para aguardar em milissegundos
function aguardar(milliseconds) {
        return java.lang.Thread.sleep(milliseconds);
    }

aguardar(2000); // Aguarda 2000 milissegundos antes de acionar as válvulas


//LÓGICA DE CONTROLE PARA RECIRCULAÇÃO DO TANQUE
dp.writeDataPoint("DP_268459", 1); //FV 02 ENTRADA BOMBA 01
dp.writeDataPoint("DP_201902", 1); //FV 03 SAÍDA BOMBA 01
dp.writeDataPoint("DP_000678", 0); //FV 04 ENTRADA BOMBA 02
dp.writeDataPoint("DP_869632", 0); //FV 05 SAÍDA BOMBA 02
dp.writeDataPoint("DP_948150", 1); //FV 06 ENTRADA TANQUE/RECIRCULAÇÃO
dp.writeDataPoint("DP_216025", 0); //FV 07 BALANÇA DE SOLVENTES
//dp.writeDataPoint("DP_919358", 0); //FV 08 RESERVA
dp.writeDataPoint("DP_294158", 1); //FV 01 SAÍDA TANQUE


//AGUARDAR UM PERIODO PARA DESLOCAMENTO DAS VÁLVULAS
aguardar(2000); // Aguarda 2000 milissegundos

// FIM DE CURSOS VÁLVULAS
var PS_FV_01 = p187.value;
var PS_FV_02 = p189.value;
var PS_FV_03 = p191.value;
var PS_FV_04 = p193.value;
var PS_FV_05 = p195.value;
var PS_FV_06 = p197.value;
var PS_FV_07 = p199.value;
var PS_FV_08 = p201.value;
var CR_P01 = p206.value;
var CR_P02 = p207.value;

// LÓGICA CONDICIONAL DE CHECAGEM DE VÁLVULAS ABERTAS E FECHADAS
if (PS_FV_02 == 1 && PS_FV_03 == 1 && PS_FV_06 == 1 && PS_FV_01 == 1 &&
    PS_FV_04 == 0 && PS_FV_05 == 0 && PS_FV_07 == 0 && PS_FV_08 == 0) {

    dp.writeDataPoint("DP_268459", 1); // FV 02 ENTRADA BOMBA 01
    dp.writeDataPoint("DP_201902", 1); // FV 03 SAÍDA BOMBA 01
    dp.writeDataPoint("DP_000678", 0); // FV 04 ENTRADA BOMBA 02
    dp.writeDataPoint("DP_869632", 0); // FV 05 SAÍDA BOMBA 02
    dp.writeDataPoint("DP_948150", 1); // FV 06 ENTRADA TANQUE/RECIRCULAÇÃO
    dp.writeDataPoint("DP_216025", 0); // FV 07 BALANÇA DE SOLVENTES
    // dp.writeDataPoint("DP_919358", 0); // FV 08 RESERVA
    dp.writeDataPoint("DP_294158", 1); // FV 01 SAÍDA TANQUE
    aguardar(2000); // Aguarda 2000 milissegundos
    dp.writeDataPoint("DP_146430", 1); //P 01 BOMBA 01
    dp.writeDataPoint("DP_955221", 0); //P 02 BOMBA 02

} else {

    dp.writeDataPoint("DP_294158", 0); // FV 01 SAÍDA TANQUE
    dp.writeDataPoint("DP_268459", 0); // FV 02 ENTRADA BOMBA 01
    dp.writeDataPoint("DP_201902", 0); // FV 03 SAÍDA BOMBA 01
    dp.writeDataPoint("DP_000678", 0); // FV 04 ENTRADA BOMBA 02
    dp.writeDataPoint("DP_869632", 0); // FV 05 SAÍDA BOMBA 02
    dp.writeDataPoint("DP_948150", 0); // FV 06 ENTRADA TANQUE/RECIRCULAÇÃO
    dp.writeDataPoint("DP_216025", 0); // FV 07 BALANÇA DE SOLVENTES
    // dp.writeDataPoint("DP_919358", 0); // FV 08 RESERVA
    dp.writeDataPoint("DP_146430", 0); // P 01 BOMBA 01
    dp.writeDataPoint("DP_955221", 0); // P 02 BOMBA 02
}



Vlw pelas dicas, Deus abençoe :pray:

1 curtida

Boa noite, compartilhando com voces um projeto simples para aperfeiçoamento de programação!

É um projeto para aprendizado e aperfeiçoamento em sistemas de automação.
Segue imagens, deu um trabalho mas ficou como o esperado.
A idéia foi tentar criar toda a lógica no SCRIPTING para concentrar num unico lugare tentar reduzir ao máximo a criação de DATAPOINT META.

Captura de tela 2024-07-29 001542

Captura de tela 2024-07-29 001529

Captura de tela 2024-07-29 001509

// NESTE CÓDIGO CONTÉM ESCRITA EM DATAPOINTS; LEITURA DE DATASOURCE; TEMPO DE ESPERA E LOOP DE REPETIÇÃO.

//01 01 AC01_BALANÇA_SOLVENTES_P 01
//SISTEMA 01

// VÁLVULAS PNEUMÁTICAS
var FV01 = p186.value;
var FV02 = p188.value;
var FV03 = p190.value;
var FV04 = p192.value;
var FV05 = p194.value;
var FV06 = p196.value;
var FV07 = p198.value;
var FV08 = p200.value;
var P01 = p205.value;
var P02 = p208.value;

// FIM DE CURSOS VÁLVULAS
var PS_FV_01 = p187.value;  // Estado da válvula 01
var PS_FV_02 = p189.value;  // Estado da válvula 02
var PS_FV_03 = p191.value;  // Estado da válvula 03
var PS_FV_04 = p193.value;  // Estado da válvula 04
var PS_FV_05 = p195.value;  // Estado da válvula 05
var PS_FV_06 = p197.value;  // Estado da válvula 06
var PS_FV_07 = p199.value;  // Estado da válvula 07
var PS_FV_08 = p201.value;  // Estado da válvula 08
var CR_P01 = p206.value;  // Contator bomba 01
var CR_P02 = p207.value;  // Contator bomba 02

// Leitura das variáveis BOMBA e SAÍDA
var BOMBA = p213.value;
var SAÍDA = p212.value;

// Variáveis para estados das válvulas e bombas
var MANUTENÇÃO = -1;
var OFF = 0;
var ON = 1;

// FUNÇÃO PARA AGUARDAR UM PERÍODO
function aguardar(milliseconds) {
    return java.lang.Thread.sleep(milliseconds);
}

// LÓGICA 01
if (SAÍDA == 1 && BOMBA == 1) {
    // LÓGICA DE CONTROLE PARA RECIRCULAÇÃO DO TANQUE
    dp.writeDataPoint("DP_294158", ON); // FV 01 SAÍDA TANQUE
    dp.writeDataPoint("DP_268459", ON); // FV 02 ENTRADA BOMBA 01
    dp.writeDataPoint("DP_201902", ON); // FV 03 SAÍDA BOMBA 01
    dp.writeDataPoint("DP_000678", OFF); // FV 04 ENTRADA BOMBA 02
    dp.writeDataPoint("DP_869632", OFF); // FV 05 SAÍDA BOMBA 02
    dp.writeDataPoint("DP_948150", ON); // FV 06 ENTRADA TANQUE/RECIRCULAÇÃO
    dp.writeDataPoint("DP_216025", OFF); // FV 07 BALANÇA DE SOLVENTES
    dp.writeDataPoint("DP_919358", OFF); // FV 08 RESERVA

    // AGUARDAR UM PERÍODO PARA DESLOCAMENTO DAS VÁLVULAS
    aguardar(10000); // Aguarda 10000 milissegundos

    // VERIFICA NOVAMENTE A CONDIÇÃO DAS VÁLVULAS APÓS O TEMPO DE ESPERA
    while (true) {
        PS_FV_01 = p187.value;
        PS_FV_02 = p189.value;
        PS_FV_03 = p191.value;
        PS_FV_04 = p193.value;
        PS_FV_05 = p195.value;
        PS_FV_06 = p197.value;
        PS_FV_07 = p199.value;
        PS_FV_08 = p201.value;
        SAÍDA = p212.value;
        BOMBA = p213.value;

        // LÓGICA DE CONFIRMAÇÃO CONDICIONAL DAS VÁLVULAS
        if (PS_FV_01 == ON && PS_FV_02 == ON && PS_FV_03 == ON && PS_FV_04 == OFF &&
            PS_FV_05 == OFF && PS_FV_06 == ON && PS_FV_07 == OFF && PS_FV_08 == OFF && 
            SAÍDA == 1 && BOMBA == 1) {
            
            // AGUARDA UM TEMPO ANTES DE LIGAR A BOMBA
            aguardar(3000);
            dp.writeDataPoint("DP_146430", ON); // P 01 BOMBA 01
            dp.writeDataPoint("DP_955221", OFF); // P 02 BOMBA 02

        } else {

            // SE A CONDIÇÃO FOR FALSA DESLIGARÁ TODAS AS VÁLVULAS
            dp.writeDataPoint("DP_294158", OFF); // FV 01 SAÍDA TANQUE
            dp.writeDataPoint("DP_268459", OFF); // FV 02 ENTRADA BOMBA 01
            dp.writeDataPoint("DP_201902", OFF); // FV 03 SAÍDA BOMBA 01
            dp.writeDataPoint("DP_000678", OFF); // FV 04 ENTRADA BOMBA 02
            dp.writeDataPoint("DP_869632", OFF); // FV 05 SAÍDA BOMBA 02
            dp.writeDataPoint("DP_948150", OFF); // FV 06 ENTRADA TANQUE/RECIRCULAÇÃO
            dp.writeDataPoint("DP_216025", OFF); // FV 07 BALANÇA DE SOLVENTES
            dp.writeDataPoint("DP_146430", OFF); // P 01 BOMBA 01
            dp.writeDataPoint("DP_955221", OFF); // P 02 BOMBA 02
            // AGUARDA UM TEMPO ANTES DE VERIFICAR NOVAMENTE
            aguardar(2000);
            break; // Sai do loop
        }
    }
}

// LÓGICA 02
if (SAÍDA == 1 && BOMBA == 2) {
    // LÓGICA PARA CONDIÇÃO DE BOMBA LIGADA E SAÍDA DESLIGADA
    dp.writeDataPoint("DP_294158", ON); // FV 01 SAÍDA TANQUE
    dp.writeDataPoint("DP_268459", OFF); // FV 02 ENTRADA BOMBA 01
    dp.writeDataPoint("DP_201902", OFF); // FV 03 SAÍDA BOMBA 01
    dp.writeDataPoint("DP_000678", ON); // FV 04 ENTRADA BOMBA 02
    dp.writeDataPoint("DP_869632", ON); // FV 05 SAÍDA BOMBA 02
    dp.writeDataPoint("DP_948150", ON); // FV 06 ENTRADA TANQUE/RECIRCULAÇÃO
    dp.writeDataPoint("DP_216025", OFF); // FV 07 BALANÇA DE SOLVENTES
    dp.writeDataPoint("DP_919358", OFF); // FV 08 RESERVA

    // AGUARDAR UM PERÍODO PARA DESLOCAMENTO DAS VÁLVULAS
    aguardar(10000); // Aguarda 10 SEGUNDOS

    // VERIFICA NOVAMENTE A CONDIÇÃO DAS VÁLVULAS APÓS O TEMPO DE ESPERA
    while (true) {
        PS_FV_01 = p187.value;
        PS_FV_02 = p189.value;
        PS_FV_03 = p191.value;
        PS_FV_04 = p193.value;
        PS_FV_05 = p195.value;
        PS_FV_06 = p197.value;
        PS_FV_07 = p199.value;
        PS_FV_08 = p201.value;
        SAÍDA = p212.value;
        BOMBA = p213.value;

        // LÓGICA DE CONFIRMAÇÃO CONDICIONAL DAS VÁLVULAS
        if (PS_FV_01 == ON && PS_FV_02 == OFF && PS_FV_03 == OFF && PS_FV_04 == ON &&
            PS_FV_05 == ON && PS_FV_06 == ON && PS_FV_07 == OFF && PS_FV_08 == OFF && 
            SAÍDA == 1 && BOMBA == 2) {
            
            // AGUARDA UM TEMPO ANTES DE LIGAR A BOMBA
            aguardar(2000);
            dp.writeDataPoint("DP_146430", OFF); // P 01 BOMBA 01
            dp.writeDataPoint("DP_955221", ON); // P 02 BOMBA 02

        } else {

            // SE A CONDIÇÃO FOR FALSA DESLIGARÁ TODAS AS VÁLVULAS
            dp.writeDataPoint("DP_294158", OFF); // FV 01 SAÍDA TANQUE
            dp.writeDataPoint("DP_268459", OFF); // FV 02 ENTRADA BOMBA 01
            dp.writeDataPoint("DP_201902", OFF); // FV 03 SAÍDA BOMBA 01
            dp.writeDataPoint("DP_000678", OFF); // FV 04 ENTRADA BOMBA 02
            dp.writeDataPoint("DP_869632", OFF); // FV 05 SAÍDA BOMBA 02
            dp.writeDataPoint("DP_948150", OFF); // FV 06 ENTRADA TANQUE/RECIRCULAÇÃO
            dp.writeDataPoint("DP_216025", OFF); // FV 07 BALANÇA DE SOLVENTES
            dp.writeDataPoint("DP_146430", OFF); // P 01 BOMBA 01
            dp.writeDataPoint("DP_955221", OFF); // P 02 BOMBA 02
            // AGUARDA UM TEMPO ANTES DE VERIFICAR NOVAMENTE
            aguardar(2000);
            break; // Sai do loop
        }
    }
}

// LÓGICA 03
if (SAÍDA == 2 && BOMBA == 1) {
    // LÓGICA PARA CONDIÇÃO DE BOMBA DESLIGADA E SAÍDA LIGADA
    dp.writeDataPoint("DP_294158", ON); // FV 01 SAÍDA TANQUE
    dp.writeDataPoint("DP_268459", ON); // FV 02 ENTRADA BOMBA 01
    dp.writeDataPoint("DP_201902", ON); // FV 03 SAÍDA BOMBA 01
    dp.writeDataPoint("DP_000678", OFF); // FV 04 ENTRADA BOMBA 02
    dp.writeDataPoint("DP_869632", OFF); // FV 05 SAÍDA BOMBA 02
    dp.writeDataPoint("DP_948150", OFF); // FV 06 ENTRADA TANQUE/RECIRCULAÇÃO
    dp.writeDataPoint("DP_216025", ON); // FV 07 BALANÇA DE SOLVENTES
    dp.writeDataPoint("DP_919358", OFF); // FV 08 RESERVA

    // AGUARDAR UM PERÍODO PARA DESLOCAMENTO DAS VÁLVULAS
    aguardar(10000); // Aguarda 10 SEGUNDOS

    // VERIFICA NOVAMENTE A CONDIÇÃO DAS VÁLVULAS APÓS O TEMPO DE ESPERA
    while (true) {
        PS_FV_01 = p187.value;
        PS_FV_02 = p189.value;
        PS_FV_03 = p191.value;
        PS_FV_04 = p193.value;
        PS_FV_05 = p195.value;
        PS_FV_06 = p197.value;
        PS_FV_07 = p199.value;
        PS_FV_08 = p201.value;
        SAÍDA = p212.value;
        BOMBA = p213.value;

        // LÓGICA DE CONFIRMAÇÃO CONDICIONAL DAS VÁLVULAS
        if (PS_FV_01 == ON && PS_FV_02 == ON && PS_FV_03 == ON && PS_FV_04 == OFF &&
            PS_FV_05 == OFF && PS_FV_06 == OFF && PS_FV_07 == ON && PS_FV_08 == OFF && 
            SAÍDA == 2 && BOMBA == 1) {
            
            // AGUARDA UM TEMPO ANTES DE DESLIGAR A BOMBA
            aguardar(2000);
            dp.writeDataPoint("DP_146430", ON); // P 01 BOMBA 01
            dp.writeDataPoint("DP_955221", OFF); // P 02 BOMBA 02
        } else {
            // SE A CONDIÇÃO FOR FALSA DESLIGARÁ TODAS AS VÁLVULAS
            dp.writeDataPoint("DP_294158", OFF); // FV 01 SAÍDA TANQUE
            dp.writeDataPoint("DP_268459", OFF); // FV 02 ENTRADA BOMBA 01
            dp.writeDataPoint("DP_201902", OFF); // FV 03 SAÍDA BOMBA 01
            dp.writeDataPoint("DP_000678", OFF); // FV 04 ENTRADA BOMBA 02
            dp.writeDataPoint("DP_869632", OFF); // FV 05 SAÍDA BOMBA 02
            dp.writeDataPoint("DP_948150", OFF); // FV 06 ENTRADA TANQUE/RECIRCULAÇÃO
            dp.writeDataPoint("DP_216025", OFF); // FV 07 BALANÇA DE SOLVENTES
            dp.writeDataPoint("DP_146430", OFF); // P 01 BOMBA 01
            dp.writeDataPoint("DP_955221", OFF); // P 02 BOMBA 02
            // AGUARDA UM TEMPO ANTES DE VERIFICAR NOVAMENTE
            aguardar(2000);
            break; // Sai do loop
        }
    }
}

// LÓGICA 04
if (SAÍDA == 2 && BOMBA == 2) {
    // LÓGICA PARA CONDIÇÃO DE BOMBA DESLIGADA E SAÍDA DESLIGADA
    dp.writeDataPoint("DP_294158", ON); // FV 01 SAÍDA TANQUE
    dp.writeDataPoint("DP_268459", OFF); // FV 02 ENTRADA BOMBA 01
    dp.writeDataPoint("DP_201902", OFF); // FV 03 SAÍDA BOMBA 01
    dp.writeDataPoint("DP_000678", ON); // FV 04 ENTRADA BOMBA 02
    dp.writeDataPoint("DP_869632", ON); // FV 05 SAÍDA BOMBA 02
    dp.writeDataPoint("DP_948150", OFF); // FV 06 ENTRADA TANQUE/RECIRCULAÇÃO
    dp.writeDataPoint("DP_216025", ON); // FV 07 BALANÇA DE SOLVENTES
    dp.writeDataPoint("DP_919358", OFF); // FV 08 RESERVA

    // AGUARDAR UM PERÍODO PARA DESLOCAMENTO DAS VÁLVULAS
    aguardar(10000); // Aguarda 10 SEGUNDOS

    // VERIFICA NOVAMENTE A CONDIÇÃO DAS VÁLVULAS APÓS O TEMPO DE ESPERA
    while (true) {
        PS_FV_01 = p187.value;
        PS_FV_02 = p189.value;
        PS_FV_03 = p191.value;
        PS_FV_04 = p193.value;
        PS_FV_05 = p195.value;
        PS_FV_06 = p197.value;
        PS_FV_07 = p199.value;
        PS_FV_08 = p201.value;
        SAÍDA = p212.value;
        BOMBA = p213.value;

        // LÓGICA DE CONFIRMAÇÃO CONDICIONAL DAS VÁLVULAS
        if (PS_FV_01 == ON && PS_FV_02 == OFF && PS_FV_03 == OFF && PS_FV_04 == ON &&
            PS_FV_05 == ON && PS_FV_06 == OFF && PS_FV_07 == ON && PS_FV_08 == OFF && 
            SAÍDA == 2 && BOMBA == 2) {
            
            // AGUARDA UM TEMPO ANTES DE DESLIGAR A BOMBA
            aguardar(2000);
            dp.writeDataPoint("DP_146430", OFF); // P 01 BOMBA 01
            dp.writeDataPoint("DP_955221", ON); // P 02 BOMBA 02
        } else {
            // SE A CONDIÇÃO FOR FALSA DESLIGARÁ TODAS AS VÁLVULAS
            dp.writeDataPoint("DP_294158", OFF); // FV 01 SAÍDA TANQUE
            dp.writeDataPoint("DP_268459", OFF); // FV 02 ENTRADA BOMBA 01
            dp.writeDataPoint("DP_201902", OFF); // FV 03 SAÍDA BOMBA 01
            dp.writeDataPoint("DP_000678", OFF); // FV 04 ENTRADA BOMBA 02
            dp.writeDataPoint("DP_869632", OFF); // FV 05 SAÍDA BOMBA 02
            dp.writeDataPoint("DP_948150", OFF); // FV 06 ENTRADA TANQUE/RECIRCULAÇÃO
            dp.writeDataPoint("DP_216025", OFF); // FV 07 BALANÇA DE SOLVENTES
            dp.writeDataPoint("DP_146430", OFF); // P 01 BOMBA 01
            dp.writeDataPoint("DP_955221", OFF); // P 02 BOMBA 02
            // AGUARDA UM TEMPO ANTES DE VERIFICAR NOVAMENTE
            aguardar(2000);
            break; // Sai do loop
        }
    }
}

vlw.

1 curtida