不知道是不是西門子故意設置的門檻。反正這麼一來,所有的第三方的觸控螢幕都無法訪問這些被優化的數據了。而西家自己的觸控螢幕和WINCC,則沒有這個問題。
那麼這些第三方的觸控螢幕如何才能實現訪問數據塊數據呢?西家給出的方案其實很簡單,勾選掉優化功能。即非優化即可。
這本來不是個問題,我原本也沒意識到這裡面有什麼問題。
我在去年參加過一個會議,會間閒聊的時候,朋友跟我提起,他們的客戶經常有抱怨把S7-1200的存儲資源耗光的,而他發現這樣的客戶,無一例外,是因為使用了非西門子的觸控螢幕。
我隨即意識到問題的嚴重性了。觸控螢幕要訪問的數據,往往就是設備的重要參數, 這些參數原本是需要斷電保持的。對於優化的數據塊來說, 哪一條數據需要斷電保持, 逐個勾選即可。而對於非優化的數據塊,則不可以逐條選擇,要選擇斷電保持,就必須整個DB塊都選中。而CPU的斷電保持的數據容量是有限的。
所以,為了一兩條需要斷電保持的數據,而把整個數據塊都設置為了斷電保持,那系統資源必然是快速消耗殆盡了。稱其為非優化果然不虛。
這裡就形成了死循環,為了觸控螢幕要訪問到數據, 數據塊必須非優化,而為了數據斷電保持,相關數據必須能逐條勾選,所以必須優化的數據塊才可以。除非你老老實實選擇西門子的觸控螢幕。而往往,大家又抱怨西門子的觸控螢幕太貴。。。
我從去年用標準化模塊化方式的編程,大量採用FB塊來實現手動邏輯和自動邏輯,比起傳統的編程方式來,耗費的DB塊要差出不止一個數量級來。如果被這個問題限制住,要麼系統資源不夠用, 要麼能做到的系統規模急劇減小。
前面做過的示範項目,沒有觸控螢幕,用WINCC是可以實現符號地址訪問的。而將來的項目,就不可避免地要遇到非西門子的觸控螢幕了。但即便非西門子的觸控螢幕,其實也同樣可以用標準化模塊化編程方法實現。這個問題是必須要解決的。
讓觸控螢幕直接讀取優化塊的數據,這是觸控螢幕廠家原本都不能做到的事,顯然我們更不能了。所以能實現的方法,只有建立專用於觸控螢幕通訊的非優化的數據塊,讓觸控螢幕來訪問。而原本控制邏輯的FB塊的背景數據,仍然是優化的。
即,通過中間過渡數據塊,間接實現對優化數據的訪問。這是基本解決思路。
對於FB提供給HMI訪問的數據來說,有兩種,一種是運行值和狀態數據(狀態字),這些簡單,只需要簡單MOVE到非優化的專用數據塊中即可。 而第二種,是HMI上面操作的給定值和操作指令(控制字),就比較麻煩了。
如果什麼都不考慮,不做預留,當然可以直接從中間數據塊把數據用MOVE分發到各FB塊的設定值的管腳。
但我們要增加HMI訪問的接口,還要不能影響FB原本的接口功能,即原本WINCC和西門子觸控螢幕的正常訪問功能不能被影響。 否則一旦要增加WINCC上位機,或者西門子的觸控螢幕,原本的訪問接口被佔用了, 數據就寫不進了。
方法是,建立一個專用的FB塊,比如觸控螢幕是MCGS,FB塊起名字為MCGS
接口: