无符号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日
下一篇 2019年6月11日

相关推荐

  • WINCC @变量

    wincc项目里有些变量前边加“@”,不知是何意义?是指针的意思吗? 最佳答案 系统变量WinCC 应用程序将创建项目内部管理所需的变量。这些变量的名称均以“@”字符开头…

    SIMATIC WinCC 2021年7月5日
  • wincc 如何实现操作员输入或选择产品型号,最终与测试结果一起生成报表及文档记录

    初次使用WINCC,实现对一个产品进行压力测试,并根据压力结果生成是否合格的测试报告。 产品有几种型号,包含一些如代号、长度宽度重量等一些信息。操作员可创建新的型号并录入…

    SIMATIC WinCC 2019年6月11日
  • 关于一屏多机的疑惑

    TIA博途软件的信息系统(帮助)曾多处提及可以用多台PLC连接一台HMI触摸屏,但是我一直没有找到具体操作方法,希望各位大佬们多多指教。目前的HMI是KTP400 Bas…

    2021年7月5日
  • WINCC7.0使用服务器客户端模式报错

    在客户机启动工程是报错:invalid command line parameters。这个怎么解决? 最佳答案 检查项目中是否有启动其它的应用程序,…

    SIMATIC WinCC 2017年6月10日
  • WICC画面中线条颜色怎么更改

    小弟初学WINCC,从库中调一些电机,阀类的,可以直接选择中后,在调色板更换颜色,为什么我自己画了个圆形,一些线条,无法更改颜色,选择中后,在调色板中换了颜色,实际画面中颜色没变呢…

    2019年6月11日
  • wincc中连接的变量更新周期设置为多少最合适

    wincc画面中连接的变量更新周期据说太快会给系统造成压力,慢了又反应迟钝,想知道有没有最佳的更新周期 问题补充:我之前用的就是默认的2秒周期,这两天测试时发现反应太慢了,不知道改…

    SIMATIC WinCC 2019年6月11日
  • wincc 6.2好难安装

    我在网上下载了wincc6.2并成功安装到电脑上。也下载了一个万能授权Sim_EKB_Install_2008_02_18并且在授权的时候只安装了A9WRC162,其余的都没有选择…

    SIMATIC WinCC 2019年6月11日
  • 关于 Webbrowser控件

    Webbrowser控件,添加到画面中后,无法按照预期显示(无内容0),重要是控件的属性www.那里不会添,请问高人们,这个的属性应该如何填写?例如文件为C:\1.GIF.那么WW…

    SIMATIC WinCC 2019年6月11日
  • 如何设计动态树型的左导航条?

    我想做一个动态的左导航条,是以树型结构形成的,需要有C语言脚本进行编辑,请教各位高手啦!!谢谢!! 问题补充:WinCC V6.2中的“菜单和工具栏”如何生成较为简单的菜…

    SIMATIC WinCC 2019年6月11日
  • wincc按钮确认密码

    wincc有个确定的按钮 ,点击出现一个输入密码的对话框,输入密码正确以后 ,才能生效。密码忘了,怎么办呢 问题补充:Sub OnLButtonUp(…

    SIMATIC WinCC 2021年7月5日