西门子S7-300入门级教程02-数据类型篇04

<a href=https://www.xmzyj.com/ximenzi>西门子</a>S7-300入门级教程02-数据类型篇04″ inline=”0″></p>
<p class=S7-300

实验四 复杂数据类型_3

1) 目的

掌握复杂数据类型:DATE_AND_TIME / STRING / STRUCT / ARRAY / UDT / FB / SFB。

2) 实验内容

①创建一个DB14,添加一个STRUCT类型的变量。

②#Var2为字符串’1357′ ,当#Var1为”True”时,调用标准库\IEC功能块中的FC37将其转化为DI型数据,保存在#Var3中。

③将#Var3转化为BCD码,保存在#Var4中。

④使用标准库\TI-S7转换块中的FC99,计算#Var4中为”1″的位的个数,并保存在#Var5中。

⑤根据以上STRUCT设计一个UDT数据类型UDT1,在DB12定义一个类型为UDT1的变量#Para。调用标准库\系统功能块中的SFC20将DB14的值复制到DB12中。

⑥创建一个FB1,它具有若干输入、输出参数。在FB2中调用FB1,将FB1的多个背景数据块存储在FB2的背景数据块中。

⑦在FB1中调用标准库\系统功能块中的SFB4,将其背景数据块存储在FB2的背景数据块中。利用标准库\系统功能块中的SFC46,当激活该定时器5s后CPU停机。

3) 实验流程

1 创建DB14

创建一个类型为STRUCT的变量,如下图所示。

西门子S7-300入门级教程02-数据类型篇04

图1-创建STRUCT变量

2 当#Var1为”True”时

在OB1中调用标准库\IEC功能块中的FC37将其转化为DINT型数据,保存在#Var3中,编程如下图所示。

西门子S7-300入门级教程02-数据类型篇04

图2-调用FC37

在变量表VAT_1来监视变量,将STRING拆分为4个字节来监控,可查看程序执行结果如下图所示。

西门子S7-300入门级教程02-数据类型篇04

图3-将STRING拆分为四个字节

3 将#Var3转化为BCD码

在OB1中使用DTB指令将#Var3转化为BCD码,保存在#Var4中,编程如下图所示。

西门子S7-300入门级教程02-数据类型篇04

图4-将#Var3转化为BCD码

在变量表VAT_1来监视变量,可查看程序执行结果如下图所示。

西门子S7-300入门级教程02-数据类型篇04

图5-执行结果

4 FC99

在OB1中调用标准库\TI-S7转换块中的FC99,计算#Var4中为”1″的位的个数,并保存在#Var5中,编程如下图所示。

西门子S7-300入门级教程02-数据类型篇04

图6-调用FC99

在变量表VAT_1来监视变量,将Var4的显示格式改为BIN,可查看程序执行结果如下图所示。

西门子S7-300入门级教程02-数据类型篇04

图7-执行

5 设计一个UDT数据类型UDT1

根据上述的STRUCT设计一个UDT数据类型UDT1,在DB12定义一个类型为UDT1的变量#Para,如下图所示

西门子S7-300入门级教程02-数据类型篇04

图8-UDT1展开

西门子S7-300入门级教程02-数据类型篇04

图9-UDT1收缩

在DB12中的数据视图中查看UDT1。

西门子S7-300入门级教程02-数据类型篇04

图10-查看UDT1

在OB1中调用标准库\系统功能块中的SFC20,将源DB14数据复制到目标DB12中,编程如下图所示。

西门子S7-300入门级教程02-数据类型篇04

图11-调用SFC20

监视DB14和DB12的变量,可查看程序执行结果如下图所示。(可以通过数据表观察,也能进入数据块中观察,注意在线)

西门子S7-300入门级教程02-数据类型篇04

图12-执行结果

6 创建一个FB1

在FB1中创建3个输入和3个输出参数,如下图所示。

西门子S7-300入门级教程02-数据类型篇04

