Slicetex Electronics - Foro

PLC - DAQ => STX8091 => Mensaje iniciado por: Mariano en octubre 06, 2018, 21:21:03 pm

Título: Detención indeseada PLC (solucionado)
Publicado por: Mariano en octubre 06, 2018, 21:21:03 pm
Buenas tardes Boris,

Tengo un problema de reinicio constante de un  PLC stx8091-d2 que hace de servidor para un único cliente remoto que por el momento es stx8091-d1. (Lo pasaré a D2 con el archivo que me pasaste).
El led debug parpadea en forma  normal y de repente queda encendido o apagado hasta cumplirse los 60 segundos asignados al watchdog.

La idea serìa sumar varios plc clientes más.

Adjunto proyectos cargados en el server como versión 20.0 y en el cliente como cl_casa_2

Estos plc se comunican por medio de un enlace parabólico. El puerto ethernet del server va a un modem/router y al mismo router el de la antena "access point". Son los únicos dos dispositivos conectados al router en este momento.

Desde el primer momento que se puso en servicio el sistema, se sucedieron detenciones esporádicas... (A veces se producían detenciones dos veces al día como también se ha dado el caso de no detenerse el programa en semanas) lo cual no influía en el desempeño del sistema sin dejar de ser indeseable por supuesto. Pero sucede que después de pasarlo a D2, actualizar firmware a versión 217 y cargarle las sentencias de uso de la EEPROM empezó a "detenerse el programa" en un período de tiempo indefinido que va entre los 5 y los 50 minutos según pude observar desde ayer a la mañana que estoy haciendo pruebas.

Comentarte también que el mismo proyecto lo tengo corriendo en un PLC del mismo modelo y también modificado a la versión D2 con el mismo firm 217 y programado con stx 1.9.3 en mi casa conectado a mi router. Accedo constantemente a ambos servidores (El que está en servicio y el que tengo a prueba) desde la dirección IP externa y el que está en prueba no presenta ningún problema y el otro sí.

Ya probé reiniciar reiteradas veces el modem/router y la antena y no doy con la falla.

La consulta sería como proceder para hallar el segmento de código que me está produciendo el "stop" del plc?

Había pensado en ir guardando en EEPROM números guías dentro del código pawn para acceder a él post reset y así intentar ver al menos en que punto del programa se produce la falla. Quería consultarte si tenés alguna herramienta o técnica que me pueda ayudar a aislar el problema.

Podrá caber la posibilidad de que algún problema de programación de más bajo nivel de la ejecución de sentencias o procedimientos sea responsable de estas paradas en el programa?

Este PLC está en servicio hace ya dos años y medio aproximadamente. Nunca le cambié la batería interna. Podrá ser causa del problema?

Saludos
Título: Re:Detención indeseada PLC
Publicado por: Mariano en octubre 08, 2018, 12:15:53 pm
Hola Boris,

La última prueba que hice fue desconectar la antena del modem y aunque sigue bloqueándose y reseteandose por wdt. El intérvalo de tiempo entre bloqueos parece haberse prolongado desde los 5 minutos aproximadamente a los 60 minutos aproximadamente.

Será alguna cuestión vinculada a buffers llenos o interferencia entre eventos?

En el PLC que tengo encendido en laboratorio no se produce reset alguno en los tres día que está funcionando. Este está conectado al router en mi casa, pero no hay aquí antena que tenga que transmitir/recibir datos, por lo cual asumo que la ejecución del evento correspondiente @OnTcpServerRx() ha de ser mucho más rápida.

Se me hace que es un problema de interferencia o "cuelgue" de algún evento...

Saludos
Título: Re:Detención indeseada PLC
Publicado por: Soporte en octubre 08, 2018, 17:30:06 pm
La última prueba que hice fue desconectar la antena del modem y aunque sigue bloqueándose y reseteandose por wdt. El intérvalo de tiempo entre bloqueos parece haberse prolongado desde los 5 minutos aproximadamente a los 60 minutos aproximadamente.

¿Sin conexión desde afuera, ocurre también el problema?.

¿Conmutas alguna bomba, o carga con rele, contactor, etc, igualmente?.

