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