Modelosensorvirtual: Difference between revisions

From QuatenusWiki
Created page with "{{QuatenusHeader}} == MODELO SENSORES VIRTUAIS EXEMPLO == Sensores Virtuais são uma forma de poder converter uma leitura analógica de uma sonda combustivel em que o valor é em Volts e é convertido em Litros e em percentagem de depósito. Modelo de sensor virtual: '''SENSORESVIREXEMPLOS''' Permite até de '''um''' a '''quatro''' sensores em simultâneo. === Exemplos === Sendo que é um GV300 com 2 sondas devem trabalhar sobre os <code>DATAVALUE3</code> e <code>DA..."
 
No edit summary
 
(10 intermediate revisions by the same user not shown)
Line 1: Line 1:
{{QuatenusHeader}}
{{QuatenusHeader}}
== MODELO SENSORES VIRTUAIS EXEMPLO ==


== MODELO SENSORES VIRTUAIS EXEMPLO ==
Sensores Virtuais são uma forma de poder converter uma leitura analógica de uma sonda combustivel em que o valor é em Volts e é convertido em Litros e em percentagem de depósito.
Sensores Virtuais são uma forma de poder converter uma leitura analógica de uma sonda combustivel em que o valor é em Volts e é convertido em Litros e em percentagem de depósito.


Line 10: Line 9:


=== Exemplos ===
=== Exemplos ===
Sendo que é um GV300 com 2 sondas devem trabalhar sobre os <code>DATAVALUE3</code> e <code>DATAVALUE4</code>.
Sendo que é um GV300 com 2 sondas devem trabalhar sobre os <code>DATAVALUE3</code> e <code>DATAVALUE4</code>.


Line 15: Line 15:


==== Activação do sensor e da respectiva coluna no sistema ====
==== Activação do sensor e da respectiva coluna no sistema ====
<syntaxhighlight lang="csharp"> // VOLTAGEM 3 - DataValue3 bool enable3 = true; </syntaxhighlight>


Se alterarem o <code>true</code> para <code>false</code> este sensor deixará de ser contabilizado para as contas dos litros. E se estiver a <code>false</code> e for colocado <code>true</code> passa a ser contabilizado para as contas dos litros.
<syntaxhighlight lang="csharp">
// VOLTAGEM 3 - DataValue3
bool enable3 = true;
</syntaxhighlight>
 
Se alterarem o <code>true</code> para <code>false</code> este sensor deixará de ser contabilizado para as contas dos litros.
E se estiver a <code>false</code> e for colocado <code>true</code> passa a ser contabilizado para as contas dos litros.


==== Variáveis a configurar ====
==== Variáveis a configurar ====
{| class="wikitable"
{| class="wikitable"
!Variável
! Variável !! Descrição
!Descrição
|-
|-
|<code>outputMax3</code>
| <code>outputMax3</code> || Litros - Preencher com capacidade do tanque 1
|Litros - Preencher com capacidade do tanque 1
|-
|-
|<code>outputMax4</code>
| <code>outputMax4</code> || Litros - Preencher com capacidade do tanque 2
|Litros - Preencher com capacidade do tanque 2
|-
|-
|<code>inputMin3</code>
| <code>inputMin3</code> || Volts - Valor mínimo que a sonda irá enviar para o tanque 1 vazio
|Volts - Valor mínimo que a sonda irá enviar para o tanque 1 vazio
|-
|-
|<code>inputMin4</code>
| <code>inputMin4</code> || Volts - Valor mínimo que a sonda irá enviar para o tanque 2 vazio
|Volts - Valor mínimo que a sonda irá enviar para o tanque 2 vazio
|-
|-
|<code>inputMax3</code>
| <code>inputMax3</code> || Volts - Valor máximo em volts que a sonda irá enviar para o tanque 1 cheio
|Volts - Valor máximo em volts que a sonda irá enviar para o tanque 1 cheio
|-
|-
|<code>inputMax4</code>
| <code>inputMax4</code> || Volts - Valor máximo em volts que a sonda irá enviar para o tanque 2 cheio
|Volts - Valor máximo em volts que a sonda irá enviar para o tanque 2 cheio
|}
|}


=== Código ===
=== Código ===
Exemplo de código em C# para ser copiado e colado, ou num novo sensor diretamente ou para usar num novo modelo de sensor virtual.
Exemplo de código em C# para ser copiado e colado, ou num novo sensor diretamente ou para usar num novo modelo de sensor virtual.


