FUNCTION FC 316 : VOID
TITLE =
//
//
VERSION : 0.1
VAR_INPUT
pAny : ANY ;
END_VAR
VAR_TEMP
AnyPointer : STRUCT
wType : WORD ;
iQuantity : INT ;
iDBNumber : INT ;
dwAreaPointer : DWORD ;
END_STRUCT ;
dwSavedAr2 : DWORD ;
END_VAR
BEGIN
NETWORK
TITLE =passing on an any pointer (FC)
L P##pAny; //get address of parameter in V area
LAR1 ; //point to it with AR1
L D [AR1,P#6.0]; //get the area pointer for the original any pointer
LAR1 ; //point to this with AR1
L W [AR1,P#0.0]; //get pointer data
T #AnyPointer.wType;
L W [AR1,P#2.0];
T #AnyPointer.iQuantity;
L W [AR1,P#4.0];
T #AnyPointer.iDBNumber;
L D [AR1,P#6.0];
T #AnyPointer.dwAreaPointer;
END_FUNCTION
FUNCTION FC 317 : VOID
TITLE =
//
//
VERSION : 0.1
VAR_INPUT
pAny : ANY ;
END_VAR
VAR_TEMP
AnyPointer : STRUCT
wType : WORD ;
iQuantity : INT ;
iDBNumber : INT ;
dwAreaPointer : DWORD ;
END_STRUCT ;
dwSavedAr2 : DWORD ;
END_VAR
BEGIN
NETWORK
TITLE =passing on an any pointer (FC)
L P##pAny; //get address of parameter in V area
LAR1 ; //point to it with AR1
L D [AR1,P#6.0]; //get the area pointer for the original any pointer
LAR1 ; //point to this with AR1
L W [AR1,P#0.0]; //get pointer data
T #AnyPointer.wType;
L W [AR1,P#2.0];
T #AnyPointer.iQuantity;
L W [AR1,P#4.0];
T #AnyPointer.iDBNumber;
L D [AR1,P#6.0];
T #AnyPointer.dwAreaPointer;
END_FUNCTION
FUNCTION_BLOCK FB 316
TITLE =
VERSION : 0.1
VAR_INPUT
pAny : ANY ;
END_VAR
VAR_TEMP
AnyPointer : STRUCT
wType : WORD ;
iQuantity : INT ;
iDBNumber : INT ;
dwAreaPointer : DWORD ;
END_STRUCT ;
dwSavedAr2 : DWORD ;
bCallFC316 : BOOL ;
END_VAR
BEGIN
NETWORK
TITLE =passing on an any pointer (FB)
TAR2 #dwSavedAr2; //save current value of AR2
L P##pAny; //pointer to parameter in instance
AD DW#16#7FFFF; //mask off area
TAR2 ; //get current instance
+D ; //add parameter offset
LAR2 ; //for indirect address
CDB ; //global DB instance DB swap
//****
//no stat or parameter access allowed
//****
L W [AR2,P#0.0];
T #AnyPointer.wType;
L W [AR2,P#2.0];
T #AnyPointer.iQuantity;
L W [AR2,P#4.0];
T #AnyPointer.iDBNumber;
L D [AR2,P#6.0];
T #AnyPointer.dwAreaPointer;
CDB ; //DB's back to how they were
LAR2 #dwSavedAr2; //ar2 back to how it was
//****
//stat and parameter access now allowed
//****
NETWORK
TITLE =check function to call
L #AnyPointer.dwAreaPointer;
AW W#16#FFFF;
L 316;
==I ;
= #bCallFC316;
NETWORK
TITLE =
AN #bCallFC316;
JNB _001;
CALL FC 317 (
pAny := #AnyPointer);
_001: NOP 0;
NETWORK
TITLE =
A #bCallFC316;
JNB _002;
CALL FC 316 (
pAny := #AnyPointer);
_002: NOP 0;
NETWORK
TITLE =
END_FUNCTION_BLOCK
FUNCTION_BLOCK FB 2
TITLE =
VERSION : 0.1
VAR
fbAny1 : FB 316;
fbAny2 : FB 316;
END_VAR
BEGIN
NETWORK
TITLE =
CALL #fbAny1 (
pAny := FC 316);
NOP 0;
NETWORK
TITLE =
CALL #fbAny2 (
pAny := DB2.DBX 0.0);
NOP 0;
END_FUNCTION_BLOCK