SEND_RECV_MSG: invio e/o ricezione di messaggi definiti dall'utente

Descrizione della funzione

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.

Rappresentazione grafica

Descrizioni dei parametri specifici di SEND_RECV_MSG

Ingresso

Tipo

Commento

QuantityToSend

UINT

QuantityToSend è il numero di byte da inviare.

Limite del controller:

  • M258/LMC058: 1050 byte

  • M241/M251/M262: 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 funzione (variabile interna): <Nome istanza>.NbRecvBytes.

Limite del controller:

  • M258/LMC058: 1050 byte

  • M241/M251/M262: 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 funzione (variabile interna): <Nome istanza>.NbRecvBytes. L'ingresso SizeRecvBuffer non rappresenta una condizione finale.

I parametri di ingresso e di uscita comuni a tutti i blocchi funzione delle librerie PLCCommunication sono descritti in altre sezioni.

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.

Esempio

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.