Escalar valor - Entradas analógicas

  • 7 Respuestas
  • 5430 Vistas

Jose Torres

  • Aprendiz
  • **
  • Mensajes: 61
Escalar valor - Entradas analógicas
« : abril 23, 2015, 22:35:09 pm »
Quisiera saber cómo se hace para escalar una entrada analógica. Por ej. leo una entrada de 10 bits de 0-10 v en una escala de 0 a 1023 ¿Cómo hago para transformarlo en una escala de 0 a 800?  Se me ocurre algo pero en Float pero luego no puedo pasarlo a Int32. Gracias.
« Última Modificación: abril 24, 2015, 16:29:54 pm por Soporte »

Soporte

  • Global Moderator
  • Experto
  • *****
  • Mensajes: 2324
  • Soporte Técnico
Re: Escalar valor - Entradas analógicas
« Respuesta #1 : abril 24, 2015, 16:29:21 pm »
Buenas tardes Jose,

Te paso un proyecto en StxLadder que toma un valor analógico de la entrada VIN1 de 10-bits (del STX8081), en el rango de 0-1023 en decimal y lo convierte a un valor escalado entre 0-800 en decimal.

Para hacer el calculo se utilizó un poco de lenguaje Pawn y se aplicó la formula:

y = (a*x / b) * c

Donde:

  • y = valor escalado
  • x = muestra
  • a = factor de ganacia o multiplicacion
  • b = maximo valor posible de la muestra
  • c = fondo de escala


En tu caso quedaría:

y = ((100 * x) / 1023) * 800

Eso te daría valores entre 0-800 para un x entre 0-1023.
El numero 100 pre-multiplica a x en ese factor para no perder dos decimales con el numero entero al dividir, ya que no usamos Float en este caso.

Luego para obtener el valor final, eliminamos el factor de multiplicación:

y = y / 100

En el proyecto que adjunto para Ladder, se declaran 2 variables globales llamadas:

  • Sample: Almacena muestra, 0-1023
  • SampleScaled: Muestra escalada 0-800

Ambas variables se muestran en el display LCD del PLC modelo STX8081.

Como usamos Pawn, esas variables se llaman gi_Sample y gi_SampleScaled dentro del componente Pawn según documento STXLADDER-PL.

El código Pawn que se utiliza, es:

Código: (Pawn) [Seleccionar]
// Aplicar ecuación de escala:
// y = (a*x / b) * c
// Se utiliza a = 100 (factor de multiplicación) para tener una resolución de dos
// decimales, ya que no usamos números flotantes.
// b = valor máximo de muestra.
// c = fondo de escala deseado.

gi_SampleScaled = ((gi_Sample*100)/1023) * 800

// Dividir el escaleo previo con a = 100.

gi_SampleScaled = gi_SampleScaled / 100


Proba el proyecto que adjunto y avisanos cualquier duda.

« Última Modificación: abril 24, 2015, 16:34:22 pm por Soporte »
SOPORTE TÉCNICO

Slicetex Electronics
www.slicetex.com

Jose Torres

  • Aprendiz
  • **
  • Mensajes: 61
Re:Escalar valor - Entradas analógicas
« Respuesta #2 : abril 24, 2015, 21:47:11 pm »
Muy bien, lo pruebo y te aviso. Muchas gracias

Jose Torres

  • Aprendiz
  • **
  • Mensajes: 61
Re:Escalar valor - Entradas analógicas
« Respuesta #3 : abril 25, 2015, 19:20:45 pm »
Hola Boris, el escaleo anduvo fenómeno así como las demás ayudas que me propusiste. Te envío el borrador de las "recetas", tanto en PLC como en visual c#. La inclusión del display es solo para monitorear lo que pasa en el programa. Los valores del peso de los componentes son solo indicativos para evitar el error del 4% en la lectura de la balanza. Cuando termine el programa le voy a poner un 8091 que tiene entradas de 12 bits. Falta el pesaje de cemento y el dosaje de agua pero es repetitivo. Si la pesada parece algo compleja es para evitar que los relés no reboten, vibren ni retornen. En el pesaje real las compuertas de las tolvas de áridos no pueden volver a abrirse una vez que han completado su descarga. Cuando puedas pegale una mirada; en caso de que haya otro modo de encapsular la pesada de cada componente te agradecería la ayuda. Espero, de a poco, irme poniendo menos molesto con menos consultas.Muchas gracias.

Soporte

  • Global Moderator
  • Experto
  • *****
  • Mensajes: 2324
  • Soporte Técnico
Re:Escalar valor - Entradas analógicas
« Respuesta #4 : abril 27, 2015, 19:17:31 pm »
Buenas tarde Jose, no me queda en claro la consulta, que parte especifica debo ver ?.

Saludos
SOPORTE TÉCNICO

Slicetex Electronics
www.slicetex.com

Jose Torres

  • Aprendiz
  • **
  • Mensajes: 61
Re:Escalar valor - Entradas analógicas
« Respuesta #5 : abril 29, 2015, 17:41:51 pm »
Hola Boris, lo que me parece algo pesado de mi programa es la activación de los relés. Funciona pero pero tal vez haya un modo mejor de hacer la pesada sin tantos firuletes. Te digo como deberían funcionar: el ciclo comienza  con la señal de "start" y termina con "start" negado por fin de pesaje o señal de pare externa. Debe activarse en forma secuencial la descarga de un árido después de otro, nunca simultaneamente, una vez terminado su pesaje el relé no puede volver a energizarse hasta un nuevo ciclo, el ciclo termina con el fin de pesada del último árido. En caso de detenerse el pesaje por pare externo en cualquier momento del pesaje, al relanzar "start" el pesaje continuará desde su punto de detención. Cualquier aclaración a tus órdenes. Muchas gracias

Soporte

  • Global Moderator
  • Experto
  • *****
  • Mensajes: 2324
  • Soporte Técnico
Re:Escalar valor - Entradas analógicas
« Respuesta #6 : abril 29, 2015, 19:30:41 pm »
Para que se activen los reles en secuencia, por ejemplo uno en T=0, el otro en T+100 mS, el otro en T+200 mS...
Podrías utilizar un temporizador Ladder TON con retardo en la conexión.

Cada temporizador debería contener un tiempo diferente de temporizador para cada rele.

Para organizar mejor el código, podes hacer uso de los diagrama-función de Ladder, para agrupar los componentes en diferentes diagramas y luego llamarlos del principal.

Saludos
SOPORTE TÉCNICO

Slicetex Electronics
www.slicetex.com

Jose Torres

  • Aprendiz
  • **
  • Mensajes: 61
Re:Escalar valor - Entradas analógicas
« Respuesta #7 : abril 30, 2015, 15:19:05 pm »
Muchas gracias.