找答案的高端用户(找答案钻石及双钻级别的用户)将尽可能从此问题下的所有回
答中,为您推荐最佳答案。届时您可以根据推荐数采纳答案。
如果自提问时间起7天内您仍无法选出最佳答案,您可以选择“无满意答案”关闭此问题。
问题
取消精华
首页精华问答
取消推荐
高端用户推荐
申请置评
已申请置评
修改
修改标签
添加标签
官方认证
取消官方认证
修改标签
添加标签
转移分类
删除
{{itemCategory}}
指针没有偏移过 是MB0传送给你VB30 这样我可以理解
下面 论坛里的人这样说的:
MOVB &VB201,AC1
MOVB *AC1 , AC0 这样就是字节VB202的值给AC0了 ///// 我无法理解是为什么是VB202 指针不是没有便宜过吗? 为什么是VB202? 而不是VB201?
收藏({{answerDetail.Q_FavoriteCounts}})
手机扫码追踪该问题,
觉得实用,立即去分享!
点击复制链接
专家建议
取消最佳答案
修改
一、掌握下述基本知识,理解就不会出现偏差:
在读取指针时,有如下几种不同的情况出现:
1、以字节的形式读取指针:
LD M0.0
MOVD &MB0, VD10
MOVB *VD10, VB30
译为:在VD10建立指针,指针指向以MB0为首地址的地址,读取在指针VD10所指向的首地址开始的一个字节(即以MB0开始的一个字节,很明显就是MB0本身),所以,读取指针时将MB0放到VB30。
2、以字的形式读取指针:
LD M0.0
MOVD &MB0, VD10
MOVW *VD10, MW20
译为:在VD10建立指针,指针指向以MB0为首的地址,读取在指针VD10所指向的首地址开始的一个字(即以MB0开始的一个字,很明显就是MW0),所以,读取指针时将MW0放到MW20
3、以双字的形式读取指针:
LD M0.0
MOVD &VB0, VD10
MOVD *VD10, VD40
译为:在VD10建立指针,指针指向以VB0为首的地址,读取在指针VD10所指向的首地址开始的一个双字(即以VB0开始的一个双字,很明显就是VD0),所以,读取指针时将VD0放到VD40。。
二、无法理解是为什么是VB202 指针不是没有便宜过吗? 为什么是VB202? 而不是VB201?
S7-200的4个32位累加器。
S7-200cpu允许使用指针对下述存储区进行间接寻址:I, Q, V, M, S, T和C。但不能对独立的位或模拟量进行间接寻址。指针为双字值,用来存放另一个存储器的地址,只能用V, L或累加器AC1,AC2和AC3作指针。为了生成指针,必须用双字传送指令(MOVD)将某个位置的地址移入另一个位置或累加器作为指针。
1、正确指令应为:
MOVD &VB201,AC1
MOVB *AC1 , AC0 //根据上述以字节的形式读取指针,AC0中为VB201。
2、或:
MOVD &VB201,AC1
MOVW *AC1 , AC0 //根据上述以字的形式读取指针,AC0中为VW201(VB201,VB202)。
3、或:
MOVD &VB201,AC1
MOVD *AC1 , AC0 //根据上述以双字的形式读取指针,AC0中为VD201(VB201,VB202,VB203,VB204)。
点赞({{answerDetail.Q_Positive}})
评论
评论
等您来回答
换一换
{{item.CoinValue}}西币
{{item.VisitNum}}人想问
本版相关问题
换一换
首次回答问题,获得
双倍西币积分!
立即成为技术知识分享的一员!
欢迎您访问支持中心!
丰富的视频,全方位的文档,大量的网友交流精华……
为了更好的完善这些内容,我们诚邀您在浏览结束后,花20秒左右的时间,完成一个用户在线调查!
感谢您的支持!

西门子商城