测·控领域专业互动媒体平台
推动测试测量,检测诊断,传感物联,遥测自控智能化发展
当前位置:CK365测控网 > 论文 > 应用技术 >

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

2016-07-18 11:39:35

[导读] FIFO功能即FirstInputFirstOutput先进先出,在很多情况下要用到此功能。以前此技术主要在计算机高级语言开发和数据结构设计中应用,但随着PLC技术的日益突飞猛进,需要通过PLC进行数据传送、缓存存储的事件越来越多,尤其是在数据缓存过程中,对FIFO功能使用场合越来越多。

一、前言

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输入WordI、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

系列PLCFIFO功能模块,但是其只能每次写入或读出一个字节的数据,而实际上在很多情况下,每次均是一组数据需要运用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,结构为

AddressNameTypeINItial valueComment

0.0STRUCT

+0.0IN_BufferSTRUCT

+0.0Status_WordINT0

+2.0Data1INT0

+4.0Data2INT0

+6.0Data3INT0

+8.0Data4INT0

+10.0Data5INT0

+12.0Data6INT0

+14.0Data7INT0

+16.0Data8INT0

+18.0Data9INT0

=20.0END_STRUCT0

+0.0Status_WordINT

+2.0Data1INT

+4.0Data2INT

+6.0Data3INT

+8.0Data4INT

+10.0Data5INT

+12.0Data6INT

+14.0Data7INT

+16.0Data8INT

+18.0Data9INT

=20.0END_STRUCT

+40DataArray[0..20]

*0.0STRUCT

+0.0Status_WordINT0

+2.0Data1INT0

+4.0Data2INT0

+6.0Data3INT0

+8.0Data4INT0

+10.0Data5INT0

+12.0Data6INT0

+14.0Data7INT0

+16.0Data8INT0

+18.0Data9INT0

=20.0END_STRUCT0

=440END_STRUCT

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

四、总结

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

[整理编辑:CK365测控网]
标签:  PLC[9]    FIFO[54]    功能数据[3]
 
[ 论文搜索 ]  [ ]  [ 好友分享 ]  [ 打印本文 ]  [ 关闭窗口 ]  [ 返回顶部 ]

版权与免责声明:

①凡本网注明"来源:CK365测控网"的所有作品,版权均属于CK365测控网,转载请必须注明CK365测控网 www.ck365.cn。违反者本网将追究相关法律责任。
②本网转载并注明自其它来源的作品,目的在于传递更多信息,并不代表本网赞同其观点或证实其内容的真实性,不承担此类作品侵权行为的直接责任及连带责任。如其他媒体、网站或个人从本网下载使用,必须保留本网注明的"稿件来源",并自负版权等法律责任。
③如涉及作品内容、版权等问题,请在作品发表之日起一周内与本网联系,否则视为放弃相关权利。

注册成为CK365测控网会员

可以无需任何费用浏览专业技术文章

 
 
注册CK365测控网会员以便浏览全文