• Skip to primary navigation
  • Skip to main content

ProgramaciónSiemens

Cursos online de automatización industrial con PLC Siemens

  • Cursos
  • Mi cuenta
    • Mi cuenta
    • Blog
    • 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

Operaciones con strings en Step 7

Operaciones con strings en Step 7

por Iñigo Gútiez · 19 Comments

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.

Filed Under: blog Tagged With: awl

Reader Interactions

    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 says

    4 marzo, 2018 at 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 says

      4 marzo, 2018 at 23:12

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

      Responder
  2. David says

    6 marzo, 2018 at 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 says

      6 marzo, 2018 at 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 says

        8 marzo, 2018 at 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 says

          10 marzo, 2018 at 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 says

    27 marzo, 2019 at 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 says

      27 marzo, 2019 at 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 says

        29 agosto, 2019 at 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 says

          29 agosto, 2019 at 7:07

          Lo siento, pero no entiendo que quieres decir.

          Responder
  4. Paola Mancilla says

    12 septiembre, 2019 at 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 says

      12 septiembre, 2019 at 22:35

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

      Responder
      • Paola Mancilla says

        13 septiembre, 2019 at 18:51

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

        Responder
  5. Oswaldo says

    5 diciembre, 2019 at 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 says

      5 diciembre, 2019 at 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 says

    13 mayo, 2020 at 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 says

      13 mayo, 2020 at 18:43

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

      Responder
  7. GREGORIO RIVAS says

    7 octubre, 2020 at 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 says

      7 octubre, 2020 at 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
  • Aviso Legal y Política de Privacidad
  • Condiciones de Venta
  • Política de cookies
  • Contacto & Faq
  • Blog

Copyright © 2023 · Programación Siemens · Todos los derechos reservados

· ¿Quién soy? · Misión, Visión y valores