Mensajes recientes

Páginas: [1] 2 3 ... 10
1
STX8180 / Re:Establecer voltaje en salida analógica
« Último mensaje por Soporte junio 24, 2022, 20:06:28 pm »
Nuevamente. Implemente el siguiente script  y funciona bien a nivel VirtualHMI..pero no veo voltaje en la salida VOUT1, leí por ahí que hay un jumper, esto es así para el STX8081? para poder ver voltaje de 1 a 5 V en el canal. Intentamos otras funciones que vienen en el manual pero de igual forma no vemos la tensión que queremos.

Hola Miguel.

Los canales VIO tienen función múltiple, pueden ser entradas o salidas de diversos tipos, por lo tanto, antes hay configurarlos por software.

En el caso del modelo STX8180 no hace falta manipular ningún jumper.

Para que un canal VIO sea salida de voltaje (no corriente, eso es una función diferente) de 0 a 10V, lo podés configurar con la siguiente función antes de utilizarlo:

Código: (Pawn) [Seleccionar]
   
   // Canal VIO1: Salida de voltage, alias VOUT1.
   // Rango: 0 a 10V.
   // Voltaje inicial: 0V
   
   VioInitVout(1, VIO_TYPE_VOUT, VIO_VOUT_RANGE_0V_10V, 0)

La constante VIO_VOUT_RANGE_0V_10V indica rango 0 a 10V.
Mientras que el primer argumento es el número de canal VIO (en este caso 1) y el último argumento es el voltaje inicial (en este caso 0V).
Los canales VIO que pueden ser salida de voltaje son todos, desde VIO1 a VIO11.

Las constantes para rango válidos son:

Código: (Pawn) [Seleccionar]
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

Luego de inicializar el canal VIO como salida analógica de voltaje VOUT, podés utilizar la función VoutWriteVolt() para escribir o establecer el voltaje de salida. Por ejemplo:

Código: (Pawn) [Seleccionar]
//
// Escribir salida analógica número 1 (VOUT1) con voltaje de 5.5V.
//

VoutWriteVolt(1, 5.5)

Notar que el voltaje pasado a la función (en este caso 5.5) debe estar dentro del rango de voltaje, sino, se recorta el voltaje al límite.

Para medir este voltaje con el voltímetro, debés hacerlo entre el canal VIO seleccionado y el terminal A1G (masa analógica).

En la página de ejemplos del modelo STX8180 hay ejemplos para las salidas analógicas, buscar "Escribir salidas analógicas de voltaje (VOUT)" en la página de ejemplo, lo podés encontrar en el siguiente link:

www.slicetex.com/hw/stx8180/examples.php

El ejemplo que pasaste, también esta disponible adaptado para el modelo STX8180 en la página mencionada, el link directo es:

www.slicetex.com/hw/stx8180/examples/VoutPawn1.zip

Este ejemplo, utiliza el canal VIO5 en vez del VIO1, pero podés modificarlo fácilmente cambiando el número de canal 5 por 1.

Saludos y buen fin de semana!





2
STX8180 / Establecer voltaje en salida analógica
« Último mensaje por Miguel Gomez junio 24, 2022, 18:51:08 pm »
Hola que tal

Nuevamente. Implemente el siguiente script  y funcina bien a nivel VirtualHMI..pero no veo voltaje en la salida VOUT1, leí por ahí que hay un jumper, esto es así para el STX8081? para poder ver voltaje de 1 a 5 V en el canal. Intentamos otras funciones que vienen en el manual pero de igual forma no vemos la tensión que queremos.

saludos

Código: (Pawn) [Seleccionar]
PlcMain()
{

   // Inicializar rutinas Virtual-HMI.
   VirtualHmiInit()


   new Float:Volts
   // Loop principal.

   for(;;)
   {
     
   // Generar una rampa lineal entre 0 y 5
   
   if(Volts < 5)
   {
   Volts += 0.5
   }
   else
   {
   Volts = 0
   }
   
   //
// Escribir salidas analogicas.
//

VoutWriteVolt(1, Volts)
 
//
// Pausar 2000 mS.
//
// Mostrar lectura en el display de VirtualHMI.
            nLcdPrintf(0, 5, LCD_CLRLINE, "VoltajeCh1 = %f", Volts)
           
           
DelayMS(2000)
LedToggle()
   }

   // Retorno.
   return 0
}
3
STX8180 / Re:Relación SAMPLER BUFF SIZE con segundo de adquisición en DiskSamplerLog4
« Último mensaje por Soporte junio 23, 2022, 12:08:43 pm »
quedó claro! ya vimos como controlar este tema.