<syntaxhighlight lang="csharp"> // VOLTAGEM 1 - DataValue1 bool enable1 = false; decimal inputMin1 = 1m; //Volts - Valor mínimo que a sonda irá enviar decimal inputMax1 = 100.0m; //Volts - Valor máximo em volts que a sonda irá enviar
<syntaxhighlight lang="csharp">
 
// VOLTAGEM 1 - DataValue1
decimal outputMin1 = 0.0m; //Litros - Nivel do tanque com voltagem no minimo decimal outputMax1 = 100.0m; //Litros - Nivel do tanque com voltagem no máximo
bool enable1 = false;
 
decimal inputMin1 = 1m; //Volts - Valor mínimo que a sonda irá enviar
// VOLTAGEM 2 - DataValue2 bool enable2 = false; decimal inputMin2 = 1m; //Volts - Valor mínimo que a sonda irá enviar para o tanque vazio decimal inputMax2 = 100.0m; //Volts - Valor máximo em volts que a sonda irá enviar para o tanque cheio
decimal inputMax1 = 100.0m; //Volts - Valor máximo em volts que a sonda irá enviar
 
decimal outputMin1 = 0.0m; //Litros - Nivel do tanque com voltagem no minimo
decimal outputMin2 = 0.0m; //Litros - Capacidade minima tanque decimal outputMax2 = 100.0m; //Litros - Preencher com capacidade do tanque
decimal outputMax1 = 100.0m; //Litros - Nivel do tanque com voltagem no máximo
 
// VOLTAGEM 2 - DataValue2
// VOLTAGEM 3 - DataValue3 bool enable3 = true; decimal inputMin3 = 1m; //Volts - Valor mínimo que a sonda irá enviar para o tanque vazio decimal inputMax3 = 9.0m; //Volts - Valor máximo em volts que a sonda irá enviar para o tanque cheio
bool enable2 = false;
 
decimal inputMin2 = 1m; //Volts - Valor mínimo que a sonda irá enviar para o tanque vazio
decimal outputMin3 = 0.0m; //Litros - Capacidade minima tanque decimal outputMax3 = 505.0m; //Litros - Preencher com capacidade do tanque
decimal inputMax2 = 100.0m; //Volts - Valor máximo em volts que a sonda irá enviar para o tanque cheio
 
decimal outputMin2 = 0.0m; //Litros - Capacidade minima tanque
// VOLTAGEM 4 - DataValue4 bool enable4 = true; decimal inputMin4 = 1m; //Volts - Valor mínimo que a sonda irá enviar para o tanque vazio decimal inputMax4 = 9.0m; //Volts - Valor máximo em volts que a sonda irá enviar para o tanque cheio
decimal outputMax2 = 100.0m; //Litros - Preencher com capacidade do tanque
 
// VOLTAGEM 3 - DataValue3
decimal outputMin4 = 0.0m; //Litros - Capacidade minima tanque decimal outputMax4 = 350.0m; //Litros - Preencher com capacidade do tanque
bool enable3 = true;
 
decimal inputMin3 = 1m; //Volts - Valor mínimo que a sonda irá enviar para o tanque vazio
//NÃO MEXER DAQUI PARA BAIXO //NÃO MEXER DAQUI PARA BAIXO //NÃO MEXER DAQUI PARA BAIXO
decimal inputMax3 = 9.0m; //Volts - Valor máximo em volts que a sonda irá enviar para o tanque cheio
 
decimal outputMin3 = 0.0m; //Litros - Capacidade minima tanque
decimal? outputLevel = null; decimal? maxOutputLevel = null;
decimal outputMax3 = 505.0m; //Litros - Preencher com capacidade do tanque
 
