Saltar al contenido

ARRAYS en TIA Portal

Vamos con los Arrays en TIA Portal, lección facilita pero muy importante que, por supuesto, si te quieres dedicar a esto, debes saber, así que venga, vamos al lío.

Tabla de Contenidos

¿Qué es un Array en PLC?

Un array en los PLC, también conocido como vector o arreglo, es un tipo de dato que permite almacenar muchos datos dentro del mismo array. Se pueden crear muchos tipos de array; array of bool, array of int, array of real…

Venga, que te lo voy a explicar con dibujitos, que así se entiende mejor.

arrays en plc

Los arrays tienen dos características, la primera es que pueden almacenar diferentes datos, y la segunda, es que para cada dato, disponen de una porción de memoria en concreto. Tranqui, te pongo un ejemplo:

En el primer caso, array de 6 bool, significa que la variable es del tipo array of bool con un tamaño definido de 6, vamos, que puede almacenar hasta 6 valores booleanos. Para cada booleano, hay una porción de memoria (es como si el array fuera un cajón, y dentro del cajón hubieran diferentes cajitas para cada booleano) y dicha porción de memoria, tiene una ID propia, que es, en realidad, la posición del array.

¿Qué dato tiene almacenado la posición 3 del array? Pues tiene un dato booleano cuyo valor es 1.

¿Qué dato tiene almacenado la posición 1 del array? Pues tiene un dato booleano cuyo valor es 0.

¿Se va entendiendo?

Con el array de reales pasa igual. En la posición 2 del array tengo un dato del tipo real cuyo valor es 147.5.

Tienes que concebir el array como una caja donde, dentro de ella, hay un número definido de cajitas con una ID única (posición del array), donde cada cajita almacena un dato con un valor en concreto.

Decirte también que, por defecto, la posición inicial de un array es 0 (esto es modificable en TIA Portal, pero en muchos otros software o lenguajes de programación, no)

¿Cómo Crear un Array en TIA Portal?

Para poder crear un array en TIA Portal, necesitas de un Bloque de Datos (DB). Si no sabes lo que es, no te preocupes, te voy a enseñar como crearlo, aunque te explicaré en profundidad los DB en otra lección (la cual deberías ver si o si, es muy importante para no liarla en fábrica)

Decirte que NO❌ puedes crear un array en las famosas y tan utilizadas marcas (%M), las cuales te aconsejo que dejes de utilizar en tus programas STEP7 (en caso de que lo hagas).

¿El motivo? Son una auténtica basura revienta programas, pero ya hablaremos tu y yo de eso.

Bien, para crear un DB, te vas a Agregar un nuevo Bloque:

agregar nuevo bloque tia portal

Ahora pincha en Bloque de Datos, ponle el nombre que quieras y Aceptar (de momento, olvídate de lo demás):

crear db tia portal

Dentro de un bloque de datos puedes crear variables, el nombre que quieras y el tipo de dato que quieras (bool, byte, int, real…). Para crear un Array en TIA Portal, dentro del DB, en la columna «Tipo de Datos», debes poner Array[«x».. «y»] of «tipo», donde:

  • X es la posición inicial del array (número entero)
  • Y es la posición final del array (número entero)
  • Tipo es, como su nombre indica, el tipo de dato del array (bool, int, real…)

Fíjate que en «Tipo de Datos», con solo poner «a», TIA Portal te autocompleta la sintaxis de cómo declarar un array:

sintaxis declaracion array tia portal

Ahora te pido que crees (y así practicas) un array de 16 booleanos con posición inicial 0. Te debería de quedar esto:

array of bool tia portal

Fíjate que al lado del nombre de tu variable array, tienes una flecha. Despliégala, te aparecerán las posiciones del array, desde la 0 hasta la 15:

array of 16 bool tia portal

Realmente, y esto quiero que lo entiendas, la variable MiArray, es una variable del tipo Array of Bool, mientras que las 16 variables que contiene (MiArray[0], MiArray[1]… MiArray[15]), son variables tipo Bool.

Esto quiere decir que en tu programa, puedes llamar directamente a la variable MiArray[8] para acceder al dato que está almacenando, o bien escribirle un nuevo dato bool (esto lo vas a ver en un momentín)

Mira, te pongo otro ejemplo con el tipo de dato real, y esta vez, con una posición de inicio diferente de 0:

array of real tia portal

Se trata de un array del tipo real con 5 variables reales, que van desde la posición 3 hasta la 7, las variables son: SegundoArray[3], SegundoArray[4], SegundoArray[5], SegundoArray[6], SegundoArray[7].

¿Qué, a que mola? Pues espérate que esto solo es la puntita del iceberg…

Así que venga, continua! 💪

Cómo Crear un Array Multidimensional en TIA Portal

¿Sabías que en TIA Portal se pueden crear arrays de dos dimensiones? Si si, como lo lees, lo que vendrían a ser matrices, y en realidad, es muy fácil.

Para crear un array multidimensional en TIA Portal, simplemente debes utilizar la sintaxis Array[«x1».. «y1», «x2».. «y2»] of «tipo», donde en la primera parte defines las filas, y en la segunda las columnas. En este caso te pongo de ejemplo un array de 3 filas y 2 columnas:

array dos dimensiones tia portal

¿Esto mola, verdad? Pues espérate, que esto no acaba aquí, ya que un array multidimensional puede tener 2 o más dimensiones.

¿Hacemos un array de 4 dimensiones? Venga va 👇

array multidimensional tia portal

Qué locura, ¿Eh?

