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