En el PLC que tengo encendido en laboratorio no se produce reset alguno en los tres día que está funcionando. Este está conectado al router en mi casa, pero no hay aquí antena que tenga que transmitir/recibir datos, por lo cual asumo que la ejecución del evento correspondiente @OnTcpServerRx() ha de ser mucho más rápida.

En @OnTcpServerRx() proba el siguiente código en remplazo de: while((Id=TcpServerGetUnreadId()) > 0)

Código: (Pawn) [Seleccionar]
for(new Count=0; ((Id=TcpServerGetUnreadId()) > 0) && (Count < 100); Count++)
Para evitar que si por algún motivo la función TcpServerGetUnreadId() devuelve siempre mayor a cero, no se bloqueé el código en el evento y dispare el watchdog.

Ya que es la única parte que veo que es potencialmente peligrosa.

El resto de las funciones que llamás dentro dentro del evento, no generan retardos, más allá de lo normal de ejecución del procesador.

Escribir en la EEPROM genera un pequeño retardo, pero es de 5 a 10 mS por cada operación.

Se me hace que es un problema de interferencia o "cuelgue" de algún evento...

El evento solo se activa al recibir datos desde el cliente, si no los recibe, no se ejecuta.

Pero sospecho de ruido eléctrico, ya que en el laboratorio no te da problemas, y acá si.

Las cargas como bombas, ¿las controlás a través de un contactor o relé?.

Saludos!






Título: Re:Detención indeseada PLC
Publicado por: Soporte en octubre 08, 2018, 17:41:17 pm
La consulta sería como proceder para hallar el segmento de código que me está produciendo el "stop" del plc?

Había pensado en ir guardando en EEPROM números guías dentro del código pawn para acceder a él post reset y así intentar ver al menos en que punto del programa se produce la falla. Quería consultarte si tenés alguna herramienta o técnica que me pueda ayudar a aislar el problema.

No es mala idea, pero es una falla aleatoria de ese tipo, si es como la describís, puede ocurrir en cualquier momento y siempre en distinto punto del programa.

El programa no aparenta tener algo que salga fuera de lo común.

Creo que lo ideal seria ir eliminando funciones, para llegar al punto donde no se resetea.

Me inclinaría ha hacer la siguiente prueba, desconectando las salidas reles, tenes problemas?. Así descartamos ruidos eléctricos.

Por otro lado, desconectando la pantalla SH-300, tenes problemas?. La pantalla constantemente interrumpe al PLC, es algo que ya esta super probado, pero para descartar que la comunicación serie no esté interfiriendo de alguna forma con las operaciones que realizas.

Finalmente, es posible que en el PLC de prueba-servidor le conectes otro PLC-cliente y verifiques que todo te funciona sin problemas?.

Podrá caber la posibilidad de que algún problema de programación de más bajo nivel de la ejecución de sentencias o procedimientos sea responsable de estas paradas en el programa?

No lo descarto, pero no estoy seguro si es una falla de comunicación/programación o de ruido.

Este PLC está en servicio hace ya dos años y medio aproximadamente. Nunca le cambié la batería interna. Podrá ser causa del problema?

No, no debería afectar la batería al funcionamiento.
Título: Re:Detención indeseada PLC
Publicado por: Mariano en octubre 09, 2018, 09:19:51 am
¿Sin conexión desde afuera, ocurre también el problema?.

Con conexión desde afuera te referís a la entrada telefónica del router o a la entrada ethernet del PLC?

¿Conmutas alguna bomba, o carga con rele, contactor, etc, igualmente?.

Directamente desde este PLC no conmuto relé alguno. Lo único que tiene como periférico es un transductor de presión como entrada análógica, sus salidas a relé que cierran las entradas (digitales) de un kit arduino con transmisor de sms por gsm y un led indicador de reset por wdt. Y un pseudo led debug desde una de las salidas pwm usada como digital y otro led indicación de comunicación por enlace exitosa conectada a la otra salida pwm usada también como digital.

En @OnTcpServerRx() proba el siguiente código en remplazo de: while((Id=TcpServerGetUnreadId()) > 0)

Código: (Pawn) [Seleccionar]
for(new Count=0; ((Id=TcpServerGetUnreadId()) > 0) && (Count < 100); Count++)

La última prueba que hice ayer fue comentar o anular si se quiere
la llamada a los eventos

