回复:数据查询功能

t1122

  • 帖子

    73
  • 精华

    1
  • 被关注

    5

论坛等级:游士

注册时间:2011-04-14

普通 普通 如何晋级?

发布于 2011-07-30 09:38:41

19楼

quote:以下是引用无胆英雄在2011-07-30 00:44:52的发言:
背影大侠,我试了一下,LW1000太大了,用不了,程序报错,我用到LW400还可以,如果不复制到L区,直接比较数据块,该怎么写程序,还请多指教,谢谢!

背影大侠的程序你没有看懂才会出现这种疑问。lw1000是存放循环次数的地方。就这段程序而言,你可以改成804以上的任意值,但是不能超过你的plc本地变量的长度。定义100个32位地址是背影大侠为了给你演示思路写的,你需要根据你自己的情况自行更改一下。另外,背影大侠的这段程序是顺序比较,如果你是要求“只要a中的数据,在b中存在,那么这条数据就要写到c内”,你可以根据背影大侠给你的方法构造双层循环。背影给出的方法,我个人认为,能够满足你所说的情况,而且简明有效的避免了只能同时打开2个db的问题。
从西门子plc上面说,个人认为这个问题难点在于如何打开3个db,背影的办法是将用于比较的2个数据块放在本地空间中,当然也可以将用来记录的放在本地空间(用m做中间变量个人觉得不好)中,直接打开2个用于比较的数据块,我推测可能会少一步,未验证。
从工艺上说,楼主给出的条件还是太过笼统。不同的db块可以有不同的处理办法,背影大侠给你的几乎是一个全能的处理办法,无非受限于本地空间的长度。如果你的db块过大,建议你用上位机来处理。plc由于性能的关系,会很慢,也正如背影所写的那样相对复杂。用上位机处理,只需要用一个select in一条语句就可以代替双层循环。
这里根据情况给出几种假设,作为一个借鉴吧。简称用于比较的是a\b数据块,用来记录的是c数据块。
1)a、b长度固定,并且a的长度=b的长度,c需要记录的是:a的第n条与b的第n条相同的值——直接采用背影的方法。
2)a、b长度固定,并且a的长度=b的长度,c需要记录的是:a的记录在b中存在——采用背影的方法改成双循环。
3)a、b长度不固定,a的长度等于b的长度,其他跟上述2种情况相同。用我说过的——sfc24取出来数据块的长度,再采用上述办法。
4)a、b长度不固定,a的长度不一定等于b的长度,其他跟2)所述相同——还是用sfc24取出长度,用长的做外层循环。
5)跟条件4)相同,不过其中a有序(或者b有序)——用单层循环+fc86(TI - S7)试试,或者二分法查找。
就像找找偷懒的诀窍
评论
编辑推荐: 关闭

请填写推广理由:

本版热门话题

SIMATIC S7-300/400

共有54618条技术帖

相关推荐

热门标签

相关帖子推荐

guzhang

恭喜,你发布的帖子

评为精华帖!

快扫描右侧二维码晒一晒吧!

再发帖或跟帖交流2条,就能晋升VIP啦!开启更多专属权限!

  • 分享

  • 只看
    楼主

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