Perfecto. Tener en cuenta que para muestreos rápidos, como este, conviene tener el tamaño de SAMPLERS_BUF_SIZE al máximo, es decir en 127. Esto permite que entre cada evento @OnVinBufFullA() donde se escribe la tarjeta, esté más espaciado en el tiempo, por ejemplo 0.635 segundos para 200 muestras/s. Entonces, nos aseguramos tener todo ese tiempo disponible extra para otras operaciones del PLC. Por ejemplo, la operación de escritura de esas muestras tarda entre 0.010 a 0.030 segundos en promedio, pero si por algún motivo se retrasa, estamos sobrados de tiempo hasta la próxima escritura, que debe ser cada 0.635 segundos para no perder últimas muestras adquiridas (sino serán remplazadas o mezcladas por nuevas muestras).

Si bajamos el el valor de SAMPLERS_BUF_SIZE  el tiempo entre eventos @OnVinBufFullA() será menor, con lo cuál dispondremos de menos tiempo extra para cualquier retraso no contemplado en la escritura de las muestras.

Es a criterio del programador, se puede bajar el valor, pero cuando tenemos tiempos muy pequeños o muestreos a alta velocidad, conviene el mayor valor.

Saludos!
4
STX8180 / Re:Creacion archivo bin despues de un log
« Último mensaje por Soporte junio 23, 2022, 11:45:32 am »
Buenos días Miguel,

En el siguiente link te paso el ejemplo modificado para descargar:

www.slicetex.com/docs/an/an036/files/examples/DiskSamplerLog3B.zip

Este ejemplo es derivado del ejemplo "DiskSamperLog3", teniendo como principal diferencia el nombre de los archivos de logs, que en este caso incluyen la fecha en el nombre (YYYYMMDD.bin, donde YYYY=Año, MM=Mes, DD=Día). Además se lista cada log nuevo en un archivo llamado "loglist.htm" que es cargado por la página web "log.shml" para un acceso rápido.

Las principales diferencias son:

ARCHIVO SAMPLERS.P

En la función SamplersInit() utilizamos:

Código: (Pawn) [Seleccionar]
DiskLogInit(1, "", "bin", "/web", 100000, 1, DISKLOG_OPT_YYYYMMDD|DISKLOG_OPT_CIRCULAR|DISKLOG_OPT_FAST_WRITE)

El canal 1 de DiskLog está configurado para que los datos se guarden en un archivo con el siguiente nombre "YYYYMMDD.bin", donde YYYY=Año, MM=Mes, DD=Día, por ejemplo 20220623.bin. Cada archivo puede almacenar hasta 100000 entradas de log (configurable) por archivo. Como todos los días se crea un archivo nuevo, si en el mismo día se pasan las 100000 entradas, se sobreescribe el archivo desde el comienzo, perdiendo el contenido previo (esto es porque se utiliza la opción DISKLOG_OPT_CIRCULAR en DiskLogInit()). Puede eliminar la opción DISKLOG_OPT_CIRCULAR si no quiere este comportamiento circular o aumentar el número de entradas por archivo.

En la función SamplersStart() agregamos el siguiente código al inicio:

Código: (Pawn) [Seleccionar]

   new Year, Month, Day
   new File[31]
   
   //
   // Agregar un link del archivo de log actual si no existe el archivo con lista de logs "/web/loglist.htm".
   //
   
   // Obtener fecha del reloj.
   RtcGetDate(Day, Month, Year)
   
   // Crear una cadena con el nombre del archivo del log correspondiente a este día.
   // Nota: %02d, es un código para imprimir un entero anteponiendo como máximo dos ceros,
   // por ejemplo: "1" se imprime como "01".
   StrFormat(File, 31, false, "/web/%04d%02d%02d.bin", Year, Month, Day)
   
   // Verificar si no existe el archivo de log actual o la lista de logs.
   // Nota: Esto permite agregar solo agregar el enlace cuando hay un archivo de log nuevo, o cuando
   // la lista de logs no existe.
   if(DiskFileExist(File) == 0 || DiskFileExist("/web/loglist.htm") == 0)
   {
      // No existe, agregar enlace a archivo en otro archivo llamado /web/loglist.htm
      // Nota: La opción DISK_WRITELOG_OPT_NO_DATE evita colocar fecha/hora en el archivo.
      DiskWriteLogString(DISK_WRITELOG_OPT_NO_DATE, "/web/loglist.htm", "<a href=\"%s\" target=\"_blank\">%s</a><br>", File, File)
   }


