FB塊的應(yīng)用解析

發(fā)布時(shí)間:2024-01-27
星爺?shù)拇笤捨饔问且徊看蠹叶炷茉數(shù)挠捌?,不僅好看而且賦有很多哲理,讓人看完受益匪淺。比如其中紫霞仙子的“我猜的中開頭,卻猜不中結(jié)尾”,就道出了世間之事,即使是神仙也未必能夠都預(yù)料的道,所以對(duì)于我們這些活躍在熱線的普通人要適應(yīng)這種“新常態(tài)”以“平常心”待之。閑話少敘,下面說一個(gè)熱線的故事吧。
熱線上的客戶編寫了一個(gè)很簡(jiǎn)單的邏輯程序,程序包括兩個(gè)塊。ob1主循環(huán)程序和fb1功能塊程序,fb1在ob1中調(diào)用。ob1中對(duì)rs_result(m100.2)進(jìn)行置位操作,在fb1中通過操作out參數(shù)ors_result來對(duì)rs_result(m100.2)進(jìn)行復(fù)位操作。詳細(xì)的程序如圖1、圖2所示。
圖1 ob1程序
圖2 fb1程序
通過上面程序,我們期望實(shí)際的運(yùn)行結(jié)果是,如果set_trig(m100.0)為true則對(duì)rs_result(m100.2)進(jìn)行置位操作,如果rset_tri(m100.1)為true則對(duì)rs_result(m100.2)進(jìn)行復(fù)位操作。程序簡(jiǎn)單吧,結(jié)構(gòu)也很清晰,清楚地我們一眼就能預(yù)知結(jié)果。
可結(jié)果真的是這樣嗎?實(shí)際測(cè)試后發(fā)現(xiàn),當(dāng)set_trig(m100.0)為true時(shí),rs_result(m100.2)的輸出結(jié)果卻不為1,即無法實(shí)現(xiàn)對(duì)rs_result(m100.2)的置位操作,如圖3所示。
圖3
顯然,這與我們實(shí)際想要實(shí)現(xiàn)的功能不符。根據(jù)邏輯分析來看,程序本身似乎沒有問題,那么問題出在哪里呢?
讓我們發(fā)動(dòng)一下我們的小宇宙來分析一下吧,對(duì)于network1這個(gè)簡(jiǎn)單的不能再簡(jiǎn)單的語句而言,不可能有錯(cuò)啊,那問題是不是出在fb塊的調(diào)用部分呢?我們來設(shè)想一下:當(dāng)set_trig(m100.0)為true時(shí),程序會(huì)對(duì)rs_result(m100.2)進(jìn)行了置位操作,但結(jié)果卻是該變量被復(fù)位了。也就是說在執(zhí)行fb1塊時(shí)又將rs_result(m100.2)復(fù)位了,可是在fb1中的復(fù)位條件rset_tri(m100.1)并不滿足啊,為什么在執(zhí)行fb1塊后會(huì)將rs_result(m100.2)復(fù)位了呢?難道是plc有問題?非也非也這可是德國產(chǎn)品啊,質(zhì)量沒得說。哪問題出在哪呢?
要理解清楚這個(gè)問題,我們先要從fb功能塊內(nèi)部參數(shù)傳遞的機(jī)制說起。從很多場(chǎng)合我們都可以了解到:fb塊區(qū)別于fc塊主要在于每個(gè)fb塊都需要一個(gè)指定的背景數(shù)據(jù)塊,這個(gè)指定的背景數(shù)據(jù)塊用來存放fb塊的實(shí)際參數(shù)。其工作原理是,對(duì)于fb塊定義的in類型接口參數(shù),在fb塊被調(diào)用執(zhí)行時(shí),將實(shí)參傳遞給背景數(shù)據(jù)塊中形參的對(duì)應(yīng)地址,并用于fb內(nèi)部的邏輯運(yùn)算;對(duì)于fb塊定義的out類型接口參數(shù),在fb塊被調(diào)用執(zhí)行時(shí)將fb內(nèi)部的邏輯運(yùn)算結(jié)果給出到背景數(shù)據(jù)塊中形參的對(duì)應(yīng)地址,然后再將背景數(shù)據(jù)塊中形參的對(duì)應(yīng)地址的值傳遞給實(shí)參,得到實(shí)際的輸出結(jié)果。
根據(jù)fb功能塊接口參數(shù)傳遞的機(jī)制,我們可以看到在fb塊執(zhí)行過程中,輸出rset_tri(m100.1)的值取決于其對(duì)應(yīng)的形參在背景數(shù)據(jù)塊中的地址db1.dbx2.0,如圖4,而實(shí)際的db1.dbx2.0在執(zhí)行fb塊時(shí)一直為false,所以每次執(zhí)行完fb塊后,db1.dbx2.0將false賦值給rset_tri(m100.1),所以只要調(diào)用了fb1,那么實(shí)際得到的rset_tri(m100.1)的結(jié)果即為false,即我們上面實(shí)際測(cè)試時(shí)的結(jié)果。
圖4
我們可以驗(yàn)證這個(gè)結(jié)論,即通過修改db1.dbx2.0的值,可以直接改變輸出參數(shù)rset_tri(m100.1)的結(jié)果,而不論ob1中是否對(duì)rset_tri(m100.1)進(jìn)行了置位操作,如圖5所示。
圖5
既然我們已經(jīng)分析出問題出現(xiàn)在fb塊上,那么這個(gè)問題如何解決呢?
我們知道對(duì)于fb功能塊,除了in、out類型接口參數(shù),還有一個(gè)in_out類型接口參數(shù)。對(duì)于in_out類型的接口參數(shù),在調(diào)用執(zhí)行時(shí)首先將實(shí)參讀入,然后進(jìn)行邏輯運(yùn)算,最后再將邏輯運(yùn)算的結(jié)果傳遞給實(shí)參進(jìn)行輸出。可見相對(duì)于out類型接口參數(shù)而言,in_out類型接口參數(shù)是要先讀入實(shí)際參數(shù)的值,這樣就可以保持上面的邏輯運(yùn)算結(jié)果不會(huì)因?yàn)閒b塊的調(diào)用執(zhí)行而被修改。
所以我們可以將fb1作如下修改,如圖6所示。
圖6 fb1
圖7 修改后在ob1中調(diào)用fb1
修改程序后進(jìn)行測(cè)試,結(jié)果與預(yù)想的邏輯一致,即可以通過set_trig(m100.0)、rset_tri(m100.1)對(duì)rs_result(m100.2)進(jìn)行置位、復(fù)位操作,如圖8所示
圖8
現(xiàn)在我們簡(jiǎn)單總結(jié)一下:fb功能塊在調(diào)用時(shí),外部實(shí)際參數(shù)通過輸入、輸出和輸入/輸出接口傳遞給其背景數(shù)據(jù)塊對(duì)應(yīng)的地址。在fb內(nèi)部,程序直接操作背景數(shù)據(jù)塊地址進(jìn)行邏輯運(yùn)算。對(duì)于fb功能塊的使用我們要特別注意參數(shù)傳遞的規(guī)則。這些規(guī)則很隱蔽,一般不易引起我們的重視,并且在出現(xiàn)問題時(shí),如果不了解這些規(guī)則那就真的是猜的中開頭,猜不中結(jié)尾,出錯(cuò)成為新常態(tài)了。
上一個(gè):機(jī)箱生產(chǎn)加工廠(電腦機(jī)箱加工廠)
下一個(gè):筆記本電腦大小尺寸在哪里查,在筆記本怎么看尺寸大小

win7任務(wù)欄aero peek設(shè)置為灰色(win7任務(wù)欄aero peek設(shè)置為灰色)
惠普打印機(jī)型號(hào)后綴含義(惠普打印機(jī)的型號(hào)數(shù)字都代表什么)
edge瀏覽器擴(kuò)展程序在哪個(gè)文件夾(win10新版edge瀏覽器)
什么樣的普洱茶值得收藏?怎樣收藏比較好?
php array轉(zhuǎn)xml的方法
隧道二次襯砌標(biāo)準(zhǔn)有哪些?
生物農(nóng)藥防治棗食葉害蟲
變壓器的縱聯(lián)差動(dòng)保護(hù)應(yīng)符合的要求有哪些?
win10硬盤加密解除(w10硬盤加密怎么解除)
普洱緊壓茶可不能亂撬
十八禁 网站在线观看免费视频_2020av天堂网_一 级 黄 色 片免费网站_绝顶高潮合集Videos