基于SiemensS7FIFO功能的得实现.docx
- 文档编号:4398700
- 上传时间:2022-12-01
- 格式:DOCX
- 页数:14
- 大小:139.73KB
基于SiemensS7FIFO功能的得实现.docx
《基于SiemensS7FIFO功能的得实现.docx》由会员分享,可在线阅读,更多相关《基于SiemensS7FIFO功能的得实现.docx(14页珍藏版)》请在冰豆网上搜索。
基于SiemensS7FIFO功能的得实现
基于Siemens-S7-FIFO功能的得实现
基于SiemensS7-300/400PLC的FIFO功能实现
摘要:
本文详细介绍了基于西门子S7-300/400PLC中的FIFO功能,并利用西门子S7系列PLC编程软件SimaticSTEP7开发实现多字节的FIFO功能。
Abstract:
ThispaperintroducesFIFOfunctionbasedSiemensS7-300/400PLC,andachievesseveralbyteFIFOfunctionbymakinguseofSiemensPLCProgrammingsoftwareSimaticSTEP7development.
关键词西门子S7-300/400PLC;FIFO;SimaticSTEP7
Keywords:
SiemensS7-300/400PLC;FIFO;SimaticSTEP7
主要内容:
1、前言,提出为什么要介绍SiemensPLC中的FIFO功能
2、首先介绍Siemens公司提供的专用功能块,FC84与FC85,并分别举例
3、说明在设备间数据通讯,多余1个字节的数据需要同时进行FIFOBuffer,然后在下一工序中弹出来。
介绍多字节FIFO功能的实现
4、SiemensPLC编程开发软件SimaticSTEP7的介绍,编程开发同时20字节FIFO的程序,相关数据块结构的说明,在程序中的调用FIFO功能块。
此外可以通过SimaticSimulation进行模拟确认。
5、总结。
一、前言
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功能存储区中以字为单位,具体组成如下:
●存储区表中第一字为FIFO存储区允许的最大数据存储个数,即最多可以存储多少个字的数据。
●存储区表中第二字为FIFO存储区当前已经存储数据的个数,即已经存储了多少个字的数据。
●存储区表中从第三字开始为FIFO存储区实际存储的数据。
1.2、FC84ATT功能参数说明
从图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-2
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
Initialvalue
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确认,可以正常运行没有问题。
四、总结
通过自己开发弥补西门子厂家提供的专用功能模块的不足,能更大限度的发挥西门子公司产品的软件开发优势。
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 基于 SiemensS7FIFO 功能 实现