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

无——恋

  • 帖子

    12
  • 精华

    0
  • 被关注

    2

论坛等级:游民

注册时间:2009-09-29

普通 普通 如何晋级?

发布于 2012-10-29 18:49:40

7楼

quote:以下是引用emil128在2012-10-29 11:17:35的发言:
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

谢谢128侠的指点,不但指出了问题,还给出了正确循环,尤其是第三点,我也想过用异或解决,但是想的是跟自己异或,没想到跟FFFF异或,学习了 ,十分感谢
276是这样来的
我的开始的想法是 初始值是B0,循环100次,所以A0加100次转换10进制就是276了·······
这样的想法不对吗
你说的原来那个程序执行了一百次也是对的,我监控看见只有一个位被置1了 也没细想,程序肯定不对,就以为没有循环
再次感谢
评论
编辑推荐: 关闭

请填写推广理由:

本版热门话题

SIMATIC S7-300/400

共有54768条技术帖

相关推荐

热门标签

相关帖子推荐

guzhang

恭喜,你发布的帖子

评为精华帖!

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

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

  • 分享

  • 只看
    楼主

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