×
Siemens Industry Online Support
Siemens AG
Tipo de artículo: Ejemplo de aplicación ID de artículo 8707570, Fecha del artículo: 03/06/2004
(2)
Evaluar

Funciones y ejemplos: Transferencia de datos (con el FC5 y el FC6) con longitudes de telegrama variables y usando el protocolo TCP

  • Artículo
  • Relacionado con producto(s)

 

PREGUNTA
¿Cómo se pueden transferir datos con longitudes de telegrama variables a través de TCP, con ayuda de las funciones de comunicación (FC5 "AG_SEND" y FC6 "AG_RECV")?

 

RESPUESTA

Comportamiento del protocolo TCP
Si se transfieren datos con el protocolo TCP, ésta transferencia se realiza en forma de flujo de datos. No se transfiere ni información sobre la longitud ni sobre el comienzo y el final del telegrama. Esto no supone ningún problema por parte del emisor ya que conoce los bytes de datos que quiere enviar. Pero el receptor no puede reconocer dónde termina un telegrama y empieza el siguiente.

Por eso, el usuario dispone de 2 posibilidades a la hora de realizar acoplamiento TCP puros:

  1. Se trabaja con una longitud de telegrama fija, es decir, tanto el emisor como el receptor trabajan con una longitud de datos previamente definida. De esta forma, se definen de forma unívoca los límites del telegrama.
  2. Se trabaja con una longitud de telegrama variable. Esto exige más trabajo en el emisor y el receptor, ya que en los primeros bytes hay que insertar un identificador de inicio y la longitud de los datos enviados. De esta forma, el receptor puede interpretar exactamente el telegrama enviado.

El siguiente programa ejemplo contiene un enlace TCP, a través de los cuales se envían datos a una estación con una longitud de telegrama variable a través del FC5, y recibirlos a través del FC6.

 

Programa ejemplo: Transferencia de datos (con el FC 5 "AG_SEND" y el FC6 "AG_RECV") con longitudes de telegrama variables a través del protocolo TCP

 

Descripción general
El proyecto de STEP 7 contiene 2 estaciones S7-300 con la CPU 315-2DP y la CP 343-1 para poder comunicar a través de Industrial Ethernet. La base de la Comunicación es un enlace TCP entre ambas estaciones. Si se abren las propiedades del enlace TCP con ayuda de la opción "Botón derecho del ratón -> Propiedades del objeto" en el NetPro, se puede ver el parámetro "ID" para los módulos de función de comunicaciones. Este dato hay que tenerlo en cuenta al llamar al FC5 o el FC6, para que se pueda realizar el intercambio de datos a través de un enlace TCP.

 

Figura 1:Propiedades del enlace TCP

 

Para que funcione la transferencia de datos a través del protocolo TCP, los datos a enviar deben tener una estructura determinada. Un telegrama debe poseer un identificador de inicio (para que el receptor reconozca el comienzo del telegrama), el dato de la longitud de los datos (para definir el buffer de recepción) y los propios datos. En este ejemplo, se utilizan 4 bytes como identificador de inicio (predefinidos con los valores 0x11, 0x12, 0x13, 0x14) y un String S7 para definir el telegrama. Este String S7 consta de 2 bytes sobre la información de la longitud y el propio String de datos. En este String S7 se puede transferir cualquier carácter ASCII.

 

Figura 2: Estructura de un telegrama

 

Advertencia
El programa ejemplo se basa en la estructura de telegrama mostrada en la figura 2. Pero, se puede crear la estructura que se quiera. Si se quiere utilizar otra estructura de telegrama diferente (por ejemplo, utilizando un identificador de inicio de 3 bytes), adapte el programa ejemplo suministrado a estos requerimientos.

Los datos que se quieren enviar con el FC5 (AG_SEND) deberán, por tanto, estar preparados con esta estructura en un módulo de datos (DB220). Los datos se reciben con el FC6 (AG_RECV) en varios pasos.

  1. Recepción del identificador de inicio (byte a byte) e identificación del telegrama
  2. Recepción de la información de la longitud del String S7
  3. Recepción de los datos

