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

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

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

    还没有账号?

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

    登录后可查看消息记录

    立即登录
  6. 收藏

    登录后可查看收藏记录

    立即登录
  7. 历史

    登录后可查看历史记录

  8. 公告
搜索

热搜词:1847工业学习平台选型3RT1(95A以下)产品退市声明

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

西门子官方商城

西门子中国
  • 工业自动化
  • 驱动技术
  • 客户服务
  • 冶金技术
  • 行业市场解决方案
  • 工业支持中心
工业支持中心
  • 我的支持中心
  • 下载中心
  • 全球技术资源
  • 1847工业学习平台
  • 产品入门新手必读
  • 找答案
  • 技术论坛
  • 售后服务
  • 网络资源新手必读
  • 高级搜索
技术论坛
  • 论坛公告
  • 用户指南
  • 用户排行榜
  • 热门帖子
  • 最高收藏帖
  • 精华帖
  • 分享帖
  • 高端推荐帖
  • 在线用户列表
  • 论坛管理
特别专题 / 西家技术派
【4】存储器32位地址指针——从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 合作伙伴专区
  • 【4】存储器32位地址指针——从S7-300_400到S7-1500看变址寻址的改变系列故事之四
  • 作者: 1847会员 啤酒鱼发布时间:2020-03-11 21:13:39浏览次数:8928次 锁帖 精华帖星级4级 精华帖 高赞 官方 回复本帖
  • “西家技术派”公众号拥有如下功能:

    1.专家知识经验分享

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

    3.申请加入技术派

    4.技术派支持案例分享

    5.常见问题搜索

    6.技术资料链接

    标签:
    • 基础理论
    • S7-300
    • S7-400
    • S7-200CN
    • 5621
    • DINT
    • ES


    1.3存储器32位地址指针

            32位地址指针用于I、Q、M、L、数据块等存储器中位、字节、字及双字的寻址,32位的地址指针使用一个双字表示,第0位~第2位作为寻址操作的位地址,第3位~第18位作为寻址操作的字节地址,第19位~第31位没有定义,32位地址指针的格式如下:

    1.jpg

            访问时需要使用地址存储器标识符及32位地址指针,地址寻址表示格式为:

    地址存储器标识符 [32位地址指针],例如指针存储于LD20中,装载M存储器一个字节表示为:

    2.jpg

            前面介绍的存储器16位指针,特定用于T、C、程序块的寻址,使用一个INT格式的值表示,每次值加1,指向的对象地址加1,例如,T1、T2,其中的“1”、“2”就是指针的直接变化(好像没有说明白!)。32地址指针使用一个DINT格式的值表示,指向的是I、Q、M、L、数据块等存储器中位,每次值加1,指向的地址区位的号加1,区别就是在这里。一个字节是8个位,如果指向的是字节每次就要加8的倍数,例如地址MB[LD20],LD20值为0,则表示MB0,LD20值为8,则表示MB1,如果指向的是字每次就要加16的倍数,以此类推。

            如果将32位指针按照16位指针的方式使用就会出问题,例如MB[LD20],LD值为10,指向地址为MB1.2,程序编译没有问题(语法正确),下载下去造成CPU停机,原因就是地址长度错误。在第三部分介绍定时器循环调用的示例程序中,TRIG1和TRIG2就是使用32指针迭代的,例如 A  M [LD20],每次LD值加1,由于显示的问题别屏蔽了,所以程序量还有有一点的。前面也提到了优化的问题,16位和32指针由于使用方法不同,不能简单地合并。

            32位指针也可以使用另外一种形式表示,就是使用P#X.Y,P表示指针,#表示特定符号,X表示字节地址,Y表示位地址,P#X.Y可以与DINT格式的值相互转换,DINT值=X*8+Y,

            例如P#2.0转换DINT格式为16,P#3.1转换DINT格式为25。在指针寻址时可以使用指针的格式也可以使用DINT格式进行运算。使用32位地址指针寻址参考下面的示例程序:

          OPN   DB     1            //打开DB1。

          OPN   DI     3            //打开DB3,最多可以同时打开两个DB块。

     

          L     4                   //装载4到累加器1中。

          SLD   3                   //累加器1中数值左移3位,在程序中经常见到,

                                      左移3位就是将原值乘以8

          T     MD    20            //将逻辑操作结果传送到MD20中,MD20包含地址指针为P#4.0。

          L     P#20.0              //将地址指针P#20.0装载到MD24中。

          T     MD    24

     

          L     320                 //320就是P#40.0装载到MD28中。

          T     MD    28

     

          L     DBW [MD 20]         //装载DB1.DBW4。

          L     DBW [MD 24]         //装载DB1.DBW20。

          +I                                                              //相加

          L     DIW [MD 28]         //装载DB3.DBW40。

          -I                        //相减。 

          T     DIW    2            //将运算结果传送到DB3.DBW2中。

            使用32位地址指针寻址数据块地址时,数据块必须先打开,然后才能寻址,数据块寻址方法参考下面的示例程序,如果直接使用指令对完整数据格式地址(例如地址DB1.DBB[MD100])进行间接寻址被视为非法。

            使用LOOP 指令与32位地址指针可以进行循环操作(这是固定的操作模式,在程序中一看到LOOP指令就要想到地址的迭代),假设一个编程应用:一个INT变量(MW2)与一个数组(假设存储于DB1中,包含100个元素为INT的数组)存储的值相比较,如果数值相同,指出第一个相同数值存储在DB块中的位置(数组中的位置)。使用通常的编程方法,需要逐个进行比较,程序量比较大,如果实际需要与1000个数值比较,将占用大量的存储空间,使用LOOP指令与地址指针相结合可以轻松解决上述问题,参考下面的示例程序:

            L     0                    //初始化MW100和MD4。

          T     MW   100

          T     MD     4

          OPN   DB     1             //打开DB1。

          L     100                  //循环操作的次数,100次。   

    next:  T     MW   100             //将循环100次装载到MW100中,固定格式。                                                                           

          L     MW     2             //                                  进行比较的数值存储于MW2。

          L     DBW [MD 4]           //与DB块中存储的值进行比较,开始地址为DBW0。

          ==I                                                               //如果数值相等跳到m1。

          JC    m1

          L     MD     4             //将地址指针加2(每个相邻的INT地址相差2)。

          L     P#2.0

          +D   

          T     MD     4

          L     MW   100             //次数减1,跳回next,如果MW100等于0,跳出

    LOOP  next                   //循环操作LOOP指令,LOOP指令固定格式。

    m1:   FP    M     10.0             //如果数值相等,记录MD4指针的位置,转换

    为数组的位置((地址值/P#2.0)+1)值并存储

    于MD8中。

          JCN   m2                     //为0跳转到m2。  

          L     MD     4

          L     P#2.0

          /D   

          +     1

          T     MD     8

            m2:   NOP   0

     

            地址的循环操作只是减少了程序量,CPU扫描时间不会减少。


    1.4存储器32位地址指针-S7-1500的处理方式

            与16位指针的处理方式是一样的,还是使用数组进行循环迭代。上面的应用如果在S7-1500中编写则非常方便,示例程序参考图11。

    3.jpg

            使用变量“START_COMP”作为开始信号,如果比较值“COMP_Value”与数组的元素“A.B["INDEX"]”不相等(INDEX缺省为0),则变量“INDEX”加1,如果大于等于100,则将“INDEX”清0,然后复位开始信号“START_COMP”;如果比较值“COMP_Value”与数组中的第一个元素“A.B["INDEX"]”相等,则将变量“INDEX”中的值传送到结果“RESULT”中,然后将“INDEX”清0并复位开始信号“START_COMP”。

            程序比较简单,使用LAD即可编程程序,对编程人员的要求不高,如果使用SCL编写程序可能更加简单。

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

    上一篇:【3】16位地址指针使用示例——从S7-300/400到s7-1500系列故事之三

    下一篇:【5】寄存器间接寻址——从S7-300_400到S7-1500看变址寻址的改变系列故事之五

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


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


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

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

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


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

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


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

      
  • 1847会员 eagleking68:4楼2020-08-06 09:25:59
  •  INDEX需要在哪里声明,还有需要赋初值不?

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

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

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

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


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

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


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


    下载案例分享模板:

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


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

      
  • 小居:2楼2020-04-14 10:51:17
  • 1500的是如何实现循环的

    精华帖版主置评:
    推荐帖推荐理由:(推荐人:)
    有帮助(0)
  • 龙斌520 2020-11-16 15:07:47
  • LAD也有跳转指令,可能没有截图。如果没有加跳转循环那就是一个扫描周期检查一次。


      

      
  • CoolCool的猪:1楼2020-03-12 10:28:00
  • 感谢啤酒鱼先生

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

      
    收起
    【4】存储器32位地址指针——从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次抽奖机会
    信息提示
    很抱歉!您所访问的页面不存在,或网址发生了变化,请稍后再试。
    编辑推荐: 关闭

    请填写推广理由:

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