技術(shù)頻道

      基于Siemens S7-300/400 PLC的FIFO功能實(shí)現(xiàn)

        一、前言

        FIFO功能即FirstInputFirstOutput先進(jìn)先出,在很多情況下要用到此功能。以前此技術(shù)主要在計(jì)算機(jī)高級(jí)語言開發(fā)和數(shù)據(jù)結(jié)構(gòu)設(shè)計(jì)中應(yīng)用,但隨著PLC技術(shù)的日益突飛猛進(jìn),需要通過PLC進(jìn)行數(shù)據(jù)傳送、緩存存儲(chǔ)的事件越來越多,尤其是在數(shù)據(jù)緩存過程中,對(duì)FIFO功能使用場合越來越多。西門子S7-300/400PLC是德國西門子公司的中型、大型PLC,也是當(dāng)今世界上工控行業(yè)的主流產(chǎn)品。在SiemensS7系列PLC開發(fā)軟件SimaticSTEP7工具中,Siemens公司提供了兩個(gè)專用功能FC84ATT和FC85FIFO,通過這兩個(gè)FC功能完成對(duì)FIFO功能數(shù)據(jù)的寫入和導(dǎo)出,但是每次只能允許一字,也就兩字節(jié)長的數(shù)據(jù)。為了實(shí)現(xiàn)每次多字節(jié)的FIFO功能,需要用戶自己開發(fā)相應(yīng)的功能塊FB來實(shí)現(xiàn),在本文中就介紹了實(shí)現(xiàn)每次20字節(jié)FIFO功能FB200功能塊的代碼,以及實(shí)際應(yīng)用舉例。

        二、SiemensFC84ATT和FC85FIFO功能的介紹

        1、FC84ATT

        1.1、FC84ATT功能和構(gòu)成介紹

        FC84ATT是實(shí)現(xiàn)增加數(shù)據(jù)到FIFO功能的數(shù)據(jù)存儲(chǔ)區(qū)中,通過每次執(zhí)行此指令實(shí)現(xiàn)把一字的數(shù)據(jù)增加到FIFO功能數(shù)據(jù)存儲(chǔ)區(qū)中,F(xiàn)IFO功能存儲(chǔ)區(qū)中以字為單位,具體組成如下:

        l存儲(chǔ)區(qū)表中第一字為FIFO存儲(chǔ)區(qū)允許的最大數(shù)據(jù)存儲(chǔ)個(gè)數(shù),即最多可以存儲(chǔ)多少個(gè)字的數(shù)據(jù)。

        l存儲(chǔ)區(qū)表中第二字為FIFO存儲(chǔ)區(qū)當(dāng)前已經(jīng)存儲(chǔ)數(shù)據(jù)的個(gè)數(shù),即已經(jīng)存儲(chǔ)了多少個(gè)字的數(shù)據(jù)。

        l存儲(chǔ)區(qū)表中從第三字開始為FIFO存儲(chǔ)區(qū)實(shí)際存儲(chǔ)的數(shù)據(jù)。

        1.2、FC84ATT功能參數(shù)說明

        通過SimaticSTEP7進(jìn)行程序開發(fā)時(shí),調(diào)用FC84ATT功能,出現(xiàn)如下圖:

        從圖2-1中可以看到,F(xiàn)C84ATT共有四個(gè)參數(shù),分別為EN、DATA、TABLE和ENO,在四門子資料中對(duì)其描述如下表2-1:

      參數(shù)

      聲明

      數(shù)據(jù)類型

      內(nèi)存區(qū)域

      功能描述

      EN

      輸入

      布爾

      I、Q、M、D、L

      使能激活信號(hào)

      ENO

      輸出

      布爾

      I、Q、M、D、L

      使能輸出

      DATA

      輸入

      Word

      I、Q、M、D、L、P靜態(tài)存儲(chǔ)區(qū)域

      要增加到FIFO的數(shù)據(jù)

      TABLE

      輸入

      指針

      I、Q、M、D、

      FIFO區(qū)域指針

        1.3、舉例說明

        如果信號(hào)M100.0的狀態(tài)為1(即被激活),F(xiàn)C84ATT功能被執(zhí)行。在下面的例子中,增加的數(shù)據(jù)寫到FIFO表中的第五行,F(xiàn)IFO的容量也就是FIFO表中第二行由4變?yōu)?。如果FC84ATT被執(zhí)行而且沒有錯(cuò)誤發(fā)生,那么使能輸出ENO置為1,具體如下:

        2、FC85FIFO

        2.1、FC85FIFO功能和構(gòu)成介紹

        FC85FIFO是完成把FIFO表中的數(shù)據(jù)按照先進(jìn)先出原則,依次讀出,以供使用,與FC84ATT配合使用,完成FIFO的寫進(jìn)與讀出功能。通過每次執(zhí)行此指令實(shí)現(xiàn)把一個(gè)字的數(shù)據(jù)從FIFO功能數(shù)據(jù)存儲(chǔ)區(qū)中讀出,F(xiàn)IFO功能存儲(chǔ)區(qū)中以字為單位,具體組成如下:

        l存儲(chǔ)區(qū)表中第一字為FIFO存儲(chǔ)區(qū)允許的最大數(shù)據(jù)存儲(chǔ)個(gè)數(shù),即最多可以存儲(chǔ)多少個(gè)字的數(shù)據(jù)。

        l存儲(chǔ)區(qū)表中第二字為FIFO存儲(chǔ)區(qū)當(dāng)前已經(jīng)存儲(chǔ)數(shù)據(jù)的個(gè)數(shù),即已經(jīng)存儲(chǔ)了多少個(gè)字的數(shù)據(jù)。

        l存儲(chǔ)區(qū)表中從第三字開始為FIFO存儲(chǔ)區(qū)實(shí)際存儲(chǔ)的數(shù)據(jù),也是FIFO指針?biāo)赶虻臄?shù)據(jù)。

        2.2、FC85FIFO功能參數(shù)說明

        通過SimaticSTEP7進(jìn)行程序開發(fā)時(shí),調(diào)用FC85FIFO功能,出現(xiàn)如下圖:

        圖2-2

        從圖2-1中可以看到,F(xiàn)C85FIFO共有四個(gè)參數(shù),分別為EN、ENO、TABLE和RET_VAL,在西門子資料中對(duì)其描述如下表2-2:

      參數(shù)

      聲明

      數(shù)據(jù)類型

      內(nèi)存區(qū)域

      功能描述

      EN

      輸入

      布爾

      I、Q、M、D、L

      使能激活信號(hào)

      ENO

      輸出

      布爾

      I、Q、M、D、L

      使能輸出

      TABLE

      輸入

      指針

      I、Q、M、D、

      FIFO區(qū)域指針

      RET_VAL

      輸出

      I、Q、M、D、L、P

      讀出的數(shù)據(jù)

        2.3、舉例說明

        如果信號(hào)M100.0的狀態(tài)為1(即被激活),F(xiàn)C85FIFO功能被執(zhí)行。在下面的例子中,從FIFO存儲(chǔ)區(qū)域中讀出的數(shù)據(jù)寫到RET_VAL指定的地址中,F(xiàn)IFO的容量也就是FIFO表中第二行由5變?yōu)?。同時(shí)整個(gè)FIFO中存儲(chǔ)的數(shù)據(jù)依次向上移動(dòng)一行。如果FC85FIFO被執(zhí)行而且沒有錯(cuò)誤發(fā)生,那么使能輸出ENO被置為1。

        三、多字節(jié)FIFO功能的實(shí)現(xiàn)

        1、從前面FC84ATT和FC85FIFO的說明中可以看出,雖然Siemens提供了針對(duì)S7

        系列PLC的FIFO功能模塊,但是其只能每次寫入或讀出一個(gè)字節(jié)的數(shù)據(jù),而實(shí)際上在很多情況下,每次均是一組數(shù)據(jù)需要運(yùn)用FIFO功能來暫時(shí)存儲(chǔ)起來,那么在這種情形下就不能采用Siemens提供的標(biāo)準(zhǔn)功能FC84和FC85了,需要自己開發(fā)一可以實(shí)現(xiàn)多字節(jié)讀出寫入功能的FIFO指令。

        2、SiemensSimaticSTEP7介紹

        SiemensSimaticS7300/400系列PLC是Siemens公司主推的中、大型產(chǎn)品,也是當(dāng)今世界上的主流產(chǎn)品。針對(duì)這兩個(gè)系列PLC開發(fā)軟件工件為SimaticSTEP7,此軟件有多個(gè)版本,目前已經(jīng)發(fā)展到V5.4,采用次軟件可以實(shí)現(xiàn)開發(fā)、監(jiān)控等功能。

        3、多字節(jié)FIFO的實(shí)現(xiàn)

        打開SimaticSTEP7軟件,新建一FB塊,如FB200DB200,然后進(jìn)入FB100

        進(jìn)行編程,本文中以20字節(jié)為例,介紹如何開發(fā)實(shí)現(xiàn)FIFO功能具體見如下畫面:

        圖3-1

        源代碼如下:

        FUNCTION_BLOCKFB100

        TITLE=

        //此功能塊用了完成20字節(jié)的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字節(jié)的數(shù)據(jù)從FIFO存儲(chǔ)區(qū)域中讀出

        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字節(jié)的數(shù)據(jù)寫入FIFO存儲(chǔ)區(qū)表中

        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、在程序中的調(diào)用

        上面已經(jīng)完成了FB100FIFO功能塊的編程開發(fā),下面就是直接調(diào)用,設(shè)置

        相關(guān)參數(shù)就可以使用此功能了,舉例如下:

        新建FIFO數(shù)據(jù)源數(shù)據(jù)庫DB200,結(jié)構(gòu)為

      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

      文章版權(quán)歸西部工控xbgk所有,未經(jīng)許可不得轉(zhuǎn)載。

      主站蜘蛛池模板: 99无码人妻一区二区三区免费| 色综合一区二区三区| 国产精品高清视亚洲一区二区| www一区二区www免费| 亚洲日韩国产一区二区三区在线 | 色一情一乱一伦一区二区三区| 91午夜精品亚洲一区二区三区| 久久久91精品国产一区二区三区| AV天堂午夜精品一区| 相泽亚洲一区中文字幕| 精品人妻少妇一区二区三区| 久久无码精品一区二区三区| 在线精品亚洲一区二区三区| 国产品无码一区二区三区在线蜜桃 | 国产精品熟女视频一区二区| 国产人妖视频一区二区破除| 日韩美女视频一区| 国产精品一区二区四区| 国模视频一区二区| 精品一区二区三区无码免费直播| 国产一区二区三区在线观看影院| 福利一区二区视频| 无码囯产精品一区二区免费 | 国产一区二区三区在线视頻| 成人国产一区二区三区| 好看的电影网站亚洲一区| 国产av天堂一区二区三区| 无码人妻视频一区二区三区 | 国产福利电影一区二区三区,亚洲国模精品一区 | 久久无码精品一区二区三区| 国产日韩一区二区三区在线观看| 无码人妻少妇色欲AV一区二区| 亚洲第一区视频在线观看| 在线观看视频一区二区| 亚洲国模精品一区| 无码少妇一区二区性色AV| 久久久久人妻精品一区三寸 | 三上悠亚精品一区二区久久| 亚洲一区二区三区免费观看| 爱爱帝国亚洲一区二区三区 | 国产成人无码aa精品一区|
      <button id="siwoq"></button>

      <span id="siwoq"><samp id="siwoq"></samp></span>
      <input id="siwoq"><object id="siwoq"></object></input>
      <blockquote id="siwoq"></blockquote>
    1. <span id="siwoq"></span>
        <address id="siwoq"></address>