无符号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

相关推荐

  • 工控机总是死机

    最近我厂的工控机总是死机,怀疑是电源不干净,因我厂大量的使用变频器,有没有类似净化电源的东西,把电源虑一下波?请大家指教 问题补充:我厂有UPS 最佳答案 工控机死机,需要考虑两个…

    SIMATIC WinCC 2018年12月14日
  • flexible 棒图显示问题

    tag是0-160的整数 但是要在棒图里显示成0-1.60 怎么弄 最佳答案 在屏里是很难转换的的,最好就是在plc转换成实数。 如果你要不嫌麻烦可以…

    SIMATIC WinCC 2019年6月11日
  • Wincc分时段操作

    我想用Wincc控制操作工交接班时清零累计记录,平时不允许清零操作,要怎么做 问题补充:很感谢两位的回答   如果要是手动清零,不需要登录的那种呢&n…

    SIMATIC WinCC 2019年6月11日
  • wincc项目打开时提示exptext.dll等无法加载

    wincc项目打开时提示:exptext.dll无法加载expdist.dll无法加载exppass.dll无法加载expxref.dll无法加载TTEditExp.dll无法加载…

    2017年6月24日
  • wincc 运行时出现取消激活画面

    您们好!   我用的是v6.0的wincc,在RT激活时。会出现取消激活画面,其进度条呈11%就停止。画面中的数据不能更改!请问是什么原因!谢谢 问题…

    SIMATIC WinCC 2019年6月11日
  • WINCC7.4SP1在WIN10专业版安装错误

    安装VC++2005 SP1 RedistributableVC++2005 SP1 Redistributable(x64) &…

    SIMATIC WinCC 2020年11月1日
  • WINCC与冗余的S7300变量连接

    两个315-2DP组成冗余系统,WINCC如何与他们进行连接呢 最佳答案 通常的做法是先创建与一套315-2DP的连接,使用动态向导“创建冗余连接”,填入另一套315-2DP的连接…

    SIMATIC WinCC 2019年6月11日
  • WinCC用户归档能否数据处理后再读取后归档

    WINCC V7.3,变量来自MODBUS TCP,格式为无符号16位数据;变量需要除10后显示及归档;组态画面中在动态对话框内除10.0,解决显示;历史归档使…

    SIMATIC WinCC 2021年7月5日
  • WinCC中自定义的图形?

    WinCC中自定义的图形无法实现颜色的动态对话框操作吗?能实现的话是哪里操作不对吗?对自定义的图形全选后右键-自定义对象-创建-如图所示 问题补充:有对象属性栏但其中没有颜色-背景…

    2021年7月5日
  • wincc6.2自动删除报警记录

    wincc报警记录太多,日积月累,造成xp系统wincc缓慢,请问如何自动删除报警记录或限制在200条自动更新 最佳答案 根据你需要查看的wincc记录情况可以设置归档的大小(时间…

    SIMATIC WinCC 2019年6月11日