最近在網(wǎng)上搜索到了一道plc面試題,我先把作者的原話搬上來:% ~8 j$ }- K" E" _! n8 r( {% q
PLC編程-關(guān)于一道簡單面試題 2011年04月25日 我給出的筆試題中,其中有一道是要求當I0.0為1時,Q7.0-Q7.7這八個燈以5s間隔依次點亮,每個亮5s,走馬燈式循環(huán),直到I0.0為0時停止。 結(jié)果很是失望,一年半時間里,面試過不知道多少個人,情況大致是這樣: 70%的人用各種點的串并聯(lián)加定時器來搭,結(jié)果仍然是做不出來; 約10%的人用上面的辦法做成功了; 約10%的人用計數(shù)器(C)對5S脈沖計數(shù),之后如下方式輸出: LD C==0 OUT Q7.0;...........................................LD C==7 OUT Q7.7 之后C==8時清零,重復(fù)以上動作。這樣也算實現(xiàn)了。 約10%的人用移位的方法實現(xiàn),這才是我期待的答案。討論答案的時候有人提及某些小型PLC可能會沒有循環(huán)移位指令,提醒一下,再差的PLC也會支持四則運算,自動化專業(yè)總得學(xué)過單片機的吧,那怎么想不到整數(shù)乘2就相當于左移,除2就相當于右移呢?再利用上進位寄存器或余數(shù)寄存器判斷復(fù)位不就可以了,就算不知道進位寄存器或余數(shù)寄存器,那么可以在這個數(shù)為H80時不做乘法而為其賦H01,或為H01時不做除法而為其賦H80就可以了。 結(jié)果就是這樣,我還沒要求必須完整給出程序,思路正確就行,當然能直接給出程序最好。 而我最期待的,是采用循環(huán)加尋址操作,因為移位畢竟有限制,超過32位或64位就不能直接實現(xiàn)了,只能自己對多寄存器移位同時控制好數(shù)據(jù)的同步。而用尋址,可以很方便的擴展這個功能。我們設(shè)計一個算法時,除了要解決當前問題外,還要考慮這個算法能不能重用,如何做到重用,這樣在類似的項目中可以方便套用它,會提高不少效率。 當然這種簡單的東西實際工作是用不到的,我只是需要了解對方的編程思想以及對PLC的理解。雖然最初PLC是為了代替繼電接觸器而生,但時至今日,這東西已經(jīng)有了突飛猛進的發(fā)展,如果我們在工作兩三年后,還是只會用這么簡單的方式解決問題,那就有點說不過去了。這么簡單的問題,都要浪費上很多時間,工作效率大打折扣,結(jié)果還要死不少腦細胞。有人做這題用一個多小時最后做不對,有人兩分鐘就直接寫完程序了,那一個系統(tǒng)上萬步的程序,時間上就要差多少,更不要提質(zhì)量了。 有人說,怕這樣用PLC,會不穩(wěn)定。我說,如果擔心這個,那就不要用PLC了,既然它提供了這些功能,就應(yīng)該是通過了測試的。雖然我們要把有可能出現(xiàn)的問題都考慮周全,以保證系統(tǒng)的可靠性,但天災(zāi)人禍的事任誰也沒有辦法的。如果真發(fā)生這樣的問題,你可以直接給PLC廠家發(fā)郵件報告這個BUG。 其實如果我們單片機或匯編了解得多一點,會發(fā)現(xiàn)PLC很容易,指令系統(tǒng)都差不多,基本上就照著單片機的指令來的,當然有的提供了一些更高級一些的功能,如通信類指令,數(shù)據(jù)表格類指令等,另外如ST語言還可以操作數(shù)組,甚至有的PLC如AB能搞出類似對象的數(shù)據(jù)結(jié)構(gòu),但編程思想基本上還是一致的;蛟S因為我是學(xué)機械的,而當初又專門學(xué)過匯編,所以在使用PLC時才喜歡套用匯編的方式吧,雖然大學(xué)也開過兩門PLC課程。 發(fā)發(fā)牢騷,希望能提醒剛進入工控這個行業(yè)的同行們,多一些創(chuàng)新思維,眼界要放寬,多接觸些新東西,不要書上說老師說網(wǎng)上說,自己想出來的,未必就比別人差,如果所有的人都是書上說老師說網(wǎng)上說的,那人類不要發(fā)展了,早點刨坑把自己埋了吧。 ————————————————分割線————— —————————分割線— _____—————————————— 見到這個題目后我也做了一遍,用三菱fx2n系列,第一次用的是定時器控制下一個燈,當下一個燈亮起的時候,同時使用復(fù)位指令對前一個燈置0.寫的程序見圖。(沒有寫完8個燈,只寫了4個燈)。調(diào)試后沒有問題。 第二次是按照上面那個面試官的思路寫的。問題就出現(xiàn)了,只能運行到第三個燈,后面的不能運行。(附圖是我更改了幾次的程序,開始的時候還使用了觸電比較指令也一樣沒有到達預(yù)期目的) 現(xiàn)在想請教一下,假如我按照面試官的思路(即使用四則運算的乘法mul)該如何修改我的這段程序?謝謝! [. G: Y9 O, Z% R6 _( }0 @
|