產(chǎn)地類別 | 進(jìn)口 | 應(yīng)用領(lǐng)域 | 環(huán)保,化工,生物產(chǎn)業(yè),電子,電氣 |
---|
產(chǎn)品簡(jiǎn)介
詳細(xì)介紹
6ES7223-3BD30-0XB0漳州西門子一級(jí)代理商 6ES7223-3BD30-0XB0漳州西門子一級(jí)代理商
SIMATIC S7-1200 系列 CPU 使用配方數(shù)據(jù)功能,需要注意以下幾兩點(diǎn):
程序中創(chuàng)建一個(gè)配方數(shù)據(jù)塊,此 DB 塊必須存儲(chǔ)在 CPU 裝載存儲(chǔ)器中,可以使用 CPU 內(nèi)部裝載存儲(chǔ)器或程序卡
程序中創(chuàng)建一個(gè)活動(dòng)配方數(shù)據(jù)塊,此 DB 塊必須在 CPU 工作存儲(chǔ)器中,使用程序邏輯讀取或?qū)懭胍粋€(gè)活動(dòng)配方記錄
下面,舉例說(shuō)明用 S7-1200 實(shí)現(xiàn)配方的寫入和讀取功能。為方便配方數(shù)據(jù)操作,按照下圖思路進(jìn)行項(xiàng)目編程:
圖1 配方項(xiàng)目框圖
測(cè)試環(huán)境:
操作系統(tǒng):Win 10 64bit Pro 1703
軟件:TIA PORTAL V15 Update 4
測(cè)試軟件:Notepad++ V7.5.8
硬件:S7-1215C DC/DC/DC V4.2.3
訂貨號(hào):6ES7215-1AG40-0XB0
1.定義一個(gè) PLC 數(shù)據(jù)類型(UDT)
配方數(shù)據(jù)塊必須包含數(shù)組,可以是一維的也可以是多維的,數(shù)組元素是 PLC 數(shù)據(jù)類型或結(jié)構(gòu)。在這個(gè)配方實(shí)例中使用 PLC 數(shù)據(jù)類型創(chuàng)建配方數(shù)據(jù)塊。
在此,創(chuàng)建一個(gè) PLC 數(shù)據(jù)類型,以定義一個(gè)配方記錄中的所有組成,以制造蛋糕為例,建立UDT過(guò)程參見(jiàn)鏈接,建好后如圖2所示。
圖2.定義 PLC 數(shù)據(jù)類型
數(shù)據(jù)類型是一個(gè)數(shù)據(jù)模板,它在每個(gè)配方數(shù)據(jù)塊以及活動(dòng)配方數(shù)據(jù)塊中重復(fù)使用。輸入所有實(shí)例配方共用的成分名稱和數(shù)據(jù)類型,根據(jù)分配給配方成分的數(shù)值不同而產(chǎn)生不同的產(chǎn)品配方。
2.使用 PLC 數(shù)據(jù)類型創(chuàng)建配方數(shù)據(jù)塊
創(chuàng)建一個(gè)配方數(shù)據(jù)塊,為全局?jǐn)?shù)據(jù)塊,并啟用數(shù)據(jù)塊屬性'僅存儲(chǔ)在裝載內(nèi)存中',如圖3紅圈所示。本例中,配方數(shù)據(jù) DB 塊名稱為 'DB1_蛋糕配方",如圖4所示,插入一個(gè)數(shù)組類型變量,數(shù)組元素的數(shù)據(jù)類型為'蛋糕配方',本例中設(shè)置數(shù)組限值0..7,即可創(chuàng)建8個(gè)配方,可根據(jù)實(shí)際情況調(diào)整。
注意,如果需要使用RecipeExport和RecipeImport導(dǎo)入導(dǎo)出,配方DB塊的名稱中盡量不出現(xiàn)中文字符,否則在WEB頁(yè)面操作會(huì)略微麻煩一些,具體詳見(jiàn)配方數(shù)據(jù)的管理。本例為顯示直觀,所以使用了“DB1_蛋糕配方"的名字。
對(duì)于圖3的優(yōu)化的塊訪問(wèn)選項(xiàng),一般默認(rèn)激活,因?yàn)閺腟7-1200 V4.2起,對(duì)于僅存儲(chǔ)于裝載存儲(chǔ)器的優(yōu)化塊的大小限制為256kB,而僅存儲(chǔ)于裝載存儲(chǔ)器的非優(yōu)化塊僅有64kB,顯然優(yōu)化塊可以存儲(chǔ)更多的配方記錄,如果單個(gè)配方數(shù)據(jù)太多,需要放在多個(gè)DB中,也可以減少DB塊個(gè)數(shù)。
3.在工作存儲(chǔ)器中創(chuàng)建活動(dòng)配方 DB,并通過(guò)“READ_DBL"和“WRIT_DBL"指令實(shí)現(xiàn)對(duì)裝載存儲(chǔ)區(qū)配方數(shù)據(jù)塊的讀寫操作
在工作存儲(chǔ)器中準(zhǔn)備一個(gè)活動(dòng)配方數(shù)據(jù)塊,用于配方數(shù)據(jù)的寫入和讀取。在本例中,在工作存儲(chǔ)器中創(chuàng)建了一個(gè)全局?jǐn)?shù)據(jù)塊,名稱為 'DB2_活動(dòng)配方",類型為“蛋糕配方",如圖5所示。
圖5.添加活動(dòng)配方塊
確定后,就可以得到活動(dòng)配方數(shù)據(jù)塊,該塊只由一組配方組成,如圖6所示。
圖6.活動(dòng)配方數(shù)據(jù)塊
注意,因?yàn)橹噶睢癛EAD_DBL"和“WRIT_DBL"的緣故,要求活動(dòng)配方數(shù)據(jù)塊與配方數(shù)據(jù)塊的優(yōu)化屬性必須相同,即都同時(shí)是優(yōu)化數(shù)據(jù)塊,或者同時(shí)是非優(yōu)化數(shù)據(jù)塊。
將這個(gè) DB 塊作為與裝載存儲(chǔ)器中配方數(shù)據(jù)塊的接口,分別通過(guò)指令“WRIT_DBL"能實(shí)時(shí)將存于工作存儲(chǔ)器的活動(dòng)配方數(shù)據(jù)寫入至裝載存儲(chǔ)器的配方數(shù)據(jù)塊,或者通過(guò)指令“READ_DBL"實(shí)時(shí)讀取裝載存儲(chǔ)器的配方數(shù)據(jù)塊到工作存儲(chǔ)區(qū)中活動(dòng)配方數(shù)據(jù)。
4.導(dǎo)出配方數(shù)據(jù)塊
對(duì)于S7-1200 V4.0及其以后版本的CPU,可以使用指令RecipeExport和RecipeImport對(duì)配方數(shù)據(jù)塊進(jìn)行導(dǎo)入和導(dǎo)出,在電腦上使用EXCEL、ASCII編輯器等工具編輯。
對(duì)于S7-1200 V4.0以前的版本,一般建議直接在配方數(shù)據(jù)塊的起始值輸入配方,這一部分用戶可以直接跳過(guò)下面4-6步,直接看第7步。
在本例中,直接在OB1使用LAD語(yǔ)言調(diào)用RecipeExport和后面的RecipeImport塊,實(shí)際使用時(shí)可以在FC/FB,或者FB的多重背景中使用,語(yǔ)言也可以使用FBD、SCL。
首先新建DB塊,用于調(diào)用塊的請(qǐng)求與狀態(tài)位等,名稱為'DB3_操作',建立結(jié)構(gòu)體'Export',以及相關(guān)變量,如圖7所示。
圖7. 建立結(jié)構(gòu)體
在 OB1 調(diào)用RecipeExport,以及捕捉是否完成及錯(cuò)誤代碼等程序,如圖8所示。
圖8.調(diào)用RecipeExport指令
5.配方csv文件的導(dǎo)入和導(dǎo)出
可以使用Web服務(wù)器或者存儲(chǔ)卡的方式對(duì)csv文件進(jìn)行導(dǎo)入和導(dǎo)出,在電腦上的Excel等軟件上進(jìn)行配方數(shù)據(jù)的編輯,具體操作詳見(jiàn)配方數(shù)據(jù)的管理。
6.導(dǎo)入配方數(shù)據(jù)塊
當(dāng)配方文件通過(guò)WEB上載完成,或通過(guò)存儲(chǔ)卡重新導(dǎo)入文件后,就可以導(dǎo)入配方數(shù)據(jù)塊。和第4步類似,在DB塊'DB3操作',中建立結(jié)構(gòu)體'Import',以及相關(guān)變量,結(jié)構(gòu)同'Export',如圖9所示,用于RecipeImport的請(qǐng)求與狀態(tài)位。
在 OB1 調(diào)用RecipeImport,以及捕捉是否完成及錯(cuò)誤代碼等程序,如圖10所示。思路同第4步。
圖10.調(diào)用RecipeImport指令
7.讀取配方數(shù)據(jù)
經(jīng)過(guò)使用配方指令或者直接在配方數(shù)據(jù)塊的編輯,此時(shí)配方數(shù)據(jù)已經(jīng)保存在PLC的裝載存儲(chǔ)器中,需要使用READ_DBL指令讀取出來(lái)。可以在DB塊'DB3操作',建立一個(gè)Int類型變量Index用作配方編號(hào)。對(duì)于本例,配方數(shù)組限值為0-7,所以該配方編號(hào)變量取值范圍也是0-7,可以在HMI畫面上設(shè)置該值,也可以在程序中設(shè)置該值。此外同樣在DB塊'DB3_操作',建立結(jié)構(gòu)體'Read',以及相關(guān)變量,用于READ_DBL的請(qǐng)求與狀態(tài)位,如圖11所示。
然后利用數(shù)組的索引尋址功能,將配方數(shù)組索引的變量讀取到活動(dòng)配方,即如果需要配方0送到活動(dòng)配方數(shù)據(jù)塊,則Index賦值為0,需要配方1送到活動(dòng)配方數(shù)據(jù)塊,則Index賦值為1,......,具體程序如圖12所示。
然后就可以直接使用活動(dòng)配方了,不論是程序中,還是HMI畫面中。例如本例中,當(dāng)Index=0時(shí),讀出的活動(dòng)配方DB,如圖13所示。
8.在線修改配方
通常配方功能使用到第7步就可以結(jié)束了,如果需要偶爾小范圍修改配方數(shù)據(jù),不想大規(guī)模導(dǎo)入導(dǎo)出,或者不想打開(kāi)程序修改配方數(shù)據(jù)起始值,可以使用WRIT_DBL指令實(shí)現(xiàn)該功能。
對(duì)于本例依然利用DB塊'DB3_操作'的變量Index,確定需要修改的配方編號(hào),實(shí)際編程可以根據(jù)需要使用和讀配方不一樣的配方編號(hào)變量。
通常在HMI畫面上需要修改的配方編號(hào),并且將活動(dòng)配方的變量與HMI的IO域關(guān)聯(lián),使用一個(gè)按鈕觸發(fā)READ_DBL的REQ將該配方編號(hào)對(duì)應(yīng)的參數(shù)都讀取到活動(dòng)配方,即映射到了IO域,然后再修改其中需要修改的變量,后再使用另外一個(gè)按鈕觸發(fā)WRIT_DBL的REQ實(shí)現(xiàn)將改后的活動(dòng)配方寫入該配方編號(hào)對(duì)應(yīng)的配方,參考畫面如圖14。
同樣在DB塊'DB3_操作',建立結(jié)構(gòu)體'Write',以及相關(guān)變量,結(jié)構(gòu)同'Read',用于WRIT_DBL的請(qǐng)求與狀態(tài)位,如圖15所示。
后同樣,利用數(shù)組的索引尋址功能,將活動(dòng)配方寫入到配方數(shù)組索引的變量,即如果需要修改配方0,則將Index賦值為0,修改活動(dòng)配方數(shù)據(jù)塊后寫入,需要修改配方1,則將Index賦值為1,修改活動(dòng)配方數(shù)據(jù)塊后寫入,......,具體程序如圖16所示。
本例如圖17所示,讀出Index為0的配方,然后修改黃油數(shù)據(jù)為2.0,“寫入配方"按鈕即可修改配方DB的值。
PROFINET IO 主要用于模塊化、分布式的控制,通過(guò)以太網(wǎng)直接連接現(xiàn)場(chǎng)設(shè)備,通信為全雙工點(diǎn)到點(diǎn)方式,按設(shè)定的更新時(shí)間雙方對(duì)等發(fā)送數(shù)據(jù)。
PROFINET IO按通信時(shí)效性來(lái)分,有三種通信水平:
種,非實(shí)時(shí)數(shù)據(jù)傳輸,英文簡(jiǎn)稱NRT,典型通信時(shí)間為100ms。
種,實(shí)時(shí)通信,英文簡(jiǎn)稱RT,典型通信時(shí)間為0.5~10ms。
種,等時(shí)實(shí)時(shí)通信,英文簡(jiǎn)稱IRT,需要特殊設(shè)備支持,典型通信時(shí)間為0.25~1ms。
在同一個(gè)項(xiàng)目中的PROFINET IO通信
1、打開(kāi)博途軟件,創(chuàng)建一個(gè)項(xiàng)目。
2、“設(shè)備與網(wǎng)絡(luò)"→“添加新設(shè)備"→選擇“控制器"→選擇PLC的CPU類型,如“非的CPU 1500"→選擇“6ES7……"雙擊。
3、如軟件已經(jīng)連接到PLC,。
4、如檢測(cè)到PLC,選擇CPU型號(hào),連接,把空程序下載到PLC,給PLC一個(gè)清空動(dòng)作。
也可以右鍵選擇“更改設(shè)備",選擇實(shí)際PLC的CPU類型。
5、打開(kāi)網(wǎng)絡(luò)視圖,再添加一個(gè)PLC,連接它們的網(wǎng)口。
6、作為IO設(shè)備的PLC2的網(wǎng)口,進(jìn)入屬性設(shè)置,在“操作模式"的“智能設(shè)備通信"中,選擇已分配的IO控制器(PLC1),如不在本項(xiàng)目,則選擇未分配。
在“傳輸區(qū)域"中設(shè)置所要傳輸?shù)臄?shù)據(jù),如這里設(shè)置的“傳輸區(qū)1"和“傳輸區(qū)2"。
箭頭切換傳輸方向。
7、編譯后,把程序分別下載到PLC1與PLC2,設(shè)備即可試機(jī)。
不在同一個(gè)項(xiàng)目中的PROFINET IO通信
1、新建一個(gè)項(xiàng)目,添加一個(gè)設(shè)備,在“網(wǎng)絡(luò)視圖"中,設(shè)置網(wǎng)口屬性中的設(shè)備名稱。
2、設(shè)置“操作模式"中的傳輸區(qū)。
3、導(dǎo)出常規(guī)站描述文件(GSD),導(dǎo)出前需要編譯正確。
4、在主站(IO控制站)中,安裝剛才保存的GSD文件。
5、在網(wǎng)絡(luò)視圖中,添加GSD device,這里選擇剛才保存的“IO123"。
6、兩個(gè)設(shè)備的網(wǎng)口,把它們連接起來(lái),IO123設(shè)備,進(jìn)入設(shè)備視圖,可修改傳輸區(qū)的首地址。
編譯后,**到PLC試機(jī)。
西門子S7-1200 PLC 水箱水位控制程序案例
先說(shuō)明一下案例的控制要求:
1、該控制項(xiàng)目為水箱水位控制系統(tǒng),系統(tǒng)中一共有3隔水箱,每隔水箱抖音一個(gè)液位傳感器、輸出的信號(hào)為0~10V電壓信號(hào),檢測(cè)液位的高度為0~3m,液位為0.2m時(shí)為低液位,液位為2.5時(shí)為高液位。
2、每個(gè)水箱有三個(gè)進(jìn)水閥和三個(gè)出水閥,進(jìn)水閥分別是Y1、Y3、Y5,出水閥分別是Y2、Y4、Y6,每個(gè)水箱都有出水閥開(kāi)和出水閥關(guān)兩個(gè)按鈕,出水閥開(kāi)按鈕分別是SB1、SB3、SB5,出水閥關(guān)按鈕分別是SB2、SB4、SB6。
3、我們通過(guò)按SB1SB3SB5可以分別對(duì)各個(gè)水箱進(jìn)行防水操作,順序是隨機(jī)的,當(dāng)系統(tǒng)檢測(cè)到水箱的“空"信號(hào)時(shí),系統(tǒng)會(huì)自動(dòng)打開(kāi)水箱進(jìn)水閥進(jìn)行注水,當(dāng)檢測(cè)到水箱“滿"信號(hào)時(shí)停止進(jìn)水。水箱注水和水箱放空的順序是相同的,而且每次只能對(duì)一個(gè)水箱進(jìn)行注水的操作。
首行IO分配:IO分配好之后根據(jù)IO分配的點(diǎn)進(jìn)行接線即可,還需注意液位傳感器需要接到模擬量輸入模塊,一共有三個(gè)液位傳感器,那么可以選擇SM1231 AI04的模塊,分別接到通道1、通道2、通道3即可。
PLC控制程序設(shè)計(jì):(案例源程序獲取,請(qǐng)看文末)
1、首行硬件組態(tài)、配置模擬量模塊的參數(shù)(案例源程序獲取,請(qǐng)看文末)
我們選用CPU1214C DC/DC/DC型號(hào)的PLC,此外因?yàn)樾枰獙?duì)三個(gè)水箱的水位進(jìn)行采集,要使用到模擬量輸入模塊,我們選用的是SM1231 AI04模塊,設(shè)備組態(tài)配置圖如下圖。因?yàn)槭褂玫搅四M量模塊,還需要設(shè)置相應(yīng)的模擬量輸入信號(hào)的參數(shù)。根據(jù)液位繼電器的輸出信號(hào)類型進(jìn)行配置,我們配置測(cè)量類型為電壓,電壓范圍是正負(fù)10V,濾波為4個(gè)周期,啟用溢出診斷和下溢診斷。通道0對(duì)應(yīng)的地址是IW96,通道1對(duì)應(yīng)的地址是IW98,通道2對(duì)應(yīng)的地址是IW100。2、編寫模擬量處理程序
模擬量轉(zhuǎn)換程序,是用來(lái)把采集到的模擬量信號(hào)轉(zhuǎn)換成實(shí)際的液位,并將它與低液位和高液位做比較,從而輸出是否達(dá)到低液位信號(hào)和高液位信號(hào)。因?yàn)槿齻€(gè)水箱 計(jì)算過(guò)程是相同的,所以我們可以編寫一個(gè)帶形式參數(shù)的FC塊,方便重復(fù)調(diào)用。具體操作是添加一個(gè)FC塊,并且命名為“模擬量處理",設(shè)置好變量并編寫FC程序。
3、建立一個(gè)PLC數(shù)據(jù)類型、添加一個(gè)全局DB塊
在PLC數(shù)據(jù)類型頁(yè)面中添加一個(gè)PLC的數(shù)據(jù)類型,并把它命名為“Analog",在里面建立之后需要用到的變量,包括當(dāng)前水位、低水位和高水位,并且設(shè)置好這三個(gè)變量的數(shù)據(jù)類型。
此外,再新建一個(gè)全局DB塊,把它命名為“水箱控制數(shù)據(jù)",我們可以在里面建立一個(gè)名稱為“模擬量"的變量名稱,數(shù)據(jù)類型設(shè)置成數(shù)組Array[0..2]of “Analog",然后把每個(gè)元素的數(shù)據(jù)類型選擇成建立的PLC的數(shù)據(jù)類型。
4、編寫水箱放水和進(jìn)水控制程序(案例源程序獲取,請(qǐng)看文末)
因?yàn)橛腥齻€(gè)水箱,它們的注水和放水的過(guò)程是一樣的,我們就可以把水箱的注水和放水過(guò)程的程序編寫成一個(gè)帶形式參數(shù)的FB塊,方便重復(fù)調(diào)用。具體操作是添加一個(gè)FB塊,并命名為“水箱控制",在FB的接口區(qū)建立相應(yīng)的形式參數(shù)變量,然后再編寫FB中的控制程序。
以上是打開(kāi)放水閥程序,當(dāng)按下放水閥開(kāi)按鈕時(shí),放水電磁閥打開(kāi),按下放水閥關(guān)按鈕或者水位達(dá)到低水位時(shí),關(guān)閉放水閥。
以上標(biāo)記水箱空標(biāo)志程序,因?yàn)樗涑霈F(xiàn)空信號(hào)后可以進(jìn)行注水操作,但是一次只能對(duì)一個(gè)水箱進(jìn)行注水,所以當(dāng)標(biāo)記水箱為空標(biāo)志信號(hào)為1時(shí),才可以進(jìn)行注水操作。
當(dāng)水箱水位到達(dá)低水位,則說(shuō)明水箱是空的,這時(shí)如果另外兩個(gè)水箱的空標(biāo)記信號(hào)沒(méi)有,那么這個(gè)水箱的空標(biāo)記信號(hào)輸出為1,如果另外兩個(gè)水箱已經(jīng)有水箱出現(xiàn)空標(biāo)記信號(hào)的話,那么這個(gè)水箱的空標(biāo)記信號(hào)不能輸出為1。
而且當(dāng)這個(gè)水箱開(kāi)始注水時(shí),水箱的空標(biāo)記信號(hào)需要復(fù)位。
以上是開(kāi)進(jìn)水閥程序,當(dāng)水箱空標(biāo)記為1時(shí),就可以打開(kāi)進(jìn)水電磁閥,同理因?yàn)橐淮沃荒軐?duì)一個(gè)水箱進(jìn)行注水操作,所以如果檢測(cè)到另外兩個(gè)水箱有注水操作時(shí),那么這個(gè)水箱也不能進(jìn)行注水操作。當(dāng)達(dá)到高水位時(shí)停止關(guān)閉進(jìn)水電磁閥,停止注水操作。
5、調(diào)用模擬量處理FC塊和水箱控制FB塊程序(案例源程序獲取,請(qǐng)看文末)
添加一個(gè)FB塊,并命名為“水箱水位控制程序",我們?cè)谶@個(gè)FB塊中調(diào)用模擬量處理FC塊,模擬量處理FC塊的作用是對(duì)每隔水箱的液位傳感器的數(shù)據(jù)進(jìn)行處理。
此外還要調(diào)用水箱控制FB塊程序,需要注意調(diào)用FB塊在分配背景數(shù)據(jù)塊時(shí),要選擇多重實(shí)例背景,調(diào)用之后編寫每隔水箱的放水和進(jìn)水的程序。
6、主程序OB1中調(diào)用水箱水位控制程序的FB塊
這樣,我們就完成了整個(gè)控制案例的程序設(shè)計(jì),當(dāng)然這并不是一個(gè)完整的項(xiàng)目,如果是應(yīng)用到實(shí)際項(xiàng)目中,可能還會(huì)有其他需要考慮的問(wèn)題哦,這個(gè)就等待大家家去思考啦~