分享好友 环保知识首页 环保知识分类 切换频道

基于Siemens S7-300/400 PLC的FIFO功能实现

2021-11-01 20:408210工控之家工控之家网

  一、前言

  FIFO功能即FirstInputFirstOutput先进先出,在很多情况下要用到此功能。以前此技术主要在计算机高级语言开发和数据结构设计中应用,但随着PLC技术的日益突飞猛进,需要通过PLC进行数据传送、缓存存储的事件越来越多,尤其是在数据缓存过程中,对FIFO功能使用场合越来越多。西门子S7-300/400PLC是德国西门子公司的中型、大型PLC,也是当今世界上工控行业的主流产品。在SiemensS7系列PLC开发软件SimaticSTEP7工具中,Siemens公司提供了两个专用功能FC84ATT和FC85FIFO,通过这两个FC功能完成对FIFO功能数据的写入和导出,但是每次只能允许一字,也就两字节长的数据。为了实现每次多字节的FIFO功能,需要用户自己开发相应的功能块FB来实现,在本文中就介绍了实现每次20字节FIFO功能FB200功能块的代码,以及实际应用举例。

  二、SiemensFC84ATT和FC85FIFO功能的介绍

  1、FC84ATT

  1.1、FC84ATT功能和构成介绍

  FC84ATT是实现增加数据到FIFO功能的数据存储区中,通过每次执行此指令实现把一字的数据增加到FIFO功能数据存储区中,FIFO功能存储区中以字为单位,具体组成如下:

  l存储区表中第一字为FIFO存储区允许的最大数据存储个数,即最多可以存储多少个字的数据。

  l存储区表中第二字为FIFO存储区当前已经存储数据的个数,即已经存储了多少个字的数据。

  l存储区表中从第三字开始为FIFO存储区实际存储的数据。

  1.2、FC84ATT功能参数说明

  通过SimaticSTEP7进行程序开发时,调用FC84ATT功能,出现如下图:

  从图2-1中可以看到,FC84ATT共有四个参数,分别为EN、DATA、TABLE和ENO,在四门子资料中对其描述如下表2-1:

参数

声明

数据类型

内存区域

功能描述

EN

输入

布尔

I、Q、M、D、L

使能激活信号

ENO

输出

布尔

I、Q、M、D、L

使能输出

DATA

输入

Word

I、Q、M、D、L、P静态存储区域

要增加到FIFO的数据

TABLE

输入

指针

I、Q、M、D、

FIFO区域指针

  1.3、举例说明

  如果信号M100.0的状态为1(即被激活),FC84ATT功能被执行。在下面的例子中,增加的数据写到FIFO表中的第五行,FIFO的容量也就是FIFO表中第二行由4变为5。如果FC84ATT被执行而且没有错误发生,那么使能输出ENO置为1,具体如下:

  2、FC85FIFO

  2.1、FC85FIFO功能和构成介绍

  FC85FIFO是完成把FIFO表中的数据按照先进先出原则,依次读出,以供使用,与FC84ATT配合使用,完成FIFO的写进与读出功能。通过每次执行此指令实现把一个字的数据从FIFO功能数据存储区中读出,FIFO功能存储区中以字为单位,具体组成如下:

  l存储区表中第一字为FIFO存储区允许的最大数据存储个数,即最多可以存储多少个字的数据。

  l存储区表中第二字为FIFO存储区当前已经存储数据的个数,即已经存储了多少个字的数据。

  l存储区表中从第三字开始为FIFO存储区实际存储的数据,也是FIFO指针所指向的数据。

  2.2、FC85FIFO功能参数说明

  通过SimaticSTEP7进行程序开发时,调用FC85FIFO功能,出现如下图:

  图2-2

  从图2-1中可以看到,FC85FIFO共有四个参数,分别为EN、ENO、TABLE和RET_VAL,在西门子资料中对其描述如下表2-2:

参数

声明

数据类型

内存区域

功能描述

EN

输入

布尔

I、Q、M、D、L

使能激活信号

ENO

输出

布尔

I、Q、M、D、L

使能输出

TABLE

输入

指针

I、Q、M、D、

FIFO区域指针

RET_VAL

输出

I、Q、M、D、L、P

