有一个客户反映了他的CH_DI工作不正常,现象描述如下:在没有输入值的情况下,过程值有输出;过程值和鼠标停留在输出时显示值不一致;甚至连部分功能块的仿真功能都有问题。
CH_DI块用于S7-300/400 SM 数字输入模块的数字输入值信号处理,没有过多的设置,替代值和仿真值在使用过程中容易出问题,正常情况下过程值会跟随输入值的变化。客户先是发送故障截图,故障信息如下:

比较奇怪的现象,问题出在什么地方呢?会不会是在编译和下载过程中出现错误导致的呢?在推荐客户进行编译下载无果后,无奈之下让客户发送程序。
检查用户的日志记录发现用户仅仅做了部分编译和部分下载,可能问题出在这里。再次与用户联系,确定以下信息:采用全部编译和下载;编译和下载过程中没有提示错误;存储卡的类型为RAM卡。这几项都没有问题,用PLCSIM下载用户的程序测试,复现了用户描述的现象。(挠头ing……)
第二天在测试过程中发现过程值竟然一会是“0”一会是“1”,而此时输入输入值一直为“0”。会不会是与CH_DI的相关的数据块出问题了呢?开始分析用户的程序,监视输入相关的数据块,发现这个数值也在变化。原来问题在这里啊。看到曙光了,继续查看程序。明明已经被系统占用了的DB 146却出现在了用户自己定义的FC块中。如下图所示。

联系客户询问相关的功能块和DB块,原来这几个功能块用来做通信用的。客户发现DB 146没有被使用就用这个DB来存储数据了。而此时系统在编译的过程中又将这个DB分配给其他系统块使用,这样就发生了冲突,导致了前面客户描述的现象。
我们知道在CFC的编译/下载参数中,可以设置客户使用的DB和FC的范围,在用户使用该范围外的FC时,编译过程中会提示用户,这样能够引起用户注意。如下图所示在程序中使用FC 10,但是在编译/下载参数中设置FC的范围为60~700,在编译过程中会提示超出范围错误。

但是对于DB块往往容易被忽视,系统不会去检查这个DB是否被用户使用,所以就出现了故事中的奇怪问题。
好了!故事先写到这里。欢迎您关注更多的西门子热线故事!