工控编程吧

标题: 关于在1512SP 的CPU中多次使用loop指令问题 [打印本页]

作者: baikhgmv    时间: 2016-9-19 21:14
标题: 关于在1512SP 的CPU中多次使用loop指令问题
关于在1512SP 的CPU中多次使用loop指令问题在1512SP的CPU中使用LOOP指令编写一个5组,每组由32个整数的的排序程序,我使用的方法是用LOOP指令进行循环冒泡的方法进行排序,每组使用两个LOOP指令实现一个组内32个数值进行大小排序,测试第一组正常,但是当测试第二组以后就出现了CPU报警:Buffer overflow for OB 91 events - Function will continue(system reaction),请教高手loop指令最多能使用多少个,使用时对CPU的扫描时间是否有影响?


--------超时会报超时故障的,而你的确是内存除了问题




--------------------Zane,您所提到的内存问题是因为1512sp属于小型PLC本身所带的内存容量过小造成的,还是因为设置问题,麻烦您帮忙指出非常感谢。

之前我联系了西门子技术支持,

1——他告知我loop指令嵌套过多已经溢出造成的,可以更换编程方法,不一定非要用loop指令进行排序,因为使用的是STL语言编程里面可用的指令少的可怜,没有高级指令可以使用,您知道有什么编程方法实现排序吗?

2——他建议我可以用315以上的中型CPU来实现此功能,因为整个项目全系使用1512SP的PLC系统无法更换成315所以此方法我无法接受。

您能给我一些建议吗?非常感谢。


--------

---------楼主的程序不能满足多次调用的条件,多次调用的子程序中是不能出现全局变量的。

另外,楼主的指针应用也是比较另类的,可能问题就出在这里了。


--------此程序仅仅在测试阶段,所以没有封装,仅仅用于一组独立数据的排序功能,对于您提到的指针应用比较另类的说法,麻烦您详细指出问题点,非常感谢。


-------楼主试过将一组数据排序做成一个FB然后进行多次调用吗?或者可以试试SCL


      L     #i_DB_nr

      T     #t_DB_nr                    //装载DB编号

      OPN   DB [#t_DB_nr]               //打开DB块

      L     #i_start_no                 //装载起始地址指针

      SLD   3

      LAR1                              //装载AR1指针

      L     #i_data_len                 //装载数据长度-1做为数据循环次数

      L     1

      -I   

M001: T     #s_XH_nr

      L     DBD [AR1,P#0.0]             //装载DBD0

      L     DBD [AR1,P#4.0]             //装载DBD4

      >R                                //如果DBD0>DBD4则跳转到标签M002否则继续向下执行

      JCN   M002

      L     DBD [AR1,P#4.0]

      T     #s_temp

      L     DBD [AR1,P#0.0]

      T     DBD [AR1,P#4.0]

      L     #s_temp

      T     DBD [AR1,P#0.0]             //如果DBD0<DBD4则交换DBD0和DBD4的值

M002: +AR1  P#4.0                       //指针偏移4个字节(1个双字)

      L     #s_XH_nr

      LOOP  M001                        //装载循环次数,继续跳转到标签M001进行循环

这是我的冒泡排序程序









欢迎光临 工控编程吧 (https://www.gkbc8.com/) Powered by Discuz! X3.4