上周,客户反映当wincc集成到step7中做变量上传时,发生了很诡异的事情:当选择db块中的operator control and monitoring选项时,对钩出现后瞬间消失?!如下图所示(仅示意)。
一开始真心不相信。眼见为实,客户发来了项目,果真如此。进一步检测,发现该db为fb背景数据块,找到相关fb,做了如下测试:
1. 项目中其它的fb和db块没有问题
2. 新创建的fb和db块没有问题
3. 使用reorganize进行项目重组无效
4. 创建新项目,拷贝原项目中的问题fb和db块无效
由此,推断问题出现在该fb中,打开fb,也未发现异常。如下图所示。
事到如今,只能采取笨方法 —— 排除法了。
1. 将问题fb复制,删除所有network程序
编译存盘后,重新生成db,设置监控属性无效。推断问题出现在interface的接口参数中。
2. 删除interface中所有wincc监控变量(标记为绿色三角)
编译存盘后,重新生成db,设置监控属性有效。推断问题出现在interface中的wincc监控变量中。
3. 逐一取消interface中wincc监控变量的s7_m_c属性,如下图所示
发现问题所在!interface中定义的输入参数的结构变量control.manual_auto_chain的s7_m_c属性被取消后,db设置监控属性有效!
经过反复测试,fb中定义的结构变量超过24个字符,即可产生先前描述的诡异现象。删除多余的字符(control.manual_auto_chain-> control.manual_auto_chai),问题解决,如下图所示。
在step7帮助中未发现对于变量名称长度有24个字符的限制,而在wincc中,变量定义rawtag时有24个字符的限制,可能和此有关。
db中的结构变量名称定义过长,虽然是小概率事件,但也给了我们一个很好的参考。