图13-创建一个FB1

创建一个FB2和DB20,将DB20设置为FB2的背景DB。类似的创建FB1,但需注意的是不需要为FB1单独创建背景DB。(也可通过在OB1调用FB20时选择生成DB20,则DB20自动变成FB2的专属数据块)

在FB2的STAT中创建FB1类型的变量,如下图所示。

西门子S7-300入门级教程02-数据类型篇04

图14-创建FB1类型变量

在FB2中声明1个FB1的”局部实例”后,在编程元素的目录下的多重实例下找到上述新建的STAT1的”局部实例”,在FB2中可多次调用该”局部实例”,为其管脚赋不同的参数,这样就将FB1的多个背景数据块存储在FB2的背景数据块中,如下图所示。

西门子S7-300入门级教程02-数据类型篇04

图15-申明局部变量

则FB2本身数据存储于DB20上半部分,调用的FB1的数据存储于下半部分,如图所示:

西门子S7-300入门级教程02-数据类型篇04

图16-结果

这样就节约了DB资源,充分利用了DB,因为一个DB能存储64K,这就可以一个DB多用,减少一些存储少量数据的DB块。

7 调用SFB4

在FB1中调用标准库\系统功能块中的SFB4,即接通延时指令,注意的是不需要为SFB4单独创建背景数据块,在FB1的STAT中声明1个SFB4的”局部实例”,如下图所示。

西门子S7-300入门级教程02-数据类型篇04

图17-申明局部变量

在FB1中声明1个SFB4的”局部实例”后,在编程元素的目录下的多重实例下找到上述新建的stat2的”局部实例”,在FB1中可多次调用该”局部实例”,为其管脚赋不同的参数(如同FB2调用FB1),这样就将SFB4的多个背景数据块存储在FB2的背景数据块中,如下图所示。

西门子S7-300入门级教程02-数据类型篇04

图18-展示

在OB1中调用标准库\系统功能块中的SFC46,当激活该定时器15s后CPU停机,编程如下图所示。

西门子S7-300入门级教程02-数据类型篇04

图19-调用SFC46

15S定时时长到后,CPU由RUN变为STOP状态,程序执行结果如下图所示。

西门子S7-300入门级教程02-数据类型篇04

图20-执行结果

4)总结

1. 多重背景DB实验中,首先要在FB2中STAT中声明数据类型为FB1的局部实例,然后在多重实例处调用该局部实例,即实现了FB1的多个背景数据块存储在FB2的背景数据块中。同时则FB2本身数据存储于自己DB块的上半部分,调用的FB1的背景数据块的数据存储于下半部分。DB能存储64K数据。

2. 修改DB块后要保存,然后同时得对OB1等进行保存后,才能引用DB块中的数据。修改FB后,在OB1中记得更新FB再保存再运行。

3. Move指令只能转移四个字节及其以下的数据,对于超过4字节的复杂数据就可以用SFC20来转移,它能转移一个区域。

4. 对每个DB块命名一个Symbolic name 是非常有用的,当我们在FB/FC/OB1中编写程序是需要调用DB块中的数据时,会非常的边界,可以输入DB 的Symbolic name就能够弹出其下属的所有数据,然后就可以选择,就不用去输入其很长的具体地址,并且也不易出错,报红概率低。但是需要注意在命名是最好有体系有规律的命名,这样才好管理数据,否则易混。

西门子S7-300入门级教程02-数据类型篇04

图21-Symbolic name

敬请期待下一篇参数类型篇01

PS:友情提醒,所有文章都是一个系列,是连贯的,顺着看效果更好~

作者简介

谭俊豪:重庆大学机械工程学院学士,西门子中国公司培训生

本文为原创文章,于头条首发,欢迎转载,请注明出处和作者!

发表评论

电子邮件地址不会被公开。 必填项已用*标注

此站点使用Akismet来减少垃圾评论。了解我们如何处理您的评论数据