无符号32位数如何确定每个位的状态

现在我需要对32位的无符号数据进行每个位的状态监视,自己做了个全局脚本,如下:

 DWORD exter;    //定义无符号32位数
 exter=GetTagDWord("UDWORD"); 
 SetTagBit("Bool",(exter&0x100));//7st bit
 SetTagBit("Bool_8",(exter&0x1));//0st bit
 以上执行都可以,Bool,Bool_8分别得到32位数据的第7和第0位数据状态;但我使用:
 SetTagBit("Bool_16",(exter&0x1000000));//24st bit
 SetTagBit("Bool_24",(exter&0x10000));//16st bit
 获得32位数据的第24位和第16位的数据时却没任何反应,请高手解释下,或是可以有什么更好的办法??

 

最佳答案

每个人理解的第几位意思都不一样,你试试下面的程序:
 int i;
 DWORD dwValue;
 BOOL bRet;
 dwValue = GetTagDWord("dwTag");
 //printf("\r\n%d",dwValue );
 for (i=0;i<32;i++)
 {
  bRet = (dwValue & (long)pow(2.0,i))== (long)pow(2.0,i);
  printf("\r\n第%d位为:%d",i ,bRet);
 }

提问者对于答案的评价:
问题已解决,不过用了另一种方法:
 DWORD a[32],b,c;  //定义32位数据
 a[0]=0x00000001;a[1]=0x00000002;a[2]=0x00000004;a[3]=0x00000008; 
 a[4]=0x00000010;a[5]=0x00000020;a[6]=0x00000040;a[7]=0x00000080; 
 a[8]=0x00000100;a[9]=0x00000200;a[10]=0x00000400;a[11]=0x00000800; 
 a[12]=0x00001000;a[13]=0x00002000;a[14]=0x00004000;a[15]=0x00008000; 
 a[16]=0x00010000;a[17]=0x00020000;a[18]=0x00040000;a[19]=0x00080000; 
 a[20]=0x00100000;a[21]=0x00200000;a[22]=0x00400000;a[23]=0x00800000; 
 a[24]=0x01000000;a[25]=0x02000000;a[26]=0x04000000;a[27]=0x08000000; 
 a[28]=0x10000000;a[29]=0x20000000;a[30]=0x40000000;a[31]=0x80000000; 

 b=GetTagDWord("Y[0B-3B]_D[2_3]"); 
 c=b&a[0];if(c==a[0]) SetTagBit("Bool",1); else SetTagBit("Bool",0); //0bit
 c=b&a[1];if(c==a[1]) SetTagBit("Bool_1",1); else SetTagBit("Bool_1",0); //1bit
 c=b&a[2];if(c==a[2]) SetTagBit("Bool_2",1); else SetTagBit("Bool_2",0); //2bit
 c=b&a[3];if(c==a[3]) SetTagBit("Bool_3",1); else SetTagBit("Bool_3",0); //3bit
        //。
        //。
        //。
 c=b&a[31];if(c==a[31]) SetTagBit("Bool_31",1); else SetTagBit("Bool_31",0); //31bit

 大家可以看看,虽然多以点,但比较直观!

原创文章,作者:more0621,如若转载,请注明出处:https://www.zhaoplc.com/plc273257.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2019年6月11日 上午9:48
下一篇 2019年6月11日 上午9:48

相关推荐

  • WinCC V7.4 SP1关于对属性背景颜色进行设置

    对圆和SVG的对象背景颜色进行相同的动态对话框设置,圆随图一的4个输入/输出域值进行相应的变化,而SVG对象无变化是为什么呢?还是SVG对象不能使用动态对话框?想对设备因不同信号做…

    2021年7月5日
  • 按钮权限

    在WINCC画面中放一个退出系统的按钮,只有管理员可以推出,该如何设置权限呢?就是点击按钮弹出一个要求输入拥护和密码的对话框.谢谢!希望能详细些. 最佳答案 你应该再另做一个登陆按…

    SIMATIC WinCC 2019年6月11日
  • WINCC7.3画面问题

    今天遇到一个怪事,WINCC里一个画面有几M的样子,新建一个画面,把前面一个画面的内容复制到这个新建的画面,新建的画面竟然有100多M,还没找到原因,哪位大神遇到过吗 最佳答案 中…

    SIMATIC WinCC 2021年7月5日
  • wincc趋势导出

    如何将wincc中的趋势导出到EXCEL表格中? 最佳答案 详见下述文档:1、《如何将WinCC将归档的历史数据导出成Excel CSV文件?》连接:http://www…

    SIMATIC WinCC 2019年6月10日
  • wincc 外部变量采集周期

    wincc的外部变量采集周期怎么更改???麻烦高手指导 问题补充:那里的周期只能是500ms以上的。。。能短点嘛? 最佳答案 1、WinCC变量归档中,最小归档周期为500ms。用…

    SIMATIC WinCC 2019年6月11日
  • 这个脚本程序什么意思?

    1:有个脚本程序小弟不明白 SetTagFloat("外部变量",SetTagFloat("内部变量")) 2:另外老板…

    SIMATIC WinCC 2019年6月11日
  • SQL问题

    现场有一台计算机,SQL生成的记录在wincc的TAG LOGGING链接后,无法在trends上显示,无法确认该段记录是否有效?请问我要在哪方面查原因?怎么看SQL中的…

    SIMATIC WinCC 2017年12月10日
  • 为什么我的WINCC软件里没有wincc tag simulator

    我在WINCC里找不到wincc tag simulator,在线趋势控件没有办法用啊,波形显示不出来啊 问题补充:开始 -> SIM…

    SIMATIC WinCC 2019年6月11日
  • wincc 操作员输入消息 空白

    wincc中 输入/输出域的“操作员输入消息”属性选择“是”以后,在报警控件中能生产报警信息,但是这信息为什么是空白的,没有内容?我以前用过,应该不是空白,会把服务器名、…

    2017年8月15日
  • 触摸屏软件问题

    Wincc flexible 2008 sp3 advanced无法与自动化许可证管理器服务建立连接。。。 钻石用户推荐最佳答案 1、检查授…

    SIMATIC WinCC 2021年7月5日