理论教育 用数据块DB进行优化

用数据块DB进行优化

时间:2023-06-17 理论教育 版权反馈
【摘要】:图8.18数据块编辑器数据块也需要下载到CPU中,单击工具栏中的下载按钮进行下载,也可以通过选中项目树中的PLC设备统一下载。S7-1200 PLC数据块的数目和最大块长度依赖于CPU的型号。图8.21数据块数据单元结构图由此可知,DB1.DBW200是由DBB200和DBB201构成的,在S7-1200系列PLC中,DBB200为高位,DBB201为低位,也就是说,如果MB200=16#78,MB201=16#12,则MW200=16#7812。

用数据块DB进行优化

用户在项目开发中,除了进行程序设计外,还需要保存各种数据。数据是以变量的形式进行存储的,通过存储地址和数据类型来确保数据的唯一性。数据的存储地址包括I/O映像区、位存储器、局部存储区和数据块等,数据块需要占用用户的存储器空间;数据类型有位、字节、字、双字等形式,访问数据块中的数据是通过符号或绝对地址的形式进行的。

根据数据块的使用范围,可将其分为全局数据块(也叫共享数据块)和背景数据块。用户程序中的所有逻辑块都可以访问全局数据块中的信息,而背景数据块只能分配给特定的FB,仅在所分配的FB中使用。

全局数据块需要用户进行创建和声明各种变量,在数据块中声明所需的变量名及类型,用以存储数据;背景数据块是FB的“私有存储器区”,FB的参数和静态变量安排在它对应的背景数据块中。背景数据块无须用户生成,是由编辑器自动生成的。

1.定义数据块

在项目视图左侧项目树中的PLC设备项下双击“程序块”下的“添加新块”,打开“添加新块”对话框,如图8.17所示。点击左侧的“数据块(DB)”选择添加数据块,类型选择“全局DB”,编号可以手动设定或以自动方式进行分配。

图8.17 “添加新块”对话框

单击“确定”按钮,则可以打开图8.18所示数据块编辑器,各变量默认情况下是可以在组态中可见的,并可以从“HMI/OPC UA”中读或写,如PLC外部没有接HMI设备,也没有通过OPC进行数据通信,则可以不勾选这些功能,否则一定要勾选。此外,在数据块的“属性”栏中有一个可选的“优化的块访问”单选框,默认情况下是选中的,此时不能进行绝对地址的寻址,不勾选此框,则可以进行绝对地址的寻址。

图8.18 数据块编辑器

数据块也需要下载到CPU中,单击工具栏中的下载按钮进行下载,也可以通过选中项目树中的PLC设备统一下载。

单击数据块工具栏中的“全部监视”按钮,可以在线监视数据块中变量的当前值(CPU中的变量的值)。使用全局数据块中的区域进行数据的存取时,一定要先在数据块中正确地给变量命名,特别要注意变量的数据类型应匹配。

2.使用全局数据块举例

下面通过一个计算平方根的例子介绍全局数据块的使用。

【例8-9】计算,其中a为整数,存储在MW0中,b为整数,存储在MW2,c为实数,存储在MD4中。

建立全局数据块“数据块1”,选择自动编号,仅符号访问,定义存储中间计算结果的变量,如图8.19所示。编写的程序如图8.20所示。

需要说明的是,如果在数据块中定义的数据类型和程序中使用指令要求的数据类型不一致,例如将图8.19所示的“a2”的数据类型定义为“REAL”,则使用符号寻址编程时,如输入“‘数据块1’.a2”,系统将报错并提示数据类型不匹配,建议初学者使用符号寻址。本例中符号地址“‘数据块1’.a2”旁边显示的“%DB1.DBW0”是该符号地址的绝对地址。

图8.19 定义数据块中的变量

图8.20 例8-9程序

3.访问数据块

数据块用来存储程序设计过程中所用到的数据信息,用户在程序中需要对数据块中的数据进行读写访问,访问数据块内容的方法有两种:符号寻址和绝对地址寻址。符号寻址如前所述,具有简便直观的特点,此处重点讲述数据块的绝对地址寻址方式。

S7-1200 PLC数据块的数目和最大块长度依赖于CPU的型号。S7-300数据块的是8kB(字节),S7-400的最大块长度是64kB。首先介绍数据块的数据单元结构,这是绝对地址寻址的基础。

由图8.21所示的数据块数据单元结构图可知,数据块就是一个数据容器,字节为其基本寻址单位,每个字节存放8个二进制位,数据块中的寻址对象包括位、字节、字和双字。具体模式为:数据块号.寻址对象。假设数据块为DB1,则字节0、字节6分别表示为DB1.DBB0、DB1.DBB6;字节0的最高位和字节4的最低位分别表示为DB1.DBX0.7、DB1.DBB4.0;DB1.DBW0表示由DBB0和DBB1共同构成的字DBW0,DBD0表示的是由DBB0~3四个字节构成的一个双字。

总之,数据块的寻址格式类似于DB10.DBB0、DB10.DBW2、DB1.DBD4、DB10.DBX6.3,其中DB10为数据块编号,点后面的DB表示寻址数据块,最后的数字0、2、4、6表示寻址的起始字节地址,B、W、D、X分别表示寻址宽度为一个字节(Byte)、一个字(Word)、一个双字(Double Word)和一个位(Bit)。字节、字、双字和位的寻址示意如图8.21所示。

图8.21 数据块数据单元结构图

