0313 【萬泉河】萬老師手把手帶你抄PLC程序
前面寫了一篇文章《0304 【萬泉河】 我把LBP的功能塊解耦了》,講解了把LBP的一個MOTOR塊一分為二解耦成2個單獨的塊的過程方法和意義。
然后有人就在后面酸溜溜的評論道:情商高的說法把抄說成了解耦。
意思就是瞧不上我這種公然抄和借用別人的現成的庫函數方法,并大行其道的宣傳。
我簡直被這種價值觀給驚訝到了。 我這兒還巴拉巴拉地介紹開源,幻想工控行業也會有繁盛開源的那一天呢!哪想到同行之中還有另一派完全公然相反的價值觀在運行。
先這么說吧,我們現在的技術觀點,講究的是不自己重新發明輪子。所以,如果你在十幾年前從每一個工程項目都從啟保停開始寫PLC程序,WINCC程序每個人都要從頭研究窗口彈出,變量前綴,以實現子窗口功能的話, 還有情可原。 畢竟那個時候自動化行業的發展成熟程度還不夠。
而十幾年后的今天, 你仍然十幾年如一日做著同樣的工作,技術已經發展到如此成熟,網絡資源如此唾手可得的情況下,還在沿用老的工作方式,那可想而知其中的工作效率有多低,做出來的效果有多土了。
十幾年前我們的工資幾千塊錢, 那么到今天,除卻物價增長因素,你的工資也還仍然應該停留在幾千元。沒有創造更多的效益,憑什么就要拿到更高的收入呢?
所以,這個行業需要達成的一個基本的共識是, 要想效率高,收入高,就要學會如何充分利用已有輪子,免費或者付費,在已有的輪子的基礎上,快速實現應用,以充分發揮自己的優勢。
這也是隔壁IT行業早就在踐行的基礎。
也是我為啥明知這個行業的大多數人當下并不理解和接受LBP, 明知道做了也不會產生什么效益,明知道其中的困難難度極大,卻仍然要獨自前行闖出一條路來把LBP的接口方法移植拓展到更多平臺的原因。
同時,有領導批評我做著西門子HMI版區的版主,近來對HMI和WINCC的技術卻關心很少,貌似精力全放到PLC去了。 通過本文通過LBP,可以看到,當工控技術發展到一定的層級, PLC和HMI的工作一定是同步的,甚至在PLC中做的大量工作都是在給HMI做數據準備。 離開了PLC工作的標準化,HMI上的標準化根本無從談起。
在對LBP_MTR解耦并實現移植應用之后,我下一個庫函數的目標便盯上了INTLK8函數。先用同樣的方法解耦成2個模塊,然后再一步步分別移植到SMART 200和KTP 觸摸屏以及將來更多的拓展方向。
先解釋下INTLK8這個庫函數的功能。我在做LBP移植五期講座的時候,這里只是隨口提了一下,就越過去了,相應的功能因為比較復雜,而且用的場合不多,就建議簡單刪掉算事了。所以這里仔細講一下, 學員們通過看文章充分了解后,需要的話那部分功能還可以再拾起來。
我在前一本書《PLC標準化編程原理和方法》中P161頁提到過,BST庫中有一個可視化聯鎖功能,BST_ILOCK (FB651) 。然而在BST中時有時無,曾經在S7-400的版本中有過,但到了PORTAL版本中給取消了。 所以我們在做PORTAL項目時,需要用到的時候,還是從S7-400中參考移植過來的。
邏輯其實很簡單,就是對多個管腳的取與AND或OR邏輯計算,得到的結果可以用于對電機閥門等設備的啟動條件連鎖等功能。
但通過一個專用的FB,實現了在上位機的可視化管理,操作人員可以在設備故障不能啟動時,通過上位界面,詳細了解運行條件的滿足和缺失情況。 所以可以認為整個FB本質上是為HMI顯示服務的。 否則僅僅為了邏輯功能,在PLC中做與(串聯)、或(并聯)的梯形圖邏輯都是一句話的事,不需要什么功能塊。
有一些行業,要求觸摸屏和上位機有跳轉到PLC中查看梯形圖邏輯的功能。有極少數的控制系統搭配其自家的觸摸屏,通過一些特殊的插件,可以實現。 然而本質上說,客戶要的并不是在觸摸屏上能翻閱所有控制邏輯,就是希望能可視化的看到重要設備的啟動條件而已。 所以這種連鎖功能的可視化就可以實現這樣的功能。
這個功能在蟄伏了數年之后,在LBP中重新出現了,名字叫做LBP_INTLK8,望文生義,可以最多控制8個輸入條件。如果再多,可以多次調用來實現。
而LBP_INTLK8比BST_ILOCK先進的地方在于,原本BST中的邏輯條件只能集體統一選擇AND 或者OR, 每個管腳之間并不能單獨選擇。而INTLK8實現了每個管腳都可以分配不同的邏輯,包括:
1=OR,2=AND , 3= OR NOT, 4=AND NOT。
以及0=無效。
由此,通過一個標準化的模塊可以實現更豐富的邏輯條件,及其可視化。
有了這樣的功能,一個系統中,最重要的主機部分的啟動條件前面都可以通過這樣的可視化條件接入。然后在觸摸屏上就可以實現可視化監控管理了。比起設計的程序只能讓設備運轉起來,運轉不起來時則需要用戶翻說明書,或者打服務電話咨詢,都要友好和便捷的多了。那么同比之下,這樣的設備就更容易被客戶接受,也更容易賣上高價值。
在S7-1200和TP900觸摸屏中的實現毫無難度,與普通的LBP模塊基本相同。 解耦方法也相同。
然而在TP觸摸屏中,動畫的實現方法是通過腳本程序實現的。 通過PLC送來的一個2S脈沖變量,變量的變化事件中執行腳本,將FB的狀態字解碼后經過邏輯計算,來設置畫面中邏輯結果的顯示和顏色切換。
Function LBP_Intlk8()
End Function
然而,我們的最終目標是沒有腳本功能的如KTP這樣的觸摸屏,那么這些邏輯只能先在PLC中計算完成,得到畫面元素各自的狀態位數據,然后觸摸屏方僅用于顯示。
所以對庫函數塊做了改造,增加了2個DWORD , VIS1和VIS2 , 不超過64個Bit可以完整表達。
在S7-1200的程序中增加的邏輯:
REGION 增加的觸摸屏顯示的邏輯圖
END_REGION
程序中注釋的部分是原本的觸摸屏中的腳本,為了對照移植,我把源程序復制過來了!
然后,觸摸屏畫面中,每一根線條和畫面元素,都增加了顏色切換和動態顯示的動畫功能,綁定增加的VIS變量的位。實現了同樣的功能。
得益于LBP原作者的細心,每一根線條都有精心起的名字, 如poly0To7On,poly2To0On等,盡管我并沒有完全讀懂其名稱含義,但在對照上面的程序基礎上,還是很順利實現了畫面的改進。只要自己不粗心的錯誤,功能總可以完整復制的。 這就是移植,也同樣是抄。
在完整實現功能后,把觸摸屏降格為KTP,仍舊連接S7-1200,然后發現,KTP的畫面中除了不支持腳本,不支持模板對象之外,還不支持多線!所以畫面中的所有線條, 又重新用單線繪制。 原本的多線的顯示條件,復制到多個線段。工作量之大,導致我都暗自抱怨,如果早發現其不支持單線,就不做這個塊的移植了。但路走都走了,也還好沒有項目工期壓力,頂多多花點時間而已。
同樣的在PLC程序中,也先在SMART 200中實現同樣的邏輯,包括INTLK8完整的邏輯,解耦之后分為801和802。
也還好做了解耦,用2個塊來實現,否則SMART 200的子程序塊的管腳數量和內部TEMP變量全都不夠用。 這樣靠2個塊,共同協作,才算完成了所有需要的功能。當然,前者801主要處理邏輯和狀態位顯示的計算。而802則是處理與多觸摸屏的數據交換管理。
摘錄一段801中的程序邏輯:
注釋中我把從觸摸屏到PORTAL的程序,又當作注釋全部搬過來了,只為了方便抄和查錯驗證。
LBP原本的身份識別是在觸摸屏上拼接字符完成的,比如對MTR-0001的連鎖,則拼接成MTR-0001LockOn,PLC程序中相應的連鎖對應這樣的標識,由此實現了ID身份識別。而同樣因為KTP不支持腳本功能,所以我又增加了EXT管腳,用于單獨識別觸摸屏數據管理。所以,即便是抄,也不是把腦子關上不動腦子就能抄成的。
INTLK塊的名稱雖然是為LOCK功能的,其實也還可以用于允許啟動的功能。 即在LOCK的結果為1的時候,設備禁止啟動,而倒過來當用于允許啟動條件的時候,結果為1時,設備才允許啟動,對應了MTR塊的RELEASE管腳。我現在才明白這個管腳的功能含義。其實相當于我們國內行業常對應的備妥或者以前稱作READY的管腳。
即,符合了我在標準化書和講座中所要求的,設備的耦合邏輯要追求極致的簡化,允許啟動和互鎖,需要分到不同的管腳中。 而不要因為取反的邏輯很簡單,就混淆在一起。 煙臺方法的學員們對這一點會理解更深刻。
在可視化界面上, LOCK和RELEASE需要的顯示顏色是不同的。比如LOCK時顏色需要為黃色或者紅色,而允許啟動的顏色會是綠色。所以其庫功能還包含了對顏色的選擇設定。主要是由HMI腳本實現的。而這些如果同樣增加到PLC程序中,導致PLC中變量數量激增,邏輯也更為復雜,所以暫時就做了功能簡化。未來,需要的時候再另外想辦法實現。 比如黃和綠兩套顏色機制可以分在2套不同的畫面中實現。
另外,庫函數原始功能還包含了操作員的動態編程功能,可以在運行中修改邏輯和描述文本。也是出于PLC中資源限制的原因,做了刪減。 我還是認為,顯示的意義比操作要大多了。
由此,總結下移植(手抄)這個INTLK8塊的實現路線:
1, S7-1200 + TP900
2, S7-1200 (加邏輯) + TP900(去邏輯)
3, S7-1200 + TP900 單線條
4, S7-1200 + KTP900
5, SMART 200 + TP900
6, SMART 200 + KTP900
通過逐步實現, 逐步對照比較,發現其中的錯誤和疏忽,逐步修訂,最終實現了想要的功能。 在移植過程中, 我甚至用兩臺電腦分別運行觸摸屏仿真,分別監控S7-1200和SMART200, PLC之間的輸入信號為了同步一致,還做了通訊,最終調試成功。
這個過程證明了,在未完全讀懂原始邏輯的情況下通過漸進的每次僅一小步的移植,最終也可以實現功能移植。
雖然麻煩,總比自己從頭規劃設計一套完整的功能,要省力方便的多。
所以,哪怕迫不得已需要自己造輪子,也盡量參考已有的輪子。
這才是科技進步,這才是工業化。