De vez en cuando recibo alguna duda respecto del concepto de lo que son las variables en TIA Portal.
La verdad es que no tiene mucho misterio si te lo cuentan, pero si se da por supuesto este concepto informático (no solamente de los PLC), puedes tener ciertas dudas que vamos a intentar solucionar hoy.
A grandes rasgos, y sin entrar en terminología exacta, una variable no es mas que un trocito de memoria donde puedes almacenar valores de tal forma que puedas leer su contenido o escribir sobre él.
Hasta ahí seguramente no haya mucha duda.
Lo mismo que un vector, para ser un vector, tiene módulo, dirección y sentido, una variable en TIA Portal (o en cualquier otro sistema) tiene una serie de características:
- Nombre o etiqueta para identificar a la variable
- Tipo, ya que, por ejemplo, no será lo mismo un valor numérico entero, que un carácter.
- Ancho de la variable, es decir, su tamaño.
- Ámbito, que será el terreno de juego donde pueda aplicarse y trabajar con la variable.
Contenido
Nombre de las variables en TIA Portal
El nombre de la variable no es más que eso, una etiqueta que identifique el área de memoria que contiene cierto valor.
A la hora de nombrar las variables, puede ser que no tengas una forma estándar de nombrarlas, o puede que sí. A lo mejor tu organización (o cliente) tiene su propia forma de nombrar las variables.
De forma genérica, hay una serie de notaciones internacionales que son las más habituales que puedes ver en la programación de alto nivel.
Ahora bien, el nombre tiene que ser adecuado y significativo.
Puede parecer baladí, pero no lo es.
Por ejemplo, podrías ver una línea de código en SCL que diga: c := a * b;
Como ves, a pesar de que cada variable tiene nombre, no está para nada claro qué es cada cosa. Solo ves la operación de multiplicación. Pero podría significar infinidad de cosas.
En cambio, si vieras algo así como: Espacio := Velocidad * Tiempo;
¿A que ahora está mucho más claro?
Pues de esto, va el tema de la notación de variables que es bastante interesante.
Tipo de las variables
El tipo de la variable no es mas que cómo categorizar el dato que contiene la variable.
Al final, la memoria no son mas que ceros y unos, y en función de cómo los leamos , la misma ristra de ceros y unos significan cosas diferentes.
Esa forma de interpretar los ceros y los unos que contiene la variable, es el tipo de la variable.
Como vemos en la imagen destacada del post, hay muchos tipos de variable.
Pueden ser valores enteros, o dobles enteros, reales, caracteres…
Pueden ser simples como un número o un valor booleano, o variables complejas o estructuradas como puede ser un array.
Hay muchos tipos de variables que se pueden usar con los PLC de Siemens.
Pero ademas, en los S7-1200 y S7-1500 tienes muchos tipos de variables que en la serie 300 y 400, no existen.
Así, por ejemplo podrás tener diferentes tipos de valores enteros: enteros y dobles enteros como tenías en la serie 300 o 400, pero tendrás también enteros pequeños, con y sin signo.. o enteros largos.
Es decir, un abanico mucho más grande de lo que has podido disfrutar y sufrir en Step 7 tradicional.
No voy a entrar a enumerar cada uno de los tipos, porque no es el objetivo de la entrada, y lo vemos en el Curso Express de TIA Portal o en el Curso Completo, pero digamos que hay todos los necesarios y más.
UDT
Un caso especial son los User-defined Data Types más conocidos como UDT.
La traducción desde la lengua de Shakespeare a la de Cervantes es «Tipos de Datos definidos por el Usuario».
Exacto, con los PLC de Siemens (tanto en clásico como en TIA Portal) puedes definir nuevos tipos de datos además de los que traen de saque.
En general serán tipos complejos que bajo una estructura, contienen otros tipos más simples.
Por ejemplo, podremos definir el tipo «Variador» y dentro de este tipo contenga tipos más simples como Velocidad y Aceleración de tipo real.
Ancho de la variable
Hemos comentado que la variable es un trozo de memoria donde contener un dato. Pero, ¿cuán grande es?
Ahí es donde no es lo mismo un SINT que un INT o un DINT, ya que siendo todos tipos enteros, SINT (small int) ocupará solo un byte, INT dos bytes, y DINT (doble int) 4 bytes… y así con todos los tipos, claro.
Esto delimita el valor máximo y mínimo que puede tomar la variable, ya que un SINT, solo podrá valer entre -128 a 127 mientras que un INT podrá valer desde -32768 a 32767 al ocupar dos bytes, y por tanto, poder contener más información diferente.
Ni que decir tiene que un DINT será capaz de almacenar un valor muchísimo más grande que un INT por contener 4 bytes.
Pero ojo, porque como ves, estamos empezando a ligar lo que es el ancho (una palabra o dos bytes) con el tipo.
Quiero decir con esto, que un Real, al igual que un DINT ocupan ambos tipos de variable 4 bytes.
Pero no tiene nada que ver leer 4 bytes de memoria e interpretarlos como un DINT, que interpretarlo como un REAL ya que no se parece en nada como vemos en el Curso de TIA Portal Express o en el Curso Completo de TIA Portal.
Los ceros y los unos serán los que sean, pero para que tenga algún sentido hay que interpretarlos según un tipo de variable.
Si no se pasa por el tamiz de un tipo, 1 byte solo son 8 bits y punto. Un «10000011» no significa nada.
Y alguno dirá, sí que significa algo, eso es 131.
¿Estás seguro?
Será 131 si lo interpretas como un USINT, es decir, como un entero pequeño sin signo, que va desde 0 a 255, y por tanto sí, es 131.
Pero si lo interpretas como un SINT cuyos límites son de -128 a 127 será un valor negativo, concretamente -125.
¿Cómo te has quedado?
El mismo ancho, 1 byte, con los mismos bits a cero o a 1, puede tomar dos valores enteros completamente diferentes en función del tipo de variable que sea.
Y es muy importante el concepto de anchura, porque existen las variables de tipo byte, de tipo word y de tipo dword que tienen de ancho lógicamente, lo mismo que el nombre del tipo. El tipo byte ocupará un byte, el tipo word ocupará un word, palabra o dos bytes, y el tipo dword ocupará un dword, doble word o doble palabra o 4 bytes.
Por tanto, no es lo mismo que un INT ocupe un Word con que el tipo INT sea lo mismo que el tipo Word, porque no lo es.
Ámbito de las variables en TIA Portal
El ámbito de la variable no es mas que el contexto en el que se puede usar dicha variable.
Así, hay dos grandes grupos de variables en TIA Portal:
- Variables locales
- Variables globales
Variables locales
Las variables locales son aquellas que se declaran dentro de un bloque (OB, FC o FB) y solo son usadas dentro de ese bloque. No se puede acceder a ellas desde fuera.
El ejemplo más claro son las variables temporales que se pueden declarar dentro de los bloques citados.
Se usan dentro de un FC, OB o FB, pero no son accesibles desde fuera de dicho bloque.
Variables globales
Las variables globales son aquellas variables que puedes usarlas en cualquier parte del programa, y desde diferentes bloques si lo deseas.
Las variables globales pueden ser las entradas, salidas, marcas, variables declaradas en los DB, temporizadores S7, contadores…
Estaticidad de las variables
Las variables pueden ser estáticas o no, es decir, pueden recordar su valor entre llamadas del programa principal, o olvidar su valor una vez que se ejecute el bloque donde ha sido declarada y ejecutada.
Es decir, si yo a una variable le doy valor así:
Velocidad := Velocidad +1;
y dicha variable es global (una marca MW, por ejemplo), cada vez que se ejecute, Velocidad irá incrementándose en una unidad, porque recuerda su último valor… no se resetea. Es estática.
Las variables temporales, en cambio, no son estáticas, y por tanto, este mismo caso haría que la variable Velocidad no se fuera incrementando, y al leer el valor después de ejecutar la sentencia, siempre valdría 1.
¿Qué te ha parecido?
Imagino que todo lo que te he contado sobre las variables en TIA Portal, lo sabías, bien porque ya llevas mucho tiempo programando y esto no te pilla de nuevo o porque lo has visto en alguno de los cursos de la plataforma o en cualquier otro sitio.
Pero si estás comenzando en la programación, estos conceptos puede que no los tengas del todo claro, y espero que te haya ayudado a entender mejor qué es una variable en TIA Portal.
Ni que decir tiene, que si necesitas formarte porque estás muy pez, puedes tomar el Curso Express de TIA Portal con el que comenzar a crear tus proyectos con los PLC y pantallas de Siemens.
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.
21 Comentarios
Magistral Iñigo!!!
Claro y didáctico. Me gusta mucho tu forma explicar.
Mis felicitaciones
Muchas gracias Inma!
Muchas gracias por ser tan claro!!
Gracias Jesús!
Hola Iñigo muy buenos temas como siempre. Te comento que esto trae muchos problemas y tiende a nublar un poco a la hora de jugar con diferentes tipos de variables. Muchos al principio nos interesa tirar código y más código e incluso reutilizar funciones o fbs ya diseñados y no se le presta atención a esto que forma parte de una buena base. Felicidades por el Post
Hola Inigo, muy bueno el post como siempre. Puedes hacer un post explicando para que se usan los plc maestros y esclavos?
Es simplemente un tipo de comunicación, como los hay muchos en el que se intercambian una serie de entradas y salidas, y el PLC esclavo es parte de las periferias del maestro
Gracias. Inigo. Como sabes cuando debes utilizar un plc esclavo? De que depende eso?
Iñigo, como siempre tu enseñanza bien explicada y muy muy útil. Muchas gracias.
De casualidad no tienes un curso para hacer sistemas scada utilizando Visual Basic?? Gracias de nuevo.
De hecho tienes dos: con OPC de Siemens, y con Snap7. Eso sí, no es de programación en VB. Echa un vistazo en la sección de cursos.
Hola, como obtener un curso de modbus rtu con tia portal 1200
Tal vez más adelante pueda hacer algo. Veremos.
Hola iñigo, una duda ahí, toda variable global es estática?.. y cuando se reinicia el plc, que valores tienen? el último valor adquirido? o arranca con el valor pre-establecido, comprendo que esta la función de asignarle remanencia a la variable, pero esa es la duda que me surgió después de leer tu post
Ojo, no confundas el concepto de estaticidad de una variable, con la remanencia. Una variable estática, por ejemplo las STATIC de un FB, guarda su valor entre ciclos del OB1 (o del bloque que lo llame). Que esta misma variable además de estática, sea remanente, depende de la remanencia del dato en el DB donde se guardan las llamadas de las instancias.
Lo mismo pasa con una marca. La marca siempre es estática, pero no tiene por qué ser remanente (de hecho en general salvo que tu lo indique, no lo son en TIA Portal).
Claro, entonces cuando se produce un reinicio del plc, las variables estáticas, adquieren su valor predeterminado. Las variables de bloques de datos globales, supongo que también son estáticas.
No, cuando se reinicia el PLC, las variables REMANENTES toman el valor que tenían antes de apagarse. Son dos conceptos diferentes: una cosa es la estaticidad de la variable entre ciclos de ejecución de un bloque (p.e. un FB) y otra cosa es la remanencia que eso es que no pierde su valor ante el apagado del PLC. Las variables NO remanentes toman su valor por defecto. Si es un DB no remanente pues el valor inicial asignado en el PLC, y las marcas no remanentes (y otras) valen 0.
Muy didáctico y fácil de entender
Excelente
Gracias
Muy buena explicación de las variables.
Sigue así, dándonos alguna clase mas, siempre gustan
¿Como puedo subscribirme al blog para no perderme el contenido?
Apuntándote en la ventana emergente es suficiente 🙂
Yo este es un tema que nunca he tenido claro. Tu creas una variable local dentro de un FB ( tipo INPUT, OUTPUT, STATIC..). Se supone que son locales… pero tú luego puedes acceder a esas variables a través de su bloque de instancia desde cualquier punto del programa de la forma : «Block_1_DB».ESTÁTICA o «Block_1_DB».inout_b1.
El único caso claro de variable local son las temporales.
También lo sería una IN o OUT dentro de un FC.
Pero todas las que tienen Bloque de instancia y se puede acceder desde fuera…. ¿ ya no se consideran variables locales?
Gracias por tu respuesta