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.
Ingresso |
Tipo |
Commento |
---|---|---|
QuantityToSend |
UINT |
QuantityToSend è il numero di byte da inviare. Limite del controller:
|
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 funzione (variabile interna): <Nome istanza>.NbRecvBytes. Limite del controller:
|
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 funzione (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: