SendData

Invia i dati tramite porta di comunicazione o connessione utente Ethernet

Questa istruzione invia i dati, utilizzando un buffer di invio, a dispositivi esterni (computer, strumento di misurazione, lettore di codici a barre, ecc.) collegati alla porta di comunicazione specificata o tramite connessione utente Ethernet. Se applicata alla porta COM della CPU, inoltre, cancella il buffer di ricezione, resetta il flag "ricezione conclusa" e consente l'ulteriore ricezione di dati.

Parametri

Ingresso

Port (WORD, INT, UINT)

Specifica le porte di comunicazione (in base al tipo di PLC):

  • Porta COM p.es. SYS_COM0_PORT

  • Porta Ethernet p.es. SYS_ETHERNET_USER_CONNECTION_1

  • MCU/SCU p.es. 16#xx01 (xx = numero slot) in COM01

Start (WORD, INT, UINT)

Buffer di invio

NumberOfBytes (WORD, INT, UINT)

Numero di byte da inviare:

  • Valore negativo: Il carattere terminatore selezionato nei registri di sistema non viene aggiunto alla stringa da trasmettere.

  • 0 (zero byte): Preparare il sistema alla ricezione di ulteriori dati

  • 16#8000: Cambiare modalità di comunicazione

Note

  • Quando il numero di byte specificato è stato inviato, il flag "trasmissione conclusa" passa a TRUE. Possono essere inviati o ricevuti nuovi dati. Ogni istruzione di invio fa passare il flag "trasmissione conclusa" a FALSE e non possono essere ricevuti dati. La valutazione del flag "trasmissione conclusa" può essere utile nei casi in cui non ci si attende alcuna risposta, ad esempio con messaggi di broadcast.

  • SendData è incapsulata nelle seguenti istruzioni:

    • SendCharacters

    • SendCharactersAndClearString

    • ClearReceiveBuffer

    • SetCommunicationMode

Flag di errore

sys_bIsOperationErrorHold (passa a TRUE e resta TRUE)
  • se l'area specificata utilizzando il registro indice eccede il limite.

  • se il numero di byte da inviare specificato da 'NumberOfBytes' non rientra nell'area specificata.

  • Flag solo per la MCU:

    • se l'unità MCU non esiste nello slot specificato o se devono essere inviati zero byte.

    • se 16#8000 è specificato nella modalità MEWTOCOL-COM Master/Slave

sys_bIsOperationErrorNonHold (passa a TRUE per una scansione)
  • se l'area specificata utilizzando il registro indice eccede il limite.

  • se il numero di byte da inviare specificato da 'NumberOfBytes' non rientra nell'area specificata.

  • Flag solo per la MCU:

    • se l'unità MCU non esiste nello slot specificato o se devono essere inviati zero byte.

    • se 16#8000 è specificato nella modalità MEWTOCOL-COM Master/Slave

Esempio

