西门子PLC学习笔记十五-(数据块及数据访问方式)

一、数据块

数据块是在S7 CPU的存储器中定义的,用户可以定义多了数据块,但是CPU对数据块数量及数据总量是有限制的。

数据块与临时数据不同,当逻辑块执行结束或数据块关闭,数据块中的数据是会保留住的。

数据块分共享数据块、背景数据块、用户自定义数据块,下面分别介绍。

1.共享数据块(全局数据块)

其用于存储全局数据,所有逻辑块(OB、FC、FB)都可以访问共享数据块中的数据。

2.背景数据块(私有存储区)

其用做功能块(FB)的“存储器”。FB的参数和静态变量安排在它的背景数据块中。背景数据块不是由用户编辑的,而是编辑区生成的。

3.用户自定义数据块

其是以UDT为模板生成的数据块。创建用户定义数据块之前,必须先创建一个用户自定义的数据类型,如UDT1,并在LAD/STL/FBD S7程序编辑器内定义。

自定义数据类型UDT1的创建 可以参照之前的学习笔记:西门子PLC学习笔记五-(编程语言、数据类型)进行学习

4.数据块的创建

数据块的创建可以参考下图:

   

  

二、数据块的访问

用户程序可以以位、字节、字或双字操作访问数据块中的数据,可以使用符号或绝对地址访问。

在访问数据块时必须指明数据块的编号、数据类型与位置。如访问了不存在的数据单元或者数据块,同时没有编写错误处理OB块,CPU将进入STOP模式。

1.寻址数据块

2.传统方式访问数据块

传统方式是:先打开数据块,然后在访问。下例为STL访问数据块代码:

OPN	DB1		//打开数据块DB1,作为共享数据块
L	DBW2	//将DB1的数据字DBW2装入累加器1的低字中
T	MW0		//将累加器低字中的内容传送到存储字MW0
T	DBW4	//将累加器1低字中的内容传送到DB1的数据字DBW4
OPN	DB2		//打开数据块DB2,作为共享数据块,同时关闭数据块DB1
L	DB10	//装入共享数据块DB2的长度
L	MD10	//将MD10装入累加器
<D			//比较数据块DB2的长度是否足够长
JC	ERRO	//如果长度小于存储双字MD10中的值,则跳转到ERRO

3.直接访问数据块

直接访问数据块是:直接给出数据块的编号和数据在数据块中的地址。可以使用绝对地址,也可以使用符号地址。如下例:

L	DB1.DBW2	//打开数据块DB1,并装入地址为2字数据单元
T	DB1.DBW		//将数据传送到数据块DB1的数据字单元DBW4
//----------- 使用符号地址 ------------
L	"DB_Symbol".Speed	//打开符号名为"DB_Symbol"的数据块
						//并装入名为"Speed"的数据单元
时间: 2024-10-04 16:07:59

西门子PLC学习笔记十五-(数据块及数据访问方式)的相关文章

西门子PLC学习笔记十九-(FB编程)

FB块可被OB1调用多次,功能的所有形参和静态数据都存储在一个单独的.被指定给该功能块的数据块(DB)中,该数据块被称为背景数据块.当调用FB时,该背景数据块会自动打开,实际参数的值被存储在背景数据块中:当块退出时,背景数据块中的数据仍然保持. 下面通过案例设计介绍FB如何编写吧. 案例:目前有3个贮水箱,每个水箱有2个液位传感器,UH1.UH2.UH3为高液位传感器,"1" 有效:UL1.UL2.UL3为低液位传感器,"0"有效.Y1.Y2.Y3分别为3个贮水水箱

西门子PLC学习笔记十四-(用户程序结构及执行)

PLC用户程序的总体结构如下图: 1.组织块(OB):操作系统与用户程序的接口,决定用户程序的结构. 组织块是由操作系统调用的,用于控制扫描循环和中断程序的执行,PLC的启动和错误处理,不同的CPU可以使用的组织块不都一致. 常用OB块和其对应的优先级 上表中的OB1是循环扫描的主程序,其优先级最低.处理OB90不能中断OB1的执行外,其余的OB块均可以.OB100~OB102为启动组织块,分别代表CPU的三种启动方式,即暖启动.热启动.冷启动.OB100为暖启动组织块.OB101为热启动组织块

