Tipo de artículo: FAQ, ID de artículo 18771489, Fecha del artículo: 09/03/2007
(0)
Evaluar

¿Cómo se puede supervisar un campo de 32 bits, evaluar la posición de bit de un bit activo, y acceder a cada uno de los bits de una doble palabra?

  • Artículo
  • Relacionado con producto(s)

Instrucciones:  
La siguiente tabla contiene las descripciones para poder evaluar la posición de bit de un bit activo en una palabra de marcas, poder supervisar un campo de 32 bits de eventos entrantes y salientes, y poder acceder a cada uno de los bits de una variable de tipo DWORD, las cuales están declaradas dentro de un módulo de código.
 

Ejemplos:
1 Evaluación de la posición de bit de un bit activo en una palabra de marcas
Para tener un proceso secuencial en el STEP 7, hay que programar una cadena de control con ayuda de una palabra de marcas. En esta palabra de marcas, el paso activo actualmente en la cadena de pasos se corresonde sólo con un único bit activo. Contando la posición de los bits, el paso activo se puede visualizar en forma de texto (por ejemplo en el ProTool) con ayuda de una lista de símbolos. Para realizar la visualización, es una gran ventaja tener la posición del bit y por tanto el paso activo actualmente en forma de valor entero. Sí siempre existe un bit activo, se cumple la siguiente relación:
  • 2X = Y
    X = lnY / ln2

Donde X es la posición del bit e Y el valor de la palabra de marcas. Para obtener la posición del bit, sólo hay que aumentar X en uno. Además, siempre hay que tener en cuenta 2 casos especiales: El valor Y no puede ser cero ni negativo (signo). A continuación, se puede descargar un programa ejemplo en AWL para averiguar la posición del bit según la definición arriba descrita.

El Download "bitpos_c" contiene la funcionalidad arriba descrita dentro de la función FC1 y una llamada ejemplo en el OB1.

bitpos_c.zip ( 28 KB )

2 Supervisión de un campo de 32 bits
Para supervisar un campo de 32 bits de eventos entrantes y salientes, se puede evaluar cada bit a supervisar respecto a flancos positivos y negativos. Tal como se muestra en el ejemplo arriba indicado, aquí la palabra también se define como entero y se calcula el bit activado.

Este programa ejemplo funciona exactamente igual para una doble palabra. La programación se basa en lo siguiente:
  1. Para filtrar un bit que se ha activado en este ciclo, de entre los muchos que pueden estar activados, se utiliza una asignación “OR EXCLUSIVA para DOBLEPALABRA” entre el valor del último ciclo y del ciclo actual. Esta asignación da como resultado el único bit que cambia exclusivamente en uno de ambos valores. Con una consulta AND adicional, se averigua si se trata de un bit de una señal entrante o saliente.
  2. Si en un entero doble sólo se activa un bit, para el valor “Y” de dicho entero doble se cumple la ecuación: Y = 2 x 
    La posición del bit es por tanto X + 1. Dicha posición "X" se calcula del valor de doble entero con ayuda de la siguiente conversión:
    X = lnY / ln2

 

El Download "Monitor_de" contiene un proyecto de STEP 7 con la funcionalidad arriba descrita en el módulo de función FB1 y una llamada ejemplo desde el módulo de organización OB1. Además, en el OB1 también se han programado 2 ejemplos con los que se puede comprobar la función.


Monitor_de.zip ( 41 KB )  

3 Acceso a cada uno de los bits de una variable de tipo DWORD
Sólo se puede acceder a una variable tal como se ha definido en el módulo. Si la variable se ha declarado de tipo "DWORD", sólo se puede acceder a dicha variable en modo "DWORD" y no como Bit.

Pero se puede acceder a cada uno de los bits de las direcciones absolutas. Esto es posible en las entradas, las salidas, las marcas, y las variables de los módulos de datos. Si se conocen las direcciones absolutas, se puede acceder a cada uno de los bits de la variable por medio de dichas direcciones.

La figura 01 muestra un ejemplo de cómo cargar el contenido de la variable estática "Variable" de tipo "DWORD" en el AKKU 1, y a continuación transferirla a la variable "ValueRange" del módulo de datos DB5. La dirección de la variable "ValueRange" en el DB5 es la "0" (DB5.DBD0 de tipo "DWORD"). En este caso, se puede acceder a la variable bit a bit con ayuda de la instrucción U DB5.DBX 0.1.


Figura 01

Advertencia:
Para evitar un acceso a través de direcciones absolutas, el acceso bit a bit a una variable se puede implementar por medio de variables locales. Con esto se tienen una serie de ventajas:

  • La solución funciona en todos los tipos de módulos de código, y el código es legible,
  • No se necesita ningún DB,
  • Mejor rendimiento gracias al acceso local,
  • La solución sigue funcionando tras modificaciones o ampliaciones de las estructuras, sin adaptaciones adicionales.

Defina 32 variables TEMP de tipo BOOL, para manipular bit a bit una variable de tipo "DWORD". Con ayuda de las instrucciones del siguiente ejemplo, la variable / parámetro a manipular (en este caso, la MD 10) se transfiere a las variables temporales "bitvar_0" hasta "bitvar_31". Por medio de estas 32 variables de tipo Bit, la variable se puede manipular por medio del direccionamiento simbólico y guardar los resultados.


Figura 02

Por favor, tenga en cuenta que las variables temporales sólo son válidas durante la elaboración del módulo y siempre se tienen que inicializar antes del primer acceso de lectura.

Copie el archivo EXE correspondiente en un directorio aparte y arránquelo haciendo doble clic sobre él. Con ello, se descomprime automáticamente el proyecto de STEP 7 con todos sus subdirectorios y ya se puede abrir y elaborar con el administrador SIMATIC.

Advertencia:
Tenga en cuenta los diferentes tiempos de ejecución típicos para el LN (Logaritmo natural) en cada CPU.

 

CPUs

Tiempo de ejecución típico en µs

CPU312 455
CPU313, CPU314 < 650
CPU315, CPU315-2, CPU316-2 < 650
CPU317 14,97
CPU318-2 35
CPU412 63
CPU414 35
CPU416 33
CPU417 35

Conceptos de búsqueda:
Cadena de marcas, cadena de ejecución