Hoy vamos a ver qué instrucciones tienes que usar, si en un momento dado, quieres anular un OB cíclico.
Este post ha nacido a raíz de la consulta de Álvaro, suscriptor y flamante poseedor de Cómo programar Step 7 y no morir en el intento.
Contenido
Anular un OB cíclico en Step 7
Entre los dos hemos intentado dar una solución a un problema que tiene, pero que lamentablemente no hemos podido solucionar a día de hoy.
Se trata de que tiene dos OB cíclicos, el OB37 a 20ms y el OB38, configurado a 2ms como se muestra en la imagen.
La cuestión es que debido a lo que tarda en ejecutarse el OB37, unos 10ms según me ha contado, cuando se realiza la llamada al OB38, da error en la interrupción cíclica como muestra la siguiente imagen:
Como ves, cada 2ms da el error, con saltos de 10ms sin darlo.
Esto confirma, por un lado el error, y por otro, que la ejecución del OB37 dura aproximadamente 10ms.
¿Qué solución hay para atajar este problema?
Para solucionar este tipo de problemas, existen dos funciones de sistema para poder intervenir la ejecución de un OB , que puede ser de diferentes tipos.
Se trata del SFC39.
La ayuda de Siemens, dice lo siguiente:
La SFC 39 «DIS_IRT» (disable interrupt) permite bloquear el tratamiento de nuevos eventos de alarma y de error asíncrono. Bloquear significa que el sistema operativo
- no llama un OB de alarma o uno de error asíncrono,
- ni tampoco activa la reacción prescrita para un OB de alarma o uno de error asíncrono no programados.
El bloqueo del tratamiento de eventos de alarma y de error asíncrono permanece activo en todas las prioridades. Sólo se puede desactivar con la SFC 40 «EN_IRT», y también realizando un rearranque completo (arranque en caliente) o un arranque en frío.
El sistema operativo inscribirá en el búfer de diagnóstico el evento de alarma o de error asíncrono ocurrido en función de cómo se haya seleccionado el parámetro de entrada MODE.
Los diferentes bloques que se pueden anular la ejecución son alarmas de tipo:
- Horarias
- Retardo
- Cíclicas
- Proceso
- DPV1
- Multiprocesamiento
- Error de redundancia
- Error asíncronas: 80
¿Cómo volvemos a la normalidad?
Existe, el SFC40 «EN_IRT», para deshacer la anulación.
Como antes, Siemens lo define así:
La SFC 40 «EN_IRT» (enable interrupt) permite reanudar el tratamiento de los nuevos eventos de alarma y de error asíncrono que había sido bloqueado con la SFC 39 «DIS_IRT». Bloquear significa que el sistema operativo de la CPU
- llama un OB de alarma o uno de error asíncrono,
o
- activa la reacción prescrita para un OB de alarma o uno de error asíncrono no programados.
¿Los vemos trabajar en un vídeo?
Siemens tiene muchísimas cosas buenas.
Sus manuales de Step 7, no es una de ellas (en TIA han mejorado bastante).
Te presento un pequeño ejemplo en el que podrás ver cómo puedes anular un OB cíclico en Step 7 y así ver cómo funciona en vivo.
Funciona genial, ¿qué ha pasado?
Como te he comentado al principio del post, aunque Álvaro ha estado haciendo muchas pruebas y yo le he intentado ayudar haciendo mis pruebas, no hemos podido hacer que funcione en su caso.
La razón, es que si observas las imágenes de arriba, el usa WinCL en su aplicación.
Aparentemente, al tratarse de un PLC por software, la «cosa», no funciona.
Y no solamente con WinCL, sino con el PLCSIM, tampoco.
Comprobado.
Varias veces.
Así que si conoces una forma de echar una mano con este problema, seguro que Álvaro tiene las orejas bien abiertas.
¿Conocías estas funciones?
Si te soy sincero, hasta conocer este problema, nunca había probado estas funciones. No he tenido necesidad.
Y puede que no la tenga nunca.
Ni tú tampoco.
Pero reconozcamos que conocer estas cosillas, siempre están bien.
Ya sabes que si necesitas ayuda directa, y no solamente la que puedes encontrar en el blog, tienes todos mis cursos con los que meter una velocidad más. Porque acompañado, siempre se va más rápido ¿no crees?
Enseño a programar PLC de Siemens a través de mis cursos.
Más información sobre mi aquí
Puedes seguirme en cualquiera de las siguientes redes sociales.
5 Comentarios
Hola lñigo, muchas gracias por tus aportaciones te escribo de México CDMX mi nombre es Antonio, ysabes me ha surgido la necesidad de convertir la fecha en día Juliano. Como piensas que sea la mejor solución?. Agradezco tu pronta respuesta Saludos.
Ostras! A día Juliano. Tendrás que calcularlo, porque que yo sepa, no hay una función que lo haga.
Tienes una orientación aquí:https://support.industry.siemens.com/cs/document/19105935/%C2%BFqu%C3%A9-es-la-fecha-juliana-modificada-y-c%C3%B3mo-se-calcula-con-el-step-7-?dti=0&lc=es-ES
Gracias Iñigo.
Interesante como siempre tus videos , practicos y amenos. Ahora aplicarlos.
Un saludo.
Gracias Jesús!
Super interesante Iñigo!
Hay funciones de Siemens que son muy interesantes y valdría la pena dedicar un poco de tiempo a ellas.
Saludos!!