Si has trabajado en TIA Portal con la serie S7-1200 o S7-1500 habrás podido comprobar que trae nuevas mejoras que son realmente útiles a la hora de programar.
Una de ellas, es la descomposición del reloj del sistema, de tal forma que podemos tener las variables tipo DTL que son una estructura en la que puedes descomponerla en TuVariable.year o TuVariable.Minute, para obtener por ejemplo, el año y el minuto del reloj respectivamente.
Pero he aquí la sorpresa cuando a pesar de trabajar con TIA Portal, intentas hacer lo mismo con la serie 300 en TIA Portal.
¡Esta opción no existe!
Aprovechando una duda de uno de los alumnos del curso de Step 7 sobre los UDT, he realizado este ejemplo, que espero que aune la explicación de qué es un UDT y para qué lo podemos usar, con la utilidad de crear una variable estilo DTL para la serie 300.
Y es que teniendo unos conocimientos medianamente sólidos, puedes realizar muchas cosas que TIA Portal o Step 7 tradicional no traen out of the box, que dicen los anglosajones (que viene a ser algo así, como nada más sacarse de la caja,).
Bueno, pues sabiendo que no lo trae, pero que lo queremos conseguir… al lío.
Cómo crear una variable DTL en la serie 300 en TIA Portal
Un UDT (User Defined Type) no es mas que una estructura de datos definidos por el usuario, que una vez creados, pueden ser utilizados como variables simples o compuestas a lo largo del proyecto, tanto dentro de los bloques, como variables de entrada, salida etc en los interfaces de estos bloques.
Para nuestro caso, la idea es la siguiente:
- Creamos un UDT que contenga todos los datos para crear tu DTL en la serie 300, desglosada según estas variables:
- Año
- Mes
- Dia
- Hora
- Minuto
- Segundo
- Milisegundos
- Dia de la semana
- Creamos un bloque FC, cuya salida, apunta a una variable del tipo UDT que hemos creado donde vuelca la información del reloj
- Creamos un DB y lo llamamos «Reloj» o algo similar, y dentro declaramos una variable llamada «Now», por ejemplo.
- Realizamos la llamada a este FC y cuya salida la vuelque en «Reloj».Now
Así, podremos tener esta pequeña función, que la cargaremos en todos nuestros proyectos donde vayamos a usar la hora para algo, de tal forma que tendremos una variable que tiene la hora del sistema, con la misma pinta que tiene los DTL
El vídeo
Como siempre, te dejo con un vídeo donde verlo más detalladamente.
Fé de erratas:
En el vídeo digo que los UDT son User Data Type (Tipos de Datos de Usuario), y es incorrecto. Son User Defined Type (Tipos Definidos por el Usuario). Espero que me perdones este error al desplegar el acrónimo. He parcheado el vídeo para que aparezca correctamente.
Fé de erratas 2:
El ejercicio no es correcto usando el AR1 ya que al escribir en la salida sobre una estructura de un DB, el PLC usa el AR1 para poder leer/escribir. Por lo que para corregirlo usa el AR2.
¿Qué te ha parecido?
¡Espero tus comentarios!
Seguro que ya usas algo parecido, y espero que te sea de interés si no lo habías pensado.
Dejo en este caso, los proyectos del vídeo en dos sitios diferentes, al estar realizado tanto en TIA Portal (V13) como en Step 7 tradicional.
Quedan inscritos en el bloque 1 del curso de TIA Portal, y en el curso de Step 7 tradicional.
Recuerda que puedes apuntarte en Guorker.com donde por una cuota mensual, tendrás tarifa plana en todos los cursos disponibles en la plataforma.
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.
12 Comentarios
Cuando seleccionas un bloque, debes saber seleccionar también los tipos de variables para guardarlas en
registros y a continuación usarlas para desplegar en un HMI o para el mismo programa en PLC, ya que en marcas o en bits…..
Saludos…
Hola Alejandro, no entiendo muy bien que has querido decir.
Quisiera saber como programar el fc, ya que veo que el bloque tiene una salida o un retorno, quisiera saber tambien en que formato programo el segmento 3 del bloque fc, y si se puede hacer el kop, yo necesito leer el mes y el día para crear una contraseña que cambie diariamente pero no se como leer específicamente esos valores, vi si tutoríal pero no se como programo el fc para qiebeñ plc sepa cual es el año, mes, día, etc.. Me seria de mucha ayuda su respuesta
En el ejemplo queda reflejado el proceso. A partir de ahí, si necesitas más ayuda tal vez deberías considerar fórmate en la programación.
Super facil, gracias por la explicacion.
se agradece la explicaciòn
SE PUEDE SABER EL NUMERO DE SEMANA DEL AÑO CON ALGUN BLOQUE STANDAR EN TIA PORTAL V15
Sí, con la LGF_GetCalendarWeek_ISO de la LGF que te puedes descargar de aquí, o bien, calcularla. https://support.industry.siemens.com/cs/document/109479728/library-of-general-functions-(lgf)-for-simatic-step-7-(tia-portal)-and-simatic-s7-1200-s7-1500?dti=0&lc=en-DK
Buenos tardes,
El AR1 que mencionas en el minuto 22 aprox. lo tienes al revés. Si quieres guardar el valor primero debes cargarlo con la instrucción LAR1 para transferirlo a la variable temporal que llamas DireccionAR1 y luego al final del código lo cargas primero cargando el valor de DireccionAR1 y lo cargas con TAR1.
Quedaría así:
LAR1
T DireccionAR1
.
.
.
L DireccionAR1
TAR1
Saludos!
ehhmmm no. Está bien como está.
LAR1 es para cargar EN el AR1
y TAR1 es para recuperar DEL AR1.
Pues tienes toda la razón, hace tantos años que no uso esas instrucciones.
TAR1 -> ACU1
De allí, lo cargas a tu variable.
Disculpa!
Es normal la confusión porque es anti intuitivo respecto a las instrucciones L/T