Comenzamos obteniendo fecha/hora con RtcGetDate() para formar una cadena con StrFormat() que tenga el mismo nombre que el archivo de log del día, es decir del tipo YYYYMMDD.bin. Esto nos permitirá comprobar si el archivo YYYYMMDD.bin del día existe con DiskFileExist().

Si no existe, con DiskWriteLogString() escribimos una línea de texto en el archivo "/web/loglist.htm" que cotiene un link a YYYYMMDD.bin, de esta manera, luego podremos acceder desde la página web  a una lista con todos los archivos log generados.

También comprobamos si "/web/loglist.htm" no existe, en ese caso, también agregamos el link a YYYYMMDD.bin.

ARCHIVO LOG.SHTML

Finalmente, en la página web dinámica agregamos un comando para cargar el contenido del archivo con la lista de enlaces a los logs: "/web/loglist.htm"

Esto lo hacemos con el comando:

Código: (CGI) [Seleccionar]
$!+ /web/loglist.htm $

Resultando el código HTML de la página web completo como:

Código: (HTML) [Seleccionar]
$!+ /header.html $

<section>

<h1>Logs Disponibles</h1>

<p>Click en archivo para descargar log.</p>

<!-- Cargar contenido de archivo en la página. -->
$!+ /web/loglist.htm $

</section>

$!+ /footer.html $

Cada log nuevo será listado en la página web "log.shtml" que a su vez carga el archivo con enlaces "/web/loglist.htm".

Más información sobre comandos web en la nota de aplicación AN030.

Podés probar generar diferentes archivos logs del tipo YYYYMMDD cambiando la fecha/hora interna del PLC con diferentes días desde menú "PLC > Configurar PLC".

Saludos!




5
quedó claro! ya vimos como controlar este tema.
6
STX8180 / Re:Creacion archivo bin despues de un log
« Último mensaje por Miguel Gomez junio 22, 2022, 22:41:39 pm »
Hola que tal,
Implemente el reemplazo de la linea para poder tener el nombre del archivo bin con YYYYMMDD, pero aún lo veía y se descrgaba como vinxxx.bin,  creo es asunto de actualizar en el codigo de las paginas web, correcto?

Y creo que respondi en otro mensaje, pero si puedes ayudarnos a ejemplificar la escritura de archivo a tarjea con un link al log.

saludo cordial
7
STX8180 / Re:Relación SAMPLER BUFF SIZE con segundo de adquisición en DiskSamplerLog4
« Último mensaje por Soporte junio 22, 2022, 18:15:29 pm »
Observamos en el log ya en excel que en 1 segundo hay un total de 127 ineas y en otro segundo vemos 254 lineas, es aleatorio. Pudieses ampliarnos el tema del buffer size? Queremos tener claro puesto que el usuario final esperaria, si le digo que muestreo 200 x segundo, ver en el log las 200 muestras del segundo. Para tener bien el argumento del funcionamiento.

Hola Miguel.

Cuando el PLC muestrea a 200 muestras por segundo, esto es, una muestra cada 0.005 segundos, el PLC no las escribe inmediatamente en el archivo binario, sino que espera que se llene un buffer interno, que en este caso tiene el tamaño SAMPLERS_BUF_SIZE = 127.

Entonces, transcurren 0.005 * 127 = 0.635 segundos antes de que se escriban las muestras a un archivo (en este momento se llama al evento @OnVinBufFullA() en "Samplers.p", y escribe las muestras con DiskLogAddArray()).