//TcpServerSetRxEvent()

y el de la pantaslla sh300

//MbRtuServInit(1, 9600, SERIAL_8E1, MB_RTU_INTERFACE_RS232);

Se sigue colgando el programa aunque anoche aguantó por lo menos 3 horas hasta donde pude ver. Esta mañana cuando abrí el webserver ya se habia colgado.

En cuanto a hardware el único cambio que hice fue el de la fuente de 12V por una similar a la que viene con el plc

Sigo probando
Saludos
Título: Re:Detención indeseada PLC
Publicado por: Mariano en octubre 09, 2018, 10:52:25 am
Como el cable utp que conecta al router con el plc es algo largo (12 mts aproximadamente) voy a probar cambiarlo por uno blindado y puesto a tierra.

Ahora, te recuerdo que este reset constante lo hace desde que cambié al plc a D2 y la versiones nuevas de stxladder y firmware.... será necesario que probemos volviendo a d1 y a algún firmware anterior para descartar que sea algún problema de las nuevas versiones?

Saludos
Título: Re:Detención indeseada PLC
Publicado por: Soporte en octubre 09, 2018, 11:04:14 am
Con conexión desde afuera te referís a la entrada telefónica del router o a la entrada ethernet del PLC?

No, me refería a si desconectando el Ethernet tenias la falla.

Directamente desde este PLC no conmuto relé alguno. Lo único que tiene como periférico es un transductor de presión como entrada análógica, sus salidas a relé que cierran las entradas (digitales) de un kit arduino con transmisor de sms por gsm y un led indicador de reset por wdt. Y un pseudo led debug desde una de las salidas pwm usada como digital y otro led indicación de comunicación por enlace exitosa conectada a la otra salida pwm usada también como digital.

¿Por casualidad alimentás el kit Arduino u otro circuito con la salida de tensón +5D del PLC?.

La última prueba que hice ayer fue comentar o anular si se quiere
la llamada a los eventos

//TcpServerSetRxEvent()

y el de la pantaslla sh300

//MbRtuServInit(1, 9600, SERIAL_8E1, MB_RTU_INTERFACE_RS232);

Se sigue colgando el programa aunque anoche aguantó por lo menos 3 horas hasta donde pude ver. Esta mañana cuando abrí el webserver ya se habia colgado.

Fíjate de comentar también la inicialización del servidor TCP y desconectar el cable del SH-300 directamente.

Código: (Pawn) [Seleccionar]
// TcpServerInit(82, 30) 
Título: Re:Detención indeseada PLC
Publicado por: Soporte en octubre 09, 2018, 11:11:02 am
Como el cable utp que conecta al router con el plc es algo largo (12 mts aproximadamente) voy a probar cambiarlo por uno blindado y puesto a tierra.

Si, puede ayudar.

Ahora, te recuerdo que este reset constante lo hace desde que cambié al plc a D2 y la versiones nuevas de stxladder y firmware.... será necesario que probemos volviendo a d1 y a algún firmware anterior para descartar que sea algún problema de las nuevas versiones?

Bueno, cabe esa posibilidad después de todo, lo que me llama la atención, es que corro tu programa y no presenta problemas.

Te puedo pasar para cambiar a modelo D1 y que pruebes.

Por otro lado, ¿te acordás que versión de firmware utilizabas sin problema?. Para verificar si hay algún cambio relacionado.

Saludos!
Título: Re:Detención indeseada PLC
Publicado por: Mariano en octubre 09, 2018, 15:24:54 pm
Hola Boris

No, me refería a si desconectando el Ethernet tenias la falla.

La unica forma que tendria de corroborar que no se cuelgue seria por la "no indicacion de encendido" del led que se activa por reinicio de wdt. Ya que no podria acceder al webserver del plc. Pero hago la prueba y te aviso.


¿Por casualidad alimentás el kit Arduino u otro circuito con la salida de tensón +5D del PLC?.

Lo único q alimento es un led de indicación de reset por desborde de wdt. El arduino y demás tienen alimentación propia y sólo comparten el negativo común.


Fíjate de comentar también la inicialización del servidor TCP y desconectar el cable del SH-300 directamente.

Código: (Pawn) [Seleccionar]
// TcpServerInit(82, 30)

