连续地址操作:
添加库SysMem(路径SysTem/Syslibs/SysMem),使用SysMemSet函数将连续地址变量设置为相同的值。 SysMem库还提供复制,比较,转换等操作,且与C语言用法一致,具体用法网上有很多资料。
1、复位多个连续SM、SD元件,M区、Q区、数组:
定义:
VAR
pSM0: POINTER TO BOOL;
pSD0: POINTER TO INT;
pMW0: POINTER TO WORD;
pQW0: POINTER TO WORD;
arr:ARRAY[0..500] OF INT;
parr: POINTER TO ARRAY [0..500] OF INT;
END_VAR
编程:
(示例复位Sm0~Sm99,SD0~SD99,%MW0~%MW99,%QW0~%QW99;)
//获取SM0地址
pSM0:=ADR(sm0);
//SysMemSet.pDest起始地址指针,SysMemSet.udiValue设置值,SysMemSet.udiCount赋值长度(byte)
SysMemSet(pDest:=pSM0 , udiValue:= 0, udiCount:= 100);
//获取SD0地址
pSD0:=ADR(SD0);
SysMemSet(pDest:=pSD0 , udiValue:= 0, udiCount:= 200);
//获取%MW0地址
pMW0:=ADR(%MW0);
SysMemSet(pDest:=pMW0 , udiValue:= 0, udiCount:= 200);
//获取%QW0地址
pQW0:=ADR(%QW0);
SysMemSet(pDest:=pQW0 , udiValue:= 0, udiCount:= 200);
//获取arr首地址
parr:=ADR(arr);
//SIZEOF(arr)获取数组占用长度
SysMemSet(pDest:=pQW0 , udiValue:= 0, udiCount:= SIZEOF(arr));
设置0就与复位效果一样,注意该指令按字节计算长度。也可以结合For循环、指针循环赋值。
2、数据结构初始化:
运行中可以使用隐藏的接口方法初始化结构体。帮助文档中查找FB_init有详细介绍。
演示步骤:
新建结构体DUT,内含元素a,b,c;
程序修改a,b,c的值;
调用FB_reinit,初始化元素;
新建结构DUT:
定义DUT类型的变量:
VAR
binitDUT: BOOL;
AM600_DUT:DUT;
END_VAR
初始化AM600_DUT:
IF binitDUT THEN
AM600_DUT.fb_init(TRUE,TRUE);
binitDUT:=FALSE;
END_IF
注意:如果没有用户定义fb_init方法,编译会提示fb_init未定义,不用管它能正常使用,功能块也可以使用同样的方法初始化,需要手动定义fb_init接口方法,使用方法在功能块中详细介绍。