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