Lo hago y te aviso.

Con respecto al cable utp, lo cambié esta mañana por uno con blindaje puesto a masa.


Bueno, cabe esa posibilidad después de todo, lo que me llama la atención, es que corro tu programa y no presenta problemas.

Te puedo pasar para cambiar a modelo D1 y que pruebes.

Por otro lado, ¿te acordás que versión de firmware utilizabas sin problema?. Para verificar si hay algún cambio relacionado.


Pasamelo para probar ya que aparentemente no ha habido modificaciones en el circuito. Digo aparentemente porque en la caja metálica puesta a tierra donde se haya instalado el PLC no he cambiado nada y en lo que hace al resto de la instalación por lo que he podido revisar no encuentro ni cables cortados ni nada que me haga sospechar de algún desperfecto eléctrico en el circuito.

Por mi parte resumo todas las pruebas y las hago en un rato para informarte Boris.

Gracias por tu tiempo y asesoramiento.




Título: Re:Detención indeseada PLC
Publicado por: Soporte en octubre 09, 2018, 18:50:57 pm
La unica forma que tendria de corroborar que no se cuelgue seria por la "no indicacion de encendido" del led que se activa por reinicio de wdt. Ya que no podria acceder al webserver del plc. Pero hago la prueba y te aviso.

Claro, si, me llama la atención porque casi no te quedan cosas para desactivar en cuanto a software.

Pasamelo para probar ya que aparentemente no ha habido modificaciones en el circuito. Digo aparentemente porque en la caja metálica puesta a tierra donde se haya instalado el PLC no he cambiado nada y en lo que hace al resto de la instalación por lo que he podido revisar no encuentro ni cables cortados ni nada que me haga sospechar de algún desperfecto eléctrico en el circuito.

Bueno, ya te voy a pasar el archivo para pasar de D2 a D1.

¿Cabe la posibilidad de que remplaces el PLC por el del laboratorio?.

Saludos!
Título: Re:Detención indeseada PLC
Publicado por: Mariano en octubre 09, 2018, 20:32:31 pm
Estimado Boris,

Si no queda más alternativa voy a probar con el otro PLC pero espero para probar el cambio de D2 a D1.

La ultima prueba que hice fue desconectarle el panel sh300 y el puerto Ethernet y anular las sentencias que me indicaste además de las dos q hacían uso del panel.

No hubo reset pero habría que probarlo un par de días para tener certezas

Saludos
Título: Re:Detención indeseada PLC
Publicado por: Soporte en octubre 10, 2018, 10:46:30 am
Buenos días,

Si no queda más alternativa voy a probar con el otro PLC pero espero para probar el cambio de D2 a D1.

Adjunto archivos para cambio de D2 a D1.

Recordar que modelo D1 tiene mitad de memoria disponible, pero en firmware inferior a 211, no se comprueba que programa exceda limites y debería dejar cargar el proyecto original.

La ultima prueba que hice fue desconectarle el panel sh300 y el puerto Ethernet y anular las sentencias que me indicaste además de las dos q hacían uso del panel.

No hubo reset pero habría que probarlo un par de días para tener certezas

Otra prueba podría ser desconectar el cable ethernet, pero dejar solo el servidor web habilitado y ver si no se detiene. Luego conectar el cable ethernet y verificar.

Saludos!
Título: Re:Detención indeseada PLC
Publicado por: Mariano en octubre 10, 2018, 12:24:44 pm
Otra prueba podría ser desconectar el cable ethernet, pero dejar solo el servidor web habilitado y ver si no se detiene. Luego conectar el cable ethernet y verificar.

Si... así estoy probando. Cable ethernet desconectado y webserver habilitado. Agregué código en el programa para que me avise por sms si se cuelga y hasta ahora no lo hizo. Pruebo conectarle el ethernet dentro de un rato.

Recordar que modelo D1 tiene mitad de memoria disponible, pero en firmware inferior a 211, no se comprueba que programa exceda limites y debería dejar cargar el proyecto original.

Me dejará cargar todo el código incluso el que hace uso de la EEPROM?

Gracias por el archivo.

Pruebo y te aviso

Saludos
Título: Re:Detención indeseada PLC
Publicado por: Soporte en octubre 10, 2018, 12:50:51 pm
Me dejará cargar todo el código incluso el que hace uso de la EEPROM?