// VOLTAGEM 4 - DataValue4
if(enable1) {
bool enable4 = true;
decimal inputMin4 = 1m; //Volts - Valor mínimo que a sonda irá enviar para o tanque vazio
decimal inputMax4 = 9.0m; //Volts - Valor máximo em volts que a sonda irá enviar para o tanque cheio
decimal outputMin4 = 0.0m; //Litros - Capacidade minima tanque
decimal outputMax4 = 350.0m; //Litros - Preencher com capacidade do tanque
//NÃO MEXER DAQUI PARA BAIXO
//NÃO MEXER DAQUI PARA BAIXO
//NÃO MEXER DAQUI PARA BAIXO
decimal? outputLevel = null;
decimal? maxOutputLevel = null;
if(enable1)
{
     if(InputRecord.DataValue1 != null)
     if(InputRecord.DataValue1 != null)
     {
     {
         decimal tempOutputValue;
         decimal tempOutputValue;
         if(InputRecord.DataValue1 <= inputMin1)
         if(InputRecord.DataValue1 <= inputMin1)
         {
         {
Line 85: Line 95:
                                 * (outputMax1 - outputMin1)
                                 * (outputMax1 - outputMin1)
                                 / (inputMax1 - inputMin1);
                                 / (inputMax1 - inputMin1);
             tempOutputValue = System.Math.Abs(tempOutputValue);
             tempOutputValue = System.Math.Abs(tempOutputValue);
         }
         }
         if(outputLevel == null)
         if(outputLevel == null)
         {
         {
Line 98: Line 106:
         }
         }
     }
     }
     decimal max = System.Math.Max(outputMin1, outputMax1);
     decimal max = System.Math.Max(outputMin1, outputMax1);
     if(maxOutputLevel == null)
     if(maxOutputLevel == null)
     {
     {
Line 110: Line 116:
     }
     }
}
}
 
if(enable2)
if(enable2) {
{
     if(InputRecord.DataValue2 != null)
     if(InputRecord.DataValue2 != null)
     {
     {
         decimal tempOutputValue;
         decimal tempOutputValue;
         if(InputRecord.DataValue2 <= inputMin2)
         if(InputRecord.DataValue2 <= inputMin2)
         {
         {
Line 130: Line 135:
                                 * (outputMax2 - outputMin2)
                                 * (outputMax2 - outputMin2)
                                 / (inputMax2 - inputMin2);
                                 / (inputMax2 - inputMin2);
             tempOutputValue = System.Math.Abs(tempOutputValue);
             tempOutputValue = System.Math.Abs(tempOutputValue);
         }
         }
         if(outputLevel == null)
         if(outputLevel == null)
         {
         {
Line 143: Line 146:
         }
         }
     }
     }
     decimal max = System.Math.Max(outputMin2, outputMax2);
     decimal max = System.Math.Max(outputMin2, outputMax2);
     if(maxOutputLevel == null)
     if(maxOutputLevel == null)
     {
     {
Line 155: Line 156:
     }
     }
}
}
 
if(enable3)
if(enable3) {
{
     if(InputRecord.DataValue3 != null)
     if(InputRecord.DataValue3 != null)
     {
     {
         decimal tempOutputValue;
         decimal tempOutputValue;
         if(InputRecord.DataValue3 <= inputMin3)
         if(InputRecord.DataValue3 <= inputMin3)
         {
         {
Line 175: Line 175:
                                 * (outputMax3 - outputMin3)
                                 * (outputMax3 - outputMin3)
                                 / (inputMax3 - inputMin3);
                                 / (inputMax3 - inputMin3);
             tempOutputValue = System.Math.Abs(tempOutputValue);
             tempOutputValue = System.Math.Abs(tempOutputValue);
         }
         }
         if(outputLevel == null)
         if(outputLevel == null)
         {
         {
Line 188: Line 186:
         }
         }
     }
     }
     decimal max = System.Math.Max(outputMin3, outputMax3);
     decimal max = System.Math.Max(outputMin3, outputMax3);
     if(maxOutputLevel == null)
     if(maxOutputLevel == null)
     {
     {
Line 200: Line 196:
     }
     }
}
}
 
if(enable4)
if(enable4) {
{
     if(InputRecord.DataValue4 != null)
     if(InputRecord.DataValue4 != null)
     {
     {
         decimal tempOutputValue;
         decimal tempOutputValue;
         if(InputRecord.DataValue4 <= inputMin4)
         if(InputRecord.DataValue4 <= inputMin4)
         {
         {
Line 220: Line 215:
                                 * (outputMax4 - outputMin4)
                                 * (outputMax4 - outputMin4)
                                 / (inputMax4 - inputMin4);
                                 / (inputMax4 - inputMin4);
             tempOutputValue = System.Math.Abs(tempOutputValue);
             tempOutputValue = System.Math.Abs(tempOutputValue);
         }
         }
         if(outputLevel == null)
         if(outputLevel == null)
         {
         {
Line 233: Line 226:
         }
         }
     }
     }
     decimal max = System.Math.Max(outputMin4, outputMax4);
     decimal max = System.Math.Max(outputMin4, outputMax4);
     if(maxOutputLevel == null)
     if(maxOutputLevel == null)
     {
     {
Line 245: Line 236:
     }
     }
}
}
 
