欢迎来到西门子工业支持中心网站!

  1. 移动端入口
    • 工业服务小程序
    • 支持中心移动端首页
    • 智能小西-智能问答与在线预约
    • SIEMENS工业找答案小程序
    • SIEMENS工业专家大讲堂小程序
    • 西门子工业1847俱乐部
    • 自动化So酷
  2. 签到有奖
  3. 登录后可享:

    学技术视频
    查海量资料
    论话题经验
    问常见问题
    立即登录

    还没有账号?

    立即注册
  4. 会员
  5. 消息

    登录后可查看消息记录

    立即登录
  6. 收藏

    登录后可查看收藏记录

    立即登录
  7. 历史

    登录后可查看历史记录

  8. 公告
搜索

热搜词:1847工业学习平台移植电机选型

  • 技术支持
    • 首页
    • 智能小西-自动预约
    • 风驰卡
    • 产品入门
  • 下载中心
    • 首页
    • 售前文档(样本、宣传册等)
    • 售后文档(FAQ、手册等)
  • 工业学习平台
    • 首页
    • 了解会员权益
    • 立即开通1847会员
  • 培训认证
    • 首页
    • 取证训练营
    • 教室培训
    • 证书查询
  • 技术论坛
    • 首页
    • 最新发帖
    • 精华帖
    • 发新帖
  • 找答案
    • 首页
    • 已解决问题
    • 精华常见问题
    • 发布新问题
  • 售后服务
    • 首页
    • 提交服务需求
    • 查询服务进程

西门子官方商城

西门子中国
  • 工业自动化
  • 驱动技术
  • 客户服务
  • 冶金技术
  • 行业市场解决方案
  • 工业支持中心
工业支持中心
  • 我的支持中心
  • 下载中心
  • 全球技术资源
  • 1847工业学习平台
  • 产品入门新手必读
  • 找答案
  • 技术论坛
  • 售后服务
  • 网络资源新手必读
  • 高级搜索
技术论坛
  • 论坛公告
  • 用户指南
  • 用户排行榜
  • 热门帖子
  • 最高收藏帖
  • 精华帖
  • 分享帖
  • 高端推荐帖
  • 在线用户列表
  • 论坛管理
特别专题 / 西家技术派
【5】寄存器间接寻址——从S7-300_400到S7-1500看变址寻址的改变系列故事之五
 • 产品分类
自动化系统
    SIMATIC S7-1500(T) 
    SIMATIC S7-1200 
    SIMATIC S7-200
    SIMATIC S7-200 SMART 
    SIMATIC S7-300/400 
    SIMATIC S5
    SIMATIC Net
    Profinet技术开发专区
    工业边缘计算
    SIMATIC WinCC / Panel 
    SIMATIC WinCC OA (原PVSS)
    SIMATIC PCS 7
    IPC/PG
    LOGO!
    SIMATIC IOT2000
    工业电源
驱动技术
    MicroMaster 
    MasterDrives
    直流调速器
    电机
    SIMOTION
    SINAMICS 
    驱动技术综合产品
数控系统
    SINUMERIK 
    SIMODRIVE
低压电器
    低压电器
传感器与通讯
    过程仪表
    分析仪器
    工厂传感器
谈天说地
    谈天说地
 • 咱工程师的故事
网友专栏
    网友专栏 
1847大咖专栏
    电气传动系统漫谈
    崔工谈博途与PLC
    漫谈SCADA进阶之路
    运动控制产品天地
    聊聊收放卷
    运动控制应用天地
    驱动诊断
    西家讲师教学精要
    漫谈过程自动化
    PROFINET工业通信详解
    冯工聊工业网络
    EMC问题及处理
特别专题
    专家大讲堂课后探讨
    西家技术派
    专家诊断专栏
    西家传动
    自动化so酷
    西门子工业1847俱乐部
 • 培训与认证答疑专区
培训与认证答疑专区
    S7-1200精英训练营
    WinCC精英训练营
    S7-200SMART精英训练营
    小型自动化系统
    V90精英训练营
    G120变频器精英训练营
    PLC编程精英训练营
 • 服务合作伙伴专区
