返回带有32位偏移量的输入或输出的DT地址
此函数从输入/输出Offs中的值在输入/输出AdrDT的DT区域中生成16位地址。此输入必须直接连接到基本函数的32位输入/输出。输入/输出Offs中的值代表DT数据区域内的地址偏移量。使用GetPointer32可以将其与内存区的数值一起传输到用户函数或功能块。
输入
得出16位DT偏移量地址
此引脚必须连接到允许数据类型为INT、WORD的基本函数的输入/输出
输出
地址DT0的32位偏移量
记住,通过将EN输入处变量的内存区值赋予函数Is_AreaDT,确定是否执行使用DT区域中创建的地址的基本函数。
仅限LD和FBD编辑器:使用[指令]窗格中的[输入指令]或[输出指令]将所需指令插入编程窗口。
在此例中,创建了用户自定义函数ReadFromIcCard,该函数在梯形图(LD)或功能块图(FBD)中使用函数AdrDT_Of_Offs32_O、AdrFL_Of_Offs_O、Is_AreaDT和Is_AreaFL。
在DUT池中,分配结构数据类型,其中声明结构的各种非布尔变量。
所有用于编程此函数的输入和输出变量已在POU头中声明。 所有编程语言使用相同的POU头。
VAR
start: BOOL:=FALSE;
(*activation of the function*)
DutNonBoolean: @'Dut_NonBoolean';
(*structured data type*)
ActualPosition: DINT:=0;
(*beginning position from which the data should be read to the IC card*)
END_VAR
这里声明了在上述DUT中分配的数据类型的变量DutNonBoolean。由于执行函数ReadFromIcCard之后,变量DutNonBoolean的值被覆盖,因此未执行对变量DutNonBoolean的元素赋予值。
当变量bStart从FALSE变为TRUE时,执行函数ReadFromIcCard。此函数读取IC卡上以地址diActualPosition开头的值并将信息写入变量DutNonBoolean。请勿忘记必须通过菜单 正确格式化IC卡,而且如有必要,以地址diActualPosition开头的值应在IC卡上出现。
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_CONTACT,,start,6,1,8,3,R);
B(B_F,ReadFromIcCard!,,18,1,27,8,,?DEN?DArea?DOffset?DSize?DPosition?AENO?C);
B(B_VARIN,,ActualPosition,16,6,18,8,);
B(B_VAROUT,,ActualPosition,27,3,29,5,);
B(B_VARIN,,Dut_NonBoolean,7,3,9,5,);
B(B_F,Size_Of_Var!,,9,5,16,7,,?D?C);
B(B_F,GetPointer!,,11,3,18,5,,?D?C);
B(B_VARIN,,2,16,4,18,6,);
L(18,2,18,3);
L(8,2,18,2);
L(1,2,6,2);
L(9,4,11,4);
L(9,4,9,6);
L(16,6,18,6);
L(1,0,1,8);
END_NETWORK_BODY
END_NET_WORK
END_BODY