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
Buffer di invio
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.
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
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
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
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
SendCharacters Invia i caratteri tramite porta CPU o MCU
SendCharactersAndClearString Invia i caratteri e cancella la stringa
ClearReceiveBuffer Resetta il buffer di ricezione
SetCommunicationMode Impostare la modalità di comunicazione
F159_MTRN (n_Number=0) Redundant instruction
F159_MTRN (n_Number=16#8000) Cambia la modalità di comunicazione
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".
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
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.
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
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;