Array Dinámico
Última actualización
¿Te fue útil?
Última actualización
¿Te fue útil?
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.
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…
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:
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):
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.
Si tu quieres que una FC lea los valores de diferentes arrays tipo Int, debes crearte un array en la FC tal que así:
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.