Como ya sabrás de otras entradas del blog o si eres alumno del curso de TIA Portal, sabes de mi predilección por hacer las secuencias de automatización es el uso de Set y Reset.
Esta vez te voy a contar cómo se puede usar el desplazamiento de bits en TIA Portal para crear una secuencia.
He de decir, que yo esto no lo uso, pero he visto usar el desplazamiento de bits en Step 7 clásico para realizar secuencias.
Y créeme que se puede usar muy, pero que muy mal.
Así que te voy a explicar cómo veo yo que se debe usar esta herramienta, y cómo no.
Contenido
¿En qué se basa este método?
Básicamente lo que haces es lo siguiente:
Inicialmente, con las condiciones de partida, cargas un «1» en el bit menos significativo del byte, palabra o doble palabra que quieras usar.
Luego, cuando se cumplan las condiciones de la siguiente etapa, mueves 1 posición hacia la izquierda de la palabra (o el ancho elegido).
De tal forma, que si el bit estaba en el M101.0, pasará a estar en el bit M101.1.
Cuando se cumplan las condiciones para pasar de etapa, pues ese bit pasará a estar en el M101.2
Y así, sucesivamente.
Lo vemos luego más detenidamente en el vídeo, pero a grandes rasgos de lo que se trata es de mover un bit por las diferentes posiciones de una palabra por ejemplo de cara a que cada posición de bit de dicha palabra, es una etapa de la secuencia.
Sustituyes un Set/Reset, por ese movimiento.
De por sí, esto podría parecer una buena forma de hacerlo, pero tiene sus limitaciones, por lo que no me gusta especialmente.
En cualquier caso, te lo voy a explicar por si lo ves, o si lo quieres probar.
Cómo NO debes usar el desplazamiento de bits para crear secuencias
Bajo mi punto de vista, lo que no debes hacer bajo ningún concepto es hacer tantas llamadas al movimiento del bit como partes tenga la secuencia.
Es decir, no poner N bloques de movimiento del bit.
La razón es que es un auténtico sin Dios a poco que se complique el programa.
Piensa que cuando vayas a mantener el programa, tú no vas a ver en ningún lado dónde se le va a dar valor a la marca M101.1 por ejemplo. No hay ningún sitio. Solo verás que se lee su estado, y nada más. Por lo que si quieres ver cuándo se le da valor, tienes que ir a la posición anterior (M101.0), y ver dónde hace la secuencia de mover el bit.
Si tienes 16 bits (por ejemplo), y tienes 16 segmentos con sus 16 movimientos de bit, eso es una chapuza (insisto, bajo mi punto de vista).
No porque el programa no vaya a funcionar bien, sino porque es una forma poco mantenible y muy confusa.
Y créeme, que cuando estás en una avería, te acuerdas de quién programó la secuencia. Bueno, de esta persona, y de varios integrantes de su familia.
Cómo SÍ puedes usar el desplazamiento de bits para crear secuencias.
Bueno, pues está claro ¿no?
Todo debe estar concentrado en un único sitio donde se vean todas las condiciones en un único segmento y en sólo un punto se haga mover los bits.1
Esto simplifica sobremanera el mantenimiento porque si buscas las referencias cruzadas de los bits o de la palabra, enseguida verás el sitio donde se produce la magia.
Tan sencillo como eso.
Muchas veces hacer las cosas bien, es más sencillo que hacerlas mal.
Y puedes pensar que quien va a hacerlas mal entonces… pues créeme que somos muy imaginativos a veces (yo el primero, ojo).
El vídeo de desplazamiento de bits
Como siempre, es más fácil de verlo que de explicarlo con texto, así que let’s go!
Fe de erratas
El el vídeo digo que al usar el desplazamiento a la derecha se introducen unos por la izquierda, y eso no es siempre cierto.
Como me han apuntado (Gracias Toni), es incorrecto ya que depende del signo.
Si el bit de signo es 1, se rellenan con 1. Si el bit de signo es 0, se rellenan con 0.
Esto me pasa por ir tan rápido. Pero ya veo que estáis atentos jeje.
¿Qué te ha parecido?
Seguro que habrás visto secuencias hechas con este estilo de programación e incluso seas asiduo de ellas.
Si quieres saber otros métodos de realizar secuencias tienes Grafcet en TIA Portal: 5 formas de crearlo
¿Cómo te gusta programar las secuencias?
Recuerda que si necesitas iniciarte con la programación de TIA Portal tienes el curso de iniciación con el que entender el funcionamiento de los autómatas de Siemens, programar en escalera y las pantallas Basic de Siemens… ¡todo en el mismo curso!
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.
16 Comentarios
Muy buena explicación,
Gracias.
Gracias Jairo.
El desplazamiento de bit yo lo he usado para dar movimiento o algún efecto en HMI.
Saludos
Sí, yo alguna vez también, pero poco la verdad.
Este tipo de secuencias la he visto programada en maquinas etiquetadoras de botellas, en las cuales el bit indicaba la presencia de la botella dentro de un carrusel, para su posterior etiquetado.
Sí claro, hay más aplicaciones. De hecho he añadido un enlace al principio de la entrada con un ejemplo que hice en el blog hace bastante tiempo.
Muy bien explicado Iñigo. Y tienes mucha razón al decir, que puede ser muy engorroso si hay muchas condiciones implicadas. Lo tuve que usar obligatoriamente en el proyecto de final de grado y la verdad que costó cuadrarlo todo, pero al final funcionó (espero saber la nota, que con esto de la pandemia se ha atrasado todo, a ver que tal).
Saludos!
Hola Iñigo bastante buena y sencilla la explicación que acabas de dar. Siempre he pensado que los registros de desplazamiento son muy aplicables pero también son complicados para entenderlos en la práctica. Entender el funcionamiento de un desplazamiento o un registro de desplazamiento no me parece complicado, es cuando lo encuentras en alguna aplicación que se hace difícil entenderlo. he tenido que trabajar en llenadoras de gaseosa donde utilizan el desplazamiento para verificar cuando se ha explotado una botella y también para colocar la tapa cuando la botella se ha llenado y a pesar de haberme acostumbrado al funcionamiento créame que todavía siento mis dudas de que si lo tengo claro o no. de todas manera tu explicación es muy buena y muy valedera. muchas gracias. Carlos Salazar
Gracias por compartir Iñigo, interesante tema!!
Yo lo utilizo para realizar registros de datos de posición de barras dentro de un horno pero lo utilizo en lenguaje scl funcional.
Interesante. He reproducido tu ejemplo con el simulador y las variables PosicionX y PosicionY tomaban valores muy extraños. he colocado un P_Trig inmediatamente después de la marca de reloj y todo ha empezado a funcionar a la perfección. Gracias por compartir.
Gracias por el video.
Respecto a Fe de erratas, creo que tampoco es así, ya que depende del tipo de dato con el que trabajes. Puede ser una WORD y no ser definida como entero, y, por lo tanto, no tener signo. Representa un simple binario natural. Y puede definida esa word como entero, en cuyo caso puede ser con signo o sin signo. Si es con signo, entonces sí sucederá lo que te apuntan. Pero en el caso de ser definida la MW como una WORD o como entero sin signo, no se rellena con unos. Saludos.
Estimado me parece muy bien video, tengo una duda como puedo hacer para que cuando de stop , se pare de mover el circulo por ejemplo en cualquiera de las etapas que se quedo , y se guarde en que etapa se quedo y al momento de darle start energice esa etapa y siga el proceso.
No borras la etapa y las salidas las condicionas a otros estados. No hace falta guardar en ningún lado la etapa, solo no la borres y cuando lo pongas en automático (con sus seguridades y arranque que deba tener), sigue haciendo lo que estaba haciendo.
HOLA MUY BUENA EXPLICACIÓN PERO SIGUIENDO TU EJEMPLO EN AWL PODRIAS EXPLICARME COMO LO ARIAS
GRACIAS
Si lo pasas a AWL, verás cual es el fundamento.