Leggere i dati dalla porta MCU
Utilizzate questa istruzione per copiare i dati che la Multi-Communication Unit ha ricevuto dal dispositivo esterno nel buffer di ricezione della CPU. La porta di comunicazione della MCU è specificata in s_Port. Il buffer di ricezione è definito da d1_Start e d2_End.
Ingresso
Specificazione del numero di slot (byte alto) e del numero di porta (byte basso) della MCU alla quale vengono trasmessi i dati.
16#xx01: COM1 sulla MCU nello slot 16#xx
16#xx02: COM2 sulla MCU nello slot 16#xx
Indirizzo iniziale del buffer di ricezione
Indirizzo finale del buffer di ricezione
Non eseguite F161_MRCV se non avete verificato la conclusione della ricezione valutando il flag "ricezione conclusa". Il polling dei dati con F161_MRCV non funziona correttamente! Il flag "ricezione conclusa" può essere valutato utilizzando le funzioni IsReceptionDone e IsReceptionDoneByTimeOut oppure valutando i flag di ingresso (X) X0 e X2.
Il numero di byte ricevuti viene memorizzato nell'indirizzo iniziale specificato da d1_Start del buffer di ricezione. Se il dato ricevuto eccede l'indirizzo finale specificato da b2_End, viene rilevato un errore di funzionamento. Il dato ricevuto fino a d2_End verrà memorizzato. F161_MRCV inoltre cancella il buffer di ricezione, resetta il flag "ricezione conclusa" e consente l'ulteriore ricezione di dati.
F161_MRCV è supportata da tutti i PLC: Se si utilizzano funzioni adatte al posto dei flag, è possibile creare programmi indipendenti dal PLC che gestiscono la comunicazione tanto per le porte di comunicazione della CPU quanto per le porte della MCU. I PLC che non utilizzano porte MCU semplicemente non traducono l'istruzione F161_MRCV. Si raccomanda di utilizzare le funzioni ReadData o ReadCharacters per un programma di più semplice lettura.
se l'area specificata utilizzando il registro indice eccede il limite.
se l'unità MCU non esiste nello slot specificato o se devono essere inviati zero byte.
se la porta di comunicazione specificata non esiste
se l'area specificata utilizzando il registro indice eccede il limite.
se l'unità MCU non esiste nello slot specificato o se devono essere inviati zero byte.
se la porta di comunicazione specificata non esiste
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
ReadReceivedData: BOOL:=FALSE;
ReceiveBuffer: ARRAY [0..10] OF INT:=[11(0)];
END_VAR
BODY
WORKSPACE
NETWORK_LIST_TYPE := NWTYPELD ;
ACTIVE_NETWORK := 0 ;
END_WORKSPACE
NET_WORK
NETWORK_TYPE := NWTYPELD ;
NETWORK_LABEL := ;
NETWORK_TITLE := ;
NETWORK_HEIGHT := 8 ;
NETWORK_BODY
B(B_F,F161_MRCV!,,17,2,24,8,,?DEN?Ds_Port?Dd1_Start?Dd2_End?AENO);
B(B_VARIN,,ReadReceivedData,15,3,17,5,);
B(B_VARIN,,16#0201,15,4,17,6,);
B(B_VARIN,,ReceiveBuffer[0],15,5,17,7,);
B(B_VARIN,,ReceiveBuffer[10],15,6,17,8,);
B(B_COMMENT,,The received data of port 1 of the MCU in slot 2 are read:,2,1,32,2,);
L(1,0,1,8);
END_NETWORK_BODY
END_NET_WORK
NET_WORK
NETWORK_TYPE := NWTYPELD ;
NETWORK_LABEL := ;
NETWORK_TITLE := ;
NETWORK_HEIGHT := 6 ;
NETWORK_BODY
B(B_F,F161_MRCV!,,17,0,24,6,,?DEN?Ds_Port?Dd1_Start?Dd2_End?AENO);
B(B_VARIN,,ReadReceivedData,15,1,17,3,);
B(B_VARIN,,16#0301,15,2,17,4,);
B(B_VARIN,,ReceiveBuffer,6,4,8,6,);
B(B_F,Adr_Of_Var_I!,,10,3,17,5,,?D?C);
B(B_F,AdrLast_Of_Var_I!,,8,4,17,6,,?D?C);
L(1,0,1,6);
L(8,4,8,5);
L(8,4,10,4);
END_NETWORK_BODY
END_NET_WORK
END_BODY