Descripción del programa de STEP 7
El programa de STEP 7 contiene los módulos OB100, OB1, FB100, DB100 (DB de instancia del FB100), FB101 (Multinstancia para el DB100), DB 220, DB221, FC5 y FC6.

  • OB100
    ElOB100 es un OB de arranque y se ejecuta en el rearranque de la CPU (arranque en caliente). En este OB, con las marcas M1.0 y M0.1 se libera el primer servicio de comunicación.

Figura 3: OB100

  • OB1
    El OB1 se llama cíclicamente. En este OB se dispone de la llamada al FB100 (DB de instancia: DB100) con las marcas M1.0 y M0.1. Después de ejecutar el FB100, se resetea la marca M1.0.

Figura 4: OB1

 

·"font:7.0pt "Times New Roman""> FB100
El FB100 se llama desde el OB1. En este FB se dispone de la llamada al FC5 "AG_SEND" y al FB101 "AG_RECV_CR".

El modulo de envío FC5 "AG_SEND"
El FC5 se activa con el parámetro de entrada "ACT", si la marca M10.7 tiene un flanco positivo y el parámetro "SND_BUSY" no está activado. Si el servicio está todavía activo, "SND_BUSY" está a “1” y no se puede iniciar la función.
Este enclavamiento de la función es especialmente importante, ya que ésta es asíncrona y puede durar varios ciclos. Si se activa constantemente la función sin esperar a que termine el servicio anterior, se puede provocar una sobrecarga de la comunicación.
Los parámetros de entrada "ID" y "LADDR" se deben tomar del diálogo de propiedades del enlace TCP en el NetPro (figura 1). En el parámetro “SEND” se indica la dirección de los datos a enviar (P#DB220.DBX0.0 BYTE 48). En el parámetro "LEN" se indica el número de bytes a enviar realmente (48). Los parámetros de salida "DONE", "ERROR" y "STATUS" se necesitan para evaluar el servicio y sólo son válidos en cada ciclo y sólo son válidos en cada ciclo.

 

Figura 5: FB100 – Llamada al FC5

 

Si el módulo se ejecuta sin fallo, "SND_BUSY" se resetea y se permite llamar de nuevo al FC5. Si el módulo se termina con fallo, se hace una copia de seguridad de la palabra de estado del módulo para el análisis del fallo y también se resetea el parámetro "SND_BUSY".

 

Figura 6: FB100: Evaluación de la llamada al FC5

 

El módulo de recepción FB101 "AG_RECV_VARIABLE"

Si se llama al módulo FB101 "AG_RECV_VARIABLE”, los parámetros de entrada "ID" y "LADDR" se deben tomar del diálogo de propiedades del enlace TCP en el NetPro (figura 1). En el parámetro “RECV_BUF” se indica la dirección de archivo de los datos recibidos (P#DB221.DBX0.0 BYTE50). Los parámetros de salida "NDR", "ERROR" y "STATUS" se necesitan para evaluar el servicio y sólo son válidos en el mismo ciclo.

 

Figura 7: FB100 - Llamada al FB101

 

Si el módulo se ejecuta sin fallo, se guarda el dato de la longitud de datos recibidos. Si el módulo se termina con fallo, se hace una copia de seguridad de la palabra de estado del módulo para poder realizar un análisis del fallo.

 

Figura 8: FB100 – Evaluación de la llamada al FB101

  • FB101 ("AG_RECV_VARIABLE")
  • La máquina de estado
  • El punto de partida en el programa (en el FB101) se ajusta a través de la variable "STATE_CNT". Dependiendo del estado de la variable "STATE_CNT", se salta al segmento correspondiente para seguir elaborando el programa.

Elaboración del programa dependiendo del parámetro “STATE_CNT”

“STATE_CNT”

Descripción

0

Se ha recibido el primer byte del identificador de inicio.
(Salto de NW9 a NW13)

1

Se ha recibido el segundo byte del identificador de inicio.
(Salto de NW10 a NW14)

2

Se ha recibido el tercer byte del identificador de inicio.
(Salto de NW11 a NW15)

3

Se ha recibido el cuarto byte del identificador de inicio.
(Salto de NW12 a NW16)

4

Se reconoce el identificador de inicio. Se recibe la información de la longitud.
 
(Salto de NW3 a NW17)

5

Creación del buffer de recepción y recepción de los datos.
(Salto de NW4 a NW20)

Recepción del identificador de inicio (byte a byte) e identificación del telegrama (segmento 5 - 16)

El identificador de inicio (4 Bytes) se recibe con el FC6 "AG_RECV" byte a byte.

Al llamar al FC6 "AG_RECV", se aceptan los parámetros "ID" y "LADDR" desde los parámetros de entrada del FB101. En el parámetro "RECV", se indica el lugar de archivo para el byte recibido (SD_Buffer: Variable tipo byte). Los parámetros de salida "NDR", "ERROR" y "STATUS" son necesarios para la evaluación del servicio y sólo son válidos en el mismo ciclo

Si el módulo se ejecuta sin fallo, los bytes recibidos se guardan para su elaboración posterior. Si el módulo se termina con fallo, se hace una copia de seguridad de la palabra de estado del módulo para poder realizar un análisis del fallo.

Después de recibir un byte, se realiza la comprobación de la información de inicio determinada (Byte 0 = 11; Byte 1 = 12; Byte 2 = 13; Byte 3 = 14).

Figura 9: Identificación de un telegrama con ayuda del identificador de inicio

 

Recepción de la información sobre la longitud del String S7 (segmento 3, 17 - 20)

Si la información recibida se identifica como el identificador de inicio, lo siguiente que se recibe con el FC6 "AG_RECV" es la información de la longitud del String S7 (2 Bytes).

Al llamar al FC6 "AG_RECV", se cogen los parámetros "ID" y "LADDR" desde los parámetros de entrada del FB101. En el parámetro "RECV", se indica el lugar de archivo para los 2 bytes de información de la longitud (VAR_LEN: Estructura con 2 bytes). Los parámetros de salida "NDR", "ERROR" y "STATUS" son necesarios para la evaluación del servicio y sólo son válidos en cada ciclo.

Si el módulo se ejecuta sin fallo, la longitud real recibida en los datos de recepción se utilizan para el buffer de recepción (puntero ANY). Si el módulo se termina con fallo, la palabra de estado en el FB 101 se muestra como parámetro de salida.

 

Bild 10: Empfang der Längeninfo

 

La información sobre la información real recibida del String (VAR_LEN.ACT_LEN) se utiliza para crear el buffer de recepción (puntero ANY). Para ello, en la llamada del FB101 se verifica el buffer de recepción indicado (puntero ANY) con la longitud real de los datos y se guarda un puntero ANY temporal (VAR_BUF).

 

Figura 11: Preparación del buffer de recepción

 

Recepción de los datos (segmento 4, 21- 23)

Por último, ser reciben los datos con el FC6.

Al llamar al FC6 "AG_RECV", se cogen los parámetros "ID" y "LADDR" desde los parámetros de entrada del FB101. En el parámetro "RECV", se indica el lugar de archivo para los datos (VAR_BUF: Puntero ANY temporal). Los parámetros de salida "NDR", "ERROR" y "STATUS" son necesarios para la evaluación del servicio y sólo son válidos en cada ciclo.

Si el módulo se ejecuta sin fallo, la longitud de los datos recibidos se asegura y se indica como parámetro de salida en el FB101. Si el módulo se termina con fallo, la palabra de estado en el FB 101 se muestra como parámetro de salida.

 

Figura 12: Recepción de los datos

  • DB220:
    En el DB220, se encuentra la estructura de los datos que se envían con el FC5.

Figura 13: DB220 – Estructura de los datos de envío

  • DB221:
    En el DB221, se encuentra la estructura de los datos que se reciben con el FC6.

El Download contiene el programa ejemplo descrito. Se ha creado con el STEP 7 V5.3 y el SIMATIC NET V6.2.

 

T_cp_data.exe

 

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

 

Información de seguridad
Para proteger las infraestructuras tecnológicas, los sistemas, las máquinas y las redes contra amenazas cibernéticas, es necesario implementar y mantener continuamente un concepto de seguridad de TI holístico de última generación. Los productos y soluciones de Siemens son parte de este concepto. Para obtener más información sobre seguridad cibernética. Encontrará más información sobre la seguridad cibernética en
https://www.siemens.com/cybersecurity#Ouraspiration.
Respaldo de estadísticas
With this function the IDs found are listed according to number (format .txt).

Generar lista
Copiar URL
Mostrar esta página en el nuevo diseño
mySupport Cockpit