加载中…
个人资料
  • 博客等级:
  • 博客积分:
  • 博客访问:
  • 关注人气:
  • 获赠金笔:0支
  • 赠出金笔:0支
  • 荣誉徽章:
正文 字体大小:

【S7-300】ANY类型指针使用指南【高级】

(2014-10-19 10:45:19)
标签:

s7-300

s7-400

工控老鬼

启程自动化培训

西门子plc

分类: 启程PLC培训

POINTER指针相比,ANY类型指针可以表示一段长度的数据,例如P#DB1.DBX0.0 BYTE 10,表示指向DB1.DBB0DB1.DBB9。调用FBFC时,对POINTER数据类型参数进行赋值时可以选择指针显示方式直接赋值,例如:

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

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

 

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

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

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

 

 

编写一个计算功能的函数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接口参数

数据接口

名称

数据类型

地址

IN

In_Data

ANY

OUT

OUT_VAL

REAL

TEMP

DATA_LEN

INT

0.0

TEMP

BLOCK_NO

INT

2.0

TEMP

ADD_TEMP

REAL

4.0

TEMP

DATA_NO

INT

8.0

 

 

      L     0              //初始化临时变量#ADD_TEMP

      T     #ADD_TEMP

      L     P##In_Date     //指向存储地址指针In_Date首地址,并

      LAR1                     装载到地址寄存器AR1中。

      L     B [AR1,P#1.0]    //如果数据类型不是REAL,跳转到END

      L     B#16#8

      <>D 

      JC    END

      L     0

      L     W [AR1,P#4.0]    //判断OB1中赋值的地址指针是否为数据

      ==I                      块(参考 ANY的数据格式)。

      JC    M1

      T     #BLOCK_NO

      OPN   DB [#BLOCK_NO]   //如果是DB块,打开指定的DB块。

M1:   L     W [AR1,P#2.0]    //判断ANY指针中数据长度,本例中为        

      T     #DATA_LEN          REAL变量的个数。

      L     D [AR1,P#6.0]   //找出需要计算数据区的开始地址,本例

                              中为DB1.DBX0.0   

      LAR1

 

      L     #DATA_LEN

NO:   T     #DATA_NO          //循环执行加运算,本例中循环执行的次

                                数为8

      L     D [AR1,P#0.0]     //装载DB1.DBD0到累加器1中。

      L     #ADD_TEMP         //与临时变量#ADD_TEMP相加后将计算结果

      +R                           再存储 #ADD_TEMP中。

      T     #ADD_TEMP

      +AR1  P#4.0             //地址寄存器加4,地址偏移量。

      L     #DATA_NO          //LOOP 指令固定格式。        

      LOOP  NO                //跳回“NO”循环执行,执行完定义在变

                                #NO_TEMP的次数后自动跳出循环程序。

      L     #ADD_TEMP         //求平均值,装载运算结果到累加器1中。

      L     #DATA_LEN         

      DTR                     //将变量个数转变为浮点值便于运算。  

      /R   

      T     #OUT_VAL          //输出运算结果。

END:  NOP   0

 

  

您好,欢迎来到启程自动化培训中心,全新课程火爆预约中!

------------------------【点击查看】-----------------------

《S7-200综合班》课时:30天学费:3500

《S7-300专家班》课时:30天学费:4500

《S7-系统集成全科班》课时:60天学费:6800

《Eplan电气系统设计》课时:5天学费:2500

《WinCC系统组态》课时:5天学费:2500

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

详细课程情况请点击:http://www.gongkong8.com/course/

课程咨询电话:0755-85292922 QQ:800040685(点击直接交流)

启程为您提供最专业的自动化、PLC、系统技成相关技术的培训。专注只为成就您的高薪!【工控老鬼推荐培训机构
+++++++++++++++++++++++++++++++++++++
自动化专业技术博客:http://blog.sina.com.cn/wincchome

自动化专业技术微博:http://weibo.com/i/1721143974

0

阅读 收藏 喜欢 打印举报/Report
  

新浪BLOG意见反馈留言板 欢迎批评指正

新浪简介 | About Sina | 广告服务 | 联系我们 | 招聘信息 | 网站律师 | SINA English | 产品答疑

新浪公司 版权所有