本公司專業(yè)經(jīng)銷合信/CO-TRUST科思創(chuàng)西門子PLC;S7-200S7-300 S7-400 S7-1200 觸摸屏,變頻器,6FC,6SNS120 V10 V60 V80伺服數(shù)控備件:電機,電線,電纜,西門子現(xiàn)貨PLC;S7-200S7-300 S7-400 S7-1200 觸摸屏,變頻器,6FC,6SNS120 V10 V60 V80伺服數(shù)控備件:電機(1LA7、1LG4、1LA9、1LE1),國產(chǎn)電機(1LG0,1LE0)大型電機(1LA8,1LA4,1PQ8)伺服電機(1PH,1PM,1FT,1FK,1FS)
應用領域 | 環(huán)保,化工,生物產(chǎn)業(yè),電子,電氣 |
---|
CPU 1214C DC/DC/DC
配方數(shù)據(jù)文件按照標準 CSV 格式存儲在 S7-1200 CPU 裝載存儲器或 S7-1200 SIMATIC 存儲卡“程序卡”中。分別可通過 PLC Web 服務器或?qū)τ诖鎯ㄎ募僮?,將?shù)據(jù)文件傳送到 PC 進行管理和查看。也可將修改過后的配方數(shù)據(jù)文件上傳至PLC,再通過“RecipeImport”配方導入指令更新PLC裝載存儲器中配方數(shù)據(jù)塊的數(shù)值。
SIMATIC S7-1200 系列 CPU 使用配方數(shù)據(jù)功能,需要注意以下幾兩點:
程序中創(chuàng)建一個配方數(shù)據(jù)塊,此 DB 塊必須存儲在 CPU 裝載存儲器中,可以使用 CPU 內(nèi)部裝載存儲器或程序卡
程序中創(chuàng)建一個活動配方數(shù)據(jù)塊,此 DB 塊必須在 CPU 工作存儲器中,使用程序邏輯讀取或?qū)懭胍粋€活動配方記錄
下面,舉例說明用 S7-1200 實現(xiàn)配方的寫入和讀取功能。為方便配方數(shù)據(jù)操作,按照下圖思路進行項目編程:
圖1 配方項目框圖
測試環(huán)境:
操作系統(tǒng):Win 10 64bit Pro 1703
軟件:TIA PORTAL V15 Update 4
測試軟件:Notepad++ V7.5.8
硬件:S7-1215C DC/DC/DC V4.2.3
訂貨號:6ES7215-1AG40-0XB0
1.定義一個 PLC 數(shù)據(jù)類型(UDT)
配方數(shù)據(jù)塊必須包含數(shù)組,可以是一維的也可以是多維的,數(shù)組元素是 PLC 數(shù)據(jù)類型或結(jié)構。在這個配方實例中使用 PLC 數(shù)據(jù)類型創(chuàng)建配方數(shù)據(jù)塊。
在此,創(chuàng)建一個 PLC 數(shù)據(jù)類型,以定義一個配方記錄中的所有組成,以制造蛋糕為例,建立UDT過程參見鏈接,建好后如圖2所示。
圖2.定義 PLC 數(shù)據(jù)類型
數(shù)據(jù)類型是一個數(shù)據(jù)模板,它在每個配方數(shù)據(jù)塊以及活動配方數(shù)據(jù)塊中重復使用。輸入所有實例配方共用的成分名稱和數(shù)據(jù)類型,根據(jù)分配給配方成分的數(shù)值不同而產(chǎn)生不同的產(chǎn)品配方。
2.使用 PLC 數(shù)據(jù)類型創(chuàng)建配方數(shù)據(jù)塊
創(chuàng)建一個配方數(shù)據(jù)塊,為全局數(shù)據(jù)塊,并啟用數(shù)據(jù)塊屬性'僅存儲在裝載內(nèi)存中',如圖3紅圈所示。本例中,配方數(shù)據(jù) DB 塊名稱為 'DB1_蛋糕配方”,如圖4所示,插入一個數(shù)組類型變量,數(shù)組元素的數(shù)據(jù)類型為'蛋糕配方',本例中設置數(shù)組限值0..7,即可創(chuàng)建8個配方,可根據(jù)實際情況調(diào)整。
注意,如果需要使用RecipeExport和RecipeImport導入導出,配方DB塊的名稱中盡量不出現(xiàn)中文字符,否則在WEB頁面操作會略微麻煩一些,具體詳見配方數(shù)據(jù)的管理。本例為顯示直觀,所以使用了“DB1_蛋糕配方”的名字。
圖3.定義數(shù)據(jù)塊屬性
圖4.創(chuàng)建配方數(shù)據(jù)塊
對于圖3的優(yōu)化的塊訪問選項,一般默認激活,因為從S7-1200 V4.2起,對于僅存儲于裝載存儲器的優(yōu)化塊的大小限制為256kB,而僅存儲于裝載存儲器的非優(yōu)化塊僅有64kB,顯然優(yōu)化塊可以存儲更多的配方記錄,如果單個配方數(shù)據(jù)太多,需要放在多個DB中,也可以減少DB塊個數(shù)。
3.在工作存儲器中創(chuàng)建活動配方 DB,并通過“READ_DBL”和“WRIT_DBL”指令實現(xiàn)對裝載存儲區(qū)配方數(shù)據(jù)塊的讀寫操作
在工作存儲器中準備一個活動配方數(shù)據(jù)塊,用于配方數(shù)據(jù)的寫入和讀取。在本例中,在工作存儲器中創(chuàng)建了一個全局數(shù)據(jù)塊,名稱為 'DB2_活動配方”,類型為“蛋糕配方”,如圖5所示。
圖5.添加活動配方塊
確定后,就可以得到活動配方數(shù)據(jù)塊,該塊只由一組配方組成,如圖6所示。
圖6.活動配方數(shù)據(jù)塊
注意,因為指令“READ_DBL”和“WRIT_DBL”的緣故,要求活動配方數(shù)據(jù)塊與配方數(shù)據(jù)塊的優(yōu)化屬性必須相同,即都同時是優(yōu)化數(shù)據(jù)塊,或者同時是非優(yōu)化數(shù)據(jù)塊。
將這個 DB 塊作為與裝載存儲器中配方數(shù)據(jù)塊的接口,分別通過指令“WRIT_DBL”能實時將存于工作存儲器的活動配方數(shù)據(jù)寫入至裝載存儲器的配方數(shù)據(jù)塊,或者通過指令“READ_DBL”實時讀取裝載存儲器的配方數(shù)據(jù)塊到工作存儲區(qū)中活動配方數(shù)據(jù)。
4.導出配方數(shù)據(jù)塊
對于S7-1200 V4.0及其以后版本的CPU,可以使用指令RecipeExport和RecipeImport對配方數(shù)據(jù)塊進行導入和導出,在電腦上使用EXCEL、ASCII編輯器等工具編輯。
對于S7-1200 V4.0以前的版本,一般建議直接在配方數(shù)據(jù)塊的起始值輸入配方,這一部分用戶可以直接跳過下面4-6步,直接看第7步。
在本例中,直接在OB1使用LAD語言調(diào)用RecipeExport和后面的RecipeImport塊,實際使用時可以在FC/FB,或者FB的多重背景中使用,語言也可以使用FBD、SCL。
首先新建DB塊,用于調(diào)用塊的請求與狀態(tài)位等,名稱為'DB3_操作',建立結(jié)構體'Export',以及相關變量,如圖7所示。
圖7. 建立結(jié)構體
在 OB1 調(diào)用RecipeExport,以及捕捉是否完成及錯誤代碼等程序,如圖8所示。
圖8.調(diào)用RecipeExport指令
5.配方csv文件的導入和導出
可以使用Web服務器或者存儲卡的方式對csv文件進行導入和導出,在電腦上的Excel等軟件上進行配方數(shù)據(jù)的編輯,具體操作詳見配方數(shù)據(jù)的管理。
6.導入配方數(shù)據(jù)塊
當配方文件通過WEB上載完成,或通過存儲卡重新導入文件后,就可以導入配方數(shù)據(jù)塊。和第4步類似,在DB塊'DB3操作',中建立結(jié)構體'Import',以及相關變量,結(jié)構同'Export',如圖9所示,用于RecipeImport的請求與狀態(tài)位。
圖9. 建立結(jié)構體
在 OB1 調(diào)用RecipeImport,以及捕捉是否完成及錯誤代碼等程序,如圖10所示。思路同第4步。
CPU 1214C DC/DC/DC
讀取配方數(shù)據(jù)
經(jīng)過使用配方指令或者直接在配方數(shù)據(jù)塊的編輯,此時配方數(shù)據(jù)已經(jīng)保存在PLC的裝載存儲器中,需要使用READ_DBL指令讀取出來。可以在DB塊'DB3操作',建立一個Int類型變量Index用作配方編號。對于本例,配方數(shù)組限值為0-7,所以該配方編號變量取值范圍也是0-7,可以在HMI畫面上設置該值,也可以在程序中設置該值。此外同樣在DB塊'DB3_操作',建立結(jié)構體'Read',以及相關變量,用于READ_DBL的請求與狀態(tài)位,如圖11所示。
圖11.建立Index變量及結(jié)構體
然后利用數(shù)組的索引尋址功能,將配方數(shù)組索引的變量讀取到活動配方,即如果需要配方0送到活動配方數(shù)據(jù)塊,則Index賦值為0,需要配方1送到活動配方數(shù)據(jù)塊,則Index賦值為1,......,具體程序如圖12所示。
圖12.讀配方
然后就可以直接使用活動配方了,不論是程序中,還是HMI畫面中。例如本例中,當Index=0時,讀出的活動配方DB,如圖13所示。
圖13.活動配方數(shù)據(jù)
8.在線修改配方
通常配方功能使用到第7步就可以結(jié)束了,如果需要偶爾小范圍修改配方數(shù)據(jù),不想大規(guī)模導入導出,或者不想打開程序修改配方數(shù)據(jù)起始值,可以使用WRIT_DBL指令實現(xiàn)該功能。
對于本例依然利用DB塊'DB3_操作'的變量Index,確定需要修改的配方編號,實際編程可以根據(jù)需要使用和讀配方不一樣的配方編號變量。
通常在HMI畫面上需要修改的配方編號,并且將活動配方的變量與HMI的IO域關聯(lián),使用一個按鈕觸發(fā)READ_DBL的REQ將該配方編號對應的參數(shù)都讀取到活動配方,即映射到了IO域,然后再修改其中需要修改的變量,最后再使用另外一個按鈕觸發(fā)WRIT_DBL的REQ實現(xiàn)將改后的活動配方寫入該配方編號對應的配方