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