Buenas tardes.
Los ejemplos de inicialización par los canales VIO los puede encontrar en el siguiente link:
https://www.slicetex.com/hw/stx8180/examples.php#PawnAntes de inicializar un canal VIO como salida o entrada, verifique que el cableado externo sea correcto, es decir, si está aplicando un voltaje al canal VIO, no lo inicialice como salida, ya que va a generar un corto. En la hoja de datos se explica los límites eléctricos. En el link de arriba puede acceder a los ejemplos completos, pero le explico en general, a modo rápido, las funciones de inicialización, para que se entienda mejor (pronto actualizaremos el manual con descripciones completas y detalladas).
INICIALIZAR VIO COMO VINFunción:VioInitVin(Ch, Type, Range, Samples, ChNeg=0, Float:AnalogValue=0.0)Descripción: Inicializa un canal VIO (Voltage Input/Output) como entrada analógica de voltaje VIN (Voltage Input). Luego de configurado el canal VIO como entrada VIN, puede utilizarlas funciones estándar para leer entradas analógicas VIN.
Parámetros:- Ch: Especifica el número de canal VIO a inicializar
- Type: Especifica el tipo de entrada analógica de voltaje. Usar constantes VIO_TYPE_VIN_XXX (ver abajo).
- Range: Especifica el rango de voltaje de operación de la entrada analógica. Fuera de estos límites la lectura puede ser errónea. Consulte hoja de datos del dispositivo por límites de voltaje máximos absolutos para evitar daños en el canal VIO. Usar constantes VIO_VIN_RANGE_XXX (ver abajo).
- Samples: Especifica la cantidad de muestras a tomar y promediar por el ADC (Conversor Analógico Digital) interno antes de entregar el valor final de la lectura analógica. Esto es muy útil para filtrar pequeños ruidos o perturbaciones en las entradas y obtener así lecturas más estables. La cantidad de muestras a promediar es configurable entre 0 (sin promedio) y 128. El promediado de muestras se hace continuamente de manera independiente sin interferir con el procesador del PLC. Usar constantes VIO_VIN_SAMPLES_XXX(ver abajo).
- ChNeg: Especifica el número de canal VIO que actuará como entrada negativa (-) en caso de que el tipo de entrada VIN sea configurada como VIN_POS (entrada positiva (+) de voltaje diferencial). Para otras configuraciones, este valor debe ser cero.
- AnalogValue: Especifica el valor de voltaje que se aplicará a la entrada pseudo-diferencial negativa (-) cuando el tipo de entrada VIN es configurada como VIN_NEG_VOUT. Este voltaje es generado por el DAC (Conversor Digital Analógico) interno, y debe estar dentro del rango de voltaje especificado en el parámetro Range.
CONSTANTES VIO_TYPE_VIN_XXX:VIO_TYPE_VIN_SINGLE // Entrada de voltaje simple (single-ended). Más utilizado.
VIO_TYPE_VIN_POS // Entrada positiva (+) de voltaje diferencial.
// Requiere definir el número de canal que se utilizará como entrada negativa (-) en parámetro CH NEG.
VIO_TYPE_VIN_NEG // Entrada negativa (-) de voltaje diferencial.
// Debe configurarse con el mismo rango de voltaje (RANGE) que la entrada positiva (+).
VIO_TYPE_VIN_NEG_VOUT // Entrada negativa (-) de voltaje pseudo-diferencial, con valor definido de voltaje fijo.
// Requiere definir el voltaje a aplicar en el parámetro ANALOG VALUE.
// Debe configurarse con el mismo rango de voltaje (RANGE) que la entrada positiva (+).
CONSTANTES VIO_VIN_RANGE_XXX:VIO_VIN_RANGE_0V_10V // Input range: 0V to 10V
VIO_VIN_RANGE_N5V_5V // Input range: +/-5V
VIO_VIN_RANGE_N10V_0V // Input range: -10V to 0V
VIO_VIN_RANGE_0V_2_5V // Input range: 0V to 2.5V
CONSTANTES VIO_VIN_SAMPLES_XXX:VIO_VIN_SAMPLES_NONE // No samples average.
VIO_VIN_SAMPLES_0 // No samples average.
VIO_VIN_SAMPLES_2 // 2 samples for average.
VIO_VIN_SAMPLES_4 // 4 samples for average.
VIO_VIN_SAMPLES_8 // 8 samples for average.
VIO_VIN_SAMPLES_16 // 16 samples for average.
VIO_VIN_SAMPLES_32 // 32 samples for average.
VIO_VIN_SAMPLES_64 // 64 samples for average.
VIO_VIN_SAMPLES_128 // 128 samples for average.
Ejemplo:
// Canal VIO1: Entrada de voltage simple, alias VIN1.
// Rango 0V a 10V.
// Promedio por hardware: 128 muestras.
VioInitVin(1, VIO_TYPE_VIN_SINGLE, VIO_VIN_RANGE_0V_10V, VIO_VIN_SAMPLES_128)
Completo:https://www.slicetex.com/hw/stx8180/examples/VinPawn1.zipINICIALIZAR VIO COMO CINFunción:VioInitCin(Ch, Type, Range, Samples)Descripción: Inicializa un canal VIO (Voltage Input/Output) como entrada analógica de corriente CIN (Current Input). Luego de configurado el canal VIO como entrada VIN, puede utilizarlas funciones estándar para leer entradas analógicas CIN.
Parámetros:- Ch: Especifica el número de canal VIO a inicializar
- Type: Especifica el tipo de entrada analógica de corriente. Usar constante VIO_TYPE_CIN.
- Range: Especifica el rango de voltaje de operación de la entrada analógica. Fuera de estos límites la lectura puede ser errónea. Consulte hoja de datos del dispositivo por límites de voltaje máximos absolutos para evitar daños en el canal VIO. Utilizar constante VIO_CIN_RANGE_DEFAULT.
- Samples: Especifica la cantidad de muestras a tomar y promediar por el ADC (Conversor Analógico Digital) interno antes de entregar el valor final de la lectura analógica. Esto es muy útil para filtrar pequeños ruidos o perturbaciones en las entradas y obtener así lecturas más estables. La cantidad de muestras a promediar es configurable entre 0 (sin promedio) y 128. El promediado de muestras se hace continuamente de manera independiente sin interferir con el procesador del PLC. Usar constantes VIO_CIN_SAMPLES_XXX(ver abajo).
CONSTANTES VIO_CIN_SAMPLES_XXX:VIO_CIN_SAMPLES_NONE // No samples average.
VIO_CIN_SAMPLES_0 // No samples average.
VIO_CIN_SAMPLES_2 // 2 samples for average.
VIO_CIN_SAMPLES_4 // 4 samples for average.
VIO_CIN_SAMPLES_8 // 8 samples for average.
VIO_CIN_SAMPLES_16 // 16 samples for average.
VIO_CIN_SAMPLES_32 // 32 samples for average.
VIO_CIN_SAMPLES_64 // 64 samples for average.
VIO_CIN_SAMPLES_128 // 128 samples for average.
Ejemplo:
// Canal VIO1: Entrada de corriente 0-20 mA, alias CIN1.
// Rango: 0 a 20 mA (0 a 2.5V).
// Promedio por hardware: 128 muestras.
VioInitCin(1, VIO_TYPE_CIN, VIO_CIN_RANGE_DEFAULT, VIO_CIN_SAMPLES_128)
Completo:https://www.slicetex.com/hw/stx8180/examples/Cin4_20ma_Pawn1.zipNota: Hay más ejemplos completos, ver página.
INICIALIZAR VIO COMO VOUTFunción:VioInitVout(Ch, Type, Range, Float:Voltage=0.0)Descripción: Inicializa un canal VIO (Voltage Output/Output) como salida analógica de voltaje VOUT (Voltage Output).
Luego de configurado el canal VIO como salida VOUT, puede utilizar las funciones estándar para leer salidas analógicas VOUT
Parámetros:- Ch: Especifica el número de canal VIO a inicializar
- Type: Especifica el tipo de salida analógica de voltaje. Ver constantes VIO_TYPE_VOUT_XXX abajo.
- Range: Especifica el rango de voltaje de la salida analógica. Ver constantes VIO_VOUT_RANGE_XXX abajo.
- Voltage: Especifica el valor de voltaje inicial que se aplicará en la salida analógica. Debe estar dentro del rango de voltaje especificado en parámetro RANGE.
CONSTANTES VIO_TYPE_VOUT_XXX:VIO_TYPE_VOUT // Salida de voltaje.
VIO_TYPE_VOUT_MON // Salida de voltaje con monitoreo.
CONSTANTES VIO_VOUT_RANGE_XXX:VIO_VOUT_RANGE_0V_10V // Output range: 0V to 10V
VIO_VOUT_RANGE_N5V_5V // Output range: +/-5V
VIO_VOUT_RANGE_N10V_0V // Output range: -10V to 0V
Ejemplo:
// Canal VIO5: Salida de voltage, alias VOUT5.
// Rango: 0 a 10V.
// Voltaje inicial: 0V
VioInitVout(5, VIO_TYPE_VOUT, VIO_VOUT_RANGE_0V_10V, 0)
Completo:https://www.slicetex.com/hw/stx8180/examples/VoutPawn1.zipNota: Hay más ejemplos completos, ver página.
INICIALIZAR VIO COMO COUTFunción:VioInitCout(Ch, Type, Float:CurrentMA=0.0, Float:RsValue=0.0, Samples=VIO_COUT_SAMPLES_DEFAULT, ControlRateUS=0)Descripción: Inicializa un canal VIO (Voltage Input/Output) como salida analógica de corriente COUT (Current Output).
Luego de configurado el canal VIO como salida COUT, puede utilizar las funciones estándar para escribir salidas analógicas COUT.
Parámetros:- Ch: Especifica el número de canal VIO a inicializar
- Type: Especifica el tipo de salida analógica de corriente. Utilizar constante VIO_TYPE_COUT_RS.
- CurrentMA:especifica el valor corriente inicial de la salida analógica. El rango de configuración es de 0 a 25 mA en la mayoría de los dispositivos (consulte hoja de datos).
- RsValue: Especifica el valor en Ohms del resistor externo RS utilizado cuando salida analógica es configurada con TYPE = COUT_RS. Puede variar este valor para calibrar la salida de corriente con un instrumento o amperímetro. Valores habituales están entre 40 y 110 ohms, consulte hoja de datos del dispositivo.
- Samples: Especifica la cantidad de muestras a tomar y promediar por el ADC (Conversor Analógico Digital) en el canal de realimentación VIO[X+1]. Se recomienda utilizar el valor VIO_COUT_SAMPLES_DEFAULT para la mayoría de las aplicaciones. Puede utilizar un rango de 0 muestras (lecturas más rápidas, mayor velocidad de repuesta en corriente de salida) a 128 muestras (lecturas más lentas, repuesta más lenta en salida de corriente, pero más estable). Ver constantes VIO_COUT_SAMPLES_XXX abajo.
- ControlRateUS: Especifica el periodo o velocidad de repetición en micro-segundos [uS] del ciclo de control de la salida de corriente. A menor valor, la salida de corriente responde más rápidamente a variaciones de impedancia o ruidos en los cables, pero exige mayor sobrecarga al procesador del PLC. Se recomienda el valor "0" que equivale a utilizar un valor interno por defecto para la mayoría de las aplicaciones. Valores inferiores a 100 uS no se recomiendan. Valores óptimos están entre 1000 y 50000 uS. Este parámetro es global, es decir, altera a todas las salidas VIO configuradas como COUT.
CONSTANTES VIO_COUT_SAMPLES_XXX:VIO_COUT_SAMPLES_NONE // No samples average (1 sample).
VIO_COUT_SAMPLES_0 // No samples average (1 sample).
VIO_COUT_SAMPLES_2 // 2 samples for average.
VIO_COUT_SAMPLES_4 // 4 samples for average.
VIO_COUT_SAMPLES_8 // 8 samples for average.
VIO_COUT_SAMPLES_16 // 16 samples for average.
VIO_COUT_SAMPLES_32 // 32 samples for average.
VIO_COUT_SAMPLES_64 // 64 samples for average.
VIO_COUT_SAMPLES_128 // 128 samples for average.
VIO_COUT_SAMPLES_DEFAULT // 128 samples for average.
Ejemplo:
// Canal VIO1: Salida de corriente, alias COUT1.
// Rango: 0 a 20 mA.
// Corriente inicial: 0 mA.
// Resistor externo RS: 51 ohms.
// Samples: Usar valor por defecto para promediado.
// Tasa/período de control: 0 (usar valor interno por defecto)
//
// Nota[1]: Conectar con resistor externo RS a VIO2.
// Nota[2]: Se puede cambiar corriente de este canal desde teclado numérico en VirtualHMI.
VioInitCout(1, VIO_TYPE_COUT_RS, 0.0, 51.0)
Completo:https://www.slicetex.com/hw/stx8180/examples/CoutPawn1.zipNota: Hay más ejemplos completos, ver página.
INICIALIZAR VIO COMO VDOUTFunción:VioInitVdout(Ch, Type, Float:HighLevelVoltage=5.0, InitialValue=0, ChVdin=0, Inv=0)Descripción: Inicializa un canal VIO (Voltage Input/Output) como salida digital de voltaje VDOUT (Voltage Digital Output). Este tipo de salidas le permite escribir dos estados en una salida, alto ("1" lógico) o bajo ("0" lógico). Luego de configurado el canal VIO como salida VDOUT, puede utilizar las funciones estándar para escribir salidas digitales VDOUT.
Parámetros:- Ch: Especifica el número de canal VIO a inicializar
- Type: Especifica el tipo de salida digital de voltaje:. Utilizar constantes VIO_TYPE_VDOUT_XXX, ver abajo.
- HighLevelVoltage: Especifica el valor de voltaje para un nivel alto (uno lógico) de la salida. El rango de configuración es de 0V a 10V en la mayoría de los dispositivos (consulte hoja de datos).
- ChVdin: Especifica el número de canal VIO configurado como entrada digital con el tipo "VDIN_FAST" que será utilizado en combinación con esta salida digital configurada con TYPE = VDOUT_LEVEL_TRANSLATOR.
- Inv: Especifica si la salida digital tiene lógica invertida (1) o no (0). Solo aplicable cuando TYPE = VDOUT_LEVEL_TRANSLATOR.
CONSTANTES VIO_TYPE_VDOUT_XXX:VIO_TYPE_VDOUT // Salida digital de voltaje (VDOUT).
VIO_TYPE_VDOUT_LEVEL_TRANSLATOR // Salida digital de voltaje para traductor de nivel (para usar con VIO_TYPE_VDIN_FAST)
Ejemplo:
// Canal VIO6: Salida de voltaje digital, alias VDOUT6.
// Valor analógico para nivel alto: 5V
// Valor digital inicial: HIGH (1, alto). Puede ser también LOW (0, bajo).
// Canal utilizado en conjunto con una entrada del tipo VDIN_FAST: Ninguno (0).
// Invertir lógica: 0 (no, solo utilizado cuando TYPE es VIO_TYPE_VDOUT_LEVEL_TRANSLATOR )
VioInitVdout(6, VIO_TYPE_VDOUT, 5.0, HIGH, 0, NO)
Las salidas digitales VDOUT se pueden utilizar con las constantes VDOUT1, VDOUT2, VDOUT3, etc disponibles en lenguaje Pawn.
Y las funciones para controlar las salidas VDOUT1, VDOUT2, VDOUT3, etc, tienen el mismo nombre que para controlar las salidas DOUT (DOUT1, DOUT2, DOUT3, etc), solo que se agrega la letra "V" como prefijo, por ejemplo:
VDoutSetOn(VDOUT)
VDoutSetOff(VDOUT)
VDoutToggle(VDOUT)
VDoutGetState(VDOUT)
etc
Por ejemplo:
Poner en nivel alto la salida VDOUT6:
VDoutSetOn(VDOUT6) // Activa o pone en nivel alto salida VDOUT6.
Para controlar cargas de potencias con las salidas VDOUT de los canales VIO, ver siguiente post:
http://foro.slicetex.com/index.php?topic=515.0INICIALIZAR VIO COMO VDINFunción:VioInitVdin(Ch, Type=VIO_TYPE_VDIN, Float:HighLevelVoltage=2.5, Samples=VIO_VDIN_SAMPLES_NONE)Descripción: Inicializa un canal VIO (Voltage Input/Output) como entrada digital de voltaje VDIN (Voltage Digital Input). Este tipo de entradas le permite leer dos estados presentes en una entrada, alto ("1" lógico) o bajo ("0" lógico). Luego de configurado el canal VIO como entrada VDIN, puede utilizar las funciones estándar para leer entradas digitales VDIN.
Parámetros:- Ch: Especifica el número de canal VIO a inicializar
- Type: Especifica el tipo de entrada digital de voltaje:. Utilizar constantes VIO_TYPE_VDIN_XXX, ver abajo.
- HighLevelVoltage: Especifica el valor de voltaje o "nivel de disparo" a partir del cual se considera que en la entrada hay un "1" lógico presente. Se recomienda colocar por debajo del voltaje mínimo esperado, dando cierto margen, un valor de compromiso para evitar perder lecturas y al mismo tiempo evitar falsos disparos.
- Samples: Este parámetro es solo para entradas TYPE=VDIN, especifica la cantidad de muestras a tomar y promediar por el ADC (Conversor Analógico Digital) interno antes de entregar el valor final de la lectura digital. Esto es muy útil para filtrar pequeños ruidos o perturbaciones en las entradas y obtener así lecturas más estables. La cantidad de muestras a promediar es configurable entre 0 (sin promedio) y 128. El promediado de muestras se hace continuamente de manera independiente sin interferir con el procesador del PLC. Ver constantes VIO_VDIN_SAMPLES_XXX abajo.
CONSTANTES VIO_TYPE_VDIN_XXX:VIO_TYPE_VDIN // Entrada digital de voltaje (0V a 10V).
VIO_TYPE_VDIN_FAST // Entrada digital de voltaje rápida (
0V a 5V, no pasar límite).
CONSTANTES VIO_VDIN_SAMPLES_XXX :VIO_VDIN_SAMPLES_NONE // No samples average (1 sample).
VIO_VDIN_SAMPLES_0 // No samples average (1 sample).
VIO_VDIN_SAMPLES_2 // 2 samples for average.
VIO_VDIN_SAMPLES_4 // 4 samples for average.
VIO_VDIN_SAMPLES_8 // 8 samples for average.
VIO_VDIN_SAMPLES_16 // 16 samples for average.
VIO_VDIN_SAMPLES_32 // 32 samples for average.
VIO_VDIN_SAMPLES_64 // 64 samples for average.
VIO_VDIN_SAMPLES_128 // 128 samples for average.
Ejemplo:
// Canal VIO2: Entrada de voltaje digital, alias VDIN2.
// Tipo de entrada digital: VDIN
// Valor analógico para disparo de nivel alto: 4.5V
// Samples: Utilizar un promedio de 128 muestras como filtro para la lectura.
VioInitVdin(2, VIO_TYPE_VDIN, 4.5, VIO_VDIN_SAMPLES_128)
Las salidas digitales VDIN se pueden utilizar con las constantes VDIN1, VDIN2, VDIN3, etc disponibles en lenguaje Pawn.
Y las funciones para leer las entradas VDIN1, VDIN2, VDIN3, etc, tienen el mismo nombre que para leer las entradas DIN (DIN1, DIN2, DIN3, etc), solo que se agrega la letra "V" como prefijo, por ejemplo:
VDinRead()
VDinValue(VDIN)
VDinChanged()
etc
Por ejemplo:
Si entrada VDIN2 es igual a "1" activar salida DOUT2, sino desactivar salida VDOUT2:
if(VDinValue(VDIN2) == 1)
{
DoutSetOn(DOUT2) // Activar salida.
}
else
{
DoutSetOff(DOUT2) // Desactivar salida.
}
Cualquier duda me consulta, especialmente con la parte eléctrica si no se entiende, para evitar daños.Saludos!