Creación de archivo bin de log con fecha en el nombre

  • 11 Respuestas
  • 1893 Vistas

Miguel Gomez

  • Novato
  • *
  • Mensajes: 13
Creación de archivo bin de log con fecha en el nombre
« : junio 22, 2022, 13:45:56 pm »
Hola que tal.
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

y se puedan observar en el webpage
« Última Modificación: junio 23, 2022, 11:52:24 am por Soporte »

Soporte

  • Global Moderator
  • Experto
  • *****
  • Mensajes: 2326
  • Soporte Técnico
Re:Creacion archivo bin despues de un log
« Respuesta #1 : 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!

« Última Modificación: junio 22, 2022, 18:25:22 pm por Soporte »
SOPORTE TÉCNICO

Slicetex Electronics
www.slicetex.com

Miguel Gomez

  • Novato
  • *
  • Mensajes: 13
Re:Creacion archivo bin despues de un log
« Respuesta #2 : junio 22, 2022, 17:44:01 pm »
Puedes ejemplificar  para ver el listado de archivos bin generados y se pueda accesar?

saludos

Miguel Gomez

  • Novato
  • *
  • Mensajes: 13
Re:Creacion archivo bin despues de un log
« Respuesta #3 : 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

Soporte

  • Global Moderator
  • Experto
  • *****
  • Mensajes: 2326
  • Soporte Técnico
Re:Creacion archivo bin despues de un log
« Respuesta #4 : 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!




« Última Modificación: junio 23, 2022, 12:15:04 pm por Soporte »
SOPORTE TÉCNICO

Slicetex Electronics
www.slicetex.com

Miguel Gomez

  • Novato
  • *
  • Mensajes: 13
Re:Creación de archivo bin de log con fecha en el nombre
« Respuesta #5 : julio 04, 2022, 21:51:22 pm »
Gracias por el soporte acerca de como extraer en archivo csv, sin embargo aún no hemos hecho esta cambio o mejora, ya que nos detuvimos en lo siguiente, son 2 puntos:

1. probamos sólo el archivo samplelog3B (con la modificación del nombre del archivo log con la fecha) y observamos que  no crea el nuevo archivo con la fecha siempre. Realizamos el log, por ejemplo hoy y todo ok, le adelantamos la hora al equipo para que cambie la fecha...nos esperamos unos instantes y hacemos un nuevo log  pero observamos que no aparece el nuevo archivo con la nueva fecha...no siempre lo hace  y cuando lo hace vamos adelantando la fecha y van apreciendo los archivos con la fecha nueva...mañana quitaremos  la opción de sincronización a traves de la red, ¿puede ser esto algo que afecte a que el equipo tome la hora de la compu aunque modifiquemos la hora directamente?

