数据格式

PLC中定义个FC,共31个二进制点,对应地址:M120~M123.6(双字差一位M123.7),再在WinCC中定义个无符号的32位数:地址MD120,连接画面上的IO域,在PLC端强制各点M120~M123.6断,Wincc中IO域显示值为:128(这个32位数的第8位,好像是M123.7,可未在PLC中定义),请问这是怎么回事?在PLC依次强制各个点位,相应IO域中的值都增加128,例如第17位值为65664,请问我这段脚本对吗:
 #include "apdefap.h"
 int gscAction( void )
 {unsigned int y;
   y=GetTagDWord("mixer1" );
 if ( (y&65664)==65664)             
  SetTagBit"run9706",1);                            
 else  SetTagBit("run9706",0);
 是&65665还是&65536呢?

问题补充:
请教dcount 107,如果我不在变量表里对M123.7复位的话,那么我这样判断位对吗? DWORD y;
    y=GetTagDWord("mixer1" );
    if ((y&0x1000)==0x10000)
    SetTagBit"run9706",1);                            
  else  SetTagBit("run9706",0);
 

最佳答案

1.MD120初始值如为128,则M123.7值肯定是1,你可以到PLC中监控确认一下。检查有没有程序给M123.7赋过值,如没有可用变量表将M123.7复位。
  2.C脚本判断位的方法:X&2^n ,第17位n=16,因此应当与2^16与才对,即65536,65536不直观,可用16进制表示法0x10000。
     DWORD y;
     y=GetTagDWord("mixer1" );
     if ((y&0x1000)==0x10000)
     SetTagBit"run9706",1);                            
   else  SetTagBit("run9706",0);

 补充:当然可以,你可以用内部变量测试一下!
 

提问者对于答案的评价:
谢谢

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

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

相关推荐