由此可知,DB1.DBW200是由DBB200和DBB201构成的,在S7-1200系列PLC中,DBB200为高位,DBB201为低位,也就是说,如果MB200=16#78,MB201=16#12,则MW200=16#7812。MW200和MD200的高低位组成如图8.22所示。(www.daowen.com)

图8.22 数据块中字及双字的构成

4.复杂数据类型的使用

复杂数据类型是由其他数据类型组成的数据组,不能将任何常量用作复杂数据类型的实参,也不能将任何绝对地址作为实参传送给复杂数据类型。下面通过几个例子说明复杂数据类型的定义和使用。

(1)数组(Array)。

Array数据类型表示的是由固定数目的同一数据类型的元素组成的一个集合。一维数组声明的形式为域名:Array[最小索引..最大索引]of数据类型。如一维数组:Sample Value:Array[1..10]of Real,数组声明中的索引数据类型为INT,其范围为-32768~32767,这也就反映了数组的最大数目。

如图8.23所示,新建一个全局数据块“blk10”,数据块编号为DB6,新建变量SampleValue和TestValue,数据类型选择Array,值类型为Real,数组上、下限分别修改为1..10和-5..5,所以SampleValue的元素个数为10,访问格式为SampleValue[1]~SampleValue[10],TestValue的元素个数为11,访问格式为TestValue[-5]~TestValue[5],当允许DB6进行绝对地址寻址时,可以在程序中采用符号化和绝对地址两种方式进行访问,如符号化格式“blk10”.SampleValue[1]与绝对地址%DB6.DBD0是相互对应的,“blk10”.TestValue[-4]与绝对地址%DB6.DBD44是相互对应的。

数组元素的赋值可以在程序中利用MOVE指令完成,但对于具有初值的数组元素,还可以在定义时赋值,此时要注意实际数据的类型必须与数组元素定义的类型一致,否则系统会提出警告。图8.23中对部分初值进行了赋值,如SampleValue[1]被赋予了初始值2343.6。

图8.23 新建Array类型变量

(2)结构(Struct)。

Struct作为一种复杂的数据类型,表示的是一组由若干相同类型或不同类型的数据构成的集合。S7-1200中结构型变量不支持嵌套

新建一个全局数据块“blk11”,数据块编号为DB7,新建变量Record,数据类型选择Struct,在下一行新建变量Number,类型为Int,继续新建Bool型变量Gender和Real型变量Score,如图8.24所示。

结构元素也可以在定义时进行初始化赋值,初始化值的数据类型必须与结构元素的数据类型相一致,否则系统会发出警告,当然也可在程序中通过MOVE指令进行赋值。同样的,结构变量也有符号寻址和绝对寻址两种方式,如对于Record结构的Score变量的寻址可以是“blk11”.Record.Score,也可以采用%DB7.DBD4的形式。

图8.24 新建Struct类型变量

图8.24中,还给出了基于结构的数组的构造方法,此数组中的每个元素都是一个结构变量,且都有相同的成员变量,其寻址方式也可基于符号和绝对两种方式。如“blk11”.Records[1].size对应%DB7.DBW14,“blk11”.Records[4].temp对应%DB7.DBD34。

(3)字符串(String)。

String数据类型的变量是用来存储字符串的,每个字符串变量的最大长度可由方括号中的关键字指定,如String[4]表示串中的字符数最多为4,如果省略了最大长度信息,则相应的变量长度默认为254。由于每个字符串的前两个字节分别为总字符数和当前字符数,所以String数据类型的变量比指定最大长度多占用2个字节,默认情况下一个字符串变量占用256个字节,但最多可以存储254个字符。

新建一个全局数据块“blk12”,数据块编号为DB8,如图8.25所示,不选中数据块的“优化的块访问”单选框,这样就可以允许绝对地址访问,可以查看各变量的地址偏移量。在DB8中新建五个不同长度的字符串变量,同时可以在定义时赋初值,当初值长度超出允许时,系统将给出报警信息。

图8.25 新建String类型变量

下面主要分析字符串变量的地址偏移及访问方式。对于图8.25中的变量Msg1,没有指明最大数目,则程序编辑器认为该变量的长度为254个字符,其初始值设为“How are you”。而Msg2的起始地址为256,其前面2个字节被占用,所以第1个字符存储在第258个字节中,绝对地址为%DB8.DBB258,对应的符号地址为“blk12”.Msg2[1],即寻址数据块blk12中的字符串型变量Msg2的第1个字符,同样的道理,%DB8.DBB8对应“blk12”.Msg1[6],均指向Msg1中的字符“r”。

(4)长格式日期和时间(DTL)。

DTL数据类型表示了一个日期时间值,共12个字节。

在全局数据块“blk12”中新建DTL型变量DTime,如图8.26所示,系统会自动地赋予最小值DTL#1970-01-01-00:00:00,DTL型数据长度为12个字节,包括年、月、日、星期及时间,每个元素所占存储空间的字节数图8.26(a)所示,其数据格式为:DTL#年-月-日-小时-分钟-秒。

图8.26 新建DTL类型变量

对于DTL数据类型的变量,可以通过符号寻址来访问其中的元素,例如符号寻址其中元素的格式为“blk12”.DTime.YEAR,其中blk12为数据块名称,DTime为DTL类型变量,其起始偏移量为298,YEAR为DTL变量的元素,该元素的数据类型为uSInt,因而也可以用绝对寻址%DB8.DBW298来寻址。

免责声明:以上内容源自网络,版权归原作者所有,如有侵犯您的原创版权请告知,我们将尽快删除相关内容。

我要反馈