• Saltar a la navegación principal
  • Saltar al contenido principal
  • Saltar al pie de página

Programación Siemens

Cursos online de TIA Portal y PLC Siemens.

  • Cursos
  • Blog
  • Mi cuenta
    • Mi cuenta
    • Foros
    • Curso HMI con Python y Qt-Designer
    • Curso de AWL
    • Curso de iniciación a la Industria 4.0
    • Curso Express de TIA Portal
    • Curso de WinCC Flexible 2008
    • Crear HMI con OPC y VB.NET
    • Crear HMI con Snap7 y VB.NET
    • Curso ViSnap7
    • Curso de TIA Portal para CPU 1200
    • Curso de Step 7 V5.x
    • Curso de comunicaciones IE y Profinet
  • Contacto & Faq
Home | blog | Operaciones con strings en Step 7

Operaciones con strings en Step 7

Operaciones con strings en Step 7

por Iñigo Gútiez · 19 comentarios

La verdad es que no es normal el uso de strings en los PLC y se usen operaciones con strings en Step 7.

No es no se use en absoluto, pero no es su fuerte, por decirlo de alguna forma.

En general cuando programes no usarás muchas cadenas de caracteres más alla de arrastrar algo de información de modelo de la pieza que se está produciendo o cosas similares.

Ya sabemos que los autómatas de Siemens se lleva muy bien con las señales booleanas, pero de vez en cuando, hay que trabajar con las cadenas de caracteres aunque no sea tan habitual.

La cosa es que recientemente he tenido la necesidad de darle una pensada a un problema que me ha dado pie a esta entrada.

Contenido

  • 1 El problema con operaciones con strings en Step 7
  • 2 ¿Qué operaciones con strings en Step 7 voy a usar?
    • 2.1 ¿Cómo usaremos las operaciones con strings en Step 7?
  • 3 Un video explicativo de operaciones con strings en Step 7
  • 4 ¿Que te ha parecido?

El problema con operaciones con strings en Step 7

Tenemos un HMI bastante viejito que está conectado con un PLC de la serie 400.

Tenemos la necesidad de pasar la hora de un histórico al HMI, pero este, que no es de Siemens, no puede leer variables de tipo DTL y solo tenemos las típicas booleanas , byte, enteros, reales y strings.

Dándole un poco al rosco he pensado que podía crear un FB que cogiera el reloj del sistema y pasara la fecha y hora a una variable de tipo String.

Lamentablemente no existe tal cosa de forma directa en Step 7, por lo que te has de fabricar la función a medida.

Y es lo que he hecho.

¿Qué operaciones con strings en Step 7 voy a usar?

Básicamente voy a usar dos funciones con strings:

  • Función FC16 I_STRING IEC
  • Función FC2 CONCAT IEC

Ambas funciones las encontrarás en Standard Library/IEC Function Bloks

Lo que te propongo es lo siguiente:

Crear un FB en el cual descomponer la hora leída del PLC mediante el SFC1 «READ_CLK».

Esta hora,  la descompondremos es variables de tipo INT para tener el año, mes, dia, hora, etc.

Posteriormente usaremos esa información para montar 3 cadenas de caracteres:

  • Fecha
  • Hora
  • Fecha y hora

Así, tendremos las cadenas de caracteres que deseemos.

Durante todo el proceso nos apoyaremos en punteros de área.

Si no conoces bien el temario, puedo ayudarte mediante Cómo programar Step 7 y no morir en el intento donde tendrás ejemplos resueltos

¿Cómo usaremos las operaciones con strings en Step 7?

Una vez hayamos obtenido los valores del año, mes, etc, deberemos realizar alguna operación adicional.

Pasaremos la variable a un string usando la función FC16 I_STRING IEC.

Hay que tener en cuenta que el resultado en nuestro caso tendrá 2 o 3 caracteres. Esto es debido a que el primer caracter del string resultante es el signo del valor numérico.

Por tanto, si el año, el mes o el valor que sea, es inferior a 10, tendrá 2 caracteres. Si es de dos digitos, (año 18, por ejemplo) tendrá 3 caracteres.

Bien, en función del número de caracteres, pondremos un cero en caso de valores inferiores a 10, y tomaremos los valores tal cual, en caso de ser valores de dos dígitos.

Estos valores se irán insertando en posiciones fijas de las variables «Fecha» u «Hora» en función de la variable.

Además, añadiremos los separadores pertinentes. Usaremos «/» para separar en la fecha y el carácter «:» para la hora.

