91
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:
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:
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:
Resultando el código HTML de la página web completo como:
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!
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!