if(outputLevel != null)
if(outputLevel != null) {
{
     OutputRecord.FMSFuelLevel = outputLevel;
     OutputRecord.FMSFuelLevel = outputLevel;
     OutputRecord.FMSFuelLevelPercentage = (outputLevel / maxOutputLevel) * 100m;
     OutputRecord.FMSFuelLevelPercentage = (outputLevel / maxOutputLevel) * 100m;
     OutputValue = OutputRecord.FMSFuelLevel;
     OutputValue = OutputRecord.FMSFuelLevel;
     // OutputValue = OutputRecord.FMSFuelLevelPercentage;
     // OutputValue = OutputRecord.FMSFuelLevelPercentage;
} </syntaxhighlight>
}
</syntaxhighlight>


{{QuatenusFooter}}
{{QuatenusFooter}}

Latest revision as of 09:16, 2 April 2026

MODELO SENSORES VIRTUAIS EXEMPLO

Sensores Virtuais são uma forma de poder converter uma leitura analógica de uma sonda combustivel em que o valor é em Volts e é convertido em Litros e em percentagem de depósito.

Modelo de sensor virtual: SENSORESVIREXEMPLOS

Permite até de um a quatro sensores em simultâneo.

Exemplos

Sendo que é um GV300 com 2 sondas devem trabalhar sobre os DATAVALUE3 e DATAVALUE4.

Devem ajustar os valores nas seguintes variáveis.

Activação do sensor e da respectiva coluna no sistema

// VOLTAGEM 3 - DataValue3
bool enable3 = true;

Se alterarem o true para false este sensor deixará de ser contabilizado para as contas dos litros. E se estiver a false e for colocado true passa a ser contabilizado para as contas dos litros.

Variáveis a configurar

Variável Descrição
outputMax3 Litros - Preencher com capacidade do tanque 1
outputMax4 Litros - Preencher com capacidade do tanque 2
inputMin3 Volts - Valor mínimo que a sonda irá enviar para o tanque 1 vazio
inputMin4 Volts - Valor mínimo que a sonda irá enviar para o tanque 2 vazio
inputMax3 Volts - Valor máximo em volts que a sonda irá enviar para o tanque 1 cheio
inputMax4 Volts - Valor máximo em volts que a sonda irá enviar para o tanque 2 cheio

Código

Exemplo de código em C# para ser copiado e colado, ou num novo sensor diretamente ou para usar num novo modelo de sensor virtual.

