SEND_RECV_MSG: invio e/o ricezione di messaggi definiti dall'utente
Il blocco funzione SEND_RECV_MSG invia e riceve messaggi definiti dall'utente. Il messaggio viene inviato sul supporto selezionato (ad esempio una linea seriale) e quindi si attende una risposta. È anche possibile inviare un messaggio senza attendere una risposta o ricevere un messaggio senza inviarne.
Questa funzione deve essere utilizzata con un gestore ASCII, ma supporta anche l'utilizzo con un gestore Modbus se si desidera inviare una richiesta non implementata nella libreria delle comunicazioni. In questo caso è necessario creare autonomamente la richiesta.
Descrizioni dei parametri specifici di SEND_RECV_MSG
Ingresso |
Tipo |
Commento |
---|---|---|
QuantityToSend |
UINT |
QuantityToSend è il numero di byte da inviare. Limite del controller: oM258/LMC058: 1050 byte oM241/M251: 252 byte |
BufferToSend |
POINTER TO BYTE |
BufferToSend è l'indirizzo del buffer (array di byte) nel quale viene memorizzato il messaggio da inviare. La funzione standard ADR deve essere utilizzata per definire il puntatore associato. Vedere l'esempio che segue. Se è 0, la funzione supporta la sola ricezione. |
SizeRecvBuffer |
UINT |
SizeRecvBuffer è la dimensione disponibile (in byte) del buffer di ricezione. La dimensione dei dati ricevuti (in byte) è disponibile nella proprietà interna dell'istanza del blocco funzionale (variabile interna): <Nome istanza>.NbRecvBytes. Limite del controller: oM258/LMC058: 1050 byte oM241/M251: 252 byte |
BufferToRecv |
POINTER TO BYTE |
BufferToRecv è l'indirizzo del buffer (array di byte SizeRecvBuffer) nel quale viene memorizzato il messaggio ricevuto. La funzione standard ADR deve essere utilizzata per definire il puntatore associato. Vedere l'esempio che segue. Se è 0, la funzione supporta il solo invio. |
Per le operazioni di solo invio, lo scambio è completo (Busy reimpostato a 0) quando tutti i dati, inclusi gli eventuali caratteri di start e stop, sono stati inviati alla linea.
Per un'operazione di invio/ricezione o di sola ricezione, il sistema riceve i caratteri fino alla condizione finale. Quando si raggiunge la condizione finale, lo scambio è completo (Busy reimpostato a 0). I caratteri ricevuti vengono poi copiati nel buffer di ricezione fino a sizeRecvBuffer caratteri e la dimensione dei dati ricevuti (in byte) è disponibile nella proprietà dell'istanza del blocco funzionale (variabile interna): <Nome istanza>.NbRecvBytes. L'ingresso sizeRecvBuffer non rappresenta una condizione finale.
Le condizioni iniziali e finali dei messaggi definiti dall'utente sono configurate nella finestra di dialogo di configurazione dell'ASCII manager:
NOTA: in questo esempio non ci sono caratteri iniziali e finali. La condizione finale del frame ricevuto è un timeout di 250 ms.
Questa POU consente il solo invio del messaggio definito dall'utente "hello" sulla linea seriale 1:
NOTA: Un fronte di salita sulla variabile Start avvia la conversione di un indirizzo e l'invio del messaggio.