F159_MTRN

Invia i dati tramite porta CPU o MCU

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. 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.

Ingresso

s_Start (WORD, INT, UINT)

Buffer di invio

n_Number (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: Cambia la modalità di comunicazione tra la modalità controllata da programma e la modalità MEWTOCOL Master/Slave.

d_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

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.

  • F159_MTRN è 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 'n_Number' 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 'n_Number' 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: Flag "trasmissione conclusa"
  • 2: Condizione di esecuzione
  • 3: Esecuzione dell'istruzione di invio
  • 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.

F159_MTRN invia i dati dal primo elemento del buffer di invio (awSendBuffer[0]) specificato da s_Start. La lunghezza della stringa da inviare (8 byte) è impostata in n_Number. Utilizzare la funzione LEN per calcolare il numero di byte. I dati vengono emessi dalla porta COM 1 specificata da d_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_F,F159_MTRN!,,17,1,25,7,,?DEN?Ds_Start?Dn_Number?Dd_Port?AENO);
B(B_VARIN,,awSendBuffer[0],15,3,17,5,);
B(B_VARIN,,1,15,5,17,7,);
B(B_F,LEN!,,9,3,14,6,,?DIN?C);
B(B_VARIN,,sSendData,7,4,9,6,);
L(5,3,17,3);
L(1,3,3,3);
L(14,5,17,5);
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 *)         
    F159_MTRN(s_Start := SendBuffer[0], n_Number := LEN(sSendData), d_Port :=16#0302);
end_if;

IsTransmissionDone Valuta il flag "trasmissione conclusa"

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