Si no recuerdo mal, si; pero no escribas arriba de los 16KB de la EEPROM, ya que lo limita internamente el modelo.

Saludos!
Título: Re:Detención indeseada PLC
Publicado por: Mariano en octubre 12, 2018, 16:32:25 pm
Estimado Boris,

Según las últimas pruebas que estuve realizando, estoy en condiciones de asegurarte que los problemas de bloqueo y reset por wdt del programa que suceden en el PLC son causa de alguna anomalía en las instrucciones que corresponden al TCP server.

Al inhibir las instrucciones de definición del puerto y la de activación del evento tcp la falla desaparece.

En la última prueba que realicé pasé el PLC a modelo D1. Le cargué el firmware v200 y el programa inicial que tenía en servicio (sin uso de instrucciones para la memoria EEPROM) y volvió a funcionar todo normalmente sin fallas.

Para esto, tuve también que instalar stxladder versión 1.8.2 en lugar de la 1.9.3. Esta última no me dejaba compilar el proyecto inicial (el que estaba normalmente en servicio) por falta de memoria RAM.

Necesitaría si podés revisar en que puede radicar la falla para poder poner en servicio el proyecto completo. En principio se me ocurre que podría devenir de alguna diferencia en las intrucciones de declaración del server TCP y/o del evento de recepción de datos que son las que, desactivadas interrumpen la aparición del bloqueo. O bien, de algún error al realizar la "mudanza" de modelo de D1 a D2 del PLC para que de esta forma se permita la carga total del proyecto. 

Quería agregarte que en la configuración del router están asignados los puertos 81 al webserver y 82 al tcp server. Donde pide el tipo de puertos entre TCP y UDP está definido en las dos alternativas como Both (ambos). Habrá algún conflicto con los números de puerto asignados. (No hay ningún otro servidor virtual instalado como sistemas de alarma o vigilancia ni nada por el estilo)

Saludos
Título: Re:Detención indeseada PLC
Publicado por: Soporte en octubre 16, 2018, 12:12:24 pm
Buenos días Mariano,

En la última prueba que realicé pasé el PLC a modelo D1. Le cargué el firmware v200 y el programa inicial que tenía en servicio (sin uso de instrucciones para la memoria EEPROM) y volvió a funcionar todo normalmente sin fallas.

Para esto, tuve también que instalar stxladder versión 1.8.2 en lugar de la 1.9.3. Esta última no me dejaba compilar el proyecto inicial (el que estaba normalmente en servicio) por falta de memoria RAM.

Voy a examinar más exhaustivamente la diferencias entre versiones, para determinar que puede haber cambiado y hacer algunas pruebas.

¿Podrías enviarme por mail, el proyecto que cargás al PLC que te funciona?.

El proyecto que no te funciona, ¿supongo que es el mismo que ya me pasaste, no?.

Quería agregarte que en la configuración del router están asignados los puertos 81 al webserver y 82 al tcp server. Donde pide el tipo de puertos entre TCP y UDP está definido en las dos alternativas como Both (ambos). Habrá algún conflicto con los números de puerto asignados. (No hay ningún otro servidor virtual instalado como sistemas de alarma o vigilancia ni nada por el estilo)

No, esto no creo que sea un problema.

Saludos!
Título: Re:Detención indeseada PLC
Publicado por: Mariano en octubre 16, 2018, 17:55:37 pm
Buenas tardes Boris

Te comento las últimas pruebas. Si bien el programa original anduvo un tiempo sin presentar fallas. Después de unas 7 u 8 horas comenzó a bloquearse cada intérvalos de 40 o 50 minutos mayormente y a veces llegaba a funcionar un par de horas hasta que se volvía a bloquear. Esto es, corriendo el programa original, con PLC en modo D1, firmware v200 e instalado con stxladder 1.8.2

Se me ocurrió cambiar los puertos 81 y 82 a otros números y al parecer se solucionó la falla y no volvió a resetearse. Entonces le cargué el programa completo. (Sólo que en modo D1 me dejaba usar la mitad de la EEPROM). No hubo fallas. Lo que hice hace una hora, fue mudar todo de nuevo. PLC a D2, StxLadder a 1.9.3 etc. Lo estoy probando y te aviso. Al parecer el reset se origina por usar esos números de puerto... o bien por lo menos uno de ellos (calculo el 82 asignado al TCP) es el que causaba el problema...

