Red de conocimiento informático - Conocimiento informático - Cómo configurar un bloque de funciones con el tipo de datos "cualquiera" o "puntero"

Cómo configurar un bloque de funciones con el tipo de datos "cualquiera" o "puntero"

El archivo de ayuda del paso 7 dice esto:

CUALQUIER: 5 palabras

CUALQUIER ejemplo de referencia P#M50.0 BYTE 10

Área = M (bit de área de almacenamiento)

Bit de inicio = 50,0

Tipo de datos = BYTE

Número de unidades de tipo de datos = 10

Este ejemplo define el área de datos MB50 como MB59.

Nota 1: Cuando se utiliza el puntero ANY para señalar el área de destino, solo se permiten áreas de destino de tipo BYTE o WORD.

Nota 2: Algunas instrucciones de algunos modelos de PLC solo permiten byte, como SFB12 - "BSEND" se utiliza en s7-400. El parámetro SD_I solo puede ser de tipo byte. Al ingresar el tipo de palabra, no se informará ningún error durante la programación, pero se producirá un error durante la ejecución del programa.

Lo anterior muestra que los datos de tipo CUALQUIER es un tipo de puntero. Tiene información rica, incluido el área, la dirección en el área, el tipo de datos y la longitud que el tipo PUNTERO no tiene. Se pueden lograr funciones más poderosas analizando cualquier puntero, es decir, punteros de punteros. Por ejemplo, programe un bloque de funciones de suma.

Referencia del puntero lt; explicación detallada del direccionamiento indirecto de Siemens de la siguiente manera:

P en P# es un puntero, que es un puntero directo de 32 bits. El llamado directo se refiere al valor o unidad de almacenamiento que sigue al # en P#, que viene dado directamente por P. De esta manera, se puede utilizar un puntero como P#XXX en el direccionamiento de instrucciones para tratarlo como una "constante". Esta "constante" puede incluir o no un área de almacenamiento. Por ejemplo:

● L P#Q1.0 //Guarde el puntero Q1.0 en ACC1 En este momento, el contenido de ACC1 = 82000008 (hexadecimal) = Q1.0

★ L P #1.0 //Guarde el puntero 1.0 en ACC1 En este momento, el contenido de ACC1 = 00000008 (hexadecimal) = 1.0

● L P#MB100 //¡Error! El puntero debe proporcionarse según la estructura byte.bit.

● L P#M100.0 //Guarde el puntero M100.0 en ACC1 En este momento, el contenido de ACC1 = 83000320 (hexadecimal) = M100.0

● L P. #DB100 .DBX26.4 //¡Error! DBX ya ha proporcionado un área de almacenamiento y no se puede especificar repetidamente.

● L P#DBX26.4 //Guarde el puntero DBX26.4 en ACC1 En este momento, el contenido de ACC1 = 840000D4 (hexadecimal) = DBX26.4

Encontramos. que cuando solo se especifica un valor numérico para P#, el valor en el acumulador tiene el mismo formato que el puntero de direccionamiento en el área (también el mismo formato que el puntero de doble palabra de direccionamiento indirecto de memoria y cuando P# es); especificado con un área de almacenamiento, la acumulación El contenido del registro es exactamente el mismo que el contenido del puntero de direccionamiento entre regiones. De hecho, el tipo de valor que se pasa a AR determina cómo se realiza el direccionamiento indirecto del registro. En aplicaciones prácticas, aprovechamos esta característica de P# para especificar el puntero P# según las diferentes necesidades y luego lo pasamos a AR para determinar el método de direccionamiento final.

En el direccionamiento de registros, P#XXX se utiliza como desplazamiento del puntero AR del registro y se utiliza para agregar el puntero AR. El resultado de la operación es la unidad de valor de dirección exacta que la instrucción realmente opera. en. !

Ya sea que se trate de una dirección intrarregional o interregional, se especifica el área de almacenamiento donde se encuentra la dirección. Por lo tanto, P#XXX aquí solo puede especificar valores numéricos puros, como ★ en el ejemplo anterior. .