Inicio > Foro > Programación IEC 61131 (LogicLab) > Realice DataLogger con historización en servidor FTP
tagged: ftp ftpClient warning
- Este tema tiene 19 respuestas, 1 participante y se actualizó por última vez 4 años, hace 1 mes da Sergio Bertana.
-
autorPublicación
-
Abril 4, 2016 en 9: 17 am #35987Sergio BertanaAdministrador del foro
He recibido solicitudes de clientes que desean utilizar nuestros productos SlimLine e Netsyst para crear un DataLogger. En la práctica, la necesidad es adquirir valores analógicos y digitales o leer datos de instrumentos a través de Modbus y registrarlos a intervalos regulares en un archivo csv en el sistema local.
Para este requisito fácilmente alcanzable con el FB StringToLogFile_v1 (Tema), Agregué la posibilidad de transferir el archivo de registro desde el disco local del sistema a un servidor remoto en la nube a través del protocolo FTP usando el FB FtpClient (Tema).
El problema a superar en esta aplicación es guardar los registros mientras se realiza la operación de transferencia del archivo local al servidor FTP. Este problema se supera fácilmente con el FB FIFOFile, que permite que los datos se almacenen en un archivo y luego se extraigan cuando sea posible (Tema). Como puede ver, el programa de ejemplo historiza los datos en el FIFO cada minuto y, al mismo tiempo, si el archivo de registro local está libre, lee del FIFO y los guarda en el archivo csv.
La conexión al servidor remoto se realiza cada hora (en el ejemplo está en el sitio AlterVista) y el archivo local se transfiere al servidor remoto. El nombre del archivo en el servidor remoto se crea componiendo el valor de Fecha / Hora al que se refiere el registro (Tendremos archivos del tipo 20160404-23.csv, 20160405-00.csv, etc ...).
El programa fuente se proporciona para que todos puedan modificarlo según sus necesidades (Imprimir programa, Descargar programa).
Febrero 9, 2017 en 12: 25 pm #39839SergiopartícipeHe estado usando el programa Ptp139a000 durante algunos meses después de modificarlo para las necesidades de mi cliente en la parte de generación de cadenas, pero la lógica de estado sigue siendo la original. Solo encontré un pequeño problema: ocasionalmente, dos veces, la segunda hace dos días, la llamada
iSysremove: = (Logger.Filename); (* Puerta de archivo local *)
falla y, por lo tanto, el archivo aumenta de tamaño y los encabezados se replican cada hora. SysLastError es simplemente 9961200 Error al eliminar el archivo. Si detengo el programa, el sistema se reinicia sin problemas y la última vez continuó durante 10 días.
Pensé que podría ser un problema debido al bloque FTPClient (eLLabNetworkLib_A200) que no libera el archivo y, para solucionarlo, pensé en modificar el programa para separar las dos operaciones (esperar a que finalice ftp, eliminar) con un nuevo caso 13. Pero también podría depender del bloque StringToLogFile_v1 y luego pensé en agregar:
Logger (Enable: = TRUE, Write: = FALSE);antes de Sysremove.Febrero 9, 2017 en 1: 51 pm #39840Sergio BertanaAdministrador del foroViste bien en el FTPClient FB había un bug que podía crear el problema que te quejas, corrigí el FB y creé la nueva versión del programa PTP139A100, puedes descargar desde el sitio.
En esta versión está el nuevo FTPClient FB, puede abrir el proyecto y exportar el FB a su biblioteca, luego importarlo a su proyecto sobrescribiendo el antiguo FB.
Febrero 24, 2017 en 9: 54 am #39854PierluigipartícipeLe escribo porque he creado un programa para el registro horario en archivos mensuales de un cierto número de cantidades adquiridas a través de modbus RTU de 3 PLC schneider micro series. SlimLine actúa como concentrador de datos y registrador de datos, hasta ahora todo bien, los archivos se guardan correctamente en la tarjeta SD instalada en el vehículo y se pueden consultar y descargar a través de Filezilla.
Sin embargo, mi cliente necesitaría descargar los archivos a través de un script por lotes desde su servidor automáticamente y no pudo de ninguna manera conectarse al servidor FTP del slimline y descarga, ¿hay alguna solución?
Febrero 25, 2017 en 8: 24 am #39855Sergio BertanaAdministrador del foroSi, como usted dice, se puede acceder a los archivos a través de Filezilla pero el script por lotes del servidor no se conecta, el problema está en el script utilizado.
¿Está seguro de que está utilizando una conexión FTP y no SFTP? Puede ser que el programa FTP utilizado en el lote utilice comandos FTP no implementados en nuestro servidor FTP, en cuyo caso necesitaría un informe de conexión para comprender cuál es el problema.
Pero, ¿por qué descargar archivos de un servidor cuando puede ser SlimLine para enviarlos al servidor FTP en la nube, por cierto de esta manera la transferencia es posible incluso si es SlimLine está en una red NATtata y no es accesible desde Internet.
Febrero 27, 2017 en 1: 58 pm #39865PierluigipartícipeNecesito transferir periódicamente un archivo a FTP desde un sistema SlimLine, Escribí un archivo por lotes con los comandos:
@ ECHO OFF
Se inició la transferencia de eco FTP
ftp -s: cmd.ftp 192.168.0.xxx
eco Fin de la transferenciaAquí está el contenido del archivo de comando FTP "cmd.ftp":
Administración
Administración
cd / Almacenamiento
binario
obtener /nomefile.csv
renunciaPero no puedo descargar el archivo. No puedo subir datos a la nube porque no tengo acceso a Internet, la red de la planta está separada de la red de la planta donde hay Internet.
Marzo 6, 2017 en 7: 24 am #39866Sergio BertanaAdministrador del foroel comando ftp de Windows no maneja la transferencia pasiva que es la transferencia administrada por el servidor FTP SlimLine. Entonces, si desea descargar los archivos automáticamente, debe usar un servidor Linux (que admita la transferencia pasiva) o un cliente para Windows que admita la transferencia pasiva.
Pero dado que su sistema está en una red local, siempre puede descargar los datos automáticamente a su servidor FTP directamente desde SlimLine no es necesario utilizar la nube, solo defina la dirección IP de su servidor FTP.
Julio 27, 2018 en 6: 46 am #45166Anonimoinactivo¿Dónde puedo encontrar la última revisión del FTPClient FB? Lo pregunto porque estoy realizando algunas pruebas comparativas entre los bloques de función que se encuentran entre las diversas publicaciones del foro, FTPClient y FTPClient_v1 y por ahora solo el bloque FTPClient funciona sin incurrir en error. El bloque FTPClient_v1 que tengo en mi poder genera la siguiente advertencia durante la compilación:
warning G0015: MOVE => Accumulator extension
y el siguiente error de tiempo de ejecución:
[Admin]> syslog
[W] SFW184 [26/07/2018 14:52:31] 6000, User program error:10063030Julio 27, 2018 en 6: 57 am #45171Sergio BertanaAdministrador del foroLa última versión de FTPClient_v1 se puede encontrar en la biblioteca de redes eLLabNetworkLib_B000, descargable desde el sitio. La nueva versión v1 en comparación con la anterior gestiona la asignación dinámica de búferes de memoria (Utilizando la función RMalloc). De esta forma es posible dimensionar como se desee los paquetes TCP intercambiados con el servidor (el máximo es 1500 bytes).
El error 10063030 indica que no se ha definido el tamaño del búfer (parámetro DBSize), probablemente haya utilizado un proyecto realizado con la versión anterior y no haya definido el parámetro. Eche un vistazo aextracto del manual y vea el ejemplo que se muestra.
Agosto 29, 2019 en 6: 06 am #49451FedelepartícipeEstoy usando la última versión de la biblioteca (eLLabNetworkLib_B100) y compilando el programa de ejemplo en modo SIMULACIÓN, tengo el siguiente error:
Generando bloque de funciones FTPClient_v1
abortada.FTPClient_v1 (394) - error G0129: NULL => Comparación entre referencia y no referencia
FTPClient_v1 (519) - error G0129: NULL => Comparación entre referencia y no referenciaAdvertencias 0, errores 2.
Septiembre 19, 2019 en 9: 22 am #49760RuboxpartícipeResucité esta publicación porque estoy preparando un sistema que envía automáticamente archivos de registro diarios a un servidor FTP.
Mirando la lista del programa, entiendo correctamente que si el servidor FTP no está disponible, el programa "se detiene" en la condición CaseNr 11 hasta que se establece la conexión. También para el caso 12, si la operación no se completa, ¿el programa continúa con el caso número 12?
Septiembre 19, 2019 en 9: 44 am #49786Sergio BertanaAdministrador del foroEl programa utiliza el FIFO FB para gestionar el registro, de esta manera el registro se guarda en el archivo FIFO y luego, si el archivo de registro está libre, se transfiere al archivo de registro (Caso 0), esto permite no perder registros cuando el archivo de registro está ocupado por transferencia FTP.
Cuando se ordena la transferencia del archivo de registro en el servidor (Caso 10), comienzan las secuencias de conexión que podrían entrar en error, en cuyo caso la salida se activaría Fault lo que trae ejecución al Caso 20.
En caso de error, se incrementa el número de errores y se espera un período de tiempo antes de reintentar el envío.
Entonces sí, por supuesto, el programa permanece bloqueado en el Case 11 hasta que se realiza la conexión al servidor, pero si no se conecta después del tiempo definido en el parámetro Timeout (Véase FTPClient_v1) la salida está activada Fault. Lo mismo ocurre con el caso 12 donde se espera la transferencia completa del archivo.
Septiembre 19, 2019 en 4: 12 pm #49787RuboxpartícipeMe perdí la línea 70 de la lista de PDF del programa, pensando erróneamente que toda la gestión de transferencia FTP estaba en la declaración CASE. Bien, ahora entiendo todo, y todo funciona también.
Realizo una copia de seguridad de los datos en un archivo en la tarjeta SD (por lo que hay algunos) y tan pronto como el día cambia, el programa envía el archivo anterior al servidor FTP.
Gracias por la aclaración de la ayuda siempre a tiempo.
Septiembre 20, 2019 en 6: 20 am #49790RuboxpartícipePermítame regresar a la lista del programa (asumiendo que estoy usando otro ligeramente diferente), pero asumiendo que estoy en el caso 20, encuentro Store = FALSE. Pasamos al caso 21 y después de 10 minutos paso al caso 10. Intenta la conexión y pasa al caso 11. Aquí si no hay servidor disponible (en mi prueba desconecté el cable de red) después de un tiempo de Timeout entra en falla.
Sin embargo, la línea 70 verifica que haya Store en TRUE y Fallo en TRUE para ir al caso 20 y manejar el error de conexión. La tienda se convierte en verdadera sólo después de conectarme al caso 11. He superado la verificación de tienda verdadera en la línea 70 y todo parece funcionar bien.
Septiembre 20, 2019 en 6: 32 am #49792Sergio BertanaAdministrador del foroEl FTPClient FB si tiene Connect = TRUE intenta conectarse al servidor FTP, si falla (como en su caso que desconectó el cable) después de que el tiempo de espera genere el error, 10063050 desactiva la conexión y se rehabilita volviendo a intentar conectarse.
Si no hay conexión, es inútil pasar a los casos posteriores, por lo que el programa no cambia deliberadamente al caso 20 sino que continúa esperando para completar la conexión. Si vuelve a conectar el cable, todo debería comenzar de nuevo.
Por supuesto, en esta condición, al estar detenido en el caso 11, seguiría teniendo bloqueado el archivo de registro local y los registros de registro saturarían el FIFO. Pero si no puede conectarse al servidor FTP, no hay mucho más que hacer.
En su caso, después de haber eliminado el control de los saltos de la tienda a la sincronización del caso 20, intente nuevamente y después de que 3 intente continuar guardando en el archivo de registro local, intente nuevamente enviarlo a la próxima fecha límite. Puede ser una solución para problemas de conexión que duran mucho tiempo. Pero si el cable de red se cae, continuará guardando en el mismo archivo de registro saturándolo. En el caso, proporcione una advertencia, tal vez con lámparas de señalización u otras.
-
autorPublicación
- Debe iniciar sesión para responder a este tema.