SEND_RECV_MSG: Envío o recepción de mensajes definidos por el usuario
El bloque de funciones SEND_RECV_MSG envía y recibe mensajes definidos por el usuario. Envía un mensaje con el medio seleccionado (por ejemplo, una línea serie) y, a continuación, espera una respuesta. También es posible enviar sin esperar una respuesta o bien recibir un mensaje sin enviar uno.
Esta función debe utilizarse con un gestor ASCII. También se puede utilizar con un gestor Modbus si desea enviar una petición que no se ha implementado en la biblioteca de comunicación. En este caso, debe generar una petición usted mismo.
Descripciones de parámetros específicos de SEND_RECV_MSG
Entrada |
Tipo |
Comentario |
---|---|---|
QuantityToSend |
UINT |
QuantityToSend es el número de bytes a enviar. Limitación del controlador: oM258/LMC058: 1050 bytes oM241/M251: 252 bytes |
BufferToSend |
POINTER TO BYTE |
BufferToSend es la dirección del búfer (matriz de bytes) en la que se almacena el mensaje a enviar. La función estándar ADR debe utilizarse para definir el puntero asociado. Consulte el ejemplo siguiente. Si es 0, la función es de solo recepción. |
SizeRecvBuffer |
UINT |
SizeRecvBuffer es el tamaño disponible (en bytes) del búfer de recepción. El tamaño de los datos recibidos (en bytes) está disponible en la propiedad interna de la instancia del bloque de funciones (variable interna): <Instance Name>.NbRecvBytes. Limitación del controlador: oM258/LMC058: 1050 bytes oM241/M251: 252 bytes |
BufferToRecv |
POINTER TO BYTE |
BufferToRecv es la dirección del búfer (matriz de SizeRecvBuffer bytes) en la que se almacena el mensaje recibido. La función estándar ADR debe utilizarse para definir el puntero asociado. Consulte el ejemplo siguiente. Si es 0, la función es de solo envío. |
Para las operaciones de sólo envío, se considera que el intercambio es completo (Busy restablecido en 0) cuando todos los datos (incluidos los posibles caracteres de inicio y detención) se han enviado a la línea.
Para una operación de envío/recepción o de sólo recepción, el sistema recibe caracteres hasta la condición de fin. Cuando se alcanza la condición de fin, el intercambio finaliza (Busy restablecido en 0). A continuación, los caracteres recibidos se copian en el búfer de recepción hasta sizeRecvBuffer caracteres y el tamaño de los datos recibidos (en bytes) está disponible en la propiedad de la instancia del bloque de funciones (variable interna): <Nombre de instancia>.NbRecvBytes. La entrada sizeRecvBuffer no representa una condición de fin.
Las condiciones de inicio y fin de los mensajes definidos por el usuario se configuran en el cuadro de diálogo de configuración del gestor ASCII:
NOTA: En este ejemplo no hay caracteres de inicio y fin. La condición de fin de tramas recibidas es un timeout de 250 ms.
Esta POU permite solo el envío del mensaje definido por el usuario “hello” en la línea serie 1:
NOTA: Un flanco ascendente en la variable Start inicia la conversión de una dirección y el envío del mensaje.