Valuta la condizione "ricezione conclusa" in base al timeout
Questo Function Block valuta una condizione di timeout per rilevare la conclusione della ricezione in flussi di dati che non contengono un carattere terminatore, p.es. in caso di trasferimento di dati binari.
Ingresso
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
Lasso di tempo trascorso il quale IsDone viene impostato su TRUE se non si ricevono ulteriori dati.
Applicabile all'indirizzo iniziale del buffer di ricezione. Questo indirizzo contiene il numero di byte ricevuti. (solo CPU)
Uscita
Impostato su TRUE se uno o più byte sono stati ricevuti e il numero di byte ricevuti non è cambiato nel lasso di tempo specificato in TimeOutForCPU o nella finestra di dialogo "Impostazione MCU".
Per la porta di comunicazione di una CPU, la prima word del buffer di ricezione deve essere applicata in NoOfBytesReceived (numero di byte ricevuti). Se il numero di byte ricevuti non cambia entro il lasso di tempo specificato in TimeOutForCPU, IsDone passa a TRUE.
Per una Multi-Communication Unit e per FP7, viene valutato il flag "ricezione conclusa". Il timeout deve essere impostato in modalità PROG utilizzando la finestra di dialogo “Impostazione MCU” o in modalità RUN utilizzando F159_MWRT_PARA (solo FP2).
Valutazione del flag "ricezione conclusa"
Se non vengono ricevuti altri byte nel periodo specificato o se viene eseguita l'istruzione ClearReceiveBuffer, l'uscita IsDone passa a TRUE. La ricezione di ulteriori dati è impossibile. F159_MTRN o ClearReceiveBuffer fa passare il flag "IsDone" a FALSE.
La conclusione della ricezione può essere determinata anche controllando i contenuti del buffer di ricezione (p.es. il numero de byte ricevuti). Lo Numero del byte ricevuti può cambiare durante lo svolgimento di uno scan. For example, if the number of received bytes is read more than once different statuses may exist within one scan.
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
IsReceptionDone1: IsReceptionDoneByTimeOut;
END_VAR
VAR_EXTERNAL
g_awReceiveBuffer: ARRAY [0..10] OF WORD;
END_VAR
VAR
bIsRecDone1: BOOL:=FALSE;
wPort: WORD:=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_FB,IsReceptionDoneByTimeOut!,IsReceptionDone1,11,1,24,6,,?BPort?BTimeOutForCPU?BNoOfBytesReceived?AIsDone);
B(B_VARIN,,wPort,9,2,11,4,);
B(B_VARIN,,T#20ms,9,3,11,5,);
B(B_VAROUT,,IsRecDone1,24,2,26,4,);
B(B_VARIN,,g_awReceiveBuffer[0],9,4,11,6,);
L(1,0,1,8);
END_NETWORK_BODY
END_NET_WORK
END_BODY
IsReceptionDone1(Port := wPort,
TimeOutForCPU := T#20ms,
NoOfBytesReceived := g_awReceiveBuffer[0],
IsDone => bIsRecDone1);