读出的数据

  2.3、举例说明

  如果信号M100.0的状态为1(即被激活),FC85FIFO功能被执行。在下面的例子中,从FIFO存储区域中读出的数据写到RET_VAL指定的地址中,FIFO的容量也就是FIFO表中第二行由5变为4。同时整个FIFO中存储的数据依次向上移动一行。如果FC85FIFO被执行而且没有错误发生,那么使能输出ENO被置为1。

  三、多字节FIFO功能的实现

  1、从前面FC84ATT和FC85FIFO的说明中可以看出,虽然Siemens提供了针对S7

  系列PLC的FIFO功能模块,但是其只能每次写入或读出一个字节的数据,而实际上在很多情况下,每次均是一组数据需要运用FIFO功能来暂时存储起来,那么在这种情形下就不能采用Siemens提供的标准功能FC84和FC85了,需要自己开发一可以实现多字节读出写入功能的FIFO指令。

  2、SiemensSimaticSTEP7介绍

  SiemensSimaticS7300/400系列PLC是Siemens公司主推的中、大型产品,也是当今世界上的主流产品。针对这两个系列PLC开发软件工件为SimaticSTEP7,此软件有多个版本,目前已经发展到V5.4,采用次软件可以实现开发、监控等功能。

  3、多字节FIFO的实现

  打开SimaticSTEP7软件,新建一FB块,如FB200DB200,然后进入FB100

  进行编程,本文中以20字节为例,介绍如何开发实现FIFO功能具体见如下画面:

  图3-1

  源代码如下:

  FUNCTION_BLOCKFB100

  TITLE=

  //此功能块用了完成20字节的FIFO功能

  AUTHOR:Hylotus

  VERSION:0.1

  KNOW_HOW_PROTECT

  VAR_INPUT

  SOURCE_DB:BLOCK_DB;

  INPUT:BOOL;

  OUTPUT:BOOL;

  SIZE:INT;

  END_VAR

  VAR_OUTPUT

  DONE_IN:BOOL;

  DONE_OUT:BOOL;

  ERROR:BOOL;

  FULL:BOOL;

  EMPTY:BOOL;

  END_VAR

  VAR_IN_OUT

  LOCATION:INT;

  END_VAR

  VAR

  IN_START:BOOL;

  IN_ACTIVE:BOOL;

  OUT_START:BOOL;

  OUT_ACTIVE:BOOL;

  COUNT:INT;

  RET_VAL1:INT;

  END_VAR

  BEGIN

  NETWORK

  TITLE=

  A#INPUT;

  AN#IN_ACTIVE;

  =#IN_START;

  A#INPUT;

  =#IN_ACTIVE;

  A#OUTPUT;

  AN#OUT_ACTIVE;

  =#OUT_START;

  A#OUTPUT;

  =#OUT_ACTIVE;

  AN#INPUT;

  AN#OUTPUT;

  JCEND1;

  NETWORK

  TITLE=OUTPUTFIFO

  //20字节的数据从FIFO存储区域中读出

  AN#OUTPUT;

  O#DONE_OUT;

  JCIN_1;

  AN#OUT_START;

  JCOP_1;

  OPN#SOURCE_DB;

  LDW#16#0;

  TDBD40;

  TDBD44;

  TDBD48;

  TDBD52;

  TDBD56;

  TDBD60;

  TDBD64;

  TDBD68;

  TDBD72;

  TDBD76;

  L#LOCATION;

  L0;

  <=I;

  S#EMPTY;

  JCEROR;

  OPN#SOURCE_DB;

  CALL"BLKMOV"(

  SRCBLK:=P#DBX80.0BYTE40,

  RET_VAL:=#RET_VAL1,

  DSTBLK:=P#DBX40.0BYTE40);

  L#RET_VAL1;

  L0;

  <>I;

  JCEROR;

  L0;

  T#COUNT;

  OP_1:L#LOCATION;

  L0;

  <=I;

  JCEROR;

  L#LOCATION;

  L#COUNT;

  <=I;

  JCOP_3;

  L#COUNT;

  L2;

  +I;

  ITD;

  LP#40.0;

  *D;

  LAR1;

  OPN#SOURCE_DB;

  LDBD[AR1,P#40.0];

  TDBD[AR1,P#0.0];

  LDBD[AR1,P#44.0];

  TDBD[AR1,P#4.0];

  LDBD[AR1,P#48.0];

  TDBD[AR1,P#8.0];

  LDBD[AR1,P#52.0];

  TDBD[AR1,P#12.0];

  LDBD[AR1,P#56.0];

  TDBD[AR1,P#16.0];

  LDBD[AR1,P#60.0];

  TDBD[AR1,P#20.0];

  LDBD[AR1,P#64.0];

  TDBD[AR1,P#24.0];

  LDBD[AR1,P#68.0];

  TDBD[AR1,P#28.0];

  LDBD[AR1,P#72.0];

  TDBD[AR1,P#32.0];

  LDBD[AR1,P#76.0];

  TDBD[AR1,P#36.0];

  L#COUNT;

  L1;

  +I;

  T#COUNT;

  L#SIZE;

  L-1;

  +I;

  L#COUNT;

  <=I;

  JCOP_2;

  JUEND2;

  OP_2:LW#16#0;

  TDBD[AR1,P#40.0];

  TDBD[AR1,P#44.0];

  TDBD[AR1,P#48.0];

  TDBD[AR1,P#52.0];

  TDBD[AR1,P#56.0];

  TDBD[AR1,P#60.0];

  TDBD[AR1,P#64.0];

  TDBD[AR1,P#68.0];

  TDBD[AR1,P#72.0];

  TDBD[AR1,P#76.0];

  OP_3:SET;

  S#DONE_OUT;

  L#LOCATION;

  L-1;

  +I;

  T#LOCATION;

  JUEND2;

  NETWORK

  TITLE=INPUTFIFO

  //20字节的数据写入FIFO存储区表中

  IN_1:AN#IN_START;

  JCEND2;

  L#LOCATION;

  L#SIZE;

  >=I;

  S#FULL;

  JCEROR;

  L#LOCATION;

  L2;

  +I;

  ITD;

  LP#40.0;

  *D;

  LAR1;

  OPN#SOURCE_DB;

  LDBD0;

  TDBD[AR1,P#0.0];

  LDBD4;

  TDBD[AR1,P#4.0];

  LDBD8;

  TDBD[AR1,P#8.0];

  LDBD12;

  TDBD[AR1,P#12.0];

  LDBD16;

  TDBD[AR1,P#16.0];

  LDBD20;

  TDBD[AR1,P#20.0];

  LDBD24;

  TDBD[AR1,P#24.0];

  LDBD28;

  TDBD[AR1,P#28.0];

  LDBD32;

  TDBD[AR1,P#32.0];

  LDBD36;

  TDBD[AR1,P#36.0];

  L#LOCATION;

  L1;

  +I;

  T#LOCATION;

  SET;

  S#DONE_IN;

  JUEND2;

  NETWORK

  TITLE=

  EROR:SET;

  =#ERROR;

  JUEND2;

  END1:CLR;

  =#DONE_IN;

  =#DONE_OUT;

  =#ERROR;

  =#EMPTY;

  =#FULL;

  END2:NOP0;

  END_FUNCTION_BLOCK

  4、在程序中的调用

  上面已经完成了FB100FIFO功能块的编程开发,下面就是直接调用,设置

  相关参数就可以使用此功能了,举例如下:

  新建FIFO数据源数据库DB200,结构为

Address

Name

Type

Initial value

Comment

0.0

 

STRUCT

 

 

+0.0

IN_Buffer

STRUCT

 

 

+0.0

Status_Word

INT

0

 

+2.0

Data1

INT

0

 

+4.0

Data2

INT

0

 

+6.0

Data3

INT

0

 

+8.0

Data4

INT

0

 

+10.0

Data5

INT

0

 

+12.0

Data6

INT

0

 

+14.0

Data7

INT

0

 

+16.0

Data8

INT

0

 

+18.0

Data9

INT

0

 

=20.0

 

END_STRUCT

0

 

+0.0

Status_Word

INT

 

 

+2.0

Data1

INT

 

 

+4.0

Data2

INT

 

 

+6.0

Data3

INT

 

 

+8.0

Data4

INT

 

 

+10.0

Data5

INT

 

 

+12.0

Data6

INT

 

 

+14.0

Data7

INT

 

 

+16.0

Data8

INT

 

 

+18.0

Data9

INT

 

 

=20.0

 

END_STRUCT

 

 

+40

Data

Array[0..20]

 

 

*0.0

 

STRUCT

 

 

+0.0

Status_Word

INT

0

 

+2.0

Data1

INT

0

 

+4.0

Data2

INT

0

 

+6.0

Data3

INT

0

 

+8.0

Data4

INT

0

 

+10.0

Data5

INT

0

 

+12.0

Data6

INT

0

 

+14.0

Data7

INT

0

 

+16.0

Data8

INT

0

 

+18.0

Data9

INT

0

 

=20.0

 

END_STRUCT

0

 

=440

 

END_STRUCT

 

 

  5、以上FIFO程序调用功能块和程序,均是可以通过Siemens公司提供的模拟运行软件SiamticSimulation进行模拟PLC确认,可以正常运行没有问题。

  四、总结

  通过自己开发弥补西门子厂家提供的专用功能模块的不足,能更大限度的发挥西门子公司产品的软件开发优势。

 

 

 

点赞 0
举报
收藏 0
打赏 0
评论 0
分享 1
更多相关评论
暂时没有评论,来说点什么吧
预测机器视觉市场的发展
机器视觉的一个重要作用在于对工业自动化水平提升的推动,这正是目前国内机器视觉市场的发展动力。而用户的需求无疑是机器视觉得以普及发展的诸多因素中最具决定性的。随着中国制造业的进一步发展,对机器视觉的需求也有了进一步的提高,这不仅仅表现在市场的

0评论2021-12-18697

静止无功发生器SVG技术说明
在有色金属冶炼加工企业中,供电的质量指标、电网运行的安全可靠性和经济性是最根本的问题。近年来,随着有色冶炼加工企业的发展,有色金属冶炼加工设备尤其是轧制设备趋向设备大型化、大容量、数字化、智能化,由电力电子器件构成的各种交交变频、交-直-交

0评论2021-12-18718

真空成型机中的温度控制系统设计
真空成型机是利用热成型工艺制造冰箱内胆的大型塑料加工机械,是冰箱制造企业的主力设备之一。由于长期以来,我国塑料加工机械的设计水平有限,不能在高端成型机领域满足国内市场的需要,这部分空缺主要由国外的品牌来填充。在过去的十几年间,我国从国外引进

0评论2021-11-07695

台达PLC的发酵罐PH值控制和管理系统
1 系统简介1.1 原加碱工艺说明发酵是生产黄原胶的其中一个重要的工艺过程,发酵过程的好坏直接影响到产品的质量和产量,在发酵的过程中,发酵物产生大量酸,影响细菌的生长和正常发酵,需要在发酵过程中加入碱液对产生的酸中和。目前,发酵过程加入碱液

0评论2021-11-07675

储能技术:优化新能源发电 增强新能源发电的稳定性
储能可以依据风、光的瞬时变化,减弱甚至消除新能源发电的波动,增强新能源发电的稳定性。变成稳定的电源《经济学人》2013年2月2日一篇报道显示,在德国,即便是现有的风电水平,在大风的日子,电网操作员也必须关闭机轮,因为没地方来储存这些能量。当

0评论2021-11-07711

DCS控制系统与PLC控制系统的主要区别
PLC控制和DCS控制系统不是一个逻辑层次上的概念,从名称上就能看出:PLC是以功能命名,DCS是以体系结构命名。从原理上看PLC就可以组成DCS。当然两者性能差异还是存在的,要具体看产品和需要。从应用角度来说,简单地以PLC,DCS来区分

0评论2021-11-07620

3D打印迷你肝脏可观察药物疗效
OFweek工控网讯:在实验室培育可移植肝脏过程中,美国科学家取得一项重大突破。他们利用装有细胞的3D打印机打印出迷你肝脏,深0.5毫米,宽4毫米,拥有很多与真实肝脏一样的功能,包括产生负责将激素、盐和药物运送到身体各处的蛋白质。打印3D迷

0评论2021-11-07666

伺服系统的主要作用和分类
如今,随着技术的不断成熟,交流伺服电机技术凭借其优异的性价比,逐渐取代直流电机成为伺服系统的主导执行电机。交流伺服系统技术的成熟也使得市场呈现出快速的多元化发展,并成为工业自动化的支撑性技术之一。主要作用1、以小功率指令信号去控制大功率负载

0评论2021-11-07665