Ya revisamos las opciones y queremos hacerlo a través de la aplicación SampleBinToText editandolo con visual studio para que en el archivo CSV ya aparezcan los rangos de los canales en unidades de ingeniería, primero de 0 a 100% como primera práctica y después quisiéramos implementar que estos rangos sean editados a través del programa SampleBinToText para que cada canal pueda tener diferente rango y se pueda modificar rápidamente.
Buenas tardes Víctor,
Convertir a unidades de ingeniería en el programa "
SampleBinToText" es fácil, ya que tenés el valor de voltaje.
Lo primero que debés realizar es un escalamiento matemático, es decir, convertir por ejemplo valores de voltaje de 0 a 10V a temperatura de 0 a 100 °C.
Para ello podés utilizar crear la siguiente función (método se le dice) en Visual C#:
private float MathScale(float InValue, float InMin, float InMax, float OutMin, float OutMax)
{
float ScaledValue;
// Convertir valor utilizando la ecuación de la recta que pasa por dos puntos.
ScaledValue = ((((InValue) - InMin) / (InMax - InMin)) * (OutMax - OutMin) + OutMin);
// Return.
return ScaledValue;
}
El método escala el valor 'InValue" entre 'InMin' y 'InMax' para el rango de salida especificado por 'OutMin' y 'OutMax'.
Donde "InValue" es el valor de voltaje.
Por ejemplo, volviendo al ejemplo de temperatura, si los valores de voltaje de 0 a 10V corresponden a temperatura de 0 a 100 °C, hacemos:
MathScale(VoltajeActual, 0, 10, 0, 100)
Y el método MathScale() devolverá la temperatura correspondiente entre 0 y 100 °C, para un voltaje entre 0 y 10V.
Una forma rápida de entenderla, es que a 0V le corresponden 0°C y a 10V le corresponden 100°C. Podés utilizarla para cualquier tipo de unidad de ingeniería (temperatura, presión, etc) y valor de entrada (voltaje o corriente).
Entonces, ahora que ya tenemos el método de conversión a unidades de ingeniería vamos al código del programa "SamplesBinToText" y buscamos la parte dónde obtenemos el voltaje (señalado en rojo):
// Convertir muestra de canal de binario a analógico (float).
// Nota: Cada muestra de canal está separada a SamplersBufSize*4 bytes del canal actual.
Value = BitConverter.ToUInt32(LogEntryData, (int)(DataIndex + Ch*SamplersBufSize*4));
VinValue = VinBinaryToVoltage(Value, VinRangeSelected, false);
// Agregar a la línea de texto.
// Nota: Imprimir valor con máximo 4 decimales.
TextLines.AppendFormat(";{0:0.####}", VinValue);El valor "
VinValue" es el voltaje y le aplicamos el método MathScale() para convertir a unidades de ingeniería:
EngValue = MathScale(VinValue, 0, 10, 0, 100)
El valor
EngValue será un valor entre 0 y 100, que es la temperatura correspondiente a 0 y 10V. Este valor ahora se guarda en el archivo CSV.
Para simplificar, te paso el ejemplo modificado, deberías ver una pantalla similar a la siguiente:

Observar en la imagen superior, la parte resaltada en amarillo, como podés configurar cada canal VIN, en este caso se muestra que -3V corresponde a 0, y 3V corresponde a 100.
Luego en el código fuente se toman estos valores de configuración para
MathScale() para cada canal VIN.
Podés descargar desde este mensaje el código del proyecto modificado:
SampleBinToTextEngUnits_v001.zipAvisáme si hay algo puntual que no se entienda en el programa.
Saludos!