前面小节我们介绍了威纶宏指令数据转换分类下的全部函数,这些函数可以很好地将各种类型的数据与字符串之间进行转换。 这小节我们继续介绍数据操作分类下的全部函数。 所谓的数据操作就是针对一个数据的二进制位,或高低字节,或高低字进行修改等操作。 此分类下的函数共有11个,如下: FILL, GETBIT, INVBIT LOBYTE, HIBYTE LOWORD, HIWORD SETBITOFF, SETBITON 1. FILL。 函数用于使用指定字符,将一维数组指定元素进行赋值。 我们可以在宏编辑器使用下面的代码。 再添加字符显示元件,如下图设置读写地址后,查看代码执行结果。 macro_command main() char c[3]="123" //将从C[0]开始的3个字符设置为0x31,通过上节ASCII表查询,我们知道0X31对应表示字符1 //所以结果为c[0]=‘1’,c[1]=‘1’,c[2]=‘1’ FILL(c[0], 0x31, 3) SetData(c[0], "Local HMI", LW, 0,3) end macro_command 2. GETBIT。 此函数用于获取一个数据指定的二进制位是0还是1. 我们知道十进制数可以转换成二进制数, 如5转换成二进制数为0101。 这样我们就可以从右向左数,第0个二进制位为1,第1个为0,第2个为1,第3个为0. 此函数就用于实现这一功能,获得一个数指定的二进制位是0还是1. 我们可以在宏编辑界面使用下面的代码。 再添加数值元件,如下图设置读写地址后,模拟查看执行结果。 macro_command main() int value =5 int result //value转换成二进制数为0101,所以从右往左数,第0位为1,第一位为0,第二位为1. //二进制位数字非0即1,所以result结果也只有0,1两个结果。下面执行结果result=1 GETBIT(value, result, 0) SetData(result, "Local HMI", LW,0, 1) end macro_command 3. INVBIT。 此函数将一个数据指定的二进制位取反。 我们知道一个十进制数可以转换成二进制数,比如5, 转换成二进制为0101,从右往左数,我们可以将第0位取反。 也就变成了0100,再转换成十进制数为4. 此函数就为实现这一功能。 我们可以在宏编辑界面使用下面代码。 再添加一数值元件,如下图设置读写地址,查看执行结果。 macro_commandmain() int value=5 intresult //value=5,转成二进制为0101,从右往左第0位取反变成0100 //再转换成十进制为4,所以函数执行结果为result=4 INVBIT(value,result, 0) SetData(result,"Local HMI", LW, 0, 1) end macro_command 4. LOBYTE, HIBYTE 这两个函数用于截取一个数的低字节和高字节。 我们知道一个short或word类型数据由两个字节组成,右边字节为低字节, 左边字节为高字节。比如一个十六进制数 short value =0x1234. 低字节为0X34, 高字节为0X12.我们就可以使用函数LOBYTE,HIBYTE来获取。 同样我们可以在宏编辑器里实践,使用下面的代码。 再添加数值元件,设置读写地址为LW0,如下图设置,模拟运行查看效果。 macro_command main() short value = 0x123F short result //value = 0x123F,低字节为0X3F,转换为十进制为3*16+15=63 //LOBYTE(value,result) //SetData(result, "Local HMI",LW, 0, 1) //value = 0x123F,高字节为0X12,转换为十进制为1*16+2=18 HIBYTE(value,result) SetData(result, "Local HMI", LW,0, 1) end macro_command 5. LOWORD, HIWORD 对应上面字节截取函数,威纶还提供字截取函数LOWORD, HIWORD。 一个short或word由两个字节结成,这个在上面介绍过。 两个short或word组成一个int 或dword, 所以要截取int,或dword类型数据高字或低字时,可以使用这两个函数。 例如int value=0x12345678,高字为0x1234,低字为0x5678. 我们可以在宏编辑器里实践,使用下面的代码。 然后也添加一个数值元件, 设置其读写地址为LW0,如下图设置格式为32位整数,模拟运行查看执行结果。 macro_command main() int value = 0x12345678 int result //value = 0x12345678低字节为0x5678,转换成十进制为22136 //LOWORD(value,result) //SetData(result, "Local HMI",LW, 0, 1) //value = 0x12345678高字节为0X1234,转换成十进制为4660 HIWORD(value,result) SetData(result, "Local HMI", LW,0, 1) end macro_command 6. SETBITOFF, SETBITON。 这两个函数用于将一个数据指定二进制位设置为0或1. 例如一个数int value = 0x5,转换成二进制为0101, 从右往左数第0位为1,第1位为0,第二位为1. 调用SETBITON(value, result, 1),函数将第1位设置为1,变成0111, 转换回十进制后就为7,所以result=7。 SETBITON将指定位设置成1,SETBITOFF将指定位设置成0 我们可以在宏指令编程器里使用下面的代码。 再添加一数值显示元件,如下设置读写地址后,显示代码执行结果 macro_command main() int value = 0x5 int result //value = 0x5转换成二进制为0101,从右往左数第0位为1,第1位为0,第二位为1. //函数将第1位设置为1后,就为0111,转换回十进制后为7,所以result=7 SETBITON(value, result, 1) SetData(result, "Local HMI", LW,0, 1) //value =0x7 //SETBITOFF(value, result, 1) //SetData(result, "Local HMI",LW, 0, 1) end macro_command 7. SWAPB 一个shrot或word类型数据由两个字节组成,左边高字节,右边低字节。 例如short value=0x1234,高字节为0x12,低字节为0x34, SWAPB函数用于将高低字节转换,例如调用SWAPB(value, result), Result=0x3412,转换成十进制为13330. 我们可以在宏编辑界面使用下面的代码。 再添加数值显示元件,如下图设置格式为32位,显示8位,模拟查看执行结果。 macro_command main() short value = 0x1234 short result // SWAPB(value, result) SetData(result, "Local HMI", LW,0, 1) end macro_command 8. SWAPW 一个int 或dword由两个字组成,左边高字,右边低字。 例如int value=0x12345678,高字为0x1234,低字为0x5678 可以使用此函数进行高低字的转换。 SWAPW(value, result),result=0x56781234
|