找答案的高端用户(找答案钻石及双钻级别的用户)将尽可能从此问题下的所有回
答中,为您推荐最佳答案。届时您可以根据推荐数采纳答案。
如果自提问时间起7天内您仍无法选出最佳答案,您可以选择“无满意答案”关闭此问题。
问题
取消精华
首页精华问答
取消推荐
高端用户推荐
申请置评
已申请置评
修改
修改标签
添加标签
官方认证
取消官方认证
修改标签
添加标签
转移分类
删除
{{itemCategory}}
NETWORK1
L P##IN0
LAR1
L W [AR1,P#0.0]
T #TEMP7
L D [AR1,P#2.0]
T #TEMP9
L P##IN1
LAR1
L D [AR1,P#2.0]
T #TEMP10
L P##IN2
LAR1
L D [AR1,P#2.0]
T #TEMP11
OPN DB [#TEMP7]
NETWORK2
CLR
= #OUT4
= #OUT5
= #OUT6
L #IN3
M001: T #TEMP8
L DBW [#TEMP10]
L DBW [#TEMP9]
XOW
L DBW [#TEMP9]
AW
AN ==0
S #OUT4
L DBW [#TEMP9]
L 0
<>I
S #OUT6
L DBW [#TEMP9]
L DBW [#TEMP11]
XOW
L DBW [#TEMP9]
T DBW [#TEMP11]
AW
AN ==0
S #OUT5
L #TEMP9
L 16
+D
T #TEMP9
L #TEMP10
L 16
+D
T #TEMP10
L #TEMP11
L 16
+D
T #TEMP11
L #TEMP8
LOOP M001
其中IN0、IN1、IN2为指针,调用程序赋值分别为P#DB51.DBX42.0,P#DB51.DB62.0,P#DB51.86。IN3为整数5。请各位老师帮忙解读一下,首次执行程序各临时变量的值是什么,后面循环程序中各临时变量加16后又形成了什么值,循环的目的是什么,另外字异或及字与运算的目的是什么?另外DB51中存的是报警及联锁信息。对间接寻址编程不熟,请各位老师详细解读,帮我一下,这是老外的程序。
收藏({{answerDetail.Q_FavoriteCounts}})
手机扫码追踪该问题,
觉得实用,立即去分享!
点击复制链接
专家建议
取消最佳答案
修改
NETWORK1
由于是上传上来的程序,所以可读性很差。能有原版程序最好。我试着把一些程序表面的信息解释下,你结合设备功能再解读下吧。关于寻址,看下@我心飞翔的回答。
L P##IN0 //获取指针地址
LAR1 //装在到地址寄存器
L W [AR1,P#0.0]
T #TEMP7 //将IN0对应的DB块编号传送到#TEMP7
L D [AR1,P#2.0]
T #TEMP9 //将IN0对应的数据起始地址传送到TEMP9
L P##IN1 //与上同
LAR1
L D [AR1,P#2.0]
T #TEMP10
L P##IN2
LAR1
L D [AR1,P#2.0]
T #TEMP11
OPN DB [#TEMP7] // 打开DB块,就是你说的那个DB51
NETWORK2
CLR
= #OUT4
= #OUT5
= #OUT6 //清零输出
L #IN3
M001: T #TEMP8 //开始程序循环3次
L DBW [#TEMP10] //DB51.DBW62
L DBW [#TEMP9] //DB51.DBW42
XOW //按字异或,找出DB51.DBW62与DB51.DBW42状态不同的位
L DBW [#TEMP9]
AW //按字与,结果不为0,说明状态不同的位中,DBW42有的是1。
AN ==0
S #OUT4 // 输出,结合你说的,自己想下
L DBW [#TEMP9]
L 0
<>I
S #OUT6 //DB51.DBW42不为0就输出
L DBW [#TEMP9]
L DBW [#TEMP11]
XOW
L DBW [#TEMP9]
T DBW [#TEMP11] //数据传送,看起来似乎是保存本周期的值
AW
AN ==0
S #OUT5 //DBW42跟上周期的值比较,如果有位不一样且本周期变为1的输出
L #TEMP9
L 16
+D //就是字节地址加2,目的是为了得到下一个字的数据,继续比较
T #TEMP9 // 就是说三次循环分别对应DBW42,DBW44,DBW46
L #TEMP10 //类同
L 16
+D
T #TEMP10
L #TEMP11
L 16
+D
T #TEMP11
L #TEMP8
LOOP M001
结合具体几个调用指针数据的实际含义,应该好理解了吧。
等您来回答
换一换
{{item.CoinValue}}西币
{{item.VisitNum}}人想问
本版相关问题
换一换
专家置评
首次回答问题,获得
双倍西币积分!
立即成为技术知识分享的一员!
欢迎您访问支持中心!
丰富的视频,全方位的文档,大量的网友交流精华……
为了更好的完善这些内容,我们诚邀您在浏览结束后,花20秒左右的时间,完成一个用户在线调查!
感谢您的支持!

西门子商城
L D [AR1,P#2.0] 这个语句中地址寄存器AR1指向Pointer本身,而D [AR1,P#2.0]就是pointer存储的32位指针。
32 位指针可表示为 P# 区域 字节.位,其中“位”地址用三位标识,所以地址加16(2#10000),就是字节地址加2。
大神@我心飞翔 答案:文档《S7-300和S7-400寻址》中有详细说明。