Por lo tanto, supongamos que se comienza a muestrear justo en el segundo exacto "0", tendremos el siguiente log cada 0.635 segundos:

  • 0.635 segundos: se escriben 127 muestras
  • 1.27 segundos: se escriben 127 muestras
  • 1.905 segundos: se escriben 127 muestras
  • 2.54 segundos: se escriben 127 muestras
  • 3.175 segundos: se escriben 127 muestras
  • 3.81 segundos: se escriben 127 muestras
  • 4.445 segundos: se escriben 127 muestras
  • 5.07 segundos: se escriben 127 muestras

Notar como las líneas marcadas en rojo pertenecen al mismo segundo, porque el log estuvo espaciado cada 0.635, y la sumatoria hace que algunos logs queden en el mismo segundo, pero el espacio de tiempo siempre es el mismo. En esos casos, verá 127+127 = 254 muestras asociadas a un mismo segundo.

Como la menor unidad de tiempo para fecha/hora es el segundo en el reloj del PLC, el tiempo asociado solo contiene el segundo, pero no las milésimas de segundo. Sin embargo, el muestreo es correcto, el espaciado entre cada muestra es de 0.005 segundos.

Si no se entiende la explicación, me avisa.

Saludos!
8
STX8180 / Re:Creacion archivo bin despues de un log
« Último mensaje por Miguel Gomez junio 22, 2022, 17:44:01 pm »
Puedes ejemplificar  para ver el listado de archivos bin generados y se pueda accesar?

saludos
9
STX8180 / Re:Creacion archivo bin despues de un log
« Último mensaje por Soporte junio 22, 2022, 17:30:20 pm »
Tomando como ejemplo Disksample3, para el muestreo de canales (hasta 200 muestras/s), ¿es posible que se creen archivos bin por cada evento con el titulo de la fecha y hora enque se creo el log para ese evento en específico? digamos que cada el evento dure de 30 a 60 segundos. algo como
                 h  m  s
log220622_113915
log220630_120012

Buenas tardes Miguel,

Los nombre de archivos tienen un límite de 8 caracteres en el PLC, por lo tanto no tiene la longitud suficiente para poder colocar fecha y hora en el log en el nombre del archivo.

Lo que puede hacer es que tenga fecha, mes y día el nombre, por ejemplo: "YYYYMMDD.bin"
Donde YYYY=Año, MM=Mes y DD=Día.

Para configurarlo de ese modo, en DiskSamperLog3, vaya al archivo "Samplers.p" y busque la línea:

Código: (Pawn) [Seleccionar]
DiskLogInit(1, "vin", "bin", "/web", 10000, 500, DISKLOG_OPT_PPPPPXXX|DISKLOG_OPT_CIRCULAR|DISKLOG_OPT_FAST_WRITE)

Remplácela por:

Código: (Pawn) [Seleccionar]
DiskLogInit(1, "", "bin", "/web", 10000, 1, DISKLOG_OPT_YYYYMMDD|DISKLOG_OPT_CIRCULAR|DISKLOG_OPT_FAST_WRITE)

La nueva constante utilizada es: DISKLOG_OPT_YYYYMMDD que le da el nombre de archivo el año, mes y día.
En el segundo argumento colocamos "" (sin prefijo de nombre de archivo), y en el sexto argumento '1' ya que se genera un solo archivo por día.

y se puedan observar en el webpage

¿Un listado en la página con todos los archivos "YYYYMMDD.bin" generados?.

Se me ocurre que una forma de realizarlo, es que cada vez que se genere un log por día nuevo, se escriba un archivo en la tarjeta con un link al log. Luego al cargar una página web, se cargue este archivo que muestre la lista.

Si esto busca, puedo ejemplificarle.

Saludos!

10
STX8180 / Relación SAMPLER BUFF SIZE con segundo de adquisición en DiskSamplerLog4
« Último mensaje por Miguel Gomez junio 22, 2022, 13:54:28 pm »
Que tal.
Hemos usado el disksample4 con un total de 7 canales como entrada (VIN), activando el log y convirtiendo el archivo bin. Observamos en el log ya en excel que en 1 segundo hay un total de 127 ineas y en otro segundo vemos 254 lineas, es aleatorio. Pudieses ampliarnos el tema del buffer size? Queremos tener claro puesto que el usuario final esperaria, si le digo que muestreo 200 x segundo, ver en el log las 200 muestras del segundo. Para tener bien el argumento del funcionamiento.

saludo
Páginas: [1] 2 3 ... 10