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