Voy a examinar más exhaustivamente la diferencias entre versiones, para determinar que puede haber cambiado y hacer algunas pruebas.

Con respecto a esto, tal vez no haya diferencias entre versiones, ni de D1 a D2 ni en los entornos de Stxladder. Dejame completar esta última prueba para no buscar la falla en vano.

Lo que sí sería conveniente es que el PLC de algún tipo de aviso ante este tipo de errores sin que el programa se llegue a bloquear y ser necesario un reset por watchdog de todo el PLC. Esto es a los fines de que no entren en juego los actuadores que dependen en todo momento de las distintas salidas.

Saludos

Título: Re:Detención indeseada PLC
Publicado por: Soporte en octubre 17, 2018, 11:04:04 am
Buenos días Mariano,

Se me ocurrió cambiar los puertos 81 y 82 a otros números y al parecer se solucionó la falla y no volvió a resetearse. Entonces le cargué el programa completo. (Sólo que en modo D1 me dejaba usar la mitad de la EEPROM). No hubo fallas. Lo que hice hace una hora, fue mudar todo de nuevo. PLC a D2, StxLadder a 1.9.3 etc. Lo estoy probando y te aviso. Al parecer el reset se origina por usar esos números de puerto... o bien por lo menos uno de ellos (calculo el 82 asignado al TCP) es el que causaba el problema...

No podría haber imaginado una solución de ese tipo, bastante extraño, a lo mejor ambos puertos deban estar un poco más separado para evitar algún conflicto. Pero intento comprender a que se puede deber, ya que no debería ser así.

Lo que sí sería conveniente es que el PLC de algún tipo de aviso ante este tipo de errores sin que el programa se llegue a bloquear y ser necesario un reset por watchdog de todo el PLC. Esto es a los fines de que no entren en juego los actuadores que dependen en todo momento de las distintas salidas.

Si, es que pudiendo reproducir la falla me seria más fácil entender el por qué. El manejo de comunicaciones por parte del PLC es una "tarea" independiente, por lo tanto es raro que si se "bloquea" detenga al resto de las actividades.

Es decir, si se cuelga en la "comunicación" y nunca devuelve el control al programa del PLC, es lógico que se te dispare el watchdog, ya que no lo podes alimentar.

Si se cuelga en la "comunicación", pero de alguna forma sigue respondiendo, por ejemplo si conectas StxLadder y lo interrogás para ver información menú "PLC > Configurar PLC", y responde, es porque de alguna forma no está totalmente bloqueado, pero falla al devolver el control al PLC.

Si no responde nada, es algún tipo de otra falla interna, como error de memoria o un error no contemplado.

Pero comentame como sigue.

Saludos!
Título: Re:Detención indeseada PLC
Publicado por: Soporte en octubre 17, 2018, 16:23:22 pm
Algo que me olvidé de sugerir para que pruebes, es llamar al siguiente comando al inicio del programa en PlcMain() por una sola vez:
 
Código: (Pawn) [Seleccionar]
   // Desactivar TCP split en stack TCP/IP.
   NetTcpSplitOff()

Utilizar tanto en el cliente, como en el servidor (es decir ambos PLC tienen que estar configurados con esta opción al iniciar para que se puedan comunicar).

Esto evita que el PLC divida los paquetes TCP para mejorar desempeño, pero que quizás con tu router este dando problemas.

Saludos!

Título: Re:Detención indeseada PLC
Publicado por: Mariano en marzo 15, 2019, 12:44:02 pm
Hola Boris,

Queria comentarte con respecto a este tema que no hubo un sólo reset indeseado más luego de los cambios de número de los puertos tcp y webserver.

Saludos
Título: Re:Detención indeseada PLC
Publicado por: Soporte en marzo 15, 2019, 13:43:20 pm
Hola Boris,

Queria comentarte con respecto a este tema que no hubo un sólo reset indeseado más luego de los cambios de número de los puertos tcp y webserver.

Saludos

Perfecto, es bueno saberlo.

Saludos!