FAQs Técnicas

Realizar una pregunta

Unity: error de alineación de variables de tipo DDT

Se dispone de una aplicación M340 / Unity (Unity v4.1) en la que se configura una variable de tipo MATRIZ [0..X] DE ESTRUCTURA, siendo ESTRUCTURA una DDT (tipo de dato derivado). Al direccionar la variable citada se comprueba que entre el último elemento del primer objeto y el primer elemento del segundo objeto se produce un 'hueco' de direccionamiento, es decir, que entre ambos hay un registro de diferencia 'en blanco', de forma que lo que en un principio se esperaba que cada objeto de la variable de tipo MATRIZ ocupase 25 registros, en realidad ocupa 26 registros. Este comportamiento se aprecia cuando la aplicación se compila en modo PLC, pero si se compila en modo SIMULADOR el comportamiento pasa a ser correcto y cada objeto de la variable de tipo MATRIZ ocupa los 25 registros previstos.

El comportamiento indicado es correcto siguiendo las reglas de direccionamiento de Unity Pro (ver documento adjunto: normas de asignación de datos DDT; manual de referencia de Unity Pro v4.1, página 296). El la aplicación referida, el tipo de dato DDT creado tiene configurado un primer objeto de tipo DINT (doble entero); según las normas anteriormente citadas, los datos DINT (y de hecho cualquier tipo de dato de 32 bits) se direcciona siempre en 'Dobles Palabras', es decir, en dos registros consecutivos, siendo que el primero de ellos ha de estar direccionado en una dirección de memoria par. En la aplicación referida en el planteamiento, coincide que, en principio, los registros de tipo DINT deberían ser asignados a una dirección de memoria impar, pero siguiendo la normativa de direccionamiento, la herramienta Unity los desplaza un registro para colocarlos en una dirección par.
Con respecto a que según si la compilación de la aplicación se realiza en modo PLC o en modo SIMULACIÓN, el comportamiento explicado anteriormente varía, también es correcto y está documentado en el mismo archivo adjunto.
¿Ha sido útil?
¿Qué podemos hacer para mejorar la información?