• 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

Cómo usar PEEK y POKE en SCL como alternativa a los punteros en AWL

Cómo usar PEEK y POKE en SCL como alternativa a los punteros en AWL

por Iñigo Gútiez · Leave a Comment

En esta entrada, vamos a ver cómo usar PEEK y POKE como alternativa a los punteros en AWL que usamos en la entrada anterior para realizar el ejemplo de convertir la dirección de una serie de booleanas en un listado de direcciones.

Contenido

¿Y por qué vamos a realizar este ejemplo con PEEK y POKE?

Pues porque uno de los alumnos del curso de TIA Portal me escribió para decirme que como AWL no está disponible en la serie S7-1200, estaría bien realizar el mismo ejemplo, pero para un 1200 en TIA Portal.

Yo le propuse que lo intentara realizar él y lo compartiera, y Victor, se puso con ello.

Tras alguna corrección que otra para que funcionara bien, lo cierto es que el programa funciona perfectamente usando PEEK y POKE

PEEK Y POKE

Como hemos visto en el bloque de SCL, PEEK y POKE son unas herramientas muy potentes en SCL para la serie 1200 como alternativa a los punteros que se usan en AWL.

Sirven para leer (PEEK) o escribir (POKE) en diferentes zonas de memoria (marcas, DB, periferia…)

La idea es básica, indicas el tipo de área que quieres leer o escribir (marcas, DB, PEW…) y la dirección, y voilà.

En caso de querer leer un bit, o escribir un bit, lo harás con PEEK_BOOL o POKE_BOOL.

El código del ejemplo

A continuación, puedes ver el código del bloque creado en SCL:

//Reseteamos los errores
#Error := 0;
#Indice := 1;

// Comprobamos que el número de bits sea inferior al número máximo
// 
IF #NumeroBits>#NumeroMaximoBits THEN
 #Error := 1;
 RETURN;
END_IF;

//Rellenamos el DB con -1.0 para identificar las direcciones no válidas. Metemos un -1 en un DWORD
//Usamos la instrucción POKE para guardar el valor (debemos usar tipo DWORD como valor).
#Borrado := REAL_TO_DWORD(-1.0);
FOR #Contador := 0 TO #NumeroMaximoBits - 1 DO
 POKE(area := 16#84,
 dbNumber := #DBReales,
 byteOffset := #Contador * 4,
 value := #Borrado);
END_FOR;
//Recorremos el DB de booleanas los #NumeroBits definidos como parametro de entrada

FOR #Contador := 0 TO #NumeroBits-1 DO
 //Definimos la dirección el bit en función del contador
 #Direccion_Byte := #Contador / 8; // Byte
 #Direccion_Bit := #Contador MOD 8;//Bit
 //Obtenemos el estado del bit sabiendo el DB de booleanas y la dirección
 #ValorBit:= PEEK_BOOL(area:=16#84, dbNumber:=#DBBoleanas, byteOffset:=#Direccion_Byte,bitOffset:=#Direccion_Bit);
 // Si el valor está a 1, entonces guardamos el valor en el DB de reales
 IF #ValorBit THEN
 //Obtenemos la dirección con Direccion_Byte.#Direccion_Bit
 #ValorReal := INT_TO_REAL(#Direccion_Byte) + INT_TO_REAL(#Direccion_Bit) / 10.0;
 //Pasamos el valor real a DWORD para usar POKE
 #ValorDword := REAL_TO_DWORD(#ValorReal);
 //Obenemos la dirección donde guardar
 #Direccion := (#Indice - 1) * 4;
 POKE(area:=16#84,
 dbNumber:=#DBReales,
 byteOffset:=(#Indice-1)*4,
 value:=#ValorDword);
 //Sumamos una unidad para el siguiente registro
 #Indice := #Indice + 1;
 END_IF;
 
END_FOR;

La explicación de PEEK y POKE

Como en multitud de ocasiones, te dejo con el vídeo ilustrativo que explica el código que tienes arriba.

 

¿Mola SCL eh?

Seguro que te gustaría controlar SCL y hacer cosas chulas.

Lo entiendo, la verdad es que es super potente y versátil.

Pues si lo que quieres es conocerlo bien, y hacer tus propios desarrollos, ya sabes que en curso de TIA Portal, el bloque 4 está dedicado exclusivamente a SCL.

Además, si lo deseas, puedes adquirirlo por separado del curso aquí.

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, SCL

Reader Interactions

Deja un comentario Cancelar

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

  • 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