QQ登录

只需一步,快速开始

威纶通触摸屏宏指令,数据操作分类函数,详解与实操

[ 复制链接 ]
前面小节我们介绍了威纶宏指令数据转换分类下的全部函数,这些函数可以很好地将各种类型的数据与字符串之间进行转换。
这小节我们继续介绍数据操作分类下的全部函数。
所谓的数据操作就是针对一个数据的二进制位,或高低字节,或高低字进行修改等操作。
此分类下的函数共有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
1.jpg
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
2.jpg
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
3.jpg
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

回复

使用道具 举报

快速回复 返回列表 客服中心 搜索