服务合作伙伴专区
    西门子工业技术π圈
    Networks and Communication
    GMC蓝黄带考试-G120
    GMC蓝黄带考试-V90
    GMC 合作伙伴专区
  • 【5】寄存器间接寻址——从S7-300_400到S7-1500看变址寻址的改变系列故事之五
  • 作者: 1847会员 啤酒鱼发布时间:2020-03-17 20:27:05浏览次数:9436次 锁帖 精华帖星级4级 精华帖 高赞 官方 回复本帖
  • “西家技术派”公众号拥有如下功能:

    1.专家知识经验分享

    2.发布技术派活动的信息

    3.申请加入技术派

    4.技术派支持案例分享

    5.常见问题搜索

    6.技术资料链接

    标签:
    • 基础理论
    • S7-400
    • S7-200
    • S7-300/400
    • 8.0
    • ACCU
    • AM

    2 寄存器间接寻址

           与存储器间接寻址不同,寄存器间接寻址使用CPU内部集成的两个32位地址寄存器AR1、AR2存储地址指针。寄存器间接寻址分为32位内部区域指针和32位交叉区域指针。

    2.1  访问地址寄存器AR1、AR2的指令

           寄存器的访问需要使用特殊的指令。指令如下所示:

           LAR1     : 将ACCU1存储的地址指针写入AR1。

           LAR1 <D> : 将指明的地址指针写入AR1,例如LAR1 P#20.0或LAR1 MD20。

           LAR1 AR2 : 将AR2的内容写入AR1。

           LAR2     : 将ACCU1存储的地址指针写入AR2。

           LAR2 <D> : 将指明的地址指针写入AR2,与LAR1 <D>方式相同。

           TAR1     :  将AR1存储的地址指针传输给ACCU1。

           TAR1<D>  :  将AR1存储的地址指针传输给指明的变量中。

           TAR1 AR2 :  将AR1存储的地址指针传输给ACCU2。

           TAR2     :  将AR2存储的地址指针传输给ACCU1。

           TAR2 <D> :  将AR1存储的地址指针传输给指明的变量中。

           CAR      :  交换AR1和AR2的内容。

    2.2  使用地址寄存器AR1、AR2的限制

           都是32位指针,为什么不使用存储器替代CPU内部的地址寄存器呢?使用方法上完全可以,除此之外,CPU还利用AR1、AR2做了一些系统内部的工作,如果没有AR1、AR2将造成程序的混乱(这节内容是引深介绍,不感兴趣可以跳过)。同样系统和用户都可以使用AR1、AR2,用户使用时需要考虑是否系统也在使用,否则也将造成程序的混乱,同时也不能改写。所以用户使用时会有限制,例如接口参数的传递中,STEP7使用地址寄存器AR1访问函数FC接口及函数块FB“INOUT”接口中定义的复合类型参数,如ARRAY、STRUCT、DATE_AND_TIME等,AR1和DB块寄存器中的内容将被覆盖,例如在FC1中“IN”接口中定义一个数组变量,在OB1中调用,使用OB1的L区域数据进行赋值,调用关系如图12所示。

    12.png


    图12

           如果在FC1中访问数组变量的元素如ARR_TEST[1],地址寄存器AR1及DB块寄存器会发生变化,示例程序如图13所示。

    13.png


    图13

           图13示例程序中前两条语句中打开DB1并将P#20.0装载到AR1中,在第三条语句访问数组的一个元素后AR1存储的地址指针变为P# V20.0(指向OB1中实参ARR_TEST的地址,参考图13),程序下传到CPU后将出现故障报警。将程序的执行次序进行修改,CPU即可运行,修改后的程序如下:

                         L     #ARR_TEST[1]      //装载形参变量ARR_TEST[1]到累加器1中。

                         OPN   DB     1          //打开DB1

                         LAR1  P#20.0            //将P#20.0装载到地址寄存器AR1中。

                         T     DBW [AR1,P#0.0]   //将累加器1中的值传送到DB1.DBW20中。

          AR2和DI寄存器分别包含FB背景数据块的块号及在背景数据在背景数据块中偏移地址(多重背景数据块),在FB中使用AR2和DI寄存器将会覆盖系统存储的内容。如果必须在FB中使用AR2和DI寄存器,建议使用下面的方法处理AR2和DI寄存器,首先保存AR2和DI寄存器中的数据,程序如下:

     

                         TAR2  MD   100         //将AR2的数据存储于MD100中。

                         L     DINO             //将背景DB块块号存储于MW104中。

                         T     MW   104

           ///////用户程序///////////////      

           然后编写用户程序,可以对AR2和DI寄存器进行操作,但是在程序中不能访问FB参数或静态变量。使用完成后恢复AR2和DI寄存器的系统值,程序如下:

     

                         LAR2  MD   100         //将MD100中存储的地址指针装载到AR2中。

                         OPN   DI [MW 104]      //打开DI数据块。

    2.3   寄存器32位内部区域指针

           寄存器32位内部区域指针用于I、Q、M、L、数据块等存储器中位、字节、字及双字的寻址,与32位存储器指针使用相同,不同之处只是指针存储的位置不同(几乎没有区别,就是表示格式不同)。32位内部区域地址指针的格式如图14所示。

    14.png


    图14

           第0位~第2位作为寻址操作的位地址,第3位~第18位作为寻址操作的字节地址,第19位~第30位没有定义,第31为内部区域与交叉区域指针标识,0表示内部区域指针,1表示交叉区域指针。

           32位内部区域指针地址寻址表示格式为:地址存储器标识符[地址寄存器,地址偏移常量],例如装载M存储器一个字节表示为:

    14+.PNG


           AR1/2 :AR1或者AR2。注意使用限制。

           指针指向地址= 地址寄存器存储地址 + 地址偏移常量,如果AR1装载的地址为P#8.0,实际装载的地址为MB18。32位内部区域指针的使用方法参考下面的示例程序:

                         OPN   DB     1            //打开DB1。

                         LAR1  P#10.0              //将指针P#10.0 装载到地址寄存器1中。

                         L     DBW [AR1,P#12.0]    //将DBW22装载到累加器1中。

                         LAR1  MD    20            //将存储于MD20中的指针装载到地址寄存器1 中。

                         L     DBW [AR1,P#0.0]     //将DBW装载到累加器1中,地址存储于MD20中。

                         +I                                                      

                         LAR2  P#40.0              //将指针P#40.0 装载到地址寄存器2中。

                         T     DBW [AR2,P#0.0]     //运算结果传送到DBW40中。

     

    2.4  寄存器32位交叉区域指针

       32位交叉区域指针与32位内部指针相比,地址指针中带有存储区域如I、Q、M等, 32位交叉区域地址指针的格式如图15所示。

    15.png


    图 15

           第0位~第2位作为寻址操作的位地址,第3位~第18位作为寻址操作的字节地址,第24位~第26位为地址标识符,表示的地址区域如下:

           000表示没有地址区,例如P#12.0;

           001表示输入地址区I,例如P#I12.0;

           010表示输出地址区Q,例如P#Q12.0;

           011表示标志位地址区M,例如P#M12.0;

           100表示数据块(DB)中的数据,例如P#DBX12.0

           101表示数据块(DI)中的数据,例如P#DIX12.0

           110表示区域地址区L,例如P#L12.0;

           111表示调用程序块的区域地址区V,例如P#V12.0;

           第31为内部区域与交叉区域指针标识,0表示内部区域指针,1表示交叉区域指针。使用交叉区域指针的表示方法(例如装载M存储器一个字节)为:

     

                         LAR1/2     P#M 20.0       //装载地址指针P#M20.0到AR1或AR2。

    15+.PNG


           指针指向地址 = 地址寄存器存储地址 + 地址偏移常量,上例中实际装载的地址为MB30。如果访问一个位信号则没有访问宽度。32位交叉区域指针的使用方法参考下面的示例程序:

                         LAR1  P#M 20.0            //将指针P#M20.0 装载到地址寄存器1中。

                         A      [AR1,P#1.1]        //M21.1“与”操作。

                         =     Q      1.2          //如果M21.1为1,输出1.2为1。

                         L     P#I 40.0            //将指针P#I40.0 装载到累加器1中。

                         LAR2                      //将累加器1中存储的地址指针装载到地址寄存器2中。

                         L     W [AR2,P#0.0]       //装载IW40.0到累加器1中。

                         T     MW    60            //将累加器1中存储的数值传送到MW60中。

    2.5  使用寄存器间接寻址的思考

           估计大家读完了寄存器间接寻址后,肯定有一些问题:

    1:什么时候用地址寄存器间接寻址?

    在我来看,地址寄存器是寄存器,利用寄存器间接寻址是使用寄存器存储指针,这两个要搞明白。地址寄存器是系统的,主要是系统处理内部的地址偏移和引用的问题,例如在FB块的开始写入指令T AR2,是指出在背景数据块数据开始的偏移地址(例如FB1调用多个FB块时,在OB1中调用FB1后生成一个多重背景DB块,其中包含各个调用FB块的数据区,如果没有编写上述的指令,那么调用FB块的数据区在背景数据块中将重叠),所有地址寄存器是不可或缺的!利用寄存器间接寻址使用最多的是拆分POINTER和ANY指针使用的(后续再介绍),其它使用的地方很少,还看个人的编程习惯吧。S7-1500没有绝对地址,所以也没有什么地址偏移的问题(即使有也不需要用户考虑),地址寄存器在S7-1500中是虚拟的,主要就是为了S7-300/400程序的移植,所以移植完成后还要测试一下程序,看看是否达到了原来的控制功能。

     2:谁会使用地址寄存器?

    很显然,地址寄存器还有数据块寄存器通常是程序块的开发人员使用,否则编程的程序块在有的调用方法上会出问题,主要是程序不完善造成的,程序块的使用者掌握存储器间接寻址就可以了,除非是特殊应用,例如使用指针变量(ANY 或者POINTER)赋值ANY 或者POINTER接口参数。

     3:32位的存储器指针与32位的寄存器指针(交叉和内部)有什么区别?

    我想应该是一样的,参考下面的一条指令:

           LAR1  MD    20           //将存储于MD20中的指针装载到地址寄存器1 中。

                                    

       指针可以相互传达,说明是一样的,所以指令也可以这样写:

           LAR1  P#M10.0             //将指针P#M10.0装载到地址寄存器1 中。

     

           L     P#M10.0             //将指针P#M10.0装载到累加器1 中。



           T     MD 20              //传递到MD20中


     

    指针类型虽然比较多,前面说了不好再归纳,因为再归纳反而不容易入门学习(划分),如果理解深刻了在你的头脑中就会形成自己的知识体系,便于记忆和使用,感觉就跟网络小说里面的“炼化”一样。

    ----------------------------------------------------------------------------------------------------------

    上一篇:【4】存储器32位地址指针——从S7-300_400到S7-1500看变址寻址的改变系列故事之四

    下一篇:【6】pointer 和ANY——从S7-300_400到S7-1500看变址寻址的改变系列故事之六

    汇总帖:技术Π活动故事、视频与案例分享汇总

     

     


    推荐帖推荐理由:(推荐人:)  修改
    有帮助(18)


  • 1847会员 众:6楼2020-08-15 20:51:50
  • 亲爱的网友们,

    截至到本周末,技术π活动S7-300/400到S7-1500程序移植与功能替代的案例分享就截稿了。
    在接下来的时间是邀请进入直播间的环节了。技术π直播间是封闭的直播间,能够进入的直播间的网友将和多位西门子技术领袖展开技术对话,跟随技术领袖们一起对技术问题剥茧抽丝,层层解析。

    现在,活动组委会再给大家安利一个进入直播间的限时通道,就是参加下面的考试,所有参加考试的网友都可以进入考试讨论微信群,崔工在群里针对大家的疑问进行答疑。考试成绩前5名会被邀请进入直播间。


    时间仅限:8月17日9:00--8月19日 21:00

    每人只有一次机会,你准备好了吗?点击这里参加测试,崔工在考试群和直播间等着你!



    精华帖版主置评:
    推荐帖推荐理由:(推荐人:)
    有帮助(1)

      
  • 1847会员 众:5楼2020-08-05 11:58:21
  • 学习提问助提高,分享获奖两不误!

    大家在学习崔工的技术分享时,如果有任何问题别忘了在此发帖提问,崔工在线等着大家。

    如果你也有与此相关的工作经历,分享给广大网友,哪怕是应用中遇到的还没有解决的问题,也可以分享出来,崔工给你答案或建议。


    记得分享的前10名还有大奖等着你哦!

    另外,更有价值的奖励是您会获得直播间入场券,在盛大的技术在线会议中,听听各路专家是怎么解析各种问题的。优秀的分享者更可以受邀加入技术Π专属的圈子里,在这个有封闭的圈子里和崔工等 技术大咖们一起探讨各种技术问题。


    本期案例征集将在8月14日截至,倒计时已经开始了,没有分享的网友抓紧时间啦~~

    马上下载案例分享模板:

    案例征集模板_从S7-300400到S7-1500移植与功能更新替换.docx


    精华帖版主置评:
    推荐帖推荐理由:(推荐人:)
    有帮助(2)

      
  • ZD_JY:4楼2020-03-20 16:47:24
  • 看了之后还是晕晕乎乎的,慢慢消化吧

    精华帖版主置评:
    推荐帖推荐理由:(推荐人:)
    有帮助(4)

      
  • 木头515:3楼2020-03-19 10:24:22
  • 看了之后对寻址理解更加深刻了,谢谢分享。

    精华帖版主置评:
    推荐帖推荐理由:(推荐人:)
    有帮助(6)

      
  • CoolCool的猪:2楼2020-03-18 20:49:01
  • 谢谢啊 
    如果形成PDF就更好了 

    精华帖版主置评:
    推荐帖推荐理由:(推荐人:)
    有帮助(9)

      
  • 1847会员 yangchunbaixue:1楼2020-03-18 09:49:08
  • 内容很丰富,感谢楼主分享,学习了西门子寻址的相关知识

    精华帖版主置评:
    推荐帖推荐理由:(推荐人:)
    有帮助(5)

      
    收起
    【5】寄存器间接寻址——从S7-300_400到S7-1500看变址寻址的改变系列故事之五
    • 收藏

    • 有帮助

    • 回复
    回复
     *帖子内容
    上传附件要求

    1. 文件大小:上传文件的大小请限制在1M以内。

    2. 文件格式:请不要上传.exe文件,系统支持的格式有:.jpg, .jpeg, .pdf, .gif, .zip, .rar, .doc,.docx, .xls,.xlsx, .ppt, .mp3, .wma, .wmv .asf, .avi, .bmp, .png, .txt, .7z

    发布帖子
    • 分享帖
    • 故事帖
    • 技术探讨帖
    • 求助帖
    • 西家杂谈
    • 投票帖
    邮件
    只看
    楼主
    只看
    精华
    只看
    精编
    发帖
    回复
    二维
    码
    ×
    ◆
    扫描打开手机版

    全球技术资源

    • 推荐文档
    • 新手必读文档
    • mySupport
    • 常问问题
    • 手册
    • 应用与工具
    • 证书
    • 软件
    • 产品通知
    • 特性曲线
    • 技术数据
    • 订阅文档 

    取证训练营

    • 首页
    • 取证训练营
    • 精品课程
    • 证书查询

    技术论坛

    • 首页
    • 发帖
    • 精华贴
    • 高赞帖
    • 分享帖
    • 当前热门
    • 为您推荐
    • 最新发帖
    • 季度标兵
    • 精华之星
    • 用户荣誉榜
    • 我的关注

    找答案

    • 首页
    • 精华问答
    • 高赞问答
    • 有奖问答
    • 全部已解决问题
    • 待解决问题
    • 待推荐问题
    • 快侠榜
    • 上周排行
    • 总分排行
    • 历届夺魁答侠

    产品入门新手必读

    • 首页
    • S7-200产品入门
    • S7-1500产品入门
    • PCS 7产品入门
    • WinCC产品入门
    • MM4系列变频器产品入门
    • S120变频器产品入门
    • SINUMERIK 808D产品入门
    • 国产V系列变频器和数控产品入门
    • 网站新手必读

    售后服务

    • 售后服务简介
    • 服务网络及联系方式
    • 提交服务需求
    • 查询服务进程
    • 下载服务登记表格
    • 我的售后服务信息
    • 售后服务常见问题
    • 服务合作伙伴
    西门子中国  © 西门子(中国)有限公司 1996 – 2021  企业信息   隐私政策  使用条款  京ICP备06054295号  京公网安备 11010502040638号

    系统提示

    新密码:

    密码至少8位,包含大、小写字母,数字和符号至少三种。

    确认密码:

    密码至少8位,包含大、小写字母,数字和符号至少三种。

    取消 确定

    系统提示

    手机号
    验证码
    获取验证码
    暂不验证
    绑 定

    系统提示

    新密码:

    密码至少8位,包含大、小写字母,数字和符号至少三种。

    确认密码:

    密码至少8位,包含大、小写字母,数字和符号至少三种。

    取消 确定

    验证码登录

    密码登录

    获取验证码

    未注册手机验证后自动登录,登录即代表同意
    《支持中心网站注册协议和隐私政策》

    微信登录
    获取验证码
    忘记密码 没有账号?立即注册
    微信登录
     

     短信登录

     

    获取动态密码

     

    登录

     

    ×
    立即
    签到
    已签到
    已签到0天
    累计可抽西币次数:0次抽奖机会
    累计可抽大奖次数:0次抽奖机会
    信息提示
    很抱歉!您所访问的页面不存在,或网址发生了变化,请稍后再试。
    编辑推荐: 关闭

    请填写推广理由:

    正在加载...
     
    发分享帖
    爱工控,乐分享,
    分享您的经验与案例
    发故事
    发表您的精彩故事,
    参与征文活动
    技术探讨帖
    阐述您的观点,
    表达我的看法
    西家杂谈
    海侃天南地北,
    闲聊工控世界
    发求助帖
    求道解惑,“刨根问底”
    解决问题
    发投票帖
    邀投票,做调查,
    网友帮您来作主