当我们需要修改一个项目文件或者向已经完成的项目中新增点功能时,需要了解原来程序已经使用的软元件及寄存器、DB块中的变量等。这时候用的最多就是交叉索引,打开任意程序块,点击菜单-》变量参考,就可以生成交叉索引表,表格里列出所有在程序中以明码字符出现的变量及软元件。
刚开始使用STEP7软件时,我也以为交叉索引能列出所用到的所有存储单元,认为里面没有列出的就是没有用到了。后面有一次修改公司车间一个项目后,运行中总是出现一些奇怪问题,明明设好的参数突然变了,多次跟踪后发现,其中有个温度值发生变化后,我设定的参数就变了。从交叉索引上没看出二者有什么关系,根据现象发现二者肯定有联系,然后我就根据硬件I/O地址找到该信号的采集,调整功能块,最后跟踪到数据处理后汇集到一个DB块中,DB块中以数组形式建立的变量,虽然DB块里没有注释,但是该温度转换后的值存放的位置,确实我用到的变量地址重合一部分,所以转换后温度值超过一定范围就影响到我的数据,后来重新调整变量地址后,问题就消失了。
交叉索引没法找到具体地址是因为整体处理模拟量的功能块,调用DB块采用的是ANY指针,交叉索引只列出首地址,其他是没有,需要我们自己把采用指针指向的整个数据块自己标识出来,否则直接用到后面的地址就重叠了。
当然解决办法就是尽量不要用旧项目的DB块存数据,如果指针变量用到M区,一定要全部列出来。要是STEP7 也有全局搜索项目使用字符的功能的话,直接搜索“p#”估计能较快搜到这些引用指针的地址。
反正我自己的程序我一般不使用ANY指针,即使使用也尽量把程序使用到的存储地址清单列出来,表面上尽量做到罗列清楚,事实上修改次数太多甚至有时是测试性修改,所以就忘记备注,时间一久,修改的多了,可能也有注释漏了。其他同行估计也是这样,有时甚至指导用户修改,更不会做修改备注了。
一方面希望工控同行们修改程序尽量做完整的修改记录,记录修改位置,修改内容,修改日期等。去修改别人程序的同行,使用交叉索引后最好还是看看程序是否使用到指针,检查存储地址时仔细点,否则会出现一些奇怪现象,那不是见鬼,而是你不小心。