Esto es muy potente, pero también consume mucha memoria si te flipas, así que, como diría el tío Ben en Spiderman, «un gran poder conlleva una gran responsabilidad», así que utiliza los arrays multidimensionales sabiamente.

Aprender a programar en TIA Portal

Cómo Crear un Array Dinámico en TIA Portal

Pero Abel, a mi me gustaría crear un array cuya longitud sea variable, es decir, que no sea fija, dado que no se cuantos datos voy a necesitar y no quiero malgastar memoria.

Bien, déjame decirte Pelecero, que crear un array dinámico en TIA Portal, es posible, a medias.

Te explico.

Un bloque de datos, por definición, es un bloque que almacena datos, por tanto, es imposible que almacene una cantidad de datos sin conocer de antemano la longitud de los mismos, ya que el DB debe conocer previamente la cantidad de memoria que va a necesitar para esos datos. Por eso mismo, no es posible crear un array dinámico (sin especificar su tamaño) dentro de un bloque de datos.

Peeeeeeero puedes utilizar un array dinámico dentro de una Función (FC) para poder utilizar cualquier tamaño de array fuera de la misma…

…¿Qué, no se ha entendido? No pasa nada, Abel está aquí para explicártelo todo paso a paso.

Imagina que tienes 4 arrays de tipo Int, donde cada uno tiene una longitud diferente, y que tu quieres crear una función que consulte periódicamente los datos de todos esos arrays.

Imagina que tienes estos 4 arrays en tu bloque de datos:

arrays of int tia portal

Aquí muchas personas harían lo siguiente que vas a ver en la siguiente imagen (y no solamente personas que están aprendiendo, no, gente que lleva años trabajando como programador de PLC, también lo hace, que lo he visto con mis propios ojos y da auténtica vergüenza ajena):

4 arrays of int en fc tia portal

Muchos programadores harían esto, crear los 4 arrays exactamente iguales a los que tienen en el DB como entradas de la FC, algo típico de gente que no sabe utilizar TIA Portal ni de las herramientas que tiene a su alcance. Probablemente si tu no estuvieras leyendo esto, harías lo mismo, pero sería completamente normal, estás empezando y estás aprendiendo, pero esto lo hace gente que lleva tranquilamente 5 años o más programando PLC, y, que quieres que te diga, da vergüenza absoluta.

Luego vas a las instalaciones y te encuentras de cada programa que te entran ganas de pegarte un tiro.

Cómo tu ahora mismo estás aprendiendo de mi, mi deber es que aprendas bien y que no cometas estas barbaridades dignas de una completa y merecida disminución de sueldo.

Sí, te puede parecer radical, pero a base de hostias es como mejor se aprende.

Volvamos al ejemplo, si tu quieres que una FC lea los valores de diferentes arrays tipo Int, debes crearte un array en la FC tal que así:

array [*] tia portal

Con la sintaxis Array[*] of Int, tienes el array variable o dinámico, y te vale como entrada a la FC cualquier array int, sin importar su tamaño.

Por cierto, debo advertirte que, según siemens, esto se puede hacer tanto con los S7-1200 y S7-1500 a partir del firmware 4.2, pero te diré que con los S7-1200 a mi no me funciona, al menos en simulación. A la hora de leer los datos del array me da error de software, sin embargo el mismo programa con un S7-1500, si me funciona, así que al dato con eso, que no quiero que pierdas tiempo.

Cómo Recorrer un Array en TIA Portal

Para recorrer un array en TIA Portal, debes utilizar un bucle, que simplemente es una instrucción que te permite ejecutar el código dentro del mismo un número determinado de veces, número el cual determinas tu. Para recorrer arrays lo más fácil y cómodo es utilizar lenguaje SCL, así que, vamos a ello! 💪

Lo primero que debes hacer es en una FC, crear un segmento en SCL:

insertar segmento scl tia portal

Ahora pincha dentro del segmento en SCL, verás que arriba tendrás una función llamada for, pincha en ella y verás como TIA Portal te la crea en el segmento. En counter debes poner una variable tipo Int, te sugiero que te crees una en la pestaña temp, y en start count y end count, añade los números inicial y final que vas a contar (normalmente suelen coincidir con los números inicio y fin del array a recorrer). Se te debe quedar algo como esto:

bucle for scl tia portal

Bien, ahora para recorrer el array y asignarle valores, podrías hacer algo como esto:

recorrer array bucle tia portal

Cómo el array1 tiene un tamaño de 10 números enteros (desde la posición 1 hasta la 10), le pongo como índice el valor de «i», el cual incrementa en cada iteración del bucle en una unidad, empezando por el 1 y terminando en el 10, y como valor, le añado el propio valor de «i» en cada iteración, de tal forma que cómo resultado tendrías:

resultado recorrer array tia portal

Bueno Pelecero, hasta aquí esta lección, que de momento tienes trabajo en trastear todo lo que has aprendido y en pelearte con TIA Portal, que de nada sirve que leas todo esto y no hagas nada.

Practica leñes!!

Todas las semanas, envío contenido de valor a través de mi newsletter.

Concretamente, experiencias propias vividas en fábricas como programador de PLC, cagadas monumentales que he hecho (y más de una buena que me ha caído) y consejos de programación.

Cada semana, píldora de conocimiento nueva. Semana que estás fuera, píldora que te pierdes (y que no volveré a compartir)

Para cumplir con el RGPD (Reglamento General de Protección de Datos) y entender que tus datos están seguros, debes leer y aceptar la política de privacidad. Tus datos serán guardados en Mailchimp, proveedor de email marketing. Mailchimp también cumple con el RGPD, así que todo está protegido y amparado por la ley.

Configuración