画面模板窗口中有一个IO域 的Output value,用C脚本返回数据,其中有下列代码:字符串str被赋值为一个外部变量名称,例如P01010M01_O.SI_PV,但是返回的PV始终为零,但是该数据在 PLC中却不为零。是不是因为受到了画面窗口已有的变量前缀P01010M01_S.SI的影响?如果是,该如何避免?@NOTP::有用吗?
PV=GetTagFloat(str);
return PV;
}
问题补充:
应该是变量前缀的影响,但不知道如何进行屏蔽。
最佳答案
返回值PV为零是因为没有该变量,你可以用Global Script诊断窗口看代码执行情况。
使用画面模板的话,str不应该被赋值为"P01010M01_O.SI_PV",而是"_PV",因为前缀已经加载到你整个画面窗口。
如何避免变量前缀:
1.自 WinCC V7开始,有更简单的办法取消变量前缀。方法是使用下列变量附加件取消前缀。
“@NOTP”取消变量前缀;
“@NOSP”取消服务器前缀;
“@NOP”取消变量前缀和服务器前缀。
http://www2.ad.siemens.com.cn/download/Upload/AS/application/A0443.pdf
2.使用SetTagValue/GetTagValue,用法比较复杂,见连接:
http://www.ad.siemens.com.cn/service/answer/solution.asp?Q_id=45650&cid=1032
http://www.automation.siemens.com/forum/guests/PostShow.aspx?PostID=6534&language=en&PageIndex=1
3.使用 youhm 提供的VBS脚本:
Dim HMI
Set HMI=CreateObject("CCHMIRuntime.HMIRuntime")
Msgbox HMI.Tags("变量名").Read
http://www.ad.siemens.com.cn/club/bbs/post.asp?b_id=5&a_id=565036&s_id=0&num=8#anch
提问者对于答案的评价:
恍然大悟,多谢提醒!对变量前缀有了更进一步的认识。
原创文章,作者:more0621,如若转载,请注明出处:https://www.zhaoplc.com/plc266452.html