Para evitar que la comunicación TCP entre un CP 443-1 y una PC se desconecte temporalmente al ejecutar el bloque AG_LSEND (FC50), invoque la función de manera cíclica en la rutina de control en lugar de llamarla condicionalmente por flancos. La pérdida de conexión y el envío no deseado de una orden de desconexión (disconnect job) ocurren cuando el bit de activación ACT se vuelve a pulsar o se fuerza un reinicio mientras el bloque está procesando una petición activa (indicado por el estado STATUS = 0x7000). Para solucionar este comportamiento, mantenga la llamada a AG_LSEND en ejecución continua en cada ciclo del PLC y condicione el parámetro ACT únicamente cuando los bits de estado confirmen que el bloque está en reposo.
Tabla de contenido
- Causa técnica: desconexión y desbordamiento de búfer en el CP 443-1
- Requisitos previos
- Procedimiento de corrección lógica en la llamada a AG_LSEND
- Verificación
- Limitaciones y precauciones operativas
- Preguntas frecuentes para ingenieros
- Artículos relacionados
- Etiquetas relacionadas
Causa técnica: desconexión y desbordamiento de búfer en el CP 443-1
El bloque de función AG_LSEND (FC50) para el sistema SIMATIC S7-400 opera bajo un esquema de comunicación asíncrona. Esto significa que la transferencia de datos entre la CPU, el procesador de comunicaciones CP 443-1 y la tarjeta de red de la PC requiere múltiples ciclos de exploración para completar el ciclo de transmisión (handshake).
Cuando AG_LSEND se inserta dentro de una estructura condicional que deja de ejecutarse fuera de la petición, o cuando se reactiva el parámetro ACT mientras una transferencia previa está en curso (STATUS = 0x7000), la secuencia del bloque se interrumpe. Esta reconfiguración abrupta o reinicio no válido del bloque provoca que la memoria del CP 443-1 interprete un fallo en el canal, enviando una orden explícita de desconexión (disconnect job) al socio remoto y generando un riesgo directo de desbordamiento de búfer (buffer overflow) en el procesador de comunicaciones. La conexión TCP debe restablecerse internamente tras varios ciclos, lo que genera retrasos e inestabilidad en la red industrial.
Requisitos previos
- Sistema de control SIMATIC S7-400 con un procesador de comunicaciones CP 443-1.
- Proyecto de ingeniería en STEP 7 V5.x o TIA Portal con la conexión TCP configurada en NetPro o VJB/Topology.
- PC remota equipada con una tarjeta de red estándar y una aplicación de comunicación TCP/IP (Socket) activa.
- Acceso en línea a la CPU S7-400 y permisos para modificar bloques de programa (OB, FC o FB).
Procedimiento de corrección lógica en la llamada a AG_LSEND
Se utiliza mejor cuando: El CP 443-1 interrumpe la conexión TCP con la PC o reporta orden de desconexión en el búfer de diagnóstico al intentar enviar datos mediante la interfaz Send/Receive.
Procedimiento
- Abra el editor de bloques de comunicación en el proyecto de la CPU S7-400 (por ejemplo, dentro del
OB1o unFC/FBde llamada cíclica). - Asegúrese de que la llamada al bloque
AG_LSEND(FC50) no esté condicionada por un salto (JC/JNB) ni dentro de una instrucciónIFestricta que inhabilite la ejecución completa del bloque.AG_LSENDdebe ser evaluado en cada ciclo del PLC. - Configure la lógica de control del parámetro de entrada
ACTpara que responda a un flanco positivo únicamente cuando el bloque no esté ocupado. -
Evalúe las señales de salida del bloque:
DONE: Transmisión completada con éxito.ERROR: Ocurrencia de fallo en la transmisión.STATUS: Código de estado de la interfaz.
5. Inhiba cualquier nueva activación en la entradaACTsi el parámetroSTATUSarroja el valor0x7000(petición en proceso).
C
// Estructura lógica conceptual para la llamada asíncrona segura de AG_LSEND (FC50)
// 1. Evaluación de estado de reposo antes de solicitar nuevo envío
if (bRequestSend && !bBlockBusy) {
bAct = 1; // Activar pulso para el parámetro ACT
bBlockBusy = 1; // Bloquear nuevas peticiones
} else {
bAct = 0;
}
// 2. Ejecución CÍCLICA del bloque FC50 (AG_LSEND)
// AG_LSEND(
// ACT := bAct,
// ID := wConnID,
// LADDR := wBaseAddr,
// SEND := pDataBuffer,
// LEN := iDataLen,
// DONE := bDone,
// ERROR := bError,
// STATUS := wStatus
// );
// 3. Gestión del estado de retorno
if (bDone) {
bBlockBusy = 0; // Envío exitoso: liberar bloqueo
}
if (bError || (wStatus != 0x0000 && wStatus != 0x7000)) {
bBlockBusy = 0; // Fallo detectado: liberar bloqueo para diagnóstico/reintento
wLastError = wStatus; // Registrar código de error
}
Resultado esperado: El CP 443-1 procesa la trama de datos sin enviar mensajes de desconexión a la PC y la conexión TCP permanece activa durante la transmisión de eventos.
Verificación: Monitoree el parámetro STATUS en la tabla de variables. Durante el reposo debe indicar 0x0000 o 0x7000 momentáneamente durante la transferencia, retornando a 0x0000 con un pulso en DONE.
Limitación: Si la conexión física de red se interrumpe o la PC cierra el socket TCP, AG_LSEND devolverá un código de error en STATUS (por ejemplo, 0x8183), lo cual requiere la reconexión a nivel de la capa de transporte antes de intentar un nuevo envío.
Precaución: Nunca reinicie el flag de activación ni fuerce una llamada de reinicio al bloque FC50 mientras el estado indique 0x7000. Un reinicio forzado saturará la cola de peticiones de la memoria del CP 443-1.
Verificación
El procedimiento de corrección se considera exitoso cuando:
- La llamada al bloque
AG_LSENDse ejecuta de manera continua en cada ciclo del PLC sin saltos condicionales. - El búfer de diagnóstico del CP 443-1 deja de registrar eventos de envío de desconexión (disconnect job) hacia la dirección IP de la PC.
- El socket TCP entre la PC y el CP 443-1 permanece en estado establecido (Established) antes, durante y después de la activación de una transmisión de datos.
- Las variables de salida
ERRORySTATUSno muestran códigos de fallo relacionados con la saturación de recursos del procesador de comunicaciones.
Limitaciones y precauciones operativas
- Frecuencia de disparo: No intente disparar el parámetro
ACTa una frecuencia superior a la velocidad de respuesta real de la red y la PC. Respetar las señalesDONEyERRORes obligatorio para evitar congestión en el bus K de la CPU S7-400. - Ancho de banda del CP: Para volúmenes grandes de datos en el S7-400, asegúrese de utilizar las funciones extendidas adecuadas si la longitud de la trama excede los límites estándar soportados por el firmware del CP 443-1.
- Cierre de socket remoto: Si la aplicación en la PC finaliza la conexión TCP unilateralmente, el CP 443-1 registrará la pérdida de enlace independientemente de la lógica configurada en el PLC.
Preguntas frecuentes para ingenieros
¿Por qué se rompe la conexión TCP si invoco AG_LSEND únicamente cuando necesito enviar datos?
Porque las funciones de comunicación de la interfaz Send/Receive en la familia SIMATIC son bloques asíncronos. Al dejar de llamar a la función en el ciclo del PLC a mitad de una transacción, el bloque de código interno pierden el seguimiento del protocolo, haciendo que el CP 443-1 interprete una inconsistencia en el canal y envíe un comando de desconexión al interlocutor.
¿Qué indica exactamente el código STATUS 0x7000 en AG_LSEND?
Indica que el bloque está procesando la petición de envío (job in progress). Mientras este valor esté presente en la salida STATUS, el usuario no debe modificar la variable asignada al parámetro ACT ni ejecutar reinicios sobre el bloque.
¿Se debe llamar también a AG_LRECV (FC60) en cada ciclo del PLC?
Sí. Al igual que AG_LSEND, el bloque de recepción AG_LRECV debe ejecutarse cíclicamente para que el procesador de comunicaciones pueda transferir los datos recibidos en el búfer del CP hacia la memoria de la CPU de forma transparente.
¿Puedo utilizar los bloques FC5 y FC6 en lugar de FC50 y FC60 en un S7-400?
Para el sistema S7-400 se deben utilizar los bloques AG_LSEND (FC50) y AG_LRECV (FC60), los cuales están optimizados para la arquitectura del bus de fondo y los procesadores de comunicaciones del S7-400. Los bloques FC5 (AG_SEND) y FC6 (AG_RECV) están destinados a la plataforma S7-300.
Referencias técnicas
- Siemens Industry Online Support (SIOS): Programming Example for the Send-Receive Interface with the Blocks FC50 (AG_LSEND) and FC60 (AG_LRECV) for S7-400 (ID de artículo: 18513371).
- Siemens Industry Online Support (SIOS): How to configure a TCP connection to a PC (ID de artículo: 18843927).
Artículos relacionados
- Cómo configurar comunicaciones TCP IP con CP 443-1 en STEP 7
- Diferencias entre bloques AG_SEND FC5 y AG_LSEND FC50 en SIMATIC S7
- Diagnóstico de errores de comunicación en CP443-1 usando el búfer de diagnóstico
Etiquetas relacionadas
Code: C133