技术论坛

 【调试】 浅谈STEP7软件的交叉索引

返回主题列表
作者 主题
ankaona
侠士

经验值: 1529
发帖数: 218
精华帖: 0
楼主    2021-01-06 08:44:43
主题:【调试】 浅谈STEP7软件的交叉索引

  

      当我们需要修改一个项目文件或者向已经完成的项目中新增点功能时,需要了解原来程序已经使用的软元件及寄存器、DB块中的变量等。这时候用的最多就是交叉索引,打开任意程序块,点击菜单-》变量参考,就可以生成交叉索引表,表格里列出所有在程序中以明码字符出现的变量及软元件。

   刚开始使用STEP7软件时,我也以为交叉索引能列出所用到的所有存储单元,认为里面没有列出的就是没有用到了。后面有一次修改公司车间一个项目后,运行中总是出现一些奇怪问题,明明设好的参数突然变了,多次跟踪后发现,其中有个温度值发生变化后,我设定的参数就变了。从交叉索引上没看出二者有什么关系,根据现象发现二者肯定有联系,然后我就根据硬件I/O地址找到该信号的采集,调整功能块,最后跟踪到数据处理后汇集到一个DB块中,DB块中以数组形式建立的变量,虽然DB块里没有注释,但是该温度转换后的值存放的位置,确实我用到的变量地址重合一部分,所以转换后温度值超过一定范围就影响到我的数据,后来重新调整变量地址后,问题就消失了。

    交叉索引没法找到具体地址是因为整体处理模拟量的功能块,调用DB块采用的是ANY指针,交叉索引只列出首地址,其他是没有,需要我们自己把采用指针指向的整个数据块自己标识出来,否则直接用到后面的地址就重叠了。

    当然解决办法就是尽量不要用旧项目的DB块存数据,如果指针变量用到M区,一定要全部列出来。要是STEP7 也有全局搜索项目使用字符的功能的话,直接搜索“p#”估计能较快搜到这些引用指针的地址。

     反正我自己的程序我一般不使用ANY指针,即使使用也尽量把程序使用到的存储地址清单列出来,表面上尽量做到罗列清楚,事实上修改次数太多甚至有时是测试性修改,所以就忘记备注,时间一久,修改的多了,可能也有注释漏了。其他同行估计也是这样,有时甚至指导用户修改,更不会做修改备注了。

     一方面希望工控同行们修改程序尽量做完整的修改记录,记录修改位置,修改内容,修改日期等。去修改别人程序的同行,使用交叉索引后最好还是看看程序是否使用到指针,检查存储地址时仔细点,否则会出现一些奇怪现象,那不是见鬼,而是你不小心。


haha
KAPOK
至圣

经验值: 10183
发帖数: 2114
精华帖: 3
1楼    2021-01-06 09:01:32
主题:回复:【调试】 浅谈STEP7软件的交叉索引

 交叉索引的结果不是特别准确,尤其在间接寻址方面。

Kapok
yayc
侠圣

经验值: 2498
发帖数: 177
精华帖: 0
2楼    2021-01-06 12:30:13
主题:回复:【调试】 浅谈STEP7软件的交叉索引

学习一下,这个实用哟!

没什么大不了
天涯飘泊客
侠圣

经验值: 2450
发帖数: 372
精华帖: 0
3楼    2021-01-06 13:33:49
主题:回复:【调试】 浅谈STEP7软件的交叉索引

这种事遇到好多次,所以,我对原程序做修改时,尤其新增加功能的时候,为了方便,不使用M点,不使用原有DB,直接自己新建DB块,这样非常安全,不会出问题。

askab
侠圣

经验值: 2790
发帖数: 390
精华帖: 5
4楼    2021-01-12 14:31:40
主题:回复:【调试】 浅谈STEP7软件的交叉索引

首先交叉索引  中查找的变量是已经数据类型定义好的,例如BOOL  WORD INT  REAL 等等,对于ANY ,ARRAY 等确实无法查找。还有间接寻址。

反正我自己的程序我一般不使用ANY指针

这个就偏激了。如果你用SCL  例如控制 10台电机 同样的逻辑启停,那么就你可以清楚ARRAY的好处以及

对DB块进行UDT 定义时候。

例如:


button_start:ARRAY[0..20] OF BOOL:=false;

fault:ARRAY[0..20] OF BOOL:=false;

start_condition:ARRAY[0..20] OF BOOL:=false;

END_VAR

VAR_OUTPUT

run:ARRAY[0..20] OF BOOL:=false;

run_light:ARRAY[0..20] OF BOOL:=false;

END_VAR


VAR

store_start:ARRAY[0..20] OF BOOL;

i:INT;

END_VAR

FOR i:= 0 TO 20 BY 1 DO

        // Statement Section

        run[i]:=((button_start[i] AND NOT store_start[i]) XOR run[i]) AND NOT fault[i] AND start_condition[i];

        store_start[i]:= button_start[i];

        run_light[i]:=run[i]; 

END_FOR; 

END_FUNCTION_BLOCK

还有如果你使用DP 通讯 需要调用SFC14/15

                       TCP/IP 与第三方 数据交换 SFB14/15等都需要用ANY型。

不是不用ANY 等,而是正确理解。

大家同行,you ok ? me !
leni
奇侠

经验值: 5271
发帖数: 510
精华帖: 2
5楼    2021-01-13 21:50:15
主题:回复:【调试】 浅谈STEP7软件的交叉索引

学习了,很实用,感谢!

技术要做就做专!继续攀登高科技。继续加油
cha9990
侠客

经验值: 825
发帖数: 55
精华帖: 0
6楼    2021-01-28 09:27:08
主题:回复:【调试】 浅谈STEP7软件的交叉索引

感谢分享,收藏

yzm_cumt
至圣

经验值: 18247
发帖数: 2653
精华帖: 14
9楼    2021-10-15 09:03:44
主题:回复:【调试】 浅谈STEP7软件的交叉索引

交叉索引确实很有用,但是不能依赖他,还是要自己做好备注

sometimes you have to be your own hero!
五块五毛五
侠客

经验值: 843
发帖数: 36
精华帖: 0
10楼    2021-10-15 14:07:34
主题:回复:【调试】 浅谈STEP7软件的交叉索引

交叉索引仅供参考,好像程序加密后也查不到

推个公众号,郭子工控!
您收到0封站内信:
×
×
信息提示
很抱歉!您所访问的页面不存在,或网址发生了变化,请稍后再试。