// VOLTAGEM 1 - DataValue1
bool enable1 = false;
decimal inputMin1 = 1m; //Volts - Valor mínimo que a sonda irá enviar
decimal inputMax1 = 100.0m; //Volts - Valor máximo em volts que a sonda irá enviar
decimal outputMin1 = 0.0m; //Litros - Nivel do tanque com voltagem no minimo
decimal outputMax1 = 100.0m; //Litros - Nivel do tanque com voltagem no máximo
// VOLTAGEM 2 - DataValue2
bool enable2 = false;
decimal inputMin2 = 1m; //Volts - Valor mínimo que a sonda irá enviar para o tanque vazio
decimal inputMax2 = 100.0m; //Volts - Valor máximo em volts que a sonda irá enviar para o tanque cheio
decimal outputMin2 = 0.0m; //Litros - Capacidade minima tanque
decimal outputMax2 = 100.0m; //Litros - Preencher com capacidade do tanque
// VOLTAGEM 3 - DataValue3
bool enable3 = true;
decimal inputMin3 = 1m; //Volts - Valor mínimo que a sonda irá enviar para o tanque vazio
decimal inputMax3 = 9.0m; //Volts - Valor máximo em volts que a sonda irá enviar para o tanque cheio
decimal outputMin3 = 0.0m; //Litros - Capacidade minima tanque
decimal outputMax3 = 505.0m; //Litros - Preencher com capacidade do tanque
// VOLTAGEM 4 - DataValue4
bool enable4 = true;
decimal inputMin4 = 1m; //Volts - Valor mínimo que a sonda irá enviar para o tanque vazio
decimal inputMax4 = 9.0m; //Volts - Valor máximo em volts que a sonda irá enviar para o tanque cheio
decimal outputMin4 = 0.0m; //Litros - Capacidade minima tanque
decimal outputMax4 = 350.0m; //Litros - Preencher com capacidade do tanque
//NÃO MEXER DAQUI PARA BAIXO
//NÃO MEXER DAQUI PARA BAIXO
//NÃO MEXER DAQUI PARA BAIXO
decimal? outputLevel = null;
decimal? maxOutputLevel = null;
if(enable1)
{
    if(InputRecord.DataValue1 != null)
    {
        decimal tempOutputValue;
        if(InputRecord.DataValue1 <= inputMin1)
        {
            tempOutputValue = outputMin1;
        }
        else if(InputRecord.DataValue1 >= inputMax1)
        {
            tempOutputValue = outputMax1;
        }
        else
        {
            tempOutputValue = outputMin1
                                + (InputRecord.DataValue1.Value - inputMin1)
                                * (outputMax1 - outputMin1)
                                / (inputMax1 - inputMin1);
            tempOutputValue = System.Math.Abs(tempOutputValue);
        }
        if(outputLevel == null)
        {
            outputLevel = tempOutputValue;
        }
        else
        {
            outputLevel += tempOutputValue;
        }
    }
    decimal max = System.Math.Max(outputMin1, outputMax1);
    if(maxOutputLevel == null)
    {
        maxOutputLevel = max;
    }
    else
    {
        maxOutputLevel += max;
    }
}
if(enable2)
{
    if(InputRecord.DataValue2 != null)
    {
        decimal tempOutputValue;
        if(InputRecord.DataValue2 <= inputMin2)
        {
            tempOutputValue = outputMin2;
        }
        else if(InputRecord.DataValue2 >= inputMax2)
        {
            tempOutputValue = outputMax2;
        }
        else
        {
            tempOutputValue = outputMin2
                                + (InputRecord.DataValue2.Value - inputMin2)
                                * (outputMax2 - outputMin2)
                                / (inputMax2 - inputMin2);
            tempOutputValue = System.Math.Abs(tempOutputValue);
        }
        if(outputLevel == null)
        {
            outputLevel = tempOutputValue;
        }
        else
        {
            outputLevel += tempOutputValue;
        }
    }
    decimal max = System.Math.Max(outputMin2, outputMax2);
    if(maxOutputLevel == null)
    {
        maxOutputLevel = max;
    }
    else
    {
        maxOutputLevel += max;
    }
}
if(enable3)
{
    if(InputRecord.DataValue3 != null)
    {
        decimal tempOutputValue;
        if(InputRecord.DataValue3 <= inputMin3)
        {
            tempOutputValue = outputMin3;
        }
        else if(InputRecord.DataValue3 >= inputMax3)
        {
            tempOutputValue = outputMax3;
        }
        else
        {
            tempOutputValue = outputMin3
                                + (InputRecord.DataValue3.Value - inputMin3)
                                * (outputMax3 - outputMin3)
                                / (inputMax3 - inputMin3);
            tempOutputValue = System.Math.Abs(tempOutputValue);
        }
        if(outputLevel == null)
        {
            outputLevel = tempOutputValue;
        }
        else
        {
            outputLevel += tempOutputValue;
        }
    }
    decimal max = System.Math.Max(outputMin3, outputMax3);
    if(maxOutputLevel == null)
    {
        maxOutputLevel = max;
    }
    else
    {
        maxOutputLevel += max;
    }
}
if(enable4)
{
    if(InputRecord.DataValue4 != null)
    {
        decimal tempOutputValue;
        if(InputRecord.DataValue4 <= inputMin4)
        {
            tempOutputValue = outputMin4;
        }
        else if(InputRecord.DataValue4 >= inputMax4)
        {
            tempOutputValue = outputMax4;
        }
        else
        {
            tempOutputValue = outputMin4
                                + (InputRecord.DataValue4.Value - inputMin4)
                                * (outputMax4 - outputMin4)
                                / (inputMax4 - inputMin4);
            tempOutputValue = System.Math.Abs(tempOutputValue);
        }
        if(outputLevel == null)
        {
            outputLevel = tempOutputValue;
        }
        else
        {
            outputLevel += tempOutputValue;
        }
    }
    decimal max = System.Math.Max(outputMin4, outputMax4);
    if(maxOutputLevel == null)
    {
        maxOutputLevel = max;
    }
    else
    {
        maxOutputLevel += max;
    }
}
if(outputLevel != null)
{
    OutputRecord.FMSFuelLevel = outputLevel;
    OutputRecord.FMSFuelLevelPercentage = (outputLevel / maxOutputLevel) * 100m;
    OutputValue = OutputRecord.FMSFuelLevel;
    // OutputValue = OutputRecord.FMSFuelLevelPercentage;
}