如下是客户提供的 MP277 中的一段脚本,相信大家都能看懂。其功能就是设置画面“Screen_1”中圆的背景颜色为蓝色。因为实际项目中有多个圆,所以圆对象的名称是使用字符串“Circle”拼接内部变量 flagtag 值的方式来动态生成。意即flagtag = 0,那么就对名称为“Circle0”的圆进行操作;flagtag = 1,就对“Circle1”进行操作。
客户将程序下载到面板中,启动运行。发现该脚本不起作用,同时在报警窗口中看到如下提示:
从报警文本看,应该是没有找到对象“Circle0”。客户仔细检查项目,发现对象名称“Circle0”存在啊。找来找去也没发现原因。
其实解决方案就在报警文本中。注意“please check transfer of names option.”这句话。在面板的“设备设置>运行系统设置”中有这样一个选项,中文名称为“传送名称”,英文名称为“Transfer names”。对于这个客户的应用,必须勾选该选项。
为什么呢?原来 WinCC flexible 为了使项目的运行文件尽量的小,默认情况下上述选项是不勾选的。即在运行文件中不包含画面中对象的字符串名称,而是使用数字编号来指代。常规应用下没有任何问题。但当对象名称使用字符串拼接时就会出问题。因为此时对象名称无法在编译期间确定,也就无法使用数字编号来指代。当运行时,尝试以字符串搜索对象时,自然就找不到了。