This is roughly how I would do it. It may not be complete working code.I am only reading data when expecting it, but need to display it always on the hmi.
L B#16#00
T #FillByte
A #Trigger // bit to trigger scanner
FP #FP_Tr_Sc1
S #Trigger_Bit // Output to scanner
CALL #Trigger_Timer // Timer to reset scanner trigger on time out
IN:=#Trigger_Bit
PT:=T#10S
Q :=#Trigger_Timer.Q
ET:=
//When Trigger then first clear data
A #Trigger_Bit
FP #FP_Clear_Data
JCN CLR
CALL "FILL" //FC21
BVAL :=#FillByte //Pre load this with B#16#00
RET_VAL:=#Ret_Val_Fill
BLK :=#SC_Read_Array //FC:S_RCV_ET200S write area
CLR: nop 0
CALL #Resv_ScannerData //S_RCV_ET200S
EN_R :=#Rcv_Ein
R :=#Rcv_Reset
LADDR :=#Adress_temp
DB_NO :=#DB_Temp
DBB_NO :=#DBB
NDR :=#Rcv_Ok_ND
ERROR :=#Rcv_Error
LEN :=#Rcv_Length
STATUS :=#Rcv_Status
COM_RST:=#Rcv_ResetAll
AN #Rcv_Ein
AN #Rcv_Error
S #Rcv_Ein
AN #Rcv_Error
R #Rcv_Reset
A #Rcv_Error
R #Rcv_Ein
S #Rcv_Reset
//----------------
a #Rcv_Ok_ND
a #Trigger
FP #Flanke_Data_Transfer
JCN END
CALL "BLKMOV"
SRCBLK :=#SC_Read_Array
RET_VAL:=#Ret_Val_SFC20
DSTBLK :=#Display_Array //Area for display
END: nop 0
If you need a real working example let me know.I could make you a FB that works