Inicio > Foro > controladores SlimLine e Netsyst (LogicLab) > Restablecer el sistema desde el programa de usuario
- Este tema tiene 14 respuestas, 2 participantes y se actualizó por última vez 1 año, hace 2 meses da Sergio Bertana.
-
autorPublicación
-
Septiembre 6, 2013 en 6: 49 am #35405Maurizio Contipartícipe
Me gustaría escribir una función de vigilancia que restablezca el PLC en caso de cualquier bloqueo (asumiendo claramente que el bloque deja operativa la función de vigilancia).
Es posible resetearlo Slimline del código ST?
Septiembre 6, 2013 en 6: 53 am #37754Sergio BertanaAdministrador del foroEste post me brinda la oportunidad de explicar en detalle todos los mecanismos de autocontrol del funcionamiento gestionado por el sistema operativo y por el hardware del SlimLine.
Los sistemas SlimLine tienen un circuito de vigilancia de hardware doble, uno basado en un circuito especialmente preparado y otro administrado internamente por el procesador ARM. Si el programa no actualiza cíclicamente estos dos perros guardianes, el sistema se reinicia en modo hardware, lo que obliga a reiniciar. Toda esta gestión se realiza específicamente para asegurar que cualquier bloqueo del sistema no lo bloquee, de hecho la norma IEC establece que en caso de bloqueos en el funcionamiento del programa el sistema se reinicia. También hay controles adicionales administrados en modo hardware por el procesador ARM que hacen que el sistema se reinicie:
El programa accede a un área de memoria incorrecta.
El procesador encuentra una instrucción incorrecta en el programa.
Los anormales están habilitados / deshabilitados.
La memoria del montón del procesador está dañada.Puede suceder que en el programa transferido al sistema haya un error grave que provoque el reinicio del sistema, en este caso me encontraría en un callejón sin salida, el sistema reiniciando vuelve a ejecutar el programa por error reiniciando y esto sin cesar. Así que esto es lo que si SlimLine reconoce que estaba conectado a una PC con el entorno de desarrollo LogicLab, en caso de error no reinicia el programa sino que entra en estado de programación.
Septiembre 6, 2013 en 7: 16 am #37755Sergio BertanaAdministrador del foroAñado la respuesta a su solicitud, como se dijo en el post anterior, SlimLine se reinicia si el programa no actualiza cíclicamente el circuito de vigilancia, por lo que si en su programa se queda atascado en un bucle infinito, hace que el sistema se reinicie. Por ejemplo, es posible escribir un programa del tipo:
MIENTRAS (Di00CPU) DO END_WHILE;
Como se puede ver al activar la variable Di00CPU (definida como% IX255.0, entrada 0 del módulo de la CPU), el programa se detiene en un bucle infinito que hace que el sistema se reinicie. SlimLine para intervención del circuito de vigilancia.
Attenzione! Eseguendo questo tipo di tests od in generale se il programma và sempre in errore può essere impossibile riconnettere il sistema a LogicLab, per risolvere il problema occorre eseguire un catch del sistema e la successiva cancellazione del programma (Vedi post).
Septiembre 9, 2013 en 4: 03 pm #37761Maurizio ContipartícipeTraté de configurar el reinicio haciendo coincidir 'apropiadamente' el programa con la instrucción MIENTRAS (VERDADERO) HACER END_WHILE;
El efecto que obtengo es perder el control de LogicLab (y creo que también la funcionalidad del PLC) con la señalización de ERROR en rojo en la barra de estado. A partir de aquí, ya no es posible conectarse al PLC con LogicLab. Para hacer esto, tengo que apagar y encender el PLC y luego todo vuelve al funcionamiento normal.Septiembre 10, 2013 en 1: 04 pm #37762Sergio BertanaAdministrador del foroEso es lo que querías lograr. Si lees bien mi publicación, cerrando el programa en un bucle infinito, el sistema se reinicia y luego comienza desde el principio (Exactamente como si estuviera apagado y encendido).
Su pregunta era reiniciar en determinadas condiciones, por lo que aquí el bucle infinito debe habilitarse solo en las condiciones en las que desea reiniciar.
Septiembre 11, 2013 en 10: 10 am #37767Maurizio ContipartícipeConfirmo lo que dices, el programa se reinicia pero se pierde la capacidad de controlarlo SlimLine por LogicLab. Incluso si desactiva la conexión y luego la vuelve a activar, o si sale y vuelve a ingresar LL, ya no podrá conectarse al SlimLine. La única forma que he encontrado es apagarlo y encenderlo de nuevo. SlimLine, entonces también funciona LL.
Septiembre 11, 2013 en 10: 24 am #37768Sergio BertanaAdministrador del foro¿Pero qué tipo de conexión usas con él? SlimLine ?
Conexión en serie, debe reanudarse sin ningún problema.
Conexión TCP / IP en una red Ethernet, al reiniciar la conexión se pierde, debe deshabilitarse y luego volver a habilitarse.
Conexión TCP / IP en USB, debe desconectar y volver a conectar el cable USB y / o cómo apagar y volver a encender el dispositivo.Septiembre 11, 2013 en 4: 38 pm #37769Maurizio ContipartícipeUtilizo la conexión TCP / IP en USB; en realidad, si desconecto y vuelvo a conectar el cable USB después del 'reinicio', todo vuelve a funcionar. Seguramente esto es mejor que apagar / encender el PLC nuevamente.
Septiembre 11, 2013 en 4: 48 pm #37770Sergio BertanaAdministrador del foroEl problema es que el controlador RNDIS de Windows en el reinicio no nota la desconexión del sistema y, por lo tanto, mantiene activa la conexión USB, SlimLine en cambio, habiéndose reiniciado, interrumpió el punto final y, por lo tanto, ya no se comunica.
Desconectar el cable o apagarlo y volverlo a encender SlimLine no hay señal eléctrica en el USB de la PC que restablezca todas las conexiones activas.
Marzo 12, 2014 en 1: 53 pm #38128Maurizio ContipartícipeEl módulo OEM PCB131A020 comprado recientemente tiene un comportamiento diferente al del MPS050A020 después de un reinicio forzado: de hecho, mientras que el último se reinicia regularmente, el primero permanece estacionario (tengo que comenzar desde LogicLab). ¿Necesito configurar algo en alguna parte?
Marzo 12, 2014 en 2: 47 pm #38129Sergio BertanaAdministrador del foroIl Módulo OEM es exactamente el mismo circuito que se encuentra en el módulo MPS050A020 completo, por lo que no hay diferencias de circuito. Puede comprobar si el firmware instalado en los dos módulos es la misma versión SFW184 *** 0, de lo contrario, puede realizar una actualización (Ver notaPero me dices que tienes que empezar desde LogicLab, me preguntaba no es que al forzar el reset tengas LogicLab conectado, porque en este caso el sistema se resetea solo, pero el programa de usuario no entra en ejecución.
Octubre 11, 2019 en 2: 55 pm #50127RuboxpartícipeAl leer en el foro, me encuentro con publicaciones que me interesan, incluso si son "antiguas" por años y tengo preguntas tras preguntas.
Es interesante poder reiniciar el PLC colocándolo en un bucle infinito. ¿Hay alguna forma de saber que el sistema se ha reiniciado debido a algo anormal? ¿Como una bandera bool que me dice uno o más reinicios para el perro guardián?
Octubre 11, 2019 en 3: 03 pm #50194Sergio BertanaAdministrador del foroActualmente no existe ninguna variable que indique qué tipo de arranque tuvo el sistema, pero me parece interesante la idea y veamos si también podemos incluir esta posibilidad en una futura versión del sistema operativo.
Si quiere "comprender" que el sistema se ha reiniciado para un perro guardián creado por usted en el programa (bucle infinito), existe una solución. Antes de detenerse en el bucle, escriba un valor determinado en una ubicación de la memoria de respaldo (por ejemplo, asumiendo un UDINT 16 # 12345678). Luego, espere unos segundos para asegurarse de que se haya realizado una copia de seguridad de los datos, también puede sincronizar probando la variable SysBackupEnd, que debe activarse al menos 2 veces.
Ahora, al inicio, verifica el valor de la variable y, si es el valor que definió, el sistema se reinició debido a su comando. Por supuesto, justo después de la verificación, debe establecer el valor de la variable en 0.
Febrero 10, 2023 en 9: 44 am #70065Alessandro CampodonicopartícipeEncontré este viejo hilo, ya que estaría interesado en reiniciar el SlimLine del programa de usuario.
Me preguntaba si ha habido un "sistema alternativo para reiniciar el lo" implementado a lo largo de los años. slimline del programa, o si la solución debe mantenerse siempre válida
MIENTRAS (Di00CPU) HACER END_WHILE
Febrero 13, 2023 en 11: 06 am #70095Sergio BertanaAdministrador del foroPara reiniciar el sistema puede usar la función SysOSIDValue pasando como OSID la definición OSID_PLC_COMMAND con los valores:
- reboot: reinicia el sistema.
- restart: reinicia solo el programa del PLC, todas las variables se reinician.
Aquí hay un programa de muestra (Debe ejecutarse en la tarea Back).
PROGRAM RebootRestart VAR i : UDINT; (* Auxiliary variable *) Reboot : BOOL; (* Reboot command *) Restart : BOOL; (* Restart command *) END_VAR IF (Reboot) THEN i:=SysOSIDValue(TRUE, OSID_PLC_COMMAND, ADR('reboot')); END_IF; IF (Restart) THEN i:=SysOSIDValue(TRUE, OSID_PLC_COMMAND, ADR('restart')); END_IF;
-
autorPublicación
- Debe iniciar sesión para responder a este tema.