西门子PLC学习笔记十六-(逻辑块的结构)

逻辑块包括:功能(FC).功能块(FB).组织块(OB),它们都是由变量声明表.代码段及其属性等组成. 1.局部变量声明表 每个逻辑块的前面都有一个变量声明表,其称为局部变量声明表. 局部数据包括参数.局部变量. 局部变量包括静态变量.临时变量. 1)功能(FC)变量介绍 FC没有背景数据块,即FC不能使用静态变量,可以使用临时变量.输入.输出.I/O参数以指向实参的指针形式存储在操作系统为参数传递而保留的额外空间中. 2)功能块(FB)变量介绍 FB除了临时变量外,所有参数的存储空间都在背景数

西门子PLC学习笔记十-(计数器)

S7-300/400的计数器一般占两个字节,是16位的.CPU最多可以使用64~512个计数器,计数器地址编号为C0~C511 1.S_CUD(加减计数器) 加减计数器波形图: 2.S_CU(加计数器) 3.S_CD(减计数器) 4.三种计数器对应的线圈表示 1)基本线圈指令 2)加计数指令的实现 3)减计数指令实现: 4)加减计数指令实现: 5.计数器应用小例子 下面程序实现的是:当按下按钮3此,输出高电平:当按下7次,输出低电平

西门子PLC学习笔记十八-(带参数FC编程)

带参数FC,指编辑功能时,在局部变量声明表中定义形式参数,在功能(FC)中使用虚拟的符号地址完成程序的编写. 下面将例举简单的示例说明如何编写带参FC功能. 本示例完成一数学公式的编程:Y = ( X + 5 ) * 11 / 5; 程序如下: FC数学公式编写如下(内部定义了输入参数变量:X和输出参数变量Y) 本程序代码可以在此下载.

西门子PLC学习笔记十八-(带参数FC编程二)

本篇仍是对带参数的FC编程的练习,本次实现功能: 一共有4台电机,每台电机都要求Y-△降压启动.启动时,按下启动按钮,M1电机启动,然后每隔10s启动一台,最后M1到M4四台电机全部启动.当按下停止按钮时,M4先停止,过10s后M3在停止,再过10s后M2停止,再过10sM1电机停止.同时任一台电机启动时,控制电源的接触器和Y形接法的接触器接通电源6s后,Y形接触器断开,1s后△接触器动作接通. 本需求程序实现代码如下: 1.符号表 2.功能块编写代码如下 3.主程序编写如下 本程序代码可在此下

Swift 学习笔记十五:扩展

扩展就是向一个已有的类.结构体或枚举类型添加新功能(functionality).扩展和 Objective-C 中的分类(categories)类似.(不过与Objective-C不同的是,Swift 的扩展没有名字.) Swift 中的扩展可以: 1.添加计算型属性和计算静态属性 2.定义实例方法和类型方法 3.提供新的构造器 4.定义下标 5.定义和使用新的嵌套类型 6.使一个已有类型符合某个协议 一.扩展属性,构造器,方法 class Human{ var name:String? va

laravel3学习笔记(十五)

原作者博客:ieqi.net ==================================================================================================== 异常与日志 在应用中,我们总会遇到各种问题.各种异常,这时,记录异常发生时的状态就很重要,所以异常与日志是有着天然的关系的. 关于异常与日志的配置在文件 application/config/error.php 中. 文件中有四个配置项: 'ignore' => ar

西门子PLC学习笔记二十-(多重背景数据块的使用)

设某发动机组由1台汽油发动机和1台柴油机发动机组成,现要求用PLC控制发动机组,使各台发动机的转速稳定在设定的速度上,并控制散热风扇的起动和延时关闭.每台发动机均设置一个起动按钮和一个停止按钮. 程序设计如下: 1.程序模块 2.符号表 3.风扇控制程序 4.启动机控制 5.启动机组 注:1)在变量声明表内完成FB1类型的局部实例,"gasline_engine"."diesel_engine"的声明. 2)调用FB1局部实例时,不需要设置背景数据块,FB1的实例数