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

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

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

    还没有账号?

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

    登录后可查看消息记录

    立即登录
  6. 收藏

    登录后可查看收藏记录

    立即登录
  7. 历史

    登录后可查看历史记录

  8. 公告
搜索

热搜词:1847工业学习平台选型选型

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

西门子官方商城

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

    1.专家知识经验分享

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

    3.申请加入技术派

    4.技术派支持案例分享

    5.常见问题搜索

    6.技术资料链接

    标签:
    • 其他
    • S7-400
    • S7-200
    • EM231
    • ANY
    • call
    • DA

    3 参数类型指针-POINTER与ANY

            所谓参数类型指针就是专用于函数FC及函数块FB接口参数的传递,例如可以在IN、OUT、IN/OUT中声明这些变量,也可以在TEMP区(OB也可以)中声明作为一个变量赋值给调用FC/FB的接口参数。

    3.1 POINTER指针的数据格式

            POINTER指针占用48位地址空间,数据格式如图16所示。

     1.jpg


             POINTER指针前16位的数值表示数据块DB或DI的块号,如果指针没有指向一个DB块,则数值为0,POINTER指针可以指向的数据区参考下表:

    2.jpg


            与区域交叉指针相比,POINTER类型指针可以直接指向一个数据块中的变量,例如P#DB1.DBX0.0,所以 POINTER(6个字节)=DB块号(2个字节)+32位指针(4个字节,带有数据区的寄存器和存储器指针)。如果不是指向DB块,就是带有数据区的寄存器和存储器指针,例如P#M2.0。

            调用FB、FC时,对POINTER指针数据类型的形参进行赋值时可以选择指针格式直接赋值,例如:

                P# DB2.DBX12.0        //指向DB2.DBX12.0。

                P#M12.1                  //指向M12.1。

            也可以选择使用地址声明或符号名(不使用符号P#)的方式进行赋值,例如:

                DB2.DBX12.0           //指向DB2.DBX12.0。

                M12.1                     //指向M12.1。


    3.2 ANY指针的数据格式

            ANY数据类型指针中包括数据类型、重复系数、DB块号、存储器数据开始地址,占用80位地址空间,数据格式如图17所示。

     3.jpg

            ANY指针使用的数据类型(存储区)参考下表

            ANY指针使用的数据类型(数据区)

    4.jpg

            ANY指针使用的数据类型(参数类型)参考下表

            ANY指针使用的数据类型(参数类型)

     5.jpg

            ANY指针中的数据长度表示指向一个数据区域,例如指向整个数组、结构体等;如果ANY指针没有指向一个DB块,DB块号将为0;ANY指针的数据区与POINTER指针数据区定义相同。

            与POINTER指针相比,ANY类型指针可以表示一段数据区域,例如P#DB1.DBX0.0 BYTE 10,表示指向DB1.DBB0~DB1.DBB9。调用FB、FC时,对ANY指针数据类型的形参进行赋值时可以选择直接使用指针格式赋值,例如:

            以P#开头用于存储区数据类型

            P# DB2.DBX12.0 WORD 22       //指向从DB2.DBW12开始22个字。

            P#M12.1 BOOL 10                   //指向从M12.1开始10个位信号。

     

            以L#开头用于参数数据类型

            L#2 BLOCK_FC  4                    //指向从FC2开始4个FC。

            L#4 TIMER 5                          //指向从T4~T8。

     

            也可以选择使用地址声明或符号名(不使用符号P#)的方式进行赋值,例如:

            DB2.DBW12                  //指向DB2.DBW12一个字,数据长度为1。

            M12.1                          //指向M12.1一个位信号,数据长度为1。

            FC2                            //指向FC2。


    3.3 POINTER与ANY指针的拆分

            32位地址指针可以直接装载到存储器或地址寄存器中,从而可以直接在程序块中使用,进行间接寻址,大家知道,S7-300/400可以直接引用的变量最大为4个字节,POINTER和ANY参数类型指针作为一个整体并大于4个字节而不能装载到存储器或寄存器中,所以不能在程序块中直接使用,必须进行拆分使用。拆分的指令只能使用STL完成,指令格式为:

            P##  <POINTER与ANY的符号名称>

            表示指向POINTER与ANY指针的首地址,就是装载POINTER与ANY指针变量的开始地址。为了便于理解,假设FC接口中的一个ANY变量V_ANY开始地址为0(如果是临时变量区则为L0),那么指令:

            L  P##V_ANY  //指向指针V_ANY的开始地址即L0。

            如果将开始地址存储于存储器中,例如

            T  MD20      //将开始地址存储于MD20中,存储P#L0.0

            如果要读出赋值ANY变量的数据类型就必须地址偏移一个字节即:

            L     MD    20

            L     P#1.0

            +D    

            T     MD    24    //数据类型开始地址存储于MD24中即P#L1.0


            但是后面的问题来了,怎么样读出这个地址中的值?下面这样编写语法错误:

            L    B[MD24]      //语法错误

            只能使用交叉区域指针的方式,我在上一篇已经介绍了,

            LAR1  MD    24      //将MD24中地址存储于地址寄存器AR1中

            L     B [AR1,P#0.0]   //装载ANY指针的数据类型

            T     MB200         //存储于MB200中。

            所以所有的拆分程序都必须使用寄存器交叉区域指针编写(不能使用存储器指针),这样就变成了固定格式,以ANY指针类型为例介绍拆分指令:

            L  P##V_ANY  //指向指针V_ANY的开始地址即L0。并装载到地址寄存器AR1中。

            LAR1       

            L B[AR1,P#1.0]   //存储ANY指针的数据类型即LB1

            L W[AR1,P#2.0]   //存储ANY指针的数据长度即LW2

            L W[AR1,P#4.0]   //存储ANY指针的数据块号即LW4

            L D[AR1,P#6.0]   //存储ANY指针的开始地址区即LD6

            IN、OUT、IN/OUT接口区不能显示绝对地址,所以必须使用拆分指令。


            为了让大家更好地理解POINTER和ANY指针的应用,介绍一个编程应用。


    3.4  ANY指针编程应用

            编写一个计算功能的函数FC13,输入参数“In_Data”为一个数组变量,如果数组元素为浮点数,输出所有元素的平均值“OUT_VAL”,如果数组元素为其它数据类型,不执行计算功能。OB1中调用函数FC13的程序如下:

            CALL  FC     13                                // 调用函数13。   

            In_Data:=P#DB1.DBX0.0 REAL 8     //输入数据区从DB1.DBD0开始8个浮点值。

            OUT_VAL:=MD20                          //计算结果。

     

            完成的计算功能相当于MD20:=(DB1.DBD0+..+..+DB1.DBD28)/8。在函数FC13的接口参数中定义输入、输出变量及临时变量参考下表:

    FC13接口参数

    7.jpg

    FC13中的示例程序如下:

    8.jpg

    9.jpg


    3.5  使用ANY指针变量赋值

            上面的示例程序在调用FC13时赋值的ANY数据类型为常数,如果使用变量则数据区、长度都可以变化,下面的应用示例使用ANY变量赋值SFC20(块复制)的接口参数,即将P#DB1.DBX0.0 INT 10复制到P#DB1.DBX20.0 INT 10中,函数接口声明参考图18。

    10.jpg        在IN、OUT、IN_OUT区声明ANY变量没有绝对地址,所以必须使用拆分指令,在临时变量中声明ANY类型指针带有绝对地址,所以可以不用拆分指令直接赋值,示例程序如下:

    11.jpg

    12.jpg

            数据块、地址区、开始地址和长度都可以作为变量,从而增加了程序的灵活性。


    3.6  S7-1500处理参数类型指针的方式

            1:如果习惯了S7-300/400的编程方式,可以直接使用AT指令在接口参数中进行拆分,这样使用LAD也可以编程,参考图19。

    13.jpg

            2:除此之外,还可以使用可变数组替代ANY类型指针,在S7-1500中可以非常方便地实现3.4章节的应用示例。在FC的接口参数中可以声明一个可变数组类型变量IN_DATA,数组元素为real(这个不可以变,在Variant中可以实现,后续章节介绍),输出所有元素的平均值“OUT_VAL”函数接口声明参考图20。

     14.jpg

            示例程序参考图21,比起Any的拆分,有股脱离苦海的感觉,并且没有编程语言的限制。

    15.jpg

            3:使用Variant,在后续章节中介绍。

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

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

    下一篇:【7】Variant数据类型指针——从S7-300_400到S7-1500看变址寻址的改变系列故事之七

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


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


  • zhbo.:10楼2020-10-23 16:20:43
  • any使s7中最灵活的数据类型,不知道有没有之一,楼主牛啊

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

      
  • :9楼2020-08-20 14:09:46
  • 连着前几篇看下来,收获很多

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

      
  • 1847会员 众:8楼2020-08-15 20:53:24
  • 亲爱的网友们,

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

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


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

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


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

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

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

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


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

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


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

    立刻下载案例分享模板:

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


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

      
  • 召唤灬美少女:6楼2020-06-30 23:32:13
  • 有空就答题,答不上就找专家学习,然后再答题

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

      
  • 故乡13k:5楼2020-03-25 08:13:00
  • 谢谢,有点高级。

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

      
  • 1847会员 yzm_cumt:4楼2020-03-23 16:39:59
  • 看懂了一部分,没办法,慢慢消化吧

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

      
  • CoolCool的猪:3楼2020-03-19 19:49:25
  • 专家研究的都是细节啊 

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

      
  • holdkcsxyz:2楼2020-03-19 19:19:32
  • 再好好学习一遍

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

      
  • 黑猫警长W:1楼2020-03-19 15:16:09
  • 看专家的就是精彩

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

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

    请填写推广理由:

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