我写个个脚本500ms循环,tag_0中存的是32位变量名称,tag_1中存是第几位,如果这位为1就变绿色,但我在调试时脚本诊断中常出现1007006错误代码,我搞不定,求帮忙 谢谢
#define TAG_0 "sbvariable1"
#define TAG_1 "pos1_2"
unsigned int dwHelp1,a;
char *dwHelp2;
dwHelp2=GetTagChar(TAG_0 );
dwHelp1=(unsigned int)GetTagWord(TAG_1);
a=(DWORD)GetTagDWordWait(dwHelp2);
if (a&(1 << dwHelp1)) //Rückgabe-Typ :char*
return CO_GREEN;
else
return CO_DKGRAY;
}
专家建议
以上代码正确使用的话没有任何问题,以下分析了问题产生的原因,并详细解释了代码的含义。
1007006错误是指变量不存在。以上的代码首先读取变量"sbvariable1"中的字符串,该字符串又存放了另外一个变量(例如"Tag2",该变量需要在WinCC中新建)的名字,然后读取该变量("Tag2")的值,并将其存放在变量a中。同时将变量"pos1_2"的值存储在dwHelp1中。
a&(1 << dwHelp1)的意思是:先将 1 左移 dwHelp1 位,然后将结果与 a 做按位与运算,如果整个表达式的值为 1,则返回绿色,否则返回灰色。
测试时需要在画面中拖放一个IO域,关联字符串变量"sbvariable1",运行时改变IO域的内容,例如"Tag2"。然后在画面中再拖放两个IO域,分别关联"Tag2"和"pos1_2",显示为二进制数,然后分别改变这两个变量的值并查看效果即可。
提问者对于答案的评价:
原创文章,作者:more0621,如若转载,请注明出处:https://www.zhaoplc.com/plc310741.html