Aritmética de Punto flotante en Ladder con Pawn

  • 3 Respuestas
  • 544 Vistas

Soporte

  • Global Moderator
  • Experto
  • *****
  • Mensajes: 1676
  • Soporte Técnico
Aritmética de Punto flotante en Ladder con Pawn
« : octubre 12, 2015, 14:02:07 pm »
Gaston nos consulta:

Citar
Aprovecho para consultarte sobre cómo hacer operaciones aritméticas y lógicas con variables tipo float  en LADDER. De acuerdo a lo que estuve tengo que hacer un desarrollo el lenguaje pawn (que te muestro a continuación).

Adjunto a este mensaje te paso un proyecto (FloatArith.zip) para combinar lenguaje Ladder con lenguaje Pawn, donde se define una función RestaF(a,b) en lenguaje Pawn que permite restar dos variables flotantes definidas en Lenguaje Ladder.

La función RestaF() se define en un archivo script Aritmetica.p. Al ser una función puede ser re-utilizable en otras partes del código.

Desde Ladder, se la llama insertando código Pawn con el componente correspondiente.

Leer en el proyecto suministrado los comentarios y el archivo info.txt que explica en detalle el código.

Quedamos a disposición.






SOPORTE TÉCNICO

Slicetex Electronics
www.slicetex.com

GastonGu

  • Novato
  • *
  • Mensajes: 6
Re:Aritmética de Punto flotante en Ladder con Pawn
« Respuesta #1 : octubre 13, 2015, 09:42:54 am »
Gracias Boris, pruebo de hacer lo que me indicas y te comento.

Saludos, Gastón.

GastonGu

  • Novato
  • *
  • Mensajes: 6
Re:Aritmética de Punto flotante en Ladder con Pawn
« Respuesta #2 : octubre 18, 2015, 11:53:17 am »
Boris, buen día.

Estoy trabajando en la automatización de un compresor de amoníaco de un frigorífico que conserva peras y manzanas.
Tengo como entradas analógicas la presión de entrada (de succión) y de salida (de alta) del compresor y presión de aceite. Se realiza mediante un transmisor de presión 1-5 Vcc. Utilizo variables FLOAT.
En el proceso de control debo hacer un cálculo de resta de estas variables que determinará la parada del compresor en caso de falla por ejemplo.

Consulta... dentro de los bloques de programación, el “VIN READ VOLT” que utilizo para las variables FLOAT, para el modelo del que dispongo, tiene una resolución de 12 bits y entrega una salida que se almacena en una variable FLOAT.
Siendo que, con esa resolución obtenemos un valor máximo de 4095, no entiendo por qué no se usa una variable del tipo INTEGER.
Esa variable FLOAT, almacena el dato en formato de “punto flotante” o decimal?
Necesitaría mayor detalles de cómo funciona ese bloque.

Gracias, Gastón.


Soporte

  • Global Moderator
  • Experto
  • *****
  • Mensajes: 1676
  • Soporte Técnico
Re:Aritmética de Punto flotante en Ladder con Pawn
« Respuesta #3 : octubre 18, 2015, 13:05:43 pm »
Buenos dias,

El componente que estas utilizando (VIN READ VOLT) lee el canal analógico, obtiene la muestra digital y automáticamente convierte ese valor digital a un valor de tensión en punto flotante (float). No te devuelve el valor "puro" del conversor "A/D" sino su equivalente en tensión. Esto lo hace teniendo en cuenta el rango y resolución configurados para la entrada.

Si deseas leer el valor binario/digital puro del conversor A/D debes usar el componente "VIN READ", que te devuelve en una variable Int32 el valor de la conversión.

Este valor, como bien decis para tu PLC, esta en el rango de 0-4096.

Sin embargo, el valor depende del rango de tensiones configuradas para la entrada analogica. Es decir, 2.5V por ejemplo, tiene diferente valor digital para un rango configurado de 0-5V que para 0-10V.

La formula (para canales de VIN4-VIN8) la podes obtener de la hoja de datos del STX8091, pagina 27:

VIN_bin = VIN_Vol / (|RANGO| / 2^RESOLUCION)

Entonces, si en VIN4 tenes 2.5V, el valor binario que te devuelve el componente  "VIN READ", depende del rango configurado para la entrada:

  • Rango 0-5V: VIN4_bin = 2.5V / (5 / 4096) = 2048
  • Rango 0-10V o +/- 5V: VIN4_bin = 2.5V / (10 / 4096) = 1024
  • Rango +/- 10V: VIN4_bin = 2.5V / (20 / 4096) = 512

Adjunto a este mensaje te paso el proyecto de ejemplo en punto flotante, para una lectura de la entrada analógica usando valores digitales.

Por otro lado, nota que en el diagrama Inicio.sld del ejemplo activé un filtro para las entradas analógicas, de tal forma que elimina
ruidos y fluctuaciones si tenes que leer señales "lentas" de sensores.


Quedo a disposición.




« Última Modificación: octubre 20, 2015, 10:45:05 am por Soporte »
SOPORTE TÉCNICO

Slicetex Electronics
www.slicetex.com