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 |
||
| Line 1: | Line 1: | ||
{{QuatenusHeader}} | {{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. | 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 ==== | ||
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}} | ||
Revision as of 08:32, 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;
}
