工程项目做的越多,大家手里握有自己或他人编写的实现某些特定功能的FC或FB块也就越多。尽管如此,热线中却常常遇到因使用这些功能块出问题而怀疑CPU坏了的例子,以下的查错步骤希望能对奋战在第一线的工程师们有所启发和帮助。
检查CPU是否正常,一般先看CPU的“面子”,即面板上的LED灯状态,如果面板上没有任何错误指示灯亮或闪烁,则需要查看CPU的“里子”,即程序的逻辑性是否存在潜在的漏洞,可参考之前的热线故事
《功能块使用问题》;若CPU面板上SF灯或INTF灯亮,则需要检查CPU诊断缓冲区,而出现频率较高的是这样一类故障:本地数据分配错误EVENT ID16#3576如图一,“你来我往”多次之后发现几乎都是因为更换调用OB造成的!
让我们掀开本地数据的面纱,看看是什么导致本地数据分配出错?
本地数据区俗称临时数据区,CPU为每个优先级分配固定大小的本地数据区,以S7-400为例, 如图二6ES7414-3XM05-0AB0 CPU内存属性中显示每个优先级预分配的本地数据区大小:
OB35默认优先级为12(如图三),本地数据区大小默认为758字节;
OB34默认优先级为11(如图三),本地数据区大小默认为256字节;
在图四中, OB35在调用FC1时需要为其在本地数据区中分配512字节的临时数据区域供其使用,整个OB35需使用的本地数据区最大为534个字节。如果在OB34中调用FC1,由于OB34的本地数据区最大只有256字节,无法给FC1分配足够的临时数据区,就会导致CPU报错。所以在OB35中调用的FC1,CPU执行正常,而在OB34中执行FC1,CPU则如图一报告本地数据分配错误, EVENT ID16#3576。
只要找到故障点,解决问题就有的放矢了。可在图二所示属性页中修改相应本地数据区的大小,或将功能块放到本地数据区足够大的优先级中使用。本地数据的大小依赖于不同的CPU,具体可参考CPU的技术参数。对诊断存储区的每类故障做到一丝不苟并追根到底,相信各类故障会“闻风而逃”。