回复:请高手帮看看我这个语句为什么不执行

emil128

  • 帖子

    271
  • 精华

    10
  • 被关注

    21

论坛等级:侠圣

注册时间:2011-05-16

普通 普通 如何晋级?

发布于 2012-10-29 11:17:35

4楼

1、首先有个小疑问,楼主程序里的276是怎么来的?
因为DBW30最大也就是255了(DBX31.7),如果是276最终指向DBX34.4了。
如此的话,楼主的程序是把DBX22.0~DBX34.4取反后放到DBX2.0~DBX14.4了。

2、楼主的程序问题不少,主要是shine版说的,目标地址MD1104的赋值问题,是既没有赋初值也没有在循环体内赋值。
所以第一次执行时目标地址其实是DB13.DBX0.0(前提是MD1104在程序中没有别的地方赋值)而且由于没有在循环体内赋值,因此整个循环都不变,一共被写了100次。
循环结束后MD1104终于被赋值了,于是目标地址变成了DB13.DBX14.5(277-16#A0),所以DBX14.5在其后的循环中一直被置位着,直到永远。。。
顺着楼主的想法,改写了一下程序,就能正常工作了
OPN DB 13 //原谅偶把OPN放循环体外了,减少循环的长度
L DW#16#B0
T MD 1100
M1: L MD 1100
T #ZHI
L DW#16#A0
-D
T MD 1104 //MD1104在循环体内赋值,按照楼主的思路,利用MD1100来赋初值
A DBX [MD 1100]
NOT
= DBX [MD 1104]
L #ZHI
L 1
+D
T MD 1100
L 255 //这里我改成255了,这样最大到DBX31.7
<=D
JC M1
3、最后提一下,是我的话,会用异或指令来做。方法和N侠给出的类似,点数不多,用枚举法就可以了。
如果点数多,也可以写循环来做,不过那样无非是循环次数少些而已,循环程序还是一样的。
例如:
OPN DB 13
L DBD22
XOD DW#16#FFFFFFFF
T DBD2
评论
编辑推荐: 关闭

请填写推广理由:

本版热门话题

SIMATIC S7-300/400

共有54617条技术帖

相关推荐

热门标签

相关帖子推荐

guzhang

恭喜,你发布的帖子

评为精华帖!

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

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

  • 分享

  • 只看
    楼主

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