Lectura/escritura de datos acíclicos mediante PROFIBUS DP V1
Descripción general
Para los accesos acíclicos DP V1 se ha implementado en el controlador LTMR un mecanismo basado en direccionamiento de longitud y ranura/índice.
El acceso a las variables tiene lugar cada 10 registros. No se puede tener acceso a los registros situados entre dos subgrupos. Si el acceso no es posible, no se tiene acceso a ningún registro y se devuelve un valor de error detectado (por ejemplo, "no se han encontrado todos los registros") mediante DP V1.
Llamada de datos acíclicos (DS_Read)
Con la función
DS_Read
, el primario PROFIBUS DP puede leer los datos del secundario.
La siguiente tabla muestra el contenido de una trama DS_Read.
Byte |
Sintaxis |
---|---|
0 [Número de función] |
0x5E [Función |
1 [Número de ranura] |
Valor constante = 1 |
2 [Índice] |
Dirección de registro / 10 El acceso común a los registros tiene lugar cada 10 registros. El índice siempre se redondea a un entero. |
3 [Longitud] |
Longitud de los bloques de datos en bytes (Número de registros) x 2 Número máximo de registros = 20 (40 bytes) Es posible cualquier longitud entre 2 y 40 bytes. |
4 a (longitud + 3) |
Bloque de bytes de datos que se leerán. |
Ejemplo de DS_Read
Ejemplo: Lectura de los registros de identificación 50 a 62
Byte |
Valor |
---|---|
0 [Número de función] |
0x5E [Función |
1 [Número de ranura] |
1 |
2 [Índice] |
5 [50/10] |
3 [Longitud] |
26 [(50 a 62 = 13) x 2] |
4 a 29 |
Valor de los registros 50 a 62 |
Envío de datos acíclicos (DS_Write)
Con la función
DS_Write
, el primario PROFIBUS DP puede leer los datos del secundario.
Antes de escribir un bloque de datos, se recomienda leerlo primero, a fin de proteger los datos que no se van a ver afectados. Solo se escribirá el bloque completo si dispone de permiso de escritura, que se comprueba en cada tabla de registros de la sección Grupos de variables de comunicación. Los encabezados de la columna 3 indican si las variables de cada tabla son de solo lectura o de lectura/escritura.
La siguiente tabla muestra el contenido de una trama DS_Write.
Byte |
Sintaxis |
---|---|
0 [Número de función] |
0x5F [Función |
1 [Número de ranura] |
Valor constante = 1 |
2 [Índice] |
Dirección de registro / 10 El acceso común a los registros tiene lugar cada 10 registros. El índice siempre se redondea a un entero. |
3 [Longitud] |
Longitud de los bloques de datos en bytes (Número de registros) x 2 Número máximo de registros = 20 (40 bytes) Es posible cualquier longitud entre 2 y 40 bytes. |
4 a (longitud + 3) |
Bloque de bytes de datos que se escribirán. |
Ejemplo de DS_Write: Descripción del proceso
Ejemplo: Reinicio de un disparo con la configuración del bit 704.3 en 1
1. Lectura de 700 a 704.
Byte |
Valor |
---|---|
0 [Número de función] |
0x5E [Función |
1 [Número de ranura] |
1 |
2 [Índice] |
70 [700/10] |
3 [Longitud] |
10 [(700 a 704 = 5) x 2] |
4 a 13 |
Valores actuales de los registros 700 a 704 |
2. Establecer el bit 3 del registro 704 en 1.
3. Escribir los registros 700 a 704.
Byte |
Valor |
---|---|
0 [Número de función] |
0x5F [Función |
1 [Número de ranura] |
1 |
2 [Índice] |
70 [700/10] |
3 [Longitud] |
10 [(700 a 704 = 5) x 2] |
4 a 13 |
Valores nuevos de los registros 700 a 704 |
Información en caso de error detectado
Si el acceso no es posible, no se tiene acceso a ningún registro y se devuelve un valor de error detectado mediante DP V1.
Los primeros 4 bytes de la respuesta en DP en caso de error detectado son los siguientes:
Byte |
Valor |
Significado |
---|---|---|
0 |
0xDE/ 0xDF |
para DS_Read / DS_Write |
1 |
0x80 |
indicación de DP V1 |
2 |
0xB6 |
clase de error detectado + código de error detectado 1 = acceso denegado |
3 |
0xXX |
código de error detectado 2, específico de LTMR (consulte la siguiente tabla) |
A continuación se muestra el código de error detectado 2, específico del LTMR:
Código de error detectado 2 |
Significado |
---|---|
01 |
Solicitud de pila interna completa |
03 |
Registro no gestionado o se necesitan derechos de acceso de superusuario |
06 |
Registro definido pero no escrito |
07 |
No se han encontrado todos los registros |
08 |
Escritura de registros no autorizada |
10 |
Valor escrito fuera del intervalo de registros, valor de palabra demasiado grande (demasiado alto) |
11 |
Valor escrito fuera del intervalo de registros, valor de palabra demasiado pequeño (demasiado bajo) |
12 |
Valor escrito fuera del intervalo de registros (valor MSB demasiado grande) |
13 |
Valor escrito fuera del intervalo de registros (valor MSB demasiado pequeño) |
14 |
Valor escrito fuera del intervalo de registros (valor LSB demasiado grande) |
15 |
Valor escrito fuera del intervalo de registros (valor LSB demasiado pequeño) |
16 |
El valor escrito no es un valor válido |
20 |
Rechazo del módulo, envío de una trama de error detectado |
255 |
Error interno detectado |
La presentación de un código de error detectado y de una clase de error detectado a la lógica del usuario depende de la implementación del primario (por ejemplo, el PLC).
El mecanismo sólo tiene acceso a los bloques de parámetros que comienzan en un parámetro dedicado (dirección MB). Esto significa que también se tiene acceso a los parámetros no utilizados (direcciones MB). El valor de los datos leídos desde estos parámetros es 0x00; pero en caso de escritura, es necesario escribir el valor 0x00 en estos parámetros. De lo contrario, se rechazará el acceso de escritura completo.
Registros internos TeSys T
Para obtener más información detallada sobre los registros internos TeSys T, consulte la publicación Communication Variables tables.