F161_MRCV

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.

Parametri

Ingresso

s_Port (WORD, INT, UINT)

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

d1_Start (WORD, INT, UINT)

Indirizzo iniziale del buffer di ricezione

d2_End (WORD, INT, UINT)

Indirizzo finale del buffer di ricezione

Note

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

Flag di errore

sys_bIsOperationErrorHold (passa a TRUE e resta TRUE)
  • 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

sys_bIsOperationErrorNonHold (passa a TRUE per una scansione)
  • 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

Esempio

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
		ReadReceivedData: BOOL:=FALSE;
		ReceiveBuffer: ARRAY [0..10] OF INT:=[11(0)];
	END_VAR

Corpo LD

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

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