2. El equipo se va a dejar trabajando 5 dias (5 muestrasxseg) para unas pruebas con el usuario, por lo que 1ero lo pusimos a trabajar nosostros de esa manera el viernes 1 de julio  solo activando el log (el timeout lo comentamos // para que no tuviera efecto),  y el sabado vimos que sólo guardo lo del viernes hasta las 11:59:59 pm. Creemos que deberia poder guardar lo de los 5 dias en un sólo archivo o que en cada termino de día realice un corte y continue guardando datos en el siguiente nuevo archivo del siguiente dia.

Se retraso un poco las pruebas con ususario por otro tema pero al indicarnos que es lo que van hacer quisimos probarlo así. Hablando de la aplicación en un modo tendría sentido la prueba, pues si un temblor iniciara a las 11:59:40 pm (es algo remoto verdad) grabando por 30 segundos, deberia creo, continuar el resto delos 10 seg en los 1eros segundos del dia siguiente , ya sea en el mismo archivo o en uno nuevo.

gracias por los consejos o correcciones

Soporte

  • Global Moderator
  • Experto
  • *****
  • Mensajes: 2326
  • Soporte Técnico
Re:Creación de archivo bin de log con fecha en el nombre
« Respuesta #6 : julio 05, 2022, 20:00:39 pm »
Buenas tardes Miguel,

1. probamos sólo el archivo samplelog3B (con la modificación del nombre del archivo log con la fecha) y observamos que  no crea el nuevo archivo con la fecha siempre. Realizamos el log, por ejemplo hoy y todo ok, le adelantamos la hora al equipo para que cambie la fecha...nos esperamos unos instantes y hacemos un nuevo log  pero observamos que no aparece el nuevo archivo con la nueva fecha...no siempre lo hace  y cuando lo hace vamos adelantando la fecha y van apreciendo los archivos con la fecha nueva...

Cuando adelanta la hora, ¿lo hace con el log detenido?. Ya que en el ejemplo se crea el link al último log YYYYMMDD.bin  en "/web/loglist.htm" cuando se llama a la función SamplersStart(), y esta se llama cuando arranca el log. Si el log está en progreso, por más que cambie la hora, no se llama a la función y no añade el link. Pero si se generará el archivo de log YYYYMMDD.bin.

¿ Podrá verificar si el archivo con la fecha está en la memoria ?.

Es decir, ingresando al link directamente de la fecha en cuestión:

http://192.168.1.81/web/YYYYMMDD.bin

A lo mejor si se está creando el archivo de log en la tarjeta, pero no se está listando en la página web.

En ese caso, puede ser que en la función SamplersStart() no se está generando el link al log en el archivo "/web/loglist.htm".

Si se fija en el ejemplo en la línea:

Código: (Pawn) [Seleccionar]
if(DiskFileExist(File) == 0 || DiskFileExist("/web/loglist.htm") == 0)

La misma pregunta, si el archivo YYYYMMDD.bin no existe o el archivo "/web/loglist.htm" no existe, entonces, agregar un enlace.

Por lo que, solo si el archivo YYYYMMDD.bin no existe, se lista en la página web, ya que la idea es que agregue el link si es un log nuevo, para no repetir el enlace. Si el archivo existe, no se listará. Habría que modificar la lógica con alguna otra comprobación para que lo liste.

Lo mismo que si cambia la fecha durante el log, no se generará el enlace, porque no se llama a esta función.

Aviseme si es así.

...mañana quitaremos  la opción de sincronización a traves de la red, ¿puede ser esto algo que afecte a que el equipo tome la hora de la compu aunque modifiquemos la hora directamente?

Si, la actualización por red, puede interferir con la hora colocada manualmente, ya que si adelantan, se volverá a atrasar cuando sincronice con la red la fecha/hora. Pero pienso que es por lo anterior.

2. El equipo se va a dejar trabajando 5 dias (5 muestrasxseg) para unas pruebas con el usuario, por lo que 1ero lo pusimos a trabajar nosostros de esa manera el viernes 1 de julio  solo activando el log (el timeout lo comentamos // para que no tuviera efecto),  y el sabado vimos que sólo guardo lo del viernes hasta las 11:59:59 pm. Creemos que deberia poder guardar lo de los 5 dias en un sólo archivo o que en cada termino de día realice un corte y continue guardando datos en el siguiente nuevo archivo del siguiente dia.

Si son 5 días, con esa configuración debería crear un archivo por día.

¿Revisaste si están en la tarjera o solo viste si aparecen listados en la página web?.

Porque estimo que pasa lo que te comenté antes, al no llamar a SamplersStart(), cuando cambia de día, el nuevo archivo no añade a la lista en /web/loglist.htm.

Se retraso un poco las pruebas con ususario por otro tema pero al indicarnos que es lo que van hacer quisimos probarlo así. Hablando de la aplicación en un modo tendría sentido la prueba, pues si un temblor iniciara a las 11:59:40 pm (es algo remoto verdad) grabando por 30 segundos, deberia creo, continuar el resto delos 10 seg en los 1eros segundos del dia siguiente , ya sea en el mismo archivo o en uno nuevo.

Si, totalmente, debería crear dos archivos en esa configuración, que yo pienso que los está creando bien la función DiskLogAddArray() y registrando los datos, pero no se están listando al no llamar a SamplersStart() en cada cambio de día.

Fijate de corroborar eso y vemos como buscarle la vuelta para que los liste en la página al cambiar de día.

Saludos!
« Última Modificación: julio 05, 2022, 20:08:49 pm por Soporte »
SOPORTE TÉCNICO

Slicetex Electronics
www.slicetex.com

Miguel Gomez

  • Novato
  • *
  • Mensajes: 13
Re:Creación de archivo bin de log con fecha en el nombre
« Respuesta #7 : julio 13, 2022, 13:16:45 pm »
Que tal,

Sobre este tema

1. probamos sólo el archivo samplelog3B (con la modificación del nombre del archivo log con la fecha) y observamos que  no crea el nuevo archivo con la fecha siempre. Realizamos el log, por ejemplo hoy y todo ok, le adelantamos la hora al equipo para que cambie la fecha...nos esperamos unos instantes y hacemos un nuevo log  pero observamos que no aparece el nuevo archivo con la nueva fecha...no siempre lo hace  y cuando lo hace vamos adelantando la fecha y van apreciendo los archivos con la fecha nueva""""

Respuesta a tu pregunta: aunque sólo vimos el link de la último log del día 3 (de la prueba), los 2 primeros días si estaban en la memoria,  Cada archivo desde las 00 horas hasta las 11:59:59 (ok). deberiamos ver el link de los otros archivos.  estamos por definir si  debe hacer log cuantas veces sea necesrio en el día (iniciado por un evento de una variable)  o que se quede  todo el día haciendo log...entre otras puntos de comunicación (probablemente usar las funciones para com a un servidor web, get/post)

saludos

Soporte

  • Global Moderator
  • Experto
  • *****
  • Mensajes: 2326
  • Soporte Técnico
Re:Creación de archivo bin de log con fecha en el nombre
« Respuesta #8 : julio 14, 2022, 09:13:48 am »
Hola Miguel,

1. probamos sólo el archivo samplelog3B (con la modificación del nombre del archivo log con la fecha) y observamos que  no crea el nuevo archivo con la fecha siempre. Realizamos el log, por ejemplo hoy y todo ok, le adelantamos la hora al equipo para que cambie la fecha...nos esperamos unos instantes y hacemos un nuevo log  pero observamos que no aparece el nuevo archivo con la nueva fecha...no siempre lo hace  y cuando lo hace vamos adelantando la fecha y van apreciendo los archivos con la fecha nueva""""

Entiendo que esto es en listado de links a los logs, no te figuran los links, pero, ¿en la memoria te aparecen los archivos? ¿si retirás la memoria, ves los archivos en la computadora?. Esto no me queda claro en el mensaje.

Respuesta a tu pregunta: aunque sólo vimos el link de la último log del día 3 (de la prueba), los 2 primeros días si estaban en la memoria,  Cada archivo desde las 00 horas hasta las 11:59:59 (ok). deberiamos ver el link de los otros archivos. 

¿El log lo estás haciendo a 200 muestras por segundo?. ¿Cuántos canales?.

Saludos!
SOPORTE TÉCNICO

Slicetex Electronics
www.slicetex.com

Miguel Gomez

  • Novato
  • *
  • Mensajes: 13
Re:Creación de archivo bin de log con fecha en el nombre
« Respuesta #9 : agosto 23, 2022, 16:33:08 pm »
Hola

retomando el caso,   al dejar trabajando el log por una par de dias, inicialmente se crea el archivo con la fecha en curso después al detener el log al siguiente día sólo se observa en lapagina dinamica "Log"  el archivo bin del día anterior cuando inicio,  pero en la memoria al retirarla del PLC y leerla en la computadora si está el archivo bin  del día actual.. se obseva en la memoria por ejemplo

archivo bin del dia 1       20220803.bin    con el registro con la hora cuando se puso a funcionar  hasta las 11:59:59
archivo bin 2 del  día 2   20220804.bin    con el registro desde las 00:00:00  hasta la hora en que lo detuvimos

creo está operando bien, solo que en la página dinámica no están apareciendo los nuevos archivos al cambio de día.

saludos   Nota:  se están realizando 7 canales , 5 muestras por segundo

Soporte

  • Global Moderator
  • Experto
  • *****
  • Mensajes: 2326
  • Soporte Técnico
Re:Creación de archivo bin de log con fecha en el nombre
« Respuesta #10 : agosto 23, 2022, 21:29:20 pm »
creo está operando bien, solo que en la página dinámica no están apareciendo los nuevos archivos al cambio de día.

saludos   Nota:  se están realizando 7 canales , 5 muestras por segundo

Buenas Miguel,

Si, debe ser lo que comentaba en los mensajes anteriores,  no se está llamando a SamplersStart() cuando cambia de día, por lo que el nuevo archivo no se añade a la lista en /web/loglist.htm. Esto es porque no se tuvo en cuenta en el ejemplo.

Analizo el ejemplo DiskSamplerLog3B.zip para ver como modificarlo para que al cambiar de día, también se liste en la página web. Dame unos días, así lo pruebo, y te aviso por acá al subir la nueva versión del ejemplo.

Saludos!


SOPORTE TÉCNICO

Slicetex Electronics
www.slicetex.com

Soporte

  • Global Moderator
  • Experto
  • *****
  • Mensajes: 2326
  • Soporte Técnico
Re:Creación de archivo bin de log con fecha en el nombre
« Respuesta #11 : agosto 26, 2022, 09:09:19 am »
Buenos días Miguel,

Le paso el proyecto DiskSamplerLog3B.zip actualizado:

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

El proyecto, ahora, actualiza la lista de links "/web/loglist.htm" a los archivos logs almacenados cuando la fecha cambia mientras está activado el log de datos.

Para ello se creo una nueva función llamada SamplersUpdateLogLinks() en Samplers.p, que se encarga de comprobar si la fecha actual es diferente a la fecha del último log agregado como enlace en el archivo "/web/loglist.htm".

Si la fecha actual ha cambiado desde la última vez que se agregó un link a "/web/loglist.htm", se agrega el link al archivo log.

La función SamplersUpdateLogLinks() es llamada cada "SAMPLERS_UPDATELOGLINK_TIME" segundos desde OnTimeout.p cuando el Timeout2 expira. La constante SAMPLERS_UPDATELOGLINK_TIME se define en Samplers.inc, y tiene un valor por defecto de 30 segundos (se puede cambiar).

Esto quiere decir, que una vez que se produce el cambio de fecha, si el log está funcionando, dentro de SAMPLERS_UPDATELOGLINK_TIME segundos se va a actualizar el archivo de links "/web/loglist.htm". Por lo tanto hay que esperar este tiempo para ver cambios en "/web/loglist.htm".

Leer código del programa y archivo info.txt dentro del proyecto, para comprender funcionamiento.

Saludos!
« Última Modificación: agosto 26, 2022, 09:11:43 am por Soporte »
SOPORTE TÉCNICO

Slicetex Electronics
www.slicetex.com