登录
首页 PLC论坛 西门子SIEMENS
回帖 发帖
正文

主题:程序问题

点击:1185 回复:6

S7-200指令中有加表指令ATT,但没有减表指令,这很不符合实际运用,就象数据库有增就应该有减,请各位大侠想想,能用什么方法可以在表中提取数据又不破坏表的完整性.
05-06-06 15:04
FIFO/LIFO 不能用吗?
分别从表头或表尾取数并将该数从表中移去
05-06-07 08:08

引用 tuxw 在 2005-6-7 8:08:00 发言【内容省略】

可是要想从表中间取数,那要用什么好的方法呢.
05-06-07 10:53
自己用指针建立表,再用指针查询
05-06-07 12:00
中间取数只能用指针+索引的方法
不过只能取,不能删,除非你手工维护表,可以写个程序,取数后将后面的项前移,然后将表长减1,相当于给表增加一条指令
算法很简单,复杂度是线性的,为O(n),但总的来说这样效率比较低,如果表很大,且取的数在前面,移动操作很耗时的。
我怀疑 FIFO 指令用的也是该算法,因为表结构中没有表头表尾的指针,不可能通过循环表来实现高效取数,这个可以验证一下(时间关系,偶没做,你可以试试):每执行一次 FIFO,就观察表内的数据变化,看其位置是否变化
最后修改:2005-6-8 10:40:25
05-06-08 10:35

引用 tuxw 在 2005-6-8 10:35:00 发言【内容省略】

谢谢您的回复
我开始也是用手工维护表,但步数太多,程序过于复杂,维护不便.
您说的FIFO 指令用的算法,我已经验证过,算法相同,但它是自动维护.
看来是没有更好的方法了.
05-06-13 19:14
抽空写了几个子程序,扩展一下表指令
到这里看看:http://spaces.msn.com/members/tuxw/Blog/cns!1p1KRL2snDHMdTagFMfJCgKg!548.entry
05-06-14 19:09

工控新闻

更多新闻资讯