QQ登录

只需一步,快速开始

如何获取一个双字的某一位的BOOL值呢

[ 复制链接 ]
如何获取一个双字的某一位的BOOL值呢因为一个按钮上需要多个动作,所以只能通过脚本来处理,
现在,想要知道的是怎么通过C语言获取一个双字的某一个的BOOL值呢


-------if GetTagDword("test")&0x1///第一个位
if GetTagDword("test")&0x2///第二个位
if GetTagDword("test")&0x4///第三个位
if GetTagDword("test")&0x8///第四个位
if GetTagDword("test")&0x10///第五个位
后面的常数按照8421一直排下去。


------这个用处比较多,特别是用wincc访问某些日系的PLC,系统配置时不能支持直接访问寄存器的某一位,需要用到。原理:想要得到某一BOOL类型的真实值,将其与“1”做逻辑与(&)运算即可。


--------这个简单管用,在实际应用中有很大的用处


------这个好用,比在PLC中 做 好多了,


-----#define GetBit(a, n) ((1 << n) & GetTagWrod(a)) // 0 - 31 bits

if(GetBit("tag", 0)) { }
if (GeBitt("tag", 1)) { }

-------BYTE a;
BYTE b;
a=GetTagByte("某一位");        //Return-Type: WORD
b=a&16;
if(b==16)
{
SetTagBit("某一位bit",1);        //Return-Type: BOOL
}
if(b!=16)
{
SetTagBit("某一位bit",0);        //Return-Type: BOOL
}
}



---------怎么把PLC地址和变量text链接起来?


-------比如你要链接plc的db1.dbd0,wincc中建立变量test,参数为无符号32位,地址为db1,dd0


---------if GetTagDword("test")&0x1///第一个位,这种做法如果“test”这个双字有多个位是TRUE时,那么即使第一个位为FALSE,这和指令出来的结果也是TRUE。


------BOOL ibit;
ibit = (((int)status&1<< i ) !=0)
//status就是你的双字



回复

使用道具 举报

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