Hi Mark,
Here is an SCL example on how to use ANY pointers for the call of the BLOCKMOVE function, the same is possible for AG_SEND and AG_RECEIVE. Make sure to check out the correct format of the specific pointer you want to use. Alternatively if you don't want to do any programming, you can create the correct sized DB and link the CFC input directly with the DB, in this case no offset is possible but appart from that it should work just fine.
FUNCTION DB_COPY : INT
TITLE = 'DB_COPY'
KNOW_HOW_PROTECT
VERSION: '1.1'
AUTHOR: EIT_ES11
NAME: DB_COPY
FAMILY: ES11_LIB
VAR_INPUT
SRC_DB_NUMBER : INT;
DES_DB_NUMBER : INT;
SRC_OFFSET : INT;
DES_OFFSET : INT;
NBR_BYTES : INT;
END_VAR
VAR_TEMP
TEMP_DW : DWORD;
TEMP_BYTE AT TEMP_DW : ARRAY[0..3] OF BYTE;
SOURCE : STRUCT
BYTE0 : BYTE;
DATA_TYPE : BYTE;
REPETITION_FACTOR : WORD;
DB_NUMBER : WORD;
MEMORY_AREA : DWORD;
END_STRUCT;
TEMP_SOURCE AT SOURCE : ARRAY[0..9] OF BYTE;
DESTINATION : STRUCT
BYTE0 : BYTE;
DATA_TYPE : BYTE;
REPETITION_FACTOR : WORD;
DB_NUMBER : WORD;
MEMORY_AREA : DWORD;
END_STRUCT;
TEMP_DEST AT DESTINATION : ARRAY[0..9] OF BYTE;
SRC_POINTER AT SOURCE : ANY;
DST_POINTER AT DESTINATION : ANY;
END_VAR
BEGIN
SOURCE.BYTE0 := 16#10;
SOURCE.DATA_TYPE := 16#02;
SOURCE.REPETITION_FACTOR := INT_TO_WORD(NBR_BYTES);
SOURCE.DB_NUMBER := INT_TO_WORD(SRC_DB_NUMBER);
TEMP_DW := INT_TO_WORD(SRC_OFFSET);
TEMP_DW := SHL(IN := TEMP_DW,N := 3);
TEMP_BYTE[0] := 16#84;
SOURCE.MEMORY_AREA := TEMP_DW;
DESTINATION.BYTE0 := 16#10;
DESTINATION.DATA_TYPE := 16#02;
DESTINATION.REPETITION_FACTOR := INT_TO_WORD(NBR_BYTES);
DESTINATION.DB_NUMBER := INT_TO_WORD(DES_DB_NUMBER);
TEMP_DW := INT_TO_WORD(DES_OFFSET);
TEMP_DW := SHL(IN := TEMP_DW,N := 3);
TEMP_BYTE[0] := 16#84;
DESTINATION.MEMORY_AREA := TEMP_DW;
DB_COPY := BLKMOV(SRCBLK := SRC_POINTER,DSTBLK := DST_POINTER);
END_FUNCTION