In questo esempio vengono trasmessi i caratteri della stringa sSendData. Definire un buffer di invio per 30 byte (ARRAY [0...15] OF WORD) e copiare 8 caratteri di una stringa (""ABCDEFGH") nel buffer.

Struttura del buffer di invio:

La prima word del buffer di invio (offset 0) è riservata al numero di byte da inviare. Copiare quindi i dati in offset 1 (SendBuffer[1].

Quando inizia l'invio (la condizione di esecuzione dell'istruzione di invio passa a TRUE), il valore nell'offset 0 viene impostato a 8. Al termine della trasmissione, il valore nell'offset 0 è resettato automaticamente su 0. I dati negli offset da 1 a 4 vengono inviati in ordine, partendo dal byte basso.

Trasmettere i caratteri "ABCDEFGH" a un dispositivo esterno collegato alla porta COM 1. Per il carattere iniziale e il carattere terminatore vengono selezionate le impostazioni di default "No-STX" e "CR".

  1.  (1)  Flag "trasmissione conclusa"
  2.  (2) Condizione di esecuzione
  3.  (3) Esecuzione dell'istruzione di invio
  4.  (4) Trasmissione

Intestazione del POU

Tutte le variabili di ingresso e uscita utilizzate per programmare questa funzione sono state dichiarate nell'intestazione del POU. La stessa intestazione del POU è utilizzata per tutti i linguaggi di programmazione.

	VAR
		bSend: BOOL:=FALSE;
			(*activates function*)
		sSendData: STRING[30]:='ABCDEFGH';
			(*up to 30 chars*)
		awSendBuffer: ARRAY [0..15] OF WORD:=[16(0)];
			(*for 30 chars + 1 word*)
	END_VAR

Corpo del POU

Quando bSend è TRUE, F10_BKMV copia i caratteri della stringa sSendData nel buffer awSendBuffer iniziando da awSendBuffer[1]. Le prime due word di una stringa contengono le informazioni dell'intestazione (numero di caratteri massimo e attuale). Le intestazioni delle stringhe non devono essere copiate nel buffer. Prima di copiare i dati, definire quindi un offset di 2 riferito all'indirizzo iniziale della stringa. Assicurarsi che le dimensioni del buffer di invio siano sufficienti per tutti i dati da inviare. Ciascun elemento dell'array di dati su SendBuffer può contenere due caratteri della stringa su SendString. SendBuffer[0] è riservato al numero di byte da inviare.

SendData invia i dati dal primo elemento del buffer di invio (awSendBuffer[0]) specificato da Start. La lunghezza della stringa da inviare (8 byte) è impostata in NumberOfBytes. Utilizzare la funzione LEN per calcolare il numero di byte. I dati vengono emessi dalla porta COM 1 specificata da Port.

Corpo LD

BODY
    WORKSPACE
        NETWORK_LIST_TYPE := NWTYPELD ;
        ACTIVE_NETWORK := 0 ;
    END_WORKSPACE
    NET_WORK
        NETWORK_TYPE := NWTYPELD ;
        NETWORK_LABEL :=  ;
        NETWORK_TITLE :=  ;
        NETWORK_HEIGHT := 10 ;
        NETWORK_BODY
B(B_COMMENT,,Creating the send buffer,1,0,14,1,);
B(B_CONTACT,,bSend,3,2,5,4,R);
B(B_VAROUT,,awSendBuffer[1],26,4,28,6,);
B(B_F,F10_BKMV,,18,2,26,7,,?DEN?D@'s1'?Ds2?AENO?Cd);
B(B_F,Adr_Of_VarOffs_I!,,9,3,18,7,,?D@'Var'?DOffs?CAdr);
B(B_VARIN,,sSendData,7,4,9,6,);
B(B_F,AdrLast_Of_Var_I!,,9,7,18,9,,?D?C);
B(B_VARIN,,sSendData,7,7,9,9,);
B(B_VARIN,,2,7,5,9,7,);
L(5,3,18,3);
L(1,3,3,3);
L(18,3,18,4);
L(1,0,1,10);
L(18,6,18,8);
        END_NETWORK_BODY
    END_NET_WORK
    NET_WORK
        NETWORK_TYPE := NWTYPELD ;
        NETWORK_LABEL :=  ;
        NETWORK_TITLE :=  ;
        NETWORK_HEIGHT := 7 ;
        NETWORK_BODY
B(B_COMMENT,,bSend sign of the bSend buffer via the serial interface,1,0,25,1,);
B(B_CONTACT,,bSend,3,2,5,4,R);
B(B_VARIN,,awSendBuffer[0],14,4,16,6,);
B(B_F,LEN!,,9,4,14,7,,?DIN?C);
B(B_VARIN,,sSendData,7,5,9,7,);
B(B_F,E_SendData!,,16,1,26,7,,?DEN?DPort?DStart?DNumberOfBytes?AENO);
B(B_VARIN,,1,14,3,16,5,);
L(1,3,3,3);
L(5,3,16,3);
L(14,6,16,6);
L(1,0,1,7);
        END_NETWORK_BODY
    END_NET_WORK
END_BODY

Corpo ST

if (DF(bSend)) then
    (* Copy all characters of the SendString to the SendBuffer from position 1 *)
    F10_BKMV(s1_Start := Adr_Of_VarOffs(Var := sSendData, Offs :=2), 
         s2_End := AdrLast_Of_Var(sSendData), 
         d_Start => awSendBuffer[1]);
    (* Send the data of the SendBuffer via the COM Port 2 of the MCU unit in slot 3 *)
    (* In SendBuffer[0] the number of bytes not yet transmitted is stored *)         
    SendData(Port :=1, start := awSendBuffer[0], NumberOfBytes := LEN(sSendData));
end_if;

IsTransmissionDone Valuta il flag "trasmissione conclusa"

L'ultima revisione: 2022-04-19Feedback su questa paginaPanasonic hotline