Para crear la variable «Fecha y hora» usaremos la función FC2 CONCAT IEC de tal forma que concatenemos la fecha y la hora, con un espacio en blanco en medio.

Un video explicativo de operaciones con strings en Step 7

Para ver esto mejor, he preparado un video como de costumbre en te lo explico un poco más en detalle.

 

¿Que te ha parecido?

Espero que te haya parecido interés.

Si necesitas algo similar, ya sabes que hay opciones como esta para jugar con las cadenas de caracteres.

¿Sueles usar operaciones con strings en Step 7?

Recuerda que puedes apuntarte en Guorker.com donde por una cuota mensual, tendrás tarifa plana en todos los cursos disponibles en la plataforma.

 

Iñigo Gútiez
Iñigo Gútiez

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.

Publicado en: blog Etiquetado como: awl

Interacciones con los lectores

    Deja un comentario Cancelar

    Este sitio usa Akismet para reducir el spam. Aprende cómo se procesan los datos de tus comentarios.

    19 Comentarios

  1. Pablo Suárez dice

    4 marzo, 2018 a las 23:06

    Muchas gracias Iñigo.

    Para mi nivel, es una programación un tanto compleja, pero muy, muy, muy interesante

    Saludos !!!

    Responder
    • Iñigo Gútiez dice

      4 marzo, 2018 a las 23:12

      Poco a poco Pablo.
      Todo es ponerse con los punteros.
      Saludos.!

      Responder
  2. David dice

    6 marzo, 2018 a las 17:40

    Hola Iñigo!
    Gran ejercicio para conocer estas dos funciones de la librería y de paso recordar punteros y string pero una duda ¿ cuando cargas un 0 en la posición de string y lo hace con un w#16#30 por que no lo haces con un w#16#00?
    Desearía sugerir si alguna vez se pudiera hacer una entrada al blog de como editar o estructurar un DB, con arrays, arrays de arrays , udt´s datos complejos que aparentemente es sencillo pero cuando queremos hacer estructuras un poco mas complejas y anidadas se empieza a complicar todo un poco.
    Saludos!

    Responder
    • Iñigo Gútiez dice

      6 marzo, 2018 a las 22:20

      Hola David.. lo de w16#30 y no cargarle un 0… ¡¡porque estás hablando de caracteres y código ASCII!! jeje.
      El valor w16#30 en el código ASCII es el caracter «0» De ahí su valor.
      En cuanto a lo de los UDT, no hay problema, pero ¿podrías proponer un ejemplo para resolver?
      Saludos

      Responder
      • David dice

        8 marzo, 2018 a las 18:55

        OK no había caído en el detalle de que estábamos en ASCII y no en INT jeje, uno es duro de mollera.
        En el curso de TIA Portal del 1200 es mucho mas fácil hacer estructuras mas o menos complejas de un DB´s o UDT´s pero en Step 7 al menos a mi se me hace cuesta arriba sobre todo a la hora de anidar. El ejemplo que tuve que lidiar fue el crear un DB para registrar 16 tipos de piezas y cada tipo de pieza debería tener 8 valores diferentes y tener un valor inicial que no sea 0 en caso de tener que recargar el DB con un arranque frio o algo así. Es una propuesta para cuando haya tiempo para si es de interés hacer referencia sobre ello. Un saludo Iñigo y te echamos un poco de menos!!!

        Responder
        • Iñigo Gútiez dice

          10 marzo, 2018 a las 21:08

          David, no tiene mayor complicación crear un UDT anidado más allá de añadir una estructura.
          Pero me lo apunto.

          Responder
  3. JUAN MENDOZA dice

    27 marzo, 2019 a las 20:05

    HOLA IÑIGO TENGO UN PROBLEMILLA TENGO UNA PREGUNTA AHORITA TENGO CADENA DE CARACTERES 8 EN NUMERACION Y ACTUALMENTE VA 1,2,3, MI CLIENTE QUIERE QUE APARESCA 000001,0000002, HAY ALGUNA MANERA DE HACERLO.

    SALUDOS

    Responder
    • Iñigo Gútiez dice

      27 marzo, 2019 a las 23:49

      Rellena los caracteres con el carácter 0, no con un cero, sino con el carácter 0 del código ascii.

      Responder
      • david dice

        29 agosto, 2019 a las 1:23

        hola iñigo necesito un poco de tu ayuda tengo un plc s7300 y en el cual necesito generar unos strings de unos numerous de parte, pero lo he intentado de algunas formas pero no he tenido exito, en el programa que tengo ya existen dos FC de los que mencionas en el video. FC2 CONCAT y FC16 I_STRING pero no me es possible accesar a ellos

        Responder
        • Iñigo Gútiez dice

          29 agosto, 2019 a las 7:07

          Lo siento, pero no entiendo que quieres decir.

          Responder
  4. Paola Mancilla dice

    12 septiembre, 2019 a las 22:26

    Hola Iñigo que gusto poder leer tus post, siempre se agradece que compartas tan buena información.
    Tengo una pregunta… El ejercicio tal cual puedo hacerlo en TIA PORTA V14.
    Cuando declaro
    LAR1 P##Fecha_y_Hora
    me marca error de syntaxis.
    Tengo un IM151-8DP/PN y necesito sacar la fecha y hora; me di cuenta que no es tan facil y utilice el RD_SYS_T, descubri tambien como comentaste que no es tan sencillo pasarlas a string por el tipo de dato DL; pero al querer cambiar el tipo de dato apoyandome de tu ejemplo tengo error de sytaxix en el apuntador.
    Ojala me haya explicado bien y puedas ayudarme.
    Saludos cordiales!!!

    Responder
    • Iñigo Gútiez dice

      12 septiembre, 2019 a las 22:35

      Tiene pinta que lo que te pasa es que tienes la variable sin declarar en el interface.

      Responder
      • Paola Mancilla dice

        13 septiembre, 2019 a las 18:51

        Voy a checar nuevamente paso a paso como lo hiciste.
        Eres muy amable, gracias por contestar!!!

        Responder
  5. Oswaldo dice

    5 diciembre, 2019 a las 13:20

    B DIAS IÑIGO
    Serias tan amable de explicar el mismo ejemplo pero de string a entero..
    no con fecha pero si con un numero cualquiera
    gracias

    Responder
    • Iñigo Gútiez dice

      5 diciembre, 2019 a las 20:40

      Revisa el programa, porque esa parte está hecha. La hora pasa de BCD a INT, y de INT a STR. Pues quédate solamente con la parte que quieres.

      Responder
  6. Guillermo dice

    13 mayo, 2020 a las 14:15

    Buenas Iñigo, una pregunta, se puede leer la hora directamente de un S7-300 programado en Step7 con el WinCC 7.3 sin tener que pasarlo a caracteres??

    Un saludo y gracias

    Responder
    • Iñigo Gútiez dice

      13 mayo, 2020 a las 18:43

      No existe en WinCC DateAndTime así que hay que buscarse la vida un poco si lo quieres representar.

      Responder
  7. GREGORIO RIVAS dice

    7 octubre, 2020 a las 16:24

    Hola Iñigo:
    He empezado el curso TIA portal y lo encuentro muy difícil, en cambio el STEP 7 V5.x lo veo más comprensible para mi nivel que es 0, que te parece si realizo primero el STEP 7 y después el TIA PORTAL?

    Saludos

    Responder
    • Iñigo Gútiez dice

      7 octubre, 2020 a las 17:55

      Pues creo que es más fácil Tia portal por lo amigable que es respecto al tradicional.
      Awl es más duro que scl por ejemplo.

      Responder

Footer

· Acerca de
· Misión, Visión y valores
· Aviso Legal y Política de Privacidad
· Condiciones de Venta
· Política de cookies
Utilizamos cookies propios y de terceros para mejorar nuestros servicios y tu experiencia de usuario. Si continuas navegando, consideramos que aceptas su uso. Aceptar Política de cookies
Política de Cookies

Privacy Overview

This website uses cookies to improve your experience while you navigate through the website. Out of these, the cookies that are categorized as necessary are stored on your browser as they are essential for the working of basic functionalities of the website. We also use third-party cookies that help us analyze and understand how you use this website. These cookies will be stored in your browser only with your consent. You also have the option to opt-out of these cookies. But opting out of some of these cookies may affect your browsing experience.
Necessary
Siempre activado
Necessary cookies are absolutely essential for the website to function properly. This category only includes cookies that ensures basic functionalities and security features of the website. These cookies do not store any personal information.
Non-necessary
Any cookies that may not be particularly necessary for the website to function and is used specifically to collect user personal data via analytics, ads, other embedded contents are termed as non-necessary cookies. It is mandatory to procure user consent prior to running these cookies on your website.
GUARDAR Y ACEPTAR